@vuetify/nightly 3.0.0-next-20220107.0 → 3.0.0-next-20220112.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"vuetify.min.js","sources":["../src/util/box.ts","../src/util/animation.ts","../src/util/console.ts","../src/util/helpers.ts","../src/util/color/transformSRGB.ts","../src/util/color/transformCIELAB.ts","../src/util/colorUtils.ts","../src/composables/defaults.ts","../src/util/defineComponent.tsx","../src/util/createSimpleFunctional.ts","../src/util/dom.ts","../src/util/easing.ts","../src/util/getCurrentInstance.ts","../src/util/getScrollParent.ts","../src/util/globals.ts","../src/util/propsFactory.ts","../src/util/useRender.ts","../src/util/color/APCA.ts","../src/composables/theme.ts","../src/composables/layout.ts","../src/locale/en.ts","../src/locale/index.ts","../src/composables/rtl.ts","../src/components/VApp/VApp.tsx","../src/composables/dimensions.ts","../src/components/VResponsive/VResponsive.tsx","../src/directives/intersect/index.ts","../src/composables/transition.ts","../src/components/VImg/VImg.tsx","../src/composables/border.ts","../src/composables/density.ts","../src/composables/elevation.ts","../src/composables/rounded.ts","../src/composables/tag.ts","../src/composables/color.ts","../src/composables/proxiedModel.ts","../src/components/VAppBar/VAppBar.tsx","../src/composables/variant.tsx","../src/components/VBtnGroup/VBtnGroup.tsx","../src/composables/group.ts","../src/components/VBtnToggle/VBtnToggle.tsx","../src/composables/size.ts","../src/composables/icons.tsx","../src/components/VIcon/VIcon.tsx","../src/composables/position.ts","../src/composables/router.tsx","../src/directives/ripple/index.ts","../src/components/VBtn/VBtn.tsx","../src/components/VAppBar/VAppBarNavIcon.tsx","../src/components/VAppBar/VAppBarTitle.tsx","../src/components/VAvatar/VAvatar.tsx","../src/components/VAlert/VAlert.tsx","../src/components/VBadge/VBadge.tsx","../src/components/VBanner/VBannerActions.ts","../src/components/VBanner/VBannerAvatar.tsx","../src/components/VBanner/VBannerContent.ts","../src/components/VBanner/VBannerText.ts","../src/composables/display.ts","../src/components/VBanner/VBanner.tsx","../src/components/VBottomNavigation/VBottomNavigation.tsx","../src/components/VBreadcrumbs/shared.ts","../src/components/VBreadcrumbs/VBreadcrumbsItem.tsx","../src/components/VBreadcrumbs/VBreadcrumbsDivider.tsx","../src/components/VBreadcrumbs/VBreadcrumbs.tsx","../src/components/VCard/VCardActions.ts","../src/components/VCard/VCardAvatar.ts","../src/components/VCard/VCardHeader.ts","../src/components/VCard/VCardHeaderText.ts","../src/components/VCard/VCardImg.ts","../src/components/VCard/VCardSubtitle.ts","../src/components/VCard/VCardText.ts","../src/components/VCard/VCardTitle.ts","../src/components/VCard/VCard.tsx","../src/components/transitions/createTransition.ts","../src/components/transitions/expand-transition.ts","../src/components/transitions/dialog-transition.tsx","../src/components/transitions/index.ts","../src/components/VMessages/VMessages.tsx","../src/composables/form.ts","../src/composables/validation.ts","../src/components/VInput/VInput.tsx","../src/components/VLabel/VLabel.tsx","../src/components/VSelectionControlGroup/VSelectionControlGroup.tsx","../src/components/VSelectionControl/VSelectionControl.tsx","../src/components/VCheckbox/VCheckbox.tsx","../src/components/VChip/VChip.tsx","../src/components/VCode/index.ts","../src/components/VCounter/VCounter.tsx","../src/components/VDefaultsProvider/VDefaultsProvider.tsx","../src/composables/delay.ts","../src/components/VOverlay/useActivator.tsx","../src/components/VOverlay/util/anchor.ts","../src/components/VOverlay/util/point.ts","../src/components/VOverlay/positionStrategies.ts","../src/util/isFixedPosition.ts","../src/components/VOverlay/requestNewFrame.ts","../src/components/VOverlay/scrollStrategies.ts","../src/composables/teleport.ts","../src/composables/lazy.ts","../src/composables/stack.ts","../src/directives/click-outside/index.ts","../src/components/VOverlay/VOverlay.tsx","../src/components/VDialog/VDialog.tsx","../src/components/VDivider/VDivider.tsx","../src/components/VExpansionPanel/VExpansionPanels.tsx","../src/components/VExpansionPanel/VExpansionPanelTitle.tsx","../src/components/VExpansionPanel/VExpansionPanelText.tsx","../src/components/VExpansionPanel/VExpansionPanel.tsx","../src/components/VField/VFieldLabel.tsx","../src/composables/intersectionObserver.ts","../src/components/VProgressLinear/VProgressLinear.tsx","../src/composables/loader.tsx","../src/composables/focus.ts","../src/components/VField/VField.tsx","../src/composables/locale.ts","../src/components/VFileInput/VFileInput.tsx","../src/components/VFooter/VFooter.tsx","../src/components/VForm/VForm.tsx","../src/components/VGrid/VContainer.tsx","../src/components/VGrid/VCol.ts","../src/components/VGrid/VRow.ts","../src/components/VGrid/VSpacer.ts","../src/components/VHover/VHover.tsx","../src/components/VItemGroup/VItemGroup.tsx","../src/components/VItemGroup/VItem.tsx","../src/components/VKbd/index.ts","../src/components/VLayout/VLayout.tsx","../src/components/VLayout/VLayoutItem.tsx","../src/components/VLazy/VLazy.tsx","../src/components/VList/VListSubheader.tsx","../src/composables/nested/openStrategies.ts","../src/composables/nested/selectStrategies.ts","../src/composables/nested/activeStrategies.ts","../src/composables/nested/nested.ts","../src/components/VList/VListGroup.tsx","../src/components/VList/VListItemAvatar.tsx","../src/components/VList/VListItemHeader.ts","../src/components/VList/VListItemSubtitle.ts","../src/components/VList/VListItemTitle.ts","../src/components/VList/VListItem.tsx","../src/components/VList/VListChildren.tsx","../src/components/VList/VList.tsx","../src/components/VList/VListImg.ts","../src/components/VList/VListItemMedia.tsx","../src/components/VLocaleProvider/VLocaleProvider.tsx","../src/components/VMain/VMain.tsx","../src/composables/ssrBoot.ts","../src/components/VMenu/VMenu.tsx","../src/composables/touch.ts","../src/components/VNavigationDrawer/touch.ts","../src/components/VNavigationDrawer/VNavigationDrawer.tsx","../src/components/VNoSsr/VNoSsr.tsx","../src/composables/hydration.ts","../src/components/VPagination/VPagination.tsx","../src/composables/resizeObserver.ts","../src/composables/refs.ts","../src/components/VParallax/VParallax.tsx","../src/components/VProgressCircular/VProgressCircular.tsx","../src/components/VRadio/VRadio.tsx","../src/components/VRadioGroup/VRadioGroup.tsx","../src/components/VSlider/slider.ts","../src/components/VSlider/VSliderThumb.tsx","../src/components/VSlider/VSliderTrack.tsx","../src/components/VRangeSlider/VRangeSlider.tsx","../src/components/VRating/VRating.tsx","../src/components/VSheet/VSheet.tsx","../src/components/VSlider/VSlider.tsx","../src/components/VSwitch/VSwitch.tsx","../src/components/VSystemBar/VSystemBar.tsx","../src/components/VTable/VTable.tsx","../src/components/VTextarea/VTextarea.tsx","../src/components/VTextField/VTextField.tsx","../src/composables/forwardRef.ts","../src/components/VThemeProvider/VThemeProvider.tsx","../src/components/VTimeline/shared.ts","../src/components/VTimeline/VTimelineDivider.tsx","../src/components/VTimeline/VTimelineItem.tsx","../src/components/VTimeline/VTimeline.tsx","../src/components/VTooltip/VTooltip.tsx","../src/components/VValidation/VValidation.tsx","../src/directives/mutate/index.ts","../src/directives/resize/index.ts","../src/directives/scroll/index.ts","../src/directives/touch/index.ts","../src/iconsets/mdi.ts","../src/framework.ts","../src/entry-bundler.ts"],"sourcesContent":["export class Box {\n x: number\n y: number\n width: number\n height: number\n\n constructor ({ x, y, width, height }: {\n x: number\n y: number\n width: number\n height: number\n }) {\n this.x = x\n this.y = y\n this.width = width\n this.height = height\n }\n\n get top () { return this.y }\n get bottom () { return this.y + this.height }\n get left () { return this.x }\n get right () { return this.x + this.width }\n}\n","import { Box } from '@/util/box'\n\n/** @see https://stackoverflow.com/a/57876601/2074736 */\nexport function nullifyTransforms (el: HTMLElement): Box {\n const rect = el.getBoundingClientRect()\n const style = getComputedStyle(el)\n const tx = style.transform\n\n if (tx) {\n let ta, sx, sy, dx, dy\n if (tx.startsWith('matrix3d(')) {\n ta = tx.slice(9, -1).split(/, /)\n sx = +ta[0]\n sy = +ta[5]\n dx = +ta[12]\n dy = +ta[13]\n } else if (tx.startsWith('matrix(')) {\n ta = tx.slice(7, -1).split(/, /)\n sx = +ta[0]\n sy = +ta[3]\n dx = +ta[4]\n dy = +ta[5]\n } else {\n return new Box(rect)\n }\n\n const to = style.transformOrigin\n const x = rect.x - dx - (1 - sx) * parseFloat(to)\n const y = rect.y - dy - (1 - sy) * parseFloat(to.slice(to.indexOf(' ') + 1))\n const w = sx ? rect.width / sx : el.offsetWidth\n const h = sy ? rect.height / sy : el.offsetHeight\n\n return new Box({ x, y, width: w, height: h })\n } else {\n return new Box(rect)\n }\n}\n","/* eslint-disable no-console */\n// import Vuetify from '../framework'\n\nfunction createMessage (message: string, vm?: any, parent?: any): string | void {\n // if (Vuetify.config.silent) return\n\n if (parent) {\n vm = {\n _isVue: true,\n $parent: parent,\n $options: vm,\n }\n }\n\n if (vm) {\n // Only show each message once per instance\n vm.$_alreadyWarned = vm.$_alreadyWarned || []\n if (vm.$_alreadyWarned.includes(message)) return\n vm.$_alreadyWarned.push(message)\n }\n\n return `[Vuetify] ${message}` + (\n vm ? generateComponentTrace(vm) : ''\n )\n}\n\nexport function consoleInfo (message: string, vm?: any, parent?: any): void {\n const newMessage = createMessage(message, vm, parent)\n newMessage != null && console.info(newMessage)\n}\n\nexport function consoleWarn (message: string, vm?: any, parent?: any): void {\n const newMessage = createMessage(message, vm, parent)\n newMessage != null && console.warn(newMessage)\n}\n\nexport function consoleError (message: string, vm?: any, parent?: any): void {\n const newMessage = createMessage(message, vm, parent)\n newMessage != null && console.error(newMessage)\n}\n\nexport function deprecate (original: string, replacement: string, vm?: any, parent?: any) {\n consoleWarn(`[UPGRADE] '${original}' is deprecated, use '${replacement}' instead.`, vm, parent)\n}\nexport function breaking (original: string, replacement: string, vm?: any, parent?: any) {\n consoleError(`[BREAKING] '${original}' has been removed, use '${replacement}' instead. For more information, see the upgrade guide https://github.com/vuetifyjs/vuetify/releases/tag/v2.0.0#user-content-upgrade-guide`, vm, parent)\n}\nexport function removed (original: string, vm?: any, parent?: any) {\n consoleWarn(`[REMOVED] '${original}' has been removed. You can safely omit it.`, vm, parent)\n}\n\n/**\n * Shamelessly stolen from vuejs/vue/blob/dev/src/core/util/debug.js\n */\n\nconst classifyRE = /(?:^|[-_])(\\w)/g\nconst classify = (str: string) => str\n .replace(classifyRE, c => c.toUpperCase())\n .replace(/[-_]/g, '')\n\nfunction formatComponentName (vm: any, includeFile?: boolean): string {\n if (vm.$root === vm) {\n return '<Root>'\n }\n const options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options || vm.constructor.options\n : vm || {}\n let name = options.name || options._componentTag\n const file = options.__file\n if (!name && file) {\n const match = file.match(/([^/\\\\]+)\\.vue$/)\n name = match?.[1]\n }\n\n return (\n (name ? `<${classify(name)}>` : `<Anonymous>`) +\n (file && includeFile !== false ? ` at ${file}` : '')\n )\n}\n\nfunction generateComponentTrace (vm: any): string {\n if (vm._isVue && vm.$parent) {\n const tree: any[] = []\n let currentRecursiveSequence = 0\n while (vm) {\n if (tree.length > 0) {\n const last: any = tree[tree.length - 1]\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++\n vm = vm.$parent\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence]\n currentRecursiveSequence = 0\n }\n }\n tree.push(vm)\n vm = vm.$parent\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map((vm, i) => `${\n i === 0 ? '---> ' : ' '.repeat(5 + i * 2)\n }${\n Array.isArray(vm)\n // eslint-disable-next-line sonarjs/no-nested-template-literals\n ? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)`\n : formatComponentName(vm)\n }`)\n .join('\\n')\n } else {\n return `\\n\\n(found in ${formatComponentName(vm)})`\n }\n}\n","// Utilities\nimport { camelize, Fragment, isRef, ref } from 'vue'\n\n// Types\nimport type { ComponentInternalInstance, ComponentPublicInstance, Ref, Slots, VNode, VNodeChild } from 'vue'\n\nexport function getNestedValue (obj: any, path: (string | number)[], fallback?: any): any {\n const last = path.length - 1\n\n if (last < 0) return obj === undefined ? fallback : obj\n\n for (let i = 0; i < last; i++) {\n if (obj == null) {\n return fallback\n }\n obj = obj[path[i]]\n }\n\n if (obj == null) return fallback\n\n return obj[path[last]] === undefined ? fallback : obj[path[last]]\n}\n\nexport function deepEqual (a: any, b: any): boolean {\n if (a === b) return true\n\n if (\n a instanceof Date &&\n b instanceof Date &&\n a.getTime() !== b.getTime()\n ) {\n // If the values are Date, compare them as timestamps\n return false\n }\n\n if (a !== Object(a) || b !== Object(b)) {\n // If the values aren't objects, they were already checked for equality\n return false\n }\n\n const props = Object.keys(a)\n\n if (props.length !== Object.keys(b).length) {\n // Different number of props, don't bother to check\n return false\n }\n\n return props.every(p => deepEqual(a[p], b[p]))\n}\n\nexport function getObjectValueByPath (obj: any, path: string, fallback?: any): any {\n // credit: http://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-with-string-key#comment55278413_6491621\n if (obj == null || !path || typeof path !== 'string') return fallback\n if (obj[path] !== undefined) return obj[path]\n path = path.replace(/\\[(\\w+)\\]/g, '.$1') // convert indexes to properties\n path = path.replace(/^\\./, '') // strip a leading dot\n return getNestedValue(obj, path.split('.'), fallback)\n}\n\ntype SelectItemKey = string | (string | number)[] | ((item: Record<string, any>, fallback?: any) => any)\n\nexport function getPropertyFromItem (\n item: object,\n property: SelectItemKey,\n fallback?: any\n): any {\n if (property == null) return item === undefined ? fallback : item\n\n if (item !== Object(item)) return fallback === undefined ? item : fallback\n\n if (typeof property === 'string') return getObjectValueByPath(item, property, fallback)\n\n if (Array.isArray(property)) return getNestedValue(item, property, fallback)\n\n if (typeof property !== 'function') return fallback\n\n const value = property(item, fallback)\n\n return typeof value === 'undefined' ? fallback : value\n}\n\nexport function createRange (length: number, start = 0): number[] {\n return Array.from({ length }, (v, k) => start + k)\n}\n\nexport function getZIndex (el?: Element | null): number {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return 0\n\n const index = +window.getComputedStyle(el).getPropertyValue('z-index')\n\n if (!index) return getZIndex(el.parentNode as Element)\n return index\n}\n\nconst tagsToReplace: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n}\n\nexport function escapeHTML (str: string): string {\n return str.replace(/[&<>]/g, tag => tagsToReplace[tag] || tag)\n}\n\nexport function filterObjectOnKeys<T, K extends keyof T> (obj: T, keys: K[]): { [N in K]: T[N] } {\n const filtered = {} as { [N in K]: T[N] }\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (typeof obj[key] !== 'undefined') {\n filtered[key] = obj[key]\n }\n }\n\n return filtered\n}\n\nexport function convertToUnit (str: number, unit?: string): string\nexport function convertToUnit (str: string | number | null | undefined, unit?: string): string | undefined\nexport function convertToUnit (str: string | number | null | undefined, unit = 'px'): string | undefined {\n if (str == null || str === '') {\n return undefined\n } else if (isNaN(+str!)) {\n return String(str)\n } else if (!isFinite(+str!)) {\n return undefined\n } else {\n return `${Number(str)}${unit}`\n }\n}\n\nexport function isObject (obj: any): obj is object {\n return obj !== null && typeof obj === 'object' && !Array.isArray(obj)\n}\n\nexport function isComponentInstance (obj: any): obj is ComponentPublicInstance {\n return obj?.$el\n}\n\n// KeyboardEvent.keyCode aliases\nexport const keyCodes = Object.freeze({\n enter: 13,\n tab: 9,\n delete: 46,\n esc: 27,\n space: 32,\n up: 38,\n down: 40,\n left: 37,\n right: 39,\n end: 35,\n home: 36,\n del: 46,\n backspace: 8,\n insert: 45,\n pageup: 33,\n pagedown: 34,\n shift: 16,\n})\n\nexport const keyValues = Object.freeze({\n enter: 'Enter',\n tab: 'Tab',\n delete: 'Delete',\n esc: 'Escape',\n space: 'Space',\n up: 'ArrowUp',\n down: 'ArrowDown',\n left: 'ArrowLeft',\n right: 'ArrowRight',\n end: 'End',\n home: 'Home',\n del: 'Delete',\n backspace: 'Backspace',\n insert: 'Insert',\n pageup: 'PageUp',\n pagedown: 'PageDown',\n shift: 'Shift',\n})\n\nexport function keys<O> (o: O) {\n return Object.keys(o) as (keyof O)[]\n}\n\ntype MaybePick<\n T extends object,\n U extends Extract<keyof T, string>\n> = Record<string, unknown> extends T ? Partial<Pick<T, U>> : Pick<T, U>\n\nexport function pick<\n T extends object,\n U extends Extract<keyof T, string>\n> (obj: T, paths: U[]): [yes: MaybePick<T, U>, no: Omit<T, U>]\nexport function pick<\n T extends object,\n U extends Extract<keyof T, string>\n> (obj: T, paths: (U | RegExp)[]): [yes: Partial<T>, no: Partial<T>]\nexport function pick<\n T extends object,\n U extends Extract<keyof T, string>\n> (obj: T, paths: (U | RegExp)[]): [yes: Partial<T>, no: Partial<T>] {\n const found = Object.create(null)\n const rest = Object.create(null)\n\n for (const key in obj) {\n if (\n paths.some(path => path instanceof RegExp\n ? path.test(key)\n : path === key\n )\n ) {\n found[key] = obj[key]\n } else {\n rest[key] = obj[key]\n }\n }\n\n return [found, rest]\n}\n\n/**\n * Filter attributes that should be applied to\n * the root element of a an input component. Remaining\n * attributes should be passed to the <input> element inside.\n */\nexport function filterInputAttrs (attrs: Record<string, unknown>) {\n return pick(attrs, ['class', 'style', 'id', /^data-/])\n}\n\n/**\n * Returns the set difference of B and A, i.e. the set of elements in B but not in A\n */\nexport function arrayDiff (a: any[], b: any[]): any[] {\n const diff: any[] = []\n for (let i = 0; i < b.length; i++) {\n if (!a.includes(b[i])) diff.push(b[i])\n }\n return diff\n}\n\ninterface ItemGroup<T> {\n name: string\n items: T[]\n}\n\nexport function groupItems<T extends any = any> (\n items: T[],\n groupBy: string[],\n groupDesc: boolean[]\n): ItemGroup<T>[] {\n const key = groupBy[0]\n const groups: ItemGroup<T>[] = []\n let current\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const val = getObjectValueByPath(item, key, null)\n if (current !== val) {\n current = val\n groups.push({\n name: val ?? '',\n items: [],\n })\n }\n groups[groups.length - 1].items.push(item)\n }\n return groups\n}\n\nexport function wrapInArray<T> (v: T | T[] | null | undefined): T[] {\n return v == null\n ? []\n : Array.isArray(v)\n ? v : [v]\n}\n\ntype DataTableCompareFunction<T = any> = (a: T, b: T) => number\nexport function sortItems<T extends any, K extends keyof T> (\n items: T[],\n sortBy: string[],\n sortDesc: boolean[],\n locale: string,\n customSorters?: Record<K, DataTableCompareFunction<T[K]>>\n): T[] {\n if (sortBy === null || !sortBy.length) return items\n const stringCollator = new Intl.Collator(locale, { sensitivity: 'accent', usage: 'sort' })\n\n return items.sort((a, b) => {\n for (let i = 0; i < sortBy.length; i++) {\n const sortKey = sortBy[i]\n\n let sortA = getObjectValueByPath(a, sortKey)\n let sortB = getObjectValueByPath(b, sortKey)\n\n if (sortDesc[i]) {\n [sortA, sortB] = [sortB, sortA]\n }\n\n if (customSorters?.[sortKey as K]) {\n const customResult = customSorters[sortKey as K](sortA, sortB)\n\n if (!customResult) continue\n\n return customResult\n }\n\n // Check if both cannot be evaluated\n if (sortA === null && sortB === null) {\n continue\n }\n\n // Dates should be compared numerically\n if (sortA instanceof Date && sortB instanceof Date) {\n return sortA.getTime() - sortB.getTime()\n }\n\n [sortA, sortB] = [sortA, sortB].map(s => (s || '').toString().toLocaleLowerCase())\n\n if (sortA !== sortB) {\n if (!isNaN(sortA) && !isNaN(sortB)) return Number(sortA) - Number(sortB)\n return stringCollator.compare(sortA, sortB)\n }\n }\n\n return 0\n })\n}\n\nexport function defaultFilter (value: any, search: string | null, item: any) {\n return value != null &&\n search != null &&\n typeof value !== 'boolean' &&\n value.toString().toLocaleLowerCase().indexOf(search.toLocaleLowerCase()) !== -1\n}\n\nexport function searchItems<T extends any = any> (items: T[], search: string): T[] {\n if (!search) return items\n search = search.toString().toLowerCase()\n if (search.trim() === '') return items\n\n return items.filter((item: any) => Object.keys(item).some(key => defaultFilter(getObjectValueByPath(item, key), search, item)))\n}\n\nexport function debounce (fn: Function, delay: number) {\n let timeoutId = 0 as any\n return (...args: any[]) => {\n clearTimeout(timeoutId)\n timeoutId = setTimeout(() => fn(...args), delay)\n }\n}\n\nexport function throttle<T extends (...args: any[]) => any> (fn: T, limit: number) {\n let throttling = false\n return (...args: Parameters<T>): void | ReturnType<T> => {\n if (!throttling) {\n throttling = true\n setTimeout(() => throttling = false, limit)\n return fn(...args)\n }\n }\n}\n\ntype Writable<T> = {\n -readonly [P in keyof T]: T[P]\n}\n\n/**\n * Filters slots to only those starting with `prefix`, removing the prefix\n */\nexport function getPrefixedSlots (prefix: string, slots: Slots): Slots {\n return Object.keys(slots)\n .filter(k => k.startsWith(prefix))\n .reduce<Writable<Slots>>((obj, k) => {\n obj[k.replace(prefix, '')] = slots[k]\n return obj\n }, {})\n}\n\nexport function clamp (value: number, min = 0, max = 1) {\n return Math.max(min, Math.min(max, value))\n}\n\nexport function padEnd (str: string, length: number, char = '0') {\n return str + char.repeat(Math.max(0, length - str.length))\n}\n\nexport function chunk (str: string, size = 1) {\n const chunked: string[] = []\n let index = 0\n while (index < str.length) {\n chunked.push(str.substr(index, size))\n index += size\n }\n return chunked\n}\n\nexport function humanReadableFileSize (bytes: number, base: 1000 | 1024 = 1000): string {\n if (bytes < base) {\n return `${bytes} B`\n }\n\n const prefix = base === 1024 ? ['Ki', 'Mi', 'Gi'] : ['k', 'M', 'G']\n let unit = -1\n while (Math.abs(bytes) >= base && unit < prefix.length - 1) {\n bytes /= base\n ++unit\n }\n return `${bytes.toFixed(1)} ${prefix[unit]}B`\n}\n\nexport function camelizeObjectKeys (obj: Record<string, any> | null | undefined) {\n if (!obj) return {}\n\n return Object.keys(obj).reduce((o: any, key: string) => {\n o[camelize(key)] = obj[key]\n return o\n }, {})\n}\n\nexport function mergeDeep (\n source: Record<string, any> = {},\n target: Record<string, any> = {},\n out: Record<string, any> = {},\n) {\n for (const key in source) {\n out[key] = source[key]\n }\n\n for (const key in target) {\n const sourceProperty = source[key]\n const targetProperty = target[key]\n\n // Only continue deep merging if\n // both properties are objects\n if (\n isObject(sourceProperty) &&\n isObject(targetProperty)\n ) {\n out[key] = mergeDeep(sourceProperty, targetProperty)\n\n continue\n }\n\n out[key] = targetProperty\n }\n\n return out\n}\n\nexport function fillArray<T> (length: number, obj: T) {\n return Array(length).fill(obj)\n}\n\nexport function getUid () {\n return getUid._uid++\n}\ngetUid._uid = 0\n\nexport function flattenFragments (nodes: VNode[]): VNode[] {\n return nodes.map(node => {\n if (node.type === Fragment) {\n return flattenFragments(node.children as VNode[])\n } else {\n return node\n }\n }).flat()\n}\n\nexport const randomHexColor = () => {\n const n = (Math.random() * 0xfffff * 1000000).toString(16)\n return '#' + n.slice(0, 6)\n}\n\nexport function toKebabCase (str = '') {\n return str\n .replace(/[^a-z]/gi, '-')\n .replace(/\\B([A-Z])/g, '-$1')\n .toLowerCase()\n}\n\nexport type MaybeRef<T> = T | Ref<T>\n\nexport type ExtractMaybeRef<P> = P extends MaybeRef<infer T> ? T : P;\n\nexport function wrapInRef <T> (x: T) {\n return (isRef(x) ? x : ref(x)) as Ref<ExtractMaybeRef<T>>\n}\n\nexport function findChildren (vnode?: VNodeChild): ComponentInternalInstance[] {\n if (!vnode || typeof vnode !== 'object') {\n return []\n }\n\n if (Array.isArray(vnode)) {\n return vnode\n .map(child => findChildren(child))\n .filter(v => v)\n .flat(1)\n } else if (Array.isArray(vnode.children)) {\n return vnode.children\n .map(child => findChildren(child))\n .filter(v => v)\n .flat(1)\n } else if (vnode.component) {\n return [vnode.component, ...findChildren(vnode.component?.subTree)]\n .filter(v => v)\n .flat(1)\n }\n\n return []\n}\n\nexport class CircularBuffer<T = never> {\n readonly #arr: Array<T> = []\n #pointer = 0\n\n constructor (public readonly size: number) {}\n\n push (val: T) {\n this.#arr[this.#pointer] = val\n this.#pointer = (this.#pointer + 1) % this.size\n }\n\n values (): T[] {\n return this.#arr.slice(this.#pointer).concat(this.#arr.slice(0, this.#pointer))\n }\n}\n\nexport type UnionToIntersection<U> =\n (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never\n","import type { ColorInt, XYZ } from '../colorUtils'\nimport { clamp } from '../../util/helpers'\n\n// For converting XYZ to sRGB\nconst srgbForwardMatrix = [\n [3.2406, -1.5372, -0.4986],\n [-0.9689, 1.8758, 0.0415],\n [0.0557, -0.2040, 1.0570],\n]\n\n// Forward gamma adjust\nconst srgbForwardTransform = (C: number): number => (\n C <= 0.0031308\n ? C * 12.92\n : 1.055 * C ** (1 / 2.4) - 0.055\n)\n\n// For converting sRGB to XYZ\nconst srgbReverseMatrix = [\n [0.4124, 0.3576, 0.1805],\n [0.2126, 0.7152, 0.0722],\n [0.0193, 0.1192, 0.9505],\n]\n\n// Reverse gamma adjust\nconst srgbReverseTransform = (C: number): number => (\n C <= 0.04045\n ? C / 12.92\n : ((C + 0.055) / 1.055) ** 2.4\n)\n\nexport function fromXYZ (xyz: XYZ): ColorInt {\n const rgb = Array(3)\n const transform = srgbForwardTransform\n const matrix = srgbForwardMatrix\n\n // Matrix transform, then gamma adjustment\n for (let i = 0; i < 3; ++i) {\n rgb[i] = Math.round(clamp(transform(\n matrix[i][0] * xyz[0] +\n matrix[i][1] * xyz[1] +\n matrix[i][2] * xyz[2]\n )) * 255)\n }\n\n // Rescale back to [0, 255]\n return (rgb[0] << 16) + (rgb[1] << 8) + (rgb[2] << 0)\n}\n\nexport function toXYZ (rgb: ColorInt): XYZ {\n const xyz: XYZ = [0, 0, 0]\n const transform = srgbReverseTransform\n const matrix = srgbReverseMatrix\n\n // Rescale from [0, 255] to [0, 1] then adjust sRGB gamma to linear RGB\n const r = transform((rgb >> 16 & 0xff) / 255)\n const g = transform((rgb >> 8 & 0xff) / 255)\n const b = transform((rgb >> 0 & 0xff) / 255)\n\n // Matrix color space transform\n for (let i = 0; i < 3; ++i) {\n xyz[i] = matrix[i][0] * r + matrix[i][1] * g + matrix[i][2] * b\n }\n\n return xyz\n}\n","import type { LAB, XYZ } from '../colorUtils'\n\nconst delta = 0.20689655172413793 // 6÷29\n\nconst cielabForwardTransform = (t: number): number => (\n t > delta ** 3\n ? Math.cbrt(t)\n : (t / (3 * delta ** 2)) + 4 / 29\n)\n\nconst cielabReverseTransform = (t: number): number => (\n t > delta\n ? t ** 3\n : (3 * delta ** 2) * (t - 4 / 29)\n)\n\nexport function fromXYZ (xyz: XYZ): LAB {\n const transform = cielabForwardTransform\n const transformedY = transform(xyz[1])\n\n return [\n 116 * transformedY - 16,\n 500 * (transform(xyz[0] / 0.95047) - transformedY),\n 200 * (transformedY - transform(xyz[2] / 1.08883)),\n ]\n}\n\nexport function toXYZ (lab: LAB): XYZ {\n const transform = cielabReverseTransform\n const Ln = (lab[0] + 16) / 116\n return [\n transform(Ln + lab[1] / 500) * 0.95047,\n transform(Ln),\n transform(Ln - lab[2] / 200) * 1.08883,\n ]\n}\n","// Utilities\nimport { consoleWarn } from './console'\nimport { chunk, padEnd } from './helpers'\nimport * as sRGB from '@/util/color/transformSRGB'\nimport * as CIELAB from '@/util/color/transformCIELAB'\n\n// Types\nimport type { Colors } from '@/composables/theme'\n\nexport type ColorInt = number\nexport type XYZ = [number, number, number]\nexport type LAB = [number, number, number]\nexport type HSV = { h: number, s: number, v: number }\nexport type HSVA = HSV & { a: number }\nexport type RGB = { r: number, g: number, b: number }\nexport type RGBA = RGB & { a: number }\nexport type HSL = { h: number, s: number, l: number }\nexport type HSLA = HSL & { a: number }\nexport type Hex = string\nexport type Hexa = string\nexport type Color = string | number | {}\n\nexport function isCssColor (color?: string | null | false): boolean {\n return !!color && /^(#|var\\(--|(rgb|hsl)a?\\()/.test(color)\n}\n\nexport function colorToInt (color: Color): ColorInt {\n let rgb\n\n if (typeof color === 'number') {\n rgb = color\n } else if (typeof color === 'string') {\n let c = color.startsWith('#') ? color.substring(1) : color\n if (c.length === 3) {\n c = c.split('').map(char => char + char).join('')\n }\n if (c.length !== 6) {\n consoleWarn(`'${color}' is not a valid rgb color`)\n }\n rgb = parseInt(c, 16)\n } else {\n throw new TypeError(`Colors can only be numbers or strings, recieved ${color == null ? color : color.constructor.name} instead`)\n }\n\n if (rgb < 0) {\n consoleWarn(`Colors cannot be negative: '${color}'`)\n rgb = 0\n } else if (rgb > 0xffffff || isNaN(rgb)) {\n consoleWarn(`'${color}' is not a valid rgb color`)\n rgb = 0xffffff\n }\n\n return rgb\n}\n\nexport function classToHex (\n color: string,\n colors: Record<string, Record<string, string>>,\n currentTheme: Partial<Colors>,\n): string {\n const [colorName, colorModifier] = color\n .toString().trim().replace('-', '').split(' ', 2) as (string | undefined)[]\n\n let hexColor = ''\n if (colorName && colorName in colors) {\n if (colorModifier && colorModifier in colors[colorName]) {\n hexColor = colors[colorName][colorModifier]\n } else if ('base' in colors[colorName]) {\n hexColor = colors[colorName].base\n }\n } else if (colorName && colorName in currentTheme) {\n hexColor = currentTheme[colorName] as string\n }\n\n return hexColor\n}\n\nexport function intToHex (color: ColorInt): string {\n let hexColor: string = color.toString(16)\n\n if (hexColor.length < 6) hexColor = '0'.repeat(6 - hexColor.length) + hexColor\n\n return '#' + hexColor\n}\n\nexport function colorToHex (color: Color): string {\n return intToHex(colorToInt(color))\n}\n\n/**\n * Converts HSVA to RGBA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV\n *\n * @param color HSVA color as an array [0-360, 0-1, 0-1, 0-1]\n */\nexport function HSVAtoRGBA (hsva: HSVA): RGBA {\n const { h, s, v, a } = hsva\n const f = (n: number) => {\n const k = (n + (h / 60)) % 6\n return v - v * s * Math.max(Math.min(k, 4 - k, 1), 0)\n }\n\n const rgb = [f(5), f(3), f(1)].map(v => Math.round(v * 255))\n\n return { r: rgb[0], g: rgb[1], b: rgb[2], a }\n}\n\n/**\n * Converts RGBA to HSVA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV\n *\n * @param color RGBA color as an array [0-255, 0-255, 0-255, 0-1]\n */\nexport function RGBAtoHSVA (rgba: RGBA): HSVA {\n if (!rgba) return { h: 0, s: 1, v: 1, a: 1 }\n\n const r = rgba.r / 255\n const g = rgba.g / 255\n const b = rgba.b / 255\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n\n let h = 0\n\n if (max !== min) {\n if (max === r) {\n h = 60 * (0 + ((g - b) / (max - min)))\n } else if (max === g) {\n h = 60 * (2 + ((b - r) / (max - min)))\n } else if (max === b) {\n h = 60 * (4 + ((r - g) / (max - min)))\n }\n }\n\n if (h < 0) h = h + 360\n\n const s = max === 0 ? 0 : (max - min) / max\n const hsv = [h, s, max]\n\n return { h: hsv[0], s: hsv[1], v: hsv[2], a: rgba.a }\n}\n\nexport function HSVAtoHSLA (hsva: HSVA): HSLA {\n const { h, s, v, a } = hsva\n\n const l = v - (v * s / 2)\n\n const sprime = l === 1 || l === 0 ? 0 : (v - l) / Math.min(l, 1 - l)\n\n return { h, s: sprime, l, a }\n}\n\nexport function HSLAtoHSVA (hsl: HSLA): HSVA {\n const { h, s, l, a } = hsl\n\n const v = l + s * Math.min(l, 1 - l)\n\n const sprime = v === 0 ? 0 : 2 - (2 * l / v)\n\n return { h, s: sprime, v, a }\n}\n\nexport function RGBAtoCSS (rgba: RGBA): string {\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`\n}\n\nexport function RGBtoCSS (rgba: RGBA): string {\n return RGBAtoCSS({ ...rgba, a: 1 })\n}\n\nexport function RGBAtoHex (rgba: RGBA): Hex {\n const toHex = (v: number) => {\n const h = Math.round(v).toString(16)\n return ('00'.substr(0, 2 - h.length) + h).toUpperCase()\n }\n\n return `#${[\n toHex(rgba.r),\n toHex(rgba.g),\n toHex(rgba.b),\n toHex(Math.round(rgba.a * 255)),\n ].join('')}`\n}\n\nexport function HexToRGBA (hex: Hex): RGBA {\n const rgba = chunk(hex.slice(1), 2).map((c: string) => parseInt(c, 16))\n\n return {\n r: rgba[0],\n g: rgba[1],\n b: rgba[2],\n a: Math.round((rgba[3] / 255) * 100) / 100,\n }\n}\n\nexport function HexToHSVA (hex: Hex): HSVA {\n const rgb = HexToRGBA(hex)\n return RGBAtoHSVA(rgb)\n}\n\nexport function HSVAtoHex (hsva: HSVA): Hex {\n return RGBAtoHex(HSVAtoRGBA(hsva))\n}\n\nexport function parseHex (hex: string): Hex {\n if (hex.startsWith('#')) {\n hex = hex.slice(1)\n }\n\n hex = hex.replace(/([^0-9a-f])/gi, 'F')\n\n if (hex.length === 3 || hex.length === 4) {\n hex = hex.split('').map(x => x + x).join('')\n }\n\n if (hex.length === 6) {\n hex = padEnd(hex, 8, 'F')\n } else {\n hex = padEnd(padEnd(hex, 6), 8, 'F')\n }\n\n return `#${hex}`.toUpperCase().substr(0, 9)\n}\n\nexport function parseGradient (\n gradient: string,\n colors: Record<string, Record<string, string>>,\n currentTheme: Partial<Colors>,\n) {\n return gradient.replace(/([a-z]+(\\s[a-z]+-[1-5])?)(?=$|,)/gi, x => {\n return classToHex(x, colors, currentTheme) || x\n }).replace(/(rgba\\()#[0-9a-f]+(?=,)/gi, x => {\n return 'rgba(' + Object.values(HexToRGBA(parseHex(x.replace(/rgba\\(/, '')))).slice(0, 3).join(',')\n })\n}\n\nexport function RGBtoInt (rgba: RGBA): ColorInt {\n return (rgba.r << 16) + (rgba.g << 8) + rgba.b\n}\n\nexport function colorToRGB (color: string) {\n const int = colorToInt(color)\n\n return {\n r: (int & 0xFF0000) >> 16,\n g: (int & 0xFF00) >> 8,\n b: (int & 0xFF),\n }\n}\n\nexport function lighten (value: ColorInt, amount: number): ColorInt {\n const lab = CIELAB.fromXYZ(sRGB.toXYZ(value))\n // TODO: why this false positive?\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n lab[0] = lab[0] + amount * 10\n\n return sRGB.fromXYZ(CIELAB.toXYZ(lab))\n}\n\nexport function darken (value: ColorInt, amount: number): ColorInt {\n const lab = CIELAB.fromXYZ(sRGB.toXYZ(value))\n lab[0] = lab[0] - amount * 10\n\n return sRGB.fromXYZ(CIELAB.toXYZ(lab))\n}\n\n/**\n * Calculate the relative luminance of a given color\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\nexport function getLuma (color: Color) {\n const rgb = colorToInt(color)\n\n return sRGB.toXYZ(rgb)[1]\n}\n\n/**\n * Returns the contrast ratio (1-21) between two colors.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function getContrast (first: Color, second: Color) {\n const l1 = getLuma(first)\n const l2 = getLuma(second)\n\n const light = Math.max(l1, l2)\n const dark = Math.min(l1, l2)\n\n return (light + 0.05) / (dark + 0.05)\n}\n","// Utilities\nimport { computed, inject, provide, ref, unref } from 'vue'\nimport { mergeDeep } from '@/util'\n\n// Types\nimport type { ComputedRef, InjectionKey, Ref } from 'vue'\nimport type { MaybeRef } from '@/util'\n\nexport interface DefaultsInstance {\n [key: string]: undefined | Record<string, unknown>\n global?: Record<string, unknown>\n}\n\nexport type DefaultsOptions = Partial<DefaultsInstance>\n\nexport const DefaultsSymbol: InjectionKey<Ref<DefaultsInstance>> = Symbol.for('vuetify:defaults')\n\nexport function createDefaults (options?: DefaultsInstance): Ref<DefaultsInstance> {\n return ref(options ?? {})\n}\n\nexport function useDefaults () {\n const defaults = inject(DefaultsSymbol)\n\n if (!defaults) throw new Error('[Vuetify] Could not find defaults instance')\n\n return defaults\n}\n\nexport function provideDefaults (\n defaults?: MaybeRef<DefaultsInstance | undefined>,\n options?: {\n reset?: MaybeRef<number | string | undefined>\n root?: MaybeRef<boolean | undefined>\n scoped?: MaybeRef<boolean | undefined>\n }\n) {\n const injectedDefaults = useDefaults()\n const providedDefaults = ref(defaults)\n\n const newDefaults = computed(() => {\n const scoped = unref(options?.scoped)\n const reset = unref(options?.reset)\n const root = unref(options?.root)\n\n let properties = mergeDeep(providedDefaults.value, { prev: injectedDefaults.value })\n\n if (scoped) return properties\n\n if (reset || root) {\n const len = Number(reset || Infinity)\n\n for (let i = 0; i <= len; i++) {\n if (!properties.prev) break\n\n properties = properties.prev\n }\n\n return properties\n }\n\n return mergeDeep(properties, properties.prev)\n }) as ComputedRef<DefaultsInstance>\n\n provide(DefaultsSymbol, newDefaults)\n\n return newDefaults\n}\n","// Utils\nimport {\n defineComponent as _defineComponent,\n getCurrentInstance,\n shallowReactive,\n toRaw,\n watchEffect,\n} from 'vue'\nimport { consoleWarn } from '@/util/console'\nimport { toKebabCase } from '@/util/helpers'\nimport { useDefaults } from '@/composables/defaults'\n\n// Types\nimport type {\n ComponentOptions,\n ComponentOptionsMixin,\n ComponentOptionsWithObjectProps,\n ComponentPropsOptions,\n ComputedOptions,\n DefineComponent,\n EmitsOptions,\n MethodOptions,\n VNode,\n VNodeChild,\n} from 'vue'\n\nfunction propIsDefined (vnode: VNode, prop: string) {\n return vnode.props?.hasOwnProperty(prop) ||\n vnode.props?.hasOwnProperty(toKebabCase(prop))\n}\n\nexport const defineComponent = (function defineComponent (options: ComponentOptions) {\n options._setup = options._setup ?? options.setup\n\n if (!options.name) {\n consoleWarn('The component is missing an explicit name, unable to generate default prop value')\n\n return options\n }\n\n if (options._setup) {\n options.setup = function setup (props: Record<string, any>, ctx) {\n const vm = getCurrentInstance()!\n const defaults = useDefaults()\n\n const _props = shallowReactive({ ...toRaw(props) })\n watchEffect(() => {\n const globalDefaults = defaults.value.global\n const componentDefaults = defaults.value[options.name!]\n\n for (const prop of Object.keys(props)) {\n let newVal\n if (propIsDefined(vm.vnode, prop)) {\n newVal = props[prop]\n } else {\n newVal = componentDefaults?.[prop] ?? globalDefaults?.[prop] ?? props[prop]\n }\n if (_props[prop] !== newVal) {\n _props[prop] = newVal\n }\n }\n })\n\n return options._setup(_props, ctx)\n }\n }\n\n return options\n}) as unknown as typeof _defineComponent\n\ntype ToListeners<T extends string | number | symbol> = { [K in T]: K extends `on${infer U}` ? Uncapitalize<U> : K }[T]\nexport type SlotsToProps<T extends Record<string, Slot>> = {\n $children: () => (T['default'] | VNodeChild | { [K in keyof T]?: T[K] })\n 'v-slots': new () => { [K in keyof T]?: T[K] | false }\n}/* & { // TODO: individual slots are never converted from the constructor type\n [K in keyof T as `v-slot:${K & string}`]?: new () => (T[K] | false)\n} */\n\ntype Slot<T extends any[] = any[]> = (...args: T) => VNodeChild\nexport type MakeSlots<T extends Record<string, any[]>> = {\n [K in keyof T]?: Slot<T[K]>\n}\n\nexport function genericComponent<T extends (new () => {\n $slots?: Record<string, Slot>\n})> (exposeDefaults = true): <\n PropsOptions extends Readonly<ComponentPropsOptions>,\n RawBindings,\n D,\n C extends ComputedOptions = {},\n M extends MethodOptions = {},\n Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,\n Extends extends ComponentOptionsMixin = ComponentOptionsMixin,\n E extends EmitsOptions = Record<string, any>,\n EE extends string = string,\n I = InstanceType<T>,\n Base = DefineComponent<\n (I extends Record<'$props', any> ? Omit<PropsOptions, keyof I['$props']> : PropsOptions) & (\n I extends Record<'$slots', any>\n ? SlotsToProps<I['$slots']>\n : {}\n ),\n RawBindings,\n D,\n C,\n M,\n Mixin,\n Extends,\n E extends any[] ? E : I extends Record<'$props', any> ? Omit<E, ToListeners<keyof I['$props']>> : E,\n EE\n >\n>(options: ComponentOptionsWithObjectProps<PropsOptions, RawBindings, D, C, M, Mixin, Extends, E, EE>) => Base & T {\n return options => (exposeDefaults ? defineComponent : _defineComponent)(options) as any\n}\n","import { camelize, capitalize, h } from 'vue'\nimport { defineComponent } from './defineComponent'\n\nexport function createSimpleFunctional (\n klass: string,\n tag = 'div',\n name?: string\n) {\n return defineComponent({\n name: name ?? capitalize(camelize(klass.replace(/__/g, '-'))),\n\n props: {\n tag: {\n type: String,\n default: tag,\n },\n },\n\n setup (props, { slots }) {\n return () => h(props.tag, {\n class: klass,\n }, slots.default?.())\n },\n })\n}\n","/**\n * Returns:\n * - 'null' if the node is not attached to the DOM\n * - the root node (HTMLDocument | ShadowRoot) otherwise\n */\nexport function attachedRoot (node: Node): null | HTMLDocument | ShadowRoot {\n /* istanbul ignore next */\n if (typeof node.getRootNode !== 'function') {\n // Shadow DOM not supported (IE11), lets find the root of this node\n while (node.parentNode) node = node.parentNode\n\n // The root parent is the document if the node is attached to the DOM\n if (node !== document) return null\n\n return document\n }\n\n const root = node.getRootNode()\n\n // The composed root node is the document if the node is attached to the DOM\n if (root !== document && root.getRootNode({ composed: true }) !== document) return null\n\n return root as HTMLDocument | ShadowRoot\n}\n","export const standardEasing = 'cubic-bezier(0.4, 0, 0.2, 1)'\nexport const deceleratedEasing = 'cubic-bezier(0.0, 0, 0.2, 1)' // Entering\nexport const acceleratedEasing = 'cubic-bezier(0.4, 0, 1, 1)' // Leaving\n","// Utilities\nimport { getCurrentInstance as _getCurrentInstance } from 'vue'\nimport { toKebabCase } from '@/util'\n\nexport function getCurrentInstance (name: string, message?: string) {\n const vm = _getCurrentInstance()\n\n if (!vm) {\n throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`)\n }\n\n return vm\n}\n\nexport function getCurrentInstanceName (name = 'composables') {\n return toKebabCase(getCurrentInstance(name).type?.name)\n}\n","export function getScrollParent (el?: HTMLElement) {\n while (el) {\n if (hasScrollbar(el)) return el\n el = el.parentElement!\n }\n\n return document.scrollingElement as HTMLElement\n}\n\nexport function getScrollParents (el?: HTMLElement) {\n const elements: HTMLElement[] = []\n while (el) {\n if (hasScrollbar(el)) elements.push(el)\n el = el.parentElement!\n }\n\n return elements\n}\n\nexport function hasScrollbar (el?: Element | null) {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false\n\n const style = window.getComputedStyle(el)\n return style.overflowY === 'scroll' || (style.overflowY === 'auto' && el.scrollHeight > el.clientHeight)\n}\n","export const IS_NODE = typeof process !== 'undefined'\nexport const IN_BROWSER = typeof window !== 'undefined'\nexport const IS_DEBUG = IS_NODE && process.env.DEBUG === 'true'\nexport const IS_PROD = IS_NODE && process.env.NODE_ENV === 'production'\nexport const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window\nexport const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0)\nexport const SUPPORTS_FOCUS_VISIBLE = IN_BROWSER && CSS.supports('selector(:focus-visible)')\n","import type { ComponentObjectPropsOptions, Prop, PropType } from 'vue'\n\n/**\n * Creates a factory function for props definitions.\n * This is used to define props in a composable then override\n * default values in an implementing component.\n *\n * @example Simplified signature\n * (props: Props) => (defaults?: Record<keyof props, any>) => Props\n *\n * @example Usage\n * const makeProps = propsFactory({\n * foo: String,\n * })\n *\n * defineComponent({\n * props: {\n * ...makeProps({\n * foo: 'a',\n * }),\n * },\n * setup (props) {\n * // would be \"string | undefined\", now \"string\" because a default has been provided\n * props.foo\n * },\n * }\n */\n\nexport function propsFactory<\n PropsOptions extends ComponentObjectPropsOptions\n> (props: PropsOptions, source?: string) {\n return <Defaults extends PartialKeys<PropsOptions> = {}>(\n defaults?: Defaults\n ): AppendDefault<PropsOptions, Defaults> => {\n return Object.keys(props).reduce<any>((obj, prop) => {\n const isObjectDefinition = typeof props[prop] === 'object' && props[prop] != null && !Array.isArray(props[prop])\n const definition = isObjectDefinition ? props[prop] : { type: props[prop] }\n\n if (defaults && prop in defaults) {\n obj[prop] = {\n ...definition,\n default: defaults[prop],\n }\n } else {\n obj[prop] = definition\n }\n\n if (source) {\n obj[prop].source = source\n }\n\n return obj\n }, {})\n }\n}\n\ntype AppendDefault<T extends ComponentObjectPropsOptions, D extends PartialKeys<T>> = {\n [P in keyof T]-?: unknown extends D[P]\n ? T[P]\n : T[P] extends Record<string, unknown>\n ? Omit<T[P], 'type' | 'default'> & {\n type: PropType<MergeDefault<T[P], D[P]>>\n default: MergeDefault<T[P], D[P]>\n }\n : {\n type: PropType<MergeDefault<T[P], D[P]>>\n default: MergeDefault<T[P], D[P]>\n }\n}\n\ntype MergeDefault<T, D> = unknown extends D ? InferPropType<T> : (NonNullable<InferPropType<T>> | D)\n\n/**\n * Like `Partial<T>` but doesn't care what the value is\n */\ntype PartialKeys<T> = { [P in keyof T]?: unknown }\n\n// Copied from Vue\ntype InferPropType<T> = T extends null\n ? any // null & true would fail to infer\n : T extends { type: null | true }\n ? any // As TS issue https://github.com/Microsoft/TypeScript/issues/14829 // somehow `ObjectConstructor` when inferred from { (): T } becomes `any` // `BooleanConstructor` when inferred from PropConstructor(with PropMethod) becomes `Boolean`\n : T extends ObjectConstructor | { type: ObjectConstructor }\n ? Record<string, any>\n : T extends BooleanConstructor | { type: BooleanConstructor }\n ? boolean\n : T extends Prop<infer V, infer D> ? (unknown extends V ? D : V) : T\n","// Utilities\nimport { getCurrentInstance } from './getCurrentInstance'\n\n// Types\nimport type { VNode } from 'vue'\n\nexport function useRender (render: () => VNode): void {\n const vm = getCurrentInstance('useRender') as any\n vm.render = render\n}\n","/**\n * WCAG 3.0 APCA perceptual contrast algorithm from https://github.com/Myndex/SAPC-APCA\n * @licence https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @see https://www.w3.org/WAI/GL/task-forces/silver/wiki/Visual_Contrast_of_Text_Subgroup\n */\n\n// MAGICAL NUMBERS\n\n// sRGB Conversion to Relative Luminance (Y)\n\n// Transfer Curve (aka \"Gamma\") for sRGB linearization\n// Simple power curve vs piecewise described in docs\n// Essentially, 2.4 best models actual display\n// characteristics in combination with the total method\nconst mainTRC = 2.4\n\nconst Rco = 0.2126729 // sRGB Red Coefficient (from matrix)\nconst Gco = 0.7151522 // sRGB Green Coefficient (from matrix)\nconst Bco = 0.0721750 // sRGB Blue Coefficient (from matrix)\n\n// For Finding Raw SAPC Contrast from Relative Luminance (Y)\n\n// Constants for SAPC Power Curve Exponents\n// One pair for normal text, and one for reverse\n// These are the \"beating heart\" of SAPC\nconst normBG = 0.55\nconst normTXT = 0.58\nconst revTXT = 0.57\nconst revBG = 0.62\n\n// For Clamping and Scaling Values\n\nconst blkThrs = 0.03 // Level that triggers the soft black clamp\nconst blkClmp = 1.45 // Exponent for the soft black clamp curve\nconst deltaYmin = 0.0005 // Lint trap\nconst scaleBoW = 1.25 // Scaling for dark text on light\nconst scaleWoB = 1.25 // Scaling for light text on dark\nconst loConThresh = 0.078 // Threshold for new simple offset scale\nconst loConFactor = 12.82051282051282 // = 1/0.078,\nconst loConOffset = 0.06 // The simple offset\nconst loClip = 0.001 // Output clip (lint trap #2)\n\nexport function APCAcontrast (text: number, background: number) {\n // Linearize sRGB\n const Rtxt = ((text >> 16 & 0xff) / 255) ** mainTRC\n const Gtxt = ((text >> 8 & 0xff) / 255) ** mainTRC\n const Btxt = ((text >> 0 & 0xff) / 255) ** mainTRC\n\n const Rbg = ((background >> 16 & 0xff) / 255) ** mainTRC\n const Gbg = ((background >> 8 & 0xff) / 255) ** mainTRC\n const Bbg = ((background >> 0 & 0xff) / 255) ** mainTRC\n\n // Apply the standard coefficients and sum to Y\n let Ytxt = (Rtxt * Rco) + (Gtxt * Gco) + (Btxt * Bco)\n let Ybg = (Rbg * Rco) + (Gbg * Gco) + (Bbg * Bco)\n\n // Soft clamp Y when near black.\n // Now clamping all colors to prevent crossover errors\n if (Ytxt <= blkThrs) Ytxt += (blkThrs - Ytxt) ** blkClmp\n if (Ybg <= blkThrs) Ybg += (blkThrs - Ybg) ** blkClmp\n\n // Return 0 Early for extremely low ∆Y (lint trap #1)\n if (Math.abs(Ybg - Ytxt) < deltaYmin) return 0.0\n\n // SAPC CONTRAST\n\n let outputContrast: number // For weighted final values\n if (Ybg > Ytxt) {\n // For normal polarity, black text on white\n // Calculate the SAPC contrast value and scale\n\n const SAPC = ((Ybg ** normBG) - (Ytxt ** normTXT)) * scaleBoW\n\n // NEW! SAPC SmoothScale™\n // Low Contrast Smooth Scale Rollout to prevent polarity reversal\n // and also a low clip for very low contrasts (lint trap #2)\n // much of this is for very low contrasts, less than 10\n // therefore for most reversing needs, only loConOffset is important\n outputContrast =\n (SAPC < loClip) ? 0.0\n : (SAPC < loConThresh) ? SAPC - SAPC * loConFactor * loConOffset\n : SAPC - loConOffset\n } else {\n // For reverse polarity, light text on dark\n // WoB should always return negative value.\n\n const SAPC = ((Ybg ** revBG) - (Ytxt ** revTXT)) * scaleWoB\n\n outputContrast =\n (SAPC > -loClip) ? 0.0\n : (SAPC > -loConThresh) ? SAPC - SAPC * loConFactor * loConOffset\n : SAPC + loConOffset\n }\n\n return outputContrast * 100\n}\n","// Utilities\nimport { computed, inject, provide, ref, watch, watchEffect } from 'vue'\nimport {\n colorToInt,\n colorToRGB,\n createRange,\n darken,\n getCurrentInstance,\n getLuma,\n IN_BROWSER,\n intToHex,\n lighten,\n mergeDeep,\n propsFactory,\n} from '@/util'\nimport { APCAcontrast } from '@/util/color/APCA'\n\n// Types\nimport type { App, InjectionKey, Ref } from 'vue'\nimport type { HeadClient } from '@vueuse/head'\n\ntype DeepPartial<T> = T extends object ? { [P in keyof T]?: DeepPartial<T[P]> } : T\n\ninterface BaseColors {\n background: string\n surface: string\n primary: string\n secondary: string\n success: string\n warning: string\n error: string\n info: string\n}\n\ninterface OnColors {\n 'on-background': string\n 'on-surface': string\n 'on-primary': string\n 'on-secondary': string\n 'on-success': string\n 'on-warning': string\n 'on-error': string\n 'on-info': string\n}\n\nexport interface Colors extends BaseColors, OnColors {\n [key: string]: string\n}\n\ninterface InternalThemeDefinition {\n dark: boolean\n colors: Colors\n variables: Record<string, string | number>\n}\n\ninterface VariationsOptions {\n colors: string[]\n lighten: number\n darken: number\n}\n\ninterface InternalThemeOptions {\n isDisabled: boolean\n defaultTheme: string\n variations: VariationsOptions\n themes: Record<string, InternalThemeDefinition>\n}\n\nexport type ThemeDefinition = DeepPartial<InternalThemeDefinition>\n\nexport type ThemeOptions = false | {\n defaultTheme?: string\n variations?: false | VariationsOptions\n themes?: Record<string, ThemeDefinition>\n}\n\nexport interface ThemeInstance {\n isDisabled: boolean\n themes: Ref<Record<string, InternalThemeDefinition>>\n current: Ref<string>\n themeClasses: Ref<string | undefined>\n setTheme: (key: string, theme: InternalThemeDefinition) => void\n getTheme: (key: string) => InternalThemeDefinition\n styles: Ref<string>\n}\n\nexport const ThemeSymbol: InjectionKey<ThemeInstance> = Symbol.for('vuetify:theme')\n\nexport const makeThemeProps = propsFactory({\n theme: String,\n}, 'theme')\n\nconst defaultThemeOptions: ThemeOptions = {\n defaultTheme: 'light',\n variations: { colors: [], lighten: 0, darken: 0 },\n themes: {\n light: {\n dark: false,\n colors: {\n background: '#FFFFFF',\n surface: '#FFFFFF',\n 'surface-variant': '#424242',\n 'on-surface-variant': '#EEEEEE',\n primary: '#6200EE',\n 'primary-darken-1': '#3700B3',\n secondary: '#03DAC6',\n 'secondary-darken-1': '#018786',\n error: '#B00020',\n info: '#2196F3',\n success: '#4CAF50',\n warning: '#FB8C00',\n },\n variables: {\n 'border-color': '#000000',\n 'border-opacity': 0.12,\n 'high-emphasis-opacity': 0.87,\n 'medium-emphasis-opacity': 0.60,\n 'disabled-opacity': 0.38,\n 'idle-opacity': 0.04,\n 'hover-opacity': 0.04,\n 'focus-opacity': 0.12,\n 'selected-opacity': 0.08,\n 'activated-opacity': 0.12,\n 'pressed-opacity': 0.12,\n 'dragged-opacity': 0.08,\n 'kbd-background-color': '#212529',\n 'kbd-color': '#FFFFFF',\n 'code-background-color': '#C2C2C2',\n },\n },\n dark: {\n dark: true,\n colors: {\n background: '#121212',\n surface: '#212121',\n 'surface-variant': '#BDBDBD',\n 'on-surface-variant': '#424242',\n primary: '#BB86FC',\n 'primary-darken-1': '#3700B3',\n secondary: '#03DAC5',\n 'secondary-darken-1': '#03DAC5',\n error: '#CF6679',\n info: '#2196F3',\n success: '#4CAF50',\n warning: '#FB8C00',\n },\n variables: {\n 'border-color': '#FFFFFF',\n 'border-opacity': 0.12,\n 'high-emphasis-opacity': 0.87,\n 'medium-emphasis-opacity': 0.60,\n 'disabled-opacity': 0.38,\n 'idle-opacity': 0.10,\n 'hover-opacity': 0.04,\n 'focus-opacity': 0.12,\n 'selected-opacity': 0.08,\n 'activated-opacity': 0.12,\n 'pressed-opacity': 0.16,\n 'dragged-opacity': 0.08,\n 'kbd-background-color': '#212529',\n 'kbd-color': '#FFFFFF',\n 'code-background-color': '#B7B7B7',\n },\n },\n },\n}\n\nconst parseThemeOptions = (options: ThemeOptions = defaultThemeOptions): InternalThemeOptions => {\n if (!options) return { ...defaultThemeOptions, isDisabled: true } as InternalThemeOptions\n\n const themes = Object.entries(options.themes ?? {}).reduce((obj, [key, theme]) => {\n const defaultTheme = theme.dark ? defaultThemeOptions.themes?.dark : defaultThemeOptions.themes?.light\n obj[key] = mergeDeep(defaultTheme, theme)\n return obj\n }, {} as Record<string, ThemeDefinition>)\n\n return mergeDeep(\n defaultThemeOptions,\n { ...options, themes },\n ) as InternalThemeOptions\n}\n\n// Composables\nexport function createTheme (app: App, options?: ThemeOptions): ThemeInstance {\n const head = app._context.provides.usehead as HeadClient | undefined\n const parsedOptions = parseThemeOptions(options)\n const styleEl = ref<HTMLStyleElement>()\n const current = ref(parsedOptions.defaultTheme)\n const themes = ref(parsedOptions.themes)\n const variations = ref(parsedOptions.variations)\n\n const computedThemes = computed(() => {\n return Object.entries(themes.value).reduce((obj, [name, original]) => {\n const theme: InternalThemeDefinition = {\n ...original,\n colors: {\n ...original.colors,\n ...(parsedOptions.variations.colors ?? []).reduce((obj, color) => {\n return { ...obj, ...genColorVariations(color, original.colors[color]!) }\n }, {}),\n },\n }\n\n for (const color of Object.keys(theme.colors)) {\n if (/on-[a-z]/.test(color) || theme.colors[`on-${color}`]) continue\n\n const onColor = `on-${color}` as keyof OnColors\n const colorVal = colorToInt(theme.colors[color]!)\n\n const blackContrast = Math.abs(APCAcontrast(0, colorVal))\n const whiteContrast = Math.abs(APCAcontrast(0xffffff, colorVal))\n\n // TODO: warn about poor color selections\n // const contrastAsText = Math.abs(APCAcontrast(colorVal, colorToInt(theme.colors.background)))\n // const minContrast = Math.max(blackContrast, whiteContrast)\n // if (minContrast < 60) {\n // consoleInfo(`${key} theme color ${color} has poor contrast (${minContrast.toFixed()}%)`)\n // } else if (contrastAsText < 60 && !['background', 'surface'].includes(color)) {\n // consoleInfo(`${key} theme color ${color} has poor contrast as text (${contrastAsText.toFixed()}%)`)\n // }\n\n // Prefer white text if both have an acceptable contrast ratio\n theme.colors[onColor] = whiteContrast > Math.min(blackContrast, 50) ? '#fff' : '#000'\n }\n\n obj[name] = theme\n\n return obj\n }, {} as Record<string, InternalThemeDefinition>)\n })\n\n function genColorVariations (name: string, color: string) {\n const obj: Record<string, string> = {}\n for (const variation of (['lighten', 'darken'] as const)) {\n const fn = variation === 'lighten' ? lighten : darken\n for (const amount of createRange(variations.value[variation], 1)) {\n obj[`${name}-${variation}-${amount}`] = intToHex(fn(colorToInt(color), amount))\n }\n }\n\n return obj\n }\n\n const styles = computed(() => {\n const lines = []\n\n for (const themeName of Object.keys(computedThemes.value)) {\n const variables = computedThemes.value[themeName].variables\n\n lines.push(...createCssClass(`.v-theme--${themeName}`, [\n ...genCssVariables(themeName),\n ...Object.keys(variables).map(key => {\n const value = variables[key]\n const color = typeof value === 'string' && value.startsWith('#') ? colorToRGB(value) : undefined\n const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined\n\n return `--v-${key}: ${rgb ?? value}`\n }),\n ]))\n }\n\n const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)))\n for (const key of colors) {\n if (/on-[a-z]/.test(key)) {\n lines.push(...createCssClass(`.${key}`, [`color: rgb(var(--v-theme-${key})) !important`]))\n } else {\n lines.push(\n ...createCssClass(`.bg-${key}`, [\n `--v-theme-overlay-multiplier: var(--v-theme-${key}-overlay-multiplier)`,\n `background: rgb(var(--v-theme-${key})) !important`,\n `color: rgb(var(--v-theme-on-${key})) !important`,\n ]),\n ...createCssClass(`.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`]),\n ...createCssClass(`.border-${key}`, [`--v-border-color: var(--v-theme-${key})`]),\n )\n }\n }\n\n return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('')\n })\n\n function genCssVariables (name: string) {\n const theme = computedThemes.value[name]\n\n if (!theme) throw new Error(`Could not find theme ${name}`)\n\n const lightOverlay = theme.dark ? 2 : 1\n const darkOverlay = theme.dark ? 1 : 2\n\n const variables: string[] = []\n for (const [key, value] of Object.entries(theme.colors)) {\n const rgb = colorToRGB(value!)\n variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`)\n if (!key.startsWith('on-')) {\n variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`)\n }\n }\n\n return variables\n }\n\n function createCssClass (selector: string, content: string[]) {\n return [\n `${selector} {\\n`,\n ...content.map(line => ` ${line};\\n`),\n '}\\n',\n ]\n }\n\n if (head) {\n head.addHeadObjs(computed(() => ({\n style: [{\n children: styles.value,\n type: 'text/css',\n id: 'vuetify-theme-stylesheet',\n }],\n })))\n\n if (IN_BROWSER) {\n watchEffect(() => head.updateDOM())\n }\n } else {\n watch(themes, updateStyles, { deep: true, immediate: true })\n\n function updateStyles () {\n if (parsedOptions.isDisabled) return\n\n genStyleElement()\n\n if (styleEl.value) styleEl.value.innerHTML = styles.value\n }\n\n function genStyleElement () {\n if (typeof document === 'undefined' || styleEl.value) return\n\n const el = document.createElement('style')\n el.type = 'text/css'\n el.id = 'vuetify-theme-stylesheet'\n\n styleEl.value = el\n document.head.appendChild(styleEl.value)\n }\n }\n\n return {\n isDisabled: parsedOptions.isDisabled,\n themes: computedThemes,\n setTheme: (key: string, theme: InternalThemeDefinition) => themes.value[key] = theme,\n getTheme: (key: string) => computedThemes.value[key],\n current,\n themeClasses: computed(() => parsedOptions.isDisabled ? undefined : `v-theme--${current.value}`),\n styles,\n }\n}\n\nexport function provideTheme (props: { theme?: string }) {\n getCurrentInstance('provideTheme')\n\n const theme = inject(ThemeSymbol, null)\n\n if (!theme) throw new Error('Could not find Vuetify theme injection')\n\n const current = computed<string>(() => {\n return props.theme ?? theme?.current.value\n })\n\n const themeClasses = computed(() => theme.isDisabled ? undefined : `v-theme--${current.value}`)\n\n const newTheme: ThemeInstance = {\n ...theme,\n current,\n themeClasses,\n }\n\n provide(ThemeSymbol, newTheme)\n\n return newTheme\n}\n\nexport function useTheme () {\n getCurrentInstance('useTheme')\n\n const theme = inject(ThemeSymbol, null)\n\n if (!theme) throw new Error('Could not find Vuetify theme injection')\n\n return theme\n}\n","// Utilities\nimport { computed, inject, onBeforeUnmount, provide, ref } from 'vue'\nimport { convertToUnit, getUid, propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, Prop, Ref } from 'vue'\n\ntype Position = 'top' | 'left' | 'right' | 'bottom'\n\ntype LayoutItem = {\n id: string\n top: number\n bottom: number\n left: number\n right: number\n size: number\n}\n\ninterface LayoutProvide {\n register: (\n id: string,\n priority: Ref<number>,\n position: Ref<Position>,\n layoutSize: Ref<number | string>,\n elementSize: Ref<number | string>,\n active: Ref<boolean>,\n disableTransitions?: Ref<boolean>\n ) => Ref<Record<string, unknown>>\n unregister: (id: string) => void\n mainStyles: Ref<Record<string, unknown>>\n getLayoutItem: (id: string) => LayoutItem | undefined\n items: Ref<LayoutItem[]>\n}\n\nexport const VuetifyLayoutKey: InjectionKey<LayoutProvide> = Symbol.for('vuetify:layout')\n\nexport const makeLayoutProps = propsFactory({\n overlaps: {\n type: Array,\n default: () => ([]),\n } as Prop<string[]>,\n fullHeight: Boolean,\n}, 'layout')\n\n// Composables\nexport const makeLayoutItemProps = propsFactory({\n name: {\n type: String,\n },\n priority: {\n type: [Number, String],\n default: 0,\n },\n absolute: Boolean,\n}, 'layout-item')\n\nexport function useLayout () {\n const layout = inject(VuetifyLayoutKey)\n\n if (!layout) throw new Error('Could not find injected Vuetify layout')\n\n return layout\n}\n\nexport function useLayoutItem (\n name: string | undefined,\n priority: Ref<number>,\n position: Ref<Position>,\n layoutSize: Ref<number | string>,\n elementSize: Ref<number | string>,\n active: Ref<boolean>,\n disableTransitions?: Ref<boolean>,\n) {\n const layout = inject(VuetifyLayoutKey)\n\n if (!layout) throw new Error('Could not find injected Vuetify layout')\n\n const id = name ?? `layout-item-${getUid()}`\n\n const styles = layout.register(id, priority, position, layoutSize, elementSize, active, disableTransitions)\n\n onBeforeUnmount(() => layout.unregister(id))\n\n return styles\n}\n\nconst generateLayers = (\n layout: string[],\n registered: string[],\n positions: Map<string, Ref<Position>>,\n layoutSizes: Map<string, Ref<number | string>>,\n activeItems: Map<string, Ref<boolean>>,\n) => {\n let previousLayer = { top: 0, left: 0, right: 0, bottom: 0 }\n const layers = [{ id: '', layer: { ...previousLayer } }]\n const ids = !layout.length ? registered : layout.map(l => l.split(':')[0]).filter(l => registered.includes(l))\n for (const id of ids) {\n const position = positions.get(id)\n const amount = layoutSizes.get(id)\n const active = activeItems.get(id)\n if (!position || !amount || !active) continue\n\n const layer = {\n ...previousLayer,\n [position.value]: parseInt(previousLayer[position.value], 10) + (active.value ? parseInt(amount.value, 10) : 0),\n }\n\n layers.push({\n id,\n layer,\n })\n\n previousLayer = layer\n }\n\n return layers\n}\n\n// TODO: Remove undefined from layout and overlaps when vue typing for required: true prop is fixed\nexport function createLayout (props: { layout?: string[], overlaps?: string[], fullHeight?: boolean }) {\n const registered = ref<string[]>([])\n const positions = new Map<string, Ref<Position>>()\n const layoutSizes = new Map<string, Ref<number | string>>()\n const priorities = new Map<string, Ref<number>>()\n const activeItems = new Map<string, Ref<boolean>>()\n const transitions = new Map<string, Ref<boolean>>()\n\n const computedOverlaps = computed(() => {\n const map = new Map<string, { position: Position, amount: number }>()\n const overlaps = props.overlaps ?? []\n for (const overlap of overlaps.filter(item => item.includes(':'))) {\n const [top, bottom] = overlap.split(':')\n if (!registered.value.includes(top) || !registered.value.includes(bottom)) continue\n\n const topPosition = positions.get(top)\n const bottomPosition = positions.get(bottom)\n const topAmount = layoutSizes.get(top)\n const bottomAmount = layoutSizes.get(bottom)\n\n if (!topPosition || !bottomPosition || !topAmount || !bottomAmount) continue\n\n map.set(bottom, { position: topPosition.value, amount: parseInt(topAmount.value, 10) })\n map.set(top, { position: bottomPosition.value, amount: -parseInt(bottomAmount.value, 10) })\n }\n\n return map\n })\n\n const layers = computed(() => {\n const entries = [...priorities.entries()]\n const sortedEntries = entries.sort(([, a], [, b]) => a.value - b.value).map(([id]) => id)\n return generateLayers(sortedEntries, registered.value, positions, layoutSizes, activeItems)\n })\n\n const transitionsEnabled = computed(() => {\n return !Array.from(transitions.values()).some(ref => ref.value)\n })\n\n const mainStyles = computed(() => {\n const layer = layers.value[layers.value.length - 1].layer\n\n return {\n position: 'relative',\n paddingLeft: convertToUnit(layer.left),\n paddingRight: convertToUnit(layer.right),\n paddingTop: convertToUnit(layer.top),\n paddingBottom: convertToUnit(layer.bottom),\n ...(transitionsEnabled.value ? undefined : { transition: 'none' }),\n }\n })\n\n const items = computed(() => {\n return layers.value.slice(1).map(({ id }, index) => {\n const { layer } = layers.value[index]\n const size = layoutSizes.get(id)\n\n return {\n id,\n ...layer,\n size: Number(size!.value),\n }\n })\n })\n\n const getLayoutItem = (id: string) => {\n return items.value.find(item => item.id === id)\n }\n\n provide(VuetifyLayoutKey, {\n register: (\n id: string,\n priority: Ref<number>,\n position: Ref<Position>,\n layoutSize: Ref<number | string>,\n elementSize: Ref<number | string>,\n active: Ref<boolean>,\n disableTransitions?: Ref<boolean>\n ) => {\n priorities.set(id, priority)\n positions.set(id, position)\n layoutSizes.set(id, layoutSize)\n activeItems.set(id, active)\n disableTransitions && transitions.set(id, disableTransitions)\n registered.value.push(id)\n\n return computed(() => {\n const index = items.value.findIndex(i => i.id === id)\n\n if (index < 0) throw new Error(`Layout item \"${id}\" is missing from layout prop`)\n\n const item = items.value[index]\n\n if (!item) throw new Error(`Could not find layout item \"${id}`)\n\n const overlap = computedOverlaps.value.get(id)\n if (overlap) {\n item[overlap.position] += overlap.amount\n }\n\n const isHorizontal = position.value === 'left' || position.value === 'right'\n const isOppositeHorizontal = position.value === 'right'\n const isOppositeVertical = position.value === 'bottom'\n\n return {\n [position.value]: 0,\n height: isHorizontal ? `calc(100% - ${item.top}px - ${item.bottom}px)` : `${elementSize.value}px`,\n marginLeft: isOppositeHorizontal ? undefined : `${item.left}px`,\n marginRight: isOppositeHorizontal ? `${item.right}px` : undefined,\n marginTop: position.value !== 'bottom' ? `${item.top}px` : undefined,\n marginBottom: position.value !== 'top' ? `${item.bottom}px` : undefined,\n width: !isHorizontal ? `calc(100% - ${item.left}px - ${item.right}px)` : `${elementSize.value}px`,\n zIndex: layers.value.length - index,\n transform: `translate${isHorizontal ? 'X' : 'Y'}(${(active.value ? 0 : -110) * (isOppositeHorizontal || isOppositeVertical ? -1 : 1)}%)`,\n ...(transitionsEnabled.value ? undefined : { transition: 'none' }),\n }\n })\n },\n unregister: (id: string) => {\n priorities.delete(id)\n positions.delete(id)\n layoutSizes.delete(id)\n activeItems.delete(id)\n transitions.delete(id)\n registered.value = registered.value.filter(v => v !== id)\n },\n mainStyles,\n getLayoutItem,\n items,\n })\n\n const layoutClasses = computed(() => [\n 'v-layout',\n { 'v-layout--full-height': props.fullHeight },\n ])\n\n return {\n layoutClasses,\n getLayoutItem,\n items,\n }\n}\n","export default {\n badge: 'Badge',\n close: 'Close',\n dataIterator: {\n noResultsText: 'No matching records found',\n loadingText: 'Loading items...',\n },\n dataTable: {\n itemsPerPageText: 'Rows per page:',\n ariaLabel: {\n sortDescending: 'Sorted descending.',\n sortAscending: 'Sorted ascending.',\n sortNone: 'Not sorted.',\n activateNone: 'Activate to remove sorting.',\n activateDescending: 'Activate to sort descending.',\n activateAscending: 'Activate to sort ascending.',\n },\n sortBy: 'Sort by',\n },\n dataFooter: {\n itemsPerPageText: 'Items per page:',\n itemsPerPageAll: 'All',\n nextPage: 'Next page',\n prevPage: 'Previous page',\n firstPage: 'First page',\n lastPage: 'Last page',\n pageText: '{0}-{1} of {2}',\n },\n datePicker: {\n itemsSelected: '{0} selected',\n nextMonthAriaLabel: 'Next month',\n nextYearAriaLabel: 'Next year',\n prevMonthAriaLabel: 'Previous month',\n prevYearAriaLabel: 'Previous year',\n },\n noDataText: 'No data available',\n carousel: {\n prev: 'Previous visual',\n next: 'Next visual',\n ariaLabel: {\n delimiter: 'Carousel slide {0} of {1}',\n },\n },\n calendar: {\n moreEvents: '{0} more',\n },\n fileInput: {\n counter: '{0} files',\n counterSize: '{0} files ({1} in total)',\n },\n timePicker: {\n am: 'AM',\n pm: 'PM',\n },\n pagination: {\n ariaLabel: {\n root: 'Pagination Navigation',\n next: 'Next page',\n previous: 'Previous page',\n page: 'Goto Page {0}',\n currentPage: 'Page {0}, Current Page',\n first: 'First page',\n last: 'Last page',\n },\n },\n rating: {\n ariaLabel: {\n item: 'Rating {0} of {1}',\n },\n },\n}\n","export { default as af } from './af'\nexport { default as ar } from './ar'\nexport { default as bg } from './bg'\nexport { default as ca } from './ca'\nexport { default as ckb } from './ckb'\nexport { default as cs } from './cs'\nexport { default as da } from './da'\nexport { default as de } from './de'\nexport { default as el } from './el'\nexport { default as en } from './en'\nexport { default as es } from './es'\nexport { default as et } from './et'\nexport { default as fa } from './fa'\nexport { default as fi } from './fi'\nexport { default as fr } from './fr'\nexport { default as hr } from './hr'\nexport { default as hu } from './hu'\nexport { default as he } from './he'\nexport { default as id } from './id'\nexport { default as it } from './it'\nexport { default as ja } from './ja'\nexport { default as ko } from './ko'\nexport { default as lv } from './lv'\nexport { default as lt } from './lt'\nexport { default as nl } from './nl'\nexport { default as no } from './no'\nexport { default as pl } from './pl'\nexport { default as pt } from './pt'\nexport { default as ro } from './ro'\nexport { default as ru } from './ru'\nexport { default as sk } from './sk'\nexport { default as sl } from './sl'\nexport { default as srCyrl } from './sr-Cyrl'\nexport { default as srLatn } from './sr-Latn'\nexport { default as sv } from './sv'\nexport { default as th } from './th'\nexport { default as tr } from './tr'\nexport { default as az } from './az'\nexport { default as uk } from './uk'\nexport { default as vi } from './vi'\nexport { default as zhHans } from './zh-Hans'\nexport { default as zhHant } from './zh-Hant'\n\nexport const rtl = {\n af: false,\n ar: true,\n bg: false,\n ca: false,\n ckb: false,\n cs: false,\n de: false,\n el: false,\n en: false,\n es: false,\n et: false,\n fa: false,\n fi: false,\n fr: false,\n hr: false,\n hu: false,\n he: true,\n id: false,\n it: false,\n ja: false,\n ko: false,\n lv: false,\n lt: false,\n nl: false,\n no: false,\n pl: false,\n pt: false,\n ro: false,\n ru: false,\n sk: false,\n sl: false,\n srCyrl: false,\n srLatn: false,\n sv: false,\n th: false,\n tr: false,\n az: false,\n uk: false,\n vi: false,\n zhHans: false,\n zhHant: false,\n}\n","import { computed, inject, provide, ref } from 'vue'\nimport { rtl } from '@/locale'\n\n// Types\nimport type { InjectionKey, Ref } from 'vue'\nimport type { LocaleInstance } from './locale'\n\nexport interface RtlOptions {\n defaultRtl?: boolean\n rtl?: Record<string, boolean>\n}\n\nexport interface RtlProps {\n rtl?: boolean\n}\n\nexport interface RtlInstance {\n isRtl: Ref<boolean>\n rtl: Record<string, boolean>\n rtlClasses: Ref<string>\n}\n\nexport const RtlSymbol: InjectionKey<RtlInstance> = Symbol.for('vuetify:rtl')\n\nexport function createRtl (localeScope: LocaleInstance, options?: RtlOptions) {\n return createRtlScope({\n rtl: {\n ...rtl,\n ...(options?.rtl ?? {}),\n },\n isRtl: ref(options?.defaultRtl ?? false),\n rtlClasses: ref(''),\n }, localeScope)\n}\n\nexport function createRtlScope (currentScope: RtlInstance, localeScope: LocaleInstance, options?: RtlProps): RtlInstance {\n const isRtl = computed(() => {\n if (typeof options?.rtl === 'boolean') return options.rtl\n if (localeScope.current.value && currentScope.rtl.hasOwnProperty(localeScope.current.value)) {\n return currentScope.rtl[localeScope.current.value]\n }\n\n return currentScope.isRtl.value\n })\n\n return {\n isRtl,\n rtl: currentScope.rtl,\n rtlClasses: computed(() => `v-locale--is-${isRtl.value ? 'rtl' : 'ltr'}`),\n }\n}\n\nexport function provideRtl (props: RtlProps, localeScope: LocaleInstance) {\n const currentScope = inject(RtlSymbol)\n\n if (!currentScope) throw new Error('[Vuetify] Could not find injected rtl instance')\n\n const newScope = createRtlScope(currentScope, localeScope, props)\n\n provide(RtlSymbol, newScope)\n\n return newScope\n}\n\nexport function useRtl () {\n const currentScope = inject(RtlSymbol)\n\n if (!currentScope) throw new Error('[Vuetify] Could not find injected rtl instance')\n\n return currentScope\n}\n","// Styles\nimport './VApp.sass'\n\n// Composables\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { createLayout, makeLayoutProps } from '@/composables/layout'\n\n// Utilities\nimport { defineComponent, useRender } from '@/util'\nimport { useRtl } from '@/composables/rtl'\n\nexport const VApp = defineComponent({\n name: 'VApp',\n\n props: {\n ...makeLayoutProps({ fullHeight: true }),\n ...makeThemeProps(),\n },\n\n setup (props, { slots }) {\n const theme = provideTheme(props)\n const { layoutClasses, getLayoutItem, items } = createLayout(props)\n const { rtlClasses } = useRtl()\n\n useRender(() => (\n <div\n class={[\n 'v-application',\n theme.themeClasses.value,\n layoutClasses.value,\n rtlClasses.value,\n ]}\n data-app=\"true\"\n >\n <div class=\"v-application__wrap\">\n { slots.default?.() }\n </div>\n </div>\n ))\n\n return {\n getLayoutItem,\n items,\n theme,\n }\n },\n})\n\nexport type VApp = InstanceType<typeof VApp>\n","// Utilities\nimport { computed } from 'vue'\nimport { convertToUnit, propsFactory } from '@/util'\n\n// Types\nexport interface DimensionProps {\n height?: number | string\n maxHeight?: number | string\n maxWidth?: number | string\n minHeight?: number | string\n minWidth?: number | string\n width?: number | string\n}\n\n// Composables\nexport const makeDimensionProps = propsFactory({\n height: [Number, String],\n maxHeight: [Number, String],\n maxWidth: [Number, String],\n minHeight: [Number, String],\n minWidth: [Number, String],\n width: [Number, String],\n}, 'dimension')\n\nexport function useDimension (props: DimensionProps) {\n const dimensionStyles = computed(() => ({\n height: convertToUnit(props.height),\n maxHeight: convertToUnit(props.maxHeight),\n maxWidth: convertToUnit(props.maxWidth),\n minHeight: convertToUnit(props.minHeight),\n minWidth: convertToUnit(props.minWidth),\n width: convertToUnit(props.width),\n }))\n\n return { dimensionStyles }\n}\n","// Styles\nimport './VResponsive.sass'\n\n// Composables\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\n\n// Utilities\nimport { computed } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport function useAspectStyles (props: { aspectRatio?: string | number }) {\n return {\n aspectStyles: computed(() => {\n const ratio = Number(props.aspectRatio)\n\n return ratio\n ? { paddingBottom: String(1 / ratio * 100) + '%' }\n : undefined\n }),\n }\n}\n\nexport const VResponsive = defineComponent({\n name: 'VResponsive',\n\n props: {\n aspectRatio: [String, Number],\n contentClass: String,\n\n ...makeDimensionProps(),\n },\n\n setup (props, { slots }) {\n const { dimensionStyles } = useDimension(props)\n const { aspectStyles } = useAspectStyles(props)\n\n return () => (\n <div class=\"v-responsive\" style={ dimensionStyles.value }>\n <div class=\"v-responsive__sizer\" style={ aspectStyles.value } />\n { slots.additional?.() }\n { slots.default && (\n <div class={['v-responsive__content', props.contentClass]}>{ slots.default() }</div>\n )}\n </div>\n )\n },\n})\n","// Utils\nimport { SUPPORTS_INTERSECTION } from '@/util'\n\n// Types\nimport type {\n DirectiveBinding,\n ObjectDirective,\n} from 'vue'\n\ntype ObserveHandler = (\n isIntersecting: boolean,\n entries: IntersectionObserverEntry[],\n observer: IntersectionObserver,\n) => void\n\nexport interface ObserveDirectiveBinding extends Omit<DirectiveBinding, 'modifiers' | 'value'> {\n value?: ObserveHandler | { handler: ObserveHandler, options?: IntersectionObserverInit }\n modifiers: {\n once?: boolean\n quiet?: boolean\n }\n}\n\nfunction mounted (el: HTMLElement, binding: ObserveDirectiveBinding) {\n if (!SUPPORTS_INTERSECTION) return\n\n const modifiers = binding.modifiers || {}\n const value = binding.value\n const { handler, options } = typeof value === 'object'\n ? value\n : { handler: value, options: {} }\n\n const observer = new IntersectionObserver((\n entries: IntersectionObserverEntry[] = [],\n observer: IntersectionObserver\n ) => {\n const _observe = el._observe?.[binding.instance!.$.uid]\n if (!_observe) return // Just in case, should never fire\n\n const isIntersecting = entries.some(entry => entry.isIntersecting)\n\n // If is not quiet or has already been\n // initted, invoke the user callback\n if (\n handler && (\n !modifiers.quiet ||\n _observe.init\n ) && (\n !modifiers.once ||\n isIntersecting ||\n _observe.init\n )\n ) {\n handler(isIntersecting, entries, observer)\n }\n\n if (isIntersecting && modifiers.once) unmounted(el, binding)\n else _observe.init = true\n }, options)\n\n el._observe = Object(el._observe)\n el._observe![binding.instance!.$.uid] = { init: false, observer }\n\n observer.observe(el)\n}\n\nfunction unmounted (el: HTMLElement, binding: ObserveDirectiveBinding) {\n const observe = el._observe?.[binding.instance!.$.uid]\n if (!observe) return\n\n observe.observer.unobserve(el)\n delete el._observe![binding.instance!.$.uid]\n}\n\nexport const Intersect: ObjectDirective<HTMLElement> = {\n mounted,\n unmounted,\n}\n\nexport default Intersect\n","// Utilities\nimport { h, mergeProps, Transition } from 'vue'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { Component, FunctionalComponent, PropType, TransitionProps } from 'vue'\n\nexport const makeTransitionProps = propsFactory({\n transition: {\n type: [Boolean, String, Object] as PropType<string | false | TransitionProps & { component?: Component }>,\n default: 'fade-transition',\n validator: val => val !== true,\n },\n}, 'transition')\n\ninterface MaybeTransitionProps extends TransitionProps {\n transition?: string | boolean | TransitionProps & { component?: any }\n}\n\nexport const MaybeTransition: FunctionalComponent<MaybeTransitionProps> = (props, { slots }) => {\n const { transition, ...rest } = props\n\n if (!transition || typeof transition === 'boolean') return slots.default?.()\n\n const { component = Transition, ...customProps } = typeof transition === 'object' ? transition : {}\n\n return h(\n component,\n mergeProps(typeof transition === 'string' ? { name: transition } : customProps as any, rest as any),\n slots\n )\n}\n","import './VImg.sass'\n\n// Components\nimport { VResponsive } from '@/components/VResponsive'\n\n// Directives\nimport intersect from '@/directives/intersect'\n\n// Composables\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport {\n computed,\n h,\n nextTick,\n onBeforeMount,\n ref,\n vShow,\n watch,\n withDirectives,\n} from 'vue'\nimport {\n convertToUnit,\n defineComponent,\n SUPPORTS_INTERSECTION,\n useRender,\n} from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// not intended for public use, this is passed in by vuetify-loader\nexport interface srcObject {\n src?: string\n srcset?: string\n lazySrc?: string\n aspect: number\n}\n\nexport const VImg = defineComponent({\n name: 'VImg',\n\n directives: { intersect },\n\n props: {\n aspectRatio: [String, Number],\n alt: String,\n cover: Boolean,\n eager: Boolean,\n gradient: String,\n lazySrc: String,\n options: {\n type: Object as PropType<IntersectionObserverInit>,\n // For more information on types, navigate to:\n // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API\n default: () => ({\n root: undefined,\n rootMargin: undefined,\n threshold: undefined,\n }),\n },\n sizes: String,\n src: {\n type: [String, Object] as PropType<string | srcObject>,\n default: '',\n },\n srcset: String,\n width: [String, Number],\n\n ...makeTransitionProps(),\n },\n\n emits: ['loadstart', 'load', 'error'],\n\n setup (props, { emit, slots }) {\n const currentSrc = ref('') // Set from srcset\n const image = ref<HTMLImageElement>()\n const state = ref<'idle' | 'loading' | 'loaded' | 'error'>(props.eager ? 'loading' : 'idle')\n const naturalWidth = ref<number>()\n const naturalHeight = ref<number>()\n\n const normalisedSrc = computed<srcObject>(() => {\n return props.src && typeof props.src === 'object'\n ? {\n src: props.src.src,\n srcset: props.srcset || props.src.srcset,\n lazySrc: props.lazySrc || props.src.lazySrc,\n aspect: Number(props.aspectRatio || props.src.aspect),\n } : {\n src: props.src,\n srcset: props.srcset,\n lazySrc: props.lazySrc,\n aspect: Number(props.aspectRatio || 0),\n }\n })\n const aspectRatio = computed(() => {\n return normalisedSrc.value.aspect || naturalWidth.value! / naturalHeight.value! || 0\n })\n\n watch(() => props.src, () => {\n init(state.value !== 'idle')\n })\n // TODO: getSrc when window width changes\n\n onBeforeMount(() => init())\n\n function init (isIntersecting?: boolean) {\n if (props.eager && isIntersecting) return\n if (\n SUPPORTS_INTERSECTION &&\n !isIntersecting &&\n !props.eager\n ) return\n\n state.value = 'loading'\n nextTick(() => {\n emit('loadstart', image.value?.currentSrc || normalisedSrc.value.src)\n\n if (image.value?.complete) {\n if (!image.value.naturalWidth) {\n onError()\n }\n\n if (state.value === 'error') return\n\n if (!aspectRatio.value) pollForSize(image.value, null)\n onLoad()\n } else {\n if (!aspectRatio.value) pollForSize(image.value!)\n getSrc()\n }\n })\n\n if (normalisedSrc.value.lazySrc) {\n const lazyImg = new Image()\n lazyImg.src = normalisedSrc.value.lazySrc\n pollForSize(lazyImg, null)\n }\n }\n\n function onLoad () {\n getSrc()\n state.value = 'loaded'\n emit('load', image.value?.currentSrc || normalisedSrc.value.src)\n }\n\n function onError () {\n state.value = 'error'\n emit('error', image.value?.currentSrc || normalisedSrc.value.src)\n }\n\n function getSrc () {\n const img = image.value\n if (img) currentSrc.value = img.currentSrc || img.src\n }\n\n function pollForSize (img: HTMLImageElement, timeout: number | null = 100) {\n const poll = () => {\n const { naturalHeight: imgHeight, naturalWidth: imgWidth } = img\n\n if (imgHeight || imgWidth) {\n naturalWidth.value = imgWidth\n naturalHeight.value = imgHeight\n } else if (!img.complete && state.value === 'loading' && timeout != null) {\n setTimeout(poll, timeout)\n } else if (img.currentSrc.endsWith('.svg') || img.currentSrc.startsWith('data:image/svg+xml')) {\n naturalWidth.value = 1\n naturalHeight.value = 1\n }\n }\n\n poll()\n }\n\n const containClasses = computed(() => ({\n 'v-img__img--cover': props.cover,\n 'v-img__img--contain': !props.cover,\n }))\n\n const __image = computed(() => {\n if (!normalisedSrc.value.src || state.value === 'idle') return\n\n const img = h('img', {\n class: ['v-img__img', containClasses.value],\n src: normalisedSrc.value.src,\n srcset: normalisedSrc.value.srcset,\n sizes: props.sizes,\n ref: image,\n onLoad,\n onError,\n })\n\n const sources = slots.sources?.()\n\n return (\n <MaybeTransition transition={ props.transition } appear>\n {\n withDirectives(\n sources\n ? <picture class=\"v-img__picture\">{ sources }{ img }</picture>\n : img,\n [[vShow, state.value === 'loaded']]\n )\n }\n </MaybeTransition>\n )\n })\n\n const __preloadImage = computed(() => (\n <MaybeTransition transition={ props.transition }>\n { normalisedSrc.value.lazySrc && state.value !== 'loaded' && (\n <img\n class={['v-img__img', 'v-img__img--preload', containClasses.value]}\n src={ normalisedSrc.value.lazySrc }\n alt=\"\"\n />\n )}\n </MaybeTransition>\n ))\n\n const __placeholder = computed(() => {\n if (!slots.placeholder) return\n\n return (\n <MaybeTransition transition={ props.transition } appear>\n { (state.value === 'loading' || (state.value === 'error' && !slots.error)) &&\n <div class=\"v-img__placeholder\">{ slots.placeholder() }</div>\n }\n </MaybeTransition>\n )\n })\n\n const __error = computed(() => {\n if (!slots.error) return\n\n return (\n <MaybeTransition transition={ props.transition } appear>\n { state.value === 'error' &&\n <div class=\"v-img__error\">{ slots.error() }</div>\n }\n </MaybeTransition>\n )\n })\n\n const __gradient = computed(() => {\n if (!props.gradient) return\n\n return <div class=\"v-img__gradient\" style={{ backgroundImage: `linear-gradient(${props.gradient})` }} />\n })\n\n const isBooted = ref(false)\n {\n const stop = watch(aspectRatio, val => {\n if (val) {\n // Doesn't work with nextTick, idk why\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n isBooted.value = true\n })\n })\n stop()\n }\n })\n }\n\n useRender(() => (\n <VResponsive\n class={[\n 'v-img',\n { 'v-img--booting': !isBooted.value },\n ]}\n style={{ width: convertToUnit(props.width === 'auto' ? naturalWidth.value : props.width) }}\n aspectRatio={ aspectRatio.value }\n aria-label={ props.alt }\n role={ props.alt ? 'img' : undefined }\n v-intersect={[{\n handler: init,\n options: props.options,\n }, null, ['once']]}\n v-slots={{\n additional: () => [__image.value, __preloadImage.value, __gradient.value, __placeholder.value, __error.value],\n default: slots.default,\n }}\n />\n ))\n\n return {\n currentSrc,\n image,\n state,\n naturalWidth,\n naturalHeight,\n }\n },\n})\n\nexport type VImg = InstanceType<typeof VImg>\n","// Utilities\nimport { computed } from 'vue'\nimport { getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nexport interface BorderProps {\n border?: boolean | number | string\n}\n\n// Composables\nexport const makeBorderProps = propsFactory({\n border: [Boolean, Number, String],\n}, 'border')\n\nexport function useBorder (\n props: BorderProps,\n name = getCurrentInstanceName(),\n) {\n const borderClasses = computed(() => {\n const classes: string[] = []\n\n if (props.border != null && props.border !== false) {\n classes.push(`${name}--border`)\n }\n\n if (\n (typeof props.border === 'string' && props.border !== '') ||\n props.border === 0\n ) {\n for (const value of String(props.border).split(' ')) {\n classes.push(`border-${value}`)\n }\n }\n\n return classes\n })\n\n return { borderClasses }\n}\n","// Utilities\nimport { computed } from 'vue'\nimport { getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nconst allowedDensities = [null, 'default', 'comfortable', 'compact'] as const\n\nexport type Density = typeof allowedDensities[number]\n\nexport interface DensityProps {\n density?: Density\n}\n\n// Composables\nexport const makeDensityProps = propsFactory({\n density: {\n type: String as PropType<Density>,\n default: 'default',\n validator: (v: any) => allowedDensities.includes(v),\n },\n}, 'density')\n\nexport function useDensity (\n props: DensityProps,\n name = getCurrentInstanceName(),\n) {\n const densityClasses = computed(() => {\n return `${name}--density-${props.density}`\n })\n\n return { densityClasses }\n}\n","// Utilities\nimport { computed, isRef } from 'vue'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\nexport interface ElevationProps {\n elevation?: number | string | null\n}\n\n// Composables\nexport const makeElevationProps = propsFactory({\n elevation: {\n type: [Number, String],\n validator (v: any) {\n const value = parseInt(v)\n\n return (\n !isNaN(value) &&\n value >= 0 &&\n // Material Design has a maximum elevation of 24\n // https://material.io/design/environment/elevation.html#default-elevations\n value <= 24\n )\n },\n },\n}, 'elevation')\n\ntype ElevationData = {\n elevationClasses: Ref<string[]>\n}\n\nexport function useElevation (props: ElevationProps | Ref<number | string | undefined>): ElevationData {\n const elevationClasses = computed(() => {\n const elevation = isRef(props) ? props.value : props.elevation\n const classes: string[] = []\n\n if (elevation == null) return classes\n\n classes.push(`elevation-${elevation}`)\n\n return classes\n })\n\n return { elevationClasses }\n}\n","// Utilities\nimport { computed, isRef } from 'vue'\nimport { getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\ntype RoundedValue = boolean | string | number | null | undefined\n\nexport interface RoundedProps {\n rounded?: RoundedValue\n tile?: boolean\n}\n\ntype RoundedData = {\n roundedClasses: Ref<string[]>\n}\n\n// Composables\nexport const makeRoundedProps = propsFactory({\n rounded: {\n type: [Boolean, Number, String],\n default: undefined,\n },\n}, 'rounded')\n\nexport function useRounded (\n props: RoundedProps | Ref<RoundedValue>,\n name = getCurrentInstanceName(),\n): RoundedData {\n const roundedClasses = computed(() => {\n const rounded = isRef(props) ? props.value : props.rounded\n const classes: string[] = []\n\n if (rounded === true || rounded === '') {\n classes.push(`${name}--rounded`)\n } else if (\n typeof rounded === 'string' ||\n rounded === 0\n ) {\n for (const value of String(rounded).split(' ')) {\n classes.push(`rounded-${value}`)\n }\n }\n\n return classes\n })\n\n return { roundedClasses }\n}\n","// Utilities\nimport { propsFactory } from '@/util'\n\n// Types\nexport interface TagProps {\n tag: string\n}\n\n// Composables\nexport const makeTagProps = propsFactory({\n tag: {\n type: String,\n default: 'div',\n },\n}, 'tag')\n","// Utilities\nimport { computed, isRef } from 'vue'\nimport { isCssColor } from '@/util'\n\n// Types\nimport type { CSSProperties, Ref } from 'vue'\n\ntype ColorValue = string | false | null | undefined\n\nexport interface TextColorData {\n textColorClasses: Ref<string[]>\n textColorStyles: Ref<CSSProperties>\n}\n\nexport interface BackgroundColorData {\n backgroundColorClasses: Ref<string[]>\n backgroundColorStyles: Ref<CSSProperties>\n}\n\n// Composables\nexport function useColor (colors: Ref<{ background?: ColorValue, text?: ColorValue }>) {\n const backgroundIsCssColor = computed(() => isCssColor(colors.value.background))\n const textIsCssColor = computed(() => isCssColor(colors.value.text))\n\n const colorClasses = computed(() => {\n const classes: string[] = []\n\n if (colors.value.background && !backgroundIsCssColor.value) {\n classes.push(`bg-${colors.value.background}`)\n }\n\n if (colors.value.text && !textIsCssColor.value) {\n classes.push(`text-${colors.value.text}`)\n }\n\n return classes\n })\n\n const colorStyles = computed(() => {\n const styles: CSSProperties = {}\n\n if (colors.value.background && backgroundIsCssColor.value) {\n styles.backgroundColor = colors.value.background\n }\n\n if (colors.value.text && textIsCssColor.value) {\n styles.color = colors.value.text\n styles.caretColor = colors.value.text\n }\n\n return styles\n })\n\n return { colorClasses, colorStyles }\n}\n\nexport function useTextColor (color: Ref<ColorValue>): TextColorData\nexport function useTextColor <T extends Record<K, ColorValue>, K extends string> (props: T, name: K): TextColorData\nexport function useTextColor <T extends Record<K, ColorValue>, K extends string> (\n props: T | Ref<ColorValue>,\n name?: K\n): TextColorData {\n const colors = computed(() => ({\n text: isRef(props) ? props.value : (name ? props[name] : null),\n }))\n\n const {\n colorClasses: textColorClasses,\n colorStyles: textColorStyles,\n } = useColor(colors)\n\n return { textColorClasses, textColorStyles }\n}\n\nexport function useBackgroundColor (color: Ref<ColorValue>): BackgroundColorData\nexport function useBackgroundColor <T extends Record<K, ColorValue>, K extends string> (props: T, name: K): BackgroundColorData\nexport function useBackgroundColor <T extends Record<K, ColorValue>, K extends string> (\n props: T | Ref<ColorValue>,\n name?: K\n): BackgroundColorData {\n const colors = computed(() => ({\n background: isRef(props) ? props.value : (name ? props[name] : null),\n }))\n\n const {\n colorClasses: backgroundColorClasses,\n colorStyles: backgroundColorStyles,\n } = useColor(colors)\n\n return { backgroundColorClasses, backgroundColorStyles }\n}\n","// Utilities\nimport { computed, ref } from 'vue'\nimport { getCurrentInstance, toKebabCase } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\n// Composables\nexport function useProxiedModel<\n Props extends object & { [key in Prop as `onUpdate:${Prop}`]: ((val: any) => void) | undefined },\n Prop extends Extract<keyof Props, string>,\n Inner = Props[Prop],\n> (\n props: Props,\n prop: Prop,\n defaultValue?: Props[Prop],\n transformIn: (value?: Props[Prop]) => Inner = (v: any) => v,\n transformOut: (value: Inner) => Props[Prop] = (v: any) => v,\n) {\n const vm = getCurrentInstance('useProxiedModel')\n\n const propIsDefined = computed(() => {\n return !!(\n typeof props[prop] !== 'undefined' &&\n (vm?.vnode.props?.hasOwnProperty(prop) || vm?.vnode.props?.hasOwnProperty(toKebabCase(prop)))\n )\n })\n\n const internal = ref(transformIn(props[prop])) as Ref<Inner>\n\n return computed<Inner>({\n get () {\n if (propIsDefined.value) return transformIn(props[prop])\n else return internal.value\n },\n set (newValue) {\n internal.value = newValue\n vm?.emit(`update:${prop}`, transformOut(newValue))\n },\n })\n}\n","// Styles\nimport './VAppBar.sass'\n\n// Components\nimport { VImg } from '@/components/VImg'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeLayoutItemProps, useLayoutItem } from '@/composables/layout'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { useBackgroundColor } from '@/composables/color'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { convertToUnit, defineComponent } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const VAppBar = defineComponent({\n name: 'VAppBar',\n\n props: {\n // TODO: Implement scrolling techniques\n // hideOnScroll: Boolean\n // invertedScroll: Boolean\n // collapseOnScroll: Boolean\n // elevateOnScroll: Boolean\n // shrinkOnScroll: Boolean\n // fadeImageOnScroll: Boolean\n collapse: Boolean,\n color: String,\n flat: Boolean,\n height: {\n type: [Number, String],\n default: 64,\n },\n extensionHeight: {\n type: [Number, String],\n default: 48,\n },\n floating: Boolean,\n image: String,\n modelValue: {\n type: Boolean,\n default: true,\n },\n prominent: Boolean,\n prominentHeight: {\n type: [Number, String],\n default: 128,\n },\n position: {\n type: String as PropType<'top' | 'bottom'>,\n default: 'top',\n validator: (value: any) => ['top', 'bottom'].includes(value),\n },\n\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeElevationProps(),\n ...makeRoundedProps(),\n ...makeLayoutItemProps(),\n ...makeTagProps({ tag: 'header' }),\n },\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots }) {\n const { borderClasses } = useBorder(props)\n const { densityClasses } = useDensity(props)\n const { elevationClasses } = useElevation(props)\n const { roundedClasses } = useRounded(props)\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'color'))\n const isExtended = !!slots.extension\n const contentHeight = computed(() => (\n Number(props.prominent ? props.prominentHeight : props.height) -\n (props.density === 'comfortable' ? 8 : 0) -\n (props.density === 'compact' ? 16 : 0)\n ))\n const height = computed(() => (\n contentHeight.value +\n Number(isExtended ? props.extensionHeight : 0)\n ))\n const isActive = useProxiedModel(props, 'modelValue', props.modelValue)\n const layoutStyles = useLayoutItem(\n props.name,\n computed(() => parseInt(props.priority, 10)),\n toRef(props, 'position'),\n height,\n height,\n isActive,\n )\n\n return () => {\n const hasImage = !!(slots.image || props.image)\n\n return (\n <props.tag\n class={[\n 'v-app-bar',\n {\n 'v-app-bar--bottom': props.position === 'bottom',\n 'v-app-bar--collapsed': props.collapse,\n 'v-app-bar--flat': props.flat,\n 'v-app-bar--floating': props.floating,\n 'v-app-bar--is-active': isActive.value,\n 'v-app-bar--prominent': props.prominent,\n 'v-app-bar--absolute': props.absolute,\n },\n backgroundColorClasses.value,\n borderClasses.value,\n densityClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n layoutStyles.value,\n ]}\n >\n { hasImage && (\n <div class=\"v-app-bar__image\">\n { slots.image\n ? slots.img?.({ src: props.image })\n : (<VImg src={ props.image } cover />)\n }\n </div>\n ) }\n\n <div\n class=\"v-app-bar__content\"\n style={{ height: convertToUnit(contentHeight.value) }}\n >\n { slots.prepend && (\n <div class=\"v-app-bar__prepend\">\n { slots.prepend() }\n </div>\n ) }\n\n { slots.default?.() }\n\n { slots.append && (\n <div class=\"v-app-bar__append\">\n { slots.append() }\n </div>\n ) }\n </div>\n\n { isExtended && (\n <div\n class=\"v-app-bar__extension\"\n style={{ height: convertToUnit(props.extensionHeight) }}\n >\n { slots.extension?.() }\n </div>\n ) }\n </props.tag>\n )\n }\n },\n})\n\nexport type VAppBar = InstanceType<typeof VAppBar>\n","// Composables\nimport { useColor } from '@/composables/color'\n\n// Utilities\nimport { computed, unref } from 'vue'\nimport { getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { MaybeRef } from '@/util'\n\nexport const allowedVariants = ['contained', 'outlined', 'plain', 'text', 'contained-text'] as const\n\nexport type Variant = typeof allowedVariants[number]\n\nexport interface VariantProps {\n color?: string\n textColor?: string\n variant: Variant\n}\n\nexport function genOverlays (isClickable: boolean, name: string) {\n return (\n <>\n { isClickable && <div class={`${name}__overlay`} /> }\n\n <div class={`${name}__underlay`} />\n </>\n )\n}\n\nexport const makeVariantProps = propsFactory({\n color: String,\n textColor: String,\n variant: {\n type: String as PropType<Variant>,\n default: 'contained',\n validator: (v: any) => allowedVariants.includes(v),\n },\n}, 'variant')\n\nexport function useVariant (\n props: MaybeRef<VariantProps>,\n name = getCurrentInstanceName(),\n) {\n const variantClasses = computed(() => {\n const { variant } = unref(props)\n return `${name}--variant-${variant}`\n })\n\n const { colorClasses, colorStyles } = useColor(computed(() => {\n const { textColor, variant, color } = unref(props)\n return {\n text: textColor,\n [variant === 'contained' ? 'background' : 'text']: color,\n }\n }))\n\n return { colorClasses, colorStyles, variantClasses }\n}\n","// Styles\nimport './VBtnGroup.sass'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeVariantProps } from '@/composables/variant'\nimport { provideDefaults } from '@/composables/defaults'\n\n// Utility\nimport { defineComponent, useRender } from '@/util'\nimport { toRef } from 'vue'\n\nexport const VBtnGroup = defineComponent({\n name: 'VBtnGroup',\n\n props: {\n divided: Boolean,\n\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeElevationProps(),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n ...makeVariantProps(),\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { densityClasses } = useDensity(props)\n const { borderClasses } = useBorder(props)\n const { elevationClasses } = useElevation(props)\n const { roundedClasses } = useRounded(props)\n\n provideDefaults({\n VBtn: {\n height: 'auto',\n color: toRef(props, 'color'),\n flat: true,\n variant: toRef(props, 'variant'),\n },\n })\n\n useRender(() => {\n return (\n <props.tag\n class={[\n 'v-btn-group',\n {\n 'v-btn-group--divided': props.divided,\n },\n themeClasses.value,\n borderClasses.value,\n densityClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n ]}\n v-slots={ slots }\n />\n )\n })\n },\n})\n","// Composables\nimport { useProxiedModel } from './proxiedModel'\n\n// Utilities\nimport { computed, inject, onBeforeUnmount, onMounted, provide, reactive, toRef } from 'vue'\nimport { consoleWarn, deepEqual, findChildren, getCurrentInstance, getUid, propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { ComponentInternalInstance, ExtractPropTypes, InjectionKey, PropType, Ref, UnwrapRef } from 'vue'\n\ninterface GroupItem {\n id: number\n value: Ref<unknown>\n disabled: Ref<boolean | undefined>\n}\n\ninterface GroupProps {\n disabled: boolean\n modelValue: unknown\n multiple: boolean\n mandatory: boolean | 'force' | undefined\n max: number | undefined\n selectedClass: string | undefined\n 'onUpdate:modelValue': ((val: unknown) => void) | undefined\n}\n\nexport interface GroupProvide {\n register: (item: GroupItem, cmp: ComponentInternalInstance) => void\n unregister: (id: number) => void\n select: (id: number, value: boolean) => void\n selected: Ref<any[]>\n isSelected: (id: number) => boolean\n prev: () => void\n next: () => void\n selectedClass: Ref<string | undefined>\n items: Ref<number[]>\n disabled: Ref<boolean | undefined>\n}\n\nexport interface GroupItemProvide {\n id: number\n isSelected: Ref<boolean>\n toggle: () => void\n select: (value: boolean) => void\n selectedClass: Ref<string | false | undefined>\n value: Ref<unknown>\n disabled: Ref<boolean | undefined>\n group: GroupProvide\n}\n\nexport const makeGroupProps = propsFactory({\n modelValue: {\n type: null,\n default: undefined,\n },\n multiple: Boolean,\n mandatory: [Boolean, String] as PropType<boolean | 'force'>,\n max: Number,\n selectedClass: String,\n disabled: Boolean,\n}, 'group')\n\nexport const makeGroupItemProps = propsFactory({\n value: null,\n disabled: Boolean,\n selectedClass: String,\n}, 'group-item')\n\ntype GroupItemProps = ExtractPropTypes<ReturnType<typeof makeGroupItemProps>>\n\n// Composables\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required?: true,\n): GroupItemProvide\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required: false,\n): GroupItemProvide | null\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required = true,\n): GroupItemProvide | null {\n const vm = getCurrentInstance('useGroupItem')\n\n if (!vm) {\n throw new Error(\n '[Vuetify] useGroupItem composable must be used inside a component setup function'\n )\n }\n\n const group = inject(injectKey, null)\n\n if (!group) {\n if (!required) return group\n\n throw new Error(`[Vuetify] Could not find useGroup injection with symbol ${injectKey.description}`)\n }\n\n const id = getUid()\n const value = toRef(props, 'value')\n const disabled = computed(() => group.disabled.value || props.disabled)\n\n group.register({\n id,\n value,\n disabled,\n }, vm)\n\n onBeforeUnmount(() => {\n group.unregister(id)\n })\n\n const isSelected = computed(() => {\n return group.isSelected(id)\n })\n\n const selectedClass = computed(() => isSelected.value && (group.selectedClass.value ?? props.selectedClass))\n\n return {\n id,\n isSelected,\n toggle: () => group.select(id, !isSelected.value),\n select: (value: boolean) => group.select(id, value),\n selectedClass,\n value,\n disabled,\n group,\n }\n}\n\nexport function useGroup (\n props: GroupProps,\n injectKey: InjectionKey<GroupProvide>\n) {\n let isUnmounted = false\n const items = reactive<GroupItem[]>([])\n const selected = useProxiedModel(\n props,\n 'modelValue',\n [],\n v => {\n if (v == null) return []\n\n return getIds(items, wrapInArray(v))\n },\n v => {\n const arr = getValues(items, v)\n\n return props.multiple ? arr : arr[0]\n }\n )\n\n const groupVm = getCurrentInstance('useGroup')\n\n function register (item: GroupItem, vm: ComponentInternalInstance) {\n // Is there a better way to fix this typing?\n const unwrapped = item as unknown as UnwrapRef<GroupItem>\n\n const children = findChildren(groupVm?.vnode)\n const instances = children\n .slice(1) // First one is group component itself\n .filter(cmp => !!cmp.provides[injectKey as any]) // TODO: Fix in TS 4.4\n const index = instances.indexOf(vm)\n\n if (index > -1) items.splice(index, 0, unwrapped)\n else items.push(unwrapped)\n }\n\n function unregister (id: number) {\n if (isUnmounted) return\n\n // TODO: re-evaluate this line's importance in the future\n // should we only modify the model if mandatory is set.\n // selected.value = selected.value.filter(v => v !== id)\n\n forceMandatoryValue()\n\n const index = items.findIndex(item => item.id === id)\n items.splice(index, 1)\n }\n\n // If mandatory and nothing is selected, then select first non-disabled item\n function forceMandatoryValue () {\n const item = items.find(item => !item.disabled)\n if (item && props.mandatory === 'force' && !selected.value.length) {\n selected.value = [item.id]\n }\n }\n\n onMounted(() => {\n forceMandatoryValue()\n })\n\n onBeforeUnmount(() => {\n isUnmounted = true\n })\n\n function select (id: number, isSelected: boolean) {\n const item = items.find(item => item.id === id)\n if (isSelected && item?.disabled) return\n\n if (props.multiple) {\n const internalValue = selected.value.slice()\n const index = internalValue.findIndex(v => v === id)\n\n // We can't remove value if group is\n // mandatory, value already exists,\n // and it is the only value\n if (\n props.mandatory &&\n index > -1 &&\n internalValue.length <= 1\n ) return\n\n // We can't add value if it would\n // cause max limit to be exceeded\n if (\n props.max != null &&\n index < 0 &&\n internalValue.length + 1 > props.max\n ) return\n\n if (index < 0 && isSelected) internalValue.push(id)\n else if (index >= 0 && !isSelected) internalValue.splice(index, 1)\n\n selected.value = internalValue\n } else {\n if (props.mandatory && selected.value.includes(id)) return\n\n selected.value = isSelected ? [id] : []\n }\n }\n\n function step (offset: number) {\n // getting an offset from selected value obviously won't work with multiple values\n if (props.multiple) consoleWarn('This method is not supported when using \"multiple\" prop')\n\n if (!selected.value.length) {\n const item = items.find(item => !item.disabled)\n item && (selected.value = [item.id])\n } else {\n const currentId = selected.value[0]\n const currentIndex = items.findIndex(i => i.id === currentId)\n\n let newIndex = (currentIndex + offset) % items.length\n let newItem = items[newIndex]\n\n while (newItem.disabled && newIndex !== currentIndex) {\n newIndex = (newIndex + offset) % items.length\n newItem = items[newIndex]\n }\n\n if (newItem.disabled) return\n\n selected.value = [items[newIndex].id]\n }\n }\n\n const state = {\n register,\n unregister,\n selected,\n select,\n disabled: toRef(props, 'disabled'),\n prev: () => step(items.length - 1),\n next: () => step(1),\n isSelected: (id: number) => selected.value.includes(id),\n selectedClass: computed(() => props.selectedClass),\n items: computed(() => items.map(({ id }) => id)),\n }\n\n provide(injectKey, state)\n\n return state\n}\n\nfunction getIds (items: UnwrapRef<GroupItem[]>, modelValue: any[]) {\n const ids = []\n for (const item of items) {\n if (item.value != null) {\n if (modelValue.find(value => deepEqual(value, item.value))) {\n ids.push(item.id)\n }\n } else if (modelValue.includes(item.id)) {\n ids.push(item.id)\n }\n }\n\n return ids\n}\n\nfunction getValues (items: UnwrapRef<GroupItem[]>, ids: any[]) {\n const values = []\n\n for (const item of items) {\n if (ids.includes(item.id)) {\n values.push(item.value != null ? item.value : item.id)\n }\n }\n\n return values\n}\n","// Styles\nimport './VBtnToggle.sass'\n\n// Components\nimport { VBtnGroup } from '@/components/VBtnGroup'\n\n// Composables\nimport { makeGroupProps, useGroup } from '@/composables/group'\n\n// Utility\nimport { genericComponent, useRender } from '@/util'\n\n// Types\nimport type { GroupProvide } from '@/composables/group'\nimport type { InjectionKey } from 'vue'\nimport type { MakeSlots } from '@/util'\n\nexport type BtnToggleSlotProps = 'isSelected' | 'select' | 'selected' | 'next' | 'prev'\nexport interface DefaultBtnToggleSlot extends Pick<GroupProvide, BtnToggleSlotProps> {}\n\nexport const VBtnToggleSymbol: InjectionKey<GroupProvide> = Symbol.for('vuetify:v-btn-toggle')\n\nexport const VBtnToggle = genericComponent<new <T>() => {\n $slots: MakeSlots<{\n default: [DefaultBtnToggleSlot]\n }>\n}>()({\n name: 'VBtnToggle',\n\n props: makeGroupProps({ selectedClass: 'v-btn--selected' }),\n\n emits: {\n 'update:modelValue': (value: any) => true,\n },\n\n setup (props, { slots }) {\n const { isSelected, next, prev, select, selected } = useGroup(props, VBtnToggleSymbol)\n\n useRender(() => (\n <VBtnGroup class=\"v-btn-toggle\">\n { slots.default?.({\n isSelected,\n next,\n prev,\n select,\n selected,\n } as DefaultBtnToggleSlot) }\n </VBtnGroup>\n ))\n\n return {\n next,\n prev,\n select,\n }\n },\n})\n","// Utilities\nimport { computed } from 'vue'\nimport { convertToUnit, getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nconst predefinedSizes = ['x-small', 'small', 'default', 'large', 'x-large']\n\nexport interface SizeProps {\n size?: string | number\n}\n\n// Composables\nexport const makeSizeProps = propsFactory({\n size: {\n type: [String, Number],\n default: 'default',\n },\n}, 'size')\n\nexport function useSize (\n props: SizeProps,\n name = getCurrentInstanceName(),\n) {\n const sizeClasses = computed(() => {\n return predefinedSizes.includes(props.size as string)\n ? `${name}--size-${props.size}`\n : null\n })\n\n const sizeStyles = computed(() => {\n return !predefinedSizes.includes(props.size as string) && props.size\n ? ({\n width: convertToUnit(props.size),\n height: convertToUnit(props.size),\n }) : null\n })\n\n return { sizeClasses, sizeStyles }\n}\n","// Utilities\nimport { computed, inject, isRef } from 'vue'\nimport { defineComponent, propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, JSXComponent, PropType, Ref } from 'vue'\n\nexport type IconValue = string | JSXComponent\n\nexport interface IconAliases {\n [name: string]: IconValue\n complete: IconValue\n cancel: IconValue\n close: IconValue\n delete: IconValue\n clear: IconValue\n success: IconValue\n info: IconValue\n warning: IconValue\n error: IconValue\n prev: IconValue\n next: IconValue\n checkboxOn: IconValue\n checkboxOff: IconValue\n checkboxIndeterminate: IconValue\n delimiter: IconValue\n sort: IconValue\n expand: IconValue\n menu: IconValue\n subgroup: IconValue\n dropdown: IconValue\n radioOn: IconValue\n radioOff: IconValue\n edit: IconValue\n ratingEmpty: IconValue\n ratingFull: IconValue\n ratingHalf: IconValue\n loading: IconValue\n first: IconValue\n last: IconValue\n unfold: IconValue\n file: IconValue\n plus: IconValue\n minus: IconValue\n}\n\nexport interface IconProps {\n tag: string\n icon: IconValue\n disabled?: Boolean\n}\n\ntype IconComponent = JSXComponent<IconProps>\n\nexport interface IconSet {\n component: IconComponent\n}\n\nexport type IconOptions = {\n defaultSet: string\n aliases?: Partial<IconAliases>\n sets: Record<string, IconSet>\n}\n\ntype IconInstance = {\n component: IconComponent\n icon: IconValue\n}\n\nexport const IconSymbol: InjectionKey<IconOptions> = Symbol.for('vuetify:icons')\n\nexport const makeIconProps = propsFactory({\n icon: {\n type: [String, Object] as PropType<IconValue>,\n required: true,\n },\n // Could not remove this and use makeTagProps, types complained because it is not required\n tag: {\n type: String,\n required: true,\n },\n}, 'icon')\n\nexport const VComponentIcon = defineComponent({\n name: 'VComponentIcon',\n\n props: makeIconProps(),\n\n setup (props) {\n return () => {\n return (\n <props.tag>\n <props.icon />\n </props.tag>\n )\n }\n },\n})\n\nexport const VSvgIcon = defineComponent({\n name: 'VSvgIcon',\n\n inheritAttrs: false,\n\n props: makeIconProps(),\n\n setup (props, { attrs }) {\n return () => {\n return (\n <props.tag { ...attrs } style={ null }>\n <svg\n class=\"v-icon__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n role=\"img\"\n aria-hidden=\"true\"\n >\n <path d={ props.icon as string }></path>\n </svg>\n </props.tag>\n )\n }\n },\n})\n\nexport const VLigatureIcon = defineComponent({\n name: 'VLigatureIcon',\n\n props: makeIconProps(),\n\n setup (props) {\n return () => {\n return <props.tag>{ props.icon }</props.tag>\n }\n },\n})\n\nexport const VClassIcon = defineComponent({\n name: 'VClassIcon',\n\n props: makeIconProps(),\n\n setup (props) {\n return () => {\n return <props.tag class={ props.icon }></props.tag>\n }\n },\n})\n\nexport const defaultSets: Record<string, IconSet> = {\n svg: {\n component: VSvgIcon,\n },\n class: {\n component: VClassIcon,\n },\n}\n\n// Composables\nexport const useIcon = (props: Ref<string | undefined> | { icon?: IconValue }) => {\n const icons = inject(IconSymbol)\n\n if (!icons) throw new Error('Missing Vuetify Icons provide!')\n\n const iconData: Ref<IconInstance> = computed(() => {\n const iconAlias = isRef(props) ? props.value : props.icon\n\n if (!iconAlias) throw new Error('Icon value is undefined or null')\n\n let icon: IconValue | undefined = iconAlias\n\n if (typeof iconAlias === 'string' && iconAlias.includes('$')) {\n icon = icons.aliases?.[iconAlias.slice(iconAlias.indexOf('$') + 1)]\n }\n\n if (!icon) throw new Error(`Could not find aliased icon \"${iconAlias}\"`)\n\n if (typeof icon !== 'string') {\n return {\n component: VComponentIcon,\n icon,\n }\n }\n\n const iconSetName = Object.keys(icons.sets).find(\n setName => typeof icon === 'string' && icon.startsWith(`${setName}:`)\n )\n\n const iconName = iconSetName ? icon.slice(iconSetName.length + 1) : icon\n const iconSet = icons.sets[iconSetName ?? icons.defaultSet]\n\n return {\n component: iconSet.component,\n icon: iconName,\n }\n })\n\n return { iconData }\n}\n","// Styles\nimport './VIcon.sass'\n\n// Composables\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { useIcon } from '@/composables/icons'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { convertToUnit, defineComponent, flattenFragments } from '@/util'\n\n// Types\nimport type { IconValue } from '@/composables/icons'\nimport type { ComputedRef, PropType } from 'vue'\n\nexport const VIcon = defineComponent({\n name: 'VIcon',\n\n props: {\n color: String,\n left: Boolean,\n right: Boolean,\n icon: {\n type: [String, Object] as PropType<IconValue>,\n },\n ...makeSizeProps(),\n ...makeTagProps({ tag: 'i' }),\n },\n\n setup (props, { slots }) {\n let slotIcon: ComputedRef<string | undefined> | undefined\n if (slots.default) {\n slotIcon = computed(() => {\n const slot = slots.default?.()\n if (!slot) return\n\n return flattenFragments(slot).filter(node =>\n node.children && typeof node.children === 'string'\n )[0]?.children as string\n })\n }\n\n const { iconData } = useIcon(slotIcon || props)\n const { sizeClasses } = useSize(props)\n const { textColorClasses, textColorStyles } = useTextColor(toRef(props, 'color'))\n\n return () => {\n return (\n <iconData.value.component\n tag={ props.tag }\n icon={ iconData.value.icon }\n class={[\n 'v-icon',\n 'notranslate',\n sizeClasses.value,\n textColorClasses.value,\n {\n 'v-icon--left': props.left,\n 'v-icon--right': props.right,\n },\n ]}\n style={[\n !sizeClasses.value ? ({\n fontSize: convertToUnit(props.size),\n width: convertToUnit(props.size),\n height: convertToUnit(props.size),\n }) : undefined,\n textColorStyles.value,\n ]}\n aria-hidden=\"true\"\n />\n )\n }\n },\n})\n","// Utilities\nimport { computed } from 'vue'\nimport { convertToUnit, getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nconst positionValues = ['static', 'relative', 'fixed', 'absolute', 'sticky'] as const\n\ntype Position = typeof positionValues[number]\n\nexport interface PositionProps {\n absolute?: boolean\n bottom?: boolean | number | string\n fixed?: boolean\n left?: boolean | number | string\n position?: Position\n right?: boolean | number | string\n top?: boolean | number | string\n}\n\n// Composables\nexport const makePositionProps = propsFactory({\n absolute: Boolean,\n bottom: [Boolean, Number, String],\n fixed: Boolean,\n left: [Boolean, Number, String],\n position: {\n type: String as PropType<Position>,\n validator: /* istanbul ignore next */ (v: any) => positionValues.includes(v),\n },\n right: [Boolean, Number, String],\n top: [Boolean, Number, String],\n}, 'position')\n\nexport function usePosition (\n props: PositionProps,\n name = getCurrentInstanceName(),\n) {\n const targets = ['top', 'right', 'bottom', 'left'] as const\n\n const positionClasses = computed(() => {\n if (props.fixed) return `${name}--fixed`\n if (props.absolute) return `${name}--absolute`\n\n return props.position ? `position-${props.position}` : undefined\n })\n\n const positionStyles = computed(() => {\n const styles: Partial<Record<typeof targets[number], string>> = {}\n\n for (const target of targets) {\n const prop = props[target]\n\n if (prop == null || prop === false) continue\n\n styles[target] = convertToUnit(prop === true ? '0' : String(prop))\n }\n\n return styles\n })\n\n return { positionClasses, positionStyles }\n}\n","// Utilities\nimport { getCurrentInstance, propsFactory } from '@/util'\nimport {\n computed,\n onBeforeUnmount,\n onMounted,\n resolveDynamicComponent,\n toRef,\n} from 'vue'\n\n// Types\nimport type { ComputedRef, PropType, Ref, SetupContext } from 'vue'\nimport type {\n RouterLink as _RouterLink,\n useLink as _useLink,\n NavigationGuardNext,\n RouteLocationNormalizedLoaded,\n RouteLocationRaw,\n Router,\n} from 'vue-router'\n\nexport function useRoute (): Ref<RouteLocationNormalizedLoaded | undefined> {\n const vm = getCurrentInstance('useRoute')\n\n return computed(() => vm?.proxy?.$route)\n}\n\nexport function useRouter (): Router | undefined {\n return getCurrentInstance('useRouter')?.proxy?.$router\n}\n\nexport interface LinkProps {\n href?: string\n replace?: boolean\n to?: RouteLocationRaw\n}\n\ninterface UseLink extends Omit<Partial<ReturnType<typeof _useLink>>, 'href'> {\n isLink: ComputedRef<boolean>\n isClickable: ComputedRef<boolean>\n href: Ref<string | undefined>\n}\n\nexport function useLink (props: LinkProps, attrs: SetupContext['attrs']): UseLink {\n const RouterLink = resolveDynamicComponent('RouterLink') as typeof _RouterLink | string\n\n const isLink = computed(() => !!(props.href || props.to))\n const isClickable = computed(() => {\n return isLink?.value || !!(attrs.onClick || attrs.onClickOnce)\n })\n\n if (typeof RouterLink === 'string') {\n return {\n isLink,\n isClickable,\n href: toRef(props, 'href'),\n }\n }\n\n const link = props.to ? RouterLink.useLink(props as Required<LinkProps>) : undefined\n\n return {\n ...link,\n isLink,\n isClickable,\n href: computed(() => props.to ? link?.route.value.href : props.href),\n }\n}\n\nexport const makeRouterProps = propsFactory({\n href: String,\n replace: Boolean,\n to: [String, Object] as PropType<RouteLocationRaw>,\n}, 'router')\n\nexport function useBackButton (cb: (next: NavigationGuardNext) => void) {\n const router = useRouter()\n let popped = false\n let removeGuard: (() => void) | undefined\n\n onMounted(() => {\n window.addEventListener('popstate', onPopstate)\n removeGuard = router?.beforeEach((to, from, next) => {\n setTimeout(() => popped ? cb(next) : next())\n })\n })\n onBeforeUnmount(() => {\n window.removeEventListener('popstate', onPopstate)\n removeGuard?.()\n })\n\n function onPopstate (e: PopStateEvent) {\n if (e.state.replaced) return\n\n popped = true\n setTimeout(() => (popped = false))\n }\n}\n","// Styles\nimport './VRipple.sass'\n\n// Utilities\nimport { isObject, keyCodes } from '@/util'\n\n// Types\nimport type {\n DirectiveBinding,\n ObjectDirective,\n} from 'vue'\n\nconst rippleStop = Symbol('rippleStop')\n\ntype VuetifyRippleEvent = (MouseEvent | TouchEvent | KeyboardEvent) & { [rippleStop]?: boolean }\n\nconst DELAY_RIPPLE = 80\n\nfunction transform (el: HTMLElement, value: string) {\n el.style.transform = value\n el.style.webkitTransform = value\n}\n\nfunction opacity (el: HTMLElement, value: number) {\n el.style.opacity = `calc(${value} * var(--v-theme-overlay-multiplier))`\n}\n\ninterface RippleOptions {\n class?: string\n center?: boolean\n circle?: boolean\n}\n\nexport interface RippleDirectiveBinding extends Omit<DirectiveBinding, 'modifiers' | 'value'> {\n value?: boolean | { class: string }\n modifiers: {\n center?: boolean\n circle?: boolean\n }\n}\n\nfunction isTouchEvent (e: VuetifyRippleEvent): e is TouchEvent {\n return e.constructor.name === 'TouchEvent'\n}\n\nfunction isKeyboardEvent (e: VuetifyRippleEvent): e is KeyboardEvent {\n return e.constructor.name === 'KeyboardEvent'\n}\n\nconst calculate = (\n e: VuetifyRippleEvent,\n el: HTMLElement,\n value: RippleOptions = {}\n) => {\n let localX = 0\n let localY = 0\n\n if (!isKeyboardEvent(e)) {\n const offset = el.getBoundingClientRect()\n const target = isTouchEvent(e) ? e.touches[e.touches.length - 1] : e\n\n localX = target.clientX - offset.left\n localY = target.clientY - offset.top\n }\n\n let radius = 0\n let scale = 0.3\n if (el._ripple?.circle) {\n scale = 0.15\n radius = el.clientWidth / 2\n radius = value.center ? radius : radius + Math.sqrt((localX - radius) ** 2 + (localY - radius) ** 2) / 4\n } else {\n radius = Math.sqrt(el.clientWidth ** 2 + el.clientHeight ** 2) / 2\n }\n\n const centerX = `${(el.clientWidth - (radius * 2)) / 2}px`\n const centerY = `${(el.clientHeight - (radius * 2)) / 2}px`\n\n const x = value.center ? centerX : `${localX - radius}px`\n const y = value.center ? centerY : `${localY - radius}px`\n\n return { radius, scale, x, y, centerX, centerY }\n}\n\nconst ripples = {\n /* eslint-disable max-statements */\n show (\n e: VuetifyRippleEvent,\n el: HTMLElement,\n value: RippleOptions = {}\n ) {\n if (!el?._ripple?.enabled) {\n return\n }\n\n const container = document.createElement('span')\n const animation = document.createElement('span')\n\n container.appendChild(animation)\n container.className = 'v-ripple__container'\n\n if (value.class) {\n container.className += ` ${value.class}`\n }\n\n const { radius, scale, x, y, centerX, centerY } = calculate(e, el, value)\n\n const size = `${radius * 2}px`\n animation.className = 'v-ripple__animation'\n animation.style.width = size\n animation.style.height = size\n\n el.appendChild(container)\n\n const computed = window.getComputedStyle(el)\n if (computed && computed.position === 'static') {\n el.style.position = 'relative'\n el.dataset.previousPosition = 'static'\n }\n\n animation.classList.add('v-ripple__animation--enter')\n animation.classList.add('v-ripple__animation--visible')\n transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`)\n opacity(animation, 0)\n animation.dataset.activated = String(performance.now())\n\n setTimeout(() => {\n animation.classList.remove('v-ripple__animation--enter')\n animation.classList.add('v-ripple__animation--in')\n transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`)\n opacity(animation, 0.08)\n }, 0)\n },\n\n hide (el: HTMLElement | null) {\n if (!el?._ripple?.enabled) return\n\n const ripples = el.getElementsByClassName('v-ripple__animation')\n\n if (ripples.length === 0) return\n const animation = ripples[ripples.length - 1]\n\n if (animation.dataset.isHiding) return\n else animation.dataset.isHiding = 'true'\n\n const diff = performance.now() - Number(animation.dataset.activated)\n const delay = Math.max(250 - diff, 0)\n\n setTimeout(() => {\n animation.classList.remove('v-ripple__animation--in')\n animation.classList.add('v-ripple__animation--out')\n opacity(animation, 0)\n\n setTimeout(() => {\n const ripples = el.getElementsByClassName('v-ripple__animation')\n if (ripples.length === 1 && el.dataset.previousPosition) {\n el.style.position = el.dataset.previousPosition\n delete el.dataset.previousPosition\n }\n\n animation.parentNode && el.removeChild(animation.parentNode)\n }, 300)\n }, delay)\n },\n}\n\nfunction isRippleEnabled (value: any): value is true {\n return typeof value === 'undefined' || !!value\n}\n\nfunction rippleShow (e: VuetifyRippleEvent) {\n const value: RippleOptions = {}\n const element = e.currentTarget as HTMLElement | undefined\n\n if (!element?._ripple || element._ripple.touched || e[rippleStop]) return\n\n // Don't allow the event to trigger ripples on any other elements\n e[rippleStop] = true\n\n if (isTouchEvent(e)) {\n element._ripple.touched = true\n element._ripple.isTouch = true\n } else {\n // It's possible for touch events to fire\n // as mouse events on Android/iOS, this\n // will skip the event call if it has\n // already been registered as touch\n if (element._ripple.isTouch) return\n }\n\n value.center = element._ripple.centered || isKeyboardEvent(e)\n if (element._ripple.class) {\n value.class = element._ripple.class\n }\n\n if (isTouchEvent(e)) {\n // already queued that shows or hides the ripple\n if (element._ripple.showTimerCommit) return\n\n element._ripple.showTimerCommit = () => {\n ripples.show(e, element, value)\n }\n element._ripple.showTimer = window.setTimeout(() => {\n if (element?._ripple?.showTimerCommit) {\n element._ripple.showTimerCommit()\n element._ripple.showTimerCommit = null\n }\n }, DELAY_RIPPLE)\n } else {\n ripples.show(e, element, value)\n }\n}\n\nfunction rippleHide (e: Event) {\n const element = e.currentTarget as HTMLElement | null\n if (!element || !element._ripple) return\n\n window.clearTimeout(element._ripple.showTimer)\n\n // The touch interaction occurs before the show timer is triggered.\n // We still want to show ripple effect.\n if (e.type === 'touchend' && element._ripple.showTimerCommit) {\n element._ripple.showTimerCommit()\n element._ripple.showTimerCommit = null\n\n // re-queue ripple hiding\n element._ripple.showTimer = window.setTimeout(() => {\n rippleHide(e)\n })\n return\n }\n\n window.setTimeout(() => {\n if (element._ripple) {\n element._ripple.touched = false\n }\n })\n ripples.hide(element)\n}\n\nfunction rippleCancelShow (e: MouseEvent | TouchEvent) {\n const element = e.currentTarget as HTMLElement | undefined\n\n if (!element || !element._ripple) return\n\n if (element._ripple.showTimerCommit) {\n element._ripple.showTimerCommit = null\n }\n\n window.clearTimeout(element._ripple.showTimer)\n}\n\nlet keyboardRipple = false\n\nfunction keyboardRippleShow (e: KeyboardEvent) {\n if (!keyboardRipple && (e.keyCode === keyCodes.enter || e.keyCode === keyCodes.space)) {\n keyboardRipple = true\n rippleShow(e)\n }\n}\n\nfunction keyboardRippleHide (e: KeyboardEvent) {\n keyboardRipple = false\n rippleHide(e)\n}\n\nfunction focusRippleHide (e: FocusEvent) {\n if (keyboardRipple) {\n keyboardRipple = false\n rippleHide(e)\n }\n}\n\nfunction updateRipple (el: HTMLElement, binding: RippleDirectiveBinding, wasEnabled: boolean) {\n const { value, modifiers } = binding\n const enabled = isRippleEnabled(value)\n if (!enabled) {\n ripples.hide(el)\n }\n\n el._ripple = el._ripple ?? {}\n el._ripple.enabled = enabled\n el._ripple.centered = modifiers.center\n el._ripple.circle = modifiers.circle\n if (isObject(value) && value.class) {\n el._ripple.class = value.class\n }\n\n if (enabled && !wasEnabled) {\n el.addEventListener('touchstart', rippleShow, { passive: true })\n el.addEventListener('touchend', rippleHide, { passive: true })\n el.addEventListener('touchmove', rippleCancelShow, { passive: true })\n el.addEventListener('touchcancel', rippleHide)\n\n el.addEventListener('mousedown', rippleShow)\n el.addEventListener('mouseup', rippleHide)\n el.addEventListener('mouseleave', rippleHide)\n\n el.addEventListener('keydown', keyboardRippleShow)\n el.addEventListener('keyup', keyboardRippleHide)\n\n el.addEventListener('blur', focusRippleHide)\n\n // Anchor tags can be dragged, causes other hides to fail - #1537\n el.addEventListener('dragstart', rippleHide, { passive: true })\n } else if (!enabled && wasEnabled) {\n removeListeners(el)\n }\n}\n\nfunction removeListeners (el: HTMLElement) {\n el.removeEventListener('mousedown', rippleShow)\n el.removeEventListener('touchstart', rippleShow)\n el.removeEventListener('touchend', rippleHide)\n el.removeEventListener('touchmove', rippleCancelShow)\n el.removeEventListener('touchcancel', rippleHide)\n el.removeEventListener('mouseup', rippleHide)\n el.removeEventListener('mouseleave', rippleHide)\n el.removeEventListener('keydown', keyboardRippleShow)\n el.removeEventListener('keyup', keyboardRippleHide)\n el.removeEventListener('dragstart', rippleHide)\n el.removeEventListener('blur', focusRippleHide)\n}\n\nfunction mounted (el: HTMLElement, binding: DirectiveBinding) {\n updateRipple(el, binding, false)\n}\n\nfunction unmounted (el: HTMLElement) {\n delete el._ripple\n removeListeners(el)\n}\n\nfunction updated (el: HTMLElement, binding: DirectiveBinding) {\n if (binding.value === binding.oldValue) {\n return\n }\n\n const wasEnabled = isRippleEnabled(binding.oldValue)\n updateRipple(el, binding, wasEnabled)\n}\n\nexport const Ripple: ObjectDirective = {\n mounted,\n unmounted,\n updated,\n}\n\nexport default Ripple\n","// Styles\nimport './VBtn.sass'\n\n// Components\nimport { VBtnToggleSymbol } from '@/components/VBtnToggle/VBtnToggle'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeGroupItemProps, useGroupItem } from '@/composables/group'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeRouterProps, useLink } from '@/composables/router'\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\n\n// Directives\nimport { Ripple } from '@/directives/ripple'\n\n// Utilities\nimport { computed } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport const VBtn = defineComponent({\n name: 'VBtn',\n\n directives: { Ripple },\n\n props: {\n flat: Boolean,\n icon: [Boolean, String],\n prependIcon: String,\n appendIcon: String,\n\n block: Boolean,\n stacked: Boolean,\n\n ripple: {\n type: Boolean,\n default: true,\n },\n\n ...makeBorderProps(),\n ...makeRoundedProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makeGroupItemProps(),\n ...makePositionProps(),\n ...makeRouterProps(),\n ...makeSizeProps(),\n ...makeTagProps({ tag: 'button' }),\n ...makeThemeProps(),\n ...makeVariantProps({ variant: 'contained' } as const),\n },\n\n setup (props, { attrs, slots }) {\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { colorClasses, colorStyles, variantClasses } = useVariant(props)\n const { densityClasses } = useDensity(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { positionClasses, positionStyles } = usePosition(props)\n const { roundedClasses } = useRounded(props)\n const { sizeClasses } = useSize(props)\n const group = useGroupItem(props, VBtnToggleSymbol, false)\n const link = useLink(props, attrs)\n const isDisabled = computed(() => group?.disabled.value || props.disabled)\n const isElevated = computed(() => {\n return props.variant === 'contained' && !(props.disabled || props.flat || props.border)\n })\n\n return () => {\n const Tag = (link.isLink.value) ? 'a' : props.tag\n\n return (\n <Tag\n type={ Tag === 'a' ? undefined : 'button' }\n class={[\n 'v-btn',\n group?.selectedClass.value,\n {\n 'v-btn--active': link.isExactActive?.value,\n 'v-btn--block': props.block,\n 'v-btn--disabled': isDisabled.value,\n 'v-btn--elevated': isElevated.value,\n 'v-btn--flat': props.flat,\n 'v-btn--icon': !!props.icon,\n 'v-btn--stacked': props.stacked,\n },\n themeClasses.value,\n borderClasses.value,\n colorClasses.value,\n densityClasses.value,\n elevationClasses.value,\n positionClasses.value,\n roundedClasses.value,\n sizeClasses.value,\n variantClasses.value,\n ]}\n style={[\n colorStyles.value,\n dimensionStyles.value,\n positionStyles.value,\n ]}\n disabled={ isDisabled.value || undefined }\n href={ link.href.value }\n v-ripple={[\n !isDisabled.value && props.ripple,\n null,\n props.icon ? ['center'] : null,\n ]}\n onClick={ isDisabled.value || link.navigate || group?.toggle }\n >\n { genOverlays(true, 'v-btn') }\n\n { !props.icon && props.prependIcon && (\n <VIcon\n class=\"v-btn__icon\"\n icon={ props.prependIcon }\n left={ !props.stacked }\n />\n ) }\n\n { typeof props.icon === 'boolean'\n ? slots.default?.()\n : (\n <VIcon\n class=\"v-btn__icon\"\n icon={ props.icon }\n size={ props.size }\n />\n )\n }\n\n { !props.icon && props.appendIcon && (\n <VIcon\n class=\"v-btn__icon\"\n icon={ props.appendIcon }\n right={ !props.stacked }\n />\n ) }\n </Tag>\n )\n }\n },\n})\n\nexport type VBtn = InstanceType<typeof VBtn>\n","// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VAppBarNavIcon = defineComponent({\n name: 'VAppBarNavIcon',\n\n props: {\n icon: {\n type: String,\n default: '$menu',\n },\n },\n\n setup (props, { slots }) {\n return () => (\n <VBtn class=\"v-app-bar-nav-icon\" icon={ props.icon }>\n { slots.default?.() }\n </VBtn>\n )\n },\n})\n","// Styles\nimport './VAppBarTitle.sass'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VAppBarTitle = defineComponent({\n name: 'VAppBarTitle',\n\n props: {\n ...makeTagProps({ tag: 'header' }),\n },\n\n setup (props, { slots }) {\n return () => (\n <props.tag class=\"v-app-bar-title\">\n { slots.default && (\n <div class=\"v-app-bar-title__placeholder\">\n { slots.default() }\n </div>\n ) }\n </props.tag>\n )\n },\n})\n","// Styles\nimport './VAvatar.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VImg } from '@/components/VImg'\n\n// Composables\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { useBackgroundColor } from '@/composables/color'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport const VAvatar = defineComponent({\n name: 'VAvatar',\n\n props: {\n color: String,\n left: Boolean,\n right: Boolean,\n icon: String,\n image: String,\n ...makeDensityProps(),\n ...makeRoundedProps(),\n ...makeSizeProps(),\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'color'))\n const { densityClasses } = useDensity(props)\n const { roundedClasses } = useRounded(props)\n const { sizeClasses, sizeStyles } = useSize(props)\n\n return () => (\n <props.tag\n class={[\n 'v-avatar',\n {\n 'v-avatar--left': props.left,\n 'v-avatar--right': props.right,\n },\n backgroundColorClasses.value,\n densityClasses.value,\n roundedClasses.value,\n sizeClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n sizeStyles.value,\n ]}\n >\n { props.image && <VImg src={ props.image } alt=\"\" /> }\n\n { props.icon && !props.image && <VIcon icon={ props.icon } /> }\n\n { slots.default?.() }\n </props.tag>\n )\n },\n})\n\nexport type VAvatar = InstanceType<typeof VAvatar>\n","// Styles\nimport './VAlert.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeVariantProps, useVariant } from '@/composables/variant'\nimport { useBorder } from '@/composables/border'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { computed } from 'vue'\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nconst allowedTypes = ['success', 'info', 'warning', 'error'] as const\n\ntype ContextualType = typeof allowedTypes[number]\n\nexport const VAlert = defineComponent({\n name: 'VAlert',\n\n props: {\n border: {\n type: [Boolean, String],\n validator: (val: boolean | string) => {\n return typeof val === 'boolean' || [\n 'top',\n 'end',\n 'bottom',\n 'start',\n ].includes(val)\n },\n },\n borderColor: String,\n closable: Boolean,\n closeIcon: {\n type: String,\n default: '$close',\n },\n closeLabel: {\n type: String,\n default: '$vuetify.close',\n },\n icon: {\n type: [Boolean, String] as PropType<false | string>,\n default: null,\n },\n modelValue: {\n type: Boolean,\n default: true,\n },\n prominent: Boolean,\n sticky: Boolean,\n text: String,\n tip: Boolean,\n type: {\n type: String as PropType<ContextualType>,\n validator: (val: ContextualType) => allowedTypes.includes(val),\n },\n\n ...makeDensityProps(),\n ...makeElevationProps(),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n ...makeVariantProps(),\n },\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots }) {\n const borderProps = computed(() => ({\n border: props.border === true || props.tip ? 'start' : props.border,\n }))\n const isActive = useProxiedModel(props, 'modelValue')\n const icon = computed(() => {\n if (props.icon === false) return undefined\n if (!props.type) return props.icon\n\n return props.icon ?? `$${props.type}`\n })\n const variantProps = computed(() => ({\n color: props.color ?? props.type,\n textColor: props.textColor,\n variant: props.variant,\n }))\n\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(borderProps.value)\n const { colorClasses, colorStyles, variantClasses } = useVariant(variantProps)\n const { densityClasses } = useDensity(props)\n const { elevationClasses } = useElevation(props)\n const { positionClasses, positionStyles } = usePosition(props)\n const { roundedClasses } = useRounded(props)\n const { textColorClasses, textColorStyles } = useTextColor(computed(() => {\n return props.borderColor ?? (props.tip ? variantProps.value.color : undefined)\n }))\n\n function onCloseClick (e: MouseEvent) {\n isActive.value = false\n }\n\n return () => {\n const hasBorder = !!borderProps.value.border\n const hasClose = !!(slots.close || props.closable)\n const hasPrepend = !!(slots.prepend || props.icon || props.type)\n const hasText = !!(slots.default || props.text || hasClose)\n\n return isActive.value && (\n <props.tag\n class={[\n 'v-alert',\n {\n [`v-alert--border-${borderProps.value.border}`]: hasBorder,\n 'v-alert--prominent': props.prominent,\n 'v-alert--tip': props.tip,\n },\n themeClasses.value,\n borderClasses.value,\n !props.tip && colorClasses.value,\n densityClasses.value,\n elevationClasses.value,\n positionClasses.value,\n roundedClasses.value,\n variantClasses.value,\n ]}\n style={[\n !props.tip && colorStyles.value,\n positionStyles.value,\n ]}\n role=\"alert\"\n >\n { hasBorder && (\n <div\n class={[\n 'v-alert__border',\n textColorClasses.value,\n ]}\n style={ textColorStyles.value }\n />\n ) }\n\n <div class=\"v-alert__underlay\" />\n\n <div class=\"v-alert__content\">\n { hasPrepend && (\n <div class=\"v-alert__avatar\">\n { slots.prepend\n ? slots.prepend()\n : (\n <VAvatar\n class={ props.tip && textColorClasses.value }\n style={ props.tip && textColorStyles.value }\n density={ props.density }\n icon={ icon.value }\n />\n )\n }\n </div>\n ) }\n\n { hasText && (\n <div class=\"v-alert__text\">\n { slots.default\n ? slots.default()\n : props.text\n }\n\n { hasClose && (\n <div class=\"v-alert__close\">\n { slots.close\n ? slots.close({ props: { onClick: onCloseClick } })\n : (\n <VBtn\n density={ props.density }\n icon={ props.closeIcon }\n variant=\"text\"\n onClick={ onCloseClick }\n />\n )\n }\n </div>\n ) }\n </div>\n ) }\n </div>\n </props.tag>\n )\n }\n },\n})\n\nexport type VAlert = InstanceType<typeof VAlert>\n","// Styles\nimport './VBadge.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { convertToUnit, defineComponent, pick } from '@/util'\n\nexport const VBadge = defineComponent({\n name: 'VBadge',\n\n inheritAttrs: false,\n\n props: {\n bordered: Boolean,\n color: {\n type: String,\n default: 'primary',\n },\n content: String,\n dot: Boolean,\n floating: Boolean,\n icon: String,\n inline: Boolean,\n label: {\n type: String,\n default: '$vuetify.badge',\n },\n location: {\n type: String,\n default: 'top-right',\n validator: (value: string) => {\n const [vertical, horizontal] = (value ?? '').split('-')\n\n return (\n ['top', 'bottom'].includes(vertical) &&\n ['left', 'right'].includes(horizontal)\n )\n },\n },\n max: [Number, String],\n modelValue: {\n type: Boolean,\n default: true,\n },\n offsetX: [Number, String],\n offsetY: [Number, String],\n textColor: String,\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeTransitionProps({ transition: 'scale-rotate-transition' }),\n },\n\n setup (props, ctx) {\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'color'))\n const { roundedClasses } = useRounded(props)\n const { textColorClasses, textColorStyles } = useTextColor(toRef(props, 'textColor'))\n\n const position = computed(() => {\n return props.floating\n ? (props.dot ? 2 : 4)\n : (props.dot ? 8 : 12)\n })\n\n function calculatePosition (offset?: number | string) {\n return `calc(100% - ${convertToUnit(position.value + parseInt(offset ?? 0, 10))})`\n }\n\n const locationStyles = computed(() => {\n const [vertical, horizontal] = (props.location ?? '').split('-')\n\n // TODO: RTL support\n\n const styles = {\n bottom: 'auto',\n left: 'auto',\n right: 'auto',\n top: 'auto',\n }\n\n if (!props.inline) {\n styles[horizontal === 'left' ? 'right' : 'left'] = calculatePosition(props.offsetX)\n styles[vertical === 'top' ? 'bottom' : 'top'] = calculatePosition(props.offsetY)\n }\n\n return styles\n })\n\n return () => {\n const value = Number(props.content)\n const content = (!props.max || isNaN(value)) ? props.content\n : value <= props.max ? value\n : `${props.max}+`\n\n const [badgeAttrs, attrs] = pick(ctx.attrs as Record<string, any>, [\n 'aria-atomic',\n 'aria-label',\n 'aria-live',\n 'role',\n 'title',\n ])\n\n return (\n <props.tag\n class={[\n 'v-badge',\n {\n 'v-badge--bordered': props.bordered,\n 'v-badge--dot': props.dot,\n 'v-badge--floating': props.floating,\n 'v-badge--inline': props.inline,\n },\n ]}\n { ...attrs }\n >\n <div class=\"v-badge__wrapper\">\n { ctx.slots.default?.() }\n\n <MaybeTransition transition={ props.transition }>\n <span\n v-show={ props.modelValue }\n class={[\n 'v-badge__badge',\n backgroundColorClasses.value,\n roundedClasses.value,\n textColorClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n locationStyles.value,\n textColorStyles.value,\n ]}\n aria-atomic=\"true\"\n aria-label=\"locale string here\" // TODO: locale string here\n aria-live=\"polite\"\n role=\"status\"\n { ...badgeAttrs }\n >\n {\n props.dot ? undefined\n : ctx.slots.badge ? ctx.slots.badge?.()\n : props.icon ? <VIcon icon={props.icon} />\n : <span class=\"v-badge__content\">{content}</span>\n }\n </span>\n </MaybeTransition>\n </div>\n </props.tag>\n )\n }\n },\n})\n\nexport type VBadge = InstanceType<typeof VBadge>\n","import { createSimpleFunctional } from '@/util'\n\nexport const VBannerActions = createSimpleFunctional('v-banner-actions')\n","// Composables\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VBannerAvatar = defineComponent({\n name: 'VBannerAvatar',\n\n props: {\n left: Boolean,\n right: Boolean,\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n return () => {\n return (\n <props.tag\n class={[\n 'v-banner-avatar',\n {\n 'v-banner-avatar--start': props.left,\n 'v-banner-avatar--end': props.right,\n },\n ]}\n v-slots={ slots }\n />\n )\n }\n },\n})\n","import { createSimpleFunctional } from '@/util'\n\nexport const VBannerContent = createSimpleFunctional('v-banner-content')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VBannerText = createSimpleFunctional('v-banner-text')\n","// Utilities\nimport { inject, reactive, ref, toRefs, watchEffect } from 'vue'\nimport { mergeDeep } from '@/util'\n\n// Globals\nimport { IN_BROWSER, SUPPORTS_TOUCH } from '@/util/globals'\n\n// Types\nimport type { InjectionKey, ToRefs } from 'vue'\n\nexport type DisplayBreakpoint = keyof DisplayThresholds\n\nexport interface DisplayThresholds {\n xs: number\n sm: number\n md: number\n lg: number\n xl: number\n xxl: number\n}\n\nexport interface DisplayOptions {\n mobileBreakpoint?: number | DisplayBreakpoint\n thresholds?: Partial<DisplayThresholds>\n}\n\nexport interface InternalDisplayOptions {\n mobileBreakpoint: number | DisplayBreakpoint\n thresholds: DisplayThresholds\n}\n\nexport interface DisplayPlatform {\n android: boolean\n ios: boolean\n cordova: boolean\n electron: boolean\n chrome: boolean\n edge: boolean\n firefox: boolean\n opera: boolean\n win: boolean\n mac: boolean\n linux: boolean\n touch: boolean\n ssr: boolean\n}\n\nexport interface DisplayInstance {\n xs: boolean\n sm: boolean\n md: boolean\n lg: boolean\n xl: boolean\n xxl: boolean\n smAndUp: boolean\n mdAndUp: boolean\n lgAndUp: boolean\n xlAndUp: boolean\n smAndDown: boolean\n mdAndDown: boolean\n lgAndDown: boolean\n xlAndDown: boolean\n name: DisplayBreakpoint\n height: number\n width: number\n mobile: boolean\n mobileBreakpoint: number | DisplayBreakpoint\n platform: DisplayPlatform\n thresholds: DisplayThresholds\n}\n\nexport const DisplaySymbol: InjectionKey<ToRefs<DisplayInstance>> = Symbol.for('vuetify:display')\n\nconst defaultDisplayOptions: DisplayOptions = {\n mobileBreakpoint: 'lg',\n thresholds: {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n xxl: 2560,\n },\n}\n\nconst parseDisplayOptions = (options: DisplayOptions = defaultDisplayOptions) => {\n return mergeDeep(defaultDisplayOptions, options) as InternalDisplayOptions\n}\n\n// Cross-browser support as described in:\n// https://stackoverflow.com/questions/1248081\nfunction getClientWidth () {\n return IN_BROWSER ? Math.max(\n document.documentElement!.clientWidth,\n window.innerWidth\n ) : 0 // SSR\n}\n\nfunction getClientHeight () {\n return IN_BROWSER ? Math.max(\n document.documentElement!.clientHeight,\n window.innerHeight\n ) : 0 // SSR\n}\n\nfunction getPlatform (): DisplayPlatform {\n const userAgent = IN_BROWSER ? window.navigator.userAgent : 'ssr'\n\n function match (regexp: RegExp) {\n return Boolean(userAgent.match(regexp))\n }\n\n const android = match(/android/i)\n const ios = match(/iphone|ipad|ipod/i)\n const cordova = match(/cordova/i)\n const electron = match(/electron/i)\n const chrome = match(/chrome/i)\n const edge = match(/edge/i)\n const firefox = match(/firefox/i)\n const opera = match(/opera/i)\n const win = match(/win/i)\n const mac = match(/mac/i)\n const linux = match(/linux/i)\n const ssr = match(/ssr/i)\n\n return {\n android,\n ios,\n cordova,\n electron,\n chrome,\n edge,\n firefox,\n opera,\n win,\n mac,\n linux,\n touch: SUPPORTS_TOUCH,\n ssr,\n }\n}\n\nexport function createDisplay (options?: DisplayOptions): ToRefs<DisplayInstance> {\n const { thresholds, mobileBreakpoint } = parseDisplayOptions(options)\n\n const height = ref(getClientHeight())\n const platform = getPlatform()\n const state = reactive({} as DisplayInstance)\n const width = ref(getClientWidth())\n\n function onResize () {\n height.value = getClientHeight()\n width.value = getClientWidth()\n }\n\n // eslint-disable-next-line max-statements\n watchEffect(() => {\n const xs = width.value < thresholds.sm\n const sm = width.value < thresholds.md && !xs\n const md = width.value < thresholds.lg && !(sm || xs)\n const lg = width.value < thresholds.xl && !(md || sm || xs)\n const xl = width.value < thresholds.xxl && !(lg || md || sm || xs)\n const xxl = width.value >= thresholds.xxl\n const name =\n xs ? 'xs'\n : sm ? 'sm'\n : md ? 'md'\n : lg ? 'lg'\n : xl ? 'xl'\n : 'xxl'\n const breakpointValue = typeof mobileBreakpoint === 'number' ? mobileBreakpoint : thresholds[mobileBreakpoint]\n const mobile = !platform.ssr\n ? width.value < breakpointValue\n : platform.android || platform.ios || platform.opera\n\n state.xs = xs\n state.sm = sm\n state.md = md\n state.lg = lg\n state.xl = xl\n state.xxl = xxl\n state.smAndUp = !xs\n state.mdAndUp = !(xs || sm)\n state.lgAndUp = !(xs || sm || md)\n state.xlAndUp = !(xs || sm || md || lg)\n state.smAndDown = !(md || lg || xl || xxl)\n state.mdAndDown = !(lg || xl || xxl)\n state.lgAndDown = !(xl || xxl)\n state.xlAndDown = !xxl\n state.name = name\n state.height = height.value\n state.width = width.value\n state.mobile = mobile\n state.mobileBreakpoint = mobileBreakpoint\n state.platform = platform\n state.thresholds = thresholds\n })\n\n if (IN_BROWSER) {\n window.addEventListener('resize', onResize, { passive: true })\n }\n\n return toRefs(state)\n}\n\nexport function useDisplay () {\n const display = inject(DisplaySymbol)\n\n if (!display) throw new Error('Could not find Vuetify display injection')\n\n return display\n}\n","// Styles\nimport './VBanner.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { VBannerActions } from './VBannerActions'\nimport { VBannerAvatar } from './VBannerAvatar'\nimport { VBannerContent } from './VBannerContent'\nimport { VBannerText } from './VBannerText'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useDisplay } from '@/composables/display'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport const VBanner = defineComponent({\n name: 'VBanner',\n\n props: {\n avatar: String,\n color: String,\n icon: String,\n lines: {\n type: String,\n default: 'one',\n },\n sticky: Boolean,\n text: String,\n\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { densityClasses } = useDensity(props)\n const { dimensionStyles } = useDimension(props)\n const { mobile } = useDisplay()\n const { elevationClasses } = useElevation(props)\n const { positionClasses, positionStyles } = usePosition(props)\n const { roundedClasses } = useRounded(props)\n const { textColorClasses, textColorStyles } = useTextColor(toRef(props, 'color'))\n\n return () => {\n const hasAvatar = !!(props.avatar || props.icon || slots.avatar || slots.icon)\n const hasText = !!(props.text || slots.text)\n const hasContent = hasAvatar || hasText || slots.default\n\n return (\n <props.tag\n class={[\n 'v-banner',\n {\n 'v-banner--mobile': mobile.value,\n 'v-banner--sticky': props.sticky,\n [`v-banner--${props.lines}-line`]: true,\n },\n borderClasses.value,\n densityClasses.value,\n elevationClasses.value,\n positionClasses.value,\n roundedClasses.value,\n textColorClasses.value,\n themeClasses.value,\n ]}\n style={[\n dimensionStyles.value,\n positionStyles.value,\n textColorStyles.value,\n ]}\n role=\"banner\"\n >\n { hasContent && (\n <VBannerContent>\n { hasAvatar && (\n <VBannerAvatar>\n { slots.avatar\n ? slots.avatar()\n : (\n <VAvatar\n density={ props.density }\n icon={ props.icon }\n image={ props.avatar }\n />\n )\n }\n </VBannerAvatar>\n ) }\n\n { hasText && (\n <VBannerText>\n { slots.text ? slots.text() : props.text }\n </VBannerText>\n ) }\n\n { slots.default?.() }\n </VBannerContent>\n ) }\n\n { slots.actions && (\n <VBannerActions v-slots={{ default: slots.actions }} />\n ) }\n </props.tag>\n )\n }\n },\n})\n\nexport type VBanner = InstanceType<typeof VBanner>\n","// Styles\nimport './VBottomNavigation.sass'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeLayoutItemProps, useLayoutItem } from '@/composables/layout'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed } from 'vue'\nimport { convertToUnit, defineComponent } from '@/util'\n\nexport const VBottomNavigation = defineComponent({\n name: 'VBottomNavigation',\n\n props: {\n bgColor: String,\n color: String,\n grow: Boolean,\n modelValue: {\n type: Boolean,\n default: true,\n },\n mode: {\n type: String,\n validator: (v: any) => !v || ['horizontal', 'shift'].includes(v),\n },\n height: {\n type: [Number, String],\n default: 56,\n },\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeElevationProps(),\n ...makeRoundedProps(),\n ...makeLayoutItemProps({\n name: 'bottom-navigation',\n }),\n ...makeTagProps({ tag: 'header' }),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(computed(() => props.bgColor))\n const { textColorClasses, textColorStyles } = useTextColor(computed(() => props.color))\n const { densityClasses } = useDensity(props)\n const { elevationClasses } = useElevation(props)\n const { roundedClasses } = useRounded(props)\n const height = computed(() => (\n Number(props.height) -\n (props.density === 'comfortable' ? 8 : 0) -\n (props.density === 'compact' ? 16 : 0)\n ))\n const isActive = useProxiedModel(props, 'modelValue', props.modelValue)\n const layoutStyles = useLayoutItem(\n props.name,\n computed(() => parseInt(props.priority, 10)),\n computed(() => 'bottom'),\n computed(() => isActive.value ? height.value : 0),\n height,\n isActive\n )\n\n return () => {\n return (\n <props.tag\n class={[\n 'v-bottom-navigation',\n {\n 'v-bottom-navigation--grow': props.grow,\n 'v-bottom-navigation--horizontal': props.mode === 'horizontal',\n 'v-bottom-navigation--is-active': isActive.value,\n 'v-bottom-navigation--shift': props.mode === 'shift',\n 'v-bottom-navigation--absolute': props.absolute,\n },\n themeClasses.value,\n backgroundColorClasses.value,\n borderClasses.value,\n densityClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n textColorClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n layoutStyles.value,\n textColorStyles.value,\n {\n height: convertToUnit(height.value),\n transform: `translateY(${convertToUnit(!isActive.value ? 100 : 0, '%')})`,\n },\n ]}\n >\n { slots.default && (\n <div class=\"v-bottom-navigation__content\">\n { slots.default() }\n </div>\n ) }\n </props.tag>\n )\n }\n },\n})\n\nexport type VBottomNavigation = InstanceType<typeof VBottomNavigation>\n","import type { InjectionKey, Ref } from 'vue'\n\ninterface BreadcrumbsContext {\n color: Ref<string | undefined>\n disabled: Ref<boolean>\n}\n\nexport const VBreadcrumbsSymbol: InjectionKey<BreadcrumbsContext> = Symbol.for('vuetify:breadcrumbs')\n","// Composables\nimport { makeRouterProps, useLink } from '@/composables/router'\nimport { makeTagProps } from '@/composables/tag'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { computed, inject } from 'vue'\nimport { defineComponent } from '@/util'\nimport { VBreadcrumbsSymbol } from './shared'\n\nexport const VBreadcrumbsItem = defineComponent({\n name: 'VBreadcrumbsItem',\n\n props: {\n active: Boolean,\n activeClass: String,\n activeColor: String,\n color: String,\n disabled: Boolean,\n text: String,\n\n ...makeRouterProps(),\n ...makeTagProps({ tag: 'li' }),\n },\n\n setup (props, { slots, attrs }) {\n const breadcrumbs = inject(VBreadcrumbsSymbol)\n\n if (!breadcrumbs) throw new Error('[Vuetify] Could not find v-breadcrumbs provider')\n\n const link = useLink(props, attrs)\n const isActive = computed(() => {\n return props.active || link.isExactActive?.value\n })\n const color = computed(() => {\n if (isActive.value) return props.activeColor ?? breadcrumbs.color.value\n\n return props.color\n })\n const { textColorClasses, textColorStyles } = useTextColor(color)\n\n return () => {\n const Tag = (link.isLink.value) ? 'a' : props.tag\n\n return (\n <Tag\n class={[\n 'v-breadcrumbs-item',\n {\n 'v-breadcrumbs-item--active': isActive.value,\n 'v-breadcrumbs-item--disabled': props.disabled || breadcrumbs.disabled.value,\n 'v-breadcrumbs-item--link': link.isLink.value,\n [`${props.activeClass}`]: isActive.value && props.activeClass,\n },\n textColorClasses.value,\n ]}\n style={[\n textColorStyles.value,\n ]}\n aria-current={ isActive.value ? 'page' : undefined }\n onClick={ isActive.value && link.navigate }\n >\n { props.text }\n\n { slots.default?.() }\n </Tag>\n )\n }\n },\n})\n","import { createSimpleFunctional } from '@/util'\n\nexport const VBreadcrumbsDivider = createSimpleFunctional('v-breadcrumbs-divider', 'li')\n","// Styles\nimport './VBreadcrumbs.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VBreadcrumbsItem } from './VBreadcrumbsItem'\nimport { VBreadcrumbsDivider } from './VBreadcrumbsDivider'\n\n// Composables\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { computed, provide, toRef } from 'vue'\nimport { defineComponent } from '@/util'\nimport { VBreadcrumbsSymbol } from './shared'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { LinkProps } from '@/composables/router'\n\nexport type BreadcrumbItem = string | (LinkProps & {\n text: string\n})\n\nexport const VBreadcrumbs = defineComponent({\n name: 'VBreadcrumbs',\n\n props: {\n color: String,\n disabled: Boolean,\n divider: {\n type: String,\n default: '/',\n },\n icon: String,\n items: {\n type: Array as PropType<BreadcrumbItem[]>,\n default: () => ([]),\n },\n\n ...makeDensityProps(),\n ...makeRoundedProps(),\n ...makeTagProps({ tag: 'ul' }),\n },\n\n setup (props, { slots }) {\n const { densityClasses } = useDensity(props)\n const { roundedClasses } = useRounded(props)\n const { textColorClasses, textColorStyles } = useTextColor(toRef(props, 'color'))\n const items = computed(() => {\n return props.items.map((item, index, array) => ({\n props: {\n disabled: index >= array.length - 1,\n ...(typeof item === 'string' ? { text: item } : item),\n },\n }))\n })\n\n provide(VBreadcrumbsSymbol, {\n color: toRef(props, 'color'),\n disabled: toRef(props, 'disabled'),\n })\n\n return () => (\n <props.tag\n class={[\n 'v-breadcrumbs',\n densityClasses.value,\n roundedClasses.value,\n textColorClasses.value,\n ]}\n style={[\n textColorStyles.value,\n ]}\n >\n { props.icon && (\n <VIcon icon={ props.icon } left />\n ) }\n\n { items.value.map((item, index) => (\n <>\n <VBreadcrumbsItem\n key={ index }\n { ...item.props }\n >\n { slots.item?.({ ...item, index }) }\n </VBreadcrumbsItem>\n\n { index < props.items.length - 1 && (\n <VBreadcrumbsDivider>\n { slots.divider ? slots.divider({ ...item, index }) : props.divider }\n </VBreadcrumbsDivider>\n ) }\n </>\n )) }\n\n { slots.default?.() }\n </props.tag>\n )\n },\n})\n\nexport type VBreadcrumbs = InstanceType<typeof VBreadcrumbs>\n","import { createSimpleFunctional } from '@/util'\n\nexport const VCardActions = createSimpleFunctional('v-card-actions')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VCardAvatar = createSimpleFunctional('v-card-avatar')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VCardHeader = createSimpleFunctional('v-card-header')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VCardHeaderText = createSimpleFunctional('v-card-header-text')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VCardImg = createSimpleFunctional('v-card-img')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VCardSubtitle = createSimpleFunctional('v-card-subtitle')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VCardText = createSimpleFunctional('v-card-text')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VCardTitle = createSimpleFunctional('v-card-title')\n","// Styles\nimport './VCard.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { VImg } from '@/components/VImg'\nimport { VCardActions } from './VCardActions'\nimport { VCardAvatar } from './VCardAvatar'\nimport { VCardHeader } from './VCardHeader'\nimport { VCardHeaderText } from './VCardHeaderText'\nimport { VCardImg } from './VCardImg'\nimport { VCardSubtitle } from './VCardSubtitle'\nimport { VCardText } from './VCardText'\nimport { VCardTitle } from './VCardTitle'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeRouterProps, useLink } from '@/composables/router'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\n\n// Directives\nimport { Ripple } from '@/directives/ripple'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VCard = defineComponent({\n name: 'VCard',\n\n directives: { Ripple },\n\n props: {\n appendAvatar: String,\n appendIcon: String,\n disabled: Boolean,\n flat: Boolean,\n hover: Boolean,\n image: String,\n link: Boolean,\n prependAvatar: String,\n prependIcon: String,\n ripple: Boolean,\n subtitle: String,\n text: String,\n title: String,\n\n ...makeThemeProps(),\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeRouterProps(),\n ...makeTagProps(),\n ...makeVariantProps({ variant: 'contained' } as const),\n },\n\n setup (props, { attrs, slots }) {\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { colorClasses, colorStyles, variantClasses } = useVariant(props)\n const { densityClasses } = useDensity(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { positionClasses, positionStyles } = usePosition(props)\n const { roundedClasses } = useRounded(props)\n const link = useLink(props, attrs)\n\n return () => {\n const Tag = (link.isLink.value) ? 'a' : props.tag\n const hasTitle = !!(slots.title || props.title)\n const hasSubtitle = !!(slots.subtitle || props.subtitle)\n const hasHeaderText = hasTitle || hasSubtitle\n const hasAppend = !!(slots.append || props.appendAvatar || props.appendIcon)\n const hasPrepend = !!(slots.prepend || props.prependAvatar || props.prependIcon)\n const hasImage = !!(slots.image || props.image)\n const hasHeader = hasHeaderText || hasPrepend || hasAppend\n const hasText = !!(slots.text || props.text)\n const isClickable = !props.disabled && (link.isClickable.value || props.link)\n\n return (\n <Tag\n class={[\n 'v-card',\n {\n 'v-card--disabled': props.disabled,\n 'v-card--flat': props.flat,\n 'v-card--hover': props.hover && !(props.disabled || props.flat),\n 'v-card--link': isClickable,\n },\n themeClasses.value,\n borderClasses.value,\n colorClasses.value,\n densityClasses.value,\n elevationClasses.value,\n positionClasses.value,\n roundedClasses.value,\n variantClasses.value,\n ]}\n style={[\n colorStyles.value,\n dimensionStyles.value,\n positionStyles.value,\n ]}\n href={ link.href.value }\n onClick={ isClickable && link.navigate }\n v-ripple={ isClickable }\n >\n { genOverlays(isClickable, 'v-card') }\n\n { hasImage && (\n <VCardImg>\n { slots.image\n ? slots.image?.({ src: props.image })\n : (<VImg src={ props.image } cover alt=\"\" />)\n }\n </VCardImg>\n ) }\n\n { slots.media?.() }\n\n { hasHeader && (\n <VCardHeader>\n { hasPrepend && (\n <VCardAvatar>\n { slots.prepend\n ? slots.prepend()\n : (\n <VAvatar\n density={ props.density }\n icon={ props.prependIcon }\n image={ props.prependAvatar }\n />\n )\n }\n </VCardAvatar>\n ) }\n\n { hasHeaderText && (\n <VCardHeaderText>\n { hasTitle && (\n <VCardTitle>\n { slots.title\n ? slots.title()\n : props.title\n }\n </VCardTitle>\n ) }\n\n <VCardSubtitle>\n { slots.subtitle\n ? slots.subtitle()\n : props.subtitle\n }\n </VCardSubtitle>\n </VCardHeaderText>\n ) }\n\n { hasAppend && (\n <VCardAvatar>\n { slots.append\n ? slots.append()\n : (\n <VAvatar\n density={ props.density }\n icon={ props.appendIcon }\n image={ props.appendAvatar }\n />\n )\n }\n </VCardAvatar>\n ) }\n </VCardHeader>\n ) }\n\n { hasText && (\n <VCardText>\n { slots.text ? slots.text() : props.text }\n </VCardText>\n ) }\n\n { slots.default?.() }\n\n { slots.actions && (\n <VCardActions v-slots={{ default: slots.actions }} />\n ) }\n </Tag>\n )\n }\n },\n})\n\nexport type VCard = InstanceType<typeof VCard>\n","// Utilities\nimport { h, Transition, TransitionGroup } from 'vue'\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { FunctionalComponent, Prop } from 'vue'\n\nexport function createCssTransition (\n name: string,\n origin = 'top center 0',\n mode?: string\n) {\n return defineComponent({\n name,\n\n props: {\n group: Boolean,\n hideOnLeave: Boolean,\n leaveAbsolute: Boolean,\n mode: {\n type: String,\n default: mode,\n },\n origin: {\n type: String,\n default: origin,\n },\n },\n\n setup (props, { slots }) {\n return () => {\n const tag = props.group ? TransitionGroup : Transition\n\n return h(tag as FunctionalComponent, {\n name,\n mode: props.mode,\n onBeforeEnter (el: HTMLElement) {\n el.style.transformOrigin = props.origin\n },\n onLeave (el: HTMLElement) {\n if (props.leaveAbsolute) {\n const { offsetTop, offsetLeft, offsetWidth, offsetHeight } = el\n el._transitionInitialStyles = {\n position: el.style.position,\n top: el.style.top,\n left: el.style.left,\n width: el.style.width,\n height: el.style.height,\n }\n el.style.position = 'absolute'\n el.style.top = `${offsetTop}px`\n el.style.left = `${offsetLeft}px`\n el.style.width = `${offsetWidth}px`\n el.style.height = `${offsetHeight}px`\n }\n\n if (props.hideOnLeave) {\n el.style.setProperty('display', 'none', 'important')\n }\n },\n onAfterLeave (el: HTMLElement) {\n if (props.leaveAbsolute && el?._transitionInitialStyles) {\n const { position, top, left, width, height } = el._transitionInitialStyles\n delete el._transitionInitialStyles\n el.style.position = position || ''\n el.style.top = top || ''\n el.style.left = left || ''\n el.style.width = width || ''\n el.style.height = height || ''\n }\n },\n }, slots.default)\n }\n },\n })\n}\n\nexport function createJavascriptTransition (\n name: string,\n functions: Record<string, any>,\n mode = 'in-out'\n) {\n return defineComponent({\n name,\n\n props: {\n mode: {\n type: String,\n default: mode,\n } as Prop<'in-out' | 'out-in' | 'default'>,\n },\n\n setup (props, { slots }) {\n return () => {\n return h(Transition, {\n name,\n // mode: props.mode, // TODO: vuejs/vue-next#3104\n ...functions,\n }, slots.default)\n }\n },\n })\n}\n","// Utilities\nimport { camelize } from 'vue'\n\ninterface HTMLExpandElement extends HTMLElement {\n _parent?: (Node & ParentNode & HTMLElement) | null\n _initialStyle?: {\n transition: string\n overflow: string\n height?: string | null\n width?: string | null\n }\n}\n\nexport default function (expandedParentClass = '', x = false) {\n const sizeProperty = x ? 'width' : 'height' as 'width' | 'height'\n const offsetProperty = camelize(`offset-${sizeProperty}`) as 'offsetHeight' | 'offsetWidth'\n\n return {\n onBeforeEnter (el: HTMLExpandElement) {\n el._parent = el.parentNode as (Node & ParentNode & HTMLElement) | null\n el._initialStyle = {\n transition: el.style.transition,\n overflow: el.style.overflow,\n [sizeProperty]: el.style[sizeProperty],\n }\n },\n\n onEnter (el: HTMLExpandElement) {\n const initialStyle = el._initialStyle!\n\n el.style.setProperty('transition', 'none', 'important')\n // Hide overflow to account for collapsed margins in the calculated height\n el.style.overflow = 'hidden'\n const offset = `${el[offsetProperty]}px`\n\n el.style[sizeProperty] = '0'\n\n void el.offsetHeight // force reflow\n\n el.style.transition = initialStyle.transition\n\n if (expandedParentClass && el._parent) {\n el._parent.classList.add(expandedParentClass)\n }\n\n requestAnimationFrame(() => {\n el.style[sizeProperty] = offset\n })\n },\n\n onAfterEnter: resetStyles,\n onEnterCancelled: resetStyles,\n\n onLeave (el: HTMLExpandElement) {\n el._initialStyle = {\n transition: '',\n overflow: el.style.overflow,\n [sizeProperty]: el.style[sizeProperty],\n }\n\n el.style.overflow = 'hidden'\n el.style[sizeProperty] = `${el[offsetProperty]}px`\n void el.offsetHeight // force reflow\n\n requestAnimationFrame(() => (el.style[sizeProperty] = '0'))\n },\n\n onAfterLeave,\n onLeaveCancelled: onAfterLeave,\n }\n\n function onAfterLeave (el: HTMLExpandElement) {\n if (expandedParentClass && el._parent) {\n el._parent.classList.remove(expandedParentClass)\n }\n resetStyles(el)\n }\n\n function resetStyles (el: HTMLExpandElement) {\n const size = el._initialStyle![sizeProperty]\n el.style.overflow = el._initialStyle!.overflow\n if (size != null) el.style[sizeProperty] = size\n delete el._initialStyle\n }\n}\n","import type { PropType } from 'vue'\nimport { Transition } from 'vue'\nimport { acceleratedEasing, deceleratedEasing, defineComponent, nullifyTransforms } from '@/util'\n\nexport const VDialogTransition = defineComponent({\n name: 'VDialogTransition',\n\n props: {\n target: Object as PropType<HTMLElement>,\n },\n\n setup (props, { slots }) {\n const functions = {\n onBeforeEnter (el: Element) {\n (el as HTMLElement).style.pointerEvents = 'none'\n },\n async onEnter (el: Element, done: () => void) {\n await new Promise(resolve => requestAnimationFrame(resolve))\n\n const { x, y } = getDimensions(props.target!, el as HTMLElement)\n\n const animation = el.animate([\n { transform: `translate(${x}px, ${y}px) scale(0.1)`, opacity: 0 },\n { transform: '' },\n ], {\n duration: 225,\n easing: deceleratedEasing,\n })\n animation.finished.then(() => done())\n },\n onAfterEnter (el: Element) {\n (el as HTMLElement).style.removeProperty('pointer-events')\n },\n onBeforeLeave (el: Element) {\n (el as HTMLElement).style.pointerEvents = 'none'\n },\n async onLeave (el: Element, done: () => void) {\n await new Promise(resolve => requestAnimationFrame(resolve))\n\n const { x, y } = getDimensions(props.target!, el as HTMLElement)\n\n const animation = el.animate([\n { transform: '' },\n { transform: `translate(${x}px, ${y}px) scale(0.1)`, opacity: 0 },\n ], {\n duration: 125,\n easing: acceleratedEasing,\n })\n animation.finished.then(() => done())\n },\n onAfterLeave (el: Element) {\n (el as HTMLElement).style.removeProperty('pointer-events')\n },\n }\n\n return () => {\n return props.target\n ? (\n <Transition\n name=\"dialog-transition\"\n { ...functions }\n css={ false }\n v-slots={ slots }\n />\n )\n : <Transition name=\"dialog-transition\" v-slots={ slots } />\n }\n },\n})\n\nfunction getDimensions (target: HTMLElement, el: HTMLElement) {\n const targetBox = target.getBoundingClientRect()\n const elBox = nullifyTransforms(el)\n const [originX, originY] = getComputedStyle(el).transformOrigin.split(' ').map(v => parseFloat(v))\n\n const [anchorSide, anchorOffset] = getComputedStyle(el).getPropertyValue('--v-overlay-anchor-origin').split(' ')\n\n let offsetX = targetBox.left + targetBox.width / 2\n if (anchorSide === 'left' || anchorOffset === 'left') {\n offsetX -= targetBox.width / 2\n } else if (anchorSide === 'right' || anchorOffset === 'right') {\n offsetX += targetBox.width / 2\n }\n\n let offsetY = targetBox.top + targetBox.height / 2\n if (anchorSide === 'top' || anchorOffset === 'top') {\n offsetY -= targetBox.height / 2\n } else if (anchorSide === 'bottom' || anchorOffset === 'bottom') {\n offsetY += targetBox.height / 2\n }\n\n return {\n x: offsetX - (originX + elBox.left),\n y: offsetY - (originY + elBox.top),\n }\n}\n","import {\n createCssTransition,\n createJavascriptTransition,\n} from './createTransition'\n\nimport ExpandTransitionGenerator from './expand-transition'\n\n// Component specific transitions\nexport const VCarouselTransition = createCssTransition('carousel-transition')\nexport const VCarouselReverseTransition = createCssTransition('carousel-reverse-transition')\nexport const VTabTransition = createCssTransition('tab-transition')\nexport const VTabReverseTransition = createCssTransition('tab-reverse-transition')\nexport const VMenuTransition = createCssTransition('menu-transition')\nexport const VFabTransition = createCssTransition('fab-transition', 'center center', 'out-in')\n\n// Generic transitions\nexport const VDialogBottomTransition = createCssTransition('dialog-bottom-transition')\nexport const VDialogTopTransition = createCssTransition('dialog-top-transition')\nexport const VFadeTransition = createCssTransition('fade-transition')\nexport const VScaleTransition = createCssTransition('scale-transition')\nexport const VScrollXTransition = createCssTransition('scroll-x-transition')\nexport const VScrollXReverseTransition = createCssTransition('scroll-x-reverse-transition')\nexport const VScrollYTransition = createCssTransition('scroll-y-transition')\nexport const VScrollYReverseTransition = createCssTransition('scroll-y-reverse-transition')\nexport const VSlideXTransition = createCssTransition('slide-x-transition')\nexport const VSlideXReverseTransition = createCssTransition('slide-x-reverse-transition')\nexport const VSlideYTransition = createCssTransition('slide-y-transition')\nexport const VSlideYReverseTransition = createCssTransition('slide-y-reverse-transition')\n\n// Javascript transitions\nexport const VExpandTransition = createJavascriptTransition('expand-transition', ExpandTransitionGenerator())\nexport const VExpandXTransition = createJavascriptTransition('expand-x-transition', ExpandTransitionGenerator('', true))\n\nexport { VDialogTransition } from './dialog-transition'\n","// Styles\nimport './VMessages.sass'\n\n// Components\nimport { VSlideYTransition } from '@/components/transitions'\n\n// Composables\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { defineComponent, wrapInArray } from '@/util'\nimport { computed } from 'vue'\nimport type { PropType } from 'vue'\n\nexport const VMessages = defineComponent({\n name: 'VMessages',\n\n props: {\n active: Boolean,\n value: {\n type: [Array, String] as PropType<string | string[]>,\n default: () => ([]),\n },\n\n ...makeTransitionProps({\n transition: {\n component: VSlideYTransition,\n group: true,\n },\n }),\n },\n\n setup (props, { slots }) {\n const messages = computed(() => wrapInArray(props.value))\n\n return () => (\n <MaybeTransition\n transition={ props.transition }\n tag=\"div\"\n class=\"v-messages\"\n >\n { (messages.value.length > 0 && props.active) && (\n messages.value.map((message, i) => (\n <div class=\"v-messages__message\" key={ i }>\n { message }\n </div>\n ))\n ) }\n\n { slots?.default?.() }\n </MaybeTransition>\n )\n },\n})\n","// Utilities\nimport { computed, inject, provide, ref } from 'vue'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { ComputedRef, InjectionKey, PropType, Ref } from 'vue'\n\nexport interface FormProvide {\n register: (\n id: number | string,\n validate: () => Promise<string[]>,\n reset: () => void,\n resetValidation: () => void\n ) => void\n unregister: (id: number | string) => void\n items: Ref<FormField[]>\n isDisabled: ComputedRef<boolean>\n isReadonly: ComputedRef<boolean>\n isValidating: Ref<boolean>\n}\n\ninterface FormField {\n id: number | string\n validate: () => Promise<string[]>\n reset: () => void\n resetValidation: () => void\n}\n\ninterface FormValidationResult {\n id: number | string\n errorMessages: string[]\n}\n\nexport const FormKey: InjectionKey<FormProvide> = Symbol.for('vuetify:form')\n\nexport interface FormProps {\n disabled: boolean\n fastFail: boolean\n lazyValidation: boolean\n readonly: boolean\n modelValue: boolean | null\n 'onUpdate:modelValue': ((val: boolean | null) => void) | undefined\n}\n\nexport const makeFormProps = propsFactory({\n disabled: Boolean,\n fastFail: Boolean,\n lazyValidation: Boolean,\n readonly: Boolean,\n modelValue: {\n type: Boolean as PropType<boolean | null>,\n default: null,\n },\n})\n\nexport function createForm (props: FormProps) {\n const model = useProxiedModel(props, 'modelValue')\n\n const isDisabled = computed(() => props.disabled)\n const isReadonly = computed(() => props.readonly)\n const isValidating = ref(false)\n const items = ref<FormField[]>([])\n const errorMessages = ref<FormValidationResult[]>([])\n\n async function validate () {\n const results = []\n let valid = true\n\n errorMessages.value = []\n model.value = null\n isValidating.value = true\n\n for (const item of items.value) {\n const itemErrorMessages = await item.validate()\n\n if (itemErrorMessages.length > 0) {\n valid = false\n\n results.push({\n id: item.id,\n errorMessages: itemErrorMessages,\n })\n }\n\n if (!valid && props.fastFail) break\n }\n\n errorMessages.value = results\n model.value = valid\n isValidating.value = false\n\n return { valid, errorMessages: errorMessages.value }\n }\n\n function reset () {\n items.value.forEach(item => item.reset())\n model.value = null\n }\n\n function resetValidation () {\n items.value.forEach(item => item.resetValidation())\n errorMessages.value = []\n model.value = null\n }\n\n provide(FormKey, {\n register: (id, validate, reset, resetValidation) => {\n items.value.push({\n id,\n validate,\n reset,\n resetValidation,\n })\n },\n unregister: id => {\n items.value = items.value.filter(item => {\n return item.id !== id\n })\n },\n isDisabled,\n isReadonly,\n isValidating,\n items,\n })\n\n return {\n errorMessages,\n isDisabled,\n isReadonly,\n isValidating,\n items,\n validate,\n reset,\n resetValidation,\n }\n}\n\nexport function useForm () {\n return inject(FormKey, null)\n}\n","// Composables\nimport { useForm } from '@/composables/form'\n\n// Utilities\nimport { computed, onBeforeMount, onBeforeUnmount, ref } from 'vue'\nimport { getCurrentInstanceName, getUid, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\nexport type ValidationResult = string | true\nexport type ValidationRule =\n | ValidationResult\n | PromiseLike<ValidationResult>\n | ((value: any) => ValidationResult)\n | ((value: any) => PromiseLike<ValidationResult>)\n\nexport interface ValidationProps {\n disabled: boolean\n error: boolean\n errorMessages: string | string[]\n maxErrors: string | number\n name: string | undefined\n readonly: boolean\n rules: ValidationRule[]\n modelValue: any\n 'onUpdate:modelValue': ((val: any) => void) | undefined\n}\n\nexport const makeValidationProps = propsFactory({\n disabled: Boolean,\n error: Boolean,\n errorMessages: {\n type: [Array, String] as PropType<string | string[]>,\n default: () => ([]),\n },\n maxErrors: {\n type: [Number, String],\n default: 1,\n },\n name: String,\n readonly: Boolean,\n rules: {\n type: Array as PropType<ValidationRule[]>,\n default: () => ([]),\n },\n modelValue: null,\n})\n\nexport function useValidation (\n props: ValidationProps,\n name = getCurrentInstanceName(),\n) {\n const model = useProxiedModel(props, 'modelValue')\n const form = useForm()\n const errorMessages = ref<string[]>([])\n const isPristine = ref(true)\n const isDisabled = computed(() => !!(props.disabled || form?.isDisabled.value))\n const isReadonly = computed(() => !!(props.readonly || form?.isReadonly.value))\n const isValid = computed(() => {\n if (\n props.error ||\n props.errorMessages?.length ||\n errorMessages.value.length\n ) return false\n\n return isPristine.value ? null : true\n })\n const isValidating = ref(false)\n const validationClasses = computed(() => {\n return {\n [`${name}--error`]: isValid.value === false,\n [`${name}--disabled`]: isDisabled.value,\n [`${name}--readonly`]: isReadonly.value,\n }\n })\n\n const uid = computed(() => props.name ?? getUid())\n\n onBeforeMount(() => {\n form?.register(uid.value, validate, reset, resetValidation)\n })\n\n onBeforeUnmount(() => {\n form?.unregister(uid.value)\n })\n\n function reset () {\n resetValidation()\n model.value = null\n }\n\n function resetValidation () {\n isPristine.value = true\n errorMessages.value = []\n }\n\n async function validate () {\n const results = []\n\n errorMessages.value = []\n isValidating.value = true\n\n for (const rule of props.rules) {\n if (results.length >= (props.maxErrors || 1)) {\n break\n }\n\n const handler = typeof rule === 'function' ? rule : () => rule\n const result = await handler(model.value)\n\n if (result === true) continue\n\n if (typeof result !== 'string') {\n // eslint-disable-next-line no-console\n console.warn(`${result} is not a valid value. Rule functions must return boolean true or a string.`)\n\n continue\n }\n\n results.push(result)\n }\n\n errorMessages.value = results\n isValidating.value = false\n isPristine.value = false\n\n return errorMessages.value\n }\n\n return {\n errorMessages,\n isDisabled,\n isReadonly,\n isPristine,\n isValid,\n isValidating,\n reset,\n resetValidation,\n validate,\n validationClasses,\n }\n}\n","// Styles\nimport './VInput.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VMessages } from '@/components/VMessages'\n\n// Composables\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeValidationProps, useValidation } from '@/composables/validation'\n\n// Utilities\nimport { computed, provide, toRef } from 'vue'\nimport { genericComponent, getUid, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { ComputedRef, ExtractPropTypes, InjectionKey, PropType, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\n\nexport interface VInputSlot {\n id: ComputedRef<string>\n isDisabled: ComputedRef<boolean>\n isFocused: Ref<boolean>\n isReadonly: ComputedRef<boolean>\n isPristine: Ref<boolean>\n isValid: ComputedRef<boolean | null>\n isValidating: Ref<boolean>\n reset: () => void\n resetValidation: () => void\n validate: () => void\n}\n\nexport const VInputSymbol = 'VInput' as any as InjectionKey<ComputedRef<VInputSlot>>\n\nexport const makeVInputProps = propsFactory({\n id: String,\n appendIcon: String,\n prependIcon: String,\n hideDetails: [Boolean, String] as PropType<boolean | 'auto'>,\n hint: String,\n messages: {\n type: [Array, String] as PropType<string | string[]>,\n default: () => ([]),\n },\n persistentHint: Boolean,\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n default: 'horizontal',\n validator: (v: any) => ['horizontal', 'vertical'].includes(v),\n },\n\n ...makeDensityProps(),\n ...makeValidationProps(),\n})\n\nexport const VInput = genericComponent<new <T>() => {\n $slots: MakeSlots<{\n default: [VInputSlot]\n prepend: [VInputSlot]\n append: [VInputSlot]\n details: [VInputSlot]\n }>\n}>()({\n name: 'VInput',\n\n props: {\n focused: Boolean,\n\n ...makeVInputProps(),\n },\n\n emits: {\n 'update:modelValue': (val: any) => true,\n 'click:prepend': (e: MouseEvent) => true,\n 'click:append': (e: MouseEvent) => true,\n },\n\n setup (props, { slots, emit }) {\n const { densityClasses } = useDensity(props)\n const {\n errorMessages,\n isDisabled,\n isReadonly,\n isPristine,\n isValid,\n isValidating,\n reset,\n resetValidation,\n validate,\n validationClasses,\n } = useValidation(props)\n\n const uid = getUid()\n const id = computed(() => props.id || `input-${uid}`)\n const isFocused = toRef(props, 'focused')\n\n const slotProps = computed<VInputSlot>(() => ({\n id,\n isDisabled,\n isFocused,\n isReadonly,\n isPristine,\n isValid,\n isValidating,\n reset,\n resetValidation,\n validate,\n }))\n\n provide(VInputSymbol, slotProps)\n\n useRender(() => {\n const hasPrepend = (slots.prepend || props.prependIcon)\n const hasAppend = (slots.append || props.appendIcon)\n const hasHint = !!(slots.hint || props.hint)\n const hasMessages = !!(\n slots.messages ||\n props.messages?.length ||\n errorMessages.value.length\n )\n const hasDetails = !props.hideDetails || (\n props.hideDetails === 'auto' &&\n (hasMessages || hasHint)\n )\n const showMessages = hasMessages || (\n hasHint &&\n (props.persistentHint || props.focused)\n )\n\n return (\n <div class={[\n 'v-input',\n `v-input--${props.direction}`,\n densityClasses.value,\n validationClasses.value,\n ]}\n >\n { hasPrepend && (\n <div\n class=\"v-input__prepend\"\n onClick={ e => emit('click:prepend', e) }\n >\n { slots?.prepend?.(slotProps.value) }\n\n { props.prependIcon && (\n <VIcon icon={ props.prependIcon } />\n ) }\n </div>\n ) }\n\n <div class=\"v-input__control\">\n { slots.default?.(slotProps.value) }\n </div>\n\n { hasAppend && (\n <div\n class=\"v-input__append\"\n onClick={ e => emit('click:append', e) }\n >\n { slots?.append?.(slotProps.value) }\n\n { props.appendIcon && (\n <VIcon icon={ props.appendIcon } />\n ) }\n </div>\n ) }\n\n { hasDetails && (\n <div class=\"v-input__details\">\n <VMessages\n active={ showMessages }\n value={ errorMessages.value || (hasMessages ? props.messages : props.hint) }\n v-slots={{ default: slots.messages }}\n />\n\n { slots.details?.(slotProps.value) }\n </div>\n ) }\n </div>\n )\n })\n\n return {\n isValid,\n validate,\n reset,\n resetValidation,\n errorMessages,\n }\n },\n})\n\nexport type VInput = InstanceType<typeof VInput>\n\nexport function filterInputProps (props: ExtractPropTypes<ReturnType<typeof makeVInputProps>>) {\n return pick(props, Object.keys(VInput.props) as any)\n}\n","// Styles\nimport './VLabel.sass'\n\n// Composables\nimport { makeThemeProps } from '@/composables/theme'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VLabel = defineComponent({\n name: 'VLabel',\n\n props: {\n disabled: Boolean,\n error: Boolean,\n text: String,\n\n ...makeThemeProps(),\n },\n\n setup (props, { slots }) {\n return () => (\n <label\n class={[\n 'v-label',\n {\n 'v-label--disabled': props.disabled,\n 'v-label--error': props.error,\n },\n ]}\n >\n { props.text }\n\n { slots.default?.() }\n </label>\n )\n },\n})\n\nexport type VLabel = InstanceType<typeof VLabel>\n","// Styles\nimport './VSelectionControlGroup.sass'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utility\nimport { computed, defineComponent, provide, toRef } from 'vue'\nimport { getUid, useRender } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType, Ref } from 'vue'\n\nexport interface VSelectionGroupContext {\n disabled: Ref<boolean>\n inline: Ref<boolean>\n name: Ref<string | undefined>\n modelValue: Ref<any>\n multiple: Ref<boolean>\n trueIcon: Ref<string | undefined>\n falseIcon: Ref<string | undefined>\n readonly: Ref<boolean>\n type: Ref<string | undefined>\n}\n\nexport const VSelectionControlGroupSymbol: InjectionKey<VSelectionGroupContext> = Symbol.for('vuetify:selection-control-group')\n\nexport const VSelectionControlGroup = defineComponent({\n name: 'VSelectionControlGroup',\n\n props: {\n disabled: Boolean,\n id: String,\n inline: Boolean,\n name: String,\n falseIcon: String,\n trueIcon: String,\n multiple: {\n type: Boolean as PropType<boolean | null>,\n default: null,\n },\n readonly: Boolean,\n type: String,\n modelValue: null,\n },\n\n emits: {\n 'update:modelValue': (val: any) => true,\n },\n\n setup (props, { slots }) {\n const modelValue = useProxiedModel(props, 'modelValue')\n const uid = getUid()\n const id = computed(() => props.id || `v-selection-control-group-${uid}`)\n const name = computed(() => props.name || id.value)\n\n provide(VSelectionControlGroupSymbol, {\n disabled: toRef(props, 'disabled'),\n inline: toRef(props, 'inline'),\n modelValue,\n multiple: computed(() => !!props.multiple || (props.multiple == null && Array.isArray(modelValue.value))),\n name,\n falseIcon: toRef(props, 'falseIcon'),\n trueIcon: toRef(props, 'trueIcon'),\n readonly: toRef(props, 'readonly'),\n type: toRef(props, 'type'),\n })\n\n useRender(() => {\n return (\n <div\n class=\"v-selection-control-group\"\n aria-labelled-by={ props.type === 'radio' ? id.value : undefined }\n role={ props.type === 'radio' ? 'radiogroup' : undefined }\n >\n { slots?.default?.() }\n </div>\n )\n })\n\n return {}\n },\n})\n\nexport type VSelectionControlGroup = InstanceType<typeof VSelectionControlGroup>\n","// Styles\nimport './VSelectionControl.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VLabel } from '@/components/VLabel'\nimport { VSelectionControlGroupSymbol } from '@/components/VSelectionControlGroup/VSelectionControlGroup'\n\n// Composables\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeThemeProps } from '@/composables/theme'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useTextColor } from '@/composables/color'\n\n// Directives\nimport { Ripple } from '@/directives/ripple'\n\n// Utilities\nimport { computed, inject, ref } from 'vue'\nimport {\n deepEqual,\n genericComponent,\n getUid,\n pick,\n propsFactory,\n SUPPORTS_FOCUS_VISIBLE,\n useRender,\n wrapInArray,\n} from '@/util'\n\n// Types\nimport type { ComputedRef, ExtractPropTypes, PropType, Ref, WritableComputedRef } from 'vue'\nimport type { MakeSlots } from '@/util'\n\nexport type SelectionControlSlot = {\n model: WritableComputedRef<any>\n isReadonly: ComputedRef<boolean>\n isDisabled: ComputedRef<boolean>\n textColorClasses: Ref<string[]>\n props: {\n onBlur: (e: Event) => void\n onFocus: (e: FocusEvent) => void\n id: string\n }\n}\n\nexport const makeSelectionControlProps = propsFactory({\n color: String,\n disabled: Boolean,\n error: Boolean,\n id: String,\n inline: Boolean,\n label: String,\n falseIcon: String,\n trueIcon: String,\n ripple: {\n type: Boolean,\n default: true,\n },\n multiple: {\n type: Boolean as PropType<boolean | null>,\n default: null,\n },\n name: String,\n readonly: Boolean,\n trueValue: null,\n falseValue: null,\n modelValue: null,\n type: String,\n value: null,\n valueComparator: {\n type: Function as PropType<typeof deepEqual>,\n default: deepEqual,\n },\n\n ...makeThemeProps(),\n ...makeDensityProps(),\n})\n\nexport function useSelectionControl (\n props: ExtractPropTypes<ReturnType<typeof makeSelectionControlProps>> & {\n 'onUpdate:modelValue': ((val: any) => void) | undefined\n }\n) {\n const group = inject(VSelectionControlGroupSymbol, undefined)\n const { densityClasses } = useDensity(props)\n const modelValue = useProxiedModel(props, 'modelValue')\n const trueValue = computed(() => (\n props.trueValue !== undefined ? props.trueValue\n : props.value !== undefined ? props.value\n : true\n ))\n const falseValue = computed(() => props.falseValue !== undefined ? props.falseValue : false)\n const isMultiple = computed(() => (\n group?.multiple.value ||\n !!props.multiple ||\n (props.multiple == null && Array.isArray(modelValue.value))\n ))\n const model = computed({\n get () {\n const val = group ? group.modelValue.value : modelValue.value\n\n return isMultiple.value\n ? val.some((v: any) => props.valueComparator(v, trueValue.value))\n : props.valueComparator(val, trueValue.value)\n },\n set (val: boolean) {\n const currentValue = val ? trueValue.value : falseValue.value\n\n let newVal = currentValue\n\n if (isMultiple.value) {\n newVal = val\n ? [...wrapInArray(modelValue.value), currentValue]\n : wrapInArray(modelValue.value).filter((item: any) => !props.valueComparator(item, trueValue.value))\n }\n\n if (group) {\n group.modelValue.value = newVal\n } else {\n modelValue.value = newVal\n }\n },\n })\n const { textColorClasses, textColorStyles } = useTextColor(computed(() => {\n return (\n model.value &&\n !props.error &&\n !props.disabled\n ) ? props.color : undefined\n }))\n const icon = computed(() => {\n return model.value\n ? group?.trueIcon.value ?? props.trueIcon\n : group?.falseIcon.value ?? props.falseIcon\n })\n\n return {\n group,\n densityClasses,\n trueValue,\n falseValue,\n model,\n textColorClasses,\n textColorStyles,\n icon,\n }\n}\n\nexport const VSelectionControl = genericComponent<new <T>() => {\n $props: {\n modelValue?: T\n 'onUpdate:modelValue'?: (val: T) => any\n }\n $slots: MakeSlots<{\n default: []\n input: [SelectionControlSlot]\n }>\n}>()({\n name: 'VSelectionControl',\n\n directives: { Ripple },\n\n inheritAttrs: false,\n\n props: makeSelectionControlProps(),\n\n emits: {\n 'update:modelValue': (val: any) => true,\n },\n\n setup (props, { attrs, slots }) {\n const {\n densityClasses,\n group,\n icon,\n model,\n textColorClasses,\n textColorStyles,\n trueValue,\n } = useSelectionControl(props)\n const uid = getUid()\n const id = computed(() => props.id || `input-${uid}`)\n const isFocused = ref(false)\n const isFocusVisible = ref(false)\n const input = ref<HTMLInputElement>()\n\n function onFocus (e: FocusEvent) {\n isFocused.value = true\n if (\n !SUPPORTS_FOCUS_VISIBLE ||\n (SUPPORTS_FOCUS_VISIBLE && (e.target as HTMLElement).matches(':focus-visible'))\n ) {\n isFocusVisible.value = true\n }\n }\n\n function onBlur () {\n isFocused.value = false\n isFocusVisible.value = false\n }\n\n useRender(() => {\n const label = slots.label\n ? slots.label({\n label: props.label,\n props: { for: id.value },\n })\n : props.label\n const type = group?.type.value ?? props.type\n\n return (\n <div\n class={[\n 'v-selection-control',\n {\n 'v-selection-control--dirty': model.value,\n 'v-selection-control--disabled': props.disabled,\n 'v-selection-control--error': props.error,\n 'v-selection-control--focused': isFocused.value,\n 'v-selection-control--focus-visible': isFocusVisible.value,\n 'v-selection-control--inline': group?.inline.value || props.inline,\n },\n densityClasses.value,\n textColorClasses.value,\n ]}\n >\n <div class=\"v-selection-control__wrapper\">\n { slots.default?.() }\n\n <div\n class={[\n 'v-selection-control__input',\n ]}\n style={ textColorStyles.value }\n v-ripple={ props.ripple && [\n !props.disabled && !props.readonly,\n null,\n ['center', 'circle'],\n ]}\n >\n { icon.value && <VIcon icon={ icon.value } /> }\n\n <input\n v-model={ model.value }\n ref={ input }\n disabled={ props.disabled }\n id={ id.value }\n onBlur={ onBlur }\n onFocus={ onFocus }\n readonly={ props.readonly }\n type={ type }\n value={ trueValue.value }\n name={ group?.name.value ?? props.name }\n aria-checked={ type === 'checkbox' ? model.value : undefined }\n { ...attrs }\n />\n\n { slots.input?.({\n model,\n textColorClasses,\n props: {\n onFocus,\n onBlur,\n id: id.value,\n },\n }) }\n </div>\n </div>\n\n <VLabel\n disabled={ props.disabled }\n error={ props.error }\n for={ id.value }\n >\n { label }\n </VLabel>\n </div>\n )\n })\n\n return {\n isFocused,\n input,\n }\n },\n})\n\nexport type VSelectionControl = InstanceType<typeof VSelectionControl>\n\nexport function filterControlProps (props: ExtractPropTypes<ReturnType<typeof makeSelectionControlProps>>) {\n return pick(props, Object.keys(VSelectionControl.props) as any)\n}\n","// Styles\nimport './VCheckbox.sass'\n\n// Components\nimport { filterInputProps, makeVInputProps, VInput } from '@/components/VInput/VInput'\nimport { filterControlProps, makeSelectionControlProps, VSelectionControl } from '@/components/VSelectionControl/VSelectionControl'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utility\nimport { computed, defineComponent } from 'vue'\nimport { filterInputAttrs, useRender } from '@/util'\n\nexport const VCheckbox = defineComponent({\n name: 'VCheckbox',\n\n inheritAttrs: false,\n\n props: {\n indeterminate: Boolean,\n indeterminateIcon: {\n type: String,\n default: '$checkboxIndeterminate',\n },\n\n ...makeVInputProps(),\n ...makeSelectionControlProps(),\n\n falseIcon: {\n type: String,\n default: '$checkboxOff',\n },\n trueIcon: {\n type: String,\n default: '$checkboxOn',\n },\n },\n\n emits: {\n 'update:indeterminate': (val: boolean) => true,\n },\n\n setup (props, { attrs, slots }) {\n const indeterminate = useProxiedModel(props, 'indeterminate')\n const falseIcon = computed(() => {\n return indeterminate.value\n ? props.indeterminateIcon\n : props.falseIcon\n })\n const trueIcon = computed(() => {\n return indeterminate.value\n ? props.indeterminateIcon\n : props.trueIcon\n })\n\n function onChange () {\n if (indeterminate.value) {\n indeterminate.value = false\n }\n }\n\n useRender(() => {\n const [inputAttrs, controlAttrs] = filterInputAttrs(attrs)\n const [inputProps, _1] = filterInputProps(props)\n const [controlProps, _2] = filterControlProps(props)\n\n return (\n <VInput\n class=\"v-checkbox\"\n { ...inputAttrs }\n { ...inputProps }\n >\n {{\n ...slots,\n default: ({\n isDisabled,\n isReadonly,\n }) => (\n <VSelectionControl\n { ...controlProps }\n type=\"checkbox\"\n onUpdate:modelValue={ onChange }\n falseIcon={ falseIcon.value }\n trueIcon={ trueIcon.value }\n aria-checked={ indeterminate.value ? 'mixed' : undefined }\n disabled={ isDisabled.value }\n readonly={ isReadonly.value }\n { ...controlAttrs }\n />\n ),\n }}\n </VInput>\n )\n })\n\n return {}\n },\n})\n\nexport type VCheckbox = InstanceType<typeof VCheckbox>\n","// Styles\nimport './VChip.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeRouterProps, useLink } from '@/composables/router'\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport { Ripple } from '@/directives/ripple'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VChip = defineComponent({\n name: 'VChip',\n\n directives: { Ripple },\n\n props: {\n activeClass: String,\n appendAvatar: String,\n appendIcon: String,\n closable: Boolean,\n closeIcon: {\n type: String,\n default: '$delete',\n },\n closeLabel: {\n type: String,\n default: '$vuetify.close',\n },\n disabled: Boolean,\n draggable: Boolean,\n filter: Boolean,\n filterIcon: {\n type: String,\n default: '$complete',\n },\n label: Boolean,\n link: Boolean,\n pill: Boolean,\n prependAvatar: String,\n prependIcon: String,\n ripple: {\n type: Boolean,\n default: true,\n },\n text: String,\n modelValue: {\n type: Boolean,\n default: true,\n },\n\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeElevationProps(),\n ...makeRoundedProps(),\n ...makeRouterProps(),\n ...makeSizeProps(),\n ...makeTagProps({ tag: 'span' }),\n ...makeThemeProps(),\n ...makeVariantProps({ variant: 'contained' } as const),\n },\n\n emits: {\n 'click:close': (e: Event) => true,\n 'update:active': (value: Boolean) => true,\n 'update:modelValue': (value: Boolean) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const isActive = useProxiedModel(props, 'modelValue')\n\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { colorClasses, colorStyles, variantClasses } = useVariant(props)\n const { elevationClasses } = useElevation(props)\n const { roundedClasses } = useRounded(props)\n const { sizeClasses } = useSize(props)\n const { densityClasses } = useDensity(props)\n const link = useLink(props, attrs)\n\n function onCloseClick (e: Event) {\n isActive.value = false\n\n emit('click:close', e)\n }\n\n return () => {\n const Tag = (link.isLink.value) ? 'a' : props.tag\n const hasAppend = !!(slots.append || props.appendIcon || props.appendAvatar)\n const hasClose = !!(slots.close || props.closable)\n const hasPrepend = !!(slots.prepend || props.prependIcon || props.prependAvatar)\n const isClickable = !props.disabled && (link.isClickable.value || props.link)\n\n return isActive.value && (\n <Tag\n class={[\n 'v-chip',\n {\n 'v-chip--disabled': props.disabled,\n 'v-chip--label': props.label,\n 'v-chip--link': isClickable,\n 'v-chip--pill': props.pill,\n },\n themeClasses.value,\n borderClasses.value,\n colorClasses.value,\n densityClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n sizeClasses.value,\n variantClasses.value,\n ]}\n style={ [colorStyles.value] }\n disabled={ props.disabled || undefined }\n draggable={ props.draggable }\n href={ link.href.value }\n v-ripple={ [isClickable && props.ripple, null] }\n onClick={ isClickable && link.navigate }\n >\n { genOverlays(isClickable, 'v-chip') }\n\n { hasPrepend && (\n <div class=\"v-chip__prepend\">\n { slots.prepend\n ? slots.prepend()\n : (\n <VAvatar\n icon={ props.prependIcon }\n image={ props.prependAvatar }\n size={ props.size }\n />\n )\n }\n </div>\n ) }\n\n { slots.default?.() ?? props.text }\n\n { hasAppend && (\n <div class=\"v-chip__append\">\n { slots.append\n ? slots.append()\n : (\n <VAvatar\n icon={ props.appendIcon }\n image={ props.appendAvatar }\n size={ props.size }\n />\n )\n }\n </div>\n ) }\n\n { hasClose && (\n <div\n class=\"v-chip__close\"\n onClick={ onCloseClick }\n >\n { slots.close\n ? slots.close({ props: { onClick: onCloseClick } })\n : (\n <VIcon\n icon={ props.closeIcon }\n size=\"x-small\"\n />\n )\n }\n </div>\n ) }\n </Tag>\n )\n }\n },\n})\n\nexport type VChip = InstanceType<typeof VChip>\n","import './VCode.sass'\n\nimport { createSimpleFunctional } from '@/util'\n\nexport const VCode = createSimpleFunctional('v-code')\n","// Styles\nimport './VCounter.sass'\n\n// Components\nimport { VSlideYTransition } from '@/components/transitions'\n\n// Utilities\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\nimport { computed, defineComponent } from 'vue'\n\nexport const VCounter = defineComponent({\n name: 'VCounter',\n\n functional: true,\n\n props: {\n active: Boolean,\n max: [Number, String],\n value: {\n type: [Number, String],\n default: 0,\n },\n\n ...makeTransitionProps({\n transition: { component: VSlideYTransition },\n }),\n },\n\n setup (props, { slots }) {\n const counter = computed(() => {\n return props.max ? `${props.value} / ${props.max}` : String(props.value)\n })\n\n return () => {\n return (\n <MaybeTransition transition={ props.transition }>\n <div\n v-show={ props.active }\n class=\"v-counter\"\n >\n { slots.default\n ? slots.default({\n counter: counter.value,\n max: props.max,\n value: props.value,\n })\n : counter.value\n }\n </div>\n </MaybeTransition>\n )\n }\n },\n})\n","// Composables\nimport { provideDefaults } from '@/composables/defaults'\n\n// Utilities\nimport { defineComponent, toRefs } from 'vue'\n\n// Types\nimport type { DefaultsOptions } from '@/composables/defaults'\nimport type { PropType } from 'vue'\n\nexport const VDefaultsProvider = defineComponent({\n name: 'VDefaultsProvider',\n\n props: {\n defaults: Object as PropType<DefaultsOptions>,\n reset: [Number, String],\n root: Boolean,\n scoped: Boolean,\n },\n\n setup (props, { slots }) {\n const { defaults, reset, root, scoped } = toRefs(props)\n\n provideDefaults(defaults, {\n reset,\n root,\n scoped,\n })\n\n return () => slots.default?.()\n },\n})\n","// Utilities\nimport { IN_BROWSER, propsFactory } from '@/util'\n\n// Types\nexport interface DelayProps {\n closeDelay?: number | string\n openDelay?: number | string\n}\n\n// Composables\nexport const makeDelayProps = propsFactory({\n closeDelay: [Number, String],\n openDelay: [Number, String],\n}, 'delay')\n\nexport function useDelay (props: DelayProps, cb?: (value: boolean) => void) {\n const delays: Partial<Record<keyof DelayProps, number>> = {}\n const runDelayFactory = (prop: keyof DelayProps) => (): Promise<boolean> => {\n // istanbul ignore next\n if (!IN_BROWSER) return Promise.resolve(true)\n\n const active = prop === 'openDelay'\n\n delays.closeDelay && window.clearTimeout(delays.closeDelay)\n delete delays.closeDelay\n\n delays.openDelay && window.clearTimeout(delays.openDelay)\n delete delays.openDelay\n\n return new Promise(resolve => {\n const delay = parseInt(props[prop] ?? 0, 10)\n\n delays[prop] = window.setTimeout(() => {\n cb?.(active)\n resolve(active)\n }, delay)\n })\n }\n\n return {\n runCloseDelay: runDelayFactory('closeDelay'),\n runOpenDelay: runDelayFactory('openDelay'),\n }\n}\n","// Utilities\nimport { getCurrentInstance, IN_BROWSER, propsFactory, SUPPORTS_FOCUS_VISIBLE } from '@/util'\nimport { makeDelayProps, useDelay } from '@/composables/delay'\nimport {\n computed,\n effectScope,\n nextTick,\n onScopeDispose,\n ref,\n watch,\n} from 'vue'\n\n// Types\nimport type { DelayProps } from '@/composables/delay'\nimport type {\n ComponentPublicInstance,\n EffectScope,\n PropType,\n Ref,\n} from 'vue'\n\ninterface ActivatorProps extends DelayProps {\n activator?: 'parent' | string | Element | ComponentPublicInstance\n activatorProps: Record<string, any>\n\n openOnClick: boolean | undefined\n openOnHover: boolean\n openOnFocus: boolean | undefined\n}\n\nexport const makeActivatorProps = propsFactory({\n activator: [String, Object] as PropType<ActivatorProps['activator']>,\n activatorProps: {\n type: Object as PropType<ActivatorProps['activatorProps']>,\n default: () => ({}),\n },\n\n openOnClick: {\n type: Boolean,\n default: undefined,\n },\n openOnHover: Boolean,\n openOnFocus: {\n type: Boolean,\n default: undefined,\n },\n\n ...makeDelayProps(),\n})\n\nexport function useActivator (\n props: ActivatorProps,\n isActive: Ref<boolean>\n) {\n const activatorEl = ref<HTMLElement>()\n\n let isHovered = false\n let isFocused = false\n\n const openOnFocus = computed(() => props.openOnFocus || (props.openOnFocus == null && props.openOnHover))\n const openOnClick = computed(() => props.openOnClick || (props.openOnClick == null && !props.openOnHover && !openOnFocus.value))\n\n const { runOpenDelay, runCloseDelay } = useDelay(props, value => {\n if (value === (\n (props.openOnHover && isHovered) ||\n (openOnFocus.value && isFocused)\n )) {\n isActive.value = value\n }\n })\n\n const availableEvents = {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n isActive.value = !isActive.value\n },\n mouseenter: (e: MouseEvent) => {\n isHovered = true\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n runOpenDelay()\n },\n mouseleave: (e: MouseEvent) => {\n isHovered = false\n runCloseDelay()\n },\n focus: (e: FocusEvent) => {\n if (\n SUPPORTS_FOCUS_VISIBLE &&\n !(e.target as HTMLElement).matches(':focus-visible')\n ) return\n\n isFocused = true\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n\n runOpenDelay()\n },\n blur: (e: FocusEvent) => {\n isFocused = false\n e.stopPropagation()\n\n runCloseDelay()\n },\n }\n\n const activatorEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n\n if (openOnClick.value) {\n events.click = availableEvents.click\n }\n if (props.openOnHover) {\n events.mouseenter = availableEvents.mouseenter\n events.mouseleave = availableEvents.mouseleave\n }\n if (openOnFocus.value) {\n events.focus = availableEvents.focus\n events.blur = availableEvents.blur\n }\n\n return events\n })\n\n let scope: EffectScope\n watch(() => !!props.activator, val => {\n if (val && IN_BROWSER) {\n scope = effectScope()\n scope.run(() => {\n _useActivator(props, { activatorEl, activatorEvents })\n })\n } else if (scope) {\n scope.stop()\n }\n }, { flush: 'post', immediate: true })\n\n return { activatorEl, activatorEvents }\n}\n\nfunction _useActivator (props: ActivatorProps, { activatorEl, activatorEvents }: ReturnType<typeof useActivator>) {\n watch(() => props.activator, (val, oldVal) => {\n if (oldVal && val !== oldVal) {\n const activator = getActivator(oldVal)\n activator && unbindActivatorProps(activator)\n }\n if (val) {\n nextTick(() => bindActivatorProps())\n }\n }, { immediate: true })\n\n watch(() => props.activatorProps, () => {\n bindActivatorProps()\n })\n\n onScopeDispose(() => {\n unbindActivatorProps()\n })\n\n function bindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.addEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n if (_props[k] == null) {\n el.removeAttribute(k)\n } else {\n el.setAttribute(k, _props[k])\n }\n })\n }\n\n function unbindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.removeEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n el.removeAttribute(k)\n })\n }\n\n const vm = getCurrentInstance('useActivator')\n function getActivator (selector = props.activator): HTMLElement | undefined {\n let activator\n if (selector) {\n if (selector === 'parent') {\n activator = vm?.proxy?.$el?.parentNode\n } else if (typeof selector === 'string') {\n // Selector\n activator = document.querySelector(selector)\n } else if ('$el' in selector) {\n // Component (ref)\n activator = selector.$el\n } else {\n // HTMLElement | Element\n activator = selector\n }\n }\n\n // The activator should only be a valid element (Ignore comments and text nodes)\n activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : null\n\n return activatorEl.value\n }\n}\n","const block = ['top', 'bottom'] as const\nconst inline = ['start', 'end'] as const\ntype Tblock = typeof block[number]\ntype Tinline = typeof inline [number]\nexport type Anchor =\n | Tblock\n | Tinline\n | 'center'\n | 'center center'\n | `${Tblock} ${Tinline | 'center'}`\n | `${Tinline} ${Tblock | 'center'}`\nexport type ParsedAnchor =\n | { side: 'center', align: 'center' }\n | { side: Tblock, align: Tinline | 'center' }\n | { side: Tinline, align: Tblock | 'center' }\n\n/** Parse a raw anchor string into an object */\nexport function parseAnchor (anchor: Anchor) {\n let [side, align] = anchor.split(' ')\n if (!align) {\n align =\n side === 'top' || side === 'bottom' ? 'start'\n : side === 'start' || side === 'end' ? 'top'\n : 'center'\n }\n return {\n side,\n align,\n } as ParsedAnchor\n}\n\n/** Get an anchor directly opposite, with the same alignment */\nexport function oppositeAnchor (anchor: ParsedAnchor) {\n return {\n side: {\n center: 'center',\n top: 'bottom',\n bottom: 'top',\n start: 'end',\n end: 'start',\n }[anchor.side],\n align: anchor.align,\n } as ParsedAnchor\n}\n\n/** Convert start/end into left/right */\nexport function physicalAnchor (anchor: ParsedAnchor, el: HTMLElement) {\n const { side, align } = anchor\n const { direction } = window.getComputedStyle(el)\n\n const map: Record<string, string | undefined> = direction === 'ltr' ? {\n start: 'left',\n end: 'right',\n } : {\n start: 'right',\n end: 'left',\n }\n\n return (map[side] ?? side) + ' ' + (map[align] ?? align)\n}\n","import type { ParsedAnchor } from './anchor'\nimport type { Box } from '@/util/box'\n\ntype Point = { x: number, y: number }\ndeclare class As<T extends string> {\n private as: T\n}\ntype ElementPoint = Point & As<'element'>\ntype ViewportPoint = Point & As<'viewport'>\ntype Offset = Point & As<'offset'>\n\n/** Convert a point in local space to viewport space */\nexport function elementToViewport (point: ElementPoint, offset: Offset | Box) {\n return {\n x: point.x + offset.x,\n y: point.y + offset.y,\n } as ViewportPoint\n}\n\n/** Convert a point in viewport space to local space */\nexport function viewportToElement (point: ViewportPoint, offset: Offset | Box) {\n return {\n x: point.x - offset.x,\n y: point.y - offset.y,\n } as ElementPoint\n}\n\n/** Get the difference between two points */\nexport function getOffset<T extends Point> (a: T, b: T) {\n return {\n x: a.x - b.x,\n y: a.y - b.y,\n } as Offset\n}\n\n/** Convert an anchor object to a point in local space */\nexport function anchorToPoint (anchor: ParsedAnchor, box: Box): ViewportPoint {\n if (anchor.side === 'top' || anchor.side === 'bottom') {\n const { side, align } = anchor\n\n const x: number =\n align === 'start' ? 0\n : align === 'center' ? box.width / 2\n : align === 'end' ? box.width\n : align\n const y: number =\n side === 'top' ? 0\n : side === 'bottom' ? box.height\n : side\n\n return elementToViewport({ x, y } as ElementPoint, box)\n } else if (anchor.side === 'start' || anchor.side === 'end') {\n const { side, align } = anchor\n\n const x: number =\n side === 'start' ? 0\n : side === 'end' ? box.width\n : side\n const y: number =\n align === 'top' ? 0\n : align === 'center' ? box.height / 2\n : align === 'bottom' ? box.height\n : align\n\n return elementToViewport({ x, y } as ElementPoint, box)\n }\n\n return elementToViewport({\n x: box.width / 2,\n y: box.height / 2,\n } as ElementPoint, box)\n}\n","// Utilities\nimport { computed, effectScope, nextTick, onScopeDispose, ref, watch, watchEffect } from 'vue'\nimport { convertToUnit, getScrollParent, IN_BROWSER, isFixedPosition, nullifyTransforms, propsFactory } from '@/util'\nimport { oppositeAnchor, parseAnchor, physicalAnchor } from './util/anchor'\nimport { anchorToPoint, getOffset } from './util/point'\n\n// Types\nimport type { EffectScope, PropType, Ref } from 'vue'\nimport type { Anchor } from './util/anchor'\nimport { Box } from '@/util/box'\n\nexport interface PositionStrategyData {\n contentEl: Ref<HTMLElement | undefined>\n activatorEl: Ref<HTMLElement | undefined>\n isActive: Ref<boolean>\n}\n\nconst positionStrategies = {\n static: staticPositionStrategy, // specific viewport position, usually centered\n connected: connectedPositionStrategy, // connected to a certain element\n}\n\nexport interface StrategyProps {\n positionStrategy: keyof typeof positionStrategies | (\n (\n data: PositionStrategyData,\n props: StrategyProps,\n contentStyles: Ref<Record<string, string>>\n ) => undefined | { updatePosition: (e: Event) => void }\n )\n anchor: Anchor\n origin: Anchor | 'auto' | 'overlap'\n offset?: number | string\n maxHeight?: number | string\n maxWidth?: number | string\n minHeight?: number | string\n minWidth?: number | string\n}\n\nexport const makePositionStrategyProps = propsFactory({\n positionStrategy: {\n type: [String, Function] as PropType<StrategyProps['positionStrategy']>,\n default: 'static',\n validator: (val: any) => typeof val === 'function' || val in positionStrategies,\n },\n anchor: {\n type: String as PropType<StrategyProps['anchor']>,\n default: 'bottom',\n },\n origin: {\n type: String as PropType<StrategyProps['origin']>,\n default: 'auto',\n },\n offset: [Number, String],\n})\n\nexport function usePositionStrategies (\n props: StrategyProps,\n data: PositionStrategyData\n) {\n const contentStyles = ref({})\n const updatePosition = ref<(e: Event) => void>()\n\n let scope: EffectScope | undefined\n watchEffect(async () => {\n scope?.stop()\n updatePosition.value = undefined\n\n if (!(IN_BROWSER && data.isActive.value && props.positionStrategy)) return\n\n scope = effectScope()\n await nextTick()\n scope.run(() => {\n if (typeof props.positionStrategy === 'function') {\n updatePosition.value = props.positionStrategy(data, props, contentStyles)?.updatePosition\n } else {\n updatePosition.value = positionStrategies[props.positionStrategy](data, props, contentStyles)?.updatePosition\n }\n })\n })\n\n IN_BROWSER && window.addEventListener('resize', onResize, { passive: true })\n\n onScopeDispose(() => {\n IN_BROWSER && window.removeEventListener('resize', onResize)\n updatePosition.value = undefined\n scope?.stop()\n })\n\n function onResize (e: Event) {\n updatePosition.value?.(e)\n }\n\n return {\n contentStyles,\n updatePosition,\n }\n}\n\nfunction staticPositionStrategy () {\n // TODO\n}\n\nfunction connectedPositionStrategy (data: PositionStrategyData, props: StrategyProps, contentStyles: Ref<Record<string, string>>) {\n const activatorFixed = isFixedPosition(data.activatorEl.value)\n if (activatorFixed) {\n Object.assign(contentStyles.value, {\n position: 'fixed',\n })\n }\n\n const preferredAnchor = computed(() => parseAnchor(props.anchor))\n const preferredOrigin = computed(() =>\n props.origin === 'overlap' ? preferredAnchor.value\n : props.origin === 'auto' ? oppositeAnchor(preferredAnchor.value)\n : parseAnchor(props.origin)\n )\n const doesOverlap = computed(() => {\n return preferredAnchor.value.side === preferredOrigin.value.side\n })\n\n const configuredMaxHeight = computed(() => {\n const val = parseFloat(props.maxHeight!)\n return isNaN(val) ? Infinity : val\n })\n\n const configuredMinWidth = computed(() => {\n const val = parseFloat(props.minWidth!)\n return isNaN(val) ? Infinity : val\n })\n\n let observe = false\n const observer = new ResizeObserver(() => {\n if (observe) updatePosition()\n })\n observer.observe(data.activatorEl.value!)\n observer.observe(data.contentEl.value!)\n\n onScopeDispose(() => {\n observer.disconnect()\n })\n\n // eslint-disable-next-line max-statements\n function updatePosition () {\n observe = false\n requestAnimationFrame(() => {\n requestAnimationFrame(() => observe = true)\n })\n\n const targetBox = data.activatorEl.value!.getBoundingClientRect()\n // TODO: offset shouldn't affect width\n if (props.offset) {\n targetBox.x -= +props.offset\n targetBox.y -= +props.offset\n targetBox.width += +props.offset * 2\n targetBox.height += +props.offset * 2\n }\n\n const scrollParent = getScrollParent(data.contentEl.value)\n const viewportWidth = scrollParent.clientWidth\n const viewportHeight = Math.min(scrollParent.clientHeight, window.innerHeight)\n\n let contentBox\n {\n const scrollables = new Map<Element, [number, number]>()\n data.contentEl.value!.querySelectorAll('*').forEach(el => {\n const x = el.scrollLeft\n const y = el.scrollTop\n if (x || y) {\n scrollables.set(el, [x, y])\n }\n })\n\n const initialMaxWidth = data.contentEl.value!.style.maxWidth\n const initialMaxHeight = data.contentEl.value!.style.maxHeight\n data.contentEl.value!.style.removeProperty('max-width')\n data.contentEl.value!.style.removeProperty('max-height')\n\n contentBox = nullifyTransforms(data.contentEl.value!)\n contentBox.x -= parseFloat(data.contentEl.value!.style.left) || 0\n contentBox.y -= parseFloat(data.contentEl.value!.style.top) || 0\n\n data.contentEl.value!.style.maxWidth = initialMaxWidth\n data.contentEl.value!.style.maxHeight = initialMaxHeight\n scrollables.forEach((position, el) => {\n el.scrollTo(...position)\n })\n }\n\n const contentHeight = Math.min(configuredMaxHeight.value, contentBox.height)\n\n const viewportMargin = 12\n const freeSpace = {\n top: targetBox.top - viewportMargin,\n bottom: viewportHeight - targetBox.bottom - viewportMargin,\n left: targetBox.left - viewportMargin,\n right: viewportWidth - targetBox.right - viewportMargin,\n }\n\n const fitsY = (preferredAnchor.value.side === 'bottom' && contentHeight <= freeSpace.bottom) ||\n (preferredAnchor.value.side === 'top' && contentHeight <= freeSpace.top)\n\n const anchor = fitsY ? preferredAnchor.value\n : (preferredAnchor.value.side === 'bottom' && freeSpace.top > freeSpace.bottom) ||\n (preferredAnchor.value.side === 'top' && freeSpace.bottom > freeSpace.top) ? oppositeAnchor(preferredAnchor.value)\n : preferredAnchor.value\n const origin = fitsY ? preferredOrigin.value : oppositeAnchor(anchor)\n\n const canFill = doesOverlap.value || ['center', 'top', 'bottom'].includes(anchor.side)\n\n const maxWidth = canFill ? Math.min(viewportWidth, Math.max(targetBox.width, viewportWidth - viewportMargin * 2))\n : anchor.side === 'end' ? freeSpace.right\n : anchor.side === 'start' ? freeSpace.left\n : null\n const minWidth = Math.min(configuredMinWidth.value, maxWidth!, targetBox.width)\n const maxHeight = fitsY ? configuredMaxHeight.value : Math.min(\n configuredMaxHeight.value,\n Math.floor(anchor.side === 'top' ? freeSpace.top : freeSpace.bottom)\n )\n\n const targetPoint = anchorToPoint(anchor, targetBox)\n const contentPoint = anchorToPoint(origin, new Box({\n ...contentBox,\n height: Math.min(contentHeight, maxHeight),\n }))\n\n const { x, y } = getOffset(targetPoint, contentPoint)\n\n Object.assign(contentStyles.value, {\n '--v-overlay-anchor-origin': physicalAnchor(anchor, data.activatorEl.value!),\n top: convertToUnit(Math.round(y)),\n left: convertToUnit(Math.round(x)), // TODO: right for origin=\"end\", rtl\n transformOrigin: physicalAnchor(origin, data.activatorEl.value!),\n minWidth: convertToUnit(minWidth),\n maxWidth: convertToUnit(maxWidth),\n maxHeight: convertToUnit(maxHeight),\n })\n }\n\n watch(\n () => [preferredAnchor.value, preferredOrigin.value, props.offset],\n () => updatePosition(),\n { immediate: !activatorFixed }\n )\n\n if (activatorFixed) nextTick(() => updatePosition())\n requestAnimationFrame(() => {\n if (contentStyles.value.maxHeight) updatePosition()\n })\n\n return { updatePosition }\n}\n","export function isFixedPosition (el?: HTMLElement) {\n while (el) {\n if (window.getComputedStyle(el).position === 'fixed') {\n return true\n }\n el = el.offsetParent as HTMLElement\n }\n return false\n}\n","let clean = true\nconst frames = [] as any[]\n\n/**\n * Schedule a task to run in an animation frame on its own\n * This is useful for heavy tasks that may cause jank if all ran together\n */\nexport function requestNewFrame (cb: () => void) {\n if (!clean || frames.length) {\n frames.push(cb)\n run()\n } else {\n clean = false\n cb()\n run()\n }\n}\n\nlet raf = -1\nfunction run () {\n cancelAnimationFrame(raf)\n raf = requestAnimationFrame(() => {\n const frame = frames.shift()\n if (frame) frame()\n\n if (frames.length) run()\n else clean = true\n })\n}\n","// Utilities\nimport { convertToUnit, getScrollParents, hasScrollbar, IN_BROWSER, propsFactory } from '@/util'\nimport { effectScope, nextTick, onScopeDispose, watchEffect } from 'vue'\nimport { requestNewFrame } from './requestNewFrame'\n\n// Types\nimport type { EffectScope, PropType, Ref } from 'vue'\n\nexport interface ScrollStrategyData {\n root: Ref<HTMLElement | undefined>\n contentEl: Ref<HTMLElement | undefined>\n activatorEl: Ref<HTMLElement | undefined>\n isActive: Ref<boolean>\n updatePosition: Ref<((e: Event) => void) | undefined>\n}\n\nconst scrollStrategies = {\n close: closeScrollStrategy,\n block: blockScrollStrategy,\n reposition: repositionScrollStrategy,\n}\n\ninterface StrategyProps {\n scrollStrategy: keyof typeof scrollStrategies | ((data: ScrollStrategyData) => void)\n}\n\nexport const makeScrollStrategyProps = propsFactory({\n scrollStrategy: {\n type: [String, Function] as PropType<StrategyProps['scrollStrategy']>,\n default: 'block',\n validator: (val: any) => typeof val === 'function' || val in scrollStrategies,\n },\n})\n\nexport function useScrollStrategies (\n props: StrategyProps,\n data: ScrollStrategyData\n) {\n if (!IN_BROWSER) return\n\n let scope: EffectScope | undefined\n watchEffect(async () => {\n scope?.stop()\n\n if (!(data.isActive.value && props.scrollStrategy)) return\n\n scope = effectScope()\n await nextTick()\n scope.run(() => {\n if (typeof props.scrollStrategy === 'function') {\n props.scrollStrategy(data)\n } else {\n scrollStrategies[props.scrollStrategy]?.(data)\n }\n })\n })\n}\n\nfunction closeScrollStrategy (data: ScrollStrategyData) {\n function onScroll (e: Event) {\n data.isActive.value = false\n }\n\n bindScroll(data.activatorEl.value ?? data.contentEl.value, onScroll)\n}\n\nfunction blockScrollStrategy (data: ScrollStrategyData) {\n const scrollElements = [...new Set([\n ...getScrollParents(data.activatorEl.value),\n ...getScrollParents(data.contentEl.value),\n ])].filter(el => !el.classList.contains('v-overlay-scroll-blocked'))\n const scrollbarWidth = window.innerWidth - document.documentElement.offsetWidth\n\n const scrollableParent = (el => hasScrollbar(el) && el)(data.root.value?.offsetParent || document.documentElement)\n if (scrollableParent) {\n data.root.value!.classList.add('v-overlay--scroll-blocked')\n }\n\n scrollElements.forEach((el, i) => {\n el.style.setProperty('--v-scrollbar-offset', convertToUnit(scrollbarWidth))\n el.classList.add('v-overlay-scroll-blocked')\n })\n\n onScopeDispose(() => {\n scrollElements.forEach((el, i) => {\n el.style.removeProperty('--v-scrollbar-offset')\n el.classList.remove('v-overlay-scroll-blocked')\n })\n if (scrollableParent) {\n data.root.value!.classList.remove('v-overlay--scroll-blocked')\n }\n })\n}\n\nfunction repositionScrollStrategy (data: ScrollStrategyData) {\n let slow = false\n let raf = -1\n\n function update (e: Event) {\n requestNewFrame(() => {\n const start = performance.now()\n data.updatePosition.value?.(e)\n const time = performance.now() - start\n slow = time / (1000 / 60) > 2\n })\n }\n\n bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {\n if (slow) {\n // If the position calculation is slow,\n // defer updates until scrolling is finished.\n // Browsers usually fire one scroll event per frame so\n // we just wait until we've got two frames without an event\n cancelAnimationFrame(raf)\n raf = requestAnimationFrame(() => {\n raf = requestAnimationFrame(() => {\n update(e)\n })\n })\n } else {\n update(e)\n }\n })\n}\n\n/** @private */\nfunction bindScroll (el: HTMLElement | undefined, onScroll: (e: Event) => void) {\n const scrollElements = [document, ...getScrollParents(el)]\n scrollElements.forEach(el => {\n el.addEventListener('scroll', onScroll, { passive: true })\n })\n\n onScopeDispose(() => {\n scrollElements.forEach(el => {\n el.removeEventListener('scroll', onScroll)\n })\n })\n}\n","// Utilities\nimport { computed, warn } from 'vue'\nimport { IN_BROWSER } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\nexport function useTeleport (target: Ref<boolean | string | Element>) {\n const teleportTarget = computed(() => {\n const _target = target.value\n\n if (_target === true || !IN_BROWSER) return undefined\n\n const targetElement =\n _target === false ? document.body\n : typeof _target === 'string' ? document.querySelector(_target)\n : _target\n\n if (targetElement == null) {\n warn(`Unable to locate target ${_target}`)\n return undefined\n }\n\n if (!useTeleport.cache.has(targetElement)) {\n const el = document.createElement('div')\n el.className = 'v-overlay-container'\n targetElement.appendChild(el)\n useTeleport.cache.set(targetElement, el)\n }\n\n return useTeleport.cache.get(targetElement)\n })\n\n return { teleportTarget }\n}\nuseTeleport.cache = new WeakMap<Element, Element>()\n","// Utilities\nimport { computed, ref, watch } from 'vue'\n\n// Types\nimport type { Ref } from 'vue'\nimport { propsFactory } from '@/util'\n\nexport const makeLazyProps = propsFactory({\n eager: Boolean,\n}, 'lazy')\n\nexport function useLazy (props: { eager: boolean }, active: Ref<boolean>) {\n const isBooted = ref(false)\n const hasContent = computed(() => isBooted.value || props.eager || active.value)\n\n watch(active, () => isBooted.value = true)\n\n function onAfterLeave () {\n if (!props.eager) isBooted.value = false\n }\n\n return { isBooted, hasContent, onAfterLeave }\n}\n","import { computed, effectScope, onScopeDispose, ref, toRaw, watch } from 'vue'\nimport { getCurrentInstance } from '@/util'\n\n// Types\nimport type { ComponentInternalInstance, EffectScope, Ref } from 'vue'\n\nconst stack = ref<ComponentInternalInstance[]>([])\n\nexport function useStack (isActive: Ref<boolean>) {\n const vm = getCurrentInstance('useStack')\n let scope: EffectScope | undefined\n watch(isActive, val => {\n if (val) {\n scope = effectScope()\n scope.run(() => {\n stack.value.push(vm)\n\n onScopeDispose(() => {\n const idx = stack.value.indexOf(vm)\n stack.value.splice(idx, 1)\n })\n })\n } else {\n scope?.stop()\n }\n }, { immediate: true })\n\n const isTop = computed(() => {\n return toRaw(stack.value[stack.value.length - 1]) === vm\n })\n\n return {\n isTop,\n }\n}\n","import { attachedRoot } from '@/util'\nimport type { DirectiveBinding } from 'vue'\n\ninterface ClickOutsideBindingArgs {\n handler: (e: MouseEvent) => void\n closeConditional?: (e: Event) => boolean\n include?: () => HTMLElement[]\n}\n\ninterface ClickOutsideDirectiveBinding extends DirectiveBinding {\n value: ((e: MouseEvent) => void) | ClickOutsideBindingArgs\n}\n\nfunction defaultConditional () {\n return true\n}\n\nfunction checkEvent (e: MouseEvent, el: HTMLElement, binding: ClickOutsideDirectiveBinding): boolean {\n // The include element callbacks below can be expensive\n // so we should avoid calling them when we're not active.\n // Explicitly check for false to allow fallback compatibility\n // with non-toggleable components\n if (!e || checkIsActive(e, binding) === false) return false\n\n // If we're clicking inside the shadowroot, then the app root doesn't get the same\n // level of introspection as to _what_ we're clicking. We want to check to see if\n // our target is the shadowroot parent container, and if it is, ignore.\n const root = attachedRoot(el)\n if (\n typeof ShadowRoot !== 'undefined' &&\n root instanceof ShadowRoot &&\n root.host === e.target\n ) return false\n\n // Check if additional elements were passed to be included in check\n // (click must be outside all included elements, if any)\n const elements = ((typeof binding.value === 'object' && binding.value.include) || (() => []))()\n // Add the root element for the component this directive was defined on\n elements.push(el)\n\n // Check if it's a click outside our elements, and then if our callback returns true.\n // Non-toggleable components should take action in their callback and return falsy.\n // Toggleable can return true if it wants to deactivate.\n // Note that, because we're in the capture phase, this callback will occur before\n // the bubbling click event on any outside elements.\n return !elements.some(el => el?.contains(e.target as Node))\n}\n\nfunction checkIsActive (e: MouseEvent, binding: ClickOutsideDirectiveBinding): boolean | void {\n const isActive = (typeof binding.value === 'object' && binding.value.closeConditional) || defaultConditional\n\n return isActive(e)\n}\n\nfunction directive (e: MouseEvent, el: HTMLElement, binding: ClickOutsideDirectiveBinding) {\n const handler = typeof binding.value === 'function' ? binding.value : binding.value.handler\n\n el._clickOutside!.lastMousedownWasOutside && checkEvent(e, el, binding) && setTimeout(() => {\n checkIsActive(e, binding) && handler && handler(e)\n }, 0)\n}\n\nfunction handleShadow (el: HTMLElement, callback: Function): void {\n const root = attachedRoot(el)\n\n callback(document)\n\n if (typeof ShadowRoot !== 'undefined' && root instanceof ShadowRoot) {\n callback(root)\n }\n}\n\nexport const ClickOutside = {\n // [data-app] may not be found\n // if using bind, inserted makes\n // sure that the root element is\n // available, iOS does not support\n // clicks on body\n mounted (el: HTMLElement, binding: ClickOutsideDirectiveBinding) {\n const onClick = (e: Event) => directive(e as MouseEvent, el, binding)\n const onMousedown = (e: Event) => {\n el._clickOutside!.lastMousedownWasOutside = checkEvent(e as MouseEvent, el, binding)\n }\n\n handleShadow(el, (app: HTMLElement) => {\n app.addEventListener('click', onClick, true)\n app.addEventListener('mousedown', onMousedown, true)\n })\n\n if (!el._clickOutside) {\n el._clickOutside = {\n lastMousedownWasOutside: true,\n }\n }\n\n el._clickOutside[binding.instance!.$.uid] = {\n onClick,\n onMousedown,\n }\n },\n\n unmounted (el: HTMLElement, binding: ClickOutsideDirectiveBinding) {\n if (!el._clickOutside) return\n\n handleShadow(el, (app: HTMLElement) => {\n if (!app || !el._clickOutside?.[binding.instance!.$.uid]) return\n\n const { onClick, onMousedown } = el._clickOutside[binding.instance!.$.uid]!\n\n app.removeEventListener('click', onClick, true)\n app.removeEventListener('mousedown', onMousedown, true)\n })\n\n delete el._clickOutside[binding.instance!.$.uid]\n },\n}\n\nexport default ClickOutside\n","// Styles\nimport './VOverlay.sass'\n\n// Composables\nimport { makeActivatorProps, useActivator } from './useActivator'\nimport { makePositionStrategyProps, usePositionStrategies } from './positionStrategies'\nimport { makeScrollStrategyProps, useScrollStrategies } from './scrollStrategies'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\nimport { useBackButton } from '@/composables/router'\nimport { useBackgroundColor } from '@/composables/color'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useRtl } from '@/composables/rtl'\nimport { useTeleport } from '@/composables/teleport'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeLazyProps, useLazy } from '@/composables/lazy'\nimport { useStack } from '@/composables/stack'\n\n// Directives\nimport { ClickOutside } from '@/directives/click-outside'\n\n// Utilities\nimport {\n convertToUnit,\n genericComponent,\n getScrollParent,\n IN_BROWSER,\n standardEasing,\n useRender,\n} from '@/util'\nimport {\n computed,\n mergeProps,\n ref,\n Teleport,\n toHandlers,\n Transition,\n watch,\n} from 'vue'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\nimport type { BackgroundColorData } from '@/composables/color'\n\ninterface ScrimProps {\n [key: string]: unknown\n modelValue: boolean\n color: BackgroundColorData\n}\nfunction Scrim (props: ScrimProps) {\n const { modelValue, color, ...rest } = props\n return (\n <Transition name=\"fade-transition\" appear>\n { props.modelValue && (\n <div\n class={[\n 'v-overlay__scrim',\n props.color.backgroundColorClasses.value,\n ]}\n style={ props.color.backgroundColorStyles.value }\n { ...rest }\n />\n )}\n </Transition>\n )\n}\n\nexport type OverlaySlots = MakeSlots<{\n default: [{ isActive: Ref<boolean> }]\n activator: [{ isActive: boolean, props: Record<string, any> }]\n}>\n\nexport const VOverlay = genericComponent<new () => {\n $slots: OverlaySlots\n}>()({\n name: 'VOverlay',\n\n directives: { ClickOutside },\n\n inheritAttrs: false,\n\n props: {\n absolute: Boolean,\n attach: [Boolean, String, Object] as PropType<boolean | string | Element>,\n contained: Boolean,\n contentClass: null,\n noClickAnimation: Boolean,\n modelValue: Boolean,\n persistent: Boolean,\n scrim: {\n type: [String, Boolean],\n default: true,\n },\n\n ...makeActivatorProps(),\n ...makeDimensionProps(),\n ...makePositionStrategyProps(),\n ...makeScrollStrategyProps(),\n ...makeThemeProps(),\n ...makeTransitionProps(),\n ...makeLazyProps(),\n },\n\n emits: {\n 'click:outside': (e: MouseEvent) => true,\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots, attrs, emit }) {\n const isActive = useProxiedModel(props, 'modelValue')\n const { teleportTarget } = useTeleport(computed(() => props.attach || props.contained))\n const { themeClasses } = provideTheme(props)\n const { rtlClasses } = useRtl()\n const { hasContent, onAfterLeave } = useLazy(props, isActive)\n const scrimColor = useBackgroundColor(computed(() => {\n return typeof props.scrim === 'string' ? props.scrim : null\n }))\n const { activatorEl, activatorEvents } = useActivator(props, isActive)\n const { dimensionStyles } = useDimension(props)\n const { isTop } = useStack(isActive)\n\n const root = ref<HTMLElement>()\n const contentEl = ref<HTMLElement>()\n const { contentStyles, updatePosition } = usePositionStrategies(props, {\n contentEl,\n activatorEl,\n isActive,\n })\n useScrollStrategies(props, {\n root,\n contentEl,\n activatorEl,\n isActive,\n updatePosition,\n })\n\n function onClickOutside (e: MouseEvent) {\n emit('click:outside', e)\n\n if (!props.persistent) isActive.value = false\n else animateClick()\n }\n\n function closeConditional () {\n return isActive.value && isTop.value\n }\n\n IN_BROWSER && watch(isActive, val => {\n if (val) {\n window.addEventListener('keydown', onKeydown)\n } else {\n window.removeEventListener('keydown', onKeydown)\n }\n }, { immediate: true })\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key === 'Escape' && isTop.value) {\n if (!props.persistent) {\n isActive.value = false\n } else animateClick()\n }\n }\n\n useBackButton(next => {\n if (isTop.value && isActive.value) {\n next(false)\n if (!props.persistent) isActive.value = false\n else animateClick()\n } else {\n next()\n }\n })\n\n const top = ref<number>()\n watch(() => isActive.value && (props.absolute || props.contained) && teleportTarget.value == null, val => {\n if (val) {\n const scrollParent = getScrollParent(root.value)\n if (scrollParent && scrollParent !== document.scrollingElement) {\n top.value = scrollParent.scrollTop\n }\n }\n })\n\n // Add a quick \"bounce\" animation to the content\n function animateClick () {\n if (props.noClickAnimation) return\n\n contentEl.value?.animate([\n { transformOrigin: 'center' },\n { transform: 'scale(1.03)' },\n { transformOrigin: 'center' },\n ], {\n duration: 150,\n easing: standardEasing,\n })\n }\n\n useRender(() => (\n <>\n { slots.activator?.({\n isActive: isActive.value,\n props: mergeProps({\n modelValue: isActive.value,\n 'onUpdate:modelValue': (val: boolean) => isActive.value = val,\n }, toHandlers(activatorEvents.value), props.activatorProps),\n }) }\n <Teleport\n disabled={ !teleportTarget.value }\n to={ teleportTarget.value }\n >\n { hasContent.value && (\n <div\n class={[\n 'v-overlay',\n {\n 'v-overlay--absolute': props.absolute || props.contained,\n 'v-overlay--active': isActive.value,\n 'v-overlay--contained': props.contained,\n },\n themeClasses.value,\n rtlClasses.value,\n ]}\n style={ top.value != null ? `top: ${convertToUnit(top.value)}` : undefined }\n ref={ root }\n {...attrs}\n >\n <Scrim\n color={ scrimColor }\n modelValue={ isActive.value && !!props.scrim }\n />\n <MaybeTransition\n appear\n onAfterLeave={ onAfterLeave }\n persisted\n transition={ props.transition }\n target={ activatorEl.value }\n >\n <div\n ref={ contentEl }\n v-show={ isActive.value }\n v-click-outside={{ handler: onClickOutside, closeConditional, include: () => [activatorEl.value] }}\n class={[\n 'v-overlay__content',\n props.contentClass,\n ]}\n style={[\n dimensionStyles.value,\n contentStyles.value,\n ]}\n >\n { slots.default?.({ isActive }) }\n </div>\n </MaybeTransition>\n </div>\n )}\n </Teleport>\n </>\n ))\n\n return {\n animateClick,\n contentEl,\n activatorEl,\n }\n },\n})\n\nexport type VOverlay = InstanceType<typeof VOverlay>\n","// Styles\nimport './VDialog.sass'\n\n// Components\nimport { VDialogTransition } from '@/components/transitions'\nimport { VOverlay } from '@/components/VOverlay'\n\n// Composables\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeTransitionProps } from '@/composables/transition'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { nextTick, ref, watch } from 'vue'\nimport { genericComponent, IN_BROWSER } from '@/util'\n\n// Types\nimport type { OverlaySlots } from '@/components/VOverlay/VOverlay'\n\nexport const VDialog = genericComponent<new () => {\n $slots: OverlaySlots\n}>()({\n name: 'VDialog',\n\n inheritAttrs: false,\n\n props: {\n fullscreen: Boolean,\n origin: {\n type: String,\n default: 'center center',\n },\n retainFocus: {\n type: Boolean,\n default: true,\n },\n scrollable: Boolean,\n modelValue: Boolean,\n\n ...makeDimensionProps({ width: 'auto' }),\n ...makeTransitionProps({\n transition: { component: VDialogTransition },\n }),\n },\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { attrs, slots }) {\n const isActive = useProxiedModel(props, 'modelValue')\n const { dimensionStyles } = useDimension(props)\n\n const overlay = ref<VOverlay>()\n function onFocusin (e: FocusEvent) {\n const before = e.relatedTarget as HTMLElement | null\n const after = e.target as HTMLElement | null\n\n if (\n before !== after &&\n overlay.value?.contentEl &&\n // It isn't the document or the dialog body\n ![document, overlay.value.contentEl].includes(after!) &&\n // It isn't inside the dialog body\n !overlay.value.contentEl.contains(after)\n // We're the topmost dialog\n // TODO: this.activeZIndex >= this.getMaxZIndex() &&\n // It isn't inside a dependent element (like a menu)\n // TODO: !this.getOpenDependentElements().some(el => el.contains(target))\n // So we must have focused something outside the dialog and its children\n ) {\n const focusable = [...overlay.value.contentEl.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )].filter(el => !el.hasAttribute('disabled')) as HTMLElement[]\n\n if (!focusable.length) return\n\n const firstElement = focusable[0]\n const lastElement = focusable[focusable.length - 1]\n\n if (before === firstElement) {\n lastElement.focus()\n } else {\n firstElement.focus()\n }\n }\n }\n\n if (IN_BROWSER) {\n watch(() => isActive.value && props.retainFocus, val => {\n val\n ? document.addEventListener('focusin', onFocusin)\n : document.removeEventListener('focusin', onFocusin)\n }, { immediate: true })\n }\n\n watch(isActive, async val => {\n await nextTick()\n if (val) {\n overlay.value!.contentEl?.focus({ preventScroll: true })\n } else {\n overlay.value!.activatorEl?.focus({ preventScroll: true })\n }\n })\n\n return () => {\n return (\n <VOverlay\n v-model={ isActive.value }\n class={[\n 'v-dialog',\n {\n 'v-dialog--fullscreen': props.fullscreen,\n },\n ]}\n style={ dimensionStyles.value }\n transition={ props.transition }\n ref={ overlay }\n aria-role=\"dialog\"\n aria-modal=\"true\"\n activatorProps={{\n 'aria-haspopup': 'dialog',\n 'aria-expanded': String(isActive.value),\n }}\n { ...attrs }\n v-slots={{\n default: slots.default,\n activator: slots.activator,\n }}\n />\n )\n }\n },\n})\n\nexport type VDialog = InstanceType<typeof VDialog>\n","// Styles\nimport './VDivider.sass'\n\n// Utilities\nimport { computed } from 'vue'\nimport { convertToUnit, defineComponent } from '@/util'\n\n// Composables\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Types\ntype DividerKey = 'borderRightWidth' | 'borderTopWidth' | 'maxHeight' | 'maxWidth'\ntype DividerStyles = Partial<Record<DividerKey, string>>\n\nexport const VDivider = defineComponent({\n name: 'VDivider',\n\n props: {\n inset: Boolean,\n length: [Number, String],\n thickness: [Number, String],\n vertical: Boolean,\n ...makeThemeProps(),\n },\n\n setup (props, { attrs }) {\n const { themeClasses } = provideTheme(props)\n const dividerStyles = computed(() => {\n const styles: DividerStyles = {}\n\n if (props.length) {\n styles[props.vertical ? 'maxHeight' : 'maxWidth'] = convertToUnit(props.length)\n }\n\n if (props.thickness) {\n styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness)\n }\n\n return styles\n })\n\n return () => {\n return (\n <hr\n class={[\n {\n 'v-divider': true,\n 'v-divider--inset': props.inset,\n 'v-divider--vertical': props.vertical,\n },\n themeClasses.value,\n ]}\n style={ dividerStyles.value }\n aria-orientation={\n !attrs.role || attrs.role === 'separator'\n ? props.vertical ? 'vertical' : 'horizontal'\n : undefined\n }\n role={`${attrs.role || 'separator'}`}\n />\n )\n }\n },\n})\n","// Styles\nimport './VExpansionPanel.sass'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\nimport { makeGroupProps, useGroup } from '@/composables/group'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed } from 'vue'\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType } from 'vue'\nimport type { GroupItemProvide } from '@/composables/group'\n\nexport const VExpansionPanelSymbol: InjectionKey<GroupItemProvide> = Symbol.for('vuetify:v-expansion-panel')\n\nconst allowedVariants = ['default', 'accordion', 'inset', 'popout'] as const\ntype Variant = typeof allowedVariants[number]\n\nexport const VExpansionPanels = defineComponent({\n name: 'VExpansionPanels',\n\n props: {\n variant: {\n type: String as PropType<Variant>,\n default: 'default',\n validator: (v: any) => allowedVariants.includes(v),\n },\n\n ...makeTagProps(),\n ...makeGroupProps(),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:modelValue': (val: unknown) => true,\n },\n\n setup (props, { slots }) {\n useGroup(props, VExpansionPanelSymbol)\n const { themeClasses } = provideTheme(props)\n\n const variantClass = computed(() => props.variant && `v-expansion-panels--variant-${props.variant}`)\n\n return () => (\n <props.tag\n class={[\n 'v-expansion-panels',\n themeClasses.value,\n variantClass.value,\n ]}\n >\n { slots.default?.() }\n </props.tag>\n )\n },\n})\n\nexport type VExpansionPanels = InstanceType<typeof VExpansionPanels>\n","// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VExpansionPanelSymbol } from './VExpansionPanels'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\n\n// Directives\nimport ripple from '@/directives/ripple'\n\n// Utilities\nimport { computed, inject } from 'vue'\nimport { defineComponent, propsFactory } from '@/util'\n\nexport const makeVExpansionPanelTitleProps = propsFactory({\n expandIcon: {\n type: String,\n default: '$expand',\n },\n collapseIcon: {\n type: String,\n default: '$collapse',\n },\n hideActions: Boolean,\n ripple: {\n type: [Boolean, Object],\n default: false,\n },\n color: String,\n})\n\nexport const VExpansionPanelTitle = defineComponent({\n name: 'VExpansionPanelTitle',\n\n directives: { ripple },\n\n props: {\n ...makeVExpansionPanelTitleProps(),\n },\n\n setup (props, { slots }) {\n const expansionPanel = inject(VExpansionPanelSymbol)\n\n if (!expansionPanel) throw new Error('[Vuetify] v-expansion-panel-title needs to be placed inside v-expansion-panel')\n\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(props, 'color')\n\n const slotProps = computed(() => ({\n expanded: expansionPanel.isSelected.value,\n disabled: expansionPanel.disabled.value,\n expandIcon: props.expandIcon,\n collapseIcon: props.collapseIcon,\n }))\n\n return () => (\n <button\n class={[\n 'v-expansion-panel-title',\n {\n 'v-expansion-panel-title--active': expansionPanel.isSelected.value,\n },\n backgroundColorClasses.value,\n ]}\n style={ backgroundColorStyles.value }\n type=\"button\"\n tabindex={ expansionPanel.disabled.value ? -1 : undefined }\n disabled={ expansionPanel.disabled.value }\n aria-expanded={ expansionPanel.isSelected.value }\n onClick={ expansionPanel.toggle }\n v-ripple={ props.ripple }\n >\n <div class=\"v-expansion-panel-title__overlay\" />\n { slots.default?.(slotProps.value) }\n { !props.hideActions && (\n <div class=\"v-expansion-panel-title__icon\">\n {\n slots.actions ? slots.actions(slotProps.value)\n : <VIcon icon={ expansionPanel.isSelected.value ? props.collapseIcon : props.expandIcon } />\n }\n </div>\n ) }\n </button>\n )\n },\n})\n","// Components\nimport { VExpandTransition } from '@/components/transitions'\nimport { VExpansionPanelSymbol } from './VExpansionPanels'\n\n// Composables\nimport { makeLazyProps, useLazy } from '@/composables/lazy'\n\n// Utilities\nimport { inject } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport const VExpansionPanelText = defineComponent({\n name: 'VExpansionPanelText',\n\n props: {\n ...makeLazyProps(),\n },\n\n setup (props, { slots }) {\n const expansionPanel = inject(VExpansionPanelSymbol)\n\n if (!expansionPanel) throw new Error('[Vuetify] v-expansion-panel-text needs to be placed inside v-expansion-panel')\n\n const { hasContent, onAfterLeave } = useLazy(props, expansionPanel.isSelected)\n\n return () => (\n <VExpandTransition onAfterLeave={ onAfterLeave }>\n <div\n v-show={ expansionPanel.isSelected.value }\n class={[\n 'v-expansion-panel-text',\n ]}\n >\n { slots.default && hasContent.value && (\n <div class=\"v-expansion-panel-text__wrapper\">\n { slots.default?.() }\n </div>\n ) }\n </div>\n </VExpandTransition>\n )\n },\n})\n","// Components\nimport { makeVExpansionPanelTitleProps, VExpansionPanelTitle } from './VExpansionPanelTitle'\nimport { VExpansionPanelText } from './VExpansionPanelText'\nimport { VExpansionPanelSymbol } from './VExpansionPanels'\n\n// Composables\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeGroupItemProps, useGroupItem } from '@/composables/group'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeLazyProps } from '@/composables/lazy'\n\n// Utilities\nimport { computed, provide } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport const VExpansionPanel = defineComponent({\n name: 'VExpansionPanel',\n\n props: {\n title: String,\n text: String,\n bgColor: String,\n\n ...makeLazyProps(),\n ...makeGroupItemProps(),\n ...makeRoundedProps(),\n ...makeElevationProps(),\n ...makeTagProps(),\n ...makeVExpansionPanelTitleProps(),\n },\n\n setup (props, { slots }) {\n const groupItem = useGroupItem(props, VExpansionPanelSymbol)\n const { roundedClasses } = useRounded(props)\n const { elevationClasses } = useElevation(props)\n\n provide(VExpansionPanelSymbol, groupItem)\n\n const isBeforeSelected = computed(() => {\n const index = groupItem.group.items.value.indexOf(groupItem.id)\n return !groupItem.isSelected.value &&\n groupItem.group.selected.value.some(id => groupItem.group.items.value.indexOf(id) - index === 1)\n })\n\n const isAfterSelected = computed(() => {\n const index = groupItem.group.items.value.indexOf(groupItem.id)\n return !groupItem.isSelected.value &&\n groupItem.group.selected.value.some(id => groupItem.group.items.value.indexOf(id) - index === -1)\n })\n\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(props, 'bgColor')\n\n return () => (\n <props.tag\n class={[\n 'v-expansion-panel',\n {\n 'v-expansion-panel--active': groupItem.isSelected.value,\n 'v-expansion-panel--before-active': isBeforeSelected.value,\n 'v-expansion-panel--after-active': isAfterSelected.value,\n 'v-expansion-panel--disabled': groupItem.disabled.value,\n },\n roundedClasses.value,\n backgroundColorClasses.value,\n ]}\n style={ backgroundColorStyles.value }\n aria-expanded={ groupItem.isSelected.value }\n >\n <div\n class={[\n 'v-expansion-panel__shadow',\n ...elevationClasses.value,\n ]}\n />\n { slots.default?.() || (\n <>\n <VExpansionPanelTitle\n expandIcon={ props.expandIcon }\n collapseIcon={ props.collapseIcon }\n color={ props.color }\n hideActions={ props.hideActions }\n ripple={ props.ripple }\n >\n { slots.title ? slots.title() : props.title }\n </VExpansionPanelTitle>\n <VExpansionPanelText eager={ props.eager }>\n { slots.text ? slots.text() : props.text }\n </VExpansionPanelText>\n </>\n ) }\n </props.tag>\n )\n },\n})\n\nexport type VExpansionPanel = InstanceType<typeof VExpansionPanel>\n","// Components\nimport { VLabel } from '@/components/VLabel'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VFieldLabel = defineComponent({\n name: 'VFieldLabel',\n\n props: {\n floating: Boolean,\n },\n\n setup (props, { slots }) {\n return () => {\n return (\n <VLabel\n class={[\n 'v-field-label',\n { 'v-field-label--floating': props.floating },\n ]}\n aria-hidden={ props.floating || undefined }\n v-slots={ slots }\n />\n )\n }\n },\n})\n\nexport type VFieldLabel = InstanceType<typeof VFieldLabel>\n","// Utilities\nimport { onBeforeUnmount, ref, watch } from 'vue'\n\nexport function useIntersectionObserver (callback?: IntersectionObserverCallback) {\n const intersectionRef = ref<HTMLElement>()\n const isIntersecting = ref(false)\n\n const observer = new IntersectionObserver((entries: IntersectionObserverEntry[]) => {\n callback?.(entries, observer)\n\n isIntersecting.value = !!entries.find(entry => entry.isIntersecting)\n })\n\n onBeforeUnmount(() => {\n observer.disconnect()\n })\n\n watch(intersectionRef, (newValue, oldValue) => {\n if (oldValue) {\n observer.unobserve(oldValue)\n isIntersecting.value = false\n }\n\n if (newValue) observer.observe(newValue)\n }, {\n flush: 'post',\n })\n\n return { intersectionRef, isIntersecting }\n}\n","// Styles\nimport './VProgressLinear.sass'\n\n// Composables\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useRtl } from '@/composables/rtl'\n\n// Utilities\nimport { convertToUnit, defineComponent } from '@/util'\nimport { computed, Transition } from 'vue'\n\nexport const VProgressLinear = defineComponent({\n name: 'VProgressLinear',\n\n props: {\n active: {\n type: Boolean,\n default: true,\n },\n bgColor: String,\n bgOpacity: [Number, String],\n bufferValue: {\n type: [Number, String],\n default: 0,\n },\n clickable: Boolean,\n color: String,\n height: {\n type: [Number, String],\n default: 4,\n },\n indeterminate: Boolean,\n max: {\n type: [Number, String],\n default: 100,\n },\n modelValue: {\n type: [Number, String],\n default: 0,\n },\n reverse: Boolean,\n stream: Boolean,\n striped: Boolean,\n roundedBar: Boolean,\n\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:modelValue': (value: number) => true,\n },\n\n setup (props, { slots }) {\n const progress = useProxiedModel(props, 'modelValue')\n const { isRtl } = useRtl()\n const { themeClasses } = provideTheme(props)\n const { textColorClasses, textColorStyles } = useTextColor(props, 'color')\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(computed(() => props.bgColor || props.color))\n const { backgroundColorClasses: barColorClasses, backgroundColorStyles: barColorStyles } = useBackgroundColor(props, 'color')\n const { roundedClasses } = useRounded(props)\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n\n const max = computed(() => parseInt(props.max, 10))\n const height = computed(() => parseInt(props.height, 10))\n const normalizedBuffer = computed(() => parseFloat(props.bufferValue) / max.value * 100)\n const normalizedValue = computed(() => parseFloat(progress.value) / max.value * 100)\n const isReversed = computed(() => isRtl.value !== props.reverse)\n const transition = computed(() => props.indeterminate ? 'fade-transition' : 'slide-x-transition')\n const opacity = computed(() => {\n return props.bgOpacity == null\n ? props.bgOpacity\n : parseFloat(props.bgOpacity)\n })\n\n function handleClick (e: MouseEvent) {\n if (!intersectionRef.value) return\n\n const { left, right, width } = intersectionRef.value.getBoundingClientRect()\n const value = isReversed.value ? (width - e.clientX) + (right - width) : e.clientX - left\n\n progress.value = Math.round(value / width * max.value)\n }\n\n return () => (\n <props.tag\n ref={ intersectionRef }\n class={[\n 'v-progress-linear',\n {\n 'v-progress-linear--active': props.active && isIntersecting.value,\n 'v-progress-linear--reverse': isReversed.value,\n 'v-progress-linear--rounded': props.rounded,\n 'v-progress-linear--rounded-bar': props.roundedBar,\n 'v-progress-linear--striped': props.striped,\n },\n roundedClasses.value,\n themeClasses.value,\n ]}\n style={{\n height: props.active ? convertToUnit(height.value) : 0,\n '--v-progress-linear-height': convertToUnit(height.value),\n }}\n role=\"progressbar\"\n aria-valuemin=\"0\"\n aria-valuemax={ props.max }\n aria-valuenow={ props.indeterminate ? undefined : normalizedValue.value }\n onClick={ props.clickable && handleClick }\n >\n { props.stream && (\n <div\n class={[\n 'v-progress-linear__stream',\n textColorClasses.value,\n ]}\n style={{\n ...textColorStyles.value,\n [isReversed.value ? 'left' : 'right']: convertToUnit(-height.value),\n borderTop: `${convertToUnit(height.value / 2)} dotted`,\n opacity: opacity.value,\n top: `calc(50% - ${convertToUnit(height.value / 4)})`,\n width: convertToUnit(100 - normalizedBuffer.value, '%'),\n '--v-progress-linear-stream-to': convertToUnit(height.value * (isReversed.value ? 1 : -1)),\n }}\n />\n ) }\n\n <div\n class={[\n 'v-progress-linear__background',\n backgroundColorClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n {\n opacity: opacity.value,\n width: convertToUnit((!props.stream ? 100 : normalizedBuffer.value), '%'),\n },\n ]}\n />\n\n <Transition name={ transition.value }>\n { !props.indeterminate ? (\n <div\n class={[\n 'v-progress-linear__determinate',\n barColorClasses.value,\n ]}\n style={[\n barColorStyles.value,\n { width: convertToUnit(normalizedValue.value, '%') },\n ]}\n />\n ) : (\n <div class=\"v-progress-linear__indeterminate\">\n { ['long', 'short'].map(bar => (\n <div\n key={ bar }\n class={[\n 'v-progress-linear__indeterminate',\n bar,\n barColorClasses.value,\n ]}\n style={ barColorStyles.value }\n />\n )) }\n </div>\n ) }\n </Transition>\n\n { slots.default && (\n <div class=\"v-progress-linear__content\">\n { slots.default({ value: normalizedValue.value, buffer: normalizedBuffer.value }) }\n </div>\n ) }\n </props.tag>\n )\n },\n})\n","// Components\nimport { VProgressLinear } from '@/components/VProgressLinear'\n\n// Utilities\nimport { computed } from 'vue'\nimport { getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nimport type { ExtractPropTypes } from 'vue'\nimport type { SetupContext } from '@vue/runtime-core'\nimport type { MakeSlots, SlotsToProps } from '@/util'\n\nexport interface LoaderSlotProps {\n color: string | undefined\n isActive: boolean\n}\n\nexport interface LoaderProps {\n loading: boolean\n}\n\n// Composables\nexport const makeLoaderProps = propsFactory({\n loading: Boolean,\n}, 'loader')\n\nexport function useLoader (\n props: LoaderProps,\n name = getCurrentInstanceName(),\n) {\n const loaderClasses = computed(() => ({\n [`${name}--loading`]: props.loading,\n }))\n\n return { loaderClasses }\n}\n\nexport function LoaderSlot (\n props: {\n active: boolean\n name: string\n color?: string\n } & ExtractPropTypes<SlotsToProps<MakeSlots<{\n default: [LoaderSlotProps]\n }>>>,\n { slots }: SetupContext,\n) {\n return (\n <div class={`${props.name}__loader`}>\n { slots.default?.({\n color: props.color,\n isActive: props.active,\n } as LoaderSlotProps) || (\n <VProgressLinear\n active={ props.active }\n color={ props.color }\n height=\"2\"\n indeterminate\n />\n )}\n </div>\n )\n}\n","import { ref } from 'vue'\n\nexport const useFocus = () => {\n const isFocused = ref(false)\n\n function focus () {\n isFocused.value = true\n }\n\n function blur () {\n isFocused.value = false\n }\n\n return { isFocused, focus, blur }\n}\n","// Styles\nimport './VField.sass'\n\n// Components\nimport { VExpandXTransition } from '@/components/transitions'\nimport { VIcon } from '@/components/VIcon'\nimport { VFieldLabel } from './VFieldLabel'\n\n// Composables\nimport { LoaderSlot, makeLoaderProps, useLoader } from '@/composables/loader'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useFocus } from '@/composables/focus'\n\n// Utilities\nimport { computed, inject, ref, toRef, watch, watchEffect } from 'vue'\nimport {\n convertToUnit,\n genericComponent,\n getUid,\n nullifyTransforms,\n pick,\n propsFactory,\n standardEasing,\n useRender,\n} from '@/util'\n\n// Types\nimport type { VInputSlot, VInputSymbol } from '@/components/VInput/VInput'\nimport type { LoaderSlotProps } from '@/composables/loader'\nimport type { PropType, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\n\nconst allowedVariants = ['underlined', 'outlined', 'filled', 'contained', 'plain'] as const\ntype Variant = typeof allowedVariants[number]\n\nexport interface DefaultInputSlot {\n isActive: boolean\n isFocused: boolean\n controlRef: Ref<HTMLElement | undefined>\n focus: () => void\n blur: () => void\n}\n\nexport interface VFieldSlot extends DefaultInputSlot {\n props: Record<string, unknown>\n}\n\nexport const makeVFieldProps = propsFactory({\n appendInnerIcon: String,\n bgColor: String,\n clearable: Boolean,\n clearIcon: {\n type: String,\n default: '$clear',\n },\n color: String,\n label: String,\n persistentClear: Boolean,\n prependInnerIcon: String,\n reverse: Boolean,\n singleLine: Boolean,\n variant: {\n type: String as PropType<Variant>,\n default: 'filled',\n validator: (v: any) => allowedVariants.includes(v),\n },\n\n ...makeThemeProps(),\n ...makeLoaderProps(),\n}, 'v-field')\n\nexport const VField = genericComponent<new <T>() => {\n $props: {\n modelValue?: T\n 'onUpdate:modelValue'?: (val: T) => any\n }\n $slots: MakeSlots<{\n clear: []\n prependInner: [DefaultInputSlot & VInputSlot]\n appendInner: [DefaultInputSlot & VInputSlot]\n label: [DefaultInputSlot & VInputSlot]\n loader: [LoaderSlotProps]\n default: [VFieldSlot]\n }>\n}>()({\n name: 'VField',\n\n inheritAttrs: false,\n\n props: {\n active: Boolean,\n disabled: Boolean,\n error: Boolean,\n id: String,\n ...makeVFieldProps(),\n },\n\n emits: {\n 'click:clear': (e: Event) => true,\n 'click:prepend-inner': (e: MouseEvent) => true,\n 'click:append-inner': (e: MouseEvent) => true,\n 'click:control': (props: DefaultInputSlot) => true,\n 'update:active': (active: boolean) => true,\n 'update:modelValue': (val: any) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { themeClasses } = provideTheme(props)\n const { loaderClasses } = useLoader(props)\n const isActive = useProxiedModel(props, 'active')\n const { isFocused, focus, blur } = useFocus()\n\n const uid = getUid()\n\n const labelRef = ref<VFieldLabel>()\n const floatingLabelRef = ref<VFieldLabel>()\n const controlRef = ref<HTMLElement>()\n const id = computed(() => props.id || `input-${uid}`)\n const hasLabel = computed(() => !props.singleLine && !!(props.label || slots.label))\n\n watchEffect(() => isActive.value = isFocused.value)\n\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'bgColor'))\n const { textColorClasses, textColorStyles } = useTextColor(computed(() => {\n return (\n isActive.value &&\n isFocused.value &&\n !props.error &&\n !props.disabled\n ) ? props.color : undefined\n }))\n\n watch(isActive, val => {\n if (hasLabel.value) {\n const el: HTMLElement = labelRef.value!.$el\n const targetEl: HTMLElement = floatingLabelRef.value!.$el\n const rect = nullifyTransforms(el)\n const targetRect = targetEl.getBoundingClientRect()\n\n const x = targetRect.x - rect.x\n const y = targetRect.y - rect.y - (rect.height / 2 - targetRect.height / 2)\n\n const targetWidth = targetRect.width / 0.75\n const width = Math.abs(targetWidth - rect.width) > 1\n ? { maxWidth: convertToUnit(targetWidth) }\n : undefined\n\n const duration = parseFloat(getComputedStyle(el).transitionDuration) * 1000\n const scale = parseFloat(getComputedStyle(targetEl).getPropertyValue('--v-field-label-scale'))\n\n el.style.visibility = 'visible'\n targetEl.style.visibility = 'hidden'\n\n el.animate([\n { transform: 'translate(0)' },\n { transform: `translate(${x}px, ${y}px) scale(${scale})`, ...width },\n ], {\n duration,\n easing: standardEasing,\n direction: val ? 'normal' : 'reverse',\n }).finished.then(() => {\n el.style.removeProperty('visibility')\n targetEl.style.removeProperty('visibility')\n })\n }\n }, { flush: 'post' })\n\n const slotProps = computed<DefaultInputSlot>(() => ({\n isActive: isActive.value,\n isFocused: isFocused.value,\n controlRef,\n blur,\n focus,\n }))\n\n function onClick (e: MouseEvent) {\n if (e.target !== document.activeElement) {\n e.preventDefault()\n }\n\n emit('click:control', slotProps.value)\n }\n\n const VInput = inject('VInput' as any as typeof VInputSymbol, undefined)\n\n useRender(() => {\n const isOutlined = props.variant === 'outlined'\n const hasPrepend = (slots.prependInner || props.prependInnerIcon)\n const hasClear = !!(props.clearable || slots.clear)\n const hasAppend = !!(slots.appendInner || props.appendInnerIcon || hasClear)\n const label = slots.label\n ? slots.label({\n label: props.label,\n props: { for: id.value },\n })\n : props.label\n\n return (\n <div\n class={[\n 'v-field',\n {\n 'v-field--active': isActive.value,\n 'v-field--appended': hasAppend,\n 'v-field--focused': isFocused.value,\n 'v-field--has-background': !!props.bgColor,\n 'v-field--persistent-clear': props.persistentClear,\n 'v-field--prepended': hasPrepend,\n 'v-field--reverse': props.reverse,\n 'v-field--single-line': props.singleLine,\n [`v-field--variant-${props.variant}`]: true,\n },\n themeClasses.value,\n loaderClasses.value,\n backgroundColorClasses.value,\n textColorClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n textColorStyles.value,\n ]}\n onClick={ onClick }\n { ...attrs }\n >\n <div class=\"v-field__overlay\" />\n\n <LoaderSlot\n name=\"v-field\"\n active={ props.loading }\n color={ VInput ? (!VInput.value.isValid.value ? undefined : props.color) : props.color }\n v-slots={{ default: slots.loader }}\n />\n\n { hasPrepend && (\n <div\n class=\"v-field__prepend-inner\"\n onClick={ e => emit('click:prepend-inner', e) }\n >\n { props.prependInnerIcon && (\n <VIcon icon={ props.prependInnerIcon } />\n ) }\n\n { slots?.prependInner?.(VInput?.value) }\n </div>\n ) }\n\n <div class=\"v-field__field\">\n { ['contained', 'filled'].includes(props.variant) && hasLabel.value && (\n <VFieldLabel ref={ floatingLabelRef } floating>\n { label }\n </VFieldLabel>\n ) }\n\n <VFieldLabel ref={ labelRef } for={ id.value }>\n { label }\n </VFieldLabel>\n\n { slots.default?.({\n ...VInput?.value,\n ...slotProps.value,\n props: {\n id: id.value,\n class: 'v-field__input',\n onFocus: () => (isFocused.value = true),\n onBlur: () => (isFocused.value = false),\n },\n focus,\n blur,\n } as VFieldSlot) }\n </div>\n\n { hasClear && (\n <VExpandXTransition>\n <div\n class=\"v-field__clearable\"\n onClick={ (e: Event) => emit('click:clear', e) }\n v-show={ props.active }\n >\n { slots.clear\n ? slots.clear()\n : <VIcon icon={ props.clearIcon } />\n }\n </div>\n </VExpandXTransition>\n ) }\n\n { hasAppend && (\n <div\n class=\"v-field__append-inner\"\n onClick={ e => emit('click:append-inner', e) }\n >\n { slots?.appendInner?.(VInput?.value) }\n\n { props.appendInnerIcon && (\n <VIcon icon={ props.appendInnerIcon } />\n ) }\n </div>\n ) }\n\n <div class=\"v-field__outline\">\n { isOutlined && (\n <>\n <div class=\"v-field__outline__start\" />\n\n { hasLabel.value && (\n <div class=\"v-field__outline__notch\">\n <VFieldLabel ref={ floatingLabelRef } floating>\n { label }\n </VFieldLabel>\n </div>\n ) }\n\n <div class=\"v-field__outline__end\" />\n </>\n ) }\n\n { ['plain', 'underlined'].includes(props.variant) && hasLabel.value && (\n <VFieldLabel ref={ floatingLabelRef } floating>\n { label }\n </VFieldLabel>\n ) }\n </div>\n </div>\n )\n })\n\n return {\n controlRef,\n }\n },\n})\n\nexport type VField = InstanceType<typeof VField>\n\n// TODO: this is kinda slow, might be better to implicitly inherit props instead\nexport function filterFieldProps (attrs: Record<string, unknown>) {\n return pick(attrs, Object.keys(VField.props))\n}\n","import { computed, inject, provide } from 'vue'\nimport { consoleError, consoleWarn, getObjectValueByPath, wrapInRef } from '@/util'\n\nimport en from '@/locale/en'\n\n// Types\nimport type { App, InjectionKey, Ref } from 'vue'\nimport type { MaybeRef } from '@/util'\n\nexport interface LocaleMessages {\n [key: string]: LocaleMessages | string\n}\n\nexport interface LocaleOptions {\n defaultLocale?: string\n fallbackLocale?: string\n messages?: LocaleMessages\n}\n\nexport interface LocaleProps {\n locale?: string\n fallbackLocale?: string\n messages?: LocaleMessages\n}\n\nexport interface LocaleInstance {\n current: Ref<string>\n fallback: Ref<string>\n messages: Ref<LocaleMessages>\n t: (key: string, ...params: unknown[]) => string\n n: (value: number) => string\n}\n\nexport interface LocaleAdapter {\n createRoot: (app: App) => LocaleInstance\n getScope: () => LocaleInstance\n createScope: (options?: LocaleProps) => LocaleInstance\n}\n\nexport const LocaleAdapterSymbol: InjectionKey<LocaleAdapter> = Symbol.for('vuetify:locale-adapter')\nexport const VuetifyLocaleSymbol: InjectionKey<LocaleInstance> = Symbol.for('vuetify:locale')\n\nexport function provideLocale (props?: LocaleProps) {\n const adapter = inject(LocaleAdapterSymbol)\n\n if (!adapter) throw new Error('[Vuetify] Could not find injected locale adapter')\n\n return adapter.createScope(props)\n}\n\nexport function useLocale () {\n const adapter = inject(LocaleAdapterSymbol)\n\n if (!adapter) throw new Error('[Vuetify] Could not find injected locale adapter')\n\n return adapter.getScope()\n}\n\nfunction isLocaleAdapter (x: any): x is LocaleAdapter {\n return !!x && x.hasOwnProperty('getScope') && x.hasOwnProperty('createScope') && x.hasOwnProperty('createRoot')\n}\n\nexport function createLocaleAdapter (app: App, options?: LocaleOptions | LocaleAdapter) {\n const adapter = isLocaleAdapter(options) ? options : createDefaultLocaleAdapter(options)\n\n const rootInstance = adapter.createRoot(app)\n\n return { adapter, rootInstance }\n}\n\nconst LANG_PREFIX = '$vuetify.'\n\nconst replace = (str: string, params: unknown[]) => {\n return str.replace(/\\{(\\d+)\\}/g, (match: string, index: string) => {\n /* istanbul ignore next */\n return String(params[+index])\n })\n}\n\nconst createTranslateFunction = (\n current: Ref<string>,\n fallback: Ref<string>,\n messages: Ref<LocaleMessages>,\n) => {\n return (key: string, ...params: unknown[]) => {\n if (!key.startsWith(LANG_PREFIX)) {\n return replace(key, params)\n }\n\n const shortKey = key.replace(LANG_PREFIX, '')\n const currentLocale = current.value && messages.value[current.value]\n const fallbackLocale = fallback.value && messages.value[fallback.value]\n\n let str: string = getObjectValueByPath(currentLocale, shortKey, null)\n\n if (!str) {\n consoleWarn(`Translation key \"${key}\" not found in \"${current.value}\", trying fallback locale`)\n str = getObjectValueByPath(fallbackLocale, shortKey, null)\n }\n\n if (!str) {\n consoleError(`Translation key \"${key}\" not found in fallback`)\n str = key\n }\n\n if (typeof str !== 'string') {\n consoleError(`Translation key \"${key}\" has a non-string value`)\n str = key\n }\n\n return replace(str, params)\n }\n}\n\nfunction createNumberFunction (current: Ref<string>, fallback: Ref<string>) {\n return (value: number, options?: Intl.NumberFormatOptions) => {\n const numberFormat = new Intl.NumberFormat([current.value, fallback.value], options)\n\n return numberFormat.format(value)\n }\n}\n\nexport function createDefaultLocaleAdapter (options?: LocaleOptions): LocaleAdapter {\n const createScope = (options: {\n current: MaybeRef<string>\n fallback: MaybeRef<string>\n messages: MaybeRef<LocaleMessages>\n }) => {\n const current = wrapInRef(options.current)\n const fallback = wrapInRef(options.fallback)\n const messages = wrapInRef(options.messages)\n\n return {\n current,\n fallback,\n messages,\n t: createTranslateFunction(current, fallback, messages),\n n: createNumberFunction(current, fallback),\n }\n }\n\n return {\n createRoot: app => {\n const rootScope = createScope({\n current: options?.defaultLocale ?? 'en',\n fallback: options?.fallbackLocale ?? 'en',\n messages: options?.messages ?? { en },\n })\n\n app.provide(VuetifyLocaleSymbol, rootScope)\n\n return rootScope\n },\n getScope: () => {\n const currentScope = inject(VuetifyLocaleSymbol)\n\n if (!currentScope) throw new Error('[Vuetify] Could not find injected locale instance')\n\n return currentScope\n },\n createScope: options => {\n const currentScope = inject(VuetifyLocaleSymbol)\n\n if (!currentScope) throw new Error('[Vuetify] Could not find injected locale instance')\n\n const newScope = createScope({\n current: computed(() => options?.locale ?? currentScope.current.value),\n fallback: computed(() => options?.locale ?? currentScope.fallback.value),\n messages: computed(() => options?.messages ?? currentScope.messages.value),\n })\n\n provide(VuetifyLocaleSymbol, newScope)\n\n return newScope\n },\n }\n}\n","// Styles\nimport './VFileInput.sass'\n\n// Components\nimport { filterFieldProps, makeVFieldProps } from '@/components/VField/VField'\nimport { VChip } from '@/components/VChip'\nimport { VCounter } from '@/components/VCounter'\nimport { VField } from '@/components/VField'\n\n// Composables\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { defineComponent, filterInputAttrs, humanReadableFileSize, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport { filterInputProps, makeVInputProps, VInput } from '@/components/VInput/VInput'\n\nexport const VFileInput = defineComponent({\n name: 'VFileInput',\n\n inheritAttrs: false,\n\n props: {\n chips: Boolean,\n counter: Boolean,\n counterSizeString: {\n type: String,\n default: '$vuetify.fileInput.counterSize',\n },\n counterString: {\n type: String,\n default: '$vuetify.fileInput.counter',\n },\n multiple: Boolean,\n showSize: {\n type: [Boolean, Number] as PropType<boolean | 1000 | 1024>,\n default: false,\n validator: (v: boolean | number) => {\n return (\n typeof v === 'boolean' ||\n [1000, 1024].includes(v)\n )\n },\n },\n\n ...makeVInputProps(),\n\n prependIcon: {\n type: String,\n default: '$file',\n },\n modelValue: {\n type: Array as PropType<File[] | undefined>,\n default: () => ([]),\n validator: (val: any) => {\n return wrapInArray(val).every(v => v != null && typeof v === 'object')\n },\n },\n\n ...makeVFieldProps({ clearable: true }),\n },\n\n emits: {\n 'update:modelValue': (files: File[]) => true,\n },\n\n setup (props, { attrs, slots }) {\n const { t } = useLocale()\n const model = useProxiedModel(props, 'modelValue')\n\n const internalDirty = ref(false)\n const isDirty = computed(() => {\n return internalDirty.value || !!model.value?.length\n })\n\n const base = computed(() => typeof props.showSize !== 'boolean' ? props.showSize : undefined)\n const totalBytes = computed(() => (model.value ?? []).reduce((bytes, { size = 0 }) => bytes + size, 0))\n const totalBytesReadable = computed(() => humanReadableFileSize(totalBytes.value, base.value))\n\n const fileNames = computed(() => (model.value ?? []).map(file => {\n const { name = '', size = 0 } = file\n\n return !props.showSize\n ? name\n : `${name} (${humanReadableFileSize(size, base.value)})`\n }))\n\n const counterValue = computed(() => {\n const fileCount = model.value?.length ?? 0\n if (props.showSize) return t(props.counterSizeString, fileCount, totalBytesReadable.value)\n else return t(props.counterString, fileCount)\n })\n\n const inputRef = ref<HTMLInputElement>()\n function focus () {\n inputRef.value?.focus()\n }\n function blur () {\n inputRef.value?.blur()\n }\n function click () {\n inputRef.value?.click()\n }\n function clear (e?: Event) {\n e?.stopPropagation()\n\n model.value = []\n\n if (inputRef?.value) {\n inputRef.value.value = ''\n }\n }\n\n useRender(() => {\n const hasCounter = !!(slots.counter || props.counter || counterValue.value)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const [inputProps] = filterInputProps(props)\n const [fieldProps, _] = filterFieldProps(props)\n\n return (\n <VInput\n v-model={ model.value }\n class=\"v-file-input\"\n { ...rootAttrs }\n { ...inputProps }\n >\n {{\n ...slots,\n default: () => (\n <VField\n active={ isDirty.value }\n prepend-icon={ props.prependIcon }\n onUpdate:active={ val => internalDirty.value = val }\n onClick:control={ click }\n onClick:prepend={ click }\n onClick:clear={ clear }\n { ...fieldProps }\n >\n {{\n ...slots,\n default: ({\n isActive,\n props: { class: fieldClass, ...slotProps },\n }) => (\n <>\n <input\n ref={ inputRef }\n type=\"file\"\n disabled={ props.disabled }\n multiple={ props.multiple }\n onClick={ e => e.stopPropagation() }\n onChange={ e => {\n if (!e.target) return\n\n const target = e.target as HTMLInputElement\n model.value = [...target.files ?? []]\n\n if (!isActive) inputRef.value?.focus()\n } }\n { ...slotProps }\n { ...inputAttrs }\n />\n\n { isDirty.value && (\n <div class={ fieldClass }>\n { slots.selection ? slots.selection({\n fileNames: fileNames.value,\n totalBytes: totalBytes.value,\n totalBytesReadable: totalBytesReadable.value,\n })\n : props.chips ? fileNames.value.map(text => (\n <VChip\n key={ text }\n size=\"small\"\n color={ props.color }\n >{ text }</VChip>\n ))\n : fileNames.value.join(', ') }\n </div>\n ) }\n </>\n ),\n }}\n </VField>\n ),\n details: hasCounter ? () => (\n <>\n <span />\n\n <VCounter\n value={ counterValue.value }\n v-slots={ slots.counter }\n />\n </>\n ) : undefined,\n }}\n </VInput>\n )\n })\n\n return {\n focus,\n blur,\n click,\n }\n },\n})\n\nexport type VFileInput = InstanceType<typeof VFileInput>\n","// Styles\nimport './VFooter.sass'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VFooter = defineComponent({\n name: 'VFooter',\n\n props: {\n ...makeBorderProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeTagProps({ tag: 'footer' }),\n ...makeThemeProps(),\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { positionClasses, positionStyles } = usePosition(props)\n const { roundedClasses } = useRounded(props)\n\n return () => (\n <props.tag\n class={[\n 'v-footer',\n themeClasses.value,\n borderClasses.value,\n elevationClasses.value,\n positionClasses.value,\n roundedClasses.value,\n ]}\n style={[\n\n dimensionStyles.value,\n positionStyles.value,\n ]}\n v-slots={ slots }\n />\n )\n },\n})\n","// Composables\nimport { createForm, makeFormProps } from '@/composables/form'\n\n// Utilities\nimport { ref } from 'vue'\nimport { defineComponent, useRender } from '@/util'\n\nexport const VForm = defineComponent({\n name: 'VForm',\n\n props: {\n ...makeFormProps(),\n },\n\n emits: {\n 'update:modelValue': (val: boolean | null) => true,\n submit: (e: Event) => true,\n },\n\n setup (props, { slots, emit }) {\n const form = createForm(props)\n const formRef = ref<HTMLFormElement>()\n\n function onReset (e: Event) {\n e.preventDefault()\n form.reset()\n }\n\n function onSubmit (e: Event) {\n e.preventDefault()\n form.validate().then(({ valid }) => {\n if (valid) {\n emit('submit', e)\n }\n })\n }\n\n useRender(() => ((\n <form\n ref={ formRef }\n class=\"v-form\"\n novalidate\n onReset={ onReset }\n onSubmit={ onSubmit }\n >\n { slots.default?.(form) }\n </form>\n )))\n\n return form\n },\n})\n\nexport type VForm = InstanceType<typeof VForm>\n","// Styles\nimport './VGrid.sass'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VContainer = defineComponent({\n name: 'VContainer',\n\n props: {\n fluid: {\n type: Boolean,\n default: false,\n },\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n return () => (\n <props.tag\n class={[\n 'v-container',\n { 'v-container--fluid': props.fluid },\n ]}\n v-slots={ slots }\n />\n )\n },\n})\n","// Styles\nimport './VGrid.sass'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { capitalize, computed, h } from 'vue'\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { Prop } from 'vue'\n\nconst breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl'] as const // no xs\n\nconst breakpointProps = (() => {\n return breakpoints.reduce((props, val) => {\n props[val] = {\n type: [Boolean, String, Number],\n default: false,\n }\n return props\n }, {} as Record<string, Prop<boolean | string | number, false>>)\n})()\n\nconst offsetProps = (() => {\n return breakpoints.reduce((props, val) => {\n props['offset' + capitalize(val)] = {\n type: [String, Number],\n default: null,\n }\n return props\n }, {} as Record<string, Prop<string | number, null>>)\n})()\n\nconst orderProps = (() => {\n return breakpoints.reduce((props, val) => {\n props['order' + capitalize(val)] = {\n type: [String, Number],\n default: null,\n }\n return props\n }, {} as Record<string, Prop<string | number, null>>)\n})()\n\nconst propMap = {\n col: Object.keys(breakpointProps),\n offset: Object.keys(offsetProps),\n order: Object.keys(orderProps),\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: boolean | string | number) {\n let className: string = type\n if (val == null || val === false) {\n return undefined\n }\n if (prop) {\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n if (type === 'col') {\n className = 'v-' + className\n }\n // Handling the boolean style prop when accepting [Boolean, String, Number]\n // means Vue will not convert <v-col sm></v-col> to sm: true for us.\n // Since the default is false, an empty string indicates the prop's presence.\n if (type === 'col' && (val === '' || val === true)) {\n // .v-col-md\n return className.toLowerCase()\n }\n // .order-md-6\n className += `-${val}`\n return className.toLowerCase()\n}\n\nexport const VCol = defineComponent({\n name: 'VCol',\n\n props: {\n cols: {\n type: [Boolean, String, Number],\n default: false,\n },\n ...breakpointProps,\n offset: {\n type: [String, Number],\n default: null,\n },\n ...offsetProps,\n order: {\n type: [String, Number],\n default: null,\n },\n ...orderProps,\n alignSelf: {\n type: String,\n default: null,\n validator: (str: any) => ['auto', 'start', 'end', 'center', 'baseline', 'stretch'].includes(str),\n },\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const classes = computed(() => {\n const classList: any[] = []\n\n // Loop through `col`, `offset`, `order` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string | number | boolean = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n const hasColClasses = classList.some(className => className.startsWith('v-col-'))\n\n classList.push({\n // Default to .v-col if no other col-{bp}-* classes generated nor `cols` specified.\n 'v-col': !hasColClasses || !props.cols,\n [`v-col-${props.cols}`]: props.cols,\n [`offset-${props.offset}`]: props.offset,\n [`order-${props.order}`]: props.order,\n [`align-self-${props.alignSelf}`]: props.alignSelf,\n })\n\n return classList\n })\n\n return () => h(props.tag, {\n class: classes.value,\n }, slots.default?.())\n },\n})\n","// Styles\nimport './VGrid.sass'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { capitalize, computed, h } from 'vue'\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { Prop } from 'vue'\n\nconst breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl'] as const // no xs\n\nconst ALIGNMENT = ['start', 'end', 'center'] as const\n\nfunction makeRowProps (prefix: string, def: () => Prop<string, null>) {\n return breakpoints.reduce((props, val) => {\n props[prefix + capitalize(val)] = def()\n return props\n }, {} as Record<string, Prop<string, null>>)\n}\n\nconst alignValidator = (str: any) => [...ALIGNMENT, 'baseline', 'stretch'].includes(str)\nconst alignProps = makeRowProps('align', () => ({\n type: String,\n default: null,\n validator: alignValidator,\n}))\n\nconst justifyValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around'].includes(str)\nconst justifyProps = makeRowProps('justify', () => ({\n type: String,\n default: null,\n validator: justifyValidator,\n}))\n\nconst alignContentValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around', 'stretch'].includes(str)\nconst alignContentProps = makeRowProps('alignContent', () => ({\n type: String,\n default: null,\n validator: alignContentValidator,\n}))\n\nconst propMap = {\n align: Object.keys(alignProps),\n justify: Object.keys(justifyProps),\n alignContent: Object.keys(alignContentProps),\n}\n\nconst classMap = {\n align: 'align',\n justify: 'justify',\n alignContent: 'align-content',\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: string) {\n let className = classMap[type]\n if (val == null) {\n return undefined\n }\n if (prop) {\n // alignSm -> Sm\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n // .align-items-sm-center\n className += `-${val}`\n return className.toLowerCase()\n}\n\nexport const VRow = defineComponent({\n name: 'VRow',\n\n props: {\n dense: Boolean,\n noGutters: Boolean,\n align: {\n type: String,\n default: null,\n validator: alignValidator,\n },\n ...alignProps,\n justify: {\n type: String,\n default: null,\n validator: justifyValidator,\n },\n ...justifyProps,\n alignContent: {\n type: String,\n default: null,\n validator: alignContentValidator,\n },\n ...alignContentProps,\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const classes = computed(() => {\n const classList: any[] = []\n\n // Loop through `align`, `justify`, `alignContent` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n classList.push({\n 'v-row--no-gutters': props.noGutters,\n 'v-row--dense': props.dense,\n [`align-${props.align}`]: props.align,\n [`justify-${props.justify}`]: props.justify,\n [`align-content-${props.alignContent}`]: props.alignContent,\n })\n\n return classList\n })\n\n return () => h(props.tag, {\n class: ['v-row', classes.value],\n }, slots.default?.())\n },\n})\n","import { createSimpleFunctional } from '@/util'\n\nexport const VSpacer = createSimpleFunctional('flex-grow-1', 'div', 'VSpacer')\n","// Composables\nimport { makeDelayProps, useDelay } from '@/composables/delay'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VHover = defineComponent({\n name: 'VHover',\n\n props: {\n disabled: Boolean,\n modelValue: {\n type: Boolean,\n default: undefined,\n },\n\n ...makeDelayProps(),\n },\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots }) {\n const hover = useProxiedModel(props, 'modelValue')\n const { runOpenDelay, runCloseDelay } = useDelay(props, value => !props.disabled && (hover.value = value))\n\n return () => slots.default?.({\n hover: hover.value,\n props: {\n onMouseenter: runOpenDelay,\n onMouseleave: runCloseDelay,\n },\n })\n },\n})\n","// Styles\nimport './VItemGroup.sass'\n\n// Composables\nimport { makeGroupProps, useGroup } from '@/composables/group'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VItemGroupSymbol = Symbol.for('vuetify:v-item-group')\n\nexport const VItemGroup = defineComponent({\n name: 'VItemGroup',\n\n props: {\n ...makeGroupProps({\n selectedClass: 'v-item--selected',\n }),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:modelValue': (value: any) => true,\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { isSelected, select, next, prev, selected } = useGroup(props, VItemGroupSymbol)\n\n return () => (\n <props.tag\n class={[\n 'v-item-group',\n themeClasses.value,\n ]}\n >\n { slots.default?.({\n isSelected,\n select,\n next,\n prev,\n selected: selected.value,\n }) }\n </props.tag>\n )\n },\n})\n\nexport type VItemGroup = InstanceType<typeof VItemGroup>\n","// Composables\nimport { makeGroupItemProps, useGroupItem } from '@/composables/group'\nimport { VItemGroupSymbol } from './VItemGroup'\n\n// Utilities\nimport { genericComponent } from '@/util'\n\n// Types\nimport type { MakeSlots } from '@/util'\nimport type { GroupItemProvide } from '@/composables/group'\n\nexport const VItem = genericComponent<new () => {\n $slots: MakeSlots<{\n default: [GroupItemProvide]\n }>\n}>()({\n name: 'VItem',\n\n props: makeGroupItemProps(),\n\n setup (props, { slots }) {\n const { isSelected, select, toggle, selectedClass, value, disabled } = useGroupItem(props, VItemGroupSymbol)\n return () => slots.default?.({\n isSelected: isSelected.value,\n selectedClass: selectedClass.value,\n select,\n toggle,\n value: value.value,\n disabled: disabled.value,\n })\n },\n})\n\nexport type VItem = InstanceType<typeof VItem>\n","import './VKbd.sass'\n\nimport { createSimpleFunctional } from '@/util'\n\nexport const VKbd = createSimpleFunctional('v-kbd')\n","// Styles\nimport './VLayout.sass'\n\n// Utilities\nimport { defineComponent, useRender } from '@/util'\n\n// Composables\nimport { createLayout, makeLayoutProps } from '@/composables/layout'\n\nexport const VLayout = defineComponent({\n name: 'VLayout',\n\n props: makeLayoutProps(),\n\n setup (props, { slots }) {\n const { layoutClasses, getLayoutItem, items } = createLayout(props)\n\n useRender(() => (\n <div class={ layoutClasses.value }>\n { slots.default?.() }\n </div>\n ))\n\n return {\n getLayoutItem,\n items,\n }\n },\n})\n\nexport type VLayout = InstanceType<typeof VLayout>\n","// Styles\nimport './VLayoutItem.sass'\n\n// Composables\nimport { makeLayoutItemProps, useLayoutItem } from '@/composables/layout'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const VLayoutItem = defineComponent({\n name: 'VLayoutItem',\n\n props: {\n position: {\n type: String as PropType<'top' | 'right' | 'bottom' | 'left'>,\n required: true,\n },\n size: {\n type: [Number, String],\n default: 300,\n },\n modelValue: Boolean,\n ...makeLayoutItemProps(),\n },\n\n setup (props, { slots }) {\n const styles = useLayoutItem(\n props.name,\n computed(() => parseInt(props.priority, 10)),\n toRef(props, 'position'),\n toRef(props, 'size'),\n toRef(props, 'size'),\n toRef(props, 'modelValue')\n )\n\n return () => (\n <div\n class={[\n 'v-layout-item',\n {\n 'v-layout-item--absolute': props.absolute,\n },\n ]}\n style={ styles.value }\n >\n { slots.default?.() }\n </div>\n )\n },\n})\n","// Composables\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport intersect from '@/directives/intersect'\n\n// Utilities\nimport type { PropType } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport const VLazy = defineComponent({\n name: 'VLazy',\n\n directives: { intersect },\n\n props: {\n modelValue: Boolean,\n options: {\n type: Object as PropType<IntersectionObserverInit>,\n // For more information on types, navigate to:\n // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API\n default: () => ({\n root: undefined,\n rootMargin: undefined,\n threshold: undefined,\n }),\n },\n\n ...makeDimensionProps(),\n ...makeTagProps(),\n ...makeTransitionProps({ transition: 'fade-transition' }),\n },\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots }) {\n const { dimensionStyles } = useDimension(props)\n const isActive = useProxiedModel(props, 'modelValue')\n\n function onIntersect (isIntersecting: boolean) {\n if (isActive.value) return\n\n isActive.value = isIntersecting\n }\n\n return () => (\n <props.tag\n class=\"v-lazy\"\n v-intersect={[\n onIntersect,\n props.options,\n isActive.value ? [] : ['once'],\n ]}\n style={ dimensionStyles.value }\n >\n { isActive.value && (\n <MaybeTransition transition={ props.transition }>\n { slots.default?.() }\n </MaybeTransition>\n )}\n </props.tag>\n )\n },\n})\n","// Composables\nimport { makeTagProps } from '@/composables/tag'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport const VListSubheader = defineComponent({\n name: 'VListSubheader',\n\n props: {\n color: String,\n inset: Boolean,\n\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const { textColorClasses, textColorStyles } = useTextColor(toRef(props, 'color'))\n\n return () => (\n <props.tag\n class={[\n 'v-list-subheader',\n {\n 'v-list-subheader--inset': props.inset,\n },\n textColorClasses.value,\n ]}\n style={{ textColorStyles }}\n >\n { slots.default && (\n <div class=\"v-list-subheader__text\">\n { slots.default() }\n </div>\n ) }\n </props.tag>\n )\n },\n})\n","export type OpenStrategyFn = (data: {\n id: string\n value: boolean\n opened: Set<string>\n children: Map<string, string[]>\n parents: Map<string, string>\n event?: Event\n}) => Set<string>\n\nexport const singleOpenStrategy: OpenStrategyFn = ({ id, value, opened, parents }) => {\n if (value) {\n const newOpened = new Set<string>()\n newOpened.add(id)\n\n let parent = parents.get(id)\n\n while (parent != null) {\n newOpened.add(parent)\n parent = parents.get(parent)\n }\n\n return newOpened\n } else {\n opened.delete(id)\n return opened\n }\n}\n\nexport const multipleOpenStrategy: OpenStrategyFn = ({ id, value, opened, parents }) => {\n if (value) {\n let parent = parents.get(id)\n opened.add(id)\n\n while (parent != null) {\n opened.add(parent)\n parent = parents.get(parent)\n }\n\n return opened\n } else {\n opened.delete(id)\n }\n return opened\n}\n","export type SelectStrategyFn = (data: {\n id: string\n value: boolean\n selected: Map<string, 'on' | 'off' | 'indeterminate'>\n children: Map<string, string[]>\n parents: Map<string, string>\n event?: Event\n}) => Map<string, 'on' | 'off' | 'indeterminate'>\n\nexport type SelectStrategyTransformInFn = (\n v: string[] | undefined,\n children: Map<string, string[]>,\n parents: Map<string, string>\n) => Map<string, 'on' | 'off' | 'indeterminate'>\n\nexport type SelectStrategyTransformOutFn = (\n v: Map<string, 'on' | 'off' | 'indeterminate'>,\n children: Map<string, string[]>,\n parents: Map<string, string>\n) => any[]\n\nexport type SelectStrategy = {\n select: SelectStrategyFn\n in: SelectStrategyTransformInFn\n out: SelectStrategyTransformOutFn\n}\n\nexport const independentSelectStrategy: SelectStrategy = {\n select: ({ id, value, selected }) => {\n selected.set(id, value ? 'on' : 'off')\n\n return selected\n },\n in: (v, children, parents) => {\n let map = new Map()\n\n for (const id of (v || [])) {\n map = independentSelectStrategy.select({\n id,\n value: true,\n selected: new Map(map),\n children,\n parents,\n })\n }\n\n return map\n },\n out: v => {\n const arr = []\n\n for (const [key, value] of v.entries()) {\n if (value === 'on') arr.push(key)\n }\n\n return arr\n },\n}\n\nexport const leafSelectStrategy = (single = false): SelectStrategy => {\n const strategy: SelectStrategy = {\n select: ({ id, value, selected, children }) => {\n if (children.has(id)) return selected\n\n if (single) return new Map([[id, value ? 'on' : 'off']])\n\n selected.set(id, value ? 'on' : 'off')\n\n return selected\n },\n in: (v, children, parents) => {\n let map = new Map()\n\n for (const id of (v ?? [])) {\n map = strategy.select({\n id,\n value: true,\n selected: new Map(map),\n children,\n parents,\n })\n }\n\n return map\n },\n out: independentSelectStrategy.out,\n }\n\n return strategy\n}\n\nexport const classicSelectStrategy: SelectStrategy = {\n select: ({ id, value, selected, children, parents }) => {\n const items = [id]\n\n while (items.length) {\n const item = items.shift()!\n\n selected.set(item, value ? 'on' : 'off')\n\n if (children.has(item)) {\n items.push(...children.get(item)!)\n }\n }\n\n let parent = parents.get(id)\n\n while (parent) {\n const childrenIds = children.get(parent)!\n const everySelected = childrenIds.every(cid => selected.get(cid) === 'on')\n const noneSelected = childrenIds.every(cid => !selected.has(cid) || selected.get(cid) === 'off')\n\n selected.set(parent, everySelected ? 'on' : noneSelected ? 'off' : 'indeterminate')\n\n parent = parents.get(parent)\n }\n\n return selected\n },\n in: (v, children, parents) => {\n let map = new Map()\n\n for (const id of (v || [])) {\n map = classicSelectStrategy.select({\n id,\n value: true,\n selected: new Map(map),\n children,\n parents,\n })\n }\n\n return map\n },\n out: (v, children) => {\n const arr = []\n\n for (const [key, value] of v.entries()) {\n if (value === 'on' && !children.has(key)) arr.push(key)\n }\n\n return arr\n },\n}\n","export type ActiveStrategyFn = (data: {\n id: string\n value: boolean\n active: Set<string>\n children: Map<string, string[]>\n parents: Map<string, string>\n event?: Event\n}) => Set<string>\n\nexport const classicActiveStrategy = (single?: boolean): ActiveStrategyFn => {\n return ({ id, value, active }) => {\n const newActive: Set<string> = single ? new Set() : active\n\n if (value) {\n newActive.add(id)\n } else {\n newActive.delete(id)\n }\n\n return newActive\n }\n}\n","import { useProxiedModel } from '@/composables/proxiedModel'\nimport { getUid, propsFactory } from '@/util'\nimport { computed, inject, onBeforeUnmount, provide, ref } from 'vue'\nimport { multipleOpenStrategy, singleOpenStrategy } from './openStrategies'\nimport { classicSelectStrategy, independentSelectStrategy, leafSelectStrategy } from './selectStrategies'\nimport { classicActiveStrategy } from './activeStrategies'\n\n// Types\nimport type { InjectionKey, Prop, Ref } from 'vue'\nimport type { SelectStrategyFn } from './selectStrategies'\nimport type { OpenStrategyFn } from './openStrategies'\nimport type { ActiveStrategyFn } from './activeStrategies'\n\nexport type SelectStrategy = 'single-leaf' | 'leaf' | 'independent' | 'classic' | SelectStrategyFn\nexport type OpenStrategy = 'single' | 'multiple' | OpenStrategyFn\nexport type ActiveStrategy = 'single' | 'multiple' | ActiveStrategyFn\n\nexport interface NestedProps {\n selectStrategy: SelectStrategy | undefined\n openStrategy: OpenStrategy | undefined\n activeStrategy: ActiveStrategy | undefined\n selected: string[] | undefined\n opened: string[] | undefined\n active: string[] | undefined\n 'onUpdate:selected': ((val: string[]) => void) | undefined\n 'onUpdate:opened': ((val: string[]) => void) | undefined\n 'onUpdate:active': ((val: string[]) => void) | undefined\n}\n\ntype NestedProvide = {\n id: Ref<string | null>\n root: {\n children: Ref<Map<string, string[]>>\n parents: Ref<Map<string, string>>\n opened: Ref<Set<string>>\n active: Ref<Set<string>>\n selected: Ref<Map<string, 'on' | 'off' | 'indeterminate'>>\n selectedValues: Ref<string[]>\n register: (id: string, parentId: string | null, isGroup?: boolean) => void\n unregister: (id: string) => void\n open: (id: string, value: boolean, event?: Event) => void\n select: (id: string, value: boolean, event?: Event) => void\n activate: (id: string, value: boolean, event?: Event) => void\n }\n}\n\nconst VNestedSymbol: InjectionKey<NestedProvide> = Symbol.for('vuetify:nested')\n\nconst emptyNested: NestedProvide = {\n id: ref(null),\n root: {\n register: () => null,\n unregister: () => null,\n parents: ref(new Map()),\n children: ref(new Map()),\n open: () => null,\n select: () => null,\n opened: ref(new Set()),\n selected: ref(new Map()),\n active: ref(new Set()),\n activate: () => null,\n selectedValues: ref([]),\n },\n}\n\nexport const makeNestedProps = propsFactory({\n selectStrategy: [String, Function] as Prop<SelectStrategy>,\n openStrategy: [String, Function] as Prop<OpenStrategy>,\n activeStrategy: [String, Function] as Prop<ActiveStrategy>,\n opened: Array as Prop<string[]>,\n selected: Array as Prop<string[]>,\n active: Array as Prop<string[]>,\n}, 'nested')\n\nexport const useNested = (props: NestedProps) => {\n let isUnmounted = false\n const children = ref(new Map<string, string[]>())\n const parents = ref(new Map<string, string>())\n\n const opened = useProxiedModel(props, 'opened', props.opened, v => new Set(v), v => [...v.values()])\n const active = useProxiedModel(props, 'active', props.active, v => new Set(v), v => [...v.values()])\n\n const activeStrategy = computed(() => {\n if (typeof props.activeStrategy === 'object') return props.activeStrategy\n\n switch (props.activeStrategy) {\n case 'single': return classicActiveStrategy(true)\n case 'multiple':\n default:\n return classicActiveStrategy()\n }\n })\n\n const selectStrategy = computed(() => {\n if (typeof props.selectStrategy === 'object') return props.selectStrategy\n\n switch (props.selectStrategy) {\n case 'single-leaf': return leafSelectStrategy(true)\n case 'leaf': return leafSelectStrategy()\n case 'independent': return independentSelectStrategy\n case 'classic':\n default: return classicSelectStrategy\n }\n })\n\n const openStrategy = computed(() => {\n if (typeof props.openStrategy === 'function') return props.openStrategy\n\n switch (props.openStrategy) {\n case 'single': return singleOpenStrategy\n case 'multiple':\n default: return multipleOpenStrategy\n }\n })\n\n const selected = useProxiedModel(\n props,\n 'selected',\n props.selected,\n v => selectStrategy.value.in(v, children.value, parents.value),\n v => selectStrategy.value.out(v, children.value, parents.value),\n )\n\n onBeforeUnmount(() => {\n isUnmounted = true\n })\n\n const nested: NestedProvide = {\n id: ref(null),\n root: {\n opened,\n selected,\n active,\n selectedValues: computed(() => {\n const arr = []\n\n for (const [key, value] of selected.value.entries()) {\n if (value === 'on') arr.push(key)\n }\n\n return arr\n }),\n register: (id, parentId, isGroup) => {\n parentId && parents.value.set(id, parentId)\n\n isGroup && children.value.set(id, [])\n\n if (parentId != null) {\n children.value.set(parentId, [...children.value.get(parentId) || [], id])\n }\n },\n unregister: id => {\n if (isUnmounted) return\n\n children.value.delete(id)\n const parent = parents.value.get(id)\n if (parent) {\n const list = children.value.get(parent) ?? []\n children.value.set(parent, list.filter(child => child !== id))\n }\n parents.value.delete(id)\n opened.value.delete(id)\n active.value.delete(id)\n selected.value.delete(id)\n },\n open: (id, value, event) => {\n const newOpened = openStrategy.value({\n id,\n value,\n opened: new Set(opened.value),\n children: children.value,\n parents: parents.value,\n event,\n })\n\n newOpened && (opened.value = newOpened)\n },\n select: (id, value, event) => {\n const newSelected = selectStrategy.value.select({\n id,\n value,\n selected: new Map(selected.value),\n children: children.value,\n parents: parents.value,\n event,\n })\n\n newSelected && (selected.value = newSelected)\n },\n activate: (id, value, event) => {\n const newActive = activeStrategy.value({\n id,\n value,\n active: new Set(active.value),\n children: children.value,\n parents: parents.value,\n event,\n })\n\n newActive && (active.value = newActive)\n },\n children,\n parents,\n },\n }\n\n provide(VNestedSymbol, nested)\n\n return nested.root\n}\n\nexport const useNestedItem = (id: Ref<string | undefined>) => {\n const parent = inject(VNestedSymbol, emptyNested)\n\n const computedId = computed(() => id.value ?? getUid().toString())\n\n const item = {\n ...parent,\n id: computedId,\n parent: computed(() => parent.root.parents.value.get(computedId.value)),\n select: (selected: boolean, e: Event) => parent.root.select(computedId.value, selected, e),\n isSelected: computed(() => parent.root.selected.value.get(computedId.value) === 'on'),\n activate: (activated: boolean, e: Event) => parent.root.activate(computedId.value, activated, e),\n isActive: computed(() => parent.root.active.value.has(computedId.value)),\n }\n\n parent.root.register(computedId.value, parent.id.value, false)\n\n onBeforeUnmount(() => {\n parent.root.unregister(computedId.value)\n })\n\n return item\n}\n\nexport const useNestedGroup = (props: { value: string }) => {\n const parent = inject(VNestedSymbol, emptyNested)\n\n const id = computed(() => props.value ?? getUid().toString())\n\n const group = {\n ...parent,\n id,\n open: (open: boolean, e: Event) => parent.root.open(id.value, open, e),\n isOpen: computed(() => parent.root.opened.value.has(id.value)),\n isSelected: computed(() => parent.root.selected.value.get(id.value) === 'on'),\n isIndeterminate: computed(() => parent.root.selected.value.get(id.value) === 'indeterminate'),\n }\n\n parent.root.register(id.value, parent.id.value, true)\n\n onBeforeUnmount(() => {\n parent.root.unregister(id.value)\n })\n\n provide(VNestedSymbol, group)\n\n return group\n}\n","// Components\nimport { VExpandTransition } from '@/components/transitions'\nimport { VListChildren } from './VListChildren'\n\n// Composables\nimport { useNestedGroup } from '@/composables/nested/nested'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed } from 'vue'\nimport { defineComponent, genericComponent } from '@/util'\nimport { createList, useList } from './VList'\n\n// Types\nimport type { Prop } from 'vue'\nimport type { MakeSlots } from '@/util'\nimport type { ListItem } from './VList'\n\nexport type ListGroupHeaderSlot = {\n onClick: (e: Event) => void\n appendIcon: string\n class: string\n}\n\nconst VListGroupItems = defineComponent({\n name: 'VListGroupItems',\n\n props: {\n open: Boolean,\n items: Array as Prop<ListItem[]>,\n },\n\n setup (props, { slots }) {\n createList()\n\n return () => {\n return (\n <VExpandTransition>\n <div class=\"v-list-group__items\" v-show={props.open}>\n <VListChildren items={props.items} v-slots={slots} />\n </div>\n </VExpandTransition>\n )\n }\n },\n})\n\nexport const VListGroup = genericComponent<new <T extends ListItem>() => {\n $props: {\n items?: T[]\n }\n $slots: MakeSlots<{\n header: [ListGroupHeaderSlot]\n item: [T]\n default: []\n }>\n}>()({\n name: 'VListGroup',\n\n props: {\n value: null,\n collapseIcon: {\n type: String,\n default: '$collapse',\n },\n expandIcon: {\n type: String,\n default: '$expand',\n },\n items: Array as Prop<ListItem[]>,\n\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const { isOpen, open } = useNestedGroup(props)\n const list = useList()\n\n const onClick = (e: Event) => {\n open(!isOpen.value, e)\n }\n\n const headerProps = computed(() => ({\n onClick,\n appendIcon: isOpen.value ? props.collapseIcon : props.expandIcon,\n class: 'v-list-group__header',\n }))\n\n return () => {\n return (\n <props.tag\n class={[\n 'v-list-group',\n {\n 'v-list-group--prepend': list?.hasPrepend.value,\n },\n ]}\n >\n { slots.header?.(headerProps.value) }\n <VListGroupItems items={props.items} open={isOpen.value} v-slots={slots} />\n </props.tag>\n )\n }\n },\n})\n","// Composables\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VListItemAvatar = defineComponent({\n name: 'VListItemAvatar',\n\n props: {\n left: Boolean,\n right: Boolean,\n\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n return () => {\n return (\n <props.tag\n class={[\n 'v-list-item-avatar',\n {\n 'v-list-item-avatar--start': props.left,\n 'v-list-item-avatar--end': props.right,\n },\n ]}\n v-slots={ slots }\n />\n )\n }\n },\n})\n","import { createSimpleFunctional } from '@/util'\n\nexport const VListItemHeader = createSimpleFunctional('v-list-item-header')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VListItemSubtitle = createSimpleFunctional('v-list-item-subtitle')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VListItemTitle = createSimpleFunctional('v-list-item-title')\n","// Styles\nimport './VListItem.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { VListItemAvatar } from './VListItemAvatar'\nimport { VListItemHeader } from './VListItemHeader'\nimport { VListItemSubtitle } from './VListItemSubtitle'\nimport { VListItemTitle } from './VListItemTitle'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeRouterProps, useLink } from '@/composables/router'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\n\n// Directives\nimport { Ripple } from '@/directives/ripple'\n\n// Utilities\nimport { computed, onMounted } from 'vue'\nimport { genericComponent } from '@/util'\nimport { useNestedItem } from '@/composables/nested/nested'\nimport { useList } from './VList'\n\n// Types\nimport type { MakeSlots } from '@/util'\n\ntype ListItemSlot = {\n isActive: boolean\n activate: (value: boolean) => void\n isSelected: boolean\n select: (value: boolean) => void\n}\n\nexport const VListItem = genericComponent<new () => {\n $slots: MakeSlots<{\n prepend: [ListItemSlot]\n append: [ListItemSlot]\n default: [ListItemSlot]\n title: []\n subtitle: []\n }>\n}>()({\n name: 'VListItem',\n\n directives: { Ripple },\n\n props: {\n active: Boolean,\n activeColor: String,\n activeClass: String,\n appendAvatar: String,\n appendIcon: String,\n disabled: Boolean,\n link: Boolean,\n prependAvatar: String,\n prependIcon: String,\n subtitle: String,\n title: String,\n value: null,\n\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makeRoundedProps(),\n ...makeRouterProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n ...makeVariantProps({ variant: 'text' } as const),\n },\n\n setup (props, { attrs, slots }) {\n const link = useLink(props, attrs)\n const id = computed(() => props.value ?? link.href.value)\n const { activate, isActive: isNestedActive, select, isSelected, root, parent } = useNestedItem(id)\n const list = useList()\n const isActive = computed(() => {\n return props.active || link.isExactActive?.value || isNestedActive.value\n })\n const activeColor = props.activeColor ?? props.color\n const variantProps = computed(() => ({\n color: isActive.value ? activeColor : props.color,\n textColor: props.textColor,\n variant: props.variant,\n }))\n\n onMounted(() => {\n if (link.isExactActive?.value && parent.value != null) {\n root.open(parent.value, true)\n }\n })\n\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { colorClasses, colorStyles, variantClasses } = useVariant(variantProps)\n const { densityClasses } = useDensity(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { roundedClasses } = useRounded(props)\n\n const slotProps = computed(() => ({\n isActive: isActive.value,\n activate,\n select,\n isSelected: isSelected.value,\n }))\n\n return () => {\n const Tag = (link.isLink.value) ? 'a' : props.tag\n const hasTitle = (slots.title || props.title)\n const hasSubtitle = (slots.subtitle || props.subtitle)\n const hasHeader = !!(hasTitle || hasSubtitle)\n const hasAppend = !!(slots.append || props.appendAvatar || props.appendIcon)\n const hasPrepend = !!(slots.prepend || props.prependAvatar || props.prependIcon)\n const isClickable = !props.disabled && (link.isClickable.value || props.link || props.value != null)\n\n list?.updateHasPrepend(hasPrepend)\n\n return (\n <Tag\n class={[\n 'v-list-item',\n {\n 'v-list-item--active': isActive.value,\n 'v-list-item--disabled': props.disabled,\n 'v-list-item--link': isClickable,\n 'v-list-item--prepend': !hasPrepend && list?.hasPrepend.value,\n [`${props.activeClass}`]: isActive.value && props.activeClass,\n },\n themeClasses.value,\n borderClasses.value,\n colorClasses.value,\n densityClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n variantClasses.value,\n ]}\n style={[\n colorStyles.value,\n dimensionStyles.value,\n ]}\n href={ link.href.value }\n tabindex={ isClickable ? 0 : undefined }\n onClick={ isClickable && ((e: MouseEvent) => {\n link.navigate?.(e)\n props.value != null && activate(!isNestedActive.value, e)\n })}\n v-ripple={ isClickable }\n >\n { genOverlays(isClickable || isActive.value, 'v-list-item') }\n\n { hasPrepend && (\n slots.prepend\n ? slots.prepend(slotProps.value)\n : (\n <VListItemAvatar left>\n <VAvatar\n density={ props.density }\n icon={ props.prependIcon }\n image={ props.prependAvatar }\n />\n </VListItemAvatar>\n )\n ) }\n\n { hasHeader && (\n <VListItemHeader>\n { hasTitle && (\n <VListItemTitle>\n { slots.title\n ? slots.title()\n : props.title\n }\n </VListItemTitle>\n ) }\n\n { hasSubtitle && (\n <VListItemSubtitle>\n { slots.subtitle\n ? slots.subtitle()\n : props.subtitle\n }\n </VListItemSubtitle>\n ) }\n </VListItemHeader>\n ) }\n\n { slots.default?.(slotProps.value) }\n\n { hasAppend && (\n slots.append\n ? slots.append(slotProps.value)\n : (\n <VListItemAvatar right>\n <VAvatar\n density={ props.density }\n icon={ props.appendIcon }\n image={ props.appendAvatar }\n />\n </VListItemAvatar>\n )\n ) }\n </Tag>\n )\n }\n },\n})\n\nexport type VListItem = InstanceType<typeof VListItem>\n","// Components\nimport { VListGroup } from './VListGroup'\nimport { VListItem } from './VListItem'\n\n// Utilities\nimport { genericComponent } from '@/util'\n\n// Types\nimport type { Prop } from 'vue'\nimport type { MakeSlots } from '@/util'\nimport type { ListGroupHeaderSlot } from './VListGroup'\nimport type { ListItem } from './VList'\n\nexport const VListChildren = genericComponent<new <T extends ListItem>() => {\n $props: {\n items?: T[]\n }\n $slots: MakeSlots<{\n default: []\n externalHeader: [ListGroupHeaderSlot]\n item: [T]\n }>\n}>()({\n name: 'VListChildren',\n\n props: {\n items: Array as Prop<ListItem[]>,\n },\n\n setup (props, { slots }) {\n return () => slots.default?.() ?? props.items?.map(({ children, ...item }) => {\n const { value, ...rest } = item\n return children ? (\n <VListGroup\n value={value}\n items={children}\n >\n {{\n ...slots,\n header: headerProps => slots.externalHeader\n ? slots.externalHeader({ ...rest, ...headerProps })\n : <VListItem {...rest} {...headerProps} />,\n }}\n </VListGroup>\n ) : (\n slots.item ? slots.item(item) : <VListItem {...item} v-slots={slots} />\n )\n })\n },\n})\n","// Styles\nimport './VList.sass'\n\n// Components\nimport { VListSubheader } from './VListSubheader'\nimport { VListChildren } from './VListChildren'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeNestedProps, useNested } from '@/composables/nested/nested'\n\n// Utilities\nimport { inject, provide, ref, toRef } from 'vue'\nimport { genericComponent, useRender } from '@/util'\n\n// Types\nimport type { InjectionKey, Prop, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\nimport type { ListGroupHeaderSlot } from './VListGroup'\n\nexport type ListItem = {\n children?: ListItem[]\n value?: string\n}\n\n// Depth\nexport const DepthKey: InjectionKey<Ref<number>> = Symbol.for('vuetify:depth')\n\n// List\nexport const ListKey: InjectionKey<{\n hasPrepend: Ref<boolean>\n updateHasPrepend: (value: boolean) => void\n}> = Symbol.for('vuetify:list')\n\nexport const createList = () => {\n const parent = inject(ListKey, { hasPrepend: ref(false), updateHasPrepend: () => null })\n\n const data = {\n hasPrepend: ref(false),\n updateHasPrepend: (value: boolean) => {\n if (value) data.hasPrepend.value = value\n },\n }\n\n provide(ListKey, data)\n\n return parent\n}\n\nexport const useList = () => {\n return inject(ListKey, null)\n}\n\nexport const VList = genericComponent<new <T>() => {\n $props: {\n items?: T[]\n }\n $slots: MakeSlots<{\n subheader: []\n header: [ListGroupHeaderSlot]\n item: [T]\n }>\n}>()({\n name: 'VList',\n\n props: {\n color: String,\n disabled: Boolean,\n lines: {\n type: String,\n default: 'one',\n },\n nav: Boolean,\n subheader: {\n type: [Boolean, String],\n default: false,\n },\n items: Array as Prop<ListItem[]>,\n\n ...makeNestedProps({\n selectStrategy: 'leaf' as const,\n openStrategy: 'multiple' as const,\n activeStrategy: 'single' as const,\n }),\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:selected': (val: string[]) => true,\n 'update:opened': (val: string[]) => true,\n 'update:active': (val: string[]) => true,\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'color'))\n const { borderClasses } = useBorder(props)\n const { densityClasses } = useDensity(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { roundedClasses } = useRounded(props)\n const { open, select, activate } = useNested(props)\n createList()\n\n useRender(() => {\n const hasHeader = typeof props.subheader === 'string' || slots.subheader\n\n return (\n <props.tag\n class={[\n 'v-list',\n {\n 'v-list--disabled': props.disabled,\n 'v-list--nav': props.nav,\n 'v-list--subheader': props.subheader,\n 'v-list--subheader-sticky': props.subheader === 'sticky',\n [`v-list--${props.lines}-line`]: true,\n },\n themeClasses.value,\n backgroundColorClasses.value,\n borderClasses.value,\n densityClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n dimensionStyles.value,\n ]}\n >\n { hasHeader && (\n slots.subheader\n ? slots.subheader()\n : <VListSubheader>{ props.subheader }</VListSubheader>\n ) }\n\n <VListChildren items={ props.items }>\n {{\n default: slots.default,\n item: slots.item,\n externalHeader: slots.header,\n }}\n </VListChildren>\n </props.tag>\n )\n })\n\n return {\n open,\n select,\n activate,\n }\n },\n})\n\nexport type VList = InstanceType<typeof VList>\n","import { createSimpleFunctional } from '@/util'\n\nexport const VListImg = createSimpleFunctional('v-list-img')\n","// Composables\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VListItemMedia = defineComponent({\n name: 'VListItemMedia',\n\n props: {\n left: Boolean,\n right: Boolean,\n\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n return () => {\n return (\n <props.tag\n class={[\n 'v-list-item-media',\n {\n 'v-list-item-media--start': props.left,\n 'v-list-item-media--end': props.right,\n },\n ]}\n v-slots={ slots }\n />\n )\n }\n },\n})\n","import './VLocaleProvider.sass'\n\n// Composables\nimport { provideLocale } from '@/composables/locale'\nimport { provideRtl } from '@/composables/rtl'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VLocaleProvider = defineComponent({\n name: 'VLocaleProvider',\n\n props: {\n locale: String,\n fallbackLocale: String,\n messages: Object,\n rtl: {\n type: Boolean,\n default: undefined,\n },\n },\n\n setup (props, { slots }) {\n const localeInstance = provideLocale(props)\n const { rtlClasses } = provideRtl(props, localeInstance)\n\n return () => (\n <div\n class={[\n 'v-locale-provider',\n rtlClasses.value,\n ]}\n >\n { slots.default?.() }\n </div>\n )\n },\n})\n","// Styles\nimport './VMain.sass'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\nimport { useLayout } from '@/composables/layout'\nimport { useSsrBoot } from '@/composables/ssrBoot'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VMain = defineComponent({\n name: 'VMain',\n\n props: makeTagProps({ tag: 'main' }),\n\n setup (props, { slots }) {\n const { mainStyles } = useLayout()\n const { ssrBootStyles } = useSsrBoot()\n\n return () => (\n <props.tag\n class=\"v-main\"\n style={[\n mainStyles.value,\n ssrBootStyles.value,\n ]}\n >\n <div class=\"v-main__wrap\">\n { slots.default?.() }\n </div>\n </props.tag>\n )\n },\n})\n","// Utilities\nimport { computed, onMounted, ref } from 'vue'\n\n// Composables\nexport function useSsrBoot () {\n const isBooted = ref(false)\n\n onMounted(() => {\n window.requestAnimationFrame(() => {\n isBooted.value = true\n })\n })\n\n const ssrBootStyles = computed(() => !isBooted.value ? ({\n transition: 'none !important',\n }) : undefined)\n\n return { ssrBootStyles }\n}\n","// Styles\nimport './VMenu.sass'\n\n// Components\nimport { VOverlay } from '@/components/VOverlay'\nimport { VDialogTransition } from '@/components/transitions'\n\n// Composables\nimport { makeTransitionProps } from '@/composables/transition'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent, getUid } from '@/util'\n\n// Types\nimport type { OverlaySlots } from '@/components/VOverlay/VOverlay'\n\nexport const VMenu = genericComponent<new () => {\n $slots: OverlaySlots\n}>()({\n name: 'VMenu',\n\n inheritAttrs: false,\n\n props: {\n // TODO\n // closeOnClick: {\n // type: Boolean,\n // default: true,\n // },\n // closeOnContentClick: {\n // type: Boolean,\n // default: true,\n // },\n disableKeys: Boolean,\n modelValue: Boolean,\n id: String,\n\n ...makeTransitionProps({\n transition: { component: VDialogTransition },\n } as const),\n },\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { attrs, slots }) {\n const isActive = useProxiedModel(props, 'modelValue')\n\n const uid = getUid()\n const id = computed(() => props.id || `v-menu-${uid}`)\n\n return () => {\n return (\n <VOverlay\n v-model={ isActive.value }\n class={[\n 'v-menu',\n ]}\n transition={ props.transition }\n absolute\n positionStrategy=\"connected\"\n scrollStrategy=\"reposition\"\n scrim={ false }\n activatorProps={{\n 'aria-haspopup': 'menu',\n 'aria-expanded': String(isActive.value),\n 'aria-owns': id.value,\n }}\n { ...attrs }\n v-slots={{\n default: slots.default,\n activator: slots.activator,\n }}\n />\n )\n }\n },\n})\n\nexport type VMenu = InstanceType<typeof VMenu>\n","import { CircularBuffer } from '@/util'\n\nconst HORIZON = 100 // ms\nconst HISTORY = 20 // number of samples to keep\n\nexport interface Sample {\n t: number\n d: number\n}\n\n/** @see https://android.googlesource.com/platform/frameworks/native/+/master/libs/input/VelocityTracker.cpp */\nfunction kineticEnergyToVelocity (work: number) {\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: Sample[]) {\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}\n\nexport function useVelocity () {\n const touches: Record<number, CircularBuffer<[number, Touch]> | undefined> = {}\n\n function addMovement (e: TouchEvent) {\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\n function endTouch (e: TouchEvent) {\n Array.from(e.changedTouches).forEach(touch => {\n delete touches[touch.identifier]\n })\n }\n\n function getVelocity (id: number) {\n const samples = touches[id]?.values().reverse()\n\n if (!samples) {\n throw new Error(`No samples for touch id ${id}`)\n }\n\n const newest = samples[0]\n const x: Sample[] = []\n const y: Sample[] = []\n for (const val of samples) {\n if (newest[0] - val[0] > HORIZON) break\n\n x.push({ t: val[0], d: val[1].clientX })\n y.push({ t: val[0], d: val[1].clientY })\n }\n\n return {\n x: calculateImpulseVelocity(x),\n y: calculateImpulseVelocity(y),\n get direction () {\n const { x, y } = this\n const [absX, absY] = [Math.abs(x), Math.abs(y)]\n\n return absX > absY && x >= 0 ? 'right'\n : absX > absY && x <= 0 ? 'left'\n : absY > absX && y >= 0 ? 'down'\n : absY > absX && y <= 0 ? 'up'\n : oops()\n },\n }\n }\n\n return { addMovement, endTouch, getVelocity }\n}\n\nfunction oops (): never {\n throw new Error()\n}\n","import { useVelocity } from '@/composables/touch'\nimport { computed, onBeforeUnmount, onMounted, ref } from 'vue'\nimport type { Ref } from 'vue'\n\nexport function useTouch ({ isActive, isTemporary, width, touchless, position }: {\n isActive: Ref<boolean>\n isTemporary: Ref<boolean>\n width: Ref<number>\n touchless: Ref<boolean>\n position: Ref<'left' | 'right' | 'bottom'>\n}) {\n onMounted(() => {\n window.addEventListener('touchstart', onTouchstart, { passive: true })\n window.addEventListener('touchmove', onTouchmove, { passive: false })\n window.addEventListener('touchend', onTouchend, { passive: true })\n })\n\n onBeforeUnmount(() => {\n window.removeEventListener('touchstart', onTouchstart)\n window.removeEventListener('touchmove', onTouchmove)\n window.removeEventListener('touchend', onTouchend)\n })\n\n const isHorizontal = computed(() => position.value !== 'bottom')\n\n const { addMovement, endTouch, getVelocity } = useVelocity()\n let maybeDragging = false\n const isDragging = ref(false)\n const dragProgress = ref(0)\n const offset = ref(0)\n let start: [number, number] | undefined\n\n function getOffset (pos: number, active: boolean): number {\n return (\n position.value === 'left' ? pos\n : position.value === 'right' ? document.documentElement.clientWidth - pos\n : position.value === 'bottom' ? document.documentElement.clientHeight - pos\n : oops()\n ) - (active ? width.value : 0)\n }\n\n function getProgress (pos: number, limit = true): number {\n const progress = (\n position.value === 'left' ? (pos - offset.value) / width.value\n : position.value === 'right' ? (document.documentElement.clientWidth - pos - offset.value) / width.value\n : position.value === 'bottom' ? (document.documentElement.clientHeight - pos - offset.value) / width.value\n : oops()\n )\n return limit ? Math.max(0, Math.min(1, progress)) : progress\n }\n\n function onTouchstart (e: TouchEvent) {\n if (touchless.value) return\n\n const touchX = e.changedTouches[0].clientX\n const touchY = e.changedTouches[0].clientY\n\n const touchZone = 25\n const inTouchZone: boolean =\n position.value === 'left' ? touchX < touchZone\n : position.value === 'right' ? touchX > document.documentElement.clientWidth - touchZone\n : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - touchZone\n : oops()\n\n const inElement: boolean = isActive.value && (\n position.value === 'left' ? touchX < width.value\n : position.value === 'right' ? touchX > document.documentElement.clientWidth - width.value\n : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - width.value\n : oops()\n )\n\n if (\n inTouchZone ||\n inElement ||\n (isActive.value && isTemporary.value)\n ) {\n maybeDragging = true\n start = [touchX, touchY]\n\n offset.value = getOffset(isHorizontal.value ? touchX : touchY, isActive.value)\n dragProgress.value = getProgress(isHorizontal.value ? touchX : touchY)\n\n endTouch(e)\n addMovement(e)\n }\n }\n\n function onTouchmove (e: TouchEvent) {\n const touchX = e.changedTouches[0].clientX\n const touchY = e.changedTouches[0].clientY\n\n if (maybeDragging) {\n if (!e.cancelable) {\n maybeDragging = false\n return\n }\n\n const dx = Math.abs(touchX - start![0])\n const dy = Math.abs(touchY - start![1])\n\n const thresholdMet = isHorizontal.value\n ? dx > dy && dx > 3\n : dy > dx && dy > 3\n\n if (thresholdMet) {\n isDragging.value = true\n maybeDragging = false\n } else if ((isHorizontal.value ? dy : dx) > 3) {\n maybeDragging = false\n }\n }\n\n if (!isDragging.value) return\n\n e.preventDefault()\n addMovement(e)\n\n const progress = getProgress(isHorizontal.value ? touchX : touchY, false)\n dragProgress.value = Math.max(0, Math.min(1, progress))\n\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\n function onTouchend (e: TouchEvent) {\n maybeDragging = false\n\n if (!isDragging.value) return\n\n addMovement(e)\n\n isDragging.value = false\n\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\n ? vx > vy && vx > 400\n : vy > vx && vy > 3\n\n if (thresholdMet) {\n isActive.value = velocity.direction === ({\n left: 'right',\n right: 'left',\n bottom: 'up',\n }[position.value] || oops())\n } else {\n isActive.value = dragProgress.value > 0.5\n }\n }\n\n const dragStyles = computed(() => {\n return isDragging.value ? {\n transform:\n position.value === 'left' ? `translateX(calc(-100% + ${dragProgress.value * width.value}px))`\n : position.value === 'right' ? `translateX(calc(100% - ${dragProgress.value * width.value}px))`\n : position.value === 'bottom' ? `translateY(calc(100% - ${dragProgress.value * width.value}px))`\n : oops(),\n transition: 'none',\n } : undefined\n })\n\n return {\n isDragging,\n dragProgress,\n dragStyles,\n }\n}\n\nfunction oops (): never {\n throw new Error()\n}\n","// Styles\nimport './VNavigationDrawer.sass'\n\n// Composables\nimport { useTouch } from './touch'\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeLayoutItemProps, useLayoutItem } from '@/composables/layout'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { useDisplay } from '@/composables/display'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useBackgroundColor } from '@/composables/color'\n\n// Utilities\nimport { computed, onBeforeMount, ref, toRef, Transition, watch } from 'vue'\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const VNavigationDrawer = defineComponent({\n name: 'VNavigationDrawer',\n\n props: {\n color: String,\n disableResizeWatcher: Boolean,\n expandOnHover: Boolean,\n floating: Boolean,\n modelValue: {\n type: Boolean,\n default: null,\n },\n permanent: Boolean,\n rail: Boolean,\n railWidth: {\n type: [Number, String],\n default: 72,\n },\n image: String,\n temporary: Boolean,\n touchless: Boolean,\n width: {\n type: [Number, String],\n default: 256,\n },\n position: {\n type: String as PropType<'left' | 'right' | 'bottom'>,\n default: 'left',\n validator: (value: any) => ['left', 'right', 'bottom'].includes(value),\n },\n\n ...makeBorderProps(),\n ...makeElevationProps(),\n ...makeLayoutItemProps(),\n ...makeRoundedProps(),\n ...makeTagProps({ tag: 'nav' }),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:modelValue': (val: boolean) => true,\n },\n\n setup (props, { attrs, slots }) {\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'color'))\n const { elevationClasses } = useElevation(props)\n const { mobile } = useDisplay()\n const { roundedClasses } = useRounded(props)\n\n const isActive = useProxiedModel(props, 'modelValue')\n const isHovering = ref(false)\n const width = computed(() => {\n return (props.rail && props.expandOnHover && isHovering.value)\n ? Number(props.width)\n : Number(props.rail ? props.railWidth : props.width)\n })\n const isTemporary = computed(() => !props.permanent && (mobile.value || props.temporary))\n\n if (!props.disableResizeWatcher) {\n watch(mobile, val => !props.permanent && (isActive.value = !val))\n }\n\n watch(props, val => {\n if (val.permanent) isActive.value = true\n })\n\n onBeforeMount(() => {\n if (props.modelValue != null) return\n\n isActive.value = props.permanent || !mobile.value\n })\n\n const rootEl = ref<HTMLElement>()\n\n const { isDragging, dragProgress, dragStyles } = useTouch({\n isActive,\n isTemporary,\n width,\n touchless: toRef(props, 'touchless'),\n position: toRef(props, 'position'),\n })\n\n const layoutSize = computed(() => {\n const size = isTemporary.value ? 0\n : props.rail && props.expandOnHover ? Number(props.railWidth)\n : width.value\n\n return isDragging.value ? size * dragProgress.value : size\n })\n const layoutStyles = useLayoutItem(\n props.name,\n computed(() => parseInt(props.priority, 10)),\n toRef(props, 'position'),\n layoutSize,\n width,\n computed(() => isActive.value || isDragging.value),\n computed(() => isDragging.value)\n )\n\n return () => {\n const hasImage = (slots.image || props.image)\n\n return (\n <>\n <props.tag\n ref={ rootEl }\n onMouseenter={ () => (isHovering.value = true) }\n onMouseleave={ () => (isHovering.value = false) }\n class={[\n 'v-navigation-drawer',\n {\n 'v-navigation-drawer--bottom': props.position === 'bottom',\n 'v-navigation-drawer--end': props.position === 'right',\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--start': props.position === 'left',\n 'v-navigation-drawer--temporary': isTemporary.value,\n 'v-navigation-drawer--absolute': props.absolute,\n },\n themeClasses.value,\n backgroundColorClasses.value,\n borderClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n layoutStyles.value,\n dragStyles.value,\n ]}\n { ...attrs }\n >\n { hasImage && (\n <div class=\"v-navigation-drawer__img\">\n { slots.image\n ? slots.image?.({ image: props.image })\n : (<img src={ props.image } alt=\"\" />)\n }\n </div>\n )}\n\n { slots.prepend && (\n <div class=\"v-navigation-drawer__prepend\">\n { slots.prepend?.() }\n </div>\n )}\n\n <div class=\"v-navigation-drawer__content\">\n { slots.default?.() }\n </div>\n\n { slots.append && (\n <div class=\"v-navigation-drawer__append\">\n { slots.append?.() }\n </div>\n )}\n </props.tag>\n\n <Transition name=\"fade-transition\">\n { isTemporary.value && (isDragging.value || isActive.value) && (\n <div\n class=\"v-navigation-drawer__scrim\"\n style={isDragging.value ? {\n opacity: dragProgress.value * 0.2,\n transition: 'none',\n } : undefined}\n onClick={ () => isActive.value = false }\n />\n )}\n </Transition>\n </>\n )\n }\n },\n})\n\nexport type VNavigationDrawer = InstanceType<typeof VNavigationDrawer>\n","// Composables\nimport { useHydration } from '@/composables/hydration'\n\n// Utilities\nimport { defineComponent } from '@/util'\nimport { ref } from 'vue'\n\nexport const VNoSsr = defineComponent({\n name: 'VNoSsr',\n\n setup (_, { slots }) {\n const show = ref(false)\n\n useHydration(() => (show.value = true))\n\n return () => show.value && slots.default?.()\n },\n\n})\n","// Utilities\nimport { getCurrentInstance, IN_BROWSER } from '@/util'\nimport { onMounted } from 'vue'\n\nexport function useHydration (callback: () => void) {\n if (!IN_BROWSER) return\n\n const vm = getCurrentInstance('useHydration')\n const rootEl = vm?.root?.appContext?.app?._container\n\n return rootEl?.__vue_app__ ? callback() : onMounted(callback)\n}\n","import './VPagination.sass'\n\n// Components\nimport { VBtn } from '../VBtn'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\nimport { useLocale } from '@/composables/locale'\nimport { useRtl } from '@/composables/rtl'\nimport { makeElevationProps } from '@/composables/elevation'\nimport { makeDensityProps } from '@/composables/density'\nimport { makeRoundedProps } from '@/composables/rounded'\nimport { makeSizeProps } from '@/composables/size'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeVariantProps } from '@/composables/variant'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { makeBorderProps } from '@/composables/border'\nimport { useRefs } from '@/composables/refs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { provideDefaults } from '@/composables/defaults'\n\n// Utilities\nimport { computed, nextTick, ref } from 'vue'\nimport { createRange, defineComponent, keyValues } from '@/util'\n\n// Types\nimport type { ComponentPublicInstance } from 'vue'\n\nexport const VPagination = defineComponent({\n name: 'VPagination',\n\n props: {\n start: {\n type: [Number, String],\n default: 1,\n },\n modelValue: {\n type: Number,\n default: (props: any) => props.start,\n },\n disabled: Boolean,\n length: {\n type: [Number, String],\n default: 1,\n validator: (val: number) => val % 1 === 0,\n },\n totalVisible: [Number, String],\n firstIcon: {\n type: String,\n default: '$first',\n },\n prevIcon: {\n type: String,\n default: '$prev',\n },\n nextIcon: {\n type: String,\n default: '$next',\n },\n lastIcon: {\n type: String,\n default: '$last',\n },\n ariaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.root',\n },\n pageAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.page',\n },\n currentPageAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.currentPage',\n },\n firstAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.first',\n },\n previousAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.previous',\n },\n nextAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.next',\n },\n lastAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.last',\n },\n ellipsis: {\n type: String,\n default: '...',\n },\n showFirstLastPage: Boolean,\n\n ...makeTagProps({ tag: 'nav' }),\n ...makeElevationProps(),\n ...makeDensityProps(),\n ...makeRoundedProps(),\n ...makeSizeProps(),\n ...makeBorderProps(),\n ...makeThemeProps(),\n ...makeVariantProps({ variant: 'text' } as const),\n },\n\n emits: {\n 'update:modelValue': (value: number) => true,\n first: (value: number) => true,\n prev: (value: number) => true,\n next: (value: number) => true,\n last: (value: number) => true,\n },\n\n setup (props, { slots, emit }) {\n const page = useProxiedModel(props, 'modelValue')\n const { t, n } = useLocale()\n const { isRtl } = useRtl()\n const { themeClasses } = provideTheme(props)\n const maxButtons = ref(-1)\n\n provideDefaults(undefined, { scoped: true })\n\n const { resizeRef } = useResizeObserver((entries: ResizeObserverEntry[]) => {\n if (!entries.length) return\n\n const { target, contentRect } = entries[0]\n\n const firstItem = target.querySelector('.v-pagination__list > *')\n\n if (!firstItem) return\n\n const totalWidth = contentRect.width\n const itemWidth = firstItem.getBoundingClientRect().width + 10\n\n maxButtons.value = Math.max(0, Math.floor((totalWidth - 96) / itemWidth))\n })\n\n const length = computed(() => parseInt(props.length, 10))\n const start = computed(() => parseInt(props.start, 10))\n\n const totalVisible = computed(() => {\n if (props.totalVisible) return Math.min(parseInt(props.totalVisible ?? '', 10), length.value)\n else if (maxButtons.value >= 0) return maxButtons.value\n return length.value\n })\n\n const range = computed(() => {\n if (length.value <= 0) return []\n\n if (totalVisible.value <= 3) {\n return [Math.min(Math.max(start.value, page.value), start.value + length.value)]\n }\n\n if (props.length <= totalVisible.value) {\n return createRange(length.value, start.value)\n }\n\n const middle = Math.ceil(totalVisible.value / 2)\n const left = middle\n const right = length.value - middle\n\n if (page.value < left) {\n return [...createRange(Math.max(1, totalVisible.value - 2), start.value), props.ellipsis, length.value]\n } else if (page.value > right) {\n const rangeLength = totalVisible.value - 2\n const rangeStart = length.value - rangeLength + start.value\n return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart)]\n } else {\n const rangeLength = Math.max(1, totalVisible.value - 4)\n const rangeStart = rangeLength === 1 ? page.value : page.value - Math.ceil(rangeLength / 2) + start.value\n return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart), props.ellipsis, length.value]\n }\n })\n\n // TODO: 'first' | 'prev' | 'next' | 'last' does not work here?\n function setValue (e: Event, value: number, event?: any) {\n e.preventDefault()\n page.value = value\n event && emit(event, value)\n }\n\n const { refs, updateRef } = useRefs<ComponentPublicInstance>()\n\n const items = computed(() => {\n const sharedProps = {\n density: props.density,\n rounded: props.rounded,\n size: props.size,\n }\n\n return range.value.map((item, index) => {\n const ref = (e: any) => updateRef(e, index)\n\n if (typeof item === 'string') {\n return {\n isActive: false,\n page: item,\n props: {\n ...sharedProps,\n ref,\n ellipsis: true,\n icon: true,\n disabled: true,\n variant: props.variant,\n border: props.border,\n },\n }\n } else {\n const isActive = item === page.value\n return {\n isActive,\n page: n(item),\n props: {\n ...sharedProps,\n ref,\n ellipsis: false,\n icon: true,\n disabled: !!props.disabled || props.length < 2,\n elevation: props.elevation,\n variant: props.variant,\n border: props.border,\n color: isActive ? props.color : undefined,\n ariaCurrent: isActive,\n ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, index + 1),\n onClick: (e: Event) => setValue(e, item),\n },\n }\n }\n })\n })\n\n const controls = computed(() => {\n const sharedProps = {\n color: undefined,\n density: props.density,\n rounded: props.rounded,\n size: props.size,\n variant: props.variant,\n border: props.border,\n }\n\n const prevDisabled = !!props.disabled || page.value <= start.value\n const nextDisabled = !!props.disabled || page.value >= start.value + length.value - 1\n\n return {\n first: props.showFirstLastPage ? {\n ...sharedProps,\n icon: isRtl.value ? props.lastIcon : props.firstIcon,\n onClick: (e: Event) => setValue(e, start.value, 'first'),\n disabled: prevDisabled,\n ariaLabel: t(props.firstAriaLabel),\n ariaDisabled: prevDisabled,\n } : undefined,\n prev: {\n ...sharedProps,\n icon: isRtl.value ? props.nextIcon : props.prevIcon,\n onClick: (e: Event) => setValue(e, page.value - 1, 'prev'),\n disabled: prevDisabled,\n ariaLabel: t(props.previousAriaLabel),\n ariaDisabled: prevDisabled,\n },\n next: {\n ...sharedProps,\n icon: isRtl.value ? props.prevIcon : props.nextIcon,\n onClick: (e: Event) => setValue(e, page.value + 1, 'next'),\n disabled: nextDisabled,\n ariaLabel: t(props.nextAriaLabel),\n ariaDisabled: nextDisabled,\n },\n last: props.showFirstLastPage ? {\n ...sharedProps,\n icon: isRtl.value ? props.firstIcon : props.lastIcon,\n onClick: (e: Event) => setValue(e, start.value + length.value - 1, 'last'),\n disabled: nextDisabled,\n ariaLabel: t(props.lastAriaLabel),\n ariaDisabled: nextDisabled,\n } : undefined,\n }\n })\n\n function updateFocus () {\n const currentIndex = page.value - start.value\n refs.value[currentIndex]?.$el.focus()\n }\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key === keyValues.left && !props.disabled && page.value > props.start) {\n page.value = page.value - 1\n nextTick(updateFocus)\n } else if (e.key === keyValues.right && !props.disabled && page.value < start.value + length.value - 1) {\n page.value = page.value + 1\n nextTick(updateFocus)\n }\n }\n\n return () => (\n <props.tag\n ref={ resizeRef }\n class={[\n 'v-pagination',\n themeClasses.value,\n ]}\n role=\"navigation\"\n aria-label={ t(props.ariaLabel) }\n onKeydown={ onKeydown }\n data-test=\"v-pagination-root\"\n >\n <ul class=\"v-pagination__list\">\n { props.showFirstLastPage && (\n <li class=\"v-pagination__first\" data-test=\"v-pagination-first\">\n { slots.first ? slots.first(controls.value.first) : (\n <VBtn {...controls.value.first} />\n ) }\n </li>\n ) }\n\n <li class=\"v-pagination__prev\" data-test=\"v-pagination-prev\">\n { slots.prev ? slots.prev(controls.value.prev) : (\n <VBtn {...controls.value.prev} />\n ) }\n </li>\n\n { items.value.map((item, index) => (\n <li\n key={ `${index}_${item.page}` }\n class={[\n 'v-pagination__item',\n {\n 'v-pagination__item--is-active': item.isActive,\n },\n ]}\n data-test=\"v-pagination-item\"\n >\n { slots.item ? slots.item(item) : (\n <VBtn {...item.props}>{ item.page }</VBtn>\n ) }\n </li>\n )) }\n\n <li class=\"v-pagination__next\" data-test=\"v-pagination-next\">\n { slots.next ? slots.next(controls.value.next) : (\n <VBtn {...controls.value.next} />\n ) }\n </li>\n\n { props.showFirstLastPage && (\n <li class=\"v-pagination__last\" data-test=\"v-pagination-last\">\n { slots.last ? slots.last(controls.value.last) : (\n <VBtn {...controls.value.last} />\n ) }\n </li>\n ) }\n </ul>\n </props.tag>\n )\n },\n})\n\nexport type VPagination = InstanceType<typeof VPagination>\n","// Utilities\nimport { onBeforeUnmount, readonly, ref, watch } from 'vue'\nimport type { DeepReadonly, Ref } from 'vue'\n\ninterface ResizeState {\n resizeRef: Ref<Element | undefined>\n contentRect: DeepReadonly<Ref<DOMRectReadOnly | undefined>>\n borderBoxSize: DeepReadonly<Ref<ResizeObserverSize | undefined>>\n contentBoxSize: DeepReadonly<Ref<ResizeObserverSize | undefined>>\n}\n\nexport function useResizeObserver (callback?: ResizeObserverCallback): ResizeState {\n const resizeRef = ref<Element>()\n const contentRect = ref<DOMRectReadOnly>()\n const contentBoxSize = ref<ResizeObserverSize>()\n const borderBoxSize = ref<ResizeObserverSize>()\n\n const observer = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n callback?.(entries, observer)\n\n if (!entries.length) return\n\n contentRect.value = entries[0].contentRect\n contentBoxSize.value = entries[0].contentBoxSize[0]\n borderBoxSize.value = entries[0].borderBoxSize[0]\n })\n\n onBeforeUnmount(() => {\n observer.disconnect()\n })\n\n watch(resizeRef, (newValue, oldValue) => {\n if (oldValue) {\n observer.unobserve(oldValue)\n contentRect.value = undefined\n contentBoxSize.value = undefined\n borderBoxSize.value = undefined\n }\n\n if (newValue) observer.observe(newValue)\n }, {\n flush: 'post',\n })\n\n return {\n resizeRef,\n contentRect: readonly(contentRect),\n contentBoxSize: readonly(contentBoxSize),\n borderBoxSize: readonly(borderBoxSize),\n }\n}\n","// Imports\nimport { onBeforeUpdate, ref } from 'vue'\nimport type { Ref } from 'vue'\n\nexport function useRefs <T extends {}> () {\n const refs = ref<(T | undefined)[]>([]) as Ref<(T | undefined)[]>\n\n onBeforeUpdate(() => (refs.value = []))\n\n function updateRef (e: any, i: number) {\n refs.value[i] = e\n }\n\n return { refs, updateRef }\n}\n","// Styles\nimport './VParallax.sass'\n\n// Components\nimport { VImg } from '@/components/VImg'\n\n// Composables\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\n\n// Utilities\nimport { onBeforeUnmount, ref, watch, watchEffect } from 'vue'\nimport { defineComponent, getScrollParent } from '@/util'\n\nfunction floor (val: number) {\n return Math.floor(Math.abs(val)) * Math.sign(val)\n}\n\nexport const VParallax = defineComponent({\n name: 'VParallax',\n\n props: {\n scale: {\n type: [Number, String],\n default: 1.3,\n },\n },\n\n setup (props, { attrs, slots }) {\n const root = ref<VImg>()\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n\n watchEffect(() => {\n intersectionRef.value = root.value?.$el\n })\n\n let scrollParent: Element\n watch(isIntersecting, val => {\n if (val) {\n scrollParent = getScrollParent(intersectionRef.value)\n scrollParent = scrollParent === document.scrollingElement ? document as any : scrollParent\n scrollParent.addEventListener('scroll', onScroll, { passive: true })\n onScroll()\n } else {\n scrollParent.removeEventListener('scroll', onScroll)\n }\n })\n\n onBeforeUnmount(() => {\n scrollParent?.removeEventListener('scroll', onScroll)\n })\n\n let frame = -1\n function onScroll () {\n if (!isIntersecting.value) return\n\n cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => {\n const el: HTMLElement | null = (root.value?.$el as Element).querySelector('.v-img__img')\n if (!el) return\n\n const rect = intersectionRef.value!.getBoundingClientRect()\n const scrollHeight = scrollParent.clientHeight ?? window.innerHeight\n const scrollPos = scrollParent.scrollTop ?? window.scrollY\n const top = rect.top + scrollPos\n const progress = (scrollPos + scrollHeight - top) / (rect.height + scrollHeight)\n const translate = floor((rect.height * +props.scale - rect.height) * (-progress + 0.5))\n\n el.style.setProperty('transform', `translateY(${translate}px) scale(${props.scale})`)\n })\n }\n\n return () => (\n <VImg\n class={[\n 'v-parallax',\n { 'v-parallax--active': isIntersecting.value },\n ]}\n ref={ root }\n cover\n onLoadstart={ onScroll }\n onLoad={ onScroll }\n v-slots={ slots }\n />\n )\n },\n})\n\nexport type VParallax = InstanceType<typeof VParallax>\n","// Styles\nimport './VProgressCircular.sass'\n\n// Composables\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { convertToUnit, defineComponent } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const VProgressCircular = defineComponent({\n name: 'VProgressCircular',\n\n props: {\n bgColor: String,\n color: String,\n indeterminate: [Boolean, String] as PropType<boolean | 'disable-shrink'>,\n modelValue: {\n type: [Number, String],\n default: 0,\n },\n rotate: {\n type: [Number, String],\n default: 0,\n },\n width: {\n type: [Number, String],\n default: 4,\n },\n\n ...makeSizeProps(),\n ...makeTagProps({ tag: 'div' }),\n ...makeThemeProps(),\n },\n\n setup (props, { slots }) {\n const MAGIC_RADIUS_CONSTANT = 20\n const CIRCUMFERENCE = 2 * Math.PI * MAGIC_RADIUS_CONSTANT\n\n const { themeClasses } = provideTheme(props)\n const { sizeClasses, sizeStyles } = useSize(props)\n const { textColorClasses, textColorStyles } = useTextColor(toRef(props, 'color'))\n const { textColorClasses: underlayColorClasses, textColorStyles: underlayColorStyles } = useTextColor(toRef(props, 'bgColor'))\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n\n const normalizedValue = computed(() => Math.max(0, Math.min(100, parseFloat(props.modelValue))))\n const width = computed(() => Number(props.width))\n const size = computed(() => {\n // Get size from element if size prop value is small, large etc\n return sizeStyles.value ? Number(props.size) : intersectionRef.value\n ? intersectionRef.value.getBoundingClientRect().width : Math.max(width.value, 32)\n })\n const diameter = computed(() => (MAGIC_RADIUS_CONSTANT / (1 - width.value / size.value)) * 2)\n const strokeWidth = computed(() => width.value / size.value * diameter.value)\n const strokeDashOffset = computed(() => convertToUnit(((100 - normalizedValue.value) / 100) * CIRCUMFERENCE))\n\n return () => (\n <props.tag\n ref={ intersectionRef }\n class={[\n 'v-progress-circular',\n {\n 'v-progress-circular--indeterminate': !!props.indeterminate,\n 'v-progress-circular--visible': isIntersecting.value,\n 'v-progress-circular--disable-shrink': props.indeterminate === 'disable-shrink',\n },\n themeClasses.value,\n sizeClasses.value,\n textColorClasses.value,\n ]}\n style={[\n sizeStyles.value,\n textColorStyles.value,\n ]}\n role=\"progressbar\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-valuenow={ props.indeterminate ? undefined : normalizedValue.value }\n >\n <svg\n style={{\n transform: `rotate(calc(-90deg + ${Number(props.rotate)}deg))`,\n }}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={ `0 0 ${diameter.value} ${diameter.value}` }\n >\n <circle\n class={[\n 'v-progress-circular__underlay',\n underlayColorClasses.value,\n ]}\n style={ underlayColorStyles.value }\n fill=\"transparent\"\n cx=\"50%\"\n cy=\"50%\"\n r={ MAGIC_RADIUS_CONSTANT }\n stroke-width={ strokeWidth.value }\n stroke-dasharray={ CIRCUMFERENCE }\n stroke-dashoffset={ 0 }\n />\n\n <circle\n class=\"v-progress-circular__overlay\"\n fill=\"transparent\"\n cx=\"50%\"\n cy=\"50%\"\n r={ MAGIC_RADIUS_CONSTANT }\n stroke-width={ strokeWidth.value }\n stroke-dasharray={ CIRCUMFERENCE }\n stroke-dashoffset={ strokeDashOffset.value }\n />\n </svg>\n { slots.default && (\n <div class=\"v-progress-circular__content\">\n { slots.default({ value: normalizedValue.value }) }\n </div>\n ) }\n </props.tag>\n )\n },\n})\n","// Components\nimport { VSelectionControl } from '@/components/VSelectionControl'\n\n// Utility\nimport { defineComponent } from 'vue'\nimport { useRender } from '@/util'\n\nexport const VRadio = defineComponent({\n name: 'VRadio',\n\n props: {\n falseIcon: {\n type: String,\n default: '$radioOff',\n },\n trueIcon: {\n type: String,\n default: '$radioOn',\n },\n },\n\n setup (props, { slots }) {\n useRender(() => (\n <VSelectionControl\n class=\"v-radio\"\n trueIcon={ props.trueIcon }\n falseIcon={ props.falseIcon }\n type=\"radio\"\n v-slots={ slots }\n />\n ))\n\n return {}\n },\n})\n\nexport type VRadio = InstanceType<typeof VRadio>\n","// Styles\nimport './VRadioGroup.sass'\n\n// Components\nimport { filterInputProps, makeVInputProps, VInput } from '@/components/VInput/VInput'\nimport { VLabel } from '@/components/VLabel'\nimport { VSelectionControlGroup } from '@/components/VSelectionControlGroup'\nimport { filterControlProps, makeSelectionControlProps } from '@/components/VSelectionControl/VSelectionControl'\n\n// Utility\nimport { computed, defineComponent } from 'vue'\nimport { filterInputAttrs, getUid, useRender } from '@/util'\n\nexport const VRadioGroup = defineComponent({\n name: 'VRadioGroup',\n\n inheritAttrs: false,\n\n props: {\n height: {\n type: [Number, String],\n default: 'auto',\n },\n\n ...makeVInputProps(),\n ...makeSelectionControlProps(),\n\n trueIcon: {\n type: String,\n default: '$radioOn',\n },\n falseIcon: {\n type: String,\n default: '$radioOff',\n },\n type: {\n type: String,\n default: 'radio',\n },\n },\n\n setup (props, { attrs, slots }) {\n const uid = getUid()\n const id = computed(() => props.id || `radio-group-${uid}`)\n\n useRender(() => {\n const [inputAttrs, controlAttrs] = filterInputAttrs(attrs)\n const [inputProps, _1] = filterInputProps(props)\n const [controlProps, _2] = filterControlProps(props)\n const label = slots.label\n ? slots.label({\n label: props.label,\n props: { for: id.value },\n })\n : props.label\n\n return (\n <VInput\n class=\"v-radio-group\"\n { ...inputAttrs }\n { ...inputProps }\n >\n {{\n ...slots,\n default: ({\n isDisabled,\n isReadonly,\n isValid,\n }) => (\n <>\n { label && (\n <VLabel\n disabled={ isDisabled.value }\n error={ isValid.value === false }\n for={ id.value }\n >\n { label }\n </VLabel>\n ) }\n\n <VSelectionControlGroup\n { ...controlProps }\n id={ id.value }\n trueIcon={ props.trueIcon }\n falseIcon={ props.falseIcon }\n type={ props.type }\n disabled={ isDisabled.value }\n readonly={ isReadonly.value }\n { ...controlAttrs }\n v-slots={ slots }\n />\n </>\n ),\n }}\n </VInput>\n )\n })\n\n return {}\n },\n})\n","/* eslint-disable max-statements */\n// Composables\nimport { useRtl } from '@/composables/rtl'\nimport { makeRoundedProps } from '@/composables/rounded'\nimport { makeElevationProps } from '@/composables/elevation'\n\n// Utilities\nimport { computed, provide, ref, toRef } from 'vue'\nimport { clamp, createRange, propsFactory } from '@/util'\n\n// Types\nimport type { ExtractPropTypes, InjectionKey, PropType, Ref } from 'vue'\nimport type { VSliderTrack } from './VSliderTrack'\n\ntype Tick = {\n value: number\n position: number\n label?: string\n}\n\ntype SliderProvide = {\n color: Ref<string | undefined>\n decimals: Ref<number>\n direction: Ref<'vertical' | 'horizontal'>\n disabled: Ref<boolean | undefined>\n elevation: Ref<number | string | undefined>\n label: Ref<string | undefined>\n min: Ref<number>\n max: Ref<number>\n mousePressed: Ref<boolean>\n numTicks: Ref<number>\n onSliderMousedown: (e: MouseEvent) => void\n onSliderTouchstart: (e: TouchEvent) => void\n parseMouseMove: (e: MouseEvent | TouchEvent) => number\n position: (val: number) => number\n readonly: Ref<boolean | undefined>\n rounded: Ref<boolean | number | string | undefined>\n roundValue: (value: number) => number\n thumbLabel: Ref<boolean | string | undefined>\n showTicks: Ref<boolean | 'always'>\n startOffset: Ref<number>\n step: Ref<number>\n thumbSize: Ref<number>\n thumbColor: Ref<string | undefined>\n trackColor: Ref<string | undefined>\n trackFillColor: Ref<string | undefined>\n trackSize: Ref<number>\n ticks: Ref<number[] | Record<string, string> | undefined>\n tickSize: Ref<number>\n trackContainerRef: Ref<VSliderTrack | undefined>\n vertical: Ref<boolean>\n showTickLabels: Ref<boolean | undefined>\n parsedTicks: Ref<Tick[]>\n hasLabels: Ref<boolean>\n isReversed: Ref<boolean>\n horizontalDirection: Ref<'ltr' | 'rtl'>\n}\n\nexport const VSliderSymbol: InjectionKey<SliderProvide> = Symbol.for('vuetify:v-slider')\n\nexport function getOffset (e: MouseEvent | TouchEvent, el: HTMLElement, direction: string) {\n const vertical = direction === 'vertical'\n const rect = el.getBoundingClientRect()\n const touch = 'touches' in e ? e.touches[0] : e\n return vertical\n ? touch.clientY - (rect.top + rect.height / 2)\n : touch.clientX - (rect.left + rect.width / 2)\n}\n\nfunction getPosition (e: MouseEvent | TouchEvent, position: 'clientX' | 'clientY'): number {\n if ('touches' in e && e.touches.length) return e.touches[0][position]\n else if ('changedTouches' in e && e.changedTouches.length) return e.changedTouches[0][position]\n else return (e as MouseEvent)[position]\n}\n\nexport const makeSliderProps = propsFactory({\n disabled: Boolean,\n readonly: Boolean,\n max: {\n type: [Number, String],\n default: 100,\n },\n min: {\n type: [Number, String],\n default: 0,\n },\n step: {\n type: [Number, String],\n default: 0,\n },\n thumbColor: String,\n thumbLabel: {\n type: [Boolean, String] as PropType<boolean | 'always' | undefined>,\n default: undefined,\n validator: (v: any) => typeof v === 'boolean' || v === 'always',\n },\n thumbSize: {\n type: [Number, String],\n default: 20,\n },\n showTicks: {\n type: [Boolean, String] as PropType<boolean | 'always'>,\n default: true,\n validator: (v: any) => typeof v === 'boolean' || v === 'always',\n },\n showTickLabels: {\n type: Boolean,\n default: false,\n },\n ticks: {\n type: [Array, Object] as PropType<number[] | Record<string, string>>,\n },\n tickSize: {\n type: [Number, String],\n default: 2,\n },\n color: String,\n trackColor: String,\n trackFillColor: String,\n trackSize: {\n type: [Number, String],\n default: 4,\n },\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n default: 'horizontal',\n validator: (v: any) => ['vertical', 'horizontal'].includes(v),\n },\n reverse: Boolean,\n label: String,\n\n ...makeRoundedProps(),\n ...makeElevationProps({\n elevation: 2,\n }),\n}, 'slider')\n\ntype SliderProps = ExtractPropTypes<ReturnType<typeof makeSliderProps>>\n\nexport const useSlider = ({\n props,\n handleSliderMouseUp,\n handleMouseMove,\n getActiveThumb,\n}: {\n props: SliderProps\n handleSliderMouseUp: (v: number) => void\n handleMouseMove: (v: number) => void\n getActiveThumb: (e: MouseEvent | TouchEvent) => HTMLElement\n}) => {\n const { isRtl } = useRtl()\n const isReversed = computed(() => isRtl.value !== props.reverse)\n const horizontalDirection = computed(() => {\n let hd: 'ltr' | 'rtl' = isRtl.value ? 'rtl' : 'ltr'\n\n if (props.reverse) {\n hd = hd === 'rtl' ? 'ltr' : 'rtl'\n }\n\n return hd\n })\n const min = computed(() => parseFloat(props.min))\n const max = computed(() => parseFloat(props.max))\n const step = computed(() => props.step > 0 ? parseFloat(props.step) : 0)\n const decimals = computed(() => {\n const trimmedStep = step.value.toString().trim()\n return trimmedStep.includes('.')\n ? (trimmedStep.length - trimmedStep.indexOf('.') - 1)\n : 0\n })\n\n const thumbSize = computed(() => parseInt(props.thumbSize, 10))\n const tickSize = computed(() => parseInt(props.tickSize, 10))\n const trackSize = computed(() => parseInt(props.trackSize, 10))\n const numTicks = computed(() => (max.value - min.value) / step.value)\n const disabled = toRef(props, 'disabled')\n const vertical = computed(() => props.direction === 'vertical')\n\n const thumbColor = computed(() => props.disabled ? undefined : props.thumbColor ?? props.color)\n const trackColor = computed(() => props.disabled ? undefined : props.trackColor ?? props.color)\n const trackFillColor = computed(() => props.disabled ? undefined : props.trackFillColor ?? props.color)\n\n const mousePressed = ref(false)\n\n const startOffset = ref(0)\n const trackContainerRef = ref<VSliderTrack | undefined>()\n\n function roundValue (value: number) {\n if (step.value <= 0) return value\n\n const clamped = clamp(value, min.value, max.value)\n const offset = min.value % step.value\n const newValue = Math.round((clamped - offset) / step.value) * step.value + offset\n\n return parseFloat(Math.min(newValue, max.value).toFixed(decimals.value))\n }\n\n function parseMouseMove (e: MouseEvent | TouchEvent): number {\n const vertical = props.direction === 'vertical'\n const start = vertical ? 'top' : 'left'\n const length = vertical ? 'height' : 'width'\n const position = vertical ? 'clientY' : 'clientX'\n\n const {\n [start]: trackStart,\n [length]: trackLength,\n } = trackContainerRef.value?.$el.getBoundingClientRect()\n const clickOffset = getPosition(e, position)\n\n // It is possible for left to be NaN, force to number\n let clickPos = Math.min(Math.max((clickOffset - trackStart - startOffset.value) / trackLength, 0), 1) || 0\n\n if (vertical || isReversed.value) clickPos = 1 - clickPos\n\n return roundValue(min.value + clickPos * (max.value - min.value))\n }\n\n let thumbMoved = false\n\n const handleStop = (e: MouseEvent | TouchEvent) => {\n if (!thumbMoved) {\n startOffset.value = 0\n handleSliderMouseUp(parseMouseMove(e))\n }\n\n mousePressed.value = false\n thumbMoved = false\n startOffset.value = 0\n }\n\n const handleStart = (e: MouseEvent | TouchEvent) => {\n const activeThumb = getActiveThumb(e)\n\n if (!activeThumb) return\n\n activeThumb.focus()\n mousePressed.value = true\n\n if (activeThumb.contains(e.target as Node)) {\n thumbMoved = true\n startOffset.value = getOffset(e, activeThumb, props.direction)\n } else {\n startOffset.value = 0\n handleMouseMove(parseMouseMove(e))\n }\n }\n\n const moveListenerOptions = { passive: true, capture: true }\n\n function onMouseMove (e: MouseEvent | TouchEvent) {\n thumbMoved = true\n handleMouseMove(parseMouseMove(e))\n }\n\n function onSliderMouseUp (e: MouseEvent) {\n e.stopPropagation()\n e.preventDefault()\n\n handleStop(e)\n\n window.removeEventListener('mousemove', onMouseMove, moveListenerOptions)\n window.removeEventListener('mouseup', onSliderMouseUp)\n }\n\n function onSliderTouchend (e: TouchEvent) {\n e.stopPropagation()\n e.preventDefault()\n\n handleStop(e)\n\n window.removeEventListener('touchmove', onMouseMove, moveListenerOptions)\n window.removeEventListener('touchend', onSliderTouchend)\n }\n\n function onSliderTouchstart (e: TouchEvent) {\n handleStart(e)\n\n window.addEventListener('touchmove', onMouseMove, moveListenerOptions)\n window.addEventListener('touchend', onSliderTouchend, { passive: false })\n }\n\n function onSliderMousedown (e: MouseEvent) {\n e.preventDefault()\n\n handleStart(e)\n\n window.addEventListener('mousemove', onMouseMove, moveListenerOptions)\n window.addEventListener('mouseup', onSliderMouseUp, { passive: false })\n }\n\n const position = (val: number) => {\n const percentage = (val - min.value) / (max.value - min.value) * 100\n return clamp(isNaN(percentage) ? 0 : percentage, 0, 100)\n }\n\n const parsedTicks = computed<Tick[]>(() => {\n if (!props.ticks) {\n return numTicks.value !== Infinity ? createRange(numTicks.value + 1).map(t => {\n const value = min.value + (t * step.value)\n return {\n value,\n position: position(value),\n }\n }) : []\n }\n if (Array.isArray(props.ticks)) return props.ticks.map(t => ({ value: t, position: position(t), label: t.toString() }))\n return Object.keys(props.ticks).map(key => ({\n value: parseInt(key, 10),\n position: position(parseInt(key, 10)),\n label: (props.ticks as Record<string, string>)[key],\n }))\n })\n\n const hasLabels = computed(() => parsedTicks.value.some(({ label }) => !!label))\n\n const data: SliderProvide = {\n color: toRef(props, 'color'),\n decimals,\n disabled,\n direction: toRef(props, 'direction'),\n elevation: toRef(props, 'elevation'),\n hasLabels,\n horizontalDirection,\n isReversed,\n label: toRef(props, 'label'),\n min,\n max,\n mousePressed,\n numTicks,\n onSliderMousedown,\n onSliderTouchstart,\n parsedTicks,\n parseMouseMove,\n position,\n readonly: toRef(props, 'readonly'),\n rounded: toRef(props, 'rounded'),\n roundValue,\n showTickLabels: toRef(props, 'showTickLabels'),\n showTicks: toRef(props, 'showTicks'),\n startOffset,\n step,\n thumbSize,\n thumbColor,\n thumbLabel: toRef(props, 'thumbLabel'),\n ticks: toRef(props, 'ticks'),\n tickSize,\n trackColor,\n trackContainerRef,\n trackFillColor,\n trackSize,\n vertical,\n }\n\n provide(VSliderSymbol, data)\n\n return data\n}\n","// Styles\nimport './VSliderThumb.sass'\n\n// Components\nimport { VScaleTransition } from '../transitions'\nimport { VSliderSymbol } from './slider'\nimport { useElevation } from '@/composables/elevation'\n\n// Directives\nimport Ripple from '@/directives/ripple'\n\n// Composables\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { computed, inject } from 'vue'\nimport { convertToUnit, defineComponent, keyValues } from '@/util'\n\nexport const VSliderThumb = defineComponent({\n name: 'VSliderThumb',\n\n directives: { Ripple },\n\n props: {\n focused: Boolean,\n max: {\n type: Number,\n required: true,\n },\n min: {\n type: Number,\n required: true,\n },\n modelValue: {\n type: Number,\n required: true,\n },\n position: {\n type: Number,\n required: true,\n },\n },\n\n emits: {\n 'update:modelValue': (v: number) => true,\n },\n\n setup (props, { slots, emit }) {\n const slider = inject(VSliderSymbol)\n\n if (!slider) throw new Error('[Vuetify] v-slider-thumb must be used inside v-slider or v-range-slider')\n\n const {\n thumbColor,\n step,\n vertical,\n disabled,\n thumbSize,\n thumbLabel,\n direction,\n label,\n readonly,\n elevation,\n isReversed,\n horizontalDirection,\n mousePressed,\n } = slider\n\n const { textColorClasses, textColorStyles } = useTextColor(thumbColor)\n\n const { pageup, pagedown, end, home, left, right, down, up } = keyValues\n const relevantKeys = [pageup, pagedown, end, home, left, right, down, up]\n\n const multipliers = computed(() => {\n if (step.value) return [1, 2, 3]\n else return [1, 5, 10]\n })\n\n function parseKeydown (e: KeyboardEvent, value: number) {\n if (!relevantKeys.includes(e.key)) return\n\n e.preventDefault()\n\n const _step = step.value || 0.1\n const steps = (props.max - props.min) / _step\n if ([left, right, down, up].includes(e.key)) {\n const increase = isReversed.value ? [left, up] : [right, up]\n const direction = increase.includes(e.key) ? 1 : -1\n const multiplier = e.shiftKey ? 2 : (e.ctrlKey ? 1 : 0)\n\n value = value + (direction * _step * multipliers.value[multiplier])\n } else if (e.key === home) {\n value = props.min\n } else if (e.key === end) {\n value = props.max\n } else {\n const direction = e.key === pagedown ? 1 : -1\n value = value - (direction * _step * (steps > 100 ? steps / 10 : 10))\n }\n\n return Math.max(props.min, Math.min(props.max, value))\n }\n\n function onKeydown (e: KeyboardEvent) {\n const newValue = parseKeydown(e, props.modelValue)\n\n newValue != null && emit('update:modelValue', newValue)\n }\n\n return () => {\n const positionPercentage = convertToUnit(vertical.value ? 100 - props.position : props.position, '%')\n const inset = vertical.value ? 'block' : 'inline'\n const { elevationClasses } = useElevation(computed(() => !disabled.value ? elevation.value : undefined))\n\n return (\n <div\n class={[\n 'v-slider-thumb',\n {\n 'v-slider-thumb--focused': props.focused,\n 'v-slider-thumb--pressed': props.focused && mousePressed.value,\n },\n ]}\n style={{\n [`inset-${inset}-start`]: `calc(${positionPercentage} - var(--v-slider-thumb-size) / 2)`,\n '--v-slider-thumb-size': convertToUnit(thumbSize.value),\n direction: !vertical.value ? horizontalDirection.value : undefined,\n }}\n role=\"slider\"\n tabindex={ disabled.value ? -1 : 0 }\n aria-label={ label.value }\n aria-valuemin={ props.min }\n aria-valuemax={ props.max }\n aria-valuenow={ props.modelValue }\n aria-readonly={ readonly.value }\n aria-orientation={ direction.value }\n onKeydown={ onKeydown }\n >\n <div\n class={[\n 'v-slider-thumb__surface',\n textColorClasses.value,\n elevationClasses.value,\n ]}\n style={{\n ...textColorStyles.value,\n }}\n />\n <div\n class={[\n 'v-slider-thumb__ripple',\n textColorClasses.value,\n ]}\n style={ textColorStyles.value }\n v-ripple={[true, null, ['circle', 'center']]}\n />\n <VScaleTransition origin=\"bottom center\">\n <div\n class=\"v-slider-thumb__label-container\"\n v-show={ (thumbLabel.value && props.focused) || thumbLabel.value === 'always' }\n >\n <div\n class={[\n 'v-slider-thumb__label',\n ]}\n >\n <div>\n { slots['thumb-label']?.({ modelValue: props.modelValue }) ?? props.modelValue.toFixed(1) }\n </div>\n </div>\n </div>\n </VScaleTransition>\n </div>\n )\n }\n },\n})\n\nexport type VSliderThumb = InstanceType<typeof VSliderThumb>\n","// Styles\nimport './VSliderTrack.sass'\n\n// Components\nimport { VSliderSymbol } from './slider'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { useRounded } from '@/composables/rounded'\n\n// Utilities\nimport { computed, inject } from 'vue'\nimport { convertToUnit, defineComponent } from '@/util'\n\nexport const VSliderTrack = defineComponent({\n name: 'VSliderTrack',\n\n props: {\n start: {\n type: Number,\n required: true,\n },\n stop: {\n type: Number,\n required: true,\n },\n },\n\n emits: {},\n\n setup (props, { slots }) {\n const slider = inject(VSliderSymbol)\n\n if (!slider) throw new Error('[Vuetify] v-slider-track must be inside v-slider or v-range-slider')\n\n const {\n trackColor,\n trackFillColor,\n vertical,\n tickSize,\n showTicks,\n trackSize,\n color,\n rounded,\n parsedTicks,\n horizontalDirection,\n } = slider\n\n const { roundedClasses } = useRounded(rounded)\n\n const {\n backgroundColorClasses: trackFillColorClasses,\n backgroundColorStyles: trackFillColorStyles,\n } = useBackgroundColor(trackFillColor)\n\n const {\n backgroundColorClasses: trackColorClasses,\n backgroundColorStyles: trackColorStyles,\n } = useBackgroundColor(trackColor)\n\n const startDir = computed(() => `inset-${vertical.value ? 'block-end' : 'inline-start'}`)\n const endDir = computed(() => vertical.value ? 'height' : 'width')\n\n const backgroundStyles = computed(() => {\n return {\n [startDir.value]: '0%',\n [endDir.value]: '100%',\n }\n })\n\n const trackFillWidth = computed(() => props.stop - props.start)\n\n const trackFillStyles = computed(() => {\n return {\n [startDir.value]: convertToUnit(props.start, '%'),\n [endDir.value]: convertToUnit(trackFillWidth.value, '%'),\n }\n })\n\n const computedTicks = computed(() => {\n const ticks = vertical.value ? parsedTicks.value.slice().reverse() : parsedTicks.value\n\n return ticks.map((tick, index) => {\n const directionProperty = vertical.value ? 'inset-block-end' : 'margin-inline-start'\n return (\n <div\n key={ tick.value }\n class={[\n 'v-slider-track__tick',\n {\n 'v-slider-track__tick--filled': tick.position >= props.start && tick.position <= props.stop,\n },\n ]}\n style={{\n [directionProperty]: (tick.position > 0 && tick.position < 100) && convertToUnit(tick.position, '%'),\n }}\n >\n {\n (tick.label || slots['tick-label']) && (\n <div class=\"v-slider-track__tick-label\">\n { slots['tick-label']?.({ tick, index }) ?? tick.label }\n </div>\n )\n }\n </div>\n )\n })\n })\n\n return () => {\n return (\n <div\n class={[\n 'v-slider-track',\n roundedClasses.value,\n ]}\n style={{\n '--v-slider-track-size': convertToUnit(trackSize.value),\n '--v-slider-tick-size': convertToUnit(tickSize.value),\n direction: !vertical.value ? horizontalDirection.value : undefined,\n }}\n >\n <div\n class={[\n 'v-slider-track__background',\n trackColorClasses.value,\n {\n 'v-slider-track__background--opacity': !!color.value || !trackFillColor.value,\n },\n ]}\n style={{\n ...backgroundStyles.value,\n ...trackColorStyles.value,\n }}\n />\n <div\n class={[\n 'v-slider-track__fill',\n trackFillColorClasses.value,\n ]}\n style={{\n ...trackFillStyles.value,\n ...trackFillColorStyles.value,\n }}\n />\n\n { showTicks.value && (\n <div\n class={[\n 'v-slider-track__ticks',\n {\n 'v-slider-track__ticks--always-show': showTicks.value === 'always',\n },\n ]}\n >\n { computedTicks.value }\n </div>\n ) }\n </div>\n )\n }\n },\n})\n\nexport type VSliderTrack = InstanceType<typeof VSliderTrack>\n","// Components\nimport { VInput } from '../VInput'\nimport { VSliderThumb } from '../VSlider/VSliderThumb'\nimport { VSliderTrack } from '../VSlider/VSliderTrack'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { getOffset, makeSliderProps, useSlider } from '../VSlider/slider'\nimport { useFocus } from '@/composables/focus'\n\n// Utilities\nimport { computed, defineComponent, ref } from 'vue'\n\n// Types\nimport type { PropType, WritableComputedRef } from 'vue'\nimport { filterInputProps, makeVInputProps } from '../VInput/VInput'\n\nexport const VRangeSlider = defineComponent({\n name: 'VRangeSlider',\n\n props: {\n ...makeVInputProps(),\n ...makeSliderProps(),\n\n modelValue: {\n type: Array as PropType<number[]>,\n default: () => ([0, 0]),\n },\n },\n\n emits: {\n 'update:modelValue': (value: [number, number]) => true,\n },\n\n setup (props, { slots, attrs }) {\n const startThumbRef = ref<VSliderThumb>()\n const stopThumbRef = ref<VSliderThumb>()\n const focusedThumb = ref<VSliderThumb | null>()\n const inputRef = ref<VInput>()\n\n let canSwitch = false\n function getActiveThumb (e: MouseEvent | TouchEvent) {\n if (!startThumbRef.value || !stopThumbRef.value) return\n\n canSwitch = true\n\n const startOffset = getOffset(e, startThumbRef.value.$el, props.direction)\n const stopOffset = getOffset(e, stopThumbRef.value.$el, props.direction)\n\n const a = Math.abs(startOffset)\n const b = Math.abs(stopOffset)\n\n return (a < b || (a === b && startOffset < 0)) ? startThumbRef.value?.$el : stopThumbRef.value?.$el\n }\n\n const {\n min,\n max,\n mousePressed,\n roundValue,\n onSliderMousedown,\n onSliderTouchstart,\n trackContainerRef,\n position,\n hasLabels,\n } = useSlider({\n /* eslint-disable @typescript-eslint/no-use-before-define */\n props,\n handleSliderMouseUp: newValue => {\n model.value = focusedThumb.value === startThumbRef.value ? [newValue, model.value[1]] : [model.value[0], newValue]\n },\n handleMouseMove: newValue => {\n if (focusedThumb.value === startThumbRef.value) {\n model.value = [Math.min(newValue, model.value[1]), model.value[1]]\n } else {\n model.value = [model.value[0], Math.max(model.value[0], newValue)]\n }\n if (canSwitch && model.value[0] === model.value[1]) {\n focusedThumb.value = newValue > model.value[0] ? stopThumbRef.value : startThumbRef.value\n }\n canSwitch = false\n },\n getActiveThumb,\n /* eslint-enable @typescript-eslint/no-use-before-define */\n })\n\n const model = useProxiedModel(\n props,\n 'modelValue',\n undefined,\n arr => {\n if (!arr || !arr.length) return [0, 0]\n\n return arr.map(value => roundValue(value))\n },\n ) as WritableComputedRef<[number, number]>\n\n const { isFocused, focus, blur } = useFocus()\n const trackStart = computed(() => position(model.value[0]))\n const trackStop = computed(() => position(model.value[1]))\n\n return () => {\n const [inputProps, _] = filterInputProps(props)\n\n return (\n <VInput\n class={[\n 'v-slider',\n 'v-range-slider',\n {\n 'v-slider--has-labels': !!slots['tick-label'] || hasLabels.value,\n 'v-slider--focused': isFocused.value,\n 'v-slider--pressed': mousePressed.value,\n 'v-slider--disabled': props.disabled,\n },\n ]}\n ref={ inputRef }\n { ...inputProps }\n focused={ isFocused.value }\n >\n {{\n ...slots,\n default: ({ id }) => (\n <div\n class=\"v-slider__container\"\n onMousedown={ onSliderMousedown }\n onTouchstartPassive={ onSliderTouchstart }\n >\n <input\n id={ `${id.value}_start` }\n name={ props.name || id.value }\n disabled={ props.disabled }\n readonly={ props.readonly }\n tabindex=\"-1\"\n value={ model.value[0] }\n />\n\n <input\n id={ `${id.value}_stop` }\n name={ props.name || id.value }\n disabled={ props.disabled }\n readonly={ props.readonly }\n tabindex=\"-1\"\n value={ model.value[1] }\n />\n\n <VSliderTrack\n ref={ trackContainerRef }\n start={ trackStart.value }\n stop={ trackStop.value }\n >\n {{ 'tick-label': slots['tick-label'] }}\n </VSliderTrack>\n\n <VSliderThumb\n ref={ startThumbRef }\n focused={ isFocused && focusedThumb.value === startThumbRef.value }\n modelValue={ model.value[0] }\n onUpdate:modelValue={ v => (model.value = [v, model.value[1]]) }\n onFocus={ (e: FocusEvent) => {\n focus()\n focusedThumb.value = startThumbRef.value\n\n // Make sure second thumb is focused if\n // the thumbs are on top of each other\n // and they are both at minimum value\n // but only if focused from outside.\n if (\n model.value[0] === model.value[1] &&\n model.value[1] === min.value &&\n e.relatedTarget !== stopThumbRef.value?.$el\n ) stopThumbRef.value?.$el.focus()\n } }\n onBlur={ () => {\n blur()\n focusedThumb.value = null\n } }\n min={ min.value }\n max={ model.value[1] }\n position={ trackStart.value }\n >\n {{ 'thumb-label': slots['thumb-label'] }}\n </VSliderThumb>\n\n <VSliderThumb\n ref={ stopThumbRef }\n focused={ isFocused && focusedThumb.value === stopThumbRef.value }\n modelValue={ model.value[1] }\n onUpdate:modelValue={ v => (model.value = [model.value[0], v]) }\n onFocus={ (e: FocusEvent) => {\n focus()\n focusedThumb.value = stopThumbRef.value\n\n // Make sure first thumb is focused if\n // the thumbs are on top of each other\n // and they are both at maximum value\n // but only if focused from outside.\n if (\n model.value[0] === model.value[1] &&\n model.value[0] === max.value &&\n e.relatedTarget !== startThumbRef.value?.$el\n ) {\n startThumbRef.value?.$el.focus()\n }\n } }\n onBlur={ () => {\n blur()\n focusedThumb.value = null\n } }\n min={ model.value[0] }\n max={ max.value }\n position={ trackStop.value }\n >\n {{ 'thumb-label': slots['thumb-label'] }}\n </VSliderThumb>\n </div>\n ),\n }}\n </VInput>\n )\n }\n },\n})\n\nexport type VRangeSlider = InstanceType<typeof VRangeSlider>\n","// Styles\nimport './VRating.sass'\n\n// Components\nimport { VBtn } from '../VBtn'\n\n// Composables\nimport { makeDensityProps } from '@/composables/density'\nimport { makeSizeProps } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { createRange, defineComponent, getUid } from '@/util'\n\n// Types\nimport type { Variant } from '@/composables/variant'\nimport type { Prop } from 'vue'\n\nexport const VRating = defineComponent({\n name: 'VRating',\n\n props: {\n name: String,\n itemAriaLabel: {\n type: String,\n default: '$vuetify.rating.ariaLabel.item',\n },\n activeColor: String,\n color: String,\n clearable: Boolean,\n disabled: Boolean,\n emptyIcon: {\n type: String,\n default: '$ratingEmpty',\n },\n fullIcon: {\n type: String,\n default: '$ratingFull',\n },\n halfIncrements: Boolean,\n hover: Boolean,\n length: {\n type: [Number, String],\n default: 5,\n },\n readonly: Boolean,\n modelValue: {\n type: Number,\n default: 0,\n },\n itemLabels: Array as Prop<string[]>,\n itemLabelPosition: {\n type: String,\n default: 'top',\n validator: (v: any) => ['top', 'bottom'].includes(v),\n },\n ripple: Boolean,\n\n ...makeDensityProps(),\n ...makeSizeProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:modelValue': (value: number) => true,\n },\n\n setup (props, { slots }) {\n const { t } = useLocale()\n const { themeClasses } = provideTheme(props)\n const rating = useProxiedModel(props, 'modelValue')\n\n const range = computed(() => createRange(Number(props.length), 1))\n const increments = computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]))\n const hoverIndex = ref(-1)\n const focusIndex = ref(-1)\n const firstRef = ref<HTMLElement>()\n let isClicking = false\n\n const itemState = computed(() => increments.value.map(value => {\n const isHovering = props.hover && hoverIndex.value > -1\n const isFilled = rating.value >= value\n const isHovered = hoverIndex.value >= value\n const isFullIcon = isHovering ? isHovered : isFilled\n const icon = isFullIcon ? props.fullIcon : props.emptyIcon\n const activeColor = props.activeColor ?? props.color\n const color = (isFilled || isHovered) ? activeColor : props.color\n\n return { isFilled, isHovered, icon, color }\n }))\n\n const eventState = computed(() => [0, ...increments.value].map(value => {\n function onMouseenter () {\n hoverIndex.value = value\n }\n\n function onMouseleave () {\n hoverIndex.value = -1\n }\n\n function onFocus () {\n if (value === 0 && rating.value === 0) {\n firstRef.value?.focus()\n } else {\n focusIndex.value = value\n }\n }\n\n function onBlur () {\n if (!isClicking) focusIndex.value = -1\n }\n\n function onClick () {\n if (props.disabled || props.readonly) return\n rating.value = rating.value === value && props.clearable ? 0 : value\n }\n\n return {\n onMouseenter: props.hover ? onMouseenter : undefined,\n onMouseleave: props.hover ? onMouseleave : undefined,\n onFocus,\n onBlur,\n onClick,\n }\n }))\n\n function onMousedown () {\n isClicking = true\n }\n\n function onMouseup () {\n isClicking = false\n }\n\n const name = computed(() => props.name ?? `v-rating-${getUid()}`)\n\n function VRatingItem ({ value, index, showStar = true }: { value: number, index: number, showStar?: boolean }) {\n const { onMouseenter, onMouseleave, onFocus, onBlur, onClick } = eventState.value[index + 1]\n const id = `${name.value}-${String(value).replace('.', '-')}`\n const btnProps = {\n color: itemState.value[index]?.color,\n density: props.density,\n disabled: props.disabled,\n icon: itemState.value[index]?.icon,\n ripple: props.ripple,\n size: props.size,\n tag: 'span',\n variant: 'plain' as Variant,\n }\n\n return (\n <>\n <label\n for={ id }\n class={{\n 'v-rating__item--half': props.halfIncrements && value % 1 > 0,\n 'v-rating__item--full': props.halfIncrements && value % 1 === 0,\n }}\n onMousedown={ onMousedown }\n onMouseup={ onMouseup }\n onMouseenter={ onMouseenter }\n onMouseleave={ onMouseleave }\n >\n <span class=\"v-rating__hidden\">{ t(props.itemAriaLabel, value, props.length) }</span>\n {\n !showStar ? undefined\n : slots.item ? slots.item({\n ...itemState.value,\n props: btnProps,\n value,\n index,\n })\n : (\n <VBtn { ...btnProps } />\n )\n }\n </label>\n <input\n class=\"v-rating__hidden\"\n name={ name.value }\n id={ id }\n type=\"radio\"\n value={ value }\n checked={ rating.value === value }\n onClick={ onClick }\n onFocus={ onFocus }\n onBlur={ onBlur }\n ref={ index === 0 ? firstRef : undefined }\n readonly={ props.readonly }\n disabled={ props.disabled }\n />\n </>\n )\n }\n\n return () => {\n const hasLabels = !!props.itemLabels?.length\n\n return (\n <props.tag\n class={[\n 'v-rating',\n {\n 'v-rating--hover': props.hover,\n 'v-rating--readonly': props.readonly,\n },\n themeClasses.value,\n ]}\n >\n <VRatingItem value={ 0 } index={ -1 } showStar={ false } />\n\n { range.value.map((value, i) => (\n <div class=\"v-rating__wrapper\">\n {\n !hasLabels ? undefined\n : slots['item-label'] ? slots['item-label']({ value, index: i, label: props.itemLabels?.[i] })\n : props.itemLabels?.[i] ? <span>{ props.itemLabels[i] }</span>\n : <span>&nbsp;</span>\n }\n <div\n class={[\n 'v-rating__item',\n {\n 'v-rating__item--focused': Math.ceil(focusIndex.value) === value,\n },\n ]}\n >\n { props.halfIncrements ? (\n <>\n <VRatingItem value={ value - 0.5 } index={ i * 2 } />\n <VRatingItem value={ value } index={ (i * 2) + 1 } />\n </>\n ) : (\n <VRatingItem value={ value } index={ i } />\n ) }\n </div>\n </div>\n )) }\n </props.tag>\n )\n }\n },\n})\n\nexport type VRating = InstanceType<typeof VRating>\n","// Styles\nimport './VSheet.sass'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport const VSheet = defineComponent({\n name: 'VSheet',\n\n props: {\n color: {\n type: String,\n default: 'surface',\n },\n\n ...makeBorderProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'color'))\n const { borderClasses } = useBorder(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { positionClasses, positionStyles } = usePosition(props)\n const { roundedClasses } = useRounded(props)\n\n return () => (\n <props.tag\n class={[\n 'v-sheet',\n themeClasses.value,\n backgroundColorClasses.value,\n borderClasses.value,\n elevationClasses.value,\n positionClasses.value,\n roundedClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n dimensionStyles.value,\n positionStyles.value,\n ]}\n v-slots={ slots }\n />\n )\n },\n})\n","// Styles\nimport './VSlider.sass'\n\n// Components\nimport { VInput } from '../VInput'\nimport { VSliderThumb } from './VSliderThumb'\nimport { VSliderTrack } from './VSliderTrack'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useFocus } from '@/composables/focus'\nimport { makeSliderProps, useSlider } from './slider'\n\n// Helpers\nimport { defineComponent } from '@/util'\n\n// Types\nimport { computed, ref } from 'vue'\nimport { filterInputProps, makeVInputProps } from '../VInput/VInput'\n\nexport const VSlider = defineComponent({\n name: 'VSlider',\n\n props: {\n ...makeSliderProps(),\n ...makeVInputProps(),\n\n modelValue: {\n type: [Number, String],\n default: 0,\n },\n },\n\n emits: {\n 'update:modelValue': (v: number) => true,\n },\n\n setup (props, { attrs, slots }) {\n const thumbContainerRef = ref()\n\n const {\n min,\n max,\n mousePressed,\n roundValue,\n onSliderMousedown,\n onSliderTouchstart,\n trackContainerRef,\n position,\n hasLabels,\n } = useSlider({\n props,\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n handleSliderMouseUp: newValue => model.value = roundValue(newValue),\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n handleMouseMove: newValue => model.value = roundValue(newValue),\n getActiveThumb: () => thumbContainerRef.value?.$el,\n })\n\n const model = useProxiedModel(\n props,\n 'modelValue',\n undefined,\n v => {\n const value = typeof v === 'string' ? parseFloat(v) : v == null ? min.value : v\n\n return roundValue(value)\n },\n )\n\n const { isFocused, focus, blur } = useFocus()\n const trackStop = computed(() => position(model.value))\n\n return () => {\n const [inputProps, _] = filterInputProps(props)\n\n return (\n <VInput\n class={[\n 'v-slider',\n {\n 'v-slider--has-labels': !!slots['tick-label'] || hasLabels.value,\n 'v-slider--focused': isFocused.value,\n 'v-slider--pressed': mousePressed.value,\n 'v-slider--disabled': props.disabled,\n },\n ]}\n { ...inputProps }\n focused={ isFocused.value }\n >\n {{\n ...slots,\n default: ({ id }) => (\n <div\n class=\"v-slider__container\"\n onMousedown={ onSliderMousedown }\n onTouchstartPassive={ onSliderTouchstart }\n >\n <input\n id={ id.value }\n name={ props.name || id.value }\n disabled={ props.disabled }\n readonly={ props.readonly }\n tabindex=\"-1\"\n value={ model.value }\n />\n\n <VSliderTrack\n ref={ trackContainerRef }\n start={ 0 }\n stop={ trackStop.value }\n >\n {{ 'tick-label': slots['tick-label'] }}\n </VSliderTrack>\n\n <VSliderThumb\n ref={ thumbContainerRef }\n focused={ isFocused.value }\n min={ min.value }\n max={ max.value }\n modelValue={ model.value }\n onUpdate:modelValue={ v => (model.value = v) }\n position={ trackStop.value }\n elevation={ props.elevation }\n onFocus={ focus }\n onBlur={ blur }\n >\n {{ 'thumb-label': slots['thumb-label'] }}\n </VSliderThumb>\n </div>\n ),\n }}\n </VInput>\n )\n }\n },\n})\n\nexport type VSlider = InstanceType<typeof VSlider>\n","// Styles\nimport './VSwitch.sass'\n\n// Components\nimport { filterControlProps, makeSelectionControlProps, VSelectionControl } from '@/components/VSelectionControl/VSelectionControl'\nimport { filterInputProps, makeVInputProps, VInput } from '@/components/VInput/VInput'\nimport { VProgressCircular } from '@/components/VProgressCircular'\n\n// Composables\nimport { LoaderSlot, makeLoaderProps, useLoader } from '@/composables/loader'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utility\nimport { computed, defineComponent, ref } from 'vue'\nimport { filterInputAttrs, useRender } from '@/util'\n\nexport const VSwitch = defineComponent({\n name: 'VSwitch',\n\n inheritAttrs: false,\n\n props: {\n indeterminate: Boolean,\n inset: Boolean,\n flat: Boolean,\n\n ...makeLoaderProps(),\n ...makeVInputProps(),\n ...makeSelectionControlProps(),\n },\n\n emits: {\n 'update:indeterminate': (val: boolean) => true,\n },\n\n setup (props, { attrs, slots }) {\n const indeterminate = useProxiedModel(props, 'indeterminate')\n const { loaderClasses } = useLoader(props)\n\n const loaderColor = computed(() => {\n return typeof props.loading === 'string' && props.loading !== ''\n ? props.loading\n : props.color\n })\n\n function onChange () {\n if (indeterminate.value) {\n indeterminate.value = false\n }\n }\n\n useRender(() => {\n const [inputAttrs, controlAttrs] = filterInputAttrs(attrs)\n const [inputProps, _1] = filterInputProps(props)\n const [controlProps, _2] = filterControlProps(props)\n const control = ref<VSelectionControl>()\n\n function onClick () {\n control.value?.input?.click()\n }\n\n return (\n <VInput\n class={[\n 'v-switch',\n { 'v-switch--inset': props.inset },\n { 'v-switch--indeterminate': indeterminate.value },\n loaderClasses.value,\n ]}\n { ...inputAttrs }\n { ...inputProps }\n >\n {{\n ...slots,\n default: ({\n isDisabled,\n isReadonly,\n isValid,\n }) => (\n <VSelectionControl\n ref={ control }\n { ...controlProps }\n type=\"checkbox\"\n onUpdate:modelValue={ onChange }\n aria-checked={ indeterminate.value ? 'mixed' : undefined }\n disabled={ isDisabled.value }\n readonly={ isReadonly.value }\n { ...controlAttrs }\n >\n {{\n default: () => (<div class=\"v-switch__track\" onClick={ onClick }></div>),\n input: ({ textColorClasses }) => (\n <div\n class={[\n 'v-switch__thumb',\n textColorClasses.value,\n ]}\n >\n { props.loading && (\n <LoaderSlot\n name=\"v-switch\"\n active\n color={ isValid.value === false ? undefined : loaderColor.value }\n >\n { slotProps => (\n slots.loader\n ? slots.loader(slotProps)\n : (\n <VProgressCircular\n active={ slotProps.isActive }\n color={ slotProps.color }\n indeterminate\n size=\"16\"\n width=\"2\"\n />\n )\n )}\n </LoaderSlot>\n ) }\n </div>\n ),\n }}\n </VSelectionControl>\n ),\n }}\n </VInput>\n )\n })\n\n return {}\n },\n})\n\nexport type VSwitch = InstanceType<typeof VSwitch>\n","// Styles\nimport './VSystemBar.sass'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VSystemBar = defineComponent({\n name: 'VSystemBar',\n\n props: {\n lightsOut: Boolean,\n window: Boolean,\n\n ...makeBorderProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { positionClasses, positionStyles } = usePosition(props)\n const { roundedClasses } = useRounded(props)\n\n return () => (\n <props.tag\n class={[\n {\n 'v-system-bar': true,\n 'v-system-bar--lights-out': props.lightsOut,\n 'v-system-bar--window': props.window,\n },\n themeClasses.value,\n borderClasses.value,\n elevationClasses.value,\n positionClasses.value,\n roundedClasses.value,\n ]}\n style={[\n dimensionStyles.value,\n positionStyles.value,\n ]}\n v-slots={ slots }\n />\n )\n },\n})\n","// Styles\nimport './VTable.sass'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { convertToUnit, defineComponent } from '@/util'\nimport { makeDensityProps, useDensity } from '@/composables/density'\n\nexport const VTable = defineComponent({\n name: 'VTable',\n\n props: {\n fixedHeader: Boolean,\n fixedFooter: Boolean,\n height: [Number, String],\n\n ...makeDensityProps(),\n ...makeThemeProps(),\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { densityClasses } = useDensity(props)\n\n return () => (\n <props.tag\n class={[\n 'v-table',\n {\n 'v-table--fixed-height': !!props.height,\n 'v-table--fixed-header': props.fixedHeader,\n 'v-table--fixed-footer': props.fixedFooter,\n 'v-table--has-top': !!slots.top,\n 'v-table--has-bottom': !!slots.bottom,\n },\n themeClasses.value,\n densityClasses.value,\n ]}\n >\n { slots.top?.() }\n\n { slots.default && (\n <div\n class=\"v-table__wrapper\"\n style={{ height: convertToUnit(props.height) }}\n >\n <table>\n { slots.default?.() }\n </table>\n </div>\n ) }\n\n { slots.bottom?.() }\n </props.tag>\n )\n },\n})\n","// Styles\nimport './VTextarea.sass'\n\n// Components\nimport { filterFieldProps, makeVFieldProps } from '@/components/VField/VField'\nimport { VCounter } from '@/components/VCounter'\nimport { VField } from '@/components/VField'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport Intersect from '@/directives/intersect'\n\n// Utilities\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { convertToUnit, defineComponent, filterInputAttrs, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport { filterInputProps, makeVInputProps, VInput } from '@/components/VInput/VInput'\n\nexport const VTextarea = defineComponent({\n name: 'VTextarea',\n\n directives: { Intersect },\n\n inheritAttrs: false,\n\n props: {\n autoGrow: Boolean,\n autofocus: Boolean,\n counter: [Boolean, Number, String] as PropType<true | number | string>,\n counterValue: Function as PropType<(value: any) => number>,\n prefix: String,\n placeholder: String,\n persistentPlaceholder: Boolean,\n persistentCounter: Boolean,\n noResize: Boolean,\n rows: {\n type: [Number, String],\n default: 5,\n validator: (v: any) => !isNaN(parseFloat(v)),\n },\n maxRows: {\n type: [Number, String],\n validator: (v: any) => !isNaN(parseFloat(v)),\n },\n suffix: String,\n\n ...makeVInputProps(),\n ...makeVFieldProps(),\n },\n\n emits: {\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { attrs, slots }) {\n const model = useProxiedModel(props, 'modelValue')\n\n const controlHeight = ref('auto')\n const internalDirty = ref(false)\n const isDirty = computed(() => {\n return internalDirty.value || !!model.value\n })\n\n const counterValue = computed(() => {\n return typeof props.counterValue === 'function'\n ? props.counterValue(model.value)\n : (model.value || '').toString().length\n })\n const max = computed(() => {\n if (attrs.maxlength) return attrs.maxlength as undefined\n\n if (\n !props.counter ||\n (typeof props.counter !== 'number' &&\n typeof props.counter !== 'string')\n ) return undefined\n\n return props.counter\n })\n\n function onIntersect (\n isIntersecting: boolean,\n entries: IntersectionObserverEntry[]\n ) {\n if (!props.autofocus || !isIntersecting) return\n\n (entries[0].target as HTMLInputElement)?.focus?.()\n }\n\n const isFocused = ref(false)\n const inputRef = ref<HTMLInputElement>()\n function focus () {\n inputRef.value?.focus()\n }\n function blur () {\n inputRef.value?.blur()\n }\n function onFocus (e: FocusEvent) {\n isFocused.value = true\n }\n function onBlur (e: FocusEvent) {\n isFocused.value = false\n }\n function clear (e?: Event) {\n e?.stopPropagation()\n\n model.value = ''\n }\n\n const sizerRef = ref<HTMLTextAreaElement>()\n function calculateInputHeight () {\n if (!props.autoGrow) return\n\n nextTick(() => {\n if (!sizerRef.value) return\n\n const style = getComputedStyle(sizerRef.value)\n\n const padding = parseFloat(style.getPropertyValue('--v-field-padding-top')) +\n parseFloat(style.getPropertyValue('--v-field-padding-bottom'))\n\n const height = sizerRef.value.scrollHeight\n const lineHeight = parseFloat(style.lineHeight)\n const minHeight = parseFloat(props.rows) * lineHeight + padding\n const maxHeight = parseFloat(props.maxRows!) * lineHeight + padding || Infinity\n\n controlHeight.value = convertToUnit(Math.min(maxHeight, Math.max(minHeight, height ?? 0)))\n })\n }\n\n onMounted(calculateInputHeight)\n watch(model, calculateInputHeight)\n watch(() => props.rows, calculateInputHeight)\n watch(() => props.maxRows, calculateInputHeight)\n\n let observer: ResizeObserver | undefined\n watch(sizerRef, val => {\n if (val) {\n observer = new ResizeObserver(calculateInputHeight)\n observer.observe(sizerRef.value!)\n } else {\n observer?.disconnect()\n }\n })\n onBeforeUnmount(() => {\n observer?.disconnect()\n })\n\n useRender(() => {\n const hasCounter = !!(slots.counter || props.counter || props.counterValue)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const [inputProps] = filterInputProps(props)\n const [fieldProps] = filterFieldProps(props)\n\n return (\n <VInput\n v-model={ model.value }\n class={[\n 'v-textarea',\n {\n 'v-textarea--prefixed': props.prefix,\n 'v-textarea--suffixed': props.suffix,\n 'v-textarea--auto-grow': props.autoGrow,\n 'v-textarea--no-resize': props.noResize || props.autoGrow,\n },\n ]}\n { ...rootAttrs }\n { ...inputProps }\n >\n {{\n ...slots,\n default: ({ isDisabled, isReadonly }) => (\n <VField\n style={{\n '--v-input-control-height': controlHeight.value,\n }}\n active={ isDirty.value }\n onUpdate:active={ val => internalDirty.value = val }\n onClick:control={ focus }\n onClick:clear={ clear }\n role=\"textbox\"\n { ...fieldProps }\n >\n {{\n ...slots,\n default: ({\n isActive,\n props: { class: fieldClass, ...slotProps },\n }) => {\n const showPlaceholder = isActive || props.persistentPlaceholder\n return (\n <>\n { props.prefix && (\n <span class=\"v-textarea__prefix\" style={{ opacity: showPlaceholder ? undefined : '0' }}>\n { props.prefix }\n </span>\n ) }\n\n <textarea\n ref={ inputRef }\n class={ fieldClass }\n style={{ opacity: showPlaceholder ? undefined : '0' }} // can't this just be a class?\n v-model={ model.value }\n v-intersect={[{\n handler: onIntersect,\n }, null, ['once']]}\n autofocus={ props.autofocus }\n readonly={ isReadonly.value }\n disabled={ isDisabled.value }\n placeholder={ props.placeholder }\n rows={ props.rows }\n onFocus={ onFocus }\n onBlur={ onBlur }\n { ...slotProps }\n { ...inputAttrs }\n />\n\n { props.autoGrow && (\n <textarea\n class={[\n fieldClass,\n 'v-textarea__sizer',\n ]}\n v-model={ model.value }\n ref={ sizerRef }\n readonly\n aria-hidden=\"true\"\n />\n )}\n\n { props.suffix && (\n <span class=\"v-textarea__suffix\" style={{ opacity: showPlaceholder ? undefined : '0' }}>\n { props.suffix }\n </span>\n ) }\n </>\n )\n },\n }}\n </VField>\n ),\n details: hasCounter ? ({ isFocused }) => (\n <>\n <span />\n\n <VCounter\n active={ props.persistentCounter || isFocused.value }\n value={ counterValue.value }\n max={ max.value }\n v-slots={ slots.counter }\n />\n </>\n ) : undefined,\n }}\n </VInput>\n )\n })\n\n return {\n focus,\n blur,\n }\n },\n})\n\nexport type VTextarea = InstanceType<typeof VTextarea>\n","// Styles\nimport './VTextField.sass'\n\n// Components\nimport { filterInputProps, makeVInputProps, VInput } from '@/components/VInput/VInput'\nimport { filterFieldProps, makeVFieldProps, VField } from '@/components/VField/VField'\nimport { VCounter } from '@/components/VCounter'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport Intersect from '@/directives/intersect'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { defineComponent, filterInputAttrs, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport { useForwardRef } from '@/composables/forwardRef'\n\nconst dirtyTypes = ['color', 'file', 'time', 'date', 'datetime-local', 'week', 'month']\n\nexport const VTextField = defineComponent({\n name: 'VTextField',\n\n directives: { Intersect },\n\n inheritAttrs: false,\n\n props: {\n autofocus: Boolean,\n counter: [Boolean, Number, String] as PropType<true | number | string>,\n counterValue: Function as PropType<(value: any) => number>,\n prefix: String,\n placeholder: String,\n persistentPlaceholder: Boolean,\n persistentCounter: Boolean,\n suffix: String,\n type: {\n type: String,\n default: 'text',\n },\n\n ...makeVInputProps(),\n ...makeVFieldProps(),\n },\n\n emits: {\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { attrs, slots }) {\n const model = useProxiedModel(props, 'modelValue')\n\n const internalDirty = ref(false)\n const isDirty = computed(() => {\n return internalDirty.value || !!model.value || dirtyTypes.includes(props.type)\n })\n\n const counterValue = computed(() => {\n return typeof props.counterValue === 'function'\n ? props.counterValue(model.value)\n : (model.value || '').toString().length\n })\n const max = computed(() => {\n if (attrs.maxlength) return attrs.maxlength as undefined\n\n if (\n !props.counter ||\n (typeof props.counter !== 'number' &&\n typeof props.counter !== 'string')\n ) return undefined\n\n return props.counter\n })\n\n function onIntersect (\n isIntersecting: boolean,\n entries: IntersectionObserverEntry[]\n ) {\n if (!props.autofocus || !isIntersecting) return\n\n (entries[0].target as HTMLInputElement)?.focus?.()\n }\n\n const isFocused = ref(false)\n const inputRef = ref<HTMLInputElement>()\n function focus () {\n inputRef.value?.focus()\n }\n function blur () {\n inputRef.value?.blur()\n }\n function onFocus (e: FocusEvent) {\n isFocused.value = true\n }\n function onBlur (e: FocusEvent) {\n isFocused.value = false\n }\n\n const vInputRef = ref<VInput>()\n const vFieldRef = ref<VInput>()\n\n useRender(() => {\n const hasCounter = !!(slots.counter || props.counter || props.counterValue)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const [inputProps] = filterInputProps(props)\n const [fieldProps] = filterFieldProps(props)\n\n return (\n <VInput\n ref={ vInputRef }\n v-model={ model.value }\n class={[\n 'v-text-field',\n {\n 'v-text-field--prefixed': props.prefix,\n 'v-text-field--suffixed': props.suffix,\n },\n ]}\n focused={ isFocused.value }\n { ...rootAttrs }\n { ...inputProps }\n >\n {{\n ...slots,\n default: ({ isDisabled, isReadonly }) => (\n <VField\n ref={ vFieldRef }\n active={ isDirty.value }\n onUpdate:active={ val => internalDirty.value = val }\n onClick:control={ focus }\n onClick:clear={ e => {\n e.stopPropagation()\n\n model.value = ''\n }}\n role=\"textbox\"\n { ...fieldProps }\n >\n {{\n ...slots,\n default: ({\n isActive,\n props: { class: fieldClass, ...slotProps },\n }) => {\n const showPlaceholder = isActive || props.persistentPlaceholder\n\n return (\n <>\n { props.prefix && (\n <span class=\"v-text-field__prefix\" style={{ opacity: showPlaceholder ? undefined : '0' }}>\n { props.prefix }\n </span>\n ) }\n\n <input\n ref={ inputRef }\n class={ fieldClass }\n style={{ opacity: showPlaceholder ? undefined : '0' }} // can't this just be a class?\n v-model={ model.value }\n v-intersect={[{\n handler: onIntersect,\n }, null, ['once']]}\n autofocus={ props.autofocus }\n readonly={ isReadonly.value }\n disabled={ isDisabled.value }\n placeholder={ props.placeholder }\n size={ 1 }\n type={ props.type }\n onFocus={ onFocus }\n onBlur={ onBlur }\n { ...slotProps }\n { ...inputAttrs }\n />\n\n { props.suffix && (\n <span class=\"v-text-field__suffix\" style={{ opacity: showPlaceholder ? undefined : '0' }}>\n { props.suffix }\n </span>\n ) }\n </>\n )\n },\n }}\n </VField>\n ),\n details: hasCounter ? ({ isFocused }) => (\n <>\n <span />\n\n <VCounter\n active={ props.persistentCounter || isFocused.value }\n value={ counterValue.value }\n max={ max.value }\n v-slots={ slots.counter }\n />\n </>\n ) : undefined,\n }}\n </VInput>\n )\n })\n\n return useForwardRef({\n focus,\n blur,\n }, vInputRef, vFieldRef)\n },\n})\n\nexport type VTextField = InstanceType<typeof VTextField>\n","import type { Ref, UnwrapRef } from 'vue'\nimport type { UnionToIntersection } from '@/util'\n\nexport function useForwardRef<T extends {}, U extends Ref<{} | undefined>[]> (\n target: T,\n ...refs: U\n): T & UnwrapRef<UnionToIntersection<U[number]>> {\n return new Proxy(target, {\n get (target, key) {\n if (Reflect.has(target, key)) {\n return Reflect.get(target, key)\n }\n for (const ref of refs) {\n if (ref.value && Reflect.has(ref.value, key)) {\n return Reflect.get(ref.value, key)\n }\n }\n },\n getOwnPropertyDescriptor (target, key) {\n return Reflect.getOwnPropertyDescriptor(target, key) ?? (\n refs.find(ref => ref.value && Reflect.getOwnPropertyDescriptor(ref.value, key))\n )\n },\n }) as any\n}\n","// Styles\nimport './VThemeProvider.sass'\n\n// Composables\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VThemeProvider = defineComponent({\n name: 'VThemeProvider',\n\n props: {\n withBackground: Boolean,\n\n ...makeThemeProps(),\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n\n return () => {\n if (!props.withBackground) return slots.default?.()\n\n return (\n <props.tag class={['v-theme-provider', themeClasses.value]}>\n { slots.default?.() }\n </props.tag>\n )\n }\n },\n})\n","import type { InjectionKey, Ref } from 'vue'\nimport type { Density } from '@/composables/density'\n\nexport interface TimelineInstance {\n density: Ref<Density>\n lineColor: Ref<string>\n}\n\nexport const VTimelineSymbol: InjectionKey<TimelineInstance> = Symbol.for('vuetify:timeline')\n","// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VTimelineSymbol } from './shared'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\n\n// Utilities\nimport { defineComponent, inject, toRef } from 'vue'\n\nexport const VTimelineDivider = defineComponent({\n name: 'VTimelineDivider',\n\n props: {\n hideDot: Boolean,\n lineColor: String,\n icon: String,\n iconColor: String,\n fillDot: Boolean,\n dotColor: String,\n\n ...makeRoundedProps(),\n ...makeSizeProps(),\n ...makeElevationProps(),\n },\n\n setup (props, { slots }) {\n const timeline = inject(VTimelineSymbol)\n\n if (!timeline) throw new Error('[Vuetify] Could not find v-timeline provider')\n\n const { sizeClasses, sizeStyles } = useSize(props, 'v-timeline-divider__dot')\n const { backgroundColorStyles, backgroundColorClasses } = useBackgroundColor(toRef(props, 'dotColor'))\n const { backgroundColorStyles: lineColorStyles, backgroundColorClasses: lineColorClasses } = useBackgroundColor(timeline.lineColor)\n const { roundedClasses } = useRounded(props, 'v-timeline-divider__dot')\n const { elevationClasses } = useElevation(props)\n\n return () => (\n <div\n class={[\n 'v-timeline-divider',\n {\n 'v-timeline-divider--fill-dot': props.fillDot,\n },\n ]}\n >\n { !props.hideDot && (\n <div\n class={[\n 'v-timeline-divider__dot',\n roundedClasses.value,\n sizeClasses.value,\n elevationClasses.value,\n ]}\n // @ts-expect-error: null\n style={ sizeStyles.value }\n >\n <div\n class={[\n 'v-timeline-divider__inner-dot',\n roundedClasses.value,\n backgroundColorClasses.value,\n ]}\n style={ backgroundColorStyles.value }\n >\n {\n slots.default ? slots.default({ icon: props.icon, iconColor: props.iconColor, size: props.size })\n : props.icon ? <VIcon icon={ props.icon } color={ props.iconColor } size={ props.size } />\n : undefined\n }\n </div>\n </div>\n ) }\n <div\n class={[\n 'v-timeline-divider__line',\n lineColorClasses.value,\n ]}\n style={ lineColorStyles.value }\n />\n </div>\n )\n },\n})\n\nexport type VTimelineDivider = InstanceType<typeof VTimelineDivider>\n","// Components\nimport { VTimelineSymbol } from './shared'\nimport { VTimelineDivider } from './VTimelineDivider'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\nimport { makeSizeProps } from '@/composables/size'\nimport { makeElevationProps } from '@/composables/elevation'\nimport { makeRoundedProps } from '@/composables/rounded'\n\n// Utilities\nimport { inject, ref, watch } from 'vue'\nimport { convertToUnit, defineComponent } from '@/util'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\n\nexport const VTimelineItem = defineComponent({\n name: 'VTimelineItem',\n\n props: {\n dotColor: String,\n fillDot: Boolean,\n hideDot: Boolean,\n hideOpposite: {\n type: Boolean,\n default: undefined,\n },\n icon: String,\n iconColor: String,\n\n ...makeRoundedProps(),\n ...makeElevationProps(),\n ...makeSizeProps(),\n ...makeTagProps(),\n ...makeDimensionProps(),\n },\n\n setup (props, { slots }) {\n const timeline = inject(VTimelineSymbol)\n\n if (!timeline) throw new Error('[Vuetify] Could not find v-timeline provider')\n\n const { dimensionStyles } = useDimension(props)\n\n const dotSize = ref(0)\n const dotRef = ref<VTimelineDivider>()\n watch(dotRef, newValue => {\n if (!newValue) return\n dotSize.value = newValue.$el.querySelector('.v-timeline-divider__dot')?.getBoundingClientRect().width ?? 0\n }, {\n flush: 'post',\n })\n\n return () => (\n <div\n class={[\n 'v-timeline-item',\n {\n 'v-timeline-item--fill-dot': props.fillDot,\n },\n ]}\n style={{\n '--v-timeline-dot-size': convertToUnit(dotSize.value),\n }}\n >\n <div\n class=\"v-timeline-item__body\"\n style={ dimensionStyles.value }\n >\n { slots.default?.() }\n </div>\n\n <VTimelineDivider\n ref={ dotRef }\n hideDot={ props.hideDot }\n icon={ props.icon }\n iconColor={ props.iconColor }\n size={ props.size }\n elevation={ props.elevation }\n dotColor={ props.dotColor }\n fillDot={ props.fillDot }\n rounded={ props.rounded }\n v-slots={{ default: slots.icon }}\n />\n\n { timeline.density.value !== 'compact' && (\n <div class=\"v-timeline-item__opposite\">\n { !props.hideOpposite && slots.opposite?.() }\n </div>\n ) }\n </div>\n )\n },\n})\n","// Styles\nimport './VTimeline.sass'\n\n// Components\nimport { VTimelineItem } from './VTimelineItem'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Helpers\nimport { computed, provide, toRef } from 'vue'\nimport { convertToUnit, defineComponent } from '@/util'\nimport { VTimelineSymbol } from './shared'\n\n// Types\nimport type { Prop } from 'vue'\n\nexport type TimelineDirection = 'vertical' | 'horizontal'\nexport type TimelineSide = 'before' | 'after' | undefined\n\nexport const VTimeline = defineComponent({\n name: 'VTimeline',\n\n props: {\n direction: {\n type: String,\n default: 'vertical',\n validator: (v: any) => ['vertical', 'horizontal'].includes(v),\n } as Prop<TimelineDirection>,\n side: {\n type: String,\n validator: (v: any) => v == null || ['start', 'end'].includes(v),\n } as Prop<TimelineSide>,\n lineInset: {\n type: [String, Number],\n default: 0,\n },\n lineThickness: {\n type: [String, Number],\n default: 2,\n },\n lineColor: String,\n truncateLine: {\n type: String,\n default: 'start',\n validator: (v: any) => ['none', 'start', 'end', 'both'].includes(v),\n },\n\n ...makeDensityProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { densityClasses } = useDensity(props)\n\n provide(VTimelineSymbol, {\n density: toRef(props, 'density'),\n lineColor: toRef(props, 'lineColor'),\n })\n\n const sideClass = computed(() => {\n const side = props.side ? props.side : props.density !== 'default' ? 'end' : null\n\n return side && `v-timeline--side-${side}`\n })\n\n return () => (\n <props.tag\n class={[\n 'v-timeline',\n `v-timeline--${props.direction}`,\n {\n 'v-timeline--inset-line': !!props.lineInset,\n 'v-timeline--truncate-line-end': props.truncateLine === 'end' || props.truncateLine === 'both',\n },\n themeClasses.value,\n densityClasses.value,\n sideClass.value,\n ]}\n style={{\n '--v-timeline-line-thickness': convertToUnit(props.lineThickness),\n '--v-timeline-line-inset': convertToUnit(props.lineInset || undefined),\n }}\n >\n { (props.truncateLine === 'none' || props.truncateLine === 'end') && (\n <VTimelineItem hideDot />\n ) }\n\n { slots.default?.() }\n </props.tag>\n )\n },\n})\n","// Styles\nimport './VTooltip.sass'\n\n// Components\nimport { VOverlay } from '@/components/VOverlay'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeTransitionProps } from '@/composables/transition'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent, getUid } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { OverlaySlots } from '@/components/VOverlay/VOverlay'\nimport type { StrategyProps } from '@/components/VOverlay/positionStrategies'\n\nexport const VTooltip = genericComponent<new () => {\n $slots: OverlaySlots\n}>()({\n name: 'VTooltip',\n\n inheritAttrs: false,\n\n props: {\n id: String,\n modelValue: Boolean,\n text: String,\n\n anchor: {\n type: String as PropType<StrategyProps['anchor']>,\n default: 'end',\n },\n origin: {\n type: String as PropType<StrategyProps['origin']>,\n default: 'auto',\n },\n\n ...makeTransitionProps({\n transition: false,\n } as const),\n },\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { attrs, slots }) {\n const isActive = useProxiedModel(props, 'modelValue')\n\n const uid = getUid()\n const id = computed(() => props.id || `v-tooltip-${uid}`)\n\n const anchor = computed(() => {\n return props.anchor.split(' ').length > 1\n ? props.anchor\n : props.anchor + ' center' as StrategyProps['anchor']\n })\n\n const origin = computed(() => {\n return (\n props.origin === 'auto' ||\n props.origin === 'overlap' ||\n props.origin.split(' ').length > 1 ||\n props.anchor.split(' ').length > 1\n ) ? props.origin\n : props.origin + ' center' as StrategyProps['origin']\n })\n\n const transition = computed(() => {\n if (props.transition) return props.transition\n return isActive.value ? 'scale-transition' : 'fade-transition'\n })\n\n return () => {\n return (\n <VOverlay\n v-model={ isActive.value }\n class={[\n 'v-tooltip',\n ]}\n id={ id.value }\n transition={ transition.value }\n absolute\n positionStrategy=\"connected\"\n scrollStrategy=\"reposition\"\n anchor={ anchor.value }\n origin={ origin.value }\n min-width={ 0 }\n offset={ 10 }\n scrim={ false }\n persistent\n open-on-click={ false }\n open-on-hover\n role=\"tooltip\"\n eager\n activatorProps={{\n 'aria-describedby': id.value,\n }}\n { ...attrs }\n >\n {{\n activator: slots.activator,\n default: (...args) => slots.default?.(...args) ?? props.text,\n }}\n </VOverlay>\n )\n }\n },\n})\n\nexport type VTooltip = InstanceType<typeof VTooltip>\n","// Composables\nimport { makeValidationProps, useValidation } from '@/composables/validation'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VValidation = defineComponent({\n name: 'VValidation',\n\n props: {\n ...makeValidationProps(),\n },\n\n emits: {\n 'update:modelValue': (val: any) => true,\n },\n\n setup (props, { slots }) {\n const validation = useValidation(props, 'validation')\n\n return () => slots.default?.(validation)\n },\n})\n","// Types\nimport type { DirectiveBinding, ObjectDirective } from 'vue'\nimport type { MutationOptions } from '@/composables/mutationObserver'\n\nexport interface MutationDirectiveBinding extends Omit<DirectiveBinding, 'modifiers' | 'value'> {\n value: MutationCallback | { handler: MutationCallback, options?: MutationObserverInit }\n modifiers: MutationOptions\n}\n\nfunction mounted (el: HTMLElement, binding: MutationDirectiveBinding) {\n const modifiers = binding.modifiers || {}\n const value = binding.value\n const { once, immediate, ...modifierKeys } = modifiers\n const defaultValue = !Object.keys(modifierKeys).length\n\n const { handler, options } = typeof value === 'object'\n ? value\n : {\n handler: value,\n options: {\n attributes: modifierKeys?.attr ?? defaultValue,\n characterData: modifierKeys?.char ?? defaultValue,\n childList: modifierKeys?.child ?? defaultValue,\n subtree: modifierKeys?.sub ?? defaultValue,\n },\n }\n\n const observer = new MutationObserver((\n mutations: MutationRecord[] = [],\n observer: MutationObserver\n ) => {\n handler?.(mutations, observer)\n\n if (once) unmounted(el, binding)\n })\n\n if (immediate) handler?.([], observer)\n\n el._mutate = Object(el._mutate)\n el._mutate![binding.instance!.$.uid] = { observer }\n\n observer.observe(el, options)\n}\n\nfunction unmounted (el: HTMLElement, binding: MutationDirectiveBinding) {\n if (!el._mutate?.[binding.instance!.$.uid]) return\n\n el._mutate[binding.instance!.$.uid]!.observer.disconnect()\n delete el._mutate[binding.instance!.$.uid]\n}\n\nexport const Mutate: ObjectDirective<HTMLElement> = {\n mounted,\n unmounted,\n}\n\nexport default Mutate\n","import type { DirectiveBinding } from 'vue'\n\ninterface ResizeDirectiveBinding extends Omit<DirectiveBinding, 'modifiers'> {\n value: () => void\n modifiers?: {\n active?: boolean\n quiet?: boolean\n }\n}\n\nfunction mounted (el: HTMLElement, binding: ResizeDirectiveBinding) {\n const handler = binding.value\n const options: AddEventListenerOptions = {\n passive: !binding.modifiers?.active,\n }\n\n window.addEventListener('resize', handler, options)\n\n el._onResize = Object(el._onResize)\n el._onResize![binding.instance!.$.uid] = {\n handler,\n options,\n }\n\n if (!binding.modifiers?.quiet) {\n handler()\n }\n}\n\nfunction unmounted (el: HTMLElement, binding: ResizeDirectiveBinding) {\n if (!el._onResize?.[binding.instance!.$.uid]) return\n\n const { handler, options } = el._onResize[binding.instance!.$.uid]!\n\n window.removeEventListener('resize', handler, options)\n\n delete el._onResize[binding.instance!.$.uid]\n}\n\nexport const Resize = {\n mounted,\n unmounted,\n}\n\nexport default Resize\n","import type { DirectiveBinding } from 'vue'\n\ninterface ScrollDirectiveBinding extends Omit<DirectiveBinding, 'modifiers'> {\n value: EventListener | {\n handler: EventListener\n options?: AddEventListenerOptions\n } | EventListenerObject & { options?: AddEventListenerOptions }\n modifiers?: {\n self?: boolean\n }\n}\n\nfunction mounted (el: HTMLElement, binding: ScrollDirectiveBinding) {\n const { self = false } = binding.modifiers ?? {}\n const value = binding.value\n const options = (typeof value === 'object' && value.options) || { passive: true }\n const handler = typeof value === 'function' || 'handleEvent' in value ? value : value.handler\n\n const target = self\n ? el\n : binding.arg\n ? document.querySelector(binding.arg)\n : window\n\n if (!target) return\n\n target.addEventListener('scroll', handler, options)\n\n el._onScroll = Object(el._onScroll)\n el._onScroll![binding.instance!.$.uid] = {\n handler,\n options,\n // Don't reference self\n target: self ? undefined : target,\n }\n}\n\nfunction unmounted (el: HTMLElement, binding: ScrollDirectiveBinding) {\n if (!el._onScroll?.[binding.instance!.$.uid]) return\n\n const { handler, options, target = el } = el._onScroll[binding.instance!.$.uid]!\n\n target.removeEventListener('scroll', handler, options)\n delete el._onScroll[binding.instance!.$.uid]\n}\n\nfunction updated (el: HTMLElement, binding: ScrollDirectiveBinding) {\n if (binding.value === binding.oldValue) return\n\n unmounted(el, binding)\n mounted(el, binding)\n}\n\nexport const Scroll = {\n mounted,\n unmounted,\n updated,\n}\n\nexport default Scroll\n","// Types\nimport type {\n DirectiveBinding,\n ObjectDirective,\n} from 'vue'\n\n// Utilities\nimport { keys } from '@/util'\n\nexport interface TouchHandlers {\n start?: (wrapperEvent: TouchEvent & TouchWrapper) => void\n end?: (wrapperEvent: TouchEvent & TouchWrapper) => void\n move?: (wrapperEvent: TouchEvent & TouchWrapper) => void\n left?: (wrapper: TouchWrapper) => void\n right?: (wrapper: TouchWrapper) => void\n up?: (wrapper: TouchWrapper) => void\n down?: (wrapper: TouchWrapper) => void\n}\n\nexport interface TouchWrapper extends TouchHandlers {\n touchstartX: number\n touchstartY: number\n touchmoveX: number\n touchmoveY: number\n touchendX: number\n touchendY: number\n offsetX: number\n offsetY: number\n}\n\nexport interface TouchValue extends TouchHandlers {\n parent?: boolean\n options?: AddEventListenerOptions\n}\n\nexport interface TouchStoredHandlers {\n touchstart: (e: TouchEvent) => void\n touchend: (e: TouchEvent) => void\n touchmove: (e: TouchEvent) => void\n}\n\ninterface TouchDirectiveBinding extends Omit<DirectiveBinding, 'value'> {\n value?: TouchValue\n}\n\nconst handleGesture = (wrapper: TouchWrapper) => {\n const { touchstartX, touchendX, touchstartY, touchendY } = wrapper\n const dirRatio = 0.5\n const minDistance = 16\n wrapper.offsetX = touchendX - touchstartX\n wrapper.offsetY = touchendY - touchstartY\n\n if (Math.abs(wrapper.offsetY) < dirRatio * Math.abs(wrapper.offsetX)) {\n wrapper.left && (touchendX < touchstartX - minDistance) && wrapper.left(wrapper)\n wrapper.right && (touchendX > touchstartX + minDistance) && wrapper.right(wrapper)\n }\n\n if (Math.abs(wrapper.offsetX) < dirRatio * Math.abs(wrapper.offsetY)) {\n wrapper.up && (touchendY < touchstartY - minDistance) && wrapper.up(wrapper)\n wrapper.down && (touchendY > touchstartY + minDistance) && wrapper.down(wrapper)\n }\n}\n\nfunction touchstart (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchstartX = touch.clientX\n wrapper.touchstartY = touch.clientY\n\n wrapper.start?.({ ...event, ...wrapper })\n}\n\nfunction touchend (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchendX = touch.clientX\n wrapper.touchendY = touch.clientY\n\n wrapper.end?.({ ...event, ...wrapper })\n\n handleGesture(wrapper)\n}\n\nfunction touchmove (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchmoveX = touch.clientX\n wrapper.touchmoveY = touch.clientY\n\n wrapper.move?.({ ...event, ...wrapper })\n}\n\nfunction createHandlers (value: TouchHandlers = {}): TouchStoredHandlers {\n const wrapper = {\n touchstartX: 0,\n touchstartY: 0,\n touchendX: 0,\n touchendY: 0,\n touchmoveX: 0,\n touchmoveY: 0,\n offsetX: 0,\n offsetY: 0,\n left: value.left,\n right: value.right,\n up: value.up,\n down: value.down,\n start: value.start,\n move: value.move,\n end: value.end,\n }\n\n return {\n touchstart: (e: TouchEvent) => touchstart(e, wrapper),\n touchend: (e: TouchEvent) => touchend(e, wrapper),\n touchmove: (e: TouchEvent) => touchmove(e, wrapper),\n }\n}\n\nfunction mounted (el: HTMLElement, binding: TouchDirectiveBinding) {\n const value = binding.value\n const target = value?.parent ? el.parentElement : el\n const options = value?.options ?? { passive: true }\n const uid = binding.instance?.$.uid // TODO: use custom uid generator\n\n if (!target || !uid) return\n\n const handlers = createHandlers(binding.value)\n\n target._touchHandlers = target._touchHandlers ?? Object.create(null)\n target._touchHandlers![uid] = handlers\n\n keys(handlers).forEach(eventName => {\n target.addEventListener(eventName, handlers[eventName], options)\n })\n}\n\nfunction unmounted (el: HTMLElement, binding: TouchDirectiveBinding) {\n const target = binding.value?.parent ? el.parentElement : el\n const uid = binding.instance?.$.uid\n\n if (!target?._touchHandlers || !uid) return\n\n const handlers = target._touchHandlers[uid]\n\n keys(handlers).forEach(eventName => {\n target.removeEventListener(eventName, handlers[eventName])\n })\n\n delete target._touchHandlers[uid]\n}\n\nexport const Touch: ObjectDirective = {\n mounted,\n unmounted,\n}\n\nexport default Touch\n","// Utilities\nimport { h } from 'vue'\n\n// Components\nimport { VClassIcon } from '@/composables/icons'\n\n// Types\nimport type { IconAliases, IconSet } from '@/composables/icons'\n\nconst aliases: IconAliases = {\n collapse: 'mdi-chevron-up',\n complete: 'mdi-check',\n cancel: 'mdi-close-circle',\n close: 'mdi-close',\n delete: 'mdi-close-circle', // delete (e.g. v-chip close)\n clear: 'mdi-close-circle',\n success: 'mdi-check-circle',\n info: 'mdi-information',\n warning: 'mdi-alert-circle',\n error: 'mdi-close-circle',\n prev: 'mdi-chevron-left',\n next: 'mdi-chevron-right',\n checkboxOn: 'mdi-checkbox-marked',\n checkboxOff: 'mdi-checkbox-blank-outline',\n checkboxIndeterminate: 'mdi-minus-box',\n delimiter: 'mdi-circle', // for carousel\n sort: 'mdi-arrow-up',\n expand: 'mdi-chevron-down',\n menu: 'mdi-menu',\n subgroup: 'mdi-menu-down',\n dropdown: 'mdi-menu-down',\n radioOn: 'mdi-radiobox-marked',\n radioOff: 'mdi-radiobox-blank',\n edit: 'mdi-pencil',\n ratingEmpty: 'mdi-star-outline',\n ratingFull: 'mdi-star',\n ratingHalf: 'mdi-star-half-full',\n loading: 'mdi-cached',\n first: 'mdi-page-first',\n last: 'mdi-page-last',\n unfold: 'mdi-unfold-more-horizontal',\n file: 'mdi-paperclip',\n plus: 'mdi-plus',\n minus: 'mdi-minus',\n}\n\nconst mdi: IconSet = {\n // Not using mergeProps here, functional components merge props by default (?)\n component: (props: any) => h(VClassIcon, { ...props, class: 'mdi' }),\n}\n\nexport { aliases, mdi }\n","import { createDisplay, DisplaySymbol } from '@/composables/display'\nimport { createTheme, ThemeSymbol } from '@/composables/theme'\nimport { defaultSets, IconSymbol } from '@/composables/icons'\nimport { createDefaults, DefaultsSymbol } from '@/composables/defaults'\nimport { createLocaleAdapter, LocaleAdapterSymbol } from '@/composables/locale'\nimport { createRtl, RtlSymbol } from '@/composables/rtl'\nimport { aliases, mdi } from '@/iconsets/mdi'\n\n// Utilities\nimport { reactive } from 'vue'\nimport { mergeDeep } from '@/util'\n\n// Types\nimport type { App, ComponentPublicInstance, InjectionKey } from 'vue'\nimport type { DisplayOptions } from '@/composables/display'\nimport type { ThemeOptions } from '@/composables/theme'\nimport type { IconOptions } from '@/composables/icons'\nimport type { LocaleAdapter, LocaleOptions } from '@/composables/locale'\nimport type { RtlOptions } from '@/composables/rtl'\nimport type { DefaultsOptions } from '@/composables/defaults'\n\nexport * from './composables'\n\nexport interface VuetifyOptions {\n components?: Record<string, any>\n directives?: Record<string, any>\n defaults?: DefaultsOptions\n display?: DisplayOptions\n theme?: ThemeOptions\n icons?: IconOptions\n locale?: (LocaleOptions & RtlOptions) | (LocaleAdapter & RtlOptions)\n}\n\nexport const createVuetify = (options: VuetifyOptions = {}) => {\n const install = (app: App) => {\n const {\n components = {},\n directives = {},\n icons = {},\n } = options\n\n for (const key in directives) {\n const directive = directives[key]\n\n app.directive(key, directive)\n }\n\n for (const key in components) {\n const component = components[key]\n\n app.component(key, component)\n }\n\n app.provide(DefaultsSymbol, createDefaults(options.defaults))\n app.provide(DisplaySymbol, createDisplay(options.display))\n app.provide(ThemeSymbol, createTheme(app, options.theme))\n app.provide(IconSymbol, mergeDeep({\n defaultSet: 'mdi',\n sets: {\n ...defaultSets,\n mdi,\n },\n aliases,\n }, icons))\n const { adapter, rootInstance } = createLocaleAdapter(app, options?.locale)\n app.provide(LocaleAdapterSymbol, adapter)\n app.provide(RtlSymbol, createRtl(rootInstance, options?.locale))\n\n // Vue's inject() can only be used in setup\n function inject (this: ComponentPublicInstance, key: InjectionKey<any> | string) {\n const vm = this.$\n\n const provides = vm.parent?.provides ?? vm.vnode.appContext?.provides\n\n if (provides && (key as any) in provides) {\n return provides[(key as string)]\n }\n }\n\n app.mixin({\n computed: {\n $vuetify () {\n return reactive({\n defaults: inject.call(this, DefaultsSymbol),\n display: inject.call(this, DisplaySymbol),\n theme: inject.call(this, ThemeSymbol),\n icons: inject.call(this, IconSymbol),\n locale: inject.call(this, LocaleAdapterSymbol),\n rtl: inject.call(this, RtlSymbol),\n })\n },\n },\n })\n }\n\n return { install }\n}\n","import './styles/main.sass'\nimport * as components from './components'\nimport * as directives from './directives'\nimport { createVuetify as _createVuetify } from './framework'\nimport type { VuetifyOptions } from './framework'\n\nexport const createVuetify = (options: VuetifyOptions = {}) => {\n return _createVuetify({ components, directives, ...options })\n}\n\nexport const version = __VUETIFY_VERSION__\n\nexport {\n components,\n directives,\n}\nexport * from './composables'\n"],"names":["Box","constructor","x","y","width","height","this","nullifyTransforms","el","rect","getBoundingClientRect","style","getComputedStyle","tx","transform","ta","sx","sy","dx","dy","startsWith","slice","split","to","transformOrigin","parseFloat","indexOf","w","offsetWidth","h","offsetHeight","createMessage","message","vm","parent","_isVue","$parent","$options","$_alreadyWarned","includes","push","tree","currentRecursiveSequence","length","last","map","i","repeat","Array","isArray","formatComponentName","join","generateComponentTrace","consoleWarn","newMessage","console","warn","consoleError","error","classifyRE","includeFile","$root","options","cid","name","_componentTag","file","__file","match","str","replace","c","toUpperCase","deepEqual","a","b","Date","getTime","Object","props","keys","every","p","getObjectValueByPath","obj","path","fallback","undefined","getNestedValue","createRange","start","from","v","k","convertToUnit","unit","isNaN","String","isFinite","Number","isObject","keyCodes","freeze","enter","tab","delete","esc","space","up","down","left","right","end","home","del","backspace","insert","pageup","pagedown","shift","keyValues","o","pick","paths","found","create","rest","key","some","RegExp","test","filterInputAttrs","attrs","wrapInArray","clamp","value","min","max","Math","humanReadableFileSize","bytes","base","prefix","abs","toFixed","mergeDeep","source","target","out","sourceProperty","targetProperty","getUid","_uid","flattenFragments","nodes","node","type","Fragment","children","flat","toKebabCase","toLowerCase","wrapInRef","isRef","ref","findChildren","vnode","child","filter","component","_vnode$component","subTree","CircularBuffer","size","val","_classPrivateFieldGet","values","concat","srgbForwardMatrix","srgbForwardTransform","C","srgbReverseMatrix","srgbReverseTransform","fromXYZ","xyz","rgb","matrix","round","toXYZ","r","g","delta","cielabForwardTransform","t","cbrt","cielabReverseTransform","transformedY","lab","Ln","isCssColor","color","colorToInt","TypeError","substring","char","parseInt","intToHex","hexColor","toString","colorToRGB","int","lighten","amount","CIELAB","sRGB","darken","DefaultsSymbol","Symbol","for","createDefaults","useDefaults","defaults","inject","Error","provideDefaults","injectedDefaults","providedDefaults","newDefaults","computed","scoped","unref","reset","root","properties","prev","len","Infinity","provide","propIsDefined","prop","hasOwnProperty","_vnode$props2","defineComponent","_setup","setup","ctx","getCurrentInstance","_props","shallowReactive","toRaw","watchEffect","globalDefaults","global","componentDefaults","newVal","genericComponent","exposeDefaults","_defineComponent","createSimpleFunctional","klass","tag","capitalize","camelize","default","slots","class","_slots$default","attachedRoot","getRootNode","parentNode","document","composed","standardEasing","_getCurrentInstance","getCurrentInstanceName","_getCurrentInstance$t","getScrollParent","hasScrollbar","parentElement","scrollingElement","getScrollParents","elements","nodeType","Node","ELEMENT_NODE","window","overflowY","scrollHeight","clientHeight","IS_NODE","process","IN_BROWSER","env","DEBUG","NODE_ENV","SUPPORTS_INTERSECTION","SUPPORTS_TOUCH","navigator","maxTouchPoints","SUPPORTS_FOCUS_VISIBLE","CSS","supports","propsFactory","reduce","definition","useRender","render","mainTRC","Rco","Gco","Bco","blkThrs","loConFactor","loConOffset","APCAcontrast","text","background","outputContrast","Ytxt","Ybg","SAPC","ThemeSymbol","makeThemeProps","theme","defaultThemeOptions","defaultTheme","variations","colors","themes","light","dark","surface","primary","secondary","info","success","warning","variables","createTheme","app","head","_context","provides","usehead","parsedOptions","isDisabled","entries","_defaultThemeOptions$","_defaultThemeOptions$2","parseThemeOptions","styleEl","current","computedThemes","original","genColorVariations","onColor","colorVal","blackContrast","whiteContrast","variation","fn","styles","lines","themeName","createCssClass","genCssVariables","Set","flatMap","lightOverlay","darkOverlay","selector","content","line","addHeadObjs","id","updateDOM","updateStyles","genStyleElement","innerHTML","createElement","appendChild","watch","deep","immediate","setTheme","getTheme","themeClasses","provideTheme","newTheme","VuetifyLayoutKey","makeLayoutProps","overlaps","fullHeight","Boolean","makeLayoutItemProps","priority","absolute","useLayout","layout","useLayoutItem","position","layoutSize","elementSize","active","disableTransitions","register","onBeforeUnmount","unregister","createLayout","registered","positions","Map","layoutSizes","priorities","activeItems","transitions","computedOverlaps","overlap","item","top","bottom","topPosition","get","bottomPosition","topAmount","bottomAmount","set","layers","previousLayer","layer","ids","l","generateLayers","sort","_ref3","transitionsEnabled","mainStyles","paddingLeft","paddingRight","paddingTop","paddingBottom","transition","items","index","getLayoutItem","find","findIndex","isHorizontal","isOppositeHorizontal","isOppositeVertical","marginLeft","marginRight","marginTop","marginBottom","zIndex","layoutClasses","badge","close","dataIterator","noResultsText","loadingText","dataTable","itemsPerPageText","ariaLabel","sortDescending","sortAscending","sortNone","activateNone","activateDescending","activateAscending","sortBy","dataFooter","itemsPerPageAll","nextPage","prevPage","firstPage","lastPage","pageText","datePicker","itemsSelected","nextMonthAriaLabel","nextYearAriaLabel","prevMonthAriaLabel","prevYearAriaLabel","noDataText","carousel","next","delimiter","calendar","moreEvents","fileInput","counter","counterSize","timePicker","am","pm","pagination","previous","page","currentPage","first","rating","rtl","af","ar","bg","ca","ckb","cs","de","en","es","et","fa","fi","fr","hr","hu","he","it","ja","ko","lv","lt","nl","no","pl","pt","ro","ru","sk","sl","srCyrl","srLatn","sv","th","tr","az","uk","vi","zhHans","zhHant","RtlSymbol","createRtl","localeScope","createRtlScope","isRtl","defaultRtl","rtlClasses","currentScope","provideRtl","newScope","useRtl","VApp","makeDimensionProps","maxHeight","maxWidth","minHeight","minWidth","useDimension","dimensionStyles","VResponsive","aspectRatio","contentClass","aspectStyles","ratio","useAspectStyles","additional","_slots$additional","unmounted","binding","observe","_observe","_el$_observe2","instance","$","uid","observer","unobserve","Intersect","modifiers","handler","IntersectionObserver","_el$_observe","isIntersecting","entry","quiet","init","once","makeTransitionProps","validator","MaybeTransition","Transition","customProps","mergeProps","VImg","directives","intersect","alt","cover","eager","gradient","lazySrc","rootMargin","threshold","sizes","src","srcset","emits","emit","currentSrc","image","state","naturalWidth","naturalHeight","normalisedSrc","aspect","nextTick","_image$value2","complete","onError","pollForSize","onLoad","getSrc","lazyImg","Image","img","timeout","poll","imgHeight","imgWidth","endsWith","setTimeout","onBeforeMount","containClasses","__image","sources","_slots$sources","withDirectives","vShow","__preloadImage","__placeholder","placeholder","__error","__gradient","backgroundImage","isBooted","stop","requestAnimationFrame","makeBorderProps","border","useBorder","borderClasses","classes","allowedDensities","makeDensityProps","density","useDensity","densityClasses","makeElevationProps","elevation","useElevation","elevationClasses","makeRoundedProps","rounded","useRounded","roundedClasses","makeTagProps","useColor","backgroundIsCssColor","textIsCssColor","colorClasses","colorStyles","backgroundColor","caretColor","useTextColor","textColorClasses","textColorStyles","useBackgroundColor","backgroundColorClasses","backgroundColorStyles","useProxiedModel","defaultValue","transformIn","transformOut","_vm$vnode$props2","internal","newValue","VAppBar","collapse","extensionHeight","floating","modelValue","prominent","prominentHeight","toRef","isExtended","extension","contentHeight","isActive","layoutStyles","hasImage","_slots$img","prepend","append","_slots$extension","allowedVariants","genOverlays","isClickable","makeVariantProps","textColor","variant","useVariant","variantClasses","VBtnGroup","divided","VBtn","makeGroupProps","multiple","mandatory","selectedClass","disabled","makeGroupItemProps","useGroupItem","injectKey","required","group","description","isSelected","toggle","select","useGroup","isUnmounted","reactive","selected","getIds","arr","getValues","groupVm","forceMandatoryValue","step","offset","currentId","currentIndex","newIndex","newItem","onMounted","unwrapped","cmp","splice","internalValue","_ref","VBtnToggleSymbol","VBtnToggle","predefinedSizes","makeSizeProps","useSize","sizeClasses","sizeStyles","IconSymbol","makeIconProps","icon","VComponentIcon","VSvgIcon","inheritAttrs","VLigatureIcon","VClassIcon","defaultSets","svg","VIcon","slotIcon","slot","_flattenFragments$fil","iconData","icons","iconAlias","aliases","_icons$aliases","iconSetName","sets","setName","iconName","defaultSet","useIcon","fontSize","positionValues","makePositionProps","fixed","usePosition","targets","positionClasses","positionStyles","useLink","RouterLink","resolveDynamicComponent","isLink","href","onClick","onClickOnce","link","route","makeRouterProps","useBackButton","cb","router","proxy","_getCurrentInstance$p","$router","removeGuard","popped","onPopstate","e","replaced","addEventListener","beforeEach","removeEventListener","rippleStop","webkitTransform","opacity","isTouchEvent","isKeyboardEvent","ripples","show","_ripple","_el$_ripple2","enabled","container","animation","className","radius","scale","centerX","centerY","localX","localY","touches","clientX","clientY","_el$_ripple","circle","clientWidth","center","sqrt","calculate","dataset","previousPosition","classList","add","activated","performance","now","remove","hide","_el$_ripple3","getElementsByClassName","isHiding","diff","delay","removeChild","isRippleEnabled","rippleShow","element","currentTarget","touched","isTouch","centered","showTimerCommit","showTimer","_element$_ripple","rippleHide","clearTimeout","rippleCancelShow","keyboardRipple","keyboardRippleShow","keyCode","keyboardRippleHide","focusRippleHide","updateRipple","wasEnabled","passive","removeListeners","Ripple","oldValue","prependIcon","appendIcon","block","stacked","ripple","isElevated","Tag","isExactActive","_link$isExactActive","navigate","VAppBarNavIcon","VAppBarTitle","VAvatar","allowedTypes","VAlert","borderColor","closable","closeIcon","closeLabel","sticky","tip","borderProps","variantProps","onCloseClick","hasBorder","hasClose","hasPrepend","hasText","VBadge","bordered","dot","inline","label","location","vertical","horizontal","offsetX","offsetY","calculatePosition","locationStyles","badgeAttrs","_ctx$slots$default","_ctx$slots$badge","VBannerActions","VBannerAvatar","VBannerContent","VBannerText","DisplaySymbol","defaultDisplayOptions","mobileBreakpoint","thresholds","xs","sm","md","lg","xl","xxl","getClientWidth","documentElement","innerWidth","getClientHeight","innerHeight","createDisplay","parseDisplayOptions","platform","userAgent","regexp","android","ios","cordova","electron","chrome","edge","firefox","opera","win","mac","linux","ssr","touch","getPlatform","breakpointValue","mobile","smAndUp","mdAndUp","lgAndUp","xlAndUp","smAndDown","mdAndDown","lgAndDown","xlAndDown","toRefs","useDisplay","display","VBanner","avatar","hasAvatar","hasContent","actions","VBottomNavigation","bgColor","grow","mode","VBreadcrumbsSymbol","VBreadcrumbsItem","activeClass","activeColor","breadcrumbs","VBreadcrumbsDivider","VBreadcrumbs","divider","array","_slots$item","VCardActions","VCardAvatar","VCardHeader","VCardHeaderText","VCardImg","VCardSubtitle","VCardText","VCardTitle","VCard","appendAvatar","hover","prependAvatar","subtitle","title","hasTitle","hasSubtitle","hasHeaderText","hasAppend","hasHeader","_slots$image","media","_slots$media","createCssTransition","origin","hideOnLeave","leaveAbsolute","TransitionGroup","onBeforeEnter","onLeave","offsetTop","offsetLeft","_transitionInitialStyles","setProperty","onAfterLeave","createJavascriptTransition","functions","expandedParentClass","sizeProperty","offsetProperty","_parent","_initialStyle","overflow","onEnter","initialStyle","onAfterEnter","resetStyles","onEnterCancelled","onLeaveCancelled","VDialogTransition","pointerEvents","done","Promise","resolve","getDimensions","animate","duration","easing","finished","then","removeProperty","onBeforeLeave","targetBox","elBox","originX","originY","anchorSide","anchorOffset","getPropertyValue","VCarouselTransition","VCarouselReverseTransition","VTabTransition","VTabReverseTransition","VMenuTransition","VFabTransition","VDialogBottomTransition","VDialogTopTransition","VFadeTransition","VScaleTransition","VScrollXTransition","VScrollXReverseTransition","VScrollYTransition","VScrollYReverseTransition","VSlideXTransition","VSlideXReverseTransition","VSlideYTransition","VSlideYReverseTransition","VExpandTransition","ExpandTransitionGenerator","VExpandXTransition","VMessages","messages","FormKey","makeFormProps","fastFail","lazyValidation","readonly","useForm","makeValidationProps","errorMessages","maxErrors","rules","useValidation","model","form","isPristine","isReadonly","isValid","_props$errorMessages","isValidating","validationClasses","resetValidation","validate","results","rule","result","makeVInputProps","hideDetails","hint","persistentHint","direction","VInput","focused","isFocused","slotProps","hasHint","hasMessages","_props$messages","hasDetails","showMessages","_slots$prepend","_slots$append","details","_slots$details","filterInputProps","VLabel","VSelectionControlGroupSymbol","VSelectionControlGroup","falseIcon","trueIcon","makeSelectionControlProps","trueValue","falseValue","valueComparator","Function","VSelectionControl","isMultiple","currentValue","useSelectionControl","isFocusVisible","input","onFocus","matches","onBlur","_slots$input","filterControlProps","VCheckbox","indeterminate","indeterminateIcon","onChange","inputAttrs","controlAttrs","inputProps","_1","controlProps","_2","_ref2","VChip","draggable","filterIcon","pill","_slots$default2","VCode","VCounter","functional","VDefaultsProvider","makeDelayProps","closeDelay","openDelay","useDelay","delays","runDelayFactory","runCloseDelay","runOpenDelay","makeActivatorProps","activator","activatorProps","openOnClick","openOnHover","openOnFocus","useActivator","activatorEl","isHovered","availableEvents","stopPropagation","activatorEvents","events","click","mouseenter","mouseleave","focus","blur","scope","effectScope","run","bindActivatorProps","getActivator","forEach","removeAttribute","setAttribute","unbindActivatorProps","oldVal","onScopeDispose","_vm$proxy","$el","_vm$proxy$$el","querySelector","_useActivator","flush","parseAnchor","anchor","side","align","oppositeAnchor","physicalAnchor","elementToViewport","point","anchorToPoint","box","positionStrategies","static","connected","data","contentStyles","activatorFixed","offsetParent","isFixedPosition","assign","preferredAnchor","preferredOrigin","doesOverlap","configuredMaxHeight","configuredMinWidth","ResizeObserver","updatePosition","scrollParent","contentEl","viewportWidth","viewportHeight","contentBox","scrollables","querySelectorAll","scrollLeft","scrollTop","initialMaxWidth","initialMaxHeight","scrollTo","freeSpace","fitsY","viewportMargin","floor","targetPoint","contentPoint","disconnect","makePositionStrategyProps","positionStrategy","clean","frames","raf","cancelAnimationFrame","frame","scrollStrategies","bindScroll","scrollElements","contains","scrollbarWidth","scrollableParent","reposition","slow","update","time","makeScrollStrategyProps","scrollStrategy","onScroll","useTeleport","teleportTarget","_target","targetElement","body","cache","has","WeakMap","makeLazyProps","useLazy","stack","defaultConditional","checkEvent","checkIsActive","ShadowRoot","host","include","closeConditional","handleShadow","callback","ClickOutside","mounted","_clickOutside","lastMousedownWasOutside","directive","onMousedown","_el$_clickOutside","Scrim","VOverlay","attach","contained","noClickAnimation","persistent","scrim","scrimColor","isTop","idx","useStack","onResize","async","_props$positionStrate","_positionStrategies$p","usePositionStrategies","onClickOutside","animateClick","onKeydown","useScrollStrategies","_slots$activator","toHandlers","VDialog","fullscreen","retainFocus","scrollable","overlay","onFocusin","before","relatedTarget","after","_overlay$value","focusable","hasAttribute","firstElement","lastElement","preventScroll","VDivider","inset","thickness","dividerStyles","role","VExpansionPanelSymbol","VExpansionPanels","variantClass","makeVExpansionPanelTitleProps","expandIcon","collapseIcon","hideActions","VExpansionPanelTitle","expansionPanel","expanded","VExpansionPanelText","VExpansionPanel","groupItem","isBeforeSelected","isAfterSelected","VFieldLabel","useIntersectionObserver","intersectionRef","VProgressLinear","bgOpacity","bufferValue","clickable","reverse","stream","striped","roundedBar","progress","barColorClasses","barColorStyles","normalizedBuffer","normalizedValue","isReversed","handleClick","borderTop","bar","buffer","makeLoaderProps","loading","useLoader","loaderClasses","LoaderSlot","useFocus","makeVFieldProps","appendInnerIcon","clearable","clearIcon","persistentClear","prependInnerIcon","singleLine","VField","labelRef","floatingLabelRef","controlRef","hasLabel","targetEl","targetRect","targetWidth","transitionDuration","visibility","activeElement","preventDefault","isOutlined","prependInner","hasClear","clear","appendInner","loader","_slots$prependInner","_slots$appendInner","filterFieldProps","LocaleAdapterSymbol","VuetifyLocaleSymbol","useLocale","adapter","getScope","createLocaleAdapter","createScope","createTranslateFunction","n","createNumberFunction","createRoot","rootScope","defaultLocale","fallbackLocale","locale","createDefaultLocaleAdapter","rootInstance","LANG_PREFIX","params","shortKey","currentLocale","Intl","NumberFormat","format","VFileInput","chips","counterSizeString","counterString","showSize","files","internalDirty","isDirty","_model$value","totalBytes","totalBytesReadable","fileNames","counterValue","fileCount","_model$value4","inputRef","hasCounter","rootAttrs","fieldProps","_","fieldClass","selection","VFooter","VForm","submit","valid","itemErrorMessages","createForm","formRef","onReset","onSubmit","VContainer","fluid","breakpoints","breakpointProps","offsetProps","orderProps","propMap","col","order","breakpointClass","VCol","cols","alignSelf","hasColClasses","ALIGNMENT","makeRowProps","def","alignValidator","alignProps","justifyValidator","justifyProps","alignContentValidator","alignContentProps","justify","alignContent","classMap","VRow","dense","noGutters","VSpacer","VHover","onMouseenter","onMouseleave","VItemGroupSymbol","VItemGroup","VItem","VKbd","VLayout","VLayoutItem","VLazy","onIntersect","VListSubheader","singleOpenStrategy","opened","parents","newOpened","multipleOpenStrategy","independentSelectStrategy","in","leafSelectStrategy","single","strategy","classicSelectStrategy","childrenIds","everySelected","noneSelected","classicActiveStrategy","newActive","VNestedSymbol","emptyNested","open","activate","selectedValues","makeNestedProps","selectStrategy","openStrategy","activeStrategy","VListGroupItems","createList","VListGroup","isOpen","isIndeterminate","useNestedGroup","list","useList","headerProps","header","_slots$header","VListItemAvatar","VListItemHeader","VListItemSubtitle","VListItemTitle","VListItem","isNestedActive","computedId","useNestedItem","updateHasPrepend","VListChildren","_props$items","externalHeader","ListKey","VList","nav","subheader","nested","parentId","isGroup","event","newSelected","useNested","VListImg","VListItemMedia","VLocaleProvider","localeInstance","provideLocale","VMain","ssrBootStyles","useSsrBoot","VMenu","disableKeys","kineticEnergyToVelocity","work","calculateImpulseVelocity","samples","d","vprev","vcurr","useVelocity","addMovement","changedTouches","identifier","timeStamp","endTouch","getVelocity","_touches$id","newest","absX","absY","oops","VNavigationDrawer","disableResizeWatcher","expandOnHover","permanent","rail","railWidth","temporary","touchless","isHovering","isTemporary","rootEl","isDragging","dragProgress","dragStyles","onTouchstart","onTouchmove","onTouchend","maybeDragging","getOffset","pos","getProgress","limit","touchX","touchY","inTouchZone","inElement","cancelable","velocity","vx","vy","thresholdMet","useTouch","VNoSsr","_vm$root","appContext","_vm$root$appContext","_vm$root$appContext$a","_container","__vue_app__","useHydration","VPagination","totalVisible","firstIcon","prevIcon","nextIcon","lastIcon","pageAriaLabel","currentPageAriaLabel","firstAriaLabel","previousAriaLabel","nextAriaLabel","lastAriaLabel","ellipsis","showFirstLastPage","maxButtons","resizeRef","contentRect","contentBoxSize","borderBoxSize","useResizeObserver","firstItem","totalWidth","itemWidth","range","middle","ceil","rangeLength","rangeStart","setValue","refs","updateRef","onBeforeUpdate","useRefs","sharedProps","ariaCurrent","controls","prevDisabled","nextDisabled","ariaDisabled","updateFocus","VParallax","_root$value","_root$value2","scrollPos","scrollY","translate","sign","VProgressCircular","rotate","CIRCUMFERENCE","PI","underlayColorClasses","underlayColorStyles","diameter","strokeWidth","strokeDashOffset","VRadio","VRadioGroup","VSliderSymbol","makeSliderProps","thumbColor","thumbLabel","thumbSize","showTicks","showTickLabels","ticks","tickSize","trackColor","trackFillColor","trackSize","useSlider","handleSliderMouseUp","handleMouseMove","getActiveThumb","horizontalDirection","hd","decimals","trimmedStep","trim","numTicks","mousePressed","startOffset","trackContainerRef","roundValue","clamped","parseMouseMove","trackStart","trackLength","_trackContainerRef$va","clickOffset","getPosition","clickPos","thumbMoved","handleStop","handleStart","activeThumb","moveListenerOptions","capture","onMouseMove","onSliderMouseUp","onSliderTouchend","percentage","parsedTicks","hasLabels","onSliderMousedown","onSliderTouchstart","VSliderThumb","slider","relevantKeys","multipliers","_step","steps","multiplier","shiftKey","ctrlKey","parseKeydown","positionPercentage","_slots$thumbLabel2","VSliderTrack","trackFillColorClasses","trackFillColorStyles","trackColorClasses","trackColorStyles","startDir","endDir","backgroundStyles","trackFillWidth","trackFillStyles","computedTicks","tick","directionProperty","_slots$tickLabel2","VRangeSlider","startThumbRef","stopThumbRef","focusedThumb","canSwitch","stopOffset","_startThumbRef$value","_stopThumbRef$value","trackStop","_stopThumbRef$value2","_startThumbRef$value2","VRating","itemAriaLabel","emptyIcon","fullIcon","halfIncrements","itemLabels","itemLabelPosition","increments","hoverIndex","focusIndex","firstRef","isClicking","itemState","isFilled","eventState","onMouseup","VRatingItem","showStar","btnProps","_itemState$value$inde","_itemState$value$inde2","_props$itemLabels","_props$itemLabels2","VSheet","VSlider","thumbContainerRef","_thumbContainerRef$va","VSwitch","loaderColor","control","VSystemBar","lightsOut","VTable","fixedHeader","fixedFooter","_slots$top","_slots$bottom","VTextarea","autoGrow","autofocus","persistentPlaceholder","persistentCounter","noResize","rows","maxRows","suffix","controlHeight","maxlength","sizerRef","calculateInputHeight","padding","lineHeight","showPlaceholder","_ref4","dirtyTypes","VTextField","vInputRef","vFieldRef","Proxy","Reflect","getOwnPropertyDescriptor","useForwardRef","VThemeProvider","withBackground","VTimelineSymbol","VTimelineDivider","hideDot","lineColor","iconColor","fillDot","dotColor","timeline","lineColorStyles","lineColorClasses","VTimelineItem","hideOpposite","dotSize","dotRef","_newValue$$el$querySe2","opposite","_slots$opposite","VTimeline","lineInset","lineThickness","truncateLine","sideClass","VTooltip","args","VValidation","validation","_mutate","_el$_mutate","Mutate","modifierKeys","attributes","attr","characterData","childList","subtree","sub","MutationObserver","mutations","Resize","_binding$modifiers","_onResize","_binding$modifiers2","_el$_onResize","self","arg","_onScroll","_el$_onScroll","Scroll","updated","touchstart","wrapper","touchstartX","touchstartY","touchend","touchendX","touchendY","handleGesture","touchmove","touchmoveX","touchmoveY","move","Touch","_binding$instance","handlers","createHandlers","_touchHandlers","eventName","_binding$instance2","cancel","checkboxOn","checkboxOff","checkboxIndeterminate","expand","menu","subgroup","dropdown","radioOn","radioOff","edit","ratingEmpty","ratingFull","ratingHalf","unfold","plus","minus","mdi","createVuetify","install","components","_vm$parent","_vm$vnode$appContext","mixin","$vuetify","call","_createVuetify"],"mappings":"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"}
1
+ {"version":3,"file":"vuetify.min.js","sources":["../src/util/box.ts","../src/util/animation.ts","../src/util/console.ts","../src/util/helpers.ts","../src/util/color/transformSRGB.ts","../src/util/color/transformCIELAB.ts","../src/util/colorUtils.ts","../src/composables/defaults.ts","../src/util/defineComponent.tsx","../src/util/createSimpleFunctional.ts","../src/util/dom.ts","../src/util/easing.ts","../src/util/getCurrentInstance.ts","../src/util/getScrollParent.ts","../src/util/globals.ts","../src/util/propsFactory.ts","../src/util/useRender.ts","../src/util/color/APCA.ts","../src/composables/theme.ts","../src/composables/layout.ts","../src/locale/en.ts","../src/locale/index.ts","../src/composables/rtl.ts","../src/components/VApp/VApp.tsx","../src/composables/dimensions.ts","../src/components/VResponsive/VResponsive.tsx","../src/directives/intersect/index.ts","../src/composables/transition.ts","../src/components/VImg/VImg.tsx","../src/composables/border.ts","../src/composables/density.ts","../src/composables/elevation.ts","../src/composables/rounded.ts","../src/composables/tag.ts","../src/composables/color.ts","../src/composables/proxiedModel.ts","../src/components/VAppBar/VAppBar.tsx","../src/composables/variant.tsx","../src/components/VBtnGroup/VBtnGroup.tsx","../src/composables/group.ts","../src/components/VBtnToggle/VBtnToggle.tsx","../src/composables/size.ts","../src/composables/icons.tsx","../src/components/VIcon/VIcon.tsx","../src/composables/position.ts","../src/composables/router.tsx","../src/directives/ripple/index.ts","../src/components/VBtn/VBtn.tsx","../src/components/VAppBar/VAppBarNavIcon.tsx","../src/components/VAppBar/VAppBarTitle.tsx","../src/components/VAvatar/VAvatar.tsx","../src/components/VAlert/VAlert.tsx","../src/components/VBadge/VBadge.tsx","../src/components/VBanner/VBannerActions.ts","../src/components/VBanner/VBannerAvatar.tsx","../src/components/VBanner/VBannerContent.ts","../src/components/VBanner/VBannerText.ts","../src/composables/display.ts","../src/components/VBanner/VBanner.tsx","../src/components/VBottomNavigation/VBottomNavigation.tsx","../src/components/VBreadcrumbs/shared.ts","../src/components/VBreadcrumbs/VBreadcrumbsItem.tsx","../src/components/VBreadcrumbs/VBreadcrumbsDivider.tsx","../src/components/VBreadcrumbs/VBreadcrumbs.tsx","../src/components/VCard/VCardActions.ts","../src/components/VCard/VCardAvatar.ts","../src/components/VCard/VCardHeader.ts","../src/components/VCard/VCardHeaderText.ts","../src/components/VCard/VCardImg.ts","../src/components/VCard/VCardSubtitle.ts","../src/components/VCard/VCardText.ts","../src/components/VCard/VCardTitle.ts","../src/components/VCard/VCard.tsx","../src/components/transitions/createTransition.ts","../src/components/transitions/expand-transition.ts","../src/components/transitions/dialog-transition.tsx","../src/components/transitions/index.ts","../src/components/VMessages/VMessages.tsx","../src/composables/form.ts","../src/composables/validation.ts","../src/components/VInput/VInput.tsx","../src/components/VLabel/VLabel.tsx","../src/components/VSelectionControlGroup/VSelectionControlGroup.tsx","../src/components/VSelectionControl/VSelectionControl.tsx","../src/components/VCheckbox/VCheckbox.tsx","../src/components/VChip/VChip.tsx","../src/components/VCode/index.ts","../src/components/VCounter/VCounter.tsx","../src/components/VDefaultsProvider/VDefaultsProvider.tsx","../src/composables/delay.ts","../src/components/VOverlay/useActivator.tsx","../src/components/VOverlay/util/anchor.ts","../src/components/VOverlay/util/point.ts","../src/components/VOverlay/positionStrategies.ts","../src/util/isFixedPosition.ts","../src/components/VOverlay/requestNewFrame.ts","../src/components/VOverlay/scrollStrategies.ts","../src/composables/teleport.ts","../src/composables/lazy.ts","../src/composables/stack.ts","../src/directives/click-outside/index.ts","../src/components/VOverlay/VOverlay.tsx","../src/components/VDialog/VDialog.tsx","../src/components/VDivider/VDivider.tsx","../src/components/VExpansionPanel/VExpansionPanels.tsx","../src/components/VExpansionPanel/VExpansionPanelTitle.tsx","../src/components/VExpansionPanel/VExpansionPanelText.tsx","../src/components/VExpansionPanel/VExpansionPanel.tsx","../src/components/VField/VFieldLabel.tsx","../src/composables/intersectionObserver.ts","../src/components/VProgressLinear/VProgressLinear.tsx","../src/composables/loader.tsx","../src/composables/focus.ts","../src/components/VField/VField.tsx","../src/composables/locale.ts","../src/components/VFileInput/VFileInput.tsx","../src/components/VFooter/VFooter.tsx","../src/components/VForm/VForm.tsx","../src/components/VGrid/VContainer.tsx","../src/components/VGrid/VCol.ts","../src/components/VGrid/VRow.ts","../src/components/VGrid/VSpacer.ts","../src/components/VHover/VHover.tsx","../src/components/VItemGroup/VItemGroup.tsx","../src/components/VItemGroup/VItem.tsx","../src/components/VKbd/index.ts","../src/components/VLayout/VLayout.tsx","../src/components/VLayout/VLayoutItem.tsx","../src/components/VLazy/VLazy.tsx","../src/components/VList/VListSubheader.tsx","../src/composables/nested/openStrategies.ts","../src/composables/nested/selectStrategies.ts","../src/composables/nested/activeStrategies.ts","../src/composables/nested/nested.ts","../src/components/VList/VListGroup.tsx","../src/components/VList/VListItemAvatar.tsx","../src/components/VList/VListItemHeader.ts","../src/components/VList/VListItemSubtitle.ts","../src/components/VList/VListItemTitle.ts","../src/components/VList/VListItem.tsx","../src/components/VList/VListChildren.tsx","../src/components/VList/VList.tsx","../src/components/VList/VListImg.ts","../src/components/VList/VListItemMedia.tsx","../src/components/VLocaleProvider/VLocaleProvider.tsx","../src/components/VMain/VMain.tsx","../src/composables/ssrBoot.ts","../src/components/VMenu/VMenu.tsx","../src/composables/touch.ts","../src/components/VNavigationDrawer/touch.ts","../src/components/VNavigationDrawer/VNavigationDrawer.tsx","../src/components/VNoSsr/VNoSsr.tsx","../src/composables/hydration.ts","../src/components/VPagination/VPagination.tsx","../src/composables/resizeObserver.ts","../src/composables/refs.ts","../src/components/VParallax/VParallax.tsx","../src/components/VProgressCircular/VProgressCircular.tsx","../src/components/VRadio/VRadio.tsx","../src/components/VRadioGroup/VRadioGroup.tsx","../src/components/VSlider/slider.ts","../src/components/VSlider/VSliderThumb.tsx","../src/components/VSlider/VSliderTrack.tsx","../src/components/VRangeSlider/VRangeSlider.tsx","../src/components/VRating/VRating.tsx","../src/components/VSheet/VSheet.tsx","../src/components/VSlider/VSlider.tsx","../src/components/VSwitch/VSwitch.tsx","../src/components/VSystemBar/VSystemBar.tsx","../src/components/VTable/VTable.tsx","../src/components/VTextarea/VTextarea.tsx","../src/components/VTextField/VTextField.tsx","../src/composables/forwardRef.ts","../src/components/VThemeProvider/VThemeProvider.tsx","../src/components/VTimeline/shared.ts","../src/components/VTimeline/VTimelineDivider.tsx","../src/components/VTimeline/VTimelineItem.tsx","../src/components/VTimeline/VTimeline.tsx","../src/components/VTooltip/VTooltip.tsx","../src/components/VValidation/VValidation.tsx","../src/directives/mutate/index.ts","../src/directives/resize/index.ts","../src/directives/scroll/index.ts","../src/directives/touch/index.ts","../src/iconsets/mdi.ts","../src/framework.ts","../src/entry-bundler.ts"],"sourcesContent":["export class Box {\n x: number\n y: number\n width: number\n height: number\n\n constructor ({ x, y, width, height }: {\n x: number\n y: number\n width: number\n height: number\n }) {\n this.x = x\n this.y = y\n this.width = width\n this.height = height\n }\n\n get top () { return this.y }\n get bottom () { return this.y + this.height }\n get left () { return this.x }\n get right () { return this.x + this.width }\n}\n","import { Box } from '@/util/box'\n\n/** @see https://stackoverflow.com/a/57876601/2074736 */\nexport function nullifyTransforms (el: HTMLElement): Box {\n const rect = el.getBoundingClientRect()\n const style = getComputedStyle(el)\n const tx = style.transform\n\n if (tx) {\n let ta, sx, sy, dx, dy\n if (tx.startsWith('matrix3d(')) {\n ta = tx.slice(9, -1).split(/, /)\n sx = +ta[0]\n sy = +ta[5]\n dx = +ta[12]\n dy = +ta[13]\n } else if (tx.startsWith('matrix(')) {\n ta = tx.slice(7, -1).split(/, /)\n sx = +ta[0]\n sy = +ta[3]\n dx = +ta[4]\n dy = +ta[5]\n } else {\n return new Box(rect)\n }\n\n const to = style.transformOrigin\n const x = rect.x - dx - (1 - sx) * parseFloat(to)\n const y = rect.y - dy - (1 - sy) * parseFloat(to.slice(to.indexOf(' ') + 1))\n const w = sx ? rect.width / sx : el.offsetWidth\n const h = sy ? rect.height / sy : el.offsetHeight\n\n return new Box({ x, y, width: w, height: h })\n } else {\n return new Box(rect)\n }\n}\n","/* eslint-disable no-console */\n// import Vuetify from '../framework'\n\nfunction createMessage (message: string, vm?: any, parent?: any): string | void {\n // if (Vuetify.config.silent) return\n\n if (parent) {\n vm = {\n _isVue: true,\n $parent: parent,\n $options: vm,\n }\n }\n\n if (vm) {\n // Only show each message once per instance\n vm.$_alreadyWarned = vm.$_alreadyWarned || []\n if (vm.$_alreadyWarned.includes(message)) return\n vm.$_alreadyWarned.push(message)\n }\n\n return `[Vuetify] ${message}` + (\n vm ? generateComponentTrace(vm) : ''\n )\n}\n\nexport function consoleInfo (message: string, vm?: any, parent?: any): void {\n const newMessage = createMessage(message, vm, parent)\n newMessage != null && console.info(newMessage)\n}\n\nexport function consoleWarn (message: string, vm?: any, parent?: any): void {\n const newMessage = createMessage(message, vm, parent)\n newMessage != null && console.warn(newMessage)\n}\n\nexport function consoleError (message: string, vm?: any, parent?: any): void {\n const newMessage = createMessage(message, vm, parent)\n newMessage != null && console.error(newMessage)\n}\n\nexport function deprecate (original: string, replacement: string, vm?: any, parent?: any) {\n consoleWarn(`[UPGRADE] '${original}' is deprecated, use '${replacement}' instead.`, vm, parent)\n}\nexport function breaking (original: string, replacement: string, vm?: any, parent?: any) {\n consoleError(`[BREAKING] '${original}' has been removed, use '${replacement}' instead. For more information, see the upgrade guide https://github.com/vuetifyjs/vuetify/releases/tag/v2.0.0#user-content-upgrade-guide`, vm, parent)\n}\nexport function removed (original: string, vm?: any, parent?: any) {\n consoleWarn(`[REMOVED] '${original}' has been removed. You can safely omit it.`, vm, parent)\n}\n\n/**\n * Shamelessly stolen from vuejs/vue/blob/dev/src/core/util/debug.js\n */\n\nconst classifyRE = /(?:^|[-_])(\\w)/g\nconst classify = (str: string) => str\n .replace(classifyRE, c => c.toUpperCase())\n .replace(/[-_]/g, '')\n\nfunction formatComponentName (vm: any, includeFile?: boolean): string {\n if (vm.$root === vm) {\n return '<Root>'\n }\n const options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options || vm.constructor.options\n : vm || {}\n let name = options.name || options._componentTag\n const file = options.__file\n if (!name && file) {\n const match = file.match(/([^/\\\\]+)\\.vue$/)\n name = match?.[1]\n }\n\n return (\n (name ? `<${classify(name)}>` : `<Anonymous>`) +\n (file && includeFile !== false ? ` at ${file}` : '')\n )\n}\n\nfunction generateComponentTrace (vm: any): string {\n if (vm._isVue && vm.$parent) {\n const tree: any[] = []\n let currentRecursiveSequence = 0\n while (vm) {\n if (tree.length > 0) {\n const last: any = tree[tree.length - 1]\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++\n vm = vm.$parent\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence]\n currentRecursiveSequence = 0\n }\n }\n tree.push(vm)\n vm = vm.$parent\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map((vm, i) => `${\n i === 0 ? '---> ' : ' '.repeat(5 + i * 2)\n }${\n Array.isArray(vm)\n // eslint-disable-next-line sonarjs/no-nested-template-literals\n ? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)`\n : formatComponentName(vm)\n }`)\n .join('\\n')\n } else {\n return `\\n\\n(found in ${formatComponentName(vm)})`\n }\n}\n","// Utilities\nimport { camelize, Fragment, isRef, ref } from 'vue'\n\n// Types\nimport type { ComponentInternalInstance, ComponentPublicInstance, Ref, Slots, VNode, VNodeChild } from 'vue'\n\nexport function getNestedValue (obj: any, path: (string | number)[], fallback?: any): any {\n const last = path.length - 1\n\n if (last < 0) return obj === undefined ? fallback : obj\n\n for (let i = 0; i < last; i++) {\n if (obj == null) {\n return fallback\n }\n obj = obj[path[i]]\n }\n\n if (obj == null) return fallback\n\n return obj[path[last]] === undefined ? fallback : obj[path[last]]\n}\n\nexport function deepEqual (a: any, b: any): boolean {\n if (a === b) return true\n\n if (\n a instanceof Date &&\n b instanceof Date &&\n a.getTime() !== b.getTime()\n ) {\n // If the values are Date, compare them as timestamps\n return false\n }\n\n if (a !== Object(a) || b !== Object(b)) {\n // If the values aren't objects, they were already checked for equality\n return false\n }\n\n const props = Object.keys(a)\n\n if (props.length !== Object.keys(b).length) {\n // Different number of props, don't bother to check\n return false\n }\n\n return props.every(p => deepEqual(a[p], b[p]))\n}\n\nexport function getObjectValueByPath (obj: any, path: string, fallback?: any): any {\n // credit: http://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-with-string-key#comment55278413_6491621\n if (obj == null || !path || typeof path !== 'string') return fallback\n if (obj[path] !== undefined) return obj[path]\n path = path.replace(/\\[(\\w+)\\]/g, '.$1') // convert indexes to properties\n path = path.replace(/^\\./, '') // strip a leading dot\n return getNestedValue(obj, path.split('.'), fallback)\n}\n\ntype SelectItemKey = string | (string | number)[] | ((item: Record<string, any>, fallback?: any) => any)\n\nexport function getPropertyFromItem (\n item: object,\n property: SelectItemKey,\n fallback?: any\n): any {\n if (property == null) return item === undefined ? fallback : item\n\n if (item !== Object(item)) return fallback === undefined ? item : fallback\n\n if (typeof property === 'string') return getObjectValueByPath(item, property, fallback)\n\n if (Array.isArray(property)) return getNestedValue(item, property, fallback)\n\n if (typeof property !== 'function') return fallback\n\n const value = property(item, fallback)\n\n return typeof value === 'undefined' ? fallback : value\n}\n\nexport function createRange (length: number, start = 0): number[] {\n return Array.from({ length }, (v, k) => start + k)\n}\n\nexport function getZIndex (el?: Element | null): number {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return 0\n\n const index = +window.getComputedStyle(el).getPropertyValue('z-index')\n\n if (!index) return getZIndex(el.parentNode as Element)\n return index\n}\n\nconst tagsToReplace: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n}\n\nexport function escapeHTML (str: string): string {\n return str.replace(/[&<>]/g, tag => tagsToReplace[tag] || tag)\n}\n\nexport function filterObjectOnKeys<T, K extends keyof T> (obj: T, keys: K[]): { [N in K]: T[N] } {\n const filtered = {} as { [N in K]: T[N] }\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (typeof obj[key] !== 'undefined') {\n filtered[key] = obj[key]\n }\n }\n\n return filtered\n}\n\nexport function convertToUnit (str: number, unit?: string): string\nexport function convertToUnit (str: string | number | null | undefined, unit?: string): string | undefined\nexport function convertToUnit (str: string | number | null | undefined, unit = 'px'): string | undefined {\n if (str == null || str === '') {\n return undefined\n } else if (isNaN(+str!)) {\n return String(str)\n } else if (!isFinite(+str!)) {\n return undefined\n } else {\n return `${Number(str)}${unit}`\n }\n}\n\nexport function isObject (obj: any): obj is object {\n return obj !== null && typeof obj === 'object' && !Array.isArray(obj)\n}\n\nexport function isComponentInstance (obj: any): obj is ComponentPublicInstance {\n return obj?.$el\n}\n\n// KeyboardEvent.keyCode aliases\nexport const keyCodes = Object.freeze({\n enter: 13,\n tab: 9,\n delete: 46,\n esc: 27,\n space: 32,\n up: 38,\n down: 40,\n left: 37,\n right: 39,\n end: 35,\n home: 36,\n del: 46,\n backspace: 8,\n insert: 45,\n pageup: 33,\n pagedown: 34,\n shift: 16,\n})\n\nexport const keyValues = Object.freeze({\n enter: 'Enter',\n tab: 'Tab',\n delete: 'Delete',\n esc: 'Escape',\n space: 'Space',\n up: 'ArrowUp',\n down: 'ArrowDown',\n left: 'ArrowLeft',\n right: 'ArrowRight',\n end: 'End',\n home: 'Home',\n del: 'Delete',\n backspace: 'Backspace',\n insert: 'Insert',\n pageup: 'PageUp',\n pagedown: 'PageDown',\n shift: 'Shift',\n})\n\nexport function keys<O> (o: O) {\n return Object.keys(o) as (keyof O)[]\n}\n\ntype MaybePick<\n T extends object,\n U extends Extract<keyof T, string>\n> = Record<string, unknown> extends T ? Partial<Pick<T, U>> : Pick<T, U>\n\nexport function pick<\n T extends object,\n U extends Extract<keyof T, string>\n> (obj: T, paths: U[]): [yes: MaybePick<T, U>, no: Omit<T, U>]\nexport function pick<\n T extends object,\n U extends Extract<keyof T, string>\n> (obj: T, paths: (U | RegExp)[]): [yes: Partial<T>, no: Partial<T>]\nexport function pick<\n T extends object,\n U extends Extract<keyof T, string>\n> (obj: T, paths: (U | RegExp)[]): [yes: Partial<T>, no: Partial<T>] {\n const found = Object.create(null)\n const rest = Object.create(null)\n\n for (const key in obj) {\n if (\n paths.some(path => path instanceof RegExp\n ? path.test(key)\n : path === key\n )\n ) {\n found[key] = obj[key]\n } else {\n rest[key] = obj[key]\n }\n }\n\n return [found, rest]\n}\n\n/**\n * Filter attributes that should be applied to\n * the root element of a an input component. Remaining\n * attributes should be passed to the <input> element inside.\n */\nexport function filterInputAttrs (attrs: Record<string, unknown>) {\n return pick(attrs, ['class', 'style', 'id', /^data-/])\n}\n\n/**\n * Returns the set difference of B and A, i.e. the set of elements in B but not in A\n */\nexport function arrayDiff (a: any[], b: any[]): any[] {\n const diff: any[] = []\n for (let i = 0; i < b.length; i++) {\n if (!a.includes(b[i])) diff.push(b[i])\n }\n return diff\n}\n\ninterface ItemGroup<T> {\n name: string\n items: T[]\n}\n\nexport function groupItems<T extends any = any> (\n items: T[],\n groupBy: string[],\n groupDesc: boolean[]\n): ItemGroup<T>[] {\n const key = groupBy[0]\n const groups: ItemGroup<T>[] = []\n let current\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const val = getObjectValueByPath(item, key, null)\n if (current !== val) {\n current = val\n groups.push({\n name: val ?? '',\n items: [],\n })\n }\n groups[groups.length - 1].items.push(item)\n }\n return groups\n}\n\nexport function wrapInArray<T> (v: T | T[] | null | undefined): T[] {\n return v == null\n ? []\n : Array.isArray(v)\n ? v : [v]\n}\n\ntype DataTableCompareFunction<T = any> = (a: T, b: T) => number\nexport function sortItems<T extends any, K extends keyof T> (\n items: T[],\n sortBy: string[],\n sortDesc: boolean[],\n locale: string,\n customSorters?: Record<K, DataTableCompareFunction<T[K]>>\n): T[] {\n if (sortBy === null || !sortBy.length) return items\n const stringCollator = new Intl.Collator(locale, { sensitivity: 'accent', usage: 'sort' })\n\n return items.sort((a, b) => {\n for (let i = 0; i < sortBy.length; i++) {\n const sortKey = sortBy[i]\n\n let sortA = getObjectValueByPath(a, sortKey)\n let sortB = getObjectValueByPath(b, sortKey)\n\n if (sortDesc[i]) {\n [sortA, sortB] = [sortB, sortA]\n }\n\n if (customSorters?.[sortKey as K]) {\n const customResult = customSorters[sortKey as K](sortA, sortB)\n\n if (!customResult) continue\n\n return customResult\n }\n\n // Check if both cannot be evaluated\n if (sortA === null && sortB === null) {\n continue\n }\n\n // Dates should be compared numerically\n if (sortA instanceof Date && sortB instanceof Date) {\n return sortA.getTime() - sortB.getTime()\n }\n\n [sortA, sortB] = [sortA, sortB].map(s => (s || '').toString().toLocaleLowerCase())\n\n if (sortA !== sortB) {\n if (!isNaN(sortA) && !isNaN(sortB)) return Number(sortA) - Number(sortB)\n return stringCollator.compare(sortA, sortB)\n }\n }\n\n return 0\n })\n}\n\nexport function defaultFilter (value: any, search: string | null, item: any) {\n return value != null &&\n search != null &&\n typeof value !== 'boolean' &&\n value.toString().toLocaleLowerCase().indexOf(search.toLocaleLowerCase()) !== -1\n}\n\nexport function searchItems<T extends any = any> (items: T[], search: string): T[] {\n if (!search) return items\n search = search.toString().toLowerCase()\n if (search.trim() === '') return items\n\n return items.filter((item: any) => Object.keys(item).some(key => defaultFilter(getObjectValueByPath(item, key), search, item)))\n}\n\nexport function debounce (fn: Function, delay: number) {\n let timeoutId = 0 as any\n return (...args: any[]) => {\n clearTimeout(timeoutId)\n timeoutId = setTimeout(() => fn(...args), delay)\n }\n}\n\nexport function throttle<T extends (...args: any[]) => any> (fn: T, limit: number) {\n let throttling = false\n return (...args: Parameters<T>): void | ReturnType<T> => {\n if (!throttling) {\n throttling = true\n setTimeout(() => throttling = false, limit)\n return fn(...args)\n }\n }\n}\n\ntype Writable<T> = {\n -readonly [P in keyof T]: T[P]\n}\n\n/**\n * Filters slots to only those starting with `prefix`, removing the prefix\n */\nexport function getPrefixedSlots (prefix: string, slots: Slots): Slots {\n return Object.keys(slots)\n .filter(k => k.startsWith(prefix))\n .reduce<Writable<Slots>>((obj, k) => {\n obj[k.replace(prefix, '')] = slots[k]\n return obj\n }, {})\n}\n\nexport function clamp (value: number, min = 0, max = 1) {\n return Math.max(min, Math.min(max, value))\n}\n\nexport function padEnd (str: string, length: number, char = '0') {\n return str + char.repeat(Math.max(0, length - str.length))\n}\n\nexport function chunk (str: string, size = 1) {\n const chunked: string[] = []\n let index = 0\n while (index < str.length) {\n chunked.push(str.substr(index, size))\n index += size\n }\n return chunked\n}\n\nexport function humanReadableFileSize (bytes: number, base: 1000 | 1024 = 1000): string {\n if (bytes < base) {\n return `${bytes} B`\n }\n\n const prefix = base === 1024 ? ['Ki', 'Mi', 'Gi'] : ['k', 'M', 'G']\n let unit = -1\n while (Math.abs(bytes) >= base && unit < prefix.length - 1) {\n bytes /= base\n ++unit\n }\n return `${bytes.toFixed(1)} ${prefix[unit]}B`\n}\n\nexport function camelizeObjectKeys (obj: Record<string, any> | null | undefined) {\n if (!obj) return {}\n\n return Object.keys(obj).reduce((o: any, key: string) => {\n o[camelize(key)] = obj[key]\n return o\n }, {})\n}\n\nexport function mergeDeep (\n source: Record<string, any> = {},\n target: Record<string, any> = {},\n out: Record<string, any> = {},\n) {\n for (const key in source) {\n out[key] = source[key]\n }\n\n for (const key in target) {\n const sourceProperty = source[key]\n const targetProperty = target[key]\n\n // Only continue deep merging if\n // both properties are objects\n if (\n isObject(sourceProperty) &&\n isObject(targetProperty)\n ) {\n out[key] = mergeDeep(sourceProperty, targetProperty)\n\n continue\n }\n\n out[key] = targetProperty\n }\n\n return out\n}\n\nexport function fillArray<T> (length: number, obj: T) {\n return Array(length).fill(obj)\n}\n\nexport function getUid () {\n return getUid._uid++\n}\ngetUid._uid = 0\n\nexport function flattenFragments (nodes: VNode[]): VNode[] {\n return nodes.map(node => {\n if (node.type === Fragment) {\n return flattenFragments(node.children as VNode[])\n } else {\n return node\n }\n }).flat()\n}\n\nexport const randomHexColor = () => {\n const n = (Math.random() * 0xfffff * 1000000).toString(16)\n return '#' + n.slice(0, 6)\n}\n\nexport function toKebabCase (str = '') {\n return str\n .replace(/[^a-z]/gi, '-')\n .replace(/\\B([A-Z])/g, '-$1')\n .toLowerCase()\n}\n\nexport type MaybeRef<T> = T | Ref<T>\n\nexport type ExtractMaybeRef<P> = P extends MaybeRef<infer T> ? T : P;\n\nexport function wrapInRef <T> (x: T) {\n return (isRef(x) ? x : ref(x)) as Ref<ExtractMaybeRef<T>>\n}\n\nexport function findChildren (vnode?: VNodeChild): ComponentInternalInstance[] {\n if (!vnode || typeof vnode !== 'object') {\n return []\n }\n\n if (Array.isArray(vnode)) {\n return vnode\n .map(child => findChildren(child))\n .filter(v => v)\n .flat(1)\n } else if (Array.isArray(vnode.children)) {\n return vnode.children\n .map(child => findChildren(child))\n .filter(v => v)\n .flat(1)\n } else if (vnode.component) {\n return [vnode.component, ...findChildren(vnode.component?.subTree)]\n .filter(v => v)\n .flat(1)\n }\n\n return []\n}\n\nexport class CircularBuffer<T = never> {\n readonly #arr: Array<T> = []\n #pointer = 0\n\n constructor (public readonly size: number) {}\n\n push (val: T) {\n this.#arr[this.#pointer] = val\n this.#pointer = (this.#pointer + 1) % this.size\n }\n\n values (): T[] {\n return this.#arr.slice(this.#pointer).concat(this.#arr.slice(0, this.#pointer))\n }\n}\n\nexport type UnionToIntersection<U> =\n (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never\n","import type { ColorInt, XYZ } from '../colorUtils'\nimport { clamp } from '../../util/helpers'\n\n// For converting XYZ to sRGB\nconst srgbForwardMatrix = [\n [3.2406, -1.5372, -0.4986],\n [-0.9689, 1.8758, 0.0415],\n [0.0557, -0.2040, 1.0570],\n]\n\n// Forward gamma adjust\nconst srgbForwardTransform = (C: number): number => (\n C <= 0.0031308\n ? C * 12.92\n : 1.055 * C ** (1 / 2.4) - 0.055\n)\n\n// For converting sRGB to XYZ\nconst srgbReverseMatrix = [\n [0.4124, 0.3576, 0.1805],\n [0.2126, 0.7152, 0.0722],\n [0.0193, 0.1192, 0.9505],\n]\n\n// Reverse gamma adjust\nconst srgbReverseTransform = (C: number): number => (\n C <= 0.04045\n ? C / 12.92\n : ((C + 0.055) / 1.055) ** 2.4\n)\n\nexport function fromXYZ (xyz: XYZ): ColorInt {\n const rgb = Array(3)\n const transform = srgbForwardTransform\n const matrix = srgbForwardMatrix\n\n // Matrix transform, then gamma adjustment\n for (let i = 0; i < 3; ++i) {\n rgb[i] = Math.round(clamp(transform(\n matrix[i][0] * xyz[0] +\n matrix[i][1] * xyz[1] +\n matrix[i][2] * xyz[2]\n )) * 255)\n }\n\n // Rescale back to [0, 255]\n return (rgb[0] << 16) + (rgb[1] << 8) + (rgb[2] << 0)\n}\n\nexport function toXYZ (rgb: ColorInt): XYZ {\n const xyz: XYZ = [0, 0, 0]\n const transform = srgbReverseTransform\n const matrix = srgbReverseMatrix\n\n // Rescale from [0, 255] to [0, 1] then adjust sRGB gamma to linear RGB\n const r = transform((rgb >> 16 & 0xff) / 255)\n const g = transform((rgb >> 8 & 0xff) / 255)\n const b = transform((rgb >> 0 & 0xff) / 255)\n\n // Matrix color space transform\n for (let i = 0; i < 3; ++i) {\n xyz[i] = matrix[i][0] * r + matrix[i][1] * g + matrix[i][2] * b\n }\n\n return xyz\n}\n","import type { LAB, XYZ } from '../colorUtils'\n\nconst delta = 0.20689655172413793 // 6÷29\n\nconst cielabForwardTransform = (t: number): number => (\n t > delta ** 3\n ? Math.cbrt(t)\n : (t / (3 * delta ** 2)) + 4 / 29\n)\n\nconst cielabReverseTransform = (t: number): number => (\n t > delta\n ? t ** 3\n : (3 * delta ** 2) * (t - 4 / 29)\n)\n\nexport function fromXYZ (xyz: XYZ): LAB {\n const transform = cielabForwardTransform\n const transformedY = transform(xyz[1])\n\n return [\n 116 * transformedY - 16,\n 500 * (transform(xyz[0] / 0.95047) - transformedY),\n 200 * (transformedY - transform(xyz[2] / 1.08883)),\n ]\n}\n\nexport function toXYZ (lab: LAB): XYZ {\n const transform = cielabReverseTransform\n const Ln = (lab[0] + 16) / 116\n return [\n transform(Ln + lab[1] / 500) * 0.95047,\n transform(Ln),\n transform(Ln - lab[2] / 200) * 1.08883,\n ]\n}\n","// Utilities\nimport { consoleWarn } from './console'\nimport { chunk, padEnd } from './helpers'\nimport * as sRGB from '@/util/color/transformSRGB'\nimport * as CIELAB from '@/util/color/transformCIELAB'\n\n// Types\nimport type { Colors } from '@/composables/theme'\n\nexport type ColorInt = number\nexport type XYZ = [number, number, number]\nexport type LAB = [number, number, number]\nexport type HSV = { h: number, s: number, v: number }\nexport type HSVA = HSV & { a: number }\nexport type RGB = { r: number, g: number, b: number }\nexport type RGBA = RGB & { a: number }\nexport type HSL = { h: number, s: number, l: number }\nexport type HSLA = HSL & { a: number }\nexport type Hex = string\nexport type Hexa = string\nexport type Color = string | number | {}\n\nexport function isCssColor (color?: string | null | false): boolean {\n return !!color && /^(#|var\\(--|(rgb|hsl)a?\\()/.test(color)\n}\n\nexport function colorToInt (color: Color): ColorInt {\n let rgb\n\n if (typeof color === 'number') {\n rgb = color\n } else if (typeof color === 'string') {\n let c = color.startsWith('#') ? color.substring(1) : color\n if (c.length === 3) {\n c = c.split('').map(char => char + char).join('')\n }\n if (c.length !== 6) {\n consoleWarn(`'${color}' is not a valid rgb color`)\n }\n rgb = parseInt(c, 16)\n } else {\n throw new TypeError(`Colors can only be numbers or strings, recieved ${color == null ? color : color.constructor.name} instead`)\n }\n\n if (rgb < 0) {\n consoleWarn(`Colors cannot be negative: '${color}'`)\n rgb = 0\n } else if (rgb > 0xffffff || isNaN(rgb)) {\n consoleWarn(`'${color}' is not a valid rgb color`)\n rgb = 0xffffff\n }\n\n return rgb\n}\n\nexport function classToHex (\n color: string,\n colors: Record<string, Record<string, string>>,\n currentTheme: Partial<Colors>,\n): string {\n const [colorName, colorModifier] = color\n .toString().trim().replace('-', '').split(' ', 2) as (string | undefined)[]\n\n let hexColor = ''\n if (colorName && colorName in colors) {\n if (colorModifier && colorModifier in colors[colorName]) {\n hexColor = colors[colorName][colorModifier]\n } else if ('base' in colors[colorName]) {\n hexColor = colors[colorName].base\n }\n } else if (colorName && colorName in currentTheme) {\n hexColor = currentTheme[colorName] as string\n }\n\n return hexColor\n}\n\nexport function intToHex (color: ColorInt): string {\n let hexColor: string = color.toString(16)\n\n if (hexColor.length < 6) hexColor = '0'.repeat(6 - hexColor.length) + hexColor\n\n return '#' + hexColor\n}\n\nexport function colorToHex (color: Color): string {\n return intToHex(colorToInt(color))\n}\n\n/**\n * Converts HSVA to RGBA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV\n *\n * @param color HSVA color as an array [0-360, 0-1, 0-1, 0-1]\n */\nexport function HSVAtoRGBA (hsva: HSVA): RGBA {\n const { h, s, v, a } = hsva\n const f = (n: number) => {\n const k = (n + (h / 60)) % 6\n return v - v * s * Math.max(Math.min(k, 4 - k, 1), 0)\n }\n\n const rgb = [f(5), f(3), f(1)].map(v => Math.round(v * 255))\n\n return { r: rgb[0], g: rgb[1], b: rgb[2], a }\n}\n\n/**\n * Converts RGBA to HSVA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV\n *\n * @param color RGBA color as an array [0-255, 0-255, 0-255, 0-1]\n */\nexport function RGBAtoHSVA (rgba: RGBA): HSVA {\n if (!rgba) return { h: 0, s: 1, v: 1, a: 1 }\n\n const r = rgba.r / 255\n const g = rgba.g / 255\n const b = rgba.b / 255\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n\n let h = 0\n\n if (max !== min) {\n if (max === r) {\n h = 60 * (0 + ((g - b) / (max - min)))\n } else if (max === g) {\n h = 60 * (2 + ((b - r) / (max - min)))\n } else if (max === b) {\n h = 60 * (4 + ((r - g) / (max - min)))\n }\n }\n\n if (h < 0) h = h + 360\n\n const s = max === 0 ? 0 : (max - min) / max\n const hsv = [h, s, max]\n\n return { h: hsv[0], s: hsv[1], v: hsv[2], a: rgba.a }\n}\n\nexport function HSVAtoHSLA (hsva: HSVA): HSLA {\n const { h, s, v, a } = hsva\n\n const l = v - (v * s / 2)\n\n const sprime = l === 1 || l === 0 ? 0 : (v - l) / Math.min(l, 1 - l)\n\n return { h, s: sprime, l, a }\n}\n\nexport function HSLAtoHSVA (hsl: HSLA): HSVA {\n const { h, s, l, a } = hsl\n\n const v = l + s * Math.min(l, 1 - l)\n\n const sprime = v === 0 ? 0 : 2 - (2 * l / v)\n\n return { h, s: sprime, v, a }\n}\n\nexport function RGBAtoCSS (rgba: RGBA): string {\n return `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`\n}\n\nexport function RGBtoCSS (rgba: RGBA): string {\n return RGBAtoCSS({ ...rgba, a: 1 })\n}\n\nexport function RGBAtoHex (rgba: RGBA): Hex {\n const toHex = (v: number) => {\n const h = Math.round(v).toString(16)\n return ('00'.substr(0, 2 - h.length) + h).toUpperCase()\n }\n\n return `#${[\n toHex(rgba.r),\n toHex(rgba.g),\n toHex(rgba.b),\n toHex(Math.round(rgba.a * 255)),\n ].join('')}`\n}\n\nexport function HexToRGBA (hex: Hex): RGBA {\n const rgba = chunk(hex.slice(1), 2).map((c: string) => parseInt(c, 16))\n\n return {\n r: rgba[0],\n g: rgba[1],\n b: rgba[2],\n a: Math.round((rgba[3] / 255) * 100) / 100,\n }\n}\n\nexport function HexToHSVA (hex: Hex): HSVA {\n const rgb = HexToRGBA(hex)\n return RGBAtoHSVA(rgb)\n}\n\nexport function HSVAtoHex (hsva: HSVA): Hex {\n return RGBAtoHex(HSVAtoRGBA(hsva))\n}\n\nexport function parseHex (hex: string): Hex {\n if (hex.startsWith('#')) {\n hex = hex.slice(1)\n }\n\n hex = hex.replace(/([^0-9a-f])/gi, 'F')\n\n if (hex.length === 3 || hex.length === 4) {\n hex = hex.split('').map(x => x + x).join('')\n }\n\n if (hex.length === 6) {\n hex = padEnd(hex, 8, 'F')\n } else {\n hex = padEnd(padEnd(hex, 6), 8, 'F')\n }\n\n return `#${hex}`.toUpperCase().substr(0, 9)\n}\n\nexport function parseGradient (\n gradient: string,\n colors: Record<string, Record<string, string>>,\n currentTheme: Partial<Colors>,\n) {\n return gradient.replace(/([a-z]+(\\s[a-z]+-[1-5])?)(?=$|,)/gi, x => {\n return classToHex(x, colors, currentTheme) || x\n }).replace(/(rgba\\()#[0-9a-f]+(?=,)/gi, x => {\n return 'rgba(' + Object.values(HexToRGBA(parseHex(x.replace(/rgba\\(/, '')))).slice(0, 3).join(',')\n })\n}\n\nexport function RGBtoInt (rgba: RGBA): ColorInt {\n return (rgba.r << 16) + (rgba.g << 8) + rgba.b\n}\n\nexport function colorToRGB (color: string) {\n const int = colorToInt(color)\n\n return {\n r: (int & 0xFF0000) >> 16,\n g: (int & 0xFF00) >> 8,\n b: (int & 0xFF),\n }\n}\n\nexport function lighten (value: ColorInt, amount: number): ColorInt {\n const lab = CIELAB.fromXYZ(sRGB.toXYZ(value))\n // TODO: why this false positive?\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n lab[0] = lab[0] + amount * 10\n\n return sRGB.fromXYZ(CIELAB.toXYZ(lab))\n}\n\nexport function darken (value: ColorInt, amount: number): ColorInt {\n const lab = CIELAB.fromXYZ(sRGB.toXYZ(value))\n lab[0] = lab[0] - amount * 10\n\n return sRGB.fromXYZ(CIELAB.toXYZ(lab))\n}\n\n/**\n * Calculate the relative luminance of a given color\n * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\nexport function getLuma (color: Color) {\n const rgb = colorToInt(color)\n\n return sRGB.toXYZ(rgb)[1]\n}\n\n/**\n * Returns the contrast ratio (1-21) between two colors.\n * @see https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n */\nexport function getContrast (first: Color, second: Color) {\n const l1 = getLuma(first)\n const l2 = getLuma(second)\n\n const light = Math.max(l1, l2)\n const dark = Math.min(l1, l2)\n\n return (light + 0.05) / (dark + 0.05)\n}\n","// Utilities\nimport { computed, inject, provide, ref, unref } from 'vue'\nimport { mergeDeep } from '@/util'\n\n// Types\nimport type { ComputedRef, InjectionKey, Ref } from 'vue'\nimport type { MaybeRef } from '@/util'\n\nexport interface DefaultsInstance {\n [key: string]: undefined | Record<string, unknown>\n global?: Record<string, unknown>\n}\n\nexport type DefaultsOptions = Partial<DefaultsInstance>\n\nexport const DefaultsSymbol: InjectionKey<Ref<DefaultsInstance>> = Symbol.for('vuetify:defaults')\n\nexport function createDefaults (options?: DefaultsInstance): Ref<DefaultsInstance> {\n return ref(options ?? {})\n}\n\nexport function useDefaults () {\n const defaults = inject(DefaultsSymbol)\n\n if (!defaults) throw new Error('[Vuetify] Could not find defaults instance')\n\n return defaults\n}\n\nexport function provideDefaults (\n defaults?: MaybeRef<DefaultsInstance | undefined>,\n options?: {\n reset?: MaybeRef<number | string | undefined>\n root?: MaybeRef<boolean | undefined>\n scoped?: MaybeRef<boolean | undefined>\n }\n) {\n const injectedDefaults = useDefaults()\n const providedDefaults = ref(defaults)\n\n const newDefaults = computed(() => {\n const scoped = unref(options?.scoped)\n const reset = unref(options?.reset)\n const root = unref(options?.root)\n\n let properties = mergeDeep(providedDefaults.value, { prev: injectedDefaults.value })\n\n if (scoped) return properties\n\n if (reset || root) {\n const len = Number(reset || Infinity)\n\n for (let i = 0; i <= len; i++) {\n if (!properties.prev) break\n\n properties = properties.prev\n }\n\n return properties\n }\n\n return mergeDeep(properties, properties.prev)\n }) as ComputedRef<DefaultsInstance>\n\n provide(DefaultsSymbol, newDefaults)\n\n return newDefaults\n}\n","// Utils\nimport {\n defineComponent as _defineComponent,\n getCurrentInstance,\n shallowReactive,\n toRaw,\n watchEffect,\n} from 'vue'\nimport { consoleWarn } from '@/util/console'\nimport { toKebabCase } from '@/util/helpers'\nimport { useDefaults } from '@/composables/defaults'\n\n// Types\nimport type {\n ComponentOptions,\n ComponentOptionsMixin,\n ComponentOptionsWithObjectProps,\n ComponentPropsOptions,\n ComputedOptions,\n DefineComponent,\n EmitsOptions,\n MethodOptions,\n VNode,\n VNodeChild,\n} from 'vue'\n\nfunction propIsDefined (vnode: VNode, prop: string) {\n return vnode.props?.hasOwnProperty(prop) ||\n vnode.props?.hasOwnProperty(toKebabCase(prop))\n}\n\nexport const defineComponent = (function defineComponent (options: ComponentOptions) {\n options._setup = options._setup ?? options.setup\n\n if (!options.name) {\n consoleWarn('The component is missing an explicit name, unable to generate default prop value')\n\n return options\n }\n\n if (options._setup) {\n options.setup = function setup (props: Record<string, any>, ctx) {\n const vm = getCurrentInstance()!\n const defaults = useDefaults()\n\n const _props = shallowReactive({ ...toRaw(props) })\n watchEffect(() => {\n const globalDefaults = defaults.value.global\n const componentDefaults = defaults.value[options.name!]\n\n for (const prop of Object.keys(props)) {\n let newVal\n if (propIsDefined(vm.vnode, prop)) {\n newVal = props[prop]\n } else {\n newVal = componentDefaults?.[prop] ?? globalDefaults?.[prop] ?? props[prop]\n }\n if (_props[prop] !== newVal) {\n _props[prop] = newVal\n }\n }\n })\n\n return options._setup(_props, ctx)\n }\n }\n\n return options\n}) as unknown as typeof _defineComponent\n\ntype ToListeners<T extends string | number | symbol> = { [K in T]: K extends `on${infer U}` ? Uncapitalize<U> : K }[T]\nexport type SlotsToProps<T extends Record<string, Slot>> = {\n $children: () => (T['default'] | VNodeChild | { [K in keyof T]?: T[K] })\n 'v-slots': new () => { [K in keyof T]?: T[K] | false }\n}/* & { // TODO: individual slots are never converted from the constructor type\n [K in keyof T as `v-slot:${K & string}`]?: new () => (T[K] | false)\n} */\n\ntype Slot<T extends any[] = any[]> = (...args: T) => VNodeChild\nexport type MakeSlots<T extends Record<string, any[]>> = {\n [K in keyof T]?: Slot<T[K]>\n}\n\nexport function genericComponent<T extends (new () => {\n $slots?: Record<string, Slot>\n})> (exposeDefaults = true): <\n PropsOptions extends Readonly<ComponentPropsOptions>,\n RawBindings,\n D,\n C extends ComputedOptions = {},\n M extends MethodOptions = {},\n Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,\n Extends extends ComponentOptionsMixin = ComponentOptionsMixin,\n E extends EmitsOptions = Record<string, any>,\n EE extends string = string,\n I = InstanceType<T>,\n Base = DefineComponent<\n (I extends Record<'$props', any> ? Omit<PropsOptions, keyof I['$props']> : PropsOptions) & (\n I extends Record<'$slots', any>\n ? SlotsToProps<I['$slots']>\n : {}\n ),\n RawBindings,\n D,\n C,\n M,\n Mixin,\n Extends,\n E extends any[] ? E : I extends Record<'$props', any> ? Omit<E, ToListeners<keyof I['$props']>> : E,\n EE\n >\n>(options: ComponentOptionsWithObjectProps<PropsOptions, RawBindings, D, C, M, Mixin, Extends, E, EE>) => Base & T {\n return options => (exposeDefaults ? defineComponent : _defineComponent)(options) as any\n}\n","import { camelize, capitalize, h } from 'vue'\nimport { defineComponent } from './defineComponent'\n\nexport function createSimpleFunctional (\n klass: string,\n tag = 'div',\n name?: string\n) {\n return defineComponent({\n name: name ?? capitalize(camelize(klass.replace(/__/g, '-'))),\n\n props: {\n tag: {\n type: String,\n default: tag,\n },\n },\n\n setup (props, { slots }) {\n return () => h(props.tag, {\n class: klass,\n }, slots.default?.())\n },\n })\n}\n","/**\n * Returns:\n * - 'null' if the node is not attached to the DOM\n * - the root node (HTMLDocument | ShadowRoot) otherwise\n */\nexport function attachedRoot (node: Node): null | HTMLDocument | ShadowRoot {\n /* istanbul ignore next */\n if (typeof node.getRootNode !== 'function') {\n // Shadow DOM not supported (IE11), lets find the root of this node\n while (node.parentNode) node = node.parentNode\n\n // The root parent is the document if the node is attached to the DOM\n if (node !== document) return null\n\n return document\n }\n\n const root = node.getRootNode()\n\n // The composed root node is the document if the node is attached to the DOM\n if (root !== document && root.getRootNode({ composed: true }) !== document) return null\n\n return root as HTMLDocument | ShadowRoot\n}\n","export const standardEasing = 'cubic-bezier(0.4, 0, 0.2, 1)'\nexport const deceleratedEasing = 'cubic-bezier(0.0, 0, 0.2, 1)' // Entering\nexport const acceleratedEasing = 'cubic-bezier(0.4, 0, 1, 1)' // Leaving\n","// Utilities\nimport { getCurrentInstance as _getCurrentInstance } from 'vue'\nimport { toKebabCase } from '@/util'\n\nexport function getCurrentInstance (name: string, message?: string) {\n const vm = _getCurrentInstance()\n\n if (!vm) {\n throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`)\n }\n\n return vm\n}\n\nexport function getCurrentInstanceName (name = 'composables') {\n return toKebabCase(getCurrentInstance(name).type?.name)\n}\n","export function getScrollParent (el?: HTMLElement) {\n while (el) {\n if (hasScrollbar(el)) return el\n el = el.parentElement!\n }\n\n return document.scrollingElement as HTMLElement\n}\n\nexport function getScrollParents (el?: HTMLElement) {\n const elements: HTMLElement[] = []\n while (el) {\n if (hasScrollbar(el)) elements.push(el)\n el = el.parentElement!\n }\n\n return elements\n}\n\nexport function hasScrollbar (el?: Element | null) {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false\n\n const style = window.getComputedStyle(el)\n return style.overflowY === 'scroll' || (style.overflowY === 'auto' && el.scrollHeight > el.clientHeight)\n}\n","export const IS_NODE = typeof process !== 'undefined'\nexport const IN_BROWSER = typeof window !== 'undefined'\nexport const IS_DEBUG = IS_NODE && process.env.DEBUG === 'true'\nexport const IS_PROD = IS_NODE && process.env.NODE_ENV === 'production'\nexport const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window\nexport const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0)\nexport const SUPPORTS_FOCUS_VISIBLE = IN_BROWSER && CSS.supports('selector(:focus-visible)')\n","import type { ComponentObjectPropsOptions, Prop, PropType } from 'vue'\n\n/**\n * Creates a factory function for props definitions.\n * This is used to define props in a composable then override\n * default values in an implementing component.\n *\n * @example Simplified signature\n * (props: Props) => (defaults?: Record<keyof props, any>) => Props\n *\n * @example Usage\n * const makeProps = propsFactory({\n * foo: String,\n * })\n *\n * defineComponent({\n * props: {\n * ...makeProps({\n * foo: 'a',\n * }),\n * },\n * setup (props) {\n * // would be \"string | undefined\", now \"string\" because a default has been provided\n * props.foo\n * },\n * }\n */\n\nexport function propsFactory<\n PropsOptions extends ComponentObjectPropsOptions\n> (props: PropsOptions, source?: string) {\n return <Defaults extends PartialKeys<PropsOptions> = {}>(\n defaults?: Defaults\n ): AppendDefault<PropsOptions, Defaults> => {\n return Object.keys(props).reduce<any>((obj, prop) => {\n const isObjectDefinition = typeof props[prop] === 'object' && props[prop] != null && !Array.isArray(props[prop])\n const definition = isObjectDefinition ? props[prop] : { type: props[prop] }\n\n if (defaults && prop in defaults) {\n obj[prop] = {\n ...definition,\n default: defaults[prop],\n }\n } else {\n obj[prop] = definition\n }\n\n if (source) {\n obj[prop].source = source\n }\n\n return obj\n }, {})\n }\n}\n\ntype AppendDefault<T extends ComponentObjectPropsOptions, D extends PartialKeys<T>> = {\n [P in keyof T]-?: unknown extends D[P]\n ? T[P]\n : T[P] extends Record<string, unknown>\n ? Omit<T[P], 'type' | 'default'> & {\n type: PropType<MergeDefault<T[P], D[P]>>\n default: MergeDefault<T[P], D[P]>\n }\n : {\n type: PropType<MergeDefault<T[P], D[P]>>\n default: MergeDefault<T[P], D[P]>\n }\n}\n\ntype MergeDefault<T, D> = unknown extends D ? InferPropType<T> : (NonNullable<InferPropType<T>> | D)\n\n/**\n * Like `Partial<T>` but doesn't care what the value is\n */\ntype PartialKeys<T> = { [P in keyof T]?: unknown }\n\n// Copied from Vue\ntype InferPropType<T> = T extends null\n ? any // null & true would fail to infer\n : T extends { type: null | true }\n ? any // As TS issue https://github.com/Microsoft/TypeScript/issues/14829 // somehow `ObjectConstructor` when inferred from { (): T } becomes `any` // `BooleanConstructor` when inferred from PropConstructor(with PropMethod) becomes `Boolean`\n : T extends ObjectConstructor | { type: ObjectConstructor }\n ? Record<string, any>\n : T extends BooleanConstructor | { type: BooleanConstructor }\n ? boolean\n : T extends Prop<infer V, infer D> ? (unknown extends V ? D : V) : T\n","// Utilities\nimport { getCurrentInstance } from './getCurrentInstance'\n\n// Types\nimport type { VNode } from 'vue'\n\nexport function useRender (render: () => VNode): void {\n const vm = getCurrentInstance('useRender') as any\n vm.render = render\n}\n","/**\n * WCAG 3.0 APCA perceptual contrast algorithm from https://github.com/Myndex/SAPC-APCA\n * @licence https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n * @see https://www.w3.org/WAI/GL/task-forces/silver/wiki/Visual_Contrast_of_Text_Subgroup\n */\n\n// MAGICAL NUMBERS\n\n// sRGB Conversion to Relative Luminance (Y)\n\n// Transfer Curve (aka \"Gamma\") for sRGB linearization\n// Simple power curve vs piecewise described in docs\n// Essentially, 2.4 best models actual display\n// characteristics in combination with the total method\nconst mainTRC = 2.4\n\nconst Rco = 0.2126729 // sRGB Red Coefficient (from matrix)\nconst Gco = 0.7151522 // sRGB Green Coefficient (from matrix)\nconst Bco = 0.0721750 // sRGB Blue Coefficient (from matrix)\n\n// For Finding Raw SAPC Contrast from Relative Luminance (Y)\n\n// Constants for SAPC Power Curve Exponents\n// One pair for normal text, and one for reverse\n// These are the \"beating heart\" of SAPC\nconst normBG = 0.55\nconst normTXT = 0.58\nconst revTXT = 0.57\nconst revBG = 0.62\n\n// For Clamping and Scaling Values\n\nconst blkThrs = 0.03 // Level that triggers the soft black clamp\nconst blkClmp = 1.45 // Exponent for the soft black clamp curve\nconst deltaYmin = 0.0005 // Lint trap\nconst scaleBoW = 1.25 // Scaling for dark text on light\nconst scaleWoB = 1.25 // Scaling for light text on dark\nconst loConThresh = 0.078 // Threshold for new simple offset scale\nconst loConFactor = 12.82051282051282 // = 1/0.078,\nconst loConOffset = 0.06 // The simple offset\nconst loClip = 0.001 // Output clip (lint trap #2)\n\nexport function APCAcontrast (text: number, background: number) {\n // Linearize sRGB\n const Rtxt = ((text >> 16 & 0xff) / 255) ** mainTRC\n const Gtxt = ((text >> 8 & 0xff) / 255) ** mainTRC\n const Btxt = ((text >> 0 & 0xff) / 255) ** mainTRC\n\n const Rbg = ((background >> 16 & 0xff) / 255) ** mainTRC\n const Gbg = ((background >> 8 & 0xff) / 255) ** mainTRC\n const Bbg = ((background >> 0 & 0xff) / 255) ** mainTRC\n\n // Apply the standard coefficients and sum to Y\n let Ytxt = (Rtxt * Rco) + (Gtxt * Gco) + (Btxt * Bco)\n let Ybg = (Rbg * Rco) + (Gbg * Gco) + (Bbg * Bco)\n\n // Soft clamp Y when near black.\n // Now clamping all colors to prevent crossover errors\n if (Ytxt <= blkThrs) Ytxt += (blkThrs - Ytxt) ** blkClmp\n if (Ybg <= blkThrs) Ybg += (blkThrs - Ybg) ** blkClmp\n\n // Return 0 Early for extremely low ∆Y (lint trap #1)\n if (Math.abs(Ybg - Ytxt) < deltaYmin) return 0.0\n\n // SAPC CONTRAST\n\n let outputContrast: number // For weighted final values\n if (Ybg > Ytxt) {\n // For normal polarity, black text on white\n // Calculate the SAPC contrast value and scale\n\n const SAPC = ((Ybg ** normBG) - (Ytxt ** normTXT)) * scaleBoW\n\n // NEW! SAPC SmoothScale™\n // Low Contrast Smooth Scale Rollout to prevent polarity reversal\n // and also a low clip for very low contrasts (lint trap #2)\n // much of this is for very low contrasts, less than 10\n // therefore for most reversing needs, only loConOffset is important\n outputContrast =\n (SAPC < loClip) ? 0.0\n : (SAPC < loConThresh) ? SAPC - SAPC * loConFactor * loConOffset\n : SAPC - loConOffset\n } else {\n // For reverse polarity, light text on dark\n // WoB should always return negative value.\n\n const SAPC = ((Ybg ** revBG) - (Ytxt ** revTXT)) * scaleWoB\n\n outputContrast =\n (SAPC > -loClip) ? 0.0\n : (SAPC > -loConThresh) ? SAPC - SAPC * loConFactor * loConOffset\n : SAPC + loConOffset\n }\n\n return outputContrast * 100\n}\n","// Utilities\nimport { computed, inject, provide, ref, watch, watchEffect } from 'vue'\nimport {\n colorToInt,\n colorToRGB,\n createRange,\n darken,\n getCurrentInstance,\n getLuma,\n IN_BROWSER,\n intToHex,\n lighten,\n mergeDeep,\n propsFactory,\n} from '@/util'\nimport { APCAcontrast } from '@/util/color/APCA'\n\n// Types\nimport type { App, InjectionKey, Ref } from 'vue'\nimport type { HeadClient } from '@vueuse/head'\n\ntype DeepPartial<T> = T extends object ? { [P in keyof T]?: DeepPartial<T[P]> } : T\n\ninterface BaseColors {\n background: string\n surface: string\n primary: string\n secondary: string\n success: string\n warning: string\n error: string\n info: string\n}\n\ninterface OnColors {\n 'on-background': string\n 'on-surface': string\n 'on-primary': string\n 'on-secondary': string\n 'on-success': string\n 'on-warning': string\n 'on-error': string\n 'on-info': string\n}\n\nexport interface Colors extends BaseColors, OnColors {\n [key: string]: string\n}\n\ninterface InternalThemeDefinition {\n dark: boolean\n colors: Colors\n variables: Record<string, string | number>\n}\n\ninterface VariationsOptions {\n colors: string[]\n lighten: number\n darken: number\n}\n\ninterface InternalThemeOptions {\n isDisabled: boolean\n defaultTheme: string\n variations: VariationsOptions\n themes: Record<string, InternalThemeDefinition>\n}\n\nexport type ThemeDefinition = DeepPartial<InternalThemeDefinition>\n\nexport type ThemeOptions = false | {\n defaultTheme?: string\n variations?: false | VariationsOptions\n themes?: Record<string, ThemeDefinition>\n}\n\nexport interface ThemeInstance {\n isDisabled: boolean\n themes: Ref<Record<string, InternalThemeDefinition>>\n current: Ref<string>\n themeClasses: Ref<string | undefined>\n setTheme: (key: string, theme: InternalThemeDefinition) => void\n getTheme: (key: string) => InternalThemeDefinition\n styles: Ref<string>\n}\n\nexport const ThemeSymbol: InjectionKey<ThemeInstance> = Symbol.for('vuetify:theme')\n\nexport const makeThemeProps = propsFactory({\n theme: String,\n}, 'theme')\n\nconst defaultThemeOptions: ThemeOptions = {\n defaultTheme: 'light',\n variations: { colors: [], lighten: 0, darken: 0 },\n themes: {\n light: {\n dark: false,\n colors: {\n background: '#FFFFFF',\n surface: '#FFFFFF',\n 'surface-variant': '#424242',\n 'on-surface-variant': '#EEEEEE',\n primary: '#6200EE',\n 'primary-darken-1': '#3700B3',\n secondary: '#03DAC6',\n 'secondary-darken-1': '#018786',\n error: '#B00020',\n info: '#2196F3',\n success: '#4CAF50',\n warning: '#FB8C00',\n },\n variables: {\n 'border-color': '#000000',\n 'border-opacity': 0.12,\n 'high-emphasis-opacity': 0.87,\n 'medium-emphasis-opacity': 0.60,\n 'disabled-opacity': 0.38,\n 'idle-opacity': 0.04,\n 'hover-opacity': 0.04,\n 'focus-opacity': 0.12,\n 'selected-opacity': 0.08,\n 'activated-opacity': 0.12,\n 'pressed-opacity': 0.12,\n 'dragged-opacity': 0.08,\n 'kbd-background-color': '#212529',\n 'kbd-color': '#FFFFFF',\n 'code-background-color': '#C2C2C2',\n },\n },\n dark: {\n dark: true,\n colors: {\n background: '#121212',\n surface: '#212121',\n 'surface-variant': '#BDBDBD',\n 'on-surface-variant': '#424242',\n primary: '#BB86FC',\n 'primary-darken-1': '#3700B3',\n secondary: '#03DAC5',\n 'secondary-darken-1': '#03DAC5',\n error: '#CF6679',\n info: '#2196F3',\n success: '#4CAF50',\n warning: '#FB8C00',\n },\n variables: {\n 'border-color': '#FFFFFF',\n 'border-opacity': 0.12,\n 'high-emphasis-opacity': 0.87,\n 'medium-emphasis-opacity': 0.60,\n 'disabled-opacity': 0.38,\n 'idle-opacity': 0.10,\n 'hover-opacity': 0.04,\n 'focus-opacity': 0.12,\n 'selected-opacity': 0.08,\n 'activated-opacity': 0.12,\n 'pressed-opacity': 0.16,\n 'dragged-opacity': 0.08,\n 'kbd-background-color': '#212529',\n 'kbd-color': '#FFFFFF',\n 'code-background-color': '#B7B7B7',\n },\n },\n },\n}\n\nconst parseThemeOptions = (options: ThemeOptions = defaultThemeOptions): InternalThemeOptions => {\n if (!options) return { ...defaultThemeOptions, isDisabled: true } as InternalThemeOptions\n\n const themes = Object.entries(options.themes ?? {}).reduce((obj, [key, theme]) => {\n const defaultTheme = theme.dark ? defaultThemeOptions.themes?.dark : defaultThemeOptions.themes?.light\n obj[key] = mergeDeep(defaultTheme, theme)\n return obj\n }, {} as Record<string, ThemeDefinition>)\n\n return mergeDeep(\n defaultThemeOptions,\n { ...options, themes },\n ) as InternalThemeOptions\n}\n\n// Composables\nexport function createTheme (app: App, options?: ThemeOptions): ThemeInstance {\n const head = app._context.provides.usehead as HeadClient | undefined\n const parsedOptions = parseThemeOptions(options)\n const styleEl = ref<HTMLStyleElement>()\n const current = ref(parsedOptions.defaultTheme)\n const themes = ref(parsedOptions.themes)\n const variations = ref(parsedOptions.variations)\n\n const computedThemes = computed(() => {\n return Object.entries(themes.value).reduce((obj, [name, original]) => {\n const theme: InternalThemeDefinition = {\n ...original,\n colors: {\n ...original.colors,\n ...(parsedOptions.variations.colors ?? []).reduce((obj, color) => {\n return { ...obj, ...genColorVariations(color, original.colors[color]!) }\n }, {}),\n },\n }\n\n for (const color of Object.keys(theme.colors)) {\n if (/on-[a-z]/.test(color) || theme.colors[`on-${color}`]) continue\n\n const onColor = `on-${color}` as keyof OnColors\n const colorVal = colorToInt(theme.colors[color]!)\n\n const blackContrast = Math.abs(APCAcontrast(0, colorVal))\n const whiteContrast = Math.abs(APCAcontrast(0xffffff, colorVal))\n\n // TODO: warn about poor color selections\n // const contrastAsText = Math.abs(APCAcontrast(colorVal, colorToInt(theme.colors.background)))\n // const minContrast = Math.max(blackContrast, whiteContrast)\n // if (minContrast < 60) {\n // consoleInfo(`${key} theme color ${color} has poor contrast (${minContrast.toFixed()}%)`)\n // } else if (contrastAsText < 60 && !['background', 'surface'].includes(color)) {\n // consoleInfo(`${key} theme color ${color} has poor contrast as text (${contrastAsText.toFixed()}%)`)\n // }\n\n // Prefer white text if both have an acceptable contrast ratio\n theme.colors[onColor] = whiteContrast > Math.min(blackContrast, 50) ? '#fff' : '#000'\n }\n\n obj[name] = theme\n\n return obj\n }, {} as Record<string, InternalThemeDefinition>)\n })\n\n function genColorVariations (name: string, color: string) {\n const obj: Record<string, string> = {}\n for (const variation of (['lighten', 'darken'] as const)) {\n const fn = variation === 'lighten' ? lighten : darken\n for (const amount of createRange(variations.value[variation], 1)) {\n obj[`${name}-${variation}-${amount}`] = intToHex(fn(colorToInt(color), amount))\n }\n }\n\n return obj\n }\n\n const styles = computed(() => {\n const lines = []\n\n for (const themeName of Object.keys(computedThemes.value)) {\n const variables = computedThemes.value[themeName].variables\n\n lines.push(...createCssClass(`.v-theme--${themeName}`, [\n ...genCssVariables(themeName),\n ...Object.keys(variables).map(key => {\n const value = variables[key]\n const color = typeof value === 'string' && value.startsWith('#') ? colorToRGB(value) : undefined\n const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined\n\n return `--v-${key}: ${rgb ?? value}`\n }),\n ]))\n }\n\n const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)))\n for (const key of colors) {\n if (/on-[a-z]/.test(key)) {\n lines.push(...createCssClass(`.${key}`, [`color: rgb(var(--v-theme-${key})) !important`]))\n } else {\n lines.push(\n ...createCssClass(`.bg-${key}`, [\n `--v-theme-overlay-multiplier: var(--v-theme-${key}-overlay-multiplier)`,\n `background: rgb(var(--v-theme-${key})) !important`,\n `color: rgb(var(--v-theme-on-${key})) !important`,\n ]),\n ...createCssClass(`.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`]),\n ...createCssClass(`.border-${key}`, [`--v-border-color: var(--v-theme-${key})`]),\n )\n }\n }\n\n return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('')\n })\n\n function genCssVariables (name: string) {\n const theme = computedThemes.value[name]\n\n if (!theme) throw new Error(`Could not find theme ${name}`)\n\n const lightOverlay = theme.dark ? 2 : 1\n const darkOverlay = theme.dark ? 1 : 2\n\n const variables: string[] = []\n for (const [key, value] of Object.entries(theme.colors)) {\n const rgb = colorToRGB(value!)\n variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`)\n if (!key.startsWith('on-')) {\n variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`)\n }\n }\n\n return variables\n }\n\n function createCssClass (selector: string, content: string[]) {\n return [\n `${selector} {\\n`,\n ...content.map(line => ` ${line};\\n`),\n '}\\n',\n ]\n }\n\n if (head) {\n head.addHeadObjs(computed(() => ({\n style: [{\n children: styles.value,\n type: 'text/css',\n id: 'vuetify-theme-stylesheet',\n }],\n })))\n\n if (IN_BROWSER) {\n watchEffect(() => head.updateDOM())\n }\n } else {\n watch(themes, updateStyles, { deep: true, immediate: true })\n\n function updateStyles () {\n if (parsedOptions.isDisabled) return\n\n genStyleElement()\n\n if (styleEl.value) styleEl.value.innerHTML = styles.value\n }\n\n function genStyleElement () {\n if (typeof document === 'undefined' || styleEl.value) return\n\n const el = document.createElement('style')\n el.type = 'text/css'\n el.id = 'vuetify-theme-stylesheet'\n\n styleEl.value = el\n document.head.appendChild(styleEl.value)\n }\n }\n\n return {\n isDisabled: parsedOptions.isDisabled,\n themes: computedThemes,\n setTheme: (key: string, theme: InternalThemeDefinition) => themes.value[key] = theme,\n getTheme: (key: string) => computedThemes.value[key],\n current,\n themeClasses: computed(() => parsedOptions.isDisabled ? undefined : `v-theme--${current.value}`),\n styles,\n }\n}\n\nexport function provideTheme (props: { theme?: string }) {\n getCurrentInstance('provideTheme')\n\n const theme = inject(ThemeSymbol, null)\n\n if (!theme) throw new Error('Could not find Vuetify theme injection')\n\n const current = computed<string>(() => {\n return props.theme ?? theme?.current.value\n })\n\n const themeClasses = computed(() => theme.isDisabled ? undefined : `v-theme--${current.value}`)\n\n const newTheme: ThemeInstance = {\n ...theme,\n current,\n themeClasses,\n }\n\n provide(ThemeSymbol, newTheme)\n\n return newTheme\n}\n\nexport function useTheme () {\n getCurrentInstance('useTheme')\n\n const theme = inject(ThemeSymbol, null)\n\n if (!theme) throw new Error('Could not find Vuetify theme injection')\n\n return theme\n}\n","// Utilities\nimport { computed, inject, onBeforeUnmount, provide, ref } from 'vue'\nimport { convertToUnit, getUid, propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, Prop, Ref } from 'vue'\n\ntype Position = 'top' | 'left' | 'right' | 'bottom'\n\ntype LayoutItem = {\n id: string\n top: number\n bottom: number\n left: number\n right: number\n size: number\n}\n\ninterface LayoutProvide {\n register: (\n id: string,\n priority: Ref<number>,\n position: Ref<Position>,\n layoutSize: Ref<number | string>,\n elementSize: Ref<number | string>,\n active: Ref<boolean>,\n disableTransitions?: Ref<boolean>\n ) => Ref<Record<string, unknown>>\n unregister: (id: string) => void\n mainStyles: Ref<Record<string, unknown>>\n getLayoutItem: (id: string) => LayoutItem | undefined\n items: Ref<LayoutItem[]>\n}\n\nexport const VuetifyLayoutKey: InjectionKey<LayoutProvide> = Symbol.for('vuetify:layout')\n\nexport const makeLayoutProps = propsFactory({\n overlaps: {\n type: Array,\n default: () => ([]),\n } as Prop<string[]>,\n fullHeight: Boolean,\n}, 'layout')\n\n// Composables\nexport const makeLayoutItemProps = propsFactory({\n name: {\n type: String,\n },\n priority: {\n type: [Number, String],\n default: 0,\n },\n absolute: Boolean,\n}, 'layout-item')\n\nexport function useLayout () {\n const layout = inject(VuetifyLayoutKey)\n\n if (!layout) throw new Error('Could not find injected Vuetify layout')\n\n return layout\n}\n\nexport function useLayoutItem (\n name: string | undefined,\n priority: Ref<number>,\n position: Ref<Position>,\n layoutSize: Ref<number | string>,\n elementSize: Ref<number | string>,\n active: Ref<boolean>,\n disableTransitions?: Ref<boolean>,\n) {\n const layout = inject(VuetifyLayoutKey)\n\n if (!layout) throw new Error('Could not find injected Vuetify layout')\n\n const id = name ?? `layout-item-${getUid()}`\n\n const styles = layout.register(id, priority, position, layoutSize, elementSize, active, disableTransitions)\n\n onBeforeUnmount(() => layout.unregister(id))\n\n return styles\n}\n\nconst generateLayers = (\n layout: string[],\n registered: string[],\n positions: Map<string, Ref<Position>>,\n layoutSizes: Map<string, Ref<number | string>>,\n activeItems: Map<string, Ref<boolean>>,\n) => {\n let previousLayer = { top: 0, left: 0, right: 0, bottom: 0 }\n const layers = [{ id: '', layer: { ...previousLayer } }]\n const ids = !layout.length ? registered : layout.map(l => l.split(':')[0]).filter(l => registered.includes(l))\n for (const id of ids) {\n const position = positions.get(id)\n const amount = layoutSizes.get(id)\n const active = activeItems.get(id)\n if (!position || !amount || !active) continue\n\n const layer = {\n ...previousLayer,\n [position.value]: parseInt(previousLayer[position.value], 10) + (active.value ? parseInt(amount.value, 10) : 0),\n }\n\n layers.push({\n id,\n layer,\n })\n\n previousLayer = layer\n }\n\n return layers\n}\n\n// TODO: Remove undefined from layout and overlaps when vue typing for required: true prop is fixed\nexport function createLayout (props: { layout?: string[], overlaps?: string[], fullHeight?: boolean }) {\n const registered = ref<string[]>([])\n const positions = new Map<string, Ref<Position>>()\n const layoutSizes = new Map<string, Ref<number | string>>()\n const priorities = new Map<string, Ref<number>>()\n const activeItems = new Map<string, Ref<boolean>>()\n const transitions = new Map<string, Ref<boolean>>()\n\n const computedOverlaps = computed(() => {\n const map = new Map<string, { position: Position, amount: number }>()\n const overlaps = props.overlaps ?? []\n for (const overlap of overlaps.filter(item => item.includes(':'))) {\n const [top, bottom] = overlap.split(':')\n if (!registered.value.includes(top) || !registered.value.includes(bottom)) continue\n\n const topPosition = positions.get(top)\n const bottomPosition = positions.get(bottom)\n const topAmount = layoutSizes.get(top)\n const bottomAmount = layoutSizes.get(bottom)\n\n if (!topPosition || !bottomPosition || !topAmount || !bottomAmount) continue\n\n map.set(bottom, { position: topPosition.value, amount: parseInt(topAmount.value, 10) })\n map.set(top, { position: bottomPosition.value, amount: -parseInt(bottomAmount.value, 10) })\n }\n\n return map\n })\n\n const layers = computed(() => {\n const entries = [...priorities.entries()]\n const sortedEntries = entries.sort(([, a], [, b]) => a.value - b.value).map(([id]) => id)\n return generateLayers(sortedEntries, registered.value, positions, layoutSizes, activeItems)\n })\n\n const transitionsEnabled = computed(() => {\n return !Array.from(transitions.values()).some(ref => ref.value)\n })\n\n const mainStyles = computed(() => {\n const layer = layers.value[layers.value.length - 1].layer\n\n return {\n position: 'relative',\n paddingLeft: convertToUnit(layer.left),\n paddingRight: convertToUnit(layer.right),\n paddingTop: convertToUnit(layer.top),\n paddingBottom: convertToUnit(layer.bottom),\n ...(transitionsEnabled.value ? undefined : { transition: 'none' }),\n }\n })\n\n const items = computed(() => {\n return layers.value.slice(1).map(({ id }, index) => {\n const { layer } = layers.value[index]\n const size = layoutSizes.get(id)\n\n return {\n id,\n ...layer,\n size: Number(size!.value),\n }\n })\n })\n\n const getLayoutItem = (id: string) => {\n return items.value.find(item => item.id === id)\n }\n\n provide(VuetifyLayoutKey, {\n register: (\n id: string,\n priority: Ref<number>,\n position: Ref<Position>,\n layoutSize: Ref<number | string>,\n elementSize: Ref<number | string>,\n active: Ref<boolean>,\n disableTransitions?: Ref<boolean>\n ) => {\n priorities.set(id, priority)\n positions.set(id, position)\n layoutSizes.set(id, layoutSize)\n activeItems.set(id, active)\n disableTransitions && transitions.set(id, disableTransitions)\n registered.value.push(id)\n\n return computed(() => {\n const index = items.value.findIndex(i => i.id === id)\n\n if (index < 0) throw new Error(`Layout item \"${id}\" is missing from layout prop`)\n\n const item = items.value[index]\n\n if (!item) throw new Error(`Could not find layout item \"${id}`)\n\n const overlap = computedOverlaps.value.get(id)\n if (overlap) {\n item[overlap.position] += overlap.amount\n }\n\n const isHorizontal = position.value === 'left' || position.value === 'right'\n const isOppositeHorizontal = position.value === 'right'\n const isOppositeVertical = position.value === 'bottom'\n\n return {\n [position.value]: 0,\n height: isHorizontal ? `calc(100% - ${item.top}px - ${item.bottom}px)` : `${elementSize.value}px`,\n marginLeft: isOppositeHorizontal ? undefined : `${item.left}px`,\n marginRight: isOppositeHorizontal ? `${item.right}px` : undefined,\n marginTop: position.value !== 'bottom' ? `${item.top}px` : undefined,\n marginBottom: position.value !== 'top' ? `${item.bottom}px` : undefined,\n width: !isHorizontal ? `calc(100% - ${item.left}px - ${item.right}px)` : `${elementSize.value}px`,\n zIndex: layers.value.length - index,\n transform: `translate${isHorizontal ? 'X' : 'Y'}(${(active.value ? 0 : -110) * (isOppositeHorizontal || isOppositeVertical ? -1 : 1)}%)`,\n ...(transitionsEnabled.value ? undefined : { transition: 'none' }),\n }\n })\n },\n unregister: (id: string) => {\n priorities.delete(id)\n positions.delete(id)\n layoutSizes.delete(id)\n activeItems.delete(id)\n transitions.delete(id)\n registered.value = registered.value.filter(v => v !== id)\n },\n mainStyles,\n getLayoutItem,\n items,\n })\n\n const layoutClasses = computed(() => [\n 'v-layout',\n { 'v-layout--full-height': props.fullHeight },\n ])\n\n return {\n layoutClasses,\n getLayoutItem,\n items,\n }\n}\n","export default {\n badge: 'Badge',\n close: 'Close',\n dataIterator: {\n noResultsText: 'No matching records found',\n loadingText: 'Loading items...',\n },\n dataTable: {\n itemsPerPageText: 'Rows per page:',\n ariaLabel: {\n sortDescending: 'Sorted descending.',\n sortAscending: 'Sorted ascending.',\n sortNone: 'Not sorted.',\n activateNone: 'Activate to remove sorting.',\n activateDescending: 'Activate to sort descending.',\n activateAscending: 'Activate to sort ascending.',\n },\n sortBy: 'Sort by',\n },\n dataFooter: {\n itemsPerPageText: 'Items per page:',\n itemsPerPageAll: 'All',\n nextPage: 'Next page',\n prevPage: 'Previous page',\n firstPage: 'First page',\n lastPage: 'Last page',\n pageText: '{0}-{1} of {2}',\n },\n datePicker: {\n itemsSelected: '{0} selected',\n nextMonthAriaLabel: 'Next month',\n nextYearAriaLabel: 'Next year',\n prevMonthAriaLabel: 'Previous month',\n prevYearAriaLabel: 'Previous year',\n },\n noDataText: 'No data available',\n carousel: {\n prev: 'Previous visual',\n next: 'Next visual',\n ariaLabel: {\n delimiter: 'Carousel slide {0} of {1}',\n },\n },\n calendar: {\n moreEvents: '{0} more',\n },\n fileInput: {\n counter: '{0} files',\n counterSize: '{0} files ({1} in total)',\n },\n timePicker: {\n am: 'AM',\n pm: 'PM',\n },\n pagination: {\n ariaLabel: {\n root: 'Pagination Navigation',\n next: 'Next page',\n previous: 'Previous page',\n page: 'Goto Page {0}',\n currentPage: 'Page {0}, Current Page',\n first: 'First page',\n last: 'Last page',\n },\n },\n rating: {\n ariaLabel: {\n item: 'Rating {0} of {1}',\n },\n },\n}\n","export { default as af } from './af'\nexport { default as ar } from './ar'\nexport { default as bg } from './bg'\nexport { default as ca } from './ca'\nexport { default as ckb } from './ckb'\nexport { default as cs } from './cs'\nexport { default as da } from './da'\nexport { default as de } from './de'\nexport { default as el } from './el'\nexport { default as en } from './en'\nexport { default as es } from './es'\nexport { default as et } from './et'\nexport { default as fa } from './fa'\nexport { default as fi } from './fi'\nexport { default as fr } from './fr'\nexport { default as hr } from './hr'\nexport { default as hu } from './hu'\nexport { default as he } from './he'\nexport { default as id } from './id'\nexport { default as it } from './it'\nexport { default as ja } from './ja'\nexport { default as ko } from './ko'\nexport { default as lv } from './lv'\nexport { default as lt } from './lt'\nexport { default as nl } from './nl'\nexport { default as no } from './no'\nexport { default as pl } from './pl'\nexport { default as pt } from './pt'\nexport { default as ro } from './ro'\nexport { default as ru } from './ru'\nexport { default as sk } from './sk'\nexport { default as sl } from './sl'\nexport { default as srCyrl } from './sr-Cyrl'\nexport { default as srLatn } from './sr-Latn'\nexport { default as sv } from './sv'\nexport { default as th } from './th'\nexport { default as tr } from './tr'\nexport { default as az } from './az'\nexport { default as uk } from './uk'\nexport { default as vi } from './vi'\nexport { default as zhHans } from './zh-Hans'\nexport { default as zhHant } from './zh-Hant'\n\nexport const rtl = {\n af: false,\n ar: true,\n bg: false,\n ca: false,\n ckb: false,\n cs: false,\n de: false,\n el: false,\n en: false,\n es: false,\n et: false,\n fa: false,\n fi: false,\n fr: false,\n hr: false,\n hu: false,\n he: true,\n id: false,\n it: false,\n ja: false,\n ko: false,\n lv: false,\n lt: false,\n nl: false,\n no: false,\n pl: false,\n pt: false,\n ro: false,\n ru: false,\n sk: false,\n sl: false,\n srCyrl: false,\n srLatn: false,\n sv: false,\n th: false,\n tr: false,\n az: false,\n uk: false,\n vi: false,\n zhHans: false,\n zhHant: false,\n}\n","import { computed, inject, provide, ref } from 'vue'\nimport { rtl } from '@/locale'\n\n// Types\nimport type { InjectionKey, Ref } from 'vue'\nimport type { LocaleInstance } from './locale'\n\nexport interface RtlOptions {\n defaultRtl?: boolean\n rtl?: Record<string, boolean>\n}\n\nexport interface RtlProps {\n rtl?: boolean\n}\n\nexport interface RtlInstance {\n isRtl: Ref<boolean>\n rtl: Record<string, boolean>\n rtlClasses: Ref<string>\n}\n\nexport const RtlSymbol: InjectionKey<RtlInstance> = Symbol.for('vuetify:rtl')\n\nexport function createRtl (localeScope: LocaleInstance, options?: RtlOptions) {\n return createRtlScope({\n rtl: {\n ...rtl,\n ...(options?.rtl ?? {}),\n },\n isRtl: ref(options?.defaultRtl ?? false),\n rtlClasses: ref(''),\n }, localeScope)\n}\n\nexport function createRtlScope (currentScope: RtlInstance, localeScope: LocaleInstance, options?: RtlProps): RtlInstance {\n const isRtl = computed(() => {\n if (typeof options?.rtl === 'boolean') return options.rtl\n if (localeScope.current.value && currentScope.rtl.hasOwnProperty(localeScope.current.value)) {\n return currentScope.rtl[localeScope.current.value]\n }\n\n return currentScope.isRtl.value\n })\n\n return {\n isRtl,\n rtl: currentScope.rtl,\n rtlClasses: computed(() => `v-locale--is-${isRtl.value ? 'rtl' : 'ltr'}`),\n }\n}\n\nexport function provideRtl (props: RtlProps, localeScope: LocaleInstance) {\n const currentScope = inject(RtlSymbol)\n\n if (!currentScope) throw new Error('[Vuetify] Could not find injected rtl instance')\n\n const newScope = createRtlScope(currentScope, localeScope, props)\n\n provide(RtlSymbol, newScope)\n\n return newScope\n}\n\nexport function useRtl () {\n const currentScope = inject(RtlSymbol)\n\n if (!currentScope) throw new Error('[Vuetify] Could not find injected rtl instance')\n\n return currentScope\n}\n","// Styles\nimport './VApp.sass'\n\n// Composables\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { createLayout, makeLayoutProps } from '@/composables/layout'\n\n// Utilities\nimport { defineComponent, useRender } from '@/util'\nimport { useRtl } from '@/composables/rtl'\n\nexport const VApp = defineComponent({\n name: 'VApp',\n\n props: {\n ...makeLayoutProps({ fullHeight: true }),\n ...makeThemeProps(),\n },\n\n setup (props, { slots }) {\n const theme = provideTheme(props)\n const { layoutClasses, getLayoutItem, items } = createLayout(props)\n const { rtlClasses } = useRtl()\n\n useRender(() => (\n <div\n class={[\n 'v-application',\n theme.themeClasses.value,\n layoutClasses.value,\n rtlClasses.value,\n ]}\n data-app=\"true\"\n >\n <div class=\"v-application__wrap\">\n { slots.default?.() }\n </div>\n </div>\n ))\n\n return {\n getLayoutItem,\n items,\n theme,\n }\n },\n})\n\nexport type VApp = InstanceType<typeof VApp>\n","// Utilities\nimport { computed } from 'vue'\nimport { convertToUnit, propsFactory } from '@/util'\n\n// Types\nexport interface DimensionProps {\n height?: number | string\n maxHeight?: number | string\n maxWidth?: number | string\n minHeight?: number | string\n minWidth?: number | string\n width?: number | string\n}\n\n// Composables\nexport const makeDimensionProps = propsFactory({\n height: [Number, String],\n maxHeight: [Number, String],\n maxWidth: [Number, String],\n minHeight: [Number, String],\n minWidth: [Number, String],\n width: [Number, String],\n}, 'dimension')\n\nexport function useDimension (props: DimensionProps) {\n const dimensionStyles = computed(() => ({\n height: convertToUnit(props.height),\n maxHeight: convertToUnit(props.maxHeight),\n maxWidth: convertToUnit(props.maxWidth),\n minHeight: convertToUnit(props.minHeight),\n minWidth: convertToUnit(props.minWidth),\n width: convertToUnit(props.width),\n }))\n\n return { dimensionStyles }\n}\n","// Styles\nimport './VResponsive.sass'\n\n// Composables\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\n\n// Utilities\nimport { computed } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport function useAspectStyles (props: { aspectRatio?: string | number }) {\n return {\n aspectStyles: computed(() => {\n const ratio = Number(props.aspectRatio)\n\n return ratio\n ? { paddingBottom: String(1 / ratio * 100) + '%' }\n : undefined\n }),\n }\n}\n\nexport const VResponsive = defineComponent({\n name: 'VResponsive',\n\n props: {\n aspectRatio: [String, Number],\n contentClass: String,\n\n ...makeDimensionProps(),\n },\n\n setup (props, { slots }) {\n const { dimensionStyles } = useDimension(props)\n const { aspectStyles } = useAspectStyles(props)\n\n return () => (\n <div class=\"v-responsive\" style={ dimensionStyles.value }>\n <div class=\"v-responsive__sizer\" style={ aspectStyles.value } />\n { slots.additional?.() }\n { slots.default && (\n <div class={['v-responsive__content', props.contentClass]}>{ slots.default() }</div>\n )}\n </div>\n )\n },\n})\n","// Utils\nimport { SUPPORTS_INTERSECTION } from '@/util'\n\n// Types\nimport type {\n DirectiveBinding,\n ObjectDirective,\n} from 'vue'\n\ntype ObserveHandler = (\n isIntersecting: boolean,\n entries: IntersectionObserverEntry[],\n observer: IntersectionObserver,\n) => void\n\nexport interface ObserveDirectiveBinding extends Omit<DirectiveBinding, 'modifiers' | 'value'> {\n value?: ObserveHandler | { handler: ObserveHandler, options?: IntersectionObserverInit }\n modifiers: {\n once?: boolean\n quiet?: boolean\n }\n}\n\nfunction mounted (el: HTMLElement, binding: ObserveDirectiveBinding) {\n if (!SUPPORTS_INTERSECTION) return\n\n const modifiers = binding.modifiers || {}\n const value = binding.value\n const { handler, options } = typeof value === 'object'\n ? value\n : { handler: value, options: {} }\n\n const observer = new IntersectionObserver((\n entries: IntersectionObserverEntry[] = [],\n observer: IntersectionObserver\n ) => {\n const _observe = el._observe?.[binding.instance!.$.uid]\n if (!_observe) return // Just in case, should never fire\n\n const isIntersecting = entries.some(entry => entry.isIntersecting)\n\n // If is not quiet or has already been\n // initted, invoke the user callback\n if (\n handler && (\n !modifiers.quiet ||\n _observe.init\n ) && (\n !modifiers.once ||\n isIntersecting ||\n _observe.init\n )\n ) {\n handler(isIntersecting, entries, observer)\n }\n\n if (isIntersecting && modifiers.once) unmounted(el, binding)\n else _observe.init = true\n }, options)\n\n el._observe = Object(el._observe)\n el._observe![binding.instance!.$.uid] = { init: false, observer }\n\n observer.observe(el)\n}\n\nfunction unmounted (el: HTMLElement, binding: ObserveDirectiveBinding) {\n const observe = el._observe?.[binding.instance!.$.uid]\n if (!observe) return\n\n observe.observer.unobserve(el)\n delete el._observe![binding.instance!.$.uid]\n}\n\nexport const Intersect: ObjectDirective<HTMLElement> = {\n mounted,\n unmounted,\n}\n\nexport default Intersect\n","// Utilities\nimport { h, mergeProps, Transition } from 'vue'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { Component, FunctionalComponent, PropType, TransitionProps } from 'vue'\n\nexport const makeTransitionProps = propsFactory({\n transition: {\n type: [Boolean, String, Object] as PropType<string | false | TransitionProps & { component?: Component }>,\n default: 'fade-transition',\n validator: val => val !== true,\n },\n}, 'transition')\n\ninterface MaybeTransitionProps extends TransitionProps {\n transition?: string | boolean | TransitionProps & { component?: any }\n}\n\nexport const MaybeTransition: FunctionalComponent<MaybeTransitionProps> = (props, { slots }) => {\n const { transition, ...rest } = props\n\n if (!transition || typeof transition === 'boolean') return slots.default?.()\n\n const { component = Transition, ...customProps } = typeof transition === 'object' ? transition : {}\n\n return h(\n component,\n mergeProps(typeof transition === 'string' ? { name: transition } : customProps as any, rest as any),\n slots\n )\n}\n","import './VImg.sass'\n\n// Components\nimport { VResponsive } from '@/components/VResponsive'\n\n// Directives\nimport intersect from '@/directives/intersect'\n\n// Composables\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport {\n computed,\n h,\n nextTick,\n onBeforeMount,\n ref,\n vShow,\n watch,\n withDirectives,\n} from 'vue'\nimport {\n convertToUnit,\n defineComponent,\n SUPPORTS_INTERSECTION,\n useRender,\n} from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// not intended for public use, this is passed in by vuetify-loader\nexport interface srcObject {\n src?: string\n srcset?: string\n lazySrc?: string\n aspect: number\n}\n\nexport const VImg = defineComponent({\n name: 'VImg',\n\n directives: { intersect },\n\n props: {\n aspectRatio: [String, Number],\n alt: String,\n cover: Boolean,\n eager: Boolean,\n gradient: String,\n lazySrc: String,\n options: {\n type: Object as PropType<IntersectionObserverInit>,\n // For more information on types, navigate to:\n // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API\n default: () => ({\n root: undefined,\n rootMargin: undefined,\n threshold: undefined,\n }),\n },\n sizes: String,\n src: {\n type: [String, Object] as PropType<string | srcObject>,\n default: '',\n },\n srcset: String,\n width: [String, Number],\n\n ...makeTransitionProps(),\n },\n\n emits: ['loadstart', 'load', 'error'],\n\n setup (props, { emit, slots }) {\n const currentSrc = ref('') // Set from srcset\n const image = ref<HTMLImageElement>()\n const state = ref<'idle' | 'loading' | 'loaded' | 'error'>(props.eager ? 'loading' : 'idle')\n const naturalWidth = ref<number>()\n const naturalHeight = ref<number>()\n\n const normalisedSrc = computed<srcObject>(() => {\n return props.src && typeof props.src === 'object'\n ? {\n src: props.src.src,\n srcset: props.srcset || props.src.srcset,\n lazySrc: props.lazySrc || props.src.lazySrc,\n aspect: Number(props.aspectRatio || props.src.aspect),\n } : {\n src: props.src,\n srcset: props.srcset,\n lazySrc: props.lazySrc,\n aspect: Number(props.aspectRatio || 0),\n }\n })\n const aspectRatio = computed(() => {\n return normalisedSrc.value.aspect || naturalWidth.value! / naturalHeight.value! || 0\n })\n\n watch(() => props.src, () => {\n init(state.value !== 'idle')\n })\n // TODO: getSrc when window width changes\n\n onBeforeMount(() => init())\n\n function init (isIntersecting?: boolean) {\n if (props.eager && isIntersecting) return\n if (\n SUPPORTS_INTERSECTION &&\n !isIntersecting &&\n !props.eager\n ) return\n\n state.value = 'loading'\n nextTick(() => {\n emit('loadstart', image.value?.currentSrc || normalisedSrc.value.src)\n\n if (image.value?.complete) {\n if (!image.value.naturalWidth) {\n onError()\n }\n\n if (state.value === 'error') return\n\n if (!aspectRatio.value) pollForSize(image.value, null)\n onLoad()\n } else {\n if (!aspectRatio.value) pollForSize(image.value!)\n getSrc()\n }\n })\n\n if (normalisedSrc.value.lazySrc) {\n const lazyImg = new Image()\n lazyImg.src = normalisedSrc.value.lazySrc\n pollForSize(lazyImg, null)\n }\n }\n\n function onLoad () {\n getSrc()\n state.value = 'loaded'\n emit('load', image.value?.currentSrc || normalisedSrc.value.src)\n }\n\n function onError () {\n state.value = 'error'\n emit('error', image.value?.currentSrc || normalisedSrc.value.src)\n }\n\n function getSrc () {\n const img = image.value\n if (img) currentSrc.value = img.currentSrc || img.src\n }\n\n function pollForSize (img: HTMLImageElement, timeout: number | null = 100) {\n const poll = () => {\n const { naturalHeight: imgHeight, naturalWidth: imgWidth } = img\n\n if (imgHeight || imgWidth) {\n naturalWidth.value = imgWidth\n naturalHeight.value = imgHeight\n } else if (!img.complete && state.value === 'loading' && timeout != null) {\n setTimeout(poll, timeout)\n } else if (img.currentSrc.endsWith('.svg') || img.currentSrc.startsWith('data:image/svg+xml')) {\n naturalWidth.value = 1\n naturalHeight.value = 1\n }\n }\n\n poll()\n }\n\n const containClasses = computed(() => ({\n 'v-img__img--cover': props.cover,\n 'v-img__img--contain': !props.cover,\n }))\n\n const __image = computed(() => {\n if (!normalisedSrc.value.src || state.value === 'idle') return\n\n const img = h('img', {\n class: ['v-img__img', containClasses.value],\n src: normalisedSrc.value.src,\n srcset: normalisedSrc.value.srcset,\n sizes: props.sizes,\n ref: image,\n onLoad,\n onError,\n })\n\n const sources = slots.sources?.()\n\n return (\n <MaybeTransition transition={ props.transition } appear>\n {\n withDirectives(\n sources\n ? <picture class=\"v-img__picture\">{ sources }{ img }</picture>\n : img,\n [[vShow, state.value === 'loaded']]\n )\n }\n </MaybeTransition>\n )\n })\n\n const __preloadImage = computed(() => (\n <MaybeTransition transition={ props.transition }>\n { normalisedSrc.value.lazySrc && state.value !== 'loaded' && (\n <img\n class={['v-img__img', 'v-img__img--preload', containClasses.value]}\n src={ normalisedSrc.value.lazySrc }\n alt=\"\"\n />\n )}\n </MaybeTransition>\n ))\n\n const __placeholder = computed(() => {\n if (!slots.placeholder) return\n\n return (\n <MaybeTransition transition={ props.transition } appear>\n { (state.value === 'loading' || (state.value === 'error' && !slots.error)) &&\n <div class=\"v-img__placeholder\">{ slots.placeholder() }</div>\n }\n </MaybeTransition>\n )\n })\n\n const __error = computed(() => {\n if (!slots.error) return\n\n return (\n <MaybeTransition transition={ props.transition } appear>\n { state.value === 'error' &&\n <div class=\"v-img__error\">{ slots.error() }</div>\n }\n </MaybeTransition>\n )\n })\n\n const __gradient = computed(() => {\n if (!props.gradient) return\n\n return <div class=\"v-img__gradient\" style={{ backgroundImage: `linear-gradient(${props.gradient})` }} />\n })\n\n const isBooted = ref(false)\n {\n const stop = watch(aspectRatio, val => {\n if (val) {\n // Doesn't work with nextTick, idk why\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n isBooted.value = true\n })\n })\n stop()\n }\n })\n }\n\n useRender(() => (\n <VResponsive\n class={[\n 'v-img',\n { 'v-img--booting': !isBooted.value },\n ]}\n style={{ width: convertToUnit(props.width === 'auto' ? naturalWidth.value : props.width) }}\n aspectRatio={ aspectRatio.value }\n aria-label={ props.alt }\n role={ props.alt ? 'img' : undefined }\n v-intersect={[{\n handler: init,\n options: props.options,\n }, null, ['once']]}\n v-slots={{\n additional: () => [__image.value, __preloadImage.value, __gradient.value, __placeholder.value, __error.value],\n default: slots.default,\n }}\n />\n ))\n\n return {\n currentSrc,\n image,\n state,\n naturalWidth,\n naturalHeight,\n }\n },\n})\n\nexport type VImg = InstanceType<typeof VImg>\n","// Utilities\nimport { computed } from 'vue'\nimport { getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nexport interface BorderProps {\n border?: boolean | number | string\n}\n\n// Composables\nexport const makeBorderProps = propsFactory({\n border: [Boolean, Number, String],\n}, 'border')\n\nexport function useBorder (\n props: BorderProps,\n name = getCurrentInstanceName(),\n) {\n const borderClasses = computed(() => {\n const classes: string[] = []\n\n if (props.border != null && props.border !== false) {\n classes.push(`${name}--border`)\n }\n\n if (\n (typeof props.border === 'string' && props.border !== '') ||\n props.border === 0\n ) {\n for (const value of String(props.border).split(' ')) {\n classes.push(`border-${value}`)\n }\n }\n\n return classes\n })\n\n return { borderClasses }\n}\n","// Utilities\nimport { computed } from 'vue'\nimport { getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nconst allowedDensities = [null, 'default', 'comfortable', 'compact'] as const\n\nexport type Density = typeof allowedDensities[number]\n\nexport interface DensityProps {\n density?: Density\n}\n\n// Composables\nexport const makeDensityProps = propsFactory({\n density: {\n type: String as PropType<Density>,\n default: 'default',\n validator: (v: any) => allowedDensities.includes(v),\n },\n}, 'density')\n\nexport function useDensity (\n props: DensityProps,\n name = getCurrentInstanceName(),\n) {\n const densityClasses = computed(() => {\n return `${name}--density-${props.density}`\n })\n\n return { densityClasses }\n}\n","// Utilities\nimport { computed, isRef } from 'vue'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\nexport interface ElevationProps {\n elevation?: number | string | null\n}\n\n// Composables\nexport const makeElevationProps = propsFactory({\n elevation: {\n type: [Number, String],\n validator (v: any) {\n const value = parseInt(v)\n\n return (\n !isNaN(value) &&\n value >= 0 &&\n // Material Design has a maximum elevation of 24\n // https://material.io/design/environment/elevation.html#default-elevations\n value <= 24\n )\n },\n },\n}, 'elevation')\n\ntype ElevationData = {\n elevationClasses: Ref<string[]>\n}\n\nexport function useElevation (props: ElevationProps | Ref<number | string | undefined>): ElevationData {\n const elevationClasses = computed(() => {\n const elevation = isRef(props) ? props.value : props.elevation\n const classes: string[] = []\n\n if (elevation == null) return classes\n\n classes.push(`elevation-${elevation}`)\n\n return classes\n })\n\n return { elevationClasses }\n}\n","// Utilities\nimport { computed, isRef } from 'vue'\nimport { getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\ntype RoundedValue = boolean | string | number | null | undefined\n\nexport interface RoundedProps {\n rounded?: RoundedValue\n tile?: boolean\n}\n\ntype RoundedData = {\n roundedClasses: Ref<string[]>\n}\n\n// Composables\nexport const makeRoundedProps = propsFactory({\n rounded: {\n type: [Boolean, Number, String],\n default: undefined,\n },\n}, 'rounded')\n\nexport function useRounded (\n props: RoundedProps | Ref<RoundedValue>,\n name = getCurrentInstanceName(),\n): RoundedData {\n const roundedClasses = computed(() => {\n const rounded = isRef(props) ? props.value : props.rounded\n const classes: string[] = []\n\n if (rounded === true || rounded === '') {\n classes.push(`${name}--rounded`)\n } else if (\n typeof rounded === 'string' ||\n rounded === 0\n ) {\n for (const value of String(rounded).split(' ')) {\n classes.push(`rounded-${value}`)\n }\n }\n\n return classes\n })\n\n return { roundedClasses }\n}\n","// Utilities\nimport { propsFactory } from '@/util'\n\n// Types\nexport interface TagProps {\n tag: string\n}\n\n// Composables\nexport const makeTagProps = propsFactory({\n tag: {\n type: String,\n default: 'div',\n },\n}, 'tag')\n","// Utilities\nimport { computed, isRef } from 'vue'\nimport { isCssColor } from '@/util'\n\n// Types\nimport type { CSSProperties, Ref } from 'vue'\n\ntype ColorValue = string | false | null | undefined\n\nexport interface TextColorData {\n textColorClasses: Ref<string[]>\n textColorStyles: Ref<CSSProperties>\n}\n\nexport interface BackgroundColorData {\n backgroundColorClasses: Ref<string[]>\n backgroundColorStyles: Ref<CSSProperties>\n}\n\n// Composables\nexport function useColor (colors: Ref<{ background?: ColorValue, text?: ColorValue }>) {\n const backgroundIsCssColor = computed(() => isCssColor(colors.value.background))\n const textIsCssColor = computed(() => isCssColor(colors.value.text))\n\n const colorClasses = computed(() => {\n const classes: string[] = []\n\n if (colors.value.background && !backgroundIsCssColor.value) {\n classes.push(`bg-${colors.value.background}`)\n }\n\n if (colors.value.text && !textIsCssColor.value) {\n classes.push(`text-${colors.value.text}`)\n }\n\n return classes\n })\n\n const colorStyles = computed(() => {\n const styles: CSSProperties = {}\n\n if (colors.value.background && backgroundIsCssColor.value) {\n styles.backgroundColor = colors.value.background\n }\n\n if (colors.value.text && textIsCssColor.value) {\n styles.color = colors.value.text\n styles.caretColor = colors.value.text\n }\n\n return styles\n })\n\n return { colorClasses, colorStyles }\n}\n\nexport function useTextColor (color: Ref<ColorValue>): TextColorData\nexport function useTextColor <T extends Record<K, ColorValue>, K extends string> (props: T, name: K): TextColorData\nexport function useTextColor <T extends Record<K, ColorValue>, K extends string> (\n props: T | Ref<ColorValue>,\n name?: K\n): TextColorData {\n const colors = computed(() => ({\n text: isRef(props) ? props.value : (name ? props[name] : null),\n }))\n\n const {\n colorClasses: textColorClasses,\n colorStyles: textColorStyles,\n } = useColor(colors)\n\n return { textColorClasses, textColorStyles }\n}\n\nexport function useBackgroundColor (color: Ref<ColorValue>): BackgroundColorData\nexport function useBackgroundColor <T extends Record<K, ColorValue>, K extends string> (props: T, name: K): BackgroundColorData\nexport function useBackgroundColor <T extends Record<K, ColorValue>, K extends string> (\n props: T | Ref<ColorValue>,\n name?: K\n): BackgroundColorData {\n const colors = computed(() => ({\n background: isRef(props) ? props.value : (name ? props[name] : null),\n }))\n\n const {\n colorClasses: backgroundColorClasses,\n colorStyles: backgroundColorStyles,\n } = useColor(colors)\n\n return { backgroundColorClasses, backgroundColorStyles }\n}\n","// Utilities\nimport { computed, ref } from 'vue'\nimport { getCurrentInstance, toKebabCase } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\n// Composables\nexport function useProxiedModel<\n Props extends object & { [key in Prop as `onUpdate:${Prop}`]: ((val: any) => void) | undefined },\n Prop extends Extract<keyof Props, string>,\n Inner = Props[Prop],\n> (\n props: Props,\n prop: Prop,\n defaultValue?: Props[Prop],\n transformIn: (value?: Props[Prop]) => Inner = (v: any) => v,\n transformOut: (value: Inner) => Props[Prop] = (v: any) => v,\n) {\n const vm = getCurrentInstance('useProxiedModel')\n\n const propIsDefined = computed(() => {\n return !!(\n typeof props[prop] !== 'undefined' &&\n (vm?.vnode.props?.hasOwnProperty(prop) || vm?.vnode.props?.hasOwnProperty(toKebabCase(prop)))\n )\n })\n\n const internal = ref(transformIn(props[prop])) as Ref<Inner>\n\n return computed<Inner>({\n get () {\n if (propIsDefined.value) return transformIn(props[prop])\n else return internal.value\n },\n set (newValue) {\n internal.value = newValue\n vm?.emit(`update:${prop}`, transformOut(newValue))\n },\n })\n}\n","// Styles\nimport './VAppBar.sass'\n\n// Components\nimport { VImg } from '@/components/VImg'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeLayoutItemProps, useLayoutItem } from '@/composables/layout'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { useBackgroundColor } from '@/composables/color'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { convertToUnit, defineComponent } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const VAppBar = defineComponent({\n name: 'VAppBar',\n\n props: {\n // TODO: Implement scrolling techniques\n // hideOnScroll: Boolean\n // invertedScroll: Boolean\n // collapseOnScroll: Boolean\n // elevateOnScroll: Boolean\n // shrinkOnScroll: Boolean\n // fadeImageOnScroll: Boolean\n collapse: Boolean,\n color: String,\n flat: Boolean,\n height: {\n type: [Number, String],\n default: 64,\n },\n extensionHeight: {\n type: [Number, String],\n default: 48,\n },\n floating: Boolean,\n image: String,\n modelValue: {\n type: Boolean,\n default: true,\n },\n prominent: Boolean,\n prominentHeight: {\n type: [Number, String],\n default: 128,\n },\n position: {\n type: String as PropType<'top' | 'bottom'>,\n default: 'top',\n validator: (value: any) => ['top', 'bottom'].includes(value),\n },\n\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeElevationProps(),\n ...makeRoundedProps(),\n ...makeLayoutItemProps(),\n ...makeTagProps({ tag: 'header' }),\n },\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots }) {\n const { borderClasses } = useBorder(props)\n const { densityClasses } = useDensity(props)\n const { elevationClasses } = useElevation(props)\n const { roundedClasses } = useRounded(props)\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'color'))\n const isExtended = !!slots.extension\n const contentHeight = computed(() => (\n Number(props.prominent ? props.prominentHeight : props.height) -\n (props.density === 'comfortable' ? 8 : 0) -\n (props.density === 'compact' ? 16 : 0)\n ))\n const height = computed(() => (\n contentHeight.value +\n Number(isExtended ? props.extensionHeight : 0)\n ))\n const isActive = useProxiedModel(props, 'modelValue', props.modelValue)\n const layoutStyles = useLayoutItem(\n props.name,\n computed(() => parseInt(props.priority, 10)),\n toRef(props, 'position'),\n height,\n height,\n isActive,\n )\n\n return () => {\n const hasImage = !!(slots.image || props.image)\n\n return (\n <props.tag\n class={[\n 'v-app-bar',\n {\n 'v-app-bar--bottom': props.position === 'bottom',\n 'v-app-bar--collapsed': props.collapse,\n 'v-app-bar--flat': props.flat,\n 'v-app-bar--floating': props.floating,\n 'v-app-bar--is-active': isActive.value,\n 'v-app-bar--prominent': props.prominent,\n 'v-app-bar--absolute': props.absolute,\n },\n backgroundColorClasses.value,\n borderClasses.value,\n densityClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n layoutStyles.value,\n ]}\n >\n { hasImage && (\n <div class=\"v-app-bar__image\">\n { slots.image\n ? slots.img?.({ src: props.image })\n : (<VImg src={ props.image } cover />)\n }\n </div>\n ) }\n\n <div\n class=\"v-app-bar__content\"\n style={{ height: convertToUnit(contentHeight.value) }}\n >\n { slots.prepend && (\n <div class=\"v-app-bar__prepend\">\n { slots.prepend() }\n </div>\n ) }\n\n { slots.default?.() }\n\n { slots.append && (\n <div class=\"v-app-bar__append\">\n { slots.append() }\n </div>\n ) }\n </div>\n\n { isExtended && (\n <div\n class=\"v-app-bar__extension\"\n style={{ height: convertToUnit(props.extensionHeight) }}\n >\n { slots.extension?.() }\n </div>\n ) }\n </props.tag>\n )\n }\n },\n})\n\nexport type VAppBar = InstanceType<typeof VAppBar>\n","// Composables\nimport { useColor } from '@/composables/color'\n\n// Utilities\nimport { computed, unref } from 'vue'\nimport { getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { MaybeRef } from '@/util'\n\nexport const allowedVariants = ['contained', 'outlined', 'plain', 'text', 'contained-text'] as const\n\nexport type Variant = typeof allowedVariants[number]\n\nexport interface VariantProps {\n color?: string\n textColor?: string\n variant: Variant\n}\n\nexport function genOverlays (isClickable: boolean, name: string) {\n return (\n <>\n { isClickable && <div class={`${name}__overlay`} /> }\n\n <div class={`${name}__underlay`} />\n </>\n )\n}\n\nexport const makeVariantProps = propsFactory({\n color: String,\n textColor: String,\n variant: {\n type: String as PropType<Variant>,\n default: 'contained',\n validator: (v: any) => allowedVariants.includes(v),\n },\n}, 'variant')\n\nexport function useVariant (\n props: MaybeRef<VariantProps>,\n name = getCurrentInstanceName(),\n) {\n const variantClasses = computed(() => {\n const { variant } = unref(props)\n return `${name}--variant-${variant}`\n })\n\n const { colorClasses, colorStyles } = useColor(computed(() => {\n const { textColor, variant, color } = unref(props)\n return {\n text: textColor,\n [variant === 'contained' ? 'background' : 'text']: color,\n }\n }))\n\n return { colorClasses, colorStyles, variantClasses }\n}\n","// Styles\nimport './VBtnGroup.sass'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeVariantProps } from '@/composables/variant'\nimport { provideDefaults } from '@/composables/defaults'\n\n// Utility\nimport { defineComponent, useRender } from '@/util'\nimport { toRef } from 'vue'\n\nexport const VBtnGroup = defineComponent({\n name: 'VBtnGroup',\n\n props: {\n divided: Boolean,\n\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeElevationProps(),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n ...makeVariantProps(),\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { densityClasses } = useDensity(props)\n const { borderClasses } = useBorder(props)\n const { elevationClasses } = useElevation(props)\n const { roundedClasses } = useRounded(props)\n\n provideDefaults({\n VBtn: {\n height: 'auto',\n color: toRef(props, 'color'),\n flat: true,\n variant: toRef(props, 'variant'),\n },\n })\n\n useRender(() => {\n return (\n <props.tag\n class={[\n 'v-btn-group',\n {\n 'v-btn-group--divided': props.divided,\n },\n themeClasses.value,\n borderClasses.value,\n densityClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n ]}\n v-slots={ slots }\n />\n )\n })\n },\n})\n","// Composables\nimport { useProxiedModel } from './proxiedModel'\n\n// Utilities\nimport { computed, inject, onBeforeUnmount, onMounted, provide, reactive, toRef } from 'vue'\nimport { consoleWarn, deepEqual, findChildren, getCurrentInstance, getUid, propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { ComponentInternalInstance, ExtractPropTypes, InjectionKey, PropType, Ref, UnwrapRef } from 'vue'\n\ninterface GroupItem {\n id: number\n value: Ref<unknown>\n disabled: Ref<boolean | undefined>\n}\n\ninterface GroupProps {\n disabled: boolean\n modelValue: unknown\n multiple: boolean\n mandatory: boolean | 'force' | undefined\n max: number | undefined\n selectedClass: string | undefined\n 'onUpdate:modelValue': ((val: unknown) => void) | undefined\n}\n\nexport interface GroupProvide {\n register: (item: GroupItem, cmp: ComponentInternalInstance) => void\n unregister: (id: number) => void\n select: (id: number, value: boolean) => void\n selected: Ref<any[]>\n isSelected: (id: number) => boolean\n prev: () => void\n next: () => void\n selectedClass: Ref<string | undefined>\n items: Ref<number[]>\n disabled: Ref<boolean | undefined>\n}\n\nexport interface GroupItemProvide {\n id: number\n isSelected: Ref<boolean>\n toggle: () => void\n select: (value: boolean) => void\n selectedClass: Ref<string | false | undefined>\n value: Ref<unknown>\n disabled: Ref<boolean | undefined>\n group: GroupProvide\n}\n\nexport const makeGroupProps = propsFactory({\n modelValue: {\n type: null,\n default: undefined,\n },\n multiple: Boolean,\n mandatory: [Boolean, String] as PropType<boolean | 'force'>,\n max: Number,\n selectedClass: String,\n disabled: Boolean,\n}, 'group')\n\nexport const makeGroupItemProps = propsFactory({\n value: null,\n disabled: Boolean,\n selectedClass: String,\n}, 'group-item')\n\ntype GroupItemProps = ExtractPropTypes<ReturnType<typeof makeGroupItemProps>>\n\n// Composables\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required?: true,\n): GroupItemProvide\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required: false,\n): GroupItemProvide | null\nexport function useGroupItem (\n props: GroupItemProps,\n injectKey: InjectionKey<GroupProvide>,\n required = true,\n): GroupItemProvide | null {\n const vm = getCurrentInstance('useGroupItem')\n\n if (!vm) {\n throw new Error(\n '[Vuetify] useGroupItem composable must be used inside a component setup function'\n )\n }\n\n const group = inject(injectKey, null)\n\n if (!group) {\n if (!required) return group\n\n throw new Error(`[Vuetify] Could not find useGroup injection with symbol ${injectKey.description}`)\n }\n\n const id = getUid()\n const value = toRef(props, 'value')\n const disabled = computed(() => group.disabled.value || props.disabled)\n\n group.register({\n id,\n value,\n disabled,\n }, vm)\n\n onBeforeUnmount(() => {\n group.unregister(id)\n })\n\n const isSelected = computed(() => {\n return group.isSelected(id)\n })\n\n const selectedClass = computed(() => isSelected.value && (group.selectedClass.value ?? props.selectedClass))\n\n return {\n id,\n isSelected,\n toggle: () => group.select(id, !isSelected.value),\n select: (value: boolean) => group.select(id, value),\n selectedClass,\n value,\n disabled,\n group,\n }\n}\n\nexport function useGroup (\n props: GroupProps,\n injectKey: InjectionKey<GroupProvide>\n) {\n let isUnmounted = false\n const items = reactive<GroupItem[]>([])\n const selected = useProxiedModel(\n props,\n 'modelValue',\n [],\n v => {\n if (v == null) return []\n\n return getIds(items, wrapInArray(v))\n },\n v => {\n const arr = getValues(items, v)\n\n return props.multiple ? arr : arr[0]\n }\n )\n\n const groupVm = getCurrentInstance('useGroup')\n\n function register (item: GroupItem, vm: ComponentInternalInstance) {\n // Is there a better way to fix this typing?\n const unwrapped = item as unknown as UnwrapRef<GroupItem>\n\n const children = findChildren(groupVm?.vnode)\n const instances = children\n .slice(1) // First one is group component itself\n .filter(cmp => !!cmp.provides[injectKey as any]) // TODO: Fix in TS 4.4\n const index = instances.indexOf(vm)\n\n if (index > -1) items.splice(index, 0, unwrapped)\n else items.push(unwrapped)\n }\n\n function unregister (id: number) {\n if (isUnmounted) return\n\n // TODO: re-evaluate this line's importance in the future\n // should we only modify the model if mandatory is set.\n // selected.value = selected.value.filter(v => v !== id)\n\n forceMandatoryValue()\n\n const index = items.findIndex(item => item.id === id)\n items.splice(index, 1)\n }\n\n // If mandatory and nothing is selected, then select first non-disabled item\n function forceMandatoryValue () {\n const item = items.find(item => !item.disabled)\n if (item && props.mandatory === 'force' && !selected.value.length) {\n selected.value = [item.id]\n }\n }\n\n onMounted(() => {\n forceMandatoryValue()\n })\n\n onBeforeUnmount(() => {\n isUnmounted = true\n })\n\n function select (id: number, isSelected: boolean) {\n const item = items.find(item => item.id === id)\n if (isSelected && item?.disabled) return\n\n if (props.multiple) {\n const internalValue = selected.value.slice()\n const index = internalValue.findIndex(v => v === id)\n\n // We can't remove value if group is\n // mandatory, value already exists,\n // and it is the only value\n if (\n props.mandatory &&\n index > -1 &&\n internalValue.length <= 1\n ) return\n\n // We can't add value if it would\n // cause max limit to be exceeded\n if (\n props.max != null &&\n index < 0 &&\n internalValue.length + 1 > props.max\n ) return\n\n if (index < 0 && isSelected) internalValue.push(id)\n else if (index >= 0 && !isSelected) internalValue.splice(index, 1)\n\n selected.value = internalValue\n } else {\n if (props.mandatory && selected.value.includes(id)) return\n\n selected.value = isSelected ? [id] : []\n }\n }\n\n function step (offset: number) {\n // getting an offset from selected value obviously won't work with multiple values\n if (props.multiple) consoleWarn('This method is not supported when using \"multiple\" prop')\n\n if (!selected.value.length) {\n const item = items.find(item => !item.disabled)\n item && (selected.value = [item.id])\n } else {\n const currentId = selected.value[0]\n const currentIndex = items.findIndex(i => i.id === currentId)\n\n let newIndex = (currentIndex + offset) % items.length\n let newItem = items[newIndex]\n\n while (newItem.disabled && newIndex !== currentIndex) {\n newIndex = (newIndex + offset) % items.length\n newItem = items[newIndex]\n }\n\n if (newItem.disabled) return\n\n selected.value = [items[newIndex].id]\n }\n }\n\n const state = {\n register,\n unregister,\n selected,\n select,\n disabled: toRef(props, 'disabled'),\n prev: () => step(items.length - 1),\n next: () => step(1),\n isSelected: (id: number) => selected.value.includes(id),\n selectedClass: computed(() => props.selectedClass),\n items: computed(() => items.map(({ id }) => id)),\n }\n\n provide(injectKey, state)\n\n return state\n}\n\nfunction getIds (items: UnwrapRef<GroupItem[]>, modelValue: any[]) {\n const ids = []\n for (const item of items) {\n if (item.value != null) {\n if (modelValue.find(value => deepEqual(value, item.value))) {\n ids.push(item.id)\n }\n } else if (modelValue.includes(item.id)) {\n ids.push(item.id)\n }\n }\n\n return ids\n}\n\nfunction getValues (items: UnwrapRef<GroupItem[]>, ids: any[]) {\n const values = []\n\n for (const item of items) {\n if (ids.includes(item.id)) {\n values.push(item.value != null ? item.value : item.id)\n }\n }\n\n return values\n}\n","// Styles\nimport './VBtnToggle.sass'\n\n// Components\nimport { VBtnGroup } from '@/components/VBtnGroup'\n\n// Composables\nimport { makeGroupProps, useGroup } from '@/composables/group'\n\n// Utility\nimport { genericComponent, useRender } from '@/util'\n\n// Types\nimport type { GroupProvide } from '@/composables/group'\nimport type { InjectionKey } from 'vue'\nimport type { MakeSlots } from '@/util'\n\nexport type BtnToggleSlotProps = 'isSelected' | 'select' | 'selected' | 'next' | 'prev'\nexport interface DefaultBtnToggleSlot extends Pick<GroupProvide, BtnToggleSlotProps> {}\n\nexport const VBtnToggleSymbol: InjectionKey<GroupProvide> = Symbol.for('vuetify:v-btn-toggle')\n\nexport const VBtnToggle = genericComponent<new <T>() => {\n $slots: MakeSlots<{\n default: [DefaultBtnToggleSlot]\n }>\n}>()({\n name: 'VBtnToggle',\n\n props: makeGroupProps({ selectedClass: 'v-btn--selected' }),\n\n emits: {\n 'update:modelValue': (value: any) => true,\n },\n\n setup (props, { slots }) {\n const { isSelected, next, prev, select, selected } = useGroup(props, VBtnToggleSymbol)\n\n useRender(() => (\n <VBtnGroup class=\"v-btn-toggle\">\n { slots.default?.({\n isSelected,\n next,\n prev,\n select,\n selected,\n } as DefaultBtnToggleSlot) }\n </VBtnGroup>\n ))\n\n return {\n next,\n prev,\n select,\n }\n },\n})\n","// Utilities\nimport { computed } from 'vue'\nimport { convertToUnit, getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nconst predefinedSizes = ['x-small', 'small', 'default', 'large', 'x-large']\n\nexport interface SizeProps {\n size?: string | number\n}\n\n// Composables\nexport const makeSizeProps = propsFactory({\n size: {\n type: [String, Number],\n default: 'default',\n },\n}, 'size')\n\nexport function useSize (\n props: SizeProps,\n name = getCurrentInstanceName(),\n) {\n const sizeClasses = computed(() => {\n return predefinedSizes.includes(props.size as string)\n ? `${name}--size-${props.size}`\n : null\n })\n\n const sizeStyles = computed(() => {\n return !predefinedSizes.includes(props.size as string) && props.size\n ? ({\n width: convertToUnit(props.size),\n height: convertToUnit(props.size),\n }) : null\n })\n\n return { sizeClasses, sizeStyles }\n}\n","// Utilities\nimport { computed, inject, isRef } from 'vue'\nimport { defineComponent, propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, JSXComponent, PropType, Ref } from 'vue'\n\nexport type IconValue = string | JSXComponent\n\nexport interface IconAliases {\n [name: string]: IconValue\n complete: IconValue\n cancel: IconValue\n close: IconValue\n delete: IconValue\n clear: IconValue\n success: IconValue\n info: IconValue\n warning: IconValue\n error: IconValue\n prev: IconValue\n next: IconValue\n checkboxOn: IconValue\n checkboxOff: IconValue\n checkboxIndeterminate: IconValue\n delimiter: IconValue\n sort: IconValue\n expand: IconValue\n menu: IconValue\n subgroup: IconValue\n dropdown: IconValue\n radioOn: IconValue\n radioOff: IconValue\n edit: IconValue\n ratingEmpty: IconValue\n ratingFull: IconValue\n ratingHalf: IconValue\n loading: IconValue\n first: IconValue\n last: IconValue\n unfold: IconValue\n file: IconValue\n plus: IconValue\n minus: IconValue\n}\n\nexport interface IconProps {\n tag: string\n icon: IconValue\n disabled?: Boolean\n}\n\ntype IconComponent = JSXComponent<IconProps>\n\nexport interface IconSet {\n component: IconComponent\n}\n\nexport type IconOptions = {\n defaultSet: string\n aliases?: Partial<IconAliases>\n sets: Record<string, IconSet>\n}\n\ntype IconInstance = {\n component: IconComponent\n icon: IconValue\n}\n\nexport const IconSymbol: InjectionKey<IconOptions> = Symbol.for('vuetify:icons')\n\nexport const makeIconProps = propsFactory({\n icon: {\n type: [String, Object] as PropType<IconValue>,\n required: true,\n },\n // Could not remove this and use makeTagProps, types complained because it is not required\n tag: {\n type: String,\n required: true,\n },\n}, 'icon')\n\nexport const VComponentIcon = defineComponent({\n name: 'VComponentIcon',\n\n props: makeIconProps(),\n\n setup (props) {\n return () => {\n return (\n <props.tag>\n <props.icon />\n </props.tag>\n )\n }\n },\n})\n\nexport const VSvgIcon = defineComponent({\n name: 'VSvgIcon',\n\n inheritAttrs: false,\n\n props: makeIconProps(),\n\n setup (props, { attrs }) {\n return () => {\n return (\n <props.tag { ...attrs } style={ null }>\n <svg\n class=\"v-icon__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n role=\"img\"\n aria-hidden=\"true\"\n >\n <path d={ props.icon as string }></path>\n </svg>\n </props.tag>\n )\n }\n },\n})\n\nexport const VLigatureIcon = defineComponent({\n name: 'VLigatureIcon',\n\n props: makeIconProps(),\n\n setup (props) {\n return () => {\n return <props.tag>{ props.icon }</props.tag>\n }\n },\n})\n\nexport const VClassIcon = defineComponent({\n name: 'VClassIcon',\n\n props: makeIconProps(),\n\n setup (props) {\n return () => {\n return <props.tag class={ props.icon }></props.tag>\n }\n },\n})\n\nexport const defaultSets: Record<string, IconSet> = {\n svg: {\n component: VSvgIcon,\n },\n class: {\n component: VClassIcon,\n },\n}\n\n// Composables\nexport const useIcon = (props: Ref<string | undefined> | { icon?: IconValue }) => {\n const icons = inject(IconSymbol)\n\n if (!icons) throw new Error('Missing Vuetify Icons provide!')\n\n const iconData: Ref<IconInstance> = computed(() => {\n const iconAlias = isRef(props) ? props.value : props.icon\n\n if (!iconAlias) throw new Error('Icon value is undefined or null')\n\n let icon: IconValue | undefined = iconAlias\n\n if (typeof iconAlias === 'string' && iconAlias.includes('$')) {\n icon = icons.aliases?.[iconAlias.slice(iconAlias.indexOf('$') + 1)]\n }\n\n if (!icon) throw new Error(`Could not find aliased icon \"${iconAlias}\"`)\n\n if (typeof icon !== 'string') {\n return {\n component: VComponentIcon,\n icon,\n }\n }\n\n const iconSetName = Object.keys(icons.sets).find(\n setName => typeof icon === 'string' && icon.startsWith(`${setName}:`)\n )\n\n const iconName = iconSetName ? icon.slice(iconSetName.length + 1) : icon\n const iconSet = icons.sets[iconSetName ?? icons.defaultSet]\n\n return {\n component: iconSet.component,\n icon: iconName,\n }\n })\n\n return { iconData }\n}\n","// Styles\nimport './VIcon.sass'\n\n// Composables\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { useIcon } from '@/composables/icons'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { convertToUnit, defineComponent, flattenFragments } from '@/util'\n\n// Types\nimport type { IconValue } from '@/composables/icons'\nimport type { ComputedRef, PropType } from 'vue'\n\nexport const VIcon = defineComponent({\n name: 'VIcon',\n\n props: {\n color: String,\n left: Boolean,\n right: Boolean,\n icon: {\n type: [String, Object] as PropType<IconValue>,\n },\n ...makeSizeProps(),\n ...makeTagProps({ tag: 'i' }),\n },\n\n setup (props, { slots }) {\n let slotIcon: ComputedRef<string | undefined> | undefined\n if (slots.default) {\n slotIcon = computed(() => {\n const slot = slots.default?.()\n if (!slot) return\n\n return flattenFragments(slot).filter(node =>\n node.children && typeof node.children === 'string'\n )[0]?.children as string\n })\n }\n\n const { iconData } = useIcon(slotIcon || props)\n const { sizeClasses } = useSize(props)\n const { textColorClasses, textColorStyles } = useTextColor(toRef(props, 'color'))\n\n return () => {\n return (\n <iconData.value.component\n tag={ props.tag }\n icon={ iconData.value.icon }\n class={[\n 'v-icon',\n 'notranslate',\n sizeClasses.value,\n textColorClasses.value,\n {\n 'v-icon--left': props.left,\n 'v-icon--right': props.right,\n },\n ]}\n style={[\n !sizeClasses.value ? ({\n fontSize: convertToUnit(props.size),\n width: convertToUnit(props.size),\n height: convertToUnit(props.size),\n }) : undefined,\n textColorStyles.value,\n ]}\n aria-hidden=\"true\"\n />\n )\n }\n },\n})\n","// Utilities\nimport { computed } from 'vue'\nimport { convertToUnit, getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nconst positionValues = ['static', 'relative', 'fixed', 'absolute', 'sticky'] as const\n\ntype Position = typeof positionValues[number]\n\nexport interface PositionProps {\n absolute?: boolean\n bottom?: boolean | number | string\n fixed?: boolean\n left?: boolean | number | string\n position?: Position\n right?: boolean | number | string\n top?: boolean | number | string\n}\n\n// Composables\nexport const makePositionProps = propsFactory({\n absolute: Boolean,\n bottom: [Boolean, Number, String],\n fixed: Boolean,\n left: [Boolean, Number, String],\n position: {\n type: String as PropType<Position>,\n validator: /* istanbul ignore next */ (v: any) => positionValues.includes(v),\n },\n right: [Boolean, Number, String],\n top: [Boolean, Number, String],\n}, 'position')\n\nexport function usePosition (\n props: PositionProps,\n name = getCurrentInstanceName(),\n) {\n const targets = ['top', 'right', 'bottom', 'left'] as const\n\n const positionClasses = computed(() => {\n if (props.fixed) return `${name}--fixed`\n if (props.absolute) return `${name}--absolute`\n\n return props.position ? `position-${props.position}` : undefined\n })\n\n const positionStyles = computed(() => {\n const styles: Partial<Record<typeof targets[number], string>> = {}\n\n for (const target of targets) {\n const prop = props[target]\n\n if (prop == null || prop === false) continue\n\n styles[target] = convertToUnit(prop === true ? '0' : String(prop))\n }\n\n return styles\n })\n\n return { positionClasses, positionStyles }\n}\n","// Utilities\nimport { getCurrentInstance, propsFactory } from '@/util'\nimport {\n computed,\n onBeforeUnmount,\n onMounted,\n resolveDynamicComponent,\n toRef,\n} from 'vue'\n\n// Types\nimport type { ComputedRef, PropType, Ref, SetupContext } from 'vue'\nimport type {\n RouterLink as _RouterLink,\n useLink as _useLink,\n NavigationGuardNext,\n RouteLocationNormalizedLoaded,\n RouteLocationRaw,\n Router,\n} from 'vue-router'\n\nexport function useRoute (): Ref<RouteLocationNormalizedLoaded | undefined> {\n const vm = getCurrentInstance('useRoute')\n\n return computed(() => vm?.proxy?.$route)\n}\n\nexport function useRouter (): Router | undefined {\n return getCurrentInstance('useRouter')?.proxy?.$router\n}\n\nexport interface LinkProps {\n href?: string\n replace?: boolean\n to?: RouteLocationRaw\n}\n\ninterface UseLink extends Omit<Partial<ReturnType<typeof _useLink>>, 'href'> {\n isLink: ComputedRef<boolean>\n isClickable: ComputedRef<boolean>\n href: Ref<string | undefined>\n}\n\nexport function useLink (props: LinkProps, attrs: SetupContext['attrs']): UseLink {\n const RouterLink = resolveDynamicComponent('RouterLink') as typeof _RouterLink | string\n\n const isLink = computed(() => !!(props.href || props.to))\n const isClickable = computed(() => {\n return isLink?.value || !!(attrs.onClick || attrs.onClickOnce)\n })\n\n if (typeof RouterLink === 'string') {\n return {\n isLink,\n isClickable,\n href: toRef(props, 'href'),\n }\n }\n\n const link = props.to ? RouterLink.useLink(props as Required<LinkProps>) : undefined\n\n return {\n ...link,\n isLink,\n isClickable,\n href: computed(() => props.to ? link?.route.value.href : props.href),\n }\n}\n\nexport const makeRouterProps = propsFactory({\n href: String,\n replace: Boolean,\n to: [String, Object] as PropType<RouteLocationRaw>,\n}, 'router')\n\nexport function useBackButton (cb: (next: NavigationGuardNext) => void) {\n const router = useRouter()\n let popped = false\n let removeGuard: (() => void) | undefined\n\n onMounted(() => {\n window.addEventListener('popstate', onPopstate)\n removeGuard = router?.beforeEach((to, from, next) => {\n setTimeout(() => popped ? cb(next) : next())\n })\n })\n onBeforeUnmount(() => {\n window.removeEventListener('popstate', onPopstate)\n removeGuard?.()\n })\n\n function onPopstate (e: PopStateEvent) {\n if (e.state.replaced) return\n\n popped = true\n setTimeout(() => (popped = false))\n }\n}\n","// Styles\nimport './VRipple.sass'\n\n// Utilities\nimport { isObject, keyCodes } from '@/util'\n\n// Types\nimport type {\n DirectiveBinding,\n ObjectDirective,\n} from 'vue'\n\nconst rippleStop = Symbol('rippleStop')\n\ntype VuetifyRippleEvent = (MouseEvent | TouchEvent | KeyboardEvent) & { [rippleStop]?: boolean }\n\nconst DELAY_RIPPLE = 80\n\nfunction transform (el: HTMLElement, value: string) {\n el.style.transform = value\n el.style.webkitTransform = value\n}\n\nfunction opacity (el: HTMLElement, value: number) {\n el.style.opacity = `calc(${value} * var(--v-theme-overlay-multiplier))`\n}\n\ninterface RippleOptions {\n class?: string\n center?: boolean\n circle?: boolean\n}\n\nexport interface RippleDirectiveBinding extends Omit<DirectiveBinding, 'modifiers' | 'value'> {\n value?: boolean | { class: string }\n modifiers: {\n center?: boolean\n circle?: boolean\n }\n}\n\nfunction isTouchEvent (e: VuetifyRippleEvent): e is TouchEvent {\n return e.constructor.name === 'TouchEvent'\n}\n\nfunction isKeyboardEvent (e: VuetifyRippleEvent): e is KeyboardEvent {\n return e.constructor.name === 'KeyboardEvent'\n}\n\nconst calculate = (\n e: VuetifyRippleEvent,\n el: HTMLElement,\n value: RippleOptions = {}\n) => {\n let localX = 0\n let localY = 0\n\n if (!isKeyboardEvent(e)) {\n const offset = el.getBoundingClientRect()\n const target = isTouchEvent(e) ? e.touches[e.touches.length - 1] : e\n\n localX = target.clientX - offset.left\n localY = target.clientY - offset.top\n }\n\n let radius = 0\n let scale = 0.3\n if (el._ripple?.circle) {\n scale = 0.15\n radius = el.clientWidth / 2\n radius = value.center ? radius : radius + Math.sqrt((localX - radius) ** 2 + (localY - radius) ** 2) / 4\n } else {\n radius = Math.sqrt(el.clientWidth ** 2 + el.clientHeight ** 2) / 2\n }\n\n const centerX = `${(el.clientWidth - (radius * 2)) / 2}px`\n const centerY = `${(el.clientHeight - (radius * 2)) / 2}px`\n\n const x = value.center ? centerX : `${localX - radius}px`\n const y = value.center ? centerY : `${localY - radius}px`\n\n return { radius, scale, x, y, centerX, centerY }\n}\n\nconst ripples = {\n /* eslint-disable max-statements */\n show (\n e: VuetifyRippleEvent,\n el: HTMLElement,\n value: RippleOptions = {}\n ) {\n if (!el?._ripple?.enabled) {\n return\n }\n\n const container = document.createElement('span')\n const animation = document.createElement('span')\n\n container.appendChild(animation)\n container.className = 'v-ripple__container'\n\n if (value.class) {\n container.className += ` ${value.class}`\n }\n\n const { radius, scale, x, y, centerX, centerY } = calculate(e, el, value)\n\n const size = `${radius * 2}px`\n animation.className = 'v-ripple__animation'\n animation.style.width = size\n animation.style.height = size\n\n el.appendChild(container)\n\n const computed = window.getComputedStyle(el)\n if (computed && computed.position === 'static') {\n el.style.position = 'relative'\n el.dataset.previousPosition = 'static'\n }\n\n animation.classList.add('v-ripple__animation--enter')\n animation.classList.add('v-ripple__animation--visible')\n transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`)\n opacity(animation, 0)\n animation.dataset.activated = String(performance.now())\n\n setTimeout(() => {\n animation.classList.remove('v-ripple__animation--enter')\n animation.classList.add('v-ripple__animation--in')\n transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`)\n opacity(animation, 0.08)\n }, 0)\n },\n\n hide (el: HTMLElement | null) {\n if (!el?._ripple?.enabled) return\n\n const ripples = el.getElementsByClassName('v-ripple__animation')\n\n if (ripples.length === 0) return\n const animation = ripples[ripples.length - 1]\n\n if (animation.dataset.isHiding) return\n else animation.dataset.isHiding = 'true'\n\n const diff = performance.now() - Number(animation.dataset.activated)\n const delay = Math.max(250 - diff, 0)\n\n setTimeout(() => {\n animation.classList.remove('v-ripple__animation--in')\n animation.classList.add('v-ripple__animation--out')\n opacity(animation, 0)\n\n setTimeout(() => {\n const ripples = el.getElementsByClassName('v-ripple__animation')\n if (ripples.length === 1 && el.dataset.previousPosition) {\n el.style.position = el.dataset.previousPosition\n delete el.dataset.previousPosition\n }\n\n animation.parentNode && el.removeChild(animation.parentNode)\n }, 300)\n }, delay)\n },\n}\n\nfunction isRippleEnabled (value: any): value is true {\n return typeof value === 'undefined' || !!value\n}\n\nfunction rippleShow (e: VuetifyRippleEvent) {\n const value: RippleOptions = {}\n const element = e.currentTarget as HTMLElement | undefined\n\n if (!element?._ripple || element._ripple.touched || e[rippleStop]) return\n\n // Don't allow the event to trigger ripples on any other elements\n e[rippleStop] = true\n\n if (isTouchEvent(e)) {\n element._ripple.touched = true\n element._ripple.isTouch = true\n } else {\n // It's possible for touch events to fire\n // as mouse events on Android/iOS, this\n // will skip the event call if it has\n // already been registered as touch\n if (element._ripple.isTouch) return\n }\n\n value.center = element._ripple.centered || isKeyboardEvent(e)\n if (element._ripple.class) {\n value.class = element._ripple.class\n }\n\n if (isTouchEvent(e)) {\n // already queued that shows or hides the ripple\n if (element._ripple.showTimerCommit) return\n\n element._ripple.showTimerCommit = () => {\n ripples.show(e, element, value)\n }\n element._ripple.showTimer = window.setTimeout(() => {\n if (element?._ripple?.showTimerCommit) {\n element._ripple.showTimerCommit()\n element._ripple.showTimerCommit = null\n }\n }, DELAY_RIPPLE)\n } else {\n ripples.show(e, element, value)\n }\n}\n\nfunction rippleHide (e: Event) {\n const element = e.currentTarget as HTMLElement | null\n if (!element || !element._ripple) return\n\n window.clearTimeout(element._ripple.showTimer)\n\n // The touch interaction occurs before the show timer is triggered.\n // We still want to show ripple effect.\n if (e.type === 'touchend' && element._ripple.showTimerCommit) {\n element._ripple.showTimerCommit()\n element._ripple.showTimerCommit = null\n\n // re-queue ripple hiding\n element._ripple.showTimer = window.setTimeout(() => {\n rippleHide(e)\n })\n return\n }\n\n window.setTimeout(() => {\n if (element._ripple) {\n element._ripple.touched = false\n }\n })\n ripples.hide(element)\n}\n\nfunction rippleCancelShow (e: MouseEvent | TouchEvent) {\n const element = e.currentTarget as HTMLElement | undefined\n\n if (!element || !element._ripple) return\n\n if (element._ripple.showTimerCommit) {\n element._ripple.showTimerCommit = null\n }\n\n window.clearTimeout(element._ripple.showTimer)\n}\n\nlet keyboardRipple = false\n\nfunction keyboardRippleShow (e: KeyboardEvent) {\n if (!keyboardRipple && (e.keyCode === keyCodes.enter || e.keyCode === keyCodes.space)) {\n keyboardRipple = true\n rippleShow(e)\n }\n}\n\nfunction keyboardRippleHide (e: KeyboardEvent) {\n keyboardRipple = false\n rippleHide(e)\n}\n\nfunction focusRippleHide (e: FocusEvent) {\n if (keyboardRipple) {\n keyboardRipple = false\n rippleHide(e)\n }\n}\n\nfunction updateRipple (el: HTMLElement, binding: RippleDirectiveBinding, wasEnabled: boolean) {\n const { value, modifiers } = binding\n const enabled = isRippleEnabled(value)\n if (!enabled) {\n ripples.hide(el)\n }\n\n el._ripple = el._ripple ?? {}\n el._ripple.enabled = enabled\n el._ripple.centered = modifiers.center\n el._ripple.circle = modifiers.circle\n if (isObject(value) && value.class) {\n el._ripple.class = value.class\n }\n\n if (enabled && !wasEnabled) {\n el.addEventListener('touchstart', rippleShow, { passive: true })\n el.addEventListener('touchend', rippleHide, { passive: true })\n el.addEventListener('touchmove', rippleCancelShow, { passive: true })\n el.addEventListener('touchcancel', rippleHide)\n\n el.addEventListener('mousedown', rippleShow)\n el.addEventListener('mouseup', rippleHide)\n el.addEventListener('mouseleave', rippleHide)\n\n el.addEventListener('keydown', keyboardRippleShow)\n el.addEventListener('keyup', keyboardRippleHide)\n\n el.addEventListener('blur', focusRippleHide)\n\n // Anchor tags can be dragged, causes other hides to fail - #1537\n el.addEventListener('dragstart', rippleHide, { passive: true })\n } else if (!enabled && wasEnabled) {\n removeListeners(el)\n }\n}\n\nfunction removeListeners (el: HTMLElement) {\n el.removeEventListener('mousedown', rippleShow)\n el.removeEventListener('touchstart', rippleShow)\n el.removeEventListener('touchend', rippleHide)\n el.removeEventListener('touchmove', rippleCancelShow)\n el.removeEventListener('touchcancel', rippleHide)\n el.removeEventListener('mouseup', rippleHide)\n el.removeEventListener('mouseleave', rippleHide)\n el.removeEventListener('keydown', keyboardRippleShow)\n el.removeEventListener('keyup', keyboardRippleHide)\n el.removeEventListener('dragstart', rippleHide)\n el.removeEventListener('blur', focusRippleHide)\n}\n\nfunction mounted (el: HTMLElement, binding: DirectiveBinding) {\n updateRipple(el, binding, false)\n}\n\nfunction unmounted (el: HTMLElement) {\n delete el._ripple\n removeListeners(el)\n}\n\nfunction updated (el: HTMLElement, binding: DirectiveBinding) {\n if (binding.value === binding.oldValue) {\n return\n }\n\n const wasEnabled = isRippleEnabled(binding.oldValue)\n updateRipple(el, binding, wasEnabled)\n}\n\nexport const Ripple: ObjectDirective = {\n mounted,\n unmounted,\n updated,\n}\n\nexport default Ripple\n","// Styles\nimport './VBtn.sass'\n\n// Components\nimport { VBtnToggleSymbol } from '@/components/VBtnToggle/VBtnToggle'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeGroupItemProps, useGroupItem } from '@/composables/group'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeRouterProps, useLink } from '@/composables/router'\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\n\n// Directives\nimport { Ripple } from '@/directives/ripple'\n\n// Utilities\nimport { computed } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport const VBtn = defineComponent({\n name: 'VBtn',\n\n directives: { Ripple },\n\n props: {\n flat: Boolean,\n icon: [Boolean, String],\n prependIcon: String,\n appendIcon: String,\n\n block: Boolean,\n stacked: Boolean,\n\n ripple: {\n type: Boolean,\n default: true,\n },\n\n ...makeBorderProps(),\n ...makeRoundedProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makeGroupItemProps(),\n ...makePositionProps(),\n ...makeRouterProps(),\n ...makeSizeProps(),\n ...makeTagProps({ tag: 'button' }),\n ...makeThemeProps(),\n ...makeVariantProps({ variant: 'contained' } as const),\n },\n\n setup (props, { attrs, slots }) {\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { colorClasses, colorStyles, variantClasses } = useVariant(props)\n const { densityClasses } = useDensity(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { positionClasses, positionStyles } = usePosition(props)\n const { roundedClasses } = useRounded(props)\n const { sizeClasses } = useSize(props)\n const group = useGroupItem(props, VBtnToggleSymbol, false)\n const link = useLink(props, attrs)\n const isDisabled = computed(() => group?.disabled.value || props.disabled)\n const isElevated = computed(() => {\n return props.variant === 'contained' && !(props.disabled || props.flat || props.border)\n })\n\n return () => {\n const Tag = (link.isLink.value) ? 'a' : props.tag\n\n return (\n <Tag\n type={ Tag === 'a' ? undefined : 'button' }\n class={[\n 'v-btn',\n group?.selectedClass.value,\n {\n 'v-btn--active': link.isExactActive?.value,\n 'v-btn--block': props.block,\n 'v-btn--disabled': isDisabled.value,\n 'v-btn--elevated': isElevated.value,\n 'v-btn--flat': props.flat,\n 'v-btn--icon': !!props.icon,\n 'v-btn--stacked': props.stacked,\n },\n themeClasses.value,\n borderClasses.value,\n colorClasses.value,\n densityClasses.value,\n elevationClasses.value,\n positionClasses.value,\n roundedClasses.value,\n sizeClasses.value,\n variantClasses.value,\n ]}\n style={[\n colorStyles.value,\n dimensionStyles.value,\n positionStyles.value,\n ]}\n disabled={ isDisabled.value || undefined }\n href={ link.href.value }\n v-ripple={[\n !isDisabled.value && props.ripple,\n null,\n props.icon ? ['center'] : null,\n ]}\n onClick={ isDisabled.value || link.navigate || group?.toggle }\n >\n { genOverlays(true, 'v-btn') }\n\n { !props.icon && props.prependIcon && (\n <VIcon\n class=\"v-btn__icon\"\n icon={ props.prependIcon }\n left={ !props.stacked }\n />\n ) }\n\n { typeof props.icon === 'boolean'\n ? slots.default?.()\n : (\n <VIcon\n class=\"v-btn__icon\"\n icon={ props.icon }\n size={ props.size }\n />\n )\n }\n\n { !props.icon && props.appendIcon && (\n <VIcon\n class=\"v-btn__icon\"\n icon={ props.appendIcon }\n right={ !props.stacked }\n />\n ) }\n </Tag>\n )\n }\n },\n})\n\nexport type VBtn = InstanceType<typeof VBtn>\n","// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VAppBarNavIcon = defineComponent({\n name: 'VAppBarNavIcon',\n\n props: {\n icon: {\n type: String,\n default: '$menu',\n },\n },\n\n setup (props, { slots }) {\n return () => (\n <VBtn class=\"v-app-bar-nav-icon\" icon={ props.icon }>\n { slots.default?.() }\n </VBtn>\n )\n },\n})\n","// Styles\nimport './VAppBarTitle.sass'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VAppBarTitle = defineComponent({\n name: 'VAppBarTitle',\n\n props: {\n ...makeTagProps({ tag: 'header' }),\n },\n\n setup (props, { slots }) {\n return () => (\n <props.tag class=\"v-app-bar-title\">\n { slots.default && (\n <div class=\"v-app-bar-title__placeholder\">\n { slots.default() }\n </div>\n ) }\n </props.tag>\n )\n },\n})\n","// Styles\nimport './VAvatar.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VImg } from '@/components/VImg'\n\n// Composables\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { useBackgroundColor } from '@/composables/color'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport const VAvatar = defineComponent({\n name: 'VAvatar',\n\n props: {\n color: String,\n left: Boolean,\n right: Boolean,\n icon: String,\n image: String,\n ...makeDensityProps(),\n ...makeRoundedProps(),\n ...makeSizeProps(),\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'color'))\n const { densityClasses } = useDensity(props)\n const { roundedClasses } = useRounded(props)\n const { sizeClasses, sizeStyles } = useSize(props)\n\n return () => (\n <props.tag\n class={[\n 'v-avatar',\n {\n 'v-avatar--left': props.left,\n 'v-avatar--right': props.right,\n },\n backgroundColorClasses.value,\n densityClasses.value,\n roundedClasses.value,\n sizeClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n sizeStyles.value,\n ]}\n >\n { props.image && <VImg src={ props.image } alt=\"\" /> }\n\n { props.icon && !props.image && <VIcon icon={ props.icon } /> }\n\n { slots.default?.() }\n </props.tag>\n )\n },\n})\n\nexport type VAvatar = InstanceType<typeof VAvatar>\n","// Styles\nimport './VAlert.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeVariantProps, useVariant } from '@/composables/variant'\nimport { useBorder } from '@/composables/border'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { computed } from 'vue'\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nconst allowedTypes = ['success', 'info', 'warning', 'error'] as const\n\ntype ContextualType = typeof allowedTypes[number]\n\nexport const VAlert = defineComponent({\n name: 'VAlert',\n\n props: {\n border: {\n type: [Boolean, String],\n validator: (val: boolean | string) => {\n return typeof val === 'boolean' || [\n 'top',\n 'end',\n 'bottom',\n 'start',\n ].includes(val)\n },\n },\n borderColor: String,\n closable: Boolean,\n closeIcon: {\n type: String,\n default: '$close',\n },\n closeLabel: {\n type: String,\n default: '$vuetify.close',\n },\n icon: {\n type: [Boolean, String] as PropType<false | string>,\n default: null,\n },\n modelValue: {\n type: Boolean,\n default: true,\n },\n prominent: Boolean,\n sticky: Boolean,\n text: String,\n tip: Boolean,\n type: {\n type: String as PropType<ContextualType>,\n validator: (val: ContextualType) => allowedTypes.includes(val),\n },\n\n ...makeDensityProps(),\n ...makeElevationProps(),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n ...makeVariantProps(),\n },\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots }) {\n const borderProps = computed(() => ({\n border: props.border === true || props.tip ? 'start' : props.border,\n }))\n const isActive = useProxiedModel(props, 'modelValue')\n const icon = computed(() => {\n if (props.icon === false) return undefined\n if (!props.type) return props.icon\n\n return props.icon ?? `$${props.type}`\n })\n const variantProps = computed(() => ({\n color: props.color ?? props.type,\n textColor: props.textColor,\n variant: props.variant,\n }))\n\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(borderProps.value)\n const { colorClasses, colorStyles, variantClasses } = useVariant(variantProps)\n const { densityClasses } = useDensity(props)\n const { elevationClasses } = useElevation(props)\n const { positionClasses, positionStyles } = usePosition(props)\n const { roundedClasses } = useRounded(props)\n const { textColorClasses, textColorStyles } = useTextColor(computed(() => {\n return props.borderColor ?? (props.tip ? variantProps.value.color : undefined)\n }))\n\n function onCloseClick (e: MouseEvent) {\n isActive.value = false\n }\n\n return () => {\n const hasBorder = !!borderProps.value.border\n const hasClose = !!(slots.close || props.closable)\n const hasPrepend = !!(slots.prepend || props.icon || props.type)\n const hasText = !!(slots.default || props.text || hasClose)\n\n return isActive.value && (\n <props.tag\n class={[\n 'v-alert',\n {\n [`v-alert--border-${borderProps.value.border}`]: hasBorder,\n 'v-alert--prominent': props.prominent,\n 'v-alert--tip': props.tip,\n },\n themeClasses.value,\n borderClasses.value,\n !props.tip && colorClasses.value,\n densityClasses.value,\n elevationClasses.value,\n positionClasses.value,\n roundedClasses.value,\n variantClasses.value,\n ]}\n style={[\n !props.tip && colorStyles.value,\n positionStyles.value,\n ]}\n role=\"alert\"\n >\n { hasBorder && (\n <div\n class={[\n 'v-alert__border',\n textColorClasses.value,\n ]}\n style={ textColorStyles.value }\n />\n ) }\n\n <div class=\"v-alert__underlay\" />\n\n <div class=\"v-alert__content\">\n { hasPrepend && (\n <div class=\"v-alert__avatar\">\n { slots.prepend\n ? slots.prepend()\n : (\n <VAvatar\n class={ props.tip && textColorClasses.value }\n style={ props.tip && textColorStyles.value }\n density={ props.density }\n icon={ icon.value }\n />\n )\n }\n </div>\n ) }\n\n { hasText && (\n <div class=\"v-alert__text\">\n { slots.default\n ? slots.default()\n : props.text\n }\n\n { hasClose && (\n <div class=\"v-alert__close\">\n { slots.close\n ? slots.close({ props: { onClick: onCloseClick } })\n : (\n <VBtn\n density={ props.density }\n icon={ props.closeIcon }\n variant=\"text\"\n onClick={ onCloseClick }\n />\n )\n }\n </div>\n ) }\n </div>\n ) }\n </div>\n </props.tag>\n )\n }\n },\n})\n\nexport type VAlert = InstanceType<typeof VAlert>\n","// Styles\nimport './VBadge.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { convertToUnit, defineComponent, pick } from '@/util'\n\nexport const VBadge = defineComponent({\n name: 'VBadge',\n\n inheritAttrs: false,\n\n props: {\n bordered: Boolean,\n color: {\n type: String,\n default: 'primary',\n },\n content: String,\n dot: Boolean,\n floating: Boolean,\n icon: String,\n inline: Boolean,\n label: {\n type: String,\n default: '$vuetify.badge',\n },\n location: {\n type: String,\n default: 'top-right',\n validator: (value: string) => {\n const [vertical, horizontal] = (value ?? '').split('-')\n\n return (\n ['top', 'bottom'].includes(vertical) &&\n ['left', 'right'].includes(horizontal)\n )\n },\n },\n max: [Number, String],\n modelValue: {\n type: Boolean,\n default: true,\n },\n offsetX: [Number, String],\n offsetY: [Number, String],\n textColor: String,\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeTransitionProps({ transition: 'scale-rotate-transition' }),\n },\n\n setup (props, ctx) {\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'color'))\n const { roundedClasses } = useRounded(props)\n const { textColorClasses, textColorStyles } = useTextColor(toRef(props, 'textColor'))\n\n const position = computed(() => {\n return props.floating\n ? (props.dot ? 2 : 4)\n : (props.dot ? 8 : 12)\n })\n\n function calculatePosition (offset?: number | string) {\n return `calc(100% - ${convertToUnit(position.value + parseInt(offset ?? 0, 10))})`\n }\n\n const locationStyles = computed(() => {\n const [vertical, horizontal] = (props.location ?? '').split('-')\n\n // TODO: RTL support\n\n const styles = {\n bottom: 'auto',\n left: 'auto',\n right: 'auto',\n top: 'auto',\n }\n\n if (!props.inline) {\n styles[horizontal === 'left' ? 'right' : 'left'] = calculatePosition(props.offsetX)\n styles[vertical === 'top' ? 'bottom' : 'top'] = calculatePosition(props.offsetY)\n }\n\n return styles\n })\n\n return () => {\n const value = Number(props.content)\n const content = (!props.max || isNaN(value)) ? props.content\n : value <= props.max ? value\n : `${props.max}+`\n\n const [badgeAttrs, attrs] = pick(ctx.attrs as Record<string, any>, [\n 'aria-atomic',\n 'aria-label',\n 'aria-live',\n 'role',\n 'title',\n ])\n\n return (\n <props.tag\n class={[\n 'v-badge',\n {\n 'v-badge--bordered': props.bordered,\n 'v-badge--dot': props.dot,\n 'v-badge--floating': props.floating,\n 'v-badge--inline': props.inline,\n },\n ]}\n { ...attrs }\n >\n <div class=\"v-badge__wrapper\">\n { ctx.slots.default?.() }\n\n <MaybeTransition transition={ props.transition }>\n <span\n v-show={ props.modelValue }\n class={[\n 'v-badge__badge',\n backgroundColorClasses.value,\n roundedClasses.value,\n textColorClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n locationStyles.value,\n textColorStyles.value,\n ]}\n aria-atomic=\"true\"\n aria-label=\"locale string here\" // TODO: locale string here\n aria-live=\"polite\"\n role=\"status\"\n { ...badgeAttrs }\n >\n {\n props.dot ? undefined\n : ctx.slots.badge ? ctx.slots.badge?.()\n : props.icon ? <VIcon icon={props.icon} />\n : <span class=\"v-badge__content\">{content}</span>\n }\n </span>\n </MaybeTransition>\n </div>\n </props.tag>\n )\n }\n },\n})\n\nexport type VBadge = InstanceType<typeof VBadge>\n","import { createSimpleFunctional } from '@/util'\n\nexport const VBannerActions = createSimpleFunctional('v-banner-actions')\n","// Composables\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VBannerAvatar = defineComponent({\n name: 'VBannerAvatar',\n\n props: {\n left: Boolean,\n right: Boolean,\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n return () => {\n return (\n <props.tag\n class={[\n 'v-banner-avatar',\n {\n 'v-banner-avatar--start': props.left,\n 'v-banner-avatar--end': props.right,\n },\n ]}\n v-slots={ slots }\n />\n )\n }\n },\n})\n","import { createSimpleFunctional } from '@/util'\n\nexport const VBannerContent = createSimpleFunctional('v-banner-content')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VBannerText = createSimpleFunctional('v-banner-text')\n","// Utilities\nimport { inject, reactive, ref, toRefs, watchEffect } from 'vue'\nimport { mergeDeep } from '@/util'\n\n// Globals\nimport { IN_BROWSER, SUPPORTS_TOUCH } from '@/util/globals'\n\n// Types\nimport type { InjectionKey, ToRefs } from 'vue'\n\nexport type DisplayBreakpoint = keyof DisplayThresholds\n\nexport interface DisplayThresholds {\n xs: number\n sm: number\n md: number\n lg: number\n xl: number\n xxl: number\n}\n\nexport interface DisplayOptions {\n mobileBreakpoint?: number | DisplayBreakpoint\n thresholds?: Partial<DisplayThresholds>\n}\n\nexport interface InternalDisplayOptions {\n mobileBreakpoint: number | DisplayBreakpoint\n thresholds: DisplayThresholds\n}\n\nexport interface DisplayPlatform {\n android: boolean\n ios: boolean\n cordova: boolean\n electron: boolean\n chrome: boolean\n edge: boolean\n firefox: boolean\n opera: boolean\n win: boolean\n mac: boolean\n linux: boolean\n touch: boolean\n ssr: boolean\n}\n\nexport interface DisplayInstance {\n xs: boolean\n sm: boolean\n md: boolean\n lg: boolean\n xl: boolean\n xxl: boolean\n smAndUp: boolean\n mdAndUp: boolean\n lgAndUp: boolean\n xlAndUp: boolean\n smAndDown: boolean\n mdAndDown: boolean\n lgAndDown: boolean\n xlAndDown: boolean\n name: DisplayBreakpoint\n height: number\n width: number\n mobile: boolean\n mobileBreakpoint: number | DisplayBreakpoint\n platform: DisplayPlatform\n thresholds: DisplayThresholds\n}\n\nexport const DisplaySymbol: InjectionKey<ToRefs<DisplayInstance>> = Symbol.for('vuetify:display')\n\nconst defaultDisplayOptions: DisplayOptions = {\n mobileBreakpoint: 'lg',\n thresholds: {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n xxl: 2560,\n },\n}\n\nconst parseDisplayOptions = (options: DisplayOptions = defaultDisplayOptions) => {\n return mergeDeep(defaultDisplayOptions, options) as InternalDisplayOptions\n}\n\n// Cross-browser support as described in:\n// https://stackoverflow.com/questions/1248081\nfunction getClientWidth () {\n return IN_BROWSER ? Math.max(\n document.documentElement!.clientWidth,\n window.innerWidth\n ) : 0 // SSR\n}\n\nfunction getClientHeight () {\n return IN_BROWSER ? Math.max(\n document.documentElement!.clientHeight,\n window.innerHeight\n ) : 0 // SSR\n}\n\nfunction getPlatform (): DisplayPlatform {\n const userAgent = IN_BROWSER ? window.navigator.userAgent : 'ssr'\n\n function match (regexp: RegExp) {\n return Boolean(userAgent.match(regexp))\n }\n\n const android = match(/android/i)\n const ios = match(/iphone|ipad|ipod/i)\n const cordova = match(/cordova/i)\n const electron = match(/electron/i)\n const chrome = match(/chrome/i)\n const edge = match(/edge/i)\n const firefox = match(/firefox/i)\n const opera = match(/opera/i)\n const win = match(/win/i)\n const mac = match(/mac/i)\n const linux = match(/linux/i)\n const ssr = match(/ssr/i)\n\n return {\n android,\n ios,\n cordova,\n electron,\n chrome,\n edge,\n firefox,\n opera,\n win,\n mac,\n linux,\n touch: SUPPORTS_TOUCH,\n ssr,\n }\n}\n\nexport function createDisplay (options?: DisplayOptions): ToRefs<DisplayInstance> {\n const { thresholds, mobileBreakpoint } = parseDisplayOptions(options)\n\n const height = ref(getClientHeight())\n const platform = getPlatform()\n const state = reactive({} as DisplayInstance)\n const width = ref(getClientWidth())\n\n function onResize () {\n height.value = getClientHeight()\n width.value = getClientWidth()\n }\n\n // eslint-disable-next-line max-statements\n watchEffect(() => {\n const xs = width.value < thresholds.sm\n const sm = width.value < thresholds.md && !xs\n const md = width.value < thresholds.lg && !(sm || xs)\n const lg = width.value < thresholds.xl && !(md || sm || xs)\n const xl = width.value < thresholds.xxl && !(lg || md || sm || xs)\n const xxl = width.value >= thresholds.xxl\n const name =\n xs ? 'xs'\n : sm ? 'sm'\n : md ? 'md'\n : lg ? 'lg'\n : xl ? 'xl'\n : 'xxl'\n const breakpointValue = typeof mobileBreakpoint === 'number' ? mobileBreakpoint : thresholds[mobileBreakpoint]\n const mobile = !platform.ssr\n ? width.value < breakpointValue\n : platform.android || platform.ios || platform.opera\n\n state.xs = xs\n state.sm = sm\n state.md = md\n state.lg = lg\n state.xl = xl\n state.xxl = xxl\n state.smAndUp = !xs\n state.mdAndUp = !(xs || sm)\n state.lgAndUp = !(xs || sm || md)\n state.xlAndUp = !(xs || sm || md || lg)\n state.smAndDown = !(md || lg || xl || xxl)\n state.mdAndDown = !(lg || xl || xxl)\n state.lgAndDown = !(xl || xxl)\n state.xlAndDown = !xxl\n state.name = name\n state.height = height.value\n state.width = width.value\n state.mobile = mobile\n state.mobileBreakpoint = mobileBreakpoint\n state.platform = platform\n state.thresholds = thresholds\n })\n\n if (IN_BROWSER) {\n window.addEventListener('resize', onResize, { passive: true })\n }\n\n return toRefs(state)\n}\n\nexport function useDisplay () {\n const display = inject(DisplaySymbol)\n\n if (!display) throw new Error('Could not find Vuetify display injection')\n\n return display\n}\n","// Styles\nimport './VBanner.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { VBannerActions } from './VBannerActions'\nimport { VBannerAvatar } from './VBannerAvatar'\nimport { VBannerContent } from './VBannerContent'\nimport { VBannerText } from './VBannerText'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useDisplay } from '@/composables/display'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport const VBanner = defineComponent({\n name: 'VBanner',\n\n props: {\n avatar: String,\n color: String,\n icon: String,\n lines: {\n type: String,\n default: 'one',\n },\n sticky: Boolean,\n text: String,\n\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { densityClasses } = useDensity(props)\n const { dimensionStyles } = useDimension(props)\n const { mobile } = useDisplay()\n const { elevationClasses } = useElevation(props)\n const { positionClasses, positionStyles } = usePosition(props)\n const { roundedClasses } = useRounded(props)\n const { textColorClasses, textColorStyles } = useTextColor(toRef(props, 'color'))\n\n return () => {\n const hasAvatar = !!(props.avatar || props.icon || slots.avatar || slots.icon)\n const hasText = !!(props.text || slots.text)\n const hasContent = hasAvatar || hasText || slots.default\n\n return (\n <props.tag\n class={[\n 'v-banner',\n {\n 'v-banner--mobile': mobile.value,\n 'v-banner--sticky': props.sticky,\n [`v-banner--${props.lines}-line`]: true,\n },\n borderClasses.value,\n densityClasses.value,\n elevationClasses.value,\n positionClasses.value,\n roundedClasses.value,\n textColorClasses.value,\n themeClasses.value,\n ]}\n style={[\n dimensionStyles.value,\n positionStyles.value,\n textColorStyles.value,\n ]}\n role=\"banner\"\n >\n { hasContent && (\n <VBannerContent>\n { hasAvatar && (\n <VBannerAvatar>\n { slots.avatar\n ? slots.avatar()\n : (\n <VAvatar\n density={ props.density }\n icon={ props.icon }\n image={ props.avatar }\n />\n )\n }\n </VBannerAvatar>\n ) }\n\n { hasText && (\n <VBannerText>\n { slots.text ? slots.text() : props.text }\n </VBannerText>\n ) }\n\n { slots.default?.() }\n </VBannerContent>\n ) }\n\n { slots.actions && (\n <VBannerActions v-slots={{ default: slots.actions }} />\n ) }\n </props.tag>\n )\n }\n },\n})\n\nexport type VBanner = InstanceType<typeof VBanner>\n","// Styles\nimport './VBottomNavigation.sass'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeLayoutItemProps, useLayoutItem } from '@/composables/layout'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed } from 'vue'\nimport { convertToUnit, defineComponent } from '@/util'\n\nexport const VBottomNavigation = defineComponent({\n name: 'VBottomNavigation',\n\n props: {\n bgColor: String,\n color: String,\n grow: Boolean,\n modelValue: {\n type: Boolean,\n default: true,\n },\n mode: {\n type: String,\n validator: (v: any) => !v || ['horizontal', 'shift'].includes(v),\n },\n height: {\n type: [Number, String],\n default: 56,\n },\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeElevationProps(),\n ...makeRoundedProps(),\n ...makeLayoutItemProps({\n name: 'bottom-navigation',\n }),\n ...makeTagProps({ tag: 'header' }),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(computed(() => props.bgColor))\n const { textColorClasses, textColorStyles } = useTextColor(computed(() => props.color))\n const { densityClasses } = useDensity(props)\n const { elevationClasses } = useElevation(props)\n const { roundedClasses } = useRounded(props)\n const height = computed(() => (\n Number(props.height) -\n (props.density === 'comfortable' ? 8 : 0) -\n (props.density === 'compact' ? 16 : 0)\n ))\n const isActive = useProxiedModel(props, 'modelValue', props.modelValue)\n const layoutStyles = useLayoutItem(\n props.name,\n computed(() => parseInt(props.priority, 10)),\n computed(() => 'bottom'),\n computed(() => isActive.value ? height.value : 0),\n height,\n isActive\n )\n\n return () => {\n return (\n <props.tag\n class={[\n 'v-bottom-navigation',\n {\n 'v-bottom-navigation--grow': props.grow,\n 'v-bottom-navigation--horizontal': props.mode === 'horizontal',\n 'v-bottom-navigation--is-active': isActive.value,\n 'v-bottom-navigation--shift': props.mode === 'shift',\n 'v-bottom-navigation--absolute': props.absolute,\n },\n themeClasses.value,\n backgroundColorClasses.value,\n borderClasses.value,\n densityClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n textColorClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n layoutStyles.value,\n textColorStyles.value,\n {\n height: convertToUnit(height.value),\n transform: `translateY(${convertToUnit(!isActive.value ? 100 : 0, '%')})`,\n },\n ]}\n >\n { slots.default && (\n <div class=\"v-bottom-navigation__content\">\n { slots.default() }\n </div>\n ) }\n </props.tag>\n )\n }\n },\n})\n\nexport type VBottomNavigation = InstanceType<typeof VBottomNavigation>\n","import type { InjectionKey, Ref } from 'vue'\n\ninterface BreadcrumbsContext {\n color: Ref<string | undefined>\n disabled: Ref<boolean>\n}\n\nexport const VBreadcrumbsSymbol: InjectionKey<BreadcrumbsContext> = Symbol.for('vuetify:breadcrumbs')\n","// Composables\nimport { makeRouterProps, useLink } from '@/composables/router'\nimport { makeTagProps } from '@/composables/tag'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { computed, inject } from 'vue'\nimport { defineComponent } from '@/util'\nimport { VBreadcrumbsSymbol } from './shared'\n\nexport const VBreadcrumbsItem = defineComponent({\n name: 'VBreadcrumbsItem',\n\n props: {\n active: Boolean,\n activeClass: String,\n activeColor: String,\n color: String,\n disabled: Boolean,\n text: String,\n\n ...makeRouterProps(),\n ...makeTagProps({ tag: 'li' }),\n },\n\n setup (props, { slots, attrs }) {\n const breadcrumbs = inject(VBreadcrumbsSymbol)\n\n if (!breadcrumbs) throw new Error('[Vuetify] Could not find v-breadcrumbs provider')\n\n const link = useLink(props, attrs)\n const isActive = computed(() => {\n return props.active || link.isExactActive?.value\n })\n const color = computed(() => {\n if (isActive.value) return props.activeColor ?? breadcrumbs.color.value\n\n return props.color\n })\n const { textColorClasses, textColorStyles } = useTextColor(color)\n\n return () => {\n const Tag = (link.isLink.value) ? 'a' : props.tag\n\n return (\n <Tag\n class={[\n 'v-breadcrumbs-item',\n {\n 'v-breadcrumbs-item--active': isActive.value,\n 'v-breadcrumbs-item--disabled': props.disabled || breadcrumbs.disabled.value,\n 'v-breadcrumbs-item--link': link.isLink.value,\n [`${props.activeClass}`]: isActive.value && props.activeClass,\n },\n textColorClasses.value,\n ]}\n style={[\n textColorStyles.value,\n ]}\n aria-current={ isActive.value ? 'page' : undefined }\n onClick={ isActive.value && link.navigate }\n >\n { props.text }\n\n { slots.default?.() }\n </Tag>\n )\n }\n },\n})\n","import { createSimpleFunctional } from '@/util'\n\nexport const VBreadcrumbsDivider = createSimpleFunctional('v-breadcrumbs-divider', 'li')\n","// Styles\nimport './VBreadcrumbs.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VBreadcrumbsItem } from './VBreadcrumbsItem'\nimport { VBreadcrumbsDivider } from './VBreadcrumbsDivider'\n\n// Composables\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { computed, provide, toRef } from 'vue'\nimport { defineComponent } from '@/util'\nimport { VBreadcrumbsSymbol } from './shared'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { LinkProps } from '@/composables/router'\n\nexport type BreadcrumbItem = string | (LinkProps & {\n text: string\n})\n\nexport const VBreadcrumbs = defineComponent({\n name: 'VBreadcrumbs',\n\n props: {\n color: String,\n disabled: Boolean,\n divider: {\n type: String,\n default: '/',\n },\n icon: String,\n items: {\n type: Array as PropType<BreadcrumbItem[]>,\n default: () => ([]),\n },\n\n ...makeDensityProps(),\n ...makeRoundedProps(),\n ...makeTagProps({ tag: 'ul' }),\n },\n\n setup (props, { slots }) {\n const { densityClasses } = useDensity(props)\n const { roundedClasses } = useRounded(props)\n const { textColorClasses, textColorStyles } = useTextColor(toRef(props, 'color'))\n const items = computed(() => {\n return props.items.map((item, index, array) => ({\n props: {\n disabled: index >= array.length - 1,\n ...(typeof item === 'string' ? { text: item } : item),\n },\n }))\n })\n\n provide(VBreadcrumbsSymbol, {\n color: toRef(props, 'color'),\n disabled: toRef(props, 'disabled'),\n })\n\n return () => (\n <props.tag\n class={[\n 'v-breadcrumbs',\n densityClasses.value,\n roundedClasses.value,\n textColorClasses.value,\n ]}\n style={[\n textColorStyles.value,\n ]}\n >\n { props.icon && (\n <VIcon icon={ props.icon } left />\n ) }\n\n { items.value.map((item, index) => (\n <>\n <VBreadcrumbsItem\n key={ index }\n { ...item.props }\n >\n { slots.item?.({ ...item, index }) }\n </VBreadcrumbsItem>\n\n { index < props.items.length - 1 && (\n <VBreadcrumbsDivider>\n { slots.divider ? slots.divider({ ...item, index }) : props.divider }\n </VBreadcrumbsDivider>\n ) }\n </>\n )) }\n\n { slots.default?.() }\n </props.tag>\n )\n },\n})\n\nexport type VBreadcrumbs = InstanceType<typeof VBreadcrumbs>\n","import { createSimpleFunctional } from '@/util'\n\nexport const VCardActions = createSimpleFunctional('v-card-actions')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VCardAvatar = createSimpleFunctional('v-card-avatar')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VCardHeader = createSimpleFunctional('v-card-header')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VCardHeaderText = createSimpleFunctional('v-card-header-text')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VCardImg = createSimpleFunctional('v-card-img')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VCardSubtitle = createSimpleFunctional('v-card-subtitle')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VCardText = createSimpleFunctional('v-card-text')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VCardTitle = createSimpleFunctional('v-card-title')\n","// Styles\nimport './VCard.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { VImg } from '@/components/VImg'\nimport { VCardActions } from './VCardActions'\nimport { VCardAvatar } from './VCardAvatar'\nimport { VCardHeader } from './VCardHeader'\nimport { VCardHeaderText } from './VCardHeaderText'\nimport { VCardImg } from './VCardImg'\nimport { VCardSubtitle } from './VCardSubtitle'\nimport { VCardText } from './VCardText'\nimport { VCardTitle } from './VCardTitle'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeRouterProps, useLink } from '@/composables/router'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\n\n// Directives\nimport { Ripple } from '@/directives/ripple'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VCard = defineComponent({\n name: 'VCard',\n\n directives: { Ripple },\n\n props: {\n appendAvatar: String,\n appendIcon: String,\n disabled: Boolean,\n flat: Boolean,\n hover: Boolean,\n image: String,\n link: Boolean,\n prependAvatar: String,\n prependIcon: String,\n ripple: Boolean,\n subtitle: String,\n text: String,\n title: String,\n\n ...makeThemeProps(),\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeRouterProps(),\n ...makeTagProps(),\n ...makeVariantProps({ variant: 'contained' } as const),\n },\n\n setup (props, { attrs, slots }) {\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { colorClasses, colorStyles, variantClasses } = useVariant(props)\n const { densityClasses } = useDensity(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { positionClasses, positionStyles } = usePosition(props)\n const { roundedClasses } = useRounded(props)\n const link = useLink(props, attrs)\n\n return () => {\n const Tag = (link.isLink.value) ? 'a' : props.tag\n const hasTitle = !!(slots.title || props.title)\n const hasSubtitle = !!(slots.subtitle || props.subtitle)\n const hasHeaderText = hasTitle || hasSubtitle\n const hasAppend = !!(slots.append || props.appendAvatar || props.appendIcon)\n const hasPrepend = !!(slots.prepend || props.prependAvatar || props.prependIcon)\n const hasImage = !!(slots.image || props.image)\n const hasHeader = hasHeaderText || hasPrepend || hasAppend\n const hasText = !!(slots.text || props.text)\n const isClickable = !props.disabled && (link.isClickable.value || props.link)\n\n return (\n <Tag\n class={[\n 'v-card',\n {\n 'v-card--disabled': props.disabled,\n 'v-card--flat': props.flat,\n 'v-card--hover': props.hover && !(props.disabled || props.flat),\n 'v-card--link': isClickable,\n },\n themeClasses.value,\n borderClasses.value,\n colorClasses.value,\n densityClasses.value,\n elevationClasses.value,\n positionClasses.value,\n roundedClasses.value,\n variantClasses.value,\n ]}\n style={[\n colorStyles.value,\n dimensionStyles.value,\n positionStyles.value,\n ]}\n href={ link.href.value }\n onClick={ isClickable && link.navigate }\n v-ripple={ isClickable }\n >\n { genOverlays(isClickable, 'v-card') }\n\n { hasImage && (\n <VCardImg>\n { slots.image\n ? slots.image?.({ src: props.image })\n : (<VImg src={ props.image } cover alt=\"\" />)\n }\n </VCardImg>\n ) }\n\n { slots.media?.() }\n\n { hasHeader && (\n <VCardHeader>\n { hasPrepend && (\n <VCardAvatar>\n { slots.prepend\n ? slots.prepend()\n : (\n <VAvatar\n density={ props.density }\n icon={ props.prependIcon }\n image={ props.prependAvatar }\n />\n )\n }\n </VCardAvatar>\n ) }\n\n { hasHeaderText && (\n <VCardHeaderText>\n { hasTitle && (\n <VCardTitle>\n { slots.title\n ? slots.title()\n : props.title\n }\n </VCardTitle>\n ) }\n\n <VCardSubtitle>\n { slots.subtitle\n ? slots.subtitle()\n : props.subtitle\n }\n </VCardSubtitle>\n </VCardHeaderText>\n ) }\n\n { hasAppend && (\n <VCardAvatar>\n { slots.append\n ? slots.append()\n : (\n <VAvatar\n density={ props.density }\n icon={ props.appendIcon }\n image={ props.appendAvatar }\n />\n )\n }\n </VCardAvatar>\n ) }\n </VCardHeader>\n ) }\n\n { hasText && (\n <VCardText>\n { slots.text ? slots.text() : props.text }\n </VCardText>\n ) }\n\n { slots.default?.() }\n\n { slots.actions && (\n <VCardActions v-slots={{ default: slots.actions }} />\n ) }\n </Tag>\n )\n }\n },\n})\n\nexport type VCard = InstanceType<typeof VCard>\n","// Utilities\nimport { h, Transition, TransitionGroup } from 'vue'\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { FunctionalComponent, Prop } from 'vue'\n\nexport function createCssTransition (\n name: string,\n origin = 'top center 0',\n mode?: string\n) {\n return defineComponent({\n name,\n\n props: {\n group: Boolean,\n hideOnLeave: Boolean,\n leaveAbsolute: Boolean,\n mode: {\n type: String,\n default: mode,\n },\n origin: {\n type: String,\n default: origin,\n },\n },\n\n setup (props, { slots }) {\n return () => {\n const tag = props.group ? TransitionGroup : Transition\n\n return h(tag as FunctionalComponent, {\n name,\n mode: props.mode,\n onBeforeEnter (el: HTMLElement) {\n el.style.transformOrigin = props.origin\n },\n onLeave (el: HTMLElement) {\n if (props.leaveAbsolute) {\n const { offsetTop, offsetLeft, offsetWidth, offsetHeight } = el\n el._transitionInitialStyles = {\n position: el.style.position,\n top: el.style.top,\n left: el.style.left,\n width: el.style.width,\n height: el.style.height,\n }\n el.style.position = 'absolute'\n el.style.top = `${offsetTop}px`\n el.style.left = `${offsetLeft}px`\n el.style.width = `${offsetWidth}px`\n el.style.height = `${offsetHeight}px`\n }\n\n if (props.hideOnLeave) {\n el.style.setProperty('display', 'none', 'important')\n }\n },\n onAfterLeave (el: HTMLElement) {\n if (props.leaveAbsolute && el?._transitionInitialStyles) {\n const { position, top, left, width, height } = el._transitionInitialStyles\n delete el._transitionInitialStyles\n el.style.position = position || ''\n el.style.top = top || ''\n el.style.left = left || ''\n el.style.width = width || ''\n el.style.height = height || ''\n }\n },\n }, slots.default)\n }\n },\n })\n}\n\nexport function createJavascriptTransition (\n name: string,\n functions: Record<string, any>,\n mode = 'in-out'\n) {\n return defineComponent({\n name,\n\n props: {\n mode: {\n type: String,\n default: mode,\n } as Prop<'in-out' | 'out-in' | 'default'>,\n },\n\n setup (props, { slots }) {\n return () => {\n return h(Transition, {\n name,\n // mode: props.mode, // TODO: vuejs/vue-next#3104\n ...functions,\n }, slots.default)\n }\n },\n })\n}\n","// Utilities\nimport { camelize } from 'vue'\n\ninterface HTMLExpandElement extends HTMLElement {\n _parent?: (Node & ParentNode & HTMLElement) | null\n _initialStyle?: {\n transition: string\n overflow: string\n height?: string | null\n width?: string | null\n }\n}\n\nexport default function (expandedParentClass = '', x = false) {\n const sizeProperty = x ? 'width' : 'height' as 'width' | 'height'\n const offsetProperty = camelize(`offset-${sizeProperty}`) as 'offsetHeight' | 'offsetWidth'\n\n return {\n onBeforeEnter (el: HTMLExpandElement) {\n el._parent = el.parentNode as (Node & ParentNode & HTMLElement) | null\n el._initialStyle = {\n transition: el.style.transition,\n overflow: el.style.overflow,\n [sizeProperty]: el.style[sizeProperty],\n }\n },\n\n onEnter (el: HTMLExpandElement) {\n const initialStyle = el._initialStyle!\n\n el.style.setProperty('transition', 'none', 'important')\n // Hide overflow to account for collapsed margins in the calculated height\n el.style.overflow = 'hidden'\n const offset = `${el[offsetProperty]}px`\n\n el.style[sizeProperty] = '0'\n\n void el.offsetHeight // force reflow\n\n el.style.transition = initialStyle.transition\n\n if (expandedParentClass && el._parent) {\n el._parent.classList.add(expandedParentClass)\n }\n\n requestAnimationFrame(() => {\n el.style[sizeProperty] = offset\n })\n },\n\n onAfterEnter: resetStyles,\n onEnterCancelled: resetStyles,\n\n onLeave (el: HTMLExpandElement) {\n el._initialStyle = {\n transition: '',\n overflow: el.style.overflow,\n [sizeProperty]: el.style[sizeProperty],\n }\n\n el.style.overflow = 'hidden'\n el.style[sizeProperty] = `${el[offsetProperty]}px`\n void el.offsetHeight // force reflow\n\n requestAnimationFrame(() => (el.style[sizeProperty] = '0'))\n },\n\n onAfterLeave,\n onLeaveCancelled: onAfterLeave,\n }\n\n function onAfterLeave (el: HTMLExpandElement) {\n if (expandedParentClass && el._parent) {\n el._parent.classList.remove(expandedParentClass)\n }\n resetStyles(el)\n }\n\n function resetStyles (el: HTMLExpandElement) {\n const size = el._initialStyle![sizeProperty]\n el.style.overflow = el._initialStyle!.overflow\n if (size != null) el.style[sizeProperty] = size\n delete el._initialStyle\n }\n}\n","import type { PropType } from 'vue'\nimport { Transition } from 'vue'\nimport { acceleratedEasing, deceleratedEasing, defineComponent, nullifyTransforms } from '@/util'\n\nexport const VDialogTransition = defineComponent({\n name: 'VDialogTransition',\n\n props: {\n target: Object as PropType<HTMLElement>,\n },\n\n setup (props, { slots }) {\n const functions = {\n onBeforeEnter (el: Element) {\n (el as HTMLElement).style.pointerEvents = 'none'\n },\n async onEnter (el: Element, done: () => void) {\n await new Promise(resolve => requestAnimationFrame(resolve))\n\n const { x, y } = getDimensions(props.target!, el as HTMLElement)\n\n const animation = el.animate([\n { transform: `translate(${x}px, ${y}px) scale(0.1)`, opacity: 0 },\n { transform: '' },\n ], {\n duration: 225,\n easing: deceleratedEasing,\n })\n animation.finished.then(() => done())\n },\n onAfterEnter (el: Element) {\n (el as HTMLElement).style.removeProperty('pointer-events')\n },\n onBeforeLeave (el: Element) {\n (el as HTMLElement).style.pointerEvents = 'none'\n },\n async onLeave (el: Element, done: () => void) {\n await new Promise(resolve => requestAnimationFrame(resolve))\n\n const { x, y } = getDimensions(props.target!, el as HTMLElement)\n\n const animation = el.animate([\n { transform: '' },\n { transform: `translate(${x}px, ${y}px) scale(0.1)`, opacity: 0 },\n ], {\n duration: 125,\n easing: acceleratedEasing,\n })\n animation.finished.then(() => done())\n },\n onAfterLeave (el: Element) {\n (el as HTMLElement).style.removeProperty('pointer-events')\n },\n }\n\n return () => {\n return props.target\n ? (\n <Transition\n name=\"dialog-transition\"\n { ...functions }\n css={ false }\n v-slots={ slots }\n />\n )\n : <Transition name=\"dialog-transition\" v-slots={ slots } />\n }\n },\n})\n\nfunction getDimensions (target: HTMLElement, el: HTMLElement) {\n const targetBox = target.getBoundingClientRect()\n const elBox = nullifyTransforms(el)\n const [originX, originY] = getComputedStyle(el).transformOrigin.split(' ').map(v => parseFloat(v))\n\n const [anchorSide, anchorOffset] = getComputedStyle(el).getPropertyValue('--v-overlay-anchor-origin').split(' ')\n\n let offsetX = targetBox.left + targetBox.width / 2\n if (anchorSide === 'left' || anchorOffset === 'left') {\n offsetX -= targetBox.width / 2\n } else if (anchorSide === 'right' || anchorOffset === 'right') {\n offsetX += targetBox.width / 2\n }\n\n let offsetY = targetBox.top + targetBox.height / 2\n if (anchorSide === 'top' || anchorOffset === 'top') {\n offsetY -= targetBox.height / 2\n } else if (anchorSide === 'bottom' || anchorOffset === 'bottom') {\n offsetY += targetBox.height / 2\n }\n\n return {\n x: offsetX - (originX + elBox.left),\n y: offsetY - (originY + elBox.top),\n }\n}\n","import {\n createCssTransition,\n createJavascriptTransition,\n} from './createTransition'\n\nimport ExpandTransitionGenerator from './expand-transition'\n\n// Component specific transitions\nexport const VCarouselTransition = createCssTransition('carousel-transition')\nexport const VCarouselReverseTransition = createCssTransition('carousel-reverse-transition')\nexport const VTabTransition = createCssTransition('tab-transition')\nexport const VTabReverseTransition = createCssTransition('tab-reverse-transition')\nexport const VMenuTransition = createCssTransition('menu-transition')\nexport const VFabTransition = createCssTransition('fab-transition', 'center center', 'out-in')\n\n// Generic transitions\nexport const VDialogBottomTransition = createCssTransition('dialog-bottom-transition')\nexport const VDialogTopTransition = createCssTransition('dialog-top-transition')\nexport const VFadeTransition = createCssTransition('fade-transition')\nexport const VScaleTransition = createCssTransition('scale-transition')\nexport const VScrollXTransition = createCssTransition('scroll-x-transition')\nexport const VScrollXReverseTransition = createCssTransition('scroll-x-reverse-transition')\nexport const VScrollYTransition = createCssTransition('scroll-y-transition')\nexport const VScrollYReverseTransition = createCssTransition('scroll-y-reverse-transition')\nexport const VSlideXTransition = createCssTransition('slide-x-transition')\nexport const VSlideXReverseTransition = createCssTransition('slide-x-reverse-transition')\nexport const VSlideYTransition = createCssTransition('slide-y-transition')\nexport const VSlideYReverseTransition = createCssTransition('slide-y-reverse-transition')\n\n// Javascript transitions\nexport const VExpandTransition = createJavascriptTransition('expand-transition', ExpandTransitionGenerator())\nexport const VExpandXTransition = createJavascriptTransition('expand-x-transition', ExpandTransitionGenerator('', true))\n\nexport { VDialogTransition } from './dialog-transition'\n","// Styles\nimport './VMessages.sass'\n\n// Components\nimport { VSlideYTransition } from '@/components/transitions'\n\n// Composables\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { defineComponent, wrapInArray } from '@/util'\nimport { computed } from 'vue'\nimport type { PropType } from 'vue'\n\nexport const VMessages = defineComponent({\n name: 'VMessages',\n\n props: {\n active: Boolean,\n color: String,\n value: {\n type: [Array, String] as PropType<string | string[]>,\n default: () => ([]),\n },\n\n ...makeTransitionProps({\n transition: {\n component: VSlideYTransition,\n leaveAbsolute: true,\n group: true,\n },\n }),\n },\n\n setup (props, { slots }) {\n const messages = computed(() => wrapInArray(props.value))\n const { textColorClasses, textColorStyles } = useTextColor(computed(() => props.color))\n\n return () => (\n <MaybeTransition\n transition={ props.transition }\n tag=\"div\"\n class={[\n 'v-messages',\n textColorClasses.value,\n ]}\n style={ textColorStyles.value }\n >\n { (messages.value.length > 0 && props.active) && (\n messages.value.map((message, i) => (\n <div class=\"v-messages__message\" key={ `${i}-${messages.value}` }>\n { message }\n </div>\n ))\n ) }\n\n { slots?.default?.() }\n </MaybeTransition>\n )\n },\n})\n","// Utilities\nimport { computed, inject, provide, ref } from 'vue'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { ComputedRef, InjectionKey, PropType, Ref } from 'vue'\n\nexport interface FormProvide {\n register: (\n id: number | string,\n validate: () => Promise<string[]>,\n reset: () => void,\n resetValidation: () => void\n ) => void\n unregister: (id: number | string) => void\n items: Ref<FormField[]>\n isDisabled: ComputedRef<boolean>\n isReadonly: ComputedRef<boolean>\n isValidating: Ref<boolean>\n}\n\ninterface FormField {\n id: number | string\n validate: () => Promise<string[]>\n reset: () => void\n resetValidation: () => void\n}\n\ninterface FormValidationResult {\n id: number | string\n errorMessages: string[]\n}\n\nexport const FormKey: InjectionKey<FormProvide> = Symbol.for('vuetify:form')\n\nexport interface FormProps {\n disabled: boolean\n fastFail: boolean\n lazyValidation: boolean\n readonly: boolean\n modelValue: boolean | null\n 'onUpdate:modelValue': ((val: boolean | null) => void) | undefined\n}\n\nexport const makeFormProps = propsFactory({\n disabled: Boolean,\n fastFail: Boolean,\n lazyValidation: Boolean,\n readonly: Boolean,\n modelValue: {\n type: Boolean as PropType<boolean | null>,\n default: null,\n },\n})\n\nexport function createForm (props: FormProps) {\n const model = useProxiedModel(props, 'modelValue')\n\n const isDisabled = computed(() => props.disabled)\n const isReadonly = computed(() => props.readonly)\n const isValidating = ref(false)\n const items = ref<FormField[]>([])\n const errorMessages = ref<FormValidationResult[]>([])\n\n async function validate () {\n const results = []\n let valid = true\n\n errorMessages.value = []\n model.value = null\n isValidating.value = true\n\n for (const item of items.value) {\n const itemErrorMessages = await item.validate()\n\n if (itemErrorMessages.length > 0) {\n valid = false\n\n results.push({\n id: item.id,\n errorMessages: itemErrorMessages,\n })\n }\n\n if (!valid && props.fastFail) break\n }\n\n errorMessages.value = results\n model.value = valid\n isValidating.value = false\n\n return { valid, errorMessages: errorMessages.value }\n }\n\n function reset () {\n items.value.forEach(item => item.reset())\n model.value = null\n }\n\n function resetValidation () {\n items.value.forEach(item => item.resetValidation())\n errorMessages.value = []\n model.value = null\n }\n\n provide(FormKey, {\n register: (id, validate, reset, resetValidation) => {\n items.value.push({\n id,\n validate,\n reset,\n resetValidation,\n })\n },\n unregister: id => {\n items.value = items.value.filter(item => {\n return item.id !== id\n })\n },\n isDisabled,\n isReadonly,\n isValidating,\n items,\n })\n\n return {\n errorMessages,\n isDisabled,\n isReadonly,\n isValidating,\n items,\n validate,\n reset,\n resetValidation,\n }\n}\n\nexport function useForm () {\n return inject(FormKey, null)\n}\n","// Composables\nimport { useForm } from '@/composables/form'\n\n// Utilities\nimport { computed, onBeforeMount, onBeforeUnmount, ref } from 'vue'\nimport { getCurrentInstanceName, getUid, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\nexport type ValidationResult = string | true\nexport type ValidationRule =\n | ValidationResult\n | PromiseLike<ValidationResult>\n | ((value: any) => ValidationResult)\n | ((value: any) => PromiseLike<ValidationResult>)\n\nexport interface ValidationProps {\n disabled: boolean\n error: boolean\n errorMessages: string | string[]\n maxErrors: string | number\n name: string | undefined\n readonly: boolean\n rules: ValidationRule[]\n modelValue: any\n 'onUpdate:modelValue': ((val: any) => void) | undefined\n}\n\nexport const makeValidationProps = propsFactory({\n disabled: Boolean,\n error: Boolean,\n errorMessages: {\n type: [Array, String] as PropType<string | string[]>,\n default: () => ([]),\n },\n maxErrors: {\n type: [Number, String],\n default: 1,\n },\n name: String,\n readonly: Boolean,\n rules: {\n type: Array as PropType<ValidationRule[]>,\n default: () => ([]),\n },\n modelValue: null,\n})\n\nexport function useValidation (\n props: ValidationProps,\n name = getCurrentInstanceName(),\n) {\n const model = useProxiedModel(props, 'modelValue')\n const form = useForm()\n const errorMessages = ref<string[]>([])\n const isPristine = ref(true)\n const isDisabled = computed(() => !!(props.disabled || form?.isDisabled.value))\n const isReadonly = computed(() => !!(props.readonly || form?.isReadonly.value))\n const isValid = computed(() => {\n if (\n props.error ||\n props.errorMessages?.length ||\n errorMessages.value.length\n ) return false\n\n return isPristine.value ? null : true\n })\n const isValidating = ref(false)\n const validationClasses = computed(() => {\n return {\n [`${name}--error`]: isValid.value === false,\n [`${name}--disabled`]: isDisabled.value,\n [`${name}--readonly`]: isReadonly.value,\n }\n })\n\n const uid = computed(() => props.name ?? getUid())\n\n onBeforeMount(() => {\n form?.register(uid.value, validate, reset, resetValidation)\n })\n\n onBeforeUnmount(() => {\n form?.unregister(uid.value)\n })\n\n function reset () {\n resetValidation()\n model.value = null\n }\n\n function resetValidation () {\n isPristine.value = true\n errorMessages.value = []\n }\n\n async function validate () {\n const results = []\n\n errorMessages.value = []\n isValidating.value = true\n\n for (const rule of props.rules) {\n if (results.length >= (props.maxErrors || 1)) {\n break\n }\n\n const handler = typeof rule === 'function' ? rule : () => rule\n const result = await handler(model.value)\n\n if (result === true) continue\n\n if (typeof result !== 'string') {\n // eslint-disable-next-line no-console\n console.warn(`${result} is not a valid value. Rule functions must return boolean true or a string.`)\n\n continue\n }\n\n results.push(result)\n }\n\n errorMessages.value = results\n isValidating.value = false\n isPristine.value = false\n\n return errorMessages.value\n }\n\n return {\n errorMessages,\n isDisabled,\n isReadonly,\n isPristine,\n isValid,\n isValidating,\n reset,\n resetValidation,\n validate,\n validationClasses,\n }\n}\n","// Styles\nimport './VInput.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VMessages } from '@/components/VMessages'\n\n// Composables\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeValidationProps, useValidation } from '@/composables/validation'\n\n// Utilities\nimport { computed, provide, toRef } from 'vue'\nimport { genericComponent, getUid, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { ComputedRef, ExtractPropTypes, InjectionKey, PropType, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\n\nexport interface VInputSlot {\n id: ComputedRef<string>\n isDisabled: ComputedRef<boolean>\n isFocused: Ref<boolean>\n isReadonly: ComputedRef<boolean>\n isPristine: Ref<boolean>\n isValid: ComputedRef<boolean | null>\n isValidating: Ref<boolean>\n reset: () => void\n resetValidation: () => void\n validate: () => void\n}\n\nexport const VInputSymbol = 'VInput' as any as InjectionKey<ComputedRef<VInputSlot>>\n\nexport const makeVInputProps = propsFactory({\n id: String,\n appendIcon: String,\n prependIcon: String,\n hideDetails: [Boolean, String] as PropType<boolean | 'auto'>,\n hint: String,\n messages: {\n type: [Array, String] as PropType<string | string[]>,\n default: () => ([]),\n },\n persistentHint: Boolean,\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n default: 'horizontal',\n validator: (v: any) => ['horizontal', 'vertical'].includes(v),\n },\n\n ...makeDensityProps(),\n ...makeValidationProps(),\n})\n\nexport const VInput = genericComponent<new <T>() => {\n $slots: MakeSlots<{\n default: [VInputSlot]\n prepend: [VInputSlot]\n append: [VInputSlot]\n details: [VInputSlot]\n }>\n}>()({\n name: 'VInput',\n\n props: {\n focused: Boolean,\n\n ...makeVInputProps(),\n },\n\n emits: {\n 'update:modelValue': (val: any) => true,\n 'click:prepend': (e: MouseEvent) => true,\n 'click:append': (e: MouseEvent) => true,\n },\n\n setup (props, { slots, emit }) {\n const { densityClasses } = useDensity(props)\n const {\n errorMessages,\n isDisabled,\n isReadonly,\n isPristine,\n isValid,\n isValidating,\n reset,\n resetValidation,\n validate,\n validationClasses,\n } = useValidation(props)\n\n const uid = getUid()\n const id = computed(() => props.id || `input-${uid}`)\n const isFocused = toRef(props, 'focused')\n\n const slotProps = computed<VInputSlot>(() => ({\n id,\n isDisabled,\n isFocused,\n isReadonly,\n isPristine,\n isValid,\n isValidating,\n reset,\n resetValidation,\n validate,\n }))\n\n provide(VInputSymbol, slotProps)\n\n useRender(() => {\n const hasPrepend = (slots.prepend || props.prependIcon)\n const hasAppend = (slots.append || props.appendIcon)\n const hasHint = !!(slots.hint || props.hint)\n const hasMessages = !!(\n slots.messages ||\n props.messages?.length ||\n errorMessages.value.length\n )\n const hasDetails = !props.hideDetails || (\n props.hideDetails === 'auto' &&\n (hasMessages || hasHint)\n )\n const showMessages = hasMessages || (\n hasHint &&\n (props.persistentHint || props.focused)\n )\n\n return (\n <div class={[\n 'v-input',\n `v-input--${props.direction}`,\n densityClasses.value,\n validationClasses.value,\n ]}\n >\n { hasPrepend && (\n <div\n class=\"v-input__prepend\"\n onClick={ e => emit('click:prepend', e) }\n >\n { slots?.prepend?.(slotProps.value) }\n\n { props.prependIcon && (\n <VIcon icon={ props.prependIcon } />\n ) }\n </div>\n ) }\n\n <div class=\"v-input__control\">\n { slots.default?.(slotProps.value) }\n </div>\n\n { hasAppend && (\n <div\n class=\"v-input__append\"\n onClick={ e => emit('click:append', e) }\n >\n { slots?.append?.(slotProps.value) }\n\n { props.appendIcon && (\n <VIcon icon={ props.appendIcon } />\n ) }\n </div>\n ) }\n\n { hasDetails && (\n <div class=\"v-input__details\">\n <VMessages\n active={ showMessages }\n color={ isValid.value === false ? 'error' : undefined }\n value={ errorMessages.value.length > 0\n ? errorMessages.value\n : (hasMessages ? props.messages : props.hint)\n }\n v-slots={{ default: slots.messages }}\n />\n\n { slots.details?.(slotProps.value) }\n </div>\n ) }\n </div>\n )\n })\n\n return {\n isValid,\n validate,\n reset,\n resetValidation,\n errorMessages,\n }\n },\n})\n\nexport type VInput = InstanceType<typeof VInput>\n\nexport function filterInputProps (props: ExtractPropTypes<ReturnType<typeof makeVInputProps>>) {\n return pick(props, Object.keys(VInput.props) as any)\n}\n","// Styles\nimport './VLabel.sass'\n\n// Composables\nimport { makeThemeProps } from '@/composables/theme'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VLabel = defineComponent({\n name: 'VLabel',\n\n props: {\n disabled: Boolean,\n error: Boolean,\n text: String,\n\n ...makeThemeProps(),\n },\n\n setup (props, { slots }) {\n return () => (\n <label\n class={[\n 'v-label',\n {\n 'v-label--disabled': props.disabled,\n 'v-label--error': props.error,\n },\n ]}\n >\n { props.text }\n\n { slots.default?.() }\n </label>\n )\n },\n})\n\nexport type VLabel = InstanceType<typeof VLabel>\n","// Styles\nimport './VSelectionControlGroup.sass'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utility\nimport { computed, defineComponent, provide, toRef } from 'vue'\nimport { getUid, useRender } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType, Ref } from 'vue'\n\nexport interface VSelectionGroupContext {\n disabled: Ref<boolean>\n inline: Ref<boolean>\n name: Ref<string | undefined>\n modelValue: Ref<any>\n multiple: Ref<boolean>\n trueIcon: Ref<string | undefined>\n falseIcon: Ref<string | undefined>\n readonly: Ref<boolean>\n type: Ref<string | undefined>\n}\n\nexport const VSelectionControlGroupSymbol: InjectionKey<VSelectionGroupContext> = Symbol.for('vuetify:selection-control-group')\n\nexport const VSelectionControlGroup = defineComponent({\n name: 'VSelectionControlGroup',\n\n props: {\n disabled: Boolean,\n id: String,\n inline: Boolean,\n name: String,\n falseIcon: String,\n trueIcon: String,\n multiple: {\n type: Boolean as PropType<boolean | null>,\n default: null,\n },\n readonly: Boolean,\n type: String,\n modelValue: null,\n },\n\n emits: {\n 'update:modelValue': (val: any) => true,\n },\n\n setup (props, { slots }) {\n const modelValue = useProxiedModel(props, 'modelValue')\n const uid = getUid()\n const id = computed(() => props.id || `v-selection-control-group-${uid}`)\n const name = computed(() => props.name || id.value)\n\n provide(VSelectionControlGroupSymbol, {\n disabled: toRef(props, 'disabled'),\n inline: toRef(props, 'inline'),\n modelValue,\n multiple: computed(() => !!props.multiple || (props.multiple == null && Array.isArray(modelValue.value))),\n name,\n falseIcon: toRef(props, 'falseIcon'),\n trueIcon: toRef(props, 'trueIcon'),\n readonly: toRef(props, 'readonly'),\n type: toRef(props, 'type'),\n })\n\n useRender(() => {\n return (\n <div\n class=\"v-selection-control-group\"\n aria-labelled-by={ props.type === 'radio' ? id.value : undefined }\n role={ props.type === 'radio' ? 'radiogroup' : undefined }\n >\n { slots?.default?.() }\n </div>\n )\n })\n\n return {}\n },\n})\n\nexport type VSelectionControlGroup = InstanceType<typeof VSelectionControlGroup>\n","// Styles\nimport './VSelectionControl.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VLabel } from '@/components/VLabel'\nimport { VSelectionControlGroupSymbol } from '@/components/VSelectionControlGroup/VSelectionControlGroup'\n\n// Composables\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeThemeProps } from '@/composables/theme'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useTextColor } from '@/composables/color'\n\n// Directives\nimport { Ripple } from '@/directives/ripple'\n\n// Utilities\nimport { computed, inject, ref } from 'vue'\nimport {\n deepEqual,\n genericComponent,\n getUid,\n pick,\n propsFactory,\n SUPPORTS_FOCUS_VISIBLE,\n useRender,\n wrapInArray,\n} from '@/util'\n\n// Types\nimport type { ComputedRef, ExtractPropTypes, PropType, Ref, WritableComputedRef } from 'vue'\nimport type { MakeSlots } from '@/util'\n\nexport type SelectionControlSlot = {\n model: WritableComputedRef<any>\n isReadonly: ComputedRef<boolean>\n isDisabled: ComputedRef<boolean>\n textColorClasses: Ref<string[]>\n props: {\n onBlur: (e: Event) => void\n onFocus: (e: FocusEvent) => void\n id: string\n }\n}\n\nexport const makeSelectionControlProps = propsFactory({\n color: String,\n disabled: Boolean,\n error: Boolean,\n id: String,\n inline: Boolean,\n label: String,\n falseIcon: String,\n trueIcon: String,\n ripple: {\n type: Boolean,\n default: true,\n },\n multiple: {\n type: Boolean as PropType<boolean | null>,\n default: null,\n },\n name: String,\n readonly: Boolean,\n trueValue: null,\n falseValue: null,\n modelValue: null,\n type: String,\n value: null,\n valueComparator: {\n type: Function as PropType<typeof deepEqual>,\n default: deepEqual,\n },\n\n ...makeThemeProps(),\n ...makeDensityProps(),\n})\n\nexport function useSelectionControl (\n props: ExtractPropTypes<ReturnType<typeof makeSelectionControlProps>> & {\n 'onUpdate:modelValue': ((val: any) => void) | undefined\n }\n) {\n const group = inject(VSelectionControlGroupSymbol, undefined)\n const { densityClasses } = useDensity(props)\n const modelValue = useProxiedModel(props, 'modelValue')\n const trueValue = computed(() => (\n props.trueValue !== undefined ? props.trueValue\n : props.value !== undefined ? props.value\n : true\n ))\n const falseValue = computed(() => props.falseValue !== undefined ? props.falseValue : false)\n const isMultiple = computed(() => (\n group?.multiple.value ||\n !!props.multiple ||\n (props.multiple == null && Array.isArray(modelValue.value))\n ))\n const model = computed({\n get () {\n const val = group ? group.modelValue.value : modelValue.value\n\n return isMultiple.value\n ? val.some((v: any) => props.valueComparator(v, trueValue.value))\n : props.valueComparator(val, trueValue.value)\n },\n set (val: boolean) {\n const currentValue = val ? trueValue.value : falseValue.value\n\n let newVal = currentValue\n\n if (isMultiple.value) {\n newVal = val\n ? [...wrapInArray(modelValue.value), currentValue]\n : wrapInArray(modelValue.value).filter((item: any) => !props.valueComparator(item, trueValue.value))\n }\n\n if (group) {\n group.modelValue.value = newVal\n } else {\n modelValue.value = newVal\n }\n },\n })\n const { textColorClasses, textColorStyles } = useTextColor(computed(() => {\n return (\n model.value &&\n !props.error &&\n !props.disabled\n ) ? props.color : undefined\n }))\n const icon = computed(() => {\n return model.value\n ? group?.trueIcon.value ?? props.trueIcon\n : group?.falseIcon.value ?? props.falseIcon\n })\n\n return {\n group,\n densityClasses,\n trueValue,\n falseValue,\n model,\n textColorClasses,\n textColorStyles,\n icon,\n }\n}\n\nexport const VSelectionControl = genericComponent<new <T>() => {\n $props: {\n modelValue?: T\n 'onUpdate:modelValue'?: (val: T) => any\n }\n $slots: MakeSlots<{\n default: []\n input: [SelectionControlSlot]\n }>\n}>()({\n name: 'VSelectionControl',\n\n directives: { Ripple },\n\n inheritAttrs: false,\n\n props: makeSelectionControlProps(),\n\n emits: {\n 'update:modelValue': (val: any) => true,\n },\n\n setup (props, { attrs, slots }) {\n const {\n densityClasses,\n group,\n icon,\n model,\n textColorClasses,\n textColorStyles,\n trueValue,\n } = useSelectionControl(props)\n const uid = getUid()\n const id = computed(() => props.id || `input-${uid}`)\n const isFocused = ref(false)\n const isFocusVisible = ref(false)\n const input = ref<HTMLInputElement>()\n\n function onFocus (e: FocusEvent) {\n isFocused.value = true\n if (\n !SUPPORTS_FOCUS_VISIBLE ||\n (SUPPORTS_FOCUS_VISIBLE && (e.target as HTMLElement).matches(':focus-visible'))\n ) {\n isFocusVisible.value = true\n }\n }\n\n function onBlur () {\n isFocused.value = false\n isFocusVisible.value = false\n }\n\n useRender(() => {\n const label = slots.label\n ? slots.label({\n label: props.label,\n props: { for: id.value },\n })\n : props.label\n const type = group?.type.value ?? props.type\n\n return (\n <div\n class={[\n 'v-selection-control',\n {\n 'v-selection-control--dirty': model.value,\n 'v-selection-control--disabled': props.disabled,\n 'v-selection-control--error': props.error,\n 'v-selection-control--focused': isFocused.value,\n 'v-selection-control--focus-visible': isFocusVisible.value,\n 'v-selection-control--inline': group?.inline.value || props.inline,\n },\n densityClasses.value,\n textColorClasses.value,\n ]}\n >\n <div class=\"v-selection-control__wrapper\">\n { slots.default?.() }\n\n <div\n class={[\n 'v-selection-control__input',\n ]}\n style={ textColorStyles.value }\n v-ripple={ props.ripple && [\n !props.disabled && !props.readonly,\n null,\n ['center', 'circle'],\n ]}\n >\n { icon.value && <VIcon icon={ icon.value } /> }\n\n <input\n v-model={ model.value }\n ref={ input }\n disabled={ props.disabled }\n id={ id.value }\n onBlur={ onBlur }\n onFocus={ onFocus }\n readonly={ props.readonly }\n type={ type }\n value={ trueValue.value }\n name={ group?.name.value ?? props.name }\n aria-checked={ type === 'checkbox' ? model.value : undefined }\n { ...attrs }\n />\n\n { slots.input?.({\n model,\n textColorClasses,\n props: {\n onFocus,\n onBlur,\n id: id.value,\n },\n }) }\n </div>\n </div>\n\n <VLabel\n disabled={ props.disabled }\n error={ props.error }\n for={ id.value }\n >\n { label }\n </VLabel>\n </div>\n )\n })\n\n return {\n isFocused,\n input,\n }\n },\n})\n\nexport type VSelectionControl = InstanceType<typeof VSelectionControl>\n\nexport function filterControlProps (props: ExtractPropTypes<ReturnType<typeof makeSelectionControlProps>>) {\n return pick(props, Object.keys(VSelectionControl.props) as any)\n}\n","// Styles\nimport './VCheckbox.sass'\n\n// Components\nimport { filterInputProps, makeVInputProps, VInput } from '@/components/VInput/VInput'\nimport { filterControlProps, makeSelectionControlProps, VSelectionControl } from '@/components/VSelectionControl/VSelectionControl'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utility\nimport { computed, defineComponent } from 'vue'\nimport { filterInputAttrs, useRender } from '@/util'\n\nexport const VCheckbox = defineComponent({\n name: 'VCheckbox',\n\n inheritAttrs: false,\n\n props: {\n indeterminate: Boolean,\n indeterminateIcon: {\n type: String,\n default: '$checkboxIndeterminate',\n },\n\n ...makeVInputProps(),\n ...makeSelectionControlProps(),\n\n falseIcon: {\n type: String,\n default: '$checkboxOff',\n },\n trueIcon: {\n type: String,\n default: '$checkboxOn',\n },\n },\n\n emits: {\n 'update:indeterminate': (val: boolean) => true,\n },\n\n setup (props, { attrs, slots }) {\n const indeterminate = useProxiedModel(props, 'indeterminate')\n const falseIcon = computed(() => {\n return indeterminate.value\n ? props.indeterminateIcon\n : props.falseIcon\n })\n const trueIcon = computed(() => {\n return indeterminate.value\n ? props.indeterminateIcon\n : props.trueIcon\n })\n\n function onChange () {\n if (indeterminate.value) {\n indeterminate.value = false\n }\n }\n\n useRender(() => {\n const [inputAttrs, controlAttrs] = filterInputAttrs(attrs)\n const [inputProps, _1] = filterInputProps(props)\n const [controlProps, _2] = filterControlProps(props)\n\n return (\n <VInput\n class=\"v-checkbox\"\n { ...inputAttrs }\n { ...inputProps }\n >\n {{\n ...slots,\n default: ({\n isDisabled,\n isReadonly,\n }) => (\n <VSelectionControl\n { ...controlProps }\n type=\"checkbox\"\n onUpdate:modelValue={ onChange }\n falseIcon={ falseIcon.value }\n trueIcon={ trueIcon.value }\n aria-checked={ indeterminate.value ? 'mixed' : undefined }\n disabled={ isDisabled.value }\n readonly={ isReadonly.value }\n { ...controlAttrs }\n />\n ),\n }}\n </VInput>\n )\n })\n\n return {}\n },\n})\n\nexport type VCheckbox = InstanceType<typeof VCheckbox>\n","// Styles\nimport './VChip.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeRouterProps, useLink } from '@/composables/router'\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport { Ripple } from '@/directives/ripple'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VChip = defineComponent({\n name: 'VChip',\n\n directives: { Ripple },\n\n props: {\n activeClass: String,\n appendAvatar: String,\n appendIcon: String,\n closable: Boolean,\n closeIcon: {\n type: String,\n default: '$delete',\n },\n closeLabel: {\n type: String,\n default: '$vuetify.close',\n },\n disabled: Boolean,\n draggable: Boolean,\n filter: Boolean,\n filterIcon: {\n type: String,\n default: '$complete',\n },\n label: Boolean,\n link: Boolean,\n pill: Boolean,\n prependAvatar: String,\n prependIcon: String,\n ripple: {\n type: Boolean,\n default: true,\n },\n text: String,\n modelValue: {\n type: Boolean,\n default: true,\n },\n\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeElevationProps(),\n ...makeRoundedProps(),\n ...makeRouterProps(),\n ...makeSizeProps(),\n ...makeTagProps({ tag: 'span' }),\n ...makeThemeProps(),\n ...makeVariantProps({ variant: 'contained' } as const),\n },\n\n emits: {\n 'click:close': (e: Event) => true,\n 'update:active': (value: Boolean) => true,\n 'update:modelValue': (value: Boolean) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const isActive = useProxiedModel(props, 'modelValue')\n\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { colorClasses, colorStyles, variantClasses } = useVariant(props)\n const { elevationClasses } = useElevation(props)\n const { roundedClasses } = useRounded(props)\n const { sizeClasses } = useSize(props)\n const { densityClasses } = useDensity(props)\n const link = useLink(props, attrs)\n\n function onCloseClick (e: Event) {\n isActive.value = false\n\n emit('click:close', e)\n }\n\n return () => {\n const Tag = (link.isLink.value) ? 'a' : props.tag\n const hasAppend = !!(slots.append || props.appendIcon || props.appendAvatar)\n const hasClose = !!(slots.close || props.closable)\n const hasPrepend = !!(slots.prepend || props.prependIcon || props.prependAvatar)\n const isClickable = !props.disabled && (link.isClickable.value || props.link)\n\n return isActive.value && (\n <Tag\n class={[\n 'v-chip',\n {\n 'v-chip--disabled': props.disabled,\n 'v-chip--label': props.label,\n 'v-chip--link': isClickable,\n 'v-chip--pill': props.pill,\n },\n themeClasses.value,\n borderClasses.value,\n colorClasses.value,\n densityClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n sizeClasses.value,\n variantClasses.value,\n ]}\n style={ [colorStyles.value] }\n disabled={ props.disabled || undefined }\n draggable={ props.draggable }\n href={ link.href.value }\n v-ripple={ [isClickable && props.ripple, null] }\n onClick={ isClickable && link.navigate }\n >\n { genOverlays(isClickable, 'v-chip') }\n\n { hasPrepend && (\n <div class=\"v-chip__prepend\">\n { slots.prepend\n ? slots.prepend()\n : (\n <VAvatar\n icon={ props.prependIcon }\n image={ props.prependAvatar }\n size={ props.size }\n />\n )\n }\n </div>\n ) }\n\n { slots.default?.() ?? props.text }\n\n { hasAppend && (\n <div class=\"v-chip__append\">\n { slots.append\n ? slots.append()\n : (\n <VAvatar\n icon={ props.appendIcon }\n image={ props.appendAvatar }\n size={ props.size }\n />\n )\n }\n </div>\n ) }\n\n { hasClose && (\n <div\n class=\"v-chip__close\"\n onClick={ onCloseClick }\n >\n { slots.close\n ? slots.close({ props: { onClick: onCloseClick } })\n : (\n <VIcon\n icon={ props.closeIcon }\n size=\"x-small\"\n />\n )\n }\n </div>\n ) }\n </Tag>\n )\n }\n },\n})\n\nexport type VChip = InstanceType<typeof VChip>\n","import './VCode.sass'\n\nimport { createSimpleFunctional } from '@/util'\n\nexport const VCode = createSimpleFunctional('v-code')\n","// Styles\nimport './VCounter.sass'\n\n// Components\nimport { VSlideYTransition } from '@/components/transitions'\n\n// Utilities\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\nimport { computed, defineComponent } from 'vue'\n\nexport const VCounter = defineComponent({\n name: 'VCounter',\n\n functional: true,\n\n props: {\n active: Boolean,\n max: [Number, String],\n value: {\n type: [Number, String],\n default: 0,\n },\n\n ...makeTransitionProps({\n transition: { component: VSlideYTransition },\n }),\n },\n\n setup (props, { slots }) {\n const counter = computed(() => {\n return props.max ? `${props.value} / ${props.max}` : String(props.value)\n })\n\n return () => {\n return (\n <MaybeTransition transition={ props.transition }>\n <div\n v-show={ props.active }\n class=\"v-counter\"\n >\n { slots.default\n ? slots.default({\n counter: counter.value,\n max: props.max,\n value: props.value,\n })\n : counter.value\n }\n </div>\n </MaybeTransition>\n )\n }\n },\n})\n","// Composables\nimport { provideDefaults } from '@/composables/defaults'\n\n// Utilities\nimport { defineComponent, toRefs } from 'vue'\n\n// Types\nimport type { DefaultsOptions } from '@/composables/defaults'\nimport type { PropType } from 'vue'\n\nexport const VDefaultsProvider = defineComponent({\n name: 'VDefaultsProvider',\n\n props: {\n defaults: Object as PropType<DefaultsOptions>,\n reset: [Number, String],\n root: Boolean,\n scoped: Boolean,\n },\n\n setup (props, { slots }) {\n const { defaults, reset, root, scoped } = toRefs(props)\n\n provideDefaults(defaults, {\n reset,\n root,\n scoped,\n })\n\n return () => slots.default?.()\n },\n})\n","// Utilities\nimport { IN_BROWSER, propsFactory } from '@/util'\n\n// Types\nexport interface DelayProps {\n closeDelay?: number | string\n openDelay?: number | string\n}\n\n// Composables\nexport const makeDelayProps = propsFactory({\n closeDelay: [Number, String],\n openDelay: [Number, String],\n}, 'delay')\n\nexport function useDelay (props: DelayProps, cb?: (value: boolean) => void) {\n const delays: Partial<Record<keyof DelayProps, number>> = {}\n const runDelayFactory = (prop: keyof DelayProps) => (): Promise<boolean> => {\n // istanbul ignore next\n if (!IN_BROWSER) return Promise.resolve(true)\n\n const active = prop === 'openDelay'\n\n delays.closeDelay && window.clearTimeout(delays.closeDelay)\n delete delays.closeDelay\n\n delays.openDelay && window.clearTimeout(delays.openDelay)\n delete delays.openDelay\n\n return new Promise(resolve => {\n const delay = parseInt(props[prop] ?? 0, 10)\n\n delays[prop] = window.setTimeout(() => {\n cb?.(active)\n resolve(active)\n }, delay)\n })\n }\n\n return {\n runCloseDelay: runDelayFactory('closeDelay'),\n runOpenDelay: runDelayFactory('openDelay'),\n }\n}\n","// Utilities\nimport { getCurrentInstance, IN_BROWSER, isComponentInstance, propsFactory, SUPPORTS_FOCUS_VISIBLE } from '@/util'\nimport { makeDelayProps, useDelay } from '@/composables/delay'\nimport {\n computed,\n effectScope,\n nextTick,\n onScopeDispose,\n ref,\n watch,\n watchEffect,\n} from 'vue'\n\n// Types\nimport type { DelayProps } from '@/composables/delay'\nimport type {\n ComponentPublicInstance,\n EffectScope,\n PropType,\n Ref,\n} from 'vue'\n\ninterface ActivatorProps extends DelayProps {\n activator?: 'parent' | string | Element | ComponentPublicInstance\n activatorProps: Record<string, any>\n\n openOnClick: boolean | undefined\n openOnHover: boolean\n openOnFocus: boolean | undefined\n}\n\nexport const makeActivatorProps = propsFactory({\n activator: [String, Object] as PropType<ActivatorProps['activator']>,\n activatorProps: {\n type: Object as PropType<ActivatorProps['activatorProps']>,\n default: () => ({}),\n },\n\n openOnClick: {\n type: Boolean,\n default: undefined,\n },\n openOnHover: Boolean,\n openOnFocus: {\n type: Boolean,\n default: undefined,\n },\n\n ...makeDelayProps(),\n})\n\nexport function useActivator (\n props: ActivatorProps,\n isActive: Ref<boolean>\n) {\n const activatorEl = ref<HTMLElement>()\n\n let isHovered = false\n let isFocused = false\n\n const openOnFocus = computed(() => props.openOnFocus || (props.openOnFocus == null && props.openOnHover))\n const openOnClick = computed(() => props.openOnClick || (props.openOnClick == null && !props.openOnHover && !openOnFocus.value))\n\n const { runOpenDelay, runCloseDelay } = useDelay(props, value => {\n if (value === (\n (props.openOnHover && isHovered) ||\n (openOnFocus.value && isFocused)\n )) {\n isActive.value = value\n }\n })\n\n const availableEvents = {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n isActive.value = !isActive.value\n },\n mouseenter: (e: MouseEvent) => {\n isHovered = true\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n runOpenDelay()\n },\n mouseleave: (e: MouseEvent) => {\n isHovered = false\n runCloseDelay()\n },\n focus: (e: FocusEvent) => {\n if (\n SUPPORTS_FOCUS_VISIBLE &&\n !(e.target as HTMLElement).matches(':focus-visible')\n ) return\n\n isFocused = true\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n\n runOpenDelay()\n },\n blur: (e: FocusEvent) => {\n isFocused = false\n e.stopPropagation()\n\n runCloseDelay()\n },\n }\n\n const activatorEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n\n if (openOnClick.value) {\n events.click = availableEvents.click\n }\n if (props.openOnHover) {\n events.mouseenter = availableEvents.mouseenter\n events.mouseleave = availableEvents.mouseleave\n }\n if (openOnFocus.value) {\n events.focus = availableEvents.focus\n events.blur = availableEvents.blur\n }\n\n return events\n })\n\n const activatorRef = ref()\n watchEffect(() => {\n if (!activatorRef.value) return\n\n nextTick(() => {\n const activator = activatorRef.value\n activatorEl.value = isComponentInstance(activator) ? activator.$el : activator\n })\n })\n\n let scope: EffectScope\n watch(() => !!props.activator, val => {\n if (val && IN_BROWSER) {\n scope = effectScope()\n scope.run(() => {\n _useActivator(props, { activatorEl, activatorRef, activatorEvents })\n })\n } else if (scope) {\n scope.stop()\n }\n }, { flush: 'post', immediate: true })\n\n return { activatorEl, activatorRef, activatorEvents }\n}\n\nfunction _useActivator (props: ActivatorProps, { activatorEl, activatorEvents }: ReturnType<typeof useActivator>) {\n watch(() => props.activator, (val, oldVal) => {\n if (oldVal && val !== oldVal) {\n const activator = getActivator(oldVal)\n activator && unbindActivatorProps(activator)\n }\n if (val) {\n nextTick(() => bindActivatorProps())\n }\n }, { immediate: true })\n\n watch(() => props.activatorProps, () => {\n bindActivatorProps()\n })\n\n onScopeDispose(() => {\n unbindActivatorProps()\n })\n\n function bindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.addEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n if (_props[k] == null) {\n el.removeAttribute(k)\n } else {\n el.setAttribute(k, _props[k])\n }\n })\n }\n\n function unbindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.removeEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n el.removeAttribute(k)\n })\n }\n\n const vm = getCurrentInstance('useActivator')\n function getActivator (selector = props.activator): HTMLElement | undefined {\n let activator\n if (selector) {\n if (selector === 'parent') {\n activator = vm?.proxy?.$el?.parentNode\n } else if (typeof selector === 'string') {\n // Selector\n activator = document.querySelector(selector)\n } else if ('$el' in selector) {\n // Component (ref)\n activator = selector.$el\n } else {\n // HTMLElement | Element\n activator = selector\n }\n }\n\n // The activator should only be a valid element (Ignore comments and text nodes)\n activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : null\n\n return activatorEl.value\n }\n}\n","const block = ['top', 'bottom'] as const\nconst inline = ['start', 'end'] as const\ntype Tblock = typeof block[number]\ntype Tinline = typeof inline [number]\nexport type Anchor =\n | Tblock\n | Tinline\n | 'center'\n | 'center center'\n | `${Tblock} ${Tinline | 'center'}`\n | `${Tinline} ${Tblock | 'center'}`\nexport type ParsedAnchor =\n | { side: 'center', align: 'center' }\n | { side: Tblock, align: Tinline | 'center' }\n | { side: Tinline, align: Tblock | 'center' }\n\n/** Parse a raw anchor string into an object */\nexport function parseAnchor (anchor: Anchor) {\n let [side, align] = anchor.split(' ')\n if (!align) {\n align =\n side === 'top' || side === 'bottom' ? 'start'\n : side === 'start' || side === 'end' ? 'top'\n : 'center'\n }\n return {\n side,\n align,\n } as ParsedAnchor\n}\n\n/** Get an anchor directly opposite, with the same alignment */\nexport function oppositeAnchor (anchor: ParsedAnchor) {\n return {\n side: {\n center: 'center',\n top: 'bottom',\n bottom: 'top',\n start: 'end',\n end: 'start',\n }[anchor.side],\n align: anchor.align,\n } as ParsedAnchor\n}\n\n/** Convert start/end into left/right */\nexport function physicalAnchor (anchor: ParsedAnchor, el: HTMLElement) {\n const { side, align } = anchor\n const { direction } = window.getComputedStyle(el)\n\n const map: Record<string, string | undefined> = direction === 'ltr' ? {\n start: 'left',\n end: 'right',\n } : {\n start: 'right',\n end: 'left',\n }\n\n return (map[side] ?? side) + ' ' + (map[align] ?? align)\n}\n","import type { ParsedAnchor } from './anchor'\nimport type { Box } from '@/util/box'\n\ntype Point = { x: number, y: number }\ndeclare class As<T extends string> {\n private as: T\n}\ntype ElementPoint = Point & As<'element'>\ntype ViewportPoint = Point & As<'viewport'>\ntype Offset = Point & As<'offset'>\n\n/** Convert a point in local space to viewport space */\nexport function elementToViewport (point: ElementPoint, offset: Offset | Box) {\n return {\n x: point.x + offset.x,\n y: point.y + offset.y,\n } as ViewportPoint\n}\n\n/** Convert a point in viewport space to local space */\nexport function viewportToElement (point: ViewportPoint, offset: Offset | Box) {\n return {\n x: point.x - offset.x,\n y: point.y - offset.y,\n } as ElementPoint\n}\n\n/** Get the difference between two points */\nexport function getOffset<T extends Point> (a: T, b: T) {\n return {\n x: a.x - b.x,\n y: a.y - b.y,\n } as Offset\n}\n\n/** Convert an anchor object to a point in local space */\nexport function anchorToPoint (anchor: ParsedAnchor, box: Box): ViewportPoint {\n if (anchor.side === 'top' || anchor.side === 'bottom') {\n const { side, align } = anchor\n\n const x: number =\n align === 'start' ? 0\n : align === 'center' ? box.width / 2\n : align === 'end' ? box.width\n : align\n const y: number =\n side === 'top' ? 0\n : side === 'bottom' ? box.height\n : side\n\n return elementToViewport({ x, y } as ElementPoint, box)\n } else if (anchor.side === 'start' || anchor.side === 'end') {\n const { side, align } = anchor\n\n const x: number =\n side === 'start' ? 0\n : side === 'end' ? box.width\n : side\n const y: number =\n align === 'top' ? 0\n : align === 'center' ? box.height / 2\n : align === 'bottom' ? box.height\n : align\n\n return elementToViewport({ x, y } as ElementPoint, box)\n }\n\n return elementToViewport({\n x: box.width / 2,\n y: box.height / 2,\n } as ElementPoint, box)\n}\n","// Utilities\nimport { computed, effectScope, nextTick, onScopeDispose, ref, watch, watchEffect } from 'vue'\nimport { convertToUnit, getScrollParent, IN_BROWSER, isFixedPosition, nullifyTransforms, propsFactory } from '@/util'\nimport { oppositeAnchor, parseAnchor, physicalAnchor } from './util/anchor'\nimport { anchorToPoint, getOffset } from './util/point'\n\n// Types\nimport type { EffectScope, PropType, Ref } from 'vue'\nimport type { Anchor } from './util/anchor'\nimport { Box } from '@/util/box'\n\nexport interface PositionStrategyData {\n contentEl: Ref<HTMLElement | undefined>\n activatorEl: Ref<HTMLElement | undefined>\n isActive: Ref<boolean>\n}\n\nconst positionStrategies = {\n static: staticPositionStrategy, // specific viewport position, usually centered\n connected: connectedPositionStrategy, // connected to a certain element\n}\n\nexport interface StrategyProps {\n positionStrategy: keyof typeof positionStrategies | (\n (\n data: PositionStrategyData,\n props: StrategyProps,\n contentStyles: Ref<Record<string, string>>\n ) => undefined | { updatePosition: (e: Event) => void }\n )\n anchor: Anchor\n origin: Anchor | 'auto' | 'overlap'\n offset?: number | string\n maxHeight?: number | string\n maxWidth?: number | string\n minHeight?: number | string\n minWidth?: number | string\n}\n\nexport const makePositionStrategyProps = propsFactory({\n positionStrategy: {\n type: [String, Function] as PropType<StrategyProps['positionStrategy']>,\n default: 'static',\n validator: (val: any) => typeof val === 'function' || val in positionStrategies,\n },\n anchor: {\n type: String as PropType<StrategyProps['anchor']>,\n default: 'bottom',\n },\n origin: {\n type: String as PropType<StrategyProps['origin']>,\n default: 'auto',\n },\n offset: [Number, String],\n})\n\nexport function usePositionStrategies (\n props: StrategyProps,\n data: PositionStrategyData\n) {\n const contentStyles = ref({})\n const updatePosition = ref<(e: Event) => void>()\n\n let scope: EffectScope | undefined\n watchEffect(async () => {\n scope?.stop()\n updatePosition.value = undefined\n\n if (!(IN_BROWSER && data.isActive.value && props.positionStrategy)) return\n\n scope = effectScope()\n await nextTick()\n scope.run(() => {\n if (typeof props.positionStrategy === 'function') {\n updatePosition.value = props.positionStrategy(data, props, contentStyles)?.updatePosition\n } else {\n updatePosition.value = positionStrategies[props.positionStrategy](data, props, contentStyles)?.updatePosition\n }\n })\n })\n\n IN_BROWSER && window.addEventListener('resize', onResize, { passive: true })\n\n onScopeDispose(() => {\n IN_BROWSER && window.removeEventListener('resize', onResize)\n updatePosition.value = undefined\n scope?.stop()\n })\n\n function onResize (e: Event) {\n updatePosition.value?.(e)\n }\n\n return {\n contentStyles,\n updatePosition,\n }\n}\n\nfunction staticPositionStrategy () {\n // TODO\n}\n\nfunction connectedPositionStrategy (data: PositionStrategyData, props: StrategyProps, contentStyles: Ref<Record<string, string>>) {\n const activatorFixed = isFixedPosition(data.activatorEl.value)\n if (activatorFixed) {\n Object.assign(contentStyles.value, {\n position: 'fixed',\n })\n }\n\n const preferredAnchor = computed(() => parseAnchor(props.anchor))\n const preferredOrigin = computed(() =>\n props.origin === 'overlap' ? preferredAnchor.value\n : props.origin === 'auto' ? oppositeAnchor(preferredAnchor.value)\n : parseAnchor(props.origin)\n )\n const doesOverlap = computed(() => {\n return preferredAnchor.value.side === preferredOrigin.value.side\n })\n\n const configuredMaxHeight = computed(() => {\n const val = parseFloat(props.maxHeight!)\n return isNaN(val) ? Infinity : val\n })\n\n const configuredMinWidth = computed(() => {\n const val = parseFloat(props.minWidth!)\n return isNaN(val) ? Infinity : val\n })\n\n let observe = false\n const observer = new ResizeObserver(() => {\n if (observe) updatePosition()\n })\n observer.observe(data.activatorEl.value!)\n observer.observe(data.contentEl.value!)\n\n onScopeDispose(() => {\n observer.disconnect()\n })\n\n // eslint-disable-next-line max-statements\n function updatePosition () {\n observe = false\n requestAnimationFrame(() => {\n requestAnimationFrame(() => observe = true)\n })\n\n const targetBox = data.activatorEl.value!.getBoundingClientRect()\n // TODO: offset shouldn't affect width\n if (props.offset) {\n targetBox.x -= +props.offset\n targetBox.y -= +props.offset\n targetBox.width += +props.offset * 2\n targetBox.height += +props.offset * 2\n }\n\n const scrollParent = getScrollParent(data.contentEl.value)\n const viewportWidth = scrollParent.clientWidth\n const viewportHeight = Math.min(scrollParent.clientHeight, window.innerHeight)\n\n let contentBox\n {\n const scrollables = new Map<Element, [number, number]>()\n data.contentEl.value!.querySelectorAll('*').forEach(el => {\n const x = el.scrollLeft\n const y = el.scrollTop\n if (x || y) {\n scrollables.set(el, [x, y])\n }\n })\n\n const initialMaxWidth = data.contentEl.value!.style.maxWidth\n const initialMaxHeight = data.contentEl.value!.style.maxHeight\n data.contentEl.value!.style.removeProperty('max-width')\n data.contentEl.value!.style.removeProperty('max-height')\n\n contentBox = nullifyTransforms(data.contentEl.value!)\n contentBox.x -= parseFloat(data.contentEl.value!.style.left) || 0\n contentBox.y -= parseFloat(data.contentEl.value!.style.top) || 0\n\n data.contentEl.value!.style.maxWidth = initialMaxWidth\n data.contentEl.value!.style.maxHeight = initialMaxHeight\n scrollables.forEach((position, el) => {\n el.scrollTo(...position)\n })\n }\n\n const contentHeight = Math.min(configuredMaxHeight.value, contentBox.height)\n\n const viewportMargin = 12\n const freeSpace = {\n top: targetBox.top - viewportMargin,\n bottom: viewportHeight - targetBox.bottom - viewportMargin,\n left: targetBox.left - viewportMargin,\n right: viewportWidth - targetBox.right - viewportMargin,\n }\n\n const fitsY = (preferredAnchor.value.side === 'bottom' && contentHeight <= freeSpace.bottom) ||\n (preferredAnchor.value.side === 'top' && contentHeight <= freeSpace.top)\n\n const anchor = fitsY ? preferredAnchor.value\n : (preferredAnchor.value.side === 'bottom' && freeSpace.top > freeSpace.bottom) ||\n (preferredAnchor.value.side === 'top' && freeSpace.bottom > freeSpace.top) ? oppositeAnchor(preferredAnchor.value)\n : preferredAnchor.value\n const origin = fitsY ? preferredOrigin.value : oppositeAnchor(anchor)\n\n const canFill = doesOverlap.value || ['center', 'top', 'bottom'].includes(anchor.side)\n\n const maxWidth = canFill ? Math.min(viewportWidth, Math.max(targetBox.width, viewportWidth - viewportMargin * 2))\n : anchor.side === 'end' ? freeSpace.right\n : anchor.side === 'start' ? freeSpace.left\n : null\n const minWidth = Math.min(configuredMinWidth.value, maxWidth!, targetBox.width)\n const maxHeight = fitsY ? configuredMaxHeight.value : Math.min(\n configuredMaxHeight.value,\n Math.floor(anchor.side === 'top' ? freeSpace.top : freeSpace.bottom)\n )\n\n const targetPoint = anchorToPoint(anchor, targetBox)\n const contentPoint = anchorToPoint(origin, new Box({\n ...contentBox,\n height: Math.min(contentHeight, maxHeight),\n }))\n\n const { x, y } = getOffset(targetPoint, contentPoint)\n\n Object.assign(contentStyles.value, {\n '--v-overlay-anchor-origin': physicalAnchor(anchor, data.activatorEl.value!),\n top: convertToUnit(Math.round(y)),\n left: convertToUnit(Math.round(x)), // TODO: right for origin=\"end\", rtl\n transformOrigin: physicalAnchor(origin, data.activatorEl.value!),\n minWidth: convertToUnit(minWidth),\n maxWidth: convertToUnit(maxWidth),\n maxHeight: convertToUnit(maxHeight),\n })\n }\n\n watch(\n () => [preferredAnchor.value, preferredOrigin.value, props.offset],\n () => updatePosition(),\n { immediate: !activatorFixed }\n )\n\n if (activatorFixed) nextTick(() => updatePosition())\n requestAnimationFrame(() => {\n if (contentStyles.value.maxHeight) updatePosition()\n })\n\n return { updatePosition }\n}\n","export function isFixedPosition (el?: HTMLElement) {\n while (el) {\n if (window.getComputedStyle(el).position === 'fixed') {\n return true\n }\n el = el.offsetParent as HTMLElement\n }\n return false\n}\n","let clean = true\nconst frames = [] as any[]\n\n/**\n * Schedule a task to run in an animation frame on its own\n * This is useful for heavy tasks that may cause jank if all ran together\n */\nexport function requestNewFrame (cb: () => void) {\n if (!clean || frames.length) {\n frames.push(cb)\n run()\n } else {\n clean = false\n cb()\n run()\n }\n}\n\nlet raf = -1\nfunction run () {\n cancelAnimationFrame(raf)\n raf = requestAnimationFrame(() => {\n const frame = frames.shift()\n if (frame) frame()\n\n if (frames.length) run()\n else clean = true\n })\n}\n","// Utilities\nimport { convertToUnit, getScrollParents, hasScrollbar, IN_BROWSER, propsFactory } from '@/util'\nimport { effectScope, nextTick, onScopeDispose, watchEffect } from 'vue'\nimport { requestNewFrame } from './requestNewFrame'\n\n// Types\nimport type { EffectScope, PropType, Ref } from 'vue'\n\nexport interface ScrollStrategyData {\n root: Ref<HTMLElement | undefined>\n contentEl: Ref<HTMLElement | undefined>\n activatorEl: Ref<HTMLElement | undefined>\n isActive: Ref<boolean>\n updatePosition: Ref<((e: Event) => void) | undefined>\n}\n\nconst scrollStrategies = {\n close: closeScrollStrategy,\n block: blockScrollStrategy,\n reposition: repositionScrollStrategy,\n}\n\ninterface StrategyProps {\n scrollStrategy: keyof typeof scrollStrategies | ((data: ScrollStrategyData) => void)\n}\n\nexport const makeScrollStrategyProps = propsFactory({\n scrollStrategy: {\n type: [String, Function] as PropType<StrategyProps['scrollStrategy']>,\n default: 'block',\n validator: (val: any) => typeof val === 'function' || val in scrollStrategies,\n },\n})\n\nexport function useScrollStrategies (\n props: StrategyProps,\n data: ScrollStrategyData\n) {\n if (!IN_BROWSER) return\n\n let scope: EffectScope | undefined\n watchEffect(async () => {\n scope?.stop()\n\n if (!(data.isActive.value && props.scrollStrategy)) return\n\n scope = effectScope()\n await nextTick()\n scope.run(() => {\n if (typeof props.scrollStrategy === 'function') {\n props.scrollStrategy(data)\n } else {\n scrollStrategies[props.scrollStrategy]?.(data)\n }\n })\n })\n}\n\nfunction closeScrollStrategy (data: ScrollStrategyData) {\n function onScroll (e: Event) {\n data.isActive.value = false\n }\n\n bindScroll(data.activatorEl.value ?? data.contentEl.value, onScroll)\n}\n\nfunction blockScrollStrategy (data: ScrollStrategyData) {\n const scrollElements = [...new Set([\n ...getScrollParents(data.activatorEl.value),\n ...getScrollParents(data.contentEl.value),\n ])].filter(el => !el.classList.contains('v-overlay-scroll-blocked'))\n const scrollbarWidth = window.innerWidth - document.documentElement.offsetWidth\n\n const scrollableParent = (el => hasScrollbar(el) && el)(data.root.value?.offsetParent || document.documentElement)\n if (scrollableParent) {\n data.root.value!.classList.add('v-overlay--scroll-blocked')\n }\n\n scrollElements.forEach((el, i) => {\n el.style.setProperty('--v-scrollbar-offset', convertToUnit(scrollbarWidth))\n el.classList.add('v-overlay-scroll-blocked')\n })\n\n onScopeDispose(() => {\n scrollElements.forEach((el, i) => {\n el.style.removeProperty('--v-scrollbar-offset')\n el.classList.remove('v-overlay-scroll-blocked')\n })\n if (scrollableParent) {\n data.root.value!.classList.remove('v-overlay--scroll-blocked')\n }\n })\n}\n\nfunction repositionScrollStrategy (data: ScrollStrategyData) {\n let slow = false\n let raf = -1\n\n function update (e: Event) {\n requestNewFrame(() => {\n const start = performance.now()\n data.updatePosition.value?.(e)\n const time = performance.now() - start\n slow = time / (1000 / 60) > 2\n })\n }\n\n bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {\n if (slow) {\n // If the position calculation is slow,\n // defer updates until scrolling is finished.\n // Browsers usually fire one scroll event per frame so\n // we just wait until we've got two frames without an event\n cancelAnimationFrame(raf)\n raf = requestAnimationFrame(() => {\n raf = requestAnimationFrame(() => {\n update(e)\n })\n })\n } else {\n update(e)\n }\n })\n}\n\n/** @private */\nfunction bindScroll (el: HTMLElement | undefined, onScroll: (e: Event) => void) {\n const scrollElements = [document, ...getScrollParents(el)]\n scrollElements.forEach(el => {\n el.addEventListener('scroll', onScroll, { passive: true })\n })\n\n onScopeDispose(() => {\n scrollElements.forEach(el => {\n el.removeEventListener('scroll', onScroll)\n })\n })\n}\n","// Utilities\nimport { computed, warn } from 'vue'\nimport { IN_BROWSER } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\nexport function useTeleport (target: Ref<boolean | string | Element>) {\n const teleportTarget = computed(() => {\n const _target = target.value\n\n if (_target === true || !IN_BROWSER) return undefined\n\n const targetElement =\n _target === false ? document.body\n : typeof _target === 'string' ? document.querySelector(_target)\n : _target\n\n if (targetElement == null) {\n warn(`Unable to locate target ${_target}`)\n return undefined\n }\n\n if (!useTeleport.cache.has(targetElement)) {\n const el = document.createElement('div')\n el.className = 'v-overlay-container'\n targetElement.appendChild(el)\n useTeleport.cache.set(targetElement, el)\n }\n\n return useTeleport.cache.get(targetElement)\n })\n\n return { teleportTarget }\n}\nuseTeleport.cache = new WeakMap<Element, Element>()\n","// Utilities\nimport { computed, ref, watch } from 'vue'\n\n// Types\nimport type { Ref } from 'vue'\nimport { propsFactory } from '@/util'\n\nexport const makeLazyProps = propsFactory({\n eager: Boolean,\n}, 'lazy')\n\nexport function useLazy (props: { eager: boolean }, active: Ref<boolean>) {\n const isBooted = ref(false)\n const hasContent = computed(() => isBooted.value || props.eager || active.value)\n\n watch(active, () => isBooted.value = true)\n\n function onAfterLeave () {\n if (!props.eager) isBooted.value = false\n }\n\n return { isBooted, hasContent, onAfterLeave }\n}\n","import { computed, effectScope, onScopeDispose, ref, toRaw, watch } from 'vue'\nimport { getCurrentInstance } from '@/util'\n\n// Types\nimport type { ComponentInternalInstance, EffectScope, Ref } from 'vue'\n\nconst stack = ref<ComponentInternalInstance[]>([])\n\nexport function useStack (isActive: Ref<boolean>) {\n const vm = getCurrentInstance('useStack')\n let scope: EffectScope | undefined\n watch(isActive, val => {\n if (val) {\n scope = effectScope()\n scope.run(() => {\n stack.value.push(vm)\n\n onScopeDispose(() => {\n const idx = stack.value.indexOf(vm)\n stack.value.splice(idx, 1)\n })\n })\n } else {\n scope?.stop()\n }\n }, { immediate: true })\n\n const isTop = computed(() => {\n return toRaw(stack.value[stack.value.length - 1]) === vm\n })\n\n return {\n isTop,\n }\n}\n","import { attachedRoot } from '@/util'\nimport type { DirectiveBinding } from 'vue'\n\ninterface ClickOutsideBindingArgs {\n handler: (e: MouseEvent) => void\n closeConditional?: (e: Event) => boolean\n include?: () => HTMLElement[]\n}\n\ninterface ClickOutsideDirectiveBinding extends DirectiveBinding {\n value: ((e: MouseEvent) => void) | ClickOutsideBindingArgs\n}\n\nfunction defaultConditional () {\n return true\n}\n\nfunction checkEvent (e: MouseEvent, el: HTMLElement, binding: ClickOutsideDirectiveBinding): boolean {\n // The include element callbacks below can be expensive\n // so we should avoid calling them when we're not active.\n // Explicitly check for false to allow fallback compatibility\n // with non-toggleable components\n if (!e || checkIsActive(e, binding) === false) return false\n\n // If we're clicking inside the shadowroot, then the app root doesn't get the same\n // level of introspection as to _what_ we're clicking. We want to check to see if\n // our target is the shadowroot parent container, and if it is, ignore.\n const root = attachedRoot(el)\n if (\n typeof ShadowRoot !== 'undefined' &&\n root instanceof ShadowRoot &&\n root.host === e.target\n ) return false\n\n // Check if additional elements were passed to be included in check\n // (click must be outside all included elements, if any)\n const elements = ((typeof binding.value === 'object' && binding.value.include) || (() => []))()\n // Add the root element for the component this directive was defined on\n elements.push(el)\n\n // Check if it's a click outside our elements, and then if our callback returns true.\n // Non-toggleable components should take action in their callback and return falsy.\n // Toggleable can return true if it wants to deactivate.\n // Note that, because we're in the capture phase, this callback will occur before\n // the bubbling click event on any outside elements.\n return !elements.some(el => el?.contains(e.target as Node))\n}\n\nfunction checkIsActive (e: MouseEvent, binding: ClickOutsideDirectiveBinding): boolean | void {\n const isActive = (typeof binding.value === 'object' && binding.value.closeConditional) || defaultConditional\n\n return isActive(e)\n}\n\nfunction directive (e: MouseEvent, el: HTMLElement, binding: ClickOutsideDirectiveBinding) {\n const handler = typeof binding.value === 'function' ? binding.value : binding.value.handler\n\n el._clickOutside!.lastMousedownWasOutside && checkEvent(e, el, binding) && setTimeout(() => {\n checkIsActive(e, binding) && handler && handler(e)\n }, 0)\n}\n\nfunction handleShadow (el: HTMLElement, callback: Function): void {\n const root = attachedRoot(el)\n\n callback(document)\n\n if (typeof ShadowRoot !== 'undefined' && root instanceof ShadowRoot) {\n callback(root)\n }\n}\n\nexport const ClickOutside = {\n // [data-app] may not be found\n // if using bind, inserted makes\n // sure that the root element is\n // available, iOS does not support\n // clicks on body\n mounted (el: HTMLElement, binding: ClickOutsideDirectiveBinding) {\n const onClick = (e: Event) => directive(e as MouseEvent, el, binding)\n const onMousedown = (e: Event) => {\n el._clickOutside!.lastMousedownWasOutside = checkEvent(e as MouseEvent, el, binding)\n }\n\n handleShadow(el, (app: HTMLElement) => {\n app.addEventListener('click', onClick, true)\n app.addEventListener('mousedown', onMousedown, true)\n })\n\n if (!el._clickOutside) {\n el._clickOutside = {\n lastMousedownWasOutside: true,\n }\n }\n\n el._clickOutside[binding.instance!.$.uid] = {\n onClick,\n onMousedown,\n }\n },\n\n unmounted (el: HTMLElement, binding: ClickOutsideDirectiveBinding) {\n if (!el._clickOutside) return\n\n handleShadow(el, (app: HTMLElement) => {\n if (!app || !el._clickOutside?.[binding.instance!.$.uid]) return\n\n const { onClick, onMousedown } = el._clickOutside[binding.instance!.$.uid]!\n\n app.removeEventListener('click', onClick, true)\n app.removeEventListener('mousedown', onMousedown, true)\n })\n\n delete el._clickOutside[binding.instance!.$.uid]\n },\n}\n\nexport default ClickOutside\n","// Styles\nimport './VOverlay.sass'\n\n// Composables\nimport { makeActivatorProps, useActivator } from './useActivator'\nimport { makePositionStrategyProps, usePositionStrategies } from './positionStrategies'\nimport { makeScrollStrategyProps, useScrollStrategies } from './scrollStrategies'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\nimport { useBackButton } from '@/composables/router'\nimport { useBackgroundColor } from '@/composables/color'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useRtl } from '@/composables/rtl'\nimport { useTeleport } from '@/composables/teleport'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeLazyProps, useLazy } from '@/composables/lazy'\nimport { useStack } from '@/composables/stack'\n\n// Directives\nimport { ClickOutside } from '@/directives/click-outside'\n\n// Utilities\nimport {\n convertToUnit,\n genericComponent,\n getScrollParent,\n IN_BROWSER,\n standardEasing,\n useRender,\n} from '@/util'\nimport {\n computed,\n mergeProps,\n ref,\n Teleport,\n toHandlers,\n Transition,\n watch,\n} from 'vue'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\nimport type { BackgroundColorData } from '@/composables/color'\n\ninterface ScrimProps {\n [key: string]: unknown\n modelValue: boolean\n color: BackgroundColorData\n}\nfunction Scrim (props: ScrimProps) {\n const { modelValue, color, ...rest } = props\n return (\n <Transition name=\"fade-transition\" appear>\n { props.modelValue && (\n <div\n class={[\n 'v-overlay__scrim',\n props.color.backgroundColorClasses.value,\n ]}\n style={ props.color.backgroundColorStyles.value }\n { ...rest }\n />\n )}\n </Transition>\n )\n}\n\nexport type OverlaySlots = MakeSlots<{\n default: [{ isActive: Ref<boolean> }]\n activator: [{ isActive: boolean, props: Record<string, any> }]\n}>\n\nexport const VOverlay = genericComponent<new () => {\n $slots: OverlaySlots\n}>()({\n name: 'VOverlay',\n\n directives: { ClickOutside },\n\n inheritAttrs: false,\n\n props: {\n absolute: Boolean,\n attach: [Boolean, String, Object] as PropType<boolean | string | Element>,\n contained: Boolean,\n contentClass: null,\n noClickAnimation: Boolean,\n modelValue: Boolean,\n persistent: Boolean,\n scrim: {\n type: [String, Boolean],\n default: true,\n },\n\n ...makeActivatorProps(),\n ...makeDimensionProps(),\n ...makePositionStrategyProps(),\n ...makeScrollStrategyProps(),\n ...makeThemeProps(),\n ...makeTransitionProps(),\n ...makeLazyProps(),\n },\n\n emits: {\n 'click:outside': (e: MouseEvent) => true,\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots, attrs, emit }) {\n const isActive = useProxiedModel(props, 'modelValue')\n const { teleportTarget } = useTeleport(computed(() => props.attach || props.contained))\n const { themeClasses } = provideTheme(props)\n const { rtlClasses } = useRtl()\n const { hasContent, onAfterLeave } = useLazy(props, isActive)\n const scrimColor = useBackgroundColor(computed(() => {\n return typeof props.scrim === 'string' ? props.scrim : null\n }))\n const { activatorEl, activatorRef, activatorEvents } = useActivator(props, isActive)\n const { dimensionStyles } = useDimension(props)\n const { isTop } = useStack(isActive)\n\n const root = ref<HTMLElement>()\n const contentEl = ref<HTMLElement>()\n const { contentStyles, updatePosition } = usePositionStrategies(props, {\n contentEl,\n activatorEl,\n isActive,\n })\n useScrollStrategies(props, {\n root,\n contentEl,\n activatorEl,\n isActive,\n updatePosition,\n })\n\n function onClickOutside (e: MouseEvent) {\n emit('click:outside', e)\n\n if (!props.persistent) isActive.value = false\n else animateClick()\n }\n\n function closeConditional () {\n return isActive.value && isTop.value\n }\n\n IN_BROWSER && watch(isActive, val => {\n if (val) {\n window.addEventListener('keydown', onKeydown)\n } else {\n window.removeEventListener('keydown', onKeydown)\n }\n }, { immediate: true })\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key === 'Escape' && isTop.value) {\n if (!props.persistent) {\n isActive.value = false\n } else animateClick()\n }\n }\n\n useBackButton(next => {\n if (isTop.value && isActive.value) {\n next(false)\n if (!props.persistent) isActive.value = false\n else animateClick()\n } else {\n next()\n }\n })\n\n const top = ref<number>()\n watch(() => isActive.value && (props.absolute || props.contained) && teleportTarget.value == null, val => {\n if (val) {\n const scrollParent = getScrollParent(root.value)\n if (scrollParent && scrollParent !== document.scrollingElement) {\n top.value = scrollParent.scrollTop\n }\n }\n })\n\n // Add a quick \"bounce\" animation to the content\n function animateClick () {\n if (props.noClickAnimation) return\n\n contentEl.value?.animate([\n { transformOrigin: 'center' },\n { transform: 'scale(1.03)' },\n { transformOrigin: 'center' },\n ], {\n duration: 150,\n easing: standardEasing,\n })\n }\n\n useRender(() => (\n <>\n { slots.activator?.({\n isActive: isActive.value,\n props: mergeProps({\n ref: activatorRef,\n }, toHandlers(activatorEvents.value), props.activatorProps),\n }) }\n <Teleport\n disabled={ !teleportTarget.value }\n to={ teleportTarget.value }\n >\n { hasContent.value && (\n <div\n class={[\n 'v-overlay',\n {\n 'v-overlay--absolute': props.absolute || props.contained,\n 'v-overlay--active': isActive.value,\n 'v-overlay--contained': props.contained,\n },\n themeClasses.value,\n rtlClasses.value,\n ]}\n style={ top.value != null ? `top: ${convertToUnit(top.value)}` : undefined }\n ref={ root }\n {...attrs}\n >\n <Scrim\n color={ scrimColor }\n modelValue={ isActive.value && !!props.scrim }\n />\n <MaybeTransition\n appear\n onAfterLeave={ onAfterLeave }\n persisted\n transition={ props.transition }\n target={ activatorEl.value }\n >\n <div\n ref={ contentEl }\n v-show={ isActive.value }\n v-click-outside={{ handler: onClickOutside, closeConditional, include: () => [activatorEl.value] }}\n class={[\n 'v-overlay__content',\n props.contentClass,\n ]}\n style={[\n dimensionStyles.value,\n contentStyles.value,\n ]}\n >\n { slots.default?.({ isActive }) }\n </div>\n </MaybeTransition>\n </div>\n )}\n </Teleport>\n </>\n ))\n\n return {\n animateClick,\n contentEl,\n activatorEl,\n }\n },\n})\n\nexport type VOverlay = InstanceType<typeof VOverlay>\n","// Styles\nimport './VDialog.sass'\n\n// Components\nimport { VDialogTransition } from '@/components/transitions'\nimport { VOverlay } from '@/components/VOverlay'\n\n// Composables\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeTransitionProps } from '@/composables/transition'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { nextTick, ref, watch } from 'vue'\nimport { genericComponent, IN_BROWSER } from '@/util'\n\n// Types\nimport type { OverlaySlots } from '@/components/VOverlay/VOverlay'\n\nexport const VDialog = genericComponent<new () => {\n $slots: OverlaySlots\n}>()({\n name: 'VDialog',\n\n inheritAttrs: false,\n\n props: {\n fullscreen: Boolean,\n origin: {\n type: String,\n default: 'center center',\n },\n retainFocus: {\n type: Boolean,\n default: true,\n },\n scrollable: Boolean,\n modelValue: Boolean,\n\n ...makeDimensionProps({ width: 'auto' }),\n ...makeTransitionProps({\n transition: { component: VDialogTransition },\n }),\n },\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { attrs, slots }) {\n const isActive = useProxiedModel(props, 'modelValue')\n const { dimensionStyles } = useDimension(props)\n\n const overlay = ref<VOverlay>()\n function onFocusin (e: FocusEvent) {\n const before = e.relatedTarget as HTMLElement | null\n const after = e.target as HTMLElement | null\n\n if (\n before !== after &&\n overlay.value?.contentEl &&\n // It isn't the document or the dialog body\n ![document, overlay.value.contentEl].includes(after!) &&\n // It isn't inside the dialog body\n !overlay.value.contentEl.contains(after)\n // We're the topmost dialog\n // TODO: this.activeZIndex >= this.getMaxZIndex() &&\n // It isn't inside a dependent element (like a menu)\n // TODO: !this.getOpenDependentElements().some(el => el.contains(target))\n // So we must have focused something outside the dialog and its children\n ) {\n const focusable = [...overlay.value.contentEl.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n )].filter(el => !el.hasAttribute('disabled')) as HTMLElement[]\n\n if (!focusable.length) return\n\n const firstElement = focusable[0]\n const lastElement = focusable[focusable.length - 1]\n\n if (before === firstElement) {\n lastElement.focus()\n } else {\n firstElement.focus()\n }\n }\n }\n\n if (IN_BROWSER) {\n watch(() => isActive.value && props.retainFocus, val => {\n val\n ? document.addEventListener('focusin', onFocusin)\n : document.removeEventListener('focusin', onFocusin)\n }, { immediate: true })\n }\n\n watch(isActive, async val => {\n await nextTick()\n if (val) {\n overlay.value!.contentEl?.focus({ preventScroll: true })\n } else {\n overlay.value!.activatorEl?.focus({ preventScroll: true })\n }\n })\n\n return () => {\n return (\n <VOverlay\n v-model={ isActive.value }\n class={[\n 'v-dialog',\n {\n 'v-dialog--fullscreen': props.fullscreen,\n },\n ]}\n style={ dimensionStyles.value }\n transition={ props.transition }\n ref={ overlay }\n aria-role=\"dialog\"\n aria-modal=\"true\"\n activatorProps={{\n 'aria-haspopup': 'dialog',\n 'aria-expanded': String(isActive.value),\n }}\n { ...attrs }\n v-slots={{\n default: slots.default,\n activator: slots.activator,\n }}\n />\n )\n }\n },\n})\n\nexport type VDialog = InstanceType<typeof VDialog>\n","// Styles\nimport './VDivider.sass'\n\n// Utilities\nimport { computed } from 'vue'\nimport { convertToUnit, defineComponent } from '@/util'\n\n// Composables\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Types\ntype DividerKey = 'borderRightWidth' | 'borderTopWidth' | 'maxHeight' | 'maxWidth'\ntype DividerStyles = Partial<Record<DividerKey, string>>\n\nexport const VDivider = defineComponent({\n name: 'VDivider',\n\n props: {\n inset: Boolean,\n length: [Number, String],\n thickness: [Number, String],\n vertical: Boolean,\n ...makeThemeProps(),\n },\n\n setup (props, { attrs }) {\n const { themeClasses } = provideTheme(props)\n const dividerStyles = computed(() => {\n const styles: DividerStyles = {}\n\n if (props.length) {\n styles[props.vertical ? 'maxHeight' : 'maxWidth'] = convertToUnit(props.length)\n }\n\n if (props.thickness) {\n styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness)\n }\n\n return styles\n })\n\n return () => {\n return (\n <hr\n class={[\n {\n 'v-divider': true,\n 'v-divider--inset': props.inset,\n 'v-divider--vertical': props.vertical,\n },\n themeClasses.value,\n ]}\n style={ dividerStyles.value }\n aria-orientation={\n !attrs.role || attrs.role === 'separator'\n ? props.vertical ? 'vertical' : 'horizontal'\n : undefined\n }\n role={`${attrs.role || 'separator'}`}\n />\n )\n }\n },\n})\n","// Styles\nimport './VExpansionPanel.sass'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\nimport { makeGroupProps, useGroup } from '@/composables/group'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed } from 'vue'\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType } from 'vue'\nimport type { GroupItemProvide } from '@/composables/group'\n\nexport const VExpansionPanelSymbol: InjectionKey<GroupItemProvide> = Symbol.for('vuetify:v-expansion-panel')\n\nconst allowedVariants = ['default', 'accordion', 'inset', 'popout'] as const\ntype Variant = typeof allowedVariants[number]\n\nexport const VExpansionPanels = defineComponent({\n name: 'VExpansionPanels',\n\n props: {\n variant: {\n type: String as PropType<Variant>,\n default: 'default',\n validator: (v: any) => allowedVariants.includes(v),\n },\n\n ...makeTagProps(),\n ...makeGroupProps(),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:modelValue': (val: unknown) => true,\n },\n\n setup (props, { slots }) {\n useGroup(props, VExpansionPanelSymbol)\n const { themeClasses } = provideTheme(props)\n\n const variantClass = computed(() => props.variant && `v-expansion-panels--variant-${props.variant}`)\n\n return () => (\n <props.tag\n class={[\n 'v-expansion-panels',\n themeClasses.value,\n variantClass.value,\n ]}\n >\n { slots.default?.() }\n </props.tag>\n )\n },\n})\n\nexport type VExpansionPanels = InstanceType<typeof VExpansionPanels>\n","// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VExpansionPanelSymbol } from './VExpansionPanels'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\n\n// Directives\nimport ripple from '@/directives/ripple'\n\n// Utilities\nimport { computed, inject } from 'vue'\nimport { defineComponent, propsFactory } from '@/util'\n\nexport const makeVExpansionPanelTitleProps = propsFactory({\n expandIcon: {\n type: String,\n default: '$expand',\n },\n collapseIcon: {\n type: String,\n default: '$collapse',\n },\n hideActions: Boolean,\n ripple: {\n type: [Boolean, Object],\n default: false,\n },\n color: String,\n})\n\nexport const VExpansionPanelTitle = defineComponent({\n name: 'VExpansionPanelTitle',\n\n directives: { ripple },\n\n props: {\n ...makeVExpansionPanelTitleProps(),\n },\n\n setup (props, { slots }) {\n const expansionPanel = inject(VExpansionPanelSymbol)\n\n if (!expansionPanel) throw new Error('[Vuetify] v-expansion-panel-title needs to be placed inside v-expansion-panel')\n\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(props, 'color')\n\n const slotProps = computed(() => ({\n expanded: expansionPanel.isSelected.value,\n disabled: expansionPanel.disabled.value,\n expandIcon: props.expandIcon,\n collapseIcon: props.collapseIcon,\n }))\n\n return () => (\n <button\n class={[\n 'v-expansion-panel-title',\n {\n 'v-expansion-panel-title--active': expansionPanel.isSelected.value,\n },\n backgroundColorClasses.value,\n ]}\n style={ backgroundColorStyles.value }\n type=\"button\"\n tabindex={ expansionPanel.disabled.value ? -1 : undefined }\n disabled={ expansionPanel.disabled.value }\n aria-expanded={ expansionPanel.isSelected.value }\n onClick={ expansionPanel.toggle }\n v-ripple={ props.ripple }\n >\n <div class=\"v-expansion-panel-title__overlay\" />\n { slots.default?.(slotProps.value) }\n { !props.hideActions && (\n <div class=\"v-expansion-panel-title__icon\">\n {\n slots.actions ? slots.actions(slotProps.value)\n : <VIcon icon={ expansionPanel.isSelected.value ? props.collapseIcon : props.expandIcon } />\n }\n </div>\n ) }\n </button>\n )\n },\n})\n","// Components\nimport { VExpandTransition } from '@/components/transitions'\nimport { VExpansionPanelSymbol } from './VExpansionPanels'\n\n// Composables\nimport { makeLazyProps, useLazy } from '@/composables/lazy'\n\n// Utilities\nimport { inject } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport const VExpansionPanelText = defineComponent({\n name: 'VExpansionPanelText',\n\n props: {\n ...makeLazyProps(),\n },\n\n setup (props, { slots }) {\n const expansionPanel = inject(VExpansionPanelSymbol)\n\n if (!expansionPanel) throw new Error('[Vuetify] v-expansion-panel-text needs to be placed inside v-expansion-panel')\n\n const { hasContent, onAfterLeave } = useLazy(props, expansionPanel.isSelected)\n\n return () => (\n <VExpandTransition onAfterLeave={ onAfterLeave }>\n <div\n v-show={ expansionPanel.isSelected.value }\n class={[\n 'v-expansion-panel-text',\n ]}\n >\n { slots.default && hasContent.value && (\n <div class=\"v-expansion-panel-text__wrapper\">\n { slots.default?.() }\n </div>\n ) }\n </div>\n </VExpandTransition>\n )\n },\n})\n","// Components\nimport { makeVExpansionPanelTitleProps, VExpansionPanelTitle } from './VExpansionPanelTitle'\nimport { VExpansionPanelText } from './VExpansionPanelText'\nimport { VExpansionPanelSymbol } from './VExpansionPanels'\n\n// Composables\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeGroupItemProps, useGroupItem } from '@/composables/group'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeLazyProps } from '@/composables/lazy'\n\n// Utilities\nimport { computed, provide } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport const VExpansionPanel = defineComponent({\n name: 'VExpansionPanel',\n\n props: {\n title: String,\n text: String,\n bgColor: String,\n\n ...makeLazyProps(),\n ...makeGroupItemProps(),\n ...makeRoundedProps(),\n ...makeElevationProps(),\n ...makeTagProps(),\n ...makeVExpansionPanelTitleProps(),\n },\n\n setup (props, { slots }) {\n const groupItem = useGroupItem(props, VExpansionPanelSymbol)\n const { roundedClasses } = useRounded(props)\n const { elevationClasses } = useElevation(props)\n\n provide(VExpansionPanelSymbol, groupItem)\n\n const isBeforeSelected = computed(() => {\n const index = groupItem.group.items.value.indexOf(groupItem.id)\n return !groupItem.isSelected.value &&\n groupItem.group.selected.value.some(id => groupItem.group.items.value.indexOf(id) - index === 1)\n })\n\n const isAfterSelected = computed(() => {\n const index = groupItem.group.items.value.indexOf(groupItem.id)\n return !groupItem.isSelected.value &&\n groupItem.group.selected.value.some(id => groupItem.group.items.value.indexOf(id) - index === -1)\n })\n\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(props, 'bgColor')\n\n return () => (\n <props.tag\n class={[\n 'v-expansion-panel',\n {\n 'v-expansion-panel--active': groupItem.isSelected.value,\n 'v-expansion-panel--before-active': isBeforeSelected.value,\n 'v-expansion-panel--after-active': isAfterSelected.value,\n 'v-expansion-panel--disabled': groupItem.disabled.value,\n },\n roundedClasses.value,\n backgroundColorClasses.value,\n ]}\n style={ backgroundColorStyles.value }\n aria-expanded={ groupItem.isSelected.value }\n >\n <div\n class={[\n 'v-expansion-panel__shadow',\n ...elevationClasses.value,\n ]}\n />\n { slots.default?.() || (\n <>\n <VExpansionPanelTitle\n expandIcon={ props.expandIcon }\n collapseIcon={ props.collapseIcon }\n color={ props.color }\n hideActions={ props.hideActions }\n ripple={ props.ripple }\n >\n { slots.title ? slots.title() : props.title }\n </VExpansionPanelTitle>\n <VExpansionPanelText eager={ props.eager }>\n { slots.text ? slots.text() : props.text }\n </VExpansionPanelText>\n </>\n ) }\n </props.tag>\n )\n },\n})\n\nexport type VExpansionPanel = InstanceType<typeof VExpansionPanel>\n","// Components\nimport { VLabel } from '@/components/VLabel'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VFieldLabel = defineComponent({\n name: 'VFieldLabel',\n\n props: {\n floating: Boolean,\n },\n\n setup (props, { slots }) {\n return () => {\n return (\n <VLabel\n class={[\n 'v-field-label',\n { 'v-field-label--floating': props.floating },\n ]}\n aria-hidden={ props.floating || undefined }\n v-slots={ slots }\n />\n )\n }\n },\n})\n\nexport type VFieldLabel = InstanceType<typeof VFieldLabel>\n","// Utilities\nimport { onBeforeUnmount, ref, watch } from 'vue'\n\nexport function useIntersectionObserver (callback?: IntersectionObserverCallback) {\n const intersectionRef = ref<HTMLElement>()\n const isIntersecting = ref(false)\n\n const observer = new IntersectionObserver((entries: IntersectionObserverEntry[]) => {\n callback?.(entries, observer)\n\n isIntersecting.value = !!entries.find(entry => entry.isIntersecting)\n })\n\n onBeforeUnmount(() => {\n observer.disconnect()\n })\n\n watch(intersectionRef, (newValue, oldValue) => {\n if (oldValue) {\n observer.unobserve(oldValue)\n isIntersecting.value = false\n }\n\n if (newValue) observer.observe(newValue)\n }, {\n flush: 'post',\n })\n\n return { intersectionRef, isIntersecting }\n}\n","// Styles\nimport './VProgressLinear.sass'\n\n// Composables\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useRtl } from '@/composables/rtl'\n\n// Utilities\nimport { convertToUnit, defineComponent } from '@/util'\nimport { computed, Transition } from 'vue'\n\nexport const VProgressLinear = defineComponent({\n name: 'VProgressLinear',\n\n props: {\n active: {\n type: Boolean,\n default: true,\n },\n bgColor: String,\n bgOpacity: [Number, String],\n bufferValue: {\n type: [Number, String],\n default: 0,\n },\n clickable: Boolean,\n color: String,\n height: {\n type: [Number, String],\n default: 4,\n },\n indeterminate: Boolean,\n max: {\n type: [Number, String],\n default: 100,\n },\n modelValue: {\n type: [Number, String],\n default: 0,\n },\n reverse: Boolean,\n stream: Boolean,\n striped: Boolean,\n roundedBar: Boolean,\n\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:modelValue': (value: number) => true,\n },\n\n setup (props, { slots }) {\n const progress = useProxiedModel(props, 'modelValue')\n const { isRtl } = useRtl()\n const { themeClasses } = provideTheme(props)\n const { textColorClasses, textColorStyles } = useTextColor(props, 'color')\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(computed(() => props.bgColor || props.color))\n const { backgroundColorClasses: barColorClasses, backgroundColorStyles: barColorStyles } = useBackgroundColor(props, 'color')\n const { roundedClasses } = useRounded(props)\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n\n const max = computed(() => parseInt(props.max, 10))\n const height = computed(() => parseInt(props.height, 10))\n const normalizedBuffer = computed(() => parseFloat(props.bufferValue) / max.value * 100)\n const normalizedValue = computed(() => parseFloat(progress.value) / max.value * 100)\n const isReversed = computed(() => isRtl.value !== props.reverse)\n const transition = computed(() => props.indeterminate ? 'fade-transition' : 'slide-x-transition')\n const opacity = computed(() => {\n return props.bgOpacity == null\n ? props.bgOpacity\n : parseFloat(props.bgOpacity)\n })\n\n function handleClick (e: MouseEvent) {\n if (!intersectionRef.value) return\n\n const { left, right, width } = intersectionRef.value.getBoundingClientRect()\n const value = isReversed.value ? (width - e.clientX) + (right - width) : e.clientX - left\n\n progress.value = Math.round(value / width * max.value)\n }\n\n return () => (\n <props.tag\n ref={ intersectionRef }\n class={[\n 'v-progress-linear',\n {\n 'v-progress-linear--active': props.active && isIntersecting.value,\n 'v-progress-linear--reverse': isReversed.value,\n 'v-progress-linear--rounded': props.rounded,\n 'v-progress-linear--rounded-bar': props.roundedBar,\n 'v-progress-linear--striped': props.striped,\n },\n roundedClasses.value,\n themeClasses.value,\n ]}\n style={{\n height: props.active ? convertToUnit(height.value) : 0,\n '--v-progress-linear-height': convertToUnit(height.value),\n }}\n role=\"progressbar\"\n aria-valuemin=\"0\"\n aria-valuemax={ props.max }\n aria-valuenow={ props.indeterminate ? undefined : normalizedValue.value }\n onClick={ props.clickable && handleClick }\n >\n { props.stream && (\n <div\n class={[\n 'v-progress-linear__stream',\n textColorClasses.value,\n ]}\n style={{\n ...textColorStyles.value,\n [isReversed.value ? 'left' : 'right']: convertToUnit(-height.value),\n borderTop: `${convertToUnit(height.value / 2)} dotted`,\n opacity: opacity.value,\n top: `calc(50% - ${convertToUnit(height.value / 4)})`,\n width: convertToUnit(100 - normalizedBuffer.value, '%'),\n '--v-progress-linear-stream-to': convertToUnit(height.value * (isReversed.value ? 1 : -1)),\n }}\n />\n ) }\n\n <div\n class={[\n 'v-progress-linear__background',\n backgroundColorClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n {\n opacity: opacity.value,\n width: convertToUnit((!props.stream ? 100 : normalizedBuffer.value), '%'),\n },\n ]}\n />\n\n <Transition name={ transition.value }>\n { !props.indeterminate ? (\n <div\n class={[\n 'v-progress-linear__determinate',\n barColorClasses.value,\n ]}\n style={[\n barColorStyles.value,\n { width: convertToUnit(normalizedValue.value, '%') },\n ]}\n />\n ) : (\n <div class=\"v-progress-linear__indeterminate\">\n { ['long', 'short'].map(bar => (\n <div\n key={ bar }\n class={[\n 'v-progress-linear__indeterminate',\n bar,\n barColorClasses.value,\n ]}\n style={ barColorStyles.value }\n />\n )) }\n </div>\n ) }\n </Transition>\n\n { slots.default && (\n <div class=\"v-progress-linear__content\">\n { slots.default({ value: normalizedValue.value, buffer: normalizedBuffer.value }) }\n </div>\n ) }\n </props.tag>\n )\n },\n})\n","// Components\nimport { VProgressLinear } from '@/components/VProgressLinear'\n\n// Utilities\nimport { computed } from 'vue'\nimport { getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nimport type { ExtractPropTypes } from 'vue'\nimport type { SetupContext } from '@vue/runtime-core'\nimport type { MakeSlots, SlotsToProps } from '@/util'\n\nexport interface LoaderSlotProps {\n color: string | undefined\n isActive: boolean\n}\n\nexport interface LoaderProps {\n loading: boolean\n}\n\n// Composables\nexport const makeLoaderProps = propsFactory({\n loading: Boolean,\n}, 'loader')\n\nexport function useLoader (\n props: LoaderProps,\n name = getCurrentInstanceName(),\n) {\n const loaderClasses = computed(() => ({\n [`${name}--loading`]: props.loading,\n }))\n\n return { loaderClasses }\n}\n\nexport function LoaderSlot (\n props: {\n active: boolean\n name: string\n color?: string\n } & ExtractPropTypes<SlotsToProps<MakeSlots<{\n default: [LoaderSlotProps]\n }>>>,\n { slots }: SetupContext,\n) {\n return (\n <div class={`${props.name}__loader`}>\n { slots.default?.({\n color: props.color,\n isActive: props.active,\n } as LoaderSlotProps) || (\n <VProgressLinear\n active={ props.active }\n color={ props.color }\n height=\"2\"\n indeterminate\n />\n )}\n </div>\n )\n}\n","import { ref } from 'vue'\n\nexport const useFocus = () => {\n const isFocused = ref(false)\n\n function focus () {\n isFocused.value = true\n }\n\n function blur () {\n isFocused.value = false\n }\n\n return { isFocused, focus, blur }\n}\n","// Styles\nimport './VField.sass'\n\n// Components\nimport { VExpandXTransition } from '@/components/transitions'\nimport { VIcon } from '@/components/VIcon'\nimport { VFieldLabel } from './VFieldLabel'\n\n// Composables\nimport { LoaderSlot, makeLoaderProps, useLoader } from '@/composables/loader'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useFocus } from '@/composables/focus'\n\n// Utilities\nimport { computed, inject, ref, toRef, watch, watchEffect } from 'vue'\nimport {\n convertToUnit,\n genericComponent,\n getUid,\n nullifyTransforms,\n pick,\n propsFactory,\n standardEasing,\n useRender,\n} from '@/util'\n\n// Types\nimport type { VInputSlot, VInputSymbol } from '@/components/VInput/VInput'\nimport type { LoaderSlotProps } from '@/composables/loader'\nimport type { PropType, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\n\nconst allowedVariants = ['underlined', 'outlined', 'filled', 'contained', 'plain'] as const\ntype Variant = typeof allowedVariants[number]\n\nexport interface DefaultInputSlot {\n isActive: boolean\n isFocused: boolean\n controlRef: Ref<HTMLElement | undefined>\n focus: () => void\n blur: () => void\n}\n\nexport interface VFieldSlot extends DefaultInputSlot {\n props: Record<string, unknown>\n}\n\nexport const makeVFieldProps = propsFactory({\n appendInnerIcon: String,\n bgColor: String,\n clearable: Boolean,\n clearIcon: {\n type: String,\n default: '$clear',\n },\n color: String,\n label: String,\n persistentClear: Boolean,\n prependInnerIcon: String,\n reverse: Boolean,\n singleLine: Boolean,\n variant: {\n type: String as PropType<Variant>,\n default: 'filled',\n validator: (v: any) => allowedVariants.includes(v),\n },\n\n ...makeThemeProps(),\n ...makeLoaderProps(),\n}, 'v-field')\n\nexport const VField = genericComponent<new <T>() => {\n $props: {\n modelValue?: T\n 'onUpdate:modelValue'?: (val: T) => any\n }\n $slots: MakeSlots<{\n clear: []\n prependInner: [DefaultInputSlot & VInputSlot]\n appendInner: [DefaultInputSlot & VInputSlot]\n label: [DefaultInputSlot & VInputSlot]\n loader: [LoaderSlotProps]\n default: [VFieldSlot]\n }>\n}>()({\n name: 'VField',\n\n inheritAttrs: false,\n\n props: {\n active: Boolean,\n disabled: Boolean,\n error: Boolean,\n id: String,\n ...makeVFieldProps(),\n },\n\n emits: {\n 'click:clear': (e: Event) => true,\n 'click:prepend-inner': (e: MouseEvent) => true,\n 'click:append-inner': (e: MouseEvent) => true,\n 'click:control': (props: DefaultInputSlot) => true,\n 'update:active': (active: boolean) => true,\n 'update:modelValue': (val: any) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { themeClasses } = provideTheme(props)\n const { loaderClasses } = useLoader(props)\n const isActive = useProxiedModel(props, 'active')\n const { isFocused, focus, blur } = useFocus()\n\n const uid = getUid()\n\n const labelRef = ref<VFieldLabel>()\n const floatingLabelRef = ref<VFieldLabel>()\n const controlRef = ref<HTMLElement>()\n const id = computed(() => props.id || `input-${uid}`)\n const hasLabel = computed(() => !props.singleLine && !!(props.label || slots.label))\n\n watchEffect(() => isActive.value = isFocused.value)\n\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'bgColor'))\n const { textColorClasses, textColorStyles } = useTextColor(computed(() => {\n return (\n isActive.value &&\n isFocused.value &&\n !props.error &&\n !props.disabled\n ) ? props.color : undefined\n }))\n\n watch(isActive, val => {\n if (hasLabel.value) {\n const el: HTMLElement = labelRef.value!.$el\n const targetEl: HTMLElement = floatingLabelRef.value!.$el\n const rect = nullifyTransforms(el)\n const targetRect = targetEl.getBoundingClientRect()\n\n const x = targetRect.x - rect.x\n const y = targetRect.y - rect.y - (rect.height / 2 - targetRect.height / 2)\n\n const targetWidth = targetRect.width / 0.75\n const width = Math.abs(targetWidth - rect.width) > 1\n ? { maxWidth: convertToUnit(targetWidth) }\n : undefined\n\n const duration = parseFloat(getComputedStyle(el).transitionDuration) * 1000\n const scale = parseFloat(getComputedStyle(targetEl).getPropertyValue('--v-field-label-scale'))\n\n el.style.visibility = 'visible'\n targetEl.style.visibility = 'hidden'\n\n el.animate([\n { transform: 'translate(0)' },\n { transform: `translate(${x}px, ${y}px) scale(${scale})`, ...width },\n ], {\n duration,\n easing: standardEasing,\n direction: val ? 'normal' : 'reverse',\n }).finished.then(() => {\n el.style.removeProperty('visibility')\n targetEl.style.removeProperty('visibility')\n })\n }\n }, { flush: 'post' })\n\n const slotProps = computed<DefaultInputSlot>(() => ({\n isActive: isActive.value,\n isFocused: isFocused.value,\n controlRef,\n blur,\n focus,\n }))\n\n function onClick (e: MouseEvent) {\n if (e.target !== document.activeElement) {\n e.preventDefault()\n }\n\n emit('click:control', slotProps.value)\n }\n\n const VInput = inject('VInput' as any as typeof VInputSymbol, undefined)\n\n useRender(() => {\n const isOutlined = props.variant === 'outlined'\n const hasPrepend = (slots.prependInner || props.prependInnerIcon)\n const hasClear = !!(props.clearable || slots.clear)\n const hasAppend = !!(slots.appendInner || props.appendInnerIcon || hasClear)\n const label = slots.label\n ? slots.label({\n label: props.label,\n props: { for: id.value },\n })\n : props.label\n\n return (\n <div\n class={[\n 'v-field',\n {\n 'v-field--active': isActive.value,\n 'v-field--appended': hasAppend,\n 'v-field--focused': isFocused.value,\n 'v-field--has-background': !!props.bgColor,\n 'v-field--persistent-clear': props.persistentClear,\n 'v-field--prepended': hasPrepend,\n 'v-field--reverse': props.reverse,\n 'v-field--single-line': props.singleLine,\n [`v-field--variant-${props.variant}`]: true,\n },\n themeClasses.value,\n loaderClasses.value,\n backgroundColorClasses.value,\n textColorClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n textColorStyles.value,\n ]}\n onClick={ onClick }\n { ...attrs }\n >\n <div class=\"v-field__overlay\" />\n\n <LoaderSlot\n name=\"v-field\"\n active={ props.loading }\n color={ VInput ? (!VInput.value.isValid.value ? undefined : props.color) : props.color }\n v-slots={{ default: slots.loader }}\n />\n\n { hasPrepend && (\n <div\n class=\"v-field__prepend-inner\"\n onClick={ e => emit('click:prepend-inner', e) }\n >\n { props.prependInnerIcon && (\n <VIcon icon={ props.prependInnerIcon } />\n ) }\n\n { slots?.prependInner?.(VInput?.value) }\n </div>\n ) }\n\n <div class=\"v-field__field\">\n { ['contained', 'filled'].includes(props.variant) && hasLabel.value && (\n <VFieldLabel ref={ floatingLabelRef } floating>\n { label }\n </VFieldLabel>\n ) }\n\n <VFieldLabel ref={ labelRef } for={ id.value }>\n { label }\n </VFieldLabel>\n\n { slots.default?.({\n ...VInput?.value,\n ...slotProps.value,\n props: {\n id: id.value,\n class: 'v-field__input',\n onFocus: () => (isFocused.value = true),\n onBlur: () => (isFocused.value = false),\n },\n focus,\n blur,\n } as VFieldSlot) }\n </div>\n\n { hasClear && (\n <VExpandXTransition>\n <div\n class=\"v-field__clearable\"\n onClick={ (e: Event) => emit('click:clear', e) }\n v-show={ props.active }\n >\n { slots.clear\n ? slots.clear()\n : <VIcon icon={ props.clearIcon } />\n }\n </div>\n </VExpandXTransition>\n ) }\n\n { hasAppend && (\n <div\n class=\"v-field__append-inner\"\n onClick={ e => emit('click:append-inner', e) }\n >\n { slots?.appendInner?.(VInput?.value) }\n\n { props.appendInnerIcon && (\n <VIcon icon={ props.appendInnerIcon } />\n ) }\n </div>\n ) }\n\n <div class=\"v-field__outline\">\n { isOutlined && (\n <>\n <div class=\"v-field__outline__start\" />\n\n { hasLabel.value && (\n <div class=\"v-field__outline__notch\">\n <VFieldLabel ref={ floatingLabelRef } floating>\n { label }\n </VFieldLabel>\n </div>\n ) }\n\n <div class=\"v-field__outline__end\" />\n </>\n ) }\n\n { ['plain', 'underlined'].includes(props.variant) && hasLabel.value && (\n <VFieldLabel ref={ floatingLabelRef } floating>\n { label }\n </VFieldLabel>\n ) }\n </div>\n </div>\n )\n })\n\n return {\n controlRef,\n }\n },\n})\n\nexport type VField = InstanceType<typeof VField>\n\n// TODO: this is kinda slow, might be better to implicitly inherit props instead\nexport function filterFieldProps (attrs: Record<string, unknown>) {\n return pick(attrs, Object.keys(VField.props))\n}\n","import { computed, inject, provide } from 'vue'\nimport { consoleError, consoleWarn, getObjectValueByPath, wrapInRef } from '@/util'\n\nimport en from '@/locale/en'\n\n// Types\nimport type { App, InjectionKey, Ref } from 'vue'\nimport type { MaybeRef } from '@/util'\n\nexport interface LocaleMessages {\n [key: string]: LocaleMessages | string\n}\n\nexport interface LocaleOptions {\n defaultLocale?: string\n fallbackLocale?: string\n messages?: LocaleMessages\n}\n\nexport interface LocaleProps {\n locale?: string\n fallbackLocale?: string\n messages?: LocaleMessages\n}\n\nexport interface LocaleInstance {\n current: Ref<string>\n fallback: Ref<string>\n messages: Ref<LocaleMessages>\n t: (key: string, ...params: unknown[]) => string\n n: (value: number) => string\n}\n\nexport interface LocaleAdapter {\n createRoot: (app: App) => LocaleInstance\n getScope: () => LocaleInstance\n createScope: (options?: LocaleProps) => LocaleInstance\n}\n\nexport const LocaleAdapterSymbol: InjectionKey<LocaleAdapter> = Symbol.for('vuetify:locale-adapter')\nexport const VuetifyLocaleSymbol: InjectionKey<LocaleInstance> = Symbol.for('vuetify:locale')\n\nexport function provideLocale (props?: LocaleProps) {\n const adapter = inject(LocaleAdapterSymbol)\n\n if (!adapter) throw new Error('[Vuetify] Could not find injected locale adapter')\n\n return adapter.createScope(props)\n}\n\nexport function useLocale () {\n const adapter = inject(LocaleAdapterSymbol)\n\n if (!adapter) throw new Error('[Vuetify] Could not find injected locale adapter')\n\n return adapter.getScope()\n}\n\nfunction isLocaleAdapter (x: any): x is LocaleAdapter {\n return !!x && x.hasOwnProperty('getScope') && x.hasOwnProperty('createScope') && x.hasOwnProperty('createRoot')\n}\n\nexport function createLocaleAdapter (app: App, options?: LocaleOptions | LocaleAdapter) {\n const adapter = isLocaleAdapter(options) ? options : createDefaultLocaleAdapter(options)\n\n const rootInstance = adapter.createRoot(app)\n\n return { adapter, rootInstance }\n}\n\nconst LANG_PREFIX = '$vuetify.'\n\nconst replace = (str: string, params: unknown[]) => {\n return str.replace(/\\{(\\d+)\\}/g, (match: string, index: string) => {\n /* istanbul ignore next */\n return String(params[+index])\n })\n}\n\nconst createTranslateFunction = (\n current: Ref<string>,\n fallback: Ref<string>,\n messages: Ref<LocaleMessages>,\n) => {\n return (key: string, ...params: unknown[]) => {\n if (!key.startsWith(LANG_PREFIX)) {\n return replace(key, params)\n }\n\n const shortKey = key.replace(LANG_PREFIX, '')\n const currentLocale = current.value && messages.value[current.value]\n const fallbackLocale = fallback.value && messages.value[fallback.value]\n\n let str: string = getObjectValueByPath(currentLocale, shortKey, null)\n\n if (!str) {\n consoleWarn(`Translation key \"${key}\" not found in \"${current.value}\", trying fallback locale`)\n str = getObjectValueByPath(fallbackLocale, shortKey, null)\n }\n\n if (!str) {\n consoleError(`Translation key \"${key}\" not found in fallback`)\n str = key\n }\n\n if (typeof str !== 'string') {\n consoleError(`Translation key \"${key}\" has a non-string value`)\n str = key\n }\n\n return replace(str, params)\n }\n}\n\nfunction createNumberFunction (current: Ref<string>, fallback: Ref<string>) {\n return (value: number, options?: Intl.NumberFormatOptions) => {\n const numberFormat = new Intl.NumberFormat([current.value, fallback.value], options)\n\n return numberFormat.format(value)\n }\n}\n\nexport function createDefaultLocaleAdapter (options?: LocaleOptions): LocaleAdapter {\n const createScope = (options: {\n current: MaybeRef<string>\n fallback: MaybeRef<string>\n messages: MaybeRef<LocaleMessages>\n }) => {\n const current = wrapInRef(options.current)\n const fallback = wrapInRef(options.fallback)\n const messages = wrapInRef(options.messages)\n\n return {\n current,\n fallback,\n messages,\n t: createTranslateFunction(current, fallback, messages),\n n: createNumberFunction(current, fallback),\n }\n }\n\n return {\n createRoot: app => {\n const rootScope = createScope({\n current: options?.defaultLocale ?? 'en',\n fallback: options?.fallbackLocale ?? 'en',\n messages: options?.messages ?? { en },\n })\n\n app.provide(VuetifyLocaleSymbol, rootScope)\n\n return rootScope\n },\n getScope: () => {\n const currentScope = inject(VuetifyLocaleSymbol)\n\n if (!currentScope) throw new Error('[Vuetify] Could not find injected locale instance')\n\n return currentScope\n },\n createScope: options => {\n const currentScope = inject(VuetifyLocaleSymbol)\n\n if (!currentScope) throw new Error('[Vuetify] Could not find injected locale instance')\n\n const newScope = createScope({\n current: computed(() => options?.locale ?? currentScope.current.value),\n fallback: computed(() => options?.locale ?? currentScope.fallback.value),\n messages: computed(() => options?.messages ?? currentScope.messages.value),\n })\n\n provide(VuetifyLocaleSymbol, newScope)\n\n return newScope\n },\n }\n}\n","// Styles\nimport './VFileInput.sass'\n\n// Components\nimport { filterFieldProps, makeVFieldProps } from '@/components/VField/VField'\nimport { VChip } from '@/components/VChip'\nimport { VCounter } from '@/components/VCounter'\nimport { VField } from '@/components/VField'\n\n// Composables\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { defineComponent, filterInputAttrs, humanReadableFileSize, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport { filterInputProps, makeVInputProps, VInput } from '@/components/VInput/VInput'\n\nexport const VFileInput = defineComponent({\n name: 'VFileInput',\n\n inheritAttrs: false,\n\n props: {\n chips: Boolean,\n counter: Boolean,\n counterSizeString: {\n type: String,\n default: '$vuetify.fileInput.counterSize',\n },\n counterString: {\n type: String,\n default: '$vuetify.fileInput.counter',\n },\n multiple: Boolean,\n showSize: {\n type: [Boolean, Number] as PropType<boolean | 1000 | 1024>,\n default: false,\n validator: (v: boolean | number) => {\n return (\n typeof v === 'boolean' ||\n [1000, 1024].includes(v)\n )\n },\n },\n\n ...makeVInputProps(),\n\n prependIcon: {\n type: String,\n default: '$file',\n },\n modelValue: {\n type: Array as PropType<File[] | undefined>,\n default: () => ([]),\n validator: (val: any) => {\n return wrapInArray(val).every(v => v != null && typeof v === 'object')\n },\n },\n\n ...makeVFieldProps({ clearable: true }),\n },\n\n emits: {\n 'update:modelValue': (files: File[]) => true,\n },\n\n setup (props, { attrs, slots }) {\n const { t } = useLocale()\n const model = useProxiedModel(props, 'modelValue')\n\n const internalDirty = ref(false)\n const isDirty = computed(() => {\n return internalDirty.value || !!model.value?.length\n })\n\n const base = computed(() => typeof props.showSize !== 'boolean' ? props.showSize : undefined)\n const totalBytes = computed(() => (model.value ?? []).reduce((bytes, { size = 0 }) => bytes + size, 0))\n const totalBytesReadable = computed(() => humanReadableFileSize(totalBytes.value, base.value))\n\n const fileNames = computed(() => (model.value ?? []).map(file => {\n const { name = '', size = 0 } = file\n\n return !props.showSize\n ? name\n : `${name} (${humanReadableFileSize(size, base.value)})`\n }))\n\n const counterValue = computed(() => {\n const fileCount = model.value?.length ?? 0\n if (props.showSize) return t(props.counterSizeString, fileCount, totalBytesReadable.value)\n else return t(props.counterString, fileCount)\n })\n\n const inputRef = ref<HTMLInputElement>()\n function focus () {\n inputRef.value?.focus()\n }\n function blur () {\n inputRef.value?.blur()\n }\n function click () {\n inputRef.value?.click()\n }\n function clear (e?: Event) {\n e?.stopPropagation()\n\n model.value = []\n\n if (inputRef?.value) {\n inputRef.value.value = ''\n }\n }\n\n useRender(() => {\n const hasCounter = !!(slots.counter || props.counter || counterValue.value)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const [inputProps] = filterInputProps(props)\n const [fieldProps, _] = filterFieldProps(props)\n\n return (\n <VInput\n v-model={ model.value }\n class=\"v-file-input\"\n { ...rootAttrs }\n { ...inputProps }\n >\n {{\n ...slots,\n default: () => (\n <VField\n active={ isDirty.value }\n prepend-icon={ props.prependIcon }\n onUpdate:active={ val => internalDirty.value = val }\n onClick:control={ click }\n onClick:prepend={ click }\n onClick:clear={ clear }\n { ...fieldProps }\n >\n {{\n ...slots,\n default: ({\n isActive,\n props: { class: fieldClass, ...slotProps },\n }) => (\n <>\n <input\n ref={ inputRef }\n type=\"file\"\n disabled={ props.disabled }\n multiple={ props.multiple }\n onClick={ e => e.stopPropagation() }\n onChange={ e => {\n if (!e.target) return\n\n const target = e.target as HTMLInputElement\n model.value = [...target.files ?? []]\n\n if (!isActive) inputRef.value?.focus()\n } }\n { ...slotProps }\n { ...inputAttrs }\n />\n\n { isDirty.value && (\n <div class={ fieldClass }>\n { slots.selection ? slots.selection({\n fileNames: fileNames.value,\n totalBytes: totalBytes.value,\n totalBytesReadable: totalBytesReadable.value,\n })\n : props.chips ? fileNames.value.map(text => (\n <VChip\n key={ text }\n size=\"small\"\n color={ props.color }\n >{ text }</VChip>\n ))\n : fileNames.value.join(', ') }\n </div>\n ) }\n </>\n ),\n }}\n </VField>\n ),\n details: hasCounter ? () => (\n <>\n <span />\n\n <VCounter\n value={ counterValue.value }\n v-slots={ slots.counter }\n />\n </>\n ) : undefined,\n }}\n </VInput>\n )\n })\n\n return {\n focus,\n blur,\n click,\n }\n },\n})\n\nexport type VFileInput = InstanceType<typeof VFileInput>\n","// Styles\nimport './VFooter.sass'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VFooter = defineComponent({\n name: 'VFooter',\n\n props: {\n ...makeBorderProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeTagProps({ tag: 'footer' }),\n ...makeThemeProps(),\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { positionClasses, positionStyles } = usePosition(props)\n const { roundedClasses } = useRounded(props)\n\n return () => (\n <props.tag\n class={[\n 'v-footer',\n themeClasses.value,\n borderClasses.value,\n elevationClasses.value,\n positionClasses.value,\n roundedClasses.value,\n ]}\n style={[\n\n dimensionStyles.value,\n positionStyles.value,\n ]}\n v-slots={ slots }\n />\n )\n },\n})\n","// Composables\nimport { createForm, makeFormProps } from '@/composables/form'\n\n// Utilities\nimport { ref } from 'vue'\nimport { defineComponent, useRender } from '@/util'\n\nexport const VForm = defineComponent({\n name: 'VForm',\n\n props: {\n ...makeFormProps(),\n },\n\n emits: {\n 'update:modelValue': (val: boolean | null) => true,\n submit: (e: Event) => true,\n },\n\n setup (props, { slots, emit }) {\n const form = createForm(props)\n const formRef = ref<HTMLFormElement>()\n\n function onReset (e: Event) {\n e.preventDefault()\n form.reset()\n }\n\n function onSubmit (e: Event) {\n e.preventDefault()\n form.validate().then(({ valid }) => {\n if (valid) {\n emit('submit', e)\n }\n })\n }\n\n useRender(() => ((\n <form\n ref={ formRef }\n class=\"v-form\"\n novalidate\n onReset={ onReset }\n onSubmit={ onSubmit }\n >\n { slots.default?.(form) }\n </form>\n )))\n\n return form\n },\n})\n\nexport type VForm = InstanceType<typeof VForm>\n","// Styles\nimport './VGrid.sass'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VContainer = defineComponent({\n name: 'VContainer',\n\n props: {\n fluid: {\n type: Boolean,\n default: false,\n },\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n return () => (\n <props.tag\n class={[\n 'v-container',\n { 'v-container--fluid': props.fluid },\n ]}\n v-slots={ slots }\n />\n )\n },\n})\n","// Styles\nimport './VGrid.sass'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { capitalize, computed, h } from 'vue'\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { Prop } from 'vue'\n\nconst breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl'] as const // no xs\n\nconst breakpointProps = (() => {\n return breakpoints.reduce((props, val) => {\n props[val] = {\n type: [Boolean, String, Number],\n default: false,\n }\n return props\n }, {} as Record<string, Prop<boolean | string | number, false>>)\n})()\n\nconst offsetProps = (() => {\n return breakpoints.reduce((props, val) => {\n props['offset' + capitalize(val)] = {\n type: [String, Number],\n default: null,\n }\n return props\n }, {} as Record<string, Prop<string | number, null>>)\n})()\n\nconst orderProps = (() => {\n return breakpoints.reduce((props, val) => {\n props['order' + capitalize(val)] = {\n type: [String, Number],\n default: null,\n }\n return props\n }, {} as Record<string, Prop<string | number, null>>)\n})()\n\nconst propMap = {\n col: Object.keys(breakpointProps),\n offset: Object.keys(offsetProps),\n order: Object.keys(orderProps),\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: boolean | string | number) {\n let className: string = type\n if (val == null || val === false) {\n return undefined\n }\n if (prop) {\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n if (type === 'col') {\n className = 'v-' + className\n }\n // Handling the boolean style prop when accepting [Boolean, String, Number]\n // means Vue will not convert <v-col sm></v-col> to sm: true for us.\n // Since the default is false, an empty string indicates the prop's presence.\n if (type === 'col' && (val === '' || val === true)) {\n // .v-col-md\n return className.toLowerCase()\n }\n // .order-md-6\n className += `-${val}`\n return className.toLowerCase()\n}\n\nexport const VCol = defineComponent({\n name: 'VCol',\n\n props: {\n cols: {\n type: [Boolean, String, Number],\n default: false,\n },\n ...breakpointProps,\n offset: {\n type: [String, Number],\n default: null,\n },\n ...offsetProps,\n order: {\n type: [String, Number],\n default: null,\n },\n ...orderProps,\n alignSelf: {\n type: String,\n default: null,\n validator: (str: any) => ['auto', 'start', 'end', 'center', 'baseline', 'stretch'].includes(str),\n },\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const classes = computed(() => {\n const classList: any[] = []\n\n // Loop through `col`, `offset`, `order` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string | number | boolean = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n const hasColClasses = classList.some(className => className.startsWith('v-col-'))\n\n classList.push({\n // Default to .v-col if no other col-{bp}-* classes generated nor `cols` specified.\n 'v-col': !hasColClasses || !props.cols,\n [`v-col-${props.cols}`]: props.cols,\n [`offset-${props.offset}`]: props.offset,\n [`order-${props.order}`]: props.order,\n [`align-self-${props.alignSelf}`]: props.alignSelf,\n })\n\n return classList\n })\n\n return () => h(props.tag, {\n class: classes.value,\n }, slots.default?.())\n },\n})\n","// Styles\nimport './VGrid.sass'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { capitalize, computed, h } from 'vue'\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { Prop } from 'vue'\n\nconst breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl'] as const // no xs\n\nconst ALIGNMENT = ['start', 'end', 'center'] as const\n\nfunction makeRowProps (prefix: string, def: () => Prop<string, null>) {\n return breakpoints.reduce((props, val) => {\n props[prefix + capitalize(val)] = def()\n return props\n }, {} as Record<string, Prop<string, null>>)\n}\n\nconst alignValidator = (str: any) => [...ALIGNMENT, 'baseline', 'stretch'].includes(str)\nconst alignProps = makeRowProps('align', () => ({\n type: String,\n default: null,\n validator: alignValidator,\n}))\n\nconst justifyValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around'].includes(str)\nconst justifyProps = makeRowProps('justify', () => ({\n type: String,\n default: null,\n validator: justifyValidator,\n}))\n\nconst alignContentValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around', 'stretch'].includes(str)\nconst alignContentProps = makeRowProps('alignContent', () => ({\n type: String,\n default: null,\n validator: alignContentValidator,\n}))\n\nconst propMap = {\n align: Object.keys(alignProps),\n justify: Object.keys(justifyProps),\n alignContent: Object.keys(alignContentProps),\n}\n\nconst classMap = {\n align: 'align',\n justify: 'justify',\n alignContent: 'align-content',\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: string) {\n let className = classMap[type]\n if (val == null) {\n return undefined\n }\n if (prop) {\n // alignSm -> Sm\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n // .align-items-sm-center\n className += `-${val}`\n return className.toLowerCase()\n}\n\nexport const VRow = defineComponent({\n name: 'VRow',\n\n props: {\n dense: Boolean,\n noGutters: Boolean,\n align: {\n type: String,\n default: null,\n validator: alignValidator,\n },\n ...alignProps,\n justify: {\n type: String,\n default: null,\n validator: justifyValidator,\n },\n ...justifyProps,\n alignContent: {\n type: String,\n default: null,\n validator: alignContentValidator,\n },\n ...alignContentProps,\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const classes = computed(() => {\n const classList: any[] = []\n\n // Loop through `align`, `justify`, `alignContent` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n classList.push({\n 'v-row--no-gutters': props.noGutters,\n 'v-row--dense': props.dense,\n [`align-${props.align}`]: props.align,\n [`justify-${props.justify}`]: props.justify,\n [`align-content-${props.alignContent}`]: props.alignContent,\n })\n\n return classList\n })\n\n return () => h(props.tag, {\n class: ['v-row', classes.value],\n }, slots.default?.())\n },\n})\n","import { createSimpleFunctional } from '@/util'\n\nexport const VSpacer = createSimpleFunctional('flex-grow-1', 'div', 'VSpacer')\n","// Composables\nimport { makeDelayProps, useDelay } from '@/composables/delay'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VHover = defineComponent({\n name: 'VHover',\n\n props: {\n disabled: Boolean,\n modelValue: {\n type: Boolean,\n default: undefined,\n },\n\n ...makeDelayProps(),\n },\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots }) {\n const hover = useProxiedModel(props, 'modelValue')\n const { runOpenDelay, runCloseDelay } = useDelay(props, value => !props.disabled && (hover.value = value))\n\n return () => slots.default?.({\n hover: hover.value,\n props: {\n onMouseenter: runOpenDelay,\n onMouseleave: runCloseDelay,\n },\n })\n },\n})\n","// Styles\nimport './VItemGroup.sass'\n\n// Composables\nimport { makeGroupProps, useGroup } from '@/composables/group'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VItemGroupSymbol = Symbol.for('vuetify:v-item-group')\n\nexport const VItemGroup = defineComponent({\n name: 'VItemGroup',\n\n props: {\n ...makeGroupProps({\n selectedClass: 'v-item--selected',\n }),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:modelValue': (value: any) => true,\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { isSelected, select, next, prev, selected } = useGroup(props, VItemGroupSymbol)\n\n return () => (\n <props.tag\n class={[\n 'v-item-group',\n themeClasses.value,\n ]}\n >\n { slots.default?.({\n isSelected,\n select,\n next,\n prev,\n selected: selected.value,\n }) }\n </props.tag>\n )\n },\n})\n\nexport type VItemGroup = InstanceType<typeof VItemGroup>\n","// Composables\nimport { makeGroupItemProps, useGroupItem } from '@/composables/group'\nimport { VItemGroupSymbol } from './VItemGroup'\n\n// Utilities\nimport { genericComponent } from '@/util'\n\n// Types\nimport type { MakeSlots } from '@/util'\nimport type { GroupItemProvide } from '@/composables/group'\n\nexport const VItem = genericComponent<new () => {\n $slots: MakeSlots<{\n default: [GroupItemProvide]\n }>\n}>()({\n name: 'VItem',\n\n props: makeGroupItemProps(),\n\n setup (props, { slots }) {\n const { isSelected, select, toggle, selectedClass, value, disabled } = useGroupItem(props, VItemGroupSymbol)\n return () => slots.default?.({\n isSelected: isSelected.value,\n selectedClass: selectedClass.value,\n select,\n toggle,\n value: value.value,\n disabled: disabled.value,\n })\n },\n})\n\nexport type VItem = InstanceType<typeof VItem>\n","import './VKbd.sass'\n\nimport { createSimpleFunctional } from '@/util'\n\nexport const VKbd = createSimpleFunctional('v-kbd')\n","// Styles\nimport './VLayout.sass'\n\n// Utilities\nimport { defineComponent, useRender } from '@/util'\n\n// Composables\nimport { createLayout, makeLayoutProps } from '@/composables/layout'\n\nexport const VLayout = defineComponent({\n name: 'VLayout',\n\n props: makeLayoutProps(),\n\n setup (props, { slots }) {\n const { layoutClasses, getLayoutItem, items } = createLayout(props)\n\n useRender(() => (\n <div class={ layoutClasses.value }>\n { slots.default?.() }\n </div>\n ))\n\n return {\n getLayoutItem,\n items,\n }\n },\n})\n\nexport type VLayout = InstanceType<typeof VLayout>\n","// Styles\nimport './VLayoutItem.sass'\n\n// Composables\nimport { makeLayoutItemProps, useLayoutItem } from '@/composables/layout'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const VLayoutItem = defineComponent({\n name: 'VLayoutItem',\n\n props: {\n position: {\n type: String as PropType<'top' | 'right' | 'bottom' | 'left'>,\n required: true,\n },\n size: {\n type: [Number, String],\n default: 300,\n },\n modelValue: Boolean,\n ...makeLayoutItemProps(),\n },\n\n setup (props, { slots }) {\n const styles = useLayoutItem(\n props.name,\n computed(() => parseInt(props.priority, 10)),\n toRef(props, 'position'),\n toRef(props, 'size'),\n toRef(props, 'size'),\n toRef(props, 'modelValue')\n )\n\n return () => (\n <div\n class={[\n 'v-layout-item',\n {\n 'v-layout-item--absolute': props.absolute,\n },\n ]}\n style={ styles.value }\n >\n { slots.default?.() }\n </div>\n )\n },\n})\n","// Composables\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport intersect from '@/directives/intersect'\n\n// Utilities\nimport type { PropType } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport const VLazy = defineComponent({\n name: 'VLazy',\n\n directives: { intersect },\n\n props: {\n modelValue: Boolean,\n options: {\n type: Object as PropType<IntersectionObserverInit>,\n // For more information on types, navigate to:\n // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API\n default: () => ({\n root: undefined,\n rootMargin: undefined,\n threshold: undefined,\n }),\n },\n\n ...makeDimensionProps(),\n ...makeTagProps(),\n ...makeTransitionProps({ transition: 'fade-transition' }),\n },\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { slots }) {\n const { dimensionStyles } = useDimension(props)\n const isActive = useProxiedModel(props, 'modelValue')\n\n function onIntersect (isIntersecting: boolean) {\n if (isActive.value) return\n\n isActive.value = isIntersecting\n }\n\n return () => (\n <props.tag\n class=\"v-lazy\"\n v-intersect={[\n onIntersect,\n props.options,\n isActive.value ? [] : ['once'],\n ]}\n style={ dimensionStyles.value }\n >\n { isActive.value && (\n <MaybeTransition transition={ props.transition }>\n { slots.default?.() }\n </MaybeTransition>\n )}\n </props.tag>\n )\n },\n})\n","// Composables\nimport { makeTagProps } from '@/composables/tag'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport const VListSubheader = defineComponent({\n name: 'VListSubheader',\n\n props: {\n color: String,\n inset: Boolean,\n\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const { textColorClasses, textColorStyles } = useTextColor(toRef(props, 'color'))\n\n return () => (\n <props.tag\n class={[\n 'v-list-subheader',\n {\n 'v-list-subheader--inset': props.inset,\n },\n textColorClasses.value,\n ]}\n style={{ textColorStyles }}\n >\n { slots.default && (\n <div class=\"v-list-subheader__text\">\n { slots.default() }\n </div>\n ) }\n </props.tag>\n )\n },\n})\n","export type OpenStrategyFn = (data: {\n id: string\n value: boolean\n opened: Set<string>\n children: Map<string, string[]>\n parents: Map<string, string>\n event?: Event\n}) => Set<string>\n\nexport const singleOpenStrategy: OpenStrategyFn = ({ id, value, opened, parents }) => {\n if (value) {\n const newOpened = new Set<string>()\n newOpened.add(id)\n\n let parent = parents.get(id)\n\n while (parent != null) {\n newOpened.add(parent)\n parent = parents.get(parent)\n }\n\n return newOpened\n } else {\n opened.delete(id)\n return opened\n }\n}\n\nexport const multipleOpenStrategy: OpenStrategyFn = ({ id, value, opened, parents }) => {\n if (value) {\n let parent = parents.get(id)\n opened.add(id)\n\n while (parent != null) {\n opened.add(parent)\n parent = parents.get(parent)\n }\n\n return opened\n } else {\n opened.delete(id)\n }\n return opened\n}\n","export type SelectStrategyFn = (data: {\n id: string\n value: boolean\n selected: Map<string, 'on' | 'off' | 'indeterminate'>\n children: Map<string, string[]>\n parents: Map<string, string>\n event?: Event\n}) => Map<string, 'on' | 'off' | 'indeterminate'>\n\nexport type SelectStrategyTransformInFn = (\n v: string[] | undefined,\n children: Map<string, string[]>,\n parents: Map<string, string>\n) => Map<string, 'on' | 'off' | 'indeterminate'>\n\nexport type SelectStrategyTransformOutFn = (\n v: Map<string, 'on' | 'off' | 'indeterminate'>,\n children: Map<string, string[]>,\n parents: Map<string, string>\n) => any[]\n\nexport type SelectStrategy = {\n select: SelectStrategyFn\n in: SelectStrategyTransformInFn\n out: SelectStrategyTransformOutFn\n}\n\nexport const independentSelectStrategy: SelectStrategy = {\n select: ({ id, value, selected }) => {\n selected.set(id, value ? 'on' : 'off')\n\n return selected\n },\n in: (v, children, parents) => {\n let map = new Map()\n\n for (const id of (v || [])) {\n map = independentSelectStrategy.select({\n id,\n value: true,\n selected: new Map(map),\n children,\n parents,\n })\n }\n\n return map\n },\n out: v => {\n const arr = []\n\n for (const [key, value] of v.entries()) {\n if (value === 'on') arr.push(key)\n }\n\n return arr\n },\n}\n\nexport const leafSelectStrategy = (single = false): SelectStrategy => {\n const strategy: SelectStrategy = {\n select: ({ id, value, selected, children }) => {\n if (children.has(id)) return selected\n\n if (single) return new Map([[id, value ? 'on' : 'off']])\n\n selected.set(id, value ? 'on' : 'off')\n\n return selected\n },\n in: (v, children, parents) => {\n let map = new Map()\n\n for (const id of (v ?? [])) {\n map = strategy.select({\n id,\n value: true,\n selected: new Map(map),\n children,\n parents,\n })\n }\n\n return map\n },\n out: independentSelectStrategy.out,\n }\n\n return strategy\n}\n\nexport const classicSelectStrategy: SelectStrategy = {\n select: ({ id, value, selected, children, parents }) => {\n const items = [id]\n\n while (items.length) {\n const item = items.shift()!\n\n selected.set(item, value ? 'on' : 'off')\n\n if (children.has(item)) {\n items.push(...children.get(item)!)\n }\n }\n\n let parent = parents.get(id)\n\n while (parent) {\n const childrenIds = children.get(parent)!\n const everySelected = childrenIds.every(cid => selected.get(cid) === 'on')\n const noneSelected = childrenIds.every(cid => !selected.has(cid) || selected.get(cid) === 'off')\n\n selected.set(parent, everySelected ? 'on' : noneSelected ? 'off' : 'indeterminate')\n\n parent = parents.get(parent)\n }\n\n return selected\n },\n in: (v, children, parents) => {\n let map = new Map()\n\n for (const id of (v || [])) {\n map = classicSelectStrategy.select({\n id,\n value: true,\n selected: new Map(map),\n children,\n parents,\n })\n }\n\n return map\n },\n out: (v, children) => {\n const arr = []\n\n for (const [key, value] of v.entries()) {\n if (value === 'on' && !children.has(key)) arr.push(key)\n }\n\n return arr\n },\n}\n","export type ActiveStrategyFn = (data: {\n id: string\n value: boolean\n active: Set<string>\n children: Map<string, string[]>\n parents: Map<string, string>\n event?: Event\n}) => Set<string>\n\nexport const classicActiveStrategy = (single?: boolean): ActiveStrategyFn => {\n return ({ id, value, active }) => {\n const newActive: Set<string> = single ? new Set() : active\n\n if (value) {\n newActive.add(id)\n } else {\n newActive.delete(id)\n }\n\n return newActive\n }\n}\n","import { useProxiedModel } from '@/composables/proxiedModel'\nimport { getUid, propsFactory } from '@/util'\nimport { computed, inject, onBeforeUnmount, provide, ref } from 'vue'\nimport { multipleOpenStrategy, singleOpenStrategy } from './openStrategies'\nimport { classicSelectStrategy, independentSelectStrategy, leafSelectStrategy } from './selectStrategies'\nimport { classicActiveStrategy } from './activeStrategies'\n\n// Types\nimport type { InjectionKey, Prop, Ref } from 'vue'\nimport type { SelectStrategyFn } from './selectStrategies'\nimport type { OpenStrategyFn } from './openStrategies'\nimport type { ActiveStrategyFn } from './activeStrategies'\n\nexport type SelectStrategy = 'single-leaf' | 'leaf' | 'independent' | 'classic' | SelectStrategyFn\nexport type OpenStrategy = 'single' | 'multiple' | OpenStrategyFn\nexport type ActiveStrategy = 'single' | 'multiple' | ActiveStrategyFn\n\nexport interface NestedProps {\n selectStrategy: SelectStrategy | undefined\n openStrategy: OpenStrategy | undefined\n activeStrategy: ActiveStrategy | undefined\n selected: string[] | undefined\n opened: string[] | undefined\n active: string[] | undefined\n 'onUpdate:selected': ((val: string[]) => void) | undefined\n 'onUpdate:opened': ((val: string[]) => void) | undefined\n 'onUpdate:active': ((val: string[]) => void) | undefined\n}\n\ntype NestedProvide = {\n id: Ref<string | null>\n root: {\n children: Ref<Map<string, string[]>>\n parents: Ref<Map<string, string>>\n opened: Ref<Set<string>>\n active: Ref<Set<string>>\n selected: Ref<Map<string, 'on' | 'off' | 'indeterminate'>>\n selectedValues: Ref<string[]>\n register: (id: string, parentId: string | null, isGroup?: boolean) => void\n unregister: (id: string) => void\n open: (id: string, value: boolean, event?: Event) => void\n select: (id: string, value: boolean, event?: Event) => void\n activate: (id: string, value: boolean, event?: Event) => void\n }\n}\n\nconst VNestedSymbol: InjectionKey<NestedProvide> = Symbol.for('vuetify:nested')\n\nconst emptyNested: NestedProvide = {\n id: ref(null),\n root: {\n register: () => null,\n unregister: () => null,\n parents: ref(new Map()),\n children: ref(new Map()),\n open: () => null,\n select: () => null,\n opened: ref(new Set()),\n selected: ref(new Map()),\n active: ref(new Set()),\n activate: () => null,\n selectedValues: ref([]),\n },\n}\n\nexport const makeNestedProps = propsFactory({\n selectStrategy: [String, Function] as Prop<SelectStrategy>,\n openStrategy: [String, Function] as Prop<OpenStrategy>,\n activeStrategy: [String, Function] as Prop<ActiveStrategy>,\n opened: Array as Prop<string[]>,\n selected: Array as Prop<string[]>,\n active: Array as Prop<string[]>,\n}, 'nested')\n\nexport const useNested = (props: NestedProps) => {\n let isUnmounted = false\n const children = ref(new Map<string, string[]>())\n const parents = ref(new Map<string, string>())\n\n const opened = useProxiedModel(props, 'opened', props.opened, v => new Set(v), v => [...v.values()])\n const active = useProxiedModel(props, 'active', props.active, v => new Set(v), v => [...v.values()])\n\n const activeStrategy = computed(() => {\n if (typeof props.activeStrategy === 'object') return props.activeStrategy\n\n switch (props.activeStrategy) {\n case 'single': return classicActiveStrategy(true)\n case 'multiple':\n default:\n return classicActiveStrategy()\n }\n })\n\n const selectStrategy = computed(() => {\n if (typeof props.selectStrategy === 'object') return props.selectStrategy\n\n switch (props.selectStrategy) {\n case 'single-leaf': return leafSelectStrategy(true)\n case 'leaf': return leafSelectStrategy()\n case 'independent': return independentSelectStrategy\n case 'classic':\n default: return classicSelectStrategy\n }\n })\n\n const openStrategy = computed(() => {\n if (typeof props.openStrategy === 'function') return props.openStrategy\n\n switch (props.openStrategy) {\n case 'single': return singleOpenStrategy\n case 'multiple':\n default: return multipleOpenStrategy\n }\n })\n\n const selected = useProxiedModel(\n props,\n 'selected',\n props.selected,\n v => selectStrategy.value.in(v, children.value, parents.value),\n v => selectStrategy.value.out(v, children.value, parents.value),\n )\n\n onBeforeUnmount(() => {\n isUnmounted = true\n })\n\n const nested: NestedProvide = {\n id: ref(null),\n root: {\n opened,\n selected,\n active,\n selectedValues: computed(() => {\n const arr = []\n\n for (const [key, value] of selected.value.entries()) {\n if (value === 'on') arr.push(key)\n }\n\n return arr\n }),\n register: (id, parentId, isGroup) => {\n parentId && parents.value.set(id, parentId)\n\n isGroup && children.value.set(id, [])\n\n if (parentId != null) {\n children.value.set(parentId, [...children.value.get(parentId) || [], id])\n }\n },\n unregister: id => {\n if (isUnmounted) return\n\n children.value.delete(id)\n const parent = parents.value.get(id)\n if (parent) {\n const list = children.value.get(parent) ?? []\n children.value.set(parent, list.filter(child => child !== id))\n }\n parents.value.delete(id)\n opened.value.delete(id)\n active.value.delete(id)\n selected.value.delete(id)\n },\n open: (id, value, event) => {\n const newOpened = openStrategy.value({\n id,\n value,\n opened: new Set(opened.value),\n children: children.value,\n parents: parents.value,\n event,\n })\n\n newOpened && (opened.value = newOpened)\n },\n select: (id, value, event) => {\n const newSelected = selectStrategy.value.select({\n id,\n value,\n selected: new Map(selected.value),\n children: children.value,\n parents: parents.value,\n event,\n })\n\n newSelected && (selected.value = newSelected)\n },\n activate: (id, value, event) => {\n const newActive = activeStrategy.value({\n id,\n value,\n active: new Set(active.value),\n children: children.value,\n parents: parents.value,\n event,\n })\n\n newActive && (active.value = newActive)\n },\n children,\n parents,\n },\n }\n\n provide(VNestedSymbol, nested)\n\n return nested.root\n}\n\nexport const useNestedItem = (id: Ref<string | undefined>) => {\n const parent = inject(VNestedSymbol, emptyNested)\n\n const computedId = computed(() => id.value ?? getUid().toString())\n\n const item = {\n ...parent,\n id: computedId,\n parent: computed(() => parent.root.parents.value.get(computedId.value)),\n select: (selected: boolean, e: Event) => parent.root.select(computedId.value, selected, e),\n isSelected: computed(() => parent.root.selected.value.get(computedId.value) === 'on'),\n activate: (activated: boolean, e: Event) => parent.root.activate(computedId.value, activated, e),\n isActive: computed(() => parent.root.active.value.has(computedId.value)),\n }\n\n parent.root.register(computedId.value, parent.id.value, false)\n\n onBeforeUnmount(() => {\n parent.root.unregister(computedId.value)\n })\n\n return item\n}\n\nexport const useNestedGroup = (props: { value: string }) => {\n const parent = inject(VNestedSymbol, emptyNested)\n\n const id = computed(() => props.value ?? getUid().toString())\n\n const group = {\n ...parent,\n id,\n open: (open: boolean, e: Event) => parent.root.open(id.value, open, e),\n isOpen: computed(() => parent.root.opened.value.has(id.value)),\n isSelected: computed(() => parent.root.selected.value.get(id.value) === 'on'),\n isIndeterminate: computed(() => parent.root.selected.value.get(id.value) === 'indeterminate'),\n }\n\n parent.root.register(id.value, parent.id.value, true)\n\n onBeforeUnmount(() => {\n parent.root.unregister(id.value)\n })\n\n provide(VNestedSymbol, group)\n\n return group\n}\n","// Components\nimport { VExpandTransition } from '@/components/transitions'\nimport { VListChildren } from './VListChildren'\n\n// Composables\nimport { useNestedGroup } from '@/composables/nested/nested'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed } from 'vue'\nimport { defineComponent, genericComponent } from '@/util'\nimport { createList, useList } from './VList'\n\n// Types\nimport type { Prop } from 'vue'\nimport type { MakeSlots } from '@/util'\nimport type { ListItem } from './VList'\n\nexport type ListGroupHeaderSlot = {\n onClick: (e: Event) => void\n appendIcon: string\n class: string\n}\n\nconst VListGroupItems = defineComponent({\n name: 'VListGroupItems',\n\n props: {\n open: Boolean,\n items: Array as Prop<ListItem[]>,\n },\n\n setup (props, { slots }) {\n createList()\n\n return () => {\n return (\n <VExpandTransition>\n <div class=\"v-list-group__items\" v-show={props.open}>\n <VListChildren items={props.items} v-slots={slots} />\n </div>\n </VExpandTransition>\n )\n }\n },\n})\n\nexport const VListGroup = genericComponent<new <T extends ListItem>() => {\n $props: {\n items?: T[]\n }\n $slots: MakeSlots<{\n header: [ListGroupHeaderSlot]\n item: [T]\n default: []\n }>\n}>()({\n name: 'VListGroup',\n\n props: {\n value: null,\n collapseIcon: {\n type: String,\n default: '$collapse',\n },\n expandIcon: {\n type: String,\n default: '$expand',\n },\n items: Array as Prop<ListItem[]>,\n\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const { isOpen, open } = useNestedGroup(props)\n const list = useList()\n\n const onClick = (e: Event) => {\n open(!isOpen.value, e)\n }\n\n const headerProps = computed(() => ({\n onClick,\n appendIcon: isOpen.value ? props.collapseIcon : props.expandIcon,\n class: 'v-list-group__header',\n }))\n\n return () => {\n return (\n <props.tag\n class={[\n 'v-list-group',\n {\n 'v-list-group--prepend': list?.hasPrepend.value,\n },\n ]}\n >\n { slots.header?.(headerProps.value) }\n <VListGroupItems items={props.items} open={isOpen.value} v-slots={slots} />\n </props.tag>\n )\n }\n },\n})\n","// Composables\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VListItemAvatar = defineComponent({\n name: 'VListItemAvatar',\n\n props: {\n left: Boolean,\n right: Boolean,\n\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n return () => {\n return (\n <props.tag\n class={[\n 'v-list-item-avatar',\n {\n 'v-list-item-avatar--start': props.left,\n 'v-list-item-avatar--end': props.right,\n },\n ]}\n v-slots={ slots }\n />\n )\n }\n },\n})\n","import { createSimpleFunctional } from '@/util'\n\nexport const VListItemHeader = createSimpleFunctional('v-list-item-header')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VListItemSubtitle = createSimpleFunctional('v-list-item-subtitle')\n","import { createSimpleFunctional } from '@/util'\n\nexport const VListItemTitle = createSimpleFunctional('v-list-item-title')\n","// Styles\nimport './VListItem.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { VListItemAvatar } from './VListItemAvatar'\nimport { VListItemHeader } from './VListItemHeader'\nimport { VListItemSubtitle } from './VListItemSubtitle'\nimport { VListItemTitle } from './VListItemTitle'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeRouterProps, useLink } from '@/composables/router'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\n\n// Directives\nimport { Ripple } from '@/directives/ripple'\n\n// Utilities\nimport { computed, onMounted } from 'vue'\nimport { genericComponent } from '@/util'\nimport { useNestedItem } from '@/composables/nested/nested'\nimport { useList } from './VList'\n\n// Types\nimport type { MakeSlots } from '@/util'\n\ntype ListItemSlot = {\n isActive: boolean\n activate: (value: boolean) => void\n isSelected: boolean\n select: (value: boolean) => void\n}\n\nexport const VListItem = genericComponent<new () => {\n $slots: MakeSlots<{\n prepend: [ListItemSlot]\n append: [ListItemSlot]\n default: [ListItemSlot]\n title: []\n subtitle: []\n }>\n}>()({\n name: 'VListItem',\n\n directives: { Ripple },\n\n props: {\n active: Boolean,\n activeColor: String,\n activeClass: String,\n appendAvatar: String,\n appendIcon: String,\n disabled: Boolean,\n link: Boolean,\n prependAvatar: String,\n prependIcon: String,\n subtitle: String,\n title: String,\n value: null,\n\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makeRoundedProps(),\n ...makeRouterProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n ...makeVariantProps({ variant: 'text' } as const),\n },\n\n setup (props, { attrs, slots }) {\n const link = useLink(props, attrs)\n const id = computed(() => props.value ?? link.href.value)\n const { activate, isActive: isNestedActive, select, isSelected, root, parent } = useNestedItem(id)\n const list = useList()\n const isActive = computed(() => {\n return props.active || link.isExactActive?.value || isNestedActive.value\n })\n const activeColor = props.activeColor ?? props.color\n const variantProps = computed(() => ({\n color: isActive.value ? activeColor : props.color,\n textColor: props.textColor,\n variant: props.variant,\n }))\n\n onMounted(() => {\n if (link.isExactActive?.value && parent.value != null) {\n root.open(parent.value, true)\n }\n })\n\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { colorClasses, colorStyles, variantClasses } = useVariant(variantProps)\n const { densityClasses } = useDensity(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { roundedClasses } = useRounded(props)\n\n const slotProps = computed(() => ({\n isActive: isActive.value,\n activate,\n select,\n isSelected: isSelected.value,\n }))\n\n return () => {\n const Tag = (link.isLink.value) ? 'a' : props.tag\n const hasTitle = (slots.title || props.title)\n const hasSubtitle = (slots.subtitle || props.subtitle)\n const hasHeader = !!(hasTitle || hasSubtitle)\n const hasAppend = !!(slots.append || props.appendAvatar || props.appendIcon)\n const hasPrepend = !!(slots.prepend || props.prependAvatar || props.prependIcon)\n const isClickable = !props.disabled && (link.isClickable.value || props.link || props.value != null)\n\n list?.updateHasPrepend(hasPrepend)\n\n return (\n <Tag\n class={[\n 'v-list-item',\n {\n 'v-list-item--active': isActive.value,\n 'v-list-item--disabled': props.disabled,\n 'v-list-item--link': isClickable,\n 'v-list-item--prepend': !hasPrepend && list?.hasPrepend.value,\n [`${props.activeClass}`]: isActive.value && props.activeClass,\n },\n themeClasses.value,\n borderClasses.value,\n colorClasses.value,\n densityClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n variantClasses.value,\n ]}\n style={[\n colorStyles.value,\n dimensionStyles.value,\n ]}\n href={ link.href.value }\n tabindex={ isClickable ? 0 : undefined }\n onClick={ isClickable && ((e: MouseEvent) => {\n link.navigate?.(e)\n props.value != null && activate(!isNestedActive.value, e)\n })}\n v-ripple={ isClickable }\n >\n { genOverlays(isClickable || isActive.value, 'v-list-item') }\n\n { hasPrepend && (\n slots.prepend\n ? slots.prepend(slotProps.value)\n : (\n <VListItemAvatar left>\n <VAvatar\n density={ props.density }\n icon={ props.prependIcon }\n image={ props.prependAvatar }\n />\n </VListItemAvatar>\n )\n ) }\n\n { hasHeader && (\n <VListItemHeader>\n { hasTitle && (\n <VListItemTitle>\n { slots.title\n ? slots.title()\n : props.title\n }\n </VListItemTitle>\n ) }\n\n { hasSubtitle && (\n <VListItemSubtitle>\n { slots.subtitle\n ? slots.subtitle()\n : props.subtitle\n }\n </VListItemSubtitle>\n ) }\n </VListItemHeader>\n ) }\n\n { slots.default?.(slotProps.value) }\n\n { hasAppend && (\n slots.append\n ? slots.append(slotProps.value)\n : (\n <VListItemAvatar right>\n <VAvatar\n density={ props.density }\n icon={ props.appendIcon }\n image={ props.appendAvatar }\n />\n </VListItemAvatar>\n )\n ) }\n </Tag>\n )\n }\n },\n})\n\nexport type VListItem = InstanceType<typeof VListItem>\n","// Components\nimport { VListGroup } from './VListGroup'\nimport { VListItem } from './VListItem'\n\n// Utilities\nimport { genericComponent } from '@/util'\n\n// Types\nimport type { Prop } from 'vue'\nimport type { MakeSlots } from '@/util'\nimport type { ListGroupHeaderSlot } from './VListGroup'\nimport type { ListItem } from './VList'\n\nexport const VListChildren = genericComponent<new <T extends ListItem>() => {\n $props: {\n items?: T[]\n }\n $slots: MakeSlots<{\n default: []\n externalHeader: [ListGroupHeaderSlot]\n item: [T]\n }>\n}>()({\n name: 'VListChildren',\n\n props: {\n items: Array as Prop<ListItem[]>,\n },\n\n setup (props, { slots }) {\n return () => slots.default?.() ?? props.items?.map(({ children, ...item }) => {\n const { value, ...rest } = item\n return children ? (\n <VListGroup\n value={value}\n items={children}\n >\n {{\n ...slots,\n header: headerProps => slots.externalHeader\n ? slots.externalHeader({ ...rest, ...headerProps })\n : <VListItem {...rest} {...headerProps} />,\n }}\n </VListGroup>\n ) : (\n slots.item ? slots.item(item) : <VListItem {...item} v-slots={slots} />\n )\n })\n },\n})\n","// Styles\nimport './VList.sass'\n\n// Components\nimport { VListSubheader } from './VListSubheader'\nimport { VListChildren } from './VListChildren'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeNestedProps, useNested } from '@/composables/nested/nested'\n\n// Utilities\nimport { inject, provide, ref, toRef } from 'vue'\nimport { genericComponent, useRender } from '@/util'\n\n// Types\nimport type { InjectionKey, Prop, Ref } from 'vue'\nimport type { MakeSlots } from '@/util'\nimport type { ListGroupHeaderSlot } from './VListGroup'\n\nexport type ListItem = {\n children?: ListItem[]\n value?: string\n}\n\n// Depth\nexport const DepthKey: InjectionKey<Ref<number>> = Symbol.for('vuetify:depth')\n\n// List\nexport const ListKey: InjectionKey<{\n hasPrepend: Ref<boolean>\n updateHasPrepend: (value: boolean) => void\n}> = Symbol.for('vuetify:list')\n\nexport const createList = () => {\n const parent = inject(ListKey, { hasPrepend: ref(false), updateHasPrepend: () => null })\n\n const data = {\n hasPrepend: ref(false),\n updateHasPrepend: (value: boolean) => {\n if (value) data.hasPrepend.value = value\n },\n }\n\n provide(ListKey, data)\n\n return parent\n}\n\nexport const useList = () => {\n return inject(ListKey, null)\n}\n\nexport const VList = genericComponent<new <T>() => {\n $props: {\n items?: T[]\n }\n $slots: MakeSlots<{\n subheader: []\n header: [ListGroupHeaderSlot]\n item: [T]\n }>\n}>()({\n name: 'VList',\n\n props: {\n color: String,\n disabled: Boolean,\n lines: {\n type: String,\n default: 'one',\n },\n nav: Boolean,\n subheader: {\n type: [Boolean, String],\n default: false,\n },\n items: Array as Prop<ListItem[]>,\n\n ...makeNestedProps({\n selectStrategy: 'leaf' as const,\n openStrategy: 'multiple' as const,\n activeStrategy: 'single' as const,\n }),\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:selected': (val: string[]) => true,\n 'update:opened': (val: string[]) => true,\n 'update:active': (val: string[]) => true,\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'color'))\n const { borderClasses } = useBorder(props)\n const { densityClasses } = useDensity(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { roundedClasses } = useRounded(props)\n const { open, select, activate } = useNested(props)\n createList()\n\n useRender(() => {\n const hasHeader = typeof props.subheader === 'string' || slots.subheader\n\n return (\n <props.tag\n class={[\n 'v-list',\n {\n 'v-list--disabled': props.disabled,\n 'v-list--nav': props.nav,\n 'v-list--subheader': props.subheader,\n 'v-list--subheader-sticky': props.subheader === 'sticky',\n [`v-list--${props.lines}-line`]: true,\n },\n themeClasses.value,\n backgroundColorClasses.value,\n borderClasses.value,\n densityClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n dimensionStyles.value,\n ]}\n >\n { hasHeader && (\n slots.subheader\n ? slots.subheader()\n : <VListSubheader>{ props.subheader }</VListSubheader>\n ) }\n\n <VListChildren items={ props.items }>\n {{\n default: slots.default,\n item: slots.item,\n externalHeader: slots.header,\n }}\n </VListChildren>\n </props.tag>\n )\n })\n\n return {\n open,\n select,\n activate,\n }\n },\n})\n\nexport type VList = InstanceType<typeof VList>\n","import { createSimpleFunctional } from '@/util'\n\nexport const VListImg = createSimpleFunctional('v-list-img')\n","// Composables\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VListItemMedia = defineComponent({\n name: 'VListItemMedia',\n\n props: {\n left: Boolean,\n right: Boolean,\n\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n return () => {\n return (\n <props.tag\n class={[\n 'v-list-item-media',\n {\n 'v-list-item-media--start': props.left,\n 'v-list-item-media--end': props.right,\n },\n ]}\n v-slots={ slots }\n />\n )\n }\n },\n})\n","import './VLocaleProvider.sass'\n\n// Composables\nimport { provideLocale } from '@/composables/locale'\nimport { provideRtl } from '@/composables/rtl'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VLocaleProvider = defineComponent({\n name: 'VLocaleProvider',\n\n props: {\n locale: String,\n fallbackLocale: String,\n messages: Object,\n rtl: {\n type: Boolean,\n default: undefined,\n },\n },\n\n setup (props, { slots }) {\n const localeInstance = provideLocale(props)\n const { rtlClasses } = provideRtl(props, localeInstance)\n\n return () => (\n <div\n class={[\n 'v-locale-provider',\n rtlClasses.value,\n ]}\n >\n { slots.default?.() }\n </div>\n )\n },\n})\n","// Styles\nimport './VMain.sass'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\nimport { useLayout } from '@/composables/layout'\nimport { useSsrBoot } from '@/composables/ssrBoot'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VMain = defineComponent({\n name: 'VMain',\n\n props: makeTagProps({ tag: 'main' }),\n\n setup (props, { slots }) {\n const { mainStyles } = useLayout()\n const { ssrBootStyles } = useSsrBoot()\n\n return () => (\n <props.tag\n class=\"v-main\"\n style={[\n mainStyles.value,\n ssrBootStyles.value,\n ]}\n >\n <div class=\"v-main__wrap\">\n { slots.default?.() }\n </div>\n </props.tag>\n )\n },\n})\n","// Utilities\nimport { computed, onMounted, ref } from 'vue'\n\n// Composables\nexport function useSsrBoot () {\n const isBooted = ref(false)\n\n onMounted(() => {\n window.requestAnimationFrame(() => {\n isBooted.value = true\n })\n })\n\n const ssrBootStyles = computed(() => !isBooted.value ? ({\n transition: 'none !important',\n }) : undefined)\n\n return { ssrBootStyles }\n}\n","// Styles\nimport './VMenu.sass'\n\n// Components\nimport { VOverlay } from '@/components/VOverlay'\nimport { VDialogTransition } from '@/components/transitions'\n\n// Composables\nimport { makeTransitionProps } from '@/composables/transition'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent, getUid } from '@/util'\n\n// Types\nimport type { OverlaySlots } from '@/components/VOverlay/VOverlay'\n\nexport const VMenu = genericComponent<new () => {\n $slots: OverlaySlots\n}>()({\n name: 'VMenu',\n\n inheritAttrs: false,\n\n props: {\n // TODO\n // closeOnClick: {\n // type: Boolean,\n // default: true,\n // },\n // closeOnContentClick: {\n // type: Boolean,\n // default: true,\n // },\n disableKeys: Boolean,\n modelValue: Boolean,\n id: String,\n\n ...makeTransitionProps({\n transition: { component: VDialogTransition },\n } as const),\n },\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { attrs, slots }) {\n const isActive = useProxiedModel(props, 'modelValue')\n\n const uid = getUid()\n const id = computed(() => props.id || `v-menu-${uid}`)\n\n return () => {\n return (\n <VOverlay\n v-model={ isActive.value }\n class={[\n 'v-menu',\n ]}\n transition={ props.transition }\n absolute\n positionStrategy=\"connected\"\n scrollStrategy=\"reposition\"\n scrim={ false }\n activatorProps={{\n 'aria-haspopup': 'menu',\n 'aria-expanded': String(isActive.value),\n 'aria-owns': id.value,\n }}\n { ...attrs }\n v-slots={{\n default: slots.default,\n activator: slots.activator,\n }}\n />\n )\n }\n },\n})\n\nexport type VMenu = InstanceType<typeof VMenu>\n","import { CircularBuffer } from '@/util'\n\nconst HORIZON = 100 // ms\nconst HISTORY = 20 // number of samples to keep\n\nexport interface Sample {\n t: number\n d: number\n}\n\n/** @see https://android.googlesource.com/platform/frameworks/native/+/master/libs/input/VelocityTracker.cpp */\nfunction kineticEnergyToVelocity (work: number) {\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: Sample[]) {\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}\n\nexport function useVelocity () {\n const touches: Record<number, CircularBuffer<[number, Touch]> | undefined> = {}\n\n function addMovement (e: TouchEvent) {\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\n function endTouch (e: TouchEvent) {\n Array.from(e.changedTouches).forEach(touch => {\n delete touches[touch.identifier]\n })\n }\n\n function getVelocity (id: number) {\n const samples = touches[id]?.values().reverse()\n\n if (!samples) {\n throw new Error(`No samples for touch id ${id}`)\n }\n\n const newest = samples[0]\n const x: Sample[] = []\n const y: Sample[] = []\n for (const val of samples) {\n if (newest[0] - val[0] > HORIZON) break\n\n x.push({ t: val[0], d: val[1].clientX })\n y.push({ t: val[0], d: val[1].clientY })\n }\n\n return {\n x: calculateImpulseVelocity(x),\n y: calculateImpulseVelocity(y),\n get direction () {\n const { x, y } = this\n const [absX, absY] = [Math.abs(x), Math.abs(y)]\n\n return absX > absY && x >= 0 ? 'right'\n : absX > absY && x <= 0 ? 'left'\n : absY > absX && y >= 0 ? 'down'\n : absY > absX && y <= 0 ? 'up'\n : oops()\n },\n }\n }\n\n return { addMovement, endTouch, getVelocity }\n}\n\nfunction oops (): never {\n throw new Error()\n}\n","import { useVelocity } from '@/composables/touch'\nimport { computed, onBeforeUnmount, onMounted, ref } from 'vue'\nimport type { Ref } from 'vue'\n\nexport function useTouch ({ isActive, isTemporary, width, touchless, position }: {\n isActive: Ref<boolean>\n isTemporary: Ref<boolean>\n width: Ref<number>\n touchless: Ref<boolean>\n position: Ref<'left' | 'right' | 'bottom'>\n}) {\n onMounted(() => {\n window.addEventListener('touchstart', onTouchstart, { passive: true })\n window.addEventListener('touchmove', onTouchmove, { passive: false })\n window.addEventListener('touchend', onTouchend, { passive: true })\n })\n\n onBeforeUnmount(() => {\n window.removeEventListener('touchstart', onTouchstart)\n window.removeEventListener('touchmove', onTouchmove)\n window.removeEventListener('touchend', onTouchend)\n })\n\n const isHorizontal = computed(() => position.value !== 'bottom')\n\n const { addMovement, endTouch, getVelocity } = useVelocity()\n let maybeDragging = false\n const isDragging = ref(false)\n const dragProgress = ref(0)\n const offset = ref(0)\n let start: [number, number] | undefined\n\n function getOffset (pos: number, active: boolean): number {\n return (\n position.value === 'left' ? pos\n : position.value === 'right' ? document.documentElement.clientWidth - pos\n : position.value === 'bottom' ? document.documentElement.clientHeight - pos\n : oops()\n ) - (active ? width.value : 0)\n }\n\n function getProgress (pos: number, limit = true): number {\n const progress = (\n position.value === 'left' ? (pos - offset.value) / width.value\n : position.value === 'right' ? (document.documentElement.clientWidth - pos - offset.value) / width.value\n : position.value === 'bottom' ? (document.documentElement.clientHeight - pos - offset.value) / width.value\n : oops()\n )\n return limit ? Math.max(0, Math.min(1, progress)) : progress\n }\n\n function onTouchstart (e: TouchEvent) {\n if (touchless.value) return\n\n const touchX = e.changedTouches[0].clientX\n const touchY = e.changedTouches[0].clientY\n\n const touchZone = 25\n const inTouchZone: boolean =\n position.value === 'left' ? touchX < touchZone\n : position.value === 'right' ? touchX > document.documentElement.clientWidth - touchZone\n : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - touchZone\n : oops()\n\n const inElement: boolean = isActive.value && (\n position.value === 'left' ? touchX < width.value\n : position.value === 'right' ? touchX > document.documentElement.clientWidth - width.value\n : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - width.value\n : oops()\n )\n\n if (\n inTouchZone ||\n inElement ||\n (isActive.value && isTemporary.value)\n ) {\n maybeDragging = true\n start = [touchX, touchY]\n\n offset.value = getOffset(isHorizontal.value ? touchX : touchY, isActive.value)\n dragProgress.value = getProgress(isHorizontal.value ? touchX : touchY)\n\n endTouch(e)\n addMovement(e)\n }\n }\n\n function onTouchmove (e: TouchEvent) {\n const touchX = e.changedTouches[0].clientX\n const touchY = e.changedTouches[0].clientY\n\n if (maybeDragging) {\n if (!e.cancelable) {\n maybeDragging = false\n return\n }\n\n const dx = Math.abs(touchX - start![0])\n const dy = Math.abs(touchY - start![1])\n\n const thresholdMet = isHorizontal.value\n ? dx > dy && dx > 3\n : dy > dx && dy > 3\n\n if (thresholdMet) {\n isDragging.value = true\n maybeDragging = false\n } else if ((isHorizontal.value ? dy : dx) > 3) {\n maybeDragging = false\n }\n }\n\n if (!isDragging.value) return\n\n e.preventDefault()\n addMovement(e)\n\n const progress = getProgress(isHorizontal.value ? touchX : touchY, false)\n dragProgress.value = Math.max(0, Math.min(1, progress))\n\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\n function onTouchend (e: TouchEvent) {\n maybeDragging = false\n\n if (!isDragging.value) return\n\n addMovement(e)\n\n isDragging.value = false\n\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\n ? vx > vy && vx > 400\n : vy > vx && vy > 3\n\n if (thresholdMet) {\n isActive.value = velocity.direction === ({\n left: 'right',\n right: 'left',\n bottom: 'up',\n }[position.value] || oops())\n } else {\n isActive.value = dragProgress.value > 0.5\n }\n }\n\n const dragStyles = computed(() => {\n return isDragging.value ? {\n transform:\n position.value === 'left' ? `translateX(calc(-100% + ${dragProgress.value * width.value}px))`\n : position.value === 'right' ? `translateX(calc(100% - ${dragProgress.value * width.value}px))`\n : position.value === 'bottom' ? `translateY(calc(100% - ${dragProgress.value * width.value}px))`\n : oops(),\n transition: 'none',\n } : undefined\n })\n\n return {\n isDragging,\n dragProgress,\n dragStyles,\n }\n}\n\nfunction oops (): never {\n throw new Error()\n}\n","// Styles\nimport './VNavigationDrawer.sass'\n\n// Composables\nimport { useTouch } from './touch'\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeLayoutItemProps, useLayoutItem } from '@/composables/layout'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { useDisplay } from '@/composables/display'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useBackgroundColor } from '@/composables/color'\n\n// Utilities\nimport { computed, onBeforeMount, ref, toRef, Transition, watch } from 'vue'\nimport { defineComponent } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const VNavigationDrawer = defineComponent({\n name: 'VNavigationDrawer',\n\n props: {\n color: String,\n disableResizeWatcher: Boolean,\n expandOnHover: Boolean,\n floating: Boolean,\n modelValue: {\n type: Boolean,\n default: null,\n },\n permanent: Boolean,\n rail: Boolean,\n railWidth: {\n type: [Number, String],\n default: 72,\n },\n image: String,\n temporary: Boolean,\n touchless: Boolean,\n width: {\n type: [Number, String],\n default: 256,\n },\n position: {\n type: String as PropType<'left' | 'right' | 'bottom'>,\n default: 'left',\n validator: (value: any) => ['left', 'right', 'bottom'].includes(value),\n },\n\n ...makeBorderProps(),\n ...makeElevationProps(),\n ...makeLayoutItemProps(),\n ...makeRoundedProps(),\n ...makeTagProps({ tag: 'nav' }),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:modelValue': (val: boolean) => true,\n },\n\n setup (props, { attrs, slots }) {\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'color'))\n const { elevationClasses } = useElevation(props)\n const { mobile } = useDisplay()\n const { roundedClasses } = useRounded(props)\n\n const isActive = useProxiedModel(props, 'modelValue')\n const isHovering = ref(false)\n const width = computed(() => {\n return (props.rail && props.expandOnHover && isHovering.value)\n ? Number(props.width)\n : Number(props.rail ? props.railWidth : props.width)\n })\n const isTemporary = computed(() => !props.permanent && (mobile.value || props.temporary))\n\n if (!props.disableResizeWatcher) {\n watch(mobile, val => !props.permanent && (isActive.value = !val))\n }\n\n watch(props, val => {\n if (val.permanent) isActive.value = true\n })\n\n onBeforeMount(() => {\n if (props.modelValue != null) return\n\n isActive.value = props.permanent || !mobile.value\n })\n\n const rootEl = ref<HTMLElement>()\n\n const { isDragging, dragProgress, dragStyles } = useTouch({\n isActive,\n isTemporary,\n width,\n touchless: toRef(props, 'touchless'),\n position: toRef(props, 'position'),\n })\n\n const layoutSize = computed(() => {\n const size = isTemporary.value ? 0\n : props.rail && props.expandOnHover ? Number(props.railWidth)\n : width.value\n\n return isDragging.value ? size * dragProgress.value : size\n })\n const layoutStyles = useLayoutItem(\n props.name,\n computed(() => parseInt(props.priority, 10)),\n toRef(props, 'position'),\n layoutSize,\n width,\n computed(() => isActive.value || isDragging.value),\n computed(() => isDragging.value)\n )\n\n return () => {\n const hasImage = (slots.image || props.image)\n\n return (\n <>\n <props.tag\n ref={ rootEl }\n onMouseenter={ () => (isHovering.value = true) }\n onMouseleave={ () => (isHovering.value = false) }\n class={[\n 'v-navigation-drawer',\n {\n 'v-navigation-drawer--bottom': props.position === 'bottom',\n 'v-navigation-drawer--end': props.position === 'right',\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--start': props.position === 'left',\n 'v-navigation-drawer--temporary': isTemporary.value,\n 'v-navigation-drawer--absolute': props.absolute,\n },\n themeClasses.value,\n backgroundColorClasses.value,\n borderClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n layoutStyles.value,\n dragStyles.value,\n ]}\n { ...attrs }\n >\n { hasImage && (\n <div class=\"v-navigation-drawer__img\">\n { slots.image\n ? slots.image?.({ image: props.image })\n : (<img src={ props.image } alt=\"\" />)\n }\n </div>\n )}\n\n { slots.prepend && (\n <div class=\"v-navigation-drawer__prepend\">\n { slots.prepend?.() }\n </div>\n )}\n\n <div class=\"v-navigation-drawer__content\">\n { slots.default?.() }\n </div>\n\n { slots.append && (\n <div class=\"v-navigation-drawer__append\">\n { slots.append?.() }\n </div>\n )}\n </props.tag>\n\n <Transition name=\"fade-transition\">\n { isTemporary.value && (isDragging.value || isActive.value) && (\n <div\n class=\"v-navigation-drawer__scrim\"\n style={isDragging.value ? {\n opacity: dragProgress.value * 0.2,\n transition: 'none',\n } : undefined}\n onClick={ () => isActive.value = false }\n />\n )}\n </Transition>\n </>\n )\n }\n },\n})\n\nexport type VNavigationDrawer = InstanceType<typeof VNavigationDrawer>\n","// Composables\nimport { useHydration } from '@/composables/hydration'\n\n// Utilities\nimport { defineComponent } from '@/util'\nimport { ref } from 'vue'\n\nexport const VNoSsr = defineComponent({\n name: 'VNoSsr',\n\n setup (_, { slots }) {\n const show = ref(false)\n\n useHydration(() => (show.value = true))\n\n return () => show.value && slots.default?.()\n },\n\n})\n","// Utilities\nimport { getCurrentInstance, IN_BROWSER } from '@/util'\nimport { onMounted } from 'vue'\n\nexport function useHydration (callback: () => void) {\n if (!IN_BROWSER) return\n\n const vm = getCurrentInstance('useHydration')\n const rootEl = vm?.root?.appContext?.app?._container\n\n return rootEl?.__vue_app__ ? callback() : onMounted(callback)\n}\n","import './VPagination.sass'\n\n// Components\nimport { VBtn } from '../VBtn'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\nimport { useLocale } from '@/composables/locale'\nimport { useRtl } from '@/composables/rtl'\nimport { makeElevationProps } from '@/composables/elevation'\nimport { makeDensityProps } from '@/composables/density'\nimport { makeSizeProps } from '@/composables/size'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeVariantProps } from '@/composables/variant'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { makeBorderProps } from '@/composables/border'\nimport { useRefs } from '@/composables/refs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { provideDefaults } from '@/composables/defaults'\n\n// Utilities\nimport { computed, nextTick, ref, toRef } from 'vue'\nimport { createRange, defineComponent, keyValues } from '@/util'\n\n// Types\nimport type { ComponentPublicInstance } from 'vue'\n\nexport const VPagination = defineComponent({\n name: 'VPagination',\n\n props: {\n start: {\n type: [Number, String],\n default: 1,\n },\n modelValue: {\n type: Number,\n default: (props: any) => props.start,\n },\n disabled: Boolean,\n length: {\n type: [Number, String],\n default: 1,\n validator: (val: number) => val % 1 === 0,\n },\n totalVisible: [Number, String],\n firstIcon: {\n type: String,\n default: '$first',\n },\n prevIcon: {\n type: String,\n default: '$prev',\n },\n nextIcon: {\n type: String,\n default: '$next',\n },\n lastIcon: {\n type: String,\n default: '$last',\n },\n ariaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.root',\n },\n pageAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.page',\n },\n currentPageAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.currentPage',\n },\n firstAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.first',\n },\n previousAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.previous',\n },\n nextAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.next',\n },\n lastAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.last',\n },\n ellipsis: {\n type: String,\n default: '...',\n },\n showFirstLastPage: Boolean,\n\n ...makeBorderProps(),\n ...makeDensityProps(),\n ...makeElevationProps(),\n ...makeSizeProps(),\n ...makeTagProps({ tag: 'nav' }),\n ...makeThemeProps(),\n ...makeVariantProps({ variant: 'text' } as const),\n },\n\n emits: {\n 'update:modelValue': (value: number) => true,\n first: (value: number) => true,\n prev: (value: number) => true,\n next: (value: number) => true,\n last: (value: number) => true,\n },\n\n setup (props, { slots, emit }) {\n const page = useProxiedModel(props, 'modelValue')\n const { t, n } = useLocale()\n const { isRtl } = useRtl()\n const { themeClasses } = provideTheme(props)\n const maxButtons = ref(-1)\n\n provideDefaults(undefined, { scoped: true })\n\n const { resizeRef } = useResizeObserver((entries: ResizeObserverEntry[]) => {\n if (!entries.length) return\n\n const { target, contentRect } = entries[0]\n\n const firstItem = target.querySelector('.v-pagination__list > *')\n\n if (!firstItem) return\n\n const totalWidth = contentRect.width\n const itemWidth = firstItem.getBoundingClientRect().width + 10\n\n maxButtons.value = Math.max(0, Math.floor((totalWidth - 96) / itemWidth))\n })\n\n const length = computed(() => parseInt(props.length, 10))\n const start = computed(() => parseInt(props.start, 10))\n\n const totalVisible = computed(() => {\n if (props.totalVisible) return Math.min(parseInt(props.totalVisible ?? '', 10), length.value)\n else if (maxButtons.value >= 0) return maxButtons.value\n return length.value\n })\n\n const range = computed(() => {\n if (length.value <= 0) return []\n\n if (totalVisible.value <= 3) {\n return [Math.min(Math.max(start.value, page.value), start.value + length.value)]\n }\n\n if (props.length <= totalVisible.value) {\n return createRange(length.value, start.value)\n }\n\n const middle = Math.ceil(totalVisible.value / 2)\n const left = middle\n const right = length.value - middle\n\n if (page.value < left) {\n return [...createRange(Math.max(1, totalVisible.value - 2), start.value), props.ellipsis, length.value]\n } else if (page.value > right) {\n const rangeLength = totalVisible.value - 2\n const rangeStart = length.value - rangeLength + start.value\n return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart)]\n } else {\n const rangeLength = Math.max(1, totalVisible.value - 4)\n const rangeStart = rangeLength === 1 ? page.value : page.value - Math.ceil(rangeLength / 2) + start.value\n return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart), props.ellipsis, length.value]\n }\n })\n\n // TODO: 'first' | 'prev' | 'next' | 'last' does not work here?\n function setValue (e: Event, value: number, event?: any) {\n e.preventDefault()\n page.value = value\n event && emit(event, value)\n }\n\n const { refs, updateRef } = useRefs<ComponentPublicInstance>()\n\n provideDefaults({\n VBtn: {\n border: toRef(props, 'border'),\n density: toRef(props, 'density'),\n size: toRef(props, 'size'),\n variant: toRef(props, 'variant'),\n },\n })\n\n const items = computed(() => {\n return range.value.map((item, index) => {\n const ref = (e: any) => updateRef(e, index)\n\n if (typeof item === 'string') {\n return {\n isActive: false,\n page: item,\n props: {\n ref,\n ellipsis: true,\n icon: true,\n disabled: true,\n },\n }\n } else {\n const isActive = item === page.value\n return {\n isActive,\n page: n(item),\n props: {\n ref,\n ellipsis: false,\n icon: true,\n disabled: !!props.disabled || props.length < 2,\n elevation: props.elevation,\n color: isActive ? props.color : undefined,\n ariaCurrent: isActive,\n ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, index + 1),\n onClick: (e: Event) => setValue(e, item),\n },\n }\n }\n })\n })\n\n const controls = computed(() => {\n const prevDisabled = !!props.disabled || page.value <= start.value\n const nextDisabled = !!props.disabled || page.value >= start.value + length.value - 1\n\n return {\n first: props.showFirstLastPage ? {\n icon: isRtl.value ? props.lastIcon : props.firstIcon,\n onClick: (e: Event) => setValue(e, start.value, 'first'),\n disabled: prevDisabled,\n ariaLabel: t(props.firstAriaLabel),\n ariaDisabled: prevDisabled,\n } : undefined,\n prev: {\n icon: isRtl.value ? props.nextIcon : props.prevIcon,\n onClick: (e: Event) => setValue(e, page.value - 1, 'prev'),\n disabled: prevDisabled,\n ariaLabel: t(props.previousAriaLabel),\n ariaDisabled: prevDisabled,\n },\n next: {\n icon: isRtl.value ? props.prevIcon : props.nextIcon,\n onClick: (e: Event) => setValue(e, page.value + 1, 'next'),\n disabled: nextDisabled,\n ariaLabel: t(props.nextAriaLabel),\n ariaDisabled: nextDisabled,\n },\n last: props.showFirstLastPage ? {\n icon: isRtl.value ? props.firstIcon : props.lastIcon,\n onClick: (e: Event) => setValue(e, start.value + length.value - 1, 'last'),\n disabled: nextDisabled,\n ariaLabel: t(props.lastAriaLabel),\n ariaDisabled: nextDisabled,\n } : undefined,\n }\n })\n\n function updateFocus () {\n const currentIndex = page.value - start.value\n refs.value[currentIndex]?.$el.focus()\n }\n\n function onKeydown (e: KeyboardEvent) {\n if (e.key === keyValues.left && !props.disabled && page.value > props.start) {\n page.value = page.value - 1\n nextTick(updateFocus)\n } else if (e.key === keyValues.right && !props.disabled && page.value < start.value + length.value - 1) {\n page.value = page.value + 1\n nextTick(updateFocus)\n }\n }\n\n return () => (\n <props.tag\n ref={ resizeRef }\n class={[\n 'v-pagination',\n themeClasses.value,\n ]}\n role=\"navigation\"\n aria-label={ t(props.ariaLabel) }\n onKeydown={ onKeydown }\n data-test=\"v-pagination-root\"\n >\n <ul class=\"v-pagination__list\">\n { props.showFirstLastPage && (\n <li class=\"v-pagination__first\" data-test=\"v-pagination-first\">\n { slots.first ? slots.first(controls.value.first) : (\n <VBtn {...controls.value.first} />\n ) }\n </li>\n ) }\n\n <li class=\"v-pagination__prev\" data-test=\"v-pagination-prev\">\n { slots.prev ? slots.prev(controls.value.prev) : (\n <VBtn {...controls.value.prev} />\n ) }\n </li>\n\n { items.value.map((item, index) => (\n <li\n key={ `${index}_${item.page}` }\n class={[\n 'v-pagination__item',\n {\n 'v-pagination__item--is-active': item.isActive,\n },\n ]}\n data-test=\"v-pagination-item\"\n >\n { slots.item ? slots.item(item) : (\n <VBtn {...item.props}>{ item.page }</VBtn>\n ) }\n </li>\n )) }\n\n <li class=\"v-pagination__next\" data-test=\"v-pagination-next\">\n { slots.next ? slots.next(controls.value.next) : (\n <VBtn {...controls.value.next} />\n ) }\n </li>\n\n { props.showFirstLastPage && (\n <li class=\"v-pagination__last\" data-test=\"v-pagination-last\">\n { slots.last ? slots.last(controls.value.last) : (\n <VBtn {...controls.value.last} />\n ) }\n </li>\n ) }\n </ul>\n </props.tag>\n )\n },\n})\n\nexport type VPagination = InstanceType<typeof VPagination>\n","// Utilities\nimport { onBeforeUnmount, readonly, ref, watch } from 'vue'\nimport type { DeepReadonly, Ref } from 'vue'\n\ninterface ResizeState {\n resizeRef: Ref<Element | undefined>\n contentRect: DeepReadonly<Ref<DOMRectReadOnly | undefined>>\n borderBoxSize: DeepReadonly<Ref<ResizeObserverSize | undefined>>\n contentBoxSize: DeepReadonly<Ref<ResizeObserverSize | undefined>>\n}\n\nexport function useResizeObserver (callback?: ResizeObserverCallback): ResizeState {\n const resizeRef = ref<Element>()\n const contentRect = ref<DOMRectReadOnly>()\n const contentBoxSize = ref<ResizeObserverSize>()\n const borderBoxSize = ref<ResizeObserverSize>()\n\n const observer = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n callback?.(entries, observer)\n\n if (!entries.length) return\n\n contentRect.value = entries[0].contentRect\n contentBoxSize.value = entries[0].contentBoxSize[0]\n borderBoxSize.value = entries[0].borderBoxSize[0]\n })\n\n onBeforeUnmount(() => {\n observer.disconnect()\n })\n\n watch(resizeRef, (newValue, oldValue) => {\n if (oldValue) {\n observer.unobserve(oldValue)\n contentRect.value = undefined\n contentBoxSize.value = undefined\n borderBoxSize.value = undefined\n }\n\n if (newValue) observer.observe(newValue)\n }, {\n flush: 'post',\n })\n\n return {\n resizeRef,\n contentRect: readonly(contentRect),\n contentBoxSize: readonly(contentBoxSize),\n borderBoxSize: readonly(borderBoxSize),\n }\n}\n","// Imports\nimport { onBeforeUpdate, ref } from 'vue'\nimport type { Ref } from 'vue'\n\nexport function useRefs <T extends {}> () {\n const refs = ref<(T | undefined)[]>([]) as Ref<(T | undefined)[]>\n\n onBeforeUpdate(() => (refs.value = []))\n\n function updateRef (e: any, i: number) {\n refs.value[i] = e\n }\n\n return { refs, updateRef }\n}\n","// Styles\nimport './VParallax.sass'\n\n// Components\nimport { VImg } from '@/components/VImg'\n\n// Composables\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\n\n// Utilities\nimport { onBeforeUnmount, ref, watch, watchEffect } from 'vue'\nimport { defineComponent, getScrollParent } from '@/util'\n\nfunction floor (val: number) {\n return Math.floor(Math.abs(val)) * Math.sign(val)\n}\n\nexport const VParallax = defineComponent({\n name: 'VParallax',\n\n props: {\n scale: {\n type: [Number, String],\n default: 1.3,\n },\n },\n\n setup (props, { attrs, slots }) {\n const root = ref<VImg>()\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n\n watchEffect(() => {\n intersectionRef.value = root.value?.$el\n })\n\n let scrollParent: Element\n watch(isIntersecting, val => {\n if (val) {\n scrollParent = getScrollParent(intersectionRef.value)\n scrollParent = scrollParent === document.scrollingElement ? document as any : scrollParent\n scrollParent.addEventListener('scroll', onScroll, { passive: true })\n onScroll()\n } else {\n scrollParent.removeEventListener('scroll', onScroll)\n }\n })\n\n onBeforeUnmount(() => {\n scrollParent?.removeEventListener('scroll', onScroll)\n })\n\n let frame = -1\n function onScroll () {\n if (!isIntersecting.value) return\n\n cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => {\n const el: HTMLElement | null = (root.value?.$el as Element).querySelector('.v-img__img')\n if (!el) return\n\n const rect = intersectionRef.value!.getBoundingClientRect()\n const scrollHeight = scrollParent.clientHeight ?? window.innerHeight\n const scrollPos = scrollParent.scrollTop ?? window.scrollY\n const top = rect.top + scrollPos\n const progress = (scrollPos + scrollHeight - top) / (rect.height + scrollHeight)\n const translate = floor((rect.height * +props.scale - rect.height) * (-progress + 0.5))\n\n el.style.setProperty('transform', `translateY(${translate}px) scale(${props.scale})`)\n })\n }\n\n return () => (\n <VImg\n class={[\n 'v-parallax',\n { 'v-parallax--active': isIntersecting.value },\n ]}\n ref={ root }\n cover\n onLoadstart={ onScroll }\n onLoad={ onScroll }\n v-slots={ slots }\n />\n )\n },\n})\n\nexport type VParallax = InstanceType<typeof VParallax>\n","// Styles\nimport './VProgressCircular.sass'\n\n// Composables\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { convertToUnit, defineComponent } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const VProgressCircular = defineComponent({\n name: 'VProgressCircular',\n\n props: {\n bgColor: String,\n color: String,\n indeterminate: [Boolean, String] as PropType<boolean | 'disable-shrink'>,\n modelValue: {\n type: [Number, String],\n default: 0,\n },\n rotate: {\n type: [Number, String],\n default: 0,\n },\n width: {\n type: [Number, String],\n default: 4,\n },\n\n ...makeSizeProps(),\n ...makeTagProps({ tag: 'div' }),\n ...makeThemeProps(),\n },\n\n setup (props, { slots }) {\n const MAGIC_RADIUS_CONSTANT = 20\n const CIRCUMFERENCE = 2 * Math.PI * MAGIC_RADIUS_CONSTANT\n\n const { themeClasses } = provideTheme(props)\n const { sizeClasses, sizeStyles } = useSize(props)\n const { textColorClasses, textColorStyles } = useTextColor(toRef(props, 'color'))\n const { textColorClasses: underlayColorClasses, textColorStyles: underlayColorStyles } = useTextColor(toRef(props, 'bgColor'))\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n\n const normalizedValue = computed(() => Math.max(0, Math.min(100, parseFloat(props.modelValue))))\n const width = computed(() => Number(props.width))\n const size = computed(() => {\n // Get size from element if size prop value is small, large etc\n return sizeStyles.value ? Number(props.size) : intersectionRef.value\n ? intersectionRef.value.getBoundingClientRect().width : Math.max(width.value, 32)\n })\n const diameter = computed(() => (MAGIC_RADIUS_CONSTANT / (1 - width.value / size.value)) * 2)\n const strokeWidth = computed(() => width.value / size.value * diameter.value)\n const strokeDashOffset = computed(() => convertToUnit(((100 - normalizedValue.value) / 100) * CIRCUMFERENCE))\n\n return () => (\n <props.tag\n ref={ intersectionRef }\n class={[\n 'v-progress-circular',\n {\n 'v-progress-circular--indeterminate': !!props.indeterminate,\n 'v-progress-circular--visible': isIntersecting.value,\n 'v-progress-circular--disable-shrink': props.indeterminate === 'disable-shrink',\n },\n themeClasses.value,\n sizeClasses.value,\n textColorClasses.value,\n ]}\n style={[\n sizeStyles.value,\n textColorStyles.value,\n ]}\n role=\"progressbar\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-valuenow={ props.indeterminate ? undefined : normalizedValue.value }\n >\n <svg\n style={{\n transform: `rotate(calc(-90deg + ${Number(props.rotate)}deg))`,\n }}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={ `0 0 ${diameter.value} ${diameter.value}` }\n >\n <circle\n class={[\n 'v-progress-circular__underlay',\n underlayColorClasses.value,\n ]}\n style={ underlayColorStyles.value }\n fill=\"transparent\"\n cx=\"50%\"\n cy=\"50%\"\n r={ MAGIC_RADIUS_CONSTANT }\n stroke-width={ strokeWidth.value }\n stroke-dasharray={ CIRCUMFERENCE }\n stroke-dashoffset={ 0 }\n />\n\n <circle\n class=\"v-progress-circular__overlay\"\n fill=\"transparent\"\n cx=\"50%\"\n cy=\"50%\"\n r={ MAGIC_RADIUS_CONSTANT }\n stroke-width={ strokeWidth.value }\n stroke-dasharray={ CIRCUMFERENCE }\n stroke-dashoffset={ strokeDashOffset.value }\n />\n </svg>\n { slots.default && (\n <div class=\"v-progress-circular__content\">\n { slots.default({ value: normalizedValue.value }) }\n </div>\n ) }\n </props.tag>\n )\n },\n})\n","// Components\nimport { VSelectionControl } from '@/components/VSelectionControl'\n\n// Utility\nimport { defineComponent } from 'vue'\nimport { useRender } from '@/util'\n\nexport const VRadio = defineComponent({\n name: 'VRadio',\n\n props: {\n falseIcon: {\n type: String,\n default: '$radioOff',\n },\n trueIcon: {\n type: String,\n default: '$radioOn',\n },\n },\n\n setup (props, { slots }) {\n useRender(() => (\n <VSelectionControl\n class=\"v-radio\"\n trueIcon={ props.trueIcon }\n falseIcon={ props.falseIcon }\n type=\"radio\"\n v-slots={ slots }\n />\n ))\n\n return {}\n },\n})\n\nexport type VRadio = InstanceType<typeof VRadio>\n","// Styles\nimport './VRadioGroup.sass'\n\n// Components\nimport { filterInputProps, makeVInputProps, VInput } from '@/components/VInput/VInput'\nimport { VLabel } from '@/components/VLabel'\nimport { VSelectionControlGroup } from '@/components/VSelectionControlGroup'\nimport { filterControlProps, makeSelectionControlProps } from '@/components/VSelectionControl/VSelectionControl'\n\n// Utility\nimport { computed, defineComponent } from 'vue'\nimport { filterInputAttrs, getUid, useRender } from '@/util'\n\nexport const VRadioGroup = defineComponent({\n name: 'VRadioGroup',\n\n inheritAttrs: false,\n\n props: {\n height: {\n type: [Number, String],\n default: 'auto',\n },\n\n ...makeVInputProps(),\n ...makeSelectionControlProps(),\n\n trueIcon: {\n type: String,\n default: '$radioOn',\n },\n falseIcon: {\n type: String,\n default: '$radioOff',\n },\n type: {\n type: String,\n default: 'radio',\n },\n },\n\n setup (props, { attrs, slots }) {\n const uid = getUid()\n const id = computed(() => props.id || `radio-group-${uid}`)\n\n useRender(() => {\n const [inputAttrs, controlAttrs] = filterInputAttrs(attrs)\n const [inputProps, _1] = filterInputProps(props)\n const [controlProps, _2] = filterControlProps(props)\n const label = slots.label\n ? slots.label({\n label: props.label,\n props: { for: id.value },\n })\n : props.label\n\n return (\n <VInput\n class=\"v-radio-group\"\n { ...inputAttrs }\n { ...inputProps }\n >\n {{\n ...slots,\n default: ({\n isDisabled,\n isReadonly,\n isValid,\n }) => (\n <>\n { label && (\n <VLabel\n disabled={ isDisabled.value }\n error={ isValid.value === false }\n for={ id.value }\n >\n { label }\n </VLabel>\n ) }\n\n <VSelectionControlGroup\n { ...controlProps }\n id={ id.value }\n trueIcon={ props.trueIcon }\n falseIcon={ props.falseIcon }\n type={ props.type }\n disabled={ isDisabled.value }\n readonly={ isReadonly.value }\n { ...controlAttrs }\n v-slots={ slots }\n />\n </>\n ),\n }}\n </VInput>\n )\n })\n\n return {}\n },\n})\n","/* eslint-disable max-statements */\n// Composables\nimport { useRtl } from '@/composables/rtl'\nimport { makeRoundedProps } from '@/composables/rounded'\nimport { makeElevationProps } from '@/composables/elevation'\n\n// Utilities\nimport { computed, provide, ref, toRef } from 'vue'\nimport { clamp, createRange, propsFactory } from '@/util'\n\n// Types\nimport type { ExtractPropTypes, InjectionKey, PropType, Ref } from 'vue'\nimport type { VSliderTrack } from './VSliderTrack'\n\ntype Tick = {\n value: number\n position: number\n label?: string\n}\n\ntype SliderProvide = {\n color: Ref<string | undefined>\n decimals: Ref<number>\n direction: Ref<'vertical' | 'horizontal'>\n disabled: Ref<boolean | undefined>\n elevation: Ref<number | string | undefined>\n label: Ref<string | undefined>\n min: Ref<number>\n max: Ref<number>\n mousePressed: Ref<boolean>\n numTicks: Ref<number>\n onSliderMousedown: (e: MouseEvent) => void\n onSliderTouchstart: (e: TouchEvent) => void\n parseMouseMove: (e: MouseEvent | TouchEvent) => number\n position: (val: number) => number\n readonly: Ref<boolean | undefined>\n rounded: Ref<boolean | number | string | undefined>\n roundValue: (value: number) => number\n thumbLabel: Ref<boolean | string | undefined>\n showTicks: Ref<boolean | 'always'>\n startOffset: Ref<number>\n step: Ref<number>\n thumbSize: Ref<number>\n thumbColor: Ref<string | undefined>\n trackColor: Ref<string | undefined>\n trackFillColor: Ref<string | undefined>\n trackSize: Ref<number>\n ticks: Ref<number[] | Record<string, string> | undefined>\n tickSize: Ref<number>\n trackContainerRef: Ref<VSliderTrack | undefined>\n vertical: Ref<boolean>\n showTickLabels: Ref<boolean | undefined>\n parsedTicks: Ref<Tick[]>\n hasLabels: Ref<boolean>\n isReversed: Ref<boolean>\n horizontalDirection: Ref<'ltr' | 'rtl'>\n}\n\nexport const VSliderSymbol: InjectionKey<SliderProvide> = Symbol.for('vuetify:v-slider')\n\nexport function getOffset (e: MouseEvent | TouchEvent, el: HTMLElement, direction: string) {\n const vertical = direction === 'vertical'\n const rect = el.getBoundingClientRect()\n const touch = 'touches' in e ? e.touches[0] : e\n return vertical\n ? touch.clientY - (rect.top + rect.height / 2)\n : touch.clientX - (rect.left + rect.width / 2)\n}\n\nfunction getPosition (e: MouseEvent | TouchEvent, position: 'clientX' | 'clientY'): number {\n if ('touches' in e && e.touches.length) return e.touches[0][position]\n else if ('changedTouches' in e && e.changedTouches.length) return e.changedTouches[0][position]\n else return (e as MouseEvent)[position]\n}\n\nexport const makeSliderProps = propsFactory({\n disabled: Boolean,\n readonly: Boolean,\n max: {\n type: [Number, String],\n default: 100,\n },\n min: {\n type: [Number, String],\n default: 0,\n },\n step: {\n type: [Number, String],\n default: 0,\n },\n thumbColor: String,\n thumbLabel: {\n type: [Boolean, String] as PropType<boolean | 'always' | undefined>,\n default: undefined,\n validator: (v: any) => typeof v === 'boolean' || v === 'always',\n },\n thumbSize: {\n type: [Number, String],\n default: 20,\n },\n showTicks: {\n type: [Boolean, String] as PropType<boolean | 'always'>,\n default: true,\n validator: (v: any) => typeof v === 'boolean' || v === 'always',\n },\n showTickLabels: {\n type: Boolean,\n default: false,\n },\n ticks: {\n type: [Array, Object] as PropType<number[] | Record<string, string>>,\n },\n tickSize: {\n type: [Number, String],\n default: 2,\n },\n color: String,\n trackColor: String,\n trackFillColor: String,\n trackSize: {\n type: [Number, String],\n default: 4,\n },\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n default: 'horizontal',\n validator: (v: any) => ['vertical', 'horizontal'].includes(v),\n },\n reverse: Boolean,\n label: String,\n\n ...makeRoundedProps(),\n ...makeElevationProps({\n elevation: 2,\n }),\n}, 'slider')\n\ntype SliderProps = ExtractPropTypes<ReturnType<typeof makeSliderProps>>\n\nexport const useSlider = ({\n props,\n handleSliderMouseUp,\n handleMouseMove,\n getActiveThumb,\n}: {\n props: SliderProps\n handleSliderMouseUp: (v: number) => void\n handleMouseMove: (v: number) => void\n getActiveThumb: (e: MouseEvent | TouchEvent) => HTMLElement\n}) => {\n const { isRtl } = useRtl()\n const isReversed = computed(() => isRtl.value !== props.reverse)\n const horizontalDirection = computed(() => {\n let hd: 'ltr' | 'rtl' = isRtl.value ? 'rtl' : 'ltr'\n\n if (props.reverse) {\n hd = hd === 'rtl' ? 'ltr' : 'rtl'\n }\n\n return hd\n })\n const min = computed(() => parseFloat(props.min))\n const max = computed(() => parseFloat(props.max))\n const step = computed(() => props.step > 0 ? parseFloat(props.step) : 0)\n const decimals = computed(() => {\n const trimmedStep = step.value.toString().trim()\n return trimmedStep.includes('.')\n ? (trimmedStep.length - trimmedStep.indexOf('.') - 1)\n : 0\n })\n\n const thumbSize = computed(() => parseInt(props.thumbSize, 10))\n const tickSize = computed(() => parseInt(props.tickSize, 10))\n const trackSize = computed(() => parseInt(props.trackSize, 10))\n const numTicks = computed(() => (max.value - min.value) / step.value)\n const disabled = toRef(props, 'disabled')\n const vertical = computed(() => props.direction === 'vertical')\n\n const thumbColor = computed(() => props.disabled ? undefined : props.thumbColor ?? props.color)\n const trackColor = computed(() => props.disabled ? undefined : props.trackColor ?? props.color)\n const trackFillColor = computed(() => props.disabled ? undefined : props.trackFillColor ?? props.color)\n\n const mousePressed = ref(false)\n\n const startOffset = ref(0)\n const trackContainerRef = ref<VSliderTrack | undefined>()\n\n function roundValue (value: number) {\n if (step.value <= 0) return value\n\n const clamped = clamp(value, min.value, max.value)\n const offset = min.value % step.value\n const newValue = Math.round((clamped - offset) / step.value) * step.value + offset\n\n return parseFloat(Math.min(newValue, max.value).toFixed(decimals.value))\n }\n\n function parseMouseMove (e: MouseEvent | TouchEvent): number {\n const vertical = props.direction === 'vertical'\n const start = vertical ? 'top' : 'left'\n const length = vertical ? 'height' : 'width'\n const position = vertical ? 'clientY' : 'clientX'\n\n const {\n [start]: trackStart,\n [length]: trackLength,\n } = trackContainerRef.value?.$el.getBoundingClientRect()\n const clickOffset = getPosition(e, position)\n\n // It is possible for left to be NaN, force to number\n let clickPos = Math.min(Math.max((clickOffset - trackStart - startOffset.value) / trackLength, 0), 1) || 0\n\n if (vertical || isReversed.value) clickPos = 1 - clickPos\n\n return roundValue(min.value + clickPos * (max.value - min.value))\n }\n\n let thumbMoved = false\n\n const handleStop = (e: MouseEvent | TouchEvent) => {\n if (!thumbMoved) {\n startOffset.value = 0\n handleSliderMouseUp(parseMouseMove(e))\n }\n\n mousePressed.value = false\n thumbMoved = false\n startOffset.value = 0\n }\n\n const handleStart = (e: MouseEvent | TouchEvent) => {\n const activeThumb = getActiveThumb(e)\n\n if (!activeThumb) return\n\n activeThumb.focus()\n mousePressed.value = true\n\n if (activeThumb.contains(e.target as Node)) {\n thumbMoved = true\n startOffset.value = getOffset(e, activeThumb, props.direction)\n } else {\n startOffset.value = 0\n handleMouseMove(parseMouseMove(e))\n }\n }\n\n const moveListenerOptions = { passive: true, capture: true }\n\n function onMouseMove (e: MouseEvent | TouchEvent) {\n thumbMoved = true\n handleMouseMove(parseMouseMove(e))\n }\n\n function onSliderMouseUp (e: MouseEvent) {\n e.stopPropagation()\n e.preventDefault()\n\n handleStop(e)\n\n window.removeEventListener('mousemove', onMouseMove, moveListenerOptions)\n window.removeEventListener('mouseup', onSliderMouseUp)\n }\n\n function onSliderTouchend (e: TouchEvent) {\n e.stopPropagation()\n e.preventDefault()\n\n handleStop(e)\n\n window.removeEventListener('touchmove', onMouseMove, moveListenerOptions)\n window.removeEventListener('touchend', onSliderTouchend)\n }\n\n function onSliderTouchstart (e: TouchEvent) {\n handleStart(e)\n\n window.addEventListener('touchmove', onMouseMove, moveListenerOptions)\n window.addEventListener('touchend', onSliderTouchend, { passive: false })\n }\n\n function onSliderMousedown (e: MouseEvent) {\n e.preventDefault()\n\n handleStart(e)\n\n window.addEventListener('mousemove', onMouseMove, moveListenerOptions)\n window.addEventListener('mouseup', onSliderMouseUp, { passive: false })\n }\n\n const position = (val: number) => {\n const percentage = (val - min.value) / (max.value - min.value) * 100\n return clamp(isNaN(percentage) ? 0 : percentage, 0, 100)\n }\n\n const parsedTicks = computed<Tick[]>(() => {\n if (!props.ticks) {\n return numTicks.value !== Infinity ? createRange(numTicks.value + 1).map(t => {\n const value = min.value + (t * step.value)\n return {\n value,\n position: position(value),\n }\n }) : []\n }\n if (Array.isArray(props.ticks)) return props.ticks.map(t => ({ value: t, position: position(t), label: t.toString() }))\n return Object.keys(props.ticks).map(key => ({\n value: parseInt(key, 10),\n position: position(parseInt(key, 10)),\n label: (props.ticks as Record<string, string>)[key],\n }))\n })\n\n const hasLabels = computed(() => parsedTicks.value.some(({ label }) => !!label))\n\n const data: SliderProvide = {\n color: toRef(props, 'color'),\n decimals,\n disabled,\n direction: toRef(props, 'direction'),\n elevation: toRef(props, 'elevation'),\n hasLabels,\n horizontalDirection,\n isReversed,\n label: toRef(props, 'label'),\n min,\n max,\n mousePressed,\n numTicks,\n onSliderMousedown,\n onSliderTouchstart,\n parsedTicks,\n parseMouseMove,\n position,\n readonly: toRef(props, 'readonly'),\n rounded: toRef(props, 'rounded'),\n roundValue,\n showTickLabels: toRef(props, 'showTickLabels'),\n showTicks: toRef(props, 'showTicks'),\n startOffset,\n step,\n thumbSize,\n thumbColor,\n thumbLabel: toRef(props, 'thumbLabel'),\n ticks: toRef(props, 'ticks'),\n tickSize,\n trackColor,\n trackContainerRef,\n trackFillColor,\n trackSize,\n vertical,\n }\n\n provide(VSliderSymbol, data)\n\n return data\n}\n","// Styles\nimport './VSliderThumb.sass'\n\n// Components\nimport { VScaleTransition } from '../transitions'\nimport { VSliderSymbol } from './slider'\nimport { useElevation } from '@/composables/elevation'\n\n// Directives\nimport Ripple from '@/directives/ripple'\n\n// Composables\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { computed, inject } from 'vue'\nimport { convertToUnit, defineComponent, keyValues } from '@/util'\n\nexport const VSliderThumb = defineComponent({\n name: 'VSliderThumb',\n\n directives: { Ripple },\n\n props: {\n focused: Boolean,\n max: {\n type: Number,\n required: true,\n },\n min: {\n type: Number,\n required: true,\n },\n modelValue: {\n type: Number,\n required: true,\n },\n position: {\n type: Number,\n required: true,\n },\n },\n\n emits: {\n 'update:modelValue': (v: number) => true,\n },\n\n setup (props, { slots, emit }) {\n const slider = inject(VSliderSymbol)\n\n if (!slider) throw new Error('[Vuetify] v-slider-thumb must be used inside v-slider or v-range-slider')\n\n const {\n thumbColor,\n step,\n vertical,\n disabled,\n thumbSize,\n thumbLabel,\n direction,\n label,\n readonly,\n elevation,\n isReversed,\n horizontalDirection,\n mousePressed,\n } = slider\n\n const { textColorClasses, textColorStyles } = useTextColor(thumbColor)\n\n const { pageup, pagedown, end, home, left, right, down, up } = keyValues\n const relevantKeys = [pageup, pagedown, end, home, left, right, down, up]\n\n const multipliers = computed(() => {\n if (step.value) return [1, 2, 3]\n else return [1, 5, 10]\n })\n\n function parseKeydown (e: KeyboardEvent, value: number) {\n if (!relevantKeys.includes(e.key)) return\n\n e.preventDefault()\n\n const _step = step.value || 0.1\n const steps = (props.max - props.min) / _step\n if ([left, right, down, up].includes(e.key)) {\n const increase = isReversed.value ? [left, up] : [right, up]\n const direction = increase.includes(e.key) ? 1 : -1\n const multiplier = e.shiftKey ? 2 : (e.ctrlKey ? 1 : 0)\n\n value = value + (direction * _step * multipliers.value[multiplier])\n } else if (e.key === home) {\n value = props.min\n } else if (e.key === end) {\n value = props.max\n } else {\n const direction = e.key === pagedown ? 1 : -1\n value = value - (direction * _step * (steps > 100 ? steps / 10 : 10))\n }\n\n return Math.max(props.min, Math.min(props.max, value))\n }\n\n function onKeydown (e: KeyboardEvent) {\n const newValue = parseKeydown(e, props.modelValue)\n\n newValue != null && emit('update:modelValue', newValue)\n }\n\n return () => {\n const positionPercentage = convertToUnit(vertical.value ? 100 - props.position : props.position, '%')\n const inset = vertical.value ? 'block' : 'inline'\n const { elevationClasses } = useElevation(computed(() => !disabled.value ? elevation.value : undefined))\n\n return (\n <div\n class={[\n 'v-slider-thumb',\n {\n 'v-slider-thumb--focused': props.focused,\n 'v-slider-thumb--pressed': props.focused && mousePressed.value,\n },\n ]}\n style={{\n [`inset-${inset}-start`]: `calc(${positionPercentage} - var(--v-slider-thumb-size) / 2)`,\n '--v-slider-thumb-size': convertToUnit(thumbSize.value),\n direction: !vertical.value ? horizontalDirection.value : undefined,\n }}\n role=\"slider\"\n tabindex={ disabled.value ? -1 : 0 }\n aria-label={ label.value }\n aria-valuemin={ props.min }\n aria-valuemax={ props.max }\n aria-valuenow={ props.modelValue }\n aria-readonly={ readonly.value }\n aria-orientation={ direction.value }\n onKeydown={ onKeydown }\n >\n <div\n class={[\n 'v-slider-thumb__surface',\n textColorClasses.value,\n elevationClasses.value,\n ]}\n style={{\n ...textColorStyles.value,\n }}\n />\n <div\n class={[\n 'v-slider-thumb__ripple',\n textColorClasses.value,\n ]}\n style={ textColorStyles.value }\n v-ripple={[true, null, ['circle', 'center']]}\n />\n <VScaleTransition origin=\"bottom center\">\n <div\n class=\"v-slider-thumb__label-container\"\n v-show={ (thumbLabel.value && props.focused) || thumbLabel.value === 'always' }\n >\n <div\n class={[\n 'v-slider-thumb__label',\n ]}\n >\n <div>\n { slots['thumb-label']?.({ modelValue: props.modelValue }) ?? props.modelValue.toFixed(1) }\n </div>\n </div>\n </div>\n </VScaleTransition>\n </div>\n )\n }\n },\n})\n\nexport type VSliderThumb = InstanceType<typeof VSliderThumb>\n","// Styles\nimport './VSliderTrack.sass'\n\n// Components\nimport { VSliderSymbol } from './slider'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { useRounded } from '@/composables/rounded'\n\n// Utilities\nimport { computed, inject } from 'vue'\nimport { convertToUnit, defineComponent } from '@/util'\n\nexport const VSliderTrack = defineComponent({\n name: 'VSliderTrack',\n\n props: {\n start: {\n type: Number,\n required: true,\n },\n stop: {\n type: Number,\n required: true,\n },\n },\n\n emits: {},\n\n setup (props, { slots }) {\n const slider = inject(VSliderSymbol)\n\n if (!slider) throw new Error('[Vuetify] v-slider-track must be inside v-slider or v-range-slider')\n\n const {\n trackColor,\n trackFillColor,\n vertical,\n tickSize,\n showTicks,\n trackSize,\n color,\n rounded,\n parsedTicks,\n horizontalDirection,\n } = slider\n\n const { roundedClasses } = useRounded(rounded)\n\n const {\n backgroundColorClasses: trackFillColorClasses,\n backgroundColorStyles: trackFillColorStyles,\n } = useBackgroundColor(trackFillColor)\n\n const {\n backgroundColorClasses: trackColorClasses,\n backgroundColorStyles: trackColorStyles,\n } = useBackgroundColor(trackColor)\n\n const startDir = computed(() => `inset-${vertical.value ? 'block-end' : 'inline-start'}`)\n const endDir = computed(() => vertical.value ? 'height' : 'width')\n\n const backgroundStyles = computed(() => {\n return {\n [startDir.value]: '0%',\n [endDir.value]: '100%',\n }\n })\n\n const trackFillWidth = computed(() => props.stop - props.start)\n\n const trackFillStyles = computed(() => {\n return {\n [startDir.value]: convertToUnit(props.start, '%'),\n [endDir.value]: convertToUnit(trackFillWidth.value, '%'),\n }\n })\n\n const computedTicks = computed(() => {\n const ticks = vertical.value ? parsedTicks.value.slice().reverse() : parsedTicks.value\n\n return ticks.map((tick, index) => {\n const directionProperty = vertical.value ? 'inset-block-end' : 'margin-inline-start'\n return (\n <div\n key={ tick.value }\n class={[\n 'v-slider-track__tick',\n {\n 'v-slider-track__tick--filled': tick.position >= props.start && tick.position <= props.stop,\n },\n ]}\n style={{\n [directionProperty]: (tick.position > 0 && tick.position < 100) && convertToUnit(tick.position, '%'),\n }}\n >\n {\n (tick.label || slots['tick-label']) && (\n <div class=\"v-slider-track__tick-label\">\n { slots['tick-label']?.({ tick, index }) ?? tick.label }\n </div>\n )\n }\n </div>\n )\n })\n })\n\n return () => {\n return (\n <div\n class={[\n 'v-slider-track',\n roundedClasses.value,\n ]}\n style={{\n '--v-slider-track-size': convertToUnit(trackSize.value),\n '--v-slider-tick-size': convertToUnit(tickSize.value),\n direction: !vertical.value ? horizontalDirection.value : undefined,\n }}\n >\n <div\n class={[\n 'v-slider-track__background',\n trackColorClasses.value,\n {\n 'v-slider-track__background--opacity': !!color.value || !trackFillColor.value,\n },\n ]}\n style={{\n ...backgroundStyles.value,\n ...trackColorStyles.value,\n }}\n />\n <div\n class={[\n 'v-slider-track__fill',\n trackFillColorClasses.value,\n ]}\n style={{\n ...trackFillStyles.value,\n ...trackFillColorStyles.value,\n }}\n />\n\n { showTicks.value && (\n <div\n class={[\n 'v-slider-track__ticks',\n {\n 'v-slider-track__ticks--always-show': showTicks.value === 'always',\n },\n ]}\n >\n { computedTicks.value }\n </div>\n ) }\n </div>\n )\n }\n },\n})\n\nexport type VSliderTrack = InstanceType<typeof VSliderTrack>\n","// Components\nimport { VInput } from '../VInput'\nimport { VSliderThumb } from '../VSlider/VSliderThumb'\nimport { VSliderTrack } from '../VSlider/VSliderTrack'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { getOffset, makeSliderProps, useSlider } from '../VSlider/slider'\nimport { useFocus } from '@/composables/focus'\n\n// Utilities\nimport { computed, defineComponent, ref } from 'vue'\n\n// Types\nimport type { PropType, WritableComputedRef } from 'vue'\nimport { filterInputProps, makeVInputProps } from '../VInput/VInput'\n\nexport const VRangeSlider = defineComponent({\n name: 'VRangeSlider',\n\n props: {\n ...makeVInputProps(),\n ...makeSliderProps(),\n\n modelValue: {\n type: Array as PropType<number[]>,\n default: () => ([0, 0]),\n },\n },\n\n emits: {\n 'update:modelValue': (value: [number, number]) => true,\n },\n\n setup (props, { slots, attrs }) {\n const startThumbRef = ref<VSliderThumb>()\n const stopThumbRef = ref<VSliderThumb>()\n const focusedThumb = ref<VSliderThumb | null>()\n const inputRef = ref<VInput>()\n\n let canSwitch = false\n function getActiveThumb (e: MouseEvent | TouchEvent) {\n if (!startThumbRef.value || !stopThumbRef.value) return\n\n canSwitch = true\n\n const startOffset = getOffset(e, startThumbRef.value.$el, props.direction)\n const stopOffset = getOffset(e, stopThumbRef.value.$el, props.direction)\n\n const a = Math.abs(startOffset)\n const b = Math.abs(stopOffset)\n\n return (a < b || (a === b && startOffset < 0)) ? startThumbRef.value?.$el : stopThumbRef.value?.$el\n }\n\n const {\n min,\n max,\n mousePressed,\n roundValue,\n onSliderMousedown,\n onSliderTouchstart,\n trackContainerRef,\n position,\n hasLabels,\n } = useSlider({\n /* eslint-disable @typescript-eslint/no-use-before-define */\n props,\n handleSliderMouseUp: newValue => {\n model.value = focusedThumb.value === startThumbRef.value ? [newValue, model.value[1]] : [model.value[0], newValue]\n },\n handleMouseMove: newValue => {\n if (focusedThumb.value === startThumbRef.value) {\n model.value = [Math.min(newValue, model.value[1]), model.value[1]]\n } else {\n model.value = [model.value[0], Math.max(model.value[0], newValue)]\n }\n if (canSwitch && model.value[0] === model.value[1]) {\n focusedThumb.value = newValue > model.value[0] ? stopThumbRef.value : startThumbRef.value\n }\n canSwitch = false\n },\n getActiveThumb,\n /* eslint-enable @typescript-eslint/no-use-before-define */\n })\n\n const model = useProxiedModel(\n props,\n 'modelValue',\n undefined,\n arr => {\n if (!arr || !arr.length) return [0, 0]\n\n return arr.map(value => roundValue(value))\n },\n ) as WritableComputedRef<[number, number]>\n\n const { isFocused, focus, blur } = useFocus()\n const trackStart = computed(() => position(model.value[0]))\n const trackStop = computed(() => position(model.value[1]))\n\n return () => {\n const [inputProps, _] = filterInputProps(props)\n\n return (\n <VInput\n class={[\n 'v-slider',\n 'v-range-slider',\n {\n 'v-slider--has-labels': !!slots['tick-label'] || hasLabels.value,\n 'v-slider--focused': isFocused.value,\n 'v-slider--pressed': mousePressed.value,\n 'v-slider--disabled': props.disabled,\n },\n ]}\n ref={ inputRef }\n { ...inputProps }\n focused={ isFocused.value }\n >\n {{\n ...slots,\n default: ({ id }) => (\n <div\n class=\"v-slider__container\"\n onMousedown={ onSliderMousedown }\n onTouchstartPassive={ onSliderTouchstart }\n >\n <input\n id={ `${id.value}_start` }\n name={ props.name || id.value }\n disabled={ props.disabled }\n readonly={ props.readonly }\n tabindex=\"-1\"\n value={ model.value[0] }\n />\n\n <input\n id={ `${id.value}_stop` }\n name={ props.name || id.value }\n disabled={ props.disabled }\n readonly={ props.readonly }\n tabindex=\"-1\"\n value={ model.value[1] }\n />\n\n <VSliderTrack\n ref={ trackContainerRef }\n start={ trackStart.value }\n stop={ trackStop.value }\n >\n {{ 'tick-label': slots['tick-label'] }}\n </VSliderTrack>\n\n <VSliderThumb\n ref={ startThumbRef }\n focused={ isFocused && focusedThumb.value === startThumbRef.value }\n modelValue={ model.value[0] }\n onUpdate:modelValue={ v => (model.value = [v, model.value[1]]) }\n onFocus={ (e: FocusEvent) => {\n focus()\n focusedThumb.value = startThumbRef.value\n\n // Make sure second thumb is focused if\n // the thumbs are on top of each other\n // and they are both at minimum value\n // but only if focused from outside.\n if (\n model.value[0] === model.value[1] &&\n model.value[1] === min.value &&\n e.relatedTarget !== stopThumbRef.value?.$el\n ) stopThumbRef.value?.$el.focus()\n } }\n onBlur={ () => {\n blur()\n focusedThumb.value = null\n } }\n min={ min.value }\n max={ model.value[1] }\n position={ trackStart.value }\n >\n {{ 'thumb-label': slots['thumb-label'] }}\n </VSliderThumb>\n\n <VSliderThumb\n ref={ stopThumbRef }\n focused={ isFocused && focusedThumb.value === stopThumbRef.value }\n modelValue={ model.value[1] }\n onUpdate:modelValue={ v => (model.value = [model.value[0], v]) }\n onFocus={ (e: FocusEvent) => {\n focus()\n focusedThumb.value = stopThumbRef.value\n\n // Make sure first thumb is focused if\n // the thumbs are on top of each other\n // and they are both at maximum value\n // but only if focused from outside.\n if (\n model.value[0] === model.value[1] &&\n model.value[0] === max.value &&\n e.relatedTarget !== startThumbRef.value?.$el\n ) {\n startThumbRef.value?.$el.focus()\n }\n } }\n onBlur={ () => {\n blur()\n focusedThumb.value = null\n } }\n min={ model.value[0] }\n max={ max.value }\n position={ trackStop.value }\n >\n {{ 'thumb-label': slots['thumb-label'] }}\n </VSliderThumb>\n </div>\n ),\n }}\n </VInput>\n )\n }\n },\n})\n\nexport type VRangeSlider = InstanceType<typeof VRangeSlider>\n","// Styles\nimport './VRating.sass'\n\n// Components\nimport { VBtn } from '../VBtn'\n\n// Composables\nimport { makeDensityProps } from '@/composables/density'\nimport { makeSizeProps } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { createRange, defineComponent, getUid } from '@/util'\n\n// Types\nimport type { Variant } from '@/composables/variant'\nimport type { Prop } from 'vue'\n\nexport const VRating = defineComponent({\n name: 'VRating',\n\n props: {\n name: String,\n itemAriaLabel: {\n type: String,\n default: '$vuetify.rating.ariaLabel.item',\n },\n activeColor: String,\n color: String,\n clearable: Boolean,\n disabled: Boolean,\n emptyIcon: {\n type: String,\n default: '$ratingEmpty',\n },\n fullIcon: {\n type: String,\n default: '$ratingFull',\n },\n halfIncrements: Boolean,\n hover: Boolean,\n length: {\n type: [Number, String],\n default: 5,\n },\n readonly: Boolean,\n modelValue: {\n type: Number,\n default: 0,\n },\n itemLabels: Array as Prop<string[]>,\n itemLabelPosition: {\n type: String,\n default: 'top',\n validator: (v: any) => ['top', 'bottom'].includes(v),\n },\n ripple: Boolean,\n\n ...makeDensityProps(),\n ...makeSizeProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:modelValue': (value: number) => true,\n },\n\n setup (props, { slots }) {\n const { t } = useLocale()\n const { themeClasses } = provideTheme(props)\n const rating = useProxiedModel(props, 'modelValue')\n\n const range = computed(() => createRange(Number(props.length), 1))\n const increments = computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]))\n const hoverIndex = ref(-1)\n const focusIndex = ref(-1)\n const firstRef = ref<HTMLElement>()\n let isClicking = false\n\n const itemState = computed(() => increments.value.map(value => {\n const isHovering = props.hover && hoverIndex.value > -1\n const isFilled = rating.value >= value\n const isHovered = hoverIndex.value >= value\n const isFullIcon = isHovering ? isHovered : isFilled\n const icon = isFullIcon ? props.fullIcon : props.emptyIcon\n const activeColor = props.activeColor ?? props.color\n const color = (isFilled || isHovered) ? activeColor : props.color\n\n return { isFilled, isHovered, icon, color }\n }))\n\n const eventState = computed(() => [0, ...increments.value].map(value => {\n function onMouseenter () {\n hoverIndex.value = value\n }\n\n function onMouseleave () {\n hoverIndex.value = -1\n }\n\n function onFocus () {\n if (value === 0 && rating.value === 0) {\n firstRef.value?.focus()\n } else {\n focusIndex.value = value\n }\n }\n\n function onBlur () {\n if (!isClicking) focusIndex.value = -1\n }\n\n function onClick () {\n if (props.disabled || props.readonly) return\n rating.value = rating.value === value && props.clearable ? 0 : value\n }\n\n return {\n onMouseenter: props.hover ? onMouseenter : undefined,\n onMouseleave: props.hover ? onMouseleave : undefined,\n onFocus,\n onBlur,\n onClick,\n }\n }))\n\n function onMousedown () {\n isClicking = true\n }\n\n function onMouseup () {\n isClicking = false\n }\n\n const name = computed(() => props.name ?? `v-rating-${getUid()}`)\n\n function VRatingItem ({ value, index, showStar = true }: { value: number, index: number, showStar?: boolean }) {\n const { onMouseenter, onMouseleave, onFocus, onBlur, onClick } = eventState.value[index + 1]\n const id = `${name.value}-${String(value).replace('.', '-')}`\n const btnProps = {\n color: itemState.value[index]?.color,\n density: props.density,\n disabled: props.disabled,\n icon: itemState.value[index]?.icon,\n ripple: props.ripple,\n size: props.size,\n tag: 'span',\n variant: 'plain' as Variant,\n }\n\n return (\n <>\n <label\n for={ id }\n class={{\n 'v-rating__item--half': props.halfIncrements && value % 1 > 0,\n 'v-rating__item--full': props.halfIncrements && value % 1 === 0,\n }}\n onMousedown={ onMousedown }\n onMouseup={ onMouseup }\n onMouseenter={ onMouseenter }\n onMouseleave={ onMouseleave }\n >\n <span class=\"v-rating__hidden\">{ t(props.itemAriaLabel, value, props.length) }</span>\n {\n !showStar ? undefined\n : slots.item ? slots.item({\n ...itemState.value,\n props: btnProps,\n value,\n index,\n })\n : (\n <VBtn { ...btnProps } />\n )\n }\n </label>\n <input\n class=\"v-rating__hidden\"\n name={ name.value }\n id={ id }\n type=\"radio\"\n value={ value }\n checked={ rating.value === value }\n onClick={ onClick }\n onFocus={ onFocus }\n onBlur={ onBlur }\n ref={ index === 0 ? firstRef : undefined }\n readonly={ props.readonly }\n disabled={ props.disabled }\n />\n </>\n )\n }\n\n return () => {\n const hasLabels = !!props.itemLabels?.length\n\n return (\n <props.tag\n class={[\n 'v-rating',\n {\n 'v-rating--hover': props.hover,\n 'v-rating--readonly': props.readonly,\n },\n themeClasses.value,\n ]}\n >\n <VRatingItem value={ 0 } index={ -1 } showStar={ false } />\n\n { range.value.map((value, i) => (\n <div class=\"v-rating__wrapper\">\n {\n !hasLabels ? undefined\n : slots['item-label'] ? slots['item-label']({ value, index: i, label: props.itemLabels?.[i] })\n : props.itemLabels?.[i] ? <span>{ props.itemLabels[i] }</span>\n : <span>&nbsp;</span>\n }\n <div\n class={[\n 'v-rating__item',\n {\n 'v-rating__item--focused': Math.ceil(focusIndex.value) === value,\n },\n ]}\n >\n { props.halfIncrements ? (\n <>\n <VRatingItem value={ value - 0.5 } index={ i * 2 } />\n <VRatingItem value={ value } index={ (i * 2) + 1 } />\n </>\n ) : (\n <VRatingItem value={ value } index={ i } />\n ) }\n </div>\n </div>\n )) }\n </props.tag>\n )\n }\n },\n})\n\nexport type VRating = InstanceType<typeof VRating>\n","// Styles\nimport './VSheet.sass'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { defineComponent } from '@/util'\n\nexport const VSheet = defineComponent({\n name: 'VSheet',\n\n props: {\n color: {\n type: String,\n default: 'surface',\n },\n\n ...makeBorderProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(toRef(props, 'color'))\n const { borderClasses } = useBorder(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { positionClasses, positionStyles } = usePosition(props)\n const { roundedClasses } = useRounded(props)\n\n return () => (\n <props.tag\n class={[\n 'v-sheet',\n themeClasses.value,\n backgroundColorClasses.value,\n borderClasses.value,\n elevationClasses.value,\n positionClasses.value,\n roundedClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n dimensionStyles.value,\n positionStyles.value,\n ]}\n v-slots={ slots }\n />\n )\n },\n})\n","// Styles\nimport './VSlider.sass'\n\n// Components\nimport { VInput } from '../VInput'\nimport { VSliderThumb } from './VSliderThumb'\nimport { VSliderTrack } from './VSliderTrack'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useFocus } from '@/composables/focus'\nimport { makeSliderProps, useSlider } from './slider'\n\n// Helpers\nimport { defineComponent } from '@/util'\n\n// Types\nimport { computed, ref } from 'vue'\nimport { filterInputProps, makeVInputProps } from '../VInput/VInput'\n\nexport const VSlider = defineComponent({\n name: 'VSlider',\n\n props: {\n ...makeSliderProps(),\n ...makeVInputProps(),\n\n modelValue: {\n type: [Number, String],\n default: 0,\n },\n },\n\n emits: {\n 'update:modelValue': (v: number) => true,\n },\n\n setup (props, { attrs, slots }) {\n const thumbContainerRef = ref()\n\n const {\n min,\n max,\n mousePressed,\n roundValue,\n onSliderMousedown,\n onSliderTouchstart,\n trackContainerRef,\n position,\n hasLabels,\n } = useSlider({\n props,\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n handleSliderMouseUp: newValue => model.value = roundValue(newValue),\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n handleMouseMove: newValue => model.value = roundValue(newValue),\n getActiveThumb: () => thumbContainerRef.value?.$el,\n })\n\n const model = useProxiedModel(\n props,\n 'modelValue',\n undefined,\n v => {\n const value = typeof v === 'string' ? parseFloat(v) : v == null ? min.value : v\n\n return roundValue(value)\n },\n )\n\n const { isFocused, focus, blur } = useFocus()\n const trackStop = computed(() => position(model.value))\n\n return () => {\n const [inputProps, _] = filterInputProps(props)\n\n return (\n <VInput\n class={[\n 'v-slider',\n {\n 'v-slider--has-labels': !!slots['tick-label'] || hasLabels.value,\n 'v-slider--focused': isFocused.value,\n 'v-slider--pressed': mousePressed.value,\n 'v-slider--disabled': props.disabled,\n },\n ]}\n { ...inputProps }\n focused={ isFocused.value }\n >\n {{\n ...slots,\n default: ({ id }) => (\n <div\n class=\"v-slider__container\"\n onMousedown={ onSliderMousedown }\n onTouchstartPassive={ onSliderTouchstart }\n >\n <input\n id={ id.value }\n name={ props.name || id.value }\n disabled={ props.disabled }\n readonly={ props.readonly }\n tabindex=\"-1\"\n value={ model.value }\n />\n\n <VSliderTrack\n ref={ trackContainerRef }\n start={ 0 }\n stop={ trackStop.value }\n >\n {{ 'tick-label': slots['tick-label'] }}\n </VSliderTrack>\n\n <VSliderThumb\n ref={ thumbContainerRef }\n focused={ isFocused.value }\n min={ min.value }\n max={ max.value }\n modelValue={ model.value }\n onUpdate:modelValue={ v => (model.value = v) }\n position={ trackStop.value }\n elevation={ props.elevation }\n onFocus={ focus }\n onBlur={ blur }\n >\n {{ 'thumb-label': slots['thumb-label'] }}\n </VSliderThumb>\n </div>\n ),\n }}\n </VInput>\n )\n }\n },\n})\n\nexport type VSlider = InstanceType<typeof VSlider>\n","// Styles\nimport './VSwitch.sass'\n\n// Components\nimport { filterControlProps, makeSelectionControlProps, VSelectionControl } from '@/components/VSelectionControl/VSelectionControl'\nimport { filterInputProps, makeVInputProps, VInput } from '@/components/VInput/VInput'\nimport { VProgressCircular } from '@/components/VProgressCircular'\n\n// Composables\nimport { LoaderSlot, makeLoaderProps, useLoader } from '@/composables/loader'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utility\nimport { computed, defineComponent, ref } from 'vue'\nimport { filterInputAttrs, useRender } from '@/util'\n\nexport const VSwitch = defineComponent({\n name: 'VSwitch',\n\n inheritAttrs: false,\n\n props: {\n indeterminate: Boolean,\n inset: Boolean,\n flat: Boolean,\n\n ...makeLoaderProps(),\n ...makeVInputProps(),\n ...makeSelectionControlProps(),\n },\n\n emits: {\n 'update:indeterminate': (val: boolean) => true,\n },\n\n setup (props, { attrs, slots }) {\n const indeterminate = useProxiedModel(props, 'indeterminate')\n const { loaderClasses } = useLoader(props)\n\n const loaderColor = computed(() => {\n return typeof props.loading === 'string' && props.loading !== ''\n ? props.loading\n : props.color\n })\n\n function onChange () {\n if (indeterminate.value) {\n indeterminate.value = false\n }\n }\n\n useRender(() => {\n const [inputAttrs, controlAttrs] = filterInputAttrs(attrs)\n const [inputProps, _1] = filterInputProps(props)\n const [controlProps, _2] = filterControlProps(props)\n const control = ref<VSelectionControl>()\n\n function onClick () {\n control.value?.input?.click()\n }\n\n return (\n <VInput\n class={[\n 'v-switch',\n { 'v-switch--inset': props.inset },\n { 'v-switch--indeterminate': indeterminate.value },\n loaderClasses.value,\n ]}\n { ...inputAttrs }\n { ...inputProps }\n >\n {{\n ...slots,\n default: ({\n isDisabled,\n isReadonly,\n isValid,\n }) => (\n <VSelectionControl\n ref={ control }\n { ...controlProps }\n type=\"checkbox\"\n onUpdate:modelValue={ onChange }\n aria-checked={ indeterminate.value ? 'mixed' : undefined }\n disabled={ isDisabled.value }\n readonly={ isReadonly.value }\n { ...controlAttrs }\n >\n {{\n default: () => (<div class=\"v-switch__track\" onClick={ onClick }></div>),\n input: ({ textColorClasses }) => (\n <div\n class={[\n 'v-switch__thumb',\n textColorClasses.value,\n ]}\n >\n { props.loading && (\n <LoaderSlot\n name=\"v-switch\"\n active\n color={ isValid.value === false ? undefined : loaderColor.value }\n >\n { slotProps => (\n slots.loader\n ? slots.loader(slotProps)\n : (\n <VProgressCircular\n active={ slotProps.isActive }\n color={ slotProps.color }\n indeterminate\n size=\"16\"\n width=\"2\"\n />\n )\n )}\n </LoaderSlot>\n ) }\n </div>\n ),\n }}\n </VSelectionControl>\n ),\n }}\n </VInput>\n )\n })\n\n return {}\n },\n})\n\nexport type VSwitch = InstanceType<typeof VSwitch>\n","// Styles\nimport './VSystemBar.sass'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VSystemBar = defineComponent({\n name: 'VSystemBar',\n\n props: {\n lightsOut: Boolean,\n window: Boolean,\n\n ...makeBorderProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { positionClasses, positionStyles } = usePosition(props)\n const { roundedClasses } = useRounded(props)\n\n return () => (\n <props.tag\n class={[\n {\n 'v-system-bar': true,\n 'v-system-bar--lights-out': props.lightsOut,\n 'v-system-bar--window': props.window,\n },\n themeClasses.value,\n borderClasses.value,\n elevationClasses.value,\n positionClasses.value,\n roundedClasses.value,\n ]}\n style={[\n dimensionStyles.value,\n positionStyles.value,\n ]}\n v-slots={ slots }\n />\n )\n },\n})\n","// Styles\nimport './VTable.sass'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { convertToUnit, defineComponent } from '@/util'\nimport { makeDensityProps, useDensity } from '@/composables/density'\n\nexport const VTable = defineComponent({\n name: 'VTable',\n\n props: {\n fixedHeader: Boolean,\n fixedFooter: Boolean,\n height: [Number, String],\n\n ...makeDensityProps(),\n ...makeThemeProps(),\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { densityClasses } = useDensity(props)\n\n return () => (\n <props.tag\n class={[\n 'v-table',\n {\n 'v-table--fixed-height': !!props.height,\n 'v-table--fixed-header': props.fixedHeader,\n 'v-table--fixed-footer': props.fixedFooter,\n 'v-table--has-top': !!slots.top,\n 'v-table--has-bottom': !!slots.bottom,\n },\n themeClasses.value,\n densityClasses.value,\n ]}\n >\n { slots.top?.() }\n\n { slots.default && (\n <div\n class=\"v-table__wrapper\"\n style={{ height: convertToUnit(props.height) }}\n >\n <table>\n { slots.default?.() }\n </table>\n </div>\n ) }\n\n { slots.bottom?.() }\n </props.tag>\n )\n },\n})\n","// Styles\nimport './VTextarea.sass'\n\n// Components\nimport { filterFieldProps, makeVFieldProps } from '@/components/VField/VField'\nimport { VCounter } from '@/components/VCounter'\nimport { VField } from '@/components/VField'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport Intersect from '@/directives/intersect'\n\n// Utilities\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { convertToUnit, defineComponent, filterInputAttrs, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport { filterInputProps, makeVInputProps, VInput } from '@/components/VInput/VInput'\n\nexport const VTextarea = defineComponent({\n name: 'VTextarea',\n\n directives: { Intersect },\n\n inheritAttrs: false,\n\n props: {\n autoGrow: Boolean,\n autofocus: Boolean,\n counter: [Boolean, Number, String] as PropType<true | number | string>,\n counterValue: Function as PropType<(value: any) => number>,\n prefix: String,\n placeholder: String,\n persistentPlaceholder: Boolean,\n persistentCounter: Boolean,\n noResize: Boolean,\n rows: {\n type: [Number, String],\n default: 5,\n validator: (v: any) => !isNaN(parseFloat(v)),\n },\n maxRows: {\n type: [Number, String],\n validator: (v: any) => !isNaN(parseFloat(v)),\n },\n suffix: String,\n\n ...makeVInputProps(),\n ...makeVFieldProps(),\n },\n\n emits: {\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { attrs, slots }) {\n const model = useProxiedModel(props, 'modelValue')\n\n const controlHeight = ref('auto')\n const internalDirty = ref(false)\n const isDirty = computed(() => {\n return internalDirty.value || !!model.value\n })\n\n const counterValue = computed(() => {\n return typeof props.counterValue === 'function'\n ? props.counterValue(model.value)\n : (model.value || '').toString().length\n })\n const max = computed(() => {\n if (attrs.maxlength) return attrs.maxlength as undefined\n\n if (\n !props.counter ||\n (typeof props.counter !== 'number' &&\n typeof props.counter !== 'string')\n ) return undefined\n\n return props.counter\n })\n\n function onIntersect (\n isIntersecting: boolean,\n entries: IntersectionObserverEntry[]\n ) {\n if (!props.autofocus || !isIntersecting) return\n\n (entries[0].target as HTMLInputElement)?.focus?.()\n }\n\n const isFocused = ref(false)\n const inputRef = ref<HTMLInputElement>()\n function focus () {\n inputRef.value?.focus()\n }\n function blur () {\n inputRef.value?.blur()\n }\n function onFocus (e: FocusEvent) {\n isFocused.value = true\n }\n function onBlur (e: FocusEvent) {\n isFocused.value = false\n }\n function clear (e?: Event) {\n e?.stopPropagation()\n\n model.value = ''\n }\n\n const sizerRef = ref<HTMLTextAreaElement>()\n function calculateInputHeight () {\n if (!props.autoGrow) return\n\n nextTick(() => {\n if (!sizerRef.value) return\n\n const style = getComputedStyle(sizerRef.value)\n\n const padding = parseFloat(style.getPropertyValue('--v-field-padding-top')) +\n parseFloat(style.getPropertyValue('--v-field-padding-bottom'))\n\n const height = sizerRef.value.scrollHeight\n const lineHeight = parseFloat(style.lineHeight)\n const minHeight = parseFloat(props.rows) * lineHeight + padding\n const maxHeight = parseFloat(props.maxRows!) * lineHeight + padding || Infinity\n\n controlHeight.value = convertToUnit(Math.min(maxHeight, Math.max(minHeight, height ?? 0)))\n })\n }\n\n onMounted(calculateInputHeight)\n watch(model, calculateInputHeight)\n watch(() => props.rows, calculateInputHeight)\n watch(() => props.maxRows, calculateInputHeight)\n\n let observer: ResizeObserver | undefined\n watch(sizerRef, val => {\n if (val) {\n observer = new ResizeObserver(calculateInputHeight)\n observer.observe(sizerRef.value!)\n } else {\n observer?.disconnect()\n }\n })\n onBeforeUnmount(() => {\n observer?.disconnect()\n })\n\n useRender(() => {\n const hasCounter = !!(slots.counter || props.counter || props.counterValue)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const [inputProps] = filterInputProps(props)\n const [fieldProps] = filterFieldProps(props)\n\n return (\n <VInput\n v-model={ model.value }\n class={[\n 'v-textarea',\n {\n 'v-textarea--prefixed': props.prefix,\n 'v-textarea--suffixed': props.suffix,\n 'v-textarea--auto-grow': props.autoGrow,\n 'v-textarea--no-resize': props.noResize || props.autoGrow,\n },\n ]}\n { ...rootAttrs }\n { ...inputProps }\n >\n {{\n ...slots,\n default: ({ isDisabled, isReadonly }) => (\n <VField\n style={{\n '--v-input-control-height': controlHeight.value,\n }}\n active={ isDirty.value }\n onUpdate:active={ val => internalDirty.value = val }\n onClick:control={ focus }\n onClick:clear={ clear }\n role=\"textbox\"\n { ...fieldProps }\n >\n {{\n ...slots,\n default: ({\n isActive,\n props: { class: fieldClass, ...slotProps },\n }) => {\n const showPlaceholder = isActive || props.persistentPlaceholder\n return (\n <>\n { props.prefix && (\n <span class=\"v-textarea__prefix\" style={{ opacity: showPlaceholder ? undefined : '0' }}>\n { props.prefix }\n </span>\n ) }\n\n <textarea\n ref={ inputRef }\n class={ fieldClass }\n style={{ opacity: showPlaceholder ? undefined : '0' }} // can't this just be a class?\n v-model={ model.value }\n v-intersect={[{\n handler: onIntersect,\n }, null, ['once']]}\n autofocus={ props.autofocus }\n readonly={ isReadonly.value }\n disabled={ isDisabled.value }\n placeholder={ props.placeholder }\n rows={ props.rows }\n onFocus={ onFocus }\n onBlur={ onBlur }\n { ...slotProps }\n { ...inputAttrs }\n />\n\n { props.autoGrow && (\n <textarea\n class={[\n fieldClass,\n 'v-textarea__sizer',\n ]}\n v-model={ model.value }\n ref={ sizerRef }\n readonly\n aria-hidden=\"true\"\n />\n )}\n\n { props.suffix && (\n <span class=\"v-textarea__suffix\" style={{ opacity: showPlaceholder ? undefined : '0' }}>\n { props.suffix }\n </span>\n ) }\n </>\n )\n },\n }}\n </VField>\n ),\n details: hasCounter ? ({ isFocused }) => (\n <>\n <span />\n\n <VCounter\n active={ props.persistentCounter || isFocused.value }\n value={ counterValue.value }\n max={ max.value }\n v-slots={ slots.counter }\n />\n </>\n ) : undefined,\n }}\n </VInput>\n )\n })\n\n return {\n focus,\n blur,\n }\n },\n})\n\nexport type VTextarea = InstanceType<typeof VTextarea>\n","// Styles\nimport './VTextField.sass'\n\n// Components\nimport { filterInputProps, makeVInputProps, VInput } from '@/components/VInput/VInput'\nimport { filterFieldProps, makeVFieldProps, VField } from '@/components/VField/VField'\nimport { VCounter } from '@/components/VCounter'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport Intersect from '@/directives/intersect'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { defineComponent, filterInputAttrs, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport { useForwardRef } from '@/composables/forwardRef'\n\nconst dirtyTypes = ['color', 'file', 'time', 'date', 'datetime-local', 'week', 'month']\n\nexport const VTextField = defineComponent({\n name: 'VTextField',\n\n directives: { Intersect },\n\n inheritAttrs: false,\n\n props: {\n autofocus: Boolean,\n counter: [Boolean, Number, String] as PropType<true | number | string>,\n counterValue: Function as PropType<(value: any) => number>,\n prefix: String,\n placeholder: String,\n persistentPlaceholder: Boolean,\n persistentCounter: Boolean,\n suffix: String,\n type: {\n type: String,\n default: 'text',\n },\n\n ...makeVInputProps(),\n ...makeVFieldProps(),\n },\n\n emits: {\n 'update:modelValue': (val: string) => true,\n },\n\n setup (props, { attrs, slots }) {\n const model = useProxiedModel(props, 'modelValue')\n\n const internalDirty = ref(false)\n const isDirty = computed(() => {\n return internalDirty.value || !!model.value || dirtyTypes.includes(props.type)\n })\n\n const counterValue = computed(() => {\n return typeof props.counterValue === 'function'\n ? props.counterValue(model.value)\n : (model.value || '').toString().length\n })\n const max = computed(() => {\n if (attrs.maxlength) return attrs.maxlength as undefined\n\n if (\n !props.counter ||\n (typeof props.counter !== 'number' &&\n typeof props.counter !== 'string')\n ) return undefined\n\n return props.counter\n })\n\n function onIntersect (\n isIntersecting: boolean,\n entries: IntersectionObserverEntry[]\n ) {\n if (!props.autofocus || !isIntersecting) return\n\n (entries[0].target as HTMLInputElement)?.focus?.()\n }\n\n const isFocused = ref(false)\n const inputRef = ref<HTMLInputElement>()\n function focus () {\n inputRef.value?.focus()\n }\n function blur () {\n inputRef.value?.blur()\n }\n function onFocus (e: FocusEvent) {\n isFocused.value = true\n }\n function onBlur (e: FocusEvent) {\n isFocused.value = false\n }\n\n const vInputRef = ref<VInput>()\n const vFieldRef = ref<VInput>()\n\n useRender(() => {\n const hasCounter = !!(slots.counter || props.counter || props.counterValue)\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n const [inputProps] = filterInputProps(props)\n const [fieldProps] = filterFieldProps(props)\n\n return (\n <VInput\n ref={ vInputRef }\n v-model={ model.value }\n class={[\n 'v-text-field',\n {\n 'v-text-field--prefixed': props.prefix,\n 'v-text-field--suffixed': props.suffix,\n },\n ]}\n focused={ isFocused.value }\n { ...rootAttrs }\n { ...inputProps }\n >\n {{\n ...slots,\n default: ({ isDisabled, isReadonly }) => (\n <VField\n ref={ vFieldRef }\n active={ isDirty.value }\n onUpdate:active={ val => internalDirty.value = val }\n onClick:control={ focus }\n onClick:clear={ e => {\n e.stopPropagation()\n\n model.value = ''\n }}\n role=\"textbox\"\n { ...fieldProps }\n >\n {{\n ...slots,\n default: ({\n isActive,\n props: { class: fieldClass, ...slotProps },\n }) => {\n const showPlaceholder = isActive || props.persistentPlaceholder\n\n return (\n <>\n { props.prefix && (\n <span class=\"v-text-field__prefix\" style={{ opacity: showPlaceholder ? undefined : '0' }}>\n { props.prefix }\n </span>\n ) }\n\n <input\n ref={ inputRef }\n class={ fieldClass }\n style={{ opacity: showPlaceholder ? undefined : '0' }} // can't this just be a class?\n v-model={ model.value }\n v-intersect={[{\n handler: onIntersect,\n }, null, ['once']]}\n autofocus={ props.autofocus }\n readonly={ isReadonly.value }\n disabled={ isDisabled.value }\n placeholder={ props.placeholder }\n size={ 1 }\n type={ props.type }\n onFocus={ onFocus }\n onBlur={ onBlur }\n { ...slotProps }\n { ...inputAttrs }\n />\n\n { props.suffix && (\n <span class=\"v-text-field__suffix\" style={{ opacity: showPlaceholder ? undefined : '0' }}>\n { props.suffix }\n </span>\n ) }\n </>\n )\n },\n }}\n </VField>\n ),\n details: hasCounter ? ({ isFocused }) => (\n <>\n <span />\n\n <VCounter\n active={ props.persistentCounter || isFocused.value }\n value={ counterValue.value }\n max={ max.value }\n v-slots={ slots.counter }\n />\n </>\n ) : undefined,\n }}\n </VInput>\n )\n })\n\n return useForwardRef({\n focus,\n blur,\n }, vInputRef, vFieldRef)\n },\n})\n\nexport type VTextField = InstanceType<typeof VTextField>\n","import type { Ref, UnwrapRef } from 'vue'\nimport type { UnionToIntersection } from '@/util'\n\nexport function useForwardRef<T extends {}, U extends Ref<{} | undefined>[]> (\n target: T,\n ...refs: U\n): T & UnwrapRef<UnionToIntersection<U[number]>> {\n return new Proxy(target, {\n get (target, key) {\n if (Reflect.has(target, key)) {\n return Reflect.get(target, key)\n }\n for (const ref of refs) {\n if (ref.value && Reflect.has(ref.value, key)) {\n return Reflect.get(ref.value, key)\n }\n }\n },\n getOwnPropertyDescriptor (target, key) {\n return Reflect.getOwnPropertyDescriptor(target, key) ?? (\n refs.find(ref => ref.value && Reflect.getOwnPropertyDescriptor(ref.value, key))\n )\n },\n }) as any\n}\n","// Styles\nimport './VThemeProvider.sass'\n\n// Composables\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VThemeProvider = defineComponent({\n name: 'VThemeProvider',\n\n props: {\n withBackground: Boolean,\n\n ...makeThemeProps(),\n ...makeTagProps(),\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n\n return () => {\n if (!props.withBackground) return slots.default?.()\n\n return (\n <props.tag class={['v-theme-provider', themeClasses.value]}>\n { slots.default?.() }\n </props.tag>\n )\n }\n },\n})\n","import type { InjectionKey, Ref } from 'vue'\nimport type { Density } from '@/composables/density'\n\nexport interface TimelineInstance {\n density: Ref<Density>\n lineColor: Ref<string>\n}\n\nexport const VTimelineSymbol: InjectionKey<TimelineInstance> = Symbol.for('vuetify:timeline')\n","// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VTimelineSymbol } from './shared'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\n\n// Utilities\nimport { defineComponent, inject, toRef } from 'vue'\n\nexport const VTimelineDivider = defineComponent({\n name: 'VTimelineDivider',\n\n props: {\n hideDot: Boolean,\n lineColor: String,\n icon: String,\n iconColor: String,\n fillDot: Boolean,\n dotColor: String,\n\n ...makeRoundedProps(),\n ...makeSizeProps(),\n ...makeElevationProps(),\n },\n\n setup (props, { slots }) {\n const timeline = inject(VTimelineSymbol)\n\n if (!timeline) throw new Error('[Vuetify] Could not find v-timeline provider')\n\n const { sizeClasses, sizeStyles } = useSize(props, 'v-timeline-divider__dot')\n const { backgroundColorStyles, backgroundColorClasses } = useBackgroundColor(toRef(props, 'dotColor'))\n const { backgroundColorStyles: lineColorStyles, backgroundColorClasses: lineColorClasses } = useBackgroundColor(timeline.lineColor)\n const { roundedClasses } = useRounded(props, 'v-timeline-divider__dot')\n const { elevationClasses } = useElevation(props)\n\n return () => (\n <div\n class={[\n 'v-timeline-divider',\n {\n 'v-timeline-divider--fill-dot': props.fillDot,\n },\n ]}\n >\n { !props.hideDot && (\n <div\n class={[\n 'v-timeline-divider__dot',\n roundedClasses.value,\n sizeClasses.value,\n elevationClasses.value,\n ]}\n // @ts-expect-error: null\n style={ sizeStyles.value }\n >\n <div\n class={[\n 'v-timeline-divider__inner-dot',\n roundedClasses.value,\n backgroundColorClasses.value,\n ]}\n style={ backgroundColorStyles.value }\n >\n {\n slots.default ? slots.default({ icon: props.icon, iconColor: props.iconColor, size: props.size })\n : props.icon ? <VIcon icon={ props.icon } color={ props.iconColor } size={ props.size } />\n : undefined\n }\n </div>\n </div>\n ) }\n <div\n class={[\n 'v-timeline-divider__line',\n lineColorClasses.value,\n ]}\n style={ lineColorStyles.value }\n />\n </div>\n )\n },\n})\n\nexport type VTimelineDivider = InstanceType<typeof VTimelineDivider>\n","// Components\nimport { VTimelineSymbol } from './shared'\nimport { VTimelineDivider } from './VTimelineDivider'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\nimport { makeSizeProps } from '@/composables/size'\nimport { makeElevationProps } from '@/composables/elevation'\nimport { makeRoundedProps } from '@/composables/rounded'\n\n// Utilities\nimport { inject, ref, watch } from 'vue'\nimport { convertToUnit, defineComponent } from '@/util'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\n\nexport const VTimelineItem = defineComponent({\n name: 'VTimelineItem',\n\n props: {\n dotColor: String,\n fillDot: Boolean,\n hideDot: Boolean,\n hideOpposite: {\n type: Boolean,\n default: undefined,\n },\n icon: String,\n iconColor: String,\n\n ...makeRoundedProps(),\n ...makeElevationProps(),\n ...makeSizeProps(),\n ...makeTagProps(),\n ...makeDimensionProps(),\n },\n\n setup (props, { slots }) {\n const timeline = inject(VTimelineSymbol)\n\n if (!timeline) throw new Error('[Vuetify] Could not find v-timeline provider')\n\n const { dimensionStyles } = useDimension(props)\n\n const dotSize = ref(0)\n const dotRef = ref<VTimelineDivider>()\n watch(dotRef, newValue => {\n if (!newValue) return\n dotSize.value = newValue.$el.querySelector('.v-timeline-divider__dot')?.getBoundingClientRect().width ?? 0\n }, {\n flush: 'post',\n })\n\n return () => (\n <div\n class={[\n 'v-timeline-item',\n {\n 'v-timeline-item--fill-dot': props.fillDot,\n },\n ]}\n style={{\n '--v-timeline-dot-size': convertToUnit(dotSize.value),\n }}\n >\n <div\n class=\"v-timeline-item__body\"\n style={ dimensionStyles.value }\n >\n { slots.default?.() }\n </div>\n\n <VTimelineDivider\n ref={ dotRef }\n hideDot={ props.hideDot }\n icon={ props.icon }\n iconColor={ props.iconColor }\n size={ props.size }\n elevation={ props.elevation }\n dotColor={ props.dotColor }\n fillDot={ props.fillDot }\n rounded={ props.rounded }\n v-slots={{ default: slots.icon }}\n />\n\n { timeline.density.value !== 'compact' && (\n <div class=\"v-timeline-item__opposite\">\n { !props.hideOpposite && slots.opposite?.() }\n </div>\n ) }\n </div>\n )\n },\n})\n","// Styles\nimport './VTimeline.sass'\n\n// Components\nimport { VTimelineItem } from './VTimelineItem'\n\n// Composables\nimport { makeTagProps } from '@/composables/tag'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Helpers\nimport { computed, provide, toRef } from 'vue'\nimport { convertToUnit, defineComponent } from '@/util'\nimport { VTimelineSymbol } from './shared'\n\n// Types\nimport type { Prop } from 'vue'\n\nexport type TimelineDirection = 'vertical' | 'horizontal'\nexport type TimelineSide = 'before' | 'after' | undefined\n\nexport const VTimeline = defineComponent({\n name: 'VTimeline',\n\n props: {\n direction: {\n type: String,\n default: 'vertical',\n validator: (v: any) => ['vertical', 'horizontal'].includes(v),\n } as Prop<TimelineDirection>,\n side: {\n type: String,\n validator: (v: any) => v == null || ['start', 'end'].includes(v),\n } as Prop<TimelineSide>,\n lineInset: {\n type: [String, Number],\n default: 0,\n },\n lineThickness: {\n type: [String, Number],\n default: 2,\n },\n lineColor: String,\n truncateLine: {\n type: String,\n default: 'start',\n validator: (v: any) => ['none', 'start', 'end', 'both'].includes(v),\n },\n\n ...makeDensityProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { densityClasses } = useDensity(props)\n\n provide(VTimelineSymbol, {\n density: toRef(props, 'density'),\n lineColor: toRef(props, 'lineColor'),\n })\n\n const sideClass = computed(() => {\n const side = props.side ? props.side : props.density !== 'default' ? 'end' : null\n\n return side && `v-timeline--side-${side}`\n })\n\n return () => (\n <props.tag\n class={[\n 'v-timeline',\n `v-timeline--${props.direction}`,\n {\n 'v-timeline--inset-line': !!props.lineInset,\n 'v-timeline--truncate-line-end': props.truncateLine === 'end' || props.truncateLine === 'both',\n },\n themeClasses.value,\n densityClasses.value,\n sideClass.value,\n ]}\n style={{\n '--v-timeline-line-thickness': convertToUnit(props.lineThickness),\n '--v-timeline-line-inset': convertToUnit(props.lineInset || undefined),\n }}\n >\n { (props.truncateLine === 'none' || props.truncateLine === 'end') && (\n <VTimelineItem hideDot />\n ) }\n\n { slots.default?.() }\n </props.tag>\n )\n },\n})\n","// Styles\nimport './VTooltip.sass'\n\n// Components\nimport { VOverlay } from '@/components/VOverlay'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeTransitionProps } from '@/composables/transition'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent, getUid } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { OverlaySlots } from '@/components/VOverlay/VOverlay'\nimport type { StrategyProps } from '@/components/VOverlay/positionStrategies'\n\nexport const VTooltip = genericComponent<new () => {\n $slots: OverlaySlots\n}>()({\n name: 'VTooltip',\n\n inheritAttrs: false,\n\n props: {\n id: String,\n modelValue: Boolean,\n text: String,\n\n anchor: {\n type: String as PropType<StrategyProps['anchor']>,\n default: 'end',\n },\n origin: {\n type: String as PropType<StrategyProps['origin']>,\n default: 'auto',\n },\n\n ...makeTransitionProps({\n transition: false,\n } as const),\n },\n\n emits: {\n 'update:modelValue': (value: boolean) => true,\n },\n\n setup (props, { attrs, slots }) {\n const isActive = useProxiedModel(props, 'modelValue')\n\n const uid = getUid()\n const id = computed(() => props.id || `v-tooltip-${uid}`)\n\n const anchor = computed(() => {\n return props.anchor.split(' ').length > 1\n ? props.anchor\n : props.anchor + ' center' as StrategyProps['anchor']\n })\n\n const origin = computed(() => {\n return (\n props.origin === 'auto' ||\n props.origin === 'overlap' ||\n props.origin.split(' ').length > 1 ||\n props.anchor.split(' ').length > 1\n ) ? props.origin\n : props.origin + ' center' as StrategyProps['origin']\n })\n\n const transition = computed(() => {\n if (props.transition) return props.transition\n return isActive.value ? 'scale-transition' : 'fade-transition'\n })\n\n return () => {\n return (\n <VOverlay\n v-model={ isActive.value }\n class={[\n 'v-tooltip',\n ]}\n id={ id.value }\n transition={ transition.value }\n absolute\n positionStrategy=\"connected\"\n scrollStrategy=\"reposition\"\n anchor={ anchor.value }\n origin={ origin.value }\n min-width={ 0 }\n offset={ 10 }\n scrim={ false }\n persistent\n open-on-click={ false }\n open-on-hover\n role=\"tooltip\"\n eager\n activatorProps={{\n 'aria-describedby': id.value,\n }}\n { ...attrs }\n >\n {{\n activator: slots.activator,\n default: (...args) => slots.default?.(...args) ?? props.text,\n }}\n </VOverlay>\n )\n }\n },\n})\n\nexport type VTooltip = InstanceType<typeof VTooltip>\n","// Composables\nimport { makeValidationProps, useValidation } from '@/composables/validation'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VValidation = defineComponent({\n name: 'VValidation',\n\n props: {\n ...makeValidationProps(),\n },\n\n emits: {\n 'update:modelValue': (val: any) => true,\n },\n\n setup (props, { slots }) {\n const validation = useValidation(props, 'validation')\n\n return () => slots.default?.(validation)\n },\n})\n","// Types\nimport type { DirectiveBinding, ObjectDirective } from 'vue'\nimport type { MutationOptions } from '@/composables/mutationObserver'\n\nexport interface MutationDirectiveBinding extends Omit<DirectiveBinding, 'modifiers' | 'value'> {\n value: MutationCallback | { handler: MutationCallback, options?: MutationObserverInit }\n modifiers: MutationOptions\n}\n\nfunction mounted (el: HTMLElement, binding: MutationDirectiveBinding) {\n const modifiers = binding.modifiers || {}\n const value = binding.value\n const { once, immediate, ...modifierKeys } = modifiers\n const defaultValue = !Object.keys(modifierKeys).length\n\n const { handler, options } = typeof value === 'object'\n ? value\n : {\n handler: value,\n options: {\n attributes: modifierKeys?.attr ?? defaultValue,\n characterData: modifierKeys?.char ?? defaultValue,\n childList: modifierKeys?.child ?? defaultValue,\n subtree: modifierKeys?.sub ?? defaultValue,\n },\n }\n\n const observer = new MutationObserver((\n mutations: MutationRecord[] = [],\n observer: MutationObserver\n ) => {\n handler?.(mutations, observer)\n\n if (once) unmounted(el, binding)\n })\n\n if (immediate) handler?.([], observer)\n\n el._mutate = Object(el._mutate)\n el._mutate![binding.instance!.$.uid] = { observer }\n\n observer.observe(el, options)\n}\n\nfunction unmounted (el: HTMLElement, binding: MutationDirectiveBinding) {\n if (!el._mutate?.[binding.instance!.$.uid]) return\n\n el._mutate[binding.instance!.$.uid]!.observer.disconnect()\n delete el._mutate[binding.instance!.$.uid]\n}\n\nexport const Mutate: ObjectDirective<HTMLElement> = {\n mounted,\n unmounted,\n}\n\nexport default Mutate\n","import type { DirectiveBinding } from 'vue'\n\ninterface ResizeDirectiveBinding extends Omit<DirectiveBinding, 'modifiers'> {\n value: () => void\n modifiers?: {\n active?: boolean\n quiet?: boolean\n }\n}\n\nfunction mounted (el: HTMLElement, binding: ResizeDirectiveBinding) {\n const handler = binding.value\n const options: AddEventListenerOptions = {\n passive: !binding.modifiers?.active,\n }\n\n window.addEventListener('resize', handler, options)\n\n el._onResize = Object(el._onResize)\n el._onResize![binding.instance!.$.uid] = {\n handler,\n options,\n }\n\n if (!binding.modifiers?.quiet) {\n handler()\n }\n}\n\nfunction unmounted (el: HTMLElement, binding: ResizeDirectiveBinding) {\n if (!el._onResize?.[binding.instance!.$.uid]) return\n\n const { handler, options } = el._onResize[binding.instance!.$.uid]!\n\n window.removeEventListener('resize', handler, options)\n\n delete el._onResize[binding.instance!.$.uid]\n}\n\nexport const Resize = {\n mounted,\n unmounted,\n}\n\nexport default Resize\n","import type { DirectiveBinding } from 'vue'\n\ninterface ScrollDirectiveBinding extends Omit<DirectiveBinding, 'modifiers'> {\n value: EventListener | {\n handler: EventListener\n options?: AddEventListenerOptions\n } | EventListenerObject & { options?: AddEventListenerOptions }\n modifiers?: {\n self?: boolean\n }\n}\n\nfunction mounted (el: HTMLElement, binding: ScrollDirectiveBinding) {\n const { self = false } = binding.modifiers ?? {}\n const value = binding.value\n const options = (typeof value === 'object' && value.options) || { passive: true }\n const handler = typeof value === 'function' || 'handleEvent' in value ? value : value.handler\n\n const target = self\n ? el\n : binding.arg\n ? document.querySelector(binding.arg)\n : window\n\n if (!target) return\n\n target.addEventListener('scroll', handler, options)\n\n el._onScroll = Object(el._onScroll)\n el._onScroll![binding.instance!.$.uid] = {\n handler,\n options,\n // Don't reference self\n target: self ? undefined : target,\n }\n}\n\nfunction unmounted (el: HTMLElement, binding: ScrollDirectiveBinding) {\n if (!el._onScroll?.[binding.instance!.$.uid]) return\n\n const { handler, options, target = el } = el._onScroll[binding.instance!.$.uid]!\n\n target.removeEventListener('scroll', handler, options)\n delete el._onScroll[binding.instance!.$.uid]\n}\n\nfunction updated (el: HTMLElement, binding: ScrollDirectiveBinding) {\n if (binding.value === binding.oldValue) return\n\n unmounted(el, binding)\n mounted(el, binding)\n}\n\nexport const Scroll = {\n mounted,\n unmounted,\n updated,\n}\n\nexport default Scroll\n","// Types\nimport type {\n DirectiveBinding,\n ObjectDirective,\n} from 'vue'\n\n// Utilities\nimport { keys } from '@/util'\n\nexport interface TouchHandlers {\n start?: (wrapperEvent: TouchEvent & TouchWrapper) => void\n end?: (wrapperEvent: TouchEvent & TouchWrapper) => void\n move?: (wrapperEvent: TouchEvent & TouchWrapper) => void\n left?: (wrapper: TouchWrapper) => void\n right?: (wrapper: TouchWrapper) => void\n up?: (wrapper: TouchWrapper) => void\n down?: (wrapper: TouchWrapper) => void\n}\n\nexport interface TouchWrapper extends TouchHandlers {\n touchstartX: number\n touchstartY: number\n touchmoveX: number\n touchmoveY: number\n touchendX: number\n touchendY: number\n offsetX: number\n offsetY: number\n}\n\nexport interface TouchValue extends TouchHandlers {\n parent?: boolean\n options?: AddEventListenerOptions\n}\n\nexport interface TouchStoredHandlers {\n touchstart: (e: TouchEvent) => void\n touchend: (e: TouchEvent) => void\n touchmove: (e: TouchEvent) => void\n}\n\ninterface TouchDirectiveBinding extends Omit<DirectiveBinding, 'value'> {\n value?: TouchValue\n}\n\nconst handleGesture = (wrapper: TouchWrapper) => {\n const { touchstartX, touchendX, touchstartY, touchendY } = wrapper\n const dirRatio = 0.5\n const minDistance = 16\n wrapper.offsetX = touchendX - touchstartX\n wrapper.offsetY = touchendY - touchstartY\n\n if (Math.abs(wrapper.offsetY) < dirRatio * Math.abs(wrapper.offsetX)) {\n wrapper.left && (touchendX < touchstartX - minDistance) && wrapper.left(wrapper)\n wrapper.right && (touchendX > touchstartX + minDistance) && wrapper.right(wrapper)\n }\n\n if (Math.abs(wrapper.offsetX) < dirRatio * Math.abs(wrapper.offsetY)) {\n wrapper.up && (touchendY < touchstartY - minDistance) && wrapper.up(wrapper)\n wrapper.down && (touchendY > touchstartY + minDistance) && wrapper.down(wrapper)\n }\n}\n\nfunction touchstart (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchstartX = touch.clientX\n wrapper.touchstartY = touch.clientY\n\n wrapper.start?.({ ...event, ...wrapper })\n}\n\nfunction touchend (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchendX = touch.clientX\n wrapper.touchendY = touch.clientY\n\n wrapper.end?.({ ...event, ...wrapper })\n\n handleGesture(wrapper)\n}\n\nfunction touchmove (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchmoveX = touch.clientX\n wrapper.touchmoveY = touch.clientY\n\n wrapper.move?.({ ...event, ...wrapper })\n}\n\nfunction createHandlers (value: TouchHandlers = {}): TouchStoredHandlers {\n const wrapper = {\n touchstartX: 0,\n touchstartY: 0,\n touchendX: 0,\n touchendY: 0,\n touchmoveX: 0,\n touchmoveY: 0,\n offsetX: 0,\n offsetY: 0,\n left: value.left,\n right: value.right,\n up: value.up,\n down: value.down,\n start: value.start,\n move: value.move,\n end: value.end,\n }\n\n return {\n touchstart: (e: TouchEvent) => touchstart(e, wrapper),\n touchend: (e: TouchEvent) => touchend(e, wrapper),\n touchmove: (e: TouchEvent) => touchmove(e, wrapper),\n }\n}\n\nfunction mounted (el: HTMLElement, binding: TouchDirectiveBinding) {\n const value = binding.value\n const target = value?.parent ? el.parentElement : el\n const options = value?.options ?? { passive: true }\n const uid = binding.instance?.$.uid // TODO: use custom uid generator\n\n if (!target || !uid) return\n\n const handlers = createHandlers(binding.value)\n\n target._touchHandlers = target._touchHandlers ?? Object.create(null)\n target._touchHandlers![uid] = handlers\n\n keys(handlers).forEach(eventName => {\n target.addEventListener(eventName, handlers[eventName], options)\n })\n}\n\nfunction unmounted (el: HTMLElement, binding: TouchDirectiveBinding) {\n const target = binding.value?.parent ? el.parentElement : el\n const uid = binding.instance?.$.uid\n\n if (!target?._touchHandlers || !uid) return\n\n const handlers = target._touchHandlers[uid]\n\n keys(handlers).forEach(eventName => {\n target.removeEventListener(eventName, handlers[eventName])\n })\n\n delete target._touchHandlers[uid]\n}\n\nexport const Touch: ObjectDirective = {\n mounted,\n unmounted,\n}\n\nexport default Touch\n","// Utilities\nimport { h } from 'vue'\n\n// Components\nimport { VClassIcon } from '@/composables/icons'\n\n// Types\nimport type { IconAliases, IconSet } from '@/composables/icons'\n\nconst aliases: IconAliases = {\n collapse: 'mdi-chevron-up',\n complete: 'mdi-check',\n cancel: 'mdi-close-circle',\n close: 'mdi-close',\n delete: 'mdi-close-circle', // delete (e.g. v-chip close)\n clear: 'mdi-close-circle',\n success: 'mdi-check-circle',\n info: 'mdi-information',\n warning: 'mdi-alert-circle',\n error: 'mdi-close-circle',\n prev: 'mdi-chevron-left',\n next: 'mdi-chevron-right',\n checkboxOn: 'mdi-checkbox-marked',\n checkboxOff: 'mdi-checkbox-blank-outline',\n checkboxIndeterminate: 'mdi-minus-box',\n delimiter: 'mdi-circle', // for carousel\n sort: 'mdi-arrow-up',\n expand: 'mdi-chevron-down',\n menu: 'mdi-menu',\n subgroup: 'mdi-menu-down',\n dropdown: 'mdi-menu-down',\n radioOn: 'mdi-radiobox-marked',\n radioOff: 'mdi-radiobox-blank',\n edit: 'mdi-pencil',\n ratingEmpty: 'mdi-star-outline',\n ratingFull: 'mdi-star',\n ratingHalf: 'mdi-star-half-full',\n loading: 'mdi-cached',\n first: 'mdi-page-first',\n last: 'mdi-page-last',\n unfold: 'mdi-unfold-more-horizontal',\n file: 'mdi-paperclip',\n plus: 'mdi-plus',\n minus: 'mdi-minus',\n}\n\nconst mdi: IconSet = {\n // Not using mergeProps here, functional components merge props by default (?)\n component: (props: any) => h(VClassIcon, { ...props, class: 'mdi' }),\n}\n\nexport { aliases, mdi }\n","import { createDisplay, DisplaySymbol } from '@/composables/display'\nimport { createTheme, ThemeSymbol } from '@/composables/theme'\nimport { defaultSets, IconSymbol } from '@/composables/icons'\nimport { createDefaults, DefaultsSymbol } from '@/composables/defaults'\nimport { createLocaleAdapter, LocaleAdapterSymbol } from '@/composables/locale'\nimport { createRtl, RtlSymbol } from '@/composables/rtl'\nimport { aliases, mdi } from '@/iconsets/mdi'\n\n// Utilities\nimport { reactive } from 'vue'\nimport { mergeDeep } from '@/util'\n\n// Types\nimport type { App, ComponentPublicInstance, InjectionKey } from 'vue'\nimport type { DisplayOptions } from '@/composables/display'\nimport type { ThemeOptions } from '@/composables/theme'\nimport type { IconOptions } from '@/composables/icons'\nimport type { LocaleAdapter, LocaleOptions } from '@/composables/locale'\nimport type { RtlOptions } from '@/composables/rtl'\nimport type { DefaultsOptions } from '@/composables/defaults'\n\nexport * from './composables'\n\nexport interface VuetifyOptions {\n components?: Record<string, any>\n directives?: Record<string, any>\n defaults?: DefaultsOptions\n display?: DisplayOptions\n theme?: ThemeOptions\n icons?: IconOptions\n locale?: (LocaleOptions & RtlOptions) | (LocaleAdapter & RtlOptions)\n}\n\nexport const createVuetify = (options: VuetifyOptions = {}) => {\n const install = (app: App) => {\n const {\n components = {},\n directives = {},\n icons = {},\n } = options\n\n for (const key in directives) {\n const directive = directives[key]\n\n app.directive(key, directive)\n }\n\n for (const key in components) {\n const component = components[key]\n\n app.component(key, component)\n }\n\n app.provide(DefaultsSymbol, createDefaults(options.defaults))\n app.provide(DisplaySymbol, createDisplay(options.display))\n app.provide(ThemeSymbol, createTheme(app, options.theme))\n app.provide(IconSymbol, mergeDeep({\n defaultSet: 'mdi',\n sets: {\n ...defaultSets,\n mdi,\n },\n aliases,\n }, icons))\n const { adapter, rootInstance } = createLocaleAdapter(app, options?.locale)\n app.provide(LocaleAdapterSymbol, adapter)\n app.provide(RtlSymbol, createRtl(rootInstance, options?.locale))\n\n // Vue's inject() can only be used in setup\n function inject (this: ComponentPublicInstance, key: InjectionKey<any> | string) {\n const vm = this.$\n\n const provides = vm.parent?.provides ?? vm.vnode.appContext?.provides\n\n if (provides && (key as any) in provides) {\n return provides[(key as string)]\n }\n }\n\n app.mixin({\n computed: {\n $vuetify () {\n return reactive({\n defaults: inject.call(this, DefaultsSymbol),\n display: inject.call(this, DisplaySymbol),\n theme: inject.call(this, ThemeSymbol),\n icons: inject.call(this, IconSymbol),\n locale: inject.call(this, LocaleAdapterSymbol),\n rtl: inject.call(this, RtlSymbol),\n })\n },\n },\n })\n }\n\n return { install }\n}\n","import './styles/main.sass'\nimport * as components from './components'\nimport * as directives from './directives'\nimport { createVuetify as _createVuetify } from './framework'\nimport type { VuetifyOptions } from './framework'\n\nexport const createVuetify = (options: VuetifyOptions = {}) => {\n return _createVuetify({ components, directives, ...options })\n}\n\nexport const version = __VUETIFY_VERSION__\n\nexport {\n components,\n directives,\n}\nexport * from './composables'\n"],"names":["Box","constructor","x","y","width","height","this","nullifyTransforms","el","rect","getBoundingClientRect","style","getComputedStyle","tx","transform","ta","sx","sy","dx","dy","startsWith","slice","split","to","transformOrigin","parseFloat","indexOf","w","offsetWidth","h","offsetHeight","createMessage","message","vm","parent","_isVue","$parent","$options","$_alreadyWarned","includes","push","tree","currentRecursiveSequence","length","last","map","i","repeat","Array","isArray","formatComponentName","join","generateComponentTrace","consoleWarn","newMessage","console","warn","consoleError","error","classifyRE","includeFile","$root","options","cid","name","_componentTag","file","__file","match","str","replace","c","toUpperCase","deepEqual","a","b","Date","getTime","Object","props","keys","every","p","getObjectValueByPath","obj","path","fallback","undefined","getNestedValue","createRange","start","from","v","k","convertToUnit","unit","isNaN","String","isFinite","Number","isObject","keyCodes","freeze","enter","tab","delete","esc","space","up","down","left","right","end","home","del","backspace","insert","pageup","pagedown","shift","keyValues","o","pick","paths","found","create","rest","key","some","RegExp","test","filterInputAttrs","attrs","wrapInArray","clamp","value","min","max","Math","humanReadableFileSize","bytes","base","prefix","abs","toFixed","mergeDeep","source","target","out","sourceProperty","targetProperty","getUid","_uid","flattenFragments","nodes","node","type","Fragment","children","flat","toKebabCase","toLowerCase","wrapInRef","isRef","ref","findChildren","vnode","child","filter","component","_vnode$component","subTree","CircularBuffer","size","val","_classPrivateFieldGet","values","concat","srgbForwardMatrix","srgbForwardTransform","C","srgbReverseMatrix","srgbReverseTransform","fromXYZ","xyz","rgb","matrix","round","toXYZ","r","g","delta","cielabForwardTransform","t","cbrt","cielabReverseTransform","transformedY","lab","Ln","isCssColor","color","colorToInt","TypeError","substring","char","parseInt","intToHex","hexColor","toString","colorToRGB","int","lighten","amount","CIELAB","sRGB","darken","DefaultsSymbol","Symbol","for","createDefaults","useDefaults","defaults","inject","Error","provideDefaults","injectedDefaults","providedDefaults","newDefaults","computed","scoped","unref","reset","root","properties","prev","len","Infinity","provide","propIsDefined","prop","hasOwnProperty","_vnode$props2","defineComponent","_setup","setup","ctx","getCurrentInstance","_props","shallowReactive","toRaw","watchEffect","globalDefaults","global","componentDefaults","newVal","genericComponent","exposeDefaults","_defineComponent","createSimpleFunctional","klass","tag","capitalize","camelize","default","slots","class","_slots$default","attachedRoot","getRootNode","parentNode","document","composed","standardEasing","_getCurrentInstance","getCurrentInstanceName","_getCurrentInstance$t","getScrollParent","hasScrollbar","parentElement","scrollingElement","getScrollParents","elements","nodeType","Node","ELEMENT_NODE","window","overflowY","scrollHeight","clientHeight","IS_NODE","process","IN_BROWSER","env","DEBUG","NODE_ENV","SUPPORTS_INTERSECTION","SUPPORTS_TOUCH","navigator","maxTouchPoints","SUPPORTS_FOCUS_VISIBLE","CSS","supports","propsFactory","reduce","definition","useRender","render","mainTRC","Rco","Gco","Bco","blkThrs","loConFactor","loConOffset","APCAcontrast","text","background","outputContrast","Ytxt","Ybg","SAPC","ThemeSymbol","makeThemeProps","theme","defaultThemeOptions","defaultTheme","variations","colors","themes","light","dark","surface","primary","secondary","info","success","warning","variables","createTheme","app","head","_context","provides","usehead","parsedOptions","isDisabled","entries","_defaultThemeOptions$","_defaultThemeOptions$2","parseThemeOptions","styleEl","current","computedThemes","original","genColorVariations","onColor","colorVal","blackContrast","whiteContrast","variation","fn","styles","lines","themeName","createCssClass","genCssVariables","Set","flatMap","lightOverlay","darkOverlay","selector","content","line","addHeadObjs","id","updateDOM","updateStyles","genStyleElement","innerHTML","createElement","appendChild","watch","deep","immediate","setTheme","getTheme","themeClasses","provideTheme","newTheme","VuetifyLayoutKey","makeLayoutProps","overlaps","fullHeight","Boolean","makeLayoutItemProps","priority","absolute","useLayout","layout","useLayoutItem","position","layoutSize","elementSize","active","disableTransitions","register","onBeforeUnmount","unregister","createLayout","registered","positions","Map","layoutSizes","priorities","activeItems","transitions","computedOverlaps","overlap","item","top","bottom","topPosition","get","bottomPosition","topAmount","bottomAmount","set","layers","previousLayer","layer","ids","l","generateLayers","sort","_ref3","transitionsEnabled","mainStyles","paddingLeft","paddingRight","paddingTop","paddingBottom","transition","items","index","getLayoutItem","find","findIndex","isHorizontal","isOppositeHorizontal","isOppositeVertical","marginLeft","marginRight","marginTop","marginBottom","zIndex","layoutClasses","badge","close","dataIterator","noResultsText","loadingText","dataTable","itemsPerPageText","ariaLabel","sortDescending","sortAscending","sortNone","activateNone","activateDescending","activateAscending","sortBy","dataFooter","itemsPerPageAll","nextPage","prevPage","firstPage","lastPage","pageText","datePicker","itemsSelected","nextMonthAriaLabel","nextYearAriaLabel","prevMonthAriaLabel","prevYearAriaLabel","noDataText","carousel","next","delimiter","calendar","moreEvents","fileInput","counter","counterSize","timePicker","am","pm","pagination","previous","page","currentPage","first","rating","rtl","af","ar","bg","ca","ckb","cs","de","en","es","et","fa","fi","fr","hr","hu","he","it","ja","ko","lv","lt","nl","no","pl","pt","ro","ru","sk","sl","srCyrl","srLatn","sv","th","tr","az","uk","vi","zhHans","zhHant","RtlSymbol","createRtl","localeScope","createRtlScope","isRtl","defaultRtl","rtlClasses","currentScope","provideRtl","newScope","useRtl","VApp","makeDimensionProps","maxHeight","maxWidth","minHeight","minWidth","useDimension","dimensionStyles","VResponsive","aspectRatio","contentClass","aspectStyles","ratio","useAspectStyles","additional","_slots$additional","unmounted","binding","observe","_observe","_el$_observe2","instance","$","uid","observer","unobserve","Intersect","modifiers","handler","IntersectionObserver","_el$_observe","isIntersecting","entry","quiet","init","once","makeTransitionProps","validator","MaybeTransition","Transition","customProps","mergeProps","VImg","directives","intersect","alt","cover","eager","gradient","lazySrc","rootMargin","threshold","sizes","src","srcset","emits","emit","currentSrc","image","state","naturalWidth","naturalHeight","normalisedSrc","aspect","nextTick","_image$value2","complete","onError","pollForSize","onLoad","getSrc","lazyImg","Image","img","timeout","poll","imgHeight","imgWidth","endsWith","setTimeout","onBeforeMount","containClasses","__image","sources","_slots$sources","withDirectives","vShow","__preloadImage","__placeholder","placeholder","__error","__gradient","backgroundImage","isBooted","stop","requestAnimationFrame","makeBorderProps","border","useBorder","borderClasses","classes","allowedDensities","makeDensityProps","density","useDensity","densityClasses","makeElevationProps","elevation","useElevation","elevationClasses","makeRoundedProps","rounded","useRounded","roundedClasses","makeTagProps","useColor","backgroundIsCssColor","textIsCssColor","colorClasses","colorStyles","backgroundColor","caretColor","useTextColor","textColorClasses","textColorStyles","useBackgroundColor","backgroundColorClasses","backgroundColorStyles","useProxiedModel","defaultValue","transformIn","transformOut","_vm$vnode$props2","internal","newValue","VAppBar","collapse","extensionHeight","floating","modelValue","prominent","prominentHeight","toRef","isExtended","extension","contentHeight","isActive","layoutStyles","hasImage","_slots$img","prepend","append","_slots$extension","allowedVariants","genOverlays","isClickable","makeVariantProps","textColor","variant","useVariant","variantClasses","VBtnGroup","divided","VBtn","makeGroupProps","multiple","mandatory","selectedClass","disabled","makeGroupItemProps","useGroupItem","injectKey","required","group","description","isSelected","toggle","select","useGroup","isUnmounted","reactive","selected","getIds","arr","getValues","groupVm","forceMandatoryValue","step","offset","currentId","currentIndex","newIndex","newItem","onMounted","unwrapped","cmp","splice","internalValue","_ref","VBtnToggleSymbol","VBtnToggle","predefinedSizes","makeSizeProps","useSize","sizeClasses","sizeStyles","IconSymbol","makeIconProps","icon","VComponentIcon","VSvgIcon","inheritAttrs","VLigatureIcon","VClassIcon","defaultSets","svg","VIcon","slotIcon","slot","_flattenFragments$fil","iconData","icons","iconAlias","aliases","_icons$aliases","iconSetName","sets","setName","iconName","defaultSet","useIcon","fontSize","positionValues","makePositionProps","fixed","usePosition","targets","positionClasses","positionStyles","useLink","RouterLink","resolveDynamicComponent","isLink","href","onClick","onClickOnce","link","route","makeRouterProps","useBackButton","cb","router","proxy","_getCurrentInstance$p","$router","removeGuard","popped","onPopstate","e","replaced","addEventListener","beforeEach","removeEventListener","rippleStop","webkitTransform","opacity","isTouchEvent","isKeyboardEvent","ripples","show","_ripple","_el$_ripple2","enabled","container","animation","className","radius","scale","centerX","centerY","localX","localY","touches","clientX","clientY","_el$_ripple","circle","clientWidth","center","sqrt","calculate","dataset","previousPosition","classList","add","activated","performance","now","remove","hide","_el$_ripple3","getElementsByClassName","isHiding","diff","delay","removeChild","isRippleEnabled","rippleShow","element","currentTarget","touched","isTouch","centered","showTimerCommit","showTimer","_element$_ripple","rippleHide","clearTimeout","rippleCancelShow","keyboardRipple","keyboardRippleShow","keyCode","keyboardRippleHide","focusRippleHide","updateRipple","wasEnabled","passive","removeListeners","Ripple","oldValue","prependIcon","appendIcon","block","stacked","ripple","isElevated","Tag","isExactActive","_link$isExactActive","navigate","VAppBarNavIcon","VAppBarTitle","VAvatar","allowedTypes","VAlert","borderColor","closable","closeIcon","closeLabel","sticky","tip","borderProps","variantProps","onCloseClick","hasBorder","hasClose","hasPrepend","hasText","VBadge","bordered","dot","inline","label","location","vertical","horizontal","offsetX","offsetY","calculatePosition","locationStyles","badgeAttrs","_ctx$slots$default","_ctx$slots$badge","VBannerActions","VBannerAvatar","VBannerContent","VBannerText","DisplaySymbol","defaultDisplayOptions","mobileBreakpoint","thresholds","xs","sm","md","lg","xl","xxl","getClientWidth","documentElement","innerWidth","getClientHeight","innerHeight","createDisplay","parseDisplayOptions","platform","userAgent","regexp","android","ios","cordova","electron","chrome","edge","firefox","opera","win","mac","linux","ssr","touch","getPlatform","breakpointValue","mobile","smAndUp","mdAndUp","lgAndUp","xlAndUp","smAndDown","mdAndDown","lgAndDown","xlAndDown","toRefs","useDisplay","display","VBanner","avatar","hasAvatar","hasContent","actions","VBottomNavigation","bgColor","grow","mode","VBreadcrumbsSymbol","VBreadcrumbsItem","activeClass","activeColor","breadcrumbs","VBreadcrumbsDivider","VBreadcrumbs","divider","array","_slots$item","VCardActions","VCardAvatar","VCardHeader","VCardHeaderText","VCardImg","VCardSubtitle","VCardText","VCardTitle","VCard","appendAvatar","hover","prependAvatar","subtitle","title","hasTitle","hasSubtitle","hasHeaderText","hasAppend","hasHeader","_slots$image","media","_slots$media","createCssTransition","origin","hideOnLeave","leaveAbsolute","TransitionGroup","onBeforeEnter","onLeave","offsetTop","offsetLeft","_transitionInitialStyles","setProperty","onAfterLeave","createJavascriptTransition","functions","expandedParentClass","sizeProperty","offsetProperty","_parent","_initialStyle","overflow","onEnter","initialStyle","onAfterEnter","resetStyles","onEnterCancelled","onLeaveCancelled","VDialogTransition","pointerEvents","done","Promise","resolve","getDimensions","animate","duration","easing","finished","then","removeProperty","onBeforeLeave","targetBox","elBox","originX","originY","anchorSide","anchorOffset","getPropertyValue","VCarouselTransition","VCarouselReverseTransition","VTabTransition","VTabReverseTransition","VMenuTransition","VFabTransition","VDialogBottomTransition","VDialogTopTransition","VFadeTransition","VScaleTransition","VScrollXTransition","VScrollXReverseTransition","VScrollYTransition","VScrollYReverseTransition","VSlideXTransition","VSlideXReverseTransition","VSlideYTransition","VSlideYReverseTransition","VExpandTransition","ExpandTransitionGenerator","VExpandXTransition","VMessages","messages","FormKey","makeFormProps","fastFail","lazyValidation","readonly","useForm","makeValidationProps","errorMessages","maxErrors","rules","useValidation","model","form","isPristine","isReadonly","isValid","_props$errorMessages","isValidating","validationClasses","resetValidation","validate","results","rule","result","makeVInputProps","hideDetails","hint","persistentHint","direction","VInput","focused","isFocused","slotProps","hasHint","hasMessages","_props$messages","hasDetails","showMessages","_slots$prepend","_slots$append","details","_slots$details","filterInputProps","VLabel","VSelectionControlGroupSymbol","VSelectionControlGroup","falseIcon","trueIcon","makeSelectionControlProps","trueValue","falseValue","valueComparator","Function","VSelectionControl","isMultiple","currentValue","useSelectionControl","isFocusVisible","input","onFocus","matches","onBlur","_slots$input","filterControlProps","VCheckbox","indeterminate","indeterminateIcon","onChange","inputAttrs","controlAttrs","inputProps","_1","controlProps","_2","_ref2","VChip","draggable","filterIcon","pill","_slots$default2","VCode","VCounter","functional","VDefaultsProvider","makeDelayProps","closeDelay","openDelay","useDelay","delays","runDelayFactory","runCloseDelay","runOpenDelay","makeActivatorProps","activator","activatorProps","openOnClick","openOnHover","openOnFocus","useActivator","activatorEl","isHovered","availableEvents","stopPropagation","activatorEvents","events","click","mouseenter","mouseleave","focus","blur","activatorRef","scope","$el","effectScope","run","bindActivatorProps","getActivator","forEach","removeAttribute","setAttribute","unbindActivatorProps","oldVal","onScopeDispose","_vm$proxy","_vm$proxy$$el","querySelector","_useActivator","flush","parseAnchor","anchor","side","align","oppositeAnchor","physicalAnchor","elementToViewport","point","anchorToPoint","box","positionStrategies","static","connected","data","contentStyles","activatorFixed","offsetParent","isFixedPosition","assign","preferredAnchor","preferredOrigin","doesOverlap","configuredMaxHeight","configuredMinWidth","ResizeObserver","updatePosition","scrollParent","contentEl","viewportWidth","viewportHeight","contentBox","scrollables","querySelectorAll","scrollLeft","scrollTop","initialMaxWidth","initialMaxHeight","scrollTo","freeSpace","fitsY","viewportMargin","floor","targetPoint","contentPoint","disconnect","makePositionStrategyProps","positionStrategy","clean","frames","raf","cancelAnimationFrame","frame","scrollStrategies","bindScroll","scrollElements","contains","scrollbarWidth","scrollableParent","reposition","slow","update","time","makeScrollStrategyProps","scrollStrategy","onScroll","useTeleport","teleportTarget","_target","targetElement","body","cache","has","WeakMap","makeLazyProps","useLazy","stack","defaultConditional","checkEvent","checkIsActive","ShadowRoot","host","include","closeConditional","handleShadow","callback","ClickOutside","mounted","_clickOutside","lastMousedownWasOutside","directive","onMousedown","_el$_clickOutside","Scrim","VOverlay","attach","contained","noClickAnimation","persistent","scrim","scrimColor","isTop","idx","useStack","onResize","async","_props$positionStrate","_positionStrategies$p","usePositionStrategies","onClickOutside","animateClick","onKeydown","useScrollStrategies","_slots$activator","toHandlers","VDialog","fullscreen","retainFocus","scrollable","overlay","onFocusin","before","relatedTarget","after","_overlay$value","focusable","hasAttribute","firstElement","lastElement","preventScroll","VDivider","inset","thickness","dividerStyles","role","VExpansionPanelSymbol","VExpansionPanels","variantClass","makeVExpansionPanelTitleProps","expandIcon","collapseIcon","hideActions","VExpansionPanelTitle","expansionPanel","expanded","VExpansionPanelText","VExpansionPanel","groupItem","isBeforeSelected","isAfterSelected","VFieldLabel","useIntersectionObserver","intersectionRef","VProgressLinear","bgOpacity","bufferValue","clickable","reverse","stream","striped","roundedBar","progress","barColorClasses","barColorStyles","normalizedBuffer","normalizedValue","isReversed","handleClick","borderTop","bar","buffer","makeLoaderProps","loading","useLoader","loaderClasses","LoaderSlot","useFocus","makeVFieldProps","appendInnerIcon","clearable","clearIcon","persistentClear","prependInnerIcon","singleLine","VField","labelRef","floatingLabelRef","controlRef","hasLabel","targetEl","targetRect","targetWidth","transitionDuration","visibility","activeElement","preventDefault","isOutlined","prependInner","hasClear","clear","appendInner","loader","_slots$prependInner","_slots$appendInner","filterFieldProps","LocaleAdapterSymbol","VuetifyLocaleSymbol","useLocale","adapter","getScope","createLocaleAdapter","createScope","createTranslateFunction","n","createNumberFunction","createRoot","rootScope","defaultLocale","fallbackLocale","locale","createDefaultLocaleAdapter","rootInstance","LANG_PREFIX","params","shortKey","currentLocale","Intl","NumberFormat","format","VFileInput","chips","counterSizeString","counterString","showSize","files","internalDirty","isDirty","_model$value","totalBytes","totalBytesReadable","fileNames","counterValue","fileCount","_model$value4","inputRef","hasCounter","rootAttrs","fieldProps","_","fieldClass","selection","VFooter","VForm","submit","valid","itemErrorMessages","createForm","formRef","onReset","onSubmit","VContainer","fluid","breakpoints","breakpointProps","offsetProps","orderProps","propMap","col","order","breakpointClass","VCol","cols","alignSelf","hasColClasses","ALIGNMENT","makeRowProps","def","alignValidator","alignProps","justifyValidator","justifyProps","alignContentValidator","alignContentProps","justify","alignContent","classMap","VRow","dense","noGutters","VSpacer","VHover","onMouseenter","onMouseleave","VItemGroupSymbol","VItemGroup","VItem","VKbd","VLayout","VLayoutItem","VLazy","onIntersect","VListSubheader","singleOpenStrategy","opened","parents","newOpened","multipleOpenStrategy","independentSelectStrategy","in","leafSelectStrategy","single","strategy","classicSelectStrategy","childrenIds","everySelected","noneSelected","classicActiveStrategy","newActive","VNestedSymbol","emptyNested","open","activate","selectedValues","makeNestedProps","selectStrategy","openStrategy","activeStrategy","VListGroupItems","createList","VListGroup","isOpen","isIndeterminate","useNestedGroup","list","useList","headerProps","header","_slots$header","VListItemAvatar","VListItemHeader","VListItemSubtitle","VListItemTitle","VListItem","isNestedActive","computedId","useNestedItem","updateHasPrepend","VListChildren","_props$items","externalHeader","ListKey","VList","nav","subheader","nested","parentId","isGroup","event","newSelected","useNested","VListImg","VListItemMedia","VLocaleProvider","localeInstance","provideLocale","VMain","ssrBootStyles","useSsrBoot","VMenu","disableKeys","kineticEnergyToVelocity","work","calculateImpulseVelocity","samples","d","vprev","vcurr","useVelocity","addMovement","changedTouches","identifier","timeStamp","endTouch","getVelocity","_touches$id","newest","absX","absY","oops","VNavigationDrawer","disableResizeWatcher","expandOnHover","permanent","rail","railWidth","temporary","touchless","isHovering","isTemporary","rootEl","isDragging","dragProgress","dragStyles","onTouchstart","onTouchmove","onTouchend","maybeDragging","getOffset","pos","getProgress","limit","touchX","touchY","inTouchZone","inElement","cancelable","velocity","vx","vy","thresholdMet","useTouch","VNoSsr","_vm$root","appContext","_vm$root$appContext","_vm$root$appContext$a","_container","__vue_app__","useHydration","VPagination","totalVisible","firstIcon","prevIcon","nextIcon","lastIcon","pageAriaLabel","currentPageAriaLabel","firstAriaLabel","previousAriaLabel","nextAriaLabel","lastAriaLabel","ellipsis","showFirstLastPage","maxButtons","resizeRef","contentRect","contentBoxSize","borderBoxSize","useResizeObserver","firstItem","totalWidth","itemWidth","range","middle","ceil","rangeLength","rangeStart","setValue","refs","updateRef","onBeforeUpdate","useRefs","ariaCurrent","controls","prevDisabled","nextDisabled","ariaDisabled","updateFocus","VParallax","_root$value","_root$value2","scrollPos","scrollY","translate","sign","VProgressCircular","rotate","CIRCUMFERENCE","PI","underlayColorClasses","underlayColorStyles","diameter","strokeWidth","strokeDashOffset","VRadio","VRadioGroup","VSliderSymbol","makeSliderProps","thumbColor","thumbLabel","thumbSize","showTicks","showTickLabels","ticks","tickSize","trackColor","trackFillColor","trackSize","useSlider","handleSliderMouseUp","handleMouseMove","getActiveThumb","horizontalDirection","hd","decimals","trimmedStep","trim","numTicks","mousePressed","startOffset","trackContainerRef","roundValue","clamped","parseMouseMove","trackStart","trackLength","_trackContainerRef$va","clickOffset","getPosition","clickPos","thumbMoved","handleStop","handleStart","activeThumb","moveListenerOptions","capture","onMouseMove","onSliderMouseUp","onSliderTouchend","percentage","parsedTicks","hasLabels","onSliderMousedown","onSliderTouchstart","VSliderThumb","slider","relevantKeys","multipliers","_step","steps","multiplier","shiftKey","ctrlKey","parseKeydown","positionPercentage","_slots$thumbLabel2","VSliderTrack","trackFillColorClasses","trackFillColorStyles","trackColorClasses","trackColorStyles","startDir","endDir","backgroundStyles","trackFillWidth","trackFillStyles","computedTicks","tick","directionProperty","_slots$tickLabel2","VRangeSlider","startThumbRef","stopThumbRef","focusedThumb","canSwitch","stopOffset","_startThumbRef$value","_stopThumbRef$value","trackStop","_stopThumbRef$value2","_startThumbRef$value2","VRating","itemAriaLabel","emptyIcon","fullIcon","halfIncrements","itemLabels","itemLabelPosition","increments","hoverIndex","focusIndex","firstRef","isClicking","itemState","isFilled","eventState","onMouseup","VRatingItem","showStar","btnProps","_itemState$value$inde","_itemState$value$inde2","_props$itemLabels","_props$itemLabels2","VSheet","VSlider","thumbContainerRef","_thumbContainerRef$va","VSwitch","loaderColor","control","VSystemBar","lightsOut","VTable","fixedHeader","fixedFooter","_slots$top","_slots$bottom","VTextarea","autoGrow","autofocus","persistentPlaceholder","persistentCounter","noResize","rows","maxRows","suffix","controlHeight","maxlength","sizerRef","calculateInputHeight","padding","lineHeight","showPlaceholder","_ref4","dirtyTypes","VTextField","vInputRef","vFieldRef","Proxy","Reflect","getOwnPropertyDescriptor","useForwardRef","VThemeProvider","withBackground","VTimelineSymbol","VTimelineDivider","hideDot","lineColor","iconColor","fillDot","dotColor","timeline","lineColorStyles","lineColorClasses","VTimelineItem","hideOpposite","dotSize","dotRef","_newValue$$el$querySe2","opposite","_slots$opposite","VTimeline","lineInset","lineThickness","truncateLine","sideClass","VTooltip","args","VValidation","validation","_mutate","_el$_mutate","Mutate","modifierKeys","attributes","attr","characterData","childList","subtree","sub","MutationObserver","mutations","Resize","_binding$modifiers","_onResize","_binding$modifiers2","_el$_onResize","self","arg","_onScroll","_el$_onScroll","Scroll","updated","touchstart","wrapper","touchstartX","touchstartY","touchend","touchendX","touchendY","handleGesture","touchmove","touchmoveX","touchmoveY","move","Touch","_binding$instance","handlers","createHandlers","_touchHandlers","eventName","_binding$instance2","cancel","checkboxOn","checkboxOff","checkboxIndeterminate","expand","menu","subgroup","dropdown","radioOn","radioOff","edit","ratingEmpty","ratingFull","ratingHalf","unfold","plus","minus","mdi","createVuetify","install","components","_vm$parent","_vm$vnode$appContext","mixin","$vuetify","call","_createVuetify"],"mappings":"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"}