{"version":3,"file":"Du1nYMpX.js","sources":["../../../../node_modules/vuetify/lib/components/VNavigationDrawer/sticky.mjs","../../../../node_modules/vuetify/lib/composables/touch.mjs","../../../../node_modules/vuetify/lib/components/VNavigationDrawer/touch.mjs","../../../../node_modules/vuetify/lib/components/VNavigationDrawer/VNavigationDrawer.mjs"],"sourcesContent":["// Utilities\nimport { computed, onBeforeUnmount, onMounted, shallowRef, watch } from 'vue';\nimport { convertToUnit } from \"../../util/index.mjs\"; // Types\nexport function useSticky(_ref) {\n let {\n rootEl,\n isSticky,\n layoutItemStyles\n } = _ref;\n const isStuck = shallowRef(false);\n const stuckPosition = shallowRef(0);\n const stickyStyles = computed(() => {\n const side = typeof isStuck.value === 'boolean' ? 'top' : isStuck.value;\n return [isSticky.value ? {\n top: 'auto',\n bottom: 'auto',\n height: undefined\n } : undefined, isStuck.value ? {\n [side]: convertToUnit(stuckPosition.value)\n } : {\n top: layoutItemStyles.value.top\n }];\n });\n onMounted(() => {\n watch(isSticky, val => {\n if (val) {\n window.addEventListener('scroll', onScroll, {\n passive: true\n });\n } else {\n window.removeEventListener('scroll', onScroll);\n }\n }, {\n immediate: true\n });\n });\n onBeforeUnmount(() => {\n window.removeEventListener('scroll', onScroll);\n });\n let lastScrollTop = 0;\n function onScroll() {\n const direction = lastScrollTop > window.scrollY ? 'up' : 'down';\n const rect = rootEl.value.getBoundingClientRect();\n const layoutTop = parseFloat(layoutItemStyles.value.top ?? 0);\n const top = window.scrollY - Math.max(0, stuckPosition.value - layoutTop);\n const bottom = rect.height + Math.max(stuckPosition.value, layoutTop) - window.scrollY - window.innerHeight;\n const bodyScroll = parseFloat(getComputedStyle(rootEl.value).getPropertyValue('--v-body-scroll-y')) || 0;\n if (rect.height < window.innerHeight - layoutTop) {\n isStuck.value = 'top';\n stuckPosition.value = layoutTop;\n } else if (direction === 'up' && isStuck.value === 'bottom' || direction === 'down' && isStuck.value === 'top') {\n stuckPosition.value = window.scrollY + rect.top - bodyScroll;\n isStuck.value = true;\n } else if (direction === 'down' && bottom <= 0) {\n stuckPosition.value = 0;\n isStuck.value = 'bottom';\n } else if (direction === 'up' && top <= 0) {\n if (!bodyScroll) {\n stuckPosition.value = rect.top + top;\n isStuck.value = 'top';\n } else if (isStuck.value !== 'top') {\n stuckPosition.value = -top + bodyScroll + layoutTop;\n isStuck.value = 'top';\n }\n }\n lastScrollTop = window.scrollY;\n }\n return {\n isStuck,\n stickyStyles\n };\n}\n//# sourceMappingURL=sticky.mjs.map","// Utilities\nimport { CircularBuffer } from \"../util/index.mjs\";\nconst HORIZON = 100; // ms\nconst HISTORY = 20; // number of samples to keep\n\n/** @see https://android.googlesource.com/platform/frameworks/native/+/master/libs/input/VelocityTracker.cpp */\nfunction kineticEnergyToVelocity(work) {\n const sqrt2 = 1.41421356237;\n return (work < 0 ? -1.0 : 1.0) * Math.sqrt(Math.abs(work)) * sqrt2;\n}\n\n/**\n * Returns pointer velocity in px/s\n */\nexport function calculateImpulseVelocity(samples) {\n // The input should be in reversed time order (most recent sample at index i=0)\n if (samples.length < 2) {\n // if 0 or 1 points, velocity is zero\n return 0;\n }\n // if (samples[1].t > samples[0].t) {\n // // Algorithm will still work, but not perfectly\n // consoleWarn('Samples provided to calculateImpulseVelocity in the wrong order')\n // }\n if (samples.length === 2) {\n // if 2 points, basic linear calculation\n if (samples[1].t === samples[0].t) {\n // consoleWarn(`Events have identical time stamps t=${samples[0].t}, setting velocity = 0`)\n return 0;\n }\n return (samples[1].d - samples[0].d) / (samples[1].t - samples[0].t);\n }\n // Guaranteed to have at least 3 points here\n // start with the oldest sample and go forward in time\n let work = 0;\n for (let i = samples.length - 1; i > 0; i--) {\n if (samples[i].t === samples[i - 1].t) {\n // consoleWarn(`Events have identical time stamps t=${samples[i].t}, skipping sample`)\n continue;\n }\n const vprev = kineticEnergyToVelocity(work); // v[i-1]\n const vcurr = (samples[i].d - samples[i - 1].d) / (samples[i].t - samples[i - 1].t); // v[i]\n work += (vcurr - vprev) * Math.abs(vcurr);\n if (i === samples.length - 1) {\n work *= 0.5;\n }\n }\n return kineticEnergyToVelocity(work) * 1000;\n}\nexport function useVelocity() {\n const touches = {};\n function addMovement(e) {\n Array.from(e.changedTouches).forEach(touch => {\n const samples = touches[touch.identifier] ?? (touches[touch.identifier] = new CircularBuffer(HISTORY));\n samples.push([e.timeStamp, touch]);\n });\n }\n function endTouch(e) {\n Array.from(e.changedTouches).forEach(touch => {\n delete touches[touch.identifier];\n });\n }\n function getVelocity(id) {\n const samples = touches[id]?.values().reverse();\n if (!samples) {\n throw new Error(`No samples for touch id ${id}`);\n }\n const newest = samples[0];\n const x = [];\n const y = [];\n for (const val of samples) {\n if (newest[0] - val[0] > HORIZON) break;\n x.push({\n t: val[0],\n d: val[1].clientX\n });\n y.push({\n t: val[0],\n d: val[1].clientY\n });\n }\n return {\n x: calculateImpulseVelocity(x),\n y: calculateImpulseVelocity(y),\n get direction() {\n const {\n x,\n y\n } = this;\n const [absX, absY] = [Math.abs(x), Math.abs(y)];\n return absX > absY && x >= 0 ? 'right' : absX > absY && x <= 0 ? 'left' : absY > absX && y >= 0 ? 'down' : absY > absX && y <= 0 ? 'up' : oops();\n }\n };\n }\n return {\n addMovement,\n endTouch,\n getVelocity\n };\n}\nfunction oops() {\n throw new Error();\n}\n//# sourceMappingURL=touch.mjs.map","// Composables\nimport { useVelocity } from \"../../composables/touch.mjs\"; // Utilities\nimport { computed, onBeforeUnmount, onMounted, shallowRef } from 'vue';\n\n// Types\n\nexport function useTouch(_ref) {\n let {\n isActive,\n isTemporary,\n width,\n touchless,\n position\n } = _ref;\n onMounted(() => {\n window.addEventListener('touchstart', onTouchstart, {\n passive: true\n });\n window.addEventListener('touchmove', onTouchmove, {\n passive: false\n });\n window.addEventListener('touchend', onTouchend, {\n passive: true\n });\n });\n onBeforeUnmount(() => {\n window.removeEventListener('touchstart', onTouchstart);\n window.removeEventListener('touchmove', onTouchmove);\n window.removeEventListener('touchend', onTouchend);\n });\n const isHorizontal = computed(() => ['left', 'right'].includes(position.value));\n const {\n addMovement,\n endTouch,\n getVelocity\n } = useVelocity();\n let maybeDragging = false;\n const isDragging = shallowRef(false);\n const dragProgress = shallowRef(0);\n const offset = shallowRef(0);\n let start;\n function getOffset(pos, active) {\n return (position.value === 'left' ? pos : position.value === 'right' ? document.documentElement.clientWidth - pos : position.value === 'top' ? pos : position.value === 'bottom' ? document.documentElement.clientHeight - pos : oops()) - (active ? width.value : 0);\n }\n function getProgress(pos) {\n let limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n const progress = position.value === 'left' ? (pos - offset.value) / width.value : position.value === 'right' ? (document.documentElement.clientWidth - pos - offset.value) / width.value : position.value === 'top' ? (pos - offset.value) / width.value : position.value === 'bottom' ? (document.documentElement.clientHeight - pos - offset.value) / width.value : oops();\n return limit ? Math.max(0, Math.min(1, progress)) : progress;\n }\n function onTouchstart(e) {\n if (touchless.value) return;\n const touchX = e.changedTouches[0].clientX;\n const touchY = e.changedTouches[0].clientY;\n const touchZone = 25;\n const inTouchZone = position.value === 'left' ? touchX < touchZone : position.value === 'right' ? touchX > document.documentElement.clientWidth - touchZone : position.value === 'top' ? touchY < touchZone : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - touchZone : oops();\n const inElement = isActive.value && (position.value === 'left' ? touchX < width.value : position.value === 'right' ? touchX > document.documentElement.clientWidth - width.value : position.value === 'top' ? touchY < width.value : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - width.value : oops());\n if (inTouchZone || inElement || isActive.value && isTemporary.value) {\n maybeDragging = true;\n start = [touchX, touchY];\n offset.value = getOffset(isHorizontal.value ? touchX : touchY, isActive.value);\n dragProgress.value = getProgress(isHorizontal.value ? touchX : touchY);\n endTouch(e);\n addMovement(e);\n }\n }\n function onTouchmove(e) {\n const touchX = e.changedTouches[0].clientX;\n const touchY = e.changedTouches[0].clientY;\n if (maybeDragging) {\n if (!e.cancelable) {\n maybeDragging = false;\n return;\n }\n const dx = Math.abs(touchX - start[0]);\n const dy = Math.abs(touchY - start[1]);\n const thresholdMet = isHorizontal.value ? dx > dy && dx > 3 : dy > dx && dy > 3;\n if (thresholdMet) {\n isDragging.value = true;\n maybeDragging = false;\n } else if ((isHorizontal.value ? dy : dx) > 3) {\n maybeDragging = false;\n }\n }\n if (!isDragging.value) return;\n e.preventDefault();\n addMovement(e);\n const progress = getProgress(isHorizontal.value ? touchX : touchY, false);\n dragProgress.value = Math.max(0, Math.min(1, progress));\n if (progress > 1) {\n offset.value = getOffset(isHorizontal.value ? touchX : touchY, true);\n } else if (progress < 0) {\n offset.value = getOffset(isHorizontal.value ? touchX : touchY, false);\n }\n }\n function onTouchend(e) {\n maybeDragging = false;\n if (!isDragging.value) return;\n addMovement(e);\n isDragging.value = false;\n const velocity = getVelocity(e.changedTouches[0].identifier);\n const vx = Math.abs(velocity.x);\n const vy = Math.abs(velocity.y);\n const thresholdMet = isHorizontal.value ? vx > vy && vx > 400 : vy > vx && vy > 3;\n if (thresholdMet) {\n isActive.value = velocity.direction === ({\n left: 'right',\n right: 'left',\n top: 'down',\n bottom: 'up'\n }[position.value] || oops());\n } else {\n isActive.value = dragProgress.value > 0.5;\n }\n }\n const dragStyles = computed(() => {\n return isDragging.value ? {\n transform: position.value === 'left' ? `translateX(calc(-100% + ${dragProgress.value * width.value}px))` : position.value === 'right' ? `translateX(calc(100% - ${dragProgress.value * width.value}px))` : position.value === 'top' ? `translateY(calc(-100% + ${dragProgress.value * width.value}px))` : position.value === 'bottom' ? `translateY(calc(100% - ${dragProgress.value * width.value}px))` : oops(),\n transition: 'none'\n } : undefined;\n });\n return {\n isDragging,\n dragProgress,\n dragStyles\n };\n}\nfunction oops() {\n throw new Error();\n}\n//# sourceMappingURL=touch.mjs.map","import { mergeProps as _mergeProps, createVNode as _createVNode, Fragment as _Fragment } from \"vue\";\n// Styles\nimport \"./VNavigationDrawer.css\";\n\n// Composables\nimport { useSticky } from \"./sticky.mjs\";\nimport { useTouch } from \"./touch.mjs\";\nimport { useRtl } from \"../../composables/index.mjs\";\nimport { makeBorderProps, useBorder } from \"../../composables/border.mjs\";\nimport { useBackgroundColor } from \"../../composables/color.mjs\";\nimport { makeComponentProps } from \"../../composables/component.mjs\";\nimport { provideDefaults } from \"../../composables/defaults.mjs\";\nimport { makeDisplayProps, useDisplay } from \"../../composables/display.mjs\";\nimport { makeElevationProps, useElevation } from \"../../composables/elevation.mjs\";\nimport { makeLayoutItemProps, useLayoutItem } from \"../../composables/layout.mjs\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.mjs\";\nimport { makeRoundedProps, useRounded } from \"../../composables/rounded.mjs\";\nimport { useRouter } from \"../../composables/router.mjs\";\nimport { useScopeId } from \"../../composables/scopeId.mjs\";\nimport { useSsrBoot } from \"../../composables/ssrBoot.mjs\";\nimport { makeTagProps } from \"../../composables/tag.mjs\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.mjs\";\nimport { useToggleScope } from \"../../composables/toggleScope.mjs\"; // Utilities\nimport { computed, nextTick, onBeforeMount, ref, shallowRef, toRef, Transition, watch } from 'vue';\nimport { genericComponent, propsFactory, toPhysical, useRender } from \"../../util/index.mjs\"; // Types\nconst locations = ['start', 'end', 'left', 'right', 'top', 'bottom'];\nexport const makeVNavigationDrawerProps = propsFactory({\n color: String,\n disableResizeWatcher: Boolean,\n disableRouteWatcher: Boolean,\n expandOnHover: Boolean,\n floating: Boolean,\n modelValue: {\n type: Boolean,\n default: null\n },\n permanent: Boolean,\n rail: {\n type: Boolean,\n default: null\n },\n railWidth: {\n type: [Number, String],\n default: 56\n },\n scrim: {\n type: [Boolean, String],\n default: true\n },\n image: String,\n temporary: Boolean,\n touchless: Boolean,\n width: {\n type: [Number, String],\n default: 256\n },\n location: {\n type: String,\n default: 'start',\n validator: value => locations.includes(value)\n },\n sticky: Boolean,\n ...makeBorderProps(),\n ...makeComponentProps(),\n ...makeDisplayProps(),\n ...makeElevationProps(),\n ...makeLayoutItemProps(),\n ...makeRoundedProps(),\n ...makeTagProps({\n tag: 'nav'\n }),\n ...makeThemeProps()\n}, 'VNavigationDrawer');\nexport const VNavigationDrawer = genericComponent()({\n name: 'VNavigationDrawer',\n props: makeVNavigationDrawerProps(),\n emits: {\n 'update:modelValue': val => true,\n 'update:rail': val => true\n },\n setup(props, _ref) {\n let {\n attrs,\n emit,\n slots\n } = _ref;\n const {\n isRtl\n } = useRtl();\n const {\n themeClasses\n } = provideTheme(props);\n const {\n borderClasses\n } = useBorder(props);\n const {\n backgroundColorClasses,\n backgroundColorStyles\n } = useBackgroundColor(toRef(props, 'color'));\n const {\n elevationClasses\n } = useElevation(props);\n const {\n displayClasses,\n mobile\n } = useDisplay(props);\n const {\n roundedClasses\n } = useRounded(props);\n const router = useRouter();\n const isActive = useProxiedModel(props, 'modelValue', null, v => !!v);\n const {\n ssrBootStyles\n } = useSsrBoot();\n const {\n scopeId\n } = useScopeId();\n const rootEl = ref();\n const isHovering = shallowRef(false);\n const width = computed(() => {\n return props.rail && props.expandOnHover && isHovering.value ? Number(props.width) : Number(props.rail ? props.railWidth : props.width);\n });\n const location = computed(() => {\n return toPhysical(props.location, isRtl.value);\n });\n const isTemporary = computed(() => !props.permanent && (mobile.value || props.temporary));\n const isSticky = computed(() => props.sticky && !isTemporary.value && location.value !== 'bottom');\n useToggleScope(() => props.expandOnHover && props.rail != null, () => {\n watch(isHovering, val => emit('update:rail', !val));\n });\n useToggleScope(() => !props.disableResizeWatcher, () => {\n watch(isTemporary, val => !props.permanent && nextTick(() => isActive.value = !val));\n });\n useToggleScope(() => !props.disableRouteWatcher && !!router, () => {\n watch(router.currentRoute, () => isTemporary.value && (isActive.value = false));\n });\n watch(() => props.permanent, val => {\n if (val) isActive.value = true;\n });\n onBeforeMount(() => {\n if (props.modelValue != null || isTemporary.value) return;\n isActive.value = props.permanent || !mobile.value;\n });\n const {\n isDragging,\n dragProgress,\n dragStyles\n } = useTouch({\n isActive,\n isTemporary,\n width,\n touchless: toRef(props, 'touchless'),\n position: location\n });\n const layoutSize = computed(() => {\n const size = isTemporary.value ? 0 : props.rail && props.expandOnHover ? Number(props.railWidth) : width.value;\n return isDragging.value ? size * dragProgress.value : size;\n });\n const {\n layoutItemStyles,\n layoutItemScrimStyles\n } = useLayoutItem({\n id: props.name,\n order: computed(() => parseInt(props.order, 10)),\n position: location,\n layoutSize,\n elementSize: width,\n active: computed(() => isActive.value || isDragging.value),\n disableTransitions: computed(() => isDragging.value),\n absolute: computed(() =>\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n props.absolute || isSticky.value && typeof isStuck.value !== 'string')\n });\n const {\n isStuck,\n stickyStyles\n } = useSticky({\n rootEl,\n isSticky,\n layoutItemStyles\n });\n const scrimColor = useBackgroundColor(computed(() => {\n return typeof props.scrim === 'string' ? props.scrim : null;\n }));\n const scrimStyles = computed(() => ({\n ...(isDragging.value ? {\n opacity: dragProgress.value * 0.2,\n transition: 'none'\n } : undefined),\n ...layoutItemScrimStyles.value\n }));\n provideDefaults({\n VList: {\n bgColor: 'transparent'\n }\n });\n function onMouseenter() {\n isHovering.value = true;\n }\n function onMouseleave() {\n isHovering.value = false;\n }\n useRender(() => {\n const hasImage = slots.image || props.image;\n return _createVNode(_Fragment, null, [_createVNode(props.tag, _mergeProps({\n \"ref\": rootEl,\n \"onMouseenter\": onMouseenter,\n \"onMouseleave\": onMouseleave,\n \"class\": ['v-navigation-drawer', `v-navigation-drawer--${location.value}`, {\n 'v-navigation-drawer--expand-on-hover': props.expandOnHover,\n 'v-navigation-drawer--floating': props.floating,\n 'v-navigation-drawer--is-hovering': isHovering.value,\n 'v-navigation-drawer--rail': props.rail,\n 'v-navigation-drawer--temporary': isTemporary.value,\n 'v-navigation-drawer--active': isActive.value,\n 'v-navigation-drawer--sticky': isSticky.value\n }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, displayClasses.value, elevationClasses.value, roundedClasses.value, props.class],\n \"style\": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]\n }, scopeId, attrs), {\n default: () => [hasImage && _createVNode(\"div\", {\n \"key\": \"image\",\n \"class\": \"v-navigation-drawer__img\"\n }, [slots.image ? slots.image?.({\n image: props.image\n }) : _createVNode(\"img\", {\n \"src\": props.image,\n \"alt\": \"\"\n }, null)]), slots.prepend && _createVNode(\"div\", {\n \"class\": \"v-navigation-drawer__prepend\"\n }, [slots.prepend?.()]), _createVNode(\"div\", {\n \"class\": \"v-navigation-drawer__content\"\n }, [slots.default?.()]), slots.append && _createVNode(\"div\", {\n \"class\": \"v-navigation-drawer__append\"\n }, [slots.append?.()])]\n }), _createVNode(Transition, {\n \"name\": \"fade-transition\"\n }, {\n default: () => [isTemporary.value && (isDragging.value || isActive.value) && !!props.scrim && _createVNode(\"div\", _mergeProps({\n \"class\": ['v-navigation-drawer__scrim', scrimColor.backgroundColorClasses.value],\n \"style\": [scrimStyles.value, scrimColor.backgroundColorStyles.value],\n \"onClick\": () => isActive.value = false\n }, scopeId), null)]\n })]);\n });\n return {\n isStuck\n };\n }\n});\n//# sourceMappingURL=VNavigationDrawer.mjs.map"],"names":["useSticky","_ref","rootEl","isSticky","layoutItemStyles","isStuck","shallowRef","stuckPosition","stickyStyles","computed","side","convertToUnit","onMounted","watch","val","onScroll","onBeforeUnmount","lastScrollTop","direction","rect","layoutTop","top","bottom","bodyScroll","HORIZON","HISTORY","kineticEnergyToVelocity","work","calculateImpulseVelocity","samples","i","vprev","vcurr","useVelocity","touches","addMovement","e","touch","CircularBuffer","endTouch","getVelocity","id","_a","newest","x","y","absX","absY","oops","useTouch","isActive","isTemporary","width","touchless","position","onTouchstart","onTouchmove","onTouchend","isHorizontal","maybeDragging","isDragging","dragProgress","offset","start","getOffset","pos","active","getProgress","limit","progress","touchX","touchY","touchZone","inTouchZone","inElement","dx","dy","velocity","vx","vy","dragStyles","locations","makeVNavigationDrawerProps","propsFactory","value","makeBorderProps","makeComponentProps","makeDisplayProps","makeElevationProps","makeLayoutItemProps","makeRoundedProps","makeTagProps","makeThemeProps","VNavigationDrawer","genericComponent","props","attrs","emit","slots","isRtl","useRtl","themeClasses","provideTheme","borderClasses","useBorder","backgroundColorClasses","backgroundColorStyles","useBackgroundColor","toRef","elevationClasses","useElevation","displayClasses","mobile","useDisplay","roundedClasses","useRounded","router","useRouter","useProxiedModel","v","ssrBootStyles","useSsrBoot","scopeId","useScopeId","ref","isHovering","location","toPhysical","useToggleScope","nextTick","onBeforeMount","layoutSize","size","layoutItemScrimStyles","useLayoutItem","scrimColor","scrimStyles","provideDefaults","onMouseenter","onMouseleave","useRender","hasImage","_createVNode","_Fragment","_mergeProps","_b","_c","_d","Transition"],"mappings":"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","debug_id":"8cb88ea1-4c84-51e6-a864-fd31fde0950f"}