{"version":3,"file":"vuetify.min.js","sources":["../src/util/console.ts","../../../node_modules/@vuetify/v0/dist/utilities/index.mjs","../src/util/globals.ts","../src/util/helpers.ts","../src/util/anchor.ts","../src/util/box.ts","../src/util/animation.ts","../src/util/bindProps.ts","../src/util/color/APCA.ts","../src/util/color/transformCIELAB.ts","../src/util/color/transformSRGB.ts","../src/util/colorUtils.ts","../src/util/propsFactory.ts","../src/composables/component.ts","../src/util/getCurrentInstance.ts","../src/util/injectSelf.ts","../src/composables/defaults.ts","../src/util/defineComponent.tsx","../src/util/createSimpleFunctional.ts","../src/util/deepEqual.ts","../src/util/dom.ts","../src/util/easing.ts","../src/util/events.ts","../src/util/getScrollParent.ts","../src/util/useRender.ts","../src/composables/icons.tsx","../src/iconsets/mdi.ts","../src/blueprints/md1.ts","../src/blueprints/md2.ts","../src/blueprints/md3.ts","../src/composables/resizeObserver.ts","../src/composables/layout.ts","../src/composables/toggleScope.ts","../src/composables/proxiedModel.ts","../src/locale/en.ts","../src/locale/adapters/vuetify.ts","../src/composables/locale.ts","../src/composables/theme.ts","../src/components/VApp/VApp.tsx","../src/composables/tag.ts","../src/components/VToolbar/VToolbarTitle.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/VDefaultsProvider/VDefaultsProvider.tsx","../src/composables/dimensions.ts","../src/components/VResponsive/VResponsive.tsx","../src/composables/color.ts","../src/composables/rounded.ts","../src/composables/transition.ts","../src/directives/intersect/index.ts","../src/components/VImg/VImg.tsx","../src/composables/border.ts","../src/composables/elevation.ts","../src/composables/location.ts","../src/components/VToolbar/VToolbar.tsx","../src/composables/scroll.ts","../src/composables/ssrBoot.ts","../src/components/VAppBar/VAppBar.tsx","../src/composables/density.ts","../src/composables/size.ts","../src/composables/variant.tsx","../src/components/VBtnGroup/VBtnGroup.tsx","../src/composables/group.ts","../src/components/VBtnToggle/VBtnToggle.tsx","../src/components/VIcon/VIcon.tsx","../src/composables/intersectionObserver.ts","../src/composables/reveal.ts","../src/components/VProgressCircular/VProgressCircular.tsx","../src/components/VProgressLinear/chunks.ts","../src/components/VProgressLinear/VProgressLinear.tsx","../src/composables/loader.tsx","../src/composables/position.ts","../src/composables/router.tsx","../src/directives/ripple/index.ts","../src/components/VBtn/VBtn.tsx","../src/composables/selectLink.ts","../src/components/VAppBar/VAppBarNavIcon.tsx","../src/components/VAppBar/VAppBarTitle.tsx","../src/components/VAlert/VAlertTitle.ts","../src/composables/iconSizes.ts","../src/components/VAlert/VAlert.tsx","../src/components/VThemeProvider/VThemeProvider.tsx","../src/components/VBadge/VBadge.tsx","../src/components/VAvatar/VAvatar.tsx","../src/components/VLabel/VLabel.tsx","../src/components/VSelectionControlGroup/VSelectionControlGroup.tsx","../src/components/VSelectionControl/VSelectionControl.tsx","../src/components/VCheckbox/VCheckboxBtn.tsx","../src/components/VInput/InputIcon.tsx","../src/components/VMessages/VMessages.tsx","../src/composables/focus.ts","../src/composables/form.ts","../src/composables/rules/rules.ts","../src/composables/validation.ts","../src/components/VInput/VInput.tsx","../src/composables/forwardRefs.ts","../src/components/VCheckbox/VCheckbox.tsx","../src/composables/display.ts","../src/composables/goto.ts","../src/components/VSlideGroup/helpers.ts","../src/components/VSlideGroup/VSlideGroup.tsx","../src/components/VChipGroup/VChipGroup.tsx","../src/components/VChip/VChip.tsx","../src/components/VDivider/VDivider.tsx","../src/components/VList/list.ts","../src/composables/nested/activeStrategies.ts","../src/composables/nested/openStrategies.ts","../src/composables/nested/selectStrategies.ts","../src/composables/nested/nested.ts","../src/util/throttle.ts","../src/components/VList/VListGroup.tsx","../src/components/VList/VListItemSubtitle.tsx","../src/components/VList/VListItemTitle.ts","../src/components/VList/VListItem.tsx","../src/components/VList/VListSubheader.tsx","../src/components/VList/VListChildren.tsx","../src/composables/list-items.ts","../src/components/VList/VList.tsx","../src/components/VList/VListImg.ts","../src/components/VList/VListItemAction.tsx","../src/components/VList/VListItemMedia.tsx","../src/components/VMenu/shared.ts","../src/components/VOverlay/util/point.ts","../src/components/VOverlay/locationStrategies.ts","../src/util/isFixedPosition.ts","../src/components/VOverlay/requestNewFrame.ts","../src/components/VOverlay/scrollStrategies.ts","../src/composables/delay.ts","../src/components/VOverlay/useActivator.tsx","../src/composables/focusTrap.ts","../src/composables/hydration.ts","../src/composables/lazy.ts","../src/composables/scopeId.ts","../src/composables/stack.ts","../src/directives/click-outside/index.ts","../src/components/VOverlay/VOverlay.tsx","../src/composables/teleport.ts","../src/components/VMenu/VMenu.tsx","../src/components/VSheet/VSheet.tsx","../src/components/VCounter/VCounter.tsx","../src/components/VField/VFieldLabel.tsx","../src/components/VField/VField.tsx","../src/composables/autocomplete.ts","../src/composables/autofocus.ts","../src/components/VTextField/VTextField.tsx","../src/components/VVirtualScroll/VVirtualScrollItem.tsx","../src/composables/virtual.ts","../src/components/VVirtualScroll/VVirtualScroll.tsx","../../../node_modules/@vuetify/v0/dist/toArray-MY9Kb1Qy.mjs","../../../node_modules/@vuetify/v0/dist/composables-8xtFVviy.mjs","../src/labs/VHighlight/VHighlight.tsx","../src/components/VSelect/useAutofill.ts","../src/components/VSelect/useFocusRepair.ts","../src/components/VSelect/useScrolling.ts","../src/composables/openOnFocus.ts","../src/components/VSelect/useSelectionMenu.ts","../src/composables/focusGroups.ts","../src/composables/filter.tsx","../src/composables/menuActivator.ts","../src/components/VSelect/VSelect.tsx","../src/components/VAutocomplete/VAutocomplete.tsx","../src/components/VBanner/VBannerActions.tsx","../src/components/VBanner/VBannerText.ts","../src/components/VBanner/VBanner.tsx","../src/components/VBottomNavigation/VBottomNavigation.tsx","../src/components/VDialog/VDialog.tsx","../src/components/VBottomSheet/VBottomSheet.tsx","../src/components/VBreadcrumbs/VBreadcrumbsDivider.tsx","../src/components/VBreadcrumbs/VBreadcrumbsItem.tsx","../src/components/VBreadcrumbs/VBreadcrumbs.tsx","../src/components/VIconBtn/VIconBtn.tsx","../src/components/VCalendar/util/timestamp.ts","../src/components/VCalendar/util/dateTimeUtils.ts","../src/composables/date/adapters/vuetify.ts","../src/composables/date/date.ts","../src/components/VCalendar/composables/calendarBase.ts","../src/components/VCalendar/composables/times.ts","../src/components/VCalendar/composables/calendarWithIntervals.ts","../src/components/VCalendar/composables/intervalHighlight.tsx","../src/directives/resize/index.ts","../src/components/VCalendar/VCalendarDaily.tsx","../src/components/VCalendar/util/parser.ts","../src/components/VCalendar/VCalendarCategory.tsx","../src/composables/hotkey/key-aliases.ts","../src/composables/hotkey/hotkey-parsing.ts","../src/composables/hotkey/hotkey.ts","../src/composables/mask/mask.ts","../src/components/VCalendar/VCalendarWeekly.tsx","../src/components/VCalendar/modes/common.ts","../src/components/VCalendar/modes/column.ts","../src/components/VCalendar/modes/stack.ts","../src/components/VCalendar/modes/index.ts","../src/components/VCalendar/util/events.ts","../src/components/VCalendar/composables/calendarWithEvents.tsx","../src/components/VCalendar/VCalendar.tsx","../src/components/VCard/VCardActions.tsx","../src/components/VCard/VCardSubtitle.tsx","../src/components/VCard/VCardTitle.ts","../src/components/VCard/VCardItem.tsx","../src/components/VCard/VCardText.tsx","../src/components/VCard/VCard.tsx","../src/directives/touch/index.ts","../src/components/VWindow/VWindow.tsx","../src/components/VCarousel/VCarousel.tsx","../src/components/VWindow/VWindowItem.tsx","../src/components/VCarousel/VCarouselItem.tsx","../src/components/VCode/index.ts","../src/components/VColorPicker/VColorPickerCanvas.tsx","../src/components/VColorPicker/util/index.ts","../src/components/VColorPicker/VColorPickerEdit.tsx","../src/components/VSlider/slider.ts","../src/components/VSlider/VSliderThumb.tsx","../src/components/VSlider/VSliderTrack.tsx","../src/components/VSlider/VSlider.tsx","../src/components/VColorPicker/VColorPickerPreview.tsx","../src/util/colors.ts","../src/components/VColorPicker/VColorPickerSwatches.tsx","../src/components/VPicker/VPickerTitle.ts","../src/components/VPicker/VPicker.tsx","../src/components/VColorPicker/VColorPicker.tsx","../src/components/VConfirmEdit/VConfirmEdit.tsx","../src/components/VColorInput/VColorInput.tsx","../src/components/VCombobox/VCombobox.tsx","../src/components/VDataTable/composables/expand.ts","../src/components/VDataTable/composables/group.ts","../src/components/VDataTable/composables/options.ts","../src/components/VDataTable/composables/paginate.ts","../src/components/VDataTable/composables/select.ts","../src/components/VDataTable/composables/sort.ts","../src/components/VDataIterator/composables/items.ts","../src/components/VDataIterator/VDataIterator.tsx","../src/components/VPagination/VPagination.tsx","../src/composables/refs.ts","../src/components/VDataTable/VDataTableFooter.tsx","../src/components/VDataTable/VDataTableColumn.tsx","../src/components/VDataTable/composables/headers.ts","../src/components/VDataTable/composables/loading.ts","../src/components/VDataTable/VDataTableHeaders.tsx","../src/components/VDataTable/VDataTableGroupHeaderRow.tsx","../src/components/VDataTable/VDataTableRow.tsx","../src/components/VDataTable/VDataTableRows.tsx","../src/components/VTable/VTable.tsx","../src/components/VDataTable/composables/items.ts","../src/components/VDataTable/VDataTable.tsx","../src/components/VDataTable/VDataTableVirtual.tsx","../src/components/VDataTable/VDataTableServer.tsx","../src/components/VGrid/VContainer.tsx","../src/components/VGrid/VCol.ts","../src/components/VGrid/VRow.ts","../src/components/VGrid/VSpacer.ts","../src/components/VDatePicker/VDatePickerControls.tsx","../src/components/VDatePicker/VDatePickerHeader.tsx","../src/composables/calendar.ts","../src/composables/virtualFocus.ts","../src/composables/gridSelection.ts","../src/composables/rangePicker.ts","../src/components/VDatePicker/VDatePickerMonth.tsx","../src/components/VDatePicker/VDatePickerMonths.tsx","../src/components/VDatePicker/VDatePickerYears.tsx","../src/components/VDatePicker/VDatePicker.tsx","../src/composables/segmentedMask/segmentedMask.ts","../src/composables/segmentedMask/edit.ts","../src/composables/segmentedMask/presets.ts","../src/composables/dateFormat.ts","../src/composables/segmentedMask/formatHint.ts","../src/components/VDateInput/VDateInput.tsx","../src/components/VEmptyState/VEmptyState.tsx","../src/components/VExpansionPanel/shared.ts","../src/components/VExpansionPanel/VExpansionPanelText.tsx","../src/components/VExpansionPanel/VExpansionPanelTitle.tsx","../src/components/VExpansionPanel/VExpansionPanel.tsx","../src/components/VExpansionPanel/VExpansionPanels.tsx","../src/components/VFab/VFab.tsx","../src/composables/fileDrop.ts","../src/composables/fileFilter.ts","../src/components/VFileInput/VFileInput.tsx","../src/components/VFileUpload/VFileUploadItem.tsx","../src/components/VFileUpload/fileKey.ts","../src/components/VFileUpload/VFileUploadDropzone.tsx","../src/components/VFileUpload/VFileUploadList.tsx","../src/components/VFileUpload/VFileUpload.tsx","../src/components/VFooter/VFooter.tsx","../src/components/VForm/VForm.tsx","../src/components/VKbd/VKbd.tsx","../src/components/VHotkey/VHotkey.tsx","../src/components/VHover/VHover.tsx","../src/components/VInfiniteScroll/VInfiniteScroll.tsx","../src/components/VItemGroup/VItemGroup.tsx","../src/components/VItemGroup/VItem.tsx","../src/components/VLayout/VLayout.tsx","../src/components/VLayout/VLayoutItem.tsx","../src/components/VLazy/VLazy.tsx","../src/components/VLocaleProvider/VLocaleProvider.tsx","../src/components/VMain/VMain.tsx","../src/composables/touch.ts","../src/components/VNavigationDrawer/touch.ts","../src/components/VNavigationDrawer/VNavigationDrawer.tsx","../src/components/VNavigationDrawer/sticky.ts","../src/components/VNoSsr/VNoSsr.tsx","../src/components/VNumberInput/format.ts","../src/components/VNumberInput/typing.ts","../src/components/VNumberInput/VNumberInput.tsx","../src/components/VNumberInput/hold.ts","../src/components/VOtpInput/shared.ts","../src/components/VOtpInput/VOtpField.tsx","../src/components/VOtpInput/VOtpGroup.tsx","../src/components/VOtpInput/VOtpSeparator.tsx","../src/components/VOtpInput/useOtpInput.ts","../src/components/VOtpInput/VOtpInput.tsx","../src/components/VParallax/VParallax.tsx","../src/components/VPullToRefresh/VPullToRefresh.tsx","../src/components/VRadio/VRadio.tsx","../src/components/VRadioGroup/VRadioGroup.tsx","../src/components/VRangeSlider/VRangeSlider.tsx","../src/components/VRating/VRating.tsx","../src/components/VSkeletonLoader/VSkeletonLoader.tsx","../src/components/VSlideGroup/VSlideGroupItem.tsx","../src/components/VSnackbarQueue/queue.ts","../src/components/VSnackbar/VSnackbar.tsx","../src/components/VSnackbarQueue/VSnackbarQueue.tsx","../src/composables/documentVisibility.ts","../src/components/VTooltip/VTooltip.tsx","../src/components/VSparkline/VSparklineTooltip.tsx","../src/components/VSparkline/util/path.ts","../src/components/VSparkline/util/line.ts","../src/components/VSparkline/util/monotone.ts","../src/components/VSparkline/VBarline.tsx","../src/components/VSparkline/VTrendline.tsx","../src/components/VSparkline/VSparkline.tsx","../src/components/VSpeedDial/VSpeedDial.tsx","../src/components/VStepper/shared.ts","../src/components/VStepper/VStepperActions.tsx","../src/components/VStepper/VStepperHeader.ts","../src/components/VStepper/VStepperItem.tsx","../src/components/VStepper/VStepperWindow.tsx","../src/components/VStepper/VStepperWindowItem.tsx","../src/components/VStepper/VStepper.tsx","../src/components/VStepperVertical/VStepperVerticalActions.tsx","../src/components/VStepperVertical/VStepperVerticalItem.tsx","../src/components/VStepperVertical/VStepperVertical.tsx","../src/components/VSwitch/VSwitch.tsx","../src/components/VSystemBar/VSystemBar.tsx","../src/components/VTabs/shared.ts","../src/components/VTabs/VTab.tsx","../src/components/VTabs/VTabsWindow.tsx","../src/components/VTabs/VTabsWindowItem.tsx","../src/components/VTabs/VTabs.tsx","../src/components/VTextarea/VTextarea.tsx","../src/components/VTimeline/VTimelineDivider.tsx","../src/components/VTimeline/VTimelineItem.tsx","../src/components/VTimeline/VTimeline.tsx","../src/components/VTimePicker/VTimePickerClock.tsx","../src/components/VTimePicker/VTimePickerField.tsx","../src/components/VTimePicker/util.ts","../src/components/VTimePicker/useTimeValidation.ts","../src/components/VTimePicker/VTimePickerControls.tsx","../src/components/VTimePicker/VTimePicker.tsx","../src/components/VToolbar/VToolbarItems.tsx","../src/components/VTreeview/VTreeviewGroup.tsx","../src/components/VTreeview/shared.ts","../src/components/VTreeview/VTreeviewItem.tsx","../src/components/VTreeview/useTreeviewKeyboard.ts","../src/components/VTreeview/VTreeviewChildren.tsx","../src/util/indentLines.ts","../src/components/VTreeview/open.ts","../src/components/VTreeview/VTreeview.tsx","../src/components/VValidation/VValidation.tsx","../src/directives/mutate/index.ts","../src/directives/scroll/index.ts","../src/directives/tooltip/index.ts","../src/composables/directiveComponent.ts","../src/icons.ts","../src/framework.ts","../src/entry-bundler.ts","../src/composables/rules/plugin.ts"],"sourcesContent":["/* eslint-disable no-console */\n\n// Utilities\nimport { warn } from 'vue'\n\nexport function consoleWarn (message: string): void {\n  warn(`Vuetify: ${message}`)\n}\n\nexport function consoleError (message: string): void {\n  warn(`Vuetify error: ${message}`)\n}\n\nexport function deprecate (original: string, replacement: string | string[]) {\n  replacement = Array.isArray(replacement)\n    ? replacement.slice(0, -1).map(s => `'${s}'`).join(', ') + ` or '${replacement.at(-1)}'`\n    : `'${replacement}'`\n  warn(`[Vuetify UPGRADE] '${original}' is deprecated, use ${replacement} instead.`)\n}\nexport function breaking (original: string, replacement: string) {\n  // warn(`[Vuetify 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`)\n}\nexport function removed (original: string) {\n  // warn(`[Vuetify REMOVED] '${original}' has been removed. You can safely omit it.`)\n}\n","import { t as IN_BROWSER } from \"../globals-wvVdMRFF.mjs\";\nimport * as Vue from \"vue\";\nimport { useId as useId$1 } from \"vue\";\n//#region src/utilities/color.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction hexToRgb(hex) {\n\tconst clean = hex.startsWith(\"#\") ? hex.slice(1) : hex;\n\tif (clean.length === 3 || clean.length === 4) {\n\t\tconst r = Number.parseInt(clean[0] + clean[0], 16);\n\t\tconst g = Number.parseInt(clean[1] + clean[1], 16);\n\t\tconst b = Number.parseInt(clean[2] + clean[2], 16);\n\t\tconst a = clean.length === 4 ? Number.parseInt(clean[3] + clean[3], 16) : void 0;\n\t\treturn /* @__PURE__ */ isUndefined(a) ? {\n\t\t\tr,\n\t\t\tg,\n\t\t\tb\n\t\t} : {\n\t\t\tr,\n\t\t\tg,\n\t\t\tb,\n\t\t\ta\n\t\t};\n\t}\n\tconst r = Number.parseInt(clean.slice(0, 2), 16);\n\tconst g = Number.parseInt(clean.slice(2, 4), 16);\n\tconst b = Number.parseInt(clean.slice(4, 6), 16);\n\tconst a = clean.length === 8 ? Number.parseInt(clean.slice(6, 8), 16) : void 0;\n\treturn /* @__PURE__ */ isUndefined(a) ? {\n\t\tr,\n\t\tg,\n\t\tb\n\t} : {\n\t\tr,\n\t\tg,\n\t\tb,\n\t\ta\n\t};\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction rgbToHex({ r, g, b, a }) {\n\tconst hex = \"#\" + [\n\t\tr,\n\t\tg,\n\t\tb\n\t].map((c) => c.toString(16).padStart(2, \"0\")).join(\"\");\n\tif (!/* @__PURE__ */ isUndefined(a)) return hex + a.toString(16).padStart(2, \"0\");\n\treturn hex;\n}\n//#endregion\n//#region src/utilities/apca.ts\nconst Rco = .2126729;\nconst Gco = .7151522;\nconst Bco = .072175;\nconst normBG = .56;\nconst normTXT = .57;\nconst revBG = .65;\nconst revTXT = .62;\nconst blkThrs = .022;\nconst blkClmp = 1.414;\nconst scaleBoW = 1.14;\nconst scaleWoB = 1.14;\nconst loBoWoffset = .027;\nconst loWoBoffset = .027;\nconst deltaYmin = 5e-4;\nfunction linearize(channel) {\n\tconst val = channel / 255;\n\treturn val <= .04045 ? val / 12.92 : Math.pow((val + .055) / 1.055, 2.4);\n}\nfunction luminance(rgb) {\n\treturn Rco * linearize(rgb.r) + Gco * linearize(rgb.g) + Bco * linearize(rgb.b);\n}\nfunction clamp$1(y) {\n\treturn y > blkThrs ? y : y + Math.pow(blkThrs - y, blkClmp);\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction apca(text, background) {\n\tconst txtY = clamp$1(luminance(text));\n\tconst bgY = clamp$1(luminance(background));\n\tif (Math.abs(bgY - txtY) < deltaYmin) return 0;\n\tlet contrast;\n\tif (bgY > txtY) {\n\t\tcontrast = (Math.pow(bgY, normBG) - Math.pow(txtY, normTXT)) * scaleBoW;\n\t\treturn contrast < loBoWoffset ? 0 : (contrast - loBoWoffset) * 100;\n\t} else {\n\t\tcontrast = (Math.pow(bgY, revBG) - Math.pow(txtY, revTXT)) * scaleWoB;\n\t\treturn contrast > -loWoBoffset ? 0 : (contrast + loWoBoffset) * 100;\n\t}\n}\nconst BLACK = {\n\tr: 0,\n\tg: 0,\n\tb: 0\n};\nconst WHITE = {\n\tr: 255,\n\tg: 255,\n\tb: 255\n};\n/* @__NO_SIDE_EFFECTS__ */\nfunction foreground(hex) {\n\tconst rgb = /* @__PURE__ */ hexToRgb(hex);\n\treturn Math.abs(/* @__PURE__ */ apca(BLACK, rgb)) > Math.abs(/* @__PURE__ */ apca(WHITE, rgb)) ? \"#000000\" : \"#ffffff\";\n}\n//#endregion\n//#region src/utilities/diacritics.ts\nconst COMBINING_MARKS = /[\\u0300-\\u036F]/g;\nconst FINAL_SIGMA = /ς/g;\nfunction lower(str) {\n\treturn str.toLowerCase().replace(FINAL_SIGMA, \"σ\");\n}\nconst SPECIAL_LETTERS = {\n\tł: \"l\",\n\tø: \"o\",\n\tđ: \"d\",\n\tð: \"d\",\n\tþ: \"th\",\n\tħ: \"h\",\n\tŧ: \"t\",\n\tŋ: \"n\",\n\tß: \"ss\",\n\tæ: \"ae\",\n\tœ: \"oe\",\n\tı: \"i\",\n\tŁ: \"L\",\n\tØ: \"O\",\n\tĐ: \"D\",\n\tÐ: \"D\",\n\tÞ: \"Th\",\n\tĦ: \"H\",\n\tŦ: \"T\",\n\tŊ: \"N\",\n\tẞ: \"Ss\",\n\tÆ: \"Ae\",\n\tŒ: \"Oe\"\n};\nconst SPECIAL_LETTER = /* @__PURE__ */ new RegExp(`[${Object.keys(SPECIAL_LETTERS).join(\"\")}]`, \"g\");\nfunction fold(str) {\n\treturn str.normalize(\"NFD\").replace(COMBINING_MARKS, \"\").replace(SPECIAL_LETTER, (char) => SPECIAL_LETTERS[char]);\n}\nfunction foldWithMap(str, ignoreCase, foldAccents) {\n\tlet folded = \"\";\n\tconst map = [];\n\tlet index = 0;\n\tfor (const char of str) {\n\t\tconst raw = ignoreCase ? lower(char) : char;\n\t\tconst chunk = foldAccents ? fold(raw) : raw;\n\t\tfolded += chunk;\n\t\tfor (let unit = 0; unit < chunk.length; unit++) map.push(index);\n\t\tindex += char.length;\n\t}\n\tmap.push(str.length);\n\treturn {\n\t\tfolded,\n\t\tmap\n\t};\n}\nfunction collect(haystack, needle, matchAll) {\n\tconst ranges = [];\n\tlet index = haystack.indexOf(needle);\n\twhile (index !== -1) {\n\t\tranges.push([index, index + needle.length]);\n\t\tif (!matchAll) break;\n\t\tindex = haystack.indexOf(needle, index + needle.length);\n\t}\n\treturn ranges;\n}\nfunction remap(map, start, end) {\n\tconst sourceStart = map[start];\n\tlet sourceEnd = map[end];\n\tif (end > 0 && map[end] === map[end - 1]) {\n\t\tlet index = end;\n\t\tconst current = map[end];\n\t\twhile (index < map.length && map[index] === current) index++;\n\t\tsourceEnd = map[index];\n\t}\n\treturn [sourceStart, sourceEnd];\n}\nfunction project(ranges, map) {\n\tconst projected = [];\n\tfor (const [start, end] of ranges) {\n\t\tconst span = remap(map, start, end);\n\t\tconst last = projected.at(-1);\n\t\tif (!last || last[0] !== span[0] || last[1] !== span[1]) projected.push(span);\n\t}\n\treturn projected;\n}\nfunction search(text, query, ignoreCase, foldQuery, foldTarget, matchAll) {\n\tconst folded = foldQuery ? fold(query) : query;\n\tconst needle = ignoreCase ? lower(folded) : folded;\n\tif (needle.length === 0) return [];\n\tif (!foldTarget) {\n\t\tif (!ignoreCase) return collect(text, needle, matchAll);\n\t\tconst lowered = lower(text);\n\t\tif (lowered.length === text.length) return collect(lowered, needle, matchAll);\n\t}\n\tconst { folded: haystack, map } = foldWithMap(text, ignoreCase, foldTarget);\n\treturn project(collect(haystack, needle, matchAll), map);\n}\nfunction mergeRanges(a, b) {\n\tconst combined = [...a, ...b].toSorted((x, y) => x[0] - y[0] || x[1] - y[1]);\n\tconst merged = [];\n\tfor (const range of combined) {\n\t\tconst last = merged.at(-1);\n\t\tif (last && range[0] < last[1]) continue;\n\t\tmerged.push(range);\n\t}\n\treturn merged;\n}\n/**\n* Finds `[start, end]` index pairs where `query` occurs in `text`, optionally\n* folding accents on either side. Returned indices always address the original\n* `text`, even when folding or case-conversion changed its length.\n*\n* Directional folding (`'query'` or `'target'`) only transforms one side, but\n* a spelling that's already identical on both sides — accents and all — is\n* merged in verbatim, so folding one side never hides a match the other side\n* already has.\n*\n* @param text The string to search.\n* @param query The term to look for. An empty query yields no ranges.\n* @param options Optional `ignoreCase`, `ignoreAccents`, `matchAll`.\n* @returns Ranges into `text`, where `end` is exclusive.\n*\n* @example\n* ```ts\n* import { findMatchRanges } from '@vuetify/v0'\n*\n* findMatchRanges('Zürich', 'zurich', { ignoreCase: true, ignoreAccents: true })\n* // [[0, 6]]\n*\n* findMatchRanges('Łódź', 'Lo', { ignoreAccents: 'target' })\n* // [[0, 2]]\n*\n* findMatchRanges('… Kraków …', 'Kraków', { ignoreAccents: 'query' })\n* // [[2, 8]] — typing the exact accented name always finds itself\n* ```\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction findMatchRanges(text, query, options = {}) {\n\tconst { ignoreCase = false, ignoreAccents = false, matchAll = false } = options;\n\tconst foldQuery = ignoreAccents === true || ignoreAccents === \"query\";\n\tconst foldTarget = ignoreAccents === true || ignoreAccents === \"target\";\n\tif (foldQuery === foldTarget) return search(text, query, ignoreCase, foldQuery, foldTarget, matchAll);\n\tconst merged = mergeRanges(search(text, query, ignoreCase, false, false, true), search(text, query, ignoreCase, foldQuery, foldTarget, true));\n\treturn matchAll ? merged : merged.slice(0, 1);\n}\n//#endregion\n//#region src/utilities/instance.ts\n/**\n* Vue 3.6+ exposes `currentInstance` for Vapor mode compatibility.\n* `getCurrentInstance()` returns null in Vapor components by design,\n* so we access `currentInstance` directly when available.\n*\n* Uses dynamic key to avoid bundler static analysis warnings.\n*\n* @see https://github.com/orgs/vuejs/discussions/13629\n* @internal\n*/\nconst INSTANCE_KEY = \"currentInstance\";\nfunction getInstanceCompat() {\n\tconst vueExports = Vue;\n\tif (INSTANCE_KEY in vueExports) return vueExports[INSTANCE_KEY];\n\treturn Vue.getCurrentInstance();\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction instanceExists() {\n\treturn !/* @__PURE__ */ isNull(getInstanceCompat());\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction instanceName() {\n\treturn getInstanceCompat()?.type?.name;\n}\n//#endregion\n//#region src/utilities/helpers.ts\n/**\n* @module utilities/helpers\n*\n* @remarks\n* Collection of utility functions for type checking, object manipulation,\n* and common transformations. All exports are tree-shakeable.\n*/\n/**\n* Checks if a value is a function\n*\n* @param item The value to check\n* @returns True if the value is a function\n*\n* @example\n* ```ts\n* isFunction(() => {})  // true\n* isFunction('string')  // false\n* ```\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isFunction(item) {\n\treturn typeof item === \"function\";\n}\n/**\n* Checks if a value is a string\n*\n* @param item The value to check\n* @returns True if the value is a string\n*\n* @example\n* ```ts\n* isString('hello')  // true\n* isString(123)      // false\n* ```\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isString(item) {\n\treturn typeof item === \"string\";\n}\n/**\n* Checks if a value is a number\n*\n* @param item The value to check\n* @returns True if the value is a number (including NaN)\n*\n* @example\n* ```ts\n* isNumber(123)       // true\n* isNumber(NaN)       // true\n* isNumber('123')     // false\n* ```\n*\n* @see {@link isNaN} to check for NaN specifically\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isNumber(item) {\n\treturn typeof item === \"number\";\n}\n/**\n* Checks if a value is a boolean\n*\n* @param item The value to check\n* @returns True if the value is a boolean\n*\n* @example\n* ```ts\n* isBoolean(true)   // true\n* isBoolean(false)  // true\n* isBoolean(0)      // false\n* ```\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isBoolean(item) {\n\treturn typeof item === \"boolean\";\n}\n/**\n* Checks if a value is a plain object (excludes null and arrays)\n*\n* @param item The value to check\n* @returns True if the value is a plain object\n*\n* @remarks\n* Returns false for null and arrays, even though `typeof null === 'object'`\n* and `typeof [] === 'object'` in JavaScript.\n*\n* `Record<string, any>` is load-bearing: TypeScript does not grant interfaces\n* an implicit index signature, so `Record<string, unknown>` destroys known\n* property types on interface-typed values and fails to subtract\n* `Record<string, any>` members in the negative branch.\n*\n* @example\n* ```ts\n* isObject({})        // true\n* isObject({ a: 1 })  // true\n* isObject(null)      // false\n* isObject([])        // false\n* ```\n*\n* @see {@link isArray} to check for arrays\n* @see {@link isNull} to check for null\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isObject(item) {\n\treturn typeof item === \"object\" && item !== null && !Array.isArray(item);\n}\n/**\n* Checks if a value is a thenable (any object with a `.then` method).\n* Duck-typed — matches both native Promises and any Promise-like.\n*\n* @param item The value to check\n* @returns True if the value has a callable `then` property\n*\n* @example\n* ```ts\n* isThenable(Promise.resolve())     // true\n* isThenable({ then: () => {} })    // true\n* isThenable({})                    // false\n* isThenable('string')              // false\n* ```\n*\n* @remarks Use this when duck-typing async behavior — for example, rejecting\n* a callback that returned a Promise-like when only synchronous returns are\n* supported. If you specifically want native Promise instances, use\n* `instanceof Promise` directly.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isThenable(item) {\n\treturn /* @__PURE__ */ isObject(item) && \"then\" in item && /* @__PURE__ */ isFunction(item.then);\n}\n/**\n* Checks if a value is an array\n*\n* @param item The value to check\n* @returns True if the value is an array\n*\n* @example\n* ```ts\n* isArray([])        // true\n* isArray([1, 2, 3]) // true\n* isArray('string')  // false\n* ```\n*\n* @remarks The guard keeps whichever array constituents the input already had —\n* element types, tuple arity and `readonly` all survive, and the `else` branch\n* drops exactly those constituents. Three branches, in order:\n*\n* 1. `0 extends (1 & T)` detects an `any` input and yields `T[]` (`any[]`),\n*    matching `Array.isArray` so callback parameters stay contextually typed.\n* 2. Nothing array-shaped to extract (an `unknown` value, say) falls back to\n*    `unknown[]`, reproducing the previous narrowing so mutation and assignment\n*    to `unknown[]` keep compiling.\n* 3. Otherwise the array constituents of `T` pass through untouched.\n*\n* `NoInfer<T[]>` widens the parameter just enough for TypeScript to accept the\n* first branch (a predicate must be assignable to its parameter's type) without\n* letting an array argument capture the inference site.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isArray(item) {\n\treturn Array.isArray(item);\n}\n/**\n* Checks if a value is a DOM Element\n*\n* @param item The value to check\n* @returns True if the value is a DOM Element\n*\n* @example\n* ```ts\n* isElement(document.body) // true\n* isElement('string')      // false\n* isElement(null)          // false\n* ```\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isElement(item) {\n\treturn typeof Element !== \"undefined\" && item instanceof Element;\n}\n/**\n* Resolve the deepest focused element, piercing open shadow roots.\n*\n* `document.activeElement` returns the shadow *host* when focus is inside an\n* open shadow root — walk down through open roots so focus/keyboard logic\n* resolves the real focused element (e.g. a control inside a custom element).\n* Returns the same value as `document.activeElement` in light DOM, and `null`\n* under SSR. Closed shadow roots can't be traversed.\n*\n* @example\n* ```ts\n* const active = getActiveElement()\n* ```\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getActiveElement() {\n\tif (!IN_BROWSER) return null;\n\tlet active = document.activeElement;\n\twhile (active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;\n\treturn active;\n}\n/**\n* Checks if a value is null\n*\n* @param item The value to check\n* @returns True if the value is null\n*\n* @example\n* ```ts\n* isNull(null)      // true\n* isNull(undefined) // false\n* ```\n*\n* @see {@link isUndefined} to check for undefined\n* @see {@link isNullOrUndefined} to check for either\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isNull(item) {\n\treturn item === null;\n}\n/**\n* Checks if a value is null or undefined\n*\n* @param item The value to check\n* @returns True if the value is null or undefined\n*\n* @remarks\n* Uses loose equality (`== null`) which matches both null and undefined.\n*\n* @example\n* ```ts\n* isNullOrUndefined(null)      // true\n* isNullOrUndefined(undefined) // true\n* isNullOrUndefined(0)         // false\n* isNullOrUndefined('')        // false\n* ```\n*\n* @see {@link isNull} to check for null only\n* @see {@link isUndefined} to check for undefined only\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isNullOrUndefined(item) {\n\treturn item == null;\n}\n/**\n* Checks if a value is undefined\n*\n* @param item The value to check\n* @returns True if the value is undefined\n*\n* @example\n* ```ts\n* isUndefined(undefined) // true\n* isUndefined(null)      // false\n* ```\n*\n* @see {@link isNull} to check for null\n* @see {@link isNullOrUndefined} to check for either\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isUndefined(item) {\n\treturn item === void 0;\n}\n/**\n* Checks if a value is a primitive (string, number, or boolean)\n*\n* @param item The value to check\n* @returns True if the value is a string, number, or boolean\n*\n* @example\n* ```ts\n* isPrimitive('hello') // true\n* isPrimitive(123)     // true\n* isPrimitive(true)    // true\n* isPrimitive({})      // false\n* isPrimitive(null)    // false\n* ```\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isPrimitive(item) {\n\treturn typeof item === \"string\" || typeof item === \"number\" || typeof item === \"boolean\";\n}\n/**\n* Checks if a value is a symbol\n*\n* @param item The value to check\n* @returns True if the value is a symbol\n*\n* @example\n* ```ts\n* isSymbol(Symbol('test')) // true\n* isSymbol('symbol')       // false\n* ```\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isSymbol(item) {\n\treturn typeof item === \"symbol\";\n}\n/**\n* Checks if a value is NaN (Not a Number)\n*\n* @param item The value to check\n* @returns True if the value is NaN\n*\n* @remarks\n* Uses `Number.isNaN()` which only returns true for the actual NaN value,\n* unlike the global `isNaN()` which coerces the argument to a number first.\n*\n* @example\n* ```ts\n* isNaN(NaN)         // true\n* isNaN(123)         // false\n* isNaN('hello')     // false (unlike global isNaN)\n* isNaN(undefined)   // false (unlike global isNaN)\n* ```\n*\n* @see {@link isNumber} to check if a value is a number type\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isNaN(item) {\n\treturn /* @__PURE__ */ isNumber(item) && Number.isNaN(item);\n}\nconst UNSAFE_KEYS = /* @__PURE__ */ new Set([\n\t\"__proto__\",\n\t\"constructor\",\n\t\"prototype\"\n]);\nfunction isPlainObject(value) {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n\tconst proto = Object.getPrototypeOf(value);\n\treturn proto === Object.prototype || proto === null;\n}\n/**\n* Deeply merges source objects into a target object, returning a new object\n*\n* @param target The base object to merge into\n* @param sources One or more source objects to merge from\n* @returns A new merged object (inputs are not mutated)\n*\n* @remarks\n* - Creates and returns a new object — inputs are never mutated\n* - Nested objects are recursively merged\n* - Arrays are replaced, not merged\n* - Primitives from sources overwrite target values\n*\n* @example\n* ```ts\n* const target = { a: 1, b: { c: 2 } }\n* const result = mergeDeep(target, { b: { d: 3 } })\n* // result is { a: 1, b: { c: 2, d: 3 } }\n* // target is unchanged\n*\n* // Multiple sources\n* mergeDeep({}, { a: 1 }, { b: 2 }) // { a: 1, b: 2 }\n*\n* // Arrays are replaced\n* mergeDeep({ arr: [1, 2] }, { arr: [3] }) // { arr: [3] }\n* ```\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction mergeDeep(target, ...sources) {\n\tconst out = {};\n\tfor (const key in target) if (Object.hasOwn(target, key)) out[key] = target[key];\n\tfor (const source of sources) {\n\t\tif (!/* @__PURE__ */ isObject(source)) continue;\n\t\tfor (const key in source) {\n\t\t\tif (UNSAFE_KEYS.has(key)) continue;\n\t\t\tif (!Object.hasOwn(source, key)) continue;\n\t\t\tconst sourceValue = source[key];\n\t\t\tif (/* @__PURE__ */ isUndefined(sourceValue)) continue;\n\t\t\tconst targetValue = out[key];\n\t\t\tout[key] = isPlainObject(sourceValue) && isPlainObject(targetValue) ? /* @__PURE__ */ mergeDeep(targetValue, sourceValue) : sourceValue;\n\t\t}\n\t}\n\treturn out;\n}\nlet idCounter = 0;\n/**\n* Generates a unique ID, using Vue's useId when in component context\n*\n* @returns A unique string ID\n*\n* @remarks\n* - In component setup/lifecycle: Uses Vue's `useId()` for SSR-safe hydration\n* - Outside components: Falls back to sequential counter (`v0-0`, `v0-1`, ...)\n* - Vapor mode compatible\n* - IDs are sequential and predictable — intended for DOM `id`/ARIA wiring only.\n*   Never use them as security tokens (CSRF tokens, session ids, capabilities).\n*\n* @example\n* ```ts\n* // In component setup - SSR safe\n* const id = useId() // 'v:0', 'v:1', etc. (Vue's format)\n*\n* // Outside component - counter fallback\n* const id = useId() // 'v0-0', 'v0-1', etc.\n* ```\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction useId() {\n\tif (/* @__PURE__ */ instanceExists()) return useId$1();\n\tif (typeof (process.env.NODE_ENV !== \"production\") !== \"undefined\" && process.env.NODE_ENV !== \"production\" && !IN_BROWSER) console.warn(\"[v0 warn] useId() called outside component context during SSR. Provide explicit ID to avoid hydration mismatch.\");\n\treturn `v0-${idCounter++}`;\n}\n/**\n* Clamps a value between a minimum and maximum\n*\n* @param value The value to clamp\n* @param min The minimum value (default: 0)\n* @param max The maximum value (default: 1)\n* @returns The clamped value\n*\n* @example\n* ```ts\n* clamp(5, 0, 10)  // 5\n* clamp(-5, 0, 10) // 0\n* clamp(15, 0, 10) // 10\n* ```\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction clamp(value, min = 0, max = 1) {\n\tif (!Number.isFinite(value)) return min;\n\treturn Math.max(min, Math.min(max, value));\n}\n/**\n* Creates an array of sequential numbers\n*\n* @param length The length of the array to create\n* @param start The starting index (default: 0)\n* @returns An array of sequential numbers\n*\n* @example\n* ```ts\n* range(3)     // [0, 1, 2]\n* range(3, 1)  // [1, 2, 3]\n* range(5, 10) // [10, 11, 12, 13, 14]\n* range(0)     // []\n* ```\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction range(length, start = 0) {\n\treturn Array.from({ length }, (_, index) => start + index);\n}\n/**\n* Parses a CSS pixel length into a number\n*\n* @param value The resolved CSS length, e.g. `getComputedStyle(el).marginLeft`\n* @param fallback The value to return when `value` does not parse (default: 0)\n* @returns The parsed number, or `fallback`\n*\n* @remarks\n* Built for reading `getComputedStyle` output, where a length that does not\n* apply resolves to `''` or `'auto'` rather than to a number. An unparseable\n* length returns `fallback`; a length that legitimately parses to `0` returns\n* `0`. That distinction is why this exists — `Number.parseFloat(v) || 0`\n* collapses both cases onto `0`, which is only correct when the fallback is\n* itself `0`.\n*\n* Only the leading number is read, matching `Number.parseFloat`, so any unit\n* suffix is ignored. Values `getComputedStyle` never returns — percentages,\n* `calc()` expressions, multi-value shorthands — are out of scope.\n*\n* @example\n* ```ts\n* pxToNumber('16px')          // 16\n* pxToNumber('0px')           // 0\n* pxToNumber('-4.5px')        // -4.5\n* pxToNumber('auto')          // 0\n* pxToNumber(undefined)       // 0\n*\n* // A non-zero fallback is the case `|| 0` cannot express\n* pxToNumber('auto', 100)     // 100\n* pxToNumber('0px', 100)      // 0\n* ```\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction pxToNumber(value, fallback = 0) {\n\tif (!/* @__PURE__ */ isString(value)) return fallback;\n\tconst parsed = Number.parseFloat(value);\n\treturn /* @__PURE__ */ isNaN(parsed) ? fallback : parsed;\n}\n/**\n* Resolves an iterable of IDs to their items via a getter,\n* filtering out any that return undefined.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction resolveIds(ids, getter) {\n\tconst result = [];\n\tfor (const id of ids) {\n\t\tconst item = getter(id);\n\t\tif (!/* @__PURE__ */ isUndefined(item)) result.push(item);\n\t}\n\treturn result;\n}\n/**\n* Extracts defined index values from an iterable of items.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction resolveIndexes(items) {\n\tconst result = [];\n\tfor (const item of items) {\n\t\tconst index = item?.index;\n\t\tif (!/* @__PURE__ */ isUndefined(index)) result.push(index);\n\t}\n\treturn result;\n}\n//#endregion\n//#region src/utilities/errors.ts\n/**\n* @module utilities/errors\n*\n* @remarks\n* Structured error class thrown by v0 internals. Pattern modeled on\n* tRPC's `TRPCError` and Node's built-in `Error` codes — `code` is a\n* top-level discriminant field on the error, *not* a payload nested\n* inside `Error.cause`. `cause` stays reserved for wrapping the\n* genuine upstream error so error trackers (Sentry's `LinkedErrors`,\n* Datadog RUM, Rollbar) render the chain correctly.\n*\n* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause\n* @see https://nodejs.org/api/errors.html#nodejs-error-codes\n* @see https://trpc.io/docs/server/error-handling\n* @see https://docs.sentry.io/platforms/javascript/configuration/integrations/linkederrors/\n*/\n/**\n* Structured error thrown by v0 internals.\n*\n* @remarks\n* Carries a stable {@link V0ErrorCode} discriminant on `code` so\n* consumers, devtools panels, and error trackers can identify the\n* error without parsing the message string. Domain context lives in\n* top-level fields per code (`key` for `V0_CONTEXT_MISSING`, `plugin`\n* for `V0_PLUGIN_MISSING`), populated from a {@link V0ErrorDetails}\n* argument and merged onto the instance at construction time.\n*\n* `cause` is forwarded to `Error`'s standard `ErrorOptions.cause` slot\n* and is intended to carry a wrapped upstream error, not metadata.\n*\n* Prefer {@link isV0Error} over manual `instanceof` checks at the\n* narrowing site — the guard intersects the instance type with the\n* matching {@link V0ErrorDetails} arm, so per-code fields are typed.\n*\n* @example Author site\n* ```ts\n* throw new V0Error('Context not found.', { code: 'V0_CONTEXT_MISSING', key })\n* ```\n*\n* @example Author site with upstream wrap\n* ```ts\n* try {\n*   JSON.parse(raw)\n* } catch (err) {\n*   throw new V0Error('Failed to hydrate registry.', {\n*     code: 'V0_CONTEXT_MISSING',\n*     key: 'v0:registry',\n*     cause: err,\n*   })\n* }\n* ```\n*\n* @example Consumer site\n* ```ts\n* try {\n*   useContext(myKey)\n* } catch (err) {\n*   if (isV0Error(err, 'V0_CONTEXT_MISSING')) {\n*     console.log(err.key)\n*   }\n* }\n* ```\n*/\nvar V0Error = class extends Error {\n\tname = \"V0Error\";\n\tcode;\n\tkey;\n\tplugin;\n\tpalette;\n\tseed;\n\tvariant;\n\tadapter;\n\tprefix;\n\tconstructor(message, details) {\n\t\tconst { cause, ...rest } = details;\n\t\tsuper(message, /* @__PURE__ */ isUndefined(cause) ? void 0 : { cause });\n\t\tthis.code = details.code;\n\t\tfor (const [key, value] of Object.entries(rest)) {\n\t\t\tif (UNSAFE_KEYS.has(key)) continue;\n\t\t\tthis[key] = value;\n\t\t}\n\t}\n};\n/**\n* Type guard for v0-thrown errors.\n*\n* @param value The value to test.\n* @param code Optional discriminant — narrow the result to a specific\n*   {@link V0ErrorCode} so per-code fields become required.\n*\n* @remarks\n* Without the optional `code` argument, the guard verifies the value\n* is a {@link V0Error} instance. With the `code` argument, the guard\n* also narrows the instance type to the intersection with the matching\n* {@link V0ErrorDetails} arm — fields like `key` or `plugin` change\n* from optional to required on the narrowed type.\n*\n* @example Narrow to any v0 error\n* ```ts\n* if (isV0Error(err)) {\n*   console.log(err.code)\n* }\n* ```\n*\n* @example Narrow to a specific code\n* ```ts\n* if (isV0Error(err, 'V0_CONTEXT_MISSING')) {\n*   console.log(err.key) // typed as string | symbol, not string | symbol | undefined\n* }\n* ```\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isV0Error(value, code) {\n\tif (!(value instanceof V0Error)) return false;\n\treturn /* @__PURE__ */ isUndefined(code) || value.code === code;\n}\n//#endregion\nexport { UNSAFE_KEYS, V0Error, apca, clamp, findMatchRanges, foreground, getActiveElement, hexToRgb, instanceExists, instanceName, isArray, isBoolean, isElement, isFunction, isNaN, isNull, isNullOrUndefined, isNumber, isObject, isPrimitive, isString, isSymbol, isThenable, isUndefined, isV0Error, mergeDeep, pxToNumber, range, resolveIds, resolveIndexes, rgbToHex, useId };\n","import { isFunction } from './v0'\n\nexport const IN_BROWSER = typeof window !== 'undefined'\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_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window\nexport const SUPPORTS_MATCH_MEDIA = IN_BROWSER && 'matchMedia' in window && isFunction(window.matchMedia)\nexport const PREFERS_REDUCED_MOTION = () => (\n  SUPPORTS_MATCH_MEDIA && window.matchMedia('(prefers-reduced-motion: reduce)').matches\n)\nexport const IS_WEBKIT = IN_BROWSER && CSS?.supports?.('-webkit-backdrop-filter', 'none')\n","// Utilities\nimport {\n  camelize,\n  capitalize,\n  Comment,\n  computed,\n  Fragment,\n  isProxy,\n  isReactive,\n  isRef,\n  isVNode,\n  shallowRef,\n  toRaw,\n  toRef,\n  unref,\n} from 'vue'\nimport { consoleError } from '@/util/console'\nimport { IN_BROWSER } from '@/util/globals'\n\n// Types\nimport type {\n  ComponentInternalInstance,\n  ComponentPublicInstance,\n  ComputedGetter,\n  InjectionKey,\n  PropType,\n  Ref,\n  ToRef,\n  VNode,\n  VNodeArrayChildren,\n  VNodeChild,\n} from 'vue'\nimport { isBoolean, isFunction, isNull, isNullOrUndefined, isNumber, isString, isUndefined } from './v0'\n\nexport function getNestedValue (obj: any, path: readonly (string | number)[], fallback?: any): any {\n  const last = path.length - 1\n\n  if (last < 0) return isUndefined(obj) ? fallback : obj\n\n  for (let i = 0; i < last; i++) {\n    if (isNullOrUndefined(obj)) {\n      return fallback\n    }\n    obj = obj[path[i]]\n  }\n\n  if (isNullOrUndefined(obj)) return fallback\n\n  return obj[path[last]] === undefined ? fallback : obj[path[last]]\n}\n\nexport function getObjectValueByPath (obj: any, path?: string | null, fallback?: any): any {\n  // credit: http://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-with-string-key#comment55278413_6491621\n  if (isNullOrUndefined(obj) || !path || !isString(path)) return fallback\n  if (!isUndefined(obj[path])) 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\nexport type SelectItemKey<T = Record<string, any>> =\n  | boolean | null | undefined // Ignored\n  | string // Lookup by key, can use dot notation for nested objects\n  | readonly (string | number)[] // Nested lookup by key, each array item is a key in the next level\n  | ((item: T, fallback?: any) => any)\n\nexport function getPropertyFromItem (\n  item: any,\n  property: SelectItemKey,\n  fallback?: any\n): any {\n  if (property === true) return isUndefined(item) ? fallback : item\n\n  if (isNullOrUndefined(property) || isBoolean(property)) return fallback\n\n  if (item !== Object(item)) {\n    if (!isFunction(property)) return fallback\n\n    const value = property(item, fallback)\n\n    return typeof value === 'undefined' ? fallback : value\n  }\n\n  if (isString(property)) return getObjectValueByPath(item, property, fallback)\n\n  if (Array.isArray(property)) return getNestedValue(item, property, fallback)\n\n  if (!isFunction(property)) return fallback\n\n  const value = property(item, fallback)\n\n  return typeof value === 'undefined' ? fallback : value\n}\n\nexport function getZIndex (el?: Element | null): number {\n  if (!el || el.nodeType !== Node.ELEMENT_NODE) return 0\n\n  const index = Number(window.getComputedStyle(el).getPropertyValue('z-index'))\n\n  if (!index) return getZIndex(el.parentNode as Element)\n  return index\n}\n\nexport function isPercentage (value: unknown): value is string {\n  return isString(value) && value.endsWith('%')\n}\n\nexport function resolveSize (value: number | string | undefined, spanSize = 0): number {\n  return isPercentage(value)\n    ? parseFloat(value) / 100 * spanSize\n    : parseFloat(String(value)) || 0\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 (isNullOrUndefined(str) || str === '') {\n    return undefined\n  }\n  const num = Number(str)\n  if (isNaN(num)) {\n    return String(str)\n  } else if (!isFinite(num)) {\n    return undefined\n  } else {\n    return `${num}${unit}`\n  }\n}\n\nexport function isPlainObject (obj: any): obj is Record<string, any> {\n  let proto\n  return !!obj && typeof obj === 'object' && (\n    (proto = Object.getPrototypeOf(obj)) === Object.prototype ||\n    !proto\n  )\n}\n\nexport function refElement (obj?: ComponentPublicInstance<any> | HTMLElement): HTMLElement | undefined {\n  if (obj && '$el' in obj) {\n    const el = obj.$el as HTMLElement\n    if (el?.nodeType === Node.TEXT_NODE) {\n      // Multi-root component, use the first element\n      return el.nextElementSibling as HTMLElement\n    }\n    return el\n  }\n  return obj as HTMLElement\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: Record<string, string> = 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 extends {}> (o: O) {\n  return Object.keys(o) as (keyof O)[]\n}\n\nexport function has<T extends string> (obj: object, key: T[]): obj is Record<T, unknown> {\n  return key.every(k => obj.hasOwnProperty(k))\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\n// Array of keys\nexport function pick<\n  T extends object,\n  U extends Extract<keyof T, string>\n> (obj: T, paths: readonly U[]): MaybePick<T, U> {\n  const found: any = {}\n\n  for (const key of paths) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      found[key] = obj[key]\n    }\n  }\n\n  return found\n}\n\n// Array of keys\nexport function pickWithRest<\n  T extends object,\n  U extends Extract<keyof T, string>,\n  E extends Extract<keyof T, string>\n> (obj: T, paths: U[], exclude?: E[]): [yes: MaybePick<T, Exclude<U, E>>, no: Omit<T, Exclude<U, E>>]\n// Array of keys or RegExp to test keys against\nexport function pickWithRest<\n  T extends object,\n  U extends Extract<keyof T, string>,\n  E extends Extract<keyof T, string>\n> (obj: T, paths: (U | RegExp)[], exclude?: E[]): [yes: Partial<T>, no: Partial<T>]\nexport function pickWithRest<\n  T extends object,\n  U extends Extract<keyof T, string>,\n  E extends Extract<keyof T, string>\n> (obj: T, paths: (U | RegExp)[], exclude?: E[]): [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      ) && !exclude?.some(path => path === key)\n    ) {\n      found[key] = obj[key]\n    } else {\n      rest[key] = obj[key]\n    }\n  }\n\n  return [found, rest]\n}\n\nexport function omit<\n  T extends object,\n  U extends Extract<keyof T, string>\n> (obj: T, exclude: U[]): Omit<T, U> {\n  const clone = { ...obj }\n\n  exclude.forEach(prop => delete clone[prop])\n\n  return clone\n}\n\nconst onRE = /^on[^a-z]/\nexport const isOn = (key: string) => onRE.test(key)\n\nconst bubblingEvents = [\n  'onAfterscriptexecute',\n  'onAnimationcancel',\n  'onAnimationend',\n  'onAnimationiteration',\n  'onAnimationstart',\n  'onAuxclick',\n  'onBeforeinput',\n  'onBeforescriptexecute',\n  'onChange',\n  'onClick',\n  'onCompositionend',\n  'onCompositionstart',\n  'onCompositionupdate',\n  'onContextmenu',\n  'onCopy',\n  'onCut',\n  'onDblclick',\n  'onFocusin',\n  'onFocusout',\n  'onFullscreenchange',\n  'onFullscreenerror',\n  'onGesturechange',\n  'onGestureend',\n  'onGesturestart',\n  'onGotpointercapture',\n  'onInput',\n  'onKeydown',\n  'onKeypress',\n  'onKeyup',\n  'onLostpointercapture',\n  'onMousedown',\n  'onMousemove',\n  'onMouseout',\n  'onMouseover',\n  'onMouseup',\n  'onMousewheel',\n  'onPaste',\n  'onPointercancel',\n  'onPointerdown',\n  'onPointerenter',\n  'onPointerleave',\n  'onPointermove',\n  'onPointerout',\n  'onPointerover',\n  'onPointerup',\n  'onReset',\n  'onSelect',\n  'onSubmit',\n  'onTouchcancel',\n  'onTouchend',\n  'onTouchmove',\n  'onTouchstart',\n  'onTransitioncancel',\n  'onTransitionend',\n  'onTransitionrun',\n  'onTransitionstart',\n  'onWheel',\n]\n\nconst compositionIgnoreKeys = [\n  'ArrowUp',\n  'ArrowDown',\n  'ArrowRight',\n  'ArrowLeft',\n  'Enter',\n  'Escape',\n  'Tab',\n  ' ',\n]\n\nexport function isComposingIgnoreKey (e: KeyboardEvent): boolean {\n  return e.isComposing && compositionIgnoreKeys.includes(e.key)\n}\n\n/**\n * Filter attributes that should be applied to\n * the root element of an input component. Remaining\n * attributes should be passed to the <input> element inside.\n */\nexport function filterInputAttrs (attrs: Record<string, unknown>) {\n  const [events, props] = pickWithRest(attrs, [onRE])\n  const inputEvents = omit(events, bubblingEvents)\n  const [rootAttrs, inputAttrs] = pickWithRest(props, ['class', 'style', 'id', 'inert', /^data-/])\n  Object.assign(rootAttrs, events)\n  Object.assign(inputAttrs, inputEvents)\n  return [rootAttrs, inputAttrs]\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\ntype IfAny<T, Y, N> = 0 extends (1 & T) ? Y : N;\nexport function wrapInArray<T> (\n  v: T | null | undefined\n): T extends readonly any[]\n    ? IfAny<T, T[], T>\n    : NonNullable<T>[] {\n  return isNullOrUndefined(v)\n    ? [] as any\n    : Array.isArray(v)\n      ? v as any : [v] as any\n}\n\nexport function defaultFilter (value: any, search: string | null, item: any) {\n  return !isNullOrUndefined(value) &&\n    !isNullOrUndefined(search) &&\n    !isBoolean(value) &&\n    value.toString().toLocaleLowerCase().indexOf(search.toLocaleLowerCase()) !== -1\n}\n\nexport function debounce (fn: Function, delay: MaybeRef<number>) {\n  let timeoutId = 0 as any\n  const wrap = (...args: any[]) => {\n    clearTimeout(timeoutId)\n    timeoutId = setTimeout(() => fn(...args), unref(delay))\n  }\n  wrap.clear = () => {\n    clearTimeout(timeoutId)\n  }\n  wrap.immediate = fn\n  return wrap\n}\n\nexport function clamp (value: number, min = 0, max = 1) {\n  return Math.max(min, Math.min(max, value))\n}\n\nexport function getDecimals (value: number) {\n  const trimmedStr = value.toString().trim()\n  return trimmedStr.includes('.')\n    ? (trimmedStr.length - trimmedStr.indexOf('.') - 1)\n    : 0\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 padStart (str: string, length: number, char = '0') {\n  return char.repeat(Math.max(0, length - str.length)) + str\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 chunkArray (array: any[], size = 1) {\n  return Array.from({ length: Math.ceil(array.length / size) }, (v, i) =>\n    array.slice(i * size, i * size + size)\n  )\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 mergeDeep (\n  source: Record<string, any> = {},\n  target: Record<string, any> = {},\n  arrayFn?: (a: unknown[], b: unknown[]) => unknown[],\n  targetCondition?: (k: string, v: unknown) => boolean,\n) {\n  const 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 targetProperty = target[key]\n\n    if (targetCondition && !targetCondition(key, targetProperty)) {\n      continue\n    }\n\n    const sourceProperty = source[key]\n\n    // Only continue deep merging if\n    // both properties are plain objects\n    if (isPlainObject(sourceProperty) && isPlainObject(targetProperty)) {\n      out[key] = mergeDeep(sourceProperty, targetProperty, arrayFn, targetCondition)\n\n      continue\n    }\n\n    if (arrayFn && Array.isArray(sourceProperty) && Array.isArray(targetProperty)) {\n      out[key] = arrayFn(sourceProperty, targetProperty)\n\n      continue\n    }\n\n    out[key] = targetProperty\n  }\n\n  return out\n}\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 function toKebabCase (str = '') {\n  if (toKebabCase.cache.has(str)) return toKebabCase.cache.get(str)!\n  const kebab = str\n    .replace(/[^a-z]/gi, '-')\n    .replace(/\\B([A-Z])/g, '-$1')\n    .toLowerCase()\n  toKebabCase.cache.set(str, kebab)\n  return kebab\n}\ntoKebabCase.cache = new Map<string, string>()\n\nexport type MaybeRef<T> = T | Ref<T>\n\nexport function findChildrenWithProvide (\n  key: InjectionKey<any> | symbol,\n  vnode?: VNodeChild,\n): ComponentInternalInstance[] {\n  if (!vnode || typeof vnode !== 'object') return []\n\n  if (Array.isArray(vnode)) {\n    return vnode.map(child => findChildrenWithProvide(key, child)).flat(1)\n  } else if (vnode.suspense) {\n    return findChildrenWithProvide(key, vnode.ssContent!)\n  } else if (Array.isArray(vnode.children)) {\n    return vnode.children.map(child => findChildrenWithProvide(key, child)).flat(1)\n  } else if (vnode.component) {\n    if (Object.getOwnPropertyDescriptor(vnode.component.provides, key as symbol)) {\n      return [vnode.component]\n    } else if (vnode.component.subTree) {\n      return findChildrenWithProvide(key, vnode.component.subTree).flat(1)\n    }\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  get isFull () {\n    return this.#arr.length === this.size\n  }\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  clear () {\n    this.#arr.length = 0\n    this.#pointer = 0\n  }\n}\n\nexport type UnionToIntersection<U> =\n  (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never\n\nexport function getEventCoordinates (e: MouseEvent | TouchEvent) {\n  if ('touches' in e) {\n    return { clientX: e.touches[0].clientX, clientY: e.touches[0].clientY }\n  }\n\n  return { clientX: e.clientX, clientY: e.clientY }\n}\n\n// Only allow a single return type\ntype NotAUnion<T> = [T] extends [infer U] ? _NotAUnion<U, U> : never\ntype _NotAUnion<T, U> = U extends any ? [T] extends [U] ? unknown : never : never\n\ntype ToReadonlyRefs<T> = { [K in keyof T]: Readonly<ToRef<T[K]>> }\n\n/**\n * Convert a computed ref to a record of refs.\n * The getter function must always return an object with the same keys.\n */\nexport function destructComputed<T extends object> (getter: ComputedGetter<T & NotAUnion<T>>): ToReadonlyRefs<T>\nexport function destructComputed<T extends object> (getter: ComputedGetter<T>) {\n  const base = computed(getter)\n  const obj = {} as ToReadonlyRefs<T>\n  for (const key in base.value) {\n    obj[key] = toRef(() => base.value[key]) as any\n  }\n  return obj\n}\n\n/** Array.includes but value can be any type */\nexport function includes (arr: readonly any[], val: any) {\n  return arr.includes(val)\n}\n\nexport function eventName (propName: string) {\n  return propName[2].toLowerCase() + propName.slice(3)\n}\n\n// TODO: this should be an array but vue's types don't accept arrays: vuejs/core#8025\nexport type EventProp<T extends any[] = any[], F = (...args: T) => void> = F\nexport const EventProp = <T extends any[] = any[]>() => [Function, Array] as PropType<EventProp<T>>\n\nexport function hasEvent (props: Record<string, any>, name: string) {\n  name = 'on' + capitalize(name)\n  return !!(props[name] || props[`${name}Once`] || props[`${name}Capture`] || props[`${name}OnceCapture`] || props[`${name}CaptureOnce`])\n}\n\nexport function callEvent<T extends any[]> (handler: EventProp<T> | EventProp<T>[] | undefined, ...args: T) {\n  if (Array.isArray(handler)) {\n    for (const h of handler) {\n      h(...args)\n    }\n  } else if (isFunction(handler)) {\n    handler(...args)\n  }\n}\n\nexport function focusableChildren (el: Element, filterByTabIndex = true) {\n  const targets = [\n    'button',\n    '[href]',\n    'input:not([type=\"hidden\"])',\n    'select',\n    'textarea',\n    'details:not(:has(> summary))',\n    'details > summary',\n    '[tabindex]',\n    '[contenteditable]:not([contenteditable=\"false\"])',\n    'audio[controls]',\n    'video[controls]',\n  ]\n    .map(s => `${s}${filterByTabIndex ? ':not([tabindex=\"-1\"])' : ''}:not([disabled], [inert])`)\n    .join(', ')\n\n  let elements\n  try {\n    elements = [...el.querySelectorAll(targets)] as HTMLElement[]\n  } catch (err) {\n    consoleError(String(err))\n    return []\n  }\n\n  return elements\n    .filter(x => !x.closest('[inert]')) // does not have inert parent\n    .filter(x => !!x.offsetParent || x.getClientRects().length > 0) // is rendered\n    .filter(x => !x.parentElement?.closest('details:not([open])') ||\n      (x.tagName === 'SUMMARY' && x.parentElement?.tagName === 'DETAILS')\n    )\n}\n\nexport function getActiveElement (): Element | null {\n  let active = document.activeElement\n  while (active?.shadowRoot?.activeElement) {\n    active = active.shadowRoot.activeElement\n  }\n  return active\n}\n\nexport function getNextElement (elements: HTMLElement[], location?: 'next' | 'prev', condition?: (el: HTMLElement) => boolean) {\n  let _el\n  let idx = elements.indexOf(getActiveElement() as HTMLElement)\n  if (idx < 0) {\n    const focusTarget = location === 'prev' ? elements.at(-1) : elements[0]\n    const focusTargetRole = focusTarget?.getAttribute('role') ?? ''\n    if (['option', 'listbox'].includes(focusTargetRole)) {\n      idx = elements.findIndex(el => el.getAttribute('role') === 'option' && el.getAttribute('aria-selected') === 'true')\n    }\n  }\n  const inc = location === 'next' ? 1 : -1\n  do {\n    idx += inc\n    _el = elements[idx]\n  } while ((!_el || !_el.offsetParent || !(condition?.(_el) ?? true)) && idx < elements.length && idx >= 0)\n  return _el\n}\n\nexport function focusChild (\n  el: Element,\n  location?: 'next' | 'prev' | 'first' | 'last' | number | null,\n  options?: FocusOptions\n) {\n  const focusable = focusableChildren(el)\n\n  if (isNullOrUndefined(location)) {\n    const active = getActiveElement()\n    if (el === active || !el.contains(active)) {\n      focusable[0]?.focus(options)\n    }\n  } else if (location === 'first') {\n    focusable[0]?.focus(options)\n  } else if (location === 'last') {\n    focusable.at(-1)?.focus(options)\n  } else if (isNumber(location)) {\n    focusable[location]?.focus(options)\n  } else {\n    const _el = getNextElement(focusable, location)\n    if (_el) _el.focus(options)\n    else focusChild(el, location === 'next' ? 'first' : 'last', options)\n  }\n}\n\nexport function isEmpty (val: any): boolean {\n  return isNull(val) || isUndefined(val) || (isString(val) && val.trim() === '')\n}\n\nexport function noop () {}\n\n/** Returns null if the selector is not supported or we can't check */\nexport function matchesSelector (el: Element | undefined, selector: string): boolean | null {\n  const supportsSelector = IN_BROWSER &&\n    typeof CSS !== 'undefined' &&\n    typeof CSS.supports !== 'undefined' &&\n    CSS.supports(`selector(${selector})`)\n\n  if (!supportsSelector) return null\n\n  try {\n    return !!el && el.matches(selector)\n  } catch (err) {\n    return null\n  }\n}\n\nexport function isAutofill (e: Event) {\n  return !e.isTrusted ||\n    !!matchesSelector(e.target as Element, ':autofill') ||\n    !!matchesSelector(e.target as Element, ':-webkit-autofill')\n}\n\nexport function ensureValidVNode (vnodes: VNodeArrayChildren): VNodeArrayChildren | null {\n  return vnodes.some(child => {\n    if (!isVNode(child)) return true\n    if (child.type === Comment) return false\n    return child.type !== Fragment ||\n      ensureValidVNode(child.children as VNodeArrayChildren)\n  })\n    ? vnodes\n    : null\n}\n\ntype Slot<T> = [T] extends [never] ? () => VNodeChild : (arg: T) => VNodeChild\n\nexport function renderSlot <T> (slot: Slot<never> | undefined, fallback?: Slot<never> | undefined): VNodeChild\nexport function renderSlot <T> (slot: Slot<T> | undefined, props: T, fallback?: Slot<T> | undefined): VNodeChild\nexport function renderSlot (slot?: Slot<unknown>, props?: unknown, fallback?: Slot<unknown>) {\n  // TODO: check if slot returns elements: #18308\n  return slot?.(props) ?? fallback?.(props)\n}\n\nexport function defer (timeout: number, cb: () => void) {\n  if (!IN_BROWSER || timeout === 0) {\n    cb()\n\n    return () => {}\n  }\n\n  const timeoutId = window.setTimeout(cb, timeout)\n\n  return () => window.clearTimeout(timeoutId)\n}\n\nexport type TemplateRef = {\n  (target: Element | ComponentPublicInstance | null): void\n  value: HTMLElement | ComponentPublicInstance | null | undefined\n  readonly el: HTMLElement | undefined\n}\nexport function templateRef () {\n  const el = shallowRef<HTMLElement | ComponentPublicInstance | null>()\n  const fn = (target: HTMLElement | ComponentPublicInstance | null) => {\n    el.value = target\n  }\n  Object.defineProperty(fn, 'value', {\n    enumerable: true,\n    get: () => el.value,\n    set: val => el.value = val,\n  })\n  Object.defineProperty(fn, 'el', {\n    enumerable: true,\n    get: () => refElement(el.value),\n  })\n\n  return fn as TemplateRef\n}\n\nexport function checkPrintable (e: KeyboardEvent) {\n  const isPrintableChar = e.key.length === 1\n  const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey\n  return isPrintableChar && noModifier\n}\n\nexport type Primitive = string | number | boolean | symbol | bigint\nexport function isPrimitive (value: unknown): value is Primitive {\n  return isString(value) || isNumber(value) || isBoolean(value) || typeof value === 'bigint'\n}\n\nexport function escapeForRegex (sign: string) {\n  return '\\\\^$*+?.()|{}[]'.includes(sign)\n    ? `\\\\${sign}`\n    : sign\n}\n\nexport function normalizeMinusSign (text: string): string {\n  return text.replace(/−/g, '-')\n}\n\nexport function extractNumber (text: string, decimalDigitsLimit: number | null, decimalSeparator: string) {\n  const onlyValidCharacters = new RegExp(`[\\\\d\\\\-${escapeForRegex(decimalSeparator)}]`)\n  const cleanText = normalizeMinusSign(text).split('')\n    .filter(x => onlyValidCharacters.test(x))\n    .filter((x, i, all) => (i === 0 && /[-]/.test(x)) || // sign allowed at the start\n        (x === decimalSeparator && i === all.indexOf(x)) || // decimal separator allowed only once\n        /\\d/.test(x))\n    .join('')\n\n  if (decimalDigitsLimit === 0) {\n    return cleanText.split(decimalSeparator)[0]\n  }\n\n  const decimalPart = new RegExp(`${escapeForRegex(decimalSeparator)}\\\\d`)\n  if (isNumber(decimalDigitsLimit) && decimalPart.test(cleanText)) {\n    const parts = cleanText.split(decimalSeparator)\n    return [\n      parts[0],\n      parts[1].substring(0, decimalDigitsLimit),\n    ].join(decimalSeparator)\n  }\n\n  return cleanText\n}\n\nexport function camelizeProps<T extends Record<string, unknown>> (props: T | null): T {\n  const out = {} as T\n  for (const prop in props) {\n    out[camelize(prop) as keyof T] = props[prop]\n  }\n  return out\n}\n\nexport function onlyDefinedProps (props: Record<string, any>) {\n  const booleanAttributes = ['checked', 'disabled']\n  return Object.fromEntries(Object.entries(props)\n    .filter(([key, v]) => booleanAttributes.includes(key) ? !!v : !isUndefined(v)))\n}\n\nexport type NonEmptyArray<T> = [T, ...T[]]\n\nexport function deepToRaw<T extends {}> (value: T): T {\n  const objectIterator = (input: any): any => {\n    if (Array.isArray(input)) {\n      return input.map(item => objectIterator(item))\n    }\n    if (isRef(input) || isReactive(input) || isProxy(input)) {\n      return objectIterator(toRaw(input))\n    }\n    if (isPlainObject(input)) {\n      return Object.keys(input).reduce((acc, key) => {\n        acc[key as keyof typeof acc] = objectIterator(input[key])\n        return acc\n      }, {} as T)\n    }\n    return input\n  }\n\n  return objectIterator(value)\n}\n","// Utilities\nimport { includes } from '@/util/helpers'\n\nconst block = ['top', 'bottom'] as const\nconst inline = ['start', 'end', 'left', 'right'] 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: 'left' | 'right' | 'center' }\n  | { side: 'left' | 'right', align: Tblock | 'center' }\n\n/** Parse a raw anchor string into an object */\nexport function parseAnchor (anchor: Anchor, isRtl: boolean) {\n  let [side, align] = anchor.split(' ') as [Tblock | Tinline | 'center', Tblock | Tinline | 'center' | undefined]\n  if (!align) {\n    align =\n      includes(block, side) ? 'start'\n      : includes(inline, side) ? 'top'\n      : 'center'\n  }\n\n  return {\n    side: toPhysical(side, isRtl),\n    align: toPhysical(align, isRtl),\n  } as ParsedAnchor\n}\n\nexport function toPhysical (str: 'center' | Tblock | Tinline, isRtl: boolean) {\n  if (str === 'start') return isRtl ? 'right' : 'left'\n  if (str === 'end') return isRtl ? 'left' : 'right'\n  return str\n}\n\nexport function flipSide (anchor: ParsedAnchor) {\n  return {\n    side: {\n      center: 'center',\n      top: 'bottom',\n      bottom: 'top',\n      left: 'right',\n      right: 'left',\n    }[anchor.side],\n    align: anchor.align,\n  } as ParsedAnchor\n}\n\nexport function flipAlign (anchor: ParsedAnchor) {\n  return {\n    side: anchor.side,\n    align: {\n      center: 'center',\n      top: 'bottom',\n      bottom: 'top',\n      left: 'right',\n      right: 'left',\n    }[anchor.align],\n  } as ParsedAnchor\n}\n\nexport function flipCorner (anchor: ParsedAnchor) {\n  return {\n    side: anchor.align,\n    align: anchor.side,\n  } as ParsedAnchor\n}\n\nexport function getAxis (anchor: ParsedAnchor) {\n  return includes(block, anchor.side) ? 'y' : 'x'\n}\n","import { IS_WEBKIT } from './globals'\nimport { isElement } from './v0'\n\nexport class Box {\n  x: number\n  y: number\n  width: number\n  height: number\n\n  constructor (args: Element | {\n    x: number\n    y: number\n    width: number\n    height: number\n  }) {\n    if (isElement(args)) {\n      const pageScale = document.body.currentCSSZoom ?? 1\n      const factor = 1 + (1 - pageScale) / pageScale\n      const { x, y, width, height } = args.getBoundingClientRect()\n\n      this.x = x * factor\n      this.y = y * factor\n      this.width = width * factor\n      this.height = height * factor\n    } else {\n      this.x = args.x\n      this.y = args.y\n      this.width = args.width\n      this.height = args.height\n    }\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\nexport function getOverflow (a: Box, b: Box) {\n  return {\n    x: {\n      before: Math.max(0, b.left - a.left),\n      after: Math.max(0, a.right - b.right),\n    },\n    y: {\n      before: Math.max(0, b.top - a.top),\n      after: Math.max(0, a.bottom - b.bottom),\n    },\n  }\n}\n\nexport function getTargetBox (target: HTMLElement | [x: number, y: number]): Box {\n  if (Array.isArray(target)) {\n    const pageScale = document.body.currentCSSZoom ?? 1\n    const factor = 1 + (1 - pageScale) / pageScale\n\n    return new Box({\n      x: target[0] * factor,\n      y: target[1] * factor,\n      width: 0 * factor,\n      height: 0 * factor,\n    })\n  } else {\n    return new Box(target)\n  }\n}\n\nexport function getElementBox (el: HTMLElement) {\n  if (el === document.documentElement) {\n    if (!visualViewport) {\n      return new Box({\n        x: 0,\n        y: 0,\n        width: document.documentElement.clientWidth,\n        height: document.documentElement.clientHeight,\n      })\n    } else {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Element/currentCSSZoom#browser_compatibility\n      const localWidth = document.body.clientWidth\n      const pageScale = document.body.currentCSSZoom ??\n        (localWidth ? document.documentElement.clientWidth / localWidth : 1)\n\n      return new Box({\n        x: visualViewport.scale > 1 || IS_WEBKIT ? 0 : visualViewport.offsetLeft,\n        y: visualViewport.scale > 1 || IS_WEBKIT ? 0 : visualViewport.offsetTop,\n        width: document.documentElement.clientWidth / pageScale,\n        height: document.documentElement.clientHeight / pageScale,\n      })\n    }\n  } else {\n    return new Box(el)\n  }\n}\n","// Utilities\nimport { Box } from '@/util/box'\n\n/** @see https://stackoverflow.com/a/57876601/2074736 */\nexport function nullifyTransforms (el: HTMLElement): Box {\n  const rect = new Box(el)\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 = Number(ta[0])\n      sy = Number(ta[5])\n      dx = Number(ta[12])\n      dy = Number(ta[13])\n    } else if (tx.startsWith('matrix(')) {\n      ta = tx.slice(7, -1).split(/, /)\n      sx = Number(ta[0])\n      sy = Number(ta[3])\n      dx = Number(ta[4])\n      dy = Number(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 + 1\n    const h = sy ? rect.height / sy : el.offsetHeight + 1\n\n    return new Box({ x, y, width: w, height: h })\n  } else {\n    return new Box(rect)\n  }\n}\n\nexport function animate (\n  el: Element,\n  keyframes: Keyframe[] | PropertyIndexedKeyframes | null,\n  options?: number | KeyframeAnimationOptions\n) {\n  if (typeof el.animate === 'undefined') return { finished: Promise.resolve() }\n\n  let animation: Animation\n  try {\n    animation = el.animate(keyframes, options)\n  } catch (err) {\n    return { finished: Promise.resolve() }\n  }\n\n  if (typeof animation.finished === 'undefined') {\n    (animation as any).finished = new Promise(resolve => {\n      animation.onfinish = () => {\n        resolve(animation)\n      }\n    })\n  }\n\n  return animation\n}\n","// Utilities\nimport { isNullOrUndefined } from './v0'\nimport { eventName, isOn } from '@/util/helpers'\n\nconst handlers = new WeakMap<HTMLElement, Set<[string, () => void]>>()\n\nexport function bindProps (el: HTMLElement, props: Record<string, any>) {\n  Object.keys(props).forEach(k => {\n    if (isOn(k)) {\n      const name = eventName(k)\n      const handler = handlers.get(el)\n      if (isNullOrUndefined(props[k])) {\n        handler?.forEach(v => {\n          const [n, fn] = v\n          if (n === name) {\n            el.removeEventListener(name, fn)\n            handler.delete(v)\n          }\n        })\n      } else if (!handler || ![...handler]?.some(v => v[0] === name && v[1] === props[k])) {\n        el.addEventListener(name, props[k])\n        const _handler = handler || new Set()\n        _handler.add([name, props[k]])\n        if (!handlers.has(el)) handlers.set(el, _handler)\n      }\n    } else {\n      if (isNullOrUndefined(props[k])) {\n        el.removeAttribute(k)\n      } else {\n        el.setAttribute(k, props[k])\n      }\n    }\n  })\n}\n\nexport function unbindProps (el: HTMLElement, props: Record<string, any>) {\n  Object.keys(props).forEach(k => {\n    if (isOn(k)) {\n      const name = eventName(k)\n      const handler = handlers.get(el)\n      handler?.forEach(v => {\n        const [n, fn] = v\n        if (n === name) {\n          el.removeEventListener(name, fn)\n          handler.delete(v)\n        }\n      })\n    } else {\n      el.removeAttribute(k)\n    }\n  })\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// Types\nimport type { RGB } from '@/util'\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: RGB, background: RGB) {\n  // Linearize sRGB\n  const Rtxt = (text.r / 255) ** mainTRC\n  const Gtxt = (text.g / 255) ** mainTRC\n  const Btxt = (text.b / 255) ** mainTRC\n\n  const Rbg = (background.r / 255) ** mainTRC\n  const Gbg = (background.g / 255) ** mainTRC\n  const Bbg = (background.b / 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","// Types\nimport 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 { clamp } from '@/util/helpers'\n\n// Types\nimport type { RGB, XYZ } from '../colorUtils'\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): RGB {\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    // Rescale back to [0, 255]\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  return {\n    r: rgb[0],\n    g: rgb[1],\n    b: rgb[2],\n  }\n}\n\nexport function toXYZ ({ r, g, b }: RGB): 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  r = transform(r / 255)\n  g = transform(g / 255)\n  b = transform(b / 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","// Utilities\nimport { APCAcontrast } from './color/APCA'\nimport { consoleWarn } from './console'\nimport { chunk, has, padEnd } from './helpers'\nimport { isObject } from '@/util'\nimport * as CIELAB from '@/util/color/transformCIELAB'\nimport * as sRGB from '@/util/color/transformSRGB'\n\n// Types\nimport { isNullOrUndefined, isNumber, isString } from './v0'\nimport type { Colors } from '@/composables/theme'\n\nexport type XYZ = [number, number, number]\nexport type LAB = [number, number, number]\nexport type HSV = { h: number, s: number, v: number, a?: number }\nexport type RGB = { r: number, g: number, b: number, a?: number }\nexport type HSL = { h: number, s: number, l: number, a?: number }\nexport type Hex = string & { __hexBrand: never }\nexport type Color = string | number | HSV | RGB | HSL\n\nexport function isCssColor (color?: string | null | false): boolean {\n  return !!color && /^(#|var\\(--|(rgb|hsl)a?\\()/.test(color)\n}\n\nexport function isParsableColor (color: string): boolean {\n  return isCssColor(color) && !/^((rgb|hsl)a?\\()?var\\(--/.test(color)\n}\n\nconst cssColorRe = /^(?<fn>(?:rgb|hsl)a?)\\((?<values>.+)\\)/\nconst mappers = {\n  rgb: (r: number, g: number, b: number, a?: number) => ({ r, g, b, a }),\n  rgba: (r: number, g: number, b: number, a?: number) => ({ r, g, b, a }),\n  hsl: (h: number, s: number, l: number, a?: number) => HSLtoRGB({ h, s, l, a }),\n  hsla: (h: number, s: number, l: number, a?: number) => HSLtoRGB({ h, s, l, a }),\n  hsv: (h: number, s: number, v: number, a?: number) => HSVtoRGB({ h, s, v, a }),\n  hsva: (h: number, s: number, v: number, a?: number) => HSVtoRGB({ h, s, v, a }),\n}\n\nexport function parseColor (color: Color): RGB {\n  if (isNumber(color)) {\n    if (isNaN(color) || color < 0 || color > 0xFFFFFF) { // int can't have opacity\n      consoleWarn(`'${color}' is not a valid hex color`)\n    }\n\n    return {\n      r: (color & 0xFF0000) >> 16,\n      g: (color & 0xFF00) >> 8,\n      b: (color & 0xFF),\n    }\n  } else if (isString(color) && cssColorRe.test(color)) {\n    const { groups } = color.match(cssColorRe)!\n    const { fn, values } = groups as { fn: keyof typeof mappers, values: string }\n    const realValues = values.split(/,\\s*|\\s*\\/\\s*|\\s+/)\n      .map((v, i) => {\n        if (\n          v.endsWith('%') ||\n          // unitless slv are %\n          (i > 0 && i < 3 && ['hsl', 'hsla', 'hsv', 'hsva'].includes(fn))\n        ) {\n          return parseFloat(v) / 100\n        } else {\n          return parseFloat(v)\n        }\n      }) as [number, number, number, number?]\n\n    return mappers[fn](...realValues)\n  } else if (isString(color)) {\n    let hex = color.startsWith('#') ? color.slice(1) : color\n\n    if ([3, 4].includes(hex.length)) {\n      hex = hex.split('').map(char => char + char).join('')\n    } else if (![6, 8].includes(hex.length)) {\n      consoleWarn(`'${color}' is not a valid hex(a) color`)\n    }\n\n    const int = parseInt(hex, 16)\n    if (isNaN(int) || int < 0 || int > 0xFFFFFFFF) {\n      consoleWarn(`'${color}' is not a valid hex(a) color`)\n    }\n\n    return HexToRGB(hex as Hex)\n  } else if (isObject(color)) {\n    if (has(color, ['r', 'g', 'b'])) {\n      return color\n    } else if (has(color, ['h', 's', 'l'])) {\n      return HSVtoRGB(HSLtoHSV(color))\n    } else if (has(color, ['h', 's', 'v'])) {\n      return HSVtoRGB(color)\n    }\n  }\n\n  throw new TypeError(`Invalid color: ${isNullOrUndefined(color) ? color : (String(color) || (color as any).constructor.name)}\\nExpected #hex, #hexa, rgb(), rgba(), hsl(), hsla(), object or number`)\n}\n\nexport function RGBToInt (color: RGB) {\n  return (color.r << 16) + (color.g << 8) + color.b\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\n/** Converts HSVA to RGBA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV */\nexport function HSVtoRGB (hsva: HSV): RGB {\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\nexport function HSLtoRGB (hsla: HSL): RGB {\n  return HSVtoRGB(HSLtoHSV(hsla))\n}\n\n/** Converts RGBA to HSVA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV */\nexport function RGBtoHSV (rgba: RGB): HSV {\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 HSVtoHSL (hsva: HSV): HSL {\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 HSLtoHSV (hsl: HSL): HSV {\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 RGBtoCSS ({ r, g, b, a }: RGB): string {\n  return isNumber(a) ? `rgb(${r}, ${g}, ${b}, ${a})` : `rgb(${r}, ${g}, ${b})`\n}\n\nexport function HSVtoCSS (hsva: HSV): string {\n  return RGBtoCSS(HSVtoRGB(hsva))\n}\n\nfunction toHex (v: number) {\n  const h = Math.round(v).toString(16)\n  return ('00'.substr(0, 2 - h.length) + h).toUpperCase()\n}\n\nexport function RGBtoHex ({ r, g, b, a }: RGB): Hex {\n  return `#${[\n    toHex(r),\n    toHex(g),\n    toHex(b),\n    isNumber(a) ? toHex(Math.round(a * 255)) : '',\n  ].join('')}` as Hex\n}\n\nexport function HexToRGB (hex: Hex): RGB {\n  hex = parseHex(hex)\n  let [r, g, b, a] = chunk(hex, 2).map((c: string) => parseInt(c, 16))\n  a = isNumber(a) ? a / 255 : a\n\n  return { r, g, b, a }\n}\n\nexport function HexToHSV (hex: Hex): HSV {\n  const rgb = HexToRGB(hex)\n  return RGBtoHSV(rgb)\n}\n\nexport function HSVtoHex (hsva: HSV): Hex {\n  return RGBtoHex(HSVtoRGB(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(padEnd(hex, 6), 8, 'F')\n  }\n\n  return hex as Hex\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(HexToRGB(parseHex(x.replace(/rgba\\(/, '')))).slice(0, 3).join(',')\n  })\n}\n\nexport function lighten (value: RGB, amount: number): RGB {\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\nexport function darken (value: RGB, amount: number): RGB {\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 = parseColor(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\nexport function hasLightForeground (color: Color) {\n  const blackContrast = Math.abs(APCAcontrast(parseColor(0), parseColor(color)))\n  const whiteContrast = Math.abs(APCAcontrast(parseColor(0xffffff), parseColor(color)))\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  return whiteContrast > Math.min(blackContrast, 50)\n}\n","// Types\nimport type { IfAny } from '@vue/shared' // eslint-disable-line vue/prefer-import-from-vue\nimport type { ComponentObjectPropsOptions, Prop, PropType } from 'vue'\nimport { isObject } from './v0'\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 = isObject(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 && !obj[prop].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<MergeTypeDefault<T[P], D[P]>>\n        default: MergeDefault<T[P], D[P]>\n      }\n      : {\n        type: PropType<MergeTypeDefault<T[P], D[P]>>\n        default: MergeDefault<T[P], D[P]>\n      }\n}\n\ntype MergeTypeDefault<T, D, P = InferPropType<T>> = unknown extends D\n  ? P\n  : (P | D)\ntype MergeDefault<T, D, P = InferPropType<T>> = unknown extends D\n  ? P\n  : (NonNullable<P> | 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    // As TS issue https://github.com/Microsoft/TypeScript/issues/14829\n    // somehow `ObjectConstructor` when inferred from { (): T } becomes `any`\n    // `BooleanConstructor` when inferred from PropConstructor(with PropMethod) becomes `Boolean`\n    ? any\n    : [T] extends [ObjectConstructor | { type: ObjectConstructor }]\n      ? Record<string, any>\n      : [T] extends [BooleanConstructor | { type: BooleanConstructor }]\n        ? boolean\n        : [T] extends [DateConstructor | { type: DateConstructor }]\n          ? Date\n          : [T] extends [(infer U)[] | { type: (infer U)[] }]\n            ? U extends DateConstructor\n              ? Date | InferPropType<U>\n              : InferPropType<U>\n            : [T] extends [Prop<infer V, infer D>]\n              ? unknown extends V\n                ? IfAny<V, V, D>\n                : V\n              : T\n","// Utilities\nimport { propsFactory } from '@/util/propsFactory'\n\n// Types\nimport type { PropType, StyleValue } from 'vue'\n\n// TODO: import from vue once upstream PR is merged\n// https://github.com/vuejs/core/pull/14441\nexport type ClassValue = any\n\nexport interface ComponentProps {\n  class: ClassValue\n  style: StyleValue | undefined\n}\n\n// Composables\nexport const makeComponentProps = propsFactory({\n  class: [String, Array, Object] as PropType<ClassValue>,\n  style: {\n    type: [String, Array, Object] as PropType<StyleValue>,\n    default: null,\n  },\n}, 'component')\n","// Utilities\nimport { getCurrentInstance as _getCurrentInstance } from 'vue'\nimport { toKebabCase } from '@/util/helpers'\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  const vm = getCurrentInstance(name).type\n\n  return toKebabCase(vm?.aliasName || vm?.name)\n}\n","// Utilities\nimport { getCurrentInstance } from '@/util/getCurrentInstance'\n\n// Types\nimport type { ComponentInternalInstance, InjectionKey } from 'vue'\n\nexport function injectSelf<T>(key: InjectionKey<T> | string, vm?: ComponentInternalInstance): T | undefined\nexport function injectSelf (key: InjectionKey<any> | string, vm = getCurrentInstance('injectSelf')) {\n  const { provides } = vm\n\n  if (provides && (key as string | symbol) in provides) {\n    // TS doesn't allow symbol as index type\n    return provides[key as string]\n  }\n  return undefined\n}\n","// Utilities\nimport { computed, inject, provide, ref, shallowRef, toRef, unref, watchEffect } from 'vue'\nimport { isString } from '@/util'\nimport { getCurrentInstance } from '@/util/getCurrentInstance'\nimport { mergeDeep, toKebabCase } from '@/util/helpers'\nimport { injectSelf } from '@/util/injectSelf'\n\n// Types\nimport type { ComputedRef, InjectionKey, Ref, VNode } from 'vue'\nimport type { MaybeRef } from '@/util'\n\nexport type DefaultsInstance = undefined | {\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')\nexport const RootDefaultsSymbol: InjectionKey<Ref<DefaultsInstance>> = Symbol.for('vuetify:defaults:root')\n\nexport function createDefaults (options?: DefaultsInstance): Ref<DefaultsInstance> {\n  return ref(options)\n}\n\nexport function injectDefaults () {\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    disabled?: MaybeRef<boolean | undefined>\n    reset?: MaybeRef<number | string | undefined>\n    root?: MaybeRef<boolean | string | undefined>\n    scoped?: MaybeRef<boolean | undefined>\n  }\n) {\n  const injectedDefaults = injectDefaults()\n  const injectedRoot = inject(RootDefaultsSymbol, null)\n  const providedDefaults = ref(defaults)\n\n  const newDefaults = computed(() => {\n    const disabled = unref(options?.disabled)\n\n    if (disabled) return injectedDefaults.value\n\n    const scoped = unref(options?.scoped)\n    const reset = unref(options?.reset)\n    const root = unref(options?.root)\n\n    if (!providedDefaults.value && !(scoped || reset || root)) return injectedDefaults.value\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      const rootDefaults = isString(root) ? properties.prev?.[root] : undefined\n\n      if (root && injectedRoot?.value) {\n        properties = injectedRoot.value\n      }\n\n      for (let i = 0; i <= len; i++) {\n        if (!properties || !('prev' in properties)) {\n          break\n        }\n\n        properties = properties.prev\n      }\n\n      if (properties && rootDefaults) {\n        properties = mergeDeep(mergeDeep(properties, { prev: properties }), rootDefaults)\n      }\n\n      return properties\n    }\n\n    return properties.prev\n      ? mergeDeep(properties.prev, properties, undefined, (_, v) => v !== undefined)\n      : properties\n  }) as ComputedRef<DefaultsInstance>\n\n  provide(DefaultsSymbol, newDefaults)\n\n  return newDefaults\n}\n\nexport function injectComponentDefaults<T = Record<string, unknown>> (name: string) {\n  const vm = getCurrentInstance('injectComponentDefaults')\n\n  return toRef(() => injectSelf(DefaultsSymbol, vm)?.value?.[name] as Partial<T> | undefined)\n}\n\nexport function injectNestedDefaults<T = Record<string, unknown>> (name: string) {\n  const vm = getCurrentInstance('injectNestedDefaults')\n  const defaults = injectDefaults()\n  const self = (vm.props._as ?? vm.type.name) as string\n\n  return toRef(() => defaults.value?.[self]?.[name] as Partial<T> | undefined)\n}\n\nfunction propIsDefined (vnode: VNode, prop: string) {\n  return vnode.props && (typeof vnode.props[prop] !== 'undefined' ||\n    typeof vnode.props[toKebabCase(prop)] !== 'undefined')\n}\n\nexport function internalUseDefaults (\n  props: Record<string, any> = {},\n  name?: string,\n  defaults = injectDefaults()\n) {\n  const vm = getCurrentInstance('useDefaults')\n\n  name = name ?? vm.type.name ?? vm.type.__name\n  if (!name) {\n    throw new Error('[Vuetify] Could not determine component name')\n  }\n\n  const componentDefaults = computed(() => defaults.value?.[props._as ?? name])\n  const _props = new Proxy(props, {\n    get (target, prop: string) {\n      const propValue = Reflect.get(target, prop)\n      if (prop === 'class' || prop === 'style') {\n        return [componentDefaults.value?.[prop], propValue].filter(v => v != null)\n      }\n      if (propIsDefined(vm.vnode, prop)) return propValue\n      const _componentDefault = componentDefaults.value?.[prop]\n      if (_componentDefault !== undefined) return _componentDefault\n      const _globalDefault = defaults.value?.global?.[prop]\n      if (_globalDefault !== undefined) return _globalDefault\n      return propValue\n    },\n  })\n\n  const _subcomponentDefaults = shallowRef()\n  watchEffect(() => {\n    if (componentDefaults.value) {\n      const subComponents = Object.entries(componentDefaults.value)\n        .filter(([key]) => key.startsWith(key[0].toUpperCase()))\n      _subcomponentDefaults.value = subComponents.length ? Object.fromEntries(subComponents) : undefined\n    } else {\n      _subcomponentDefaults.value = undefined\n    }\n  })\n\n  function provideSubDefaults () {\n    const injected = injectSelf(DefaultsSymbol, vm)\n    provide(DefaultsSymbol, computed(() => {\n      return _subcomponentDefaults.value ? mergeDeep(\n        injected?.value ?? {},\n        _subcomponentDefaults.value\n      ) : injected?.value\n    }))\n  }\n\n  return { props: _props, provideSubDefaults }\n}\n\nexport function useDefaults<T extends Record<string, any>> (props: T, name?: string): T\nexport function useDefaults (props?: undefined, name?: string): Record<string, any>\nexport function useDefaults (\n  props: Record<string, any> = {},\n  name?: string,\n) {\n  const { props: _props, provideSubDefaults } = internalUseDefaults(props, name)\n  provideSubDefaults()\n  return _props\n}\n","// Composables\nimport { injectDefaults, internalUseDefaults } from '@/composables/defaults'\n\n// Utilities\nimport {\n  defineComponent as _defineComponent, // eslint-disable-line no-restricted-imports\n} from 'vue'\nimport { consoleWarn } from '@/util/console'\nimport { pick } from '@/util/helpers'\nimport { propsFactory } from '@/util/propsFactory'\n\n// Types\nimport type {\n  AllowedComponentProps,\n  Component,\n  ComponentCustomProps,\n  ComponentInjectOptions,\n  ComponentObjectPropsOptions,\n  ComponentOptions,\n  ComponentOptionsMixin,\n  ComponentOptionsWithObjectProps,\n  ComponentOptionsWithoutProps,\n  ComponentPropsOptions,\n  ComponentPublicInstance,\n  ComputedOptions,\n  DefineComponent,\n  EmitsOptions,\n  ExtractDefaultPropTypes,\n  ExtractPropTypes,\n  FunctionalComponent,\n  MethodOptions,\n  ObjectEmitsOptions,\n  SlotsType,\n  VNode,\n  VNodeChild,\n  VNodeProps,\n} from 'vue'\n\n// No props\nexport function defineComponent<\n  Props = {},\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 = {},\n  EE extends string = string,\n  I extends {} = {},\n  II extends string = string,\n  S extends SlotsType = {},\n>(\n  options: ComponentOptionsWithoutProps<\n    Props,\n    RawBindings,\n    D,\n    C,\n    M,\n    Mixin,\n    Extends,\n    E,\n    EE,\n    I,\n    II,\n    S\n  >\n): DefineComponent<Props, RawBindings, D, C, M, Mixin, Extends, E, EE>\n\n// Object Props\nexport function defineComponent<\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 = {},\n  EE extends string = string,\n  I extends {} = {},\n  II extends string = string,\n  S extends SlotsType = {},\n>(\n  options: ComponentOptionsWithObjectProps<\n    PropsOptions,\n    RawBindings,\n    D,\n    C,\n    M,\n    Mixin,\n    Extends,\n    E,\n    EE,\n    I,\n    II,\n    S\n  >\n): DefineComponent<PropsOptions, RawBindings, D, C, M, Mixin, Extends, E, EE> & FilterPropsOptions<PropsOptions>\n\n// Implementation\nexport 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.props = propsFactory(options.props ?? {}, options.name)()\n    const propKeys = Object.keys(options.props).filter(key => key !== 'class' && key !== 'style')\n    options.filterProps = function filterProps (props: Record<string, any>) {\n      return pick(props, propKeys)\n    }\n\n    options.props._as = String\n    options.setup = function setup (props: Record<string, any>, ctx) {\n      const defaults = injectDefaults()\n\n      // Skip props proxy if defaults are not provided\n      if (!defaults.value) return options._setup(props, ctx)\n\n      const { props: _props, provideSubDefaults } = internalUseDefaults(props, props._as ?? options.name, defaults)\n\n      const setupBindings = options._setup(_props, ctx)\n\n      provideSubDefaults()\n\n      return setupBindings\n    }\n  }\n\n  return options\n}\n\ntype ToListeners<T extends string | number | symbol> = { [K in T]: K extends `on${infer U}` ? Uncapitalize<U> : K }[T]\n\nexport type SlotsToProps<\n  U extends RawSlots,\n  T = MakeInternalSlots<U>\n> = {\n  $children?: (\n    | VNodeChild\n    | (T extends { default: infer V } ? V : {})\n    | { [K in keyof T]?: T[K] }\n    | { $stable?: boolean }\n  )\n  'v-slots'?: { [K in keyof T]?: T[K] | false }\n} & {\n  [K in keyof T as `v-slot:${K & string}`]?: T[K] | false\n}\n\ntype RawSlots = Record<string, unknown>\ntype Slot<T> = [T] extends [never] ? () => VNodeChild : (arg: T) => VNodeChild\ntype VueSlot<T> = [T] extends [never] ? () => VNode[] : (arg: T) => VNode[]\ntype MakeInternalSlots<T extends RawSlots> = {\n  [K in keyof T]: Slot<T[K]>\n}\ntype MakeSlots<T extends RawSlots> = {\n  [K in keyof T]: VueSlot<T[K]>\n}\n\nexport type GenericProps<Props, Slots extends Record<string, unknown>> = {\n  $props: Props & SlotsToProps<Slots>\n  $slots: MakeSlots<Slots>\n}\n\ntype DefineComponentWithGenericProps<T extends (new (props: Record<string, any>, slots: RawSlots) => {\n  $props?: Record<string, any>\n})> = <\n  PropsOptions extends Readonly<ComponentObjectPropsOptions>,\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 extends ComponentInjectOptions = {},\n  II extends string = string,\n  // Slots extends RawSlots = ConstructorParameters<T> extends [any, infer SS extends RawSlots | undefined] ? Exclude<SS, undefined> : {},\n  Slots extends RawSlots = ConstructorParameters<T>[1],\n  S extends SlotsType = SlotsType<Partial<MakeSlots<Slots>>>,\n  III = InstanceType<T>,\n  P = III extends Record<'$props', any>\n    ? Omit<PropsOptions, keyof III['$props']>\n    : PropsOptions,\n  EEE extends EmitsOptions = E extends any[]\n    ? E\n    : III extends Record<'$props', any>\n      ? Omit<E, ToListeners<keyof III['$props']>>\n      : E,\n  Base = DefineComponent<\n    P,\n    RawBindings,\n    D,\n    C,\n    M,\n    Mixin,\n    Extends,\n    EEE,\n    EE,\n    PublicProps,\n    ExtractPropTypes<P> & ({} extends E ? {} : EmitsToProps<EEE>),\n    ExtractDefaultPropTypes<P>,\n    S\n  >\n>(\n  options: ComponentOptionsWithObjectProps<PropsOptions, RawBindings, D, C, M, Mixin, Extends, E, EE, I, II, S>\n) => Base & T & FilterPropsOptions<PropsOptions>\n\ntype DefineComponentWithSlots<Slots extends RawSlots> = <\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 extends ComponentInjectOptions = {},\n  II extends string = string,\n  S extends SlotsType = SlotsType<Partial<MakeSlots<Slots>>>,\n>(\n  options: ComponentOptionsWithObjectProps<PropsOptions, RawBindings, D, C, M, Mixin, Extends, E, EE, I, II, S>\n) => DefineComponent<\n  ExtractPropTypes<PropsOptions> & SlotsToProps<Slots>,\n  RawBindings,\n  D,\n  C,\n  M,\n  Mixin,\n  Extends,\n  E,\n  EE,\n  PublicProps,\n  ExtractPropTypes<PropsOptions> & SlotsToProps<Slots> & ({} extends E ? {} : EmitsToProps<E>),\n  ExtractDefaultPropTypes<PropsOptions>,\n  S\n> & FilterPropsOptions<PropsOptions>\n\n// No argument - simple default slot\nexport function genericComponent (exposeDefaults?: boolean): DefineComponentWithSlots<{ default: never }>\n\n// Generic constructor argument - generic props and slots\nexport function genericComponent<T extends (new (props: Record<string, any>, slots: any) => {\n  $props?: Record<string, any>\n})> (exposeDefaults?: boolean): DefineComponentWithGenericProps<T>\n\n// Slots argument - simple slots\nexport function genericComponent<\n  Slots extends RawSlots\n> (exposeDefaults?: boolean): DefineComponentWithSlots<Slots>\n\n// Implementation\nexport function genericComponent (exposeDefaults = true) {\n  return (options: any) => ((exposeDefaults ? defineComponent : _defineComponent) as any)(options)\n}\n\nexport function defineFunctionalComponent<\n  T extends FunctionalComponent<Props>,\n  PropsOptions = ComponentObjectPropsOptions,\n  Defaults = ExtractDefaultPropTypes<PropsOptions>,\n  Props = Readonly<ExtractPropTypes<PropsOptions>>,\n> (props: PropsOptions, render: T): FunctionalComponent<Partial<Defaults> & Omit<Props, keyof Defaults>> {\n  render.props = props as any\n  return render as any\n}\n\ntype EmitsToProps<T extends EmitsOptions> = T extends string[]\n  ? {\n    [K in string & `on${Capitalize<T[number]>}`]?: (...args: any[]) => any\n  }\n  : T extends ObjectEmitsOptions\n    ? {\n      [K in string &\n        `on${Capitalize<string & keyof T>}`]?: K extends `on${infer C}`\n        ? T[Uncapitalize<C>] extends null\n          ? (...args: any[]) => any\n          : (\n            ...args: T[Uncapitalize<C>] extends (...args: infer P) => any\n              ? P\n              : never\n          ) => any\n        : never\n    }\n    : {}\n\ntype PublicProps =\n  & VNodeProps\n  & AllowedComponentProps\n  & ComponentCustomProps\n\n// Adds a filterProps method to the component options\nexport interface FilterPropsOptions<PropsOptions extends Readonly<ComponentPropsOptions>, Props = ExtractPropTypes<PropsOptions>> {\n  filterProps<\n    T extends Partial<Props>,\n    U extends Exclude<keyof Props, Exclude<keyof Props, keyof T>>\n  > (props: T): Partial<Pick<T, U>>\n}\n\n// https://github.com/vuejs/core/pull/10557\nexport type ComponentInstance<T> = T extends { new (): ComponentPublicInstance<any, any, any> }\n  ? InstanceType<T>\n  : T extends FunctionalComponent<infer Props, infer Emits>\n    ? ComponentPublicInstance<Props, {}, {}, {}, {}, ShortEmitsToObject<Emits>>\n    : T extends Component<\n          infer Props,\n          infer RawBindings,\n          infer D,\n          infer C,\n          infer M\n        >\n      ? // NOTE we override Props/RawBindings/D to make sure is not `unknown`\n      ComponentPublicInstance<\n          unknown extends Props ? {} : Props,\n          unknown extends RawBindings ? {} : RawBindings,\n          unknown extends D ? {} : D,\n          C,\n          M\n        >\n      : never // not a vue Component\n\ntype ShortEmitsToObject<E> = E extends Record<string, any[]> ? {\n  [K in keyof E]: (...args: E[K]) => any;\n} : E;\n\nexport type JSXComponent<Props = any> =\n  | { new (): ComponentPublicInstance<Props> }\n  | FunctionalComponent<Props>\n","// Composables\nimport { makeComponentProps } from '@/composables/component'\n\n// Utilities\nimport { camelize, capitalize, h } from 'vue'\nimport { genericComponent } from './defineComponent'\n\nexport function createSimpleFunctional (\n  klass: string,\n  tag = 'div',\n  name?: string\n) {\n  return genericComponent()({\n    name: name ?? capitalize(camelize(klass.replace(/__/g, '-'))),\n\n    props: {\n      tag: {\n        type: String,\n        default: tag,\n      },\n\n      ...makeComponentProps(),\n    },\n\n    setup (props, { slots }) {\n      return () => {\n        return h(props.tag, {\n          class: [klass, props.class],\n          style: props.style,\n        }, slots.default?.())\n      }\n    },\n  })\n}\n","import { isPrimitive } from './helpers'\nimport { isBoolean } from './v0'\n\nfunction updateRecursionCache (a: any, b: any, cache: WeakMap<any, any>, result: boolean) {\n  if (!cache || isPrimitive(a) || isPrimitive(b)) return\n\n  const visitedObject = cache.get(a)\n  if (visitedObject) {\n    visitedObject.set(b, result)\n  } else {\n    const newCacheItem = new WeakMap()\n    newCacheItem.set(b, result)\n    cache.set(a, newCacheItem)\n  }\n}\n\nfunction findCachedComparison (a: any, b: any, cache: WeakMap<any, any>): boolean | null {\n  if (!cache || isPrimitive(a) || isPrimitive(b)) return null\n\n  const r1 = cache.get(a)?.get(b)\n  if (isBoolean(r1)) return r1\n  const r2 = cache.get(b)?.get(a)\n  if (isBoolean(r2)) return r2\n  return null\n}\n\nexport type ValueComparator = (a: any, b: any) => boolean\n\nexport function deepEqual (a: any, b: any, recursionCache = new WeakMap()): 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  const cachedComparisonResult = findCachedComparison(a, b, recursionCache)\n  if (cachedComparisonResult) {\n    return cachedComparisonResult\n  }\n\n  updateRecursionCache(a, b, recursionCache, true)\n\n  return props.every(p => deepEqual(a[p], b[p], recursionCache))\n}\n","import { isFunction } from './v0'\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 (!isFunction(node.getRootNode)) {\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","// Utilities\nimport { computed, shallowRef, toValue, watch } from 'vue'\nimport { clamp } from './helpers'\nimport { PREFERS_REDUCED_MOTION } from '@/util/globals'\n\n// Types\nimport type { MaybeRefOrGetter, Ref } from 'vue'\n\nexport 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\nexport type EasingFunction = (n: number) => number\n\nexport const easingPatterns = {\n  linear: (t: number) => t,\n  easeInQuad: (t: number) => t ** 2,\n  easeOutQuad: (t: number) => t * (2 - t),\n  easeInOutQuad: (t: number) => (t < 0.5 ? 2 * t ** 2 : -1 + (4 - 2 * t) * t),\n  easeInCubic: (t: number) => t ** 3,\n  easeOutCubic: (t: number) => --t ** 3 + 1,\n  easeInOutCubic: (t: number) => t < 0.5 ? 4 * t ** 3 : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,\n  easeInQuart: (t: number) => t ** 4,\n  easeOutQuart: (t: number) => 1 - --t ** 4,\n  easeInOutQuart: (t: number) => (t < 0.5 ? 8 * t ** 4 : 1 - 8 * --t ** 4),\n  easeInQuint: (t: number) => t ** 5,\n  easeOutQuint: (t: number) => 1 + --t ** 5,\n  easeInOutQuint: (t: number) => t < 0.5 ? 16 * t ** 5 : 1 + 16 * --t ** 5,\n  instant: (t: number) => 1,\n} as const\n\nexport type EasingOptions = {\n  duration?: number\n  transition?: EasingFunction\n}\n\ntype InternalEasingOptions = {\n  duration: number\n  transition: EasingFunction\n}\n\nexport function useTransition (source: MaybeRefOrGetter<number>, options: MaybeRefOrGetter<EasingOptions>) {\n  const defaultTransition: InternalEasingOptions = {\n    duration: 300,\n    transition: easingPatterns.easeInOutCubic,\n  }\n\n  let raf = -1\n  const outputRef = shallowRef(toValue(source))\n\n  watch(() => toValue(source), async to => {\n    cancelAnimationFrame(raf)\n    const easing = { ...defaultTransition, ...toValue(options) }\n    await executeTransition(outputRef, outputRef.value, to, easing)\n  })\n\n  function executeTransition (out: Ref<number>, from: number, to: number, options: InternalEasingOptions) {\n    const startTime = performance.now()\n    const ease = PREFERS_REDUCED_MOTION() ? easingPatterns.instant\n      : options.transition ?? easingPatterns.easeInOutCubic\n\n    return new Promise<void>(resolve => {\n      raf = requestAnimationFrame(function step (currentTime: number) {\n        const timeElapsed = currentTime - startTime\n        const progress = timeElapsed / options.duration\n        out.value = from + (to - from) * ease(clamp(progress, 0, 1))\n\n        if (progress < 1) {\n          raf = requestAnimationFrame(step)\n        } else {\n          out.value = to\n          resolve()\n        }\n      })\n    })\n  }\n\n  return computed(() => outputRef.value)\n}\n","// Utilities\nimport { callEvent, isOn } from '@/util/helpers'\n\ntype EventHandler = (event: Event) => any\n\nexport function getPrefixedEventHandlers<T extends `:${string}`> (\n  attrs: Record<string, any>,\n  suffix: T,\n  getData: EventHandler\n): Record<`${string}${T}`, EventHandler> {\n  return Object.keys(attrs)\n    .filter(key => isOn(key) && key.endsWith(suffix))\n    .reduce((acc: any, key) => {\n      acc[key.slice(0, -suffix.length)] = (event: Event) => callEvent(attrs[key], event, getData(event))\n      return acc\n    }, {} as Record<`${string}${T}`, EventHandler>)\n}\n","export function getScrollParent (el?: HTMLElement, includeHidden = false) {\n  while (el) {\n    if (includeHidden ? isPotentiallyScrollable(el) : hasScrollbar(el)) return el\n    el = el.parentElement!\n  }\n\n  return document.scrollingElement as HTMLElement\n}\n\nexport function getScrollParents (el?: Element | null, stopAt?: Element | null) {\n  const elements: HTMLElement[] = []\n\n  if (stopAt && el && !stopAt.contains(el)) return elements\n\n  while (el) {\n    if (hasScrollbar(el)) elements.push(el as HTMLElement)\n    if (el === stopAt) break\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  const hasVerticalScrollbar = style.overflowY === 'scroll' || (style.overflowY === 'auto' && el.scrollHeight > el.clientHeight)\n  const hasHorizontalScrollbar = style.overflowX === 'scroll' || (style.overflowX === 'auto' && el.scrollWidth > el.clientWidth)\n  return hasVerticalScrollbar || hasHorizontalScrollbar\n}\n\nfunction isPotentiallyScrollable (el?: Element | null) {\n  if (!el || el.nodeType !== Node.ELEMENT_NODE) return false\n\n  const style = window.getComputedStyle(el)\n  return ['scroll', 'auto'].includes(style.overflowY)\n}\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","// Utilities\nimport { computed, inject, toValue } from 'vue'\nimport { consoleWarn, defineComponent, genericComponent, isString, propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, MaybeRefOrGetter, PropType } from 'vue'\nimport type { JSXComponent } from '@/util'\n\nexport type IconValue =\n  | string\n  | (string | [path: string, opacity: number])[]\n  | JSXComponent\nexport const IconValue = [String, Function, Object, Array] as PropType<IconValue>\n\nexport interface IconAliases {\n  [name: string]: IconValue\n  collapse: 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  sortAsc: IconValue\n  sortDesc: 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  calendar: IconValue\n  treeviewCollapse: IconValue\n  treeviewExpand: IconValue\n  eyeDropper: IconValue\n  upload: IconValue\n  color: IconValue\n  // Font Awesome does not have most of these icons!\n  command: IconValue\n  ctrl: IconValue\n  space: IconValue\n  shift: IconValue\n  alt: IconValue\n  enter: IconValue\n  arrowup: IconValue\n  arrowdown: IconValue\n  arrowleft: IconValue\n  arrowright: IconValue\n  backspace: IconValue\n}\n\nexport interface IconProps {\n  tag: string | JSXComponent\n  icon?: IconValue\n  disabled?: boolean\n}\n\ntype IconComponent = JSXComponent<IconProps>\n\nexport interface IconSet {\n  component: IconComponent\n}\n\nexport type InternalIconOptions = {\n  defaultSet: string\n  aliases: Partial<IconAliases>\n  sets: Record<string, IconSet>\n}\n\nexport type IconOptions = Partial<InternalIconOptions>\n\ntype IconInstance = {\n  component: IconComponent\n  icon?: IconValue\n}\n\nexport const IconSymbol: InjectionKey<InternalIconOptions> = Symbol.for('vuetify:icons')\n\nexport const makeIconProps = propsFactory({\n  icon: {\n    type: IconValue,\n  },\n  // Could not remove this and use makeTagProps, types complained because it is not required\n  tag: {\n    type: [String, Object, Function] as PropType<string | JSXComponent>,\n    required: true,\n  },\n}, 'icon')\n\nexport const VComponentIcon = genericComponent()({\n  name: 'VComponentIcon',\n\n  props: makeIconProps(),\n\n  setup (props, { slots }) {\n    return () => {\n      const Icon = props.icon as JSXComponent\n      return (\n        <props.tag>\n          { props.icon ? <Icon /> : slots.default?.() }\n        </props.tag>\n      )\n    }\n  },\n})\nexport type VComponentIcon = InstanceType<typeof VComponentIcon>\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            { Array.isArray(props.icon)\n              ? props.icon.map(path => (\n                Array.isArray(path)\n                  ? <path d={ path[0] as string } fill-opacity={ path[1] }></path>\n                  : <path d={ path as string }></path>\n              ))\n              : <path d={ props.icon as string }></path>\n            }\n          </svg>\n        </props.tag>\n      )\n    }\n  },\n})\nexport type VSvgIcon = InstanceType<typeof VSvgIcon>\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})\nexport type VLigatureIcon = InstanceType<typeof VLigatureIcon>\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})\nexport type VClassIcon = InstanceType<typeof VClassIcon>\n\nexport const useIcon = (props: MaybeRefOrGetter<IconValue | undefined>) => {\n  const icons = inject(IconSymbol)\n\n  if (!icons) throw new Error('Missing Vuetify Icons provide!')\n\n  const iconData = computed<IconInstance>(() => {\n    const iconAlias = toValue(props)\n\n    if (!iconAlias) return { component: VComponentIcon }\n\n    let icon: IconValue | undefined = iconAlias\n\n    if (isString(icon)) {\n      icon = icon.trim()\n      if (icon.startsWith('$')) {\n        icon = icons.aliases?.[icon.slice(1)]\n      }\n    }\n\n    if (!icon) consoleWarn(`Could not find aliased icon \"${iconAlias}\"`)\n\n    if (Array.isArray(icon)) {\n      return {\n        component: VSvgIcon,\n        icon,\n      }\n    } else if (!isString(icon)) {\n      return {\n        component: VComponentIcon,\n        icon,\n      }\n    }\n\n    const iconSetName = Object.keys(icons.sets).find(\n      setName => isString(icon) && 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","// Composables\nimport { VClassIcon } from '@/composables/icons'\n\n// Utilities\nimport { h } from 'vue'\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  sortAsc: 'mdi-arrow-up',\n  sortDesc: 'mdi-arrow-down',\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  calendar: 'mdi-calendar',\n  treeviewCollapse: 'mdi-menu-down',\n  treeviewExpand: 'mdi-menu-right',\n  tableGroupCollapse: 'mdi-chevron-down',\n  tableGroupExpand: 'mdi-chevron-right',\n  eyeDropper: 'mdi-eyedropper',\n  upload: 'mdi-cloud-upload',\n  color: 'mdi-palette',\n  command: 'mdi-apple-keyboard-command',\n  ctrl: 'mdi-apple-keyboard-control',\n  space: 'mdi-keyboard-space',\n  shift: 'mdi-apple-keyboard-shift',\n  alt: 'mdi-apple-keyboard-option',\n  enter: 'mdi-keyboard-return',\n  arrowup: 'mdi-arrow-up',\n  arrowdown: 'mdi-arrow-down',\n  arrowleft: 'mdi-arrow-left',\n  arrowright: 'mdi-arrow-right',\n  backspace: 'mdi-backspace',\n  play: 'mdi-play',\n  pause: 'mdi-pause',\n  fullscreen: 'mdi-fullscreen',\n  fullscreenExit: 'mdi-fullscreen-exit',\n  volumeHigh: 'mdi-volume-high',\n  volumeMedium: 'mdi-volume-medium',\n  volumeLow: 'mdi-volume-low',\n  volumeOff: 'mdi-volume-variant-off',\n  search: 'mdi-magnify',\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","// Icons\nimport { mdi } from '@/iconsets/mdi'\n\n// Types\nimport type { Blueprint } from '@/framework'\n\nexport const md1: Blueprint = {\n  defaults: {\n    global: {\n      rounded: 'sm',\n    },\n    VAvatar: {\n      rounded: 'circle',\n    },\n    VAutocomplete: {\n      variant: 'underlined',\n    },\n    VBanner: {\n      color: 'primary',\n    },\n    VBtn: {\n      class: 'text-uppercase',\n      color: 'primary',\n      rounded: 0,\n    },\n    VCheckbox: {\n      color: 'secondary',\n      indentDetails: false,\n    },\n    VCombobox: {\n      variant: 'underlined',\n    },\n    VDatePicker: {\n      color: 'primary',\n      controlHeight: 44,\n      elevation: 1,\n      rounded: 0,\n      controlVariant: 'modal',\n\n      VBtn: {\n        color: 'high-emphasis',\n        rounded: 'circle',\n      },\n    },\n    VSelect: {\n      variant: 'underlined',\n    },\n    VSlider: {\n      color: 'primary',\n      indentDetails: false,\n    },\n    VSwitch: {\n      indentDetails: false,\n    },\n    VRadioGroup: {\n      indentDetails: false,\n    },\n    VRangeSlider: {\n      indentDetails: false,\n    },\n    VTabs: {\n      color: 'primary',\n    },\n    VTextarea: {\n      variant: 'underlined',\n    },\n    VTextField: {\n      variant: 'underlined',\n    },\n    VToolbar: {\n      VBtn: {\n        color: null,\n      },\n    },\n  },\n  icons: {\n    defaultSet: 'mdi',\n    sets: {\n      mdi,\n    },\n  },\n  theme: {\n    themes: {\n      light: {\n        colors: {\n          primary: '#3F51B5',\n          'primary-darken-1': '#303F9F',\n          'primary-lighten-1': '#C5CAE9',\n          secondary: '#FF4081',\n          'secondary-darken-1': '#F50057',\n          'secondary-lighten-1': '#FF80AB',\n          accent: '#009688',\n        },\n      },\n    },\n  },\n}\n","// Icons\nimport { mdi } from '@/iconsets/mdi'\n\n// Types\nimport type { Blueprint } from '@/framework'\n\nexport const md2: Blueprint = {\n  defaults: {\n    VAvatar: {\n      rounded: 'circle',\n    },\n    VAutocomplete: {\n      variant: 'filled',\n    },\n    VBanner: {\n      color: 'primary',\n    },\n    VBtn: {\n      class: 'text-uppercase',\n      color: 'primary',\n    },\n    VCheckbox: {\n      color: 'secondary',\n      indentDetails: true,\n    },\n    VCombobox: {\n      variant: 'filled',\n    },\n    VDatePicker: {\n      color: 'primary',\n      controlHeight: 56,\n      elevation: 2,\n      rounded: 'md',\n      controlVariant: 'modal',\n\n      VBtn: {\n        color: 'high-emphasis',\n        rounded: 'circle',\n      },\n    },\n    VRadioGroup: {\n      indentDetails: true,\n    },\n    VSelect: {\n      variant: 'filled',\n    },\n    VSlider: {\n      color: 'primary',\n      indentDetails: true,\n    },\n    VRangeSlider: {\n      indentDetails: true,\n    },\n    VSwitch: {\n      indentDetails: true,\n    },\n    VTabs: {\n      color: 'primary',\n    },\n    VTextarea: {\n      variant: 'filled',\n    },\n    VTextField: {\n      variant: 'filled',\n    },\n    VToolbar: {\n      VBtn: {\n        color: null,\n      },\n    },\n  },\n  icons: {\n    defaultSet: 'mdi',\n    sets: {\n      mdi,\n    },\n  },\n  theme: {\n    themes: {\n      light: {\n        colors: {\n          primary: '#6200EE',\n          'primary-darken-1': '#3700B3',\n          secondary: '#03DAC6',\n          'secondary-darken-1': '#018786',\n          error: '#B00020',\n        },\n      },\n    },\n  },\n}\n","// Icons\nimport { mdi } from '@/iconsets/mdi'\n\n// Types\nimport type { Blueprint } from '@/framework'\n\nexport const md3: Blueprint = {\n  defaults: {\n    VAppBar: {\n      flat: true,\n    },\n    VAutocomplete: {\n      variant: 'outlined',\n    },\n    VBanner: {\n      color: 'primary',\n    },\n    VBottomSheet: {\n      contentClass: 'rounded-t-xl overflow-hidden',\n    },\n    VBtn: {\n      color: 'primary',\n      rounded: 'xl',\n    },\n    VBtnGroup: {\n      rounded: 'xl',\n      VBtn: { rounded: null },\n    },\n    VCard: {\n      rounded: 'lg',\n    },\n    VCheckbox: {\n      color: 'secondary',\n      inset: true,\n      indentDetails: true,\n    },\n    VChip: {\n      rounded: 'sm',\n    },\n    VCombobox: {\n      variant: 'outlined',\n    },\n    VDateInput: {\n      variant: 'outlined',\n    },\n    VDatePicker: {\n      controlHeight: 48,\n      color: 'primary',\n      divided: true,\n      headerColor: '',\n      elevation: 1,\n      rounded: 'xl',\n\n      VBtn: {\n        color: 'high-emphasis',\n        rounded: 'circle',\n      },\n    },\n    VFileInput: {\n      variant: 'outlined',\n    },\n    VList: {\n      prependGap: 16,\n    },\n    VNavigationDrawer: {\n      // VList: {\n      //   nav: true,\n      //   VListItem: {\n      //     rounded: 'xl',\n      //   },\n      // },\n    },\n    VNumberInput: {\n      variant: 'outlined',\n\n      VBtn: {\n        color: undefined,\n        rounded: undefined,\n      },\n    },\n    VRadioGroup: {\n      indentDetails: true,\n    },\n    VSelect: {\n      variant: 'outlined',\n    },\n    VSlider: {\n      color: 'primary',\n      indentDetails: true,\n    },\n    VRangeSlider: {\n      indentDetails: true,\n    },\n    VSwitch: {\n      indentDetails: true,\n    },\n    VTabs: {\n      color: 'primary',\n    },\n    VTextarea: {\n      variant: 'outlined',\n    },\n    VTextField: {\n      variant: 'outlined',\n    },\n    VToolbar: {\n      VBtn: {\n        color: null,\n      },\n    },\n  },\n  icons: {\n    defaultSet: 'mdi',\n    sets: {\n      mdi,\n    },\n  },\n  theme: {\n    themes: {\n      light: {\n        colors: {\n          primary: '#6750a4',\n          secondary: '#b4b0bb',\n          tertiary: '#7d5260',\n          error: '#b3261e',\n          surface: '#fffbfe',\n        },\n      },\n    },\n  },\n}\n","// Utilities\nimport { onBeforeUnmount, readonly, ref, watch } from 'vue'\nimport { templateRef } from '@/util'\nimport { Box } from '@/util/box'\nimport { IN_BROWSER } from '@/util/globals'\n\n// Types\nimport type { DeepReadonly, Ref } from 'vue'\nimport type { TemplateRef } from '@/util'\n\ninterface ResizeState {\n  resizeRef: TemplateRef\n  contentRect: DeepReadonly<Ref<DOMRectReadOnly | undefined>>\n}\n\nexport function useResizeObserver (callback?: ResizeObserverCallback, box: 'content' | 'border' = 'content'): ResizeState {\n  const resizeRef = templateRef()\n  const contentRect = ref<DOMRectReadOnly>()\n\n  if (IN_BROWSER) {\n    const observer = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n      callback?.(entries, observer)\n\n      if (!entries.length) return\n\n      if (box === 'content') {\n        contentRect.value = entries[0].contentRect\n      } else {\n        // borderBoxSize ignores CSS transforms (e.g. VDialogTransition scale-in)\n        const border = entries[0].borderBoxSize?.[0]\n        const el = entries[0].target as HTMLElement\n        contentRect.value = new Box({\n          x: 0,\n          y: 0,\n          width: border?.inlineSize ?? el.offsetWidth,\n          height: border?.blockSize ?? el.offsetHeight,\n        }) as unknown as DOMRectReadOnly\n      }\n    })\n\n    onBeforeUnmount(() => {\n      observer.disconnect()\n    })\n\n    watch(() => resizeRef.el, (newValue, oldValue) => {\n      if (oldValue) {\n        observer.unobserve(oldValue)\n        contentRect.value = undefined\n      }\n\n      if (newValue) observer.observe(newValue)\n    }, {\n      flush: 'post',\n    })\n  }\n\n  return {\n    resizeRef,\n    contentRect: readonly(contentRect),\n  }\n}\n","// Composables\nimport { useResizeObserver } from '@/composables/resizeObserver'\n\n// Utilities\nimport {\n  computed,\n  inject,\n  onActivated,\n  onBeforeUnmount,\n  onDeactivated,\n  onMounted,\n  onScopeDispose,\n  provide,\n  reactive,\n  ref,\n  shallowRef, toRef,\n  useId,\n  watch,\n} from 'vue'\nimport {\n  consoleWarn,\n  convertToUnit,\n  findChildrenWithProvide,\n  getCurrentInstance,\n  isPercentage,\n  propsFactory,\n  resolveSize,\n} from '@/util'\n\n// Types\nimport type { ComponentInternalInstance, CSSProperties, InjectionKey, Prop, Ref } from 'vue'\n\nexport type Position = 'top' | 'left' | 'right' | 'bottom'\n\ninterface Layer {\n  top: number\n  bottom: number\n  left: number\n  right: number\n}\n\ninterface LayoutItem extends Layer {\n  id: string\n  size: number\n  position: Position\n}\n\ninterface LayoutProvide {\n  register: (\n    vm: ComponentInternalInstance,\n    options: {\n      id: string\n      order: Ref<number>\n      position: Ref<Position>\n      layoutSize: Ref<number | string>\n      elementSize: Ref<number | string | undefined>\n      active: Ref<boolean>\n      disableTransitions?: Ref<boolean>\n      absolute: Ref<boolean | undefined>\n    }\n  ) => {\n    layoutItemStyles: Ref<CSSProperties>\n    layoutItemScrimStyles: Ref<CSSProperties>\n    zIndex: Ref<number>\n  }\n  unregister: (id: string) => void\n  mainRect: Ref<Layer>\n  mainStyles: Ref<CSSProperties>\n  getLayoutItem: (id: string) => LayoutItem | undefined\n  items: Ref<LayoutItem[]>\n  layoutRect: Ref<DOMRectReadOnly | undefined>\n  rootZIndex: Ref<number>\n}\n\nexport const VuetifyLayoutKey: InjectionKey<LayoutProvide> = Symbol.for('vuetify:layout')\nexport const VuetifyLayoutItemKey: InjectionKey<{ id: string }> = Symbol.for('vuetify:layout-item')\n\nconst ROOT_ZINDEX = 1000\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  order: {\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('[Vuetify] Could not find injected layout')\n\n  return {\n    getLayoutItem: layout.getLayoutItem,\n    mainRect: layout.mainRect,\n    mainStyles: layout.mainStyles,\n    layoutRect: layout.layoutRect,\n  }\n}\n\nexport function useLayoutItem (options: {\n  id: string | undefined\n  order: Ref<number>\n  position: Ref<Position>\n  layoutSize: Ref<number | string>\n  elementSize: Ref<number | string | undefined>\n  active: Ref<boolean>\n  disableTransitions?: Ref<boolean>\n  absolute: Ref<boolean | undefined>\n}) {\n  const layout = inject(VuetifyLayoutKey)\n\n  if (!layout) throw new Error('[Vuetify] Could not find injected layout')\n\n  const id = options.id ?? `layout-item-${useId()}`\n\n  const vm = getCurrentInstance('useLayoutItem')\n\n  provide(VuetifyLayoutItemKey, { id })\n\n  const isKeptAlive = shallowRef(false)\n  onDeactivated(() => isKeptAlive.value = true)\n  onActivated(() => isKeptAlive.value = false)\n\n  const {\n    layoutItemStyles,\n    layoutItemScrimStyles,\n  } = layout.register(vm, {\n    ...options,\n    active: computed(() => isKeptAlive.value ? false : options.active.value),\n    id,\n  })\n\n  onBeforeUnmount(() => layout.unregister(id))\n\n  return { layoutItemStyles, layoutRect: layout.layoutRect, layoutItemScrimStyles }\n}\n\nconst generateLayers = (\n  layout: string[],\n  positions: Map<string, Ref<Position>>,\n  layoutSizes: Map<string, Ref<number | string>>,\n  activeItems: Map<string, Ref<boolean>>,\n  sizeOf: (value: number | string | undefined, position: Position) => number,\n): { id: string, layer: Layer }[] => {\n  let previousLayer: Layer = { top: 0, left: 0, right: 0, bottom: 0 }\n  const layers = [{ id: '', layer: { ...previousLayer } }]\n  for (const id of layout) {\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]: previousLayer[position.value] + (active.value ? sizeOf(amount.value, position.value) : 0),\n    }\n\n    layers.push({\n      id,\n      layer,\n    })\n\n    previousLayer = layer\n  }\n\n  return layers\n}\n\nexport function createLayout (props: { overlaps?: string[], fullHeight?: boolean }) {\n  const parentLayout = inject(VuetifyLayoutKey, null)\n  const rootZIndex = computed(() => parentLayout ? parentLayout.rootZIndex.value - 100 : ROOT_ZINDEX)\n  const registered = ref<string[]>([])\n  const positions = reactive(new Map<string, Ref<Position>>())\n  const layoutSizes = reactive(new Map<string, Ref<number | string>>())\n  const priorities = reactive(new Map<string, Ref<number>>())\n  const activeItems = reactive(new Map<string, Ref<boolean>>())\n  const disabledTransitions = reactive(new Map<string, Ref<boolean>>())\n  const { resizeRef, contentRect: layoutRect } = useResizeObserver()\n\n  function sizeOf (value: number | string | undefined, position: Position) {\n    const span = position === 'left' || position === 'right'\n      ? layoutRect.value?.width\n      : layoutRect.value?.height\n\n    return resolveSize(value, span ?? 0)\n  }\n\n  const isResizing = shallowRef(false)\n  let resizeTimeout = -1\n  watch(() => [layoutRect.value?.width, layoutRect.value?.height], () => {\n    isResizing.value = true\n    window.clearTimeout(resizeTimeout)\n    resizeTimeout = window.setTimeout(() => (isResizing.value = false), 100)\n  })\n  onScopeDispose(() => window.clearTimeout(resizeTimeout))\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: sizeOf(topAmount.value, topPosition.value) })\n      map.set(top, { position: bottomPosition.value, amount: -sizeOf(bottomAmount.value, bottomPosition.value) })\n    }\n\n    return map\n  })\n\n  const layers = computed(() => {\n    const uniquePriorities = [...new Set([...priorities.values()].map(p => p.value))].sort((a, b) => a - b)\n    const layout = []\n    for (const p of uniquePriorities) {\n      const items = registered.value.filter(id => priorities.get(id)?.value === p)\n      layout.push(...items)\n    }\n    return generateLayers(layout, positions, layoutSizes, activeItems, sizeOf)\n  })\n\n  const transitionsEnabled = computed(() => {\n    return !isResizing.value && !Array.from(disabledTransitions.values()).some(ref => ref.value)\n  })\n\n  const mainRect = computed(() => {\n    return layers.value[layers.value.length - 1].layer\n  })\n\n  const mainStyles = toRef(() => {\n    return {\n      '--v-layout-left': convertToUnit(mainRect.value.left),\n      '--v-layout-right': convertToUnit(mainRect.value.right),\n      '--v-layout-top': convertToUnit(mainRect.value.top),\n      '--v-layout-bottom': convertToUnit(mainRect.value.bottom),\n      ...(transitionsEnabled.value ? undefined : { transition: 'none' }),\n    } satisfies CSSProperties\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      const position = positions.get(id)\n\n      return {\n        id,\n        ...layer,\n        size: sizeOf(size!.value, position!.value),\n        position: position!.value,\n      }\n    })\n  })\n\n  const getLayoutItem = (id: string) => {\n    return items.value.find(item => item.id === id)\n  }\n\n  const rootVm = getCurrentInstance('createLayout')\n\n  const isMounted = shallowRef(false)\n  onMounted(() => {\n    isMounted.value = true\n  })\n\n  provide(VuetifyLayoutKey, {\n    register: (\n      vm: ComponentInternalInstance,\n      {\n        id,\n        order,\n        position,\n        layoutSize,\n        elementSize,\n        active,\n        disableTransitions,\n        absolute,\n      }\n    ) => {\n      priorities.set(id, order)\n      positions.set(id, position)\n      layoutSizes.set(id, layoutSize)\n      activeItems.set(id, active)\n      disableTransitions && disabledTransitions.set(id, disableTransitions)\n\n      const instances = findChildrenWithProvide(VuetifyLayoutItemKey, rootVm?.vnode)\n      const instanceIndex = instances.indexOf(vm)\n\n      if (instanceIndex > -1) registered.value.splice(instanceIndex, 0, id)\n      else registered.value.push(id)\n\n      const index = computed(() => items.value.findIndex(i => i.id === id))\n      const zIndex = computed(() => rootZIndex.value + (layers.value.length * 2) - (index.value * 2))\n\n      const layoutItemStyles = computed<CSSProperties>(() => {\n        const isHorizontal = position.value === 'left' || position.value === 'right'\n        const isOppositeHorizontal = position.value === 'right'\n        const isOppositeVertical = position.value === 'bottom'\n        const direction = isOppositeHorizontal || isOppositeVertical ? 1 : -1\n        const offscreen = `calc(${100 * direction}% + ${direction}px)`\n        const transformFunction = `translate${isHorizontal ? 'X' : 'Y'}`\n\n        const styles = {\n          [position.value]: 0,\n          zIndex: zIndex.value,\n          transform: `${transformFunction}(${active.value ? '0px' : offscreen})`,\n          position: absolute.value || rootZIndex.value !== ROOT_ZINDEX ? 'absolute' : 'fixed',\n          ...(transitionsEnabled.value ? undefined : { transition: 'none' }),\n        } as const\n\n        if (!isMounted.value) return styles\n\n        // percentages stay in CSS until the layout is measured, SSR and the first paint have no rect\n        const measuredSize = isPercentage(elementSize.value) && layoutRect.value\n          ? sizeOf(elementSize.value, position.value)\n          : elementSize.value\n\n        const item = items.value[index.value]\n\n        if (!item) consoleWarn(`[Vuetify] 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        return {\n          ...styles,\n          height:\n            isHorizontal ? `calc(100% - ${item.top}px - ${item.bottom}px)`\n            : measuredSize ? convertToUnit(measuredSize)\n            : undefined,\n          left: isOppositeHorizontal ? undefined : `${item.left}px`,\n          right: isOppositeHorizontal ? `${item.right}px` : undefined,\n          top: position.value !== 'bottom' ? `${item.top}px` : undefined,\n          bottom: position.value !== 'top' ? `${item.bottom}px` : undefined,\n          width:\n            !isHorizontal ? `calc(100% - ${item.left}px - ${item.right}px)`\n            : measuredSize ? convertToUnit(measuredSize)\n            : undefined,\n        }\n      })\n      const layoutItemScrimStyles = computed<CSSProperties>(() => ({\n        zIndex: zIndex.value - 1,\n      }))\n\n      return { layoutItemStyles, layoutItemScrimStyles, zIndex }\n    },\n    unregister: (id: string) => {\n      priorities.delete(id)\n      positions.delete(id)\n      layoutSizes.delete(id)\n      activeItems.delete(id)\n      disabledTransitions.delete(id)\n      registered.value = registered.value.filter(v => v !== id)\n    },\n    mainRect,\n    mainStyles,\n    getLayoutItem,\n    items,\n    layoutRect,\n    rootZIndex,\n  })\n\n  const layoutClasses = toRef(() => [\n    'v-layout',\n    { 'v-layout--full-height': props.fullHeight },\n  ])\n\n  const layoutStyles = toRef(() => ({\n    zIndex: parentLayout ? rootZIndex.value : undefined,\n    position: parentLayout ? 'relative' as const : undefined,\n    overflow: parentLayout ? 'hidden' : undefined,\n  }))\n\n  return {\n    layoutClasses,\n    layoutStyles,\n    getLayoutItem,\n    items,\n    layoutRect,\n    layoutRef: resizeRef,\n  }\n}\n","// Utilities\nimport { effectScope, onScopeDispose, watch } from 'vue'\n\n// Types\nimport type { EffectScope, WatchSource } from 'vue'\n\nexport function useToggleScope (source: WatchSource<boolean>, fn: (reset: () => void) => void) {\n  let scope: EffectScope | undefined\n  function start () {\n    scope = effectScope()\n    scope.run(() => fn.length\n      ? fn(() => { scope?.stop(); start() })\n      : (fn as any)()\n    )\n  }\n\n  watch(source, active => {\n    if (active && !scope) {\n      start()\n    } else if (!active) {\n      scope?.stop()\n      scope = undefined\n    }\n  }, { immediate: true })\n\n  onScopeDispose(() => {\n    scope?.stop()\n  })\n}\n","// Composables\nimport { useToggleScope } from '@/composables/toggleScope'\n\n// Utilities\nimport { computed, ref, toRaw, watch } from 'vue'\nimport { getCurrentInstance, isUndefined, toKebabCase } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\nimport type { EventProp } from '@/util'\n\ntype InnerVal<T> = T extends any[] ? Readonly<T> : T\n\n// Composables\nexport function useProxiedModel<\n  Props extends object & { [key in Prop as `onUpdate:${Prop}`]: EventProp | 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  const internal = ref(!isUndefined(props[prop]) ? props[prop] : defaultValue) as Ref<Props[Prop]>\n  const kebabProp = toKebabCase(prop)\n  const checkKebab = kebabProp !== prop\n\n  const isControlled = checkKebab\n    ? computed(() => {\n      void props[prop]\n      return !!(\n        (vm.vnode.props?.hasOwnProperty(prop) || vm.vnode.props?.hasOwnProperty(kebabProp)) &&\n        (vm.vnode.props?.hasOwnProperty(`onUpdate:${prop}`) || vm.vnode.props?.hasOwnProperty(`onUpdate:${kebabProp}`))\n      )\n    })\n    : computed(() => {\n      void props[prop]\n      return !!(vm.vnode.props?.hasOwnProperty(prop) && vm.vnode.props?.hasOwnProperty(`onUpdate:${prop}`))\n    })\n\n  useToggleScope(() => !isControlled.value, () => {\n    watch(() => props[prop], val => {\n      internal.value = val\n    })\n  })\n\n  const model = computed({\n    get (): any {\n      const externalValue = props[prop]\n      return transformIn(isControlled.value ? externalValue : internal.value)\n    },\n    set (internalValue) {\n      const newValue = transformOut(internalValue)\n      const value = toRaw(isControlled.value ? props[prop] : internal.value)\n      if (value === newValue || transformIn(value) === internalValue) {\n        return\n      }\n      internal.value = newValue\n      vm?.emit(`update:${prop}`, newValue)\n    },\n  }) as any as Ref<InnerVal<Inner>> & { readonly externalValue: Props[Prop] }\n\n  Object.defineProperty(model, 'externalValue', {\n    get: () => isControlled.value ? props[prop] : internal.value,\n  })\n\n  return model\n}\n","export default {\n  badge: 'Badge',\n  open: 'Open',\n  close: 'Close',\n  dismiss: 'Dismiss',\n  confirmEdit: {\n    ok: 'OK',\n    cancel: 'Cancel',\n  },\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      selectRow: 'Select row',\n      selectAll: 'Select all',\n      selectGroup: 'Select group',\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  dateRangeInput: {\n    divider: 'to',\n  },\n  monthPicker: {\n    title: 'Select month',\n    itemsSelected: '{0} selected',\n    header: 'Enter month',\n    range: {\n      title: 'Enter months',\n    },\n    ariaLabel: {\n      previousYear: 'Previous year',\n      nextYear: 'Next year',\n      selectYear: 'Select year',\n      currentMonth: 'Current month, {0}',\n    },\n  },\n  datePicker: {\n    itemsSelected: '{0} selected',\n    range: {\n      title: 'Select dates',\n      header: 'Enter dates',\n    },\n    title: 'Select date',\n    header: 'Enter date',\n    input: {\n      placeholder: 'Enter date',\n    },\n    ariaLabel: {\n      previousMonth: 'Previous month',\n      nextMonth: 'Next month',\n      selectYear: 'Select year',\n      previousYear: 'Previous year',\n      nextYear: 'Next year',\n      selectMonth: 'Select month',\n      selectDate: '{0}', // Full date format\n      currentDate: 'Today, {0}',\n    },\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    today: 'Today',\n  },\n  heatmap: {\n    less: 'Less',\n    more: 'More',\n  },\n  input: {\n    clear: 'Clear {0}',\n    prependAction: '{0} prepended action',\n    appendAction: '{0} appended action',\n    otp: 'Enter verification code',\n  },\n  fileInput: {\n    counter: '{0} files',\n    counterSize: '{0} files ({1} in total)',\n  },\n  fileUpload: {\n    title: 'Drag and drop files here',\n    divider: 'or',\n    browse: 'Browse Files',\n  },\n  timePicker: {\n    am: 'AM',\n    pm: 'PM',\n    title: 'Select Time',\n    hour: 'Hour',\n    minute: 'Minute',\n    second: 'Second',\n    notAllowed: 'Value is not allowed',\n  },\n  pagination: {\n    ariaLabel: {\n      root: 'Pagination Navigation',\n      next: 'Next page',\n      previous: 'Previous page',\n      page: 'Go to page {0}',\n      currentPage: 'Page {0}, Current page',\n      first: 'First page',\n      last: 'Last page',\n    },\n  },\n  stepper: {\n    next: 'Next',\n    prev: 'Previous',\n  },\n  rating: {\n    ariaLabel: {\n      item: 'Rating {0} of {1}',\n    },\n  },\n  loading: 'Loading...',\n  infiniteScroll: {\n    loadMore: 'Load more',\n    empty: 'No more',\n  },\n  rules: {\n    required: 'This field is required',\n    email: 'Please enter a valid email',\n    number: 'This field can only contain numbers',\n    integer: 'This field can only contain integer values',\n    capital: 'This field can only contain uppercase letters',\n    maxLength: 'You must enter a maximum of {0} characters',\n    minLength: 'You must enter a minimum of {0} characters',\n    strictLength: 'The length of the entered field is invalid',\n    exclude: 'The {0} character is not allowed',\n    notEmpty: 'Please choose at least one value',\n    pattern: 'Invalid format',\n  },\n  command: {\n    search: 'Type a command or search...',\n  },\n  hotkey: {\n    then: 'then',\n    ctrl: 'Ctrl',\n    command: 'Command',\n    space: 'Space',\n    shift: 'Shift',\n    alt: 'Alt',\n    enter: 'Enter',\n    escape: 'Escape',\n    upArrow: 'Up Arrow',\n    downArrow: 'Down Arrow',\n    leftArrow: 'Left Arrow',\n    rightArrow: 'Right Arrow',\n    backspace: 'Backspace',\n    option: 'Option',\n    plus: 'plus',\n    shortcut: 'Keyboard shortcut: {0}',\n    or: 'or',\n  },\n  video: {\n    play: 'Play',\n    pause: 'Pause',\n    seek: 'Seek',\n    volume: 'Volume',\n    showVolume: 'Show volume control',\n    mute: 'Mute',\n    unmute: 'Unmute',\n    enterFullscreen: 'Full screen',\n    exitFullscreen: 'Exit full screen',\n  },\n  colorPicker: {\n    ariaLabel: {\n      eyedropper: 'Select color with eyedropper',\n      hueSlider: 'Hue',\n      alphaSlider: 'Alpha',\n      redInput: 'Red value',\n      greenInput: 'Green value',\n      blueInput: 'Blue value',\n      alphaInput: 'Alpha value',\n      hueInput: 'Hue value',\n      saturationInput: 'Saturation value',\n      lightnessInput: 'Lightness value',\n      hexInput: 'HEX value',\n      hexaInput: 'HEX with alpha value',\n      changeFormat: 'Change color format',\n    },\n  },\n}\n","// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { ref, shallowRef, toRef, watch } from 'vue'\nimport { consoleError, consoleWarn, getObjectValueByPath, isString } from '@/util'\n\n// Locales\nimport en from '@/locale/en'\n\n// Types\nimport type { Ref } from 'vue'\nimport type { LocaleInstance, LocaleMessages, LocaleOptions } from '@/composables/locale'\n\nconst LANG_PREFIX = '$vuetify.'\n\nconst replace = (str: string, params: unknown[]) => {\n  return str.replace(/\\{(\\d+)\\}/g, (match: string, index: string) => {\n    return String(params[Number(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 (!isString(str)) {\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\nfunction inferDecimalSeparator (current: Ref<string>, fallback: Ref<string>) {\n  const format = createNumberFunction(current, fallback)\n  return format(0.1).includes(',') ? ',' : '.'\n}\n\nfunction inferNumericGroupSeparator (current: Ref<string>, fallback: Ref<string>) {\n  return new Intl.NumberFormat([current.value, fallback.value], { useGrouping: true })\n    .formatToParts(10000)\n    .find(p => p.type === 'group')?.value ?? ' '\n}\n\nfunction useProvided <T> (props: any, prop: string, provided: Ref<T>) {\n  const internal = useProxiedModel(props, prop, props[prop] ?? provided.value)\n\n  // TODO: Remove when defaultValue works\n  internal.value = props[prop] ?? provided.value\n\n  watch(provided, v => {\n    if (props[prop] == null) {\n      internal.value = provided.value\n    }\n  })\n\n  return internal as Ref<T>\n}\n\nfunction createProvideFunction (state: { current: Ref<string>, fallback: Ref<string>, messages: Ref<LocaleMessages> }) {\n  return (props: LocaleOptions): LocaleInstance => {\n    const current = useProvided(props, 'locale', state.current)\n    const fallback = useProvided(props, 'fallback', state.fallback)\n    const messages = useProvided(props, 'messages', state.messages)\n\n    return {\n      name: 'vuetify',\n      current,\n      fallback,\n      messages,\n      decimalSeparator: toRef(() => inferDecimalSeparator(current, fallback)),\n      numericGroupSeparator: toRef(() => inferNumericGroupSeparator(current, fallback)),\n      t: createTranslateFunction(current, fallback, messages),\n      n: createNumberFunction(current, fallback),\n      provide: createProvideFunction({ current, fallback, messages }),\n    }\n  }\n}\n\nexport function createVuetifyAdapter (options?: LocaleOptions): LocaleInstance {\n  const current = shallowRef(options?.locale ?? 'en')\n  const fallback = shallowRef(options?.fallback ?? 'en')\n  const messages = ref({ en, ...options?.messages })\n\n  return {\n    name: 'vuetify',\n    current,\n    fallback,\n    messages,\n    decimalSeparator: toRef(() => options?.decimalSeparator ?? inferDecimalSeparator(current, fallback)),\n    numericGroupSeparator: toRef(() => options?.numericGroupSeparator ?? inferNumericGroupSeparator(current, fallback)),\n    t: createTranslateFunction(current, fallback, messages),\n    n: createNumberFunction(current, fallback),\n    provide: createProvideFunction({ current, fallback, messages }),\n  }\n}\n","// Utilities\nimport { computed, inject, provide, ref, toRef } from 'vue'\nimport { createVuetifyAdapter } from '@/locale/adapters/vuetify'\n// Types\nimport type { InjectionKey, Ref, ShallowRef } from 'vue'\n\nexport interface LocaleMessages {\n  [key: string]: LocaleMessages | string\n}\n\nexport interface LocaleOptions {\n  decimalSeparator?: string\n  numericGroupSeparator?: string\n  messages?: LocaleMessages\n  locale?: string\n  fallback?: string\n  adapter?: LocaleInstance\n}\n\nexport interface LocaleInstance {\n  name: string\n  decimalSeparator: ShallowRef<string>\n  numericGroupSeparator: ShallowRef<string>\n  messages: Ref<LocaleMessages>\n  current: Ref<string>\n  fallback: Ref<string>\n  t: (key: string, ...params: unknown[]) => string\n  n: (value: number) => string\n  provide: (props: LocaleOptions) => LocaleInstance\n}\n\nexport const LocaleSymbol: InjectionKey<LocaleInstance & RtlInstance> = Symbol.for('vuetify:locale')\n\nexport function createLocale (options?: LocaleOptions & RtlOptions) {\n  const i18n = options?.adapter?.name\n    ? options.adapter\n    : createVuetifyAdapter(options)\n\n  const rtl = createRtl(i18n, options)\n\n  return { ...i18n, ...rtl }\n}\n\nexport function useLocale () {\n  const locale = inject(LocaleSymbol)\n\n  if (!locale) throw new Error('[Vuetify] Could not find injected locale instance')\n\n  return locale\n}\n\nexport function provideLocale (props: LocaleOptions & RtlProps) {\n  const locale = inject(LocaleSymbol)\n\n  if (!locale) throw new Error('[Vuetify] Could not find injected locale instance')\n\n  const i18n = locale.provide(props)\n  const rtl = provideRtl(i18n, locale.rtl, props)\n\n  const data = { ...i18n, ...rtl }\n\n  provide(LocaleSymbol, data)\n\n  return data\n}\n\n// RTL\n\nexport interface RtlOptions {\n  rtl?: Record<string, boolean>\n}\n\nexport interface RtlProps {\n  rtl?: boolean\n}\n\nexport interface RtlInstance {\n  isRtl: Ref<boolean>\n  rtl: Ref<Record<string, boolean>>\n  rtlClasses: Ref<string>\n}\n\nexport const RtlSymbol: InjectionKey<RtlInstance> = Symbol.for('vuetify:rtl')\n\nfunction genDefaults () {\n  return {\n    af: false,\n    ar: true,\n    bg: false,\n    ca: false,\n    ckb: true,\n    cs: false,\n    de: false,\n    el: false,\n    en: false,\n    es: false,\n    et: false,\n    fa: true,\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    km: 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}\n\nexport function createRtl (i18n: LocaleInstance, options?: RtlOptions): RtlInstance {\n  const rtl = ref<Record<string, boolean>>(options?.rtl ?? genDefaults())\n  const isRtl = computed(() => rtl.value[i18n.current.value] ?? false)\n\n  return {\n    isRtl,\n    rtl,\n    rtlClasses: toRef(() => `v-locale--is-${isRtl.value ? 'rtl' : 'ltr'}`),\n  }\n}\n\nexport function provideRtl (locale: LocaleInstance, rtl: RtlInstance['rtl'], props: RtlProps): RtlInstance {\n  const isRtl = computed(() => props.rtl ?? rtl.value[locale.current.value] ?? false)\n\n  return {\n    isRtl,\n    rtl,\n    rtlClasses: toRef(() => `v-locale--is-${isRtl.value ? 'rtl' : 'ltr'}`),\n  }\n}\n\nexport function useRtl () {\n  const locale = inject(LocaleSymbol)\n\n  if (!locale) throw new Error('[Vuetify] Could not find injected rtl instance')\n\n  return { isRtl: locale.isRtl, rtlClasses: locale.rtlClasses }\n}\n","// Utilities\nimport {\n  computed,\n  getCurrentScope,\n  inject,\n  onScopeDispose,\n  provide,\n  ref,\n  shallowRef,\n  toRef,\n  watch,\n  watchEffect,\n} from 'vue'\nimport {\n  consoleWarn,\n  createRange,\n  darken,\n  deprecate,\n  getCurrentInstance,\n  getLuma,\n  hasLightForeground,\n  IN_BROWSER,\n  isElement,\n  isNumber,\n  isObject,\n  isString,\n  lighten,\n  mergeDeep,\n  parseColor,\n  PREFERS_REDUCED_MOTION,\n  propsFactory,\n  RGBtoHex,\n  SUPPORTS_MATCH_MEDIA,\n} from '@/util'\nimport { Box } from '@/util/box'\n\n// Types\nimport type { VueHeadClient } from '@unhead/vue/client'\nimport type { HeadClient } from '@vueuse/head'\nimport type { App, DeepReadonly, InjectionKey, Ref } from 'vue'\nimport type { Color } from '@/util'\n\ntype DeepPartial<T> = T extends object ? { [P in keyof T]?: DeepPartial<T[P]> } : T\n\nexport interface ThemeTransitionOptions {\n  origin?: string\n  duration?: string\n}\n\nexport type ThemeOptions = false | {\n  cspNonce?: string\n  defaultTheme?: 'light' | 'dark' | 'system' | string & {}\n  variations?: false | VariationsOptions\n  themes?: Record<string, ThemeDefinition>\n  transition?: boolean | ThemeTransitionOptions\n  stylesheetId?: string\n  scope?: string\n  utilities?: boolean\n}\nexport type ThemeDefinition = DeepPartial<InternalThemeDefinition>\n\ninterface InternalThemeOptions {\n  cspNonce?: string\n  isDisabled: boolean\n  defaultTheme: 'light' | 'dark' | 'system' | string & {}\n  prefix: string\n  variations: false | VariationsOptions\n  themes: Record<string, InternalThemeDefinition>\n  transition: boolean | ThemeTransitionOptions\n  stylesheetId: string\n  scope?: string\n  scoped: boolean\n  utilities: boolean\n}\n\ninterface VariationsOptions {\n  colors: string[]\n  lighten: number\n  darken: number\n}\n\ninterface InternalThemeDefinition {\n  dark: boolean\n  colors: Colors\n  variables: Record<string, string | number>\n}\n\nexport interface Colors extends BaseColors, OnColors {\n  [key: string]: Color\n}\n\ninterface BaseColors {\n  background: Color\n  surface: Color\n  primary: Color\n  secondary: Color\n  success: Color\n  warning: Color\n  error: Color\n  info: Color\n}\n\ninterface OnColors {\n  'on-background': Color\n  'on-surface': Color\n  'on-primary': Color\n  'on-secondary': Color\n  'on-success': Color\n  'on-warning': Color\n  'on-error': Color\n  'on-info': Color\n}\n\nexport interface ThemeInstance {\n  change: (themeName: string, transition?: boolean | ThemeTransitionOptions) => Promise<void>\n  cycle: (themeArray?: string[], transition?: boolean | ThemeTransitionOptions) => Promise<void>\n  toggle: (themeArray?: [string, string], transition?: boolean | ThemeTransitionOptions) => Promise<void>\n  setTransitionOrigin: (e: PointerEvent | Element | null) => void\n\n  readonly isDisabled: boolean\n  readonly isSystem: Readonly<Ref<boolean>>\n  readonly themes: Ref<Record<string, InternalThemeDefinition>>\n\n  readonly name: Readonly<Ref<string>>\n  readonly current: DeepReadonly<Ref<InternalThemeDefinition>>\n  readonly computedThemes: DeepReadonly<Ref<Record<string, InternalThemeDefinition>>>\n  readonly prefix: string\n\n  readonly themeClasses: Readonly<Ref<string | undefined>>\n  readonly styles: Readonly<Ref<string>>\n\n  readonly global: {\n    readonly name: Ref<string>\n    readonly current: DeepReadonly<Ref<InternalThemeDefinition>>\n  }\n}\n\nexport const ThemeSymbol: InjectionKey<ThemeInstance> = Symbol.for('vuetify:theme')\n\nexport const makeThemeProps = propsFactory({\n  theme: String,\n}, 'theme')\n\nfunction genDefaults () {\n  return {\n    defaultTheme: 'system',\n    prefix: 'v-',\n    variations: { colors: [], lighten: 0, darken: 0 },\n    themes: {\n      light: {\n        dark: false,\n        colors: {\n          background: '#FFFFFF',\n          surface: '#FFFFFF',\n          'surface-bright': '#FFFFFF',\n          'surface-light': '#EEEEEE',\n          'surface-variant': '#424242',\n          'on-surface-variant': '#EEEEEE',\n          primary: '#1867C0',\n          'primary-darken-1': '#1F5592',\n          secondary: '#48A9A6',\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          'shadow-color': '#000000',\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          'theme-kbd': '#EEEEEE',\n          'theme-on-kbd': '#000000',\n          'theme-code': '#F5F5F5',\n          'theme-on-code': '#000000',\n          'theme-on-dark': '#FFF',\n          'theme-on-light': '#000',\n          'elevation-overlay-color': 'black',\n          'elevation-overlay-opacity-step': '2%',\n          'highlight-opacity': '8%',\n        },\n      },\n      dark: {\n        dark: true,\n        colors: {\n          background: '#121212',\n          surface: '#212121',\n          'surface-bright': '#ccbfd6',\n          'surface-light': '#424242',\n          'surface-variant': '#c8c8c8',\n          'on-surface-variant': '#000000',\n          primary: '#2196F3',\n          'primary-darken-1': '#277CC1',\n          secondary: '#54B6B2',\n          'secondary-darken-1': '#48A9A6',\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          'shadow-color': '#000000',\n          'high-emphasis-opacity': 1,\n          'medium-emphasis-opacity': 0.70,\n          'disabled-opacity': 0.50,\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          'theme-kbd': '#424242',\n          'theme-on-kbd': '#FFFFFF',\n          'theme-code': '#343434',\n          'theme-on-code': '#CCCCCC',\n          'theme-on-dark': '#FFF',\n          'theme-on-light': '#000',\n          'elevation-overlay-color': 'white',\n          'elevation-overlay-opacity-step': '2%',\n          'highlight-opacity': '20%',\n        },\n      },\n    },\n    stylesheetId: 'vuetify-theme-stylesheet',\n    scoped: false,\n    utilities: true,\n    transition: false,\n  }\n}\n\nfunction parseThemeOptions (options: ThemeOptions = genDefaults()): InternalThemeOptions {\n  const defaults = genDefaults()\n\n  if (!options) return { ...defaults, isDisabled: true } as any\n\n  return mergeDeep(defaults, options) as InternalThemeOptions\n}\n\nfunction createCssClass (lines: string[], selector: string, content: string[], scope?: string) {\n  lines.push(\n    `${getScopedSelector(selector, scope)} {\\n`,\n    ...content.map(line => `  ${line};\\n`),\n    '}\\n',\n  )\n}\n\nfunction genCssVariables (theme: InternalThemeDefinition, prefix: string) {\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 = parseColor(value)\n    variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}` + (isNumber(rgb.a) ? `,${rgb.a}` : ''))\n    if (!key.startsWith('on-')) {\n      variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`)\n    }\n  }\n\n  for (const [key, value] of Object.entries(theme.variables)) {\n    const color = isString(value) && value.startsWith('#') ? parseColor(value) : undefined\n    const rgb = color ? `${color.r}, ${color.g}, ${color.b}` + (isNumber(color.a) ? `, ${color.a}` : '') : undefined\n    variables.push(`--${prefix}${key}: ${rgb ?? value}`)\n  }\n\n  return variables\n}\n\nfunction genVariation (name: string, color: Color, variations: VariationsOptions | false) {\n  const object: Record<string, string> = {}\n  if (variations) {\n    for (const variation of (['lighten', 'darken'] as const)) {\n      const fn = variation === 'lighten' ? lighten : darken\n      for (const amount of createRange(variations[variation], 1)) {\n        object[`${name}-${variation}-${amount}`] = RGBtoHex(fn(parseColor(color), amount))\n      }\n    }\n  }\n  return object\n}\n\nfunction genVariations (colors: InternalThemeDefinition['colors'], variations: VariationsOptions | false) {\n  if (!variations) return {}\n\n  let variationColors = {}\n  for (const name of variations.colors) {\n    const color = colors[name]\n\n    if (!color) continue\n\n    variationColors = {\n      ...variationColors,\n      ...genVariation(name, color, variations),\n    }\n  }\n  return variationColors\n}\n\nfunction genOnColors (colors: InternalThemeDefinition['colors'], variables: InternalThemeDefinition['variables']) {\n  const onColors = {} as InternalThemeDefinition['colors']\n\n  for (const color of Object.keys(colors)) {\n    if (color.startsWith('on-') || colors[`on-${color}`]) continue\n\n    const onColor = `on-${color}` as keyof OnColors\n    const colorVal = parseColor(colors[color])\n\n    onColors[onColor] = hasLightForeground(colorVal)\n      ? variables['theme-on-dark']\n      : variables['theme-on-light']\n  }\n\n  return onColors\n}\n\nfunction getScopedSelector (selector: string, scope?: string) {\n  if (!scope) return selector\n\n  const scopeSelector = `:where(${scope})`\n\n  return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`\n}\n\nfunction upsertStyles (id: string, cspNonce: string | undefined, styles: string) {\n  const styleEl = getOrCreateStyleElement(id, cspNonce)\n\n  if (!styleEl) return\n\n  styleEl.innerHTML = styles\n}\n\nfunction getOrCreateStyleElement (id: string, cspNonce?: string) {\n  if (!IN_BROWSER) return null\n\n  let style = document.getElementById(id) as HTMLStyleElement | null\n\n  if (!style) {\n    style = document.createElement('style')\n    style.id = id\n    style.type = 'text/css'\n\n    if (cspNonce) style.setAttribute('nonce', cspNonce)\n\n    document.head.appendChild(style)\n  }\n\n  return style\n}\n\n// Composables\nexport function createTheme (options?: ThemeOptions): ThemeInstance & { install: (app: App) => void } {\n  const parsedOptions = parseThemeOptions(options)\n  const _name = shallowRef(parsedOptions.defaultTheme)\n  const themes = ref(parsedOptions.themes)\n  const systemName = shallowRef('light')\n\n  const name = computed({\n    get () {\n      return _name.value === 'system' ? systemName.value : _name.value\n    },\n    set (val: string) {\n      _name.value = val\n    },\n  })\n\n  const computedThemes = computed(() => {\n    const acc: Record<string, InternalThemeDefinition> = {}\n    for (const [name, original] of Object.entries(themes.value)) {\n      const defaultTheme = original.dark || name === 'dark'\n        ? themes.value.dark\n        : themes.value.light\n\n      const merged = mergeDeep(defaultTheme, original) as InternalThemeDefinition\n\n      const colors = {\n        ...merged.colors,\n        ...genVariations(merged.colors, parsedOptions.variations),\n      }\n\n      acc[name] = {\n        ...merged,\n        colors: {\n          ...colors,\n          ...genOnColors(colors, merged.variables),\n        },\n      }\n    }\n    return acc\n  })\n\n  const current = toRef(() => computedThemes.value[name.value])\n\n  const isSystem = toRef(() => _name.value === 'system')\n\n  const styles = computed(() => {\n    const lines: string[] = []\n    const scoped = parsedOptions.scoped ? parsedOptions.prefix : ''\n\n    lines.push('@layer theme-base {\\n')\n\n    createCssClass(lines, ':root', [`color-scheme: ${current.value?.dark ? 'dark' : 'light'}`], parsedOptions.scope)\n\n    createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope)\n\n    for (const [themeName, theme] of Object.entries(computedThemes.value)) {\n      createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [\n        `color-scheme: ${theme.dark ? 'dark' : 'light'}`,\n        ...genCssVariables(theme, parsedOptions.prefix),\n      ], parsedOptions.scope)\n    }\n\n    lines.push('}\\n')\n\n    if (parsedOptions.utilities) {\n      const bgLines: string[] = []\n      const fgLines: string[] = []\n\n      const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)))\n      for (const key of colors) {\n        if (key.startsWith('on-')) {\n          createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))`], parsedOptions.scope)\n        } else {\n          createCssClass(bgLines, `.${scoped}bg-${key}`, [\n            `--${parsedOptions.prefix}theme-overlay-multiplier: var(--${parsedOptions.prefix}theme-${key}-overlay-multiplier)`,\n            `background-color: rgb(var(--${parsedOptions.prefix}theme-${key}))`,\n            `color: rgb(var(--${parsedOptions.prefix}theme-on-${key}))`,\n          ], parsedOptions.scope)\n          createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))`], parsedOptions.scope)\n          createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope)\n        }\n      }\n\n      lines.push(\n        '@layer theme-background {\\n',\n        ...bgLines.map(v => `  ${v}`),\n        '}\\n',\n        '@layer theme-foreground {\\n',\n        ...fgLines.map(v => `  ${v}`),\n        '}\\n',\n      )\n    }\n\n    return '@layer vuetify-utilities {\\n' + lines.map(v => `  ${v}`).join('') + '\\n}'\n  })\n\n  const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`)\n  const themeNames = toRef(() => Object.keys(computedThemes.value))\n\n  if (SUPPORTS_MATCH_MEDIA) {\n    const media = window.matchMedia('(prefers-color-scheme: dark)')\n\n    function updateSystemName () {\n      systemName.value = media.matches ? 'dark' : 'light'\n    }\n\n    updateSystemName()\n\n    media.addEventListener('change', updateSystemName, { passive: true })\n\n    if (getCurrentScope()) {\n      onScopeDispose(() => {\n        media.removeEventListener('change', updateSystemName)\n      })\n    }\n  }\n\n  function install (app: App) {\n    if (parsedOptions.isDisabled) return\n\n    const head = app._context.provides.usehead as HeadClient & VueHeadClient<any> | undefined\n    if (head) {\n      function getHead () {\n        return {\n          style: [{\n            textContent: styles.value,\n            id: parsedOptions.stylesheetId,\n            nonce: parsedOptions.cspNonce || false as never,\n            tagPosition: 'bodyOpen' as const,\n          }],\n        }\n      }\n\n      if (head.push) {\n        const entry = head.push(getHead)\n        if (IN_BROWSER) {\n          watch(styles, () => { entry.patch(getHead) })\n        }\n      } else {\n        if (IN_BROWSER) {\n          head.addHeadObjs(toRef(getHead))\n          watchEffect(() => head.updateDOM())\n        } else {\n          head.addHeadObjs(getHead())\n        }\n      }\n    } else {\n      if (IN_BROWSER) {\n        watch(styles, updateStyles, { immediate: true })\n      } else {\n        updateStyles()\n      }\n\n      function updateStyles () {\n        upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value)\n      }\n    }\n  }\n\n  let _transitionOrigin: string | null\n  function setTransitionOrigin (e: PointerEvent | Element | null) {\n    if (!e) {\n      _transitionOrigin = null\n      return\n    }\n\n    let x: number\n    let y: number\n\n    if (isElement(e)) {\n      const box = new Box(e)\n      x = box.left + box.width / 2\n      y = box.top + box.height / 2\n    } else {\n      x = e.clientX\n      y = e.clientY\n    }\n\n    const originX = Math.min(98.9, 100 * x / window.innerWidth) // clip to avoid glitches\n    const originY = 100 * y / window.innerHeight\n    _transitionOrigin = `${originX.toFixed(2)}% ${originY.toFixed(2)}%`\n  }\n\n  function resolveTransitionOptions (\n    transition?: boolean | ThemeTransitionOptions\n  ): ThemeTransitionOptions | false {\n    const opt = transition ?? parsedOptions.transition\n    if (!opt && !_transitionOrigin) return false\n    const global = isObject(parsedOptions.transition) ? parsedOptions.transition : {}\n    const local = isObject(transition) ? transition : {}\n    return {\n      origin: local.origin ?? _transitionOrigin ?? global.origin,\n      duration: local.duration ?? global.duration,\n    }\n  }\n\n  function withPageTransition (callback: () => void, options: ThemeTransitionOptions): Promise<void> {\n    if (!IN_BROWSER || !document.startViewTransition || PREFERS_REDUCED_MOTION()) {\n      callback()\n      return Promise.resolve()\n    }\n\n    const origin = options.origin ?? '50% 0%'\n    const duration = options.duration ?? '500ms'\n\n    const style = document.createElement('style')\n    style.textContent =\n      `html:active-view-transition-type(vuetify-theme)::view-transition-old(root) { animation: none; }` +\n      `html:active-view-transition-type(vuetify-theme)::view-transition-new(root) { animation: v-circle-in ${duration} ease-in-out; }` +\n      `@keyframes v-circle-in {` +\n      `  from { clip-path: circle(0% at ${origin}); }` +\n      `  to { clip-path: circle(150% at ${origin}); }` +\n      `}`\n    document.head.appendChild(style)\n\n    const transition = document.startViewTransition({ update: () => callback(), types: ['vuetify-theme'] })\n    transition.finished.then(() => {\n      _transitionOrigin = null\n      style.remove()\n    })\n\n    return transition.updateCallbackDone\n  }\n\n  function change (themeName: string, transition?: boolean | ThemeTransitionOptions): Promise<void> {\n    if (themeName !== 'system' && !themeNames.value.includes(themeName)) {\n      consoleWarn(`Theme \"${themeName}\" not found on the Vuetify theme instance`)\n      return Promise.resolve()\n    }\n\n    const apply = () => { name.value = themeName }\n    const transitionOptions = resolveTransitionOptions(transition)\n\n    if (transitionOptions) {\n      return withPageTransition(apply, transitionOptions)\n    }\n\n    apply()\n    return Promise.resolve()\n  }\n\n  function cycle (themeArray: string[] = themeNames.value, transition?: boolean | ThemeTransitionOptions): Promise<void> {\n    const currentIndex = themeArray.indexOf(name.value)\n    const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length\n\n    return change(themeArray[nextIndex], transition)\n  }\n\n  function toggle (themeArray: [string, string] = ['light', 'dark'], transition?: boolean | ThemeTransitionOptions): Promise<void> {\n    return cycle(themeArray, transition)\n  }\n\n  const globalName = new Proxy(name, {\n    get (target, prop) {\n      return Reflect.get(target, prop)\n    },\n    set (target, prop, val) {\n      if (prop === 'value') {\n        deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`)\n      }\n      return Reflect.set(target, prop, val)\n    },\n  })\n\n  return {\n    install,\n    change,\n    cycle,\n    toggle,\n    setTransitionOrigin,\n    isDisabled: parsedOptions.isDisabled,\n    isSystem,\n    name,\n    themes,\n    current,\n    computedThemes,\n    prefix: parsedOptions.prefix,\n    themeClasses,\n    styles,\n    global: {\n      name: globalName,\n      current,\n    },\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 name = toRef(() => props.theme ?? theme.name.value)\n  const current = toRef(() => theme.computedThemes.value[name.value])\n\n  const themeClasses = toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`)\n\n  const newTheme: ThemeInstance = {\n    ...theme,\n    name,\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","// Styles\nimport './VApp.sass'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { createLayout, makeLayoutProps } from '@/composables/layout'\nimport { useRtl } from '@/composables/locale'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\nexport const makeVAppProps = propsFactory({\n  ...makeComponentProps(),\n  ...omit(makeLayoutProps(), ['fullHeight']),\n  ...makeThemeProps(),\n}, 'VApp')\n\nexport const VApp = genericComponent()({\n  name: 'VApp',\n\n  props: makeVAppProps(),\n\n  setup (props, { slots }) {\n    const theme = provideTheme(props)\n    const { layoutClasses, getLayoutItem, items, layoutRef } = createLayout({ ...props, fullHeight: true })\n    const { rtlClasses } = useRtl()\n\n    useRender(() => (\n      <div\n        ref={ layoutRef }\n        class={[\n          'v-application',\n          theme.themeClasses.value,\n          layoutClasses.value,\n          rtlClasses.value,\n          props.class,\n        ]}\n        style={[\n          props.style,\n        ]}\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 { propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { JSXComponent } from '@/util'\n\n// Types\nexport interface TagProps {\n  tag: string | JSXComponent\n}\n\n// Composables\nexport const makeTagProps = propsFactory({\n  tag: {\n    type: [String, Object, Function] as PropType<string | JSXComponent>,\n    default: 'div',\n  },\n}, 'tag')\n","// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVToolbarTitleProps = propsFactory({\n  text: String,\n\n  ...makeComponentProps(),\n  ...makeTagProps(),\n}, 'VToolbarTitle')\n\nexport type VToolbarTitleSlots = {\n  default: never\n  text: never\n}\n\nexport const VToolbarTitle = genericComponent<VToolbarTitleSlots>()({\n  name: 'VToolbarTitle',\n\n  props: makeVToolbarTitleProps(),\n\n  setup (props, { slots }) {\n    useRender(() => {\n      const hasText = !!(slots.default || slots.text || props.text)\n\n      return (\n        <props.tag\n          class={[\n            'v-toolbar-title',\n            props.class,\n          ]}\n          style={ props.style }\n        >\n          { hasText && (\n            <div class=\"v-toolbar-title__placeholder\">\n              { slots.text ? slots.text() : props.text }\n\n              { slots.default?.() }\n            </div>\n          )}\n        </props.tag>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VToolbarTitle = InstanceType<typeof VToolbarTitle>\n","// Utilities\nimport { h, Transition, TransitionGroup } from 'vue'\nimport { genericComponent, PREFERS_REDUCED_MOTION, propsFactory } from '@/util'\n\n// Types\nimport type { FunctionalComponent, PropType } from 'vue'\n\nexport const makeTransitionProps = propsFactory({\n  disabled: Boolean,\n  group: Boolean,\n  hideOnLeave: Boolean,\n  leaveAbsolute: Boolean,\n  mode: String,\n  origin: String,\n}, 'transition')\n\nexport function createCssTransition (\n  name: string,\n  origin?: string,\n  mode?: string\n) {\n  return genericComponent()({\n    name,\n\n    props: makeTransitionProps({\n      mode,\n      origin,\n    }),\n\n    setup (props, { slots }) {\n      const functions = {\n        onBeforeEnter (el: HTMLElement) {\n          if (props.origin) {\n            el.style.transformOrigin = props.origin\n          }\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      }\n\n      return () => {\n        const tag = props.group ? TransitionGroup : Transition\n\n        return h(tag as FunctionalComponent, {\n          name: props.disabled ? '' : name,\n          css: !props.disabled,\n          ...(props.group ? undefined : { mode: props.mode }),\n          ...(props.disabled ? {} : functions),\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 genericComponent()({\n    name,\n\n    props: {\n      mode: {\n        type: String as PropType<'in-out' | 'out-in' | 'default'>,\n        default: mode,\n      },\n      disabled: {\n        type: Boolean,\n        default: PREFERS_REDUCED_MOTION(),\n      },\n      group: Boolean,\n      hideOnLeave: Boolean,\n    },\n\n    setup (props, { slots }) {\n      const tag = props.group ? TransitionGroup : Transition\n\n      return () => {\n        return h(tag as FunctionalComponent, {\n          name: props.disabled ? '' : name,\n          css: !props.disabled,\n          // mode: props.mode, // TODO: vuejs/vue-next#3104\n          ...(props.disabled ? {} : {\n            ...functions,\n            onLeave: (el: HTMLElement) => {\n              if (props.hideOnLeave) {\n                el.style.setProperty('display', 'none', 'important')\n              } else {\n                functions.onLeave?.(el)\n              }\n            },\n          }),\n        }, slots.default)\n      }\n    },\n  })\n}\n","interface 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 = '', type: 'x' | 'y' | 'both' = 'y') {\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        width: el.style.width,\n        height: el.style.height,\n      }\n    },\n\n    onEnter (el: HTMLExpandElement) {\n      const initialStyle = el._initialStyle\n      if (!initialStyle) return\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 offsetWidth = `${el.offsetWidth}px`\n      const offsetHeight = `${el.offsetHeight}px`\n\n      if (['x', 'both'].includes(type)) el.style.width = '0'\n      if (['y', 'both'].includes(type)) el.style.height = '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        if (['x', 'both'].includes(type)) el.style.width = offsetWidth\n        if (['y', 'both'].includes(type)) el.style.height = offsetHeight\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        width: el.style.width,\n        height: el.style.height,\n      }\n\n      el.style.overflow = 'hidden'\n      if (['x', 'both'].includes(type)) el.style.width = `${el.offsetWidth}px`\n      if (['y', 'both'].includes(type)) el.style.height = `${el.offsetHeight}px`\n      void el.offsetHeight // force reflow\n\n      requestAnimationFrame(() => {\n        if (['x', 'both'].includes(type)) el.style.width = '0'\n        if (['y', 'both'].includes(type)) el.style.height = '0'\n      })\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    if (!el._initialStyle) return\n\n    const { width: w, height: h } = el._initialStyle\n    el.style.overflow = el._initialStyle.overflow\n    if (w != null && ['x', 'both'].includes(type)) el.style.width = w\n    if (h != null && ['y', 'both'].includes(type)) el.style.height = h\n    delete el._initialStyle\n  }\n}\n","// Utilities\nimport { Transition } from 'vue'\nimport {\n  acceleratedEasing,\n  animate,\n  deceleratedEasing,\n  genericComponent,\n  nullifyTransforms,\n  PREFERS_REDUCED_MOTION,\n  propsFactory,\n  standardEasing,\n} from '@/util'\nimport { getTargetBox } from '@/util/box'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const makeVDialogTransitionProps = propsFactory({\n  target: [Object, Array] as PropType<HTMLElement | [x: number, y: number]>,\n}, 'v-dialog-transition')\n\nconst saved = new WeakMap<Element, Dimensions>()\n\nexport const VDialogTransition = genericComponent()({\n  name: 'VDialogTransition',\n\n  props: makeVDialogTransitionProps(),\n\n  setup (props, { slots }) {\n    const functions = {\n      onBeforeEnter (el: Element) {\n        (el as HTMLElement).style.pointerEvents = 'none'\n        ;(el as HTMLElement).style.visibility = 'hidden'\n      },\n      async onEnter (el: Element, done: () => void) {\n        await new Promise(resolve => requestAnimationFrame(resolve))\n        await new Promise(resolve => requestAnimationFrame(resolve))\n        ;(el as HTMLElement).style.visibility = ''\n\n        const dimensions = getDimensions(props.target!, el as HTMLElement)\n        const { x, y, sx, sy, speed } = dimensions\n        saved.set(el, dimensions)\n\n        if (PREFERS_REDUCED_MOTION()) {\n          animate(el, [\n            { opacity: 0 },\n            {},\n          ], {\n            duration: 125 * speed,\n            easing: deceleratedEasing,\n          }).finished.then(() => done())\n        } else {\n          const animation = animate(el, [\n            { transform: `translate(${x}px, ${y}px) scale(${sx}, ${sy})`, opacity: 0 },\n            {},\n          ], {\n            duration: 225 * speed,\n            easing: deceleratedEasing,\n          })\n          getChildren(el)?.forEach(el => {\n            animate(el, [\n              { opacity: 0 },\n              { opacity: 0, offset: 0.33 },\n              {},\n            ], {\n              duration: 225 * 2 * speed,\n              easing: standardEasing,\n            })\n          })\n          animation.finished.then(() => done())\n        }\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        let dimensions\n        if (\n          !saved.has(el) ||\n          Array.isArray(props.target) ||\n          props.target!.offsetParent ||\n          props.target!.getClientRects().length\n        ) {\n          dimensions = getDimensions(props.target!, el as HTMLElement)\n        } else {\n          dimensions = saved.get(el)!\n        }\n        const { x, y, sx, sy, speed } = dimensions\n\n        if (PREFERS_REDUCED_MOTION()) {\n          animate(el, [\n            {},\n            { opacity: 0 },\n          ], {\n            duration: 85 * speed,\n            easing: acceleratedEasing,\n          }).finished.then(() => done())\n        } else {\n          const animation = animate(el, [\n            {},\n            { transform: `translate(${x}px, ${y}px) scale(${sx}, ${sy})`, opacity: 0 },\n          ], {\n            duration: 125 * speed,\n            easing: acceleratedEasing,\n          })\n          animation.finished.then(() => done())\n          getChildren(el)?.forEach(el => {\n            animate(el, [\n              {},\n              { opacity: 0, offset: 0.2 },\n              { opacity: 0 },\n            ], {\n              duration: 125 * 2 * speed,\n              easing: standardEasing,\n            })\n          })\n        }\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\n/** Animatable children (card, sheet, list) */\nfunction getChildren (el: Element) {\n  const els = el.querySelector(':scope > .v-card, :scope > .v-sheet, :scope > .v-list')?.children\n  return els && [...els]\n}\n\ntype Dimensions = {\n  x: number\n  y: number\n  sx: number\n  sy: number\n  speed: number\n}\n\nfunction getDimensions (target: HTMLElement | [x: number, y: number], el: HTMLElement): Dimensions {\n  const targetBox = getTargetBox(target)\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  const tsx = targetBox.width / elBox.width\n  const tsy = targetBox.height / elBox.height\n  const maxs = Math.max(1, tsx, tsy)\n  const sx = tsx / maxs || 0\n  const sy = tsy / maxs || 0\n\n  // Animate elements larger than 12% of the screen area up to 1.5x slower\n  const asa = (elBox.width * elBox.height) / (window.innerWidth * window.innerHeight)\n  const speed = asa > 0.12\n    ? Math.min(1.5, (asa - 0.12) * 10 + 1)\n    : 1\n\n  return {\n    x: offsetX - (originX + elBox.left),\n    y: offsetY - (originY + elBox.top),\n    sx,\n    sy,\n    speed,\n  }\n}\n\nexport type VDialogTransition = InstanceType<typeof VDialogTransition>\n","import {\n  createCssTransition,\n  createJavascriptTransition,\n} from './createTransition'\n\nimport ExpandTransitionGenerator from './expand-transition'\n\n// Component specific transitions\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('', 'x'))\nexport const VExpandBothTransition = createJavascriptTransition('expand-both-transition', ExpandTransitionGenerator('', 'both'))\n\nexport { VDialogTransition } from './dialog-transition'\n\nexport type VFabTransition = InstanceType<typeof VFabTransition>\nexport type VDialogBottomTransition = InstanceType<typeof VDialogBottomTransition>\nexport type VDialogTopTransition = InstanceType<typeof VDialogTopTransition>\nexport type VFadeTransition = InstanceType<typeof VFadeTransition>\nexport type VScaleTransition = InstanceType<typeof VScaleTransition>\nexport type VScrollXTransition = InstanceType<typeof VScrollXTransition>\nexport type VScrollXReverseTransition = InstanceType<typeof VScrollXReverseTransition>\nexport type VScrollYTransition = InstanceType<typeof VScrollYTransition>\nexport type VScrollYReverseTransition = InstanceType<typeof VScrollYReverseTransition>\nexport type VSlideXTransition = InstanceType<typeof VSlideXTransition>\nexport type VSlideXReverseTransition = InstanceType<typeof VSlideXReverseTransition>\nexport type VSlideYTransition = InstanceType<typeof VSlideYTransition>\nexport type VSlideYReverseTransition = InstanceType<typeof VSlideYReverseTransition>\nexport type VExpandTransition = InstanceType<typeof VExpandTransition>\nexport type VExpandXTransition = InstanceType<typeof VExpandXTransition>\n","// Composables\nimport { provideDefaults } from '@/composables/defaults'\n\n// Utilities\nimport { toRefs } from 'vue'\nimport { genericComponent, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { DefaultsOptions } from '@/composables/defaults'\n\nexport const makeVDefaultsProviderProps = propsFactory({\n  defaults: Object as PropType<DefaultsOptions>,\n  disabled: Boolean,\n  reset: [Number, String],\n  root: [Boolean, String],\n  scoped: Boolean,\n}, 'VDefaultsProvider')\n\nexport const VDefaultsProvider = genericComponent(false)({\n  name: 'VDefaultsProvider',\n\n  props: makeVDefaultsProviderProps(),\n\n  setup (props, { slots }) {\n    const { defaults, disabled, reset, root, scoped } = toRefs(props)\n\n    provideDefaults(defaults, {\n      reset,\n      root,\n      scoped,\n      disabled,\n    })\n\n    return () => slots.default?.()\n  },\n})\n\nexport type VDefaultsProvider = InstanceType<typeof VDefaultsProvider>\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    const styles: Record<string, any> = {}\n\n    const height = convertToUnit(props.height)\n    const maxHeight = convertToUnit(props.maxHeight)\n    const maxWidth = convertToUnit(props.maxWidth)\n    const minHeight = convertToUnit(props.minHeight)\n    const minWidth = convertToUnit(props.minWidth)\n    const width = convertToUnit(props.width)\n\n    if (height) styles.height = height\n    if (maxHeight) styles.maxHeight = maxHeight\n    if (maxWidth) styles.maxWidth = maxWidth\n    if (minHeight) styles.minHeight = minHeight\n    if (minWidth) styles.minWidth = minWidth\n    if (width) styles.width = width\n\n    return styles\n  })\n\n  return { dimensionStyles }\n}\n","// Styles\nimport './VResponsive.sass'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport type VResponsiveSlots = {\n  default: never\n  additional: never\n}\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 makeVResponsiveProps = propsFactory({\n  aspectRatio: [String, Number],\n  contentClass: null,\n  inline: Boolean,\n\n  ...makeComponentProps(),\n  ...makeDimensionProps(),\n}, 'VResponsive')\n\nexport const VResponsive = genericComponent<VResponsiveSlots>()({\n  name: 'VResponsive',\n\n  props: makeVResponsiveProps(),\n\n  setup (props, { slots }) {\n    const { aspectStyles } = useAspectStyles(props)\n    const { dimensionStyles } = useDimension(props)\n\n    useRender(() => (\n      <div\n        class={[\n          'v-responsive',\n          { 'v-responsive--inline': props.inline },\n          props.class,\n        ]}\n        style={[\n          dimensionStyles.value,\n          props.style,\n        ]}\n      >\n        <div class=\"v-responsive__sizer\" style={ aspectStyles.value } />\n\n        { slots.additional?.() }\n\n        { slots.default && (\n          <div class={['v-responsive__content', props.contentClass]}>{ slots.default() }</div>\n        )}\n      </div>\n    ))\n\n    return {}\n  },\n})\n\nexport type VResponsive = InstanceType<typeof VResponsive>\n","// Utilities\nimport { toValue } from 'vue'\nimport { destructComputed, hasLightForeground, isCssColor, isNumber, isParsableColor, isString, parseColor } from '@/util'\n\n// Types\nimport type { CSSProperties, MaybeRefOrGetter, Ref } from 'vue'\n\nexport type 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: MaybeRefOrGetter<{ background?: ColorValue, text?: ColorValue }>) {\n  return destructComputed(() => {\n    const {\n      class: colorClasses,\n      style: colorStyles,\n    } = computeColor(colors)\n\n    return { colorClasses, colorStyles }\n  })\n}\n\nexport function useTextColor (color: MaybeRefOrGetter<ColorValue>): TextColorData {\n  const {\n    colorClasses: textColorClasses,\n    colorStyles: textColorStyles,\n  } = useColor(() => ({\n    text: toValue(color),\n  }))\n\n  return { textColorClasses, textColorStyles }\n}\n\nexport function useBackgroundColor (color: MaybeRefOrGetter<ColorValue>): BackgroundColorData {\n  const {\n    colorClasses: backgroundColorClasses,\n    colorStyles: backgroundColorStyles,\n  } = useColor(() => ({\n    background: toValue(color),\n  }))\n\n  return { backgroundColorClasses, backgroundColorStyles }\n}\n\nfunction normalizeColors (colors: { background?: ColorValue, text?: ColorValue }) {\n  return {\n    text: isString(colors.text)\n      ? colors.text.replace(/^text-/, '')\n      : colors.text,\n    background: isString(colors.background)\n      ? colors.background.replace(/^bg-/, '')\n      : colors.background,\n  }\n}\n\nexport function computeColor (colors: MaybeRefOrGetter<{ background?: ColorValue, text?: ColorValue }>) {\n  const _colors = normalizeColors(toValue(colors))\n\n  const classes: string[] = []\n  const styles: CSSProperties = {}\n\n  if (_colors.background) {\n    if (isCssColor(_colors.background)) {\n      styles.backgroundColor = _colors.background\n\n      if (!_colors.text && isParsableColor(_colors.background)) {\n        const backgroundColor = parseColor(_colors.background)\n        if (!isNumber(backgroundColor.a) || backgroundColor.a === 1) {\n          classes.push(hasLightForeground(backgroundColor)\n            ? 'v-theme-on-dark'\n            : 'v-theme-on-light'\n          )\n        }\n      }\n    } else {\n      classes.push(`bg-${_colors.background}`)\n    }\n  }\n\n  if (_colors.text) {\n    if (isCssColor(_colors.text)) {\n      styles.color = _colors.text\n      styles.caretColor = _colors.text\n    } else {\n      classes.push(`text-${_colors.text}`)\n    }\n  }\n\n  return { class: classes, style: styles }\n}\n","// Utilities\nimport { computed, isRef } from 'vue'\nimport { convertToUnit, getCurrentInstanceName, isString, propsFactory } from '@/util'\n\n// Types\nimport type { CSSProperties, 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  roundedStyles: Ref<CSSProperties>\n}\n\nconst CSS_LENGTH = /^-?\\d*\\.?\\d+([a-z%]{0,4})$/i\n\nfunction splitTokens (v: RoundedValue) {\n  return String(v).trim().split(/\\s+/)\n}\n\nfunction isCssLength (token: string) {\n  return token.toLowerCase().match(CSS_LENGTH)?.at(1)?.startsWith('x') === false\n}\n\nfunction isCssValue (v: RoundedValue): v is string {\n  return typeof v === 'string' && !!v &&\n    (v.includes('(') || splitTokens(v).every(isCssLength))\n}\n\n// Composables\nexport const makeRoundedProps = propsFactory({\n  rounded: {\n    type: [Boolean, Number, String],\n    default: undefined,\n  },\n  tile: Boolean,\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 tile = isRef(props) ? false : props.tile\n    const classes: string[] = []\n\n    if (tile || rounded === false || String(rounded) === '0') {\n      classes.push('rounded-0')\n    } else if (rounded === true || rounded === '') {\n      classes.push(`${name}--rounded`)\n    } else if (isString(rounded) && !isCssValue(rounded)) {\n      for (const value of splitTokens(rounded)) {\n        classes.push(`rounded-${value}`)\n      }\n    }\n\n    return classes\n  })\n\n  const roundedStyles = computed<CSSProperties>(() => {\n    const rounded = isRef(props) ? props.value : props.rounded\n\n    if ((!isCssValue(rounded) || String(rounded) === '0') &&\n      !(typeof rounded === 'number' && rounded !== 0)\n    ) {\n      return {}\n    }\n\n    return { borderRadius: convertToUnit(rounded) }\n  })\n\n  return { roundedClasses, roundedStyles }\n}\n","// Utilities\nimport { h, mergeProps, Transition, TransitionGroup } from 'vue'\nimport { isObject, onlyDefinedProps, propsFactory } from '@/util'\n\n// Types\nimport type { Component, FunctionalComponent, Prop, TransitionProps } from 'vue'\n\nexport const makeTransitionProps = propsFactory({\n  transition: {\n    type: null,\n    default: 'fade-transition',\n    validator: val => val !== true,\n  } as Prop<null | string | boolean | TransitionProps & { component?: Component }>,\n}, 'transition')\n\ninterface MaybeTransitionProps extends TransitionProps {\n  transition?: null | string | boolean | TransitionProps & { component?: any }\n  disabled?: boolean\n  group?: boolean\n  target?: HTMLElement | [x: number, y: number]\n}\n\nexport const MaybeTransition: FunctionalComponent<MaybeTransitionProps> = (props, { slots }) => {\n  const { transition, disabled, group, target, ...rest } = props\n\n  const {\n    component = group ? TransitionGroup : Transition,\n    ...customProps\n  } = isObject(transition) ? transition : {}\n\n  let transitionProps\n  if (isObject(transition)) {\n    transitionProps = mergeProps(\n      customProps,\n      onlyDefinedProps({ disabled, group, target }),\n      rest,\n    )\n  } else {\n    transitionProps = mergeProps(\n      { name: disabled || !transition ? '' : transition },\n      rest,\n    )\n  }\n\n  return h(\n    component,\n    transitionProps,\n    slots\n  )\n}\n","// Utilities\nimport { isFunction, isObject, SUPPORTS_INTERSECTION } from '@/util'\n\n// Types\nimport type {\n  DirectiveBinding,\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 = isFunction(value) || !isObject(value) ? value : value.handler\n  const options = isFunction(value) || !isObject(value) ? {} : 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 = {\n  mounted,\n  unmounted,\n  updated: (el: HTMLElement, binding: ObserveDirectiveBinding) => {\n    if (el._observe?.[binding.instance!.$.uid]) {\n      unmounted(el, binding)\n      mounted(el, binding)\n    }\n  },\n}\n\nexport default Intersect\n","// Styles\nimport './VImg.sass'\n\n// Components\nimport { makeVResponsiveProps, VResponsive } from '@/components/VResponsive/VResponsive'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Directives\nimport vIntersect from '@/directives/intersect'\n\n// Utilities\nimport {\n  computed,\n  nextTick,\n  onBeforeMount,\n  onBeforeUnmount,\n  ref,\n  shallowRef,\n  toRef,\n  vShow,\n  watch,\n  withDirectives,\n} from 'vue'\nimport {\n  convertToUnit,\n  filterInputAttrs,\n  genericComponent,\n  getCurrentInstance,\n  isObject,\n  propsFactory,\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 type VImgSlots = {\n  default: never\n  placeholder: never\n  error: never\n  sources: never\n}\n\nexport const makeVImgProps = propsFactory({\n  absolute: Boolean,\n  alt: String,\n  cover: Boolean,\n  color: String,\n  draggable: {\n    type: [Boolean, String] as PropType<boolean | 'true' | 'false'>,\n    default: undefined,\n  },\n  eager: Boolean,\n  gradient: String,\n  imageClass: null,\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  crossorigin: String as PropType<'' | 'anonymous' | 'use-credentials'>,\n  referrerpolicy: String as PropType<\n    | 'no-referrer'\n    | 'no-referrer-when-downgrade'\n    | 'origin'\n    | 'origin-when-cross-origin'\n    | 'same-origin'\n    | 'strict-origin'\n    | 'strict-origin-when-cross-origin'\n    | 'unsafe-url'\n  >,\n  srcset: String,\n  position: String,\n\n  ...makeVResponsiveProps(),\n  ...makeComponentProps(),\n  ...makeRoundedProps(),\n  ...makeTransitionProps(),\n}, 'VImg')\n\nexport const VImg = genericComponent<VImgSlots>()({\n  name: 'VImg',\n\n  directives: { vIntersect },\n\n  inheritAttrs: false,\n\n  props: makeVImgProps(),\n\n  emits: {\n    loadstart: (value: string | undefined) => true,\n    load: (value: string | undefined) => true,\n    error: (value: string | undefined) => true,\n  },\n\n  setup (props, { attrs, emit, slots }) {\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n    const vm = getCurrentInstance('VImg')\n\n    const currentSrc = shallowRef('') // Set from srcset\n    const image = ref<HTMLImageElement>()\n    const state = shallowRef<'idle' | 'loading' | 'loaded' | 'error'>(props.eager ? 'loading' : 'idle')\n    const naturalWidth = shallowRef<number>()\n    const naturalHeight = shallowRef<number>()\n\n    let deferredLoadEmit = false\n\n    const normalisedSrc = computed<srcObject>(() => {\n      return isObject(props.src)\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 || 0),\n        } : {\n          src: props.src,\n          srcset: props.srcset,\n          lazySrc: props.lazySrc,\n          aspect: Number(props.aspectRatio || 0),\n        }\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\n    watch(aspectRatio, (val, oldVal) => {\n      if (!val && oldVal && image.value) {\n        pollForSize(image.value)\n      }\n    })\n\n    watch(image, img => {\n      if (!img || state.value === 'idle') return\n\n      if (!aspectRatio.value) pollForSize(img)\n      getSrc(img)\n\n      if (deferredLoadEmit) {\n        deferredLoadEmit = false\n        emit('load', img.currentSrc || normalisedSrc.value.src)\n      }\n    })\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\n      if (normalisedSrc.value.lazySrc) {\n        const lazyImg = new Image()\n        lazyImg.src = normalisedSrc.value.lazySrc\n        pollForSize(lazyImg, null)\n      }\n\n      if (!normalisedSrc.value.src) return\n\n      nextTick(() => {\n        emit('loadstart', image.value?.currentSrc || normalisedSrc.value.src)\n\n        setTimeout(() => {\n          if (vm.isUnmounted) return\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            if (state.value === 'loading') onLoad()\n          } else if (image.value) {\n            if (!aspectRatio.value) pollForSize(image.value)\n            getSrc(image.value)\n          }\n        })\n      })\n    }\n\n    function onLoad () {\n      if (vm.isUnmounted) return\n\n      if (image.value) {\n        getSrc(image.value)\n        pollForSize(image.value)\n        emit('load', image.value.currentSrc || normalisedSrc.value.src)\n      } else {\n        deferredLoadEmit = true\n      }\n      state.value = 'loaded'\n    }\n\n    function onError () {\n      if (vm.isUnmounted) return\n\n      state.value = 'error'\n      emit('error', image.value?.currentSrc || normalisedSrc.value.src)\n    }\n\n    function getSrc (img: HTMLImageElement) {\n      currentSrc.value = img.currentSrc || img.src\n    }\n\n    let timer = -1\n\n    onBeforeUnmount(() => {\n      clearTimeout(timer)\n    })\n\n    function pollForSize (img: HTMLImageElement, timeout: number | null = 100) {\n      const poll = () => {\n        clearTimeout(timer)\n        if (vm.isUnmounted) return\n\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          timer = window.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 = toRef(() => ({\n      'v-img__img--cover': props.cover,\n      'v-img__img--contain': !props.cover,\n    }))\n\n    const __image = () => {\n      if (!normalisedSrc.value.src || state.value === 'idle') return null\n\n      const img = (\n        <img\n          class={['v-img__img', containClasses.value, props.imageClass]}\n          style={{ objectPosition: props.position }}\n          crossorigin={ props.crossorigin }\n          src={ normalisedSrc.value.src }\n          srcset={ normalisedSrc.value.srcset }\n          alt={ props.alt }\n          referrerpolicy={ props.referrerpolicy }\n          draggable={ props.draggable }\n          sizes={ props.sizes }\n          ref={ image }\n          onLoad={ onLoad }\n          onError={ onError }\n        />\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 = () => (\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            style={{ objectPosition: props.position }}\n            crossorigin={ props.crossorigin }\n            src={ normalisedSrc.value.lazySrc }\n            alt={ props.alt }\n            referrerpolicy={ props.referrerpolicy }\n            draggable={ props.draggable }\n          />\n        )}\n      </MaybeTransition>\n    )\n\n    const __placeholder = () => {\n      if (!slots.placeholder) return null\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 = () => {\n      if (!slots.error) return null\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 = () => {\n      if (!props.gradient) return null\n\n      return <div class=\"v-img__gradient\" style={{ backgroundImage: `linear-gradient(${props.gradient})` }} />\n    }\n\n    const isBooted = shallowRef(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      const responsiveProps = VResponsive.filterProps(props)\n      const [rootAttrs, imageAttrs] = filterInputAttrs(attrs)\n\n      return (\n        <VResponsive\n          class={[\n            'v-img',\n            {\n              'v-img--absolute': props.absolute,\n              'v-img--booting': !isBooted.value,\n              'v-img--fit-content': props.width === 'fit-content',\n            },\n            backgroundColorClasses.value,\n            roundedClasses.value,\n            props.class,\n          ]}\n          style={[\n            { width: convertToUnit(props.width === 'auto' ? naturalWidth.value : props.width) },\n            backgroundColorStyles.value,\n            roundedStyles.value,\n            props.style,\n          ]}\n          { ...responsiveProps }\n          { ...rootAttrs }\n          aspectRatio={ aspectRatio.value }\n          aria-label={ props.alt || undefined }\n          role={ props.alt ? 'img' : undefined }\n          v-intersect={[{\n            handler: init,\n            options: props.options,\n          }, null, ['once']]}\n        >{{\n          additional: () => (\n            <>\n              <__image { ...imageAttrs } />\n              <__preloadImage />\n              <__gradient />\n              <__placeholder />\n              <__error />\n            </>\n          ),\n          default: slots.default,\n        }}</VResponsive>\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, isString, 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 border = props.border\n\n    if (border === true || border === '') {\n      return `${name}--border`\n    } else if (\n      isString(border) ||\n      border === 0\n    ) {\n      return String(border).split(' ').map(v => `border-${v}`)\n    }\n\n    return []\n  })\n\n  return { borderClasses }\n}\n","// Utilities\nimport { isRef, toRef } from 'vue'\nimport { isNullOrUndefined, propsFactory } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\nexport interface ElevationProps {\n  elevation?: number | string | null\n  hoverElevation?: number | string | null\n}\n\n// Composables\nexport const makeElevationProps = propsFactory({\n  elevation: {\n    type: [Number, String],\n    // no limit to allow both 0-6 (MD3) and legacy 0-24 (MD2)\n    validator: (value: string | number) => parseInt(value) >= 0,\n  },\n  hoverElevation: {\n    type: [Number, String],\n    validator: (value: string | number) => parseInt(value) >= 0,\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 = toRef(() => {\n    const elevation = isRef(props) ? props.value : props.elevation\n    const hoverElevation = isRef(props) ? null : props.hoverElevation\n    return [\n      ...isNullOrUndefined(elevation) ? [] : [`elevation-${parseInt(elevation)}`],\n      ...isNullOrUndefined(hoverElevation) ? [] : [`hover-elevation-${parseInt(hoverElevation)}`],\n    ]\n  })\n\n  return { elevationClasses }\n}\n","// Composables\nimport { useRtl } from '@/composables/locale'\n\n// Utilities\nimport { computed } from 'vue'\nimport { parseAnchor, propsFactory } from '@/util'\n\n// Types\nimport type { CSSProperties, PropType } from 'vue'\nimport type { Anchor } from '@/util'\n\nconst oppositeMap = {\n  center: 'center',\n  top: 'bottom',\n  bottom: 'top',\n  left: 'right',\n  right: 'left',\n} as const\n\nexport interface LocationProps {\n  location: Anchor | null | undefined\n}\n\nexport const makeLocationProps = propsFactory({\n  location: String as PropType<Anchor | null>,\n}, 'location')\n\nexport function useLocation (props: LocationProps, opposite = false, offset?: (side: string) => number) {\n  const { isRtl } = useRtl()\n\n  const locationStyles = computed(() => {\n    if (!props.location) return {}\n\n    const { side, align } = parseAnchor(\n      props.location.split(' ').length > 1\n        ? props.location\n        : `${props.location} center` as Anchor,\n      isRtl.value\n    )\n\n    function getOffset (side: string) {\n      return offset\n        ? offset(side)\n        : 0\n    }\n\n    const styles = {} as CSSProperties\n\n    if (side !== 'center') {\n      if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`\n      else styles[side] = 0\n    }\n    if (align !== 'center') {\n      if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`\n      else styles[align] = 0\n    } else {\n      if (side === 'center') styles.top = styles.left = '50%'\n      else {\n        styles[({\n          top: 'left',\n          bottom: 'left',\n          left: 'top',\n          right: 'top',\n        } as const)[side]] = '50%'\n      }\n      styles.transform = {\n        top: 'translateX(-50%)',\n        bottom: 'translateX(-50%)',\n        left: 'translateY(-50%)',\n        right: 'translateY(-50%)',\n        center: 'translate(-50%, -50%)',\n      }[side]\n    }\n\n    return styles\n  })\n\n  return { locationStyles }\n}\n","// Styles\nimport './VToolbar.sass'\n\n// Components\nimport { VToolbarTitle } from './VToolbarTitle'\nimport { VExpandTransition } from '@/components/transitions'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VImg } from '@/components/VImg'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { useRtl } from '@/composables/locale'\nimport { makeLocationProps, useLocation } from '@/composables/location'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed, shallowRef } from 'vue'\nimport { convertToUnit, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nconst allowedDensities = [null, 'prominent', 'default', 'comfortable', 'compact'] as const\n\nexport type Density = null | 'prominent' | 'default' | 'comfortable' | 'compact'\n\nexport const makeVToolbarProps = propsFactory({\n  absolute: Boolean,\n  collapse: Boolean,\n  collapsePosition: {\n    type: String as PropType<'start' | 'end'>,\n    default: 'start',\n  },\n  color: String,\n  density: {\n    type: String as PropType<Density>,\n    default: 'default',\n    validator: (v: any) => allowedDensities.includes(v),\n  },\n  extended: {\n    type: Boolean,\n    default: null,\n  },\n  extensionHeight: {\n    type: [Number, String],\n    default: 48,\n  },\n  flat: Boolean,\n  floating: Boolean,\n  height: {\n    type: [Number, String],\n    default: 64,\n  },\n  image: String,\n  title: String,\n\n  ...makeBorderProps(),\n  ...makeComponentProps(),\n  ...makeElevationProps(),\n  ...makeLocationProps(),\n  ...makeRoundedProps(),\n  ...makeTagProps({ tag: 'header' }),\n  ...makeThemeProps(),\n}, 'VToolbar')\n\nexport type VToolbarSlots = {\n  default: never\n  image: never\n  prepend: never\n  append: never\n  title: never\n  extension: never\n}\n\nexport const VToolbar = genericComponent<VToolbarSlots>()({\n  name: 'VToolbar',\n\n  props: makeVToolbarProps(),\n\n  setup (props, { slots }) {\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)\n    const { borderClasses } = useBorder(props)\n    const { elevationClasses } = useElevation(props)\n    const { locationStyles } = useLocation(props)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n    const { themeClasses } = provideTheme(props)\n    const { rtlClasses } = useRtl()\n\n    const isExtended = shallowRef(props.extended === null ? !!(slots.extension?.()) : props.extended)\n    const contentHeight = computed(() => parseInt((\n      Number(props.height) +\n      (props.density === 'prominent' ? Number(props.height) : 0) -\n      (props.density === 'comfortable' ? 8 : 0) -\n      (props.density === 'compact' ? 16 : 0)\n    ), 10))\n    const extensionHeight = computed(() => isExtended.value\n      ? parseInt((\n        Number(props.extensionHeight) +\n        (props.density === 'prominent' ? Number(props.extensionHeight) : 0) -\n        (props.density === 'comfortable' ? 4 : 0) -\n        (props.density === 'compact' ? 8 : 0)\n      ), 10)\n      : 0\n    )\n\n    provideDefaults({\n      VBtn: {\n        variant: 'text',\n      },\n    })\n\n    useRender(() => {\n      const hasTitle = !!(props.title || slots.title)\n      const hasImage = !!(slots.image || props.image)\n\n      const extension = slots.extension?.()\n      isExtended.value = props.extended === null ? !!extension : props.extended\n\n      return (\n        <props.tag\n          class={[\n            'v-toolbar',\n            `v-toolbar--collapse-${props.collapsePosition}`,\n            {\n              'v-toolbar--absolute': props.absolute,\n              'v-toolbar--collapse': props.collapse,\n              'v-toolbar--flat': props.flat,\n              'v-toolbar--floating': props.floating,\n              [`v-toolbar--density-${props.density}`]: true,\n            },\n            backgroundColorClasses.value,\n            borderClasses.value,\n            elevationClasses.value,\n            roundedClasses.value,\n            themeClasses.value,\n            rtlClasses.value,\n            props.class,\n          ]}\n          style={[\n            backgroundColorStyles.value,\n            locationStyles.value,\n            roundedStyles.value,\n            props.style,\n          ]}\n        >\n          { hasImage && (\n            <div key=\"image\" class=\"v-toolbar__image\">\n              { !slots.image ? (\n                <VImg\n                  key=\"image-img\"\n                  cover\n                  src={ props.image }\n                />\n              ) : (\n                <VDefaultsProvider\n                  key=\"image-defaults\"\n                  disabled={ !props.image }\n                  defaults={{\n                    VImg: {\n                      cover: true,\n                      src: props.image,\n                    },\n                  }}\n                  v-slots:default={ slots.image }\n                />\n              )}\n            </div>\n          )}\n\n          <VDefaultsProvider\n            defaults={{\n              VTabs: {\n                height: convertToUnit(contentHeight.value),\n              },\n            }}\n          >\n            <div\n              class=\"v-toolbar__content\"\n              style={{ height: convertToUnit(contentHeight.value) }}\n            >\n              { slots.prepend && (\n                <div class=\"v-toolbar__prepend\">\n                  { slots.prepend?.() }\n                </div>\n              )}\n\n              { hasTitle && (\n                <VToolbarTitle key=\"title\" text={ props.title }>\n                  {{ text: slots.title }}\n                </VToolbarTitle>\n              )}\n\n              { slots.default?.() }\n\n              { slots.append && (\n                <div class=\"v-toolbar__append\">\n                  { slots.append?.() }\n                </div>\n              )}\n            </div>\n          </VDefaultsProvider>\n\n          <VDefaultsProvider\n            defaults={{\n              VTabs: {\n                height: convertToUnit(extensionHeight.value),\n              },\n            }}\n          >\n            <VExpandTransition>\n              { isExtended.value && (\n                <div\n                  class=\"v-toolbar__extension\"\n                  style={{ height: convertToUnit(extensionHeight.value) }}\n                >\n                  { extension }\n                </div>\n              )}\n            </VExpandTransition>\n          </VDefaultsProvider>\n        </props.tag>\n      )\n    })\n\n    return {\n      contentHeight,\n      extensionHeight,\n    }\n  },\n})\n\nexport type VToolbar = InstanceType<typeof VToolbar>\n","// Utilities\nimport {\n  computed,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  shallowRef,\n  watch,\n} from 'vue'\nimport { clamp, consoleWarn, propsFactory } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\nexport interface ScrollProps {\n  scrollTarget?: string\n  scrollThreshold?: string | number\n}\n\nexport interface ThresholdMetCallbackData {\n  isScrollingUp: boolean\n  currentThreshold: number\n  savedScroll: Ref<number>\n}\n\n// Composables\nexport const makeScrollProps = propsFactory({\n  scrollTarget: {\n    type: String,\n  },\n  scrollThreshold: {\n    type: [String, Number],\n    default: 300,\n  },\n}, 'scroll')\n\nexport interface ScrollArguments {\n  canScroll?: Readonly<Ref<boolean>>\n  layoutSize?: Readonly<Ref<number>>\n}\n\nexport function useScroll (\n  props: ScrollProps,\n  args: ScrollArguments = {},\n) {\n  const { canScroll, layoutSize } = args\n  let previousScroll = 0\n  let previousScrollHeight = 0\n  const target = ref<Element | Window | null>(null)\n  const currentScroll = shallowRef(0)\n  const savedScroll = shallowRef(0)\n  const currentThreshold = shallowRef(0)\n  const isScrollActive = shallowRef(false)\n  const isScrollingUp = shallowRef(false)\n  const isAtBottom = shallowRef(false)\n  const reachedBottomWhileScrollingDown = shallowRef(false)\n  const hasEnoughScrollableSpace = shallowRef(true)\n\n  const scrollThreshold = computed(() => {\n    return Number(props.scrollThreshold)\n  })\n\n  /**\n   * 1: at top\n   * 0: at threshold\n   */\n  const scrollRatio = computed(() => {\n    return clamp(((scrollThreshold.value - currentScroll.value) / scrollThreshold.value) || 0)\n  })\n\n  function getScrollMetrics (targetEl: Element | Window) {\n    const clientHeight = ('window' in targetEl) ? window.innerHeight : targetEl.clientHeight\n    const scrollHeight = ('window' in targetEl) ? document.documentElement.scrollHeight : targetEl.scrollHeight\n    return { clientHeight, scrollHeight }\n  }\n\n  function checkScrollableSpace () {\n    const targetEl = target.value\n    if (!targetEl) return\n\n    const { clientHeight, scrollHeight } = getScrollMetrics(targetEl)\n    const maxScrollableDistance = scrollHeight - clientHeight\n\n    // When the scroll-hide element (like AppBar) hides, it causes the page to grow\n    // We need extra scrollable space beyond the threshold to prevent bouncing\n    // Add the element's height to the required minimum distance\n    const elementHeight = layoutSize?.value || 0\n    const minRequiredDistance = scrollThreshold.value + elementHeight\n\n    // Only enable scroll-hide if there's enough scrollable space\n    hasEnoughScrollableSpace.value = maxScrollableDistance > minRequiredDistance\n  }\n\n  function onResize () {\n    checkScrollableSpace()\n  }\n\n  function onScroll () {\n    const targetEl = target.value\n\n    if (!targetEl || (canScroll && !canScroll.value)) return\n\n    previousScroll = currentScroll.value\n    currentScroll.value = ('window' in targetEl) ? targetEl.pageYOffset : targetEl.scrollTop\n\n    const currentScrollHeight = targetEl instanceof Window ? document.documentElement.scrollHeight : targetEl.scrollHeight\n    if (previousScrollHeight !== currentScrollHeight) {\n      // If page is growing (content loading), recalculate scrollable space\n      // If page is shrinking (likely due to navbar animation), don't recalculate\n      if (currentScrollHeight > previousScrollHeight) {\n        checkScrollableSpace()\n      }\n      previousScrollHeight = currentScrollHeight\n    }\n\n    isScrollingUp.value = currentScroll.value < previousScroll\n    currentThreshold.value = Math.abs(currentScroll.value - scrollThreshold.value)\n\n    // Detect if at bottom of page\n    const { clientHeight, scrollHeight } = getScrollMetrics(targetEl)\n    const atBottom = currentScroll.value + clientHeight >= scrollHeight - 5\n\n    // Track when bottom is reached during downward scroll\n    // Only set flag if ALL conditions are met:\n    // 1. Scrolled past threshold (navbar is hiding)\n    // 2. Page has enough scrollable space for scroll-hide\n    // This prevents activation on short pages or edge cases\n    if (!isScrollingUp.value && atBottom &&\n        currentScroll.value >= scrollThreshold.value &&\n        hasEnoughScrollableSpace.value) {\n      reachedBottomWhileScrollingDown.value = true\n    }\n\n    // Reset the flag when:\n    // 1. Scrolling up away from bottom (with small tolerance for touchpad/momentum scrolling)\n    // 2. Scroll position jumped significantly (e.g., navigation, scroll restoration)\n    // 3. Scroll is at the very top (page navigation resets to top)\n    const scrollJumped = Math.abs(currentScroll.value - previousScroll) > 100\n    const atTop = currentScroll.value <= 5\n    const scrolledUpSignificantly = isScrollingUp.value && (previousScroll - currentScroll.value) > 1\n    if ((scrolledUpSignificantly && !atBottom) || (scrollJumped && currentScroll.value < scrollThreshold.value) || atTop) {\n      reachedBottomWhileScrollingDown.value = false\n    }\n\n    // Update state\n    isAtBottom.value = atBottom\n  }\n\n  watch(isScrollingUp, () => {\n    savedScroll.value = savedScroll.value || currentScroll.value\n  })\n\n  watch(isScrollActive, () => {\n    savedScroll.value = 0\n  })\n\n  onMounted(() => {\n    watch(() => props.scrollTarget, scrollTarget => {\n      const newTarget = scrollTarget ? document.querySelector(scrollTarget) : window\n\n      if (!newTarget) {\n        consoleWarn(`Unable to locate element with identifier ${scrollTarget}`)\n        return\n      }\n\n      if (newTarget === target.value) return\n\n      target.value?.removeEventListener('scroll', onScroll)\n      target.value = newTarget\n      target.value.addEventListener('scroll', onScroll, { passive: true })\n\n      // Check scrollable space when target is set\n      Promise.resolve().then(() => {\n        checkScrollableSpace()\n      })\n    }, { immediate: true })\n\n    // Listen to window resize to recalculate scrollable space\n    window.addEventListener('resize', onResize, { passive: true })\n  })\n\n  onBeforeUnmount(() => {\n    target.value?.removeEventListener('scroll', onScroll)\n    window.removeEventListener('resize', onResize)\n  })\n\n  // Do we need this? If yes - seems that\n  // there's no need to expose onScroll\n  canScroll && watch(canScroll, onScroll, { immediate: true })\n\n  return {\n    scrollThreshold,\n    currentScroll,\n    currentThreshold,\n    isScrollActive,\n    scrollRatio,\n\n    // required only for testing\n    // probably can be removed\n    // later (2 chars chlng)\n    isScrollingUp,\n    savedScroll,\n    isAtBottom,\n    reachedBottomWhileScrollingDown,\n    hasEnoughScrollableSpace,\n  }\n}\n","// Utilities\nimport { onMounted, readonly, shallowRef, toRef } from 'vue'\n\n// Composables\nexport function useSsrBoot () {\n  const isBooted = shallowRef(false)\n\n  onMounted(() => {\n    window.requestAnimationFrame(() => {\n      isBooted.value = true\n    })\n  })\n\n  const ssrBootStyles = toRef(() => !isBooted.value ? ({\n    transition: 'none !important',\n  }) : undefined)\n\n  return { ssrBootStyles, isBooted: readonly(isBooted) }\n}\n","// Styles\nimport './VAppBar.sass'\n\n// Components\nimport { makeVToolbarProps, VToolbar } from '@/components/VToolbar/VToolbar'\n\n// Composables\nimport { makeLayoutItemProps, useLayoutItem } from '@/composables/layout'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeScrollProps, useScroll } from '@/composables/scroll'\nimport { useSsrBoot } from '@/composables/ssrBoot'\nimport { useToggleScope } from '@/composables/toggleScope'\n\n// Utilities\nimport { computed, ref, shallowRef, toRef, watchEffect } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VToolbarSlots } from '@/components/VToolbar/VToolbar'\n\nexport const makeVAppBarProps = propsFactory({\n  scrollBehavior: String as PropType<'hide' | 'fully-hide' | 'inverted' | 'collapse' | 'elevate' | 'fade-image' | (string & {})>,\n  modelValue: {\n    type: Boolean,\n    default: true,\n  },\n  location: {\n    type: String as PropType<'top' | 'bottom'>,\n    default: 'top',\n    validator: (value: any) => ['top', 'bottom'].includes(value),\n  },\n\n  ...omit(makeVToolbarProps(), ['location']),\n  ...makeLayoutItemProps(),\n  ...makeScrollProps(),\n\n  height: {\n    type: [Number, String],\n    default: 64,\n  },\n}, 'VAppBar')\n\nexport const VAppBar = genericComponent<VToolbarSlots>()({\n  name: 'VAppBar',\n\n  props: makeVAppBarProps(),\n\n  emits: {\n    'update:modelValue': (value: boolean) => true,\n  },\n\n  setup (props, { slots }) {\n    const vToolbarRef = ref<VToolbar>()\n    const isActive = useProxiedModel(props, 'modelValue')\n    const scrollBehavior = computed(() => {\n      const behavior = new Set(props.scrollBehavior?.split(' ') ?? [])\n      return {\n        hide: behavior.has('hide'),\n        fullyHide: behavior.has('fully-hide'),\n        inverted: behavior.has('inverted'),\n        collapse: behavior.has('collapse'),\n        elevate: behavior.has('elevate'),\n        fadeImage: behavior.has('fade-image'),\n        // shrink: behavior.has('shrink'),\n      }\n    })\n    const canScroll = computed(() => {\n      const behavior = scrollBehavior.value\n      return (\n        behavior.hide ||\n        behavior.fullyHide ||\n        behavior.inverted ||\n        behavior.collapse ||\n        behavior.elevate ||\n        behavior.fadeImage ||\n        // behavior.shrink ||\n        !isActive.value\n      )\n    })\n\n    const appBarHeight = computed(() => {\n      const height = vToolbarRef.value?.contentHeight ?? 0\n      const extensionHeight = vToolbarRef.value?.extensionHeight ?? 0\n      return height + extensionHeight\n    })\n\n    const {\n      currentScroll,\n      scrollThreshold,\n      isScrollingUp,\n      scrollRatio,\n      isAtBottom,\n      reachedBottomWhileScrollingDown,\n      hasEnoughScrollableSpace,\n    } = useScroll(props, { canScroll, layoutSize: appBarHeight })\n\n    const canHide = toRef(() => (\n      scrollBehavior.value.hide ||\n      scrollBehavior.value.fullyHide\n    ))\n    const isCollapsed = computed(() => props.collapse || (\n      scrollBehavior.value.collapse &&\n      (scrollBehavior.value.inverted ? scrollRatio.value > 0 : scrollRatio.value === 0)\n    ))\n    const isFlat = computed(() => props.flat || (\n      scrollBehavior.value.fullyHide &&\n      !isActive.value\n    ) || (\n      scrollBehavior.value.elevate &&\n      (scrollBehavior.value.inverted ? currentScroll.value > 0 : currentScroll.value === 0)\n    ))\n    const opacity = computed(() => (\n      scrollBehavior.value.fadeImage\n        ? (scrollBehavior.value.inverted ? 1 - scrollRatio.value : scrollRatio.value)\n        : undefined\n    ))\n    const height = computed(() => {\n      if (scrollBehavior.value.hide && scrollBehavior.value.inverted) return 0\n\n      const height = vToolbarRef.value?.contentHeight ?? 0\n      const extensionHeight = vToolbarRef.value?.extensionHeight ?? 0\n\n      if (!canHide.value) return (height + extensionHeight)\n\n      return currentScroll.value < scrollThreshold.value || scrollBehavior.value.fullyHide\n        ? (height + extensionHeight)\n        : height\n    })\n\n    useToggleScope(() => !!props.scrollBehavior, () => {\n      watchEffect(() => {\n        if (!canHide.value) {\n          isActive.value = true\n          return\n        }\n\n        if (scrollBehavior.value.inverted) {\n          isActive.value = currentScroll.value > scrollThreshold.value\n          return\n        }\n\n        // If there's not enough scrollable space, don't apply scroll-hide behavior at all\n        // This prevents flickering/bouncing animations on short pages\n        if (!hasEnoughScrollableSpace.value) {\n          isActive.value = true\n          return\n        }\n\n        // Prevent navbar from showing when we reached bottom while scrolling down\n        // This handles the case where scroll momentum causes to hit bottom during hide transition\n        if (reachedBottomWhileScrollingDown.value) {\n          isActive.value = false\n          return\n        }\n\n        // Normal behavior: show when scrolling up (and not at bottom) or above threshold\n        isActive.value = (isScrollingUp.value && !isAtBottom.value) || (currentScroll.value < scrollThreshold.value)\n      })\n    })\n\n    const { ssrBootStyles } = useSsrBoot()\n    const { layoutItemStyles } = useLayoutItem({\n      id: props.name,\n      order: computed(() => parseInt(props.order, 10)),\n      position: toRef(() => props.location),\n      layoutSize: height,\n      elementSize: shallowRef(undefined),\n      active: isActive,\n      absolute: toRef(() => props.absolute),\n    })\n\n    useRender(() => {\n      const toolbarProps = omit(VToolbar.filterProps(props), ['location'])\n\n      return (\n        <VToolbar\n          ref={ vToolbarRef }\n          class={[\n            'v-app-bar',\n            {\n              'v-app-bar--bottom': props.location === 'bottom',\n            },\n            props.class,\n          ]}\n          style={[\n            {\n              ...layoutItemStyles.value,\n              '--v-toolbar-image-opacity': opacity.value,\n              height: undefined,\n              ...ssrBootStyles.value,\n            },\n            props.style,\n          ]}\n          { ...toolbarProps }\n          collapse={ isCollapsed.value }\n          flat={ isFlat.value }\n          v-slots={ slots }\n        />\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VAppBar = InstanceType<typeof VAppBar>\n","// Utilities\nimport { toRef } 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\n// typeof allowedDensities[number] evaluates to any\n// when generating api types for whatever reason.\nexport type Density = null | 'default' | 'comfortable' | 'compact'\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 = toRef(() => {\n    return `${name}--density-${props.density}`\n  })\n\n  return { densityClasses }\n}\n","// Utilities\nimport { convertToUnit, destructComputed, getCurrentInstanceName, includes, 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  return destructComputed(() => {\n    const size = props.size\n    let sizeClasses\n    let sizeStyles\n    if (includes(predefinedSizes, size)) {\n      sizeClasses = `${name}--size-${size}`\n    } else if (size) {\n      sizeStyles = {\n        width: convertToUnit(size),\n        height: convertToUnit(size),\n      }\n    }\n    return { sizeClasses, sizeStyles }\n  })\n}\n","// Composables\nimport { useColor } from '@/composables/color'\n\n// Utilities\nimport { toRef, toValue } from 'vue'\nimport { getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nimport type { MaybeRefOrGetter, PropType } from 'vue'\n\nexport const allowedVariants = [\n  'elevated',\n  'flat',\n  'tonal',\n  'outlined',\n  'text',\n  'plain',\n] as const\n\nexport type Variant = typeof allowedVariants[number]\n\nexport interface VariantProps {\n  color?: string\n  variant: Variant\n}\n\nexport function genOverlays (isClickable: boolean, name: string) {\n  return (\n    <>\n      { isClickable && <span key=\"overlay\" class={ `${name}__overlay` } /> }\n\n      <span key=\"underlay\" class={ `${name}__underlay` } />\n    </>\n  )\n}\n\nexport const makeVariantProps = propsFactory({\n  color: String,\n  variant: {\n    type: String as PropType<Variant>,\n    default: 'elevated',\n    validator: (v: any) => allowedVariants.includes(v),\n  },\n}, 'variant')\n\nexport function useVariant (\n  props: MaybeRefOrGetter<VariantProps>,\n  name = getCurrentInstanceName(),\n) {\n  const variantClasses = toRef(() => {\n    const { variant } = toValue(props)\n    return `${name}--variant-${variant}`\n  })\n\n  const { colorClasses, colorStyles } = useColor(() => {\n    const { variant, color } = toValue(props)\n    return {\n      [['elevated', 'flat'].includes(variant) ? '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 { makeComponentProps } from '@/composables/component'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeSizeProps } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeVariantProps } from '@/composables/variant'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const makeVBtnGroupProps = propsFactory({\n  baseColor: String,\n  divided: Boolean,\n  direction: {\n    type: String as PropType<'horizontal' | 'vertical'>,\n    default: 'horizontal',\n  },\n\n  ...makeBorderProps(),\n  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...makeElevationProps(),\n  ...makeRoundedProps(),\n  ...makeSizeProps({ size: undefined }),\n  ...makeTagProps(),\n  ...makeThemeProps(),\n  ...makeVariantProps(),\n}, 'VBtnGroup')\n\nexport const VBtnGroup = genericComponent()({\n  name: 'VBtnGroup',\n\n  props: makeVBtnGroupProps(),\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, roundedStyles } = useRounded(props)\n\n    provideDefaults({\n      VBtn: {\n        height: toRef(() => props.direction === 'horizontal' && props.size == null ? 'auto' : null),\n        baseColor: toRef(() => props.baseColor),\n        color: toRef(() => props.color),\n        density: toRef(() => props.density),\n        flat: true,\n        size: toRef(() => props.size),\n        variant: toRef(() => props.variant),\n      },\n    })\n\n    useRender(() => {\n      return (\n        <props.tag\n          class={[\n            'v-btn-group',\n            `v-btn-group--${props.direction}`,\n            {\n              'v-btn-group--divided': props.divided,\n              'v-btn-group--has-size': props.size != null,\n            },\n            themeClasses.value,\n            borderClasses.value,\n            densityClasses.value,\n            elevationClasses.value,\n            roundedClasses.value,\n            props.class,\n          ]}\n          style={[roundedStyles.value, props.style]}\n          v-slots={ slots }\n        />\n      )\n    })\n  },\n})\n\nexport type VBtnGroup = InstanceType<typeof VBtnGroup>\n","// Composables\nimport { useProxiedModel } from './proxiedModel'\n\n// Utilities\nimport { computed, inject, onBeforeUnmount, onMounted, onUpdated, provide, reactive, toRef, unref, useId, watch } from 'vue'\nimport {\n  consoleWarn,\n  deepEqual,\n  findChildrenWithProvide,\n  getCurrentInstance,\n  isNull,\n  isNumber,\n  isUndefined,\n  propsFactory,\n  wrapInArray,\n} from '@/util'\n\n// Types\nimport type { ComponentInternalInstance, ExtractPropTypes, InjectionKey, PropType, Ref, UnwrapRef } from 'vue'\nimport type { EventProp } from '@/util'\n\nexport interface GroupItem {\n  id: string\n  value: Ref<unknown>\n  disabled: Ref<boolean | undefined>\n  useIndexAsValue?: boolean\n}\n\nexport interface 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': EventProp<[unknown]> | undefined\n}\n\nexport interface GroupProvide {\n  register: (item: GroupItem, cmp: ComponentInternalInstance) => void\n  unregister: (id: string) => void\n  select: (id: string, value: boolean) => void\n  selected: Ref<Readonly<string[]>>\n  isSelected: (id: string) => boolean\n  prev: () => void\n  next: () => void\n  selectedClass: Ref<string | undefined>\n  items: Readonly<Ref<{\n    id: string\n    value: unknown\n    disabled: boolean | undefined\n  }[]>>\n  disabled: Ref<boolean | undefined>\n  getItemIndex: (value: unknown) => number\n}\n\nexport interface GroupItemProvide {\n  id: string\n  isSelected: Ref<boolean>\n  isFirst: Ref<boolean>\n  isLast: Ref<boolean>\n  toggle: () => void\n  select: (value: boolean) => void\n  selectedClass: Ref<(string | undefined)[] | false>\n  value: Ref<unknown>\n  disabled: Ref<boolean | undefined>\n  group: GroupProvide\n  register: () => void\n  unregister: () => void\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\nexport interface GroupItemProps extends ExtractPropTypes<ReturnType<typeof makeGroupItemProps>> {\n  'onGroup:selected': EventProp<[{ value: boolean }]> | undefined\n}\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 id = useId()\n\n  provide(Symbol.for(`${injectKey.description}:id`), id)\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 value = toRef(() => props.value)\n  const disabled = computed(() => !!(group.disabled.value || props.disabled))\n\n  function register () {\n    group?.register({ id, value, disabled }, vm)\n  }\n\n  function unregister () {\n    group?.unregister(id)\n  }\n\n  register()\n  onBeforeUnmount(() => unregister())\n\n  const isSelected = computed(() => {\n    return group.isSelected(id)\n  })\n  const isFirst = computed(() => {\n    return group.items.value[0].id === id\n  })\n  const isLast = computed(() => {\n    return group.items.value[group.items.value.length - 1].id === id\n  })\n\n  const selectedClass = computed(() => isSelected.value && [group.selectedClass.value, props.selectedClass])\n\n  watch(isSelected, value => {\n    vm.emit('group:selected', { value })\n  }, { flush: 'sync' })\n\n  return {\n    id,\n    isSelected,\n    isFirst,\n    isLast,\n    toggle: () => group.select(id, !isSelected.value),\n    select: (value: boolean) => group.select(id, value),\n    selectedClass,\n    value,\n    disabled,\n    group,\n    register,\n    unregister,\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 (isUndefined(v)) return []\n\n      return getIds(items, isNull(v) ? [null] : 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 key = Symbol.for(`${injectKey.description}:id`)\n    const children = findChildrenWithProvide(key, groupVm?.vnode)\n    const index = children.indexOf(vm)\n\n    if (isUndefined(unref(unwrapped.value))) {\n      unwrapped.value = index\n      unwrapped.useIndexAsValue = true\n    }\n\n    if (index > -1) {\n      items.splice(index, 0, unwrapped)\n    } else {\n      items.push(unwrapped)\n    }\n  }\n\n  function unregister (id: string) {\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  onUpdated(() => {\n    // #19655 update the items that use the index as the value.\n    for (let i = 0; i < items.length; i++) {\n      if (items[i].useIndexAsValue) {\n        items[i].value = i\n      }\n    }\n  })\n\n  function select (id: string, value?: boolean) {\n    const item = items.find(item => item.id === id)\n    if (value && item?.disabled) return\n\n    if (props.multiple) {\n      const internalValue = selected.value.slice()\n      const index = internalValue.findIndex(v => v === id)\n      const isSelected = ~index\n      value = value ?? !isSelected\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        isSelected &&\n        props.mandatory &&\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        !isSelected &&\n        isNumber(props.max) &&\n        internalValue.length + 1 > props.max\n      ) return\n\n      if (index < 0 && value) internalValue.push(id)\n      else if (index >= 0 && !value) internalValue.splice(index, 1)\n\n      selected.value = internalValue\n    } else {\n      const isSelected = selected.value.includes(id)\n      if (props.mandatory && isSelected) return\n      if (!isSelected && !value) return\n\n      selected.value = (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: GroupProvide = {\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: string) => selected.value.includes(id),\n    selectedClass: toRef(() => props.selectedClass),\n    items: toRef(() => items),\n    getItemIndex: (value: unknown) => getItemIndex(items, value),\n  }\n\n  provide(injectKey, state)\n\n  return state\n}\n\nfunction getItemIndex (items: UnwrapRef<GroupItem[]>, value: unknown) {\n  const ids = getIds(items, [value])\n\n  if (!ids.length) return -1\n\n  return items.findIndex(item => item.id === ids[0])\n}\n\nfunction getIds (items: UnwrapRef<GroupItem[]>, modelValue: any[]) {\n  const ids: string[] = []\n\n  modelValue.forEach(value => {\n    const item = items.find(item => deepEqual(value, item.value))\n    const itemByIndex = items[value]\n\n    if (!isUndefined(item?.value)) {\n      ids.push(item.id)\n    } else if (itemByIndex?.useIndexAsValue) {\n      ids.push(itemByIndex.id)\n    }\n  })\n\n  return ids\n}\n\nfunction getValues (items: UnwrapRef<GroupItem[]>, ids: any[]) {\n  const values: unknown[] = []\n\n  ids.forEach(id => {\n    const itemIndex = items.findIndex(item => item.id === id)\n    if (~itemIndex) {\n      const item = items[itemIndex]\n      values.push(!isUndefined(item.value) ? item.value : itemIndex)\n    }\n  })\n\n  return values\n}\n","// Styles\nimport './VBtnToggle.sass'\n\n// Components\nimport { makeVBtnGroupProps, VBtnGroup } from '@/components/VBtnGroup/VBtnGroup'\n\n// Composables\nimport { makeGroupProps, useGroup } from '@/composables/group'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { InjectionKey } from 'vue'\nimport type { GroupProvide } from '@/composables/group'\nimport type { GenericProps } 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\ntype VBtnToggleSlots = {\n  default: DefaultBtnToggleSlot\n}\n\nexport const makeVBtnToggleProps = propsFactory({\n  ...makeVBtnGroupProps(),\n  ...makeGroupProps(),\n}, 'VBtnToggle')\n\nexport const VBtnToggle = genericComponent<new <T>(\n  props: {\n    modelValue?: T\n    'onUpdate:modelValue'?: (value: T) => void\n  },\n  slots: VBtnToggleSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VBtnToggle',\n\n  props: makeVBtnToggleProps(),\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      const btnGroupProps = VBtnGroup.filterProps(props)\n\n      return (\n        <VBtnGroup\n          class={[\n            'v-btn-toggle',\n            {\n              'v-btn-toggle--has-color': !!props.color,\n            },\n            props.class,\n          ]}\n          { ...btnGroupProps }\n          style={ props.style }\n        >\n          { slots.default?.({\n            isSelected,\n            next,\n            prev,\n            select,\n            selected,\n          })}\n        </VBtnGroup>\n      )\n    })\n\n    return {\n      next,\n      prev,\n      select,\n    }\n  },\n})\n\nexport type VBtnToggle = InstanceType<typeof VBtnToggle>\n","// Styles\nimport './VIcon.sass'\n\n// Composables\nimport { useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { IconValue, useIcon } from '@/composables/icons'\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { shallowRef, Text } from 'vue'\nimport { convertToUnit, flattenFragments, genericComponent, isString, propsFactory, useRender } from '@/util'\n\nexport const makeVIconProps = propsFactory({\n  color: String,\n  disabled: Boolean,\n  start: Boolean,\n  end: Boolean,\n  icon: IconValue,\n  opacity: [String, Number],\n\n  ...makeComponentProps(),\n  ...makeSizeProps(),\n  ...makeTagProps({ tag: 'i' }),\n  ...makeThemeProps(),\n}, 'VIcon')\n\nexport const VIcon = genericComponent()({\n  name: 'VIcon',\n\n  props: makeVIconProps(),\n\n  setup (props, { attrs, slots }) {\n    const slotIcon = shallowRef<string>()\n\n    const { themeClasses } = provideTheme(props)\n    const { iconData } = useIcon(() => slotIcon.value || props.icon)\n    const { sizeClasses } = useSize(props)\n    const { textColorClasses, textColorStyles } = useTextColor(() => props.color)\n\n    useRender(() => {\n      const slotValue = slots.default?.()\n      if (slotValue) {\n        slotIcon.value = flattenFragments(slotValue).filter(node =>\n          node.type === Text && node.children && isString(node.children)\n        )[0]?.children as string\n      }\n      const hasClick = !!(attrs.onClick || attrs.onClickOnce)\n\n      return (\n        <iconData.value.component\n          tag={ props.tag }\n          icon={ iconData.value.icon }\n          class={[\n            'v-icon',\n            'notranslate',\n            themeClasses.value,\n            sizeClasses.value,\n            textColorClasses.value,\n            {\n              'v-icon--clickable': hasClick,\n              'v-icon--disabled': props.disabled,\n              'v-icon--start': props.start,\n              'v-icon--end': props.end,\n            },\n            props.class,\n          ]}\n          style={[\n            {\n              '--v-icon-opacity': props.opacity,\n            },\n            !sizeClasses.value ? ({\n              fontSize: convertToUnit(props.size),\n              height: convertToUnit(props.size),\n              width: convertToUnit(props.size),\n            }) : undefined,\n            textColorStyles.value,\n            props.style,\n          ]}\n          role={ hasClick ? 'button' : undefined }\n          aria-hidden={ !hasClick }\n          tabindex={ hasClick ? props.disabled ? -1 : 0 : undefined }\n        >\n          { slotValue }\n        </iconData.value.component>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VIcon = InstanceType<typeof VIcon>\n","// Utilities\nimport { onScopeDispose, ref, shallowRef, watch } from 'vue'\nimport { SUPPORTS_INTERSECTION } from '@/util'\n\nexport function useIntersectionObserver (callback?: IntersectionObserverCallback, options?: IntersectionObserverInit) {\n  const intersectionRef = ref<HTMLElement>()\n  const isIntersecting = shallowRef(false)\n\n  if (SUPPORTS_INTERSECTION) {\n    const observer = new IntersectionObserver((entries: IntersectionObserverEntry[]) => {\n      callback?.(entries, observer)\n\n      isIntersecting.value = !!entries.find(entry => entry.isIntersecting)\n    }, options)\n\n    onScopeDispose(() => {\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\n  return { intersectionRef, isIntersecting }\n}\n","// Utilities\nimport { onMounted, shallowRef, toRef } from 'vue'\nimport { isObject, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// Types\nexport interface RevealProps {\n  reveal: boolean | { duration?: number }\n}\n\n// Composables\nexport const makeRevealProps = propsFactory({\n  reveal: {\n    type: [Boolean, Object] as PropType<boolean | {\n      duration?: number\n    }>,\n    default: false,\n  },\n}, 'reveal')\n\nexport function useReveal (props: RevealProps) {\n  const defaultDuration = 900\n  const duration = toRef(() => isObject(props.reveal)\n    ? Math.max(0, Number(props.reveal.duration ?? defaultDuration))\n    : defaultDuration\n  )\n\n  const state = shallowRef(props.reveal ? 'initial' : 'disabled')\n\n  onMounted(async () => {\n    if (props.reveal) {\n      state.value = 'initial'\n      await new Promise(resolve => requestAnimationFrame(resolve))\n      state.value = 'pending'\n      await new Promise(resolve => setTimeout(resolve, duration.value))\n      state.value = 'done'\n    }\n  })\n\n  return {\n    duration,\n    state,\n  }\n}\n","// Styles\nimport './VProgressCircular.sass'\n\n// Composables\nimport { useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { makeRevealProps, useReveal } from '@/composables/reveal'\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed, ref, toRef, watchEffect } from 'vue'\nimport { clamp, convertToUnit, genericComponent, isObject, PREFERS_REDUCED_MOTION, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const makeVProgressCircularProps = propsFactory({\n  bgColor: String,\n  color: String,\n  indeterminate: [Boolean, String] as PropType<boolean | 'disable-shrink'>,\n  rounded: Boolean,\n  modelValue: {\n    type: [Number, String],\n    default: 0,\n  },\n  rotate: {\n    type: [Number, String],\n    default: 0,\n  },\n  transition: {\n    type: [Boolean, Object] as PropType<boolean | { duration?: number | string }>,\n    default: undefined,\n  },\n  width: {\n    type: [Number, String],\n    default: 4,\n  },\n\n  ...makeComponentProps(),\n  ...makeRevealProps(),\n  ...makeSizeProps(),\n  ...makeTagProps({ tag: 'div' }),\n  ...makeThemeProps(),\n}, 'VProgressCircular')\n\ntype VProgressCircularSlots = {\n  default: { value: number }\n}\n\nexport const VProgressCircular = genericComponent<VProgressCircularSlots>()({\n  name: 'VProgressCircular',\n\n  props: makeVProgressCircularProps(),\n\n  setup (props, { slots }) {\n    const MAGIC_RADIUS_CONSTANT = 20\n    const CIRCUMFERENCE = 2 * Math.PI * MAGIC_RADIUS_CONSTANT\n\n    const root = ref<HTMLElement>()\n\n    const { themeClasses } = provideTheme(props)\n    const { sizeClasses, sizeStyles } = useSize(props)\n    const { textColorClasses, textColorStyles } = useTextColor(() => props.color)\n    const { textColorClasses: underlayColorClasses, textColorStyles: underlayColorStyles } = useTextColor(() => props.bgColor)\n    const { intersectionRef, isIntersecting } = useIntersectionObserver()\n    const { resizeRef, contentRect } = useResizeObserver()\n    const { state: revealState, duration: revealDuration } = useReveal(props)\n\n    const normalizedValue = toRef(() => revealState.value === 'initial' ? 0 : clamp(parseFloat(props.modelValue), 0, 100))\n    const width = toRef(() => Number(props.width))\n    const transitionDuration = toRef(() => props.transition === false ? undefined : convertToUnit(\n      isObject(props.transition) ? props.transition.duration : undefined, 'ms'\n    ))\n    const size = toRef(() => {\n      // Get size from element if size prop value is small, large etc\n      return sizeStyles.value\n        ? Number(props.size)\n        : contentRect.value\n          ? contentRect.value.width\n          : Math.max(width.value, 32)\n    })\n    const diameter = toRef(() => (MAGIC_RADIUS_CONSTANT / (1 - width.value / size.value)) * 2)\n    const strokeWidth = toRef(() => width.value / size.value * diameter.value)\n    const strokeDashOffset = toRef(() => {\n      const baseLength = ((100 - normalizedValue.value) / 100) * CIRCUMFERENCE\n      return props.rounded && normalizedValue.value > 0 && normalizedValue.value < 100\n        ? convertToUnit(Math.min(CIRCUMFERENCE - 0.01, baseLength + strokeWidth.value))\n        : convertToUnit(baseLength)\n    })\n    const startAngle = computed(() => {\n      const baseAngle = Number(props.rotate)\n      return props.rounded\n        ? baseAngle + (strokeWidth.value / 2) / CIRCUMFERENCE * 360\n        : baseAngle\n    })\n\n    watchEffect(() => {\n      intersectionRef.value = root.value\n      resizeRef.value = root.value\n    })\n\n    useRender(() => (\n      <props.tag\n        ref={ root }\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 &&\n              (props.indeterminate === 'disable-shrink' || PREFERS_REDUCED_MOTION()),\n            'v-progress-circular--revealing': ['initial', 'pending'].includes(revealState.value),\n            'v-progress-circular--no-transition': props.transition === false,\n          },\n          themeClasses.value,\n          sizeClasses.value,\n          textColorClasses.value,\n          props.class,\n        ]}\n        style={[\n          sizeStyles.value,\n          textColorStyles.value,\n          {\n            '--v-progress-reveal-duration': `${revealDuration.value}ms`,\n            '--v-progress-circular-transition-duration': transitionDuration.value,\n          },\n          props.style,\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 + ${startAngle.value}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            stroke-linecap={ props.rounded ? 'round' : undefined }\n          />\n        </svg>\n\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    return {}\n  },\n})\n\nexport type VProgressCircular = InstanceType<typeof VProgressCircular>\n","// Utilities\nimport { computed, toRef, toValue } from 'vue'\nimport { clamp, convertToUnit, propsFactory } from '@/util'\n\n// Types\nimport type { MaybeRefOrGetter, PropType } from 'vue'\n\nexport interface ChunksProps {\n  chunkCount: number | string | null\n  chunkWidth: number | string | null\n  chunkGap: number | string\n  variant: 'split' | undefined\n}\n\n// Composables\nexport const makeChunksProps = propsFactory({\n  chunkCount: {\n    type: [Number, String],\n    default: null,\n  },\n  chunkWidth: {\n    type: [Number, String],\n    default: null,\n  },\n  chunkGap: {\n    type: [Number, String],\n    default: 4,\n  },\n  variant: {\n    type: String as PropType<'split'>,\n    default: undefined,\n    validator: (v: string) => ['split'].includes(v),\n  },\n}, 'chunks')\n\nexport function useChunks (\n  props: ChunksProps,\n  containerWidth: MaybeRefOrGetter<number | undefined>,\n  value: MaybeRefOrGetter<number>,\n  bufferValue: MaybeRefOrGetter<number>,\n  reversed: MaybeRefOrGetter<boolean>,\n) {\n  const isSplit = toRef(() => props.variant === 'split')\n  const chunkCount = toRef(() => isSplit.value ? 2 : Number(props.chunkCount) || 0)\n  const hasChunks = toRef(() => !isSplit.value && (!!chunkCount.value || !!props.chunkWidth))\n\n  const chunkWidth = computed(() => {\n    const containerSize = toValue(containerWidth)\n    if (!containerSize) return 0\n\n    if (chunkCount.value) {\n      const availableWidth = containerSize - Number(props.chunkGap) * (chunkCount.value - 1)\n      return availableWidth / chunkCount.value\n    }\n\n    return Number(props.chunkWidth)\n  })\n\n  const chunkGap = toRef(() => Number(props.chunkGap))\n\n  const chunksMaskStyles = computed(() => {\n    if (!hasChunks.value) return {}\n\n    const chunkGapPx = convertToUnit(chunkGap.value)\n    const chunkWidthPx = convertToUnit(chunkWidth.value)\n\n    return {\n      maskRepeat: 'repeat-x',\n      maskImage: `linear-gradient(90deg, #000, #000 ${chunkWidthPx}, transparent ${chunkWidthPx}, transparent)`,\n      maskSize: `calc(${chunkWidthPx} + ${chunkGapPx}) 100%`,\n    }\n  })\n\n  const splitStyles = computed(() => {\n    if (!isSplit.value) return undefined\n\n    const halfGap = convertToUnit(chunkGap.value / 2)\n    const position = toValue(reversed) ? 'right' : 'left'\n\n    const val = toValue(value)\n    if (val >= 100) return undefined\n\n    const buffer = toValue(bufferValue)\n    const hasBar = val > 0\n    const hasBuffer = buffer > val && buffer < 100\n    if (!hasBar && !hasBuffer) return undefined\n\n    const split = convertToUnit(val, '%')\n    const bufferSplit = convertToUnit(buffer, '%')\n    const edge = hasBuffer ? bufferSplit : split\n\n    return {\n      bar: hasBar ? {\n        width: `calc(${split} - ${halfGap})`,\n      } : undefined,\n      buffer: hasBuffer ? {\n        [position]: hasBar ? `calc(${split} + ${halfGap})` : 0,\n        width: hasBar\n          ? `calc(${bufferSplit} - ${split} - ${convertToUnit(chunkGap.value)})`\n          : `calc(${bufferSplit} - ${halfGap})`,\n      } : undefined,\n      background: {\n        [position]: `calc(${edge} + ${halfGap})`,\n        width: `calc(100% - ${edge} - ${halfGap})`,\n      },\n    }\n  })\n\n  function snapValueToChunk (val: number) {\n    if (isSplit.value) return val\n\n    const containerSize = toValue(containerWidth)\n    if (!containerSize) return val\n\n    const gapRelativeSize = 100 * chunkGap.value / containerSize\n    const chunkRelativeSize = 100 * (chunkWidth.value + chunkGap.value) / containerSize\n\n    // low-effort workaround to floating-point rounding in the division\n    const filledChunks = Math.floor((val + gapRelativeSize) / chunkRelativeSize + 1e-9)\n\n    return clamp(filledChunks * chunkRelativeSize - gapRelativeSize / 2, 0, 100)\n  }\n\n  return {\n    hasChunks: toRef(() => hasChunks.value || isSplit.value),\n    isSplit,\n    chunkCount,\n    chunksMaskStyles,\n    splitStyles,\n    snapValueToChunk,\n  }\n}\n","// Styles\nimport './VProgressLinear.sass'\n\n// Composables\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useRtl } from '@/composables/locale'\nimport { makeLocationProps, useLocation } from '@/composables/location'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { makeRevealProps, useReveal } from '@/composables/reveal'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useToggleScope } from '@/composables/toggleScope'\n\n// Utilities\nimport { computed, ref, shallowRef, Transition, watchEffect } from 'vue'\nimport { makeChunksProps, useChunks } from './chunks'\nimport { clamp, convertToUnit, genericComponent, isObject, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\ntype VProgressLinearSlots = {\n  default: { value: number, buffer: number }\n}\n\nexport const makeVProgressLinearProps = propsFactory({\n  absolute: Boolean,\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  bufferColor: String,\n  bufferOpacity: [Number, String],\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  opacity: [Number, String],\n  reverse: Boolean,\n  stream: Boolean,\n  striped: Boolean,\n  roundedBar: Boolean,\n  transition: {\n    type: [Boolean, Object] as PropType<boolean | { duration?: number | string }>,\n    default: undefined,\n  },\n\n  ...makeChunksProps(),\n  ...makeComponentProps(),\n  ...makeLocationProps({ location: 'top' } as const),\n  ...makeRevealProps(),\n  ...makeRoundedProps(),\n  ...makeTagProps(),\n  ...makeThemeProps(),\n}, 'VProgressLinear')\n\nexport const VProgressLinear = genericComponent<VProgressLinearSlots>()({\n  name: 'VProgressLinear',\n\n  props: makeVProgressLinearProps(),\n\n  emits: {\n    'update:modelValue': (value: number) => true,\n  },\n\n  setup (props, { slots }) {\n    const root = ref<HTMLElement>()\n\n    const progress = useProxiedModel(props, 'modelValue')\n    const { isRtl, rtlClasses } = useRtl()\n    const { themeClasses } = provideTheme(props)\n    const { locationStyles } = useLocation(props)\n    const { textColorClasses, textColorStyles } = useTextColor(() => props.color)\n    const {\n      backgroundColorClasses,\n      backgroundColorStyles,\n    } = useBackgroundColor(() => props.bgColor || props.color)\n    const {\n      backgroundColorClasses: bufferColorClasses,\n      backgroundColorStyles: bufferColorStyles,\n    } = useBackgroundColor(() => props.bufferColor || props.bgColor || props.color)\n    const {\n      backgroundColorClasses: barColorClasses,\n      backgroundColorStyles: barColorStyles,\n    } = useBackgroundColor(() => props.color)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n    const { intersectionRef, isIntersecting } = useIntersectionObserver()\n    const { state: revealState, duration: revealDuration } = useReveal(props)\n\n    const max = computed(() => parseFloat(props.max))\n    const height = computed(() => convertToUnit(props.height))\n    const normalizedBuffer = computed(() => clamp(parseFloat(props.bufferValue) / max.value * 100, 0, 100))\n    const normalizedValue = computed(() => revealState.value === 'initial'\n      ? 0\n      : clamp(parseFloat(progress.value) / max.value * 100, 0, 100)\n    )\n    const isReversed = computed(() => isRtl.value !== props.reverse)\n    const transitionDuration = computed(() => props.transition === false ? undefined : convertToUnit(\n      isObject(props.transition) ? props.transition.duration : undefined, 'ms'\n    ))\n    const transitionName = computed(() => props.indeterminate ? 'fade-transition' : 'slide-x-transition')\n\n    const containerWidth = shallowRef(0)\n    const { hasChunks, splitStyles, chunksMaskStyles, snapValueToChunk } = useChunks(\n      props,\n      containerWidth,\n      normalizedValue,\n      normalizedBuffer,\n      isReversed\n    )\n    useToggleScope(hasChunks, () => {\n      const { resizeRef } = useResizeObserver(entries => containerWidth.value = entries[0].contentRect.width)\n      watchEffect(() => resizeRef.value = root.value)\n    })\n\n    const bufferWidth = computed(() => {\n      return hasChunks.value\n        ? snapValueToChunk(normalizedBuffer.value)\n        : normalizedBuffer.value\n    })\n\n    const barWidth = computed(() => {\n      return hasChunks.value\n        ? snapValueToChunk(normalizedValue.value)\n        : normalizedValue.value\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    watchEffect(() => {\n      intersectionRef.value = root.value\n    })\n\n    function renderBackgroundBar () {\n      return (\n        <div\n          class={[\n            'v-progress-linear__background',\n            backgroundColorClasses.value,\n          ]}\n          style={[\n            backgroundColorStyles.value,\n            {\n              opacity: props.bgOpacity != null ? parseFloat(props.bgOpacity) : undefined,\n              width: props.stream ? 0 : undefined,\n            },\n            props.indeterminate ? {} : splitStyles.value?.background,\n          ]}\n        />\n      )\n    }\n\n    useRender(() => (\n      <props.tag\n        ref={ root }\n        class={[\n          'v-progress-linear',\n          {\n            'v-progress-linear--absolute': props.absolute,\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            'v-progress-linear--clickable': props.clickable,\n            'v-progress-linear--no-transition': props.transition === false,\n            'v-progress-linear--revealing': ['initial', 'pending'].includes(revealState.value),\n            'v-progress-linear--variant-split': props.variant === 'split',\n          },\n          roundedClasses.value,\n          themeClasses.value,\n          rtlClasses.value,\n          props.class,\n        ]}\n        style={[\n          {\n            bottom: props.location === 'bottom' ? 0 : undefined,\n            top: props.location === 'top' ? 0 : undefined,\n            height: props.active ? height.value : 0,\n            '--v-progress-linear-height': height.value,\n            '--v-progress-linear-transition-duration': transitionDuration.value,\n            '--v-progress-reveal-duration': `${revealDuration.value}ms`,\n            '--v-progress-chunk-gap': convertToUnit(props.chunkGap),\n            ...(props.absolute ? locationStyles.value : {}),\n          },\n          chunksMaskStyles.value,\n          roundedStyles.value,\n          props.style,\n        ]}\n        role=\"progressbar\"\n        aria-hidden={ props.active ? 'false' : 'true' }\n        aria-valuemin=\"0\"\n        aria-valuemax={ props.max }\n        aria-valuenow={ props.indeterminate ? undefined : Math.min(parseFloat(progress.value), max.value) }\n        onClick={ props.clickable && handleClick }\n      >\n        { props.stream && (\n          <div\n            key=\"stream\"\n            class={[\n              'v-progress-linear__stream',\n              textColorClasses.value,\n            ]}\n            style={{\n              ...textColorStyles.value,\n              [isReversed.value ? 'left' : 'right']: `calc(${height.value} * -1)`,\n              borderTop: `calc(${height.value} / 2) dotted`,\n              opacity: props.bufferOpacity != null ? parseFloat(props.bufferOpacity) : undefined,\n              top: `calc(50% - ${height.value} / 4)`,\n              width: convertToUnit(100 - normalizedBuffer.value, '%'),\n              '--v-progress-linear-stream-to': `calc(${height.value} * ${isReversed.value ? 1 : -1})`,\n            }}\n          />\n        )}\n\n        { (props.variant !== 'split' || !props.indeterminate) && renderBackgroundBar() }\n\n        <div\n          class={[\n            'v-progress-linear__buffer',\n            bufferColorClasses.value,\n          ]}\n          style={[\n            bufferColorStyles.value,\n            {\n              opacity: props.bufferOpacity != null ? parseFloat(props.bufferOpacity) : undefined,\n              width: convertToUnit(bufferWidth.value, '%'),\n            },\n            splitStyles.value?.buffer,\n          ]}\n        />\n\n        <Transition name={ transitionName.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(barWidth.value, '%') },\n                splitStyles.value?.bar,\n              ]}\n            />\n          ) : (\n            <div class=\"v-progress-linear__indeterminate\">\n              { props.variant === 'split' && (\n                <>\n                  { renderBackgroundBar() }\n                  { renderBackgroundBar() }\n                  { renderBackgroundBar() }\n                </>\n              )}\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    return {}\n  },\n})\n\nexport type VProgressLinear = InstanceType<typeof VProgressLinear>\n","// Components\nimport { VProgressLinear } from '@/components/VProgressLinear'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nimport type { ExtractPropTypes, SetupContext } from 'vue'\nimport type { SlotsToProps } from '@/util'\n\nexport interface LoaderSlotProps {\n  color: string | undefined\n  isActive: boolean\n}\n\nexport interface LoaderProps {\n  loading?: boolean | string\n}\n\n// Composables\nexport const makeLoaderProps = propsFactory({\n  loading: [Boolean, String],\n}, 'loader')\n\nexport function useLoader (\n  props: LoaderProps,\n  name = getCurrentInstanceName(),\n) {\n  const loaderClasses = toRef(() => ({\n    [`${name}--loading`]: props.loading,\n  }))\n\n  return { loaderClasses }\n}\n\nexport function LoaderSlot (\n  props: {\n    absolute?: boolean\n    active: boolean\n    name: string\n    color?: string\n  } & ExtractPropTypes<SlotsToProps<{\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      } satisfies LoaderSlotProps) || (\n        <VProgressLinear\n          absolute={ props.absolute }\n          active={ props.active }\n          color={ props.color }\n          height=\"2\"\n          indeterminate\n        />\n      )}\n    </div>\n  )\n}\n","// Utilities\nimport { toRef } from 'vue'\nimport { 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  position: Position | undefined\n}\n\n// Composables\nexport const makePositionProps = propsFactory({\n  position: {\n    type: String as PropType<Position>,\n    validator: /* istanbul ignore next */ (v: any) => positionValues.includes(v),\n  },\n}, 'position')\n\nexport function usePosition (\n  props: PositionProps,\n  name = getCurrentInstanceName(),\n) {\n  const positionClasses = toRef(() => {\n    return props.position ? `${name}--${props.position}` : undefined\n  })\n\n  return { positionClasses }\n}\n","// Utilities\nimport {\n  computed,\n  nextTick,\n  onScopeDispose, reactive,\n  resolveDynamicComponent,\n  toRef,\n} from 'vue'\nimport { deepEqual, getCurrentInstance, hasEvent, IN_BROWSER, isString, propsFactory } from '@/util'\n\n// Types\nimport type { PropType, Ref, SetupContext } from 'vue'\nimport type {\n  RouterLink as _RouterLink,\n  useLink as _useLink,\n  NavigationGuardReturn,\n  RouteLocation,\n  RouteLocationNormalizedLoaded,\n  RouteLocationRaw,\n  Router,\n} from 'vue-router'\nimport type { EventProp } from '@/util'\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 | undefined\n  replace: boolean | undefined\n  to: RouteLocationRaw | undefined\n  exact: boolean | undefined\n  disabled: boolean | undefined\n}\n\nexport interface LinkListeners {\n  onClick?: EventProp | undefined\n  onClickOnce?: EventProp | undefined\n}\n\nexport interface UseLink extends Omit<Partial<ReturnType<typeof _useLink>>, 'href'|'route'|'navigate'> {\n  isLink: Readonly<Ref<boolean>>\n  isRouterLink: Readonly<Ref<boolean>>\n  isClickable: Readonly<Ref<boolean>>\n  href: Ref<string | undefined>\n  linkProps: Record<string, string | undefined>\n  route: Readonly<Ref<RouteLocation & { href: string} | undefined>>\n  navigate: Readonly<Ref<ReturnType<typeof _useLink>['navigate'] | undefined>>\n}\n\nexport function useLink (props: LinkProps & LinkListeners, attrs: SetupContext['attrs']): UseLink {\n  const RouterLink = resolveDynamicComponent('RouterLink') as typeof _RouterLink | string\n\n  const isLink = toRef(() => !!(props.href || props.to))\n  const isClickable = computed(() => {\n    return isLink?.value || hasEvent(attrs, 'click') || hasEvent(props, 'click')\n  })\n\n  if (isString(RouterLink) || !('useLink' in RouterLink)) {\n    const href = toRef(() => props.href)\n    return {\n      isLink,\n      isRouterLink: toRef(() => false),\n      isClickable,\n      href,\n      linkProps: reactive({ href }),\n      route: toRef(() => undefined),\n      navigate: toRef(() => undefined),\n    }\n  }\n\n  // vue-router useLink `to` prop needs to be reactive and useLink will crash if undefined\n  const routerLink = RouterLink.useLink({\n    to: toRef(() => props.to || ''),\n    replace: toRef(() => props.replace),\n  })\n  // Actual link needs to be undefined when to prop is not used\n  const link = computed(() => props.to ? routerLink : undefined)\n  const route = useRoute()\n  const isActive = computed(() => {\n    if (!link.value) return false\n    // router still resolving initial navigation, according to posva:\n    // - START_LOCATION has an empty matched array and its name is undefined (unlike 404 Not Page Found)\n    // - if the router is still resolving the initial boot, we bypass the active check and returns\n    //   isExactActive ?? false to prevent the flashing overlay on page refresh\n    if (route.value && route.value.matched.length === 0 && route.value.name == null) {\n      return link.value.isExactActive?.value ?? false\n    }\n    if (!props.exact) return link.value.isActive?.value ?? false\n    if (!route.value) return link.value.isExactActive?.value ?? false\n\n    return link.value.isExactActive?.value && deepEqual(link.value.route.value.query, route.value.query)\n  })\n  const href = computed(() => props.to ? link.value?.route.value.href : props.href)\n  const isRouterLink = toRef(() => !!props.to)\n\n  return {\n    isLink,\n    isRouterLink,\n    isClickable,\n    isActive,\n    route: toRef(() => link.value?.route.value),\n    navigate: toRef(() => link.value?.navigate),\n    href,\n    linkProps: reactive({\n      href,\n      'aria-current': toRef(() => isActive.value ? 'page' : undefined),\n      'aria-disabled': toRef(() => props.disabled && isLink.value ? 'true' : undefined),\n      tabindex: toRef(() => props.disabled && isLink.value ? '-1' : undefined),\n    }),\n  }\n}\n\nexport const makeRouterProps = propsFactory({\n  href: String,\n  replace: Boolean,\n  to: [String, Object] as PropType<RouteLocationRaw>,\n  exact: Boolean,\n}, 'router')\n\nlet inTransition = false\nexport function useBackButton (router: Router | undefined, cb: () => NavigationGuardReturn) {\n  let popped = false\n  let disposed = false\n  let removeBefore: (() => void) | undefined\n  let removeAfter: (() => void) | undefined\n\n  if (IN_BROWSER && router?.beforeEach) {\n    nextTick(() => {\n      if (disposed) return\n\n      window.addEventListener('popstate', onPopstate)\n      removeBefore = router.beforeEach(() => {\n        if (!inTransition) {\n          inTransition = true\n          return new Promise<NavigationGuardReturn>(resolve => {\n            setTimeout(() => resolve(popped ? cb() : undefined))\n          })\n        }\n        return popped ? cb() : undefined\n      })\n      removeAfter = router?.afterEach(() => {\n        inTransition = false\n      })\n    })\n    onScopeDispose(() => {\n      disposed = true\n      window.removeEventListener('popstate', onPopstate)\n      removeBefore?.()\n      removeAfter?.()\n    })\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 } from '@/util'\nimport { Box, getTargetBox } from '@/util/box'\n\n// Types\nimport type { DirectiveBinding } from 'vue'\n\nconst stopSymbol = Symbol('rippleStop')\n\ntype VuetifyRippleEvent = (MouseEvent | TouchEvent | KeyboardEvent) & { [stopSymbol]?: 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\ninterface RippleOptions {\n  class?: string\n  center?: boolean\n  circle?: boolean\n}\n\nexport interface RippleDirectiveBinding extends Omit<DirectiveBinding, 'modifiers' | 'value'> {\n  value?: boolean | {\n    class?: string\n    keys?: string[]\n  }\n  modifiers: {\n    center?: boolean\n    circle?: boolean\n    stop?: 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 = new Box(el)\n    const target = isTouchEvent(e) ? e.touches[e.touches.length - 1] : e\n    const point = getTargetBox([target.clientX, target.clientY])\n\n    localX = point.x - offset.left\n    localY = point.y - 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    animation.dataset.activated = String(performance.now())\n\n    requestAnimationFrame(() => {\n      requestAnimationFrame(() => {\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      })\n    })\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 = Array.from(ripples).findLast(ripple => !ripple.dataset.isHiding)\n\n    if (!animation) 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\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        if (animation.parentNode?.parentNode === el) el.removeChild(animation.parentNode)\n      }, 300)\n    }, delay)\n  },\n}\n\nfunction isRippleEnabled (value: any) {\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[stopSymbol]) return\n\n  // Don't allow the event to trigger ripples on any other elements\n  e[stopSymbol] = 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 rippleStop (e: VuetifyRippleEvent) {\n  e[stopSymbol] = true\n}\n\nfunction rippleHide (e: Event) {\n  const element = e.currentTarget as HTMLElement | null\n  if (!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?._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, keys: string[]) {\n  if (!keyboardRipple && keys.includes(e.key)) {\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\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\n  const bindingValue = isObject(value) ? value : {}\n  if (bindingValue.class) {\n    el._ripple.class = bindingValue.class\n  }\n\n  const allowedKeys = bindingValue.keys ?? ['Enter', 'Space']\n  el._ripple.keyDownHandler = (e: KeyboardEvent) => keyboardRippleShow(e, allowedKeys)\n\n  if (enabled && !wasEnabled) {\n    if (modifiers.stop) {\n      el.addEventListener('touchstart', rippleStop, { passive: true })\n      el.addEventListener('mousedown', rippleStop)\n      return\n    }\n\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', el._ripple.keyDownHandler)\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('touchstart', rippleStop)\n  el.removeEventListener('mousedown', rippleStop)\n\n  el.removeEventListener('touchstart', rippleShow)\n  el.removeEventListener('touchend', rippleHide)\n  el.removeEventListener('touchmove', rippleCancelShow)\n  el.removeEventListener('touchcancel', rippleHide)\n\n  el.removeEventListener('mousedown', rippleShow)\n  el.removeEventListener('mouseup', rippleHide)\n  el.removeEventListener('mouseleave', rippleHide)\n\n  if (el._ripple?.keyDownHandler) {\n    el.removeEventListener('keydown', el._ripple.keyDownHandler)\n  }\n  el.removeEventListener('keyup', keyboardRippleHide)\n\n  el.removeEventListener('blur', focusRippleHide)\n\n  el.removeEventListener('dragstart', rippleHide)\n}\n\nfunction mounted (el: HTMLElement, binding: RippleDirectiveBinding) {\n  updateRipple(el, binding, false)\n}\n\nfunction unmounted (el: HTMLElement) {\n  removeListeners(el)\n  delete el._ripple\n}\n\nfunction updated (el: HTMLElement, binding: RippleDirectiveBinding) {\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 = {\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 { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\nimport { VProgressCircular } from '@/components/VProgressCircular'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeComponentProps } from '@/composables/component'\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 { IconValue } from '@/composables/icons'\nimport { makeLoaderProps, useLoader } from '@/composables/loader'\nimport { makeLocationProps, useLocation } from '@/composables/location'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeRouterProps, useLink } from '@/composables/router'\nimport { useSelectLink } from '@/composables/selectLink'\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 vRipple from '@/directives/ripple'\n\n// Utilities\nimport { computed, toDisplayString, toRef, withDirectives } from 'vue'\nimport { genericComponent, isBoolean, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { RippleDirectiveBinding } from '@/directives/ripple'\n\nexport type VBtnSlots = {\n  default: never\n  prepend: never\n  append: never\n  loader: never\n}\n\nexport const makeVBtnProps = propsFactory({\n  active: {\n    type: Boolean,\n    default: undefined,\n  },\n  activeColor: String,\n  baseColor: String,\n  symbol: {\n    type: null,\n    default: VBtnToggleSymbol,\n  },\n  flat: Boolean,\n  icon: [Boolean, String, Function, Object] as PropType<boolean | IconValue>,\n  prependIcon: IconValue,\n  appendIcon: IconValue,\n\n  block: Boolean,\n  readonly: Boolean,\n  slim: Boolean,\n  stacked: Boolean,\n  spaced: String as PropType<'start' | 'end' | 'both'>,\n\n  ripple: {\n    type: [Boolean, Object] as PropType<RippleDirectiveBinding['value']>,\n    default: true,\n  },\n\n  text: {\n    type: [String, Number, Boolean],\n    default: undefined,\n  },\n\n  ...makeBorderProps(),\n  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...makeDimensionProps(),\n  ...makeElevationProps(),\n  ...makeGroupItemProps(),\n  ...makeLoaderProps(),\n  ...makeLocationProps(),\n  ...makePositionProps(),\n  ...makeRoundedProps(),\n  ...makeRouterProps(),\n  ...makeSizeProps(),\n  ...makeTagProps({ tag: 'button' }),\n  ...makeThemeProps(),\n  ...makeVariantProps({ variant: 'elevated' } as const),\n}, 'VBtn')\n\nexport const VBtn = genericComponent<VBtnSlots>()({\n  name: 'VBtn',\n\n  props: makeVBtnProps(),\n\n  emits: {\n    'group:selected': (val: { value: boolean }) => true,\n  },\n\n  setup (props, { attrs, slots }) {\n    const { themeClasses } = provideTheme(props)\n    const { borderClasses } = useBorder(props)\n    const { densityClasses } = useDensity(props)\n    const { dimensionStyles } = useDimension(props)\n    const { elevationClasses } = useElevation(props)\n    const { loaderClasses } = useLoader(props)\n    const { locationStyles } = useLocation(props)\n    const { positionClasses } = usePosition(props)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n    const { sizeClasses, sizeStyles } = useSize(props)\n    const group = useGroupItem(props, props.symbol, false)\n    const link = useLink(props, attrs)\n\n    const isActive = computed(() => {\n      if (props.active !== undefined) {\n        return props.active\n      }\n\n      if (link.isRouterLink.value) {\n        return link.isActive?.value\n      }\n\n      return group?.isSelected.value\n    })\n\n    const color = toRef(() => isActive.value ? props.activeColor ?? props.color : props.color)\n    const variantProps = computed(() => {\n      const showColor = (\n        (group?.isSelected.value && (!link.isLink.value || link.isActive?.value)) ||\n        (!group || link.isActive?.value)\n      )\n      return ({\n        color: showColor ? color.value ?? props.baseColor : props.baseColor,\n        variant: props.variant,\n      })\n    })\n    const { colorClasses, colorStyles, variantClasses } = useVariant(variantProps)\n\n    const isDisabled = computed(() => group?.disabled.value || props.disabled)\n    const isElevated = toRef(() => {\n      return props.variant === 'elevated' && !(props.disabled || props.flat || props.border)\n    })\n    const valueAttr = computed(() => {\n      if (props.value === undefined || typeof props.value === 'symbol') return undefined\n\n      return Object(props.value) === props.value\n        ? JSON.stringify(props.value, null, 0)\n        : props.value\n    })\n\n    function onClick (e: MouseEvent) {\n      if (\n        isDisabled.value ||\n        (link.isLink.value && (\n          e.metaKey ||\n          e.ctrlKey ||\n          e.shiftKey ||\n          (e.button !== 0) ||\n          attrs.target === '_blank'\n        ))\n      ) return\n\n      if (link.isRouterLink.value) {\n        link.navigate.value?.(e)\n      } else {\n        // Group active state for links is handled by useSelectLink\n        group?.toggle()\n      }\n    }\n\n    useSelectLink(link, group?.select)\n\n    useRender(() => {\n      const Tag = (link.isLink.value) ? 'a' : props.tag\n      const hasPrepend = !!(props.prependIcon || slots.prepend)\n      const hasAppend = !!(props.appendIcon || slots.append)\n      const hasIcon = !!(props.icon && props.icon !== true)\n\n      return withDirectives(\n        <Tag\n          { ...link.linkProps }\n          type={ Tag === 'a' ? undefined : 'button' }\n          class={[\n            'v-btn',\n            group?.selectedClass.value,\n            {\n              'v-btn--active': isActive.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--loading': props.loading,\n              'v-btn--readonly': props.readonly,\n              'v-btn--slim': props.slim,\n              'v-btn--stacked': props.stacked,\n            },\n            props.spaced\n              ? [\n                'v-btn--spaced',\n                `v-btn--spaced-${props.spaced}`,\n              ]\n              : [],\n            themeClasses.value,\n            borderClasses.value,\n            colorClasses.value,\n            densityClasses.value,\n            elevationClasses.value,\n            loaderClasses.value,\n            positionClasses.value,\n            roundedClasses.value,\n            sizeClasses.value,\n            variantClasses.value,\n            props.class,\n          ]}\n          style={[\n            colorStyles.value,\n            dimensionStyles.value,\n            locationStyles.value,\n            sizeStyles.value,\n            roundedStyles.value,\n            props.style,\n          ]}\n          aria-busy={ props.loading ? true : undefined }\n          disabled={ (isDisabled.value && Tag !== 'a') || undefined }\n          tabindex={ props.loading || props.readonly ? -1 : undefined }\n          onClick={ onClick }\n          value={ Tag !== 'a' ? valueAttr.value : undefined }\n        >\n          { genOverlays(true, 'v-btn') }\n\n          { !props.icon && hasPrepend && (\n            <span key=\"prepend\" class=\"v-btn__prepend\">\n              { !slots.prepend ? (\n                <VIcon\n                  key=\"prepend-icon\"\n                  icon={ props.prependIcon }\n                />\n              ) : (\n                <VDefaultsProvider\n                  key=\"prepend-defaults\"\n                  disabled={ !props.prependIcon }\n                  defaults={{\n                    VIcon: {\n                      icon: props.prependIcon,\n                    },\n                  }}\n                  v-slots:default={ slots.prepend }\n                />\n              )}\n            </span>\n          )}\n\n          <span class=\"v-btn__content\" data-no-activator=\"\">\n            { (!slots.default && hasIcon) ? (\n              <VIcon\n                key=\"content-icon\"\n                icon={ props.icon }\n              />\n            ) : (\n              <VDefaultsProvider\n                key=\"content-defaults\"\n                disabled={ !hasIcon }\n                defaults={{\n                  VIcon: {\n                    icon: props.icon,\n                  },\n                }}\n              >\n                { slots.default?.() ?? toDisplayString(props.text) }\n              </VDefaultsProvider>\n            )}\n          </span>\n\n          { !props.icon && hasAppend && (\n            <span key=\"append\" class=\"v-btn__append\">\n              { !slots.append ? (\n                <VIcon\n                  key=\"append-icon\"\n                  icon={ props.appendIcon }\n                />\n              ) : (\n                <VDefaultsProvider\n                  key=\"append-defaults\"\n                  disabled={ !props.appendIcon }\n                  defaults={{\n                    VIcon: {\n                      icon: props.appendIcon,\n                    },\n                  }}\n                  v-slots:default={ slots.append }\n                />\n              )}\n            </span>\n          )}\n\n          { !!props.loading && (\n            <span key=\"loader\" class=\"v-btn__loader\">\n              { slots.loader?.() ?? (\n                <VProgressCircular\n                  color={ isBoolean(props.loading) ? undefined : props.loading }\n                  indeterminate\n                  width=\"2\"\n                />\n              )}\n            </span>\n          )}\n        </Tag>,\n        [[\n          vRipple,\n          !isDisabled.value && props.ripple,\n          '',\n          { center: !!props.icon },\n        ]]\n      )\n    })\n\n    return { group }\n  },\n})\n\nexport type VBtn = InstanceType<typeof VBtn>\n","// Utilities\nimport { nextTick, watch } from 'vue'\nimport { isBoolean } from '@/util'\n\n// Types\nimport type { UseLink } from './router'\n\nexport function useSelectLink (link: UseLink, select?: (value: boolean, e?: Event) => void) {\n  watch(() => link.isActive?.value, isActive => {\n    if (link.isLink.value && isBoolean(isActive) && select) {\n      nextTick(() => {\n        select(isActive)\n      })\n    }\n  }, {\n    immediate: true,\n  })\n}\n","// Components\nimport { makeVBtnProps, VBtn } from '@/components/VBtn/VBtn'\n\n// Utilities\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { VBtnSlots } from '@/components/VBtn/VBtn'\n\nexport const makeVAppBarNavIconProps = propsFactory({\n  ...omit(makeVBtnProps({\n    icon: '$menu',\n    variant: 'text' as const,\n  }), ['spaced']),\n}, 'VAppBarNavIcon')\n\nexport const VAppBarNavIcon = genericComponent<VBtnSlots>()({\n  name: 'VAppBarNavIcon',\n\n  props: makeVAppBarNavIconProps(),\n\n  setup (props, { slots }) {\n    useRender(() => (\n      <VBtn\n        { ...props }\n        class={[\n          'v-app-bar-nav-icon',\n        ]}\n        v-slots={ slots }\n      />\n    ))\n\n    return {}\n  },\n})\n\nexport type VAppBarNavIcon = InstanceType<typeof VAppBarNavIcon>\n","// Components\nimport { makeVToolbarTitleProps, VToolbarTitle } from '@/components/VToolbar/VToolbarTitle'\n\n// Utilities\nimport { genericComponent, useRender } from '@/util'\n\n// Types\nimport type { VToolbarTitleSlots } from '@/components/VToolbar/VToolbarTitle'\n\nexport const VAppBarTitle = genericComponent<VToolbarTitleSlots>()({\n  name: 'VAppBarTitle',\n\n  props: makeVToolbarTitleProps(),\n\n  setup (props, { slots }) {\n    useRender(() => (\n      <VToolbarTitle\n        { ...props }\n        class=\"v-app-bar-title\"\n        v-slots={ slots }\n      />\n    ))\n\n    return {}\n  },\n})\n\nexport type VAppBarTitle = InstanceType<typeof VAppBarTitle>\n","// Utilities\nimport { createSimpleFunctional } from '@/util'\n\nexport const VAlertTitle = createSimpleFunctional('v-alert-title')\n\nexport type VAlertTitle = InstanceType<typeof VAlertTitle>\n","// Utilities\nimport { computed } from 'vue'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { ComputedGetter, PropType } from 'vue'\nimport type { VIconBtnSizes } from '@/components/VIconBtn/VIconBtn'\n\n// Types\nexport interface IconSizeProps {\n  iconSize?: VIconBtnSizes | number | string\n  iconSizes: [VIconBtnSizes, number][]\n}\n\n// Composables\nexport const makeIconSizeProps = propsFactory({\n  iconSize: [Number, String] as PropType<VIconBtnSizes | number | string>,\n  iconSizes: {\n    type: Array as PropType<[VIconBtnSizes, number][]>,\n    default: () => ([\n      ['x-small', 10],\n      ['small', 16],\n      ['default', 24],\n      ['large', 28],\n      ['x-large', 32],\n    ]),\n  },\n}, 'iconSize')\n\nexport function useIconSizes (props: IconSizeProps, fallback: ComputedGetter<VIconBtnSizes | number | string | undefined>) {\n  const iconSize = computed(() => {\n    const iconSizeMap = new Map(props.iconSizes)\n    const _iconSize = props.iconSize as VIconBtnSizes ?? fallback() ?? 'default'\n    return iconSizeMap.has(_iconSize)\n      ? iconSizeMap.get(_iconSize)\n      : _iconSize\n  })\n\n  return { iconSize }\n}\n","// Styles\nimport './VAlert.sass'\n\n// Components\nimport { VAlertTitle } from './VAlertTitle'\nimport { VBtn } from '@/components/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { IconValue } from '@/composables/icons'\nimport { makeIconSizeProps, useIconSizes } from '@/composables/iconSizes'\nimport { useLocale } from '@/composables/locale'\nimport { makeLocationProps, useLocation } from '@/composables/location'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { genericComponent, isBoolean, propsFactory } 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 makeVAlertProps = propsFactory({\n  border: {\n    type: [Boolean, String] as PropType<boolean | 'top' | 'end' | 'bottom' | 'start'>,\n    validator: (val: boolean | string) => {\n      return isBoolean(val) || [\n        'top',\n        'end',\n        'bottom',\n        'start',\n      ].includes(val)\n    },\n  },\n  borderColor: String,\n  closable: Boolean,\n  closeIcon: {\n    type: IconValue,\n    default: '$close',\n  },\n  closeLabel: {\n    type: String,\n    default: '$vuetify.close',\n  },\n  icon: {\n    type: [Boolean, String, Function, Object] as PropType<false | IconValue>,\n    default: null,\n  },\n  modelValue: {\n    type: Boolean,\n    default: true,\n  },\n  prominent: Boolean,\n  title: String,\n  text: String,\n  type: {\n    type: String as PropType<ContextualType>,\n    validator: (val: ContextualType) => allowedTypes.includes(val),\n  },\n\n  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...makeDimensionProps(),\n  ...makeElevationProps(),\n  ...makeIconSizeProps(),\n  ...makeLocationProps(),\n  ...makePositionProps(),\n  ...makeRoundedProps(),\n  ...makeTagProps(),\n  ...makeThemeProps(),\n  ...makeVariantProps({ variant: 'flat' } as const),\n}, 'VAlert')\n\nexport type VAlertSlots = {\n  default: never\n  prepend: never\n  title: never\n  text: never\n  append: never\n  close: { props: Record<string, any> }\n}\n\nexport const VAlert = genericComponent<VAlertSlots>()({\n  name: 'VAlert',\n\n  props: makeVAlertProps(),\n\n  emits: {\n    'click:close': (e: MouseEvent) => true,\n    'update:modelValue': (value: boolean) => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const isActive = useProxiedModel(props, 'modelValue')\n    const icon = toRef(() => {\n      if (props.icon === false) return undefined\n      if (!props.type) return props.icon\n\n      return props.icon ?? `$${props.type}`\n    })\n\n    const { iconSize } = useIconSizes(props, () => props.prominent ? 44 : undefined)\n    const { themeClasses } = provideTheme(props)\n    const { colorClasses, colorStyles, variantClasses } = useVariant(() => ({\n      color: props.color ?? props.type,\n      variant: props.variant,\n    }))\n    const { densityClasses } = useDensity(props)\n    const { dimensionStyles } = useDimension(props)\n    const { elevationClasses } = useElevation(props)\n    const { locationStyles } = useLocation(props)\n    const { positionClasses } = usePosition(props)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n    const { textColorClasses, textColorStyles } = useTextColor(() => props.borderColor)\n    const { t } = useLocale()\n\n    const closeProps = toRef(() => ({\n      'aria-label': t(props.closeLabel),\n      onClick (e: MouseEvent) {\n        isActive.value = false\n\n        emit('click:close', e)\n      },\n    }))\n\n    return () => {\n      const hasPrepend = !!(slots.prepend || icon.value)\n      const hasTitle = !!(slots.title || props.title)\n      const hasClose = !!(slots.close || props.closable)\n\n      const iconProps = {\n        density: props.density,\n        icon: icon.value,\n        size: props.iconSize || props.prominent\n          ? iconSize.value\n          : undefined,\n      }\n\n      return isActive.value && (\n        <props.tag\n          class={[\n            'v-alert',\n            props.border && {\n              'v-alert--border': !!props.border,\n              [`v-alert--border-${props.border === true ? 'start' : props.border}`]: true,\n            },\n            {\n              'v-alert--prominent': props.prominent,\n            },\n            themeClasses.value,\n            colorClasses.value,\n            densityClasses.value,\n            elevationClasses.value,\n            positionClasses.value,\n            roundedClasses.value,\n            variantClasses.value,\n            props.class,\n          ]}\n          style={[\n            colorStyles.value,\n            dimensionStyles.value,\n            locationStyles.value,\n            roundedStyles.value,\n            props.style,\n          ]}\n          role=\"alert\"\n        >\n          { genOverlays(false, 'v-alert') }\n\n          { props.border && (\n            <div\n              key=\"border\"\n              class={[\n                'v-alert__border',\n                textColorClasses.value,\n              ]}\n              style={ textColorStyles.value }\n            />\n          )}\n\n          { hasPrepend && (\n            <div key=\"prepend\" class=\"v-alert__prepend\">\n              { !slots.prepend ? (\n                <VIcon key=\"prepend-icon\" { ...iconProps } />\n              ) : (\n                <VDefaultsProvider\n                  key=\"prepend-defaults\"\n                  disabled={ !icon.value }\n                  defaults={{ VIcon: { ...iconProps } }}\n                  v-slots:default={ slots.prepend }\n                />\n              )}\n            </div>\n          )}\n\n          <div class=\"v-alert__content\">\n            { hasTitle && (\n              <VAlertTitle key=\"title\">\n                { slots.title?.() ?? props.title }\n              </VAlertTitle>\n            )}\n\n            { slots.text?.() ?? props.text }\n\n            { slots.default?.() }\n          </div>\n\n          { slots.append && (\n            <div key=\"append\" class=\"v-alert__append\">\n              { slots.append() }\n            </div>\n          )}\n\n          { hasClose && (\n            <div key=\"close\" class=\"v-alert__close\">\n              { !slots.close ? (\n                <VBtn\n                  key=\"close-btn\"\n                  icon={ props.closeIcon }\n                  size=\"x-small\"\n                  variant=\"text\"\n                  { ...closeProps.value }\n                />\n              ) : (\n                <VDefaultsProvider\n                  key=\"close-defaults\"\n                  defaults={{\n                    VBtn: {\n                      icon: props.closeIcon,\n                      size: 'x-small',\n                      variant: 'text',\n                    },\n                  }}\n                >\n                  { slots.close?.({ props: closeProps.value }) }\n                </VDefaultsProvider>\n              )}\n            </div>\n          )}\n        </props.tag>\n      )\n    }\n  },\n})\n\nexport type VAlert = InstanceType<typeof VAlert>\n","// Styles\nimport './VThemeProvider.sass'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { genericComponent, propsFactory } from '@/util'\n\nexport const makeVThemeProviderProps = propsFactory({\n  withBackground: Boolean,\n\n  ...makeComponentProps(),\n  ...makeThemeProps(),\n  ...makeTagProps(),\n}, 'VThemeProvider')\n\nexport const VThemeProvider = genericComponent()({\n  name: 'VThemeProvider',\n\n  props: makeVThemeProviderProps(),\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\n          class={[\n            'v-theme-provider',\n            themeClasses.value,\n            props.class,\n          ]}\n          style={ props.style }\n        >\n          { slots.default?.() }\n        </props.tag>\n      )\n    }\n  },\n})\n\nexport type VThemeProvider = InstanceType<typeof VThemeProvider>\n","// Styles\nimport './VBadge.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VThemeProvider } from '@/components/VThemeProvider'\n\n// Composables\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\nimport { makeLocationProps, useLocation } from '@/composables/location'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, useTheme } from '@/composables/theme'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { convertToUnit, genericComponent, pickWithRest, propsFactory, useRender } from '@/util'\n\nexport type VBadgeSlots = {\n  default: never\n  badge: never\n}\n\nexport const makeVBadgeProps = propsFactory({\n  bordered: Boolean,\n  color: String,\n  content: [Number, String],\n  dot: Boolean,\n  dotSize: [Number, String],\n  floating: Boolean,\n  icon: IconValue,\n  inline: Boolean,\n  label: {\n    type: String,\n    default: '$vuetify.badge',\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\n  ...makeComponentProps(),\n  ...makeLocationProps({ location: 'top end' } as const),\n  ...makeRoundedProps(),\n  ...makeTagProps(),\n  ...makeThemeProps(),\n  ...makeTransitionProps({ transition: 'scale-rotate-transition' }),\n  ...makeDimensionProps(),\n}, 'VBadge')\n\nexport const VBadge = genericComponent<VBadgeSlots>()({\n  name: 'VBadge',\n\n  inheritAttrs: false,\n\n  props: makeVBadgeProps(),\n\n  setup (props, ctx) {\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n    const { t } = useLocale()\n    const { textColorClasses, textColorStyles } = useTextColor(() => props.textColor)\n\n    const theme = useTheme()\n    // use props.theme and fallback to inherited\n    const themeClasses = toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${props.theme ?? theme.name.value}`)\n\n    const { locationStyles } = useLocation(props, true, side => {\n      const base = props.floating\n        ? (props.dot ? 2 : 4)\n        : (props.dot ? Number(props.dotSize ?? 8) : 12)\n\n      return base + (\n        ['top', 'bottom'].includes(side) ? Number(props.offsetY ?? 0)\n        : ['left', 'right'].includes(side) ? Number(props.offsetX ?? 0)\n        : 0\n      )\n    })\n\n    const { dimensionStyles } = useDimension(props)\n\n    useRender(() => {\n      const value = Number(props.content)\n      const content = (!props.max || isNaN(value)) ? props.content\n        : value <= Number(props.max) ? value\n        : `${props.max}+`\n\n      const [badgeAttrs, attrs] = pickWithRest(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            props.class,\n          ]}\n          { ...attrs }\n          style={ props.style }\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                  themeClasses.value,\n                  backgroundColorClasses.value,\n                  roundedClasses.value,\n                  textColorClasses.value,\n                ]}\n                style={[\n                  backgroundColorStyles.value,\n                  textColorStyles.value,\n                  dimensionStyles.value,\n                  props.inline ? {} : locationStyles.value,\n                  props.dot && props.dotSize ? {\n                    width: convertToUnit(props.dotSize),\n                    height: convertToUnit(props.dotSize),\n                  } : {},\n                  roundedStyles.value,\n                ]}\n                aria-atomic=\"true\"\n                aria-label={ t(props.label, value) }\n                aria-live=\"polite\"\n                role=\"status\"\n                { ...badgeAttrs }\n              >\n                <VThemeProvider theme={ props.theme }>\n                  {\n                    props.dot ? undefined\n                    : ctx.slots.badge ? ctx.slots.badge?.()\n                    : props.icon ? <VIcon icon={ props.icon } />\n                    : content\n                  }\n                </VThemeProvider>\n              </span>\n            </MaybeTransition>\n          </div>\n        </props.tag>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VBadge = InstanceType<typeof VBadge>\n","// Styles\nimport './VAvatar.sass'\n\n// Components\nimport { VBadge } from '@/components/VBadge/VBadge'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\nimport { VImg } from '@/components/VImg'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { IconValue } from '@/composables/icons'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\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// Utilities\nimport { computed } from 'vue'\nimport { genericComponent, isObject, isString, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const makeVAvatarProps = propsFactory({\n  badge: {\n    type: [Boolean, Object] as PropType<boolean | VBadge['$props']>,\n    default: false,\n  },\n  start: Boolean,\n  end: Boolean,\n  icon: IconValue,\n  image: String,\n  text: String,\n\n  ...makeBorderProps(),\n  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...makeRoundedProps(),\n  ...makeSizeProps(),\n  ...makeTagProps(),\n  ...makeThemeProps(),\n  ...makeVariantProps({ variant: 'flat' } as const),\n}, 'VAvatar')\n\nexport type VAvatarSlots = {\n  default: never\n  badge: never\n}\n\nexport const VAvatar = genericComponent<VAvatarSlots>()({\n  name: 'VAvatar',\n\n  props: makeVAvatarProps(),\n\n  setup (props, { 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 { roundedClasses, roundedStyles } = useRounded(props)\n    const { sizeClasses, sizeStyles } = useSize(props)\n\n    const badgeDotSize = computed(() => {\n      switch (props.size) {\n        case 'x-small': return 8\n        case 'small': return 10\n        case 'large': return 14\n        case 'x-large': return 16\n        default: return 12\n      }\n    })\n\n    const badgeOffset = computed(() => {\n      const { floating } = isObject(props.badge) ? props.badge : {}\n      return (floating ? badgeDotSize.value / 2 : 0) - 1.5\n    })\n\n    const badgeProps = computed(() => {\n      return {\n        bordered: true,\n        dot: !slots.badge,\n        dotSize: badgeDotSize.value,\n        offsetX: badgeOffset.value,\n        offsetY: badgeOffset.value,\n        color: isString(props.badge) ? props.badge : 'primary',\n        ...isObject(props.badge) ? props.badge : {},\n      }\n    })\n\n    useRender(() => {\n      const avatar = (\n        <props.tag\n          class={[\n            'v-avatar',\n            {\n              'v-avatar--start': props.start,\n              'v-avatar--end': props.end,\n            },\n            themeClasses.value,\n            borderClasses.value,\n            colorClasses.value,\n            densityClasses.value,\n            roundedClasses.value,\n            sizeClasses.value,\n            variantClasses.value,\n            props.class,\n          ]}\n          style={[\n            colorStyles.value,\n            sizeStyles.value,\n            roundedStyles.value,\n            props.style,\n          ]}\n        >\n          { !slots.default ? (\n            props.image\n              ? (<VImg key=\"image\" src={ props.image } alt=\"\" cover />)\n              : props.icon\n                ? (<VIcon key=\"icon\" icon={ props.icon } />)\n                : props.text\n          ) : (\n            <VDefaultsProvider\n              key=\"content-defaults\"\n              defaults={{\n                VImg: {\n                  cover: true,\n                  src: props.image,\n                },\n                VIcon: {\n                  icon: props.icon,\n                },\n              }}\n            >\n              { slots.default() }\n            </VDefaultsProvider>\n          )}\n\n          { genOverlays(false, 'v-avatar') }\n        </props.tag>\n      )\n\n      return props.badge\n        ? (\n          <VBadge\n            { ...badgeProps.value }\n            v-slots={{\n              default: () => avatar,\n              badge: slots.badge,\n            }}\n          />\n        )\n        : avatar\n    })\n\n    return {}\n  },\n})\n\nexport type VAvatar = InstanceType<typeof VAvatar>\n","// Styles\nimport './VLabel.sass'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeThemeProps } from '@/composables/theme'\n\n// Utilities\nimport { EventProp, genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVLabelProps = propsFactory({\n  text: String,\n\n  onClick: EventProp<[MouseEvent]>(),\n\n  ...makeComponentProps(),\n  ...makeThemeProps(),\n}, 'VLabel')\n\nexport const VLabel = genericComponent()({\n  name: 'VLabel',\n\n  props: makeVLabelProps(),\n\n  setup (props, { slots }) {\n    useRender(() => (\n      <label\n        class={[\n          'v-label',\n          {\n            'v-label--clickable': !!props.onClick,\n          },\n          props.class,\n        ]}\n        style={ props.style }\n        onClick={ props.onClick }\n      >\n        { props.text }\n\n        { slots.default?.() }\n      </label>\n    ))\n\n    return {}\n  },\n})\n\nexport type VLabel = InstanceType<typeof VLabel>\n","// Styles\nimport './VSelectionControlGroup.sass'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeDensityProps } from '@/composables/density'\nimport { IconValue } from '@/composables/icons'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeThemeProps } from '@/composables/theme'\n\n// Utilities\nimport { onScopeDispose, provide, toRef, useId } from 'vue'\nimport { deepEqual, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType, Ref } from 'vue'\nimport type { RippleDirectiveBinding } from '@/directives/ripple'\nimport type { GenericProps, ValueComparator } from '@/util'\n\nexport interface VSelectionGroupContext {\n  modelValue: Ref<any>\n  forceUpdate: () => void\n  onForceUpdate: (fn: () => void) => void\n}\n\nexport const VSelectionControlGroupSymbol: InjectionKey<VSelectionGroupContext> = Symbol.for('vuetify:selection-control-group')\n\nexport const makeSelectionControlGroupProps = propsFactory({\n  color: String,\n  disabled: {\n    type: Boolean as PropType<boolean | null>,\n    default: null,\n  },\n  defaultsTarget: String,\n  error: Boolean,\n  id: String,\n  inline: Boolean,\n  falseIcon: IconValue,\n  trueIcon: IconValue,\n  indeterminateIcon: IconValue,\n  ripple: {\n    type: [Boolean, Object] as PropType<RippleDirectiveBinding['value']>,\n    default: true,\n  },\n  multiple: {\n    type: Boolean as PropType<boolean | null>,\n    default: null,\n  },\n  name: String,\n  readonly: {\n    type: Boolean as PropType<boolean | null>,\n    default: null,\n  },\n  modelValue: null,\n  type: String,\n  valueComparator: {\n    type: Function as PropType<ValueComparator>,\n    default: deepEqual,\n  },\n\n  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...makeThemeProps(),\n}, 'SelectionControlGroup')\n\nexport const makeVSelectionControlGroupProps = propsFactory({\n  ...makeSelectionControlGroupProps({\n    defaultsTarget: 'VSelectionControl',\n  }),\n}, 'VSelectionControlGroup')\n\nexport const VSelectionControlGroup = genericComponent<new <T>(\n  props: {\n    modelValue?: T\n    'onUpdate:modelValue'?: (value: T) => void\n  },\n  slots: { default: never },\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VSelectionControlGroup',\n\n  props: makeVSelectionControlGroupProps(),\n\n  emits: {\n    'update:modelValue': (value: any) => true,\n  },\n\n  setup (props, { slots }) {\n    const modelValue = useProxiedModel(props, 'modelValue')\n    const uid = useId()\n    const id = toRef(() => props.id || `v-selection-control-group-${uid}`)\n    const name = toRef(() => props.name || id.value)\n\n    const updateHandlers = new Set<() => void>()\n    provide(VSelectionControlGroupSymbol, {\n      modelValue,\n      forceUpdate: () => {\n        updateHandlers.forEach(fn => fn())\n      },\n      onForceUpdate: cb => {\n        updateHandlers.add(cb)\n        onScopeDispose(() => {\n          updateHandlers.delete(cb)\n        })\n      },\n    })\n\n    provideDefaults({\n      [props.defaultsTarget]: {\n        color: toRef(() => props.color),\n        disabled: toRef(() => props.disabled),\n        density: toRef(() => props.density),\n        error: toRef(() => props.error),\n        inline: toRef(() => props.inline),\n        modelValue,\n        multiple: toRef(() => !!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        ripple: toRef(() => props.ripple),\n        type: toRef(() => props.type),\n        valueComparator: toRef(() => props.valueComparator),\n      },\n    })\n\n    useRender(() => (\n      <div\n        class={[\n          'v-selection-control-group',\n          { 'v-selection-control-group--inline': props.inline },\n          props.class,\n        ]}\n        style={ props.style }\n        role={ props.type === 'radio' ? 'radiogroup' : undefined }\n      >\n        { slots.default?.() }\n      </div>\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 { makeSelectionControlGroupProps, VSelectionControlGroupSymbol } from '@/components/VSelectionControlGroup/VSelectionControlGroup'\n\n// Composables\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { useDensity } from '@/composables/density'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport vRipple from '@/directives/ripple'\n\n// Utilities\nimport { computed, inject, nextTick, ref, shallowRef, toRef, useId } from 'vue'\nimport {\n  filterInputAttrs,\n  genericComponent,\n  matchesSelector,\n  propsFactory,\n  useRender,\n  wrapInArray,\n} from '@/util'\n\n// Types\nimport type { CSSProperties, ExtractPropTypes, Ref, VNode, WritableComputedRef } from 'vue'\nimport type { IconValue } from '@/composables/icons'\nimport type { EventProp, GenericProps } from '@/util'\n\nexport type SelectionControlSlot = {\n  model: WritableComputedRef<boolean>\n  textColorClasses: Ref<string[]>\n  textColorStyles: Ref<CSSProperties>\n  backgroundColorClasses: Ref<string[]>\n  backgroundColorStyles: Ref<CSSProperties>\n  inputNode: VNode\n  icon: IconValue | undefined\n  props: {\n    onBlur: (e: Event) => void\n    onFocus: (e: FocusEvent) => void\n    id: string\n  }\n}\n\nexport type VSelectionControlSlots = {\n  default: {\n    backgroundColorClasses: Ref<string[]>\n    backgroundColorStyles: Ref<CSSProperties>\n  }\n  label: { label: string | undefined, props: Record<string, unknown> }\n  input: SelectionControlSlot\n}\n\nexport const makeVSelectionControlProps = propsFactory({\n  indeterminate: Boolean,\n  label: String,\n  baseColor: String,\n  trueValue: null,\n  falseValue: null,\n  value: null,\n\n  ...makeComponentProps(),\n  ...makeSelectionControlGroupProps(),\n}, 'VSelectionControl')\n\nexport function useSelectionControl (\n  props: ExtractPropTypes<ReturnType<typeof makeVSelectionControlProps>> & {\n    'onUpdate:modelValue': EventProp | 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    !!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        ? wrapInArray(val).some((v: any) => props.valueComparator(v, trueValue.value))\n        : props.valueComparator(val, trueValue.value)\n    },\n    set (val: boolean) {\n      if (props.readonly) return\n\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 isActive = computed(() => model.value || props.indeterminate)\n  const { textColorClasses, textColorStyles } = useTextColor(() => {\n    if (props.error || props.disabled) return undefined\n\n    return isActive.value ? props.color : props.baseColor\n  })\n  const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => {\n    return (\n      isActive.value &&\n      !props.error &&\n      !props.disabled\n    ) ? props.color : props.baseColor\n  })\n  const icon = computed(() => (\n    props.indeterminate ? props.indeterminateIcon\n    : model.value ? props.trueIcon\n    : props.falseIcon\n  ))\n\n  return {\n    group,\n    densityClasses,\n    trueValue,\n    falseValue,\n    model,\n    textColorClasses,\n    textColorStyles,\n    backgroundColorClasses,\n    backgroundColorStyles,\n    icon,\n  }\n}\n\nexport const VSelectionControl = genericComponent<new <T>(\n  props: {\n    modelValue?: T\n    'onUpdate:modelValue'?: (value: T) => void\n  },\n  slots: VSelectionControlSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VSelectionControl',\n\n  directives: { vRipple },\n\n  inheritAttrs: false,\n\n  props: makeVSelectionControlProps(),\n\n  emits: {\n    'update:modelValue': (value: any) => true,\n  },\n\n  setup (props, { attrs, slots }) {\n    const {\n      group,\n      densityClasses,\n      icon,\n      model,\n      textColorClasses,\n      textColorStyles,\n      backgroundColorClasses,\n      backgroundColorStyles,\n      trueValue,\n    } = useSelectionControl(props)\n    const uid = useId()\n    const isFocused = shallowRef(false)\n    const isFocusVisible = shallowRef(false)\n    const input = ref<HTMLInputElement>()\n    const id = toRef(() => props.id || `input-${uid}`)\n    const isInteractive = toRef(() => !props.disabled && !props.readonly)\n\n    group?.onForceUpdate(() => {\n      if (input.value) {\n        input.value.checked = model.value\n      }\n    })\n\n    function onFocus (e: FocusEvent) {\n      if (props.disabled) return\n\n      isFocused.value = true\n      if (matchesSelector(e.target as HTMLElement, ':focus-visible') !== false) {\n        isFocusVisible.value = true\n      }\n    }\n\n    function onBlur () {\n      isFocused.value = false\n      isFocusVisible.value = false\n    }\n\n    function onClickLabel (e: Event) {\n      e.stopPropagation()\n    }\n\n    function onInput (e: Event) {\n      if (!isInteractive.value) {\n        if (input.value) {\n          // model value is not updated when input is not interactive\n          // but the internal checked state of the input is still updated,\n          // so here its value is restored\n          input.value.checked = model.value\n        }\n\n        return\n      }\n\n      if (props.readonly && group) {\n        nextTick(() => group.forceUpdate())\n      }\n      model.value = (e.target as HTMLInputElement).checked\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 [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n\n      const inputNode = (\n        <input\n          ref={ input }\n          checked={ model.value }\n          disabled={ !!props.disabled }\n          id={ id.value }\n          onBlur={ onBlur }\n          onFocus={ onFocus }\n          onInput={ onInput }\n          aria-disabled={ !!props.disabled }\n          aria-label={ props.label }\n          type={ props.type }\n          value={ trueValue.value }\n          name={ props.name }\n          aria-checked={ props.type === 'checkbox' ? model.value : undefined }\n          { ...inputAttrs }\n        />\n      )\n\n      return (\n        <div\n          class={[\n            'v-selection-control',\n            {\n              'v-selection-control--dirty': model.value,\n              'v-selection-control--indeterminate': props.indeterminate,\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': props.inline,\n            },\n            densityClasses.value,\n            props.class,\n          ]}\n          { ...rootAttrs }\n          style={ props.style }\n        >\n          <div\n            class={[\n              'v-selection-control__wrapper',\n              textColorClasses.value,\n            ]}\n            style={ textColorStyles.value }\n          >\n            { slots.default?.({\n              backgroundColorClasses,\n              backgroundColorStyles,\n            })}\n\n            <div\n              class={[\n                'v-selection-control__input',\n              ]}\n              v-ripple={[\n                !props.disabled && !props.readonly && props.ripple,\n                null,\n                ['center', 'circle'],\n              ]}\n            >\n              { slots.input?.({\n                model,\n                textColorClasses,\n                textColorStyles,\n                backgroundColorClasses,\n                backgroundColorStyles,\n                inputNode,\n                icon: icon.value,\n                props: {\n                  onFocus,\n                  onBlur,\n                  id: id.value,\n                },\n              } satisfies SelectionControlSlot) ?? (\n                <>\n                  { icon.value && <VIcon key=\"icon\" icon={ icon.value } /> }\n\n                  { inputNode }\n                </>\n              )}\n            </div>\n          </div>\n\n          { label && (\n            <VLabel for={ id.value } onClick={ onClickLabel }>\n              { label }\n            </VLabel>\n          )}\n        </div>\n      )\n    })\n\n    return {\n      isFocused,\n      input,\n    }\n  },\n})\n\nexport type VSelectionControl = InstanceType<typeof VSelectionControl>\n","// Components\nimport { makeVSelectionControlProps, VSelectionControl } from '@/components/VSelectionControl/VSelectionControl'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { VSelectionControlSlots } from '@/components/VSelectionControl/VSelectionControl'\nimport type { GenericProps } from '@/util'\n\nexport const makeVCheckboxBtnProps = propsFactory({\n  ...makeVSelectionControlProps({\n    falseIcon: '$checkboxOff',\n    trueIcon: '$checkboxOn',\n    indeterminateIcon: '$checkboxIndeterminate',\n  }),\n}, 'VCheckboxBtn')\n\nexport const VCheckboxBtn = genericComponent<new <T>(\n  props: {\n    modelValue?: T\n    'onUpdate:modelValue'?: (value: T) => void\n  },\n  slots: VSelectionControlSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VCheckboxBtn',\n\n  props: makeVCheckboxBtnProps(),\n\n  emits: {\n    'update:modelValue': (value: any) => true,\n    'update:indeterminate': (value: boolean) => true,\n  },\n\n  setup (props, { slots }) {\n    const indeterminate = useProxiedModel(props, 'indeterminate')\n    const model = useProxiedModel(props, 'modelValue')\n\n    function onChange (v: any) {\n      if (indeterminate.value) {\n        indeterminate.value = false\n      }\n    }\n\n    useRender(() => {\n      const controlProps = omit(VSelectionControl.filterProps(props), ['modelValue'])\n      return (\n        <VSelectionControl\n          { ...controlProps }\n          v-model={ model.value }\n          class={[\n            'v-checkbox-btn',\n            props.class,\n          ]}\n          style={ props.style }\n          type=\"checkbox\"\n          onUpdate:modelValue={ onChange }\n          aria-checked={ indeterminate.value ? 'mixed' : undefined }\n          v-slots={ slots }\n        />\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VCheckboxBtn = InstanceType<typeof VCheckboxBtn>\n","// Components\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { callEvent } from '@/util'\n\n// Types\nimport type { IconValue } from '@/composables/icons'\nimport type { EventProp } from '@/util'\n\ntype names = 'clear' | 'prepend' | 'append' | 'appendInner' | 'prependInner'\n\ntype InputIconProps<T extends names> = {\n  label: string | undefined\n} & {\n  [K in `${T}Icon`]: IconValue | undefined\n} & {\n  [K in `onClick:${T}`]: EventProp | undefined\n}\n\ntype Listeners<T extends {}, U = keyof T> = U extends `onClick:${infer V extends names}` ? V : never\n\nexport function useInputIcon<T extends {}, K extends names = Listeners<T>> (props: T & InputIconProps<K>) {\n  const { t } = useLocale()\n\n  function InputIcon ({ name, color, ...attrs }: { name: Extract<names, K>, color?: string }) {\n    const localeKey = {\n      prepend: 'prependAction',\n      prependInner: 'prependAction',\n      append: 'appendAction',\n      appendInner: 'appendAction',\n      clear: 'clear',\n    }[name]\n    const listener = props[`onClick:${name}`] as EventProp | undefined\n\n    function onKeydown (e: KeyboardEvent) {\n      if (e.key !== 'Enter' && e.key !== ' ') return\n\n      e.preventDefault()\n      e.stopPropagation()\n      callEvent(listener, new PointerEvent('click', e))\n    }\n\n    const label = listener && localeKey\n      ? t(`$vuetify.input.${localeKey}`, props.label ?? '')\n      : undefined\n\n    return (\n      <VIcon\n        icon={ props[`${name}Icon`] }\n        aria-label={ label }\n        onClick={ listener }\n        onKeydown={ onKeydown }\n        color={ color }\n        { ...attrs }\n      />\n    )\n  }\n\n  return { InputIcon }\n}\n","// Styles\nimport './VMessages.sass'\n\n// Components\nimport { VSlideYTransition } from '@/components/transitions'\n\n// Composables\nimport { useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { Component, PropType } from 'vue'\n\nexport type VMessageSlot = {\n  message: string\n}\n\nexport type VMessagesSlots = {\n  message: VMessageSlot\n}\n\nexport const makeVMessagesProps = propsFactory({\n  active: Boolean,\n  color: String,\n  messages: {\n    type: [Array, String] as PropType<string | readonly string[]>,\n    default: () => ([]),\n  },\n\n  ...makeComponentProps(),\n  ...makeTransitionProps({\n    transition: {\n      component: VSlideYTransition as Component,\n      leaveAbsolute: true,\n      group: true,\n    },\n  }),\n}, 'VMessages')\n\nexport const VMessages = genericComponent<VMessagesSlots>()({\n  name: 'VMessages',\n\n  props: makeVMessagesProps(),\n\n  setup (props, { slots }) {\n    const messages = computed(() => wrapInArray(props.messages))\n    const { textColorClasses, textColorStyles } = useTextColor(() => props.color)\n\n    useRender(() => (\n      <MaybeTransition\n        transition={ props.transition }\n        tag=\"div\"\n        class={[\n          'v-messages',\n          textColorClasses.value,\n          props.class,\n        ]}\n        style={[\n          textColorStyles.value,\n          props.style,\n        ]}\n      >\n        { props.active && (\n          messages.value.map((message, i) => (\n            <div\n              class=\"v-messages__message\"\n              key={ `${i}-${messages.value}` }\n            >\n              { slots.message ? slots.message({ message }) : message }\n            </div>\n          ))\n        )}\n      </MaybeTransition>\n    ))\n\n    return {}\n  },\n})\n\nexport type VMessages = InstanceType<typeof VMessages>\n","// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { EventProp, getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nexport interface FocusProps {\n  focused: boolean\n  'onUpdate:focused': ((focused: boolean) => any) | undefined\n}\n\n// Composables\nexport const makeFocusProps = propsFactory({\n  focused: Boolean,\n  'onUpdate:focused': EventProp<[boolean]>(),\n}, 'focus')\n\nexport function useFocus (\n  props: FocusProps,\n  name = getCurrentInstanceName()\n) {\n  const isFocused = useProxiedModel(props, 'focused')\n  const focusClasses = toRef(() => {\n    return ({\n      [`${name}--focused`]: isFocused.value,\n    })\n  })\n\n  function focus () {\n    isFocused.value = true\n  }\n\n  function blur () {\n    isFocused.value = false\n  }\n\n  return { focusClasses, isFocused, focus, blur }\n}\n","// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, inject, markRaw, provide, ref, shallowRef, toRef, watch } from 'vue'\nimport { consoleWarn, propsFactory } from '@/util'\n\n// Types\nimport type { ComponentInternalInstance, InjectionKey, PropType, Raw, Ref } from 'vue'\nimport type { ValidationProps } from './validation'\nimport type { EventProp } from '@/util'\n\nexport interface FormProvide {\n  register: (item: {\n    id: number | string\n    vm: ComponentInternalInstance\n    validate: () => Promise<string[]>\n    reset: () => Promise<void>\n    resetValidation: () => Promise<void>\n  }) => void\n  unregister: (id: number | string) => void\n  update: (id: number | string, isValid: boolean | null, errorMessages: string[]) => void\n  items: Ref<FormField[]>\n  isDisabled: Readonly<Ref<boolean>>\n  isReadonly: Readonly<Ref<boolean>>\n  isValidating: Ref<boolean>\n  isValid: Ref<boolean | null>\n  validateOn: Ref<FormProps['validateOn']>\n}\n\nexport interface FormField {\n  id: number | string\n  validate: () => Promise<string[]>\n  reset: () => Promise<void>\n  resetValidation: () => Promise<void>\n  vm: Raw<ComponentInternalInstance>\n  isValid: boolean | null\n  errorMessages: string[]\n}\n\nexport interface FieldValidationResult {\n  id: number | string\n  errorMessages: string[]\n}\n\nexport interface FormValidationResult {\n  valid: boolean\n  errors: FieldValidationResult[]\n}\n\nexport interface SubmitEventPromise extends SubmitEvent, Promise<FormValidationResult> {}\n\nexport const FormKey: InjectionKey<FormProvide> = Symbol.for('vuetify:form')\n\nexport interface FormProps {\n  disabled: boolean\n  fastFail: boolean\n  readonly: boolean\n  modelValue: boolean | null\n  'onUpdate:modelValue': EventProp<[boolean | null]> | undefined\n  validateOn: ValidationProps['validateOn']\n}\n\nexport const makeFormProps = propsFactory({\n  disabled: Boolean,\n  fastFail: Boolean,\n  readonly: Boolean,\n  modelValue: {\n    type: Boolean as PropType<boolean | null>,\n    default: null,\n  },\n  validateOn: {\n    type: String as PropType<FormProps['validateOn']>,\n    default: 'input',\n  },\n}, 'form')\n\nexport function createForm (props: FormProps) {\n  const model = useProxiedModel(props, 'modelValue')\n\n  const isDisabled = toRef(() => props.disabled)\n  const isReadonly = toRef(() => props.readonly)\n  const isValidating = shallowRef(false)\n  const items = ref<FormField[]>([])\n  const errors = ref<FieldValidationResult[]>([])\n\n  async function validate () {\n    const results = []\n    let valid = true\n\n    errors.value = []\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    errors.value = results\n    isValidating.value = false\n\n    return { valid, errors: errors.value }\n  }\n\n  function reset () {\n    items.value.forEach(item => item.reset())\n  }\n\n  function resetValidation () {\n    items.value.forEach(item => item.resetValidation())\n  }\n\n  watch(items, () => {\n    let valid = 0\n    let invalid = 0\n    const results = []\n\n    for (const item of items.value) {\n      if (item.isValid === false) {\n        invalid++\n        results.push({\n          id: item.id,\n          errorMessages: item.errorMessages,\n        })\n      } else if (item.isValid === true) valid++\n    }\n\n    errors.value = results\n    model.value =\n      invalid > 0 ? false\n      : valid === items.value.length ? true\n      : null\n  }, { deep: true, flush: 'post' })\n\n  provide(FormKey, {\n    register: ({ id, vm, validate, reset, resetValidation }) => {\n      if (items.value.some(item => item.id === id)) {\n        consoleWarn(`Duplicate input name \"${id}\"`)\n      }\n\n      items.value.push({\n        id,\n        validate,\n        reset,\n        resetValidation,\n        vm: markRaw(vm),\n        isValid: null,\n        errorMessages: [],\n      })\n    },\n    unregister: id => {\n      items.value = items.value.filter(item => {\n        return item.id !== id\n      })\n    },\n    update: (id, isValid, errorMessages) => {\n      const found = items.value.find(item => item.id === id)\n\n      if (!found) return\n\n      found.isValid = isValid\n      found.errorMessages = errorMessages\n    },\n    isDisabled,\n    isReadonly,\n    isValidating,\n    isValid: model,\n    items,\n    validateOn: toRef(() => props.validateOn),\n  })\n\n  return {\n    errors,\n    isDisabled,\n    isReadonly,\n    isValidating,\n    isValid: model,\n    items,\n    validate,\n    reset,\n    resetValidation,\n  }\n}\n\nexport function useForm (props?: { readonly: boolean | null, disabled: boolean | null }) {\n  const form = inject(FormKey, null)\n  return {\n    ...form,\n    isReadonly: computed(() => !!(props?.readonly ?? form?.isReadonly.value)),\n    isDisabled: computed(() => !!(props?.disabled ?? form?.isDisabled.value)),\n  }\n}\n","// Utilities\nimport { computed, inject, toRef } from 'vue'\nimport { isString } from '@/util'\n\n// Types\nimport type { InjectionKey, Ref } from 'vue'\nimport type { LocaleInstance } from '@/composables/locale'\nimport type { ValidationProps, ValidationRule } from '@/composables/validation'\n\nexport type ValidationRuleBuilderWithoutOptions = (err?: string) => ValidationRule\nexport type ValidationRuleBuilderWithOptions<T> = (options: T, err?: string) => ValidationRule\nexport type CustomValidationRuleBuilder = (...args: any[]) => ValidationRule\n\nexport interface RuleAliases {\n  [name: string]: CustomValidationRuleBuilder\n  required: ValidationRuleBuilderWithoutOptions\n  email: ValidationRuleBuilderWithoutOptions\n  number: ValidationRuleBuilderWithoutOptions\n  integer: ValidationRuleBuilderWithoutOptions\n  capital: ValidationRuleBuilderWithoutOptions\n  maxLength: ValidationRuleBuilderWithOptions<number>\n  minLength: ValidationRuleBuilderWithOptions<number>\n  strictLength: ValidationRuleBuilderWithOptions<number>\n  exclude: ValidationRuleBuilderWithOptions<string[]>\n  notEmpty: ValidationRuleBuilderWithoutOptions\n  pattern: ValidationRuleBuilderWithOptions<RegExp>\n}\n\nexport type RulesOptions = {\n  aliases?: Partial<RuleAliases>\n}\n\ntype ValidationRuleParams = [any, string?]\nexport type ValidationAlias = string | [string, ...ValidationRuleParams]\n\nexport type RulesInstance = {\n  resolve: (fn: () => ValidationProps['rules']) => Readonly<Ref<any[]>>\n  aliases: RuleAliases\n}\n\nexport function createRules (options: RulesOptions | undefined, locale: LocaleInstance) {\n  const { t } = locale\n\n  const aliases: RuleAliases = {\n    required: (err?: string) => {\n      return (v: any) => {\n        // If the modifier .number is used, the 0 will be a number and it's a falsy value so we need to check for it\n        return v === 0 || !!v || t(err || '$vuetify.rules.required')\n      }\n    },\n    email: (err?: string) => {\n      return (v: any) => (!v || (isString(v) && /^.+@\\S+\\.\\S+$/.test(v))) || t(err || '$vuetify.rules.email')\n    },\n    number: (err?: string) => {\n      return (v: string) => !v || !isNaN(Number(v)) || t(err || '$vuetify.rules.number')\n    },\n    integer: (err?: string) => {\n      return (v: string) => (/^[\\d]*$/.test(v)) || t(err || '$vuetify.rules.integer')\n    },\n    capital: (err?: string) => {\n      return (v: string) => (/^[A-Z]*$/.test(v)) || t(err || '$vuetify.rules.capital')\n    },\n    maxLength: (len: number, err?: string) => {\n      return (v: any) => (!v || v.length <= len) || t(err || '$vuetify.rules.maxLength', len)\n    },\n    minLength: (len: number, err?: string) => {\n      return (v: any) => (!v || v.length >= len) || t(err || '$vuetify.rules.minLength', len)\n    },\n    strictLength: (len: number, err?: string) => {\n      return (v: any) => (!v || v.length === len) || t(err || '$vuetify.rules.strictLength', len)\n    },\n    exclude: (forbiddenCharacters: string[], err?: string) => {\n      return (v: string) => {\n        let error: string | true = true\n        for (const character of forbiddenCharacters) {\n          if (v.includes(character)) error = err || t('$vuetify.rules.exclude', character)\n        }\n        return error\n      }\n    },\n    notEmpty: (err?: string) => {\n      return (v: any) => (v && v.length > 0) || t(err || '$vuetify.rules.notEmpty')\n    },\n    pattern: (pattern: RegExp, err?: string) => {\n      return (v: any) => (!v || pattern.test(v) || t(err || '$vuetify.rules.pattern'))\n    },\n\n    ...options?.aliases,\n  }\n\n  function resolve (fn: () => ValidationProps['rules']) {\n    return computed(() => fn().map(rule => {\n      let ruleName: string | null = null\n      let ruleParams: ValidationRuleParams = [undefined]\n      if (Array.isArray(rule)) {\n        ruleName = rule[0]\n        ruleParams = rule.slice(1) as ValidationRuleParams\n      } else if (isString(rule)) {\n        ruleName = rule\n      }\n\n      if (ruleName) {\n        if (ruleName.startsWith('$')) {\n          ruleName = ruleName.slice(1)\n        }\n\n        return aliases[ruleName]?.(...ruleParams)\n      } else {\n        return rule\n      }\n    }))\n  }\n\n  return {\n    resolve,\n    aliases,\n  }\n}\n\nexport const RulesSymbol: InjectionKey<RulesInstance> = Symbol.for('vuetify:rules')\n\nexport function useRules (): RuleAliases\nexport function useRules (fn: () => ValidationProps['rules']): Readonly<Ref<ValidationProps['rules']>> | Readonly<Ref<ValidationRule[]>>\n\nexport function useRules (fn?: () => ValidationProps['rules']) {\n  const rules = inject(RulesSymbol, null)\n\n  if (!fn) {\n    if (!rules) {\n      throw new Error('Could not find Vuetify rules injection')\n    }\n    return rules.aliases\n  }\n\n  return rules?.resolve(fn) ?? toRef(fn)\n}\n","// Composables\nimport { makeFocusProps } from '@/composables/focus'\nimport { useForm } from '@/composables/form'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useRules } from '@/composables/rules'\nimport { useToggleScope } from '@/composables/toggleScope'\n\n// Utilities\nimport { computed, nextTick, onBeforeMount, onBeforeUnmount, onMounted, ref, shallowRef, unref, useId, watch } from 'vue'\nimport {\n  getCurrentInstance,\n  getCurrentInstanceName,\n  isFunction,\n  isString,\n  isUndefined,\n  propsFactory,\n  wrapInArray,\n} from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { ValidationAlias } from '@/composables/rules'\nimport type { EventProp, MaybeRef } from '@/util'\n\nexport type ValidationResult = string | boolean\nexport type ValidationRule =\n  | ValidationResult\n  | PromiseLike<ValidationResult>\n  | ((value: any) => ValidationResult)\n  | ((value: any) => PromiseLike<ValidationResult>)\n\ntype ValidateOnValue = 'blur' | 'input' | 'submit' | 'invalid-input'\ntype ValidateOn =\n  | ValidateOnValue\n  | `${ValidateOnValue} lazy`\n  | `${ValidateOnValue} eager`\n  | `lazy ${ValidateOnValue}`\n  | `eager ${ValidateOnValue}`\n  | 'lazy'\n  | 'eager'\n\nexport interface ValidationProps {\n  disabled: boolean | null\n  error: boolean\n  errorMessages: string | readonly string[] | null\n  focused: boolean\n  maxErrors: string | number\n  name: string | undefined\n  label: string | undefined\n  readonly: boolean | null\n  rules: readonly (ValidationRule | ValidationAlias)[]\n  modelValue: any\n  'onUpdate:modelValue': EventProp | undefined\n  validateOn?: ValidateOn\n  validationValue: any\n}\n\nexport const makeValidationProps = propsFactory({\n  disabled: {\n    type: Boolean as PropType<boolean | null>,\n    default: null,\n  },\n  error: Boolean,\n  errorMessages: {\n    type: [Array, String] as PropType<string | readonly string[] | null>,\n    default: () => ([]),\n  },\n  maxErrors: {\n    type: [Number, String],\n    default: 1,\n  },\n  name: String,\n  label: String,\n  readonly: {\n    type: Boolean as PropType<boolean | null>,\n    default: null,\n  },\n  rules: {\n    type: Array as PropType<readonly (ValidationRule | ValidationAlias)[]>,\n    default: () => ([]),\n  },\n  modelValue: null,\n  validateOn: String as PropType<ValidationProps['validateOn']>,\n  validationValue: null,\n\n  ...makeFocusProps(),\n}, 'validation')\n\nexport function useValidation (\n  props: ValidationProps,\n  name = getCurrentInstanceName(),\n  id: MaybeRef<string | number> = useId(),\n) {\n  const model = useProxiedModel(props, 'modelValue')\n  const validationModel = computed(() => isUndefined(props.validationValue) ? model.value : props.validationValue)\n  const form = useForm(props)\n  const rules = useRules(() => props.rules)\n  const internalErrorMessages = ref<string[]>([])\n  const isPristine = shallowRef(true)\n  const isDirty = computed(() => !!(\n    wrapInArray(model.value === '' ? null : model.value).length ||\n    wrapInArray(validationModel.value === '' ? null : validationModel.value).length\n  ))\n  const errorMessages = computed(() => {\n    return props.errorMessages?.length\n      ? wrapInArray(props.errorMessages).concat(internalErrorMessages.value).slice(0, Math.max(0, Number(props.maxErrors)))\n      : internalErrorMessages.value\n  })\n  const validateOn = computed(() => {\n    let value = (props.validateOn ?? form.validateOn?.value) || 'input'\n    if (value === 'lazy') value = 'input lazy'\n    if (value === 'eager') value = 'input eager'\n    const set = new Set(value?.split(' ') ?? [])\n\n    return {\n      input: set.has('input'),\n      blur: set.has('blur') || set.has('input') || set.has('invalid-input'),\n      invalidInput: set.has('invalid-input'),\n      lazy: set.has('lazy'),\n      eager: set.has('eager'),\n    }\n  })\n  const isValid = computed(() => {\n    if (props.error || props.errorMessages?.length) return false\n    if (!props.rules.length) return true\n    if (isPristine.value) {\n      return internalErrorMessages.value.length || validateOn.value.lazy ? null : true\n    } else {\n      return !internalErrorMessages.value.length\n    }\n  })\n  const isValidating = shallowRef(false)\n  let isResetting = false\n  const validationClasses = computed(() => {\n    return {\n      [`${name}--error`]: isValid.value === false,\n      [`${name}--dirty`]: isDirty.value,\n      [`${name}--disabled`]: form.isDisabled.value,\n      [`${name}--readonly`]: form.isReadonly.value,\n    }\n  })\n\n  const vm = getCurrentInstance('validation')\n  const uid = computed(() => props.name ?? unref(id))\n\n  onBeforeMount(() => {\n    form.register?.({\n      id: uid.value,\n      vm,\n      validate,\n      reset,\n      resetValidation,\n    })\n  })\n\n  onBeforeUnmount(() => {\n    form.unregister?.(uid.value)\n  })\n\n  onMounted(async () => {\n    if (!validateOn.value.lazy) {\n      await validate(!validateOn.value.eager)\n    }\n    form.update?.(uid.value, isValid.value, errorMessages.value)\n  })\n\n  useToggleScope(() => validateOn.value.input || (validateOn.value.invalidInput && isValid.value === false), () => {\n    watch(validationModel, () => {\n      if (!isResetting) validate()\n    })\n  })\n\n  useToggleScope(() => validateOn.value.blur, () => {\n    watch(() => props.focused, val => {\n      if (!val) validate()\n    })\n  })\n\n  watch([isValid, errorMessages], () => {\n    form.update?.(uid.value, isValid.value, errorMessages.value)\n  })\n\n  async function reset () {\n    isResetting = true\n    model.value = null\n    await nextTick()\n    isResetting = false\n    await resetValidation()\n  }\n\n  async function resetValidation () {\n    isPristine.value = true\n    if (!validateOn.value.lazy) {\n      await validate(!validateOn.value.eager)\n    } else {\n      internalErrorMessages.value = []\n    }\n  }\n\n  async function validate (silent = false) {\n    const results = []\n\n    isValidating.value = true\n\n    for (const rule of rules.value) {\n      if (results.length >= Number(props.maxErrors ?? 1)) {\n        break\n      }\n\n      const handler = isFunction(rule) ? rule : () => rule\n      const result = await handler(validationModel.value)\n\n      if (result === true) continue\n\n      if (result !== false && !isString(result)) {\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    internalErrorMessages.value = results\n    isValidating.value = false\n    isPristine.value = silent\n\n    return internalErrorMessages.value\n  }\n\n  return {\n    errorMessages,\n    isDirty,\n    isDisabled: form.isDisabled,\n    isReadonly: form.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 { useInputIcon } from '@/components/VInput/InputIcon'\nimport { VMessages } from '@/components/VMessages/VMessages'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { IconValue } from '@/composables/icons'\nimport { useRtl } from '@/composables/locale'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeValidationProps, useValidation } from '@/composables/validation'\n\n// Utilities\nimport { computed, toRef, useId } from 'vue'\nimport { EventProp, genericComponent, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { ComputedRef, PropType, Ref } from 'vue'\nimport type { VMessageSlot } from '@/components/VMessages/VMessages'\nimport type { GenericProps } from '@/util'\n\nexport interface VInputSlot {\n  id: ComputedRef<string>\n  messagesId: ComputedRef<string | undefined>\n  isDirty: ComputedRef<boolean>\n  isDisabled: ComputedRef<boolean>\n  isReadonly: ComputedRef<boolean>\n  isPristine: Ref<boolean>\n  isValid: ComputedRef<boolean | null>\n  isValidating: Ref<boolean>\n  hasDetails: Ref<boolean>\n  reset: () => void\n  resetValidation: () => void\n  validate: () => void\n}\n\nexport const makeVInputProps = propsFactory({\n  id: String,\n  appendIcon: IconValue,\n  baseColor: String,\n  centerAffix: {\n    type: Boolean,\n    default: true,\n  },\n  color: String,\n  glow: Boolean,\n  iconColor: [Boolean, String],\n  prependIcon: IconValue,\n  detailsActive: {\n    type: Boolean,\n    default: null,\n  },\n  hideDetails: [Boolean, String] as PropType<boolean | 'auto'>,\n  hideSpinButtons: Boolean,\n  hint: String,\n  indentDetails: {\n    type: Boolean,\n    default: null,\n  },\n  persistentHint: Boolean,\n  messages: {\n    type: [Array, String] as PropType<string | readonly string[]>,\n    default: () => ([]),\n  },\n  direction: {\n    type: String as PropType<'horizontal' | 'vertical'>,\n    default: 'horizontal',\n    validator: (v: any) => ['horizontal', 'vertical'].includes(v),\n  },\n\n  'onClick:prepend': EventProp<[MouseEvent]>(),\n  'onClick:append': EventProp<[MouseEvent]>(),\n\n  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...pick(makeDimensionProps(), [\n    'maxWidth',\n    'minWidth',\n    'width',\n  ]),\n  ...makeThemeProps(),\n  ...makeValidationProps(),\n}, 'VInput')\n\nexport type VInputSlots = {\n  default: VInputSlot\n  prepend: VInputSlot\n  append: VInputSlot\n  details: VInputSlot\n  message: VMessageSlot\n}\n\nexport const VInput = genericComponent<new <T>(\n  props: {\n    modelValue?: T | null\n    'onUpdate:modelValue'?: (value: T | null) => void\n  },\n  slots: VInputSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VInput',\n\n  props: {\n    ...makeVInputProps(),\n  },\n\n  emits: {\n    'update:modelValue': (value: any) => true,\n  },\n\n  setup (props, { attrs, slots, emit }) {\n    const { densityClasses } = useDensity(props)\n    const { dimensionStyles } = useDimension(props)\n    const { themeClasses } = provideTheme(props)\n    const { rtlClasses } = useRtl()\n    const { InputIcon } = useInputIcon(props)\n\n    const uid = useId()\n    const id = computed(() => props.id || `input-${uid}`)\n\n    const {\n      errorMessages,\n      isDirty,\n      isDisabled,\n      isReadonly,\n      isPristine,\n      isValid,\n      isValidating,\n      reset,\n      resetValidation,\n      validate,\n      validationClasses,\n    } = useValidation(props, 'v-input', id)\n\n    const messages = computed(() => {\n      if (props.errorMessages?.length || (!isPristine.value && errorMessages.value.length)) {\n        return errorMessages.value\n      } else if (props.hint && (props.persistentHint || props.focused)) {\n        return props.hint\n      } else {\n        return props.messages\n      }\n    })\n\n    const hasMessages = toRef(() => messages.value.length > 0)\n\n    const hasDetails = toRef(() => !props.hideDetails || (\n      props.hideDetails === 'auto' &&\n      (hasMessages.value || (props.detailsActive ?? !!slots.details))\n    ))\n\n    const messagesId = computed(() => hasDetails.value ? `${id.value}-messages` : undefined)\n\n    const slotProps = computed<VInputSlot>(() => ({\n      id,\n      messagesId,\n      isDirty,\n      isDisabled,\n      isReadonly,\n      isPristine,\n      isValid,\n      isValidating,\n      hasDetails,\n      reset,\n      resetValidation,\n      validate,\n    }))\n\n    const color = toRef(() => {\n      return props.error || props.disabled ? undefined\n        : props.focused ? props.color\n        : props.baseColor\n    })\n\n    const iconColor = toRef(() => {\n      if (!props.iconColor) return undefined\n\n      return props.iconColor === true ? color.value : props.iconColor\n    })\n\n    useRender(() => {\n      const hasPrepend = !!(slots.prepend || props.prependIcon)\n      const hasAppend = !!(slots.append || props.appendIcon)\n\n      return (\n        <div\n          class={[\n            'v-input',\n            `v-input--${props.direction}`,\n            {\n              'v-input--center-affix': props.centerAffix,\n              'v-input--focused': props.focused,\n              'v-input--glow': props.glow,\n              'v-input--hide-spin-buttons': props.hideSpinButtons,\n              'v-input--indent-details': props.indentDetails,\n            },\n            densityClasses.value,\n            themeClasses.value,\n            rtlClasses.value,\n            validationClasses.value,\n            props.class,\n          ]}\n          style={[\n            dimensionStyles.value,\n            props.style,\n          ]}\n        >\n          { hasPrepend && (\n            <div key=\"prepend\" class=\"v-input__prepend\">\n              { slots.prepend\n                ? slots.prepend(slotProps.value)\n                : (props.prependIcon && (\n                  <InputIcon\n                    key=\"prepend-icon\"\n                    name=\"prepend\"\n                    color={ iconColor.value }\n                  />\n                ))\n              }\n            </div>\n          )}\n\n          { slots.default && (\n            <div class=\"v-input__control\">\n              { slots.default?.(slotProps.value) }\n            </div>\n          )}\n\n          { hasAppend && (\n            <div key=\"append\" class=\"v-input__append\">\n              { slots.append\n                ? slots.append(slotProps.value)\n                : (props.appendIcon && (\n                  <InputIcon\n                    key=\"append-icon\"\n                    name=\"append\"\n                    color={ iconColor.value }\n                  />\n                ))\n              }\n            </div>\n          )}\n\n          { props.hideDetails !== true && (\n            <div\n              id={ messagesId.value }\n              class={[\n                'v-input__details',\n                { 'v-input__details--hidden': !hasDetails.value },\n              ]}\n              role=\"alert\"\n              aria-live=\"polite\"\n            >\n              <VMessages\n                active={ hasMessages.value }\n                messages={ messages.value }\n                v-slots={{ message: slots.message }}\n              />\n\n              { slots.details?.(slotProps.value) }\n            </div>\n          )}\n        </div>\n      )\n    })\n\n    return {\n      reset,\n      resetValidation,\n      validate,\n      isValid,\n      errorMessages,\n    }\n  },\n})\n\nexport type VInput = InstanceType<typeof VInput>\n","// Utilities\nimport { isFunction, isSymbol } from '@/util'\n\n// Types\nimport type { ComponentOptionsBase, ComponentPublicInstance, Ref, UnwrapRef } from 'vue'\nimport type { NonEmptyArray, UnionToIntersection } from '@/util'\n\nconst Refs = Symbol('Forwarded refs')\n\n/** Omit properties starting with P */\ntype OmitPrefix<\n  T,\n  P extends string,\n  E = Extract<keyof T, `${P}${any}`>,\n> = [E] extends [never] ? T : Omit<T, `${P}${any}`>\ntype OmitPrivate<T> = OmitPrefix<T, '$'>\n\n/** Omit keyof $props from T */\ntype OmitProps<T> = T extends { $props: any } ? Omit<T, keyof T['$props']> : T\n\nfunction getDescriptor (obj: any, key: PropertyKey) {\n  let currentObj = obj\n  while (currentObj) {\n    const descriptor = Reflect.getOwnPropertyDescriptor(currentObj, key)\n    if (descriptor) return descriptor\n    currentObj = Object.getPrototypeOf(currentObj)\n  }\n  return undefined\n}\n\nexport function forwardRefs<\n  T extends {},\n  U extends NonEmptyArray<Ref<HTMLElement | Omit<ComponentPublicInstance, '$emit' | '$slots'> | undefined>>,\n  UU = { [K in keyof U]: NonNullable<UnwrapRef<U[K]>> }[number],\n  UC = { [K in keyof U]: OmitPrivate<OmitProps<NonNullable<UnwrapRef<U[K]>>>> }[number],\n  R = T & UnionToIntersection<UC> & {\n    _allExposed: T | (\n      UU extends { $options: infer O }\n        ? O extends ComponentOptionsBase<any, infer E, any, any, any, any, any, any>\n          ? E\n          : never\n        : never\n    )\n  }\n> (target: T, ...refs: U): R {\n  (target as any)[Refs] = refs\n\n  return new Proxy(target, {\n    get (target, key) {\n      if (Reflect.has(target, key)) {\n        return Reflect.get(target, key)\n      }\n\n      // Skip internal properties\n      if (isSymbol(key) || key.startsWith('$') || key.startsWith('__')) return\n\n      for (const ref of refs) {\n        if (ref.value && Reflect.has(ref.value, key)) {\n          const val = Reflect.get(ref.value, key)\n          return isFunction(val)\n            ? val.bind(ref.value)\n            : val\n        }\n      }\n    },\n    has (target, key) {\n      if (Reflect.has(target, key)) {\n        return true\n      }\n\n      // Skip internal properties\n      if (isSymbol(key) || key.startsWith('$') || key.startsWith('__')) return false\n\n      for (const ref of refs) {\n        if (ref.value && Reflect.has(ref.value, key)) {\n          return true\n        }\n      }\n      return false\n    },\n    set (target, key, value) {\n      if (Reflect.has(target, key)) {\n        return Reflect.set(target, key, value)\n      }\n\n      // Skip internal properties\n      if (isSymbol(key) || key.startsWith('$') || key.startsWith('__')) return false\n\n      for (const ref of refs) {\n        if (ref.value && Reflect.has(ref.value, key)) {\n          return Reflect.set(ref.value, key, value)\n        }\n      }\n\n      return false\n    },\n    getOwnPropertyDescriptor (target, key) {\n      const descriptor = Reflect.getOwnPropertyDescriptor(target, key)\n      if (descriptor) return descriptor\n\n      // Skip internal properties\n      if (isSymbol(key) || key.startsWith('$') || key.startsWith('__')) return\n\n      // Check each ref's own properties\n      for (const ref of refs) {\n        if (!ref.value) continue\n        const descriptor = getDescriptor(ref.value, key) ?? ('_' in ref.value ? getDescriptor(ref.value._?.setupState, key) : undefined)\n        if (descriptor) return descriptor\n      }\n\n      // Recursive search up each ref's prototype\n      for (const ref of refs) {\n        const childRefs = ref.value && (ref.value as any)[Refs]\n        if (!childRefs) continue\n        const queue = childRefs.slice()\n        while (queue.length) {\n          const ref = queue.shift()\n          const descriptor = getDescriptor(ref.value, key)\n          if (descriptor) return descriptor\n          const childRefs = ref.value && (ref.value as any)[Refs]\n          if (childRefs) queue.push(...childRefs)\n        }\n      }\n\n      return undefined\n    },\n  }) as any\n}\n","// Styles\nimport './VCheckbox.sass'\n\n// Components\nimport { makeVCheckboxBtnProps, VCheckboxBtn } from './VCheckboxBtn'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\n\n// Composables\nimport { useFocus } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { ref, useId } from 'vue'\nimport { filterInputAttrs, genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { VSelectionControlSlots } from '../VSelectionControl/VSelectionControl'\nimport type { VInputSlots } from '@/components/VInput/VInput'\nimport type { GenericProps } from '@/util'\n\nexport type VCheckboxSlots = Omit<VInputSlots, 'default'> & VSelectionControlSlots\n\nexport const makeVCheckboxProps = propsFactory({\n  ...omit(makeVInputProps(), ['direction', 'glow']),\n  ...omit(makeVCheckboxBtnProps(), ['inline']),\n}, 'VCheckbox')\n\nexport const VCheckbox = genericComponent<new <T>(\n  props: {\n    modelValue?: T | null\n    'onUpdate:modelValue'?: (value: T | null) => void\n  },\n  slots: VCheckboxSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VCheckbox',\n\n  inheritAttrs: false,\n\n  props: makeVCheckboxProps(),\n\n  emits: {\n    'update:modelValue': (value: any) => true,\n    'update:focused': (focused: boolean) => true,\n  },\n\n  setup (props, { attrs, slots }) {\n    const model = useProxiedModel(props, 'modelValue')\n    const { isFocused, focus, blur } = useFocus(props)\n    const inputRef = ref<VInput>()\n\n    const uid = useId()\n\n    useRender(() => {\n      const [rootAttrs, controlAttrs] = filterInputAttrs(attrs)\n      const inputProps = VInput.filterProps(props)\n      const checkboxProps = VCheckboxBtn.filterProps(props)\n\n      return (\n        <VInput\n          ref={ inputRef }\n          class={[\n            'v-checkbox',\n            props.class,\n          ]}\n          { ...rootAttrs }\n          { ...inputProps }\n          v-model={ model.value }\n          id={ props.id || `checkbox-${uid}` }\n          focused={ isFocused.value }\n          style={ props.style }\n        >\n          {{\n            ...slots,\n            default: ({\n              id,\n              messagesId,\n              isDisabled,\n              isReadonly,\n              isValid,\n            }) => (\n              <VCheckboxBtn\n                { ...checkboxProps }\n                id={ id.value }\n                aria-describedby={ messagesId.value }\n                disabled={ isDisabled.value }\n                readonly={ isReadonly.value }\n                { ...controlAttrs }\n                error={ isValid.value === false }\n                v-model={ model.value }\n                onFocus={ focus }\n                onBlur={ blur }\n                v-slots={ slots }\n              />\n            ),\n          }}\n        </VInput>\n      )\n    })\n\n    return forwardRefs({}, inputRef)\n  },\n})\n\nexport type VCheckbox = InstanceType<typeof VCheckbox>\n","// Utilities\nimport { computed, inject, onScopeDispose, reactive, shallowRef, toRef, toRefs, watchEffect } from 'vue'\nimport { getCurrentInstanceName, isNull, isNumber, isObject, mergeDeep, propsFactory } from '@/util'\nimport { IN_BROWSER, SUPPORTS_TOUCH } from '@/util/globals'\n\n// Types\nimport type { InjectionKey, PropType, Ref } from 'vue'\n\nexport const breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl'] as const // no xs\n\nexport type Breakpoint = typeof breakpoints[number]\n\nexport type DisplayBreakpoint = 'xs' | Breakpoint\n\nexport type DisplayThresholds = {\n  [key in DisplayBreakpoint]: number\n}\n\nexport interface DisplayProps {\n  mobile?: boolean | null\n  mobileBreakpoint?: number | DisplayBreakpoint\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 type SSROptions = boolean | {\n  clientWidth: number\n  clientHeight?: number\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: Ref<boolean>\n  sm: Ref<boolean>\n  md: Ref<boolean>\n  lg: Ref<boolean>\n  xl: Ref<boolean>\n  xxl: Ref<boolean>\n  smAndUp: Ref<boolean>\n  mdAndUp: Ref<boolean>\n  lgAndUp: Ref<boolean>\n  xlAndUp: Ref<boolean>\n  smAndDown: Ref<boolean>\n  mdAndDown: Ref<boolean>\n  lgAndDown: Ref<boolean>\n  xlAndDown: Ref<boolean>\n  name: Ref<DisplayBreakpoint>\n  height: Ref<number>\n  width: Ref<number>\n  mobile: Ref<boolean>\n  mobileBreakpoint: Ref<number | DisplayBreakpoint>\n  platform: Ref<DisplayPlatform>\n  thresholds: Ref<DisplayThresholds>\n\n  /** @internal */\n  ssr: boolean\n\n  update (): void\n}\n\nexport const DisplaySymbol: InjectionKey<DisplayInstance> = Symbol.for('vuetify:display')\n\nconst defaultDisplayOptions: DisplayOptions = {\n  mobileBreakpoint: 'lg',\n  thresholds: {\n    xs: 0,\n    sm: 600,\n    md: 840,\n    lg: 1145,\n    xl: 1545,\n    xxl: 2138,\n  },\n}\n\nconst parseDisplayOptions = (options: DisplayOptions = defaultDisplayOptions) => {\n  return mergeDeep(defaultDisplayOptions, options) as InternalDisplayOptions\n}\n\nfunction getClientWidth (ssr?: SSROptions) {\n  return IN_BROWSER && !ssr\n    ? window.innerWidth\n    : (isObject(ssr) && ssr.clientWidth) || 0\n}\n\nfunction getClientHeight (ssr?: SSROptions) {\n  return IN_BROWSER && !ssr\n    ? window.innerHeight\n    : (isObject(ssr) && ssr.clientHeight) || 0\n}\n\nfunction getPlatform (ssr?: SSROptions): DisplayPlatform {\n  const userAgent = IN_BROWSER && !ssr\n    ? window.navigator.userAgent\n    : '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\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: userAgent === 'ssr',\n  }\n}\n\nexport function createDisplay (options?: DisplayOptions, ssr?: SSROptions): DisplayInstance {\n  const { thresholds, mobileBreakpoint } = parseDisplayOptions(options)\n\n  const height = shallowRef(getClientHeight(ssr))\n  const platform = shallowRef(getPlatform(ssr))\n  const state = reactive({} as DisplayInstance)\n  const width = shallowRef(getClientWidth(ssr))\n\n  function updateSize () {\n    height.value = getClientHeight()\n    width.value = getClientWidth()\n  }\n  function update () {\n    updateSize()\n    platform.value = getPlatform()\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 = isNumber(mobileBreakpoint) ? mobileBreakpoint : thresholds[mobileBreakpoint]\n    const mobile = width.value < breakpointValue\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.value\n    state.thresholds = thresholds\n  })\n\n  if (IN_BROWSER) {\n    window.addEventListener('resize', updateSize, { passive: true })\n\n    onScopeDispose(() => {\n      window.removeEventListener('resize', updateSize)\n    }, true)\n  }\n\n  return { ...toRefs(state), update, ssr: !!ssr }\n}\n\nexport const makeDisplayProps = propsFactory({\n  mobile: {\n    type: Boolean as PropType<boolean | null>,\n    default: false,\n  },\n  mobileBreakpoint: [Number, String] as PropType<number | DisplayBreakpoint>,\n}, 'display')\n\nexport function useDisplay (\n  props: DisplayProps = { mobile: null },\n  name = getCurrentInstanceName(),\n) {\n  const display = inject(DisplaySymbol)\n\n  if (!display) throw new Error('Could not find Vuetify display injection')\n\n  const mobile = computed(() => {\n    if (props.mobile) {\n      return true\n    } else if (isNumber(props.mobileBreakpoint)) {\n      return display.width.value < props.mobileBreakpoint\n    } else if (props.mobileBreakpoint) {\n      return display.width.value < display.thresholds.value[props.mobileBreakpoint]\n    } else if (isNull(props.mobile)) {\n      return display.mobile.value\n    } else {\n      return false\n    }\n  })\n\n  const displayClasses = toRef(() => {\n    if (!name) return {}\n\n    return { [`${name}--mobile`]: mobile.value }\n  })\n\n  return { ...display, displayClasses, mobile }\n}\n","// Utilities\nimport { inject, toRef } from 'vue'\nimport { useRtl } from './locale'\nimport { clamp, consoleWarn, easingPatterns, isFunction, isNumber, isString, mergeDeep, PREFERS_REDUCED_MOTION, refElement } from '@/util'\n\n// Types\nimport type { ComponentPublicInstance, InjectionKey, Ref } from 'vue'\nimport type { LocaleInstance, RtlInstance } from './locale'\nimport type { EasingFunction } from '@/util'\n\nexport interface GoToInstance {\n  rtl: Ref<boolean>\n  options: InternalGoToOptions\n}\n\nexport interface InternalGoToOptions {\n  container: ComponentPublicInstance | HTMLElement | string\n  duration: number\n  layout: boolean\n  offset: number\n  easing: string | EasingFunction\n  patterns: Record<string, EasingFunction>\n}\n\nexport type GoToOptions = Partial<InternalGoToOptions>\n\nexport const GoToSymbol: InjectionKey<GoToInstance> = Symbol.for('vuetify:goto')\n\nfunction genDefaults () {\n  return {\n    container: undefined,\n    duration: 300,\n    layout: false,\n    offset: 0,\n    easing: 'easeInOutCubic' satisfies keyof typeof easingPatterns,\n    patterns: easingPatterns,\n  }\n}\n\nfunction getContainer (el?: ComponentPublicInstance | HTMLElement | string) {\n  return getTarget(el) ?? (document.scrollingElement || document.body) as HTMLElement\n}\n\nfunction getTarget (el: ComponentPublicInstance | HTMLElement | string | undefined) {\n  return (isString(el)) ? document.querySelector<HTMLElement>(el) : refElement(el)\n}\n\nfunction getOffset (target: any, horizontal?: boolean, rtl?: boolean): number {\n  if (isNumber(target)) return horizontal && rtl ? -target : target\n\n  let el = getTarget(target)\n  let totalOffset = 0\n  while (el) {\n    totalOffset += horizontal ? el.offsetLeft : el.offsetTop\n    el = el.offsetParent as HTMLElement\n  }\n\n  return totalOffset\n}\n\nexport function createGoTo (\n  options: GoToOptions| undefined,\n  locale: LocaleInstance & RtlInstance\n): GoToInstance {\n  return {\n    rtl: locale.isRtl,\n    options: mergeDeep(genDefaults(), options) as InternalGoToOptions,\n  }\n}\n\nexport async function scrollTo (\n  _target: ComponentPublicInstance | HTMLElement | number | string,\n  _options: GoToOptions,\n  horizontal?: boolean,\n  goTo?: GoToInstance,\n) {\n  const property = horizontal ? 'scrollLeft' : 'scrollTop'\n  const options = mergeDeep(goTo?.options ?? genDefaults(), _options)\n  const rtl = goTo?.rtl.value\n  const target = (isNumber(_target) ? _target : getTarget(_target)) ?? 0\n  const container = options.container === 'parent' && target instanceof HTMLElement\n    ? target.parentElement!\n    : getContainer(options.container)\n  const ease = PREFERS_REDUCED_MOTION() ? options.patterns.instant\n    : isFunction(options.easing) ? options.easing\n    : options.patterns[options.easing]\n\n  if (!ease) throw new TypeError(`Easing function \"${options.easing}\" not found.`)\n\n  let targetLocation: number\n  if (isNumber(target)) {\n    targetLocation = getOffset(target, horizontal, rtl)\n  } else {\n    targetLocation = getOffset(target, horizontal, rtl) - getOffset(container, horizontal, rtl)\n\n    if (options.layout) {\n      const styles = window.getComputedStyle(target)\n      const layoutOffset = styles.getPropertyValue('--v-layout-top')\n\n      if (layoutOffset) targetLocation -= parseInt(layoutOffset, 10)\n    }\n  }\n\n  targetLocation += options.offset\n  targetLocation = clampTarget(container, targetLocation, !!rtl, !!horizontal)\n\n  const startLocation = container[property] ?? 0\n\n  if (targetLocation === startLocation) return Promise.resolve(targetLocation)\n\n  const startTime = performance.now()\n\n  return new Promise(resolve => requestAnimationFrame(function step (currentTime: number) {\n    const timeElapsed = currentTime - startTime\n    const progress = timeElapsed / options.duration\n    const location = Math.floor(\n      startLocation +\n      (targetLocation - startLocation) *\n      ease(clamp(progress, 0, 1))\n    )\n\n    container[property] = location\n\n    // Allow for some jitter if target time has elapsed\n    if (progress >= 1 && Math.abs(location - container[property]) < 10) {\n      return resolve(targetLocation)\n    } else if (progress > 2) {\n      // The target might not be reachable\n      consoleWarn('Scroll target is not reachable')\n      return resolve(container[property])\n    }\n\n    requestAnimationFrame(step)\n  }))\n}\n\nexport function useGoTo (_options: GoToOptions = {}) {\n  const goToInstance = inject(GoToSymbol)\n  const { isRtl } = useRtl()\n\n  if (!goToInstance) throw new Error('[Vuetify] Could not find injected goto instance')\n\n  const goTo = {\n    ...goToInstance,\n    // can be set via VLocaleProvider\n    rtl: toRef(() => goToInstance.rtl.value || isRtl.value),\n  }\n\n  async function go (\n    target: ComponentPublicInstance | HTMLElement | string | number,\n    options?: Partial<GoToOptions>,\n  ) {\n    return scrollTo(target, mergeDeep(_options, options), false, goTo)\n  }\n\n  go.horizontal = async (\n    target: ComponentPublicInstance | HTMLElement | string | number,\n    options?: Partial<GoToOptions>,\n  ) => {\n    return scrollTo(target, mergeDeep(_options, options), true, goTo)\n  }\n\n  return go\n}\n\n/**\n * Clamp target value to achieve a smooth scroll animation\n * when the value goes outside the scroll container size\n */\nfunction clampTarget (\n  container: HTMLElement,\n  value: number,\n  rtl: boolean,\n  horizontal: boolean,\n) {\n  const { scrollWidth, scrollHeight } = container\n  const [containerWidth, containerHeight] = container === document.scrollingElement\n    ? [window.innerWidth, window.innerHeight]\n    : [container.offsetWidth, container.offsetHeight]\n\n  let min: number\n  let max: number\n\n  if (horizontal) {\n    if (rtl) {\n      min = -(scrollWidth - containerWidth)\n      max = 0\n    } else {\n      min = 0\n      max = scrollWidth - containerWidth\n    }\n  } else {\n    min = 0\n    max = scrollHeight + -containerHeight\n  }\n\n  return clamp(value, min, max)\n}\n","// Utilities\nimport { isString } from '@/util'\n\nexport function calculateUpdatedTarget ({\n  selectedElement,\n  containerElement,\n  isRtl,\n  isHorizontal,\n}: {\n  selectedElement: HTMLElement\n  containerElement: HTMLElement\n  isRtl: boolean\n  isHorizontal: boolean\n}): number {\n  const containerSize = getOffsetSize(isHorizontal, containerElement)\n  const scrollPosition = getScrollPosition(isHorizontal, isRtl, containerElement)\n\n  const childrenSize = getOffsetSize(isHorizontal, selectedElement)\n  const childrenStartPosition = getOffsetPosition(isHorizontal, selectedElement)\n\n  const additionalOffset = childrenSize * 0.4\n\n  if (scrollPosition > childrenStartPosition) {\n    return childrenStartPosition - additionalOffset\n  } else if (scrollPosition + containerSize < childrenStartPosition + childrenSize) {\n    return childrenStartPosition - containerSize + childrenSize + additionalOffset\n  }\n\n  return scrollPosition\n}\n\nexport function calculateCenteredTarget ({\n  selectedElement,\n  containerElement,\n  isHorizontal,\n}: {\n  selectedElement: HTMLElement\n  containerElement: HTMLElement\n  isHorizontal: boolean\n}): number {\n  const containerOffsetSize = getOffsetSize(isHorizontal, containerElement)\n  const childrenOffsetPosition = getOffsetPosition(isHorizontal, selectedElement)\n  const childrenOffsetSize = getOffsetSize(isHorizontal, selectedElement)\n\n  return childrenOffsetPosition - (containerOffsetSize / 2) + (childrenOffsetSize / 2)\n}\n\nexport function getScrollSize (isHorizontal: boolean, element?: HTMLElement) {\n  const key = isHorizontal ? 'scrollWidth' : 'scrollHeight'\n  return element?.[key] || 0\n}\n\nexport function getScrollPosition (isHorizontal: boolean, rtl: boolean, element?: HTMLElement) {\n  if (!element) {\n    return 0\n  }\n\n  const {\n    scrollLeft,\n    offsetWidth,\n    scrollWidth,\n  } = element\n\n  if (isHorizontal) {\n    return rtl\n      ? scrollWidth - offsetWidth + scrollLeft\n      : scrollLeft\n  }\n\n  return element.scrollTop\n}\n\nexport function getOffsetSize (isHorizontal: boolean, element?: HTMLElement) {\n  const key = isHorizontal ? 'offsetWidth' : 'offsetHeight'\n  return element?.[key] || 0\n}\n\nexport function getOffsetPosition (isHorizontal: boolean, element?: HTMLElement) {\n  const key = isHorizontal ? 'offsetLeft' : 'offsetTop'\n  return element?.[key] || 0\n}\n\nexport function getScrollDistance (containerSize: number, distance: string | number) {\n  if (isString(distance) && distance.endsWith('%')) {\n    return containerSize * parseFloat(distance) / 100\n  }\n\n  return parseFloat(String(distance)) || containerSize\n}\n","// Styles\nimport './VSlideGroup.sass'\n\n// Components\nimport { VFadeTransition } from '@/components/transitions'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDisplayProps, useDisplay } from '@/composables/display'\nimport { useGoTo } from '@/composables/goto'\nimport { makeGroupProps, useGroup } from '@/composables/group'\nimport { IconValue } from '@/composables/icons'\nimport { useRtl } from '@/composables/locale'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed, shallowRef, watch } from 'vue'\nimport {\n  calculateCenteredTarget,\n  calculateUpdatedTarget,\n  getOffsetPosition,\n  getOffsetSize,\n  getScrollDistance,\n  getScrollPosition,\n  getScrollSize,\n} from './helpers'\nimport {\n  clamp,\n  focusableChildren,\n  genericComponent,\n  IN_BROWSER,\n  isBoolean,\n  isObject,\n  isString,\n  matchesSelector,\n  propsFactory,\n  useRender,\n} from '@/util'\n\n// Types\nimport type { InjectionKey, PropType } from 'vue'\nimport type { GoToOptions } from '@/composables/goto'\nimport type { GroupProvide } from '@/composables/group'\nimport type { GenericProps } from '@/util'\n\nexport const VSlideGroupSymbol: InjectionKey<GroupProvide> = Symbol.for('vuetify:v-slide-group')\n\ninterface SlideGroupSlot {\n  next: GroupProvide['next']\n  prev: GroupProvide['prev']\n  select: GroupProvide['select']\n  isSelected: GroupProvide['isSelected']\n}\n\nexport type VSlideGroupEdge = 'start' | 'end'\n\nexport type VSlideGroupTarget = 'prev' | 'next'\n  | { by: string | number }\n  | { index: number }\n\nexport type VSlideGroupSlots = {\n  default: SlideGroupSlot\n  prev: SlideGroupSlot\n  next: SlideGroupSlot\n}\n\nexport const makeVSlideGroupProps = propsFactory({\n  centerActive: Boolean,\n  scrollDistance: {\n    type: [String, Number],\n    default: '100%',\n    validator: (v: any) => /^-?\\d*\\.?\\d+(px|%)?$/.test(String(v).trim()),\n  },\n  scrollSnap: {\n    type: String as PropType<'start' | 'center' | 'end'>,\n    validator: (v: any) => ['start', 'center', 'end'].includes(v),\n  },\n  scrollToActive: {\n    type: Boolean,\n    default: true,\n  },\n  contentClass: null,\n  direction: {\n    type: String as PropType<'horizontal' | 'vertical'>,\n    default: 'horizontal',\n  },\n  symbol: {\n    type: null,\n    default: VSlideGroupSymbol,\n  },\n  nextIcon: {\n    type: IconValue,\n    default: '$next',\n  },\n  prevIcon: {\n    type: IconValue,\n    default: '$prev',\n  },\n  showArrows: {\n    type: [Boolean, String],\n    validator: (v: any) => (\n      isBoolean(v) || [\n        'always',\n        'desktop',\n        'mobile',\n        'never',\n      ].includes(v)\n    ),\n  },\n\n  ...makeComponentProps(),\n  ...makeDisplayProps({ mobile: null }),\n  ...makeTagProps(),\n  ...makeGroupProps({\n    selectedClass: 'v-slide-group-item--active',\n  }),\n}, 'VSlideGroup')\n\nexport const VSlideGroup = genericComponent<new <T>(\n  props: {\n    modelValue?: T\n    'onUpdate:modelValue'?: (value: T) => void\n  },\n  slots: VSlideGroupSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VSlideGroup',\n\n  props: makeVSlideGroupProps(),\n\n  emits: {\n    'update:modelValue': (value: any) => true,\n    edge: (side: VSlideGroupEdge) => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const { isRtl } = useRtl()\n    const { displayClasses, mobile } = useDisplay(props)\n    const group = useGroup(props, props.symbol)\n    const isOverflowing = shallowRef(false)\n    const scrollOffset = shallowRef(0)\n    const containerSize = shallowRef(0)\n    const contentSize = shallowRef(0)\n    const isHorizontal = computed(() => props.direction === 'horizontal')\n\n    const { resizeRef: containerRef, contentRect: containerRect } = useResizeObserver()\n    const { resizeRef: contentRef, contentRect } = useResizeObserver()\n\n    const goTo = useGoTo()\n    const goToOptions = computed<Partial<GoToOptions>>(() => {\n      return {\n        container: containerRef.el,\n        duration: 200,\n        easing: 'easeOutQuart',\n      }\n    })\n\n    const firstSelectedIndex = computed(() => {\n      if (!group.selected.value.length) return -1\n\n      return group.items.value.findIndex(item => item.id === group.selected.value[0])\n    })\n\n    const lastSelectedIndex = computed(() => {\n      if (!group.selected.value.length) return -1\n\n      return group.items.value.findIndex(item => item.id === group.selected.value[group.selected.value.length - 1])\n    })\n\n    if (IN_BROWSER) {\n      let frame = -1\n      watch(() => [group.selected.value, containerRect.value, contentRect.value, isHorizontal.value], () => {\n        cancelAnimationFrame(frame)\n        frame = requestAnimationFrame(() => {\n          if (containerRect.value && contentRect.value) {\n            const sizeProperty = isHorizontal.value ? 'width' : 'height'\n\n            containerSize.value = containerRect.value[sizeProperty]\n            contentSize.value = contentRect.value[sizeProperty]\n\n            isOverflowing.value = containerSize.value + 1 < contentSize.value\n          }\n\n          if (props.scrollToActive && firstSelectedIndex.value >= 0 && contentRef.el) {\n            // TODO: Is this too naive? Should we store element references in group composable?\n            const selectedElement = contentRef.el.children[lastSelectedIndex.value] as HTMLElement\n\n            scrollToChildren(selectedElement, props.centerActive)\n          }\n        })\n      })\n    }\n\n    const isFocused = shallowRef(false)\n\n    function scrollToChildren (children: HTMLElement, center?: boolean) {\n      if (props.scrollSnap) {\n        return scrollToPosition(snapToElement(children, center))\n      }\n\n      let target = 0\n\n      if (center) {\n        target = calculateCenteredTarget({\n          containerElement: containerRef.el!,\n          isHorizontal: isHorizontal.value,\n          selectedElement: children,\n        })\n      } else {\n        target = calculateUpdatedTarget({\n          containerElement: containerRef.el!,\n          isHorizontal: isHorizontal.value,\n          isRtl: isRtl.value,\n          selectedElement: children,\n        })\n      }\n\n      scrollToPosition(mirrorInRtl(target))\n    }\n\n    let activeAnimations = 0\n    function scrollToPosition (newPosition: number) {\n      if (!IN_BROWSER || !containerRef.el) return\n\n      const offsetSize = getOffsetSize(isHorizontal.value, containerRef.el)\n      const scrollSize = getScrollSize(isHorizontal.value, containerRef.el)\n\n      if (scrollSize <= offsetSize) return\n\n      newPosition = clamp(newPosition, 0, scrollSize - offsetSize)\n      if (Math.abs(newPosition - getPosition()) <= 1) return\n\n      const scrolling = isHorizontal.value\n        ? goTo.horizontal(newPosition, goToOptions.value)\n        : goTo(newPosition, goToOptions.value)\n\n      // Suppress re-snapping every frame we write\n      if (props.scrollSnap) {\n        const el = containerRef.el\n        el.style.scrollSnapType = 'none'\n        activeAnimations++\n        scrolling.finally(() => --activeAnimations || (el.style.scrollSnapType = ''))\n      }\n    }\n\n    function onFocusin (e: FocusEvent) {\n      isFocused.value = true\n\n      if (!isOverflowing.value || !contentRef.el) return\n\n      // Pointer focus must not scroll: mousedown focuses first and would slide the\n      // target out from under the cursor before click. Keyboard keeps :focus-visible.\n      if (matchesSelector(e.target as HTMLElement, ':focus-visible') === false) return\n\n      // Focused element is likely to be the root of an item, so a\n      // breadth-first search will probably find it in the first iteration\n      for (const el of e.composedPath()) {\n        for (const item of contentRef.el.children) {\n          if (item === el) {\n            scrollToChildren(item as HTMLElement)\n            return\n          }\n        }\n      }\n    }\n\n    function onFocusout (e: FocusEvent) {\n      isFocused.value = false\n    }\n\n    // Affix clicks produce onFocus that we have to ignore to avoid extra scrollToChildren\n    let ignoreFocusEvent = false\n    function onFocus (e: FocusEvent) {\n      if (\n        !ignoreFocusEvent &&\n        !isFocused.value &&\n        !(e.relatedTarget && contentRef.el?.contains(e.relatedTarget as Node))\n      ) focus()\n\n      ignoreFocusEvent = false\n    }\n\n    function onFocusAffixes () {\n      ignoreFocusEvent = true\n    }\n\n    function onKeydown (e: KeyboardEvent) {\n      if (!contentRef.el) return\n\n      function toFocus (location: Parameters<typeof focus>[0]) {\n        e.preventDefault()\n        focus(location)\n      }\n\n      if (isHorizontal.value) {\n        if (e.key === 'ArrowRight') {\n          toFocus(isRtl.value ? 'prev' : 'next')\n        } else if (e.key === 'ArrowLeft') {\n          toFocus(isRtl.value ? 'next' : 'prev')\n        }\n      } else {\n        if (e.key === 'ArrowDown') {\n          toFocus('next')\n        } else if (e.key === 'ArrowUp') {\n          toFocus('prev')\n        }\n      }\n\n      if (e.key === 'Home') {\n        toFocus('first')\n      } else if (e.key === 'End') {\n        toFocus('last')\n      }\n    }\n\n    function getSiblingElement (el: HTMLElement | null, location: 'next' | 'prev') {\n      if (!el) return undefined\n      let sibling: HTMLElement | null = el\n      do {\n        sibling = sibling?.[location === 'next' ? 'nextElementSibling' : 'previousElementSibling'] as HTMLElement | null\n      } while (sibling?.hasAttribute('disabled'))\n      return sibling\n    }\n\n    function focus (location?: 'next' | 'prev' | 'first' | 'last') {\n      if (!contentRef.el) return\n\n      let el: HTMLElement | null | undefined\n\n      if (!location) {\n        const focusable = focusableChildren(contentRef.el)\n        el = focusable[0]\n      } else if (location === 'next') {\n        el = getSiblingElement(contentRef.el.querySelector(':focus'), location)\n\n        if (!el) return focus('first')\n      } else if (location === 'prev') {\n        el = getSiblingElement(contentRef.el.querySelector(':focus'), location)\n\n        if (!el) return focus('last')\n      } else if (location === 'first') {\n        el = (contentRef.el.firstElementChild as HTMLElement)\n\n        if (el?.hasAttribute('disabled')) el = getSiblingElement(el, 'next')\n      } else if (location === 'last') {\n        el = (contentRef.el.lastElementChild as HTMLElement)\n\n        if (el?.hasAttribute('disabled')) el = getSiblingElement(el, 'prev')\n      }\n\n      if (el) {\n        el.focus({ preventScroll: true })\n      }\n    }\n\n    function mirrorInRtl (position: number) {\n      return isHorizontal.value && isRtl.value\n        ? getScrollSize(true, containerRef.el) - getOffsetSize(true, containerRef.el) - position\n        : position\n    }\n\n    function getPosition () {\n      return mirrorInRtl(getScrollPosition(isHorizontal.value, isRtl.value, containerRef.el))\n    }\n\n    function getBounds (child: HTMLElement) {\n      const size = getOffsetSize(isHorizontal.value, child)\n      const start = isHorizontal.value && isRtl.value\n        ? getScrollSize(true, containerRef.el) - child.offsetLeft - size\n        : getOffsetPosition(isHorizontal.value, child)\n\n      return { start, end: start + size }\n    }\n\n    type Bounds = ReturnType<typeof getBounds>\n\n    function getItemBounds () {\n      return contentRef.el\n        ? Array.from(contentRef.el.children as HTMLCollectionOf<HTMLElement>, getBounds)\n        : []\n    }\n\n    function getSnapPosition (item: Bounds) {\n      if (props.scrollSnap === 'end') return item.end - containerSize.value\n      if (props.scrollSnap === 'center') return (item.start + item.end - containerSize.value) / 2\n\n      return item.start\n    }\n\n    function getSnapPositions () {\n      return getItemBounds().map(getSnapPosition)\n    }\n\n    function getItemClippedAt (edge: number) {\n      return getItemBounds().find(item => item.start < edge - 1 && item.end > edge + 1)\n    }\n\n    function reveals (item: Bounds | undefined) {\n      return (position: number) => !item ||\n        (position <= item.start + 1 && position + containerSize.value >= item.end - 1)\n    }\n\n    function nearestTo (ideal: number) {\n      return (best: number, position: number) =>\n        Math.abs(position - ideal) < Math.abs(best - ideal) ? position : best\n    }\n\n    function snapToElement (child: HTMLElement, center?: boolean) {\n      const item = getBounds(child)\n      const ideal = center ? (item.start + item.end - containerSize.value) / 2 : getPosition()\n\n      return getSnapPositions().filter(reveals(item)).reduce(nearestTo(ideal), getSnapPosition(item))\n    }\n\n    function snapToItem (from: number, step: number) {\n      const forward = step > 0\n      const target = from + step\n      const candidates = getSnapPositions().filter(p => forward ? p > from + 1 : p < from - 1)\n      const revealing = candidates.filter(reveals(getItemClippedAt(forward ? target : from)))\n      const options = revealing.length ? revealing : candidates\n\n      return (forward\n        ? options.findLast(p => p <= target) ?? options[0]\n        : options.find(p => p >= target) ?? options.at(-1)\n      ) ?? target\n    }\n\n    function slide (target: VSlideGroupTarget) {\n      if (!containerRef.el || !containerSize.value) return\n\n      if (isObject(target) && 'index' in target) {\n        const item = contentRef.el?.children[target.index]\n        if (item) {\n          scrollToChildren(item as HTMLElement, props.centerActive)\n        }\n        return\n      }\n\n      const from = getPosition()\n      const distance = isString(target) ? props.scrollDistance : target.by\n      const scrollDistance = getScrollDistance(containerSize.value, distance) * (target === 'prev' ? -1 : 1)\n      const nextPosition = props.scrollSnap ? snapToItem(from, scrollDistance) : from + scrollDistance\n      scrollToPosition(nextPosition)\n    }\n\n    const slotProps = computed(() => ({\n      next: group.next,\n      prev: group.prev,\n      select: group.select,\n      isSelected: group.isSelected,\n    }))\n\n    const hasOverflowOrScroll = computed(() => isOverflowing.value || Math.abs(scrollOffset.value) > 0)\n\n    const hasAffixes = computed(() => {\n      switch (props.showArrows) {\n        case 'never': return false\n\n        // Always show arrows on desktop & mobile\n        case 'always': return true\n\n        // Always show arrows on desktop\n        case 'desktop': return !mobile.value\n\n        // Show arrows on mobile when overflowing.\n        // This matches the default 2.2 behavior\n        case true: return hasOverflowOrScroll.value\n\n        // Always show on mobile\n        case 'mobile': return (\n          mobile.value ||\n          hasOverflowOrScroll.value\n        )\n\n        // https://material.io/components/tabs#scrollable-tabs\n        // Always show arrows when\n        // overflowed on desktop\n        default: return (\n          !mobile.value &&\n          hasOverflowOrScroll.value\n        )\n      }\n    })\n\n    const hasPrev = computed(() => {\n      // 1 pixel in reserve, may be lost after rounding\n      return Math.abs(scrollOffset.value) > 1\n    })\n\n    const hasNext = computed(() => {\n      if (!hasOverflowOrScroll.value) return false\n\n      const scrollSizeMax = contentSize.value - containerSize.value\n\n      // 1 pixel in reserve, may be lost after rounding\n      return scrollSizeMax - Math.abs(scrollOffset.value) > 1\n    })\n\n    // Watching hasPrev/hasNext instead would report edges that a resize or an appearing\n    // affix produced, without the position ever moving.\n    function onScroll () {\n      const hadPrev = hasPrev.value\n      const hadNext = hasNext.value\n\n      scrollOffset.value = getPosition()\n\n      if (hadPrev && !hasPrev.value) emit('edge', 'start')\n      if (hadNext && !hasNext.value) emit('edge', 'end')\n    }\n\n    useRender(() => (\n      <props.tag\n        class={[\n          'v-slide-group',\n          {\n            'v-slide-group--vertical': !isHorizontal.value,\n            'v-slide-group--has-affixes': hasAffixes.value,\n            'v-slide-group--is-overflowing': isOverflowing.value,\n            'v-slide-group--snap': !!props.scrollSnap,\n          },\n          displayClasses.value,\n          props.class,\n        ]}\n        style={ props.style }\n        tabindex={ (isFocused.value || group.selected.value.length) ? -1 : 0 }\n        onFocus={ onFocus }\n      >\n        { hasAffixes.value && (\n          <div\n            key=\"prev\"\n            class={[\n              'v-slide-group__prev',\n              { 'v-slide-group__prev--disabled': !hasPrev.value },\n            ]}\n            onMousedown={ onFocusAffixes }\n            onClick={ () => hasPrev.value && slide('prev') }\n          >\n            { slots.prev?.(slotProps.value) ?? (\n              <VFadeTransition>\n                <VIcon icon={ isRtl.value ? props.nextIcon : props.prevIcon }></VIcon>\n              </VFadeTransition>\n            )}\n          </div>\n        )}\n\n        <div\n          key=\"container\"\n          ref={ containerRef }\n          class={[\n            'v-slide-group__container',\n            props.contentClass,\n          ]}\n          style={{ '--v-slide-group-snap-align': props.scrollSnap }}\n          onScroll={ onScroll }\n        >\n          <div\n            ref={ contentRef }\n            class=\"v-slide-group__content\"\n            onFocusin={ onFocusin }\n            onFocusout={ onFocusout }\n            onKeydown={ onKeydown }\n          >\n            { slots.default?.(slotProps.value) }\n          </div>\n        </div>\n\n        { hasAffixes.value && (\n          <div\n            key=\"next\"\n            class={[\n              'v-slide-group__next',\n              { 'v-slide-group__next--disabled': !hasNext.value },\n            ]}\n            onMousedown={ onFocusAffixes }\n            onClick={ () => hasNext.value && slide('next') }\n          >\n            { slots.next?.(slotProps.value) ?? (\n              <VFadeTransition>\n                <VIcon icon={ isRtl.value ? props.prevIcon : props.nextIcon }></VIcon>\n              </VFadeTransition>\n            )}\n          </div>\n        )}\n      </props.tag>\n    ))\n\n    return {\n      selected: group.selected,\n      slide,\n      scrollOffset,\n      focus,\n      hasPrev,\n      hasNext,\n      hasOverflow: isOverflowing,\n    }\n  },\n})\n\nexport type VSlideGroup = InstanceType<typeof VSlideGroup>\n","// Styles\nimport './VChipGroup.sass'\n\n// Components\nimport { makeVSlideGroupProps, VSlideGroup } from '@/components/VSlideGroup/VSlideGroup'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeGroupProps, useGroup } from '@/composables/group'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeVariantProps } from '@/composables/variant'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { deepEqual, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { GenericProps, ValueComparator } from '@/util'\n\nexport const VChipGroupSymbol = Symbol.for('vuetify:v-chip-group')\n\nexport const makeVChipGroupProps = propsFactory({\n  baseColor: String,\n  column: Boolean,\n  filter: Boolean,\n  valueComparator: {\n    type: Function as PropType<ValueComparator>,\n    default: deepEqual,\n  },\n\n  ...makeVSlideGroupProps({ scrollToActive: false }),\n  ...makeComponentProps(),\n  ...makeGroupProps({ selectedClass: 'v-chip--selected' }),\n  ...makeTagProps(),\n  ...makeThemeProps(),\n  ...makeVariantProps({ variant: 'tonal' } as const),\n}, 'VChipGroup')\n\ntype VChipGroupSlots = {\n  default: {\n    isSelected: (id: string) => boolean\n    select: (id: string, value: boolean) => void\n    next: () => void\n    prev: () => void\n    selected: readonly string[]\n  }\n}\n\nexport const VChipGroup = genericComponent<new <T>(\n  props: {\n    modelValue?: T\n    'onUpdate:modelValue'?: (value: T) => void\n  },\n  slots: VChipGroupSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VChipGroup',\n\n  props: makeVChipGroupProps(),\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, VChipGroupSymbol)\n\n    provideDefaults({\n      VChip: {\n        baseColor: toRef(() => props.baseColor),\n        color: toRef(() => props.color),\n        disabled: toRef(() => props.disabled),\n        filter: toRef(() => props.filter),\n        variant: toRef(() => props.variant),\n      },\n    })\n\n    useRender(() => {\n      const slideGroupProps = VSlideGroup.filterProps(props)\n\n      return (\n        <VSlideGroup\n          { ...slideGroupProps }\n          class={[\n            'v-chip-group',\n            {\n              'v-chip-group--column': props.column,\n            },\n            themeClasses.value,\n            props.class,\n          ]}\n          style={ props.style }\n        >\n          { slots.default?.({\n            isSelected,\n            select,\n            next,\n            prev,\n            selected: selected.value,\n          })}\n        </VSlideGroup>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VChipGroup = InstanceType<typeof VChipGroup>\n","/* eslint-disable complexity */\n// Styles\nimport './VChip.sass'\n\n// Components\nimport { VExpandXTransition } from '@/components/transitions'\nimport { VAvatar } from '@/components/VAvatar'\nimport { VChipGroupSymbol } from '@/components/VChipGroup/VChipGroup'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\nimport { VSlideGroupSymbol } from '@/components/VSlideGroup/VSlideGroup'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeGroupItemProps, useGroupItem } from '@/composables/group'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\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 vRipple from '@/directives/ripple'\n\n// Utilities\nimport { computed, toDisplayString, toRef, watch } from 'vue'\nimport { EventProp, genericComponent, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { RippleDirectiveBinding } from '@/directives/ripple'\n\nexport type VChipSlots = {\n  default: {\n    isSelected: boolean | undefined\n    selectedClass: boolean | (string | undefined)[] | undefined\n    select: ((value: boolean) => void) | undefined\n    toggle: (() => void) | undefined\n    value: unknown\n    disabled: boolean\n  }\n  label: never\n  prepend: never\n  append: never\n  close: never\n  filter: never\n}\n\nexport const makeVChipProps = propsFactory({\n  activeClass: String,\n  appendAvatar: String,\n  appendIcon: IconValue,\n  baseColor: String,\n  closable: Boolean,\n  closeIcon: {\n    type: IconValue,\n    default: '$delete',\n  },\n  closeLabel: {\n    type: String,\n    default: '$vuetify.close',\n  },\n  draggable: Boolean,\n  filter: Boolean,\n  filterIcon: {\n    type: IconValue,\n    default: '$complete',\n  },\n  label: Boolean,\n  link: {\n    type: Boolean,\n    default: undefined,\n  },\n  pill: Boolean,\n  prependAvatar: String,\n  prependIcon: IconValue,\n  ripple: {\n    type: [Boolean, Object] as PropType<RippleDirectiveBinding['value']>,\n    default: true,\n  },\n  text: {\n    type: [String, Number, Boolean],\n    default: undefined,\n  },\n  modelValue: {\n    type: Boolean,\n    default: true,\n  },\n\n  onClick: EventProp<[MouseEvent]>(),\n  onClickOnce: EventProp<[MouseEvent]>(),\n\n  ...makeBorderProps(),\n  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...makeElevationProps(),\n  ...makeGroupItemProps(),\n  ...makeRoundedProps(),\n  ...makeRouterProps(),\n  ...makeSizeProps(),\n  ...makeTagProps({ tag: 'span' }),\n  ...makeThemeProps(),\n  ...makeVariantProps({ variant: 'tonal' } as const),\n}, 'VChip')\n\nexport const VChip = genericComponent<VChipSlots>()({\n  name: 'VChip',\n\n  directives: { vRipple },\n\n  props: makeVChipProps(),\n\n  emits: {\n    'click:close': (e: MouseEvent) => true,\n    'update:modelValue': (value: boolean) => true,\n    'group:selected': (val: { value: boolean }) => true,\n    click: (e: MouseEvent | KeyboardEvent) => true,\n  },\n\n  setup (props, { attrs, emit, slots }) {\n    const { t } = useLocale()\n    const { borderClasses } = useBorder(props)\n    const { densityClasses } = useDensity(props)\n    const { elevationClasses } = useElevation(props)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n    const { sizeClasses } = useSize(props)\n    const { themeClasses } = provideTheme(props)\n\n    const isActive = useProxiedModel(props, 'modelValue')\n\n    const group = useGroupItem(props, VChipGroupSymbol, false)\n    const slideGroup = useGroupItem(props, VSlideGroupSymbol, false)\n\n    const link = useLink(props, attrs)\n    const isLink = toRef(() => props.link !== false && link.isLink.value)\n    const isClickable = computed(() =>\n      !props.disabled &&\n      props.link !== false &&\n      (!!group || props.link || link.isClickable.value)\n    )\n    const closeProps = toRef(() => ({\n      'aria-label': t(props.closeLabel),\n      disabled: props.disabled,\n      onClick (e: MouseEvent) {\n        e.preventDefault()\n        e.stopPropagation()\n\n        isActive.value = false\n\n        emit('click:close', e)\n      },\n    }))\n\n    watch(isActive, val => {\n      if (val) {\n        group?.register()\n        slideGroup?.register()\n      } else {\n        group?.unregister()\n        slideGroup?.unregister()\n      }\n    })\n\n    const { colorClasses, colorStyles, variantClasses } = useVariant(() => {\n      const showColor = !group || group.isSelected.value\n      return ({\n        color: showColor ? props.color ?? props.baseColor : props.baseColor,\n        variant: props.variant,\n      })\n    })\n\n    function onClick (e: MouseEvent) {\n      emit('click', e)\n\n      if (!isClickable.value) return\n\n      link.navigate.value?.(e)\n      group?.toggle()\n    }\n\n    function onKeyDown (e: KeyboardEvent) {\n      if (e.key === 'Enter' || e.key === ' ') {\n        e.preventDefault()\n        onClick(e as any as MouseEvent)\n      }\n    }\n\n    return () => {\n      const Tag = (link.isLink.value) ? 'a' : props.tag\n      const hasAppendMedia = !!(props.appendIcon || props.appendAvatar)\n      const hasAppend = !!(hasAppendMedia || slots.append)\n      const hasClose = !!(slots.close || props.closable)\n      const hasFilter = !!(slots.filter || props.filter) && group\n      const hasPrependMedia = !!(props.prependIcon || props.prependAvatar)\n      const hasPrepend = !!(hasPrependMedia || slots.prepend)\n\n      return isActive.value && (\n        <Tag\n          { ...link.linkProps }\n          class={[\n            'v-chip',\n            {\n              'v-chip--disabled': props.disabled,\n              'v-chip--label': props.label,\n              'v-chip--link': isClickable.value,\n              'v-chip--filter': hasFilter,\n              'v-chip--pill': props.pill,\n              [`${props.activeClass}`]: props.activeClass && link.isActive?.value,\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            group?.selectedClass.value,\n            props.class,\n          ]}\n          style={[\n            colorStyles.value,\n            roundedStyles.value,\n            props.style,\n          ]}\n          disabled={ props.disabled || undefined }\n          draggable={ props.draggable }\n          tabindex={ isClickable.value ? 0 : undefined }\n          onClick={ (isClickable.value || props.onClick || props.onClickOnce) && onClick }\n          onKeydown={ isClickable.value && !isLink.value && onKeyDown }\n          v-ripple={[isClickable.value && props.ripple, null]}\n        >\n          { genOverlays(isClickable.value, 'v-chip') }\n\n          { hasFilter && (\n            <VExpandXTransition key=\"filter\">\n              <div\n                class=\"v-chip__filter\"\n                v-show={ group.isSelected.value }\n              >\n                { !slots.filter ? (\n                  <VIcon\n                    key=\"filter-icon\"\n                    icon={ props.filterIcon }\n                  />\n                ) : (\n                  <VDefaultsProvider\n                    key=\"filter-defaults\"\n                    disabled={ !props.filterIcon }\n                    defaults={{\n                      VIcon: { icon: props.filterIcon },\n                    }}\n                    v-slots:default={ slots.filter }\n                  />\n                )}\n              </div>\n            </VExpandXTransition>\n          )}\n\n          { hasPrepend && (\n            <div key=\"prepend\" class=\"v-chip__prepend\">\n              { !slots.prepend ? (\n                <>\n                  { props.prependIcon && (\n                    <VIcon\n                      key=\"prepend-icon\"\n                      icon={ props.prependIcon }\n                      start\n                    />\n                  )}\n\n                  { props.prependAvatar && (\n                    <VAvatar\n                      key=\"prepend-avatar\"\n                      image={ props.prependAvatar }\n                      start\n                    />\n                  )}\n                </>\n              ) : (\n                <VDefaultsProvider\n                  key=\"prepend-defaults\"\n                  disabled={ !hasPrependMedia }\n                  defaults={{\n                    VAvatar: {\n                      image: props.prependAvatar,\n                      start: true,\n                    },\n                    VIcon: {\n                      icon: props.prependIcon,\n                      start: true,\n                    },\n                  }}\n                  v-slots:default={ slots.prepend }\n                />\n              )}\n            </div>\n          )}\n\n          <div class=\"v-chip__content\" data-no-activator=\"\">\n            { slots.default?.({\n              isSelected: group?.isSelected.value,\n              selectedClass: group?.selectedClass.value,\n              select: group?.select,\n              toggle: group?.toggle,\n              value: group?.value.value,\n              disabled: props.disabled,\n            }) ?? toDisplayString(props.text)}\n          </div>\n\n          { hasAppend && (\n            <div key=\"append\" class=\"v-chip__append\">\n              { !slots.append ? (\n                <>\n                  { props.appendIcon && (\n                    <VIcon\n                      key=\"append-icon\"\n                      end\n                      icon={ props.appendIcon }\n                    />\n                  )}\n\n                  { props.appendAvatar && (\n                    <VAvatar\n                      key=\"append-avatar\"\n                      end\n                      image={ props.appendAvatar }\n                    />\n                  )}\n                </>\n              ) : (\n                <VDefaultsProvider\n                  key=\"append-defaults\"\n                  disabled={ !hasAppendMedia }\n                  defaults={{\n                    VAvatar: {\n                      end: true,\n                      image: props.appendAvatar,\n                    },\n                    VIcon: {\n                      end: true,\n                      icon: props.appendIcon,\n                    },\n                  }}\n                  v-slots:default={ slots.append }\n                />\n              )}\n            </div>\n          )}\n\n          { hasClose && (\n            <button\n              key=\"close\"\n              class=\"v-chip__close\"\n              type=\"button\"\n              data-testid=\"close-chip\"\n              { ...closeProps.value }\n            >\n              { !slots.close ? (\n                <VIcon\n                  key=\"close-icon\"\n                  icon={ props.closeIcon }\n                  size=\"x-small\"\n                />\n              ) : (\n                <VDefaultsProvider\n                  key=\"close-defaults\"\n                  defaults={{\n                    VIcon: {\n                      icon: props.closeIcon,\n                      size: 'x-small',\n                    },\n                  }}\n                  v-slots:default={ slots.close }\n                />\n              )}\n            </button>\n          )}\n        </Tag>\n      )\n    }\n  },\n})\n\nexport type VChip = InstanceType<typeof VChip>\n","// Styles\nimport './VDivider.sass'\n\n// Composables\nimport { useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { convertToUnit, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\ntype DividerKey = 'borderRightWidth' | 'borderTopWidth' | 'height' | 'width'\ntype DividerStyles = Partial<Record<DividerKey, string>>\n\nconst allowedVariants = ['dotted', 'dashed', 'solid', 'double'] as const\ntype Variant = typeof allowedVariants[number]\n\nexport const makeVDividerProps = propsFactory({\n  color: String,\n  contentOffset: [Number, String, Array] as PropType<number | string | (string | number)[]>,\n  gradient: Boolean,\n  inset: Boolean,\n  length: [Number, String],\n  opacity: [Number, String],\n  thickness: [Number, String],\n  vertical: Boolean,\n  variant: {\n    type: String as PropType<Variant>,\n    default: 'solid',\n    validator: (v: any) => allowedVariants.includes(v),\n  },\n\n  ...makeComponentProps(),\n  ...makeThemeProps(),\n}, 'VDivider')\n\nexport const VDivider = genericComponent()({\n  name: 'VDivider',\n\n  props: makeVDividerProps(),\n\n  setup (props, { attrs, slots }) {\n    const { themeClasses } = provideTheme(props)\n    const { textColorClasses, textColorStyles } = useTextColor(() => props.color)\n    const dividerStyles = computed(() => {\n      const styles: DividerStyles = {}\n\n      if (props.length) {\n        styles[props.vertical ? 'height' : 'width'] = 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    const contentStyles = toRef(() => {\n      const margin = Array.isArray(props.contentOffset) ? props.contentOffset[0] : props.contentOffset\n      const shift = Array.isArray(props.contentOffset) ? props.contentOffset[1] : 0\n\n      return {\n        marginBlock: props.vertical && margin ? convertToUnit(margin) : undefined,\n        marginInline: !props.vertical && margin ? convertToUnit(margin) : undefined,\n        transform: shift\n          ? `translate${props.vertical ? 'X' : 'Y'}(${convertToUnit(shift)})`\n          : undefined,\n      }\n    })\n\n    useRender(() => {\n      const role = attrs.role as string | undefined\n      const hasSlot = !!slots.default\n\n      const divider = (\n        <hr\n          class={[\n            {\n              'v-divider': true,\n              'v-divider--gradient': props.gradient && !slots.default,\n              'v-divider--inset': props.inset,\n              'v-divider--vertical': props.vertical,\n            },\n            themeClasses.value,\n            textColorClasses.value,\n            props.class,\n          ]}\n          style={[\n            dividerStyles.value,\n            textColorStyles.value,\n            { '--v-border-opacity': props.opacity },\n            { 'border-style': props.variant },\n            props.style,\n          ]}\n          aria-orientation={\n            !hasSlot && !role\n              ? props.vertical ? 'vertical' : 'horizontal'\n              : undefined\n          }\n          role={ !hasSlot ? role : undefined }\n        />\n      )\n\n      if (!hasSlot) return divider\n\n      return (\n        <div\n          class={[\n            'v-divider__wrapper',\n            {\n              'v-divider__wrapper--gradient': props.gradient,\n              'v-divider__wrapper--inset': props.inset,\n              'v-divider__wrapper--vertical': props.vertical,\n            },\n          ]}\n        >\n          { divider }\n\n          <div\n            class=\"v-divider__content\"\n            style={ contentStyles.value }\n          >\n            { slots.default() }\n          </div>\n\n          { divider }\n        </div>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VDivider = InstanceType<typeof VDivider>\n","// Utilities\nimport { computed, inject, provide, shallowRef, useId } from 'vue'\n\n// Types\nimport type { InjectionKey, MaybeRefOrGetter, Ref } from 'vue'\n\n// Depth\nexport const DepthKey: InjectionKey<Ref<number>> = Symbol.for('vuetify:depth')\n\nexport function useDepth (hasPrepend?: Ref<boolean>) {\n  const parent = inject(DepthKey, shallowRef(-1))\n\n  const depth = computed(() => parent.value + 1 + (hasPrepend?.value ? 1 : 0))\n\n  provide(DepthKey, depth)\n\n  return depth\n}\n\n// List\nexport const ListKey: InjectionKey<{\n  filterable: MaybeRefOrGetter<boolean>\n  hasPrepend: Ref<boolean>\n  updateHasPrepend: (value: boolean) => void\n  trackingIndex: Ref<number>\n  navigationStrategy: Ref<'focus' | 'track'>\n  uid: string\n}> = Symbol.for('vuetify:list')\n\ntype InjectedListOptions = {\n  filterable: MaybeRefOrGetter<boolean>\n  trackingIndex?: Ref<number>\n  navigationStrategy?: Ref<'focus' | 'track'>\n  uid?: string\n}\n\nexport function createList (options: InjectedListOptions = { filterable: false }) {\n  const parent = inject(ListKey, {\n    filterable: false,\n    hasPrepend: shallowRef(false),\n    updateHasPrepend: () => null,\n    trackingIndex: shallowRef(-1),\n    navigationStrategy: shallowRef('focus' as 'focus' | 'track'),\n    uid: '',\n  })\n\n  const {\n    filterable,\n    trackingIndex = parent.trackingIndex,\n    navigationStrategy = parent.navigationStrategy,\n    uid = parent.uid || useId(),\n  } = options\n\n  const data = {\n    filterable: parent.filterable || filterable,\n    hasPrepend: shallowRef(false),\n    updateHasPrepend: (value: boolean) => {\n      if (value) data.hasPrepend.value = value\n    },\n    trackingIndex,\n    navigationStrategy,\n    uid,\n  }\n\n  provide(ListKey, data)\n\n  return parent\n}\n\nexport function useList () {\n  return inject(ListKey, null)\n}\n","/* eslint-disable sonarjs/no-identical-functions */\n// Utilities\nimport { toRaw } from 'vue'\nimport { isNullOrUndefined, wrapInArray } from '@/util'\n\ntype ActiveStrategyFunction = (data: {\n  id: unknown\n  value: boolean\n  activated: Set<unknown>\n  children: Map<unknown, unknown[]>\n  parents: Map<unknown, unknown>\n  event?: Event\n}) => Set<unknown>\n\ntype ActiveStrategyTransformInFunction = (\n  v: unknown | undefined,\n  children: Map<unknown, unknown[]>,\n  parents: Map<unknown, unknown>,\n) => Set<unknown>\n\ntype ActiveStrategyTransformOutFunction = (\n  v: Set<unknown>,\n  children: Map<unknown, unknown[]>,\n  parents: Map<unknown, unknown>,\n) => unknown\n\nexport type ActiveStrategy = {\n  activate: ActiveStrategyFunction\n  in: ActiveStrategyTransformInFunction\n  out: ActiveStrategyTransformOutFunction\n}\n\nexport const independentActiveStrategy = (mandatory?: boolean): ActiveStrategy => {\n  const strategy: ActiveStrategy = {\n    activate: ({ id, value, activated }) => {\n      id = toRaw(id)\n\n      // When mandatory and we're trying to deselect when id\n      // is the only currently selected item then do nothing\n      if (mandatory && !value && activated.size === 1 && activated.has(id)) return activated\n\n      if (value) {\n        activated.add(id)\n      } else {\n        activated.delete(id)\n      }\n\n      return activated\n    },\n    in: (v, children, parents) => {\n      let set = new Set()\n\n      if (!isNullOrUndefined(v)) {\n        for (const id of wrapInArray(v)) {\n          set = strategy.activate({\n            id,\n            value: true,\n            activated: new Set(set),\n            children,\n            parents,\n          })\n        }\n      }\n\n      return set\n    },\n    out: v => {\n      return Array.from(v)\n    },\n  }\n\n  return strategy\n}\n\nexport const independentSingleActiveStrategy = (mandatory?: boolean): ActiveStrategy => {\n  const parentStrategy = independentActiveStrategy(mandatory)\n\n  const strategy: ActiveStrategy = {\n    activate: ({ activated, id, ...rest }) => {\n      id = toRaw(id)\n      const singleSelected = activated.has(id) ? new Set([id]) : new Set()\n      return parentStrategy.activate({ ...rest, id, activated: singleSelected })\n    },\n    in: (v, children, parents) => {\n      let set = new Set()\n\n      if (!isNullOrUndefined(v)) {\n        const arr = wrapInArray(v)\n        if (arr.length) {\n          set = parentStrategy.in(arr.slice(0, 1), children, parents)\n        }\n      }\n\n      return set\n    },\n    out: (v, children, parents) => {\n      return parentStrategy.out(v, children, parents)\n    },\n  }\n\n  return strategy\n}\n\nexport const leafActiveStrategy = (mandatory?: boolean): ActiveStrategy => {\n  const parentStrategy = independentActiveStrategy(mandatory)\n\n  const strategy: ActiveStrategy = {\n    activate: ({ id, activated, children, ...rest }) => {\n      id = toRaw(id)\n      if (children.has(id)) return activated\n\n      return parentStrategy.activate({ id, activated, children, ...rest })\n    },\n    in: parentStrategy.in,\n    out: parentStrategy.out,\n  }\n\n  return strategy\n}\n\nexport const leafSingleActiveStrategy = (mandatory?: boolean): ActiveStrategy => {\n  const parentStrategy = independentSingleActiveStrategy(mandatory)\n\n  const strategy: ActiveStrategy = {\n    activate: ({ id, activated, children, ...rest }) => {\n      id = toRaw(id)\n      if (children.has(id)) return activated\n\n      return parentStrategy.activate({ id, activated, children, ...rest })\n    },\n    in: parentStrategy.in,\n    out: parentStrategy.out,\n  }\n\n  return strategy\n}\n","// Utilities\nimport { isNullOrUndefined } from '@/util'\n\ntype OpenStrategyFunction = (data: {\n  id: unknown\n  value: boolean\n  opened: Set<unknown>\n  children: Map<unknown, unknown[]>\n  parents: Map<unknown, unknown>\n  event?: Event\n}) => Set<unknown>\n\ntype OpenSelectStrategyFunction = (data: {\n  id: unknown\n  value: boolean\n  opened: Set<unknown>\n  selected: Map<unknown, 'on' | 'off' | 'indeterminate'>\n  children: Map<unknown, unknown[]>\n  parents: Map<unknown, unknown>\n  event?: Event\n}) => Set<unknown> | null\n\nexport type OpenStrategy = {\n  open: OpenStrategyFunction\n  select: OpenSelectStrategyFunction\n}\n\nexport const singleOpenStrategy: OpenStrategy = {\n  open: ({ id, value, opened, parents }) => {\n    if (value) {\n      const newOpened = new Set<unknown>()\n      newOpened.add(id)\n\n      let parent = parents.get(id)\n\n      while (!isNullOrUndefined(parent)) {\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  select: () => null,\n}\n\nexport const multipleOpenStrategy: OpenStrategy = {\n  open: ({ id, value, opened, parents }) => {\n    if (value) {\n      let parent = parents.get(id)\n      opened.add(id)\n\n      while (!isNullOrUndefined(parent) && parent !== id) {\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  select: () => null,\n}\n\nexport const listOpenStrategy: OpenStrategy = {\n  open: multipleOpenStrategy.open,\n  select: ({ id, value, opened, parents }) => {\n    if (!value) return opened\n\n    const path: unknown[] = []\n\n    let parent = parents.get(id)\n\n    while (!isNullOrUndefined(parent)) {\n      path.push(parent)\n      parent = parents.get(parent)\n    }\n\n    return new Set(path)\n  },\n}\n","/* eslint-disable sonarjs/no-identical-functions */\n// Utilities\nimport { toRaw } from 'vue'\n\ntype SelectStrategyFunction = (data: {\n  id: unknown\n  value: boolean\n  selected: Map<unknown, 'on' | 'off' | 'indeterminate'>\n  children: Map<unknown, unknown[]>\n  parents: Map<unknown, unknown>\n  disabled: Set<unknown>\n  event?: Event\n}) => Map<unknown, 'on' | 'off' | 'indeterminate'>\n\ntype SelectStrategyTransformInFunction = (\n  v: readonly unknown[] | undefined,\n  children: Map<unknown, unknown[]>,\n  parents: Map<unknown, unknown>,\n  disabled: Set<unknown>,\n) => Map<unknown, 'on' | 'off' | 'indeterminate'>\n\ntype SelectStrategyTransformOutFunction = (\n  v: Map<unknown, 'on' | 'off' | 'indeterminate'>,\n  children: Map<unknown, unknown[]>,\n  parents: Map<unknown, unknown>,\n) => unknown[]\n\nexport type SelectStrategy = {\n  select: SelectStrategyFunction\n  in: SelectStrategyTransformInFunction\n  out: SelectStrategyTransformOutFunction\n}\n\nexport const independentSelectStrategy = (mandatory?: boolean): SelectStrategy => {\n  const strategy: SelectStrategy = {\n    select: ({ id, value, selected }) => {\n      id = toRaw(id)\n\n      // When mandatory and we're trying to deselect when id\n      // is the only currently selected item then do nothing\n      if (mandatory && !value) {\n        const on = Array.from(selected.entries())\n          .reduce((arr, [key, value]) => {\n            if (value === 'on') arr.push(key)\n            return arr\n          }, [] as unknown[])\n        if (on.length === 1 && on[0] === id) return selected\n      }\n\n      selected.set(id, value ? 'on' : 'off')\n\n      return selected\n    },\n    in: (v, children, parents, disabled) => {\n      const map = new Map()\n\n      for (const id of (v || [])) {\n        strategy.select({\n          id,\n          value: true,\n          selected: map,\n          children,\n          parents,\n          disabled,\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\n  return strategy\n}\n\nexport const independentSingleSelectStrategy = (mandatory?: boolean): SelectStrategy => {\n  const parentStrategy = independentSelectStrategy(mandatory)\n\n  const strategy: SelectStrategy = {\n    select: ({ selected, id, ...rest }) => {\n      id = toRaw(id)\n      const singleSelected = selected.has(id) ? new Map([[id, selected.get(id)!]]) : new Map()\n      return parentStrategy.select({ ...rest, id, selected: singleSelected })\n    },\n    in: (v, children, parents, disabled) => {\n      if (v?.length) {\n        return parentStrategy.in(v.slice(0, 1), children, parents, disabled)\n      }\n\n      return new Map()\n    },\n    out: (v, children, parents) => {\n      return parentStrategy.out(v, children, parents)\n    },\n  }\n\n  return strategy\n}\n\nexport const leafSelectStrategy = (mandatory?: boolean): SelectStrategy => {\n  const parentStrategy = independentSelectStrategy(mandatory)\n\n  const strategy: SelectStrategy = {\n    select: ({ id, selected, children, ...rest }) => {\n      id = toRaw(id)\n      if (children.has(id)) return selected\n\n      return parentStrategy.select({ id, selected, children, ...rest })\n    },\n    in: parentStrategy.in,\n    out: parentStrategy.out,\n  }\n\n  return strategy\n}\n\nexport const leafSingleSelectStrategy = (mandatory?: boolean): SelectStrategy => {\n  const parentStrategy = independentSingleSelectStrategy(mandatory)\n\n  const strategy: SelectStrategy = {\n    select: ({ id, selected, children, ...rest }) => {\n      id = toRaw(id)\n      if (children.has(id)) return selected\n\n      return parentStrategy.select({ id, selected, children, ...rest })\n    },\n    in: parentStrategy.in,\n    out: parentStrategy.out,\n  }\n\n  return strategy\n}\n\nexport const classicSelectStrategy = (mandatory?: boolean): SelectStrategy => {\n  const strategy: SelectStrategy = {\n    select: ({ id, value, selected, children, parents, disabled }) => {\n      id = toRaw(id)\n      const original = new Map(selected)\n\n      const items = [id]\n\n      while (items.length) {\n        const item = items.shift()!\n\n        if (!disabled.has(item)) {\n          selected.set(toRaw(item), value ? 'on' : 'off')\n        }\n\n        if (children.has(item)) {\n          items.push(...children.get(item)!)\n        }\n      }\n\n      let parent = toRaw(parents.get(id))\n\n      while (parent) {\n        let everySelected = true\n        let noneSelected = true\n\n        for (const child of children.get(parent)!) {\n          const cid = toRaw(child)\n\n          if (disabled.has(cid)) continue\n          if (selected.get(cid) !== 'on') everySelected = false\n          if (selected.has(cid) && selected.get(cid) !== 'off') noneSelected = false\n          if (!everySelected && !noneSelected) break\n        }\n\n        selected.set(parent, everySelected ? 'on' : noneSelected ? 'off' : 'indeterminate')\n\n        parent = toRaw(parents.get(parent))\n      }\n\n      // If mandatory and planned deselect results in no selected\n      // items then we can't do it, so return original state\n      if (mandatory && !value) {\n        const on = Array.from(selected.entries())\n          .reduce((arr, [key, value]) => {\n            if (value === 'on') arr.push(key)\n            return arr\n          }, [] as unknown[])\n        if (on.length === 0) return original\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 = strategy.select({\n          id,\n          value: true,\n          selected: map,\n          children,\n          parents,\n          disabled: new Set<unknown>(),\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\n  return strategy\n}\n\nexport const trunkSelectStrategy = (mandatory?: boolean): SelectStrategy => {\n  const parentStrategy = classicSelectStrategy(mandatory)\n\n  const strategy: SelectStrategy = {\n    select: parentStrategy.select,\n    in: parentStrategy.in,\n    out: (v, children, parents) => {\n      const arr = []\n\n      for (const [key, value] of v.entries()) {\n        if (value === 'on') {\n          if (parents.has(key)) {\n            const parent = parents.get(key)\n            if (v.get(parent) === 'on') continue\n          }\n          arr.push(key)\n        }\n      }\n\n      return arr\n    },\n  }\n\n  return strategy\n}\n\nexport const branchSelectStrategy = (mandatory?: boolean): SelectStrategy => {\n  const parentStrategy = classicSelectStrategy(mandatory)\n\n  const strategy: SelectStrategy = {\n    select: parentStrategy.select,\n    in: (v, children, parents, disabled) => {\n      let map = new Map()\n\n      for (const id of (v || [])) {\n        if (children.has(id)) continue\n        map = strategy.select({\n          id,\n          value: true,\n          selected: map,\n          children,\n          parents,\n          disabled,\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' || value === 'indeterminate') {\n          arr.push(key)\n        }\n      }\n\n      return arr\n    },\n  }\n\n  return strategy\n}\n","// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport {\n  computed,\n  inject,\n  nextTick,\n  onBeforeMount,\n  onBeforeUnmount,\n  provide,\n  ref,\n  shallowRef,\n  toRaw,\n  toRef,\n  toValue,\n  watch,\n} from 'vue'\nimport {\n  independentActiveStrategy,\n  independentSingleActiveStrategy,\n  leafActiveStrategy,\n  leafSingleActiveStrategy,\n} from './activeStrategies'\nimport { listOpenStrategy, multipleOpenStrategy, singleOpenStrategy } from './openStrategies'\nimport {\n  branchSelectStrategy,\n  classicSelectStrategy,\n  independentSelectStrategy,\n  independentSingleSelectStrategy,\n  leafSelectStrategy,\n  leafSingleSelectStrategy,\n  trunkSelectStrategy,\n} from './selectStrategies'\nimport { consoleError, getCurrentInstance, isFunction, isNullOrUndefined, isObject, isUndefined, propsFactory, throttle } from '@/util'\n\n// Types\nimport type { InjectionKey, MaybeRefOrGetter, PropType, Ref } from 'vue'\nimport type { ActiveStrategy } from './activeStrategies'\nimport type { OpenStrategy } from './openStrategies'\nimport type { SelectStrategy } from './selectStrategies'\nimport type { ListItem } from '@/composables/list-items'\nimport type { EventProp, ValueComparator } from '@/util'\n\nexport type ActiveStrategyProp =\n  | 'single-leaf'\n  | 'leaf'\n  | 'independent'\n  | 'single-independent'\n  | ActiveStrategy\n  | ((mandatory: boolean) => ActiveStrategy)\nexport type SelectStrategyProp =\n  | 'single-leaf'\n  | 'leaf'\n  | 'independent'\n  | 'single-independent'\n  | 'classic'\n  | 'trunk'\n  | 'branch'\n  | SelectStrategy\n  | ((mandatory: boolean) => SelectStrategy)\nexport type OpenStrategyProp = 'single' | 'multiple' | 'list' | OpenStrategy\nexport type ItemsRegistrationType = 'props' | 'render'\n\nexport interface NestedProps {\n  activatable: boolean\n  selectable: boolean\n  activeStrategy: ActiveStrategyProp | undefined\n  selectStrategy: SelectStrategyProp | undefined\n  openStrategy: OpenStrategyProp | undefined\n  activated: any\n  selected: any\n  opened: any\n  mandatory: boolean\n  itemsRegistration: ItemsRegistrationType\n  'onUpdate:activated': EventProp<[any]> | undefined\n  'onUpdate:selected': EventProp<[any]> | undefined\n  'onUpdate:opened': EventProp<[any]> | undefined\n}\n\ntype NestedProvide = {\n  id: Ref<unknown>\n  isGroupActivator?: boolean\n  root: {\n    children: Ref<Map<unknown, unknown[]>>\n    parents: Ref<Map<unknown, unknown>>\n    disabled: Ref<Set<unknown>>\n    activatable: Ref<boolean>\n    selectable: Ref<boolean>\n    opened: Ref<Set<unknown>>\n    activated: Ref<Set<unknown>>\n    scrollToActive: Ref<boolean>\n    selected: Ref<Map<unknown, 'on' | 'off' | 'indeterminate'>>\n    selectedValues: Ref<unknown[]>\n    itemsRegistration: Ref<ItemsRegistrationType>\n    register: (id: unknown, parentId: unknown, isDisabled: boolean, isGroup?: boolean) => void\n    unregister: (id: unknown) => void\n    updateDisabled: (id: unknown, isDisabled: boolean) => void\n    open: (id: unknown, value: boolean, event?: Event) => void\n    activate: (id: unknown, value: boolean, event?: Event) => void\n    select: (id: unknown, value: boolean, event?: Event) => void\n    openOnSelect: (id: unknown, value: boolean, event?: Event) => void\n    getPath: (id: unknown) => unknown[]\n  }\n}\n\nexport const VNestedSymbol: InjectionKey<NestedProvide> = Symbol.for('vuetify:nested')\n\nexport const emptyNested: NestedProvide = {\n  id: shallowRef(),\n  root: {\n    itemsRegistration: ref('render'),\n    register: () => null,\n    unregister: () => null,\n    updateDisabled: () => null,\n    children: ref(new Map()),\n    parents: ref(new Map()),\n    disabled: ref(new Set()),\n    open: () => null,\n    openOnSelect: () => null,\n    activate: () => null,\n    select: () => null,\n    activatable: ref(false),\n    scrollToActive: ref(false),\n    selectable: ref(false),\n    opened: ref(new Set()),\n    activated: ref(new Set()),\n    selected: ref(new Map()),\n    selectedValues: ref([]),\n    getPath: () => [],\n  },\n}\n\nexport const makeNestedProps = propsFactory({\n  activatable: Boolean,\n  selectable: Boolean,\n  activeStrategy: [String, Function, Object] as PropType<ActiveStrategyProp>,\n  selectStrategy: [String, Function, Object] as PropType<SelectStrategyProp>,\n  openStrategy: [String, Object] as PropType<OpenStrategyProp>,\n  opened: null,\n  activated: null,\n  selected: null,\n  mandatory: Boolean,\n  itemsRegistration: {\n    type: String as PropType<ItemsRegistrationType>,\n    default: 'render',\n  },\n}, 'nested')\n\nexport const useNested = (\n  props: NestedProps,\n  {\n    items,\n    returnObject,\n    scrollToActive,\n    valueComparator,\n  }: {\n    items: Ref<ListItem[]>\n    returnObject: MaybeRefOrGetter<boolean>\n    scrollToActive: MaybeRefOrGetter<boolean>\n    valueComparator?: MaybeRefOrGetter<ValueComparator | undefined>\n  },\n) => {\n  let isUnmounted = false\n  const children = shallowRef(new Map<unknown, unknown[]>())\n  const parents = shallowRef(new Map<unknown, unknown>())\n  const disabled = shallowRef(new Set<unknown>())\n\n  const opened = useProxiedModel(\n    props,\n    'opened',\n    props.opened,\n    v => new Set(Array.isArray(v) ? v.map(i => toRaw(i)) : v),\n    v => [...v.values()],\n  )\n\n  // opening multiple nodes in a sync loop cannot wait for the proxied model to catch up\n  let batch: Set<unknown> | null = null\n  function currentOpened () {\n    if (!batch) queueMicrotask(() => { batch = null })\n    return batch ?? opened.value\n  }\n  function setOpened (value: Set<unknown>) {\n    batch = value\n    opened.value = value\n  }\n\n  const activeStrategy = computed(() => {\n    if (isFunction(props.activeStrategy)) return props.activeStrategy(props.mandatory)\n    if (isObject(props.activeStrategy)) return props.activeStrategy\n\n    switch (props.activeStrategy) {\n      case 'leaf': return leafActiveStrategy(props.mandatory)\n      case 'single-leaf': return leafSingleActiveStrategy(props.mandatory)\n      case 'independent': return independentActiveStrategy(props.mandatory)\n      case 'single-independent':\n      default: return independentSingleActiveStrategy(props.mandatory)\n    }\n  })\n\n  const selectStrategy = computed(() => {\n    if (isFunction(props.selectStrategy)) return props.selectStrategy(props.mandatory)\n    if (isObject(props.selectStrategy)) return props.selectStrategy\n\n    switch (props.selectStrategy) {\n      case 'single-leaf': return leafSingleSelectStrategy(props.mandatory)\n      case 'leaf': return leafSelectStrategy(props.mandatory)\n      case 'independent': return independentSelectStrategy(props.mandatory)\n      case 'single-independent': return independentSingleSelectStrategy(props.mandatory)\n      case 'trunk': return trunkSelectStrategy(props.mandatory)\n      case 'branch': return branchSelectStrategy(props.mandatory)\n      case 'classic':\n      default: return classicSelectStrategy(props.mandatory)\n    }\n  })\n\n  const openStrategy = computed(() => {\n    if (isObject(props.openStrategy)) return props.openStrategy\n\n    switch (props.openStrategy) {\n      case 'list': return listOpenStrategy\n      case 'single': return singleOpenStrategy\n      case 'multiple':\n      default: return multipleOpenStrategy\n    }\n  })\n\n  const flatItems = computed(() => {\n    const flat: ListItem[] = []\n    const stack = [...items.value]\n    while (stack.length) {\n      const item = stack.pop()!\n      flat.push(item)\n      if (item.children) stack.push(...item.children)\n    }\n    return flat\n  })\n\n  function resolveValue (value: unknown): unknown {\n    const comparator = toValue(valueComparator)\n    if (!comparator) return value\n    const _returnObject = toValue(returnObject)\n    for (const item of flatItems.value) {\n      const itemVal = _returnObject ? toRaw(item.raw) : item.value\n      if (comparator(value, itemVal)) return itemVal\n    }\n    return value\n  }\n\n  const activated = useProxiedModel(\n    props,\n    'activated',\n    props.activated,\n    v => activeStrategy.value.in(\n      Array.isArray(v) ? v.map(resolveValue) : v,\n      children.value,\n      parents.value,\n    ),\n    v => activeStrategy.value.out(v, children.value, parents.value),\n  )\n  const selected = useProxiedModel(\n    props,\n    'selected',\n    props.selected,\n    v => selectStrategy.value.in(\n      Array.isArray(v) ? v.map(resolveValue) : v,\n      children.value,\n      parents.value,\n      disabled.value,\n    ),\n    v => selectStrategy.value.out(v, children.value, parents.value),\n  )\n\n  onBeforeUnmount(() => {\n    isUnmounted = true\n  })\n\n  function getPath (id: unknown) {\n    const path: unknown[] = []\n    let parent: unknown = toRaw(id)\n\n    while (!isUndefined(parent)) {\n      path.unshift(parent)\n      parent = parents.value.get(parent)\n    }\n\n    return path\n  }\n\n  const vm = getCurrentInstance('nested')\n\n  const nodeIds = new Set<unknown>()\n\n  const itemsUpdatePropagation = throttle(() => {\n    nextTick(() => {\n      children.value = new Map(children.value)\n      parents.value = new Map(parents.value)\n    })\n  }, 100)\n\n  watch(() => [items.value, toValue(returnObject)], () => {\n    if (props.itemsRegistration === 'props') {\n      updateInternalMaps()\n    }\n  }, { immediate: true })\n\n  function updateInternalMaps () {\n    const _parents = new Map()\n    const _children = new Map()\n    const _disabled = new Set()\n\n    const getValue = toValue(returnObject)\n      ? (item: ListItem) => toRaw(item.raw)\n      : (item: ListItem) => item.value\n\n    const stack = [...items.value]\n    let i = 0\n    while (i < stack.length) {\n      const item = stack[i++]\n      const itemValue = getValue(item)\n\n      if (item.children) {\n        const childValues = []\n        for (const child of item.children) {\n          const childValue = getValue(child)\n          _parents.set(childValue, itemValue)\n          childValues.push(childValue)\n          stack.push(child)\n        }\n        _children.set(itemValue, childValues)\n      }\n\n      if (item.props.disabled) {\n        _disabled.add(itemValue)\n      }\n    }\n\n    children.value = _children\n    parents.value = _parents\n    disabled.value = _disabled\n  }\n\n  const nested: NestedProvide = {\n    id: shallowRef(),\n    root: {\n      opened,\n      activatable: toRef(() => props.activatable),\n      scrollToActive: toRef(() => toValue(scrollToActive)),\n      selectable: toRef(() => props.selectable),\n      activated,\n      selected,\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      itemsRegistration: toRef(() => props.itemsRegistration),\n      register: (id, parentId, isDisabled, isGroup) => {\n        if (nodeIds.has(id)) {\n          const path = getPath(id).map(String).join(' -> ')\n          const newPath = getPath(parentId).concat(id).map(String).join(' -> ')\n          consoleError(`Multiple nodes with the same ID\\n\\t${path}\\n\\t${newPath}`)\n          return\n        } else {\n          nodeIds.add(id)\n        }\n\n        parentId && id !== parentId && parents.value.set(id, parentId)\n\n        isDisabled && disabled.value.add(id)\n        isGroup && children.value.set(id, [])\n\n        if (!isNullOrUndefined(parentId)) {\n          children.value.set(parentId, [...children.value.get(parentId) || [], id])\n        }\n        itemsUpdatePropagation()\n      },\n      unregister: id => {\n        if (isUnmounted) return\n\n        nodeIds.delete(id)\n        children.value.delete(id)\n        disabled.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        itemsUpdatePropagation()\n      },\n      updateDisabled: (id, isDisabled) => {\n        if (isDisabled) {\n          disabled.value.add(id)\n        } else {\n          disabled.value.delete(id)\n        }\n        // classic selection requires refresh to re-evaluate on/off/indeterminate but\n        // currently it is only run for selection interactions, so it will set new disabled\n        // to \"off\" and the visual state becomes out of sync\n        // -- selected.value = new Map(selected.value)\n        // it is not clear if the framework should un-select when disabled changed to true\n        // more discussion is needed\n      },\n      open: (id, value, event) => {\n        vm.emit('click:open', { id, value, path: getPath(id), event })\n\n        const newOpened = openStrategy.value.open({\n          id,\n          value,\n          opened: new Set(currentOpened()),\n          children: children.value,\n          parents: parents.value,\n          event,\n        })\n\n        newOpened && setOpened(newOpened)\n      },\n      openOnSelect: (id, value, event) => {\n        const newOpened = openStrategy.value.select({\n          id,\n          value,\n          selected: new Map(selected.value),\n          opened: new Set(currentOpened()),\n          children: children.value,\n          parents: parents.value,\n          event,\n        })\n        newOpened && setOpened(newOpened)\n      },\n      select: (id, value, event) => {\n        vm.emit('click:select', { id, value, path: getPath(id), event })\n\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          disabled: disabled.value,\n          event,\n        })\n        newSelected && (selected.value = newSelected)\n\n        nested.root.openOnSelect(id, value, event)\n      },\n      activate: (id, value, event) => {\n        if (!props.activatable) {\n          return nested.root.select(id, true, event)\n        }\n\n        vm.emit('click:activate', { id, value, path: getPath(id), event })\n\n        const newActivated = activeStrategy.value.activate({\n          id,\n          value,\n          activated: new Set(activated.value),\n          children: children.value,\n          parents: parents.value,\n          event,\n        })\n\n        if (newActivated.size !== activated.value.size) {\n          activated.value = newActivated\n        } else {\n          for (const value of newActivated) {\n            if (!activated.value.has(value)) {\n              activated.value = newActivated\n              return\n            }\n          }\n          for (const value of activated.value) {\n            if (!newActivated.has(value)) {\n              activated.value = newActivated\n              return\n            }\n          }\n        }\n      },\n      children,\n      parents,\n      disabled,\n      getPath,\n    },\n  }\n\n  provide(VNestedSymbol, nested)\n\n  return nested.root\n}\n\nexport const useNestedItem = (id: MaybeRefOrGetter<unknown>, isDisabled: MaybeRefOrGetter<boolean>, isGroup: boolean) => {\n  const parent = inject(VNestedSymbol, emptyNested)\n\n  const uidSymbol = Symbol('nested item')\n  const computedId = computed(() => {\n    const idValue = toRaw(toValue(id))\n    return !isUndefined(idValue) ? idValue : uidSymbol\n  })\n\n  const item = {\n    ...parent,\n    id: computedId,\n    open: (open: boolean, e: Event) => parent.root.open(computedId.value, open, e),\n    openOnSelect: (open: boolean, e?: Event) => parent.root.openOnSelect(computedId.value, open, e),\n    isOpen: computed(() => parent.root.opened.value.has(computedId.value)),\n    parent: computed(() => parent.root.parents.value.get(computedId.value)),\n    activate: (activated: boolean, e?: Event) => parent.root.activate(computedId.value, activated, e),\n    isActivated: computed(() => parent.root.activated.value.has(computedId.value)),\n    scrollToActive: parent.root.scrollToActive,\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    isIndeterminate: computed(() => parent.root.selected.value.get(computedId.value) === 'indeterminate'),\n    isLeaf: computed(() => !parent.root.children.value.get(computedId.value)),\n    isGroupActivator: parent.isGroupActivator,\n  }\n\n  onBeforeMount(() => {\n    if (parent.isGroupActivator || parent.root.itemsRegistration.value === 'props') return\n    nextTick(() => {\n      parent.root.register(computedId.value, parent.id.value, toValue(isDisabled), isGroup)\n    })\n  })\n\n  onBeforeUnmount(() => {\n    if (parent.isGroupActivator || parent.root.itemsRegistration.value === 'props') return\n    parent.root.unregister(computedId.value)\n  })\n\n  watch(computedId, (val, oldVal) => {\n    if (parent.isGroupActivator || parent.root.itemsRegistration.value === 'props') return\n    parent.root.unregister(oldVal)\n    nextTick(() => {\n      parent.root.register(val, parent.id.value, toValue(isDisabled), isGroup)\n    })\n  })\n\n  watch(() => toValue(isDisabled), val => {\n    parent.root.updateDisabled(computedId.value, val)\n  })\n\n  isGroup && provide(VNestedSymbol, item)\n\n  return item\n}\n\nexport const useNestedGroupActivator = () => {\n  const parent = inject(VNestedSymbol, emptyNested)\n\n  provide(VNestedSymbol, { ...parent, isGroupActivator: true })\n}\n","export function throttle<T extends (...args: any[]) => any> (\n  fn: T,\n  delay: number,\n  options = { leading: true, trailing: true },\n) {\n  let timeoutId = 0 as any\n  let lastExec = 0\n  let throttling = false\n  let start = 0\n\n  function clear () {\n    clearTimeout(timeoutId)\n    throttling = false\n    start = 0\n  }\n\n  const wrap = (...args: Parameters<T>): void | ReturnType<T> => {\n    clearTimeout(timeoutId)\n\n    const now = Date.now()\n\n    if (!start) start = now\n    const elapsed = now - Math.max(start, lastExec)\n\n    function invoke () {\n      lastExec = Date.now()\n      timeoutId = setTimeout(clear, delay)\n      fn(...args)\n    }\n\n    if (!throttling) {\n      throttling = true\n      if (options.leading) {\n        invoke()\n      }\n    } else if (elapsed >= delay) {\n      invoke()\n    } else if (options.trailing) {\n      timeoutId = setTimeout(invoke, delay - elapsed)\n    }\n  }\n\n  wrap.clear = clear\n  wrap.immediate = fn\n  return wrap\n}\n","// Components\nimport { VExpandTransition } from '@/components/transitions'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\n\n// Composables\nimport { useList } from './list'\nimport { makeComponentProps } from '@/composables/component'\nimport { IconValue } from '@/composables/icons'\nimport { useNestedGroupActivator, useNestedItem, VNestedSymbol } from '@/composables/nested/nested'\nimport { useSsrBoot } from '@/composables/ssrBoot'\nimport { makeTagProps } from '@/composables/tag'\nimport { MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { computed, inject, toRef } from 'vue'\nimport { defineComponent, genericComponent, propsFactory, useRender } from '@/util'\n\nexport type VListGroupSlots = {\n  default: never\n  activator: { isOpen: boolean, props: Record<string, unknown> }\n}\n\nconst VListGroupActivator = defineComponent({\n  name: 'VListGroupActivator',\n\n  setup (_, { slots }) {\n    useNestedGroupActivator()\n\n    return () => slots.default?.()\n  },\n})\n\nexport const makeVListGroupProps = propsFactory({\n  /* @deprecated */\n  activeColor: String,\n  baseColor: String,\n  color: String,\n  collapseIcon: {\n    type: IconValue,\n    default: '$collapse',\n  },\n  disabled: Boolean,\n  expandIcon: {\n    type: IconValue,\n    default: '$expand',\n  },\n  rawId: [String, Number],\n  prependIcon: IconValue,\n  appendIcon: IconValue,\n  fluid: Boolean,\n  subgroup: Boolean,\n  title: String,\n  value: null,\n\n  ...makeComponentProps(),\n  ...makeTagProps(),\n}, 'VListGroup')\n\nexport const VListGroup = genericComponent<VListGroupSlots>()({\n  name: 'VListGroup',\n\n  props: makeVListGroupProps(),\n\n  setup (props, { slots }) {\n    const { isOpen, open, id: _id } = useNestedItem(() => props.value, () => props.disabled, true)\n    const id = computed(() => `v-list-group--id-${String(props.rawId ?? _id.value)}`)\n    const list = useList()\n    const { isBooted } = useSsrBoot()\n\n    const parent = inject(VNestedSymbol)\n    const renderWhenClosed = toRef(() => parent?.root?.itemsRegistration.value === 'render')\n\n    function onClick (e: Event) {\n      if (['INPUT', 'TEXTAREA'].includes((e.target as Element)?.tagName)) return\n      open(!isOpen.value, e)\n    }\n\n    const activatorProps = computed(() => ({\n      onClick,\n      class: 'v-list-group__header',\n      id: id.value,\n    }))\n\n    const toggleIcon = computed(() => isOpen.value ? props.collapseIcon : props.expandIcon)\n    const activatorDefaults = computed(() => ({\n      VListItem: {\n        activeColor: props.activeColor,\n        baseColor: props.baseColor,\n        color: props.color,\n        prependIcon: props.prependIcon || (props.subgroup && toggleIcon.value),\n        appendIcon: props.appendIcon || (!props.subgroup && toggleIcon.value),\n        title: props.title,\n        value: props.value,\n      },\n    }))\n\n    useRender(() => (\n      <props.tag\n        class={[\n          'v-list-group',\n          {\n            'v-list-group--prepend': list?.hasPrepend.value,\n            'v-list-group--fluid': props.fluid,\n            'v-list-group--subgroup': props.subgroup,\n            'v-list-group--open': isOpen.value,\n          },\n          props.class,\n        ]}\n        style={ props.style }\n      >\n        { slots.activator && (\n          <VDefaultsProvider defaults={ activatorDefaults.value }>\n            <VListGroupActivator>\n              { slots.activator({ props: activatorProps.value, isOpen: isOpen.value }) }\n            </VListGroupActivator>\n          </VDefaultsProvider>\n        )}\n\n        <MaybeTransition transition={{ component: VExpandTransition }} disabled={ !isBooted.value }>\n          { renderWhenClosed.value\n            ? (\n              <div\n                class=\"v-list-group__items\"\n                role=\"group\"\n                aria-labelledby={ id.value }\n                inert={ !isOpen.value }\n                v-show={ isOpen.value }\n              >\n                { slots.default?.() }\n              </div>\n            ) : isOpen.value && (\n              <div\n                class=\"v-list-group__items\"\n                role=\"group\"\n                aria-labelledby={ id.value }\n              >\n                { slots.default?.() }\n              </div>\n            )}\n        </MaybeTransition>\n      </props.tag>\n    ))\n\n    return {\n      isOpen,\n    }\n  },\n})\n\nexport type VListGroup = InstanceType<typeof VListGroup>\n","// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVListItemSubtitleProps = propsFactory({\n  opacity: [Number, String],\n\n  ...makeComponentProps(),\n  ...makeTagProps(),\n}, 'VListItemSubtitle')\n\nexport const VListItemSubtitle = genericComponent()({\n  name: 'VListItemSubtitle',\n\n  props: makeVListItemSubtitleProps(),\n\n  setup (props, { slots }) {\n    useRender(() => (\n      <props.tag\n        class={[\n          'v-list-item-subtitle',\n          props.class,\n        ]}\n        style={[\n          { '--v-list-item-subtitle-opacity': props.opacity },\n          props.style,\n        ]}\n        v-slots={ slots }\n      />\n    ))\n\n    return {}\n  },\n})\n\nexport type VListItemSubtitle = InstanceType<typeof VListItemSubtitle>\n","// Utilities\nimport { createSimpleFunctional } from '@/util'\n\nexport const VListItemTitle = createSimpleFunctional('v-list-item-title')\n\nexport type VListItemTitle = InstanceType<typeof VListItemTitle>\n","/* eslint-disable complexity */\n\n// Styles\nimport './VListItem.sass'\n\n// Components\nimport { VListItemSubtitle } from './VListItemSubtitle'\nimport { VListItemTitle } from './VListItemTitle'\nimport { VAvatar } from '@/components/VAvatar'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { useList } from './list'\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { IconValue } from '@/composables/icons'\nimport { useNestedItem } from '@/composables/nested/nested'\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 vRipple from '@/directives/ripple'\n\n// Utilities\nimport { computed, nextTick, onBeforeMount, ref, toDisplayString, toRef, watch } from 'vue'\nimport { convertToUnit, deprecate, EventProp, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { RippleDirectiveBinding } from '@/directives/ripple'\n\nexport type ListItemSlot = {\n  index?: number\n  depth?: number\n  path?: number[]\n  isFirst?: boolean\n  isLast?: boolean\n  isActive: boolean\n  isOpen: boolean\n  isSelected: boolean\n  isIndeterminate: boolean\n  isDisabled: boolean\n  select: (value: boolean) => void\n}\n\nexport type ListItemTitleSlot = {\n  title?: string | number | boolean\n}\n\nexport type ListItemSubtitleSlot = {\n  subtitle?: string | number | boolean\n}\n\nexport type VListItemSlots = {\n  prepend: ListItemSlot\n  append: ListItemSlot\n  default: ListItemSlot\n  title: ListItemTitleSlot\n  subtitle: ListItemSubtitleSlot\n}\n\nexport const makeVListItemProps = propsFactory({\n  active: {\n    type: Boolean,\n    default: undefined,\n  },\n  activeClass: String,\n  /* @deprecated */\n  activeColor: String,\n  appendAvatar: String,\n  appendIcon: IconValue,\n  baseColor: String,\n  disabled: Boolean,\n  lines: [Boolean, String] as PropType<'one' | 'two' | 'three' | false>,\n  link: {\n    type: Boolean,\n    default: undefined,\n  },\n  nav: Boolean,\n  prependAvatar: String,\n  prependIcon: IconValue,\n  ripple: {\n    type: [Boolean, Object] as PropType<RippleDirectiveBinding['value']>,\n    default: true,\n  },\n  slim: Boolean,\n  prependGap: [Number, String],\n  subtitle: {\n    type: [String, Number, Boolean],\n    default: undefined,\n  },\n  title: {\n    type: [String, Number, Boolean],\n    default: undefined,\n  },\n  value: null,\n  index: Number,\n  tabindex: [Number, String],\n\n  onClick: EventProp<[MouseEvent | KeyboardEvent]>(),\n  onClickOnce: EventProp<[MouseEvent]>(),\n\n  ...makeBorderProps(),\n  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...makeDimensionProps(),\n  ...makeElevationProps(),\n  ...makeRoundedProps(),\n  ...makeRouterProps(),\n  ...makeTagProps(),\n  ...makeThemeProps(),\n  ...makeVariantProps({ variant: 'text' } as const),\n}, 'VListItem')\n\nexport const VListItem = genericComponent<VListItemSlots>()({\n  name: 'VListItem',\n\n  directives: { vRipple },\n\n  props: makeVListItemProps(),\n\n  emits: {\n    click: (e: MouseEvent | KeyboardEvent) => true,\n  },\n\n  setup (props, { attrs, slots, emit }) {\n    const link = useLink(props, attrs)\n    const rootEl = ref<HTMLElement>()\n    const id = computed(() => props.value === undefined ? link.href.value : props.value)\n    const {\n      activate,\n      isActivated,\n      select,\n      isOpen,\n      isSelected,\n      isIndeterminate,\n      isGroupActivator,\n      root,\n      parent,\n      openOnSelect,\n      scrollToActive,\n      id: uid,\n    } = useNestedItem(id, () => props.disabled, false)\n    const list = useList()\n    const isActive = computed(() =>\n      props.active !== false &&\n      (props.active || link.isActive?.value || (root.activatable.value ? isActivated.value : isSelected.value))\n    )\n    const isLink = toRef(() => props.link !== false && link.isLink.value)\n    const isSelectable = computed(() => (!!list && (root.selectable.value || root.activatable.value || props.value != null)))\n    const isClickable = computed(() =>\n      !props.disabled &&\n      props.link !== false &&\n      (props.link || link.isClickable.value || isSelectable.value)\n    )\n    const isTracked = computed(() =>\n      list &&\n      list.navigationStrategy.value === 'track' &&\n      props.index !== undefined &&\n      list.trackingIndex.value === props.index\n    )\n    const role = computed(() => list ? (isLink.value ? 'link' : isSelectable.value ? 'option' : 'listitem') : undefined)\n    const ariaSelected = computed(() => {\n      if (!isSelectable.value) return undefined\n      return root.activatable.value ? isActivated.value\n        : root.selectable.value ? isSelected.value\n        : isActive.value\n    })\n\n    const roundedProps = toRef(() => props.rounded || props.nav)\n    const color = toRef(() => props.color ?? props.activeColor)\n    const variantProps = toRef(() => ({\n      color: isActive.value ? color.value ?? props.baseColor : props.baseColor,\n      variant: props.variant,\n    }))\n\n    // useNestedItem doesn't call register until beforeMount,\n    // so this can't be an immediate watcher as we don't know parent yet\n    watch(() => link.isActive?.value, val => {\n      if (!val) return\n      handleActiveLink()\n    })\n    watch(isActivated, val => {\n      if (!val || !scrollToActive) return\n      rootEl.value?.scrollIntoView({ block: 'nearest', behavior: 'instant' })\n    })\n    watch(isTracked, val => {\n      if (!val) return\n      rootEl.value?.scrollIntoView({ block: 'nearest', behavior: 'instant' })\n    })\n    onBeforeMount(() => {\n      if (link.isActive?.value) {\n        nextTick(() => handleActiveLink())\n      }\n    })\n    function handleActiveLink () {\n      if (parent.value != null) {\n        root.open(parent.value, true)\n      }\n      openOnSelect(true)\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, roundedStyles } = useRounded(roundedProps)\n    const lineClasses = toRef(() => props.lines ? `v-list-item--${props.lines}-line` : undefined)\n    const rippleOptions = toRef(() =>\n      (\n        props.ripple !== undefined &&\n        !!props.ripple &&\n        list?.filterable\n      )\n        ? { keys: ['Enter'] }\n        : props.ripple\n    )\n\n    const slotProps = computed(() => ({\n      isActive: isActive.value,\n      select,\n      isOpen: isOpen.value,\n      isSelected: isSelected.value,\n      isIndeterminate: isIndeterminate.value,\n      isDisabled: props.disabled,\n    } satisfies ListItemSlot))\n\n    function onClick (e: MouseEvent) {\n      emit('click', e)\n      if (['INPUT', 'TEXTAREA'].includes((e.target as Element)?.tagName)) return\n\n      if (!isClickable.value) return\n\n      link.navigate.value?.(e)\n\n      if (isGroupActivator) return\n\n      if (root.activatable.value) {\n        activate(!isActivated.value, e)\n      } else if (root.selectable.value) {\n        select(!isSelected.value, e)\n      } else if (props.value != null && !isLink.value) {\n        select(!isSelected.value, e)\n      }\n    }\n\n    function onKeyDown (e: KeyboardEvent) {\n      const target = e.target as HTMLElement\n\n      if (['INPUT', 'TEXTAREA'].includes(target.tagName)) return\n\n      // Treeview items own their Enter/Space handling\n      if ((e.currentTarget as HTMLElement | null)?.getAttribute('role') === 'treeitem') return\n\n      if (e.key === 'Enter' || (e.key === ' ' && !list?.filterable)) {\n        e.preventDefault()\n        e.stopPropagation()\n        e.target!.dispatchEvent(new MouseEvent('click', e))\n      }\n    }\n\n    useRender(() => {\n      const Tag = isLink.value ? 'a' : props.tag\n      const hasTitle = (slots.title || props.title != null)\n      const hasSubtitle = (slots.subtitle || props.subtitle != null)\n      const hasAppendMedia = !!(props.appendAvatar || props.appendIcon)\n      const hasAppend = !!(hasAppendMedia || slots.append)\n      const hasPrependMedia = !!(props.prependAvatar || props.prependIcon)\n      const hasPrepend = !!(hasPrependMedia || slots.prepend)\n\n      list?.updateHasPrepend(hasPrepend)\n\n      if (props.activeColor) {\n        deprecate('active-color', ['color', 'base-color'])\n      }\n\n      return (\n        <Tag\n          { ...link.linkProps }\n          ref={ rootEl }\n          id={ props.index !== undefined && list ? `v-list-item-${list.uid}-${props.index}` : undefined }\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.value,\n              'v-list-item--nav': props.nav,\n              'v-list-item--prepend': !hasPrepend && list?.hasPrepend.value,\n              'v-list-item--slim': props.slim,\n              'v-list-item--focus-visible': isTracked.value,\n              [`${props.activeClass}`]: props.activeClass && isActive.value,\n            },\n            themeClasses.value,\n            borderClasses.value,\n            colorClasses.value,\n            densityClasses.value,\n            elevationClasses.value,\n            lineClasses.value,\n            roundedClasses.value,\n            variantClasses.value,\n            props.class,\n          ]}\n          style={[\n            {\n              '--v-list-prepend-gap': convertToUnit(props.prependGap),\n            },\n            colorStyles.value,\n            dimensionStyles.value,\n            roundedStyles.value,\n            props.style,\n          ]}\n          tabindex={ props.tabindex ?? (isClickable.value ? (list ? -2 : 0) : undefined) }\n          aria-selected={ ariaSelected.value }\n          role={ role.value }\n          onClick={ (isClickable.value || props.onClick || props.onClickOnce) && onClick }\n          onKeydown={ isClickable.value && !isLink.value && onKeyDown }\n          v-ripple={ isClickable.value && rippleOptions.value }\n        >\n          { genOverlays(isClickable.value || isActive.value, 'v-list-item') }\n\n          { hasPrepend && (\n            <div key=\"prepend\" class=\"v-list-item__prepend\">\n              { !slots.prepend ? (\n                <>\n                  { props.prependAvatar && (\n                    <VAvatar\n                      key=\"prepend-avatar\"\n                      density={ props.density }\n                      image={ props.prependAvatar }\n                    />\n                  )}\n\n                  { props.prependIcon && (\n                    <VIcon\n                      key=\"prepend-icon\"\n                      density={ props.density }\n                      icon={ props.prependIcon }\n                    />\n                  )}\n                </>\n              ) : (\n                <VDefaultsProvider\n                  key=\"prepend-defaults\"\n                  defaults={{\n                    VAvatar: {\n                      density: props.density,\n                      image: props.prependAvatar,\n                    },\n                    VIcon: {\n                      density: props.density,\n                      icon: props.prependIcon,\n                    },\n                    VListItemAction: {\n                      start: true,\n                    },\n                    VCheckboxBtn: {\n                      density: props.density,\n                    },\n                  }}\n                >\n                  { slots.prepend?.(slotProps.value) }\n                </VDefaultsProvider>\n              )}\n\n              <div class=\"v-list-item__spacer\" />\n            </div>\n          )}\n\n          <div class=\"v-list-item__content\" data-no-activator=\"\">\n            { hasTitle && (\n              <VListItemTitle key=\"title\">\n                { slots.title?.({ title: props.title }) ?? toDisplayString(props.title) }\n              </VListItemTitle>\n            )}\n\n            { hasSubtitle && (\n              <VListItemSubtitle key=\"subtitle\">\n                { slots.subtitle?.({ subtitle: props.subtitle }) ?? toDisplayString(props.subtitle) }\n              </VListItemSubtitle>\n            )}\n\n            { slots.default?.(slotProps.value) }\n          </div>\n\n          { hasAppend && (\n            <div key=\"append\" class=\"v-list-item__append\">\n              { !slots.append ? (\n                <>\n                  { props.appendIcon && (\n                    <VIcon\n                      key=\"append-icon\"\n                      density={ props.density }\n                      icon={ props.appendIcon }\n                    />\n                  )}\n\n                  { props.appendAvatar && (\n                    <VAvatar\n                      key=\"append-avatar\"\n                      density={ props.density }\n                      image={ props.appendAvatar }\n                    />\n                  )}\n                </>\n              ) : (\n                <VDefaultsProvider\n                  key=\"append-defaults\"\n                  defaults={{\n                    VAvatar: {\n                      density: props.density,\n                      image: props.appendAvatar,\n                    },\n                    VIcon: {\n                      density: props.density,\n                      icon: props.appendIcon,\n                    },\n                    VListItemAction: {\n                      end: true,\n                    },\n                    VCheckboxBtn: {\n                      density: props.density,\n                    },\n                  }}\n                >\n                  { slots.append?.(slotProps.value) }\n                </VDefaultsProvider>\n              )}\n\n              <div class=\"v-list-item__spacer\" />\n            </div>\n          )}\n        </Tag>\n      )\n    })\n\n    return {\n      activate,\n      isActivated,\n      isGroupActivator,\n      isSelected,\n      list,\n      select,\n      root,\n      id: uid,\n      link,\n    }\n  },\n})\n\nexport type VListItem = InstanceType<typeof VListItem>\n","// Composables\nimport { useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVListSubheaderProps = propsFactory({\n  color: String,\n  inset: Boolean,\n  sticky: Boolean,\n  title: String,\n\n  ...makeComponentProps(),\n  ...makeTagProps(),\n}, 'VListSubheader')\n\nexport const VListSubheader = genericComponent()({\n  name: 'VListSubheader',\n\n  props: makeVListSubheaderProps(),\n\n  setup (props, { slots }) {\n    const { textColorClasses, textColorStyles } = useTextColor(() => props.color)\n\n    useRender(() => {\n      const hasText = !!(slots.default || props.title)\n\n      return (\n        <props.tag\n          class={[\n            'v-list-subheader',\n            {\n              'v-list-subheader--inset': props.inset,\n              'v-list-subheader--sticky': props.sticky,\n            },\n            textColorClasses.value,\n            props.class,\n          ]}\n          style={[\n            { textColorStyles },\n            props.style,\n          ]}\n        >\n          { hasText && (\n            <div class=\"v-list-subheader__text\">\n              { slots.default?.() ?? props.title }\n            </div>\n          )}\n        </props.tag>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VListSubheader = InstanceType<typeof VListSubheader>\n","// Components\nimport { VListGroup } from './VListGroup'\nimport { VListItem } from './VListItem'\nimport { VListSubheader } from './VListSubheader'\nimport { VDivider } from '@/components/VDivider'\n\n// Utilities\nimport { mergeProps } from 'vue'\nimport { createList } from './list'\nimport { genericComponent, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { InternalListItem } from './VList'\nimport type { VListItemSlots } from './VListItem'\nimport type { GenericProps } from '@/util'\n\nexport type VListChildrenSlots<T> = {\n  [K in keyof Omit<VListItemSlots, 'default'>]: VListItemSlots[K] & { item: T }\n} & {\n  default: never\n  item: { props: InternalListItem['props'] & { index: number } }\n  divider: { props: InternalListItem['props'] }\n  subheader: { props: InternalListItem['props'] }\n  header: { props: InternalListItem['props'] }\n}\n\nexport const makeVListChildrenProps = propsFactory({\n  items: Array as PropType<readonly InternalListItem[]>,\n  returnObject: Boolean,\n}, 'VListChildren')\n\nexport const VListChildren = genericComponent<new <T extends InternalListItem>(\n  props: {\n    items?: readonly T[]\n    returnObject?: boolean\n  },\n  slots: VListChildrenSlots<T>\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VListChildren',\n\n  props: makeVListChildrenProps(),\n\n  setup (props, { slots }) {\n    createList()\n\n    return () => slots.default?.() ?? props.items?.map(({ children, props: itemProps, type, raw: item }, index) => {\n      if (type === 'divider') {\n        return slots.divider?.({ props: itemProps }) ?? (\n          <VDivider { ...itemProps } />\n        )\n      }\n\n      if (type === 'subheader') {\n        return slots.subheader?.({ props: itemProps }) ?? (\n          <VListSubheader { ...itemProps } />\n        )\n      }\n\n      const slotsWithItem = {\n        subtitle: slots.subtitle ? (slotProps: any) => slots.subtitle?.({ ...slotProps, item }) : undefined,\n        prepend: slots.prepend ? (slotProps: any) => slots.prepend?.({ ...slotProps, item }) : undefined,\n        append: slots.append ? (slotProps: any) => slots.append?.({ ...slotProps, item }) : undefined,\n        title: slots.title ? (slotProps: any) => slots.title?.({ ...slotProps, item }) : undefined,\n      }\n\n      const listGroupProps = VListGroup.filterProps(itemProps)\n\n      return children ? (\n        <VListGroup\n          { ...listGroupProps }\n          value={ props.returnObject ? item : itemProps?.value }\n          rawId={ itemProps?.value }\n        >\n          {{\n            activator: ({ props: activatorProps }) => {\n              const listItemProps = mergeProps(\n                itemProps,\n                activatorProps,\n                { value: props.returnObject ? item : itemProps.value }\n              ) as typeof itemProps\n\n              return slots.header\n                ? slots.header({ props: listItemProps })\n                : (\n                  <VListItem { ...listItemProps } index={ index } v-slots={ slotsWithItem } />\n                )\n            },\n            default: () => (\n              <VListChildren\n                items={ children }\n                returnObject={ props.returnObject }\n                v-slots={ slots }\n              />\n            ),\n          }}\n        </VListGroup>\n      ) : (\n        slots.item ? slots.item({ props: { ...itemProps, index } }) : (\n          <VListItem\n            { ...itemProps }\n            index={ index }\n            value={ props.returnObject ? item : itemProps.value }\n            v-slots={ slotsWithItem }\n          />\n        )\n      )\n    })\n  },\n})\n","// Utilities\nimport { computed, shallowRef, watchEffect } from 'vue'\nimport { deepEqual, getPropertyFromItem, isNull, isObject, isPrimitive, isString, omit, pick, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { InternalItem } from '@/composables/filter'\nimport type { Primitive, SelectItemKey, ValueComparator } from '@/util'\n\nexport interface ListItem<T = any> extends InternalItem<T> {\n  title: string\n  props: {\n    [key: string]: any\n    title: string\n    value: any\n  }\n  children: ListItem<T>[] | undefined\n  type: string\n}\n\nexport interface ItemProps {\n  items: any[]\n  itemTitle: SelectItemKey\n  itemValue: SelectItemKey\n  itemChildren: SelectItemKey\n  itemProps: SelectItemKey\n  itemType: SelectItemKey\n  returnObject: boolean\n  valueComparator: ValueComparator | undefined\n}\n\n// Composables\nexport const makeItemsProps = propsFactory({\n  items: {\n    type: Array as PropType<ItemProps['items']>,\n    default: () => ([]),\n  },\n  itemTitle: {\n    type: [String, Array, Function] as PropType<SelectItemKey>,\n    default: 'title',\n  },\n  itemValue: {\n    type: [String, Array, Function] as PropType<SelectItemKey>,\n    default: 'value',\n  },\n  itemChildren: {\n    type: [Boolean, String, Array, Function] as PropType<SelectItemKey>,\n    default: 'children',\n  },\n  itemProps: {\n    type: [Boolean, String, Array, Function] as PropType<SelectItemKey>,\n    default: 'props',\n  },\n  itemType: {\n    type: [Boolean, String, Array, Function] as PropType<SelectItemKey>,\n    default: 'type',\n  },\n  returnObject: Boolean,\n  valueComparator: Function as PropType<ValueComparator>,\n}, 'list-items')\n\nconst itemTypes = new Set(['item', 'divider', 'subheader'])\n\nexport function transformItem (\n  props: Pick<ItemProps, typeof transformItem.neededProps[number]>,\n  item: any\n): ListItem {\n  const title = getPropertyFromItem(item, props.itemTitle, item)\n  const value = getPropertyFromItem(item, props.itemValue, title)\n  const children = getPropertyFromItem(item, props.itemChildren)\n  const itemProps = props.itemProps === true\n    ? isObject(item)\n      ? 'children' in item\n        ? omit(item, ['children'])\n        : item\n      : undefined\n    : getPropertyFromItem(item, props.itemProps)\n\n  let type = getPropertyFromItem(item, props.itemType, 'item')\n  if (!itemTypes.has(type)) {\n    type = 'item'\n  }\n\n  const _props = {\n    title,\n    value,\n    ...itemProps,\n  }\n\n  return {\n    type,\n    title: String(_props.title ?? ''),\n    value: _props.value,\n    props: _props,\n    children: type === 'item' && Array.isArray(children) ? transformItems(props, children) : undefined,\n    raw: item,\n  }\n}\n\ntransformItem.neededProps = [\n  'itemTitle',\n  'itemValue',\n  'itemChildren',\n  'itemProps',\n  'itemType',\n] as const\n\nexport function transformItems (\n  props: Pick<ItemProps, typeof transformItem.neededProps[number]>,\n  items: ItemProps['items']\n) {\n  // avoid reactive access in the loop\n  const _props = pick(props, transformItem.neededProps)\n\n  const array: ListItem[] = []\n  for (const item of items) {\n    array.push(transformItem(_props, item))\n  }\n\n  return array\n}\n\nexport function useItems (props: ItemProps) {\n  const items = computed(() => transformItems(props, props.items))\n  const hasNullItem = computed(() => items.value.some(item => isNull(item.value)))\n\n  const itemsMap = shallowRef<Map<Primitive, ListItem[]>>(new Map())\n  const keylessItems = shallowRef<ListItem[]>([])\n  watchEffect(() => {\n    const _items = items.value\n    const map = new Map()\n    const keyless = []\n    for (let i = 0; i < _items.length; i++) {\n      const item = _items[i]\n      if (isPrimitive(item.value) || isNull(item.value)) {\n        let values = map.get(item.value)\n        if (!values) {\n          values = []\n          map.set(item.value, values)\n        }\n        values.push(item)\n      } else {\n        keyless.push(item)\n      }\n    }\n    itemsMap.value = map\n    keylessItems.value = keyless\n  })\n\n  function transformIn (value: any[]): ListItem[] {\n    // Cache unrefed values outside the loop,\n    // proxy getters can be slow when you call them a billion times\n    const _items = itemsMap.value\n    const _allItems = items.value\n    const _keylessItems = keylessItems.value\n    const _hasNullItem = hasNullItem.value\n    const _returnObject = props.returnObject\n    const hasValueComparator = !!props.valueComparator\n    const valueComparator = props.valueComparator || deepEqual\n    const _props = pick(props, transformItem.neededProps)\n\n    const returnValue: ListItem[] = []\n    main: for (const v of value) {\n      // When the model value is null, return an InternalItem\n      // based on null only if null is one of the items\n      if (!_hasNullItem && isNull(v)) continue\n\n      // String model value means value is a custom input value from combobox\n      // Don't look up existing items if the model value is a string\n      if (_returnObject && isString(v)) {\n        returnValue.push(transformItem(_props, v))\n        continue\n      }\n\n      // Fast path, items with primitive values and no\n      // custom valueComparator can use a constant-time\n      // map lookup instead of searching the items array\n      const fastItems = _items.get(v)\n\n      // Slow path, always use valueComparator.\n      // This is O(n^2) so we really don't want to\n      // do it for more than a couple hundred items.\n      if (hasValueComparator || !fastItems) {\n        for (const item of (hasValueComparator ? _allItems : _keylessItems)) {\n          if (valueComparator(v, item.value)) {\n            returnValue.push(item)\n            continue main\n          }\n        }\n        // Not an existing item, construct it from the model (#4000)\n        returnValue.push(transformItem(_props, v))\n        continue\n      }\n\n      returnValue.push(...fastItems)\n    }\n\n    return returnValue\n  }\n\n  function transformOut (value: ListItem[]): any[] {\n    return props.returnObject\n      ? value.map(({ raw }) => raw)\n      : value.map(({ value }) => value)\n  }\n\n  return { items, transformIn, transformOut }\n}\n","// Styles\nimport './VList.sass'\n\n// Components\nimport { VListChildren } from './VListChildren'\n\n// Composables\nimport { createList } from './list'\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { IconValue } from '@/composables/icons'\nimport { makeItemsProps } from '@/composables/list-items'\nimport { makeNestedProps, useNested } from '@/composables/nested/nested'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeVariantProps } from '@/composables/variant'\n\n// Utilities\nimport { computed, ref, shallowRef, toRef, useId, watch } from 'vue'\nimport {\n  convertToUnit,\n  EventProp,\n  focusChild,\n  genericComponent,\n  getActiveElement,\n  getPropertyFromItem,\n  isPrimitive,\n  omit,\n  propsFactory,\n  useRender,\n} from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VListChildrenSlots } from './VListChildren'\nimport type { ItemProps, ListItem } from '@/composables/list-items'\nimport type { GenericProps, SelectItemKey } from '@/util'\n\nexport interface InternalListItem<T = any> extends ListItem<T> {}\n\nconst itemTypes = new Set(['item', 'divider', 'subheader'])\n\nfunction transformItem (props: ItemProps, item: any): ListItem {\n  const title = isPrimitive(item) ? item : getPropertyFromItem(item, props.itemTitle)\n  const value = isPrimitive(item) ? item : getPropertyFromItem(item, props.itemValue, undefined)\n  const children = getPropertyFromItem(item, props.itemChildren)\n  const itemProps = props.itemProps === true\n    ? omit(item, ['children'])\n    : getPropertyFromItem(item, props.itemProps)\n\n  let type = getPropertyFromItem(item, props.itemType, 'item')\n  if (!itemTypes.has(type)) {\n    type = 'item'\n  }\n\n  const _props = {\n    title,\n    value,\n    ...itemProps,\n  }\n\n  return {\n    type,\n    title: _props.title,\n    value: _props.value,\n    props: _props,\n    children: type === 'item' && children ? transformItems(props, children) : undefined,\n    raw: item,\n  }\n}\n\nfunction transformItems (props: ItemProps, items: (string | object)[]) {\n  const array: InternalListItem[] = []\n\n  for (const item of items) {\n    array.push(transformItem(props, item))\n  }\n\n  return array\n}\n\nexport function useListItems (props: ItemProps) {\n  const items = computed(() => transformItems(props, props.items))\n\n  return { items }\n}\n\nexport const makeVListProps = propsFactory({\n  baseColor: String,\n  /* @deprecated */\n  activeColor: String,\n  activeClass: String,\n  bgColor: String,\n  disabled: Boolean,\n  filterable: Boolean,\n  expandIcon: IconValue,\n  collapseIcon: IconValue,\n  lines: {\n    type: [Boolean, String] as PropType<'one' | 'two' | 'three' | false>,\n    default: 'one',\n  },\n  slim: Boolean,\n  prependGap: [Number, String],\n  indent: [Number, String],\n  nav: Boolean,\n  navigationStrategy: {\n    type: String as PropType<'focus' | 'track'>,\n    default: 'focus',\n  },\n  navigationIndex: Number,\n\n  'onClick:open': EventProp<[{ id: unknown, value: boolean, path: unknown[] }]>(),\n  'onClick:select': EventProp<[{ id: unknown, value: boolean, path: unknown[] }]>(),\n  'onUpdate:opened': EventProp<[unknown]>(),\n  ...makeNestedProps({\n    selectStrategy: 'single-leaf' as const,\n    openStrategy: 'list' as const,\n  }),\n  ...makeBorderProps(),\n  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...makeDimensionProps(),\n  ...makeElevationProps(),\n  ...makeItemsProps(),\n  ...makeRoundedProps(),\n  ...makeTagProps(),\n  ...makeThemeProps(),\n  ...makeVariantProps({ variant: 'text' } as const),\n}, 'VList')\n\ntype ItemType<T> = T extends readonly (infer U)[] ? U : never\n\nexport const VList = genericComponent<new <S, A, O, T extends readonly any[]>(\n  props: {\n    items?: T\n    itemTitle?: SelectItemKey<ItemType<T>>\n    itemValue?: SelectItemKey<ItemType<T>>\n    itemChildren?: SelectItemKey<ItemType<T>>\n    itemProps?: SelectItemKey<ItemType<T>>\n    selected?: S\n    activated?: A\n    opened?: O\n    'onUpdate:selected'?: (value: S) => void\n    'onUpdate:activated'?: (value: A) => void\n    'onUpdate:opened'?: (value: O) => void\n    'onClick:open'?: (value: { id: unknown, value: boolean, path: unknown[] }) => void\n    'onClick:select'?: (value: { id: unknown, value: boolean, path: unknown[] }) => void\n  },\n  slots: VListChildrenSlots<ItemType<T>>\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VList',\n\n  props: makeVListProps(),\n\n  emits: {\n    'update:selected': (value: unknown) => true,\n    'update:activated': (value: unknown) => true,\n    'update:opened': (value: unknown) => true,\n    'update:navigationIndex': (value: number) => true,\n    'click:open': (value: { id: unknown, value: boolean, path: unknown[] }) => true,\n    'click:activate': (value: { id: unknown, value: boolean, path: unknown[] }) => true,\n    'click:select': (value: { id: unknown, value: boolean, path: unknown[] }) => true,\n  },\n\n  setup (props, { attrs, slots, emit }) {\n    const { items } = useListItems(props)\n    const { themeClasses } = provideTheme(props)\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.bgColor)\n    const { borderClasses } = useBorder(props)\n    const { densityClasses } = useDensity(props)\n    const { dimensionStyles } = useDimension(props)\n    const { elevationClasses } = useElevation(props)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n\n    const { children, open, parents, select, getPath } = useNested(props, {\n      items,\n      returnObject: toRef(() => props.returnObject),\n      scrollToActive: toRef(() => props.navigationStrategy === 'track'),\n      valueComparator: toRef(() => props.valueComparator),\n    })\n\n    const lineClasses = toRef(() => props.lines ? `v-list--${props.lines}-line` : undefined)\n    const activeColor = toRef(() => props.activeColor)\n    const baseColor = toRef(() => props.baseColor)\n    const color = toRef(() => props.color)\n    const isSelectable = toRef(() => (props.selectable || props.activatable))\n\n    const navigationIndex = useProxiedModel(\n      props,\n      'navigationIndex',\n      -1,\n      v => v ?? -1\n    )\n\n    const uid = useId()\n\n    createList({\n      filterable: props.filterable,\n      trackingIndex: navigationIndex,\n      navigationStrategy: toRef(() => props.navigationStrategy),\n      uid,\n    })\n\n    watch(items, () => {\n      if (props.navigationStrategy === 'track') {\n        navigationIndex.value = -1\n      }\n    })\n\n    provideDefaults({\n      VListGroup: {\n        activeColor,\n        baseColor,\n        color,\n        expandIcon: toRef(() => props.expandIcon),\n        collapseIcon: toRef(() => props.collapseIcon),\n      },\n      VListItem: {\n        activeClass: toRef(() => props.activeClass),\n        activeColor,\n        baseColor,\n        color,\n        density: toRef(() => props.density),\n        disabled: toRef(() => props.disabled),\n        lines: toRef(() => props.lines),\n        nav: toRef(() => props.nav),\n        slim: toRef(() => props.slim),\n        variant: toRef(() => props.variant),\n        tabindex: toRef(() => props.navigationStrategy === 'track' ? -1 : undefined),\n      },\n    })\n\n    const isFocused = shallowRef(false)\n    const contentRef = ref<HTMLElement>()\n\n    function onFocusin (e: FocusEvent) {\n      isFocused.value = true\n    }\n\n    function onFocusout (e: FocusEvent) {\n      isFocused.value = false\n    }\n\n    function onFocus (e: FocusEvent) {\n      if (props.navigationStrategy === 'track') {\n        if (!~navigationIndex.value) {\n          navigationIndex.value = getNextIndex('first')\n        }\n      } else if (\n        !isFocused.value &&\n        !(e.relatedTarget && contentRef.value?.contains(e.relatedTarget as Node))\n      ) focus()\n    }\n\n    function onBlur () {\n      if (props.navigationStrategy === 'track') {\n        navigationIndex.value = -1\n      }\n    }\n\n    function getNavigationDirection (key: string): 'next' | 'prev' | 'first' | 'last' | null {\n      switch (key) {\n        case 'ArrowDown': return 'next'\n        case 'ArrowUp': return 'prev'\n        case 'Home': return 'first'\n        case 'End': return 'last'\n        default: return null\n      }\n    }\n\n    function getNextIndex (direction: 'next' | 'prev' | 'first' | 'last'): number {\n      const itemCount = items.value.length\n      if (itemCount === 0) return -1\n\n      let nextIndex: number\n\n      if (direction === 'first') {\n        nextIndex = 0\n      } else if (direction === 'last') {\n        nextIndex = itemCount - 1\n      } else {\n        nextIndex = navigationIndex.value + (direction === 'next' ? 1 : -1)\n\n        if (nextIndex < 0) nextIndex = itemCount - 1\n        if (nextIndex >= itemCount) nextIndex = 0\n      }\n\n      const startIndex = nextIndex\n      let attempts = 0\n      while (attempts < itemCount) {\n        const item = items.value[nextIndex]\n        if (item && item.type !== 'divider' && item.type !== 'subheader') {\n          return nextIndex\n        }\n        nextIndex += direction === 'next' || direction === 'first' ? 1 : -1\n        if (nextIndex < 0) nextIndex = itemCount - 1\n        if (nextIndex >= itemCount) nextIndex = 0\n        if (nextIndex === startIndex) return -1\n        attempts++\n      }\n\n      return -1\n    }\n\n    function onKeydown (e: KeyboardEvent) {\n      const target = e.target as HTMLElement\n\n      if (!contentRef.value ||\n        (target.tagName === 'INPUT' && ['Home', 'End'].includes(e.key)) ||\n        target.tagName === 'TEXTAREA') {\n        return\n      }\n\n      const direction = getNavigationDirection(e.key)\n\n      if (direction !== null) {\n        e.preventDefault()\n        if (props.navigationStrategy === 'track') {\n          const nextIndex = getNextIndex(direction)\n          if (nextIndex !== -1) {\n            navigationIndex.value = nextIndex\n          }\n        } else {\n          focus(direction, { preventScroll: true })\n          const focused = getActiveElement()\n          if (focused && contentRef.value?.contains(focused)) {\n            focused.scrollIntoView({ block: 'nearest' })\n          }\n        }\n      }\n    }\n\n    function onMousedown (e: MouseEvent) {\n      isFocused.value = true\n    }\n\n    function focus (location?: 'next' | 'prev' | 'first' | 'last' | number | null, options?: FocusOptions) {\n      if (contentRef.value) {\n        return focusChild(contentRef.value, location, options)\n      }\n    }\n\n    useRender(() => {\n      const indent = props.indent ??\n        (props.prependGap\n          ? Number(props.prependGap) + 24\n          : undefined)\n\n      const ariaMultiselectable = isSelectable.value\n        ? attrs.ariaMultiselectable ?? !String(props.selectStrategy).startsWith('single-')\n        : undefined\n\n      return (\n        <props.tag\n          ref={ contentRef }\n          class={[\n            'v-list',\n            {\n              'v-list--disabled': props.disabled,\n              'v-list--nav': props.nav,\n              'v-list--slim': props.slim,\n            },\n            themeClasses.value,\n            backgroundColorClasses.value,\n            borderClasses.value,\n            densityClasses.value,\n            elevationClasses.value,\n            lineClasses.value,\n            roundedClasses.value,\n            props.class,\n          ]}\n          style={[\n            {\n              '--v-list-indent': convertToUnit(indent),\n              '--v-list-group-prepend': indent ? '0px' : undefined,\n              '--v-list-prepend-gap': convertToUnit(props.prependGap),\n            },\n            backgroundColorStyles.value,\n            dimensionStyles.value,\n            roundedStyles.value,\n            props.style,\n          ]}\n          tabindex={ (props.disabled || isFocused.value) ? -1 : 0 }\n          role={ isSelectable.value ? 'listbox' : 'list' }\n          aria-activedescendant={\n            props.navigationStrategy === 'track' && navigationIndex.value >= 0\n              ? `v-list-item-${uid}-${navigationIndex.value}`\n              : undefined\n          }\n          aria-multiselectable={ ariaMultiselectable }\n          onFocusin={ onFocusin }\n          onFocusout={ onFocusout }\n          onFocus={ onFocus }\n          onBlur={ onBlur }\n          onKeydown={ onKeydown }\n          onMousedown={ onMousedown }\n        >\n          <VListChildren\n            items={ items.value }\n            returnObject={ props.returnObject }\n            v-slots={ slots }\n          />\n        </props.tag>\n      )\n    })\n\n    return {\n      open,\n      select,\n      focus,\n      children,\n      parents,\n      getPath,\n      navigationIndex,\n    }\n  },\n})\n\nexport type VList = InstanceType<typeof VList>\n","// Utilities\nimport { createSimpleFunctional } from '@/util'\n\nexport const VListImg = createSimpleFunctional('v-list-img')\n\nexport type VListImg = InstanceType<typeof VListImg>\n","// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVListItemActionProps = propsFactory({\n  start: Boolean,\n  end: Boolean,\n\n  ...makeComponentProps(),\n  ...makeTagProps(),\n}, 'VListItemAction')\n\nexport const VListItemAction = genericComponent()({\n  name: 'VListItemAction',\n\n  props: makeVListItemActionProps(),\n\n  setup (props, { slots }) {\n    useRender(() => (\n      <props.tag\n        class={[\n          'v-list-item-action',\n          {\n            'v-list-item-action--start': props.start,\n            'v-list-item-action--end': props.end,\n          },\n          props.class,\n        ]}\n        style={ props.style }\n        v-slots={ slots }\n      />\n    ))\n\n    return {}\n  },\n})\n\nexport type VListItemAction = InstanceType<typeof VListItemAction>\n","// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVListItemMediaProps = propsFactory({\n  start: Boolean,\n  end: Boolean,\n\n  ...makeComponentProps(),\n  ...makeTagProps(),\n}, 'VListItemMedia')\n\nexport const VListItemMedia = genericComponent()({\n  name: 'VListItemMedia',\n\n  props: makeVListItemMediaProps(),\n\n  setup (props, { slots }) {\n    useRender(() => {\n      return (\n        <props.tag\n          class={[\n            'v-list-item-media',\n            {\n              'v-list-item-media--start': props.start,\n              'v-list-item-media--end': props.end,\n            },\n            props.class,\n          ]}\n          style={ props.style }\n          v-slots={ slots }\n        />\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VListItemMedia = InstanceType<typeof VListItemMedia>\n","// Types\nimport type { InjectionKey } from 'vue'\n\ninterface MenuProvide {\n  rootOpenedByHover: () => boolean\n  register (uid: string, close: () => void): void\n  unregister (uid: string): void\n  closeParents (e?: MouseEvent): void\n}\n\nexport const VMenuSymbol: InjectionKey<MenuProvide | null> = Symbol.for('vuetify:v-menu')\n","// Types\nimport type { ParsedAnchor } from '@/util'\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 === 'left' ? 0\n      : align === 'center' ? box.width / 2\n      : align === 'right' ? 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 === 'left' || anchor.side === 'right') {\n    const { side, align } = anchor\n\n    const x: number =\n      side === 'left' ? 0\n      : side === 'right' ? 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","// Composables\nimport { useToggleScope } from '@/composables/toggleScope'\n\n// Utilities\nimport { computed, nextTick, onScopeDispose, ref, watch } from 'vue'\nimport { anchorToPoint, getOffset } from './util/point'\nimport {\n  CircularBuffer,\n  clamp,\n  consoleError,\n  convertToUnit,\n  deepEqual,\n  destructComputed,\n  flipAlign,\n  flipCorner,\n  flipSide,\n  getAxis,\n  getScrollParents,\n  IN_BROWSER,\n  isFixedPosition,\n  isFunction,\n  isNumber,\n  isString,\n  nullifyTransforms,\n  parseAnchor,\n  propsFactory,\n} from '@/util'\nimport { Box, getElementBox, getOverflow, getTargetBox } from '@/util/box'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { Anchor } from '@/util'\n\nexport interface LocationStrategyData {\n  contentEl: Ref<HTMLElement | undefined>\n  target: Ref<HTMLElement | [x: number, y: number] | undefined>\n  isActive: Ref<boolean>\n  isRtl: Ref<boolean>\n}\n\nexport type LocationStrategyFunction = (\n  data: LocationStrategyData,\n  props: StrategyProps,\n  contentStyles: Ref<Record<string, string>>\n) => undefined | { updateLocation: (e?: Event) => void }\n\nconst locationStrategies = {\n  static: staticLocationStrategy, // specific viewport position, usually centered\n  connected: connectedLocationStrategy, // connected to a certain element\n}\n\nexport interface StrategyProps {\n  locationStrategy: keyof typeof locationStrategies | LocationStrategyFunction\n  location?: Anchor\n  origin: Anchor | 'auto' | 'overlap'\n  offset?: number | string | number[]\n  stickToTarget?: boolean\n  viewportMargin?: number | string\n  maxHeight?: number | string\n  maxWidth?: number | string\n  minHeight?: number | string\n  minWidth?: number | string\n}\n\nexport const makeLocationStrategyProps = propsFactory({\n  locationStrategy: {\n    type: [String, Function] as PropType<StrategyProps['locationStrategy']>,\n    default: 'static',\n    validator: (val: any) => isFunction(val) || val in locationStrategies,\n  },\n  location: String as PropType<StrategyProps['location']>,\n  origin: {\n    type: String as PropType<StrategyProps['origin']>,\n    default: 'auto',\n  },\n  offset: [Number, String, Array] as PropType<StrategyProps['offset']>,\n  stickToTarget: Boolean,\n  viewportMargin: {\n    type: [Number, String],\n    default: 12,\n  },\n}, 'VOverlay-location-strategies')\n\nexport function useLocationStrategies (\n  props: StrategyProps,\n  data: LocationStrategyData\n) {\n  const contentStyles = ref({})\n  const updateLocation = ref<(e: Event) => void>()\n\n  if (IN_BROWSER) {\n    useToggleScope(() => !!(data.isActive.value && props.locationStrategy), reset => {\n      watch(() => props.locationStrategy, reset)\n      onScopeDispose(() => {\n        window.removeEventListener('resize', onResize)\n        visualViewport?.removeEventListener('resize', onVisualResize)\n        visualViewport?.removeEventListener('scroll', onVisualScroll)\n        updateLocation.value = undefined\n        if (data.isActive.value) {\n          contentStyles.value = {}\n        }\n      })\n\n      window.addEventListener('resize', onResize, { passive: true })\n      visualViewport?.addEventListener('resize', onVisualResize, { passive: true })\n      visualViewport?.addEventListener('scroll', onVisualScroll, { passive: true })\n\n      if (isFunction(props.locationStrategy)) {\n        updateLocation.value = props.locationStrategy(data, props, contentStyles)?.updateLocation\n      } else {\n        updateLocation.value = locationStrategies[props.locationStrategy](data, props, contentStyles)?.updateLocation\n      }\n    })\n  }\n\n  function onResize (e: Event) {\n    updateLocation.value?.(e)\n  }\n\n  function onVisualResize (e: Event) {\n    updateLocation.value?.(e)\n  }\n\n  function onVisualScroll (e: Event) {\n    updateLocation.value?.(e)\n  }\n\n  return {\n    contentStyles,\n    updateLocation,\n  }\n}\n\nexport function getStaticLocationClasses (location: Anchor | undefined) {\n  if (!location) return undefined\n\n  const normalized = location.includes(' ') ? location : `${location} center`\n\n  let justify = 'center'\n  let align = 'center'\n  const inline: Record<string, string> = { left: 'start', start: 'start', right: 'end', end: 'end' }\n  const block: Record<string, string> = { top: 'start', bottom: 'end' }\n\n  for (const token of normalized.split(' ')) {\n    if (token in inline) justify = inline[token]\n    else if (token in block) align = block[token]\n  }\n\n  return {\n    [`v-overlay--justify-${justify}`]: true,\n    [`v-overlay--align-${align}`]: true,\n  }\n}\n\nfunction staticLocationStrategy (data: LocationStrategyData, props: StrategyProps, contentStyles: Ref<Record<string, string>>) {\n  // Positioning is handled by CSS flexbox alignment on the overlay root, keeping\n  // the content's insets `auto` so user utility classes (justify-*, align-*) compose.\n  // Here we only forward an explicit `origin` to `transform-origin` for the transition.\n  function updateStyles () {\n    if (props.origin !== 'auto' && props.origin !== 'overlap') {\n      const { side, align } = parseAnchor(props.origin, data.isRtl.value)\n      contentStyles.value = { transformOrigin: `${side} ${align}` }\n    } else {\n      contentStyles.value = {}\n    }\n  }\n\n  watch([() => props.origin, data.isRtl], updateStyles, { immediate: true })\n\n  return { updateLocation: () => {} }\n}\n\n/** Resolve a CSS length the browser understands (calc(), min(), vw, …) to pixels */\nfunction resolveCssLength (value: string, container: HTMLElement, isWidth: boolean) {\n  const probe = document.createElement('div')\n  probe.style.position = 'absolute'\n  probe.style.visibility = 'hidden'\n  probe.style[isWidth ? 'width' : 'height'] = value\n  container.appendChild(probe)\n  const size = isWidth ? probe.offsetWidth : probe.offsetHeight\n  container.removeChild(probe)\n  return size > 0 ? size : Infinity\n}\n\n/** Get size of element ignoring max-width/max-height */\nfunction getIntrinsicSize (el: HTMLElement, isRtl: boolean) {\n  // const scrollables = new Map<Element, [number, number]>()\n  // el.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 = el.style.maxWidth\n  // const initialMaxHeight = el.style.maxHeight\n  // el.style.removeProperty('max-width')\n  // el.style.removeProperty('max-height')\n\n  /* eslint-disable-next-line sonarjs/prefer-immediate-return */\n  const contentBox = nullifyTransforms(el)\n\n  const computed = getComputedStyle(el)\n  function offset (side: 'left' | 'right' | 'top') {\n    return el.style[side] ? parseFloat(computed[side]) || 0 : 0\n  }\n\n  if (isRtl) {\n    contentBox.x += offset('right')\n  } else {\n    contentBox.x -= offset('left')\n  }\n  contentBox.y -= offset('top')\n\n  // el.style.maxWidth = initialMaxWidth\n  // el.style.maxHeight = initialMaxHeight\n  // scrollables.forEach((position, el) => {\n  //   el.scrollTo(...position)\n  // })\n\n  return contentBox\n}\n\nfunction connectedLocationStrategy (data: LocationStrategyData, props: StrategyProps, contentStyles: Ref<Record<string, string>>) {\n  const activatorFixed = Array.isArray(data.target.value) || isFixedPosition(data.target.value)\n  if (activatorFixed) {\n    Object.assign(contentStyles.value, {\n      position: 'fixed',\n      top: 0,\n      [data.isRtl.value ? 'right' : 'left']: 0,\n    })\n  }\n\n  const { preferredAnchor, preferredOrigin } = destructComputed(() => {\n    const parsedAnchor = parseAnchor(props.location ?? 'bottom', data.isRtl.value)\n    const parsedOrigin =\n      props.origin === 'overlap' ? parsedAnchor\n      : props.origin === 'auto' ? flipSide(parsedAnchor)\n      : parseAnchor(props.origin, data.isRtl.value)\n\n    // Some combinations of props may produce an invalid origin\n    if (parsedAnchor.side === parsedOrigin.side && parsedAnchor.align === flipAlign(parsedOrigin).align) {\n      return {\n        preferredAnchor: flipCorner(parsedAnchor),\n        preferredOrigin: flipCorner(parsedOrigin),\n      }\n    } else {\n      return {\n        preferredAnchor: parsedAnchor,\n        preferredOrigin: parsedOrigin,\n      }\n    }\n  })\n\n  const [getMinWidth, getMinHeight, getMaxWidth, getMaxHeight] =\n    (['minWidth', 'minHeight', 'maxWidth', 'maxHeight'] as const).map(key => {\n      const isWidth = key.endsWith('Width')\n      return () => {\n        const raw = props[key]\n        if (raw == null) return Infinity\n\n        const container = (data.contentEl.value?.parentElement ?? document.documentElement) as HTMLElement\n\n        if (isNumber(raw) || /^-?[\\d.]+(?:px)?$/.test(raw.trim())) {\n          return parseFloat(raw as string)\n        }\n        if (raw.endsWith('%')) {\n          // resolve against the overlay container, like CSS would\n          const box = getElementBox(container)\n          return parseFloat(raw) * (isWidth ? box.width : box.height) / 100\n        }\n        // let the browser resolve viewport units, calc(), min(), max(), clamp(), etc.\n        return resolveCssLength(raw, container, isWidth)\n      }\n    })\n\n  const offset = computed(() => {\n    if (Array.isArray(props.offset)) {\n      return props.offset\n    }\n    if (isString(props.offset)) {\n      const offset = props.offset.split(' ').map(parseFloat)\n      if (offset.length < 2) offset.push(0)\n      return offset\n    }\n    return isNumber(props.offset) ? [props.offset, 0] : [0, 0]\n  })\n\n  let observe = false\n  let lastFrame = -1\n  const flipped = new CircularBuffer<{ x: boolean, y: boolean }>(4)\n  const observer = new ResizeObserver(() => {\n    if (!observe) return\n\n    // Detect consecutive frames\n    requestAnimationFrame(newTime => {\n      if (newTime !== lastFrame) flipped.clear()\n      requestAnimationFrame(newNewTime => {\n        lastFrame = newNewTime\n      })\n    })\n\n    if (flipped.isFull) {\n      const values = flipped.values()\n      if (\n        deepEqual(values.at(-1), values.at(-3)) &&\n        !deepEqual(values.at(-1), values.at(-2))\n      ) {\n        // Flipping is causing a container resize loop\n        return\n      }\n    }\n\n    const result = updateLocation()\n    if (result) flipped.push(result.flipped)\n  })\n\n  let targetBox = new Box({ x: 0, y: 0, width: 0, height: 0 })\n\n  watch(data.target, (newTarget, oldTarget) => {\n    if (oldTarget && !Array.isArray(oldTarget)) observer.unobserve(oldTarget)\n    if (!Array.isArray(newTarget)) {\n      if (newTarget) observer.observe(newTarget)\n    } else if (!deepEqual(newTarget, oldTarget)) {\n      updateLocation()\n    }\n  }, { immediate: true })\n\n  watch(data.contentEl, (newContentEl, oldContentEl) => {\n    if (oldContentEl) observer.unobserve(oldContentEl)\n    if (newContentEl) observer.observe(newContentEl)\n  }, { immediate: true })\n\n  onScopeDispose(() => {\n    observer.disconnect()\n  })\n\n  // eslint-disable-next-line max-statements\n  function updateLocation () {\n    observe = false\n    requestAnimationFrame(() => observe = true)\n\n    if (!data.target.value || !data.contentEl.value) return\n\n    if (\n      Array.isArray(data.target.value) ||\n      data.target.value.offsetParent ||\n      data.target.value.getClientRects().length\n    ) {\n      targetBox = getTargetBox(data.target.value)\n    } // Otherwise target element is hidden, use last known value\n\n    const contentBox = getIntrinsicSize(data.contentEl.value, data.isRtl.value)\n    const scrollParents = getScrollParents(data.contentEl.value)\n    const viewportMargin = Number(props.viewportMargin)\n    const minWidth = getMinWidth()\n    const minHeight = getMinHeight()\n    const maxWidth = getMaxWidth()\n    const maxHeight = getMaxHeight()\n\n    if (!scrollParents.length) {\n      scrollParents.push(document.documentElement)\n      if (!(data.contentEl.value.style.top && data.contentEl.value.style.left)) {\n        contentBox.x -= parseFloat(document.documentElement.style.getPropertyValue('--v-body-scroll-x') || 0)\n        contentBox.y -= parseFloat(document.documentElement.style.getPropertyValue('--v-body-scroll-y') || 0)\n      }\n    }\n\n    const viewport = scrollParents.reduce<Box>((box: Box | undefined, el) => {\n      const scrollBox = getElementBox(el)\n\n      if (box) {\n        return new Box({\n          x: Math.max(box.left, scrollBox.left),\n          y: Math.max(box.top, scrollBox.top),\n          width: Math.min(box.right, scrollBox.right) - Math.max(box.left, scrollBox.left),\n          height: Math.min(box.bottom, scrollBox.bottom) - Math.max(box.top, scrollBox.top),\n        })\n      }\n      return scrollBox\n    }, undefined!)\n\n    if (props.stickToTarget) {\n      viewport.x += Math.min(viewportMargin, targetBox.x)\n      viewport.y += Math.min(viewportMargin, targetBox.y)\n      viewport.width = Math.max(\n        viewport.width - viewportMargin * 2,\n        targetBox.x + targetBox.width - viewportMargin\n      )\n      viewport.height = Math.max(\n        viewport.height - viewportMargin * 2,\n        targetBox.y + targetBox.height - viewportMargin\n      )\n    } else {\n      viewport.x += viewportMargin\n      viewport.y += viewportMargin\n      viewport.width -= viewportMargin * 2\n      viewport.height -= viewportMargin * 2\n    }\n\n    let placement = {\n      anchor: preferredAnchor.value,\n      origin: preferredOrigin.value,\n    }\n\n    function checkOverflow (_placement: typeof placement) {\n      const box = new Box(contentBox)\n      const targetPoint = anchorToPoint(_placement.anchor, targetBox)\n      const contentPoint = anchorToPoint(_placement.origin, box)\n\n      let { x, y } = getOffset(targetPoint, contentPoint)\n\n      switch (_placement.anchor.side) {\n        case 'top': y -= offset.value[0]; break\n        case 'bottom': y += offset.value[0]; break\n        case 'left': x -= offset.value[0]; break\n        case 'right': x += offset.value[0]; break\n      }\n\n      switch (_placement.anchor.align) {\n        case 'top': y -= offset.value[1]; break\n        case 'bottom': y += offset.value[1]; break\n        case 'left': x -= offset.value[1]; break\n        case 'right': x += offset.value[1]; break\n      }\n\n      box.x += x\n      box.y += y\n\n      box.width = Math.min(box.width, maxWidth)\n      box.height = Math.min(box.height, maxHeight)\n\n      const overflows = getOverflow(box, viewport)\n\n      return { overflows, x, y }\n    }\n\n    let x = 0; let y = 0\n    const available = { x: 0, y: 0 }\n    const flipped = { x: false, y: false }\n    let resets = -1\n    while (true) {\n      if (resets++ > 10) {\n        consoleError('Infinite loop detected in connectedLocationStrategy')\n        break\n      }\n\n      const { x: _x, y: _y, overflows } = checkOverflow(placement)\n\n      x += _x\n      y += _y\n\n      contentBox.x += _x\n      contentBox.y += _y\n\n      // flip\n      {\n        const axis = getAxis(placement.anchor)\n        const hasOverflowX = overflows.x.before || overflows.x.after\n        const hasOverflowY = overflows.y.before || overflows.y.after\n\n        let reset = false\n        ;['x', 'y'].forEach(key => {\n          if (\n            (key === 'x' && hasOverflowX && !flipped.x) ||\n            (key === 'y' && hasOverflowY && !flipped.y)\n          ) {\n            const newPlacement = { anchor: { ...placement.anchor }, origin: { ...placement.origin } }\n            const flip = key === 'x'\n              ? axis === 'y' ? flipAlign : flipSide\n              : axis === 'y' ? flipSide : flipAlign\n            newPlacement.anchor = flip(newPlacement.anchor)\n            newPlacement.origin = flip(newPlacement.origin)\n            const { overflows: newOverflows } = checkOverflow(newPlacement)\n            if (\n              (newOverflows[key].before <= overflows[key].before &&\n                newOverflows[key].after <= overflows[key].after) ||\n              (newOverflows[key].before + newOverflows[key].after <\n                (overflows[key].before + overflows[key].after) / 2)\n            ) {\n              placement = newPlacement\n              reset = flipped[key] = true\n            }\n          }\n        })\n        if (reset) continue\n      }\n\n      // shift\n      if (overflows.x.before) {\n        x += overflows.x.before\n        contentBox.x += overflows.x.before\n      }\n      if (overflows.x.after) {\n        x -= overflows.x.after\n        contentBox.x -= overflows.x.after\n      }\n      if (overflows.y.before) {\n        y += overflows.y.before\n        contentBox.y += overflows.y.before\n      }\n      if (overflows.y.after) {\n        y -= overflows.y.after\n        contentBox.y -= overflows.y.after\n      }\n\n      // size\n      {\n        const overflows = getOverflow(contentBox, viewport)\n        available.x = viewport.width - overflows.x.before - overflows.x.after\n        available.y = viewport.height - overflows.y.before - overflows.y.after\n\n        x += overflows.x.before\n        contentBox.x += overflows.x.before\n        y += overflows.y.before\n        contentBox.y += overflows.y.before\n      }\n\n      break\n    }\n\n    const axis = getAxis(placement.anchor)\n    const transformOrigin = props.origin !== 'auto' && props.origin !== 'overlap'\n      ? parseAnchor(props.origin, data.isRtl.value)\n      : placement.origin\n\n    Object.assign(contentStyles.value, {\n      '--v-overlay-anchor-origin': `${placement.anchor.side} ${placement.anchor.align}`,\n      transformOrigin: `${transformOrigin.side} ${transformOrigin.align}`,\n      // transform: `translate(${pixelRound(x)}px, ${pixelRound(y)}px)`,\n      top: convertToUnit(pixelRound(y)),\n      left: data.isRtl.value ? undefined : convertToUnit(pixelRound(x)),\n      right: data.isRtl.value ? convertToUnit(pixelRound(-x)) : undefined,\n      minWidth: convertToUnit(axis === 'y' ? Math.min(minWidth, targetBox.width) : minWidth),\n      maxWidth: convertToUnit(pixelCeil(clamp(available.x, minWidth === Infinity ? 0 : minWidth, maxWidth))),\n      maxHeight: convertToUnit(pixelCeil(clamp(available.y, minHeight === Infinity ? 0 : minHeight, maxHeight))),\n    })\n\n    return {\n      available,\n      contentBox,\n      flipped,\n    }\n  }\n\n  watch(\n    () => [\n      preferredAnchor.value,\n      preferredOrigin.value,\n      props.origin,\n      props.offset,\n      props.minWidth,\n      props.minHeight,\n      props.maxWidth,\n      props.maxHeight,\n    ],\n    () => updateLocation(),\n  )\n\n  nextTick(() => {\n    const result = updateLocation()\n\n    // TODO: overflowing content should only require a single updateLocation call\n    // Icky hack to make sure the content is positioned consistently\n    if (!result) return\n    const { available, contentBox } = result\n    if (contentBox.height > available.y) {\n      requestAnimationFrame(() => {\n        updateLocation()\n        requestAnimationFrame(() => {\n          updateLocation()\n        })\n      })\n    }\n  })\n\n  return { updateLocation }\n}\n\nfunction pixelRound (val: number) {\n  return Math.round(val * devicePixelRatio) / devicePixelRatio\n}\n\nfunction pixelCeil (val: number) {\n  return Math.ceil(val * devicePixelRatio) / devicePixelRatio\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 { effectScope, onScopeDispose, watchEffect } from 'vue'\nimport { requestNewFrame } from './requestNewFrame'\nimport { convertToUnit, getScrollParents, hasScrollbar, IN_BROWSER, isFunction, propsFactory } from '@/util'\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  targetEl: Ref<HTMLElement | undefined>\n  target: Ref<HTMLElement | [x: number, y: number] | undefined>\n  isActive: Ref<boolean>\n  updateLocation: Ref<((e: Event) => void) | undefined>\n}\n\nexport type ScrollStrategyFunction = (data: ScrollStrategyData, props: StrategyProps, scope: EffectScope) => void\n\nconst scrollStrategies = {\n  none: null,\n  close: closeScrollStrategy,\n  block: blockScrollStrategy,\n  reposition: repositionScrollStrategy,\n}\n\nexport interface StrategyProps {\n  scrollStrategy: keyof typeof scrollStrategies | ScrollStrategyFunction\n  contained: boolean | undefined\n}\n\nexport const makeScrollStrategyProps = propsFactory({\n  scrollStrategy: {\n    type: [String, Function] as PropType<StrategyProps['scrollStrategy']>,\n    default: 'block',\n    validator: (val: any) => isFunction(val) || val in scrollStrategies,\n  },\n}, 'VOverlay-scroll-strategies')\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 new Promise(resolve => setTimeout(resolve))\n    scope.active && scope.run(() => {\n      if (isFunction(props.scrollStrategy)) {\n        props.scrollStrategy(data, props, scope!)\n      } else {\n        scrollStrategies[props.scrollStrategy]?.(data, props, scope!)\n      }\n    })\n  })\n\n  onScopeDispose(() => {\n    scope?.stop()\n  })\n}\n\nfunction closeScrollStrategy (data: ScrollStrategyData) {\n  function onScroll (e: Event) {\n    data.isActive.value = false\n  }\n\n  bindScroll(getTargetEl(data.target.value, data.contentEl.value), onScroll)\n}\n\nfunction blockScrollStrategy (data: ScrollStrategyData, props: StrategyProps) {\n  const offsetParent = data.root.value?.offsetParent\n  const target = getTargetEl(data.target.value, data.contentEl.value)\n  const scrollElements = [...new Set([\n    ...getScrollParents(target, props.contained ? offsetParent : undefined),\n    ...getScrollParents(data.contentEl.value, props.contained ? offsetParent : undefined),\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)(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-body-scroll-x', convertToUnit(-el.scrollLeft))\n    el.style.setProperty('--v-body-scroll-y', convertToUnit(-el.scrollTop))\n\n    if (el !== document.documentElement || getComputedStyle(el).overflowY !== 'scroll') {\n      el.style.setProperty('--v-scrollbar-offset', convertToUnit(scrollbarWidth))\n    }\n\n    el.classList.add('v-overlay-scroll-blocked')\n  })\n\n  onScopeDispose(() => {\n    scrollElements.forEach((el, i) => {\n      const x = parseFloat(el.style.getPropertyValue('--v-body-scroll-x'))\n      const y = parseFloat(el.style.getPropertyValue('--v-body-scroll-y'))\n\n      const scrollBehavior = el.style.scrollBehavior\n\n      el.style.scrollBehavior = 'auto'\n      el.style.removeProperty('--v-body-scroll-x')\n      el.style.removeProperty('--v-body-scroll-y')\n      el.style.removeProperty('--v-scrollbar-offset')\n      el.classList.remove('v-overlay-scroll-blocked')\n\n      el.scrollLeft = -x\n      el.scrollTop = -y\n\n      el.style.scrollBehavior = scrollBehavior\n    })\n    if (scrollableParent) {\n      data.root.value!.classList.remove('v-overlay--scroll-blocked')\n    }\n  })\n}\n\nfunction repositionScrollStrategy (data: ScrollStrategyData, props: StrategyProps, scope: EffectScope) {\n  let slow = false\n  let raf = -1\n  let ric = -1\n\n  function update (e: Event) {\n    requestNewFrame(() => {\n      const start = performance.now()\n      data.updateLocation.value?.(e)\n      const time = performance.now() - start\n      slow = time / (1000 / 60) > 2\n    })\n  }\n\n  ric = (typeof requestIdleCallback === 'undefined' ? (cb: Function) => cb() : requestIdleCallback)(() => {\n    scope.run(() => {\n      bindScroll(getTargetEl(data.target.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\n  onScopeDispose(() => {\n    typeof cancelIdleCallback !== 'undefined' && cancelIdleCallback(ric)\n    cancelAnimationFrame(raf)\n  })\n}\n\nfunction getTargetEl (\n  target: HTMLElement | [x: number, y: number] | undefined,\n  contentEl: HTMLElement | undefined,\n) {\n  return Array.isArray(target)\n    ? document.elementsFromPoint(...target).find(el => !contentEl?.contains(el))\n    : target ?? contentEl\n}\n\nfunction bindScroll (el: Element | 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 { defer, 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  let clearDelay: (() => void) = () => {}\n\n  function runDelay (isOpening: boolean, options?: { minDelay: number }) {\n    clearDelay?.()\n\n    const delay = isOpening ? props.openDelay : props.closeDelay\n\n    const normalizedDelay = Math.max(\n      options?.minDelay ?? 0,\n      Number(delay ?? 0)\n    )\n\n    return new Promise(resolve => {\n      clearDelay = defer(normalizedDelay, () => {\n        cb?.(isOpening)\n        resolve(isOpening)\n      })\n    })\n  }\n\n  function runOpenDelay () {\n    return runDelay(true)\n  }\n\n  function runCloseDelay (options?: { minDelay: number }) {\n    return runDelay(false, options)\n  }\n\n  return {\n    clearDelay,\n    runOpenDelay,\n    runCloseDelay,\n  }\n}\n","// Components\nimport { VMenuSymbol } from '@/components/VMenu/shared'\n\n// Composables\nimport { makeDelayProps, useDelay } from '@/composables/delay'\n\n// Utilities\nimport {\n  computed,\n  effectScope,\n  inject,\n  mergeProps,\n  nextTick,\n  onScopeDispose,\n  ref,\n  watch,\n  watchEffect,\n} from 'vue'\nimport {\n  bindProps,\n  getActiveElement,\n  getCurrentInstance,\n  IN_BROWSER,\n  isString,\n  matchesSelector,\n  propsFactory,\n  templateRef,\n  unbindProps,\n} from '@/util'\n\n// Types\nimport type {\n  ComponentInternalInstance,\n  ComponentPublicInstance,\n  EffectScope,\n  PropType,\n  Ref,\n} from 'vue'\nimport type { DelayProps } from '@/composables/delay'\n\ninterface ActivatorProps extends DelayProps {\n  target: 'parent' | 'cursor' | (string & {}) | Element | ComponentPublicInstance | [x: number, y: number] | undefined\n  activator: 'parent' | (string & {}) | Element | ComponentPublicInstance | undefined\n  activatorProps: Record<string, any>\n\n  openOnClick: boolean | undefined\n  openOnHover: boolean\n  openOnFocus: boolean | undefined\n\n  closeOnContentClick: boolean\n}\n\nexport const makeActivatorProps = propsFactory({\n  target: [String, Object] as PropType<ActivatorProps['target']>,\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  closeOnContentClick: Boolean,\n\n  ...makeDelayProps(),\n}, 'VOverlay-activator')\n\nexport function useActivator (\n  props: ActivatorProps,\n  { isActive, isTop, contentEl, isSubmenu = false }: {\n    isActive: Ref<boolean>\n    isTop: Ref<boolean>\n    contentEl: Ref<HTMLElement | undefined>\n    isSubmenu?: boolean\n  }\n) {\n  const vm = getCurrentInstance('useActivator')\n  const activatorEl = ref<HTMLElement>()\n\n  const parentMenu = inject(VMenuSymbol, null)\n\n  let isHovered = false\n  let isFocused = false\n  let firstEnter = true\n  const openedByHover = ref(false)\n  let delayCallbackFiredOpen = false\n\n  // a submenu chain collapses on mouseleave only when its root was hover-opened\n  const shouldCloseOnLeave = () => !isSubmenu || (parentMenu?.rootOpenedByHover?.() ?? openedByHover.value)\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 (\n      value === (\n        (props.openOnHover && isHovered) ||\n        (openOnFocus.value && isFocused)\n      ) && !(props.openOnHover && isActive.value && !isTop.value)\n    ) {\n      if (isActive.value !== value) {\n        firstEnter = true\n        if (value) {\n          delayCallbackFiredOpen = true\n          openedByHover.value = isHovered && props.openOnHover\n        }\n      }\n      isActive.value = value\n    }\n  })\n\n  let reopenLock = false\n  watch(isActive, v => {\n    if (!v) {\n      reopenLock = true\n      setTimeout(() => reopenLock = false, 50)\n      openedByHover.value = false\n      delayCallbackFiredOpen = false\n      return\n    }\n    if (!delayCallbackFiredOpen) {\n      openedByHover.value = false\n    }\n    delayCallbackFiredOpen = false\n  })\n\n  const cursorTarget = ref<[x: number, y: number]>()\n  const availableEvents = {\n    onClick: (e: MouseEvent) => {\n      if (reopenLock && !isActive.value) return\n      e.stopPropagation()\n      activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n      if (!isActive.value) {\n        cursorTarget.value = [e.clientX, e.clientY]\n      }\n      isActive.value = !isActive.value\n    },\n    onMouseenter: (e: MouseEvent) => {\n      isHovered = true\n      activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n      if (props.target === 'cursor') {\n        cursorTarget.value = [e.clientX, e.clientY]\n      }\n      runOpenDelay()\n    },\n    onMousemove: (e: MouseEvent) => {\n      cursorTarget.value = [e.clientX, e.clientY]\n    },\n    onMouseleave: (e: MouseEvent) => {\n      isHovered = false\n      if (props.target === 'cursor') isFocused = false\n      if (shouldCloseOnLeave()) runCloseDelay()\n    },\n    onFocus: (e: FocusEvent) => {\n      if (reopenLock) return\n      if (matchesSelector(e.target as HTMLElement, ':focus-visible') === false) return\n\n      isFocused = true\n      e.stopPropagation()\n      activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n\n      runOpenDelay()\n    },\n    onBlur: (e: FocusEvent) => {\n      // Body parks from clicks on empty areas inside content also count as \"still focused\".\n      const next = e.relatedTarget as Element | null\n      if (!next || contentEl.value?.contains(next)) return\n\n      isFocused = false\n      e.stopPropagation()\n\n      runCloseDelay({ minDelay: 1 })\n    },\n  }\n\n  const activatorEvents = computed(() => {\n    const events: Partial<typeof availableEvents> = {}\n\n    if (openOnClick.value) {\n      events.onClick = availableEvents.onClick\n    }\n    if (props.openOnHover) {\n      events.onMouseenter = availableEvents.onMouseenter\n      events.onMouseleave = availableEvents.onMouseleave\n      if (props.target === 'cursor' && !openOnClick.value) {\n        events.onMousemove = availableEvents.onMousemove\n      }\n    }\n    if (openOnFocus.value) {\n      events.onFocus = availableEvents.onFocus\n      events.onBlur = availableEvents.onBlur\n    }\n\n    return events\n  })\n\n  const contentEvents = computed(() => {\n    const events: Record<string, EventListener> = {}\n\n    if (props.openOnHover) {\n      events.onMouseenter = () => {\n        isHovered = true\n        runOpenDelay()\n      }\n      events.onMouseleave = () => {\n        isHovered = false\n        if (shouldCloseOnLeave()) runCloseDelay()\n      }\n    }\n\n    if (openOnFocus.value) {\n      events.onFocusin = (e: Event) => {\n        if (!(e.target as HTMLElement).matches(':focus-visible')) return\n        isFocused = true\n        runOpenDelay()\n      }\n      events.onFocusout = (e: Event) => {\n        const next = (e as FocusEvent).relatedTarget as Element | null\n        if (!next || contentEl.value?.contains(next)) return\n\n        isFocused = false\n        runCloseDelay({ minDelay: 1 })\n      }\n    }\n\n    if (props.closeOnContentClick) {\n      const menu = inject(VMenuSymbol, null)\n      events.onClick = () => {\n        isActive.value = false\n        menu?.closeParents()\n      }\n    }\n\n    return events\n  })\n\n  const scrimEvents = computed(() => {\n    const events: Record<string, EventListener> = {}\n\n    if (props.openOnHover) {\n      events.onMouseenter = () => {\n        if (firstEnter) {\n          isHovered = true\n          firstEnter = false\n          runOpenDelay()\n        }\n      }\n      events.onMouseleave = () => {\n        isHovered = false\n        if (shouldCloseOnLeave()) runCloseDelay()\n      }\n    }\n\n    return events\n  })\n\n  watch(isTop, val => {\n    if (\n      val &&\n      shouldCloseOnLeave() &&\n      (\n        (props.openOnHover && !isHovered && (!openOnFocus.value || !isFocused)) ||\n        (openOnFocus.value && !isFocused && (!props.openOnHover || !isHovered))\n      ) &&\n      !contentEl.value?.contains(getActiveElement())\n    ) {\n      runCloseDelay()\n    }\n  })\n\n  watch(isActive, val => {\n    if (!val) {\n      setTimeout(() => {\n        cursorTarget.value = undefined\n      })\n    }\n  }, { flush: 'post' })\n\n  const activatorRef = templateRef()\n  watchEffect(() => {\n    if (!activatorRef.value) return\n\n    nextTick(() => {\n      activatorEl.value = activatorRef.el\n    })\n  })\n\n  const targetRef = templateRef()\n  const target = computed(() => {\n    if (props.target === 'cursor' && cursorTarget.value) return cursorTarget.value\n    if (targetRef.value) return targetRef.el\n    return getTarget(props.target, vm) || activatorEl.value\n  })\n  const targetEl = computed(() => {\n    return Array.isArray(target.value)\n      ? undefined\n      : target.value\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, vm, { activatorEl, activatorEvents })\n      })\n    } else if (scope) {\n      scope.stop()\n    }\n  }, { flush: 'post', immediate: true })\n\n  onScopeDispose(() => {\n    scope?.stop()\n  })\n\n  return {\n    activatorEl,\n    activatorRef,\n    target,\n    targetEl,\n    targetRef,\n    activatorEvents,\n    contentEvents,\n    scrimEvents,\n    openedByHover,\n  }\n}\n\nfunction _useActivator (\n  props: ActivatorProps,\n  vm: ComponentInternalInstance,\n  { activatorEl, activatorEvents }: Pick<ReturnType<typeof useActivator>, 'activatorEl' | 'activatorEvents'>\n) {\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    bindProps(el, mergeProps(activatorEvents.value, _props))\n  }\n\n  function unbindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n    if (!el) return\n\n    unbindProps(el, mergeProps(activatorEvents.value, _props))\n  }\n\n  function getActivator (selector = props.activator): HTMLElement | undefined {\n    const activator = getTarget(selector, vm)\n\n    // The activator should only be a valid element (Ignore comments and text nodes)\n    activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : undefined\n\n    return activatorEl.value\n  }\n}\n\nfunction getTarget<T extends 'parent' | string | Element | ComponentPublicInstance | [x: number, y: number] | undefined> (\n  selector: T,\n  vm: ComponentInternalInstance\n): HTMLElement | undefined | (T extends any[] ? [x: number, y: number] : never) {\n  if (!selector) return\n\n  let target\n  if (selector === 'parent') {\n    let el = vm?.proxy?.$el?.parentNode\n    while (el?.hasAttribute('data-no-activator')) {\n      el = el.parentNode\n    }\n    target = el\n  } else if (isString(selector)) {\n    // Selector\n    target = document.querySelector(selector)\n  } else if ('$el' in selector) {\n    // Component (ref)\n    target = selector.$el\n  } else {\n    // HTMLElement | Element | [x, y]\n    target = selector\n  }\n\n  return target\n}\n","// Utilities\nimport { onScopeDispose, toRef, toValue, watch } from 'vue'\nimport { focusableChildren, getActiveElement, IN_BROWSER, propsFactory } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\n// Types\nexport interface FocusTrapProps {\n  retainFocus: boolean\n  captureFocus: boolean\n  disableInitialFocus?: boolean\n}\n\n// Composables\nexport const makeFocusTrapProps = propsFactory({\n  retainFocus: Boolean,\n  captureFocus: Boolean,\n  /** @deprecated */\n  disableInitialFocus: Boolean,\n}, 'focusTrap')\n\nconst registry = new Map<symbol, {\n  isActive: Ref<boolean>\n  contentEl: Ref<HTMLElement | undefined>\n}>()\nlet subscribers = 0\n\nfunction lastActiveTrap (): HTMLElement | undefined {\n  let el: HTMLElement | undefined\n  for (const { isActive, contentEl } of registry.values()) {\n    if (isActive.value && contentEl.value) el = contentEl.value\n  }\n  return el\n}\n\nfunction onKeydown (e: KeyboardEvent) {\n  const activeElement = getActiveElement() as HTMLElement | null\n  if (e.key !== 'Tab' || !activeElement) return\n\n  const parentTraps = Array.from(registry.values())\n    .filter(({ isActive, contentEl }) => isActive.value && contentEl.value?.contains(activeElement))\n    .map(x => x.contentEl.value)\n\n  let closestTrap: HTMLElement | undefined\n  let currentNode: HTMLElement | null = activeElement\n  while (currentNode) {\n    if (parentTraps.includes(currentNode)) {\n      closestTrap = currentNode\n      break\n    }\n    currentNode = currentNode.parentElement\n  }\n\n  if (!closestTrap) {\n    const trapEl = lastActiveTrap() // assuming last registered == topmost panel\n    if (!trapEl) return\n\n    const focusable = focusableChildren(trapEl).filter(x => x.tabIndex >= 0)\n    e.preventDefault()\n    if (!focusable.length) {\n      trapEl.focus({ preventScroll: true })\n    } else if (e.shiftKey) {\n      focusable[focusable.length - 1].focus()\n    } else {\n      focusable[0].focus()\n    }\n    return\n  }\n\n  const focusable = focusableChildren(closestTrap)\n    // excluding VListItems with tabindex=\"-2\"\n    .filter(x => x.tabIndex >= 0)\n\n  if (!focusable.length) return\n\n  if (\n    focusable.length === 1 &&\n    focusable[0].classList.contains('v-list') &&\n    focusable[0].contains(activeElement)\n  ) {\n    e.preventDefault()\n    return\n  }\n\n  const firstElement = focusable[0]\n  const lastElement = focusable[focusable.length - 1]\n\n  // contentEl wrapper (tabindex=-1) counts as \"before first\"\n  const atFirst = (\n    activeElement === firstElement ||\n    activeElement === closestTrap ||\n    (firstElement.classList.contains('v-list') && firstElement.contains(activeElement))\n  )\n\n  const atLast = (\n    activeElement === lastElement ||\n    (lastElement.classList.contains('v-list') && lastElement.contains(activeElement))\n  )\n\n  if (e.shiftKey && atFirst) {\n    e.preventDefault()\n    lastElement.focus()\n  }\n\n  if (!e.shiftKey && atLast) {\n    e.preventDefault()\n    firstElement.focus()\n  }\n}\n\nexport function useFocusTrap (\n  props: FocusTrapProps,\n  { isActive, localTop, contentEl }: {\n    isActive: Ref<boolean>\n    localTop: Readonly<Ref<boolean>>\n    contentEl: Readonly<Ref<HTMLElement | undefined>>\n  }\n) {\n  const trapId = Symbol('trap')\n\n  let focusTrapSuppressed = false\n  let focusTrapSuppressionTimeout = -1\n\n  async function onPointerdown () {\n    focusTrapSuppressed = true\n    focusTrapSuppressionTimeout = window.setTimeout(() => {\n      focusTrapSuppressed = false\n    }, 100)\n  }\n\n  async function captureOnFocus (e: FocusEvent) {\n    const before = e.relatedTarget as HTMLElement | null\n    const after = e.target as HTMLElement | null\n\n    document.removeEventListener('pointerdown', onPointerdown)\n    document.removeEventListener('keydown', captureOnKeydown)\n\n    await new Promise(resolve => requestAnimationFrame(resolve))\n\n    if (\n      isActive.value &&\n      !focusTrapSuppressed &&\n      before !== after &&\n      contentEl.value &&\n      // We're the menu without open submenus or overlays\n      toValue(localTop) &&\n      // It isn't the document or the container body\n      ![document, contentEl.value].includes(after!) &&\n      // It isn't inside the container body\n      !contentEl.value.contains(after)\n    ) {\n      const focusable = focusableChildren(contentEl.value)\n      focusable[0]?.focus()\n    }\n  }\n\n  function captureOnKeydown (e: KeyboardEvent) {\n    if (e.key !== 'Tab') return\n    document.removeEventListener('keydown', captureOnKeydown)\n\n    if (\n      isActive.value &&\n      contentEl.value &&\n      e.target &&\n      !contentEl.value.contains(e.target as Element)\n    ) {\n      const allFocusableElements = focusableChildren(document.documentElement)\n\n      if (\n        (e.shiftKey && e.target === allFocusableElements.at(0)) ||\n        (!e.shiftKey && e.target === allFocusableElements.at(-1))\n      ) {\n        const focusable = focusableChildren(contentEl.value)\n        if (focusable.length > 0) {\n          e.preventDefault()\n          focusable[0].focus()\n        }\n      }\n    }\n  }\n\n  const shouldCapture = toRef(() => isActive.value && props.captureFocus && !props.disableInitialFocus)\n\n  if (IN_BROWSER) {\n    watch(() => props.retainFocus, val => {\n      if (val) {\n        registry.set(trapId, { isActive, contentEl })\n      } else {\n        registry.delete(trapId)\n      }\n    }, { immediate: true })\n\n    watch(shouldCapture, val => {\n      if (val) {\n        document.addEventListener('pointerdown', onPointerdown)\n        document.addEventListener('focusin', captureOnFocus, { once: true })\n        document.addEventListener('keydown', captureOnKeydown)\n      } else {\n        document.removeEventListener('pointerdown', onPointerdown)\n        document.removeEventListener('focusin', captureOnFocus)\n        document.removeEventListener('keydown', captureOnKeydown)\n      }\n    }, { immediate: true })\n\n    if (subscribers++ < 1) {\n      document.addEventListener('keydown', onKeydown)\n    }\n  }\n\n  onScopeDispose(() => {\n    registry.delete(trapId)\n    if (!IN_BROWSER) return\n    clearTimeout(focusTrapSuppressionTimeout)\n    document.removeEventListener('pointerdown', onPointerdown)\n    document.removeEventListener('focusin', captureOnFocus)\n    document.removeEventListener('keydown', captureOnKeydown)\n\n    if (--subscribers < 1) {\n      document.removeEventListener('keydown', onKeydown)\n    }\n  })\n}\n","// Composables\nimport { useDisplay } from '@/composables/display'\n\n// Utilities\nimport { onMounted, shallowRef } from 'vue'\nimport { IN_BROWSER } from '@/util'\n\nexport function useHydration () {\n  if (!IN_BROWSER) return shallowRef(false)\n\n  const { ssr } = useDisplay()\n\n  if (ssr) {\n    const isMounted = shallowRef(false)\n    onMounted(() => {\n      isMounted.value = true\n    })\n    return isMounted\n  } else {\n    return shallowRef(true)\n  }\n}\n","// Utilities\nimport { shallowRef, toRef, watch } from 'vue'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\nexport const makeLazyProps = propsFactory({\n  eager: Boolean,\n}, 'lazy')\n\nexport function useLazy (props: { eager: boolean }, active: Ref<boolean>) {\n  const isBooted = shallowRef(false)\n  const hasContent = toRef(() => 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","// Utilities\nimport { getCurrentInstance } from '@/util'\n\nexport function useScopeId () {\n  const vm = getCurrentInstance('useScopeId')\n\n  const scopeId = vm!.vnode.scopeId\n\n  return { scopeId: scopeId ? { [scopeId]: '' } : undefined }\n}\n","// Composables\nimport { useToggleScope } from '@/composables/toggleScope'\n\n// Utilities\nimport {\n  inject,\n  onScopeDispose,\n  provide,\n  reactive,\n  readonly,\n  shallowRef,\n  toRaw,\n  toRef,\n  toValue,\n  watchEffect,\n} from 'vue'\nimport { getCurrentInstance } from '@/util'\n\n// Types\nimport type { InjectionKey, MaybeRefOrGetter, Ref } from 'vue'\n\nconst StackSymbol: InjectionKey<StackProvide> = Symbol.for('vuetify:stack')\n\ninterface StackProvide {\n  activeChildren: Set<number>\n}\n\nconst globalStack = reactive<[uid: number, zIndex: number][]>([])\n\nexport function useStack (\n  isActive: Readonly<Ref<boolean>>,\n  zIndex: MaybeRefOrGetter<string | number>,\n  disableGlobalStack: boolean\n) {\n  const vm = getCurrentInstance('useStack')\n  const createStackEntry = !disableGlobalStack\n\n  const parent = inject(StackSymbol, undefined)\n  const stack: StackProvide = reactive({\n    activeChildren: new Set<number>(),\n  })\n  provide(StackSymbol, stack)\n\n  const _zIndex = shallowRef(Number(toValue(zIndex)))\n  useToggleScope(isActive, () => {\n    const lastZIndex = globalStack.at(-1)?.[1]\n    _zIndex.value = lastZIndex ? lastZIndex + 10 : Number(toValue(zIndex))\n\n    if (createStackEntry) {\n      globalStack.push([vm.uid, _zIndex.value])\n    }\n\n    parent?.activeChildren.add(vm.uid)\n\n    onScopeDispose(() => {\n      if (createStackEntry) {\n        const idx = toRaw(globalStack).findIndex(v => v[0] === vm.uid)\n        globalStack.splice(idx, 1)\n      }\n\n      parent?.activeChildren.delete(vm.uid)\n    })\n  })\n\n  const globalTop = shallowRef(true)\n  if (createStackEntry) {\n    watchEffect(() => {\n      const _isTop = globalStack.at(-1)?.[0] === vm.uid\n      setTimeout(() => globalTop.value = _isTop)\n    })\n  }\n\n  const localTop = toRef(() => !stack.activeChildren.size)\n\n  return {\n    globalTop: readonly(globalTop),\n    localTop,\n    stackStyles: toRef(() => ({ zIndex: _zIndex.value })),\n  }\n}\n","// Utilities\nimport { attachedRoot, isFunction } from '@/util'\n\n// Types\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, ignoreActive = false): 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 || (!ignoreActive && 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 value = binding.value\n  const elements = ((isFunction(value) ? undefined : 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 value = binding.value\n  const isActive = (isFunction(value) ? undefined : value.closeConditional) || defaultConditional\n\n  return isActive(e)\n}\n\nfunction directive (e: MouseEvent, el: HTMLElement, binding: ClickOutsideDirectiveBinding) {\n  const handler = isFunction(binding.value) ? binding.value : binding.value.handler\n\n  // Clicks in the Shadow DOM change their target while using setTimeout, so the original target is saved here\n  e.shadowTarget = e.target\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      // Ignore the active check here so ancestors of the top overlay (e.g. a menu\n      // with an open submenu, which isn't localTop) still record that the click\n      // landed outside, letting the close cascade propagate. #20003\n      el._clickOutside!.lastMousedownWasOutside = checkEvent(e as MouseEvent, el, binding, true)\n    }\n\n    handleShadow(el, (app: HTMLElement) => {\n      app.addEventListener('click', onClick, true)\n      app.addEventListener('mousedown', onMousedown, true)\n    })\n    if (!el._clickOutside) {\n      el._clickOutside = {\n        lastMousedownWasOutside: false,\n      }\n    }\n\n    el._clickOutside[binding.instance!.$.uid] = {\n      onClick,\n      onMousedown,\n    }\n  },\n\n  beforeUnmount (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// Components\nimport { VMenuSymbol } from '@/components/VMenu/shared'\n\n// Composables\nimport { getStaticLocationClasses, makeLocationStrategyProps, useLocationStrategies } from './locationStrategies'\nimport { makeScrollStrategyProps, useScrollStrategies } from './scrollStrategies'\nimport { makeActivatorProps, useActivator } from './useActivator'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeFocusTrapProps, useFocusTrap } from '@/composables/focusTrap'\nimport { useHydration } from '@/composables/hydration'\nimport { makeLazyProps, useLazy } from '@/composables/lazy'\nimport { useRtl } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useBackButton, useRouter } from '@/composables/router'\nimport { useScopeId } from '@/composables/scopeId'\nimport { useStack } from '@/composables/stack'\nimport { useTeleport } from '@/composables/teleport'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useToggleScope } from '@/composables/toggleScope'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Directives\nimport vClickOutside from '@/directives/click-outside'\n\n// Utilities\nimport {\n  computed,\n  inject,\n  mergeProps,\n  onBeforeUnmount,\n  provide,\n  ref,\n  Teleport,\n  Transition,\n  watch,\n  watchEffect,\n} from 'vue'\nimport {\n  animate,\n  convertToUnit,\n  focusableChildren,\n  genericComponent,\n  getActiveElement,\n  getCurrentInstance,\n  getScrollParent,\n  IN_BROWSER,\n  isString,\n  omit,\n  propsFactory,\n  standardEasing,\n  useRender,\n} from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { BackgroundColorData } from '@/composables/color'\nimport type { TemplateRef } from '@/util'\n\nconst overlayActivators = new WeakMap<Element, HTMLElement>()\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 = {\n  default: { isActive: Ref<boolean> }\n  activator: { isActive: boolean, props: Record<string, any>, targetRef: TemplateRef }\n}\n\nexport const makeVOverlayProps = propsFactory({\n  absolute: Boolean,\n  attach: [Boolean, String, Object] as PropType<boolean | string | Element>,\n  closeOnBack: {\n    type: Boolean,\n    default: true,\n  },\n  contained: Boolean,\n  contentClass: null,\n  contentProps: null,\n  disabled: Boolean,\n  opacity: [Number, String],\n  noClickAnimation: Boolean,\n  modelValue: Boolean,\n  persistent: Boolean,\n  scrim: {\n    type: [Boolean, String],\n    default: true,\n  },\n  zIndex: {\n    type: [Number, String],\n    default: 2000,\n  },\n\n  ...makeActivatorProps(),\n  ...makeComponentProps(),\n  ...makeDimensionProps(),\n  ...makeLazyProps(),\n  ...makeLocationStrategyProps(),\n  ...makeScrollStrategyProps(),\n  ...makeFocusTrapProps(),\n  ...makeThemeProps(),\n  ...makeTransitionProps(),\n}, 'VOverlay')\n\nexport const VOverlay = genericComponent<OverlaySlots>()({\n  name: 'VOverlay',\n\n  directives: { vClickOutside },\n\n  inheritAttrs: false,\n\n  props: {\n    _disableGlobalStack: Boolean,\n    _submenu: Boolean,\n\n    ...omit(makeVOverlayProps(), ['disableInitialFocus']),\n  },\n\n  emits: {\n    'click:outside': (e: MouseEvent) => true,\n    'update:modelValue': (value: boolean) => true,\n    keydown: (e: KeyboardEvent) => true,\n    afterEnter: () => true,\n    afterLeave: () => true,\n  },\n\n  setup (props, { slots, attrs, emit }) {\n    const vm = getCurrentInstance('VOverlay')\n    const root = ref<HTMLElement>()\n    const scrimEl = ref<HTMLElement>()\n    const contentEl = ref<HTMLElement>()\n    const model = useProxiedModel(props, 'modelValue')\n    const isActive = computed({\n      get: () => model.value,\n      set: v => {\n        if (!(v && props.disabled)) model.value = v\n      },\n    })\n    const { themeClasses } = provideTheme(props)\n    const { rtlClasses, isRtl } = useRtl()\n    const { hasContent, onAfterLeave: _onAfterLeave } = useLazy(props, isActive)\n    const scrimColor = useBackgroundColor(() => {\n      return isString(props.scrim) ? props.scrim : null\n    })\n    const { globalTop, localTop, stackStyles } = useStack(isActive, () => props.zIndex, props._disableGlobalStack)\n    const {\n      activatorEl, activatorRef,\n      target, targetEl, targetRef,\n      activatorEvents,\n      contentEvents,\n      scrimEvents,\n      openedByHover,\n    } = useActivator(props, { isActive, isTop: localTop, contentEl, isSubmenu: props._submenu })\n    const { teleportTarget } = useTeleport(() => {\n      const target = props.attach || props.contained\n      if (target) return target\n      const rootNode = activatorEl?.value?.getRootNode() || vm.proxy?.$el?.getRootNode()\n      if (rootNode instanceof ShadowRoot) return rootNode\n      return false\n    })\n    const { dimensionStyles } = useDimension(props)\n    const isMounted = useHydration()\n    const staticLocationClasses = computed(() => {\n      return props.locationStrategy === 'static'\n        ? getStaticLocationClasses(props.location)\n        : undefined\n    })\n    const { scopeId } = useScopeId()\n\n    watch(() => props.disabled, v => {\n      if (v) isActive.value = false\n    })\n\n    const { contentStyles, updateLocation } = useLocationStrategies(props, {\n      isRtl,\n      contentEl,\n      target,\n      isActive,\n    })\n    useScrollStrategies(props, {\n      root,\n      contentEl,\n      targetEl,\n      target,\n      isActive,\n      updateLocation,\n    })\n\n    // self-reference or the closest ancestor\n    const menu = inject(VMenuSymbol, null)\n\n    // Non-menu overlays (dialog, tooltip, …) sit under a host menu in the component tree even\n    // when teleported. Scrub the inject chain so closeParents stops at that boundary.\n    if (vm.parent?.type?.name !== 'VMenu') {\n      provide(VMenuSymbol, null)\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      if (!props.scrim) menu?.closeParents(e)\n    }\n\n    function closeConditional (e: Event) {\n      return isActive.value && localTop.value && (\n        // If using scrim, only close if clicking on it rather than anything opened on top\n        !props.scrim || e.target === scrimEl.value || (e instanceof MouseEvent && e.shadowTarget === scrimEl.value)\n      )\n    }\n\n    useFocusTrap(props, { isActive, localTop, contentEl })\n\n    let openedWithActivatorFocus = false\n\n    watchEffect(() => {\n      if (!contentEl.value) return\n      if (activatorEl.value) overlayActivators.set(contentEl.value, activatorEl.value)\n      else overlayActivators.delete(contentEl.value)\n    })\n\n    function ownsFocus (activeElement: Element | null): boolean {\n      let current = activeElement\n      const visited = new Set<Element>()\n      while (current) {\n        const el = current.closest('.v-overlay__content')\n        if (!el || visited.has(el)) return false\n        if (el === contentEl.value) return true\n        visited.add(el)\n        current = overlayActivators.get(el) ?? null\n      }\n      return false\n    }\n\n    function returnFocusToActivator () {\n      const el = activatorEl.value\n      if (!el || !el.isConnected) return\n      // Skip submenus; the outermost close in the cascade will restore focus.\n      if (el.closest('.v-overlay__content')) return\n\n      if (contentEl.value?._clickOutside?.lastMousedownWasOutside) return\n\n      const activeEl = getActiveElement()\n      const focusWasInOverlay =\n        ((!activeEl || activeEl === document.body) && openedWithActivatorFocus) ||\n        activeEl === el ||\n        el.contains(activeEl) ||\n        ownsFocus(activeEl)\n      if (!focusWasInOverlay) return\n\n      const parent = el.parentElement\n      const focusableInParent = parent ? focusableChildren(parent) : []\n      let target: HTMLElement | undefined\n      if (focusableInParent.includes(el)) {\n        target = el\n      } else {\n        const focusableWithin = focusableChildren(el)\n        target = focusableWithin.find(x => x.tagName === 'INPUT' || x.tagName === 'TEXTAREA') ?? focusableWithin[0]\n      }\n      target?.focus({ preventScroll: true })\n    }\n\n    watch(isActive, val => {\n      if (val) {\n        const activeEl = getActiveElement()\n        const el = activatorEl.value\n        openedWithActivatorFocus = !!el && (activeEl === el || el.contains(activeEl))\n        if (contentEl.value) contentEl.value.inert = false\n        // eager reuses contentEl, so the mousedown that opened us would linger until the next one\n        if (contentEl.value?._clickOutside) {\n          contentEl.value._clickOutside.lastMousedownWasOutside = false\n        }\n      } else {\n        if (contentEl.value) contentEl.value.inert = true\n        returnFocusToActivator()\n      }\n    }, { flush: 'post' })\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    onBeforeUnmount(() => {\n      if (!IN_BROWSER) return\n\n      window.removeEventListener('keydown', onKeydown)\n    })\n\n    function onKeydown (e: KeyboardEvent) {\n      if (e.key === 'Escape' && globalTop.value) {\n        if (!contentEl.value?.contains(getActiveElement())) {\n          emit('keydown', e)\n        }\n        if (!props.persistent) {\n          isActive.value = false\n          if (contentEl.value?.contains(getActiveElement())) {\n            activatorEl.value?.focus()\n          }\n        } else animateClick()\n      }\n    }\n    function onKeydownSelf (e: KeyboardEvent) {\n      if (e.key === 'Escape' && !globalTop.value) return\n\n      emit('keydown', e)\n    }\n\n    const router = useRouter()\n    useToggleScope(() => props.closeOnBack, () => {\n      useBackButton(router, () => {\n        if (globalTop.value && isActive.value) {\n          if (!props.persistent) isActive.value = false\n          else animateClick()\n          return false\n        }\n        return undefined\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(contentEl.value, [\n        { transformOrigin: 'center' },\n        { transform: 'scale(1.03)' },\n        { transformOrigin: 'center' },\n      ], {\n        duration: 150,\n        easing: standardEasing,\n      })\n    }\n\n    function onAfterEnter () {\n      emit('afterEnter')\n    }\n\n    function onAfterLeave () {\n      _onAfterLeave()\n      emit('afterLeave')\n    }\n\n    useRender(() => (\n      <>\n        { slots.activator?.({\n          isActive: isActive.value,\n          targetRef,\n          props: mergeProps({\n            ref: activatorRef,\n          }, activatorEvents.value, props.activatorProps),\n        })}\n\n        { isMounted.value && hasContent.value && (\n          <Teleport\n            disabled={ !teleportTarget.value }\n            to={ teleportTarget.value }\n          >\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                staticLocationClasses.value,\n                themeClasses.value,\n                rtlClasses.value,\n                props.class,\n              ]}\n              style={[\n                stackStyles.value,\n                {\n                  '--v-overlay-opacity': props.opacity,\n                  top: convertToUnit(top.value),\n                },\n                props.style,\n              ]}\n              ref={ root }\n              onKeydown={ onKeydownSelf }\n              { ...scopeId }\n              { ...attrs }\n            >\n              <Scrim\n                color={ scrimColor }\n                modelValue={ isActive.value && !!props.scrim }\n                ref={ scrimEl }\n                { ...scrimEvents.value }\n              />\n              <MaybeTransition\n                appear\n                persisted\n                transition={ props.transition }\n                target={ target.value }\n                onAfterEnter={ onAfterEnter }\n                onAfterLeave={ onAfterLeave }\n              >\n                <div\n                  ref={ contentEl }\n                  v-show={ isActive.value }\n                  v-click-outside={{\n                    handler: onClickOutside,\n                    closeConditional,\n                    include: () => {\n                      if (!isActive.value) return []\n                      return [\n                        activatorEl.value,\n                        // Submenu clicks count as \"inside\"; clicks in ancestor overlays (e.g. a host dialog) don't.\n                        ...Array.from(document.querySelectorAll('.v-overlay__content'))\n                          .filter(ownsFocus) as HTMLElement[],\n                      ]\n                    },\n                  }}\n                  class={[\n                    'v-overlay__content',\n                    props.contentClass,\n                  ]}\n                  style={[\n                    dimensionStyles.value,\n                    contentStyles.value,\n                  ]}\n                  { ...contentEvents.value }\n                  { ...props.contentProps }\n                >\n                  { slots.default?.({ isActive }) }\n                </div>\n              </MaybeTransition>\n            </div>\n          </Teleport>\n        )}\n      </>\n    ))\n\n    return {\n      activatorEl,\n      scrimEl,\n      target,\n      animateClick,\n      contentEl,\n      rootEl: root,\n      globalTop,\n      localTop,\n      updateLocation,\n      openedByHover,\n    }\n  },\n})\n\nexport type VOverlay = InstanceType<typeof VOverlay>\n","// Utilities\nimport { computed, warn } from 'vue'\nimport { IN_BROWSER, isString } from '@/util'\n\nexport function useTeleport (target: () => (boolean | string | ParentNode)) {\n  const teleportTarget = computed(() => {\n    const _target = target()\n\n    if (_target === true || !IN_BROWSER) return undefined\n\n    const targetElement =\n      _target === false ? document.body\n      : isString(_target) ? document.querySelector(_target)\n      : _target\n\n    if (!targetElement) {\n      warn(`Unable to locate target ${_target}`)\n      return undefined\n    }\n\n    let container = [...targetElement.children].find(el => el.matches('.v-overlay-container'))\n\n    if (!container) {\n      container = document.createElement('div')\n      container.className = 'v-overlay-container'\n      targetElement.appendChild(container)\n    }\n\n    return container\n  })\n\n  return { teleportTarget }\n}\n","// Styles\nimport './VMenu.sass'\n\n// Components\nimport { VDialogTransition } from '@/components/transitions'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VOverlay } from '@/components/VOverlay'\nimport { makeVOverlayProps } from '@/components/VOverlay/VOverlay'\n\n// Composables\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useRtl } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useScopeId } from '@/composables/scopeId'\n\n// Utilities\nimport {\n  computed,\n  inject,\n  mergeProps,\n  onBeforeUnmount,\n  onDeactivated,\n  provide,\n  ref,\n  shallowRef, toRef,\n  useId,\n  watch,\n} from 'vue'\nimport { VMenuSymbol } from './shared'\nimport {\n  focusableChildren,\n  focusChild,\n  genericComponent,\n  getActiveElement,\n  getNextElement,\n  omit,\n  propsFactory,\n  useRender,\n} from '@/util'\n\n// Types\nimport type { OverlaySlots } from '@/components/VOverlay/VOverlay'\n\nexport const makeVMenuProps = propsFactory({\n  _disableKeys: Boolean,\n  id: String,\n  submenu: Boolean,\n  openOnArrow: {\n    type: Boolean,\n    default: true,\n  },\n\n  ...omit(makeVOverlayProps({\n    captureFocus: true,\n    closeDelay: 250,\n    closeOnContentClick: true,\n    locationStrategy: 'connected' as const,\n    location: undefined,\n    openDelay: 300,\n    scrim: false,\n    scrollStrategy: 'reposition' as const,\n    transition: { component: VDialogTransition },\n  }), ['absolute']),\n}, 'VMenu')\n\nexport const VMenu = genericComponent<OverlaySlots>()({\n  name: 'VMenu',\n\n  props: makeVMenuProps(),\n\n  emits: {\n    'update:modelValue': (value: boolean) => true,\n  },\n\n  setup (props, { slots }) {\n    const isActive = useProxiedModel(props, 'modelValue')\n    const { scopeId } = useScopeId()\n    const { isRtl } = useRtl()\n\n    const uid = useId()\n    const id = toRef(() => props.id || `v-menu-${uid}`)\n\n    const overlay = ref<VOverlay>()\n\n    const parent = inject(VMenuSymbol, null)\n    const openChildren = shallowRef(new Map<string, () => void>())\n    provide(VMenuSymbol, {\n      register (childUid, close) {\n        // Only one submenu open per level: close any already-open sibling first.\n        for (const [otherUid, closeOther] of [...openChildren.value]) {\n          if (otherUid !== childUid) closeOther()\n        }\n        openChildren.value.set(childUid, close)\n      },\n      unregister (childUid) {\n        openChildren.value.delete(childUid)\n      },\n      closeParents (e) {\n        const clickedOutside = !e || overlay.value?.contentEl?._clickOutside?.lastMousedownWasOutside\n\n        setTimeout(() => {\n          if (!openChildren.value.size &&\n            !props.persistent &&\n            clickedOutside\n          ) {\n            isActive.value = false\n            parent?.closeParents(e)\n          }\n        }, 40)\n      },\n      rootOpenedByHover: props.submenu && parent\n        ? parent.rootOpenedByHover\n        : () => overlay.value?.openedByHover ?? false,\n    })\n\n    onBeforeUnmount(() => parent?.unregister(uid))\n    onDeactivated(() => isActive.value = false)\n\n    watch(isActive, val => {\n      if (val) {\n        parent?.register(uid, () => { isActive.value = false })\n      } else {\n        parent?.unregister(uid)\n\n        // close a submenu branch\n        for (const [, closeChild] of [...openChildren.value]) closeChild()\n      }\n    }, { immediate: true })\n\n    function onKeydown (e: KeyboardEvent) {\n      if (props.disabled) return\n\n      if (e.key === 'Tab') {\n        if (props.submenu && !props.retainFocus) {\n          e.preventDefault()\n          isActive.value = false\n          overlay.value?.activatorEl?.focus()\n          return\n        }\n        const nextElement = getNextElement(\n          focusableChildren(overlay.value?.contentEl as Element, false),\n          e.shiftKey ? 'prev' : 'next',\n          (el: HTMLElement) => el.tabIndex >= 0\n        )\n        if (!nextElement && !props.retainFocus) {\n          isActive.value = false\n        }\n      } else if (props.submenu && e.key === (isRtl.value ? 'ArrowRight' : 'ArrowLeft')) {\n        isActive.value = false\n        overlay.value?.activatorEl?.focus()\n      }\n    }\n\n    function setInitialFocus (e: KeyboardEvent) {\n      const el = overlay.value?.contentEl\n\n      if (!el || !isActive.value) return\n      if (!['ArrowUp', 'ArrowDown'].includes(e.key)) return\n\n      const focusable = focusableChildren(el)\n      const focusTarget = e.key === 'ArrowUp' ? focusable.at(-1) : focusable[0]\n      const focusTargetRole = focusTarget?.getAttribute('role') ?? ''\n\n      const selectedOption = ['option', 'listbox'].includes(focusTargetRole) &&\n        focusable.find(\n          child => child.getAttribute('role') === 'option' &&\n            child.getAttribute('aria-selected') === 'true' &&\n            child.offsetParent != null\n        )\n\n      if (selectedOption) {\n        selectedOption.focus()\n      } else {\n        focusChild(el, e.key === 'ArrowDown' ? 'next' : 'prev')\n      }\n    }\n\n    function onActivatorKeydown (e: KeyboardEvent) {\n      if (props.disabled || props._disableKeys || e.isComposing) return\n\n      const el = overlay.value?.contentEl\n      if (el && isActive.value) {\n        if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n          if (!props.openOnArrow) return\n          e.preventDefault()\n          e.stopImmediatePropagation()\n          focusChild(el, e.key === 'ArrowDown' ? 'next' : 'prev')\n        } else if (props.submenu) {\n          if (e.key === (isRtl.value ? 'ArrowRight' : 'ArrowLeft')) {\n            isActive.value = false\n            overlay.value?.activatorEl?.focus()\n          } else if (e.key === (isRtl.value ? 'ArrowLeft' : 'ArrowRight')) {\n            e.preventDefault()\n            focusChild(el, 'first')\n          }\n        }\n      } else if (\n        props.submenu\n          ? e.key === (isRtl.value ? 'ArrowLeft' : 'ArrowRight')\n          : props.openOnArrow && ['ArrowDown', 'ArrowUp'].includes(e.key)\n      ) {\n        isActive.value = true\n        e.preventDefault()\n        focusContentWhenReady(e)\n      }\n    }\n\n    function focusContentWhenReady (e: KeyboardEvent, attempt = 1) {\n      if (!isActive.value) return\n      const el = overlay.value?.contentEl\n      if (el?.contains(getActiveElement())) return\n      if (el && focusableChildren(el).length) {\n        if (['ArrowUp', 'ArrowDown'].includes(e.key)) {\n          setInitialFocus(e)\n        } else {\n          onActivatorKeydown(e)\n        }\n        if (el.contains(getActiveElement())) return\n      }\n      if (attempt <= 10) {\n        requestAnimationFrame(() => focusContentWhenReady(e, attempt + 1))\n      }\n    }\n\n    const activatorProps = computed(() =>\n      mergeProps({\n        'aria-haspopup': 'menu',\n        'aria-expanded': String(isActive.value),\n        'aria-controls': id.value,\n        'aria-owns': id.value,\n        onKeydown: onActivatorKeydown,\n      }, props.activatorProps)\n    )\n\n    useRender(() => {\n      const overlayProps = VOverlay.filterProps(props)\n\n      return (\n        <VOverlay\n          ref={ overlay }\n          id={ id.value }\n          class={[\n            'v-menu',\n            props.class,\n          ]}\n          style={ props.style }\n          { ...overlayProps }\n          v-model={ isActive.value }\n          absolute\n          _submenu={ props.submenu }\n          activatorProps={ activatorProps.value }\n          location={ props.location ?? (props.submenu ? 'end' : 'bottom') }\n          onKeydown={ onKeydown }\n          { ...scopeId }\n        >\n          {{\n            activator: slots.activator,\n            default: (...args) => (\n              <VDefaultsProvider root=\"VMenu\">\n                { slots.default?.(...args) }\n              </VDefaultsProvider>\n            ),\n          }}\n        </VOverlay>\n      )\n    })\n\n    return forwardRefs({ id, ΨopenChildren: openChildren }, overlay)\n  },\n})\n\nexport type VMenu = InstanceType<typeof VMenu>\n","// Styles\nimport './VSheet.sass'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeLocationProps, useLocation } from '@/composables/location'\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 { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVSheetProps = propsFactory({\n  color: String,\n\n  ...makeBorderProps(),\n  ...makeComponentProps(),\n  ...makeDimensionProps(),\n  ...makeElevationProps(),\n  ...makeLocationProps(),\n  ...makePositionProps(),\n  ...makeRoundedProps(),\n  ...makeTagProps(),\n  ...makeThemeProps(),\n}, 'VSheet')\n\nexport const VSheet = genericComponent()({\n  name: 'VSheet',\n\n  props: makeVSheetProps(),\n\n  setup (props, { slots }) {\n    const { themeClasses } = provideTheme(props)\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)\n    const { borderClasses } = useBorder(props)\n    const { dimensionStyles } = useDimension(props)\n    const { elevationClasses } = useElevation(props)\n    const { locationStyles } = useLocation(props)\n    const { positionClasses } = usePosition(props)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n\n    useRender(() => (\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          props.class,\n        ]}\n        style={[\n          backgroundColorStyles.value,\n          dimensionStyles.value,\n          locationStyles.value,\n          roundedStyles.value,\n          props.style,\n        ]}\n        v-slots={ slots }\n      />\n    ))\n\n    return {}\n  },\n})\n\nexport type VSheet = InstanceType<typeof VSheet>\n","// Styles\nimport './VCounter.sass'\n\n// Components\nimport { VSlideYTransition } from '@/components/transitions'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { shallowRef, toRef, watch } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { Component } from 'vue'\n\nexport const makeVCounterProps = propsFactory({\n  active: Boolean,\n  disabled: Boolean,\n  max: [Number, String],\n  value: {\n    type: [Number, String],\n    default: 0,\n  },\n\n  ...makeComponentProps(),\n  ...makeTransitionProps({\n    transition: { component: VSlideYTransition as Component },\n  }),\n}, 'VCounter')\n\nexport type VCounterSlot = {\n  counter: string\n  max: string | number | undefined\n  value: string | number | undefined\n}\n\ntype VCounterSlots = {\n  default: VCounterSlot\n}\n\nexport const VCounter = genericComponent<VCounterSlots>()({\n  name: 'VCounter',\n\n  functional: true,\n\n  props: makeVCounterProps(),\n\n  setup (props, { slots }) {\n    const lastMax = shallowRef(props.max) // to show limit until it slides out\n    watch(() => props.max, val => val != null && (lastMax.value = val))\n    const max = toRef(() => props.active ? props.max : lastMax.value)\n\n    const counter = toRef(() => {\n      return max.value ? `${props.value} / ${max.value}` : String(props.value)\n    })\n\n    useRender(() => (\n      <MaybeTransition transition={ props.transition } appear>\n        <div\n          v-show={ props.active }\n          class={[\n            'v-counter',\n            {\n              'text-error': max.value && !props.disabled &&\n                parseFloat(props.value) > parseFloat(max.value),\n            },\n            props.class,\n          ]}\n          style={ props.style }\n        >\n          { slots.default\n            ? slots.default({\n              counter: counter.value,\n              max: max.value,\n              value: props.value,\n            })\n            : counter.value\n          }\n        </div>\n      </MaybeTransition>\n    ))\n\n    return {}\n  },\n})\n\nexport type VCounter = InstanceType<typeof VCounter>\n","// Components\nimport { VLabel } from '@/components/VLabel'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVFieldLabelProps = propsFactory({\n  floating: Boolean,\n\n  ...makeComponentProps(),\n}, 'VFieldLabel')\n\nexport const VFieldLabel = genericComponent()({\n  name: 'VFieldLabel',\n\n  props: makeVFieldLabelProps(),\n\n  setup (props, { slots }) {\n    useRender(() => (\n      <VLabel\n        class={[\n          'v-field-label',\n          { 'v-field-label--floating': props.floating },\n          props.class,\n        ]}\n        style={ props.style }\n        v-slots={ slots }\n      />\n    ))\n\n    return {}\n  },\n})\n\nexport type VFieldLabel = InstanceType<typeof VFieldLabel>\n","// Styles\nimport './VField.sass'\n\n// Components\nimport { VFieldLabel } from './VFieldLabel'\nimport { VExpandXTransition } from '@/components/transitions'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { useInputIcon } from '@/components/VInput/InputIcon'\n\n// Composables\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeFocusProps, useFocus } from '@/composables/focus'\nimport { IconValue } from '@/composables/icons'\nimport { LoaderSlot, makeLoaderProps, useLoader } from '@/composables/loader'\nimport { useRtl } from '@/composables/locale'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed, ref, toRef, useId, watch } from 'vue'\nimport {\n  animate,\n  convertToUnit,\n  EventProp,\n  genericComponent,\n  getActiveElement,\n  isString,\n  nullifyTransforms,\n  PREFERS_REDUCED_MOTION,\n  propsFactory,\n  standardEasing,\n  useRender,\n} from '@/util'\nimport { Box } from '@/util/box'\n\n// Types\nimport type { ComputedRef, PropType, Ref } from 'vue'\nimport type { ClassValue } from '@/composables/component'\nimport type { LoaderSlotProps } from '@/composables/loader'\nimport type { GenericProps } from '@/util'\n\nconst allowedVariants = ['underlined', 'outlined', 'filled', 'solo', 'solo-inverted', 'solo-filled', 'plain'] as const\ntype Variant = typeof allowedVariants[number]\n\nexport interface DefaultInputSlot {\n  isActive: Ref<boolean>\n  isFocused: Ref<boolean>\n  iconColor: ComputedRef<string | undefined>\n  controlRef: Ref<HTMLElement | undefined>\n  focus: () => void\n  blur: () => void\n}\n\nexport interface VFieldSlot extends DefaultInputSlot {\n  props: Record<string, unknown> & {\n    class?: ClassValue\n  }\n}\n\nexport const makeVFieldProps = propsFactory({\n  appendInnerIcon: IconValue,\n  bgColor: String,\n  clearable: Boolean,\n  clearIcon: {\n    type: IconValue,\n    default: '$clear',\n  },\n  active: Boolean,\n  centerAffix: {\n    type: Boolean,\n    default: undefined,\n  },\n  color: String,\n  baseColor: String,\n  dirty: Boolean,\n  disabled: {\n    type: Boolean,\n    default: null,\n  },\n  glow: Boolean,\n  error: Boolean,\n  flat: Boolean,\n  iconColor: [Boolean, String],\n  label: String,\n  persistentClear: Boolean,\n  prependInnerIcon: IconValue,\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  'onClick:clear': EventProp<[MouseEvent]>(),\n  'onClick:appendInner': EventProp<[MouseEvent]>(),\n  'onClick:prependInner': EventProp<[MouseEvent]>(),\n\n  ...makeComponentProps(),\n  ...makeLoaderProps(),\n  ...makeRoundedProps(),\n  ...makeThemeProps(),\n}, 'VField')\n\nexport type VFieldSlots = {\n  clear: DefaultInputSlot & { props: Record<string, any> }\n  'prepend-inner': DefaultInputSlot\n  'append-inner': DefaultInputSlot\n  label: DefaultInputSlot & { label: string | undefined, props: Record<string, any> }\n  loader: LoaderSlotProps\n  default: VFieldSlot\n}\n\nexport const VField = genericComponent<new <T>(\n  props: {\n    modelValue?: T\n    'onUpdate:modelValue'?: (value: T) => void\n  },\n  slots: VFieldSlots\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VField',\n\n  inheritAttrs: false,\n\n  props: {\n    id: String,\n    details: Boolean,\n    labelId: String,\n\n    ...makeFocusProps(),\n    ...makeVFieldProps(),\n  },\n\n  emits: {\n    'update:focused': (focused: boolean) => true,\n    'update:modelValue': (value: any) => true,\n  },\n\n  setup (props, { attrs, emit, slots }) {\n    const { themeClasses } = provideTheme(props)\n    const { loaderClasses } = useLoader(props)\n    const { focusClasses, isFocused, focus, blur } = useFocus(props)\n    const { InputIcon } = useInputIcon(props)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n    const { rtlClasses } = useRtl()\n\n    const isActive = toRef(() => props.dirty || props.active)\n    const hasLabel = toRef(() => !!(props.label || slots.label))\n    const hasFloatingLabel = toRef(() => !props.singleLine && hasLabel.value)\n\n    const uid = useId()\n    const id = computed(() => props.id || `input-${uid}`)\n    const messagesId = toRef(() => !props.details ? undefined : `${id.value}-messages`)\n\n    const labelRef = ref<VFieldLabel>()\n    const floatingLabelRef = ref<VFieldLabel>()\n    const controlRef = ref<HTMLElement>()\n    const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant))\n    const color = computed(() => {\n      return props.error || props.disabled ? undefined\n        : isActive.value && isFocused.value ? props.color\n        : props.baseColor\n    })\n    const iconColor = computed(() => {\n      if (props.iconColor === true || (!props.iconColor && props.glow && isFocused.value)) return color.value\n      if (!props.iconColor || (props.glow && !isFocused.value)) return undefined\n\n      return props.iconColor\n    })\n\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.bgColor)\n    const { textColorClasses, textColorStyles } = useTextColor(color)\n\n    watch(isActive, val => {\n      if (hasFloatingLabel.value && !PREFERS_REDUCED_MOTION()) {\n        const el: HTMLElement = labelRef.value!.$el\n        const targetEl: HTMLElement = floatingLabelRef.value!.$el\n\n        requestAnimationFrame(() => {\n          const rect = nullifyTransforms(el)\n          const targetRect = new Box(targetEl)\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 style = getComputedStyle(el)\n          const targetStyle = getComputedStyle(targetEl)\n          const duration = parseFloat(style.transitionDuration) * 1000 || 150\n          const scale = parseFloat(targetStyle.getPropertyValue('--v-field-label-scale'))\n          const color = targetStyle.getPropertyValue('color')\n\n          el.style.visibility = 'visible'\n          targetEl.style.visibility = 'hidden'\n\n          animate(el, {\n            transform: `translate(${x}px, ${y}px) scale(${scale})`,\n            color,\n            ...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      }\n    }, { flush: 'post' })\n\n    const slotProps = computed<DefaultInputSlot>(() => ({\n      isActive,\n      isFocused,\n      controlRef,\n      iconColor,\n      blur,\n      focus,\n    }))\n\n    const floatingLabelProps = toRef(() => {\n      const ariaHidden = !isActive.value\n      return {\n        'aria-hidden': ariaHidden,\n        for: ariaHidden ? undefined : id.value,\n      }\n    })\n\n    const mainLabelProps = toRef(() => {\n      const ariaHidden = hasFloatingLabel.value && isActive.value\n      return {\n        'aria-hidden': ariaHidden,\n        for: ariaHidden ? undefined : id.value,\n      }\n    })\n\n    function onClick (e: MouseEvent) {\n      if (e.target !== getActiveElement()) {\n        e.preventDefault()\n      }\n    }\n\n    useRender(() => {\n      const isOutlined = props.variant === 'outlined'\n      const hasPrepend = !!(slots['prepend-inner'] || props.prependInnerIcon)\n      const hasClear = !!(props.clearable || slots.clear) && !props.disabled\n      const hasAppend = !!(slots['append-inner'] || props.appendInnerIcon || hasClear)\n      const label = () => (\n        slots.label\n          ? slots.label({\n            ...slotProps.value,\n            label: props.label,\n            props: { for: id.value },\n          })\n          : props.label\n      )\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--center-affix': props.centerAffix ?? !isPlainOrUnderlined.value,\n              'v-field--disabled': props.disabled,\n              'v-field--dirty': props.dirty,\n              'v-field--error': props.error,\n              'v-field--glow': props.glow,\n              'v-field--flat': props.flat,\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--no-label': !label(),\n              [`v-field--variant-${props.variant}`]: true,\n            },\n            themeClasses.value,\n            backgroundColorClasses.value,\n            focusClasses.value,\n            loaderClasses.value,\n            roundedClasses.value,\n            rtlClasses.value,\n            props.class,\n          ]}\n          style={[\n            backgroundColorStyles.value,\n            roundedStyles.value,\n            props.style,\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={ props.error ? 'error' : (isString(props.loading) ? props.loading : props.color) }\n            v-slots={{ default: slots.loader }}\n          />\n\n          { hasPrepend && (\n            <div key=\"prepend\" class=\"v-field__prepend-inner\">\n              { slots['prepend-inner']\n                ? slots['prepend-inner'](slotProps.value)\n                : (props.prependInnerIcon && (\n                  <InputIcon\n                    key=\"prepend-icon\"\n                    name=\"prependInner\"\n                    color={ iconColor.value }\n                  />\n                ))\n              }\n            </div>\n          )}\n\n          <div class=\"v-field__field\" data-no-activator=\"\">\n            {['filled', 'solo', 'solo-inverted', 'solo-filled'].includes(props.variant) && hasFloatingLabel.value && (\n              <VFieldLabel\n                key=\"floating-label\"\n                ref={ floatingLabelRef }\n                class={[textColorClasses.value]}\n                floating\n                { ...floatingLabelProps.value }\n                style={ textColorStyles.value }\n              >\n                { label() }\n              </VFieldLabel>\n            )}\n\n            { hasLabel.value && (\n              <VFieldLabel\n                key=\"label\"\n                ref={ labelRef }\n                id={ props.labelId }\n                { ...mainLabelProps.value }\n              >\n                { label() }\n              </VFieldLabel>\n            )}\n\n            { slots.default?.({\n              ...slotProps.value,\n              props: {\n                id: id.value,\n                class: 'v-field__input',\n                'aria-describedby': messagesId.value,\n              },\n              focus,\n              blur,\n            } as VFieldSlot) ?? (\n              <div\n                id={ id.value }\n                class=\"v-field__input\"\n                aria-describedby={ messagesId.value }\n              />\n            )}\n          </div>\n\n          { hasClear && (\n            <VExpandXTransition key=\"clear\">\n              <div\n                class=\"v-field__clearable\"\n                v-show={ props.dirty }\n                onMousedown={ (e: MouseEvent) => {\n                  e.preventDefault()\n                  e.stopPropagation()\n                }}\n              >\n              <VDefaultsProvider\n                defaults={{\n                  VIcon: {\n                    icon: props.clearIcon,\n                  },\n                }}\n              >\n                { slots.clear\n                  ? slots.clear({\n                    ...slotProps.value,\n                    props: {\n                      onFocus: focus,\n                      onBlur: blur,\n                      onClick: props['onClick:clear'],\n                      tabindex: -1,\n                    },\n                  })\n                  : (\n                    <InputIcon\n                      name=\"clear\"\n                      onFocus={ focus }\n                      onBlur={ blur }\n                      tabindex={ -1 }\n                    />\n                  )}\n                </VDefaultsProvider>\n              </div>\n            </VExpandXTransition>\n          )}\n\n          { hasAppend && (\n            <div key=\"append\" class=\"v-field__append-inner\">\n              { slots['append-inner']\n                ? slots['append-inner'](slotProps.value)\n                : (props.appendInnerIcon && (\n                  <InputIcon\n                    key=\"append-icon\"\n                    name=\"appendInner\"\n                    color={ iconColor.value }\n                  />\n                ))\n              }\n            </div>\n          )}\n\n          <div\n            class={[\n              'v-field__outline',\n              textColorClasses.value,\n            ]}\n            style={ textColorStyles.value }\n          >\n            { isOutlined && (\n              <>\n                <div class=\"v-field__outline__start\" />\n\n                { hasFloatingLabel.value && (\n                  <div class=\"v-field__outline__notch\">\n                    <VFieldLabel\n                      ref={ floatingLabelRef }\n                      floating\n                      { ...floatingLabelProps.value }\n                    >\n                      { label() }\n                    </VFieldLabel>\n                  </div>\n                )}\n\n                <div class=\"v-field__outline__end\" />\n              </>\n            )}\n\n            { isPlainOrUnderlined.value && hasFloatingLabel.value && (\n              <VFieldLabel ref={ floatingLabelRef } floating { ...floatingLabelProps.value }>\n                { label() }\n              </VFieldLabel>\n            )}\n          </div>\n        </div>\n      )\n    })\n\n    return {\n      controlRef,\n      fieldIconColor: iconColor,\n    }\n  },\n})\n\nexport type VField = InstanceType<typeof VField>\n","// Utilities\nimport { shallowRef, toRef, useId } from 'vue'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// Types\nexport interface InputAutocompleteProps {\n  autocomplete: 'suppress' | string | undefined\n  name?: string\n}\n\n// Composables\nexport const makeAutocompleteProps = propsFactory({\n  autocomplete: String as PropType<'suppress' | string>,\n}, 'autocomplete')\n\nexport function useAutocomplete (props: InputAutocompleteProps) {\n  const uniqueId = useId()\n  const reloadTrigger = shallowRef(0)\n\n  const isSuppressing = toRef(() => props.autocomplete === 'suppress')\n\n  const fieldName = toRef(() => {\n    if (!props.name) return undefined\n\n    return isSuppressing.value\n      ? `${props.name}-${uniqueId}-${reloadTrigger.value}`\n      : props.name\n  })\n\n  const fieldAutocomplete = toRef(() => {\n    return isSuppressing.value\n      ? 'off'\n      : props.autocomplete\n  })\n\n  return {\n    isSuppressing,\n    fieldAutocomplete,\n    fieldName,\n    update: () => reloadTrigger.value = new Date().getTime(),\n  }\n}\n","interface AutofocusProps {\n  autofocus: boolean\n}\n\nexport function useAutofocus (props: AutofocusProps) {\n  function onIntersect (\n    isIntersecting: boolean,\n    entries: IntersectionObserverEntry[]\n  ) {\n    if (!props.autofocus || !isIntersecting) return\n\n    const el = entries[0].target\n    const target = (el.matches('input,textarea') ? el : el.querySelector('input,textarea')) as HTMLElement | null\n\n    // Defer past overlay enter setup (e.g. VDialogTransition visibility:hidden)\n    setTimeout(() => target?.focus(), 50)\n  }\n\n  return {\n    onIntersect,\n  }\n}\n","// Styles\nimport './VTextField.sass'\n\n// Components\nimport { VCounter } from '@/components/VCounter/VCounter'\nimport { makeVFieldProps, VField } from '@/components/VField/VField'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\n\n// Composables\nimport { makeAutocompleteProps, useAutocomplete } from '@/composables/autocomplete'\nimport { useAutofocus } from '@/composables/autofocus'\nimport { useFocus } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport vIntersect from '@/directives/intersect'\n\n// Utilities\nimport { cloneVNode, computed, nextTick, ref, watch, withDirectives } from 'vue'\nimport {\n  callEvent,\n  filterInputAttrs,\n  genericComponent,\n  getActiveElement,\n  isFunction,\n  isNumber,\n  isString,\n  omit,\n  propsFactory,\n  useRender,\n} from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { VCounterSlot } from '@/components/VCounter/VCounter'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\n\nconst activeTypes = ['color', 'file', 'time', 'date', 'datetime-local', 'week', 'month']\n\nexport const makeVTextFieldProps = propsFactory({\n  autofocus: Boolean,\n  counter: {\n    type: [Boolean, Number, String] as PropType<boolean | number | string | null>,\n    default: undefined,\n  },\n  counterValue: [Number, Function] as PropType<number | ((value: any) => number)>,\n  prefix: String,\n  placeholder: String,\n  persistentPlaceholder: Boolean,\n  persistentCounter: Boolean,\n  suffix: String,\n  role: String,\n  type: {\n    type: String,\n    default: 'text',\n  },\n  modelModifiers: Object as PropType<Record<string, boolean>>,\n\n  ...makeAutocompleteProps(),\n  ...omit(makeVInputProps(), ['direction']),\n  ...makeVFieldProps(),\n}, 'VTextField')\n\nexport type VTextFieldSlots = Omit<VInputSlots & VFieldSlots, 'default'> & {\n  default: { id: Readonly<Ref<string>> }\n  counter: VCounterSlot\n}\n\nexport const VTextField = genericComponent<VTextFieldSlots>()({\n  name: 'VTextField',\n\n  directives: { vIntersect },\n\n  inheritAttrs: false,\n\n  props: makeVTextFieldProps(),\n\n  emits: {\n    'click:control': (e: MouseEvent) => true,\n    'mousedown:control': (e: MouseEvent) => true,\n    'update:focused': (focused: boolean) => true,\n    'update:modelValue': (val: string) => true,\n  },\n\n  setup (props, { attrs, emit, slots }) {\n    const model = useProxiedModel(props, 'modelValue', undefined, v => {\n      if (Object.is(v, -0)) return '-0'\n      return v\n    })\n    const { isFocused, focus, blur } = useFocus(props)\n    const { onIntersect } = useAutofocus(props)\n    const counterValue = computed(() => {\n      return isFunction(props.counterValue) ? props.counterValue(model.value)\n        : isNumber(props.counterValue) ? props.counterValue\n        : (model.value ?? '').toString().length\n    })\n    const max = computed(() => {\n      if (attrs.maxlength) return attrs.maxlength as unknown as undefined\n\n      if (\n        !props.counter ||\n        (!isNumber(props.counter) && !isString(props.counter))\n      ) return undefined\n\n      return props.counter\n    })\n\n    const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant))\n\n    const vInputRef = ref<VInput>()\n    const vFieldRef = ref<VField>()\n    const inputRef = ref<HTMLInputElement>()\n\n    // hack for Chrome to keep caret/selection\n    watch(() => props.type, () => void inputRef.value?.offsetHeight, { flush: 'post' })\n\n    const autocomplete = useAutocomplete(props)\n    const isActive = computed(() => (\n      activeTypes.includes(props.type) ||\n      props.persistentPlaceholder ||\n      isFocused.value ||\n      props.active\n    ))\n    function onFocus () {\n      if (autocomplete.isSuppressing.value) {\n        autocomplete.update()\n      }\n\n      if (!isFocused.value) focus()\n\n      nextTick(() => {\n        if (inputRef.value !== getActiveElement()) {\n          inputRef.value?.focus()\n        }\n      })\n    }\n    function onControlMousedown (e: MouseEvent) {\n      emit('mousedown:control', e)\n\n      if (e.target === inputRef.value) return\n\n      onFocus()\n      e.preventDefault()\n    }\n    function onControlClick (e: MouseEvent) {\n      emit('click:control', e)\n    }\n    function onClear (e: MouseEvent, reset: () => void) {\n      e.stopPropagation()\n\n      onFocus()\n\n      nextTick(() => {\n        reset()\n\n        callEvent(props['onClick:clear'], e)\n      })\n    }\n    function onInput (e: Event) {\n      const el = e.target as HTMLInputElement\n\n      if (!(\n        props.modelModifiers?.trim &&\n        ['text', 'search', 'password', 'tel', 'url'].includes(props.type)\n      )) {\n        model.value = el.value\n        return\n      }\n\n      const value = el.value\n      const start = el.selectionStart\n      const end = el.selectionEnd\n\n      model.value = value\n\n      nextTick(() => {\n        let offset = 0\n        if (value.trimStart().length === el.value.length) {\n          // #22307 - Whitespace has been removed from the\n          // start, offset the caret position to compensate\n          offset = value.length - el.value.length\n        }\n        if (start != null) el.selectionStart = start - offset\n        if (end != null) el.selectionEnd = end - offset\n      })\n    }\n\n    useRender(() => {\n      const hasCounter = !!(slots.counter || props.counter !== undefined)\n      const counterActive = props.counter !== false && props.counter !== null &&\n        (props.persistentCounter || isFocused.value)\n      const hasDetails = props.hideDetails !== true && !!(slots.details || hasCounter)\n      const detailsActive = !!(slots.details || (hasCounter && counterActive))\n      const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n      const { modelValue: _, ...inputProps } = VInput.filterProps(props)\n      const fieldProps = VField.filterProps(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              'v-input--plain-underlined': isPlainOrUnderlined.value,\n            },\n            props.class,\n          ]}\n          style={ props.style }\n          { ...rootAttrs }\n          { ...inputProps }\n          centerAffix={ !isPlainOrUnderlined.value }\n          focused={ isFocused.value }\n          detailsActive={ detailsActive }\n          indentDetails={ props.indentDetails ?? !isPlainOrUnderlined.value }\n        >\n          {{\n            ...slots,\n            default: ({\n              id,\n              isDisabled,\n              isDirty,\n              isReadonly,\n              isValid,\n              hasDetails,\n              reset,\n            }) => (\n              <VField\n                ref={ vFieldRef }\n                onMousedown={ onControlMousedown }\n                onClick={ onControlClick }\n                onClick:clear={ (e: MouseEvent) => onClear(e, reset) }\n                role={ props.role }\n                { ...omit(fieldProps, ['onClick:clear']) }\n                id={ id.value }\n                labelId={ `${id.value}-label` }\n                active={ isActive.value || isDirty.value }\n                dirty={ isDirty.value || props.dirty }\n                disabled={ isDisabled.value }\n                focused={ isFocused.value }\n                details={ hasDetails.value }\n                error={ isValid.value === false }\n              >\n                {{\n                  ...slots,\n                  default: ({\n                    props: { class: fieldClass, ...slotProps },\n                    controlRef,\n                  }) => {\n                    const inputNode = (\n                      <input\n                        ref={ val => inputRef.value = controlRef.value = val as HTMLInputElement }\n                        value={ model.value }\n                        onInput={ onInput }\n                        autofocus={ props.autofocus }\n                        readonly={ isReadonly.value }\n                        disabled={ isDisabled.value }\n                        name={ autocomplete.fieldName.value }\n                        autocomplete={ autocomplete.fieldAutocomplete.value }\n                        placeholder={ props.placeholder }\n                        size={ 1 }\n                        role={ props.role }\n                        type={ props.type }\n                        onFocus={ focus }\n                        onBlur={ blur }\n                        aria-labelledby={ `${id.value}-label` }\n                        { ...slotProps }\n                        { ...inputAttrs }\n                      />\n                    )\n\n                    return (\n                      <>\n                        { props.prefix && (\n                          <span class=\"v-text-field__prefix\">\n                            <span class=\"v-text-field__prefix__text\">\n                              { props.prefix }\n                            </span>\n                          </span>\n                        )}\n\n                        { withDirectives(\n                          slots.default ? (\n                            <div\n                              class={ fieldClass }\n                              data-no-activator=\"\"\n                            >\n                              { slots.default({ id }) }\n                              { inputNode }\n                            </div>\n                          ) : cloneVNode(inputNode, { class: fieldClass }),\n                          [[vIntersect, onIntersect, null, { once: true }]],\n                        )}\n\n                        { props.suffix && (\n                          <span class=\"v-text-field__suffix\">\n                            <span class=\"v-text-field__suffix__text\">\n                              { props.suffix }\n                            </span>\n                          </span>\n                        )}\n                      </>\n                    )\n                  },\n                }}\n              </VField>\n            ),\n            details: hasDetails ? slotProps => (\n              <>\n                { slots.details?.(slotProps) }\n\n                { hasCounter && (\n                  <>\n                    <span />\n\n                    <VCounter\n                      active={ counterActive }\n                      value={ counterValue.value }\n                      max={ max.value }\n                      disabled={ props.disabled }\n                      v-slots:default={ slots.counter }\n                    />\n                  </>\n                )}\n              </>\n            ) : undefined,\n          }}\n        </VInput>\n      )\n    })\n\n    return forwardRefs({}, vInputRef, vFieldRef, inputRef)\n  },\n})\n\nexport type VTextField = InstanceType<typeof VTextField>\n","// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { useResizeObserver } from '@/composables/resizeObserver'\n\n// Utilities\nimport { watch } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { GenericProps, TemplateRef } from '@/util'\n\nexport const makeVVirtualScrollItemProps = propsFactory({\n  renderless: Boolean,\n\n  ...makeComponentProps(),\n}, 'VVirtualScrollItem')\n\nexport const VVirtualScrollItem = genericComponent<new <Renderless extends boolean = false>(\n  props: {\n    renderless?: Renderless\n  },\n  slots: {\n    default: Renderless extends true ? {\n      itemRef: TemplateRef\n    } : never\n  }\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VVirtualScrollItem',\n\n  inheritAttrs: false,\n\n  props: makeVVirtualScrollItemProps(),\n\n  emits: {\n    'update:height': (height: number) => true,\n  },\n\n  setup (props, { attrs, emit, slots }) {\n    const { resizeRef, contentRect } = useResizeObserver(undefined, 'border')\n\n    watch(() => contentRect.value?.height, height => {\n      if (height != null) emit('update:height', height)\n    })\n\n    useRender(() => props.renderless ? (\n      <>\n        { slots.default?.({ itemRef: resizeRef }) }\n      </>\n    ) : (\n      <div\n        ref={ resizeRef }\n        class={[\n          'v-virtual-scroll__item',\n          props.class,\n        ]}\n        style={ props.style }\n        { ...attrs }\n      >\n        { (slots.default as any)?.() }\n      </div>\n    ))\n  },\n})\n","// Composables\nimport { useDisplay } from '@/composables/display'\nimport { useResizeObserver } from '@/composables/resizeObserver'\n\n// Utilities\nimport { computed, nextTick, onScopeDispose, ref, shallowRef, watch, watchEffect } from 'vue'\nimport { clamp, debounce, getPropertyFromItem, IN_BROWSER, propsFactory } from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { SelectItemKey } from '@/util'\n\nconst UP = -1\nconst DOWN = 1\n\n/** Determines how large each batch of items should be */\nconst BUFFER_PX = 100\n\ntype VirtualProps = {\n  itemHeight: number | string | null | undefined\n  itemKey: SelectItemKey\n  height: number | string | undefined\n}\n\nexport type ScrollToPosition = 'start' | 'center' | 'end'\n\nexport const makeVirtualProps = propsFactory({\n  itemHeight: {\n    type: [Number, String],\n    default: null,\n  },\n  itemKey: {\n    type: [String, Array, Function] as PropType<SelectItemKey>,\n    default: null,\n  },\n  height: [Number, String],\n}, 'virtual')\n\nexport function useVirtual <T> (props: VirtualProps, items: Ref<readonly T[]>) {\n  const display = useDisplay()\n\n  const itemHeight = shallowRef(0)\n  watchEffect(() => {\n    itemHeight.value = parseFloat(props.itemHeight || 0)\n  })\n\n  const first = shallowRef(0)\n  const last = shallowRef(Math.ceil(\n    // Assume 16px items filling the entire screen height if\n    // not provided. This is probably incorrect but it minimises\n    // the chance of ending up with empty space at the bottom.\n    // The default value is set here to avoid poisoning getSize()\n    (parseInt(props.height!) || display.height.value) / (itemHeight.value || 16)\n  ) || 1)\n  const paddingTop = shallowRef(0)\n  const paddingBottom = shallowRef(0)\n\n  /** The scrollable element */\n  const containerRef = ref<HTMLElement>()\n  /** An element marking the top of the scrollable area,\n   * used to add an offset if there's padding or other elements above the virtual list */\n  const markerRef = ref<HTMLElement>()\n  /** markerRef's offsetTop, lazily evaluated */\n  let markerOffset = 0\n\n  const { resizeRef, contentRect } = useResizeObserver()\n  watchEffect(() => {\n    resizeRef.value = containerRef.value\n  })\n  const viewportHeight = computed(() => {\n    return containerRef.value === document.documentElement\n      ? display.height.value\n      : contentRect.value?.height || parseInt(props.height!) || 0\n  })\n  /** All static elements have been rendered and we have an assumed item height */\n  const hasInitialRender = computed(() => {\n    return !!(containerRef.value && markerRef.value && viewportHeight.value && itemHeight.value)\n  })\n\n  let sizes = Array.from<number | null>({ length: items.value.length })\n  let offsets = Array.from<number>({ length: items.value.length })\n  let heights = new Map<number, number>()\n  const updateTime = shallowRef(0)\n  let targetScrollIndex = -1\n  let targetScrollPosition: ScrollToPosition = 'start'\n  let targetScrollHeight = 0\n\n  function getSize (index: number) {\n    return sizes[index] || itemHeight.value\n  }\n\n  const updateOffsets = debounce(() => {\n    const start = performance.now()\n    offsets[0] = 0\n    const length = items.value.length\n    for (let i = 1; i <= length; i++) {\n      offsets[i] = (offsets[i - 1] || 0) + getSize(i - 1)\n    }\n    updateTime.value = Math.max(updateTime.value, performance.now() - start)\n    calculateVisibleItems()\n  }, updateTime)\n\n  const unwatch = watch(hasInitialRender, v => {\n    if (!v) return\n    // First render is complete, update offsets and visible\n    // items in case our assumed item height was incorrect\n\n    unwatch()\n    markerOffset = markerRef.value!.offsetTop\n    updateOffsets.immediate()\n    calculateVisibleItems()\n\n    if (!~targetScrollIndex) return\n\n    nextTick(() => {\n      IN_BROWSER && window.requestAnimationFrame(() => {\n        if (~targetScrollIndex) scrollToIndex(targetScrollIndex, targetScrollPosition)\n      })\n    })\n  })\n\n  onScopeDispose(() => {\n    updateOffsets.clear()\n  })\n\n  function estimateItemHeight () {\n    let total = 0\n    for (const count of heights.values()) total += count\n\n    let seen = 0\n    for (const height of [...heights.keys()].sort((a, b) => a - b)) {\n      seen += heights.get(height)!\n      if (seen * 2 >= total) return height\n    }\n    return itemHeight.value\n  }\n\n  function handleItemResize (index: number, height: number) {\n    const prevHeight = sizes[index]\n    const prevItemHeight = itemHeight.value\n\n    if (height > 0) {\n      if (prevHeight) {\n        const count = heights.get(prevHeight)! - 1\n        count ? heights.set(prevHeight, count) : heights.delete(prevHeight)\n      }\n      heights.set(height, (heights.get(height) ?? 0) + 1)\n      itemHeight.value = estimateItemHeight()\n    }\n\n    if (prevHeight !== height || prevItemHeight !== itemHeight.value) {\n      sizes[index] = height\n      updateOffsets()\n    }\n  }\n\n  function calculateOffset (index: number) {\n    index = clamp(index, 0, items.value.length)\n    const whole = Math.floor(index)\n    const fraction = index % 1\n    const next = whole + 1\n    const wholeOffset = offsets[whole] || 0\n    const nextOffset = offsets[next] || wholeOffset\n    return wholeOffset + (nextOffset - wholeOffset) * fraction\n  }\n\n  function calculateIndex (scrollTop: number) {\n    return binaryClosest(offsets, scrollTop)\n  }\n\n  let lastScrollTop = 0\n  let scrollVelocity = 0\n  let lastScrollTime = 0\n\n  watch(viewportHeight, (val, oldVal) => {\n    calculateVisibleItems()\n    if (val < oldVal) {\n      requestAnimationFrame(() => {\n        scrollVelocity = 0\n        calculateVisibleItems()\n      })\n    }\n  })\n\n  let scrollTimeout = -1\n  function handleScroll () {\n    if (!containerRef.value || !markerRef.value) return\n\n    const scrollTop = containerRef.value.scrollTop\n    const scrollTime = performance.now()\n    const scrollDeltaT = scrollTime - lastScrollTime\n\n    if (scrollDeltaT > 500) {\n      scrollVelocity = Math.sign(scrollTop - lastScrollTop)\n\n      // Not super important, only update at the\n      // start of a scroll sequence to avoid reflows\n      markerOffset = markerRef.value.offsetTop\n    } else {\n      scrollVelocity = scrollTop - lastScrollTop\n    }\n\n    lastScrollTop = scrollTop\n    lastScrollTime = scrollTime\n\n    window.clearTimeout(scrollTimeout)\n    scrollTimeout = window.setTimeout(handleScrollend, 500)\n\n    calculateVisibleItems()\n  }\n  function handleScrollend () {\n    if (!containerRef.value || !markerRef.value) return\n\n    scrollVelocity = 0\n    lastScrollTime = 0\n\n    window.clearTimeout(scrollTimeout)\n    calculateVisibleItems()\n  }\n\n  let raf = -1\n  function calculateVisibleItems () {\n    cancelAnimationFrame(raf)\n    raf = requestAnimationFrame(_calculateVisibleItems)\n  }\n  function _calculateVisibleItems () {\n    if (!containerRef.value || !viewportHeight.value || !itemHeight.value) return\n    const scrollTop = lastScrollTop - markerOffset\n    const direction = Math.sign(scrollVelocity)\n\n    const startPx = Math.max(0, scrollTop - BUFFER_PX)\n    const start = clamp(calculateIndex(startPx), 0, items.value.length)\n\n    const endPx = scrollTop + viewportHeight.value + BUFFER_PX\n    const end = clamp(calculateIndex(endPx) + 1, start + 1, items.value.length)\n\n    if (\n      // Only update the side we're scrolling towards,\n      // the other side will be updated incidentally\n      (direction !== UP || start < first.value) &&\n      (direction !== DOWN || end > last.value)\n    ) {\n      const topOverflow = calculateOffset(first.value) - calculateOffset(start)\n      const bottomOverflow = calculateOffset(end) - calculateOffset(last.value)\n      const bufferOverflow = Math.max(topOverflow, bottomOverflow)\n\n      if (bufferOverflow > BUFFER_PX) {\n        first.value = start\n        last.value = end\n      } else {\n        // Only update the side that's reached its limit if there's still buffer left\n        if (start <= 0) first.value = start\n        if (end >= items.value.length) {\n          last.value = end\n          first.value = start\n        }\n      }\n    }\n\n    paddingTop.value = calculateOffset(first.value)\n    paddingBottom.value = calculateOffset(items.value.length) - calculateOffset(last.value)\n  }\n\n  function calculateScrollTop (index: number, position: ScrollToPosition) {\n    const offset = calculateOffset(index)\n    if (position === 'center') return Math.max(0, offset - viewportHeight.value / 2 + getSize(index) / 2)\n    if (position === 'end') {\n      const scrollport = containerRef.value?.clientHeight || viewportHeight.value\n      return Math.max(0, offset + markerOffset - scrollport + getSize(index))\n    }\n    return offset\n  }\n\n  function scrollToIndex (index: number, position: ScrollToPosition = 'start') {\n    if (targetScrollIndex !== index) targetScrollHeight = 0\n\n    const offset = calculateOffset(index)\n    if (!containerRef.value || (index && !offset)) {\n      targetScrollIndex = index\n      targetScrollPosition = position\n      return\n    }\n\n    // Move the window first so paddingTop/Bottom make scrollHeight large enough\n    // before we assign scrollTop (otherwise the browser clamps the scroll).\n    const itemSize = itemHeight.value || 16\n    const buffer = Math.ceil(BUFFER_PX / itemSize)\n    const viewport = Math.max(1, Math.ceil((viewportHeight.value || 0) / itemSize))\n\n    // paddingTop comes from first and must not exceed the scrollTop assigned below\n    const lead = position === 'center' ? Math.ceil(viewport / 2) : position === 'end' ? viewport : 0\n    first.value = clamp(index - lead - buffer, 0, Math.max(0, items.value.length - 1))\n    last.value = clamp(index - lead + viewport + buffer, first.value + 1, items.value.length)\n    paddingTop.value = calculateOffset(first.value)\n    paddingBottom.value = calculateOffset(items.value.length) - calculateOffset(last.value)\n\n    scrollVelocity = 0\n    lastScrollTime = 0\n    targetScrollIndex = index\n    targetScrollPosition = position\n\n    nextTick(() => {\n      const el = containerRef.value\n      // Superseded by a later scrollToIndex\n      if (!el || !~targetScrollIndex || targetScrollIndex !== index) return\n\n      const top = calculateScrollTop(index, position)\n      el.scrollTop = top\n      // Resize-driven calculateVisibleItems reads lastScrollTop, not the DOM\n      lastScrollTop = el.scrollTop\n\n      if (index && el.scrollTop < top - 1 && el.scrollHeight > targetScrollHeight) {\n        targetScrollHeight = el.scrollHeight\n        IN_BROWSER && requestAnimationFrame(() => {\n          if (targetScrollIndex === index) scrollToIndex(index, position)\n        })\n      } else {\n        targetScrollIndex = -1\n        targetScrollPosition = 'start'\n        calculateVisibleItems()\n      }\n    })\n  }\n\n  const computedItems = computed(() => {\n    return items.value.slice(first.value, last.value).map((item, index) => {\n      const _index = index + first.value\n      return {\n        raw: item,\n        index: _index,\n        key: getPropertyFromItem(item, props.itemKey, _index),\n      }\n    })\n  })\n\n  watch(items, () => {\n    sizes = Array.from({ length: items.value.length })\n    offsets = Array.from({ length: items.value.length })\n    heights = new Map()\n    updateOffsets.immediate()\n    calculateVisibleItems()\n  }, { deep: 1 })\n\n  return {\n    calculateVisibleItems,\n    containerRef,\n    markerRef,\n    computedItems,\n    paddingTop,\n    paddingBottom,\n    scrollToIndex,\n    handleScroll,\n    handleScrollend,\n    handleItemResize,\n  }\n}\n\n// https://gist.github.com/robertleeplummerjr/1cc657191d34ecd0a324\nfunction binaryClosest (arr: ArrayLike<number>, val: number) {\n  let high = arr.length - 1\n  let low = 0\n  let mid = 0\n  let item = null\n  let target = -1\n\n  if (arr[high]! < val) {\n    return high\n  }\n\n  while (low <= high) {\n    mid = (low + high) >> 1\n    item = arr[mid]!\n\n    if (item > val) {\n      high = mid - 1\n    } else if (item < val) {\n      target = mid\n      low = mid + 1\n    } else if (item === val) {\n      return mid\n    } else {\n      return low\n    }\n  }\n\n  return target\n}\n","// Styles\nimport './VVirtualScroll.sass'\n\n// Components\nimport { VVirtualScrollItem } from './VVirtualScrollItem'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useToggleScope } from '@/composables/toggleScope'\nimport { makeVirtualProps, useVirtual } from '@/composables/virtual'\n\n// Utilities\nimport { onMounted, onScopeDispose, toRef } from 'vue'\nimport {\n  convertToUnit,\n  genericComponent,\n  getCurrentInstance,\n  getScrollParent,\n  IN_BROWSER,\n  propsFactory,\n  useRender,\n} from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { GenericProps } from '@/util'\n\nexport interface VVirtualScrollSlot<T> {\n  item: T\n  index: number\n}\n\nexport const makeVVirtualScrollProps = propsFactory({\n  items: {\n    type: Array as PropType<readonly unknown[]>,\n    default: () => ([]),\n  },\n  renderless: Boolean,\n\n  ...makeVirtualProps(),\n  ...makeComponentProps(),\n  ...makeDimensionProps(),\n}, 'VVirtualScroll')\n\nexport const VVirtualScroll = genericComponent<new <T, Renderless extends boolean = false>(\n  props: {\n    items?: readonly T[]\n    renderless?: Renderless\n  },\n  slots: {\n    default: VVirtualScrollSlot<T> & (Renderless extends true ? {\n      itemRef: Ref<HTMLElement | undefined>\n    } : {})\n  }\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VVirtualScroll',\n\n  props: makeVVirtualScrollProps(),\n\n  setup (props, { slots }) {\n    const vm = getCurrentInstance('VVirtualScroll')\n    const { dimensionStyles } = useDimension(props)\n    const {\n      calculateVisibleItems,\n      containerRef,\n      markerRef,\n      handleScroll,\n      handleScrollend,\n      handleItemResize,\n      scrollToIndex,\n      paddingTop,\n      paddingBottom,\n      computedItems,\n    } = useVirtual(props, toRef(() => props.items))\n\n    useToggleScope(() => props.renderless, () => {\n      function handleListeners (add = false) {\n        const method = add ? 'addEventListener' : 'removeEventListener'\n\n        if (!IN_BROWSER) return\n\n        if (containerRef.value === document.documentElement) {\n          document[method]('scroll', handleScroll, { passive: true })\n          document[method]('scrollend', handleScrollend)\n        } else {\n          containerRef.value?.[method]('scroll', handleScroll, { passive: true })\n          containerRef.value?.[method]('scrollend', handleScrollend)\n        }\n      }\n\n      onMounted(() => {\n        containerRef.value = getScrollParent(vm.vnode.el as HTMLElement, true)\n        handleListeners(true)\n      })\n      onScopeDispose(handleListeners)\n    })\n\n    useRender(() => {\n      const children = computedItems.value.map(item => (\n        <VVirtualScrollItem\n          key={ item.key }\n          renderless={ props.renderless }\n          onUpdate:height={ height => handleItemResize(item.index, height) }\n        >\n          { slotProps => slots.default?.({ item: item.raw, index: item.index, ...slotProps }) }\n        </VVirtualScrollItem>\n      ))\n\n      return props.renderless ? (\n        <>\n          <div ref={ markerRef } class=\"v-virtual-scroll__spacer\" style={{ paddingTop: convertToUnit(paddingTop.value) }} />\n          { children }\n          <div class=\"v-virtual-scroll__spacer\" style={{ paddingBottom: convertToUnit(paddingBottom.value) }} />\n        </>\n      ) : (\n        <div\n          ref={ containerRef }\n          class={[\n            'v-virtual-scroll',\n            props.class,\n          ]}\n          onScrollPassive={ handleScroll }\n          onScrollend={ handleScrollend }\n          style={[\n            dimensionStyles.value,\n            props.style,\n          ]}\n        >\n          <div\n            ref={ markerRef }\n            class=\"v-virtual-scroll__container\"\n            style={{\n              paddingTop: convertToUnit(paddingTop.value),\n              paddingBottom: convertToUnit(paddingBottom.value),\n            }}\n          >\n            { children }\n          </div>\n        </div>\n      )\n    })\n\n    return {\n      calculateVisibleItems,\n      scrollToIndex,\n    }\n  },\n})\n\nexport type VVirtualScroll = InstanceType<typeof VVirtualScroll>\n","import { isArray, isNullOrUndefined } from \"./utilities/index.mjs\";\n//#region src/composables/toArray/index.ts\n/**\n* @module toArray\n*\n* @see https://0.vuetifyjs.com/composables/transformers/to-array\n*\n* @remarks\n* Utility function to normalize single values and arrays into arrays.\n*\n* Converts single values into single-element arrays, passes arrays through unchanged,\n* and handles null/undefined by returning empty arrays. Perfect for functions that\n* accept both single values and arrays as input (e.g., ID | ID[]).\n*\n* @example\n* ```ts\n* import { toArray } from '@vuetify/v0'\n*\n* toArray('hello') // ['hello']\n* toArray(['a', 'b']) // ['a', 'b']\n* toArray(null) // []\n* ```\n*/\n/**\n* Converts a value to an array.\n*\n* @param value The value to convert.\n* @template Z The type of the value.\n* @returns The converted array.\n*\n* @see https://0.vuetifyjs.com/composables/transformers/to-array\n*\n* @example\n* ```ts\n* import { toArray } from '@vuetify/v0'\n*\n* const value = 'Example Value'\n* const valueAsArray = toArray(value)\n*\n* console.log(valueAsArray) // ['Example Value']\n* ```\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toArray(value) {\n\treturn /* @__PURE__ */ isNullOrUndefined(value) ? [] : /* @__PURE__ */ isArray(value) ? value : [value];\n}\n//#endregion\nexport { toArray as t };\n","import { i as SUPPORTS_MUTATION_OBSERVER, r as SUPPORTS_MATCH_MEDIA, t as IN_BROWSER } from \"./globals-wvVdMRFF.mjs\";\nimport { V0Error, clamp, findMatchRanges, getActiveElement, instanceExists, isArray, isBoolean, isElement, isFunction, isNaN, isNull, isNullOrUndefined, isNumber, isString, isThenable, isUndefined, mergeDeep, useId as useId$1 } from \"./utilities/index.mjs\";\nimport { i as useContext, t as createTrinity } from \"./createTrinity-z-3q9QWR.mjs\";\nimport { n as createPluginContext, t as createPlugin } from \"./createPlugin-Oo6t-vBw.mjs\";\nimport { i as useLogger } from \"./useLogger-CDsgHbzO.mjs\";\nimport { t as createRegistry } from \"./createRegistry-DSQiALGi.mjs\";\nimport { a as useLocale } from \"./useLocale-D-iWu08b.mjs\";\nimport { t as toArray } from \"./toArray-MY9Kb1Qy.mjs\";\nimport { n as useEventListener, r as useWindowEventListener } from \"./useEventListener-hF6R2p6X.mjs\";\nimport { A as createSortable, I as ComboboxAdapter, X as useResizeObserver, Z as createObserver, y as createInput } from \"./useRovingFocus-D0OOozbe.mjs\";\nimport { c as usePrefersReducedMotion, p as useHydration } from \"./useTheme-BrXA5VBp.mjs\";\nimport { n as deriveWeekInfo } from \"./adapter-BuSfpxur.mjs\";\nimport { computed, effectScope, hasInjectionContext, isRef, onScopeDispose, onWatcherCleanup, reactive, readonly, ref, shallowReadonly, shallowRef, toRef, toValue, unref, watch, watchEffect } from \"vue\";\n//#region src/composables/createCombobox/adapters/server.ts\n/**\n* @module createCombobox/adapters/server\n*\n* @remarks\n* Server-side combobox adapter. All filtering is performed externally.\n* The adapter is a pass-through — it shows all registered items and\n* exposes loading state for the consumer to control.\n*\n* The consumer watches `query` via useComboboxContext() or slot props\n* and provides filtered items reactively.\n*/\nvar ServerComboboxAdapter = class extends ComboboxAdapter {\n\tsetup(context) {\n\t\tconst isLoading = shallowRef(false);\n\t\treturn {\n\t\t\tfiltered: toRef(() => {\n\t\t\t\treturn new Set(context.items.value.map((t) => t.id));\n\t\t\t}),\n\t\t\tisLoading,\n\t\t\tisEmpty: toRef(() => context.items.value.length === 0)\n\t\t};\n\t}\n};\n//#endregion\n//#region src/composables/createKanban/index.ts\n/**\n* @module createKanban\n*\n* @see https://0.vuetifyjs.com/composables/data/create-kanban\n*\n* @remarks\n* Headless data-flow management for two-level sortable boards. Wraps a column\n* sortable; each column ticket carries its own inner sortable on `column.items`.\n* Adds a `transfer` primitive for cross-column moves with reused `disabled`\n* gating and a destination-side `accept` predicate. Pure logic — no DnD, no DOM.\n*\n* @example\n* ```ts\n* import { createKanban } from '@vuetify/v0'\n* import type { SortableTicketInput } from '@vuetify/v0'\n*\n* interface CardTicket extends SortableTicketInput {\n*   value: { title: string }\n* }\n*\n* const kanban = createKanban<CardTicket>()\n*\n* const todo = kanban.columns.register({ value: { title: 'Todo' } })\n* const done = kanban.columns.register({ value: { title: 'Done' } })\n*\n* const card = todo.items.register({ value: { title: 'Write spec' } })\n*\n* kanban.on('transfer:ticket', ({ ticket, from, to }) => {\n*   console.log(ticket.value.title, from, '→', to)\n* })\n*\n* kanban.transfer(card.id, done.id, 0)\n* ```\n*/\n/**\n* Create a headless two-level sortable orchestrator.\n*\n* @param options Kanban options (currently only `disabled`).\n* @returns A {@link KanbanContext}.\n*\n* @example\n* ```ts\n* import { createKanban } from '@vuetify/v0'\n* import type { KanbanColumnTicketInput, SortableTicketInput } from '@vuetify/v0'\n*\n* interface CardTicket extends SortableTicketInput {\n*   value: { title: string }\n* }\n*\n* interface BoardColumn extends KanbanColumnTicketInput<CardTicket> {\n*   value: { title: string }\n* }\n*\n* const kanban = createKanban<CardTicket, BoardColumn>()\n*\n* const todo = kanban.columns.register({ value: { title: 'Todo' } })\n* const review = kanban.columns.register({\n*   value: { title: 'Review' },\n*   accept: card => card.value.title.length > 0,\n* })\n*\n* const spec = todo.items.register({ value: { title: 'Write spec' } })\n* kanban.transfer(spec.id, review.id, 0)\n* ```\n*/\nfunction createKanban(_options = {}) {\n\tconst { disabled, ...options } = _options;\n\tconst logger = useLogger();\n\tconst _columns = createSortable({\n\t\t...options,\n\t\tdisabled\n\t});\n\tconst lookup = createRegistry({ events: true });\n\tconst bus = createRegistry({ events: true });\n\tconst on = bus.on;\n\tconst off = bus.off;\n\tconst columns = {\n\t\t..._columns,\n\t\tregister(registration) {\n\t\t\tlet ticket;\n\t\t\tconst items = createSortable({ disabled: () => !!toValue(disabled) || !!toValue(ticket?.disabled) });\n\t\t\titems.on(\"register:ticket\", (t) => {\n\t\t\t\tlookup.upsert(t.id, { value: ticket.id });\n\t\t\t});\n\t\t\titems.on(\"unregister:ticket\", (t) => {\n\t\t\t\tlookup.get(t.id)?.unregister();\n\t\t\t});\n\t\t\tticket = _columns.register({\n\t\t\t\t...registration,\n\t\t\t\titems\n\t\t\t});\n\t\t\treturn ticket;\n\t\t},\n\t\tonboard(registrations) {\n\t\t\treturn _columns.batch(() => registrations.map((reg) => columns.register(reg)));\n\t\t},\n\t\tupsert(id, patch = {}, event) {\n\t\t\treturn /* @__PURE__ */ isUndefined(_columns.get(id)) ? columns.register({\n\t\t\t\t...patch,\n\t\t\t\tid\n\t\t\t}) : _columns.upsert(id, patch, event);\n\t\t},\n\t\tget size() {\n\t\t\treturn _columns.size;\n\t\t}\n\t};\n\tfunction onColumnUnregister(column) {\n\t\tcolumn.items.dispose();\n\t\tfor (const t of lookup.values()) if (t.value === column.id) t.unregister();\n\t}\n\tfunction dispose() {\n\t\tfor (const column of _columns.values()) column.items.dispose();\n\t\tlookup.dispose();\n\t\tbus.dispose();\n\t\t_columns.dispose();\n\t\tcolumns.on(\"unregister:ticket\", onColumnUnregister);\n\t}\n\tcolumns.dispose = dispose;\n\tcolumns.on(\"unregister:ticket\", onColumnUnregister);\n\tfunction isAccepted(accept, ticket, from, toIndex) {\n\t\tif (/* @__PURE__ */ isUndefined(accept)) return true;\n\t\ttry {\n\t\t\tconst result = accept(ticket, from, toIndex);\n\t\t\tif (/* @__PURE__ */ isThenable(result)) {\n\t\t\t\tlogger.warn(\"accept predicate returned a thenable; async predicates are not supported — treating as reject\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn Boolean(result);\n\t\t} catch (error) {\n\t\t\tlogger.error(\"accept predicate threw; treating as reject\", error);\n\t\t\treturn false;\n\t\t}\n\t}\n\tfunction transfer(id, toColumnId, toIndex) {\n\t\tconst fromColumnId = lookup.get(id)?.value;\n\t\tif (/* @__PURE__ */ isUndefined(fromColumnId)) {\n\t\t\tlogger.warn(`unknown ticket id \"${String(id)}\"`);\n\t\t\treturn;\n\t\t}\n\t\tconst source = columns.get(fromColumnId);\n\t\tif (!source) {\n\t\t\tlogger.warn(`unknown source column id \"${String(fromColumnId)}\"`);\n\t\t\treturn;\n\t\t}\n\t\tconst destination = columns.get(toColumnId);\n\t\tif (!destination) {\n\t\t\tlogger.warn(`unknown destination column id \"${String(toColumnId)}\"`);\n\t\t\treturn;\n\t\t}\n\t\tconst ticket = source.items.get(id);\n\t\tif (!ticket) {\n\t\t\tlogger.warn(`ticket \"${String(id)}\" missing from source column \"${String(fromColumnId)}\"`);\n\t\t\treturn;\n\t\t}\n\t\tconst fromIndex = ticket.index;\n\t\tif (toColumnId === fromColumnId) return source.items.move(id, toIndex);\n\t\tif (toValue(disabled) || toValue(source.disabled) || toValue(destination.disabled) || toValue(ticket.disabled)) return;\n\t\tif (!isAccepted(destination.accept, ticket, fromColumnId, toIndex)) return void 0;\n\t\tif (!/* @__PURE__ */ isUndefined(destination.items.get(id))) {\n\t\t\tlogger.warn(`id \"${String(id)}\" already exists in destination column \"${String(toColumnId)}\"`);\n\t\t\treturn;\n\t\t}\n\t\tlet registered;\n\t\tlet moved;\n\t\tdestination.items.batch(() => {\n\t\t\tconst [input] = source.items.offboard([id]);\n\t\t\tif (/* @__PURE__ */ isUndefined(input)) return;\n\t\t\tregistered = destination.items.register({\n\t\t\t\t...input,\n\t\t\t\tid\n\t\t\t});\n\t\t\tmoved = registered.index === toIndex ? registered : destination.items.move(registered.id, toIndex);\n\t\t});\n\t\tconst final = moved ?? registered;\n\t\tif (final) bus.emit(\"transfer:ticket\", {\n\t\t\tticket: final,\n\t\t\tfrom: fromColumnId,\n\t\t\tto: toColumnId,\n\t\t\tfromIndex,\n\t\t\ttoIndex: final.index\n\t\t});\n\t\treturn final;\n\t}\n\treturn {\n\t\tcolumns,\n\t\ttransfer,\n\t\ton,\n\t\toff,\n\t\tdispose\n\t};\n}\n//#endregion\n//#region src/composables/createOtp/index.ts\n/**\n* @module createOtp\n*\n* @see https://0.vuetifyjs.com/composables/forms/create-otp\n*\n* @remarks\n* Headless state for a fixed-length one-time-password / verification-code value.\n* Owns the joined string, per-character pattern matching, length contract,\n* completion edge detection with a decisional async `onComplete` hook, and\n* validation through `createInput`. Rendering, focus, and per-element event\n* wiring are the consumer's responsibility.\n*\n* @example\n* ```ts\n* import { createOtp } from '@vuetify/v0'\n*\n* const otp = createOtp({\n*   length: 6,\n*   pattern: 'numeric',\n*   onComplete: async value => {\n*     const ok = await verify(value)\n*     return ok\n*   },\n* })\n*\n* otp.write(0, '4')\n* otp.distribute('12345', 1) // returns 5; value becomes '412345'\n* otp.isComplete.value  // true\n* ```\n*/\nconst PRESETS = {\n\tnumeric: /^[0-9]$/,\n\talphanumeric: /^[a-zA-Z0-9]$/,\n\talphabetic: /^[a-zA-Z]$/\n};\nconst WARNED_PATTERNS = /* @__PURE__ */ new WeakSet();\nfunction createOtp(_options = {}) {\n\tconst { value = shallowRef(\"\"), length = 6, pattern = \"numeric\", disabled = false, readonly: _readonly = false, onComplete, ...options } = _options;\n\tconst logger = useLogger();\n\tconst errorRef = shallowRef(false);\n\tconst errorMessagesRef = shallowRef(void 0);\n\tconst input = createInput({\n\t\t...options,\n\t\tvalue,\n\t\tdisabled,\n\t\treadonly: _readonly,\n\t\terror: errorRef,\n\t\terrorMessages: errorMessagesRef\n\t});\n\tconst lengthRef = toRef(() => toValue(length));\n\tlet lastCompleted = \"\";\n\tfunction compile(resolved) {\n\t\tif (/* @__PURE__ */ isString(resolved)) return PRESETS[resolved];\n\t\tif (process.env.NODE_ENV !== \"production\" && !WARNED_PATTERNS.has(resolved)) {\n\t\t\tWARNED_PATTERNS.add(resolved);\n\t\t\tif (resolved.test(\"aa\") || resolved.test(\"00\")) logger.warn(\"createOtp: pattern matches multi-character input; per-character matching may behave unexpectedly\");\n\t\t}\n\t\treturn resolved;\n\t}\n\tfunction accepts(char) {\n\t\tif (char.length !== 1) return false;\n\t\treturn compile(toValue(pattern)).test(char);\n\t}\n\tfunction filterAccepted(text) {\n\t\tlet out = \"\";\n\t\tfor (const ch of text) if (accepts(ch)) out += ch;\n\t\treturn out;\n\t}\n\tconst isPending = shallowRef(false);\n\tfunction isLocked() {\n\t\treturn toValue(disabled) || toValue(_readonly) || isPending.value;\n\t}\n\tfunction clearRejection() {\n\t\tif (errorRef.value || errorMessagesRef.value) {\n\t\t\terrorRef.value = false;\n\t\t\terrorMessagesRef.value = void 0;\n\t\t}\n\t}\n\tfunction write(index, char) {\n\t\tif (isLocked()) return;\n\t\tconst max = toValue(lengthRef);\n\t\tif (index < 0 || index >= max) return;\n\t\tif (char === \"\") {\n\t\t\tclearRejection();\n\t\t\tvalue.value = value.value.slice(0, index);\n\t\t\treturn;\n\t\t}\n\t\tconst first = char[0];\n\t\tif (!accepts(first)) return;\n\t\tclearRejection();\n\t\tconst current = value.value;\n\t\tconst head = current.slice(0, index);\n\t\tconst tail = current.slice(index + 1);\n\t\tvalue.value = (head + first + tail).slice(0, max);\n\t}\n\tfunction distribute(text, index = 0) {\n\t\tif (isLocked()) return 0;\n\t\tconst max = toValue(lengthRef);\n\t\tconst start = /* @__PURE__ */ clamp(index, 0, max);\n\t\tconst filtered = filterAccepted(text);\n\t\tif (filtered.length === 0) return 0;\n\t\tclearRejection();\n\t\tconst head = value.value.slice(0, start);\n\t\tconst next = (head + filtered).slice(0, max);\n\t\tvalue.value = next;\n\t\treturn next.length - head.length;\n\t}\n\tfunction clear() {\n\t\tif (isLocked()) return;\n\t\tclearRejection();\n\t\tlastCompleted = \"\";\n\t\tvalue.value = \"\";\n\t}\n\tfunction fill(text) {\n\t\tif (isLocked()) return;\n\t\tconst max = toValue(lengthRef);\n\t\tconst filtered = filterAccepted(text).slice(0, max);\n\t\tif (text.length === 0 || filtered.length > 0) clearRejection();\n\t\tvalue.value = filtered;\n\t}\n\tfunction reject() {\n\t\terrorRef.value = true;\n\t\terrorMessagesRef.value = [\"Invalid code\"];\n\t\tlastCompleted = \"\";\n\t\tvalue.value = \"\";\n\t}\n\tconst isComplete = toRef(() => {\n\t\tconst max = toValue(lengthRef);\n\t\tconst v = value.value;\n\t\tif (v.length !== max) return false;\n\t\tconst re = compile(toValue(pattern));\n\t\tfor (const ch of v) if (!re.test(ch)) return false;\n\t\treturn true;\n\t});\n\twatch(value, (next) => {\n\t\tif (!isComplete.value) {\n\t\t\tlastCompleted = \"\";\n\t\t\treturn;\n\t\t}\n\t\tif (!onComplete) return;\n\t\tif (isLocked()) return;\n\t\tif (next === lastCompleted) return;\n\t\tlastCompleted = next;\n\t\tlet result;\n\t\ttry {\n\t\t\tresult = onComplete(next);\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"createOtp: onComplete threw\", error);\n\t\t\treject();\n\t\t\treturn;\n\t\t}\n\t\tif (/* @__PURE__ */ isThenable(result)) {\n\t\t\tisPending.value = true;\n\t\t\tresult.then((ok) => {\n\t\t\t\tisPending.value = false;\n\t\t\t\tif (ok === false) reject();\n\t\t\t}, (error) => {\n\t\t\t\tisPending.value = false;\n\t\t\t\tlogger.warn(\"createOtp: onComplete rejected\", error);\n\t\t\t\treject();\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (result === false) reject();\n\t});\n\treturn {\n\t\tvalue,\n\t\tlength: lengthRef,\n\t\tinput: {\n\t\t\t...input,\n\t\t\treset() {\n\t\t\t\tclearRejection();\n\t\t\t\tlastCompleted = \"\";\n\t\t\t\tinput.reset();\n\t\t\t}\n\t\t},\n\t\tisComplete,\n\t\tisValidating: isPending,\n\t\twrite,\n\t\tdistribute,\n\t\tclear,\n\t\tfill,\n\t\taccepts\n\t};\n}\n//#endregion\n//#region src/composables/createTimeline/index.ts\n/**\n* @module createTimeline\n*\n* @see https://0.vuetifyjs.com/composables/registration/create-timeline\n*\n* @remarks\n* Bounded undo/redo system with overflow management.\n*\n* Key features:\n* - Fixed-size history (default: 10 items)\n* - Undo/redo stack management\n* - Overflow queue (preserves oldest items)\n* - Automatic reindexing after operations\n* - Perfect for command pattern, history tracking\n*\n* Extends createRegistry with temporal navigation capabilities.\n*\n* @example\n* ```ts\n* import { createTimeline } from '@vuetify/v0'\n*\n* const timeline = createTimeline({ size: 5 })\n* timeline.register({ value: 'action-1' })\n* timeline.register({ value: 'action-2' })\n* timeline.undo()\n* ```\n*/\n/**\n* Creates a new timeline instance.\n*\n* @param options The options for the timeline instance.\n* @template Z The type of the timeline ticket.\n* @template E The type of the timeline context.\n* @returns A new timeline instance.\n*\n* @see https://0.vuetifyjs.com/composables/registration/create-timeline\n*\n* @example\n* ```ts\n* import { useTimeline } from '@vuetify/v0'\n*\n* const timeline = useTimeline({ size: 3 })\n*\n* timeline.onboard([{ id: 'one' }, { id: 'two' }, { id: 'three' }])\n*\n* console.log(timeline.values()) // [{ id: 'one' }, { id: 'two' }, { id: 'three' }]\n*\n* timeline.undo()\n* console.log(timeline.values()) // [{ id: 'one' }, { id: 'two' }]\n*\n* timeline.redo()\n* console.log(timeline.values()) // [{ id: 'one' }, { id: 'two' }, { id: 'three' }]\n* ```\n*/\nfunction createTimeline(_options = {}) {\n\tconst { size: _size = 10, ...options } = _options;\n\tconst size = /* @__PURE__ */ isNaN(_size) ? 10 : Math.max(1, Math.floor(_size));\n\tconst registry = createRegistry(options);\n\tconst stack = [];\n\tconst overflow = [];\n\tfunction register(item) {\n\t\tstack.length = 0;\n\t\tif (registry.size < size) return registry.register({ ...item });\n\t\tconst removing = registry.seek(\"first\");\n\t\tif (overflow.length === size) overflow.shift();\n\t\toverflow.push(removing);\n\t\tregistry.unregister(removing.id);\n\t\tconst ticket = registry.register({ ...item });\n\t\tregistry.reindex();\n\t\treturn ticket;\n\t}\n\tfunction undo() {\n\t\tconst item = registry.seek(\"last\");\n\t\tif (!item) return void 0;\n\t\tstack.push(item);\n\t\tregistry.unregister(item.id);\n\t\tconst restored = overflow.pop();\n\t\tif (restored) {\n\t\t\tconst remaining = registry.values();\n\t\t\tregistry.clear();\n\t\t\tregistry.onboard([restored, ...remaining]);\n\t\t\tregistry.reindex();\n\t\t}\n\t\treturn item;\n\t}\n\tfunction redo() {\n\t\tif (stack.length === 0) return void 0;\n\t\tconst item = stack.pop();\n\t\tif (registry.size >= size) {\n\t\t\tconst oldest = registry.seek(\"first\");\n\t\t\tif (overflow.length === size) overflow.shift();\n\t\t\toverflow.push(oldest);\n\t\t\tregistry.unregister(oldest.id);\n\t\t}\n\t\tconst ticket = registry.register(item);\n\t\tregistry.reindex();\n\t\treturn ticket;\n\t}\n\treturn {\n\t\t...registry,\n\t\tregister,\n\t\tundo,\n\t\tredo,\n\t\tget size() {\n\t\t\treturn registry.size;\n\t\t}\n\t};\n}\n/**\n* Creates a new timeline context.\n*\n* @param options The options for the timeline context.\n* @template Z The type of the timeline ticket.\n* @template E The type of the timeline context.\n* @returns A new timeline context.\n*\n* @see https://0.vuetifyjs.com/composables/registration/create-timeline\n*\n* @example\n* ```ts\n* import { createTimelineContext } from '@vuetify/v0'\n*\n* // With default namespace 'v0:timeline'\n* export const [useTimeline, provideTimeline, context] = createTimelineContext({ size: 5 })\n*\n* context.register({ id: 'example' })\n*\n* // In a parent component\n* provideTimeline()\n*\n* // In a child component\n* const timeline = useTimeline()\n*\n* console.log(timeline.values()) // [{ id: 'example' }]\n* ```\n*/\nfunction createTimelineContext(_options = {}) {\n\tconst { namespace = \"v0:timeline\", ...options } = _options;\n\treturn createTrinity(namespace, createTimeline(options));\n}\n/**\n* Returns the current timeline instance.\n*\n* @param namespace The namespace for the timeline context. Defaults to `'v0:timeline'`.\n* @returns The current timeline instance.\n*\n* @see https://0.vuetifyjs.com/composables/registration/create-timeline\n*\n* @example\n* ```vue\n* <script setup lang=\"ts\">\n*   import { useTimeline } from '@vuetify/v0'\n*\n*   const timeline = useTimeline()\n* <\\/script>\n* ```\n*/\nfunction useTimeline(namespace = \"v0:timeline\") {\n\treturn useContext(namespace);\n}\n//#endregion\n//#region src/composables/createVirtual/index.ts\n/**\n* @module createVirtual\n*\n* @see https://0.vuetifyjs.com/composables/data/create-virtual\n*\n* @remarks\n* Virtual scrolling composable for efficiently rendering large lists.\n*\n* Key features:\n* - Trinity pattern for dependency injection (`createVirtualContext`, `useVirtual`)\n* - Renders only visible items (viewport + overscan)\n* - Dynamic or fixed item heights\n* - SSR-safe (checks IN_BROWSER)\n* - Bidirectional scrolling (forward/reverse for chat apps)\n* - Scroll anchoring (maintains position across data changes)\n* - Edge detection for infinite scroll\n* - iOS momentum and elastic scrolling\n* - Configurable overscan (extra items rendered for smooth scrolling)\n*\n* Perfect for large data sets, chat apps, and infinite scroll implementations.\n*\n* @example\n* ```ts\n* import { shallowRef } from 'vue'\n* import { createVirtual } from '@vuetify/v0'\n*\n* const items = shallowRef(Array.from({ length: 10000 }, (_, i) => ({ id: i })))\n* const virtual = createVirtual(items, { itemHeight: 40 })\n* console.log(virtual.items.value)\n* ```\n*/\n/**\n* Virtual scrolling composable for efficiently rendering large lists\n*\n* @param items Reactive array of items to virtualize\n* @param options Configuration options\n* @returns Virtual scrolling context\n*\n* @see https://0.vuetifyjs.com/composables/data/create-virtual\n*\n* @example\n* ```vue\n* <script setup lang=\"ts\">\n*   import { createVirtual } from '@vuetify/v0'\n*\n*   const items = ref(Array.from({ length: 10000 }, (_, i) => ({ id: i, name: `Item ${i}` })))\n*   const virtual = createVirtual(items)\n* <\\/script>\n*\n* <template>\n*   <div\n*     ref=\"virtual.element\"\n*     style=\"height: 600px; overflow-y: auto;\"\n*     @scroll=\"virtual.scroll\"\n*   >\n*     <div :style=\"{ height: `${virtual.offset.value}px` }\" />\n*\n*     <div v-for=\"item in virtual.items.value\" :key=\"item.index\">\n*       {{ item.raw.name }}\n*     </div>\n*\n*     <div :style=\"{ height: `${virtual.size.value}px` }\" />\n*   </div>\n* </template>\n* ```\n*/\nconst FALLBACK_HEIGHT = 40;\nfunction createVirtual(items, _options = {}) {\n\tconst { itemHeight: _itemHeight, height, overscan = 5, direction = \"forward\", anchor = \"auto\", anchorSmooth = true, onStartReached, onEndReached, startThreshold = 0, endThreshold = 0, momentum: momentumOption, elastic: elasticOption } = _options;\n\tconst element = ref();\n\tconst itemHeight = shallowRef(Number.parseFloat(String(_itemHeight || 0)));\n\tfunction estimate() {\n\t\treturn itemHeight.value || FALLBACK_HEIGHT;\n\t}\n\tconst heights = shallowRef([]);\n\tconst offsets = shallowRef([]);\n\tconst first = shallowRef(0);\n\tconst last = shallowRef(0);\n\tconst offset = shallowRef(0);\n\tconst size = shallowRef(0);\n\tconst viewportHeight = shallowRef(0);\n\tconst state = shallowRef(\"ok\");\n\tconst isIOS = IN_BROWSER && /iPad|iPhone|iPod/.test(navigator.userAgent);\n\tconst momentum = momentumOption ?? isIOS;\n\tconst elastic = elasticOption ?? isIOS;\n\tlet raf = -1;\n\tlet rebuildRaf = -1;\n\tlet edgeRaf = -1;\n\tconst cachedViewport = Number.parseInt(String(height)) || 0;\n\tlet anchorIndex = -1;\n\tlet anchorOffset = 0;\n\tconst computedItems = computed(() => items.value.slice(first.value, last.value).map((item, i) => ({\n\t\traw: item,\n\t\tindex: i + first.value\n\t})));\n\twatch(element, (el) => {\n\t\tif (!IN_BROWSER || !el?.style) return;\n\t\t/* v8 ignore start -- browser-only style assignments */\n\t\tif (momentum) el.style.webkitOverflowScrolling = \"touch\";\n\t\tif (!elastic) el.style.overscrollBehavior = \"none\";\n\t\t/* v8 ignore stop */\n\t});\n\tuseResizeObserver(element, (entries) => {\n\t\t/* v8 ignore next -- defensive: ResizeObserver always emits at least one entry */\n\t\tif (!entries[0]) return;\n\t\tviewportHeight.value = entries[0].contentRect.height;\n\t\tupdate();\n\t});\n\twatch(items, (newItems) => {\n\t\tcaptureAnchor();\n\t\tconst length = newItems.length;\n\t\tconst old = heights.value;\n\t\tconst newHeights = old.length === length ? old : Array.from({ length }, (_, i) => i < old.length ? old[i] : null);\n\t\tif (heights.value !== newHeights) heights.value = newHeights;\n\t\trebuild();\n\t}, { immediate: true });\n\twatch(element, () => {\n\t\t/* v8 ignore next -- defensive: watch fires only when element is present */\n\t\tif (!element.value) return;\n\t\tif (direction === \"reverse\" && items.value.length > 0) {\n\t\t\tconst lastIndex = items.value.length - 1;\n\t\t\tconst totalHeight = (offsets.value[lastIndex] || 0) + (heights.value[lastIndex] || estimate());\n\t\t\telement.value.scrollTop = totalHeight;\n\t\t}\n\t\tupdate();\n\t});\n\tfunction captureAnchor() {\n\t\tif (!element.value || anchor === \"auto\") return;\n\t\tif (anchor === \"start\") {\n\t\t\tanchorIndex = 0;\n\t\t\tanchorOffset = 0;\n\t\t} else if (anchor === \"end\") {\n\t\t\tanchorIndex = items.value.length - 1;\n\t\t\tanchorOffset = 0;\n\t\t} else if (/* @__PURE__ */ isFunction(anchor)) {\n\t\t\tconst result = anchor(items.value);\n\t\t\t/* v8 ignore next 4 -- function-anchor: tested with valid number return; non-number rejection branch is implicit */\n\t\t\tif (/* @__PURE__ */ isNumber(result)) {\n\t\t\t\tanchorIndex = result;\n\t\t\t\tanchorOffset = element.value.scrollTop - (offsets.value[result] || 0);\n\t\t\t}\n\t\t} else {\n\t\t\t/* v8 ignore start -- default anchor capture */\n\t\t\tanchorIndex = first.value;\n\t\t\tanchorOffset = element.value.scrollTop - (offsets.value[first.value] || 0);\n\t\t}\n\t}\n\tfunction restoreAnchor() {\n\t\tif (!element.value || anchorIndex < 0) return;\n\t\tconst newScrollTop = (offsets.value[anchorIndex] || 0) + anchorOffset;\n\t\tif (anchorSmooth && direction === \"forward\") element.value.scrollTo({\n\t\t\ttop: newScrollTop,\n\t\t\tbehavior: \"smooth\"\n\t\t});\n\t\telse element.value.scrollTop = newScrollTop;\n\t\t/* v8 ignore stop */\n\t\tanchorIndex = -1;\n\t\tanchorOffset = 0;\n\t}\n\tfunction rebuild() {\n\t\tconst length = items.value.length;\n\t\tconst newOffsets = offsets.value.length === length ? offsets.value : Array.from({ length });\n\t\tlet offset = 0;\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tnewOffsets[i] = offset;\n\t\t\toffset += heights.value[i] || estimate();\n\t\t}\n\t\tif (offsets.value !== newOffsets) offsets.value = newOffsets;\n\t\tupdate();\n\t\trestoreAnchor();\n\t}\n\tfunction findIndex(scrollTop) {\n\t\tconst arr = offsets.value;\n\t\tif (arr.length === 0) return 0;\n\t\tlet low = 0;\n\t\tlet high = arr.length - 1;\n\t\twhile (low <= high) {\n\t\t\tconst mid = low + high >> 1;\n\t\t\tif (arr[mid] <= scrollTop) low = mid + 1;\n\t\t\telse high = mid - 1;\n\t\t}\n\t\treturn Math.max(0, high);\n\t}\n\tfunction update() {\n\t\tif (!element.value) return;\n\t\tconst viewport = viewportHeight.value || cachedViewport;\n\t\tif (!viewport) return;\n\t\tconst scrollTop = element.value.scrollTop || 0;\n\t\tconst length = items.value.length;\n\t\tconst visibleStart = findIndex(scrollTop);\n\t\tconst visibleEnd = findIndex(scrollTop + viewport) + 1;\n\t\tconst start = /* @__PURE__ */ clamp(visibleStart - overscan, 0, length);\n\t\tconst end = /* @__PURE__ */ clamp(visibleEnd + overscan, start, length);\n\t\tfirst.value = start;\n\t\tlast.value = end;\n\t\toffset.value = offsets.value[start] || 0;\n\t\tconst lastIndex = length - 1;\n\t\tconst totalHeight = (offsets.value[lastIndex] || 0) + (heights.value[lastIndex] || estimate());\n\t\tsize.value = totalHeight - (offsets.value[end] || totalHeight);\n\t}\n\tfunction checkEdges() {\n\t\tif (!element.value) return;\n\t\tconst scrollTop = element.value.scrollTop;\n\t\tconst scrollHeight = element.value.scrollHeight;\n\t\tconst clientHeight = element.value.clientHeight;\n\t\tconst distanceFromStart = scrollTop;\n\t\tconst distanceFromEnd = scrollHeight - (scrollTop + clientHeight);\n\t\tif (IN_BROWSER) {\n\t\t\tcancelAnimationFrame(edgeRaf);\n\t\t\tedgeRaf = requestAnimationFrame(() => {\n\t\t\t\tif (onStartReached && distanceFromStart <= startThreshold) onStartReached(distanceFromStart);\n\t\t\t\tif (onEndReached && distanceFromEnd <= endThreshold) onEndReached(distanceFromEnd);\n\t\t\t});\n\t\t} else {\n\t\t\tif (onStartReached && distanceFromStart <= startThreshold) onStartReached(distanceFromStart);\n\t\t\tif (onEndReached && distanceFromEnd <= endThreshold) onEndReached(distanceFromEnd);\n\t\t}\n\t\t/* v8 ignore stop */\n\t}\n\tfunction resize(index, height) {\n\t\t/* v8 ignore next -- early bail when height is already correct */\n\t\tif (heights.value[index] === height) return;\n\t\theights.value[index] = height;\n\t\t/* v8 ignore next -- first-call only: itemHeight bootstrapped from initial measurement */\n\t\tif (!itemHeight.value) itemHeight.value = height;\n\t\tif (IN_BROWSER) {\n\t\t\tcancelAnimationFrame(rebuildRaf);\n\t\t\trebuildRaf = requestAnimationFrame(rebuild);\n\t\t} else rebuild();\n\t\t/* v8 ignore stop */\n\t}\n\tfunction scroll() {\n\t\tif (IN_BROWSER) {\n\t\t\tcancelAnimationFrame(raf);\n\t\t\traf = requestAnimationFrame(update);\n\t\t\tcheckEdges();\n\t\t} else update();\n\t\t/* v8 ignore stop */\n\t}\n\tfunction scrollTo(index, scrollOptions) {\n\t\t/* v8 ignore next -- defensive: scrollTo only invoked after element mounts */\n\t\tif (!element.value) return;\n\t\tconst targetOffset = offsets.value[index] || 0;\n\t\tconst behavior = scrollOptions?.behavior ?? \"auto\";\n\t\tconst block = scrollOptions?.block ?? \"start\";\n\t\tconst extraOffset = scrollOptions?.offset ?? 0;\n\t\tlet scrollTop = targetOffset + extraOffset;\n\t\tswitch (block) {\n\t\t\tcase \"center\": {\n\t\t\t\tconst viewport = viewportHeight.value || cachedViewport;\n\t\t\t\tconst itemH = heights.value[index] || estimate();\n\t\t\t\tscrollTop = targetOffset - viewport / 2 + itemH / 2 + extraOffset;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"end\": {\n\t\t\t\tconst viewport = viewportHeight.value || cachedViewport;\n\t\t\t\tconst itemH = heights.value[index] || estimate();\n\t\t\t\tscrollTop = targetOffset - viewport + itemH + extraOffset;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"nearest\": {\n\t\t\t\tconst viewport = viewportHeight.value || cachedViewport;\n\t\t\t\tconst currentScroll = element.value.scrollTop;\n\t\t\t\tconst itemH = heights.value[index] || estimate();\n\t\t\t\tif (targetOffset < currentScroll) scrollTop = targetOffset + extraOffset;\n\t\t\t\telse if (targetOffset + itemH > currentScroll + viewport) scrollTop = targetOffset - viewport + itemH + extraOffset;\n\t\t\t\telse return;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (behavior === \"smooth\") element.value.scrollTo({\n\t\t\ttop: scrollTop,\n\t\t\tbehavior: \"smooth\"\n\t\t});\n\t\telse element.value.scrollTop = scrollTop;\n\t\tupdate();\n\t}\n\tfunction reset() {\n\t\tstate.value = \"ok\";\n\t\tanchorIndex = -1;\n\t\tanchorOffset = 0;\n\t\tif (element.value && direction === \"reverse\" && items.value.length > 0) {\n\t\t\tconst lastIndex = items.value.length - 1;\n\t\t\tconst totalHeight = (offsets.value[lastIndex] || 0) + (heights.value[lastIndex] || estimate());\n\t\t\telement.value.scrollTop = totalHeight;\n\t\t}\n\t}\n\tonScopeDispose(() => {\n\t\tif (!IN_BROWSER) return;\n\t\tcancelAnimationFrame(raf);\n\t\tcancelAnimationFrame(rebuildRaf);\n\t\tcancelAnimationFrame(edgeRaf);\n\t}, true);\n\treturn {\n\t\telement,\n\t\titems: computedItems,\n\t\toffset: readonly(offset),\n\t\tsize: readonly(size),\n\t\tstate,\n\t\tscrollTo,\n\t\tscroll,\n\t\tscrollend: scroll,\n\t\tresize,\n\t\treset\n\t};\n}\n/**\n* Creates a virtual scrolling context with dependency injection support.\n*\n* @param items Reactive array of items to virtualize\n* @param options Configuration options including namespace\n* @template T The type of the items\n* @returns Trinity tuple: [useVirtual, provideVirtual, defaultVirtual]\n*\n* @see https://0.vuetifyjs.com/composables/data/create-virtual\n*\n* @example\n* ```ts\n* // Create injectable context\n* const [useVirtual, provideVirtual, virtual] = createVirtualContext(items, {\n*   namespace: 'my-virtual',\n*   overscan: 10,\n* })\n*\n* // In parent component\n* provideVirtual()\n*\n* // In child component\n* const virtual = useVirtual()\n* ```\n*/\nfunction createVirtualContext(items, _options = {}) {\n\tconst { namespace = \"v0:virtual\", ...options } = _options;\n\treturn createTrinity(namespace, createVirtual(items, options));\n}\n/**\n* Returns the current virtual context from dependency injection.\n*\n* @param namespace The namespace for the virtual context. Defaults to `v0:virtual`.\n* @template T The type of the items\n* @returns The current virtual context.\n*\n* @throws An error if the virtual context is not found and no default is provided.\n*\n* @see https://0.vuetifyjs.com/composables/data/create-virtual\n*\n* @example\n* ```vue\n* <script lang=\"ts\" setup>\n*   import { createVirtual } from '@vuetify/v0'\n*\n*   // Inject virtual context provided by parent\n*   const virtual = useVirtual()\n* <\\/script>\n*\n* <template>\n*   <div>\n*     <p>Visible items: {{ virtual.items.value.length }}</p>\n*   </div>\n* </template>\n* ```\n*/\nfunction useVirtual(namespace = \"v0:virtual\") {\n\treturn useContext(namespace);\n}\n//#endregion\n//#region src/composables/toHighlight/index.ts\n/**\n* @module toHighlight\n*\n* @see https://0.vuetifyjs.com/composables/transformers/to-highlight\n*\n* @remarks\n* Pure transformer — no DOM, no state, no registry, no reactivity. Splits text\n* into matched and unmatched chunks given a query string, an array of query\n* strings, or pre-computed `[start, end]` match ranges (e.g., from createFilter).\n* Returns a plain array; wrap the call in `computed()` for reactive recomputation.\n*\n* @example\n* ```ts\n* import { toHighlight } from '@vuetify/v0'\n*\n* const chunks = toHighlight('Hello World', 'World')\n* // [{ text: 'Hello ', match: false }, { text: 'World', match: true }]\n* ```\n*/\nfunction merge(ranges) {\n\tconst sorted = ranges.filter((span) => span[0] < span[1]).toSorted((a, b) => a[0] - b[0]);\n\tconst merged = [];\n\tfor (const span of sorted) {\n\t\tconst last = merged.at(-1);\n\t\tif (last && span[0] <= last[1]) last[1] = Math.max(last[1], span[1]);\n\t\telse merged.push([span[0], span[1]]);\n\t}\n\treturn merged;\n}\nfunction chunk(text, ranges) {\n\tconst chunks = [];\n\tlet cursor = 0;\n\tfor (const [start, end] of ranges) {\n\t\tif (cursor < start) chunks.push({\n\t\t\ttext: text.slice(cursor, start),\n\t\t\tmatch: false\n\t\t});\n\t\tchunks.push({\n\t\t\ttext: text.slice(start, end),\n\t\t\tmatch: true\n\t\t});\n\t\tcursor = end;\n\t}\n\tif (cursor < text.length) chunks.push({\n\t\ttext: text.slice(cursor),\n\t\tmatch: false\n\t});\n\treturn chunks;\n}\nfunction find(text, query, options) {\n\tconst spans = [];\n\tfor (const term of (/* @__PURE__ */ toArray(query)).filter(Boolean)) spans.push(.../* @__PURE__ */ findMatchRanges(text, term, options));\n\treturn merge(spans);\n}\n/**\n* Splits text into matched and unmatched chunks.\n*\n* Pure transformer — returns a plain array. Wrap the call in `computed()` for\n* reactive recomputation.\n*\n* Priority: `options.matches` (when non-empty) → `query` → no-match fallback.\n*\n* @param text The source string to split.\n* @param query One or more search terms. Empty strings are ignored. Case sensitivity controlled by `options.ignoreCase`.\n* @param options Optional `matches`, `matchAll`, `ignoreCase`, `ignoreAccents`.\n* @returns A `HighlightChunk[]` array.\n*\n* @see https://0.vuetifyjs.com/composables/transformers/to-highlight\n*\n* @example\n* ```ts\n* import { computed, shallowRef } from 'vue'\n* import { toHighlight } from '@vuetify/v0'\n*\n* const query = shallowRef('World')\n* const chunks = computed(() => toHighlight('Hello World', query))\n*\n* console.log(chunks.value)\n* // [{ text: 'Hello ', match: false }, { text: 'World', match: true }]\n* ```\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toHighlight(text, query, options = {}) {\n\tconst _text = toValue(text);\n\tconst _query = toValue(query);\n\tconst _matches = toValue(options.matches);\n\tconst matchAll = toValue(options.matchAll) ?? false;\n\tconst ignoreCase = toValue(options.ignoreCase) ?? false;\n\tconst ignoreAccents = toValue(options.ignoreAccents) ?? false;\n\tif (_matches?.length) return chunk(_text, merge(_matches));\n\tif (_query) {\n\t\tconst ranges = find(_text, _query, {\n\t\t\tmatchAll,\n\t\t\tignoreCase,\n\t\t\tignoreAccents\n\t\t});\n\t\treturn ranges.length > 0 ? chunk(_text, ranges) : [{\n\t\t\ttext: _text,\n\t\t\tmatch: false\n\t\t}];\n\t}\n\treturn [{\n\t\ttext: _text,\n\t\tmatch: false\n\t}];\n}\n//#endregion\n//#region src/composables/toReactive/index.ts\n/**\n* @module toReactive\n*\n* @see https://0.vuetifyjs.com/composables/transformers/to-reactive\n*\n* @remarks\n* Utility function to convert values and refs into reactive proxies with ref unwrapping.\n*\n* Key features:\n* - Automatic ref unwrapping\n* - Deep reactive proxying\n* - Map and Set support with ref unwrapping\n* - Nested object/array reactivity\n* - Type preservation\n*\n* Perfect for creating reactive versions of plain objects while automatically unwrapping refs.\n*\n* @example\n* ```ts\n* import { shallowRef } from 'vue'\n* import { toReactive } from '@vuetify/v0'\n*\n* const source = { name: shallowRef('Alice'), age: 30 }\n* const reactive = toReactive(source)\n* console.log(reactive.name) // 'Alice' (auto-unwrapped)\n* ```\n*/\nfunction createMapProxy(refObject) {\n\tlet mapProxy;\n\tconst mapHandlers = {\n\t\tget: (key) => unref(refObject.value.get(key)),\n\t\tset: (key, value) => {\n\t\t\tconst map = refObject.value;\n\t\t\tconst existingValue = map.get(key);\n\t\t\tif (isRef(existingValue)) existingValue.value = unref(value);\n\t\t\telse map.set(key, value);\n\t\t\treturn mapProxy;\n\t\t},\n\t\thas: (key) => refObject.value.has(key),\n\t\tdelete: (key) => refObject.value.delete(key),\n\t\tclear: () => refObject.value.clear(),\n\t\tkeys: () => refObject.value.keys(),\n\t\t*values() {\n\t\t\tfor (const value of refObject.value.values()) yield unref(value);\n\t\t},\n\t\t*entries() {\n\t\t\tfor (const [key, value] of refObject.value.entries()) yield [key, unref(value)];\n\t\t},\n\t\tforEach: (callback, thisArg) => {\n\t\t\tfor (const [key, value] of refObject.value.entries()) callback.call(thisArg, unref(value), key, mapProxy);\n\t\t}\n\t};\n\tmapHandlers[Symbol.iterator] = mapHandlers.entries;\n\tmapProxy = new Proxy(/* @__PURE__ */ new Map(), { get(_, p) {\n\t\tif (p === \"size\") return refObject.value.size;\n\t\tif (Object.hasOwn(mapHandlers, p)) return mapHandlers[p];\n\t\tconst map = refObject.value;\n\t\tconst value = Reflect.get(map, p);\n\t\treturn /* @__PURE__ */ isFunction(value) ? value.bind(map) : value;\n\t} });\n\treturn reactive(mapProxy);\n}\nfunction createSetProxy(refObject) {\n\tlet setProxy;\n\tconst setHandlers = {\n\t\tadd: (value) => {\n\t\t\trefObject.value.add(value);\n\t\t\treturn setProxy;\n\t\t},\n\t\thas: (value) => refObject.value.has(value),\n\t\tdelete: (value) => refObject.value.delete(value),\n\t\tclear: () => refObject.value.clear(),\n\t\t*keys() {\n\t\t\tfor (const value of refObject.value.values()) yield unref(value);\n\t\t},\n\t\t*values() {\n\t\t\tfor (const value of refObject.value.values()) yield unref(value);\n\t\t},\n\t\t*entries() {\n\t\t\tfor (const value of refObject.value.values()) {\n\t\t\t\tconst unreffedValue = unref(value);\n\t\t\t\tyield [unreffedValue, unreffedValue];\n\t\t\t}\n\t\t},\n\t\tforEach: (callback, thisArg) => {\n\t\t\tfor (const value of refObject.value) {\n\t\t\t\tconst unreffedValue = unref(value);\n\t\t\t\tcallback.call(thisArg, unreffedValue, unreffedValue, setProxy);\n\t\t\t}\n\t\t}\n\t};\n\tsetHandlers[Symbol.iterator] = setHandlers.values;\n\tsetProxy = new Proxy(/* @__PURE__ */ new Set(), { get(_, p) {\n\t\tif (p === \"size\") return refObject.value.size;\n\t\tif (Object.hasOwn(setHandlers, p)) return setHandlers[p];\n\t\tconst set = refObject.value;\n\t\tconst value = Reflect.get(set, p);\n\t\treturn /* @__PURE__ */ isFunction(value) ? value.bind(set) : value;\n\t} });\n\treturn reactive(setProxy);\n}\nfunction createObjectProxy(refObject) {\n\treturn reactive(new Proxy({}, {\n\t\tget(_, p, receiver) {\n\t\t\treturn unref(Reflect.get(refObject.value, p, receiver));\n\t\t},\n\t\tset(_, p, value) {\n\t\t\treturn Reflect.set(refObject.value, p, value);\n\t\t},\n\t\tdeleteProperty(_, p) {\n\t\t\treturn Reflect.deleteProperty(refObject.value, p);\n\t\t},\n\t\thas(_, p) {\n\t\t\treturn Reflect.has(refObject.value, p);\n\t\t},\n\t\townKeys() {\n\t\t\treturn Reflect.ownKeys(refObject.value);\n\t\t},\n\t\tgetOwnPropertyDescriptor(_, p) {\n\t\t\tconst desc = Reflect.getOwnPropertyDescriptor(refObject.value, p);\n\t\t\tif (!desc) return;\n\t\t\tconst newDesc = {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: desc.enumerable\n\t\t\t};\n\t\t\tif (\"value\" in desc) {\n\t\t\t\tnewDesc.value = unref(desc.value);\n\t\t\t\tnewDesc.writable = desc.writable;\n\t\t\t} else {\n\t\t\t\tnewDesc.get = desc.get;\n\t\t\t\tnewDesc.set = desc.set;\n\t\t\t}\n\t\t\treturn newDesc;\n\t\t}\n\t}));\n}\n/**\n* Converts a `MaybeRef` to a `UnwrapNestedRefs`.\n*\n* @param objectRef The object to convert.\n* @template Z The type of the object.\n* @returns The converted object.\n*\n* @see https://0.vuetifyjs.com/composables/transformers/to-reactive\n*\n* @example\n* ```ts\n* import { ref } from 'vue'\n* import { toReactive } from '@vuetify/v0'\n*\n* const state = ref({ name: 'John', age: 30 })\n* const rstate = toReactive(state)\n*\n* console.log(rstate.name) // John\n* ```\n*/\nfunction toReactive(objectRef) {\n\tif (!isRef(objectRef)) return reactive(objectRef);\n\tconst refObject = objectRef;\n\tconst target = refObject.value;\n\tif (target instanceof Map) return createMapProxy(refObject);\n\tif (target instanceof Set) return createSetProxy(refObject);\n\treturn createObjectProxy(refObject);\n}\n//#endregion\n//#region src/composables/useBreakpoints/index.ts\n/**\n* @module useBreakpoints\n*\n* @see https://0.vuetifyjs.com/composables/plugins/use-breakpoints\n*\n* @remarks\n* Responsive breakpoint detection composable with window resize handling.\n*\n* Key features:\n* - matchMedia-based detection for zoom-accurate breakpoints\n* - Six built-in breakpoints (xs, sm, md, lg, xl, xxl) with Vuetify 4 default widths\n* - `isMobile` flag and configurable `mobileBreakpoint`\n* - Automatic resize listener with cleanup\n* - SSR-safe with hydration flush\n* - Custom breakpoint configuration\n*\n* Perfect for responsive layouts and conditional rendering based on screen size.\n*\n* @example\n* ```ts\n* import { useBreakpoints } from '@vuetify/v0'\n*\n* const { current, isMobile, smAndUp } = useBreakpoints()\n* console.log(current.value) // 'md'\n* ```\n*/\n/**\n* Creates default breakpoint configuration.\n*\n* @returns The default breakpoint configuration object.\n*/\nfunction createDefaultBreakpoints() {\n\treturn {\n\t\tmobileBreakpoint: \"lg\",\n\t\tbreakpoints: {\n\t\t\txs: 0,\n\t\t\tsm: 600,\n\t\t\tmd: 840,\n\t\t\tlg: 1145,\n\t\t\txl: 1545,\n\t\t\txxl: 2138\n\t\t}\n\t};\n}\n/**\n* Creates a new breakpoints instance.\n*\n* @param options The options for the breakpoints instance.\n* @returns A new breakpoints instance.\n*\n* @see https://0.vuetifyjs.com/composables/plugins/use-breakpoints\n*\n* @example\n* ```ts\n* import { createBreakpoints } from '@vuetify/v0'\n*\n* const breakpoints = createBreakpoints({\n*   namespace: 'v0:breakpoints',\n*   mobileBreakpoint: 'md',\n*   breakpoints: {\n*     xs: 0,\n*     sm: 600,\n*     md: 840,\n*     lg: 1145,\n*     xl: 1545,\n*     xxl: 2138,\n*   },\n* })\n* ```\n*/\nfunction createBreakpoints(_options = {}) {\n\tconst { ssr, ...options } = _options;\n\tconst { mobileBreakpoint, breakpoints } = /* @__PURE__ */ mergeDeep(createDefaultBreakpoints(), options);\n\tconst sorted = Object.entries(breakpoints).toSorted((a, b) => a[1] - b[1]);\n\tconst names = sorted.map(([n]) => n);\n\tconst mb = /* @__PURE__ */ isNumber(mobileBreakpoint) ? mobileBreakpoint : breakpoints[mobileBreakpoint] ?? breakpoints.md;\n\tconst initialWidth = ssr ? ssr.clientWidth : IN_BROWSER ? window.innerWidth : 0;\n\tconst initialHeight = ssr ? ssr.clientHeight ?? 0 : IN_BROWSER ? window.innerHeight : 0;\n\tconst name = shallowRef(\"xs\");\n\tconst width = shallowRef(initialWidth);\n\tconst height = shallowRef(initialHeight);\n\tconst isMobile = shallowRef(false);\n\tconst xs = shallowRef(false);\n\tconst sm = shallowRef(false);\n\tconst md = shallowRef(false);\n\tconst lg = shallowRef(false);\n\tconst xl = shallowRef(false);\n\tconst xxl = shallowRef(false);\n\tconst smAndUp = shallowRef(false);\n\tconst mdAndUp = shallowRef(false);\n\tconst lgAndUp = shallowRef(false);\n\tconst xlAndUp = shallowRef(false);\n\tconst smAndDown = shallowRef(false);\n\tconst mdAndDown = shallowRef(false);\n\tconst lgAndDown = shallowRef(false);\n\tconst xlAndDown = shallowRef(false);\n\tfunction resolve(value, media) {\n\t\tlet current = \"xs\";\n\t\tfor (let i = sorted.length - 1; i >= 0; i--) {\n\t\t\tconst px = sorted[i][1];\n\t\t\tif (media ? window.matchMedia(`(min-width: ${px}px)`).matches : value >= px) {\n\t\t\t\tcurrent = sorted[i][0];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tconst index = names.indexOf(current);\n\t\t/* v8 ignore next 3 -- alternate arm is defensive: mb always resolves to a number via `?? breakpoints.md` */\n\t\tconst mobile = /* @__PURE__ */ isNumber(mb) ? media ? !window.matchMedia(`(min-width: ${mb}px)`).matches : value < mb : index < names.indexOf(mobileBreakpoint);\n\t\treturn {\n\t\t\tcurrent,\n\t\t\tindex,\n\t\t\tmobile\n\t\t};\n\t}\n\tfunction apply({ current, index, mobile }) {\n\t\tname.value = current;\n\t\tisMobile.value = mobile;\n\t\txs.value = index === 0;\n\t\tsm.value = index === 1;\n\t\tmd.value = index === 2;\n\t\tlg.value = index === 3;\n\t\txl.value = index === 4;\n\t\txxl.value = index === 5;\n\t\tsmAndUp.value = index >= 1;\n\t\tmdAndUp.value = index >= 2;\n\t\tlgAndUp.value = index >= 3;\n\t\txlAndUp.value = index >= 4;\n\t\tsmAndDown.value = index <= 1;\n\t\tmdAndDown.value = index <= 2;\n\t\tlgAndDown.value = index <= 3;\n\t\txlAndDown.value = index <= 4;\n\t}\n\tapply(resolve(initialWidth, !ssr && IN_BROWSER && SUPPORTS_MATCH_MEDIA));\n\tfunction update() {\n\t\tif (!IN_BROWSER) return;\n\t\twidth.value = window.innerWidth;\n\t\theight.value = window.innerHeight;\n\t\tapply(resolve(width.value, SUPPORTS_MATCH_MEDIA));\n\t}\n\treturn {\n\t\tbreakpoints,\n\t\tmobileBreakpoint,\n\t\tname: readonly(name),\n\t\twidth: readonly(width),\n\t\theight: readonly(height),\n\t\tisMobile: readonly(isMobile),\n\t\txs: readonly(xs),\n\t\tsm: readonly(sm),\n\t\tmd: readonly(md),\n\t\tlg: readonly(lg),\n\t\txl: readonly(xl),\n\t\txxl: readonly(xxl),\n\t\tsmAndUp: readonly(smAndUp),\n\t\tmdAndUp: readonly(mdAndUp),\n\t\tlgAndUp: readonly(lgAndUp),\n\t\txlAndUp: readonly(xlAndUp),\n\t\tsmAndDown: readonly(smAndDown),\n\t\tmdAndDown: readonly(mdAndDown),\n\t\tlgAndDown: readonly(lgAndDown),\n\t\txlAndDown: readonly(xlAndDown),\n\t\tssr: !!ssr,\n\t\tupdate\n\t};\n}\nfunction createBreakpointsFallback(options = {}) {\n\tif (options.ssr) return createBreakpoints(options);\n\tconst defaults = createDefaultBreakpoints();\n\treturn {\n\t\tbreakpoints: defaults.breakpoints,\n\t\tmobileBreakpoint: defaults.mobileBreakpoint,\n\t\tname: readonly(shallowRef(\"xs\")),\n\t\twidth: readonly(shallowRef(0)),\n\t\theight: readonly(shallowRef(0)),\n\t\tisMobile: readonly(shallowRef(true)),\n\t\txs: readonly(shallowRef(true)),\n\t\tsm: readonly(shallowRef(false)),\n\t\tmd: readonly(shallowRef(false)),\n\t\tlg: readonly(shallowRef(false)),\n\t\txl: readonly(shallowRef(false)),\n\t\txxl: readonly(shallowRef(false)),\n\t\tsmAndUp: readonly(shallowRef(false)),\n\t\tmdAndUp: readonly(shallowRef(false)),\n\t\tlgAndUp: readonly(shallowRef(false)),\n\t\txlAndUp: readonly(shallowRef(false)),\n\t\tsmAndDown: readonly(shallowRef(true)),\n\t\tmdAndDown: readonly(shallowRef(true)),\n\t\tlgAndDown: readonly(shallowRef(true)),\n\t\txlAndDown: readonly(shallowRef(true)),\n\t\tssr: false,\n\t\tupdate: () => {}\n\t};\n}\nconst [createBreakpointsContext, createBreakpointsPlugin, useBreakpoints] = createPluginContext(\"v0:breakpoints\", (options) => createBreakpoints(options), {\n\tfallback: () => createBreakpointsFallback(),\n\tsetup: (context, app, _options) => {\n\t\tif (IN_BROWSER && !_options?.ssr) context.update();\n\t\tconst { mount } = app;\n\t\tapp.mount = (...args) => {\n\t\t\tconst vm = mount(...args);\n\t\t\tconst hydration = useHydration();\n\t\t\tfunction listener() {\n\t\t\t\tcontext.update();\n\t\t\t}\n\t\t\tconst unwatch = watch(hydration.isHydrated, (hydrated) => {\n\t\t\t\tif (hydrated) listener();\n\t\t\t}, { immediate: true });\n\t\t\tconst cleanup = useWindowEventListener(\"resize\", listener, { passive: true });\n\t\t\tonScopeDispose(() => {\n\t\t\t\tcleanup();\n\t\t\t\tunwatch();\n\t\t\t}, true);\n\t\t\tapp.mount = mount;\n\t\t\treturn vm;\n\t\t};\n\t}\n});\n//#endregion\n//#region src/composables/useDate/index.ts\n/**\n* @module useDate\n*\n* @see https://0.vuetifyjs.com/composables/plugins/use-date\n*\n* @remarks\n* Date manipulation composable with adapter pattern for date operations.\n*\n* Key features:\n* - Adapter pattern for date library abstraction\n* - Locale-aware formatting via Intl.DateTimeFormat\n* - `firstDayOfWeek` derived from locale and propagated to adapter\n* - Integration with useLocale for automatic locale sync\n*\n* @example Using the built-in Temporal adapter\n* ```ts\n* import { V0DateAdapter } from '@vuetify/v0/date'\n* import { createDatePlugin } from '@vuetify/v0'\n*\n* const app = createApp(App)\n* app.use(createDatePlugin({ adapter: new V0DateAdapter() }))\n*\n* // In a component:\n* const { adapter } = useDate()\n* const today = adapter.date()\n* const formatted = adapter.format(today, 'fullDate')\n* ```\n*\n* @example Custom adapter\n* ```ts\n* import { DateAdapter } from '@vuetify/v0'\n*\n* class DateFnsAdapter extends DateAdapter<Date> {\n*   // ... implementation\n* }\n*\n* app.use(createDatePlugin({ adapter: new DateFnsAdapter() }))\n* ```\n*/\n/**\n* Default short locale codes mapped to full Intl locale strings.\n* Used when useLocale provides a short code without region (e.g., 'en' instead of 'en-US').\n*/\nconst defaultLocales = {\n\ten: \"en-US\",\n\tes: \"es-ES\",\n\tfr: \"fr-FR\",\n\tde: \"de-DE\",\n\tit: \"it-IT\",\n\tpt: \"pt-BR\",\n\tja: \"ja-JP\",\n\tko: \"ko-KR\",\n\tzh: \"zh-CN\",\n\tru: \"ru-RU\",\n\tar: \"ar-SA\"\n};\n/**\n* Creates a new date context.\n*\n* @param options Adapter and locale configuration.\n* @template Z The date type used by the adapter.\n* @template E The date context type.\n* @returns A date context.\n*\n* @see https://0.vuetifyjs.com/composables/plugins/use-date\n*\n* @example\n* ```ts\n* import { V0DateAdapter } from '@vuetify/v0/date'\n*\n* const { adapter } = createDate({ adapter: new V0DateAdapter() })\n* const today = adapter.date()\n*\n* // With locale options\n* const { adapter } = createDate({\n*   adapter: new V0DateAdapter(),\n*   locale: 'de-DE',\n* })\n* ```\n*/\nfunction createDate(options) {\n\tconst { locales = defaultLocales, adapter, locale: initialLocale, firstDayOfWeek: explicitFirstDay } = options;\n\tlet selectedId;\n\ttry {\n\t\tif (hasInjectionContext()) selectedId = useLocale().selectedId;\n\t} catch {}\n\tconst locale = computed(() => {\n\t\tconst selected = selectedId?.value;\n\t\tif (!/* @__PURE__ */ isNullOrUndefined(selected)) {\n\t\t\tconst str = String(selected);\n\t\t\treturn str.includes(\"-\") ? str : locales[str] ?? str;\n\t\t}\n\t\tconst fallback = initialLocale ?? adapter.locale ?? \"en-US\";\n\t\treturn fallback.includes(\"-\") ? fallback : locales[fallback] ?? fallback;\n\t});\n\tconst firstDayOfWeek = computed(() => {\n\t\tif (!/* @__PURE__ */ isUndefined(explicitFirstDay)) return explicitFirstDay;\n\t\tconst loc = locale.value;\n\t\treturn loc ? (/* @__PURE__ */ deriveWeekInfo(loc)).firstDay : 0;\n\t});\n\tif (hasInjectionContext()) onScopeDispose(watchEffect(() => {\n\t\tconst loc = locale.value;\n\t\tif (loc && adapter.locale !== loc) adapter.locale = loc;\n\t\tconst fdow = firstDayOfWeek.value;\n\t\tif (adapter.firstDayOfWeek !== fdow) adapter.firstDayOfWeek = fdow;\n\t}), true);\n\telse {\n\t\tconst loc = locale.value;\n\t\tif (loc && adapter.locale !== loc) adapter.locale = loc;\n\t\tconst fdow = firstDayOfWeek.value;\n\t\tif (adapter.firstDayOfWeek !== fdow) adapter.firstDayOfWeek = fdow;\n\t}\n\treturn {\n\t\tadapter,\n\t\tlocale,\n\t\tfirstDayOfWeek\n\t};\n}\n/**\n* Creates a new date context trinity.\n*\n* @param options Adapter, locale, and namespace configuration.\n* @template Z The date type used by the adapter.\n* @template E The date context type.\n* @returns A trinity [useContext, provideContext, defaultContext].\n*\n* @see https://0.vuetifyjs.com/composables/plugins/use-date\n*\n* @example\n* ```ts\n* import { V0DateAdapter } from '@vuetify/v0/date'\n*\n* const [useAppDate, provideAppDate] = createDateContext({\n*   adapter: new V0DateAdapter(),\n*   namespace: 'app:date',\n* })\n* ```\n*/\nfunction createDateContext(_options) {\n\tconst { namespace = \"v0:date\", ...options } = _options;\n\treturn createTrinity(namespace, createDate(options));\n}\n/**\n* Creates a new date plugin.\n*\n* @param options Adapter, locale, and namespace configuration.\n* @template Z The date type used by the adapter.\n* @template E The date context type.\n* @returns A Vue plugin.\n*\n* @see https://0.vuetifyjs.com/composables/plugins/use-date\n*\n* @example\n* ```ts\n* import { V0DateAdapter } from '@vuetify/v0/date'\n*\n* const app = createApp(App)\n* app.use(createDatePlugin({ adapter: new V0DateAdapter() }))\n*\n* // With locale options\n* app.use(createDatePlugin({\n*   adapter: new V0DateAdapter(),\n*   locale: 'de-DE',\n* }))\n* ```\n*/\nfunction createDatePlugin(_options) {\n\tconst { namespace = \"v0:date\", ...options } = _options;\n\treturn createPlugin({\n\t\tnamespace,\n\t\tprovide: (app) => {\n\t\t\tconst [, provideDateContext, context] = createDateContext({\n\t\t\t\tnamespace,\n\t\t\t\t...options\n\t\t\t});\n\t\t\tprovideDateContext(context, app);\n\t\t}\n\t});\n}\n/**\n* Returns the current date context.\n*\n* Requires `createDatePlugin` to be installed with an adapter.\n*\n* @param namespace The namespace to look up (defaults to 'v0:date').\n* @template Z The date type used by the adapter.\n* @template E The date context type.\n* @returns The current date context.\n* @throws If called outside a component or without a date plugin installed.\n*\n* @see https://0.vuetifyjs.com/composables/plugins/use-date\n*\n* @example\n* ```ts\n* // main.ts\n* import { V0DateAdapter } from '@vuetify/v0/date'\n* import { createDatePlugin } from '@vuetify/v0'\n*\n* app.use(createDatePlugin({ adapter: new V0DateAdapter() }))\n* ```\n*\n* @example\n* ```vue\n* <script setup lang=\"ts\">\n* import { useDate } from '@vuetify/v0'\n*\n* const { adapter, locale } = useDate()\n* const today = adapter.date()\n* <\\/script>\n* ```\n*/\nfunction useDate(namespace = \"v0:date\") {\n\tif (!/* @__PURE__ */ instanceExists()) throw new V0Error(\"[v0] useDate() must be called inside a Vue component with createDatePlugin installed.\\n\\nExample:\\n  import { V0DateAdapter } from '@vuetify/v0/date'\\n  import { createDatePlugin } from '@vuetify/v0'\\n\\n  app.use(createDatePlugin({ adapter: new V0DateAdapter() }))\", {\n\t\tcode: \"V0_PLUGIN_MISSING\",\n\t\tplugin: \"createDatePlugin\"\n\t});\n\treturn useContext(namespace);\n}\n//#endregion\n//#region src/composables/useMutationObserver/index.ts\n/**\n* @module useMutationObserver\n*\n* @see https://0.vuetifyjs.com/composables/system/use-mutation-observer\n*\n* @remarks\n* MutationObserver composable with lifecycle management.\n*\n* Key features:\n* - MutationObserver API wrapper\n* - `isActive` reactive flag\n* - `once` option for single-fire observation\n* - Pause/resume/stop functionality\n* - Automatic cleanup on unmount\n* - SSR-safe (checks SUPPORTS_MUTATION_OBSERVER)\n* - Hydration-aware\n* - Configurable observation options (childList, attributes, characterData, etc.)\n*\n* Perfect for detecting DOM changes and responding to mutations.\n*\n* @example\n* ```ts\n* import { useTemplateRef } from 'vue'\n* import { useMutationObserver } from '@vuetify/v0'\n*\n* const target = useTemplateRef('target')\n* useMutationObserver(target, records => {\n*   console.log(records)\n* }, { childList: true })\n* ```\n*/\n/**\n* A composable that uses the Mutation Observer API to detect changes in the DOM.\n*\n* @param target The element to observe.\n* @param callback The callback to execute when a mutation is observed.\n* @param options The options for the Mutation Observer.\n* @returns An object with methods to control the observer.\n*\n* @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver\n* @see https://0.vuetifyjs.com/composables/system/use-mutation-observer\n*\n* @example\n* ```ts\n* import { ref } from 'vue'\n* import { useMutationObserver } from '@vuetify/v0'\n*\n* const container = ref<HTMLElement>()\n*\n* const { pause, resume, isPaused } = useMutationObserver(\n*   container,\n*   (mutations) => {\n*     mutations.forEach((mutation) => {\n*       if (mutation.type === 'childList') {\n*         console.log('Children changed:', mutation.addedNodes, mutation.removedNodes)\n*       } else if (mutation.type === 'attributes') {\n*         console.log('Attribute changed:', mutation.attributeName)\n*       }\n*     })\n*   },\n*   {\n*     childList: true,\n*     attributes: true,\n*     subtree: true\n*   }\n* )\n*\n* // Pause observation\n* pause()\n*\n* // Resume observation\n* resume()\n* ```\n*/\nfunction useMutationObserver(target, callback, options = {}) {\n\tconst observerOptions = {\n\t\tchildList: options.childList ?? true,\n\t\tattributes: options.attributes ?? false,\n\t\tcharacterData: options.characterData ?? false,\n\t\tsubtree: options.subtree ?? false,\n\t\tattributeOldValue: options.attributeOldValue ?? false,\n\t\tcharacterDataOldValue: options.characterDataOldValue ?? false,\n\t\tattributeFilter: options.attributeFilter\n\t};\n\treturn createObserver(target, callback, {\n\t\tsupports: SUPPORTS_MUTATION_OBSERVER,\n\t\tonce: options.once,\n\t\tcreate: (cb) => new MutationObserver((mutations) => {\n\t\t\tcb(mutations.map((m) => ({\n\t\t\t\ttype: m.type,\n\t\t\t\ttarget: m.target,\n\t\t\t\taddedNodes: m.addedNodes,\n\t\t\t\tremovedNodes: m.removedNodes,\n\t\t\t\tpreviousSibling: m.previousSibling,\n\t\t\t\tnextSibling: m.nextSibling,\n\t\t\t\tattributeName: m.attributeName,\n\t\t\t\tattributeNamespace: m.attributeNamespace,\n\t\t\t\toldValue: m.oldValue\n\t\t\t})));\n\t\t}),\n\t\tobserve: (obs, el) => obs.observe(el, observerOptions),\n\t\timmediate: options.immediate ? (el) => {\n\t\t\tconst emptyNodeList = {\n\t\t\t\tlength: 0,\n\t\t\t\titem: () => null,\n\t\t\t\tforEach: () => {},\n\t\t\t\t*[Symbol.iterator]() {}\n\t\t\t};\n\t\t\treturn [{\n\t\t\t\ttype: \"childList\",\n\t\t\t\ttarget: el,\n\t\t\t\taddedNodes: emptyNodeList,\n\t\t\t\tremovedNodes: emptyNodeList,\n\t\t\t\tpreviousSibling: null,\n\t\t\t\tnextSibling: null,\n\t\t\t\tattributeName: null,\n\t\t\t\tattributeNamespace: null,\n\t\t\t\toldValue: null\n\t\t\t}];\n\t\t} : void 0,\n\t\tonceIncludesImmediate: true\n\t});\n}\n//#endregion\n//#region src/composables/useDragDrop/adapters/adapter.ts\n/**\n* @module useDragDrop/adapters/adapter\n*\n* @remarks\n* Adapter contract and abstract base for useDragDrop. Concrete adapters extend\n* `DragDropAdapter<Z>` to share the `cleanup` field, `dispose()` lifecycle, and\n* the `locate()` DOM-walk helper.\n*/\n/**\n* Abstract base class for useDragDrop adapters. Provides a `cleanup` slot, a\n* `dispose()` lifecycle, and a `locate()` helper that walks the DOM to find the\n* draggable ticket whose `el` ancestors a given event target.\n*\n* @example\n* ```ts\n* import { DragDropAdapter, type DragDropAdapterContext } from '@vuetify/v0'\n*\n* class MyAdapter extends DragDropAdapter {\n*   setup (context: DragDropAdapterContext) {\n*     const stop = useEventListener(document, 'mousedown', event => {\n*       const ticket = this.locate(event.target, context)\n*       if (ticket) context.emit.start(ticket, { x: event.clientX, y: event.clientY }, 'pointer')\n*     })\n*     this.cleanup = () => stop()\n*   }\n* }\n* ```\n*/\nvar DragDropAdapter = class {\n\tcleanup = null;\n\tdispose() {\n\t\tthis.cleanup?.();\n\t\tthis.cleanup = null;\n\t}\n\tlocate(target, context) {\n\t\tlet element = /* @__PURE__ */ isElement(target) ? target : null;\n\t\twhile (element) {\n\t\t\tfor (const ticket of context.draggables.values()) if (ticket.el.value === element) return ticket;\n\t\t\telement = element.parentElement;\n\t\t}\n\t\treturn null;\n\t}\n};\n//#endregion\n//#region src/composables/useDragDrop/adapters/pointer.ts\n/**\n* @module useDragDrop/adapters/pointer\n*\n* @remarks\n* Default pointer adapter for useDragDrop. Listens for `pointerdown` /\n* `pointermove` / `pointerup` / `pointercancel` on the document and emits the\n* drag lifecycle. Activation distance is configurable via `threshold`.\n*/\n/**\n* Default pointer adapter. Wires `pointerdown` / `pointermove` / `pointerup` /\n* `pointercancel` on the document and converts them into drag lifecycle calls.\n*\n* @example\n* ```ts\n* import { PointerAdapter, useDragDrop } from '@vuetify/v0'\n*\n* useDragDrop({ adapters: [new PointerAdapter({ threshold: 10 })] })\n* ```\n*/\nvar PointerAdapter = class extends DragDropAdapter {\n\tthreshold;\n\tconstructor(options = {}) {\n\t\tsuper();\n\t\tthis.threshold = options.threshold ?? 0;\n\t}\n\tsetup(context) {\n\t\tconst logger = useLogger();\n\t\tif (this.cleanup) {\n\t\t\tlogger.warn(\"PointerAdapter setup called twice; previous registration will be replaced\");\n\t\t\tthis.dispose();\n\t\t}\n\t\tif (!IN_BROWSER) return;\n\t\tlet downSource = null;\n\t\tlet downOrigin = null;\n\t\tlet downId = null;\n\t\tlet started = false;\n\t\tfunction reset() {\n\t\t\tdownSource = null;\n\t\t\tdownOrigin = null;\n\t\t\tdownId = null;\n\t\t\tstarted = false;\n\t\t}\n\t\tconst onDown = (event) => {\n\t\t\tif (event.button !== 0) return;\n\t\t\tif (downSource) return;\n\t\t\tconst ticket = this.locate(event.target, context);\n\t\t\tif (!ticket) return;\n\t\t\tdownSource = ticket;\n\t\t\tdownOrigin = {\n\t\t\t\tx: event.clientX,\n\t\t\t\ty: event.clientY\n\t\t\t};\n\t\t\tdownId = event.pointerId;\n\t\t\tstarted = false;\n\t\t};\n\t\tconst onMove = (event) => {\n\t\t\tif (!downSource || !downOrigin || event.pointerId !== downId) return;\n\t\t\tconst point = {\n\t\t\t\tx: event.clientX,\n\t\t\t\ty: event.clientY\n\t\t\t};\n\t\t\tif (!started) {\n\t\t\t\tconst dx = point.x - downOrigin.x;\n\t\t\t\tconst dy = point.y - downOrigin.y;\n\t\t\t\tif (this.threshold > 0 && Math.hypot(dx, dy) < this.threshold) return;\n\t\t\t\tcontext.emit.start(downSource, downOrigin, \"pointer\");\n\t\t\t\tstarted = true;\n\t\t\t}\n\t\t\tcontext.emit.move(point);\n\t\t};\n\t\tfunction onUp(event) {\n\t\t\tif (event.pointerId !== downId) return;\n\t\t\tif (downSource && started) context.emit.drop();\n\t\t\treset();\n\t\t}\n\t\tfunction onCancel(event) {\n\t\t\tif (event.pointerId !== downId) return;\n\t\t\tif (downSource && started) context.emit.cancel();\n\t\t\treset();\n\t\t}\n\t\tconst stopDown = useEventListener(document, \"pointerdown\", onDown);\n\t\tconst stopMove = useEventListener(document, \"pointermove\", onMove);\n\t\tconst stopUp = useEventListener(document, \"pointerup\", onUp);\n\t\tconst stopCancel = useEventListener(document, \"pointercancel\", onCancel);\n\t\tthis.cleanup = () => {\n\t\t\tstopDown();\n\t\t\tstopMove();\n\t\t\tstopUp();\n\t\t\tstopCancel();\n\t\t};\n\t}\n};\n//#endregion\n//#region src/composables/useDragDrop/adapters/keyboard.ts\n/**\n* @module useDragDrop/adapters/keyboard\n*\n* @remarks\n* Default keyboard adapter for useDragDrop. Listens for `keydown` on the\n* document. Activation keys (default Space and Enter) start and drop drags;\n* arrow keys nudge the drag point by `step` px; Escape cancels.\n*/\nfunction isEditable(element) {\n\tif (/* @__PURE__ */ isNull(element)) return false;\n\tconst tag = element.tagName;\n\tif (tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\") return true;\n\tif (element.isContentEditable) return true;\n\tconst role = element.getAttribute(\"role\");\n\treturn role === \"textbox\" || role === \"searchbox\" || role === \"combobox\" || role === \"spinbutton\";\n}\n/**\n* Default keyboard adapter. Listens for `keydown` on the document; activation\n* keys start/drop drags, arrow keys nudge the drag point, Escape cancels.\n*\n* @example\n* ```ts\n* import { KeyboardAdapter, useDragDrop } from '@vuetify/v0'\n*\n* useDragDrop({ adapters: [new KeyboardAdapter({ activate: ['x'], step: 32 })] })\n* ```\n*/\nvar KeyboardAdapter = class extends DragDropAdapter {\n\tactivate;\n\tstep;\n\tconstructor(options = {}) {\n\t\tsuper();\n\t\tthis.activate = options.activate ?? [\" \", \"Enter\"];\n\t\tthis.step = options.step ?? 16;\n\t}\n\tsetup(context) {\n\t\tconst logger = useLogger();\n\t\tif (this.cleanup) {\n\t\t\tlogger.warn(\"KeyboardAdapter setup called twice; previous registration will be replaced\");\n\t\t\tthis.dispose();\n\t\t}\n\t\tif (!IN_BROWSER) return;\n\t\tconst onKeydown = (event) => {\n\t\t\tconst focused = /* @__PURE__ */ getActiveElement();\n\t\t\tif (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) return;\n\t\t\tif (isEditable(focused)) return;\n\t\t\tconst ticket = this.locate(focused, context);\n\t\t\tconst isActive = !/* @__PURE__ */ isNull(context.active.value);\n\t\t\tif (this.activate.includes(event.key)) {\n\t\t\t\tif (isActive) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tcontext.emit.drop();\n\t\t\t\t} else if (ticket) {\n\t\t\t\t\tconst el = ticket.el.value;\n\t\t\t\t\tif (!el) {\n\t\t\t\t\t\tlogger.warn(\"KeyboardAdapter: cannot start drag — element is not mounted\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tconst rect = el.getBoundingClientRect();\n\t\t\t\t\tcontext.emit.start(ticket, {\n\t\t\t\t\t\tx: rect.left + rect.width / 2,\n\t\t\t\t\t\ty: rect.top + rect.height / 2\n\t\t\t\t\t}, \"keyboard\");\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.key === \"Escape\" && isActive) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tcontext.emit.cancel();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (isActive && event.key.startsWith(\"Arrow\")) {\n\t\t\t\tconst active = context.active.value;\n\t\t\t\tif (/* @__PURE__ */ isNull(active)) return;\n\t\t\t\tconst current = active.current;\n\t\t\t\tlet point = null;\n\t\t\t\tswitch (event.key) {\n\t\t\t\t\tcase \"ArrowUp\":\n\t\t\t\t\t\tpoint = {\n\t\t\t\t\t\t\tx: current.x,\n\t\t\t\t\t\t\ty: current.y - this.step\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ArrowDown\":\n\t\t\t\t\t\tpoint = {\n\t\t\t\t\t\t\tx: current.x,\n\t\t\t\t\t\t\ty: current.y + this.step\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ArrowLeft\":\n\t\t\t\t\t\tpoint = {\n\t\t\t\t\t\t\tx: current.x - this.step,\n\t\t\t\t\t\t\ty: current.y\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ArrowRight\":\n\t\t\t\t\t\tpoint = {\n\t\t\t\t\t\t\tx: current.x + this.step,\n\t\t\t\t\t\t\ty: current.y\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (point) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tcontext.emit.move(point);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tconst stop = useEventListener(document, \"keydown\", onKeydown);\n\t\tthis.cleanup = () => stop();\n\t}\n};\n//#endregion\n//#region src/composables/useDragDrop/index.ts\n/**\n* @module useDragDrop\n*\n* @see https://0.vuetifyjs.com/composables/system/use-drag-drop\n*\n* @remarks\n* Headless drag-and-drop primitive. Owns two registries (draggables and zones)\n* plus the active-drag state. Pointer and keyboard adapters ship by default;\n* lifecycle hooks and a plugin array provide extension points.\n*\n* @example\n* ```ts\n* import { useDragDrop } from '@vuetify/v0'\n*\n* const dnd = useDragDrop()\n* ```\n*/\n/**\n* Pure math for resolving where in an oriented zone a pointer would drop.\n* Internal — consumers rely on the `position.index` / `position.indicator`\n* fields delivered to `onDrop`.\n*\n* Assumes rects ascend along the axis (DOM order in normal flow). Reversed\n* layouts resolve arbitrary slots — always have — and sorting is not the fix:\n* the slot must stay the child's DOM index for consumers to splice by.\n*/\nfunction resolveDropPosition(point, rects, orientation) {\n\tif (rects.length === 0) return null;\n\tconst axis = orientation === \"vertical\" ? \"y\" : \"x\";\n\tconst start = orientation === \"vertical\" ? \"top\" : \"left\";\n\tconst end = orientation === \"vertical\" ? \"bottom\" : \"right\";\n\tconst coord = point[axis];\n\tlet index = rects.length;\n\tfor (const [at, rect] of rects.entries()) if (coord < rect[start] + (rect[end] - rect[start]) / 2) {\n\t\tindex = at;\n\t\tbreak;\n\t}\n\treturn index === 0 ? {\n\t\tindex,\n\t\tedge: \"before\",\n\t\trect: rects[0]\n\t} : {\n\t\tindex,\n\t\tedge: \"after\",\n\t\trect: rects[index - 1]\n\t};\n}\n/**\n* Create a headless drag-and-drop context.\n*\n* @param options - Adapters, plugins, and lifecycle hooks. All optional.\n* @returns A `DragDropContext<Z>` exposing `draggables` / `zones` registries,\n*   the `active` drag, the `isDragging` boolean, and a programmatic `cancel()`.\n*\n* @see https://0.vuetifyjs.com/composables/system/use-drag-drop\n*\n* @example\n* ```ts\n* import { useDragDrop } from '@vuetify/v0'\n* import { useTemplateRef } from 'vue'\n*\n* const dnd = useDragDrop<{ type: 'card', value: string }>()\n*\n* const draggable = useTemplateRef<HTMLElement>('draggable')\n* const dropzone = useTemplateRef<HTMLElement>('dropzone')\n*\n* dnd.draggables.register({ el: draggable, type: 'card', value: 'card-1' })\n* dnd.zones.register({\n*   el: dropzone,\n*   accept: ['card'],\n*   onDrop: (drag, position) => console.log(drag.value, position.index),\n* })\n* ```\n*/\nfunction useDragDrop(options = {}) {\n\tconst { plugins = [] } = options;\n\tconst logger = useLogger();\n\tconst _draggables = createRegistry({ events: true });\n\tconst _zones = createRegistry({ events: true });\n\tconst active = shallowRef(null);\n\tconst isDragging = toRef(() => !/* @__PURE__ */ isNull(active.value));\n\tconst scopes = /* @__PURE__ */ new Map();\n\tconst nodes = /* @__PURE__ */ new Map();\n\tfunction next(fn, ...args) {\n\t\tif (/* @__PURE__ */ isUndefined(fn)) return;\n\t\ttry {\n\t\t\tfn(...args);\n\t\t} catch (error) {\n\t\t\tlogger.error(\"useDragDrop hook threw\", error);\n\t\t}\n\t}\n\tfunction safeAccept(accept, drag) {\n\t\ttry {\n\t\t\tif (/* @__PURE__ */ isNull(drag)) return false;\n\t\t\tif (/* @__PURE__ */ isUndefined(accept)) return true;\n\t\t\tif (/* @__PURE__ */ isArray(accept)) return accept.includes(drag.type);\n\t\t\tconst result = accept(drag);\n\t\t\tif (/* @__PURE__ */ isThenable(result)) {\n\t\t\t\tlogger.warn(\"useDragDrop accept predicate returned a thenable; async predicates are not supported — treating as reject\");\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn Boolean(result);\n\t\t} catch (error) {\n\t\t\tlogger.error(\"useDragDrop accept predicate threw; treating as reject\", error);\n\t\t\treturn false;\n\t\t}\n\t}\n\tconst draggables = {\n\t\t..._draggables,\n\t\tregister(registration) {\n\t\t\tconst id = registration.id ?? /* @__PURE__ */ useId$1();\n\t\t\tconst el = toRef(() => toValue(registration.el));\n\t\t\tconst dragging = toRef(() => active.value?.id === id);\n\t\t\tconst input = {\n\t\t\t\t...registration,\n\t\t\t\tid,\n\t\t\t\tel,\n\t\t\t\tisDragging: dragging\n\t\t\t};\n\t\t\treturn _draggables.register(input);\n\t\t}\n\t};\n\tconst zones = {\n\t\t..._zones,\n\t\tregister(registration) {\n\t\t\tconst id = registration.id ?? /* @__PURE__ */ useId$1();\n\t\t\tif (_zones.has(id)) return _zones.register(registration);\n\t\t\tconst el = toRef(() => toValue(registration.el));\n\t\t\tconst isOver = toRef(() => active.value?.over === id);\n\t\t\tconst willAccept = toRef(() => safeAccept(registration.accept, active.value));\n\t\t\tconst rects = shallowRef([]);\n\t\t\tfunction refresh() {\n\t\t\t\tconst zoneEl = el.value;\n\t\t\t\trects.value = zoneEl ? Array.from(zoneEl.children).map((child) => child.getBoundingClientRect()) : [];\n\t\t\t}\n\t\t\tconst scope = effectScope();\n\t\t\tscopes.set(id, scope);\n\t\t\tscope.run(() => {\n\t\t\t\tif (registration.orientation) {\n\t\t\t\t\twatch(el, refresh, {\n\t\t\t\t\t\timmediate: true,\n\t\t\t\t\t\tflush: \"post\"\n\t\t\t\t\t});\n\t\t\t\t\tuseResizeObserver(el, refresh);\n\t\t\t\t\tuseMutationObserver(el, refresh, { childList: true });\n\t\t\t\t\twatch(() => active.value?.id, (id) => {\n\t\t\t\t\t\tif (id) refresh();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\twatch(el, (current) => {\n\t\t\t\t\tif (/* @__PURE__ */ isNull(current)) return;\n\t\t\t\t\tnodes.set(current, id);\n\t\t\t\t\tonWatcherCleanup(() => nodes.delete(current));\n\t\t\t\t}, { immediate: true });\n\t\t\t});\n\t\t\tconst indicator = computed(() => {\n\t\t\t\tif (!registration.orientation || !isOver.value || !active.value) return null;\n\t\t\t\tconst resolved = resolveDropPosition(active.value.current, rects.value, registration.orientation);\n\t\t\t\tif (!resolved) return null;\n\t\t\t\tconst from = home(el.value, active.value.id);\n\t\t\t\tif (from !== -1 && (resolved.index === from || resolved.index === from + 1)) return null;\n\t\t\t\treturn resolved;\n\t\t\t});\n\t\t\tconst input = {\n\t\t\t\t...registration,\n\t\t\t\tid,\n\t\t\t\tel,\n\t\t\t\tisOver,\n\t\t\t\twillAccept,\n\t\t\t\tindicator\n\t\t\t};\n\t\t\treturn _zones.register(input);\n\t\t}\n\t};\n\tfunction at(point) {\n\t\tif (!IN_BROWSER) return null;\n\t\tlet element = document.elementFromPoint(point.x, point.y);\n\t\twhile (element) {\n\t\t\tconst id = nodes.get(element);\n\t\t\tif (!/* @__PURE__ */ isUndefined(id)) {\n\t\t\t\tconst zone = _zones.get(id);\n\t\t\t\tif (zone && !toValue(zone.disabled)) return id;\n\t\t\t}\n\t\t\telement = element.parentElement;\n\t\t}\n\t\treturn null;\n\t}\n\tfunction home(zoneEl, id) {\n\t\tconst source = toValue(_draggables.get(id)?.el);\n\t\tif (!zoneEl || !source) return -1;\n\t\tfor (let el = source.parentElement; el; el = el.parentElement) {\n\t\t\tif (!nodes.has(el)) continue;\n\t\t\tif (el !== zoneEl) return -1;\n\t\t\tbreak;\n\t\t}\n\t\treturn Array.from(zoneEl.children).findIndex((child) => child.contains(source));\n\t}\n\tfunction position(zoneId, drag) {\n\t\tconst zone = _zones.get(zoneId);\n\t\tconst out = { pointer: drag.current };\n\t\tif (zone?.orientation) {\n\t\t\tconst resolved = zone.indicator?.value ?? null;\n\t\t\tif (resolved) {\n\t\t\t\tout.index = resolved.index;\n\t\t\t\tout.indicator = resolved;\n\t\t\t} else {\n\t\t\t\tconst from = home(toValue(zone.el), drag.id);\n\t\t\t\tout.index = from === -1 ? 0 : from;\n\t\t\t}\n\t\t}\n\t\treturn out;\n\t}\n\tfunction bail(drag, reason = \"cancel\") {\n\t\tactive.value = null;\n\t\tif (!/* @__PURE__ */ isNull(drag.over)) next(_zones.get(drag.over)?.onLeave, drag);\n\t\tnext(_draggables.get(drag.id)?.onCancel, drag, reason);\n\t\tnext(options.onCancel, drag, reason);\n\t}\n\tfunction onStart(source, origin, via) {\n\t\tif (toValue(_draggables.get(source.id)?.disabled)) return;\n\t\tconst draft = {\n\t\t\tid: source.id,\n\t\t\ttype: source.type,\n\t\t\tvalue: source.value,\n\t\t\torigin,\n\t\t\tcurrent: origin,\n\t\t\tdelta: {\n\t\t\t\tx: 0,\n\t\t\t\ty: 0\n\t\t\t},\n\t\t\tover: null,\n\t\t\twillAccept: false,\n\t\t\tvia\n\t\t};\n\t\ttry {\n\t\t\tif (_draggables.get(source.id)?.onBeforeStart?.(draft) === false) return;\n\t\t} catch (error) {\n\t\t\tlogger.error(\"useDragDrop onBeforeStart threw; treating as veto\", error);\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tif (options.onBeforeStart?.(draft) === false) return;\n\t\t} catch (error) {\n\t\t\tlogger.error(\"useDragDrop onBeforeStart threw; treating as veto\", error);\n\t\t\treturn;\n\t\t}\n\t\tactive.value = draft;\n\t}\n\tfunction onMove(point) {\n\t\tif (!active.value) return;\n\t\tconst over = at(point);\n\t\tconst draft = {\n\t\t\t...active.value,\n\t\t\tcurrent: point,\n\t\t\tdelta: {\n\t\t\t\tx: point.x - active.value.origin.x,\n\t\t\t\ty: point.y - active.value.origin.y\n\t\t\t},\n\t\t\tover,\n\t\t\twillAccept: false\n\t\t};\n\t\tdraft.willAccept = !/* @__PURE__ */ isNull(over) && safeAccept(_zones.get(over)?.accept, draft);\n\t\tconst previous = active.value.over;\n\t\tactive.value = draft;\n\t\tif (previous !== over) {\n\t\t\tif (!/* @__PURE__ */ isNull(previous)) next(_zones.get(previous)?.onLeave, draft);\n\t\t\tif (!/* @__PURE__ */ isNull(over)) next(_zones.get(over)?.onEnter, draft);\n\t\t}\n\t\tnext(_draggables.get(draft.id)?.onMove, draft);\n\t\tnext(options.onMove, draft);\n\t}\n\tfunction onDrop() {\n\t\tif (!active.value) return;\n\t\tconst drag = active.value;\n\t\tconst zoneId = drag.over;\n\t\tif (/* @__PURE__ */ isNull(zoneId)) {\n\t\t\tbail(drag);\n\t\t\treturn;\n\t\t}\n\t\tconst dropAt = position(zoneId, drag);\n\t\tconst zone = _zones.get(zoneId);\n\t\tfunction vetoed(fn, label) {\n\t\t\tif (!fn) return false;\n\t\t\ttry {\n\t\t\t\treturn fn(drag, dropAt) === false;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(`useDragDrop ${label} threw; treating as veto`, error);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\tif (vetoed(zone?.onBeforeDrop, \"zone onBeforeDrop\") || vetoed(options.onBeforeDrop, \"options onBeforeDrop\")) {\n\t\t\tbail(drag, \"reject\");\n\t\t\treturn;\n\t\t}\n\t\tactive.value = null;\n\t\tnext(zone?.onDrop, drag, dropAt);\n\t\tnext(options.onDrop, drag, dropAt);\n\t}\n\tfunction cancel() {\n\t\tif (!active.value) return;\n\t\tbail(active.value);\n\t}\n\tconst context = {\n\t\tdraggables,\n\t\tzones,\n\t\tactive: shallowReadonly(active),\n\t\tisDragging,\n\t\tcancel\n\t};\n\tconst disposers = [];\n\tconst adapters = options.adapters ?? [new PointerAdapter(), new KeyboardAdapter()];\n\tconst emit = {\n\t\tstart: (source, origin, via) => onStart(source, origin, via),\n\t\tmove: (point) => onMove(point),\n\t\tdrop: () => onDrop(),\n\t\tcancel: () => cancel()\n\t};\n\tconst adapterContext = {\n\t\t...context,\n\t\temit\n\t};\n\tfor (const adapter of adapters) try {\n\t\tadapter.setup(adapterContext);\n\t\tdisposers.push(() => adapter.dispose());\n\t} catch (error) {\n\t\tlogger.error(\"useDragDrop adapter setup threw; skipping adapter\", error);\n\t\ttry {\n\t\t\tadapter.dispose();\n\t\t} catch (disposeError) {\n\t\t\tlogger.error(\"useDragDrop adapter dispose threw after setup failure\", disposeError);\n\t\t}\n\t}\n\tfor (const plugin of plugins) try {\n\t\tconst dispose = plugin(context);\n\t\tif (/* @__PURE__ */ isFunction(dispose)) disposers.push(dispose);\n\t} catch (error) {\n\t\tlogger.error(\"useDragDrop plugin install threw; skipping plugin\", error);\n\t}\n\t_draggables.on(\"unregister:ticket\", (ticket) => {\n\t\tif (active.value?.id === ticket.id) cancel();\n\t});\n\t_zones.on(\"unregister:ticket\", (ticket) => {\n\t\tconst scope = scopes.get(ticket.id);\n\t\tif (scope) {\n\t\t\tscope.stop();\n\t\t\tscopes.delete(ticket.id);\n\t\t}\n\t\tif (active.value?.over === ticket.id) {\n\t\t\tnext(ticket.onLeave, active.value);\n\t\t\tactive.value = {\n\t\t\t\t...active.value,\n\t\t\t\tover: null,\n\t\t\t\twillAccept: false\n\t\t\t};\n\t\t}\n\t});\n\tonScopeDispose(() => {\n\t\tif (!/* @__PURE__ */ isNull(active.value)) cancel();\n\t\tfor (const dispose of disposers.toReversed()) try {\n\t\t\tdispose();\n\t\t} catch (error) {\n\t\t\tlogger.error(\"useDragDrop disposer threw\", error);\n\t\t}\n\t\tfor (const scope of scopes.values()) try {\n\t\t\tscope.stop();\n\t\t} catch (error) {\n\t\t\tlogger.error(\"useDragDrop zone scope dispose threw\", error);\n\t\t}\n\t\tscopes.clear();\n\t\tnodes.clear();\n\t\ttry {\n\t\t\t_draggables.dispose();\n\t\t} catch (error) {\n\t\t\tlogger.error(\"useDragDrop draggables dispose threw\", error);\n\t\t}\n\t\ttry {\n\t\t\t_zones.dispose();\n\t\t} catch (error) {\n\t\t\tlogger.error(\"useDragDrop zones dispose threw\", error);\n\t\t}\n\t}, true);\n\treturn context;\n}\n//#endregion\n//#region src/composables/useHotkey/aliases.ts\n/**\n* Key alias mapping for consistent key normalization across the hotkey system.\n*\n* Maps user-friendly aliases to canonical key names that match\n* KeyboardEvent.key values (in lowercase) where possible.\n*/\nconst keyAliasMap = {\n\tcontrol: \"ctrl\",\n\tcommand: \"cmd\",\n\toption: \"alt\",\n\tup: \"arrowup\",\n\tdown: \"arrowdown\",\n\tleft: \"arrowleft\",\n\tright: \"arrowright\",\n\tesc: \"escape\",\n\tspacebar: \" \",\n\tspace: \" \",\n\treturn: \"enter\",\n\tdel: \"delete\",\n\tplus: \"+\",\n\tslash: \"/\",\n\tunderscore: \"_\",\n\tminus: \"-\",\n\thyphen: \"-\"\n};\n/* @__NO_SIDE_EFFECTS__ */\nfunction normalizeKey(key) {\n\tconst lowerKey = key.toLowerCase();\n\treturn keyAliasMap[lowerKey] ?? lowerKey;\n}\n//#endregion\n//#region src/composables/useHotkey/parsing.ts\nconst logger = /* @__PURE__ */ useLogger();\nconst MODIFIERS = [\n\t\"ctrl\",\n\t\"shift\",\n\t\"alt\",\n\t\"meta\",\n\t\"cmd\"\n];\n/**\n* Splits a single combination string into individual key parts.\n*\n* A combination is a set of keys that must be pressed simultaneously.\n* e.g. `ctrl+k`, `shift+-`\n*\n* @param combination - The combination string to parse\n* @param isInternal - Whether this is an internal call (suppresses warnings)\n* @returns Object with keys array and separators array\n*/\nfunction splitKeyCombination(combination, isInternal = false) {\n\tconst emptyResult = {\n\t\tkeys: [],\n\t\tseparators: []\n\t};\n\tif (!combination) {\n\t\tif (!isInternal) logger.warn(\"Invalid hotkey combination: empty string provided\");\n\t\treturn emptyResult;\n\t}\n\tif (combination.length > 1 && [\n\t\t\"+\",\n\t\t\"/\",\n\t\t\"_\"\n\t].some((v) => combination.startsWith(v)) && ![\n\t\t\"++\",\n\t\t\"//\",\n\t\t\"__\"\n\t].some((v) => combination.startsWith(v)) || combination.includes(\"++\") || combination.includes(\"//\") || combination.includes(\"__\") || combination === \"+\" || combination === \"/\" || combination === \"_\" || combination.length > 1 && (combination.endsWith(\"+\") || combination.endsWith(\"/\") || combination.endsWith(\"_\")) && combination.at(-2) !== combination.at(-1) || combination === \"++\" || combination === \"--\" || combination === \"__\") {\n\t\tif (!isInternal) logger.warn(`Invalid hotkey combination: \"${combination}\" has invalid structure`);\n\t\treturn emptyResult;\n\t}\n\tconst keys = [];\n\tconst separators = [];\n\tlet buffer = \"\";\n\tfunction flushBuffer(separator) {\n\t\tif (buffer) {\n\t\t\tif (separator) separators.push(separator);\n\t\t\tkeys.push(/* @__PURE__ */ normalizeKey(buffer));\n\t\t\tbuffer = \"\";\n\t\t}\n\t}\n\tfor (let i = 0; i < combination.length; i++) {\n\t\tconst char = combination[i];\n\t\tconst nextChar = combination[i + 1];\n\t\tif ([\n\t\t\t\"+\",\n\t\t\t\"/\",\n\t\t\t\"_\",\n\t\t\t\"-\"\n\t\t].includes(char))\n /* v8 ignore start -- edge case: doubled special chars */\n\t\tif (char === nextChar) {\n\t\t\tflushBuffer(char);\n\t\t\tkeys.push(char);\n\t\t\ti++;\n\t\t} else if ([\n\t\t\t\"+\",\n\t\t\t\"/\",\n\t\t\t\"_\"\n\t\t].includes(char)) flushBuffer(char);\n\t\telse buffer += char;\n\t\telse buffer += char;\n\t}\n\tflushBuffer();\n\t/* v8 ignore start -- edge case: invalid minus in combination */\n\tif (keys.some((key) => key.length > 1 && key.includes(\"-\") && key !== \"--\")) {\n\t\tif (!isInternal) logger.warn(`Invalid hotkey combination: \"${combination}\" has invalid structure`);\n\t\treturn emptyResult;\n\t}\n\tif (keys.length === 0 && combination) return {\n\t\tkeys: [/* @__PURE__ */ normalizeKey(combination)],\n\t\tseparators\n\t};\n\t/* v8 ignore stop */\n\treturn {\n\t\tkeys,\n\t\tseparators\n\t};\n}\n/**\n* Splits a hotkey string into its constituent combination groups.\n*\n* A sequence is a series of combinations that must be pressed in order.\n* e.g. `a-b`, `ctrl+k-p`\n*\n* @param str - The sequence string to parse\n* @returns Array of combination strings\n*/\nfunction splitKeySequence(str) {\n\tif (!str) {\n\t\tlogger.warn(\"Invalid hotkey sequence: empty string provided\");\n\t\treturn [];\n\t}\n\tconst hasInvalidStart = str.startsWith(\"-\") && ![\n\t\t\"-\",\n\t\t\"---\",\n\t\t\"--+\"\n\t].includes(str);\n\tconst hasInvalidEnd = str.endsWith(\"-\") && !str.endsWith(\"+-\") && !str.endsWith(\"_-\") && str !== \"-\" && str !== \"---\";\n\tif (hasInvalidStart || hasInvalidEnd) {\n\t\tlogger.warn(`Invalid hotkey sequence: \"${str}\" contains invalid combinations`);\n\t\treturn [];\n\t}\n\tconst result = [];\n\tlet buffer = \"\";\n\tlet i = 0;\n\twhile (i < str.length) {\n\t\tconst char = str[i];\n\t\tif (char === \"-\") {\n\t\t\tconst prevChar = str[i - 1] ?? \"\";\n\t\t\tconst prevPrevChar = i > 1 ? str[i - 2] : void 0;\n\t\t\tif ([\"+\", \"_\"].includes(prevChar) && ![\"+\", \"/\"].includes(prevPrevChar ?? \"\")) {\n\t\t\t\tbuffer += char;\n\t\t\t\ti++;\n\t\t\t} else {\n\t\t\t\tif (buffer) {\n\t\t\t\t\tresult.push(buffer);\n\t\t\t\t\tbuffer = \"\";\n\t\t\t\t} else result.push(\"-\");\n\t\t\t\ti++;\n\t\t\t}\n\t\t} else {\n\t\t\tbuffer += char;\n\t\t\ti++;\n\t\t}\n\t}\n\tif (buffer) result.push(buffer);\n\tconst collapsed = [];\n\tlet minusCount = 0;\n\tfor (const part of result)\n /* v8 ignore start -- edge case: minus collapsing */\n\tif (part === \"-\") {\n\t\tif (minusCount % 2 === 0) collapsed.push(\"-\");\n\t\tminusCount++;\n\t} else {\n\t\tminusCount = 0;\n\t\tcollapsed.push(part);\n\t}\n\t/* v8 ignore start -- edge case: invalid combination in sequence */\n\tif (!collapsed.every((s) => splitKeyCombination(s, true).keys.length > 0)) {\n\t\tlogger.warn(`Invalid hotkey sequence: \"${str}\" contains invalid combinations`);\n\t\treturn [];\n\t}\n\t/* v8 ignore stop */\n\treturn collapsed;\n}\n//#endregion\n//#region src/composables/useHotkey/index.ts\n/**\n* @module useHotkey\n*\n* @see https://0.vuetifyjs.com/composables/system/use-hotkey\n*\n* @remarks\n* Hotkey listener composable with key combination and sequence support.\n*\n* Key features:\n* - Key combination support (`ctrl+k`, `shift+enter`)\n* - Key sequence support (`g-h` for GitHub-style shortcuts)\n* - Platform-aware modifiers (Mac: cmd→meta, others: cmd→ctrl)\n* - Input focus detection (skip when typing in inputs)\n* - Sequence timeout with automatic reset\n* - Key and symbol word alias normalization (`plus` → `+`, `esc` → `escape`, etc.)\n* - Pause/resume/stop functionality\n* - Automatic cleanup on scope disposal\n* - SSR-safe (no-op when not in browser)\n*\n* Builds on useEventListener for lifecycle-managed keyboard events.\n*\n* @example\n* ```ts\n* import { useHotkey } from '@vuetify/v0'\n*\n* useHotkey('ctrl+k', () => console.log('opened palette'))\n* useHotkey('g-h', () => console.log('go home'))\n* ```\n*/\nconst isMac = IN_BROWSER && /mac|iphone|ipad|ipod/i.test(navigator?.userAgent ?? \"\");\n/**\n* A composable that listens for hotkey combinations and sequences.\n*\n* @param keys - The hotkey string (e.g., 'ctrl+k', 'g-h')\n* @param callback - The function to call when the hotkey is triggered\n* @param options - Configuration options\n* @returns An object with state refs and control methods\n*\n* @see https://0.vuetifyjs.com/composables/system/use-hotkey\n*\n* @example\n* ```ts\n* import { useHotkey } from '@vuetify/v0'\n*\n* // Simple combination\n* const { isActive, pause, resume } = useHotkey('ctrl+k', () => {\n*   console.log('Command palette opened')\n* })\n*\n* // Key sequence (GitHub-style)\n* useHotkey('g-h', () => console.log('Go home'))\n*\n* // With options\n* useHotkey('escape', closeModal, { inputs: true })\n*\n* // Pause/resume control\n* pause()  // Temporarily disable\n* resume() // Re-enable\n* ```\n*/\nfunction useHotkey(keys, callback, options = {}, _platform) {\n\tconst platformIsMac = _platform?.isMac ?? isMac;\n\tconst { event = \"keydown\", inputs = false, preventDefault = true, stopPropagation = false, sequenceTimeout = 1e3 } = options;\n\tconst isPaused = shallowRef(false);\n\tconst cleanup = shallowRef(null);\n\tconst isActive = toRef(() => !/* @__PURE__ */ isNull(cleanup.value));\n\tlet sequenceTimer;\n\tlet keyGroups = [];\n\tlet isSequence = false;\n\tlet groupIndex = 0;\n\tfunction isInputFocused() {\n\t\t/* v8 ignore next -- IN_BROWSER always true in happy-dom test env */\n\t\tif (!IN_BROWSER) return false;\n\t\tif (toValue(inputs)) return false;\n\t\tconst activeElement = /* @__PURE__ */ getActiveElement();\n\t\t/* v8 ignore next -- defensive: document.activeElement is always set in happy-dom */\n\t\tif (!activeElement) return false;\n\t\tconst role = activeElement.getAttribute(\"role\");\n\t\tif (role === \"textbox\" || role === \"searchbox\" || role === \"combobox\" || role === \"spinbutton\") return true;\n\t\tif (activeElement.tagName === \"INPUT\") {\n\t\t\tconst type = activeElement.type?.toLowerCase();\n\t\t\treturn [\n\t\t\t\t\"text\",\n\t\t\t\t\"email\",\n\t\t\t\t\"password\",\n\t\t\t\t\"search\",\n\t\t\t\t\"tel\",\n\t\t\t\t\"url\",\n\t\t\t\t\"number\",\n\t\t\t\t\"date\",\n\t\t\t\t\"datetime-local\",\n\t\t\t\t\"time\",\n\t\t\t\t\"month\",\n\t\t\t\t\"week\"\n\t\t\t].includes(type);\n\t\t}\n\t\treturn activeElement.tagName === \"TEXTAREA\" || activeElement.isContentEditable;\n\t}\n\tfunction resetSequence() {\n\t\tgroupIndex = 0;\n\t\tclearTimeout(sequenceTimer);\n\t}\n\tfunction handler(e) {\n\t\tconst group = keyGroups[groupIndex];\n\t\tif (!group || isInputFocused()) return;\n\t\tif (!matchesKeyGroup(e, group, platformIsMac)) {\n\t\t\tif (isSequence) resetSequence();\n\t\t\treturn;\n\t\t}\n\t\tif (toValue(stopPropagation)) e.stopPropagation();\n\t\tif (toValue(preventDefault)) e.preventDefault();\n\t\tif (!isSequence) {\n\t\t\tcallback(e);\n\t\t\treturn;\n\t\t}\n\t\tclearTimeout(sequenceTimer);\n\t\tgroupIndex++;\n\t\tif (groupIndex === keyGroups.length) {\n\t\t\tcallback(e);\n\t\t\tresetSequence();\n\t\t\treturn;\n\t\t}\n\t\tsequenceTimer = setTimeout(resetSequence, toValue(sequenceTimeout));\n\t}\n\tfunction setup() {\n\t\tif (!IN_BROWSER || isPaused.value) return;\n\t\tconst currentKeys = toValue(keys);\n\t\tif (!currentKeys) return;\n\t\tconst groups = splitKeySequence(currentKeys.toLowerCase());\n\t\t/* v8 ignore next -- defensive: splitKeySequence rejects empty strings earlier */\n\t\tif (groups.length === 0) return;\n\t\tisSequence = groups.length > 1;\n\t\tkeyGroups = groups;\n\t\tresetSequence();\n\t\tcleanup.value = useWindowEventListener(toValue(event), handler);\n\t}\n\tfunction dispose() {\n\t\tif (cleanup.value) {\n\t\t\tcleanup.value();\n\t\t\tcleanup.value = null;\n\t\t}\n\t\tclearTimeout(sequenceTimer);\n\t\tkeyGroups = [];\n\t\tisSequence = false;\n\t\tgroupIndex = 0;\n\t}\n\tfunction pause() {\n\t\tisPaused.value = true;\n\t\tdispose();\n\t}\n\tfunction resume() {\n\t\tisPaused.value = false;\n\t\tsetup();\n\t}\n\tfunction stop() {\n\t\tdispose();\n\t}\n\twatch(() => toValue(keys), () => {\n\t\tif (isPaused.value) return;\n\t\tdispose();\n\t\tsetup();\n\t}, { immediate: true });\n\twatch(() => toValue(event), () => {\n\t\tif (isPaused.value || !toValue(keys)) return;\n\t\tdispose();\n\t\tsetup();\n\t});\n\tonScopeDispose(stop, true);\n\treturn {\n\t\tisActive: shallowReadonly(isActive),\n\t\tisPaused: shallowReadonly(isPaused),\n\t\tpause,\n\t\tresume,\n\t\tstop\n\t};\n}\nfunction isModifier(key) {\n\treturn MODIFIERS.includes(key);\n}\nfunction parseKeyGroup(group) {\n\tconst { keys: parts } = splitKeyCombination(group.toLowerCase());\n\tconst modifiers = Object.fromEntries(MODIFIERS.map((m) => [m, false]));\n\t/* v8 ignore next 3 -- defensive: parseKeyGroup is not invoked with empty parts */\n\tif (parts.length === 0) return {\n\t\tmodifiers,\n\t\tactualKey: void 0\n\t};\n\tlet actualKey;\n\tfor (const part of parts) if (isModifier(part)) modifiers[part] = true;\n\telse actualKey = part;\n\treturn {\n\t\tmodifiers,\n\t\tactualKey\n\t};\n}\nfunction matchesKeyGroup(e, group, platformIsMac) {\n\tconst { modifiers, actualKey } = parseKeyGroup(group);\n\tconst expectCtrl = modifiers.ctrl || !platformIsMac && (modifiers.cmd || modifiers.meta);\n\tconst expectMeta = platformIsMac && (modifiers.cmd || modifiers.meta);\n\tconst modifiersMatch = e.ctrlKey === expectCtrl && e.metaKey === expectMeta && e.shiftKey === modifiers.shift && e.altKey === modifiers.alt;\n\tif (/* @__PURE__ */ isUndefined(actualKey)) return modifiersMatch;\n\treturn modifiersMatch && e.key.toLowerCase() === actualKey.toLowerCase();\n}\n//#endregion\n//#region src/composables/useReducedMotion/adapters/adapter.ts\nvar ReducedMotionAdapter = class {\n\t/**\n\t* Teardown for any side-effects started in `setup`. The plugin registers this on\n\t* `app.onUnmount`, so adapter effects are cleaned up even though `setup` runs\n\t* outside an effect scope (where `onScopeDispose` would silently no-op). It is\n\t* read lazily at app unmount, so adapters may assign it at any point during or\n\t* after `setup`.\n\t*/\n\tdispose;\n};\n//#endregion\n//#region src/composables/useReducedMotion/adapters/v0.ts\nfunction payload(reduced) {\n\treturn reduced ? \"reduce\" : \"no-preference\";\n}\n/**\n* Default reduced-motion adapter. In the browser it writes\n* `document.body.dataset.reducedMotion`; on the server it renders the same\n* attribute through `@unhead` so the value is present in the initial HTML.\n*/\nvar V0ReducedMotionAdapter = class extends ReducedMotionAdapter {\n\tsetup(app, context) {\n\t\tif (IN_BROWSER) {\n\t\t\tfunction sync(reduced) {\n\t\t\t\tdocument.body.dataset.reducedMotion = payload(reduced);\n\t\t\t}\n\t\t\tsync(context.isReduced.value);\n\t\t\tthis.dispose = watch(context.isReduced, sync);\n\t\t} else {\n\t\t\tconst head = app._context?.provides?.usehead ?? app._context?.provides?.head;\n\t\t\tif (head?.push) {\n\t\t\t\tconst entry = head.push({ bodyAttrs: { \"data-reduced-motion\": payload(context.isReduced.value) } });\n\t\t\t\tconst stop = watch(context.isReduced, (reduced) => entry.patch?.({ bodyAttrs: { \"data-reduced-motion\": payload(reduced) } }));\n\t\t\t\tthis.dispose = () => {\n\t\t\t\t\tstop();\n\t\t\t\t\tentry.dispose?.();\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n};\n//#endregion\n//#region src/composables/useReducedMotion/index.ts\n/**\n* @module useReducedMotion\n*\n* @see https://0.vuetifyjs.com/composables/plugins/use-reduced-motion\n*\n* @remarks\n* Reduced-motion plugin composable for respecting or overriding the\n* `prefers-reduced-motion` media query.\n*\n* Key features:\n* - Three-way `mode`: `'system'` (honor OS setting), `'always'` (force reduce),\n*   `'never'` (force full motion)\n* - Reactive `isReduced` boolean — true when motion should be minimized\n* - When installed as a plugin, the default `V0ReducedMotionAdapter` writes\n*   `document.body.dataset.reducedMotion = 'reduce' | 'no-preference'` in the browser.\n*   On the server it renders the same attribute via `@unhead` with the configured\n*   mode — the OS preference is only readable in the browser, so in `'system'` mode\n*   the server value is always `'no-preference'` until client takeover; pair the\n*   attribute selector with a native `@media (prefers-reduced-motion: reduce)` rule\n*   for pre-hydration coverage\n* - SSR-safe: no `window`/`document` access on the server\n*\n* @example\n* ```ts\n* import { createReducedMotionPlugin, useReducedMotion } from '@vuetify/v0'\n*\n* // install once\n* app.use(createReducedMotionPlugin({ mode: 'system' }))\n*\n* // consume anywhere\n* const motion = useReducedMotion()\n* console.log(motion.isReduced.value) // true | false\n* motion.select('never') // override\n* ```\n*/\n/**\n* Creates a standalone reduced-motion context.\n*\n* @param options Initial options.\n* @returns A `ReducedMotionContext`.\n*\n* @see https://0.vuetifyjs.com/composables/plugins/use-reduced-motion\n*\n* @example\n* ```ts\n* import { createReducedMotion } from '@vuetify/v0'\n*\n* const motion = createReducedMotion({ mode: 'system' })\n*\n* console.log(motion.isReduced.value) // true | false\n* motion.select('always')\n* ```\n*/\nfunction createReducedMotion(options = {}) {\n\tconst selectedMode = shallowRef(options.mode ?? \"system\");\n\tconst media = usePrefersReducedMotion();\n\tconst isReduced = toRef(() => {\n\t\tif (selectedMode.value === \"always\") return true;\n\t\tif (selectedMode.value === \"never\") return false;\n\t\treturn media.matches.value;\n\t});\n\tfunction select(value) {\n\t\tselectedMode.value = value;\n\t}\n\treturn {\n\t\tselectedMode: shallowReadonly(selectedMode),\n\t\tisReduced,\n\t\tselect,\n\t\tdispose: media.stop\n\t};\n}\nfunction createReducedMotionFallback() {\n\treturn {\n\t\tselectedMode: shallowReadonly(shallowRef(\"system\")),\n\t\tisReduced: shallowReadonly(shallowRef(false)),\n\t\tselect: () => {},\n\t\tdispose: () => {}\n\t};\n}\nconst [createReducedMotionContext, createReducedMotionPlugin, useReducedMotion] = createPluginContext(\"v0:reduced-motion\", (options) => createReducedMotion(options), {\n\tfallback: () => createReducedMotionFallback(),\n\tpersist: (context) => context.selectedMode.value,\n\trestore: (context, saved) => {\n\t\tif (saved === \"system\" || saved === \"always\" || saved === \"never\") context.select(saved);\n\t},\n\tsetup: (context, app, { adapter = new V0ReducedMotionAdapter() }) => {\n\t\tapp.onUnmount(() => context.dispose());\n\t\tadapter.setup(app, context);\n\t\tapp.onUnmount(() => adapter.dispose?.());\n\t}\n});\n//#endregion\n//#region src/composables/useRtl/adapters/adapter.ts\nvar RtlAdapter = class {\n\t/**\n\t* Teardown registered by `setup`. Called once via `app.onUnmount` on the\n\t* plugin path and available as a reachable handle on standalone paths.\n\t*/\n\tdispose;\n};\n//#endregion\n//#region src/composables/useRtl/adapters/v0.ts\nvar V0RtlAdapter = class extends RtlAdapter {\n\tsetup(app, context, target) {\n\t\tif (IN_BROWSER) {\n\t\t\tif (/* @__PURE__ */ isNull(target)) return;\n\t\t\tconst targetEl = target instanceof HTMLElement ? target : /* @__PURE__ */ isString(target) ? document.querySelector(target) : document.documentElement;\n\t\t\tif (!targetEl) return;\n\t\t\ttargetEl.dir = context.isRtl.value ? \"rtl\" : \"ltr\";\n\t\t\tthis.dispose = watch(context.isRtl, (value) => {\n\t\t\t\ttargetEl.dir = value ? \"rtl\" : \"ltr\";\n\t\t\t});\n\t\t} else {\n\t\t\tconst head = app._context?.provides?.usehead ?? app._context?.provides?.head;\n\t\t\tif (head?.push) {\n\t\t\t\tconst entry = head.push({ htmlAttrs: { dir: context.isRtl.value ? \"rtl\" : \"ltr\" } });\n\t\t\t\tconst stop = watch(context.isRtl, (rtl) => entry.patch?.({ htmlAttrs: { dir: rtl ? \"rtl\" : \"ltr\" } }));\n\t\t\t\tthis.dispose = () => {\n\t\t\t\t\tstop();\n\t\t\t\t\tentry.dispose?.();\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n};\n//#endregion\n//#region src/composables/useRtl/index.ts\n/**\n* @module useRtl\n*\n* @see https://0.vuetifyjs.com/composables/plugins/use-rtl\n*\n* @remarks\n* RTL (right-to-left) direction composable with adapter pattern.\n*\n* Key features:\n* - Reactive boolean direction state\n* - Plugin trinity pattern (createRtlContext, createRtlPlugin, useRtl)\n* - Adapter pattern for DOM integration (dir attribute)\n* - Subtree overrides via context provision\n*\n* Independent from useLocale — Vuetify connects them via adapter.\n*\n* @example\n* ```ts\n* import { useRtl } from '@vuetify/v0'\n*\n* const { isRtl, toggle } = useRtl()\n* toggle() // flip direction\n* ```\n*/\n/**\n* Creates a new RTL direction instance.\n*\n* @param options The options for the RTL instance.\n* @returns A new RTL context with reactive direction state.\n*\n* @see https://0.vuetifyjs.com/composables/plugins/use-rtl\n*/\nfunction createRtl(options = {}) {\n\tconst isRtl = shallowRef(options.default ?? false);\n\tfunction toggle() {\n\t\tisRtl.value = !isRtl.value;\n\t}\n\treturn {\n\t\tisRtl,\n\t\ttoggle,\n\t\tdispose: () => {}\n\t};\n}\nfunction createRtlFallback() {\n\treturn {\n\t\tisRtl: shallowRef(false),\n\t\ttoggle: () => {},\n\t\tdispose: () => {}\n\t};\n}\nconst [createRtlContext, createRtlPlugin, useRtl] = createPluginContext(\"v0:rtl\", (options) => createRtl(options), {\n\tfallback: () => createRtlFallback(),\n\tsetup: (context, app, { adapter = new V0RtlAdapter(), target }) => {\n\t\tadapter.setup(app, context, target);\n\t\tapp.onUnmount(() => adapter.dispose?.());\n\t},\n\tpersist: (ctx) => ctx.isRtl.value,\n\trestore: (ctx, saved) => {\n\t\tif (/* @__PURE__ */ isBoolean(saved)) ctx.isRtl.value = saved;\n\t}\n});\n//#endregion\nexport { createVirtual as A, useDate as C, useBreakpoints as D, createBreakpointsPlugin as E, useTimeline as F, createOtp as I, createKanban as L, useVirtual as M, createTimeline as N, toReactive as O, createTimelineContext as P, ServerComboboxAdapter as R, createDatePlugin as S, createBreakpointsContext as T, PointerAdapter as _, useRtl as a, createDate as b, createReducedMotion as c, useReducedMotion as d, V0ReducedMotionAdapter as f, KeyboardAdapter as g, useDragDrop as h, createRtlPlugin as i, createVirtualContext as j, toHighlight as k, createReducedMotionContext as l, useHotkey as m, createRtlContext as n, V0RtlAdapter as o, ReducedMotionAdapter as p, createRtlFallback as r, RtlAdapter as s, createRtl as t, createReducedMotionPlugin as u, DragDropAdapter as v, createBreakpoints as w, createDateContext as x, useMutationObserver as y };\n","// Styles\nimport './VHighlight.sass'\n\n// Composables\nimport { useTextColor } from '@/composables/color'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { toHighlight } from '@vuetify/v0'\nimport { computed } from 'vue'\nimport { defineComponent, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { FilterMatchArrayMultiple } from '@/composables/filter'\nimport type { IgnoreAccents } from '@/util'\n\nexport const makeVHighlightProps = propsFactory({\n  text: {\n    type: String,\n    default: '',\n  },\n  query: [String, Array] as PropType<string | string[]>,\n  matches: Array as PropType<FilterMatchArrayMultiple>,\n  matchAll: Boolean,\n  ignoreCase: Boolean,\n  ignoreAccents: [Boolean, String] as PropType<IgnoreAccents>,\n  color: String,\n  opacity: [String, Number],\n  markClass: String,\n  ...makeTagProps({ tag: 'span' }),\n}, 'VHighlight')\n\nexport const VHighlight = defineComponent({\n  name: 'VHighlight',\n\n  props: makeVHighlightProps(),\n\n  setup (props) {\n    const chunks = computed(() => toHighlight(\n      () => props.text,\n      () => props.query,\n      {\n        matches: () => props.matches,\n        matchAll: () => props.matchAll,\n        ignoreCase: () => props.ignoreCase,\n        ignoreAccents: () => props.ignoreAccents ?? false,\n      },\n    ))\n\n    const { textColorClasses, textColorStyles } = useTextColor(() => props.color)\n\n    return () => (\n      <props.tag class=\"v-highlight\">\n        { chunks.value.map((chunk, i) => (\n          chunk.match\n            ? (\n              <mark\n                key={ i }\n                class={['v-highlight__mark', textColorClasses.value, props.markClass]}\n                style={[\n                  textColorStyles.value,\n                  { '--v-highlight-opacity': props.opacity },\n                ]}\n              >\n                { chunk.text }\n              </mark>\n            )\n            : <span key={ i }>{ chunk.text }</span>\n        ))}\n      </props.tag>\n    )\n  },\n})\n\nexport type VHighlight = InstanceType<typeof VHighlight>\n","// Utilities\nimport { toValue, watch } from 'vue'\n\n// Types\nimport type { MaybeRefOrGetter } from 'vue'\nimport type { ListItem } from '@/composables/list-items'\n\nconst AUTOFILL_PENDING_MS = 1000\n\nexport function useAutofill (\n  items: MaybeRefOrGetter<readonly ListItem[]>,\n  select: (item: ListItem) => void,\n) {\n  let pending: string | null = null\n  let pendingTimeout = -1\n\n  function findItem (text: string) {\n    return toValue(items).find(item => item.title === text || item.value === text)\n  }\n\n  watch(() => toValue(items), () => {\n    if (!pending) return\n    const item = findItem(pending)\n    if (!item) return\n    pending = null\n    select(item)\n  })\n\n  function autofill (text: string) {\n    const item = findItem(text)\n    if (item) return select(item)\n\n    resetAutofill()\n    pending = text\n    pendingTimeout = window.setTimeout(resetAutofill, AUTOFILL_PENDING_MS)\n  }\n\n  function resetAutofill () {\n    pending = null\n    clearTimeout(pendingTimeout)\n  }\n\n  return { autofill, resetAutofill }\n}\n","// Utilities\nimport { focusableChildren } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\nexport function useFocusRepair (\n  active: Ref<boolean>,\n  content: () => HTMLElement | undefined,\n  fallback: () => HTMLElement | undefined,\n) {\n  return function repairOrphanedFocus (e: FocusEvent): boolean {\n    if (!e.relatedTarget && document.activeElement === document.body && active.value) {\n      requestAnimationFrame(() => {\n        if (!active.value) return\n        const el = content()\n        const target = (el && focusableChildren(el)[0]) ?? fallback()\n        target?.focus({ preventScroll: true })\n      })\n      return true\n    }\n    return false\n  }\n}\n","// Utilities\nimport { shallowRef, toValue, watch } from 'vue'\nimport { focusableChildren, getActiveElement } from '@/util'\n\n// Types\nimport type { MaybeRefOrGetter, Ref } from 'vue'\nimport type { VList } from '@/components/VList'\nimport type { VTextField } from '@/components/VTextField'\nimport type { VVirtualScroll } from '@/components/VVirtualScroll'\nimport type { ListItem } from '@/composables/list-items'\nimport type { ScrollToPosition } from '@/composables/virtual'\n\nfunction isNavigable (item: ListItem | undefined) {\n  return !!item &&\n    item.type !== 'divider' &&\n    item.type !== 'subheader' &&\n    !item.props?.disabled\n}\n\nfunction findNavigableIndex (items: readonly ListItem[], from: number, step: 1 | -1) {\n  const count = items.length\n  for (let offset = 0; offset < count; offset++) {\n    const index = ((from + offset * step) % count + count) % count\n    if (isNavigable(items[index])) return index\n  }\n  return -1\n}\n\nexport function useScrolling (\n  listRef: Ref<VList | undefined>,\n  textFieldRef: Ref<VTextField | undefined>,\n  virtualScrollRef: Ref<VVirtualScroll | undefined>,\n  displayItems: MaybeRefOrGetter<readonly ListItem[]>,\n  options: {\n    selectedIndex?: () => number\n    headerEl?: () => HTMLElement | undefined\n    menuContentEl?: () => HTMLElement | undefined\n    noAutoScroll?: MaybeRefOrGetter<boolean>\n  } = {},\n) {\n  const isScrolling = shallowRef(false)\n  let scrollTimeout: number\n  let focusToken = 0\n  let pendingOpenStep: 1 | -1 | null = null\n\n  function onListScroll (e: Event) {\n    cancelAnimationFrame(scrollTimeout)\n    isScrolling.value = true\n    scrollTimeout = requestAnimationFrame(() => {\n      scrollTimeout = requestAnimationFrame(() => {\n        isScrolling.value = false\n      })\n    })\n  }\n\n  async function finishScrolling () {\n    await new Promise(resolve => requestAnimationFrame(resolve))\n    await new Promise(resolve => requestAnimationFrame(resolve))\n    await new Promise(resolve => requestAnimationFrame(resolve))\n    await new Promise<void>(resolve => {\n      if (isScrolling.value) {\n        const stop = watch(isScrolling, () => {\n          stop()\n          resolve()\n        })\n      } else resolve()\n    })\n  }\n\n  function getListEl () {\n    return listRef.value?.$el as HTMLElement | undefined\n  }\n\n  function findItemEl (index: number) {\n    return getListEl()?.querySelector<HTMLElement>(`[aria-posinset=\"${index + 1}\"]`) ?? null\n  }\n\n  async function focusItem (index: number, scroll = true, position: ScrollToPosition = 'center') {\n    if (index < 0) return false\n\n    if (!scroll) {\n      const mounted = findItemEl(index)\n      mounted?.focus({ preventScroll: true })\n      return !!mounted\n    }\n\n    const token = ++focusToken\n    const listEl = getListEl()\n    // Park focus on the list before the window moves, otherwise unmounting the\n    // focused item drops focus to <body> and useFocusRepair closes the menu.\n    if (listEl?.contains(getActiveElement())) {\n      listEl.focus({ preventScroll: true })\n    }\n\n    virtualScrollRef.value?.scrollToIndex(index, position)\n\n    let el = findItemEl(index)\n    const deadline = performance.now() + 500\n    while (!el && performance.now() < deadline) {\n      await new Promise(resolve => requestAnimationFrame(resolve))\n      if (token !== focusToken) return true\n      el = findItemEl(index)\n    }\n    el?.focus({ preventScroll: true })\n    if (el && listEl) {\n      alignItem(listEl, el, position)\n    }\n    return !!el\n  }\n\n  function alignItem (listEl: HTMLElement, el: HTMLElement, position: ScrollToPosition) {\n    const viewTop = listEl.getBoundingClientRect().top + listEl.clientTop\n    const viewHeight = listEl.clientHeight\n    const { top, height } = el.getBoundingClientRect()\n\n    const delta = position === 'start' ? top - viewTop\n      : position === 'end' ? (top + height) - (viewTop + viewHeight)\n      : (top + height / 2) - (viewTop + viewHeight / 2)\n\n    if (Math.abs(delta) > 1) listEl.scrollTop += delta\n  }\n\n  async function focusFirstItem () {\n    const index = findNavigableIndex(toValue(displayItems), 0, 1)\n    if (!await focusItem(index)) listRef.value?.focus('first')\n  }\n\n  async function focusLastItem () {\n    const items = toValue(displayItems)\n    const index = findNavigableIndex(items, items.length - 1, -1)\n    if (!await focusItem(index)) listRef.value?.focus('last')\n  }\n\n  /**\n   * ArrowUp/ArrowDown pressed while focus is still on the field.\n   * `landOnSelected` targets the selection itself (opening the menu); otherwise\n   * the item adjacent to it (menu was already open).\n   */\n  async function focusFromActivator (step: 1 | -1, landOnSelected = false) {\n    if (!toValue(options.noAutoScroll)) {\n      const selected = options.selectedIndex?.() ?? -1\n      if (selected >= 0) {\n        const target = landOnSelected ? selected : findNavigableIndex(toValue(displayItems), selected + step, step)\n        // Opening already centred the selection, scrolling again shifts it by a row\n        return await focusItem(target, false) || focusItem(target)\n      }\n    }\n\n    if (step === 1) {\n      const header = options.headerEl?.()\n      const firstInHeader = header && focusableChildren(header)[0]\n      if (firstInHeader) return firstInHeader.focus()\n    }\n\n    // An empty list can't take focus, so the header/footer are the only way in.\n    if (findNavigableIndex(toValue(displayItems), 0, 1) < 0) {\n      const content = options.menuContentEl?.()\n      const children = content ? focusableChildren(content) : []\n      const el = step === 1 ? children[0] : children.at(-1)\n      return el?.focus()\n    }\n\n    return step === 1 ? focusFirstItem() : focusLastItem()\n  }\n\n  /**\n   * ArrowUp/ArrowDown on the field: open the menu and move into the list.\n   * Returns true when focus moved, false when it was armed for the transition.\n   */\n  function onActivatorKeydown (e: KeyboardEvent, menu: Ref<boolean>) {\n    const step = e.key === 'ArrowDown' ? 1 as const : e.key === 'ArrowUp' ? -1 as const : null\n    if (!step) return false\n\n    const wasOpen = menu.value\n    menu.value = true\n\n    if (getListEl()?.contains(getActiveElement())) return false\n\n    if (!wasOpen) {\n      setPendingFocus(step)\n      return false\n    }\n\n    e.stopImmediatePropagation()\n    focusFromActivator(step)\n    return true\n  }\n\n  /** Arrow key opened the menu — the list only exists once the transition ends. */\n  function setPendingFocus (step: 1 | -1 | null) {\n    pendingOpenStep = step\n  }\n\n  function flushPendingFocus () {\n    if (!pendingOpenStep) return false\n    const step = pendingOpenStep\n    pendingOpenStep = null\n    focusFromActivator(step, true)\n    return true\n  }\n\n  function onListKeydownCapture (e: KeyboardEvent) {\n    if (e.key !== 'ArrowUp' && e.key !== 'ArrowDown') return\n\n    const listEl = getListEl()\n    const active = getActiveElement() as HTMLElement | null\n    if (!listEl || !active || !listEl.contains(active)) return\n\n    const itemEl = active.closest('[aria-posinset]') as HTMLElement | null\n    if (!itemEl || !listEl.contains(itemEl)) return\n\n    const mounted = listEl.querySelectorAll('[aria-posinset]')\n    const atEdge = itemEl === (e.key === 'ArrowUp' ? mounted[0] : mounted[mounted.length - 1])\n    if (!atEdge) return\n\n    const position = Number(itemEl.getAttribute('aria-posinset'))\n    if (!position) return\n\n    const step = e.key === 'ArrowUp' ? -1 as const : 1 as const\n    const index = findNavigableIndex(toValue(displayItems), position - 1 + step, step)\n    if (index < 0 || index === position - 1) return\n\n    e.preventDefault()\n    e.stopImmediatePropagation()\n    // The row sits just past the edge we're leaving, so this scrolls by one row\n    void focusItem(index, true, step === 1 ? 'end' : 'start')\n  }\n\n  async function onListKeydown (e: KeyboardEvent) {\n    if (e.key === 'Tab') {\n      textFieldRef.value?.focus()\n      return\n    }\n\n    if (e.key === 'Home' || e.key === 'End') {\n      e.preventDefault()\n      e.stopImmediatePropagation()\n      await (e.key === 'Home' ? focusFirstItem() : focusLastItem())\n      return\n    }\n\n    if (e.key !== 'PageDown' && e.key !== 'PageUp') return\n    const list = getListEl()\n    if (!list) return\n\n    await finishScrolling()\n\n    const children = list.querySelectorAll(':scope > :not(.v-virtual-scroll__spacer)')\n\n    if (e.key === 'PageDown') {\n      const top = list.getBoundingClientRect().top\n      for (const child of children) {\n        if (child.getBoundingClientRect().top >= top) {\n          (child as HTMLElement).focus()\n          break\n        }\n      }\n    } else {\n      const bottom = list.getBoundingClientRect().bottom\n      for (const child of [...children].reverse()) {\n        if (child.getBoundingClientRect().bottom <= bottom) {\n          (child as HTMLElement).focus()\n          break\n        }\n      }\n    }\n  }\n\n  return {\n    listEvents: {\n      onScrollPassive: onListScroll,\n      onKeydownCapture: onListKeydownCapture,\n      onKeydown: onListKeydown,\n    } as Record<string, Function>, // typescript doesn't know about vue's event merging\n    focusItem,\n    focusFirstItem,\n    focusLastItem,\n    focusFromActivator,\n    onActivatorKeydown,\n    setPendingFocus,\n    flushPendingFocus,\n  }\n}\n","// Utilities\nimport { nextTick, toValue, watch } from 'vue'\nimport { getActiveElement } from '@/util'\n\n// Types\nimport type { MaybeRefOrGetter, Ref } from 'vue'\n\n/** Close once focus has landed somewhere outside the field and its menu. */\nexport function closeWhenFocusLeaves (menu: Ref<boolean>, ...els: (Element | null | undefined)[]) {\n  requestAnimationFrame(() => {\n    const active = getActiveElement()\n    // Body means focus is still in flight, e.g. arrow keys moving it into the menu\n    if (!active || active === document.body) return\n\n    if (!els.some(el => el?.contains(active))) {\n      menu.value = false\n    }\n  })\n}\n\nexport function useOpenOnFocus (\n  menu: Ref<boolean>,\n  isFocused: Ref<boolean>,\n  enabled: MaybeRefOrGetter<boolean>,\n) {\n  let returningFocus = false\n\n  watch(menu, val => {\n    if (val) return\n\n    returningFocus = true\n    nextTick(() => returningFocus = false)\n  })\n\n  watch(isFocused, val => {\n    if (!val || returningFocus) {\n      returningFocus = false\n    } else if (toValue(enabled)) {\n      menu.value = true\n    }\n  })\n}\n","// Composables\nimport { useOpenOnFocus } from '@/composables/openOnFocus'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, toValue } from 'vue'\n\n// Types\nimport type { MaybeRefOrGetter, Ref } from 'vue'\nimport type { VMenu } from '@/components/VMenu'\n\nexport interface SelectionMenuProps {\n  menu: boolean\n  'onUpdate:menu': ((value: boolean) => void) | undefined\n  menuProps: VMenu['$props'] | undefined\n  multiple: boolean\n  openOnFocus: boolean\n}\n\nexport function useSelectionMenu (\n  props: SelectionMenuProps,\n  options: {\n    vMenuRef: Ref<VMenu | undefined>\n    menuDisabled: MaybeRefOrGetter<boolean>\n    isFocused: Ref<boolean>\n  },\n) {\n  const _menu = useProxiedModel(props, 'menu')\n  const menu = computed({\n    get: () => _menu.value,\n    set: v => {\n      if (_menu.value && !v && options.vMenuRef.value?.ΨopenChildren.size) return\n      if (!v && props.menuProps?.persistent) return\n      if (v && toValue(options.menuDisabled)) return\n      _menu.value = v\n    },\n  })\n\n  useOpenOnFocus(menu, options.isFocused, () => props.openOnFocus)\n\n  function closeOnSelect () {\n    if (props.multiple || props.menuProps?.closeOnContentClick === false) return\n    menu.value = false\n  }\n\n  return { menu, closeOnSelect }\n}\n","// Utilities\nimport { toValue } from 'vue'\nimport { focusableChildren, getActiveElement, isNull } from '@/util'\n\n// Types\nimport type { MaybeRefOrGetter, Ref } from 'vue'\nimport type { VList } from '@/components/VList'\n\ntype FocusGroup =\n  | { type: 'list', contentRef: Ref<VList | undefined>, displayItemsCount: MaybeRefOrGetter<number> }\n  | { type: 'element', contentRef: Ref<HTMLElement | undefined> }\n\nexport function useFocusGroups ({ groups, onLeave }: {\n  groups: FocusGroup[]\n  onLeave: () => void\n}) {\n  function getContentRef (group: FocusGroup): HTMLElement | undefined {\n    return group.type === 'list'\n      ? group.contentRef.value?.$el as HTMLElement | undefined\n      : group.contentRef.value\n  }\n\n  function getChildren (group: FocusGroup): HTMLElement[] {\n    const contentRef = getContentRef(group)\n    return contentRef ? focusableChildren(contentRef) : []\n  }\n\n  function onTabKeydown (e: KeyboardEvent) {\n    const target = e.target as Element\n    const direction = e.shiftKey ? 'backward' : 'forward'\n    const children = groups.map(getChildren)\n\n    const currentGroupIndex = groups\n      .map(g => g.type === 'list' ? g.contentRef.value?.$el as HTMLElement : g.contentRef.value)\n      .findIndex(el => el?.contains(target))\n\n    const nextIndex = nextFocusGroup(children, currentGroupIndex, direction, target)\n\n    if (isNull(nextIndex)) {\n      const originGroup = groups[currentGroupIndex]\n      const origin = children[currentGroupIndex]\n      const isListGroup = originGroup.type === 'list'\n\n      const atEdge = isListGroup || (\n        direction === 'forward'\n          ? origin.at(-1) === e.target\n          : origin.at(0) === e.target\n      )\n\n      if (atEdge) {\n        onLeave()\n        const refocused = getActiveElement() as HTMLElement | null\n        if (refocused) {\n          const relayed = new KeyboardEvent('keydown', { key: 'Tab', shiftKey: e.shiftKey, bubbles: true, cancelable: true })\n          refocused.dispatchEvent(relayed) // let list or treeview handle the navigation\n          if (relayed.defaultPrevented) e.preventDefault()\n        }\n      }\n    } else {\n      e.preventDefault()\n      e.stopImmediatePropagation()\n\n      const nextGroup = groups[nextIndex]\n      if (nextGroup.type === 'list' && toValue(nextGroup.displayItemsCount) > 0) {\n        nextGroup.contentRef.value?.focus(0)\n      } else {\n        const fromBefore = direction === 'forward'\n        children[nextIndex].at(fromBefore ? 0 : -1)!.focus()\n      }\n    }\n  }\n\n  function nextFocusGroup (\n    children: HTMLElement[][],\n    currentIndex: number,\n    direction: 'forward' | 'backward',\n    target: Element\n  ): number | null {\n    const originGroup = groups[currentIndex]\n    const origin = children[currentIndex]\n\n    // List groups always allow leaving (VList manages internal focus)\n    // Element groups require being at the edge focusable child\n    if (originGroup.type !== 'list') {\n      const isAtEdge = direction === 'forward'\n        ? origin.at(-1) === target\n        : origin.at(0) === target\n\n      if (!isAtEdge) return null\n    }\n\n    const step = direction === 'forward' ? 1 : -1\n    for (let i = currentIndex + step; i >= 0 && i < groups.length; i += step) {\n      const group = groups[i]\n      if (children[i].length > 0 || (group.type === 'list' && toValue(group.displayItemsCount) > 0)) {\n        return i\n      }\n    }\n\n    return null\n  }\n\n  return { onTabKeydown }\n}\n","/* eslint-disable max-statements */\n/* eslint-disable no-labels */\n\n// Utilities\nimport { computed, shallowRef, unref, watchEffect } from 'vue'\nimport {\n  findMatchRanges,\n  getPropertyFromItem,\n  isBoolean,\n  isFunction,\n  isNullOrUndefined,\n  isNumber,\n  isObject,\n  isString,\n  isUndefined,\n  propsFactory,\n  wrapInArray,\n} from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { IgnoreAccents, MaybeRef } from '@/util'\n\n/**\n * - boolean: match without highlight\n * - number: single match (index), length already known\n * - []: single match (start, end)\n * - [][]: multiple matches (start, end), shouldn't overlap\n */\nexport type FilterMatchArraySingle = readonly [number, number]\nexport type FilterMatchArrayMultiple = readonly FilterMatchArraySingle[]\nexport type FilterMatchArray = FilterMatchArraySingle | FilterMatchArrayMultiple\nexport type FilterMatch = boolean | number | FilterMatchArray\nexport type FilterFunction = (value: string, query: string, item?: InternalItem) => FilterMatch\nexport type FilterKeyFunctions = Record<string, FilterFunction>\nexport type FilterKeys = string | string[]\nexport type FilterMode = 'some' | 'every' | 'union' | 'intersection'\n\nexport interface FilterProps {\n  customFilter?: FilterFunction\n  customKeyFilter?: FilterKeyFunctions\n  filterKeys?: FilterKeys\n  filterMode?: FilterMode\n  ignoreAccents?: IgnoreAccents\n  noFilter?: boolean\n}\n\nexport interface InternalItem<T = any> {\n  value: any\n  raw: T\n  type?: string\n}\n\ntype FilterResult = {\n  index: number\n  matches: Record<string, FilterMatchArrayMultiple | undefined>\n  type?: 'divider' | 'subheader'\n}\n\n// Composables\nexport function createDefaultFilter (ignoreAccents?: IgnoreAccents): FilterFunction {\n  return (value, query) => {\n    if (isNullOrUndefined(value) || isNullOrUndefined(query)) return -1\n    if (!query.length) return 0\n\n    const ranges = findMatchRanges(value.toString(), query.toString(), {\n      ignoreCase: true,\n      ignoreAccents,\n      matchAll: true,\n    })\n\n    return ranges.length ? ranges : -1\n  }\n}\n\nexport const defaultFilter: FilterFunction = createDefaultFilter()\n\nfunction normaliseMatch (match: FilterMatch, query: string): FilterMatchArrayMultiple | undefined {\n  if (isNullOrUndefined(match) || isBoolean(match) || match === -1) return\n  if (isNumber(match)) return [[match, match + query.length]]\n  if (Array.isArray(match[0])) return match as FilterMatchArrayMultiple\n  return [match] as FilterMatchArrayMultiple\n}\n\nexport const makeFilterProps = propsFactory({\n  customFilter: Function as PropType<FilterFunction>,\n  customKeyFilter: Object as PropType<FilterKeyFunctions>,\n  filterKeys: [Array, String] as PropType<FilterKeys>,\n  filterMode: {\n    type: String as PropType<FilterMode>,\n    default: 'intersection',\n  },\n  ignoreAccents: [Boolean, String] as PropType<IgnoreAccents>,\n  noFilter: Boolean,\n}, 'filter')\n\n// eslint-disable-next-line complexity\nexport function filterItems (\n  items: readonly (readonly [item: InternalItem, transformed: {}])[] | readonly InternalItem[],\n  query: string,\n  options?: {\n    customKeyFilter?: FilterKeyFunctions\n    default?: FilterFunction\n    filterKeys?: FilterKeys\n    filterMode?: FilterMode\n    ignoreAccents?: IgnoreAccents\n    noFilter?: boolean\n  },\n) {\n  const array: FilterResult[] = []\n  // always ensure we fall back to a functioning filter\n  const filter = options?.default ?? createDefaultFilter(options?.ignoreAccents)\n  const keys = options?.filterKeys ? wrapInArray(options.filterKeys) : false\n  const customFiltersLength = Object.keys(options?.customKeyFilter ?? {}).length\n\n  if (!items?.length) return array\n\n  let lookAheadItems: FilterResult[] = []\n\n  loop:\n  for (let i = 0; i < items.length; i++) {\n    const [item, transformed = item] = wrapInArray(items[i]) as readonly [InternalItem, {}]\n    const customMatches: Record<string, FilterMatchArrayMultiple | undefined> = {}\n    const defaultMatches: Record<string, FilterMatchArrayMultiple | undefined> = {}\n    let match: FilterMatch = -1\n\n    if ((query || customFiltersLength > 0) && !options?.noFilter) {\n      let hasOnlyCustomFilters = false\n\n      if (isObject(item)) {\n        if (item.type === 'divider' || item.type === 'subheader') {\n          if (lookAheadItems.at(-1)?.type !== 'divider' || item.type !== 'subheader') {\n            // clear unless, divider appears before subheader\n            lookAheadItems = []\n          }\n\n          lookAheadItems.push({ index: i, matches: { }, type: item.type })\n          continue\n        }\n\n        const filterKeys = keys || Object.keys(transformed)\n        hasOnlyCustomFilters = filterKeys.length === customFiltersLength\n\n        for (const key of filterKeys) {\n          const value = getPropertyFromItem(transformed, key)\n          const keyFilter = options?.customKeyFilter?.[key]\n\n          match = keyFilter\n            ? keyFilter(value, query, item)\n            : filter(value, query, item)\n\n          if (match !== -1 && match !== false) {\n            if (keyFilter) customMatches[key] = normaliseMatch(match, query)\n            else defaultMatches[key] = normaliseMatch(match, query)\n          } else if (options?.filterMode === 'every') {\n            continue loop\n          }\n        }\n      } else {\n        match = filter(item, query, item)\n        if (match !== -1 && match !== false) {\n          defaultMatches.title = normaliseMatch(match, query)\n        }\n      }\n\n      const defaultMatchesLength = Object.keys(defaultMatches).length\n      const customMatchesLength = Object.keys(customMatches).length\n\n      if (!defaultMatchesLength && !customMatchesLength) continue\n\n      if (\n        options?.filterMode === 'union' &&\n        customMatchesLength !== customFiltersLength &&\n        !defaultMatchesLength\n      ) continue\n\n      if (\n        options?.filterMode === 'intersection' &&\n        (\n          customMatchesLength !== customFiltersLength ||\n          (!defaultMatchesLength && customFiltersLength > 0 && !hasOnlyCustomFilters)\n        )\n      ) continue\n    }\n\n    if (lookAheadItems.length) {\n      array.push(...lookAheadItems)\n      lookAheadItems = []\n    }\n\n    array.push({ index: i, matches: { ...defaultMatches, ...customMatches } })\n  }\n\n  return array\n}\n\nexport function useFilter <T extends InternalItem> (\n  props: FilterProps,\n  items: MaybeRef<T[]>,\n  query: Ref<string | undefined> | (() => string | undefined),\n  options?: {\n    transform?: (item: T) => {}\n    customKeyFilter?: MaybeRef<FilterKeyFunctions | undefined>\n  }\n) {\n  const filteredItems = shallowRef<T[]>([])\n  const filteredMatches = shallowRef(new Map<unknown, Record<string, FilterMatchArrayMultiple | undefined>>())\n  const transformedItems = computed(() => (\n    options?.transform\n      ? unref(items).map(item => ([item, options.transform!(item)] as const))\n      : unref(items)\n  ))\n\n  watchEffect(() => {\n    const _query = isFunction(query) ? query() : unref(query)\n    const strQuery = (\n      !isString(_query) &&\n      !isNumber(_query)\n    ) ? '' : String(_query)\n\n    const results = filterItems(\n      transformedItems.value,\n      strQuery,\n      {\n        customKeyFilter: {\n          ...props.customKeyFilter,\n          ...unref(options?.customKeyFilter),\n        },\n        default: props.customFilter,\n        filterKeys: props.filterKeys,\n        filterMode: props.filterMode,\n        ignoreAccents: props.ignoreAccents,\n        noFilter: props.noFilter,\n      },\n    )\n\n    const originalItems = unref(items)\n\n    const _filteredItems: typeof filteredItems['value'] = []\n    const _filteredMatches: typeof filteredMatches['value'] = new Map()\n    results.forEach(({ index, matches }) => {\n      const item = originalItems[index]\n      _filteredItems.push(item)\n      if (!isUndefined(item.value)) {\n        _filteredMatches.set(item.value, matches)\n      }\n    })\n    filteredItems.value = _filteredItems\n    filteredMatches.value = _filteredMatches\n  })\n\n  function getMatches (item: T) {\n    return filteredMatches.value.get(item.value)\n  }\n\n  return { filteredItems, filteredMatches, getMatches }\n}\n","// Utilities\nimport { computed, toRef, toValue, useId } from 'vue'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { MaybeRefOrGetter } from 'vue'\n\n// Types\nexport interface MenuActivatorProps {\n  closeText: string\n  openText: string\n}\n\n// Composables\nexport const makeMenuActivatorProps = propsFactory({\n  closeText: {\n    type: String,\n    default: '$vuetify.close',\n  },\n  openText: {\n    type: String,\n    default: '$vuetify.open',\n  },\n}, 'autocomplete')\n\nexport function useMenuActivator (props: MenuActivatorProps, isOpen: MaybeRefOrGetter<boolean>) {\n  const uid = useId()\n  const menuId = computed(() => `menu-${uid}`)\n\n  const ariaExpanded = toRef(() => toValue(isOpen))\n  const ariaControls = toRef(() => menuId.value)\n\n  return {\n    menuId,\n    ariaExpanded,\n    ariaControls,\n  }\n}\n","// Styles\nimport './VSelect.sass'\n\n// Components\nimport { VDialogTransition } from '@/components/transitions'\nimport { VAvatar } from '@/components/VAvatar'\nimport { VCheckboxBtn } from '@/components/VCheckbox'\nimport { VChip } from '@/components/VChip'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VDivider } from '@/components/VDivider'\nimport { VIcon } from '@/components/VIcon'\nimport { useInputIcon } from '@/components/VInput/InputIcon'\nimport { VList, VListItem, VListSubheader } from '@/components/VList'\nimport { VMenu } from '@/components/VMenu'\nimport { VSheet } from '@/components/VSheet'\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\nimport { VVirtualScroll } from '@/components/VVirtualScroll'\nimport { VHighlight } from '@/labs/VHighlight'\n\n// Composables\nimport { useAutofill } from './useAutofill'\nimport { useFocusRepair } from './useFocusRepair'\nimport { useScrolling } from './useScrolling'\nimport { useSelectionMenu } from './useSelectionMenu'\nimport { useFocusGroups } from '../../composables/focusGroups'\nimport { injectNestedDefaults } from '@/composables/defaults'\nimport { useElevation } from '@/composables/elevation'\nimport { makeFilterProps, useFilter } from '@/composables/filter'\nimport { useForm } from '@/composables/form'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { IconValue } from '@/composables/icons'\nimport { makeItemsProps, useItems } from '@/composables/list-items'\nimport { useLocale } from '@/composables/locale'\nimport { makeMenuActivatorProps, useMenuActivator } from '@/composables/menuActivator'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeTransitionProps } from '@/composables/transition'\n\n// Utilities\nimport { computed, mergeProps, nextTick, ref, shallowRef, toRef, watch } from 'vue'\nimport {\n  camelizeProps,\n  checkPrintable,\n  deepEqual,\n  ensureValidVNode,\n  genericComponent,\n  getActiveElement,\n  IN_BROWSER,\n  isAutofill,\n  isFunction,\n  isNumber,\n  omit,\n  propsFactory,\n  useRender,\n  wrapInArray,\n} from '@/util'\n\n// Types\nimport type { Component, PropType, Ref } from 'vue'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\nimport type { ListItem } from '@/composables/list-items'\nimport type { GenericProps, SelectItemKey } from '@/util'\n\ntype Primitive = string | number | boolean | symbol\n\ntype Val <T, ReturnObject extends boolean> = [T] extends [Primitive]\n  ? T\n  : (ReturnObject extends true ? T : any)\n\ntype Value <T, ReturnObject extends boolean, Multiple extends boolean> =\n  Multiple extends true\n    ? readonly Val<T, ReturnObject>[]\n    : Val<T, ReturnObject> | null\n\nexport const makeSelectProps = propsFactory({\n  chips: Boolean,\n  closableChips: Boolean,\n  eager: Boolean,\n  form: String,\n  hideNoData: Boolean,\n  hideSelected: Boolean,\n  listProps: {\n    type: Object as PropType<VList['$props']>,\n  },\n  menu: Boolean,\n  /** @deprecated use menuProps.contentClass instead */\n  menuElevation: [Number, String],\n  menuIcon: {\n    type: IconValue,\n    default: '$dropdown',\n  },\n  menuProps: {\n    type: Object as PropType<VMenu['$props']>,\n  },\n  multiple: Boolean,\n  noDataText: {\n    type: String,\n    default: '$vuetify.noDataText',\n  },\n  openOnClear: Boolean,\n  openOnFocus: Boolean,\n  itemColor: String,\n  noAutoScroll: Boolean,\n\n  ...makeMenuActivatorProps(),\n  ...makeItemsProps({ itemChildren: false }),\n}, 'Select')\n\nexport const makeVSelectProps = propsFactory({\n  search: String,\n\n  ...makeFilterProps({ filterKeys: ['title'] }),\n  ...makeSelectProps(),\n  ...omit(makeVTextFieldProps({\n    modelValue: null,\n    role: 'combobox',\n  }), ['validationValue', 'dirty']),\n  ...makeTransitionProps({ transition: { component: VDialogTransition as Component } }),\n}, 'VSelect')\n\ntype ItemType<T> = T extends readonly (infer U)[] ? U : never\n\nexport const VSelect = genericComponent<new <\n  T extends readonly any[],\n  Item = ItemType<T>,\n  ReturnObject extends boolean = false,\n  Multiple extends boolean = false,\n  V extends Value<Item, ReturnObject, Multiple> = Value<Item, ReturnObject, Multiple>\n>(\n  props: {\n    items?: T\n    itemTitle?: SelectItemKey<ItemType<T>>\n    itemValue?: SelectItemKey<ItemType<T>>\n    itemProps?: SelectItemKey<ItemType<T>>\n    returnObject?: ReturnObject\n    multiple?: Multiple\n    modelValue?: V | null\n    'onUpdate:modelValue'?: (value: V) => void\n  },\n  slots: Omit<VInputSlots & VFieldSlots, 'default'> & {\n    item: { item: Item, internalItem: ListItem<Item>, index: number, props: Record<string, unknown> }\n    chip: { item: Item, internalItem: ListItem<Item>, index: number, props: Record<string, unknown> }\n    selection: { item: Item, internalItem: ListItem<Item>, index: number }\n    subheader: { props: Record<string, unknown>, index: number }\n    divider: { props: Record<string, unknown>, index: number }\n    'prepend-item': never\n    'append-item': never\n    'no-data': never\n    'menu-header': { search: Ref<string | undefined>, filteredItems: ListItem<Item>[] }\n    'menu-footer': { search: Ref<string | undefined>, filteredItems: ListItem<Item>[] }\n  }\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VSelect',\n\n  props: makeVSelectProps(),\n\n  emits: {\n    'update:focused': (focused: boolean) => true,\n    'update:modelValue': (value: any) => true,\n    'update:menu': (ue: boolean) => true,\n    'update:search': (value: string) => true,\n    'item:added': (item: ListItem) => true,\n    'item:removed': (item: ListItem) => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const { t } = useLocale()\n    const { elevationClasses } = useElevation(toRef(() => props.menuElevation))\n\n    const vTextFieldRef = ref<VTextField>()\n    const vMenuRef = ref<VMenu>()\n    const listRef = ref<VList>()\n    const headerRef = ref<HTMLElement>()\n    const footerRef = ref<HTMLElement>()\n    const vVirtualScrollRef = ref<VVirtualScroll>()\n\n    const { items, transformIn, transformOut } = useItems(props)\n    const { autofill, resetAutofill } = useAutofill(items, item => select(item))\n    const search = useProxiedModel(props, 'search', '')\n    const { filteredItems, getMatches } = useFilter(props, items, () => search.value)\n    const model = useProxiedModel(\n      props,\n      'modelValue',\n      [],\n      v => transformIn(v === null ? [null] : wrapInArray(v)),\n      v => {\n        const transformed = transformOut(v)\n        return props.multiple ? transformed : (transformed[0] ?? null)\n      }\n    )\n    const counterValue = computed(() => {\n      return isFunction(props.counterValue) ? props.counterValue(model.value)\n        : isNumber(props.counterValue) ? props.counterValue\n        : model.value.length\n    })\n    const form = useForm(props)\n    const selectedValues = computed(() => model.value.map(selection => selection.value))\n    const isFocused = shallowRef(false)\n    const closableChips = toRef(() => props.closableChips && !form.isReadonly.value && !form.isDisabled.value)\n    const chipDefaults = injectNestedDefaults<VChip['$props']>('VChip')\n    const { InputIcon } = useInputIcon(props)\n\n    let keyboardLookupPrefix = ''\n    let keyboardLookupIndex = 0\n    let keyboardLookupLastTime: number\n    let openedByKeyboard = false\n\n    const displayItems = computed(() => {\n      const baseItems = search.value ? filteredItems.value : items.value\n      if (props.hideSelected) {\n        return baseItems.filter(item => !model.value.some(s => (props.valueComparator || deepEqual)(s, item)))\n      }\n      return baseItems\n    })\n\n    const menuDisabled = computed(() => (\n      (props.hideNoData && !displayItems.value.length) ||\n      form.isReadonly.value || form.isDisabled.value\n    ))\n    const { menu, closeOnSelect } = useSelectionMenu(props, { vMenuRef, menuDisabled, isFocused })\n\n    const { menuId, ariaExpanded, ariaControls } = useMenuActivator(props, menu)\n\n    const computedMenuProps = computed(() => {\n      return {\n        ...props.menuProps,\n        activatorProps: {\n          ...(props.menuProps?.activatorProps || {}),\n          'aria-haspopup': 'listbox', // Set aria-haspopup to 'listbox'\n        },\n      }\n    })\n\n    const {\n      listEvents,\n      focusItem,\n      focusFirstItem,\n      focusLastItem,\n      onActivatorKeydown,\n      setPendingFocus,\n      flushPendingFocus,\n    } = useScrolling(\n      listRef,\n      vTextFieldRef,\n      vVirtualScrollRef,\n      displayItems,\n      {\n        selectedIndex: getSelectedIndex,\n        menuContentEl: () => vMenuRef.value?.contentEl,\n        noAutoScroll: () => props.noAutoScroll,\n      }\n    )\n\n    const repairOrphanedFocus = useFocusRepair(\n      menu,\n      () => vMenuRef.value?.contentEl,\n      () => vTextFieldRef.value?.controlRef,\n    )\n    const { onTabKeydown } = useFocusGroups({\n      groups: [\n        { type: 'element' as const, contentRef: headerRef },\n        { type: 'list' as const, contentRef: listRef, displayItemsCount: () => displayItems.value.length },\n        { type: 'element' as const, contentRef: footerRef },\n      ],\n      onLeave: () => {\n        menu.value = false\n        vTextFieldRef.value?.focus()\n      },\n    })\n\n    function onClear (e: MouseEvent | KeyboardEvent) {\n      if (props.openOnClear) {\n        menu.value = true\n      }\n    }\n    function onMousedownControl () {\n      if (menuDisabled.value) return\n\n      openedByKeyboard = false\n      setPendingFocus(null)\n      menu.value = !menu.value\n    }\n\n    function onMenuKeydown (e: KeyboardEvent) {\n      if (e.key === 'Tab') {\n        onTabKeydown(e)\n      }\n\n      if (listRef.value?.$el.contains(e.target) && checkPrintable(e)) {\n        onKeydown(e)\n      }\n    }\n\n    function onKeydown (e: KeyboardEvent) {\n      if (!e.key || form.isReadonly.value) return\n\n      switch (e.key) {\n        case 'Escape':\n        case 'Tab':\n          menu.value = false\n          break\n        case 'Enter':\n        case ' ':\n          e.preventDefault()\n          openedByKeyboard = true\n          menu.value = true\n          break\n        case 'ArrowDown':\n        case 'ArrowUp':\n          e.preventDefault()\n          openedByKeyboard = true\n          if (onActivatorKeydown(e, menu)) return\n          break\n        case 'Home':\n          e.preventDefault()\n          if (menu.value) focusFirstItem()\n          break\n        case 'End':\n          e.preventDefault()\n          if (menu.value) focusLastItem()\n          break\n        case 'Backspace':\n          if (!props.clearable) break\n\n          e.preventDefault()\n          for (const item of model.value) emit('item:removed', item)\n          model.value = []\n          onClear(e)\n          return\n      }\n\n      // html select hotkeys\n      const KEYBOARD_LOOKUP_THRESHOLD = 1000 // milliseconds\n\n      if (!checkPrintable(e)) return\n\n      const now = performance.now()\n      if (now - keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {\n        keyboardLookupPrefix = ''\n        keyboardLookupIndex = 0\n      }\n      keyboardLookupPrefix += e.key.toLowerCase()\n      keyboardLookupLastTime = now\n\n      const items = displayItems.value\n      function findItem () {\n        let result = findItemBase()\n        if (result) return result\n\n        if (keyboardLookupPrefix.at(-1) === keyboardLookupPrefix.at(-2)) {\n          // No matches but we have a repeated letter, try the next item with that prefix\n          keyboardLookupPrefix = keyboardLookupPrefix.slice(0, -1)\n          keyboardLookupIndex++\n          result = findItemBase()\n          if (result) return result\n        }\n\n        // Still nothing, wrap around to the top\n        keyboardLookupIndex = 0\n        result = findItemBase()\n        if (result) return result\n\n        // Still nothing, try just the new letter\n        keyboardLookupPrefix = e.key.toLowerCase()\n        return findItemBase()\n      }\n      function findItemBase () {\n        for (let i = keyboardLookupIndex; i < items.length; i++) {\n          const _item = items[i]\n          if (_item.title.toLowerCase().startsWith(keyboardLookupPrefix)) {\n            return [_item, i] as const\n          }\n        }\n        return undefined\n      }\n\n      const result = findItem()\n      if (!result) return\n\n      const [item, index] = result\n      keyboardLookupIndex = index\n      if (menu.value) {\n        if (!props.multiple) select(item, true, false)\n        focusItem(index)\n      } else if (!props.multiple) {\n        select(item, true)\n      }\n    }\n\n    /** @param set - null means toggle */\n    function select (item: ListItem, set: boolean | null = true, closeMenu = true) {\n      if (item.props.disabled) return\n\n      const comparator = props.valueComparator || deepEqual\n\n      if (props.multiple) {\n        const index = model.value.findIndex(selection => comparator(selection.value, item.value))\n        const add = set == null ? !~index : set\n\n        if (~index) {\n          const value = add ? [...model.value, item] : [...model.value]\n          const [removed] = value.splice(index, 1)\n          if (!add) emit('item:removed', removed) // skip if only reordered\n          model.value = value\n        } else if (add) {\n          emit('item:added', item)\n          model.value = [...model.value, item]\n        }\n      } else {\n        const add = set !== false\n        const old = model.value[0]\n\n        if (add) {\n          if (old && !comparator(old.value, item.value)) {\n            emit('item:removed', old)\n            emit('item:added', item)\n          } else if (!old) {\n            emit('item:added', item)\n          }\n          model.value = [item]\n        } else {\n          if (old) emit('item:removed', old)\n          model.value = []\n        }\n\n        if (closeMenu) nextTick(() => closeOnSelect())\n      }\n    }\n    let mousedownInsideContentAt = 0\n    function onMousedownContent () {\n      mousedownInsideContentAt = performance.now()\n    }\n\n    function onBlur (e: FocusEvent) {\n      const target = e.target as Element\n      if (!vTextFieldRef.value?.$el.contains(target)) {\n        menu.value = false\n      }\n\n      // Clicking dead space in the menu parks focus on body, we still count as focused\n      const next = e.relatedTarget as Node | null\n      if (\n        vMenuRef.value?.contentEl?.contains(next) ||\n        (!next && performance.now() - mousedownInsideContentAt < 10)\n      ) {\n        isFocused.value = true\n      }\n    }\n    function getSelectedIndex () {\n      return displayItems.value.findIndex(\n        item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value))\n      )\n    }\n    async function onAfterEnter () {\n      if (props.eager) {\n        vVirtualScrollRef.value?.calculateVisibleItems()\n      }\n      if (!listRef.value || !isFocused.value) return\n\n      if (flushPendingFocus()) return\n\n      if (listRef.value.$el?.contains(getActiveElement())) return\n\n      const selected = getSelectedIndex()\n      if (selected >= 0 && await focusItem(selected, !props.noAutoScroll)) return\n\n      if (openedByKeyboard) {\n        focusFirstItem()\n      }\n    }\n    function onAfterLeave () {\n      search.value = ''\n\n      if (isFocused.value) {\n        if (vMenuRef.value?.contentEl?._clickOutside?.lastMousedownWasOutside) {\n          isFocused.value = false\n        } else {\n          vTextFieldRef.value?.focus()\n        }\n      }\n    }\n    function onFocusin (e: FocusEvent) {\n      isFocused.value = true\n    }\n    function onFocusout (e: FocusEvent) {\n      if (\n        !vTextFieldRef.value?.$el.contains(e.relatedTarget as Node) &&\n        !(e.currentTarget as HTMLElement).contains(e.relatedTarget as Node)\n      ) {\n        if (repairOrphanedFocus(e)) return\n        isFocused.value = false\n      }\n    }\n    let isAutofilling = false\n    function onInputCapture (e: Event) {\n      isAutofilling = isAutofill(e)\n    }\n    function onModelUpdate (v: any) {\n      if (v == null) {\n        for (const item of model.value) emit('item:removed', item)\n        model.value = []\n      } else if (isAutofilling) {\n        autofill(v)\n      } else if (vTextFieldRef.value) {\n        vTextFieldRef.value.value = ''\n      }\n    }\n\n    watch(isFocused, val => val && resetAutofill())\n\n    watch(menu, val => {\n      if (!val) {\n        openedByKeyboard = false\n        setPendingFocus(null)\n      }\n\n      if (!props.hideSelected && menu.value && model.value.length) {\n        const index = getSelectedIndex()\n        IN_BROWSER && !props.noAutoScroll && window.requestAnimationFrame(() => {\n          index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index, 'center')\n        })\n      }\n    })\n\n    watch(items, (newVal, oldVal) => {\n      if (menu.value) return\n\n      if (isFocused.value && props.hideNoData && !oldVal.length && newVal.length) {\n        menu.value = true\n      }\n    })\n\n    useRender(() => {\n      const hasChips = !!(props.chips || slots.chip)\n      const hasList = !!(\n        (!props.hideNoData || displayItems.value.length) ||\n        slots['prepend-item'] ||\n        slots['append-item'] ||\n        slots['no-data']\n      )\n      const isDirty = model.value.length > 0\n      const textFieldProps = VTextField.filterProps(props)\n\n      const placeholder = isDirty || (\n        !isFocused.value &&\n        props.label &&\n        !props.persistentPlaceholder\n      ) ? undefined : props.placeholder\n\n      const menuSlotProps = {\n        search,\n        filteredItems: filteredItems.value,\n      }\n\n      return (\n        <VTextField\n          ref={ vTextFieldRef }\n          { ...textFieldProps }\n          modelValue={ model.value.map(v => v.props.title).join(', ') }\n          name={ undefined }\n          onUpdate:modelValue={ onModelUpdate }\n          v-model:focused={ isFocused.value }\n          validationValue={ model.externalValue }\n          counterValue={ counterValue.value }\n          dirty={ isDirty }\n          class={[\n            'v-select',\n            {\n              'v-select--active-menu': menu.value,\n              'v-select--chips': !!props.chips,\n              [`v-select--${props.multiple ? 'multiple' : 'single'}`]: true,\n              'v-select--selected': model.value.length,\n              'v-select--selection-slot': !!slots.selection,\n            },\n            props.class,\n          ]}\n          style={ props.style }\n          inputmode=\"none\"\n          placeholder={ placeholder }\n          onClick:clear={ onClear }\n          onMousedown:control={ onMousedownControl }\n          onBlur={ onBlur }\n          onKeydown={ onKeydown }\n          onInputCapture={ onInputCapture }\n          aria-expanded={ ariaExpanded.value }\n          aria-controls={ ariaControls.value }\n        >\n          {{\n            ...slots,\n            default: ({ id }) => (\n              <>\n                { selectedValues.value.map((value, i) => (\n                  <input\n                    key={ i }\n                    type=\"hidden\"\n                    name={ props.name }\n                    value={ value }\n                    form={ props.form }\n                  />\n                ))}\n\n                <VMenu\n                  id={ menuId.value }\n                  ref={ vMenuRef }\n                  v-model={ menu.value }\n                  activator=\"parent\"\n                  captureFocus={ false }\n                  openOnArrow={ false }\n                  disabled={ menuDisabled.value }\n                  _disableKeys\n                  eager={ props.eager }\n                  maxHeight={ 310 }\n                  openOnClick={ false }\n                  closeOnContentClick={ false }\n                  transition={ props.transition }\n                  onAfterEnter={ onAfterEnter }\n                  onAfterLeave={ onAfterLeave }\n                  { ...computedMenuProps.value }\n                  contentClass={['v-select__content', elevationClasses.value, computedMenuProps.value.contentClass]}\n                >\n                  <VSheet\n                    onFocusin={ onFocusin }\n                    onFocusout={ onFocusout }\n                    onKeydown={ onMenuKeydown }\n                    onMousedown={ onMousedownContent }\n                  >\n                    { slots['menu-header'] && (\n                      <header ref={ headerRef }>\n                        { slots['menu-header'](menuSlotProps) }\n                      </header>\n                    )}\n\n                    { hasList && (\n                      <VList\n                        key=\"select-list\"\n                        ref={ listRef }\n                        class=\"v-list--navigable\"\n                        selected={ selectedValues.value }\n                        selectStrategy={ props.multiple ? 'independent' : 'single-independent' }\n                        tabindex=\"-1\"\n                        selectable={ !!displayItems.value.length }\n                        aria-live=\"polite\"\n                        aria-labelledby={ `${id.value}-label` }\n                        aria-multiselectable={ props.multiple }\n                        color={ props.itemColor ?? props.color }\n                        { ...listEvents }\n                        { ...props.listProps }\n                      >\n                        { slots['prepend-item']?.() }\n\n                        { !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? (\n                          <VListItem key=\"no-data\" title={ t(props.noDataText) } />\n                        ))}\n\n                        <VVirtualScroll ref={ vVirtualScrollRef } renderless items={ displayItems.value } itemKey=\"value\">\n                          { ({ item, index, itemRef }) => {\n                            const camelizedProps = camelizeProps(item.props)\n\n                            const itemProps = mergeProps(item.props, {\n                              ref: itemRef,\n                              key: item.value,\n                              onClick: () => select(item, null),\n                              'aria-posinset': index + 1,\n                              'aria-setsize': displayItems.value.length,\n                            })\n\n                            if (item.type === 'divider') {\n                              return slots.divider?.({ props: item.raw, index }) ?? (\n                                <VDivider { ...item.props } ref={ itemRef } key={ `divider-${index}` } />\n                              )\n                            }\n\n                            if (item.type === 'subheader') {\n                              return slots.subheader?.({ props: item.raw, index }) ?? (\n                                <VListSubheader { ...item.props } ref={ itemRef } key={ `subheader-${index}` } />\n                              )\n                            }\n\n                            return slots.item?.({\n                              item: item.raw,\n                              internalItem: item,\n                              index,\n                              props: itemProps,\n                            }) ?? (\n                              <VListItem { ...itemProps } role=\"option\">\n                                {{\n                                  prepend: ({ isSelected }) => (\n                                    <>\n                                      { props.multiple && !props.hideSelected ? (\n                                        <VCheckboxBtn\n                                          key={ item.value }\n                                          modelValue={ isSelected }\n                                          ripple={ false }\n                                          tabindex=\"-1\"\n                                          aria-hidden\n                                          onClick={ (event: MouseEvent) => event.preventDefault() }\n                                        />\n                                      ) : undefined }\n\n                                      { camelizedProps.prependAvatar && (\n                                        <VAvatar image={ camelizedProps.prependAvatar } />\n                                      )}\n\n                                      { camelizedProps.prependIcon && (\n                                        <VIcon icon={ camelizedProps.prependIcon } />\n                                      )}\n                                    </>\n                                  ),\n                                  title: () => {\n                                    return search.value\n                                      ? (\n                                        <VHighlight\n                                          text={ item.title }\n                                          matches={ getMatches(item)?.title }\n                                          markClass=\"v-select__mask\"\n                                          matchAll\n                                          ignoreCase\n                                        />\n                                      )\n                                      : item.title\n                                  },\n                                }}\n                              </VListItem>\n                            )\n                          }}\n                        </VVirtualScroll>\n\n                        { slots['append-item']?.() }\n                      </VList>\n                    )}\n\n                    { slots['menu-footer'] && (\n                      <footer ref={ footerRef }>\n                        { slots['menu-footer'](menuSlotProps) }\n                      </footer>\n                    )}\n                  </VSheet>\n                </VMenu>\n\n                { model.value.map((item, index) => {\n                  function onChipClose (e: Event) {\n                    e.stopPropagation()\n                    e.preventDefault()\n\n                    select(item, false)\n                  }\n\n                  const slotProps = mergeProps(VChip.filterProps(item.props), {\n                    'onClick:close': onChipClose,\n                    onKeydown (e: KeyboardEvent) {\n                      if (e.key !== 'Enter' && e.key !== ' ') return\n\n                      e.preventDefault()\n                      e.stopPropagation()\n\n                      onChipClose(e)\n                    },\n                    onMousedown (e: MouseEvent) {\n                      e.preventDefault()\n                      e.stopPropagation()\n                    },\n                    modelValue: true,\n                    'onUpdate:modelValue': undefined,\n                  })\n\n                  const hasSlot = hasChips ? !!slots.chip : !!slots.selection\n                  const slotContent = hasSlot\n                    ? ensureValidVNode(\n                      hasChips\n                        ? slots.chip!({ item: item.raw, internalItem: item, index, props: slotProps })\n                        : slots.selection!({ item: item.raw, internalItem: item, index })\n                    )\n                    : undefined\n\n                  if (hasSlot && !slotContent) return undefined\n\n                  return (\n                    <div key={ item.value } class=\"v-select__selection\">\n                      { hasChips ? (\n                        !slots.chip ? (\n                          <VChip\n                            key=\"chip\"\n                            closable={ closableChips.value }\n                            size={ chipDefaults.value?.size ?? 'small' }\n                            text={ item.title }\n                            disabled={ item.props.disabled }\n                            { ...slotProps }\n                          />\n                        ) : (\n                          <VDefaultsProvider\n                            key=\"chip-defaults\"\n                            defaults={{\n                              VChip: {\n                                closable: closableChips.value,\n                                size: chipDefaults.value?.size ?? 'small',\n                                text: item.title,\n                              },\n                            }}\n                          >\n                            { slotContent }\n                          </VDefaultsProvider>\n                        )\n                      ) : (\n                        slotContent ?? (\n                          <span class=\"v-select__selection-text\">\n                            { item.title }\n                            { props.multiple && (index < model.value.length - 1) && (\n                              <span class=\"v-select__selection-comma\">,</span>\n                            )}\n                          </span>\n                        )\n                      )}\n                    </div>\n                  )\n                })}\n              </>\n            ),\n            'append-inner': (...args) => (\n              <>\n                { slots['append-inner']?.(...args) }\n                { props.menuIcon ? (\n                  <VIcon\n                    class=\"v-select__menu-icon\"\n                    color={ vTextFieldRef.value?.fieldIconColor }\n                    icon={ props.menuIcon }\n                    aria-hidden\n                  />\n                ) : undefined }\n                { props.appendInnerIcon && (\n                  <InputIcon\n                    key=\"append-icon\"\n                    name=\"appendInner\"\n                    color={ args[0].iconColor.value }\n                  />\n                )}\n              </>\n            ),\n          }}\n        </VTextField>\n      )\n    })\n\n    return forwardRefs({\n      isFocused,\n      menu,\n      search,\n      filteredItems,\n      select,\n    }, vTextFieldRef)\n  },\n})\n\nexport type VSelect = InstanceType<typeof VSelect>\n","// Styles\nimport './VAutocomplete.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { VCheckboxBtn } from '@/components/VCheckbox'\nimport { VChip } from '@/components/VChip'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VDivider } from '@/components/VDivider'\nimport { VIcon } from '@/components/VIcon'\nimport { useInputIcon } from '@/components/VInput/InputIcon'\nimport { VList, VListItem, VListSubheader } from '@/components/VList'\nimport { VMenu } from '@/components/VMenu'\nimport { makeSelectProps } from '@/components/VSelect/VSelect'\nimport { VSheet } from '@/components/VSheet'\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\nimport { VVirtualScroll } from '@/components/VVirtualScroll'\nimport { VHighlight } from '@/labs/VHighlight'\n\n// Composables\nimport { useAutofill } from '../VSelect/useAutofill'\nimport { useFocusRepair } from '../VSelect/useFocusRepair'\nimport { useScrolling } from '../VSelect/useScrolling'\nimport { useSelectionMenu } from '../VSelect/useSelectionMenu'\nimport { useTextColor } from '@/composables/color'\nimport { injectNestedDefaults } from '@/composables/defaults'\nimport { useElevation } from '@/composables/elevation'\nimport { makeFilterProps, useFilter } from '@/composables/filter'\nimport { useFocusGroups } from '@/composables/focusGroups'\nimport { useForm } from '@/composables/form'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useItems } from '@/composables/list-items'\nimport { useLocale } from '@/composables/locale'\nimport { useMenuActivator } from '@/composables/menuActivator'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, mergeProps, nextTick, ref, shallowRef, toRef, watch } from 'vue'\nimport {\n  camelizeProps,\n  checkPrintable,\n  deepEqual,\n  ensureValidVNode,\n  genericComponent,\n  getActiveElement,\n  IN_BROWSER,\n  isAutofill,\n  isComposingIgnoreKey,\n  isFunction,\n  isNumber,\n  noop,\n  omit,\n  propsFactory,\n  useRender,\n  wrapInArray,\n} from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\nimport type { ListItem } from '@/composables/list-items'\nimport type { GenericProps, SelectItemKey } from '@/util'\n\ntype Primitive = string | number | boolean | symbol\n\ntype Val <T, ReturnObject extends boolean> = [T] extends [Primitive]\n  ? T\n  : (ReturnObject extends true ? T : any)\n\ntype Value <T, ReturnObject extends boolean, Multiple extends boolean> =\n  Multiple extends true\n    ? readonly Val<T, ReturnObject>[]\n    : Val<T, ReturnObject> | null\n\nexport const makeVAutocompleteProps = propsFactory({\n  autoSelectFirst: {\n    type: [Boolean, String] as PropType<boolean | 'exact'>,\n  },\n  clearOnSelect: Boolean,\n  search: String,\n  closeOnInputClick: Boolean,\n\n  ...makeFilterProps({ filterKeys: ['title'] }),\n  ...makeSelectProps(),\n  ...omit(makeVTextFieldProps({\n    modelValue: null,\n    role: 'combobox',\n  }), ['validationValue', 'dirty']),\n}, 'VAutocomplete')\n\ntype ItemType<T> = T extends readonly (infer U)[] ? U : never\n\nexport const VAutocomplete = genericComponent<new <\n  T extends readonly any[],\n  Item = ItemType<T>,\n  ReturnObject extends boolean = false,\n  Multiple extends boolean = false,\n  V extends Value<Item, ReturnObject, Multiple> = Value<Item, ReturnObject, Multiple>\n>(\n  props: {\n    items?: T\n    itemTitle?: SelectItemKey<ItemType<T>>\n    itemValue?: SelectItemKey<ItemType<T>>\n    itemProps?: SelectItemKey<ItemType<T>>\n    returnObject?: ReturnObject\n    multiple?: Multiple\n    modelValue?: V | null\n    'onUpdate:modelValue'?: (value: V) => void\n  },\n  slots: Omit<VInputSlots & VFieldSlots, 'default'> & {\n    item: { item: Item, internalItem: ListItem<Item>, index: number, props: Record<string, unknown> }\n    chip: { item: Item, internalItem: ListItem<Item>, index: number, props: Record<string, unknown> }\n    selection: { item: Item, internalItem: ListItem<Item>, index: number }\n    subheader: { props: Record<string, unknown>, index: number }\n    divider: { props: Record<string, unknown>, index: number }\n    'prepend-item': never\n    'append-item': never\n    'no-data': never\n    'menu-header': { search: Ref<string | undefined>, filteredItems: ListItem<Item>[] }\n    'menu-footer': { search: Ref<string | undefined>, filteredItems: ListItem<Item>[] }\n  }\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VAutocomplete',\n\n  props: makeVAutocompleteProps(),\n\n  emits: {\n    'update:focused': (focused: boolean) => true,\n    'update:search': (value: any) => true,\n    'update:modelValue': (value: any) => true,\n    'update:menu': (value: boolean) => true,\n    'item:added': (item: ListItem) => true,\n    'item:removed': (item: ListItem) => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const { t } = useLocale()\n    const { elevationClasses } = useElevation(toRef(() => props.menuElevation))\n\n    const vTextFieldRef = ref<VTextField>()\n    const vMenuRef = ref<VMenu>()\n    const listRef = ref<VList>()\n    const headerRef = ref<HTMLElement>()\n    const footerRef = ref<HTMLElement>()\n    const vVirtualScrollRef = ref<VVirtualScroll>()\n\n    const isFocused = shallowRef(false)\n    const isPristine = shallowRef(true)\n    const listHasFocus = shallowRef(false)\n    const selectionIndex = shallowRef(-1)\n    const _searchLock = shallowRef<string | null>(null)\n    const { items, transformIn, transformOut } = useItems(props)\n    const { autofill, resetAutofill } = useAutofill(items, item => select(item))\n    const { textColorClasses, textColorStyles } = useTextColor(() => vTextFieldRef.value?.color)\n    const { InputIcon } = useInputIcon(props)\n    const search = useProxiedModel(props, 'search', '')\n    const model = useProxiedModel(\n      props,\n      'modelValue',\n      [],\n      v => transformIn(v === null ? [null] : wrapInArray(v)),\n      v => {\n        const transformed = transformOut(v)\n        return props.multiple ? transformed : (transformed[0] ?? null)\n      }\n    )\n    const counterValue = computed(() => {\n      return isFunction(props.counterValue) ? props.counterValue(model.value)\n        : isNumber(props.counterValue) ? props.counterValue\n        : model.value.length\n    })\n    const form = useForm(props)\n    const { filteredItems, getMatches } = useFilter(\n      props,\n      items,\n      () => _searchLock.value ?? (isPristine.value ? '' : search.value))\n\n    const displayItems = computed(() => {\n      if (props.hideSelected && _searchLock.value === null) {\n        return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value))\n      }\n      return filteredItems.value\n    })\n\n    const closableChips = toRef(() => props.closableChips && !form.isReadonly.value && !form.isDisabled.value)\n    const chipDefaults = injectNestedDefaults<VChip['$props']>('VChip')\n    const hasChips = computed(() => !!(props.chips || slots.chip))\n    const hasSelectionSlot = computed(() => hasChips.value || !!slots.selection)\n\n    const selectedTitle = computed(() => {\n      return (props.multiple || hasSelectionSlot.value)\n        ? ''\n        : String(model.value.at(-1)?.props.title ?? '')\n    })\n\n    const selectedValues = computed(() => model.value.map(selection => selection.props.value))\n\n    const firstSelectableItem = computed(() => displayItems.value.find(x => x.type === 'item' && !x.props.disabled))\n\n    const highlightFirst = computed(() => {\n      const selectFirst = props.autoSelectFirst === true ||\n        (props.autoSelectFirst === 'exact' && search.value === firstSelectableItem.value?.title)\n      return selectFirst &&\n        displayItems.value.length > 0 &&\n        !isPristine.value &&\n        !listHasFocus.value\n    })\n\n    const menuDisabled = computed(() => (\n      (props.hideNoData && !displayItems.value.length) ||\n      form.isReadonly.value || form.isDisabled.value\n    ))\n    const { menu, closeOnSelect } = useSelectionMenu(props, { vMenuRef, menuDisabled, isFocused })\n\n    const { menuId, ariaExpanded, ariaControls } = useMenuActivator(props, menu)\n\n    const {\n      listEvents,\n      onActivatorKeydown,\n      setPendingFocus,\n      flushPendingFocus,\n    } = useScrolling(\n      listRef,\n      vTextFieldRef,\n      vVirtualScrollRef,\n      displayItems,\n      {\n        selectedIndex: () => isPristine.value ? getSelectedIndex() : -1,\n        headerEl: () => headerRef.value,\n        menuContentEl: () => vMenuRef.value?.contentEl,\n        noAutoScroll: () => props.noAutoScroll,\n      }\n    )\n\n    const repairOrphanedFocus = useFocusRepair(\n      menu,\n      () => vMenuRef.value?.contentEl,\n      () => vTextFieldRef.value?.controlRef,\n    )\n    const { onTabKeydown } = useFocusGroups({\n      groups: [\n        { type: 'element' as const, contentRef: headerRef },\n        { type: 'list' as const, contentRef: listRef, displayItemsCount: () => displayItems.value.length },\n        { type: 'element' as const, contentRef: footerRef },\n      ],\n      onLeave: () => {\n        menu.value = false\n        vTextFieldRef.value?.focus()\n      },\n    })\n    function onClear (e: MouseEvent) {\n      if (props.openOnClear) {\n        menu.value = true\n      }\n\n      search.value = ''\n    }\n    function onMousedownControl () {\n      if (menuDisabled.value) return\n\n      menu.value = props.closeOnInputClick ? !menu.value : true\n    }\n    function onMousedownMenuIcon (e: MouseEvent) {\n      if (menuDisabled.value) return\n\n      if (isFocused.value) {\n        e.preventDefault()\n        e.stopPropagation()\n        menu.value = !menu.value\n      }\n    }\n    function onMenuKeydown (e: KeyboardEvent) {\n      if (e.key === 'Tab') {\n        onTabKeydown(e)\n      }\n\n      if (listRef.value?.$el.contains(e.target) && (checkPrintable(e) || e.key === 'Backspace')) {\n        vTextFieldRef.value?.focus()\n      }\n    }\n\n    function onKeydown (e: KeyboardEvent) {\n      if (isComposingIgnoreKey(e) || form.isReadonly.value) return\n\n      switch (e.key) {\n        case 'Escape':\n          menu.value = false\n          break\n        case 'ArrowDown':\n        case 'ArrowUp':\n          e.preventDefault()\n          if (onActivatorKeydown(e, menu)) break\n          if (e.key === 'ArrowDown' && highlightFirst.value) {\n            listRef.value?.focus('next')\n          }\n          break\n        case 'Enter':\n          e.preventDefault()\n          menu.value = true\n          selectHighlighted()\n          break\n        case 'Tab':\n          selectHighlighted()\n          menu.value = false\n          break\n        default:\n          onSelectionKeydown(e)\n      }\n    }\n\n    function selectHighlighted () {\n      const item = firstSelectableItem.value\n      if (!highlightFirst.value || !item) return\n      if (model.value.some(({ value }) => value === item.value)) return\n\n      select(item)\n    }\n\n    function onSelectionKeydown (e: KeyboardEvent) {\n      const length = model.value.length\n\n      if (['Backspace', 'Delete'].includes(e.key)) {\n        if (\n          !props.multiple &&\n          hasSelectionSlot.value &&\n          length > 0 &&\n          !search.value\n        ) {\n          select(model.value[0], false)\n          return\n        }\n\n        if (~selectionIndex.value) {\n          e.preventDefault()\n          const originalSelectionIndex = selectionIndex.value\n          select(model.value[selectionIndex.value], false)\n\n          selectionIndex.value = originalSelectionIndex >= length - 1 ? (length - 2) : originalSelectionIndex\n        } else if (e.key === 'Backspace' && !search.value) {\n          selectionIndex.value = length - 1\n        }\n\n        return\n      }\n\n      if (!props.multiple) return\n\n      if (e.key === 'ArrowLeft') {\n        if (selectionIndex.value < 0 && (vTextFieldRef.value?.selectionStart ?? 0) > 0) return\n\n        const prev = selectionIndex.value > -1\n          ? selectionIndex.value - 1\n          : length - 1\n\n        if (model.value[prev]) {\n          selectionIndex.value = prev\n        } else {\n          const searchLength = search.value?.length ?? null\n          selectionIndex.value = -1\n          vTextFieldRef.value?.setSelectionRange(searchLength, searchLength)\n        }\n      } else if (e.key === 'ArrowRight') {\n        if (selectionIndex.value < 0) return\n\n        const next = selectionIndex.value + 1\n\n        if (model.value[next]) {\n          selectionIndex.value = next\n        } else {\n          selectionIndex.value = -1\n          vTextFieldRef.value?.setSelectionRange(0, 0)\n        }\n      } else if (~selectionIndex.value && checkPrintable(e)) {\n        selectionIndex.value = -1\n      }\n    }\n\n    function onChange (e: Event) {\n      if (isAutofill(e)) autofill((e.target as HTMLInputElement).value)\n    }\n\n    function getSelectedIndex () {\n      return displayItems.value.findIndex(\n        item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value))\n      )\n    }\n\n    function onAfterEnter () {\n      if (props.eager) {\n        vVirtualScrollRef.value?.calculateVisibleItems()\n      }\n      flushPendingFocus()\n    }\n\n    function onAfterLeave () {\n      if (isFocused.value) {\n        if (vMenuRef.value?.contentEl?._clickOutside?.lastMousedownWasOutside) {\n          isFocused.value = false\n        } else {\n          isPristine.value = true\n          vTextFieldRef.value?.focus()\n        }\n      }\n      _searchLock.value = null\n    }\n\n    function onFocusin (e: FocusEvent) {\n      isFocused.value = true\n      setTimeout(() => {\n        listHasFocus.value = true\n      })\n    }\n    function onFocusout (e: FocusEvent) {\n      listHasFocus.value = false\n      if (!vTextFieldRef.value?.$el.contains(e.relatedTarget as Node)) {\n        if (repairOrphanedFocus(e)) return\n        isFocused.value = false\n      }\n    }\n    function onUpdateModelValue (v: any) {\n      if (v == null || (v === '' && !props.multiple && !hasSelectionSlot.value)) {\n        for (const item of model.value) emit('item:removed', item)\n        model.value = []\n      }\n    }\n\n    let mousedownInsideContentAt = 0\n    function onMousedownContent () {\n      mousedownInsideContentAt = performance.now()\n    }\n\n    function onBlur (e: FocusEvent) {\n      const next = e.relatedTarget as Node | null\n      const menuContent = vMenuRef.value?.contentEl\n      if (\n        menuContent?.contains(next) ||\n        (!next && performance.now() - mousedownInsideContentAt < 10)\n      ) {\n        isFocused.value = true\n      }\n    }\n\n    /** @param set - null means toggle */\n    function select (item: ListItem | undefined, set: boolean | null = true) {\n      if (!item || item.props.disabled) return\n\n      const comparator = props.valueComparator || deepEqual\n\n      if (props.multiple) {\n        const index = model.value.findIndex(selection => comparator(selection.value, item.value))\n        const add = set == null ? !~index : set\n\n        if (~index) {\n          const value = add ? [...model.value, item] : [...model.value]\n          const [removed] = value.splice(index, 1)\n          if (!add) emit('item:removed', removed) // skip if only reordered\n          model.value = value\n        } else if (add) {\n          emit('item:added', item)\n          model.value = [...model.value, item]\n        }\n\n        if (props.clearOnSelect) {\n          search.value = ''\n        }\n      } else {\n        const add = set !== false\n        const old = model.value[0]\n\n        if (add) {\n          if (old && !comparator(old.value, item.value)) {\n            emit('item:removed', old)\n            emit('item:added', item)\n          } else if (!old) {\n            emit('item:added', item)\n          }\n          model.value = [item]\n        } else {\n          if (old) emit('item:removed', old)\n          model.value = []\n        }\n\n        _searchLock.value = isPristine.value ? '' : (search.value ?? '')\n        search.value = add && !hasSelectionSlot.value ? item.title : ''\n\n        // watch for search watcher to trigger\n        nextTick(() => {\n          closeOnSelect()\n          isPristine.value = true\n        })\n      }\n    }\n\n    watch(isFocused, (val, oldVal) => {\n      if (val === oldVal) return\n\n      if (val) {\n        resetAutofill()\n        isPristine.value = true\n      } else {\n        if (!props.multiple && search.value == null) {\n          for (const item of model.value) emit('item:removed', item)\n          model.value = []\n        }\n        menu.value = false\n        if (!isPristine.value && search.value) {\n          _searchLock.value = search.value\n        }\n        search.value = selectedTitle.value\n        isPristine.value = true\n        selectionIndex.value = -1\n      }\n    })\n\n    watch(selectedTitle, val => {\n      if (isFocused.value) return\n      search.value = val\n    }, { immediate: true })\n\n    watch(search, val => {\n      if (!isFocused.value) return\n\n      if (val) menu.value = true\n\n      isPristine.value = !val\n\n      if (menu.value) {\n        nextTick(() => {\n          vVirtualScrollRef.value?.scrollToIndex(0)\n          if (listRef.value?.$el?.contains(getActiveElement())) {\n            vTextFieldRef.value?.focus()\n          }\n        })\n      }\n    })\n\n    watch(menu, val => {\n      if (!val) setPendingFocus(null)\n\n      if (!props.hideSelected && val && model.value.length && isPristine.value) {\n        const index = getSelectedIndex()\n        IN_BROWSER && !props.noAutoScroll && window.requestAnimationFrame(() => {\n          index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index, 'center')\n        })\n      }\n      if (val) _searchLock.value = null\n    })\n\n    watch(items, (newVal, oldVal) => {\n      if (menu.value) return\n\n      if (isFocused.value && !oldVal.length && newVal.length) {\n        menu.value = true\n      }\n    })\n\n    useRender(() => {\n      const hasList = !!(\n        (!props.hideNoData || displayItems.value.length) ||\n        slots['prepend-item'] ||\n        slots['append-item'] ||\n        slots['no-data']\n      )\n      const isDirty = model.value.length > 0\n      const textFieldProps = VTextField.filterProps(props)\n\n      const menuSlotProps = {\n        search,\n        filteredItems: filteredItems.value,\n      }\n\n      return (\n        <VTextField\n          ref={ vTextFieldRef }\n          { ...textFieldProps }\n          form={ props.autocomplete === 'suppress' ? '' : undefined }\n          name={ props.autocomplete === 'suppress' ? props.name : undefined }\n          v-model={ search.value }\n          onUpdate:modelValue={ onUpdateModelValue }\n          v-model:focused={ isFocused.value }\n          validationValue={ model.externalValue }\n          counterValue={ counterValue.value }\n          dirty={ isDirty }\n          onChange={ onChange }\n          class={[\n            'v-autocomplete',\n            `v-autocomplete--${props.multiple ? 'multiple' : 'single'}`,\n            {\n              'v-autocomplete--active-menu': menu.value,\n              'v-autocomplete--chips': !!props.chips,\n              'v-autocomplete--selection-slot': !!hasSelectionSlot.value,\n              'v-autocomplete--selecting-index': selectionIndex.value > -1,\n            },\n            props.class,\n          ]}\n          style={ props.style }\n          readonly={ form.isReadonly.value }\n          placeholder={ isDirty ? undefined : props.placeholder }\n          onClick:clear={ onClear }\n          onMousedown:control={ onMousedownControl }\n          onKeydown={ onKeydown }\n          onBlur={ onBlur }\n          aria-expanded={ ariaExpanded.value }\n          aria-controls={ ariaControls.value }\n        >\n          {{\n            ...slots,\n            default: ({ id }) => (\n              <>\n                { selectedValues.value.map((value, i) => (\n                  <input\n                    key={ i }\n                    type=\"hidden\"\n                    name={ props.name }\n                    value={ value }\n                    form={ props.form }\n                  />\n                ))}\n\n                <VMenu\n                  id={ menuId.value }\n                  ref={ vMenuRef }\n                  v-model={ menu.value }\n                  activator=\"parent\"\n                  captureFocus={ false }\n                  openOnArrow={ false }\n                  disabled={ menuDisabled.value }\n                  _disableKeys\n                  eager={ props.eager }\n                  maxHeight={ 310 }\n                  openOnClick={ false }\n                  closeOnContentClick={ false }\n                  onAfterEnter={ onAfterEnter }\n                  onAfterLeave={ onAfterLeave }\n                  { ...props.menuProps }\n                  contentClass={['v-autocomplete__content', elevationClasses.value, props.menuProps?.contentClass]}\n                >\n                  <VSheet\n                    onFocusin={ onFocusin }\n                    onKeydown={ onMenuKeydown }\n                    onMousedown={ onMousedownContent }\n                  >\n                    { slots['menu-header'] && (\n                      <header ref={ headerRef }>\n                        { slots['menu-header'](menuSlotProps) }\n                      </header>\n                    )}\n\n                    { hasList && (\n                      <VList\n                        key=\"autocomplete-list\"\n                        ref={ listRef }\n                        class=\"v-list--navigable\"\n                        filterable\n                        selected={ selectedValues.value }\n                        selectStrategy={ props.multiple ? 'independent' : 'single-independent' }\n                        onMousedown={ (e: MouseEvent) => e.preventDefault() }\n                        onFocusout={ onFocusout }\n                        tabindex=\"-1\"\n                        selectable={ !!displayItems.value.length }\n                        aria-live=\"polite\"\n                        aria-labelledby={ `${id.value}-label` }\n                        aria-multiselectable={ props.multiple }\n                        color={ props.itemColor ?? props.color }\n                        { ...listEvents }\n                        { ...props.listProps }\n                      >\n                      { slots['prepend-item']?.() }\n\n                      { !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? (\n                        <VListItem key=\"no-data\" title={ t(props.noDataText) } />\n                      ))}\n\n                      <VVirtualScroll ref={ vVirtualScrollRef } renderless items={ displayItems.value } itemKey=\"value\">\n                        { ({ item, index, itemRef }) => {\n                          const camelizedProps = camelizeProps(item.props)\n                          const itemProps = mergeProps(item.props, {\n                            ref: itemRef,\n                            key: item.value,\n                            active: (highlightFirst.value && item === firstSelectableItem.value) ? true : undefined,\n                            onClick: () => select(item, null),\n                            'aria-posinset': index + 1,\n                            'aria-setsize': displayItems.value.length,\n                          })\n\n                          if (item.type === 'divider') {\n                            return slots.divider?.({ props: item.raw, index }) ?? (\n                              <VDivider { ...item.props } ref={ itemRef } key={ `divider-${index}` } />\n                            )\n                          }\n\n                          if (item.type === 'subheader') {\n                            return slots.subheader?.({ props: item.raw, index }) ?? (\n                              <VListSubheader { ...item.props } ref={ itemRef } key={ `subheader-${index}` } />\n                            )\n                          }\n\n                          return slots.item?.({\n                            item: item.raw,\n                            internalItem: item,\n                            index,\n                            props: itemProps,\n                          }) ?? (\n                            <VListItem { ...itemProps } role=\"option\">\n                            {{\n                              prepend: ({ isSelected }) => (\n                                <>\n                                  { props.multiple && !props.hideSelected ? (\n                                    <VCheckboxBtn\n                                      key={ item.value }\n                                      modelValue={ isSelected }\n                                      ripple={ false }\n                                      tabindex=\"-1\"\n                                      aria-hidden\n                                      onClick={ (event: MouseEvent) => event.preventDefault() }\n                                    />\n                                  ) : undefined }\n\n                                  { camelizedProps.prependAvatar && (\n                                    <VAvatar image={ camelizedProps.prependAvatar } />\n                                  )}\n\n                                  { camelizedProps.prependIcon && (\n                                    <VIcon icon={ camelizedProps.prependIcon } />\n                                  )}\n                                </>\n                              ),\n                              title: () => {\n                                return isPristine.value\n                                  ? item.title\n                                  : (\n                                    <VHighlight\n                                      text={ item.title }\n                                      matches={ getMatches(item)?.title }\n                                      markClass=\"v-autocomplete__mask\"\n                                      matchAll\n                                      ignoreCase\n                                    />\n                                  )\n                              },\n                            }}\n                          </VListItem>\n                          )\n                        }}\n                      </VVirtualScroll>\n\n                      { slots['append-item']?.() }\n                    </VList>\n                    )}\n\n                    { slots['menu-footer'] && (\n                      <footer ref={ footerRef }>\n                        { slots['menu-footer'](menuSlotProps) }\n                      </footer>\n                    )}\n                  </VSheet>\n                </VMenu>\n\n                { model.value.map((item, index) => {\n                  function onChipClose (e: Event) {\n                    e.stopPropagation()\n                    e.preventDefault()\n\n                    select(item, false)\n                  }\n\n                  const slotProps = mergeProps(VChip.filterProps(item.props), {\n                    'onClick:close': onChipClose,\n                    onKeydown (e: KeyboardEvent) {\n                      if (e.key !== 'Enter' && e.key !== ' ') return\n\n                      e.preventDefault()\n                      e.stopPropagation()\n\n                      onChipClose(e)\n                    },\n                    onMousedown (e: MouseEvent) {\n                      e.preventDefault()\n                      e.stopPropagation()\n                    },\n                    modelValue: true,\n                    'onUpdate:modelValue': undefined,\n                  })\n\n                  const hasSlot = hasChips.value ? !!slots.chip : !!slots.selection\n                  const slotContent = hasSlot\n                    ? ensureValidVNode(\n                      hasChips.value\n                        ? slots.chip!({ item: item.raw, internalItem: item, index, props: slotProps })\n                        : slots.selection!({ item: item.raw, internalItem: item, index })\n                    )\n                    : undefined\n\n                  if (hasSlot && !slotContent) return undefined\n\n                  return (\n                    <div\n                      key={ item.value }\n                      class={[\n                        'v-autocomplete__selection',\n                        index === selectionIndex.value && [\n                          'v-autocomplete__selection--selected',\n                          textColorClasses.value,\n                        ],\n                      ]}\n                      style={ index === selectionIndex.value ? textColorStyles.value : {} }\n                    >\n                      { hasChips.value ? (\n                        !slots.chip ? (\n                          <VChip\n                            key=\"chip\"\n                            closable={ closableChips.value }\n                            size={ chipDefaults.value?.size ?? 'small' }\n                            text={ item.title }\n                            disabled={ item.props.disabled }\n                            { ...slotProps }\n                          />\n                        ) : (\n                          <VDefaultsProvider\n                            key=\"chip-defaults\"\n                            defaults={{\n                              VChip: {\n                                closable: closableChips.value,\n                                size: chipDefaults.value?.size ?? 'small',\n                                text: item.title,\n                              },\n                            }}\n                          >\n                            { slotContent }\n                          </VDefaultsProvider>\n                        )\n                      ) : (\n                        slotContent ?? (\n                          <span class=\"v-autocomplete__selection-text\">\n                            { item.title }\n                            { props.multiple && (index < model.value.length - 1) && (\n                              <span class=\"v-autocomplete__selection-comma\">,</span>\n                            )}\n                          </span>\n                        )\n                      )}\n                    </div>\n                  )\n                })}\n              </>\n            ),\n            'append-inner': (...args) => (\n              <>\n                { slots['append-inner']?.(...args) }\n                { props.menuIcon ? (\n                  <VIcon\n                    class=\"v-autocomplete__menu-icon\"\n                    color={ vTextFieldRef.value?.fieldIconColor }\n                    icon={ props.menuIcon }\n                    onMousedown={ onMousedownMenuIcon }\n                    onClick={ noop }\n                    aria-hidden\n                    tabindex=\"-1\"\n                  />\n                ) : undefined }\n                { props.appendInnerIcon && (\n                  <InputIcon\n                    key=\"append-icon\"\n                    name=\"appendInner\"\n                    color={ args[0].iconColor.value }\n                  />\n                )}\n              </>\n            ),\n          }}\n        </VTextField>\n      )\n    })\n\n    return forwardRefs({\n      isFocused,\n      isPristine,\n      menu,\n      search,\n      filteredItems,\n      select,\n    }, vTextFieldRef)\n  },\n})\n\nexport type VAutocomplete = InstanceType<typeof VAutocomplete>\n","// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { provideDefaults } from '@/composables/defaults'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVBannerActionsProps = propsFactory({\n  color: String,\n  density: String,\n\n  ...makeComponentProps(),\n}, 'VBannerActions')\n\nexport const VBannerActions = genericComponent()({\n  name: 'VBannerActions',\n\n  props: makeVBannerActionsProps(),\n\n  setup (props, { slots }) {\n    provideDefaults({\n      VBtn: {\n        color: props.color,\n        density: props.density,\n        slim: true,\n        variant: 'text',\n      },\n    })\n\n    useRender(() => (\n      <div\n        class={[\n          'v-banner-actions',\n          props.class,\n        ]}\n        style={ props.style }\n      >\n        { slots.default?.() }\n      </div>\n    ))\n\n    return {}\n  },\n})\n\nexport type VBannerActions = InstanceType<typeof VBannerActions>\n","// Utilities\nimport { createSimpleFunctional } from '@/util'\n\nexport const VBannerText = createSimpleFunctional('v-banner-text')\n\nexport type VBannerText = InstanceType<typeof VBannerText>\n","// Styles\nimport './VBanner.sass'\n\n// Components\nimport { VBannerActions } from './VBannerActions'\nimport { VBannerText } from './VBannerText'\nimport { VAvatar } from '@/components/VAvatar'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeDisplayProps, useDisplay } from '@/composables/display'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { IconValue } from '@/composables/icons'\nimport { makeLocationProps, useLocation } from '@/composables/location'\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 { toRef } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport type VBannerSlots = {\n  default: never\n  prepend: never\n  text: never\n  actions: never\n}\n\nexport const makeVBannerProps = propsFactory({\n  avatar: String,\n  bgColor: String,\n  color: String,\n  icon: IconValue,\n  lines: String as PropType<'one' | 'two' | 'three'>,\n  stacked: Boolean,\n  sticky: Boolean,\n  text: String,\n\n  ...makeBorderProps(),\n  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...makeDimensionProps(),\n  ...makeDisplayProps({ mobile: null }),\n  ...makeElevationProps(),\n  ...makeLocationProps(),\n  ...makePositionProps(),\n  ...makeRoundedProps(),\n  ...makeTagProps(),\n  ...makeThemeProps(),\n}, 'VBanner')\n\nexport const VBanner = genericComponent<VBannerSlots>()({\n  name: 'VBanner',\n\n  props: makeVBannerProps(),\n\n  setup (props, { slots }) {\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.bgColor)\n    const { borderClasses } = useBorder(props)\n    const { densityClasses } = useDensity(props)\n    const { displayClasses, mobile } = useDisplay(props)\n    const { dimensionStyles } = useDimension(props)\n    const { elevationClasses } = useElevation(props)\n    const { locationStyles } = useLocation(props)\n    const { positionClasses } = usePosition(props)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n\n    const { themeClasses } = provideTheme(props)\n\n    const color = toRef(() => props.color)\n    const density = toRef(() => props.density)\n\n    provideDefaults({ VBannerActions: { color, density } })\n\n    useRender(() => {\n      const hasText = !!(props.text || slots.text)\n      const hasPrependMedia = !!(props.avatar || props.icon)\n      const hasPrepend = !!(hasPrependMedia || slots.prepend)\n\n      return (\n        <props.tag\n          class={[\n            'v-banner',\n            {\n              'v-banner--stacked': props.stacked || mobile.value,\n              'v-banner--sticky': props.sticky,\n              [`v-banner--${props.lines}-line`]: !!props.lines,\n            },\n            themeClasses.value,\n            backgroundColorClasses.value,\n            borderClasses.value,\n            densityClasses.value,\n            displayClasses.value,\n            elevationClasses.value,\n            positionClasses.value,\n            roundedClasses.value,\n            props.class,\n          ]}\n          style={[\n            backgroundColorStyles.value,\n            dimensionStyles.value,\n            locationStyles.value,\n            roundedStyles.value,\n            props.style,\n          ]}\n          role=\"banner\"\n        >\n          { hasPrepend && (\n            <div key=\"prepend\" class=\"v-banner__prepend\">\n              { !slots.prepend ? (\n                <VAvatar\n                  key=\"prepend-avatar\"\n                  color={ color.value }\n                  density={ density.value }\n                  icon={ props.icon }\n                  image={ props.avatar }\n                />\n              ) : (\n                <VDefaultsProvider\n                  key=\"prepend-defaults\"\n                  disabled={ !hasPrependMedia }\n                  defaults={{\n                    VAvatar: {\n                      color: color.value,\n                      density: density.value,\n                      icon: props.icon,\n                      image: props.avatar,\n                    },\n                  }}\n                  v-slots:default={ slots.prepend }\n                />\n              )}\n            </div>\n          )}\n\n          <div class=\"v-banner__content\">\n            { hasText && (\n              <VBannerText key=\"text\">\n                { slots.text?.() ?? props.text }\n              </VBannerText>\n            )}\n\n            { slots.default?.() }\n          </div>\n\n          { slots.actions && (\n            <VBannerActions key=\"actions\" 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// Components\nimport { VBtnToggleSymbol } from '@/components/VBtnToggle/VBtnToggle'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeGroupProps, useGroup } from '@/composables/group'\nimport { makeLayoutItemProps, useLayoutItem } from '@/composables/layout'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { useSsrBoot } from '@/composables/ssrBoot'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { convertToUnit, genericComponent, isPercentage, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { GenericProps } from '@/util'\n\nexport const makeVBottomNavigationProps = propsFactory({\n  baseColor: String,\n  bgColor: String,\n  color: String,\n  grow: Boolean,\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  active: {\n    type: Boolean,\n    default: true,\n  },\n\n  ...makeBorderProps(),\n  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...makeElevationProps(),\n  ...makeRoundedProps(),\n  ...makeLayoutItemProps({ name: 'bottom-navigation' }),\n  ...makeTagProps({ tag: 'header' }),\n  ...makeGroupProps({ selectedClass: 'v-btn--selected' }),\n  ...makeThemeProps(),\n}, 'VBottomNavigation')\n\nexport const VBottomNavigation = genericComponent<new <T>(\n  props: {\n    modelValue?: T\n    'onUpdate:modelValue'?: (value: T) => void\n  },\n  slots: { default: never },\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VBottomNavigation',\n\n  props: makeVBottomNavigationProps(),\n\n  emits: {\n    'update:active': (value: any) => true,\n    'update:modelValue': (value: any) => true,\n  },\n\n  setup (props, { slots }) {\n    const { themeClasses } = provideTheme(props)\n    const { borderClasses } = useBorder(props)\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.bgColor)\n    const { densityClasses } = useDensity(props)\n    const { elevationClasses } = useElevation(props)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n    const { ssrBootStyles } = useSsrBoot()\n    const height = computed(() => {\n      if (isPercentage(props.height)) {\n        return props.height\n      }\n\n      return (\n        Number(props.height) -\n        (props.density === 'comfortable' ? 8 : 0) -\n        (props.density === 'compact' ? 16 : 0)\n      )\n    })\n    const isActive = useProxiedModel(props, 'active', props.active)\n    const { layoutItemStyles } = useLayoutItem({\n      id: props.name,\n      order: computed(() => parseInt(props.order, 10)),\n      position: toRef(() => 'bottom'),\n      layoutSize: toRef(() => isActive.value ? height.value : 0),\n      elementSize: height,\n      active: isActive,\n      absolute: toRef(() => props.absolute),\n    })\n\n    useGroup(props, VBtnToggleSymbol)\n\n    provideDefaults({\n      VBtn: {\n        baseColor: toRef(() => props.baseColor),\n        color: toRef(() => props.color),\n        density: toRef(() => props.density),\n        stacked: toRef(() => props.mode !== 'horizontal'),\n        variant: 'text',\n      },\n    }, { scoped: true })\n\n    useRender(() => {\n      return (\n        <props.tag\n          class={[\n            'v-bottom-navigation',\n            {\n              'v-bottom-navigation--active': isActive.value,\n              'v-bottom-navigation--grow': props.grow,\n              'v-bottom-navigation--shift': props.mode === 'shift',\n            },\n            themeClasses.value,\n            backgroundColorClasses.value,\n            borderClasses.value,\n            densityClasses.value,\n            elevationClasses.value,\n            roundedClasses.value,\n            props.class,\n          ]}\n          style={[\n            backgroundColorStyles.value,\n            layoutItemStyles.value,\n            {\n              height: convertToUnit(height.value),\n            },\n            ssrBootStyles.value,\n            roundedStyles.value,\n            props.style,\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    return {}\n  },\n})\n\nexport type VBottomNavigation = InstanceType<typeof VBottomNavigation>\n","// Styles\nimport './VDialog.sass'\n\n// Components\nimport { VDialogTransition } from '@/components/transitions'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VOverlay } from '@/components/VOverlay'\nimport { makeVOverlayProps } from '@/components/VOverlay/VOverlay'\n\n// Composables\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useScopeId } from '@/composables/scopeId'\n\n// Utilities\nimport { mergeProps, nextTick, ref, watch } from 'vue'\nimport { genericComponent, getActiveElement, noop, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { OverlaySlots } from '@/components/VOverlay/VOverlay'\nimport type { LocationStrategyFunction } from '@/types'\n\nexport const makeVDialogProps = propsFactory({\n  fullscreen: Boolean,\n  scrollable: Boolean,\n\n  ...omit(makeVOverlayProps({\n    captureFocus: true,\n    location: 'center center' as const,\n    origin: 'center center' as const,\n    scrollStrategy: 'block' as const,\n    transition: { component: VDialogTransition },\n    zIndex: 2400,\n    retainFocus: true,\n  }), ['disableInitialFocus']),\n}, 'VDialog')\n\nexport const VDialog = genericComponent<OverlaySlots>()({\n  name: 'VDialog',\n\n  props: makeVDialogProps(),\n\n  emits: {\n    'update:modelValue': (value: boolean) => true,\n    afterEnter: () => true,\n    afterLeave: () => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const isActive = useProxiedModel(props, 'modelValue')\n    const { scopeId } = useScopeId()\n\n    const overlay = ref<VOverlay>()\n\n    function onAfterEnter () {\n      emit('afterEnter')\n      if (\n        (props.scrim || props.retainFocus) &&\n        overlay.value?.contentEl &&\n        !overlay.value.contentEl.contains(getActiveElement())\n      ) {\n        overlay.value.contentEl.focus({ preventScroll: true })\n      }\n    }\n\n    function onAfterLeave () {\n      emit('afterLeave')\n    }\n\n    watch(isActive, async val => {\n      if (!val) {\n        await nextTick()\n        overlay.value?.activatorEl?.focus({ preventScroll: true })\n      }\n    })\n\n    useRender(() => {\n      const overlayProps = VOverlay.filterProps(props)\n\n      const activatorProps = mergeProps({\n        'aria-haspopup': 'dialog',\n      }, props.activatorProps)\n\n      const contentProps = mergeProps({\n        tabindex: -1,\n      }, props.contentProps)\n\n      const locationStrategy = props.fullscreen\n        ? noop as LocationStrategyFunction\n        : props.locationStrategy\n\n      return (\n        <VOverlay\n          ref={ overlay }\n          class={[\n            'v-dialog',\n            {\n              'v-dialog--fullscreen': props.fullscreen,\n              'v-dialog--scrollable': props.scrollable,\n            },\n            props.class,\n          ]}\n          style={ props.style }\n          { ...overlayProps }\n          v-model={ isActive.value }\n          aria-modal=\"true\"\n          activatorProps={ activatorProps }\n          contentProps={ contentProps }\n          height={ !props.fullscreen ? props.height : undefined }\n          width={ !props.fullscreen ? props.width : undefined }\n          maxHeight={ !props.fullscreen ? props.maxHeight : undefined }\n          maxWidth={ !props.fullscreen ? props.maxWidth : undefined }\n          locationStrategy={ locationStrategy }\n          role=\"dialog\"\n          onAfterEnter={ onAfterEnter }\n          onAfterLeave={ onAfterLeave }\n          { ...scopeId }\n        >\n          {{\n            activator: slots.activator,\n            default: (...args) => (\n              <VDefaultsProvider root=\"VDialog\">\n                { slots.default?.(...args) }\n              </VDefaultsProvider>\n            ),\n          }}\n        </VOverlay>\n      )\n    })\n\n    return forwardRefs({}, overlay)\n  },\n})\n\nexport type VDialog = InstanceType<typeof VDialog>\n","// Styles\nimport './VBottomSheet.sass'\n\n// Components\nimport { makeVDialogProps, VDialog } from '@/components/VDialog/VDialog'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { OverlaySlots } from '@/components/VOverlay/VOverlay'\n\nexport const makeVBottomSheetProps = propsFactory({\n  inset: Boolean,\n\n  ...makeVDialogProps({\n    transition: 'bottom-sheet-transition',\n    location: 'bottom center' as const,\n    origin: 'bottom center' as const,\n    viewportMargin: 0,\n  }),\n}, 'VBottomSheet')\n\nexport const VBottomSheet = genericComponent<OverlaySlots>()({\n  name: 'VBottomSheet',\n\n  props: makeVBottomSheetProps(),\n\n  emits: {\n    'update:modelValue': (value: boolean) => true,\n  },\n\n  setup (props, { slots }) {\n    const isActive = useProxiedModel(props, 'modelValue')\n\n    useRender(() => {\n      const dialogProps = VDialog.filterProps(props)\n\n      return (\n        <VDialog\n          { ...dialogProps }\n          contentClass={[\n            'v-bottom-sheet__content',\n            props.contentClass,\n          ]}\n          v-model={ isActive.value }\n          class={[\n            'v-bottom-sheet',\n            {\n              'v-bottom-sheet--inset': props.inset,\n            },\n            props.class,\n          ]}\n          style={ props.style }\n          v-slots={ slots }\n        />\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VBottomSheet = InstanceType<typeof VBottomSheet>\n","// Composables\nimport { makeComponentProps } from '@/composables/component'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVBreadcrumbsDividerProps = propsFactory({\n  divider: [Number, String],\n\n  ...makeComponentProps(),\n}, 'VBreadcrumbsDivider')\n\nexport const VBreadcrumbsDivider = genericComponent()({\n  name: 'VBreadcrumbsDivider',\n\n  props: makeVBreadcrumbsDividerProps(),\n\n  setup (props, { slots }) {\n    useRender(() => (\n      <li\n        aria-hidden=\"true\"\n        class={[\n          'v-breadcrumbs-divider',\n          props.class,\n        ]}\n        style={ props.style }\n      >\n        { slots?.default?.() ?? props.divider }\n      </li>\n    ))\n\n    return {}\n  },\n})\n\nexport type VBreadcrumbsDivider = InstanceType<typeof VBreadcrumbsDivider>\n","// Composables\nimport { useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeRouterProps, useLink } from '@/composables/router'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent, pick, propsFactory, useRender } from '@/util'\n\nexport const makeVBreadcrumbsItemProps = propsFactory({\n  active: Boolean,\n  activeClass: String,\n  activeColor: String,\n  color: String,\n  disabled: Boolean,\n  title: String,\n\n  ...makeComponentProps(),\n  ...pick(makeDimensionProps(), ['width', 'maxWidth']),\n  ...makeRouterProps(),\n  ...makeTagProps({ tag: 'li' }),\n}, 'VBreadcrumbsItem')\n\nexport const VBreadcrumbsItem = genericComponent()({\n  name: 'VBreadcrumbsItem',\n\n  props: makeVBreadcrumbsItemProps(),\n\n  setup (props, { slots, attrs }) {\n    const link = useLink(props, attrs)\n    const isActive = computed(() => props.active || link.isActive?.value)\n    const { dimensionStyles } = useDimension(props)\n\n    const { textColorClasses, textColorStyles } = useTextColor(\n      () => isActive.value ? props.activeColor : props.color\n    )\n\n    useRender(() => {\n      return (\n        <props.tag\n          class={[\n            'v-breadcrumbs-item',\n            {\n              'v-breadcrumbs-item--active': isActive.value,\n              'v-breadcrumbs-item--disabled': props.disabled,\n              [`${props.activeClass}`]: isActive.value && props.activeClass,\n            },\n            textColorClasses.value,\n            props.class,\n          ]}\n          style={[\n            textColorStyles.value,\n            dimensionStyles.value,\n            props.style,\n          ]}\n          aria-current={ isActive.value ? 'page' : undefined }\n        >\n          { !link.isLink.value ? slots.default?.() ?? props.title : (\n            <a\n              class=\"v-breadcrumbs-item--link\"\n              onClick={ link.navigate.value }\n              { ...link.linkProps }\n            >\n              { slots.default?.() ?? props.title }\n            </a>\n          )}\n        </props.tag>\n      )\n    })\n    return {}\n  },\n})\n\nexport type VBreadcrumbsItem = InstanceType<typeof VBreadcrumbsItem>\n","// Styles\nimport './VBreadcrumbs.sass'\n\n// Components\nimport { VBreadcrumbsDivider } from './VBreadcrumbsDivider'\nimport { VBreadcrumbsItem } from './VBreadcrumbsItem'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { IconValue } from '@/composables/icons'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { genericComponent, isString, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { LinkProps } from '@/composables/router'\nimport type { GenericProps } from '@/util'\n\nexport type InternalBreadcrumbItem = Partial<LinkProps> & {\n  title: string\n  disabled?: boolean\n}\n\nexport type BreadcrumbItem = string | InternalBreadcrumbItem\n\nexport const makeVBreadcrumbsProps = propsFactory({\n  activeClass: String,\n  activeColor: String,\n  bgColor: String,\n  color: String,\n  disabled: Boolean,\n  divider: {\n    type: String,\n    default: '/',\n  },\n  icon: IconValue,\n  items: {\n    type: Array as PropType<readonly BreadcrumbItem[]>,\n    default: () => ([]),\n  },\n\n  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...makeRoundedProps(),\n  ...makeTagProps({ tag: 'ul' }),\n}, 'VBreadcrumbs')\n\nexport const VBreadcrumbs = genericComponent<new <T extends BreadcrumbItem>(\n  props: {\n    items?: T[]\n  },\n  slots: {\n    prepend: never\n    title: { item: InternalBreadcrumbItem, index: number }\n    divider: { item: T, index: number }\n    item: { item: InternalBreadcrumbItem, index: number }\n    default: never\n  }\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VBreadcrumbs',\n\n  props: makeVBreadcrumbsProps(),\n\n  setup (props, { slots }) {\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.bgColor)\n    const { densityClasses } = useDensity(props)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n\n    provideDefaults({\n      VBreadcrumbsDivider: {\n        divider: toRef(() => props.divider),\n      },\n      VBreadcrumbsItem: {\n        activeClass: toRef(() => props.activeClass),\n        activeColor: toRef(() => props.activeColor),\n        color: toRef(() => props.color),\n        disabled: toRef(() => props.disabled),\n      },\n    })\n\n    const items = computed(() => props.items.map(item => {\n      return isString(item) ? { item: { title: item }, raw: item } : { item, raw: item }\n    }))\n\n    useRender(() => {\n      const hasPrepend = !!(slots.prepend || props.icon)\n\n      return (\n        <props.tag\n          class={[\n            'v-breadcrumbs',\n            backgroundColorClasses.value,\n            densityClasses.value,\n            roundedClasses.value,\n            props.class,\n          ]}\n          style={[\n            backgroundColorStyles.value,\n            roundedStyles.value,\n            props.style,\n          ]}\n        >\n          { hasPrepend && (\n            <li key=\"prepend\" class=\"v-breadcrumbs__prepend\">\n              { !slots.prepend ? (\n                <VIcon\n                  key=\"prepend-icon\"\n                  start\n                  icon={ props.icon }\n                />\n              ) : (\n                <VDefaultsProvider\n                  key=\"prepend-defaults\"\n                  disabled={ !props.icon }\n                  defaults={{\n                    VIcon: {\n                      icon: props.icon,\n                      start: true,\n                    },\n                  }}\n                  v-slots:default={ slots.prepend }\n                />\n              )}\n            </li>\n          )}\n\n          { items.value.map(({ item, raw }, index, array) => (\n            <>\n              { slots.item?.({ item, index }) ?? (\n                <VBreadcrumbsItem\n                  key={ index }\n                  disabled={ index >= array.length - 1 }\n                  { ...(isString(item) ? { title: item } : item) }\n                  v-slots={{\n                    default: slots.title ? () => slots.title?.({ item, index }) : undefined,\n                  }}\n                />\n              )}\n\n              { index < array.length - 1 && (\n                <VBreadcrumbsDivider\n                  v-slots={{\n                    default: slots.divider ? () => slots.divider?.({ item: raw, index }) : undefined,\n                  }}\n                />\n              )}\n            </>\n          ))}\n\n          { slots.default?.() }\n        </props.tag>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VBreadcrumbs = InstanceType<typeof VBreadcrumbs>\n","// Styles\nimport './VIconBtn.scss'\n\n// Components\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\nimport { VProgressCircular } from '@/components/VProgressCircular'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeIconSizeProps, useIconSizes } from '@/composables/iconSizes'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\n\n// Utilities\nimport { toDisplayString } from 'vue'\nimport { convertToUnit, genericComponent, isBoolean, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { IconValue } from '@/composables/icons'\nimport type { Variant } from '@/composables/variant'\n\nexport type VIconBtnSlots = {\n  default: never\n  loader: never\n}\n\nexport type VIconBtnSizes = 'x-small' | 'small' | 'default' | 'large' | 'x-large'\n\nexport const makeVIconBtnProps = propsFactory({\n  active: {\n    type: Boolean,\n    default: undefined,\n  },\n  activeColor: String,\n  activeIcon: [String, Function, Object] as PropType<IconValue>,\n  activeVariant: String as PropType<Variant>,\n  baseVariant: {\n    type: String as PropType<Variant>,\n    default: 'tonal',\n  },\n  disabled: Boolean,\n  height: [Number, String],\n  width: [Number, String],\n  hideOverlay: Boolean,\n  icon: [String, Function, Object] as PropType<IconValue>,\n  iconColor: String,\n  loading: Boolean,\n  opacity: [Number, String],\n  readonly: Boolean,\n  rotate: [Number, String],\n  size: {\n    type: [Number, String] as PropType<VIconBtnSizes | number | string>,\n    default: 'default',\n  },\n  sizes: {\n    type: Array as PropType<[VIconBtnSizes, number][]>,\n    default: () => ([\n      ['x-small', 16],\n      ['small', 24],\n      ['default', 40],\n      ['large', 48],\n      ['x-large', 56],\n    ]),\n  },\n  text: {\n    type: [String, Number, Boolean],\n    default: undefined,\n  },\n\n  ...makeBorderProps(),\n  ...makeComponentProps(),\n  ...makeElevationProps(),\n  ...makeIconSizeProps(),\n  ...makeRoundedProps(),\n  ...makeTagProps({ tag: 'button' }),\n  ...makeThemeProps(),\n  ...makeVariantProps({ variant: 'flat' } as const),\n}, 'VIconBtn')\n\nexport const VIconBtn = genericComponent<VIconBtnSlots>()({\n  name: 'VIconBtn',\n\n  props: makeVIconBtnProps(),\n\n  emits: {\n    'update:active': (value: boolean) => true,\n  },\n\n  setup (props, { attrs, slots }) {\n    const isActive = useProxiedModel(props, 'active')\n\n    const { themeClasses } = provideTheme(props)\n    const { borderClasses } = useBorder(props)\n    const { elevationClasses } = useElevation(props)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n\n    const { colorClasses, colorStyles, variantClasses } = useVariant(() => ({\n      color: (() => {\n        if (props.disabled) return undefined\n        if (!isActive.value) return props.color\n        // Use an inline fallback as opposed to setting a default color\n        // because non-toggle buttons are default flat whereas toggle\n        // buttons are default tonal and active flat. The exact use\n        // case for this is a toggle button with no active color.\n        return props.activeColor ?? props.color ?? 'surface-variant'\n      })(),\n      variant: (() => {\n        if (isActive.value === undefined) return props.variant\n        if (isActive.value) return props.activeVariant ?? props.variant\n        return props.baseVariant ?? props.variant\n      })(),\n    }))\n\n    const btnSizeMap = new Map(props.sizes)\n\n    function onClick () {\n      if (\n        props.disabled ||\n        props.readonly ||\n        isActive.value === undefined ||\n        (props.tag === 'a' && attrs.href)\n      ) return\n\n      isActive.value = !isActive.value\n    }\n\n    useRender(() => {\n      const icon = isActive.value ? props.activeIcon ?? props.icon : props.icon\n\n      const _btnSize = props.size as VIconBtnSizes\n      const hasNamedSize = btnSizeMap.has(_btnSize)\n      const btnSize = hasNamedSize ? btnSizeMap.get(_btnSize) : _btnSize\n      const btnHeight = props.height ?? btnSize\n      const btnWidth = props.width ?? btnSize\n      const { iconSize } = useIconSizes(props, () => new Map(props.iconSizes).get(_btnSize))\n\n      const iconProps = {\n        icon,\n        size: iconSize.value,\n        color: props.iconColor,\n        opacity: props.opacity,\n      }\n\n      return (\n        <props.tag\n          type={ props.tag === 'button' ? 'button' : undefined }\n          class={[\n            {\n              'v-icon-btn': true,\n              'v-icon-btn--active': isActive.value,\n              'v-icon-btn--disabled': props.disabled,\n              'v-icon-btn--loading': props.loading,\n              'v-icon-btn--readonly': props.readonly,\n              [`v-icon-btn--${props.size}`]: true,\n            },\n            themeClasses.value,\n            colorClasses.value,\n            borderClasses.value,\n            elevationClasses.value,\n            roundedClasses.value,\n            variantClasses.value,\n            props.class,\n          ]}\n          style={[\n            {\n              '--v-icon-btn-rotate': convertToUnit(props.rotate, 'deg'),\n              '--v-icon-btn-height': convertToUnit(btnHeight),\n              '--v-icon-btn-width': convertToUnit(btnWidth),\n            },\n            colorStyles.value,\n            roundedStyles.value,\n            props.style,\n          ]}\n          tabindex={ props.disabled || props.readonly ? -1 : 0 }\n          onClick={ onClick }\n        >\n          { genOverlays(!props.hideOverlay, 'v-icon-btn') }\n\n          <div class=\"v-icon-btn__content\" data-no-activator=\"\">\n            { (!slots.default && icon) ? (\n              <VIcon\n                key=\"content-icon\"\n                { ...iconProps }\n              />\n            ) : (\n              <VDefaultsProvider\n                key=\"content-defaults\"\n                disabled={ !icon }\n                defaults={{ VIcon: { ...iconProps } }}\n                v-slots={{\n                  default: () => slots.default?.() ?? toDisplayString(props.text),\n                }}\n              />\n            )}\n          </div>\n\n          { !!props.loading && (\n            <span key=\"loader\" class=\"v-icon-btn__loader\">\n              { slots.loader?.() ?? (\n                <VProgressCircular\n                  color={ isBoolean(props.loading) ? undefined : props.loading }\n                  indeterminate=\"disable-shrink\"\n                  width=\"2\"\n                  size={ iconSize.value }\n                />\n              )}\n            </span>\n          )}\n        </props.tag>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VIconBtn = InstanceType<typeof VIconBtn>\n","import { isLeapYear } from './dateTimeUtils'\n\n// Utilities\nimport { isNumber, isObject, isString } from '@/util'\n\n// Types\nimport type { CalendarFormatter, CalendarTimestamp } from '../types'\n\nexport const PARSE_REGEX = /^(\\d{4})-(\\d{1,2})(-(\\d{1,2}))?([^\\d]+(\\d{1,2}))?(:(\\d{1,2}))?(:(\\d{1,2}))?$/\nexport const PARSE_TIME = /(\\d\\d?)(:(\\d\\d?)|)(:(\\d\\d?)|)/\n\nexport const DAYS_IN_MONTH: number[] = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nexport const DAYS_IN_MONTH_LEAP: number[] = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nexport const DAYS_IN_MONTH_MIN = 28\nexport const DAYS_IN_MONTH_MAX = 31\nexport const MONTH_MAX = 12\nexport const MONTH_MIN = 1\nexport const DAY_MIN = 1\nexport const DAYS_IN_WEEK = 7\nexport const MINUTES_IN_HOUR = 60\nexport const MINUTE_MAX = 59\nexport const MINUTES_IN_DAY = 24 * 60\nexport const HOURS_IN_DAY = 24\nexport const HOUR_MAX = 23\nexport const FIRST_HOUR = 0\nexport const OFFSET_YEAR = 10000\nexport const OFFSET_MONTH = 100\nexport const OFFSET_HOUR = 100\nexport const OFFSET_TIME = 10000\n\ntype CalendarTimestampFormatOptions = (timestamp: CalendarTimestamp, short: boolean) => Intl.DateTimeFormatOptions\ntype CalendarTimestampOperation = (timestamp: CalendarTimestamp) => CalendarTimestamp\nexport type VTime = number | string | {\n  hour: number\n  minute: number\n}\n\nexport type VTimestampInput = number | string | Date;\n\nexport function getStartOfWeek (timestamp: CalendarTimestamp, weekdays: number[], today?: CalendarTimestamp): CalendarTimestamp {\n  const start = copyTimestamp(timestamp)\n  findWeekday(start, weekdays[0], prevDay)\n  updateFormatted(start)\n  if (today) {\n    updateRelative(start, today, start.hasTime)\n  }\n\n  return start\n}\n\nexport function getEndOfWeek (timestamp: CalendarTimestamp, weekdays: number[], today?: CalendarTimestamp): CalendarTimestamp {\n  const end = copyTimestamp(timestamp)\n  findWeekday(end, weekdays[weekdays.length - 1])\n  updateFormatted(end)\n  if (today) {\n    updateRelative(end, today, end.hasTime)\n  }\n\n  return end\n}\n\nexport function getStartOfMonth (timestamp: CalendarTimestamp): CalendarTimestamp {\n  const start = copyTimestamp(timestamp)\n  start.day = DAY_MIN\n  updateWeekday(start)\n  updateFormatted(start)\n\n  return start\n}\n\nexport function getEndOfMonth (timestamp: CalendarTimestamp): CalendarTimestamp {\n  const end = copyTimestamp(timestamp)\n  end.day = daysInMonth(end.year, end.month)\n  updateWeekday(end)\n  updateFormatted(end)\n\n  return end\n}\n\nexport function validateNumber (input: any): boolean {\n  return isFinite(parseInt(input))\n}\n\nexport function validateTime (input: any): input is VTime {\n  return (isNumber(input) && isFinite(input)) ||\n    (!!PARSE_TIME.exec(input)) ||\n    (isObject(input) && isFinite(input.hour) && isFinite(input.minute))\n}\n\nexport function parseTime (input: any): number | false {\n  if (isNumber(input)) {\n    // when a number is given, it's minutes since 12:00am\n    return input\n  } else if (isString(input)) {\n    // when a string is given, it's a hh:mm:ss format where seconds are optional\n    const parts = PARSE_TIME.exec(input)\n    if (!parts) {\n      return false\n    }\n\n    return parseInt(parts[1]) * 60 + parseInt(parts[3] || 0)\n  } else if (isObject(input)) {\n    // when an object is given, it must have hour and minute\n    if (!isNumber(input.hour) || !isNumber(input.minute)) {\n      return false\n    }\n\n    return input.hour * 60 + input.minute\n  } else {\n    // unsupported type\n    return false\n  }\n}\n\nexport function validateTimestamp (input: any): input is VTimestampInput {\n  return (isNumber(input) && isFinite(input)) ||\n    (isString(input) && !!PARSE_REGEX.exec(input)) ||\n    (input instanceof Date)\n}\n\nexport function parseTimestamp (input: VTimestampInput | null, required?: false, now?: CalendarTimestamp | null): CalendarTimestamp | null\nexport function parseTimestamp (input: VTimestampInput, required: true, now?: CalendarTimestamp): CalendarTimestamp\nexport function parseTimestamp (input: VTimestampInput | null, required = false, now?: CalendarTimestamp | null): CalendarTimestamp | null {\n  if (isNumber(input) && isFinite(input)) {\n    input = new Date(input)\n  }\n\n  if (input instanceof Date) {\n    const date: CalendarTimestamp = parseDate(input)\n\n    if (now) {\n      updateRelative(date, now, date.hasTime)\n    }\n\n    return date\n  }\n\n  if (!isString(input)) {\n    if (required) {\n      throw new Error(`${input} is not a valid timestamp. It must be a Date, number of milliseconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)\n    }\n    return null\n  }\n\n  // YYYY-MM-DD hh:mm:ss\n  const parts = PARSE_REGEX.exec(input)\n\n  if (!parts) {\n    if (required) {\n      throw new Error(`${input} is not a valid timestamp. It must be a Date, number of milliseconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)\n    }\n\n    return null\n  }\n\n  const timestamp: CalendarTimestamp = {\n    date: input,\n    time: '',\n    year: parseInt(parts[1]),\n    month: parseInt(parts[2]),\n    day: parseInt(parts[4]) || 1,\n    hour: parseInt(parts[6]) || 0,\n    minute: parseInt(parts[8]) || 0,\n    weekday: 0,\n    hasDay: !!parts[4],\n    hasTime: !!(parts[6] && parts[8]),\n    past: false,\n    present: false,\n    future: false,\n  }\n\n  updateWeekday(timestamp)\n  updateFormatted(timestamp)\n\n  if (now) {\n    updateRelative(timestamp, now, timestamp.hasTime)\n  }\n\n  return timestamp\n}\n\nexport function parseDate (date: Date): CalendarTimestamp {\n  return updateFormatted({\n    date: '',\n    time: '',\n    year: date.getFullYear(),\n    month: date.getMonth() + 1,\n    day: date.getDate(),\n    weekday: date.getDay(),\n    hour: date.getHours(),\n    minute: date.getMinutes(),\n    hasDay: true,\n    hasTime: true,\n    past: false,\n    present: true,\n    future: false,\n  })\n}\n\nexport function getDayIdentifier (timestamp: { year: number, month: number, day: number }): number {\n  return timestamp.year * OFFSET_YEAR + timestamp.month * OFFSET_MONTH + timestamp.day\n}\n\nexport function getTimeIdentifier (timestamp: { hour: number, minute: number }): number {\n  return timestamp.hour * OFFSET_HOUR + timestamp.minute\n}\n\nexport function getTimestampIdentifier (timestamp: CalendarTimestamp): number {\n  return getDayIdentifier(timestamp) * OFFSET_TIME + getTimeIdentifier(timestamp)\n}\n\nexport function updateRelative (timestamp: CalendarTimestamp, now: CalendarTimestamp, time = false): CalendarTimestamp {\n  let a = getDayIdentifier(now)\n  let b = getDayIdentifier(timestamp)\n  let present = a === b\n\n  if (timestamp.hasTime && time && present) {\n    a = getTimeIdentifier(now)\n    b = getTimeIdentifier(timestamp)\n    present = a === b\n  }\n\n  timestamp.past = b < a\n  timestamp.present = present\n  timestamp.future = b > a\n\n  return timestamp\n}\n\nexport function isTimedless (input: VTimestampInput): input is (Date | number) {\n  return (input instanceof Date) || (isNumber(input) && isFinite(input))\n}\n\nexport function updateHasTime (timestamp: CalendarTimestamp, hasTime: boolean, now?: CalendarTimestamp): CalendarTimestamp {\n  if (timestamp.hasTime !== hasTime) {\n    timestamp.hasTime = hasTime\n    if (!hasTime) {\n      timestamp.hour = HOUR_MAX\n      timestamp.minute = MINUTE_MAX\n      timestamp.time = getTime(timestamp)\n    }\n    if (now) {\n      updateRelative(timestamp, now, timestamp.hasTime)\n    }\n  }\n\n  return timestamp\n}\n\nexport function updateMinutes (timestamp: CalendarTimestamp, minutes: number, now?: CalendarTimestamp): CalendarTimestamp {\n  timestamp.hasTime = true\n  timestamp.hour = 0\n  timestamp.minute = 0\n  nextMinutes(timestamp, minutes)\n  updateFormatted(timestamp)\n  if (now) {\n    updateRelative(timestamp, now, true)\n  }\n\n  return timestamp\n}\n\nexport function updateWeekday (timestamp: CalendarTimestamp): CalendarTimestamp {\n  timestamp.weekday = getWeekday(timestamp)\n\n  return timestamp\n}\n\nexport function updateFormatted (timestamp: CalendarTimestamp): CalendarTimestamp {\n  timestamp.time = getTime(timestamp)\n  timestamp.date = getDate(timestamp)\n\n  return timestamp\n}\n\nexport function getWeekday (timestamp: CalendarTimestamp): number {\n  if (timestamp.hasDay) {\n    const _ = Math.floor\n    const k = timestamp.day\n    const m = ((timestamp.month + 9) % MONTH_MAX) + 1\n    const C = _(timestamp.year / 100)\n    const Y = (timestamp.year % 100) - (timestamp.month <= 2 ? 1 : 0)\n\n    return (((k + _(2.6 * m - 0.2) - 2 * C + Y + _(Y / 4) + _(C / 4)) % 7) + 7) % 7\n  }\n\n  return timestamp.weekday\n}\n\nexport function daysInMonth (year: number, month: number) {\n  return isLeapYear(year) ? DAYS_IN_MONTH_LEAP[month] : DAYS_IN_MONTH[month]\n}\n\nexport function copyTimestamp (timestamp: null): null\nexport function copyTimestamp (timestamp: CalendarTimestamp): CalendarTimestamp\nexport function copyTimestamp (timestamp: CalendarTimestamp | null): CalendarTimestamp | null {\n  if (timestamp == null) return null\n\n  const { date, time, year, month, day, weekday, hour, minute, hasDay, hasTime, past, present, future } = timestamp\n\n  return { date, time, year, month, day, weekday, hour, minute, hasDay, hasTime, past, present, future }\n}\n\nexport function padNumber (x: number, length: number): string {\n  let padded = String(x)\n  while (padded.length < length) {\n    padded = '0' + padded\n  }\n\n  return padded\n}\n\nexport function getDate (timestamp: CalendarTimestamp): string {\n  let str = `${padNumber(timestamp.year, 4)}-${padNumber(timestamp.month, 2)}`\n\n  if (timestamp.hasDay) str += `-${padNumber(timestamp.day, 2)}`\n\n  return str\n}\n\nexport function getTime (timestamp: CalendarTimestamp): string {\n  if (!timestamp.hasTime) {\n    return ''\n  }\n\n  return `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`\n}\n\nexport function nextMinutes (timestamp: CalendarTimestamp, minutes: number): CalendarTimestamp {\n  timestamp.minute += minutes\n  while (timestamp.minute >= MINUTES_IN_HOUR) {\n    timestamp.minute -= MINUTES_IN_HOUR\n    timestamp.hour++\n    if (timestamp.hour >= HOURS_IN_DAY) {\n      nextDay(timestamp)\n      timestamp.hour = FIRST_HOUR\n    }\n  }\n\n  return timestamp\n}\n\nexport function nextDay (timestamp: CalendarTimestamp): CalendarTimestamp {\n  timestamp.day++\n  timestamp.weekday = (timestamp.weekday + 1) % DAYS_IN_WEEK\n  if (timestamp.day > DAYS_IN_MONTH_MIN && timestamp.day > daysInMonth(timestamp.year, timestamp.month)) {\n    timestamp.day = DAY_MIN\n    timestamp.month++\n    if (timestamp.month > MONTH_MAX) {\n      timestamp.month = MONTH_MIN\n      timestamp.year++\n    }\n  }\n\n  return timestamp\n}\n\nexport function prevDay (timestamp: CalendarTimestamp): CalendarTimestamp {\n  timestamp.day--\n  timestamp.weekday = (timestamp.weekday + 6) % DAYS_IN_WEEK\n  if (timestamp.day < DAY_MIN) {\n    timestamp.month--\n    if (timestamp.month < MONTH_MIN) {\n      timestamp.year--\n      timestamp.month = MONTH_MAX\n    }\n    timestamp.day = daysInMonth(timestamp.year, timestamp.month)\n  }\n\n  return timestamp\n}\n\nexport function relativeDays (\n  timestamp: CalendarTimestamp,\n  mover: CalendarTimestampOperation = nextDay,\n  days = 1\n): CalendarTimestamp {\n  while (--days >= 0) mover(timestamp)\n\n  return timestamp\n}\n\nexport function diffMinutes (min: CalendarTimestamp, max: CalendarTimestamp) {\n  const Y = (max.year - min.year) * 525600\n  const M = (max.month - min.month) * 43800\n  const D = (max.day - min.day) * 1440\n  const h = (max.hour - min.hour) * 60\n  const m = (max.minute - min.minute)\n\n  return Y + M + D + h + m\n}\n\nexport function findWeekday (timestamp: CalendarTimestamp, weekday: number,\n  mover: CalendarTimestampOperation = nextDay, maxDays = 6): CalendarTimestamp {\n  while (timestamp.weekday !== weekday && --maxDays >= 0) mover(timestamp)\n\n  return timestamp\n}\n\nexport function getWeekdaySkips (weekdays: number[]): number[] {\n  const skips: number[] = [1, 1, 1, 1, 1, 1, 1]\n  const filled: number[] = [0, 0, 0, 0, 0, 0, 0]\n  for (let i = 0; i < weekdays.length; i++) {\n    filled[weekdays[i]] = 1\n  }\n  for (let k = 0; k < DAYS_IN_WEEK; k++) {\n    let skip = 1\n    for (let j = 1; j < DAYS_IN_WEEK; j++) {\n      const next = (k + j) % DAYS_IN_WEEK\n      if (filled[next]) {\n        break\n      }\n      skip++\n    }\n    skips[k] = filled[k] * skip\n  }\n\n  return skips\n}\n\nexport function timestampToDate (timestamp: CalendarTimestamp): Date {\n  const time = `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`\n  const date = timestamp.date\n\n  return new Date(`${date}T${time}:00+00:00`)\n}\n\nexport function createDayList (\n  start: CalendarTimestamp,\n  end: CalendarTimestamp,\n  now: CalendarTimestamp,\n  weekdaySkips: number[],\n  max = 42,\n  min = 0\n): CalendarTimestamp[] {\n  const stop = getDayIdentifier(end)\n  const days: CalendarTimestamp[] = []\n  let current = copyTimestamp(start)\n  let currentIdentifier = 0\n  let stopped = currentIdentifier === stop\n\n  if (stop < getDayIdentifier(start)) {\n    throw new Error('End date is earlier than start date.')\n  }\n\n  while ((!stopped || days.length < min) && days.length < max) {\n    currentIdentifier = getDayIdentifier(current)\n    stopped = stopped || currentIdentifier === stop\n    if (weekdaySkips[current.weekday] === 0) {\n      current = nextDay(current)\n      continue\n    }\n    const day = copyTimestamp(current)\n    updateFormatted(day)\n    updateRelative(day, now)\n    days.push(day)\n    current = relativeDays(current, nextDay, weekdaySkips[current.weekday])\n  }\n\n  if (!days.length) throw new Error('No dates found using specified start date, end date, and weekdays.')\n\n  return days\n}\n\nexport function createIntervalList (\n  timestamp: CalendarTimestamp,\n  first: number,\n  minutes: number,\n  count: number,\n  now?: CalendarTimestamp\n): CalendarTimestamp[] {\n  const intervals: CalendarTimestamp[] = []\n\n  for (let i = 0; i < count; i++) {\n    const mins = first + (i * minutes)\n    const int = copyTimestamp(timestamp)\n    intervals.push(updateMinutes(int, mins, now))\n  }\n\n  return intervals\n}\n\nexport function createNativeLocaleFormatter (locale: string, getOptions: CalendarTimestampFormatOptions): CalendarFormatter {\n  const emptyFormatter: CalendarFormatter = (_t, _s) => ''\n\n  if (typeof Intl === 'undefined' || typeof Intl.DateTimeFormat === 'undefined') {\n    return emptyFormatter\n  }\n\n  return (timestamp, short) => {\n    try {\n      const intlFormatter = new Intl.DateTimeFormat(locale || undefined, getOptions(timestamp, short))\n\n      return intlFormatter.format(timestampToDate(timestamp))\n    } catch (e) {\n      return ''\n    }\n  }\n}\n\nexport function validateWeekdays (input: string | (number | string)[]): boolean {\n  if (isString(input)) {\n    input = input.split(',')\n  }\n\n  if (Array.isArray(input)) {\n    const ints = input.map(x => parseInt(x))\n\n    if (ints.length > DAYS_IN_WEEK || ints.length === 0) {\n      return false\n    }\n\n    const visited: Record<number, boolean> = {}\n    let wrapped = false\n\n    for (let i = 0; i < ints.length; i++) {\n      const x = ints[i]\n\n      if (!isFinite(x) || x < 0 || x >= DAYS_IN_WEEK) {\n        return false\n      }\n\n      if (i > 0) {\n        const d = x - ints[i - 1]\n        if (d < 0) {\n          if (wrapped) {\n            return false\n          }\n          wrapped = true\n        } else if (d === 0) {\n          return false\n        }\n      }\n\n      if (visited[x]) {\n        return false\n      }\n      visited[x] = true\n    }\n\n    return true\n  }\n\n  return false\n}\n","export function isLeapYear (year: number): boolean {\n  return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)\n}\n","// Utilities\nimport { consoleWarn, createRange, padStart } from '@/util'\n\n// Types\nimport type { DateAdapter } from '../DateAdapter'\n\ntype CustomDateFormat = Intl.DateTimeFormatOptions | ((date: Date, formatString: string, locale: string) => string)\n\nfunction weekInfo (locale: string): { firstDay: number, firstWeekSize: number } | null {\n  // https://simplelocalize.io/data/locales/\n  // then `new Intl.Locale(...).getWeekInfo()`\n  const code = locale.slice(-2).toUpperCase()\n  switch (true) {\n    case locale === 'GB-alt-variant': {\n      return { firstDay: 0, firstWeekSize: 4 }\n    }\n    case locale === '001': {\n      return { firstDay: 1, firstWeekSize: 1 }\n    }\n    case `AG AS BD BR BS BT BW BZ CA CO DM DO ET GT GU HK HN ID IL IN JM JP KE\n    KH KR LA MH MM MO MT MX MZ NI NP PA PE PH PK PR PY SA SG SV TH TT TW UM US\n    VE VI WS YE ZA ZW`.includes(code): {\n      return { firstDay: 0, firstWeekSize: 1 }\n    }\n    case `AI AL AM AR AU AZ BA BM BN BY CL CM CN CR CY EC GE HR KG KZ LB LK LV\n    MD ME MK MN MY NZ RO RS SI TJ TM TR UA UY UZ VN XK`.includes(code): {\n      return { firstDay: 1, firstWeekSize: 1 }\n    }\n    case `AD AN AT AX BE BG CH CZ DE DK EE ES FI FJ FO FR GB GF GP GR HU IE IS\n    IT LI LT LU MC MQ NL NO PL RE RU SE SK SM VA`.includes(code): {\n      return { firstDay: 1, firstWeekSize: 4 }\n    }\n    case `AE AF BH DJ DZ EG IQ IR JO KW LY OM QA SD SY`.includes(code): {\n      return { firstDay: 6, firstWeekSize: 1 }\n    }\n    case code === 'MV': {\n      return { firstDay: 5, firstWeekSize: 1 }\n    }\n    case code === 'PT': {\n      return { firstDay: 0, firstWeekSize: 4 }\n    }\n    default: return null\n  }\n}\n\nfunction getWeekArray (date: Date, locale: string, firstDayOfWeek?: number) {\n  const weeks = []\n  let currentWeek = []\n  const firstDayOfMonth = startOfMonth(date)\n  const lastDayOfMonth = endOfMonth(date)\n  const first = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0\n  const firstDayWeekIndex = (firstDayOfMonth.getDay() - first + 7) % 7\n  const lastDayWeekIndex = (lastDayOfMonth.getDay() - first + 7) % 7\n\n  for (let i = 0; i < firstDayWeekIndex; i++) {\n    const adjacentDay = new Date(firstDayOfMonth)\n    adjacentDay.setDate(adjacentDay.getDate() - (firstDayWeekIndex - i))\n    currentWeek.push(adjacentDay)\n  }\n\n  for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {\n    const day = new Date(date.getFullYear(), date.getMonth(), i)\n\n    // Add the day to the current week\n    currentWeek.push(day)\n\n    // If the current week has 7 days, add it to the weeks array and start a new week\n    if (currentWeek.length === 7) {\n      weeks.push(currentWeek)\n      currentWeek = []\n    }\n  }\n\n  for (let i = 1; i < 7 - lastDayWeekIndex; i++) {\n    const adjacentDay = new Date(lastDayOfMonth)\n    adjacentDay.setDate(adjacentDay.getDate() + i)\n    currentWeek.push(adjacentDay)\n  }\n\n  if (currentWeek.length > 0) {\n    weeks.push(currentWeek)\n  }\n\n  return weeks\n}\n\nfunction startOfWeek (date: Date, locale: string, firstDayOfWeek?: number) {\n  let day = (firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0) % 7\n\n  // prevent infinite loop\n  if (![0, 1, 2, 3, 4, 5, 6].includes(day)) {\n    consoleWarn('Invalid firstDayOfWeek, expected discrete number in range [0-6]')\n    day = 0\n  }\n\n  const d = new Date(date)\n  while (d.getDay() !== day) {\n    d.setDate(d.getDate() - 1)\n  }\n  return d\n}\n\nfunction endOfWeek (date: Date, locale: string) {\n  const d = new Date(date)\n  const lastDay = ((weekInfo(locale)?.firstDay ?? 0) + 6) % 7\n  while (d.getDay() !== lastDay) {\n    d.setDate(d.getDate() + 1)\n  }\n  return d\n}\n\nfunction startOfMonth (date: Date) {\n  return new Date(date.getFullYear(), date.getMonth(), 1)\n}\n\nfunction endOfMonth (date: Date) {\n  return new Date(date.getFullYear(), date.getMonth() + 1, 0)\n}\n\nfunction parseLocalDate (value: string): Date {\n  const parts = value.split('-').map(Number)\n\n  // new Date() uses local time zone when passing individual date component values\n  return new Date(parts[0], parts[1] - 1, parts[2])\n}\n\nconst _YYYMMDD = /^([12]\\d{3}-([1-9]|0[1-9]|1[0-2])-([1-9]|0[1-9]|[12]\\d|3[01]))$/\n\nfunction date (value?: any): Date | null {\n  if (value == null) return new Date()\n\n  if (value instanceof Date) return value\n\n  if (typeof value === 'string') {\n    let parsed\n\n    if (_YYYMMDD.test(value)) {\n      return parseLocalDate(value)\n    } else {\n      parsed = Date.parse(value)\n    }\n\n    if (!isNaN(parsed)) return new Date(parsed)\n  }\n\n  return null\n}\n\nconst sundayJanuarySecond2000 = new Date(2000, 0, 2)\n\nfunction getWeekdays (locale: string, firstDayOfWeek?: number, weekdayFormat?: 'long' | 'short' | 'narrow') {\n  const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0\n\n  return createRange(7).map(i => {\n    const weekday = new Date(sundayJanuarySecond2000)\n    weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i)\n    return new Intl.DateTimeFormat(locale, { weekday: weekdayFormat ?? 'narrow' }).format(weekday)\n  })\n}\n\nfunction format (\n  value: Date,\n  formatString: string,\n  locale: string,\n  formats?: Record<string, CustomDateFormat>\n): string {\n  const newDate = date(value) ?? new Date()\n  const customFormat = formats?.[formatString]\n\n  if (typeof customFormat === 'function') {\n    return customFormat(newDate, formatString, locale)\n  }\n\n  let options: Intl.DateTimeFormatOptions = {}\n  switch (formatString) {\n    case 'fullDate':\n      options = { year: 'numeric', month: 'short', day: 'numeric' }\n      break\n    case 'fullDateWithWeekday':\n      options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }\n      break\n    case 'normalDate':\n      const day = newDate.getDate()\n      const month = new Intl.DateTimeFormat(locale, { month: 'long' }).format(newDate)\n      return `${day} ${month}`\n    case 'normalDateWithWeekday':\n      options = { weekday: 'short', day: 'numeric', month: 'short' }\n      break\n    case 'shortDate':\n      options = { month: 'short', day: 'numeric' }\n      break\n    case 'year':\n      options = { year: 'numeric' }\n      break\n    case 'month':\n      options = { month: 'long' }\n      break\n    case 'monthShort':\n      options = { month: 'short' }\n      break\n    case 'monthAndYear':\n      options = { month: 'long', year: 'numeric' }\n      break\n    case 'monthAndDate':\n      options = { month: 'long', day: 'numeric' }\n      break\n    case 'weekday':\n      options = { weekday: 'long' }\n      break\n    case 'weekdayShort':\n      options = { weekday: 'short' }\n      break\n    case 'dayOfMonth':\n      return new Intl.NumberFormat(locale).format(newDate.getDate())\n    case 'hours12h':\n      options = { hour: 'numeric', hour12: true }\n      break\n    case 'hours24h':\n      options = { hour: 'numeric', hour12: false }\n      break\n    case 'minutes':\n      options = { minute: 'numeric' }\n      break\n    case 'seconds':\n      options = { second: 'numeric' }\n      break\n    case 'fullTime':\n      options = { hour: 'numeric', minute: 'numeric' }\n      break\n    case 'fullTime12h':\n      options = { hour: 'numeric', minute: 'numeric', hour12: true }\n      break\n    case 'fullTime24h':\n      options = { hour: 'numeric', minute: 'numeric', hour12: false }\n      break\n    case 'fullDateTime':\n      options = { year: 'numeric', month: 'short', day: 'numeric', hour: 'numeric', minute: 'numeric' }\n      break\n    case 'fullDateTime12h':\n      options = { year: 'numeric', month: 'short', day: 'numeric', hour: 'numeric', minute: 'numeric', hour12: true }\n      break\n    case 'fullDateTime24h':\n      options = { year: 'numeric', month: 'short', day: 'numeric', hour: 'numeric', minute: 'numeric', hour12: false }\n      break\n    case 'keyboardDate':\n      options = { year: 'numeric', month: '2-digit', day: '2-digit' }\n      break\n    case 'keyboardDateTime':\n      options = { year: 'numeric', month: '2-digit', day: '2-digit', hour: 'numeric', minute: 'numeric' }\n      return new Intl.DateTimeFormat(locale, options).format(newDate).replace(/, /g, ' ')\n    case 'keyboardDateTime12h':\n      options = { year: 'numeric', month: '2-digit', day: '2-digit', hour: 'numeric', minute: 'numeric', hour12: true }\n      return new Intl.DateTimeFormat(locale, options).format(newDate).replace(/, /g, ' ')\n    case 'keyboardDateTime24h':\n      options = { year: 'numeric', month: '2-digit', day: '2-digit', hour: 'numeric', minute: 'numeric', hour12: false }\n      return new Intl.DateTimeFormat(locale, options).format(newDate).replace(/, /g, ' ')\n    default:\n      options = customFormat ?? { timeZone: 'UTC', timeZoneName: 'short' }\n  }\n\n  return new Intl.DateTimeFormat(locale, options).format(newDate)\n}\n\nfunction toISO (adapter: DateAdapter<any>, value: Date) {\n  const date = adapter.toJsDate(value)\n  const year = date.getFullYear()\n  const month = padStart(String(date.getMonth() + 1), 2, '0')\n  const day = padStart(String(date.getDate()), 2, '0')\n\n  return `${year}-${month}-${day}`\n}\n\nfunction parseISO (value: string) {\n  const [year, month, day] = value.split('-').map(Number)\n\n  return new Date(year, month - 1, day)\n}\n\nfunction addMinutes (date: Date, amount: number) {\n  const d = new Date(date)\n  d.setMinutes(d.getMinutes() + amount)\n  return d\n}\n\nfunction addHours (date: Date, amount: number) {\n  const d = new Date(date)\n  d.setHours(d.getHours() + amount)\n  return d\n}\n\nfunction addDays (date: Date, amount: number) {\n  const d = new Date(date)\n  d.setDate(d.getDate() + amount)\n  return d\n}\n\nfunction addWeeks (date: Date, amount: number) {\n  const d = new Date(date)\n  d.setDate(d.getDate() + (amount * 7))\n  return d\n}\n\nfunction addMonths (date: Date, amount: number) {\n  const d = new Date(date)\n  d.setDate(1)\n  d.setMonth(d.getMonth() + amount)\n  return d\n}\n\nfunction getYear (date: Date) {\n  return date.getFullYear()\n}\n\nfunction getMonth (date: Date) {\n  return date.getMonth()\n}\n\nfunction getWeek (date: Date, locale: string, firstDayOfWeek?: number, firstDayOfYear?: number) {\n  const weekInfoFromLocale = weekInfo(locale)\n  const weekStart = firstDayOfWeek ?? weekInfoFromLocale?.firstDay ?? 0\n  const minWeekSize = weekInfoFromLocale?.firstWeekSize ?? 1\n\n  return firstDayOfYear !== undefined\n    ? calculateWeekWithFirstDayOfYear(date, locale, weekStart, firstDayOfYear)\n    : calculateWeekWithMinWeekSize(date, locale, weekStart, minWeekSize)\n}\n\nfunction calculateWeekWithFirstDayOfYear (date: Date, locale: string, weekStart: number, firstDayOfYear: number) {\n  const firstDayOfYearOffset = (7 + firstDayOfYear - weekStart) % 7\n  const currentWeekStart = startOfWeek(date, locale, weekStart)\n  const currentWeekEnd = addDays(currentWeekStart, 6)\n\n  function yearStartWeekdayOffset (year: number) {\n    return (7 + new Date(year, 0, 1).getDay() - weekStart) % 7\n  }\n\n  let year = getYear(currentWeekStart)\n  if (year < getYear(currentWeekEnd) && yearStartWeekdayOffset(year + 1) <= firstDayOfYearOffset) {\n    year++\n  }\n\n  const yearStart = new Date(year, 0, 1)\n  const offset = yearStartWeekdayOffset(year)\n  const d1w1 = offset <= firstDayOfYearOffset\n    ? addDays(yearStart, -offset)\n    : addDays(yearStart, 7 - offset)\n\n  return 1 + getDiff(endOfDay(currentWeekStart), startOfDay(d1w1), 'weeks')\n}\n\nfunction calculateWeekWithMinWeekSize (date: Date, locale: string, weekStart: number, minWeekSize: number) {\n  const currentWeekStart = startOfWeek(date, locale, weekStart)\n  const currentWeekEnd = addDays(startOfWeek(date, locale, weekStart), 6)\n\n  function firstWeekSize (year: number) {\n    const yearStart = new Date(year, 0, 1)\n    return 7 - getDiff(yearStart, startOfWeek(yearStart, locale, weekStart), 'days')\n  }\n\n  let year = getYear(currentWeekStart)\n  if (year < getYear(currentWeekEnd) && firstWeekSize(year + 1) >= minWeekSize) {\n    year++\n  }\n\n  const yearStart = new Date(year, 0, 1)\n  const size = firstWeekSize(year)\n  const d1w1 = size >= minWeekSize\n    ? addDays(yearStart, size - 7)\n    : addDays(yearStart, size)\n  return 1 + getDiff(endOfDay(currentWeekStart), startOfDay(d1w1), 'weeks')\n}\n\nfunction getDate (date: Date) {\n  return date.getDate()\n}\n\nfunction getNextMonth (date: Date) {\n  return new Date(date.getFullYear(), date.getMonth() + 1, 1)\n}\n\nfunction getPreviousMonth (date: Date) {\n  return new Date(date.getFullYear(), date.getMonth() - 1, 1)\n}\n\nfunction getHours (date: Date) {\n  return date.getHours()\n}\n\nfunction getMinutes (date: Date) {\n  return date.getMinutes()\n}\n\nfunction startOfYear (date: Date) {\n  return new Date(date.getFullYear(), 0, 1)\n}\nfunction endOfYear (date: Date) {\n  return new Date(date.getFullYear(), 11, 31)\n}\n\nfunction isWithinRange (date: Date, range: [Date, Date]) {\n  return (\n    isEqual(date, range[0]) || isEqual(date, range[1]) ||\n    (isAfter(date, range[0]) && isBefore(date, range[1]))\n  )\n}\n\nfunction isValid (date: any) {\n  const d = new Date(date)\n\n  return d instanceof Date && !isNaN(d.getTime())\n}\n\nfunction isAfter (date: Date, comparing: Date) {\n  return date.getTime() > comparing.getTime()\n}\n\nfunction isAfterDay (date: Date, comparing: Date): boolean {\n  return isAfter(startOfDay(date), startOfDay(comparing))\n}\n\nfunction isBefore (date: Date, comparing: Date) {\n  return date.getTime() < comparing.getTime()\n}\n\nfunction isEqual (date: Date, comparing: Date) {\n  return date.getTime() === comparing.getTime()\n}\n\nfunction isSameDay (date: Date, comparing: Date) {\n  return date.getDate() === comparing.getDate() &&\n    date.getMonth() === comparing.getMonth() &&\n    date.getFullYear() === comparing.getFullYear()\n}\n\nfunction isSameMonth (date: Date, comparing: Date) {\n  return date.getMonth() === comparing.getMonth() &&\n    date.getFullYear() === comparing.getFullYear()\n}\n\nfunction isSameYear (date: Date, comparing: Date) {\n  return date.getFullYear() === comparing.getFullYear()\n}\n\nfunction getDiff (date: Date, comparing: Date | string, unit?: string) {\n  const d = new Date(date)\n  const c = new Date(comparing)\n\n  switch (unit) {\n    case 'years':\n      return d.getFullYear() - c.getFullYear()\n    case 'quarters':\n      return Math.floor((d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12) / 4)\n    case 'months':\n      return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12\n    case 'weeks':\n      return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24 * 7))\n    case 'days':\n      return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24))\n    case 'hours':\n      return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60))\n    case 'minutes':\n      return Math.floor((d.getTime() - c.getTime()) / (1000 * 60))\n    case 'seconds':\n      return Math.floor((d.getTime() - c.getTime()) / 1000)\n    default: {\n      return d.getTime() - c.getTime()\n    }\n  }\n}\n\nfunction setHours (date: Date, count: number) {\n  const d = new Date(date)\n  d.setHours(count)\n  return d\n}\n\nfunction setMinutes (date: Date, count: number) {\n  const d = new Date(date)\n  d.setMinutes(count)\n  return d\n}\n\nfunction setMonth (date: Date, count: number) {\n  const d = new Date(date)\n  d.setMonth(count)\n  return d\n}\n\nfunction setDate (date: Date, day: number) {\n  const d = new Date(date)\n  d.setDate(day)\n  return d\n}\n\nfunction setYear (date: Date, year: number) {\n  const d = new Date(date)\n  d.setFullYear(year)\n  return d\n}\n\nfunction startOfDay (date: Date) {\n  return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0)\n}\n\nfunction endOfDay (date: Date) {\n  return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999)\n}\n\nexport class VuetifyDateAdapter implements DateAdapter<Date> {\n  locale: string\n  formats?: Record<string, CustomDateFormat>\n\n  constructor (options: { locale: string, formats?: Record<string, CustomDateFormat> }) {\n    this.locale = options.locale\n    this.formats = options.formats\n  }\n\n  date (value?: any) {\n    return date(value)\n  }\n\n  toJsDate (date: Date) {\n    return date\n  }\n\n  toISO (date: Date): string {\n    return toISO(this, date)\n  }\n\n  parseISO (date: string) {\n    return parseISO(date)\n  }\n\n  addMinutes (date: Date, amount: number) {\n    return addMinutes(date, amount)\n  }\n\n  addHours (date: Date, amount: number) {\n    return addHours(date, amount)\n  }\n\n  addDays (date: Date, amount: number) {\n    return addDays(date, amount)\n  }\n\n  addWeeks (date: Date, amount: number) {\n    return addWeeks(date, amount)\n  }\n\n  addMonths (date: Date, amount: number) {\n    return addMonths(date, amount)\n  }\n\n  getWeekArray (date: Date, firstDayOfWeek?: number | string) {\n    const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined\n    return getWeekArray(date, this.locale, firstDay)\n  }\n\n  startOfWeek (date: Date, firstDayOfWeek?: number | string): Date {\n    const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined\n    return startOfWeek(date, this.locale, firstDay)\n  }\n\n  endOfWeek (date: Date): Date {\n    return endOfWeek(date, this.locale)\n  }\n\n  startOfMonth (date: Date) {\n    return startOfMonth(date)\n  }\n\n  endOfMonth (date: Date) {\n    return endOfMonth(date)\n  }\n\n  format (date: Date, formatString: string) {\n    return format(date, formatString, this.locale, this.formats)\n  }\n\n  isEqual (date: Date, comparing: Date) {\n    return isEqual(date, comparing)\n  }\n\n  isValid (date: any) {\n    return isValid(date)\n  }\n\n  isWithinRange (date: Date, range: [Date, Date]) {\n    return isWithinRange(date, range)\n  }\n\n  isAfter (date: Date, comparing: Date) {\n    return isAfter(date, comparing)\n  }\n\n  isAfterDay (date: Date, comparing: Date) {\n    return isAfterDay(date, comparing)\n  }\n\n  isBefore (date: Date, comparing: Date) {\n    return !isAfter(date, comparing) && !isEqual(date, comparing)\n  }\n\n  isSameDay (date: Date, comparing: Date) {\n    return isSameDay(date, comparing)\n  }\n\n  isSameMonth (date: Date, comparing: Date) {\n    return isSameMonth(date, comparing)\n  }\n\n  isSameYear (date: Date, comparing: Date) {\n    return isSameYear(date, comparing)\n  }\n\n  setMinutes (date: Date, count: number) {\n    return setMinutes(date, count)\n  }\n\n  setHours (date: Date, count: number) {\n    return setHours(date, count)\n  }\n\n  setMonth (date: Date, count: number) {\n    return setMonth(date, count)\n  }\n\n  setDate (date: Date, day: number): Date {\n    return setDate(date, day)\n  }\n\n  setYear (date: Date, year: number) {\n    return setYear(date, year)\n  }\n\n  getDiff (date: Date, comparing: Date | string, unit?: string) {\n    return getDiff(date, comparing, unit)\n  }\n\n  getWeekdays (firstDayOfWeek?: number | string, weekdayFormat?: 'long' | 'short' | 'narrow') {\n    const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined\n    return getWeekdays(this.locale, firstDay, weekdayFormat)\n  }\n\n  getYear (date: Date) {\n    return getYear(date)\n  }\n\n  getMonth (date: Date) {\n    return getMonth(date)\n  }\n\n  getWeek (date: Date, firstDayOfWeek?: number | string, firstDayOfYear?: number | string) {\n    const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined\n    const firstWeekStart = firstDayOfYear !== undefined ? Number(firstDayOfYear) : undefined\n    return getWeek(date, this.locale, firstDay, firstWeekStart)\n  }\n\n  getDate (date: Date) {\n    return getDate(date)\n  }\n\n  getNextMonth (date: Date) {\n    return getNextMonth(date)\n  }\n\n  getPreviousMonth (date: Date) {\n    return getPreviousMonth(date)\n  }\n\n  getHours (date: Date) {\n    return getHours(date)\n  }\n\n  getMinutes (date: Date) {\n    return getMinutes(date)\n  }\n\n  startOfDay (date: Date) {\n    return startOfDay(date)\n  }\n\n  endOfDay (date: Date) {\n    return endOfDay(date)\n  }\n\n  startOfYear (date: Date) {\n    return startOfYear(date)\n  }\n\n  endOfYear (date: Date) {\n    return endOfYear(date)\n  }\n}\n","// Composables\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { inject, reactive, watch } from 'vue'\nimport { isFunction, isString, mergeDeep } from '@/util'\n\n// Types\nimport type { InjectionKey } from 'vue'\nimport type { DateAdapter } from './DateAdapter'\nimport type { LocaleInstance } from '@/composables/locale'\n\n// Adapters\nimport { VuetifyDateAdapter } from './adapters/vuetify'\n\nexport interface DateInstance extends DateModule.InternalAdapter {\n  locale?: any\n}\n\n/** Supports module augmentation to specify date adapter types */\nexport namespace DateModule {\n  interface Adapter {}\n\n  export type InternalAdapter = {} extends Adapter ? DateAdapter : Adapter\n}\n\nexport type InternalDateOptions = {\n  adapter: (new (options: { locale: any, formats?: any }) => DateInstance) | DateInstance\n  formats?: Record<string, any>\n  locale: Record<string, any>\n}\n\nexport type DateOptions = Partial<InternalDateOptions>\n\nexport const DateOptionsSymbol: InjectionKey<InternalDateOptions> = Symbol.for('vuetify:date-options')\nexport const DateAdapterSymbol: InjectionKey<DateInstance> = Symbol.for('vuetify:date-adapter')\n\nexport function createDate (options: DateOptions | undefined, locale: LocaleInstance) {\n  const _options = mergeDeep({\n    adapter: VuetifyDateAdapter,\n    locale: {\n      af: 'af-ZA',\n      ar: 'ar-DZ', // bare 'ar' would resolve to Argentina in ../adapters/vuetify.ts:25\n      bg: 'bg-BG',\n      ca: 'ca-ES',\n      ckb: 'ckb-IQ',\n      cs: 'cs-CZ',\n      da: 'da-DK',\n      de: 'de-DE',\n      el: 'el-GR',\n      en: 'en-US',\n      // es: '', # not the same value for all variants\n      et: 'et-EE',\n      fa: 'fa-IR',\n      fi: 'fi-FI',\n      // fr: '', #not the same value for all variants\n      hr: 'hr-HR',\n      hu: 'hu-HU',\n      he: 'he-IL',\n      id: 'id-ID',\n      it: 'it-IT',\n      ja: 'ja-JP',\n      km: 'km-KH',\n      ko: 'ko-KR',\n      lv: 'lv-LV',\n      lt: 'lt-LT',\n      nl: 'nl-NL',\n      no: 'no-NO',\n      pl: 'pl-PL',\n      pt: 'pt-PT',\n      ro: 'ro-RO',\n      ru: 'ru-RU',\n      sk: 'sk-SK',\n      sl: 'sl-SI',\n      srCyrl: 'sr-Cyrl-RS',\n      srLatn: 'sr-Latn-RS',\n      sv: 'sv-SE',\n      th: 'th-TH',\n      tr: 'tr-TR',\n      az: 'az-AZ',\n      uk: 'uk-UA',\n      vi: 'vi-VN',\n      zhHans: 'zh-CN',\n      zhHant: 'zh-TW',\n    },\n  }, options) as InternalDateOptions\n\n  return {\n    options: _options,\n    instance: createInstance(_options, locale),\n  }\n}\n\nexport function daysDiff (adapter: DateInstance, start: unknown, stop?: unknown): number {\n  const iso = [\n    `${adapter.toISO(stop ?? start).split('T')[0]}T00:00:00Z`,\n    `${adapter.toISO(start).split('T')[0]}T00:00:00Z`,\n  ]\n  return isString(adapter.date())\n    ? adapter.getDiff(iso[0], iso[1], 'days') // for StringDateAdapter\n    : adapter.getDiff(adapter.date(iso[0]), adapter.date(iso[1]), 'days')\n}\n\nfunction createInstance (options: InternalDateOptions, locale: LocaleInstance) {\n  const instance = reactive(\n    isFunction(options.adapter)\n      // eslint-disable-next-line new-cap\n      ? new options.adapter({\n        locale: options.locale[locale.current.value] ?? locale.current.value,\n        formats: options.formats,\n      })\n      : options.adapter\n  )\n\n  watch(locale.current, value => {\n    instance.locale = options.locale[value] ?? value ?? instance.locale\n  })\n\n  return instance\n}\n\nexport function useDate (): DateInstance {\n  const options = inject(DateOptionsSymbol)\n\n  if (!options) throw new Error('[Vuetify] Could not find injected date options')\n\n  const locale = useLocale()\n\n  return createInstance(options, locale)\n}\n","// Composables\nimport { useTimes } from './times'\nimport { computeColor } from '@/composables/color'\nimport { useDate } from '@/composables/date'\nimport { provideLocale } from '@/composables/locale'\n\n// Utilities\nimport { computed } from 'vue'\nimport {\n  createDayList,\n  createNativeLocaleFormatter,\n  getEndOfMonth,\n  getEndOfWeek,\n  getStartOfMonth,\n  getStartOfWeek,\n  getTimestampIdentifier,\n  getWeekdaySkips,\n  parseDate,\n  parseTimestamp,\n  validateTimestamp,\n  validateWeekdays,\n} from '../util/timestamp'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { CalendarFormatter, CalendarTimestamp } from '../types'\nimport type { ColorValue } from '@/composables/color'\n\nexport const makeCalendarBaseProps = propsFactory({\n  start: {\n    type: [String, Number, Date],\n    validate: validateTimestamp,\n    default: () => parseDate(new Date()).date,\n  },\n  end: {\n    type: [String, Number, Date],\n    validate: validateTimestamp,\n  },\n  weekdays: {\n    type: [Array, String] as PropType<number[] | string>,\n    default: () => [0, 1, 2, 3, 4, 5, 6],\n    validate: validateWeekdays,\n  },\n  firstDayOfWeek: [Number, String],\n  firstDayOfYear: [Number, String],\n  weekdayFormat: {\n    type: Function as PropType<CalendarFormatter>,\n    default: null,\n  },\n  dayFormat: {\n    type: Function as PropType<CalendarFormatter>,\n    default: null,\n  },\n  format: String as PropType<'ampm' | '24hr'>,\n  locale: String,\n  now: {\n    type: String,\n    validator: validateTimestamp,\n  },\n  type: {\n    type: String as PropType<'month' | 'week' | 'day' | '4day' | 'custom-weekly' | 'custom-daily' | 'category'>,\n    default: 'month',\n  },\n}, 'VCalendar-base')\n\nexport interface CalendarBaseProps {\n  modelValue?: string | number | Date\n  categoryDays?: string | number\n  start: string | number | Date\n  end: string | number | Date | undefined\n  weekdays: string | number[]\n  firstDayOfWeek: number | string | undefined\n  firstDayOfYear: number | string | undefined\n  weekdayFormat: CalendarFormatter | string | undefined\n  dayFormat: CalendarFormatter | string | undefined\n  format: 'ampm' | '24hr' | undefined\n  locale: string | undefined\n  now: string | undefined\n  type: 'month' | 'week' | 'day' | '4day' | 'custom-weekly' | 'custom-daily' | 'category'\n}\n\nexport function useCalendarBase (props: CalendarBaseProps) {\n  const { times, updateTimes } = useTimes({ now: props.now })\n  const locale = provideLocale(props)\n\n  const adapter = useDate()\n\n  const parsedStart = computed((): CalendarTimestamp => {\n    if (props.type === 'month') {\n      return getStartOfMonth(parseTimestamp(props.start, true))\n    }\n    return parseTimestamp(props.start, true)\n  })\n\n  const parsedEnd = computed((): CalendarTimestamp => {\n    const start = parsedStart.value\n    const end: CalendarTimestamp = props.end ? parseTimestamp(props.end) || start : start\n    const value = getTimestampIdentifier(end) < getTimestampIdentifier(start) ? start : end\n\n    if (props.type === 'month') {\n      return getEndOfMonth(value)\n    }\n    return value\n  })\n\n  const parsedValue = computed((): CalendarTimestamp => {\n    return (validateTimestamp(props.modelValue)\n      ? parseTimestamp(props.modelValue, true)\n      : (parsedStart.value || times.today))\n  })\n\n  const parsedWeekdays = computed((): number[] => {\n    const weekdays = Array.isArray(props.weekdays)\n      ? props.weekdays\n      : (props.weekdays || '').split(',').map(x => parseInt(x, 10))\n\n    const first = adapter.toJsDate(adapter.startOfWeek(adapter.date(), props.firstDayOfWeek)).getDay()\n    return [\n      ...weekdays.toSorted().filter(v => v >= first),\n      ...weekdays.toSorted().filter(v => v < first),\n    ]\n  })\n\n  const effectiveWeekdays = computed((): number[] => {\n    const start = parsedValue.value\n    const days = parseInt(String(props.categoryDays)) || 1\n\n    switch (props.type) {\n      case 'day': return [start.weekday]\n      case '4day': return [\n        start.weekday,\n        (start.weekday + 1) % 7,\n        (start.weekday + 2) % 7,\n        (start.weekday + 3) % 7,\n      ]\n      case 'category': return Array.from({ length: days }, (_, i) => (start.weekday + i) % 7)\n      default: return parsedWeekdays.value\n    }\n  })\n\n  const weekdaySkips = computed((): number[] => {\n    return getWeekdaySkips(parsedWeekdays.value)\n  })\n\n  const days = computed((): CalendarTimestamp[] => {\n    return createDayList(\n      parsedStart.value,\n      parsedEnd.value,\n      times.today,\n      weekdaySkips.value,\n    )\n  })\n\n  const dayFormatter = computed((): CalendarFormatter => {\n    if (props.dayFormat) {\n      return props.dayFormat as CalendarFormatter\n    }\n\n    return createNativeLocaleFormatter(\n      locale.current.value,\n      () => ({ timeZone: 'UTC', day: 'numeric' })\n    )\n  })\n\n  const weekdayFormatter = computed((): CalendarFormatter => {\n    if (props.weekdayFormat) {\n      return props.weekdayFormat as CalendarFormatter\n    }\n\n    return createNativeLocaleFormatter(\n      locale.current.value,\n      (_tms, short) => ({ timeZone: 'UTC', weekday: short ? 'short' : 'long' })\n    )\n  })\n\n  function getColorProps (colors: { background?: ColorValue, text?: ColorValue }) {\n    return computeColor(colors)\n  }\n\n  function getRelativeClasses (timestamp: CalendarTimestamp, outside = false) {\n    return {\n      'v-present': timestamp.present,\n      'v-past': timestamp.past,\n      'v-future': timestamp.future,\n      'v-outside': outside,\n    }\n  }\n\n  function getWeekNumber (timestamp: CalendarTimestamp): number {\n    return adapter.getWeek(\n      adapter.date(timestamp.date),\n      props.firstDayOfWeek,\n      props.firstDayOfYear,\n    )\n  }\n\n  function _getStartOfWeek (timestamp: CalendarTimestamp): CalendarTimestamp {\n    return getStartOfWeek(timestamp, parsedWeekdays.value, times.today)\n  }\n\n  function _getEndOfWeek (timestamp: CalendarTimestamp): CalendarTimestamp {\n    return getEndOfWeek(timestamp, parsedWeekdays.value, times.today)\n  }\n\n  function getFormatter (options: Intl.DateTimeFormatOptions): CalendarFormatter {\n    return createNativeLocaleFormatter(locale.current.value, () => options)\n  }\n\n  return {\n    times,\n    locale,\n    parsedValue,\n    parsedWeekdays,\n    effectiveWeekdays,\n    weekdaySkips,\n    parsedStart,\n    parsedEnd,\n    days,\n    dayFormatter,\n    weekdayFormatter,\n    getColorProps,\n    getRelativeClasses,\n    getWeekNumber,\n    getStartOfWeek: _getStartOfWeek,\n    getEndOfWeek: _getEndOfWeek,\n    getFormatter,\n    updateTimes,\n  }\n}\n","// Utilities\nimport { computed, reactive, watch } from 'vue'\nimport {\n  parseDate,\n  parseTimestamp,\n  validateTimestamp,\n} from '../util/timestamp'\n\n// Types\nimport type { CalendarTimestamp } from '../types'\n\nexport function useTimes (props: { now: string | undefined }) {\n  const times = reactive({\n    now: parseTimestamp('0000-00-00 00:00', true),\n    today: parseTimestamp('0000-00-00', true),\n  })\n\n  const parsedNow = computed((): CalendarTimestamp | null => {\n    return props.now && validateTimestamp(props.now) ? parseTimestamp(props.now, true) : null\n  })\n\n  function setPresent (): void {\n    times.now.present = times.today.present = true\n    times.now.past = times.today.past = false\n    times.now.future = times.today.future = false\n  }\n\n  function getNow (): CalendarTimestamp {\n    return parseDate(new Date())\n  }\n\n  function updateDay (now: CalendarTimestamp, target: CalendarTimestamp): void {\n    if (now.date !== target.date) {\n      target.year = now.year\n      target.month = now.month\n      target.day = now.day\n      target.weekday = now.weekday\n      target.date = now.date\n    }\n  }\n\n  function updateTime (now: CalendarTimestamp, target: CalendarTimestamp): void {\n    if (now.time !== target.time) {\n      target.hour = now.hour\n      target.minute = now.minute\n      target.time = now.time\n    }\n  }\n\n  function updateTimes (): void {\n    const now: CalendarTimestamp = parsedNow.value || getNow()\n    updateDay(now, times.now)\n    updateTime(now, times.now)\n    updateDay(now, times.today)\n  }\n\n  watch(parsedNow, updateTimes)\n\n  updateTimes()\n  setPresent()\n\n  return {\n    times,\n    parsedNow,\n    updateTimes,\n    setPresent,\n    getNow,\n    updateDay,\n    updateTime,\n  }\n}\n","// Composables\nimport { useCalendarBase } from './calendarBase'\n\n// Utilities\nimport { computed, shallowRef } from 'vue'\nimport {\n  copyTimestamp,\n  createDayList,\n  createIntervalList,\n  createNativeLocaleFormatter,\n  getDayIdentifier,\n  MINUTES_IN_DAY,\n  parseTime,\n  updateMinutes,\n  validateNumber,\n  validateTime,\n} from '../util/timestamp'\nimport { clamp, isBoolean, isObject, propsFactory } from '@/util'\nimport { Box, getTargetBox } from '@/util/box'\n\n// Types\nimport type { PropType, StyleValue } from 'vue'\nimport type { CalendarBaseProps } from './calendarBase'\nimport type { CalendarDayBodySlotScope, CalendarFormatter, CalendarTimestamp } from '../types'\nimport type { VTime } from '../util/timestamp'\n\nexport const makeCalendarWithIntervalsProps = propsFactory({\n  maxDays: {\n    type: Number,\n    default: 7,\n  },\n  intervalHeight: {\n    type: [Number, String],\n    default: 48,\n    validate: validateNumber,\n  },\n  intervalWidth: {\n    type: [Number, String],\n    default: 60,\n    validate: validateNumber,\n  },\n  intervalMinutes: {\n    type: [Number, String],\n    default: 60,\n    validate: validateNumber,\n  },\n  firstInterval: {\n    type: [Number, String],\n    default: 0,\n    validate: validateNumber,\n  },\n  firstTime: {\n    type: [Number, String, Object] as PropType<VTime>,\n    validate: validateTime,\n  },\n  intervalCount: {\n    type: [Number, String],\n    default: 24,\n    validate: validateNumber,\n  },\n  intervalFormat: {\n    type: Function as PropType<CalendarFormatter>,\n    default: null,\n  },\n  intervalStyle: {\n    type: Function as PropType<(interval: CalendarTimestamp) => StyleValue>,\n    default: null,\n  },\n  showIntervalLabel: {\n    type: Function as PropType<(interval: CalendarTimestamp) => boolean>,\n    default: null,\n  },\n}, 'VCalendar-intervals')\n\ninterface CalendarWithIntervalsProps extends CalendarBaseProps {\n  maxDays: number\n  intervalHeight: string | number\n  intervalMinutes: string | number\n  firstInterval: string | number\n  firstTime: VTime | undefined\n  intervalCount: string | number\n  intervalFormat: CalendarFormatter | string | undefined\n}\n\nexport function useCalendarWithIntervals (props: CalendarWithIntervalsProps) {\n  const base = useCalendarBase(props)\n\n  const scrollAreaRef = shallowRef<HTMLElement>()\n\n  const parsedFirstInterval = computed((): number => {\n    return parseInt(String(props.firstInterval || 0))\n  })\n\n  const parsedIntervalMinutes = computed((): number => {\n    return parseInt(String(props.intervalMinutes || 60))\n  })\n\n  const parsedIntervalCount = computed((): number => {\n    return parseInt(String(props.intervalCount || 24))\n  })\n\n  const parsedIntervalHeight = computed((): number => {\n    return parseFloat(String(props.intervalHeight || 48))\n  })\n\n  const parsedFirstTime = computed((): number | false => {\n    return parseTime(props.firstTime)\n  })\n\n  const firstMinute = computed((): number => {\n    const time = parsedFirstTime.value\n\n    return time !== false && time >= 0 && time <= MINUTES_IN_DAY\n      ? time\n      : parsedFirstInterval.value * parsedIntervalMinutes.value\n  })\n\n  const effectiveIntervalCount = computed((): number => {\n    const dayLimit = Math.ceil((MINUTES_IN_DAY - firstMinute.value) / parsedIntervalMinutes.value)\n    return clamp(parsedIntervalCount.value, 0, dayLimit)\n  })\n\n  const bodyHeight = computed((): number => {\n    return effectiveIntervalCount.value * parsedIntervalHeight.value\n  })\n\n  const days = computed((): CalendarTimestamp[] => {\n    return createDayList(\n      base.parsedStart.value,\n      base.parsedEnd.value,\n      base.times.today,\n      base.weekdaySkips.value,\n      props.maxDays\n    )\n  })\n\n  const intervals = computed((): CalendarTimestamp[][] => {\n    const daysValue = days.value\n    const first: number = firstMinute.value\n    const minutes: number = parsedIntervalMinutes.value\n    const count: number = effectiveIntervalCount.value\n    const now: CalendarTimestamp = base.times.now\n\n    return daysValue.map(d => createIntervalList(d, first, minutes, count, now))\n  })\n\n  const intervalFormatter = computed((): CalendarFormatter => {\n    if (props.intervalFormat) {\n      return props.intervalFormat as CalendarFormatter\n    }\n\n    const hour12 = props.format === 'ampm' ? true : props.format === '24hr' ? false : undefined\n    const hourStyle = props.format === '24hr' ? '2-digit' : 'numeric'\n\n    return createNativeLocaleFormatter(\n      base.locale.current.value,\n      (tms, short) => (\n        !short ? { timeZone: 'UTC', hour: '2-digit', minute: '2-digit', hour12 }\n        : tms.minute === 0 ? { timeZone: 'UTC', hour: hourStyle, hour12 }\n        : { timeZone: 'UTC', hour: hourStyle, minute: '2-digit', hour12 }\n      )\n    )\n  })\n\n  function showIntervalLabelDefault (interval: CalendarTimestamp): boolean {\n    const first: CalendarTimestamp = intervals.value[0][0]\n    const isFirst: boolean = first.hour === interval.hour && first.minute === interval.minute\n    return !isFirst\n  }\n\n  function intervalStyleDefault (_interval: CalendarTimestamp): StyleValue {\n    return undefined\n  }\n\n  function getIntervalAtEvent (e: Event): number {\n    const bounds = new Box(e.currentTarget as HTMLElement)\n    const touchEvent: TouchEvent = e as TouchEvent\n    const mouseEvent: MouseEvent = e as MouseEvent\n    const touches: TouchList = touchEvent.changedTouches || touchEvent.touches\n    const target = touches && touches[0] ? touches[0] : mouseEvent\n    const point = getTargetBox([target.clientX, target.clientY])\n    return (point.y - bounds.top) / parsedIntervalHeight.value\n  }\n\n  function getTimestampAtEvent (e: Event, day: CalendarTimestamp): CalendarTimestamp {\n    const timestamp: CalendarTimestamp = copyTimestamp(day)\n    const addMinutes: number = Math.floor(getIntervalAtEvent(e) * parsedIntervalMinutes.value)\n    const minutes: number = firstMinute.value + addMinutes\n\n    return updateMinutes(timestamp, minutes, base.times.now)\n  }\n\n  function getSlotScope (timestamp: CalendarTimestamp): CalendarDayBodySlotScope {\n    const scope = copyTimestamp(timestamp) as any\n    scope.timeToY = timeToY\n    scope.timeDelta = timeDelta\n    scope.minutesToPixels = minutesToPixels\n    scope.week = days.value\n    scope.intervalRange = [\n      firstMinute.value,\n      firstMinute.value + effectiveIntervalCount.value * parsedIntervalMinutes.value,\n    ]\n    return scope\n  }\n\n  function scrollToTime (time: VTime): boolean {\n    const y = timeToY(time)\n\n    const pane = scrollAreaRef.value\n\n    if (y === false || !pane) {\n      return false\n    }\n\n    pane.scrollTop = y\n\n    return true\n  }\n\n  function minutesToPixels (minutes: number): number {\n    return minutes / parsedIntervalMinutes.value * parsedIntervalHeight.value\n  }\n\n  function timeToY (\n    time: VTime | CalendarTimestamp,\n    targetDateOrClamp: CalendarTimestamp | boolean = false\n  ): number | false {\n    const clamp = targetDateOrClamp !== false\n    const targetDate = !isBoolean(targetDateOrClamp) ? targetDateOrClamp : undefined\n\n    let y = timeDelta(time, targetDate)\n    if (y === false) return y\n\n    y *= bodyHeight.value\n\n    if (clamp) {\n      if (y < 0) {\n        y = 0\n      } else if (y > bodyHeight.value) {\n        y = bodyHeight.value\n      }\n    } else {\n      if (y < 0) {\n        y = y + bodyHeight.value\n      } else if (y > bodyHeight.value) {\n        y = y - bodyHeight.value\n      }\n    }\n\n    return y\n  }\n\n  function timeDelta (time: VTime | CalendarTimestamp, targetDate?: CalendarTimestamp): number | false {\n    let minutes = parseTime(time)\n\n    if (minutes === false) {\n      return false\n    }\n\n    const gap: number = effectiveIntervalCount.value * parsedIntervalMinutes.value\n\n    if (targetDate && isObject(time) && 'day' in time) {\n      const a = getDayIdentifier(time)\n      const b = getDayIdentifier(targetDate)\n      minutes += (a - b) * gap\n    }\n\n    const min: number = firstMinute.value\n\n    return (minutes - min) / gap\n  }\n\n  return {\n    ...base,\n    scrollAreaRef,\n    parsedFirstInterval,\n    parsedIntervalMinutes,\n    parsedIntervalCount,\n    parsedIntervalHeight,\n    parsedFirstTime,\n    firstMinute,\n    bodyHeight,\n    days,\n    intervals,\n    intervalFormatter,\n    showIntervalLabelDefault,\n    intervalStyleDefault,\n    getIntervalAtEvent,\n    getTimestampAtEvent,\n    getSlotScope,\n    scrollToTime,\n    minutesToPixels,\n    timeToY,\n    timeDelta,\n  }\n}\n","// Composables\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { shallowRef } from 'vue'\nimport { isString, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { CalendarTimestamp } from '../types'\n\ninterface IntervalHighlightBase {\n  intervals: { value: CalendarTimestamp[][] }\n  getIntervalAtEvent: (e: Event) => number\n}\n\nexport const makeIntervalHighlightProps = propsFactory({\n  intervalHighlight: {\n    type: [Boolean, String] as PropType<boolean | string>,\n    default: false,\n  },\n}, 'interval-highlight')\n\nexport function useIntervalHighlight (\n  props: { intervalHighlight: boolean | string },\n  base: IntervalHighlightBase,\n) {\n  const hoveredTime = shallowRef<string | null>(null)\n\n  // The underlay paints `background: currentColor`, so we only need a text color.\n  const { textColorClasses, textColorStyles } = useTextColor(() =>\n    isString(props.intervalHighlight) && props.intervalHighlight\n      ? props.intervalHighlight\n      : 'surface-variant'\n  )\n\n  // Day columns can overlay the intervals, so snap the cursor to an interval row.\n  function getHoveredTimeFromEvent (e: MouseEvent): string | null {\n    const index = Math.floor(base.getIntervalAtEvent(e))\n    const intervals = base.intervals.value[0]\n    if (!intervals || index < 0 || index >= intervals.length) return null\n    return intervals[index].time\n  }\n\n  function onMousemove (e: MouseEvent) {\n    if (!props.intervalHighlight) return\n    hoveredTime.value = getHoveredTimeFromEvent(e)\n  }\n\n  function onMouseleave () {\n    if (!props.intervalHighlight) return\n    hoveredTime.value = null\n  }\n\n  function isHighlighted (interval: CalendarTimestamp): boolean {\n    return !!props.intervalHighlight && hoveredTime.value === interval.time\n  }\n\n  function genUnderlay () {\n    if (!props.intervalHighlight) return undefined\n    return (\n      <div\n        class={['v-calendar-daily__day-interval__underlay', textColorClasses.value]}\n        style={ textColorStyles.value }\n      />\n    )\n  }\n\n  return {\n    hoveredTime,\n    onMousemove,\n    onMouseleave,\n    isHighlighted,\n    genUnderlay,\n  }\n}\n","// Types\nimport 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","// Components\nimport { VIconBtn } from '@/components/VIconBtn'\n\n// Composables\nimport { makeCalendarBaseProps } from './composables/calendarBase'\nimport { makeCalendarWithIntervalsProps, useCalendarWithIntervals } from './composables/calendarWithIntervals'\nimport { makeIntervalHighlightProps, useIntervalHighlight } from './composables/intervalHighlight'\n\n// Directives\nimport vResize from '@/directives/resize'\n\n// Utilities\nimport { nextTick, onMounted, ref } from 'vue'\nimport { convertToUnit, defineComponent, getPrefixedEventHandlers, noop, useRender } from '@/util'\n\n// Types\nimport type { CalendarTimestamp } from './types'\n\nexport const VCalendarDaily = defineComponent({\n  name: 'VCalendarDaily',\n\n  directives: { vResize },\n\n  props: {\n    color: String,\n    shortWeekdays: {\n      type: Boolean,\n      default: true,\n    },\n    shortIntervals: {\n      type: Boolean,\n      default: true,\n    },\n    hideHeader: Boolean,\n\n    ...makeIntervalHighlightProps(),\n    ...makeCalendarBaseProps(),\n    ...makeCalendarWithIntervalsProps(),\n  },\n\n  setup (props, { slots, attrs }) {\n    const scrollPush = ref(0)\n    const pane = ref<HTMLElement>()\n    const base = useCalendarWithIntervals(props)\n    const highlight = useIntervalHighlight(props, base)\n\n    function init () {\n      nextTick(onResize)\n    }\n\n    function onResize () {\n      scrollPush.value = getScrollPush()\n    }\n\n    function getScrollPush (): number {\n      return base.scrollAreaRef.value && pane.value\n        ? (base.scrollAreaRef.value.offsetWidth - pane.value.offsetWidth)\n        : 0\n    }\n\n    function genHead () {\n      return (\n        <div\n          class=\"v-calendar-daily__head\"\n          style={{ marginRight: scrollPush.value + 'px' }}\n        >\n          { genHeadIntervals() }\n          { genHeadDays() }\n        </div>\n      )\n    }\n\n    function genHeadIntervals () {\n      const width: string | undefined = convertToUnit(props.intervalWidth)\n      return (\n        <div\n          class=\"v-calendar-daily__intervals-head\"\n          style={{ width }}\n        >\n          { slots['interval-header']?.() }\n        </div>\n      )\n    }\n\n    function genHeadDays () {\n      return base.days.value.map(genHeadDay)\n    }\n\n    function genHeadDay (day: CalendarTimestamp, index: number) {\n      const events = getPrefixedEventHandlers(attrs, ':day', nativeEvent => ({\n        nativeEvent, ...base.getSlotScope(day),\n      }))\n      return (\n        <div\n          key={ day.date }\n          class={['v-calendar-daily_head-day', base.getRelativeClasses(day)]}\n          { ...events }\n        >\n          { genHeadWeekday(day) }\n          { genHeadDayLabel(day) }\n          { genDayHeader(day, index) }\n        </div>\n      )\n    }\n\n    function genDayHeader (day: CalendarTimestamp, index: number) {\n      return slots['day-header']?.({\n        week: base.days.value,\n        ...day,\n        index,\n      }) ?? []\n    }\n\n    function genHeadWeekday (day: CalendarTimestamp) {\n      const color = day.present ? props.color : undefined\n      return (\n        <div\n          { ...base.getColorProps({ text: color }) }\n          class=\"v-calendar-daily_head-weekday\"\n        >\n          { base.weekdayFormatter.value(day, props.shortWeekdays) }\n        </div>\n      )\n    }\n\n    function genHeadDayLabel (day: CalendarTimestamp) {\n      return (\n        <div class=\"v-calendar-daily_head-day-label\">\n          { slots['day-label-header']?.(day) ?? genHeadDayButton(day) }\n        </div>\n      )\n    }\n\n    function genHeadDayButton (day: CalendarTimestamp) {\n      const events = getPrefixedEventHandlers(attrs, ':date', nativeEvent => ({\n        nativeEvent, ...day,\n      }))\n      return (\n        <VIconBtn\n          active={ day.present }\n          activeColor={ props.color }\n          variant=\"outlined\"\n          baseVariant=\"text\"\n          onUpdate:active={ noop }\n          { ...events }\n        >\n          { base.dayFormatter.value(day, false) }\n        </VIconBtn>\n      )\n    }\n\n    function genBody () {\n      return (\n        <div class=\"v-calendar-daily__body\">\n          { genScrollArea() }\n        </div>\n      )\n    }\n\n    function genScrollArea () {\n      return (\n        <div ref={ base.scrollAreaRef } class=\"v-calendar-daily__scroll-area\">\n          { genPane() }\n        </div>\n      )\n    }\n\n    function genPane () {\n      return (\n        <div\n          ref={ pane }\n          class=\"v-calendar-daily__pane\"\n          style={{ height: convertToUnit(base.bodyHeight.value) }}\n        >\n          { genDayContainer() }\n        </div>\n      )\n    }\n\n    function genDayContainer () {\n      return (\n        <div class=\"v-calendar-daily__day-container\">\n          { genBodyIntervals() }\n          { slots.days?.() ?? genDays() }\n        </div>\n      )\n    }\n\n    function genDays () {\n      return base.days.value.map((day, index) => {\n        const events = getPrefixedEventHandlers(attrs, ':time', nativeEvent => ({\n          nativeEvent,\n          ...base.getSlotScope(base.getTimestampAtEvent(nativeEvent, day)),\n        }))\n        return (\n          <div\n            key={ day.date }\n            class={['v-calendar-daily__day', base.getRelativeClasses(day)]}\n            { ...events }\n            onMousemove={ highlight.onMousemove }\n            onMouseleave={ highlight.onMouseleave }\n          >\n            { genDayIntervals(index) }\n            { genDayBody(day) }\n          </div>\n        )\n      })\n    }\n\n    function genDayBody (day: CalendarTimestamp) {\n      return slots['day-body']?.(base.getSlotScope(day)) ?? []\n    }\n\n    function genDayIntervals (index: number) {\n      return base.intervals.value[index].map(genDayInterval)\n    }\n\n    function genDayInterval (interval: CalendarTimestamp) {\n      const height: string | undefined = convertToUnit(props.intervalHeight)\n      const styler = props.intervalStyle || base.intervalStyleDefault\n      return (\n        <div\n          class={['v-calendar-daily__day-interval', {\n            'v-calendar-daily__day-interval--hover': highlight.isHighlighted(interval),\n          }]}\n          key={ interval.time }\n          style={[{ height }, styler(interval)]}\n        >\n          { highlight.genUnderlay() }\n          { slots.interval?.(base.getSlotScope(interval)) }\n        </div>\n      )\n    }\n\n    function genBodyIntervals () {\n      const width: string | undefined = convertToUnit(props.intervalWidth)\n      const events = getPrefixedEventHandlers(attrs, ':interval', nativeEvent => ({\n        nativeEvent, ...base.getTimestampAtEvent(nativeEvent, base.parsedStart.value),\n      }))\n      return (\n        <div\n          class=\"v-calendar-daily__intervals-body\"\n          style={{ width }}\n          { ...events }\n        >\n          { genIntervalLabels() }\n        </div>\n      )\n    }\n\n    function genIntervalLabels () {\n      if (!base.intervals.value.length) return null\n      return base.intervals.value[0].map(genIntervalLabel)\n    }\n\n    function genIntervalLabel (interval: CalendarTimestamp) {\n      const height: string | undefined = convertToUnit(props.intervalHeight)\n      const short = props.shortIntervals\n      const shower = props.showIntervalLabel || base.showIntervalLabelDefault\n      const show = shower(interval)\n      const label = show ? base.intervalFormatter.value(interval, short) : undefined\n      return (\n        <div\n          key={ interval.time }\n          class=\"v-calendar-daily__interval\"\n          style={{ height }}\n        >\n          <div class=\"v-calendar-daily__interval-text\">\n            { label }\n          </div>\n        </div>\n      )\n    }\n\n    onMounted(init)\n\n    useRender(() => (\n      <div\n        class={['v-calendar-daily', attrs.class]}\n        onDragstart={ (e: MouseEvent) => e.preventDefault() }\n        v-resize_quiet={ onResize }\n      >\n        { !props.hideHeader ? genHead() : undefined }\n        { genBody() }\n      </div>\n    ))\n\n    return {\n      ...base,\n      scrollPush,\n      pane,\n      init,\n      onResize,\n      getScrollPush,\n    }\n  },\n})\n\nexport type VCalendarDaily = InstanceType<typeof VCalendarDaily>\n","// Utilities\nimport { isFunction, isObject, isString } from '@/util'\n\n// Types\nimport type { CalendarCategory, CalendarCategoryTextFunction } from '../types'\n\nexport function parsedCategoryText (\n  category: CalendarCategory,\n  categoryText: string | CalendarCategoryTextFunction | undefined\n): string {\n  return isFunction(categoryText) ? categoryText(category)\n    : isString(categoryText) && isObject(category) ? category[categoryText]\n    : isString(category) ? category\n    : ''\n}\n\nexport function getParsedCategories (\n  categories: CalendarCategory | CalendarCategory[],\n  categoryText: string | CalendarCategoryTextFunction | undefined\n): CalendarCategory[] {\n  if (isString(categories)) return categories.split(/\\s*,\\s/)\n  if (Array.isArray(categories)) {\n    return categories.map((category: CalendarCategory) => {\n      if (isString(category)) return category\n\n      const categoryName = isString(category.categoryName)\n        ? category.categoryName\n        : parsedCategoryText(category, categoryText)\n      return { ...category, categoryName }\n    })\n  }\n  return []\n}\n","// Components\nimport { VCalendarDaily } from './VCalendarDaily'\n\n// Composables\nimport { makeCalendarBaseProps } from './composables/calendarBase'\nimport { makeCalendarWithIntervalsProps, useCalendarWithIntervals } from './composables/calendarWithIntervals'\nimport { makeIntervalHighlightProps, useIntervalHighlight } from './composables/intervalHighlight'\n\n// Utilities\nimport { computed } from 'vue'\nimport { getParsedCategories } from './util/parser'\nimport { convertToUnit, defineComponent, getPrefixedEventHandlers, isObject, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { CalendarCategory, CalendarCategoryTextFunction, CalendarTimestamp } from './types'\n\nexport const VCalendarCategory = defineComponent({\n  name: 'VCalendarCategory',\n\n  props: {\n    categories: {\n      type: [Array, String] as PropType<CalendarCategory[] | string>,\n      default: '',\n    },\n    categoryText: [String, Function] as PropType<string | CalendarCategoryTextFunction>,\n    categoryForInvalid: {\n      type: String,\n      default: '',\n    },\n    ...makeIntervalHighlightProps(),\n    ...makeCalendarBaseProps(),\n    ...makeCalendarWithIntervalsProps(),\n  },\n\n  setup (props, { slots, attrs }) {\n    const base = useCalendarWithIntervals(props)\n\n    const highlight = useIntervalHighlight(props, base)\n\n    const parsedCategories = computed((): CalendarCategory[] => {\n      return getParsedCategories(props.categories, props.categoryText)\n    })\n\n    function getCategoryScope (scope: any, category: CalendarCategory) {\n      const cat = isObject(category) && category.categoryName === props.categoryForInvalid ? null : category\n      return {\n        ...scope,\n        category: cat,\n      }\n    }\n\n    function genDayHeader (scope: CalendarTimestamp & { week: any, index: number }) {\n      return (\n        <div class=\"v-calendar-category__columns\">\n          { parsedCategories.value.map(category => {\n            return genDayHeaderCategory(scope, getCategoryScope(scope, category))\n          })}\n        </div>\n      )\n    }\n\n    function genDayHeaderCategory (day: CalendarTimestamp, scope: any) {\n      const headerTitle = isObject(scope.category) ? scope.category.categoryName : scope.category\n      const events = getPrefixedEventHandlers(attrs, ':dayCategory', () => {\n        return getCategoryScope(base.getSlotScope(day) || day, scope.category)\n      })\n      return (\n        <div\n          class=\"v-calendar-category__column-header\"\n          { ...events }\n        >\n          { slots.category?.(scope) ?? genDayHeaderCategoryTitle(headerTitle) }\n          { slots['day-header']?.(scope) }\n        </div>\n      )\n    }\n\n    function genDayHeaderCategoryTitle (categoryName: string | null) {\n      return (\n        <div class=\"v-calendar-category__category\">\n          { categoryName === null ? props.categoryForInvalid : categoryName }\n        </div>\n      )\n    }\n\n    function genDays () {\n      const days: any[] = []\n      base.days.value.forEach((d: CalendarTimestamp, j: number) => {\n        const day = new Array(parsedCategories.value.length || 1)\n        day.fill(d)\n        days.push(...day.map((v: CalendarTimestamp, i: number) => genDay(v, j, i)))\n      })\n      return days\n    }\n\n    function genDay (day: CalendarTimestamp, index: number, categoryIndex: number) {\n      const category = parsedCategories.value[categoryIndex]\n      const events = getPrefixedEventHandlers(attrs, ':time', e => {\n        return base.getSlotScope(base.getTimestampAtEvent(e, day))\n      })\n      return (\n        <div\n          key={ day.date + '-' + categoryIndex }\n          class={['v-calendar-daily__day', base.getRelativeClasses(day)]}\n          { ...events }\n          onMousemove={ highlight.onMousemove }\n          onMouseleave={ highlight.onMouseleave }\n        >\n          { genDayIntervals(index, category) }\n          { genDayBody(day, category) }\n        </div>\n      )\n    }\n\n    function genDayIntervals (index: number, category: CalendarCategory) {\n      return base.intervals.value[index].map((v: CalendarTimestamp) => genDayInterval(v, category))\n    }\n\n    function genDayInterval (interval: CalendarTimestamp, category: CalendarCategory) {\n      const height: string | undefined = convertToUnit(props.intervalHeight)\n      const styler = props.intervalStyle || base.intervalStyleDefault\n\n      return (\n        <div\n          key={ interval.time }\n          class={[\n            'v-calendar-daily__day-interval',\n            {\n              'v-calendar-daily__day-interval--hover': highlight.isHighlighted(interval),\n            },\n          ]}\n          style={[{ height }, styler({ ...interval, category })]}\n        >\n          { highlight.genUnderlay() }\n          { slots.interval?.(\n            getCategoryScope(base.getSlotScope(interval), category)\n          )}\n        </div>\n      )\n    }\n\n    function genDayBody (day: CalendarTimestamp, category: CalendarCategory) {\n      return (\n        <div class=\"v-calendar-category__columns\">\n          { genDayBodyCategory(day, category) }\n        </div>\n      )\n    }\n\n    function genDayBodyCategory (day: CalendarTimestamp, category: CalendarCategory) {\n      const events = getPrefixedEventHandlers(attrs, ':timeCategory', e => {\n        return getCategoryScope(\n          base.getSlotScope(base.getTimestampAtEvent(e, day)),\n          category\n        )\n      })\n\n      return (\n        <div class=\"v-calendar-category__column\" { ...events }>\n          { slots['day-body']?.(getCategoryScope(base.getSlotScope(day), category)) }\n        </div>\n      )\n    }\n\n    useRender(() => (\n      <VCalendarDaily\n        class={[\n          'v-calendar-daily',\n          'v-calendar-category',\n        ]}\n        { ...props }\n      >\n        {{\n          ...slots,\n          days: genDays,\n          'day-header': genDayHeader,\n        }}\n      </VCalendarDaily>\n    ))\n\n    return {\n      ...base,\n      parsedCategories,\n    }\n  },\n})\n\nexport type VCalendarCategory = InstanceType<typeof VCalendarCategory>\n","/**\n * Centralized key alias mapping for consistent key normalization across the hotkey system.\n *\n * This maps various user-friendly aliases to canonical key names that match\n * KeyboardEvent.key values (in lowercase) where possible.\n */\nexport const keyAliasMap: Record<string, string> = {\n  // Modifier aliases (from vue-use, other libraries, and current implementation)\n  control: 'ctrl',\n  command: 'cmd',\n  option: 'alt',\n\n  // Arrow key aliases (common abbreviations)\n  up: 'arrowup',\n  down: 'arrowdown',\n  left: 'arrowleft',\n  right: 'arrowright',\n\n  // Other common key aliases\n  esc: 'escape',\n  spacebar: ' ',\n  space: ' ',\n  return: 'enter',\n  del: 'delete',\n\n  // Symbol aliases (existing from hotkey-parsing.ts)\n  plus: '+',\n  slash: '/',\n  underscore: '_',\n  minus: '-',\n  hyphen: '-',\n}\n\n/**\n * Normalizes a key string to its canonical form using the alias map.\n *\n * @param key - The key string to normalize\n * @returns The canonical key name in lowercase\n */\nexport function normalizeKey (key: string): string {\n  const lowerKey = key.toLowerCase()\n  return keyAliasMap[lowerKey] || lowerKey\n}\n","// Utilities\nimport { normalizeKey } from './key-aliases'\nimport { consoleWarn, includes, isString } from '@/util'\n\n// Types\nexport type KeyCombination = Sequence | Alternate | Combo | Key\n\nexport interface Sequence {\n  type: 'sequence'\n  parts: (Alternate | Combo | Key)[]\n}\n\nexport interface Alternate {\n  type: 'alternate'\n  parts: (Combo | Key)[]\n}\n\nexport interface Combo {\n  type: 'combo'\n  parts: Key[]\n}\n\nexport type Key = string\n\nclass ParseError extends Error {}\n\n/**\n * Splits a single combination string into individual key parts.\n * Grammar:\n *\n * sequence   = alternate *('-' alternate)\n * alternate  = combo *('/' combo)\n * combo      = key *(('+' | '_') key)\n * key        = /./ *(/[^-/+_ ]/)\n *\n */\nexport function parseKeyCombination (input: string) {\n  let pos = 0\n\n  try {\n    const result = parseSequence()\n    if (!atEnd()) {\n      throw new ParseError(`Unexpected character '${peek()}' at position ${pos}`)\n    }\n    return result\n  } catch (err) {\n    if (err instanceof ParseError) {\n      consoleWarn(`Invalid hotkey combination: ${err.message}\\n  ${input}\\n  ${' '.repeat(pos)}^`)\n      return ''\n    } else {\n      throw err\n    }\n  }\n\n  function peek (ahead = 0): string | null {\n    return pos + ahead < input.length\n      ? input[pos + ahead]\n      : null\n  }\n\n  function consume (): string {\n    if (pos >= input.length) {\n      throw new ParseError('Unexpected end of input')\n    }\n    return input[pos++]\n  }\n\n  function atEnd (): boolean {\n    return pos >= input.length\n  }\n\n  // sequence = alternate *('-' alternate)\n  function parseSequence (): KeyCombination {\n    const parts: (Alternate | Combo | Key)[] = [parseAlternate()]\n    while (peek() === '-') {\n      consume()\n      parts.push(parseAlternate())\n    }\n    if (parts.length === 1) return parts[0]\n    return { type: 'sequence', parts }\n  }\n\n  // alternate = combo *('/' combo)\n  function parseAlternate (): Alternate | Combo | Key {\n    const parts: (Combo | Key)[] = [parseCombo()]\n    while (peek() === '/') {\n      consume()\n      parts.push(parseCombo())\n    }\n    if (parts.length === 1) return parts[0]\n    return { type: 'alternate', parts }\n  }\n\n  // combo = key *(('+' | '_') key)\n  function parseCombo (): Combo | Key {\n    const keys: Key[] = [parseKey()]\n    while (includes(['+', '_'], peek())) {\n      consume()\n      keys.push(parseKey())\n    }\n    if (keys.length === 1) return keys[0]\n    return {\n      type: 'combo',\n      parts: keys,\n    }\n  }\n\n  // key = /./ *(/[^-/+_ ]/)\n  function parseKey (): Key {\n    const ch = peek()\n    if (!isString(ch)) {\n      throw new ParseError('Unexpected end of input')\n    }\n    const next = peek(1)\n    if (isSep(ch) && isString(next) && !isSep(next)) {\n      throw new ParseError(`Unexpected separator '${ch}' at position ${pos}`)\n    }\n    const first = consume()\n    // separator keys are always a single character\n    if (isSep(first)) return first\n    const chars: Key[] = [first]\n    while (!atEnd() && !isSep(peek()) && peek() !== ' ') {\n      chars.push(consume())\n    }\n    return normalizeKey(chars.join(''))\n  }\n}\n\nfunction isSep (char: string | null) {\n  return includes(['-', '/', '+', '_'], char)\n}\n","// Composables\nimport { parseKeyCombination } from '@/composables/hotkey/hotkey-parsing'\n\n// Utilities\nimport { onScopeDispose, toValue, watch } from 'vue'\nimport { getActiveElement, IN_BROWSER, isString } from '@/util'\n\n// Types\nimport type { Combo, Key, KeyCombination, Sequence } from '@/composables/hotkey/hotkey-parsing'\nimport type { MaybeRef } from '@/util'\n\nconst MODIFIERS = ['ctrl', 'shift', 'alt', 'meta', 'cmd'] as const\nconst modifiersSet = new Set(MODIFIERS)\ntype Modifier = typeof MODIFIERS[number]\nfunction isModifier (key: string): key is Modifier {\n  return modifiersSet.has(key as Modifier)\n}\nconst emptyModifiers = Object.fromEntries(MODIFIERS.map(m => [m, false])) as Record<Modifier, boolean>\n\ninterface HotkeyOptions {\n  event?: MaybeRef<'keydown' | 'keyup'>\n  inputs?: MaybeRef<boolean>\n  preventDefault?: MaybeRef<boolean>\n  sequenceTimeout?: MaybeRef<number>\n}\n\nexport function useHotkey (\n  keys: MaybeRef<string | undefined>,\n  callback: (e: KeyboardEvent) => void,\n  options: HotkeyOptions = {}\n) {\n  if (!IN_BROWSER) return function () {}\n\n  const {\n    event = 'keydown',\n    inputs = false,\n    preventDefault = true,\n    sequenceTimeout = 1000,\n  } = options\n\n  const isMac = navigator?.userAgent?.includes('Macintosh') ?? false\n  let timeout = 0\n  let keyGroups: (Exclude<KeyCombination, Sequence>)[]\n  let isSequence = false\n  let groupIndex = 0\n\n  function isInputFocused () {\n    if (toValue(inputs)) return false\n\n    const activeElement = getActiveElement() as HTMLElement\n\n    return activeElement && (\n      activeElement.tagName === 'INPUT' ||\n      activeElement.tagName === 'TEXTAREA' ||\n      activeElement.isContentEditable ||\n      activeElement.contentEditable === 'true'\n    )\n  }\n\n  function resetSequence () {\n    groupIndex = 0\n    clearTimeout(timeout)\n  }\n\n  function handler (e: KeyboardEvent) {\n    const group = keyGroups[groupIndex]\n\n    if (!group || isInputFocused()) return\n\n    if (!matchesKeyGroup(e, group, isMac)) {\n      if (isSequence) resetSequence()\n      return\n    }\n\n    if (toValue(preventDefault)) e.preventDefault()\n\n    if (!isSequence) {\n      callback(e)\n      return\n    }\n\n    clearTimeout(timeout)\n    groupIndex++\n\n    if (groupIndex === keyGroups.length) {\n      callback(e)\n      resetSequence()\n      return\n    }\n\n    timeout = window.setTimeout(resetSequence, toValue(sequenceTimeout))\n  }\n\n  function cleanup () {\n    window.removeEventListener(toValue(event), handler)\n    clearTimeout(timeout)\n  }\n\n  watch(() => toValue(keys), newKeys => {\n    cleanup()\n\n    if (newKeys) {\n      const parsed = parseKeyCombination(newKeys.toLowerCase())\n      if (parsed) {\n        const parts = !isString(parsed) && parsed.type === 'sequence'\n          ? parsed.parts\n          : [parsed]\n        isSequence = parts.length > 1\n        keyGroups = parts\n        resetSequence()\n        window.addEventListener(toValue(event), handler)\n      }\n    }\n  }, { immediate: true })\n\n  // Watch for changes in the event type to re-register the listener\n  watch(() => toValue(event), (newEvent, oldEvent) => {\n    if (oldEvent && keyGroups && keyGroups.length > 0) {\n      window.removeEventListener(oldEvent, handler)\n      window.addEventListener(newEvent, handler)\n    }\n  })\n\n  onScopeDispose(cleanup, true)\n\n  return cleanup\n}\n\nfunction matchesKeyGroup (e: KeyboardEvent, group: Exclude<KeyCombination, Sequence>, isMac: boolean): boolean {\n  if (!isString(group) && group.type === 'alternate') {\n    return group.parts.some(part => matchesKeyGroup(e, part, isMac))\n  }\n\n  const { modifiers, actualKey } = parseKeyGroup(group)\n\n  const expectCtrl = modifiers.ctrl || (!isMac && (modifiers.cmd || modifiers.meta))\n  const expectMeta = isMac && (modifiers.cmd || modifiers.meta)\n\n  return (\n    e.ctrlKey === expectCtrl &&\n    e.metaKey === expectMeta &&\n    e.shiftKey === modifiers.shift &&\n    e.altKey === modifiers.alt &&\n    e.key.toLowerCase() === actualKey?.toLowerCase()\n  )\n}\n\nfunction parseKeyGroup (group: Combo | Key): {\n  modifiers: Record<Modifier, boolean>\n  actualKey: string | undefined\n} {\n  const parts = isString(group) ? [group] : group.parts\n  const modifiers = { ...emptyModifiers }\n  let actualKey: string | undefined\n\n  for (const part of parts) {\n    if (isModifier(part)) {\n      modifiers[part] = true\n    } else {\n      // TODO: handle multiple keys\n      actualKey = part\n    }\n  }\n\n  return { modifiers, actualKey }\n}\n","// Utilities\nimport { computed } from 'vue'\nimport { isObject, isString, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport interface MaskProps {\n  mask: string | MaskOptions | undefined\n}\n\nexport interface MaskOptions {\n  mask: string\n  tokens: Record<string, MaskItem>\n}\n\nexport const makeMaskProps = propsFactory({\n  mask: [String, Object] as PropType<string | MaskOptions>,\n}, 'mask')\n\nexport type MaskItem = {\n  convert?: (char: string) => string\n} & ({\n  pattern?: never\n  test: (char: string) => boolean\n} | {\n  pattern: RegExp\n  test?: never\n})\n\nexport const defaultDelimiters = /[-!$%^&*()_+|~=`{}[\\]:\";'<>?,./\\\\ ]/\n\nconst presets: Record<string, string> = {\n  'credit-card': '#### - #### - #### - ####',\n  date: '##/##/####',\n  'date-time': '##/##/#### ##:##',\n  'iso-date': '####-##-##',\n  'iso-date-time': '####-##-## ##:##',\n  phone: '(###) ### - ####',\n  social: '###-##-####',\n  time: '##:##',\n  'time-with-seconds': '##:##:##',\n}\n\nconst defaultTokens: Record<string, MaskItem> = {\n  '#': {\n    pattern: /[0-9]/,\n  },\n  A: {\n    pattern: /[A-Z]/i,\n    convert: v => v.toUpperCase(),\n  },\n  a: {\n    pattern: /[a-z]/i,\n    convert: v => v.toLowerCase(),\n  },\n  N: {\n    pattern: /[0-9A-Z]/i,\n    convert: v => v.toUpperCase(),\n  },\n  n: {\n    pattern: /[0-9a-z]/i,\n    convert: v => v.toLowerCase(),\n  },\n  X: {\n    pattern: defaultDelimiters,\n  },\n}\n\nexport function useMask (props: MaskProps) {\n  const mask = computed(() => {\n    if (isString(props.mask)) {\n      if (props.mask in presets) return presets[props.mask]\n      return props.mask\n    }\n    return props.mask?.mask ?? ''\n  })\n  const tokens = computed(() => {\n    return {\n      ...defaultTokens,\n      ...(isObject(props.mask) ? props.mask.tokens : null),\n    }\n  })\n\n  function isMask (char: string): boolean {\n    return char in tokens.value\n  }\n\n  function maskValidates (mask: string, char: string): boolean {\n    if (!isString(char) || !isMask(mask)) return false\n    const item = tokens.value[mask]\n    if (item.pattern) return item.pattern.test(char)\n    return item.test(char)\n  }\n\n  function convert (mask: string, char: string): string {\n    const item = tokens.value[mask]\n    return item.convert ? item.convert(char) : char\n  }\n\n  function maskText (text: string | null | undefined): string {\n    const trimmedText = text?.trim().replace(/\\s+/g, ' ')\n\n    if (!isString(trimmedText)) return ''\n\n    if (!mask.value.length || !trimmedText.length) return trimmedText\n\n    let textIndex = 0\n    let maskIndex = 0\n    let newText = ''\n\n    while (maskIndex < mask.value.length) {\n      const mchar = mask.value[maskIndex]\n      const tchar = trimmedText[textIndex]\n\n      // Escaped character in mask, the next mask character is inserted\n      if (mchar === '\\\\') {\n        newText += mask.value[maskIndex + 1]\n        maskIndex += 2\n        continue\n      }\n\n      if (!isMask(mchar)) {\n        newText += mchar\n        if (tchar === mchar) {\n          textIndex++\n        }\n      } else if (maskValidates(mchar, tchar)) {\n        newText += convert(mchar, tchar)\n        textIndex++\n      } else if (textIndex < trimmedText.length) {\n        // No match, try the next input character\n        textIndex++\n        continue\n      } else {\n        break\n      }\n\n      maskIndex++\n    }\n    return newText\n  }\n\n  function unmaskText (text: string | null): string | null {\n    if (!isString(text)) return null\n\n    if (!mask.value.length || !text.length) return text\n\n    let result = ''\n    const unmaskMap = getUnmaskMap(text)\n    for (let i = 0; i < text.length; i++) {\n      if (!unmaskMap[i]) result += text[i]\n    }\n    return result\n  }\n\n  function isDelimiter (text: string, index: number): boolean {\n    if (!mask.value.length || !text.length) return false\n    return !!getUnmaskMap(text)[index]\n  }\n\n  function getUnmaskMap (text: string | null): boolean[] {\n    if (!isString(text) || !mask.value.length || !text.length) return []\n\n    let textIndex = 0\n    let maskIndex = 0\n    const result = Array.from({ length: text.length }, () => true)\n\n    while (true) {\n      const mchar = mask.value[maskIndex]\n      const tchar = text[textIndex]\n\n      if (!isString(tchar)) break\n\n      if (!isString(mchar)) {\n        result[textIndex] = false\n        textIndex++\n        continue\n      }\n\n      // Escaped character in mask, skip the next input character\n      if (mchar === '\\\\') {\n        if (tchar === mask.value[maskIndex + 1]) {\n          textIndex++\n        }\n        maskIndex += 2\n        continue\n      }\n\n      if (maskValidates(mchar, tchar)) {\n        // masked char\n        result[textIndex] = false\n        textIndex++\n        maskIndex++\n        continue\n      } else if (mchar !== tchar) {\n        // input doesn't match mask, skip forward until it does\n        while (true) {\n          const mchar = mask.value[maskIndex++]\n          if (!isString(mchar) || maskValidates(mchar, tchar)) break\n        }\n        continue\n      }\n\n      textIndex++\n      maskIndex++\n    }\n\n    return result\n  }\n\n  function isValid (text: string): boolean {\n    if (!text) return false\n\n    return unmaskText(text) === unmaskText(maskText(text))\n  }\n\n  function isComplete (text: string): boolean {\n    if (!text) return false\n\n    const maskedText = maskText(text)\n    return maskedText.length === mask.value.length && isValid(text)\n  }\n\n  return {\n    isDelimiter,\n    isValid,\n    isComplete,\n    mask: maskText,\n    unmask: unmaskText,\n  }\n}\n","// Components\nimport { VIconBtn } from '@/components/VIconBtn'\n\n// Composables\nimport { makeCalendarBaseProps, useCalendarBase } from './composables/calendarBase'\nimport { useTheme } from '@/composables'\n\n// Utilities\nimport { computed } from 'vue'\nimport {\n  createDayList,\n  createNativeLocaleFormatter,\n  getDayIdentifier,\n  validateNumber,\n} from './util/timestamp'\nimport { defineComponent, getPrefixedEventHandlers, noop, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { CalendarFormatter, CalendarTimestamp } from './types'\n\nexport const VCalendarWeekly = defineComponent({\n  name: 'VCalendarWeekly',\n\n  props: {\n    minWeeks: {\n      validate: validateNumber,\n      default: 1,\n    },\n    monthFormat: Function as PropType<CalendarFormatter>,\n    showWeek: Boolean,\n    color: String,\n    shortWeekdays: {\n      type: Boolean,\n      default: true,\n    },\n    showMonthOnFirst: {\n      type: Boolean,\n      default: true,\n    },\n    shortMonths: {\n      type: Boolean,\n      default: true,\n    },\n    hideHeader: Boolean,\n\n    ...makeCalendarBaseProps(),\n  },\n\n  setup (props, { slots, attrs }) {\n    const base = useCalendarBase(props)\n\n    const theme = useTheme()\n\n    const parsedMinWeeks = computed((): number => {\n      return parseInt(String(props.minWeeks))\n    })\n\n    const days = computed((): CalendarTimestamp[] => {\n      const minDays = parsedMinWeeks.value * base.parsedWeekdays.value.length\n      const start = base.getStartOfWeek(base.parsedStart.value)\n      const end = base.getEndOfWeek(base.parsedEnd.value)\n\n      return createDayList(\n        start,\n        end,\n        base.times.today,\n        base.weekdaySkips.value,\n        Number.MAX_SAFE_INTEGER,\n        minDays\n      )\n    })\n\n    const todayWeek = computed((): CalendarTimestamp[] => {\n      const today = base.times.today\n      const start = base.getStartOfWeek(today)\n      const end = base.getEndOfWeek(today)\n\n      return createDayList(\n        start,\n        end,\n        today,\n        base.weekdaySkips.value,\n        base.parsedWeekdays.value.length,\n        base.parsedWeekdays.value.length\n      )\n    })\n\n    const monthFormatter = computed((): CalendarFormatter => {\n      if (props.monthFormat) {\n        // TODO: what happens when this is a string?\n        return props.monthFormat as CalendarFormatter\n      }\n\n      return createNativeLocaleFormatter(\n        base.locale.current.value,\n        (_tms, short) => ({ timeZone: 'UTC', month: short ? 'short' : 'long' })\n      )\n    })\n\n    function isOutside (day: CalendarTimestamp): boolean {\n      const dayIdentifier = getDayIdentifier(day)\n\n      return dayIdentifier < getDayIdentifier(base.parsedStart.value) ||\n             dayIdentifier > getDayIdentifier(base.parsedEnd.value)\n    }\n\n    function genHead () {\n      return (\n        <div class=\"v-calendar-weekly__head\" role=\"row\">\n          { genHeadDays() }\n        </div>\n      )\n    }\n\n    function genHeadDays () {\n      const header = todayWeek.value.map(genHeadDay)\n\n      if (props.showWeek) {\n        header.unshift(\n          <div class=\"v-calendar-weekly__head-weeknumber\" />\n        )\n      }\n\n      return header\n    }\n\n    function genHeadDay (day: CalendarTimestamp, index: number) {\n      const outside = isOutside(days.value[index])\n      const color = day.present ? props.color : undefined\n\n      return (\n        <div\n          { ...base.getColorProps({ text: color }) }\n          key={ day.date }\n          class={['v-calendar-weekly__head-weekday', base.getRelativeClasses(day, outside)]}\n          role=\"columnheader\"\n        >\n          { base.weekdayFormatter.value(day, props.shortWeekdays) }\n        </div>\n      )\n    }\n\n    function genWeeks () {\n      const daysValue = days.value\n      const weekDays = base.parsedWeekdays.value.length\n      const weeks: any[] = []\n\n      for (let i = 0; i < daysValue.length; i += weekDays) {\n        weeks.push(genWeek(daysValue.slice(i, i + weekDays), getWeekNumber(daysValue[i])))\n      }\n\n      return weeks\n    }\n\n    function genWeek (week: CalendarTimestamp[], weekNumber: number) {\n      const weekNodes = week.map((day, index) => genDay(day, index, week))\n\n      if (props.showWeek) {\n        weekNodes.unshift(genWeekNumber(weekNumber))\n      }\n\n      return (\n        <div\n          key={ week[0].date }\n          class=\"v-calendar-weekly__week\"\n          role=\"row\"\n        >\n          { weekNodes }\n        </div>\n      )\n    }\n\n    function getWeekNumber (determineDay: CalendarTimestamp) {\n      return base.getWeekNumber(determineDay)\n    }\n\n    function genWeekNumber (weekNumber: number) {\n      return (\n        <div class=\"v-calendar-weekly__weeknumber\">\n          <small>{ String(weekNumber) }</small>\n        </div>\n      )\n    }\n\n    function genDay (day: CalendarTimestamp, index: number, week: CalendarTimestamp[]) {\n      const outside = isOutside(day)\n      const events = getPrefixedEventHandlers(attrs, ':day', nativeEvent => {\n        return { nativeEvent, ...day }\n      })\n\n      return (\n        <div\n          key={ day.date }\n          class={['v-calendar-weekly__day', base.getRelativeClasses(day, outside)]}\n          role=\"cell\"\n          { ...events }\n        >\n          { genDayLabel(day) }\n          { slots.day?.({ outside, index, week, ...day }) }\n        </div>\n      )\n    }\n\n    function genDayLabel (day: CalendarTimestamp) {\n      return (\n        <div class=\"v-calendar-weekly__day-label\">\n          { slots['day-label']?.(day) ?? genDayLabelButton(day) }\n        </div>\n      )\n    }\n\n    function genDayLabelButton (day: CalendarTimestamp) {\n      const hasMonth = day.day === 1 && props.showMonthOnFirst\n      const events = getPrefixedEventHandlers(attrs, ':date', nativeEvent => ({ nativeEvent, ...day }))\n\n      return (\n        <VIconBtn\n          active={ day.present }\n          activeColor={ props.color }\n          variant=\"outlined\"\n          baseVariant=\"text\"\n          onUpdate:active={ noop }\n          { ...events }\n        >\n          { hasMonth\n            ? monthFormatter.value(day, props.shortMonths) + ' ' + base.dayFormatter.value(day, false)\n            : base.dayFormatter.value(day, false)\n          }\n        </VIconBtn>\n      )\n    }\n\n    useRender(() => (\n      <div\n        class={['v-calendar-weekly', theme.themeClasses.value]}\n        onDragstart={ (e: MouseEvent) => e.preventDefault() }\n      >\n        { !props.hideHeader ? genHead() : undefined }\n        { genWeeks() }\n      </div>\n    ))\n\n    return {\n      ...base,\n      days,\n      todayWeek,\n      monthFormatter,\n      isOutside,\n    }\n  },\n})\n\nexport type VCalendarWeekly = InstanceType<typeof VCalendarWeekly>\n","// Types\nimport type { CalendarEventParsed, CalendarEventVisual, CalendarTimestamp } from '../types'\nimport { getTimestampIdentifier } from '../util/timestamp'\n\nconst MILLIS_IN_DAY = 86400000\n\nexport type GetRange = (event: CalendarEventParsed) => [number, number]\n\nexport function getVisuals (events: CalendarEventParsed[], minStart = 0): CalendarEventVisual[] {\n  const visuals = events.map(event => ({\n    event,\n    columnCount: 0,\n    column: 0,\n    left: 0,\n    width: 100,\n  }))\n\n  visuals.sort((a, b) => {\n    return (\n      Math.max(minStart, a.event.startTimestampIdentifier) - Math.max(minStart, b.event.startTimestampIdentifier)\n    ) || (b.event.endTimestampIdentifier - a.event.endTimestampIdentifier)\n  })\n\n  return visuals\n}\n\nexport interface ColumnGroup {\n  start: number\n  end: number\n  visuals: CalendarEventVisual[]\n}\n\nexport function hasOverlap (s0: number, e0: number, s1: number, e1: number, exclude = true): boolean {\n  return exclude ? !(s0 >= e1 || e0 <= s1) : !(s0 > e1 || e0 < s1)\n}\n\nexport function setColumnCount (groups: ColumnGroup[]) {\n  groups.forEach(group => {\n    group.visuals.forEach(groupVisual => {\n      groupVisual.columnCount = groups.length\n    })\n  })\n}\n\nexport function getRange (event: CalendarEventParsed): [number, number] {\n  return [event.startTimestampIdentifier, event.endTimestampIdentifier]\n}\n\nexport function getDayRange (event: CalendarEventParsed): [number, number] {\n  return [event.startIdentifier, event.endIdentifier]\n}\n\nexport function getNormalizedRange (event: CalendarEventParsed, dayStart: number): [number, number] {\n  return [Math.max(dayStart, event.startTimestampIdentifier), Math.min(dayStart + MILLIS_IN_DAY, event.endTimestampIdentifier)]\n}\n\nexport function getOpenGroup (groups: ColumnGroup[], start: number, end: number, timed: boolean) {\n  for (let i = 0; i < groups.length; i++) {\n    const group = groups[i]\n    let intersected = false\n\n    if (hasOverlap(start, end, group.start, group.end, timed)) {\n      for (let k = 0; k < group.visuals.length; k++) {\n        const groupVisual = group.visuals[k]\n        const [groupStart, groupEnd] = timed ? getRange(groupVisual.event) : getDayRange(groupVisual.event)\n\n        if (hasOverlap(start, end, groupStart, groupEnd, timed)) {\n          intersected = true\n          break\n        }\n      }\n    }\n\n    if (!intersected) {\n      return i\n    }\n  }\n\n  return -1\n}\n\nexport function getOverlapGroupHandler (firstWeekday: number) {\n  const handler = {\n    groups: [] as ColumnGroup[],\n    min: -1,\n    max: -1,\n    reset: () => {\n      handler.groups = []\n      handler.min = handler.max = -1\n    },\n    getVisuals: (day: CalendarTimestamp, dayEvents: CalendarEventParsed[], timed: boolean, reset = false) => {\n      if (day.weekday === firstWeekday || reset) {\n        handler.reset()\n      }\n\n      const dayStart = getTimestampIdentifier(day)\n      const visuals = getVisuals(dayEvents, dayStart)\n\n      visuals.forEach(visual => {\n        const [start, end] = timed ? getRange(visual.event) : getDayRange(visual.event)\n\n        if (handler.groups.length > 0 && !hasOverlap(start, end, handler.min, handler.max, timed)) {\n          setColumnCount(handler.groups)\n          handler.reset()\n        }\n\n        let targetGroup = getOpenGroup(handler.groups, start, end, timed)\n\n        if (targetGroup === -1) {\n          targetGroup = handler.groups.length\n\n          handler.groups.push({ start, end, visuals: [] })\n        }\n\n        const target = handler.groups[targetGroup]\n        target.visuals.push(visual)\n        target.start = Math.min(target.start, start)\n        target.end = Math.max(target.end, end)\n\n        visual.column = targetGroup\n\n        if (handler.min === -1) {\n          handler.min = start\n          handler.max = end\n        } else {\n          handler.min = Math.min(handler.min, start)\n          handler.max = Math.max(handler.max, end)\n        }\n      })\n\n      setColumnCount(handler.groups)\n\n      if (timed) {\n        handler.reset()\n      }\n\n      return visuals\n    },\n  }\n\n  return handler\n}\n","// Types\nimport { getOverlapGroupHandler } from './common'\nimport type { CalendarEventOverlapMode } from '../types'\n\nconst FULL_WIDTH = 100\n\nexport const column: CalendarEventOverlapMode = (events, firstWeekday, overlapThreshold) => {\n  const handler = getOverlapGroupHandler(firstWeekday)\n\n  return (day, dayEvents, timed, reset) => {\n    const visuals = handler.getVisuals(day, dayEvents, timed, reset)\n\n    if (timed) {\n      visuals.forEach(visual => {\n        visual.left = visual.column * FULL_WIDTH / visual.columnCount\n        visual.width = FULL_WIDTH / visual.columnCount\n      })\n    }\n\n    return visuals\n  }\n}\n","// Types\nimport { getNormalizedRange, getOverlapGroupHandler, getVisuals, hasOverlap } from './common'\nimport type { CalendarEventOverlapMode, CalendarEventVisual } from '../types'\nimport { getTimestampIdentifier } from '../util/timestamp'\n\ninterface Group {\n  start: number\n  end: number\n  visuals: CalendarEventVisual[]\n}\n\ninterface Node {\n  parent: Node | null\n  sibling: boolean\n  index: number\n  visual: CalendarEventVisual\n  start: number\n  end: number\n  children: Node[]\n}\n\nconst FULL_WIDTH = 100\n\nconst DEFAULT_OFFSET = 5\n\nconst WIDTH_MULTIPLIER = 1.7\n\n/**\n * Variation of column mode where events can be stacked. The priority of this\n * mode is to stack events together taking up the least amount of space while\n * trying to ensure the content of the event is always visible as well as its\n * start and end. A sibling column has intersecting event content and must be\n * placed beside each other. Non-sibling columns are offset by 5% from the\n * previous column. The width is scaled by 1.7 so the events overlap and\n * whitespace is reduced. If there is a hole in columns the event width is\n * scaled up so it intersects with the next column. The columns have equal\n * width in the space they are given. If the event doesn't have any to the\n * right of it that intersect with its content, its right side is extended\n * to the right side.\n */\n\nexport const stack: CalendarEventOverlapMode = (events, firstWeekday, overlapThreshold) => {\n  const handler = getOverlapGroupHandler(firstWeekday)\n\n  // eslint-disable-next-line max-statements\n  return (day, dayEvents, timed, reset) => {\n    if (!timed) {\n      return handler.getVisuals(day, dayEvents, timed, reset)\n    }\n\n    const dayStart = getTimestampIdentifier(day)\n    const visuals = getVisuals(dayEvents, dayStart)\n    const groups = getGroups(visuals, dayStart)\n\n    for (const group of groups) {\n      const nodes: Node[] = []\n\n      for (const visual of group.visuals) {\n        const child = getNode(visual, dayStart)\n        const index = getNextIndex(child, nodes)\n\n        if (index === false) {\n          const parent = getParent(child, nodes)\n          if (parent) {\n            child.parent = parent\n            child.sibling = hasOverlap(child.start, child.end, parent.start, addTime(parent.start, overlapThreshold))\n            child.index = parent.index + 1\n            parent.children.push(child)\n          }\n        } else {\n          const [parent] = getOverlappingRange(child, nodes, index - 1, index - 1)\n          const children = getOverlappingRange(child, nodes, index + 1, index + nodes.length, true)\n\n          child.children = children\n          child.index = index\n\n          if (parent) {\n            child.parent = parent\n            child.sibling = hasOverlap(child.start, child.end, parent.start, addTime(parent.start, overlapThreshold))\n            parent.children.push(child)\n          }\n\n          for (const grand of children) {\n            if (grand.parent === parent) {\n              grand.parent = child\n            }\n\n            const grandNext = grand.index - child.index <= 1\n            if (grandNext && child.sibling &&\n              hasOverlap(child.start, addTime(child.start, overlapThreshold), grand.start, grand.end)) {\n              grand.sibling = true\n            }\n          }\n        }\n\n        nodes.push(child)\n      }\n\n      calculateBounds(nodes, overlapThreshold)\n    }\n\n    visuals.sort((a, b) => (a.left - b.left) || (a.event.startTimestampIdentifier - b.event.startTimestampIdentifier))\n\n    return visuals\n  }\n}\n\nfunction calculateBounds (nodes: Node[], overlapThreshold: number) {\n  for (const node of nodes) {\n    const { visual, parent } = node\n    const columns = getMaxChildIndex(node) + 1\n    const spaceLeft = parent ? parent.visual.left : 0\n    const spaceWidth = FULL_WIDTH - spaceLeft\n    const offset = Math.min(DEFAULT_OFFSET, FULL_WIDTH / columns)\n    const columnWidthMultiplier = getColumnWidthMultiplier(node, nodes)\n    const columnOffset = spaceWidth / (columns - node.index + 1)\n    const columnWidth = spaceWidth / (columns - node.index + (node.sibling ? 1 : 0)) * columnWidthMultiplier\n\n    if (parent) {\n      visual.left = node.sibling\n        ? spaceLeft + columnOffset\n        : spaceLeft + offset\n    }\n\n    visual.width = hasFullWidth(node, nodes, overlapThreshold)\n      ? FULL_WIDTH - visual.left\n      : Math.min(FULL_WIDTH - visual.left, columnWidth * WIDTH_MULTIPLIER)\n  }\n}\n\nfunction getColumnWidthMultiplier (node: Node, nodes: Node[]): number {\n  if (!node.children.length) {\n    return 1\n  }\n\n  const maxColumn = node.index + nodes.length\n  const minColumn = node.children.reduce((min, c) => Math.min(min, c.index), maxColumn)\n\n  return minColumn - node.index\n}\n\nfunction getOverlappingIndices (node: Node, nodes: Node[]): number[] {\n  const indices: number[] = []\n  for (const other of nodes) {\n    if (hasOverlap(node.start, node.end, other.start, other.end)) {\n      indices.push(other.index)\n    }\n  }\n  return indices\n}\n\nfunction getNextIndex (node: Node, nodes: Node[]): number | false {\n  const indices = getOverlappingIndices(node, nodes)\n  indices.sort()\n\n  for (let i = 0; i < indices.length; i++) {\n    if (i < indices[i]) {\n      return i\n    }\n  }\n  return false\n}\n\nfunction getOverlappingRange (node: Node, nodes: Node[], indexMin: number, indexMax: number, returnFirstColumn = false): Node[] {\n  const overlapping: Node[] = []\n  for (const other of nodes) {\n    if (other.index >= indexMin && other.index <= indexMax && hasOverlap(node.start, node.end, other.start, other.end)) {\n      overlapping.push(other)\n    }\n  }\n  if (returnFirstColumn && overlapping.length > 0) {\n    const first = overlapping.reduce((min, n) => Math.min(min, n.index), overlapping[0].index)\n    return overlapping.filter(n => n.index === first)\n  }\n  return overlapping\n}\n\nfunction getParent (node: Node, nodes: Node[]): Node | null {\n  let parent: Node | null = null\n  for (const other of nodes) {\n    if (hasOverlap(node.start, node.end, other.start, other.end) && (parent === null || other.index > parent.index)) {\n      parent = other\n    }\n  }\n  return parent\n}\n\nfunction hasFullWidth (node: Node, nodes: Node[], overlapThreshold: number): boolean {\n  for (const other of nodes) {\n    if (other !== node &&\n      other.index > node.index &&\n      hasOverlap(node.start, addTime(node.start, overlapThreshold), other.start, other.end)) {\n      return false\n    }\n  }\n\n  return true\n}\n\nfunction getGroups (visuals: CalendarEventVisual[], dayStart: number): Group[] {\n  const groups: Group[] = []\n\n  for (const visual of visuals) {\n    const [start, end] = getNormalizedRange(visual.event, dayStart)\n    let added = false\n\n    for (const group of groups) {\n      if (hasOverlap(start, end, group.start, group.end)) {\n        group.visuals.push(visual)\n        group.end = Math.max(group.end, end)\n        added = true\n        break\n      }\n    }\n\n    if (!added) {\n      groups.push({ start, end, visuals: [visual] })\n    }\n  }\n\n  return groups\n}\n\nfunction getNode (visual: CalendarEventVisual, dayStart: number): Node {\n  const [start, end] = getNormalizedRange(visual.event, dayStart)\n\n  return {\n    parent: null,\n    sibling: true,\n    index: 0,\n    visual,\n    start,\n    end,\n    children: [],\n  }\n}\n\nfunction getMaxChildIndex (node: Node): number {\n  let max = node.index\n  for (const child of node.children) {\n    const childMax = getMaxChildIndex(child)\n    if (childMax > max) {\n      max = childMax\n    }\n  }\n  return max\n}\n\nfunction addTime (identifier: number, minutes: number): number {\n  const removeMinutes = identifier % 100\n  const totalMinutes = removeMinutes + minutes\n  const addHours = Math.floor(totalMinutes / 60)\n  const addMinutes = totalMinutes % 60\n\n  return identifier - removeMinutes + addHours * 100 + addMinutes\n}\n","// Types\nimport { column } from './column'\nimport { stack } from './stack'\nimport type { CalendarEventOverlapMode } from '../types'\n\nexport const CalendarEventOverlapModes: Record<string, CalendarEventOverlapMode> = {\n  stack,\n  column,\n}\n","import {\n  copyTimestamp,\n  getDayIdentifier,\n  getTimestampIdentifier,\n  isTimedless,\n  nextMinutes,\n  parseTimestamp,\n  updateHasTime,\n} from './timestamp'\n\n// Types\nimport type { CalendarEvent, CalendarEventParsed, CalendarTimestamp } from '../types'\n\nexport function parseEvent (\n  input: CalendarEvent,\n  index: number,\n  startProperty: string,\n  endProperty: string,\n  timed = false,\n  category: string | false = false,\n): CalendarEventParsed {\n  const startInput = input[startProperty]\n  const endInput = input[endProperty]\n  const startParsed: CalendarTimestamp = parseTimestamp(startInput, true)\n  const endParsed: CalendarTimestamp = (endInput ? parseTimestamp(endInput, true) : startParsed)\n  const start: CalendarTimestamp = isTimedless(startInput)\n    ? updateHasTime(startParsed, timed)\n    : startParsed\n  const end: CalendarTimestamp = isTimedless(endInput)\n    ? updateHasTime(endParsed, timed)\n    : endParsed\n  const startIdentifier: number = getDayIdentifier(start)\n  const startTimestampIdentifier: number = getTimestampIdentifier(start)\n  const endIdentifier: number = getDayIdentifier(end)\n  const endOffset: number = start.hasTime ? 0 : 2359\n  const endTimestampIdentifier: number = getTimestampIdentifier(end) + endOffset\n  const allDay = !start.hasTime\n\n  return { input, start, startIdentifier, startTimestampIdentifier, end, endIdentifier, endTimestampIdentifier, allDay, index, category }\n}\n\nexport function isEventOn (event: CalendarEventParsed, dayIdentifier: number): boolean {\n  return dayIdentifier >= event.startIdentifier && dayIdentifier <= event.endIdentifier\n}\n\nexport function isEventOnDay (\n  event: CalendarEventParsed,\n  day: CalendarTimestamp,\n  inRange?: [number, number]\n): boolean {\n  if (inRange) {\n    const dayStart = nextMinutes(copyTimestamp(day), inRange[0])\n    const dayEnd = nextMinutes(copyTimestamp(day), inRange[1])\n\n    const starts = event.startTimestampIdentifier < getTimestampIdentifier(dayEnd)\n    const ends = event.endTimestampIdentifier > getTimestampIdentifier(dayStart)\n\n    return starts && ends\n  }\n\n  return isEventOn(event, getDayIdentifier(day))\n}\n\nexport function isEventHiddenOn (event: CalendarEventParsed, day: CalendarTimestamp): boolean {\n  return event.end.time === '00:00' && event.end.date === day.date && event.start.date !== day.date\n}\n\nexport function isEventStart (\n  event: CalendarEventParsed,\n  day: CalendarTimestamp,\n  dayIdentifier: number,\n  firstWeekday: number\n): boolean {\n  return dayIdentifier === event.startIdentifier || (firstWeekday === day.weekday && isEventOn(event, dayIdentifier))\n}\n\nexport function isEventOverlapping (\n  event: CalendarEventParsed,\n  startIdentifier: number,\n  endIdentifier: number\n): boolean {\n  return startIdentifier <= event.endIdentifier && endIdentifier >= event.startIdentifier\n}\n","// Styles\nimport './calendarWithEvents.sass'\n\n// Composables\nimport { useCalendarBase } from './calendarBase'\n\n// Directives\nimport vRipple from '@/directives/ripple'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { CalendarEventOverlapModes } from '../modes'\nimport {\n  isEventHiddenOn,\n  isEventOn,\n  isEventOnDay,\n  isEventOverlapping,\n  isEventStart,\n  parseEvent,\n} from '../util/events'\nimport { diffMinutes, getDayIdentifier } from '../util/timestamp'\nimport { getPrefixedEventHandlers, isFunction, isObject, isString, propsFactory } from '@/util'\n\n// Types\nimport type { PropType, VNode } from 'vue'\nimport type { CalendarBaseProps } from './calendarBase'\nimport type {\n  CalendarCategory,\n  CalendarDayBodySlotScope,\n  CalendarDaySlotScope,\n  CalendarEvent,\n  CalendarEventCategoryFunction,\n  CalendarEventColorFunction,\n  CalendarEventNameFunction,\n  CalendarEventOverlapMode,\n  CalendarEventParsed,\n  CalendarEventTimedFunction,\n  CalendarEventVisual,\n  CalendarTimestamp,\n} from '../types'\n\n// Constants\nconst WIDTH_FULL = 100\nconst WIDTH_START = 95\n// const MINUTES_IN_DAY = 1440\n\ntype VEventGetter<D> = (day: D) => CalendarEventParsed[]\ntype VEventVisualToNode<D> = (visual: CalendarEventVisual, day: D) => VNode | false\ntype VEventsToNodes = <D extends CalendarDaySlotScope>(\n  day: D,\n  getter: VEventGetter<D>,\n  mapper: VEventVisualToNode<D>,\n  timed: boolean) => VNode[] | undefined\n\ntype VDailyEventsMap = {\n  [date: string]: {\n    parent: HTMLElement\n    more: HTMLElement | null\n    events: HTMLElement[]\n  }\n}\n\nexport interface VEventScopeInput {\n  eventParsed: CalendarEventParsed\n  day: CalendarDaySlotScope\n  start: boolean\n  end: boolean\n  timed: boolean\n}\n\n// Prevent import from being erased\nvoid vRipple\n\nexport const makeCalendarWithEventsProps = propsFactory({\n  events: {\n    type: Array as PropType<CalendarEvent[]>,\n    default: () => [],\n  },\n  eventStart: {\n    type: String,\n    default: 'start',\n  },\n  eventEnd: {\n    type: String,\n    default: 'end',\n  },\n  eventTimed: {\n    type: [String, Function] as PropType<string | CalendarEventTimedFunction>,\n    default: 'timed',\n  },\n  eventCategory: {\n    type: [String, Function] as PropType<string | CalendarEventCategoryFunction>,\n    default: 'category',\n  },\n  eventHeight: {\n    type: Number,\n    default: 20,\n  },\n  eventColor: {\n    type: [String, Function] as PropType<string | CalendarEventColorFunction>,\n    default: 'primary',\n  },\n  eventTextColor: {\n    type: [String, Function] as PropType<string | CalendarEventColorFunction>,\n  },\n  eventName: {\n    type: [String, Function] as PropType<string | CalendarEventNameFunction>,\n    default: 'name',\n  },\n  eventOverlapThreshold: {\n    type: [String, Number],\n    default: 60,\n  },\n  eventOverlapMode: {\n    type: [String, Function] as PropType<'stack' | 'column' | CalendarEventOverlapMode>,\n    default: 'stack',\n    validate: (mode: any) => mode in CalendarEventOverlapModes || isFunction(mode),\n  },\n  eventMore: {\n    type: Boolean,\n    default: true,\n  },\n  eventMoreText: {\n    type: String,\n    default: '$vuetify.calendar.moreEvents',\n  },\n  eventRipple: {\n    type: [Boolean, Object],\n    default: null,\n  },\n  eventMarginBottom: {\n    type: Number,\n    default: 1,\n  },\n}, 'VCalendar-events')\n\ninterface CalendarWithEventsProps extends CalendarBaseProps {\n  events: CalendarEvent[]\n  eventStart: string\n  eventEnd: string\n  eventTimed: string | CalendarEventTimedFunction\n  eventCategory: string | CalendarEventCategoryFunction\n  eventHeight: number\n  eventColor: string | CalendarEventColorFunction\n  eventTextColor: string | CalendarEventColorFunction | undefined\n  eventName: string | CalendarEventNameFunction\n  eventOverlapThreshold: string | number\n  eventOverlapMode: string | CalendarEventOverlapMode\n  eventMore: boolean\n  eventMoreText: string\n  eventRipple: boolean | object | null | undefined\n  eventMarginBottom: number\n  type: 'month' | 'week' | 'day' | '4day' | 'custom-weekly' | 'custom-daily' | 'category'\n}\n\nexport function useCalendarWithEvents (props: CalendarWithEventsProps, slots: any, attrs: any) {\n  const base = useCalendarBase(props)\n\n  const noEvents = computed((): boolean => {\n    return !Array.isArray(props.events) || props.events.length === 0\n  })\n\n  const categoryMode = computed((): boolean => {\n    return props.type === 'category'\n  })\n\n  const eventTimedFunction = computed((): CalendarEventTimedFunction => {\n    return isFunction(props.eventTimed)\n      ? props.eventTimed\n      : event => !!event[props.eventTimed as string]\n  })\n\n  const eventCategoryFunction = computed((): CalendarEventCategoryFunction => {\n    return isFunction(props.eventCategory)\n      ? props.eventCategory\n      : event => event[props.eventCategory as string]\n  })\n\n  const parsedEvents = computed((): CalendarEventParsed[] => {\n    if (!props.events) return []\n    return props.events.map((event, index) => parseEvent(\n      event,\n      index,\n      props.eventStart || '',\n      props.eventEnd || '',\n      eventTimedFunction.value(event),\n      categoryMode.value ? eventCategoryFunction.value(event) : false,\n    ))\n  })\n\n  const parsedEventOverlapThreshold = computed((): number => {\n    return parseInt(String(props.eventOverlapThreshold || 0))\n  })\n\n  const eventTextColorFunction = computed((): CalendarEventColorFunction => {\n    return isFunction(props.eventTextColor)\n      ? props.eventTextColor\n      : () => props.eventTextColor as string\n  })\n\n  const eventNameFunction = computed((): CalendarEventNameFunction => {\n    return isFunction(props.eventName)\n      ? props.eventName\n      : (event, timedEvent) => event.input[props.eventName as string] as string || ''\n  })\n\n  const eventModeFunction = computed((): CalendarEventOverlapMode => {\n    return isFunction(props.eventOverlapMode)\n      ? props.eventOverlapMode\n      : CalendarEventOverlapModes[props.eventOverlapMode as keyof typeof CalendarEventOverlapModes]\n  })\n\n  const eventWeekdays = computed((): number[] => {\n    return base.effectiveWeekdays.value\n  })\n\n  function eventColorFunction (e: CalendarEvent): string | undefined {\n    return isFunction(props.eventColor)\n      ? props.eventColor(e)\n      : e.color || props.eventColor\n  }\n\n  const eventsRef = ref<HTMLElement[]>([])\n\n  function updateEventVisibility () {\n    if (noEvents.value || !props.eventMore) {\n      return\n    }\n\n    const eventHeight = props.eventHeight || 0\n    const eventsMap = getEventsMap()\n\n    for (const date in eventsMap) {\n      const { parent, events, more } = eventsMap[date]\n      if (!more) {\n        break\n      }\n\n      const parentBounds = parent.getBoundingClientRect()\n      const last = events.length - 1\n      const eventsSorted = events.map(event => ({\n        event,\n        bottom: event.getBoundingClientRect().bottom,\n      })).sort((a, b) => a.bottom - b.bottom)\n      let hidden = 0\n\n      for (let i = 0; i <= last; i++) {\n        const bottom = eventsSorted[i].bottom\n        const hide = i === last\n          ? (bottom > parentBounds.bottom)\n          : (bottom + eventHeight > parentBounds.bottom)\n\n        if (hide) {\n          eventsSorted[i].event.style.display = 'none'\n          hidden++\n        }\n      }\n\n      // TODO: avoid direct DOM manipulation\n      if (hidden) {\n        more.style.display = ''\n        more.innerHTML = base.locale.t(props.eventMoreText, hidden)\n      } else {\n        more.style.display = 'none'\n      }\n    }\n  }\n\n  function getEventsMap (): VDailyEventsMap {\n    const eventsMap: VDailyEventsMap = {}\n    const elements = eventsRef.value\n\n    if (!elements || !elements.length) {\n      return eventsMap\n    }\n\n    elements.forEach(el => {\n      const date = el.getAttribute('data-date')\n      if (el.parentElement && date) {\n        if (!(date in eventsMap)) {\n          eventsMap[date] = {\n            parent: el.parentElement,\n            more: null,\n            events: [],\n          }\n        }\n        if (el.getAttribute('data-more')) {\n          eventsMap[date].more = el\n        } else {\n          eventsMap[date].events.push(el)\n          el.style.display = ''\n        }\n      }\n    })\n\n    return eventsMap\n  }\n\n  function genDayEvent ({ event }: CalendarEventVisual, day: CalendarDaySlotScope): VNode {\n    const eventHeight = props.eventHeight || 0\n    const eventMarginBottom = props.eventMarginBottom || 0\n    const dayIdentifier = getDayIdentifier(day)\n    const week = day.week\n    const start = dayIdentifier === event.startIdentifier\n    let end = dayIdentifier === event.endIdentifier\n    let width = WIDTH_START\n\n    if (!categoryMode.value) {\n      for (let i = day.index + 1; i < week.length; i++) {\n        const weekdayIdentifier = getDayIdentifier(week[i])\n        if (event.endIdentifier >= weekdayIdentifier) {\n          width += WIDTH_FULL\n          end = end || weekdayIdentifier === event.endIdentifier\n        } else {\n          end = true\n          break\n        }\n      }\n    }\n    const scope = { eventParsed: event, day, start, end, timed: false }\n\n    return genEvent(event, scope, false, {\n      class: [\n        'v-event',\n        { 'v-event-start': start, 'v-event-end': end },\n      ],\n      style: {\n        height: `${eventHeight}px`,\n        width: `calc(${width}% + ${(width - WIDTH_START) / WIDTH_FULL}px)`,\n        marginBottom: `${eventMarginBottom}px`,\n      },\n      'data-date': day.date,\n    })\n  }\n\n  function genTimedEvent ({ event, left, width }: CalendarEventVisual, day: CalendarDayBodySlotScope): VNode | false {\n    const startDelta = day.timeDelta(event.start, day)\n    const endDelta = day.timeDelta(event.end, day)\n    if (\n      endDelta === false ||\n      startDelta === false ||\n      endDelta < 0 ||\n      startDelta >= 1 ||\n      isEventHiddenOn(event, day)\n    ) {\n      return false\n    }\n\n    const dayIdentifier = getDayIdentifier(day)\n    const start = event.startIdentifier >= dayIdentifier\n    const end = event.endIdentifier > dayIdentifier\n    const top = day.timeToY(event.start, day)\n    const bottom = day.timeToY(event.end, day)\n    const height = Math.max(props.eventHeight || 0, bottom - top)\n    const scope = { eventParsed: event, day, start, end, timed: true }\n\n    return genEvent(event, scope, true, {\n      class: 'v-event-timed',\n      style: {\n        top: `${top}px`,\n        height: `${height}px`,\n        left: `${left}%`,\n        width: `${width}%`,\n      },\n    })\n  }\n\n  function genEvent (\n    event: CalendarEventParsed,\n    scopeInput: VEventScopeInput,\n    timedEvent: boolean,\n    data: Record<string, unknown>\n  ): VNode {\n    const slot = slots.event\n    const text = eventTextColorFunction.value(event.input)\n    const background = eventColorFunction(event.input)\n    const overlapsNoon = event.start.hour < 12 && event.end.hour >= 12\n    const singline = diffMinutes(event.start, event.end) <= parsedEventOverlapThreshold.value\n\n    const formatTime = (withTime: CalendarTimestamp, ampm: boolean): string => {\n      const hour12 = props.format === 'ampm' ? true\n        : props.format === '24hr' ? false\n        : undefined\n\n      const formatter = base.getFormatter({\n        timeZone: 'UTC',\n        hour: props.format === '24hr' ? '2-digit' : 'numeric',\n        minute: withTime.minute > 0 ? 'numeric' : undefined,\n        hour12,\n      })\n\n      return formatter(withTime, true)\n    }\n\n    const timeSummary = () => formatTime(event.start, overlapsNoon) + ' - ' + formatTime(event.end, true)\n\n    const eventSummary = () => {\n      const name = eventNameFunction.value(event, timedEvent)\n      if (event.start.hasTime) {\n        if (timedEvent) {\n          const time = timeSummary()\n          const delimiter = singline ? ', ' : <br />\n\n          return (\n            <span class=\"v-event-summary\">\n              <strong>{ name }</strong>\n              { delimiter }\n              { time }\n            </span>\n          )\n        } else {\n          const time = formatTime(event.start, true)\n\n          return (\n            <span class=\"v-event-summary\">\n              <strong>{ time }</strong> { name }\n            </span>\n          )\n        }\n      }\n\n      return <span class=\"v-event-summary\">{ name }</span>\n    }\n\n    const scope = {\n      ...scopeInput,\n      event: event.input,\n      outside: scopeInput.day.outside,\n      singline,\n      overlapsNoon,\n      formatTime,\n      timeSummary,\n      eventSummary,\n    }\n\n    const events = getPrefixedEventHandlers(attrs, ':event', (nativeEvent: Event) => ({ ...scope, nativeEvent }))\n\n    return (\n      <div\n        { ...base.getColorProps({ text, background }) }\n        { ...events }\n        { ...data }\n        ref_for\n        ref={ eventsRef }\n        v-ripple={ props.eventRipple ?? true }\n      >\n        { slot?.(scope) ?? genName(eventSummary) }\n      </div>\n    )\n  }\n\n  function genName (eventSummary: () => string | VNode): VNode {\n    return (\n      <div class=\"pl-1\">\n        { eventSummary() }\n      </div>\n    )\n  }\n\n  function genPlaceholder (day: CalendarTimestamp): VNode {\n    const height = (props.eventHeight || 0) + (props.eventMarginBottom || 0)\n    return (\n      <div\n        style={{ height: `${height}px` }}\n        data-date={ day.date }\n        ref_for\n        ref={ eventsRef }\n      />\n    )\n  }\n\n  function genMore (day: CalendarDaySlotScope): VNode {\n    const eventHeight = props.eventHeight || 0\n    const eventMarginBottom = props.eventMarginBottom || 0\n    const events = getPrefixedEventHandlers(attrs, ':more', (nativeEvent: Event) => ({ nativeEvent, ...day }))\n\n    return (\n      <div\n        class={['v-event-more pl-1', { 'v-outside': day.outside }]}\n        data-date={ day.date }\n        data-more=\"1\"\n        style={{\n          display: 'none',\n          height: `${eventHeight}px`,\n          marginBottom: `${eventMarginBottom}px`,\n        }}\n        ref_for\n        ref={ eventsRef }\n        v-ripple={ props.eventRipple ?? true }\n        { ...events }\n      />\n    )\n  }\n\n  function getVisibleEvents (): CalendarEventParsed[] {\n    const days = base.days.value\n    const start = getDayIdentifier(days[0])\n    const end = getDayIdentifier(days[days.length - 1])\n\n    return parsedEvents.value.filter(\n      event => isEventOverlapping(event, start, end)\n    )\n  }\n\n  function isEventForCategory (event: CalendarEventParsed, category: CalendarCategory): boolean {\n    return !categoryMode.value ||\n      (isObject(category) && category.categoryName &&\n      category.categoryName === event.category) ||\n      (isString(event.category) && category === event.category) ||\n      (!isString(event.category) && category === null)\n  }\n\n  function getEventsForDay (day: CalendarDaySlotScope): CalendarEventParsed[] {\n    const identifier = getDayIdentifier(day)\n    const firstWeekday = eventWeekdays.value[0]\n\n    return parsedEvents.value.filter(\n      event => isEventStart(event, day, identifier, firstWeekday)\n    )\n  }\n\n  function getEventsForDayAll (day: CalendarDaySlotScope): CalendarEventParsed[] {\n    const identifier = getDayIdentifier(day)\n    const firstWeekday = eventWeekdays.value[0]\n\n    return parsedEvents.value.filter(\n      event => event.allDay &&\n        (categoryMode.value ? isEventOn(event, identifier) : isEventStart(event, day, identifier, firstWeekday)) &&\n        isEventForCategory(event, day.category)\n    )\n  }\n\n  function getEventsForDayTimed (day: CalendarDaySlotScope): CalendarEventParsed[] {\n    return parsedEvents.value.filter(\n      event => !event.allDay &&\n        isEventOnDay(event, day, day.intervalRange) &&\n        isEventForCategory(event, day.category)\n    )\n  }\n\n  function getScopedSlots () {\n    if (noEvents.value) {\n      return { ...slots }\n    }\n\n    const mode = eventModeFunction.value(\n      parsedEvents.value,\n      eventWeekdays.value[0],\n      parsedEventOverlapThreshold.value\n    )\n\n    const isNode = (input: VNode | false): input is VNode => !!input\n    const getSlotChildren: VEventsToNodes = (day, getter, mapper, timed) => {\n      const events = getter(day)\n      const visuals = mode(day, events, timed, categoryMode.value)\n\n      if (timed) {\n        return visuals.map(visual => mapper(visual, day)).filter(isNode)\n      }\n\n      const children: VNode[] = []\n\n      visuals.forEach((visual, index) => {\n        while (children.length < visual.column) {\n          children.push(genPlaceholder(day) as VNode)\n        }\n\n        const mapped = mapper(visual, day)\n        if (mapped) {\n          children.push(mapped)\n        }\n      })\n\n      return children\n    }\n\n    return {\n      ...slots,\n      day: (day: CalendarDaySlotScope) => {\n        let children = getSlotChildren(day, getEventsForDay, genDayEvent, false)\n        if (children && children.length > 0 && props.eventMore) {\n          children.push(genMore(day) as VNode)\n        }\n        if (slots.day) {\n          const slot = slots.day(day)\n          if (slot) {\n            children = children ? children.concat(slot) : slot\n          }\n        }\n        return children\n      },\n      'day-header': (day: CalendarDaySlotScope) => {\n        let children = getSlotChildren(day, getEventsForDayAll, genDayEvent, false)\n\n        if (slots['day-header']) {\n          const slot = slots['day-header'](day)\n          if (slot) {\n            children = children ? children.concat(slot) : slot\n          }\n        }\n        return children\n      },\n      'day-body': (day: CalendarDayBodySlotScope) => {\n        const events = getSlotChildren(day, getEventsForDayTimed, genTimedEvent, true)\n        let children: VNode[] = [\n          <div class=\"v-event-timed-container\">{ events }</div>,\n        ]\n\n        if (slots['day-body']) {\n          const slot = slots['day-body'](day)\n          if (slot) {\n            children = children.concat(slot)\n          }\n        }\n        return children\n      },\n    }\n  }\n\n  return {\n    ...base,\n    noEvents,\n    parsedEvents,\n    parsedEventOverlapThreshold,\n    eventTimedFunction,\n    eventCategoryFunction,\n    eventTextColorFunction,\n    eventNameFunction,\n    eventModeFunction,\n    eventWeekdays,\n    categoryMode,\n    eventColorFunction,\n    eventsRef,\n    updateEventVisibility,\n    getEventsMap,\n    genDayEvent,\n    genTimedEvent,\n    genEvent,\n    genName,\n    genPlaceholder,\n    genMore,\n    getVisibleEvents,\n    isEventForCategory,\n    getEventsForDay,\n    getEventsForDayAll,\n    getEventsForDayTimed,\n    getScopedSlots,\n  }\n}\n","// Styles\nimport './VCalendarCategory.sass'\nimport './VCalendarDaily.sass'\nimport './VCalendarWeekly.sass'\n\n// Components\nimport { VCalendarCategory } from './VCalendarCategory'\nimport { VCalendarDaily } from './VCalendarDaily'\nimport { VCalendarWeekly } from './VCalendarWeekly'\n\n// Composables\nimport { makeCalendarBaseProps } from './composables/calendarBase'\nimport { makeCalendarWithEventsProps, useCalendarWithEvents } from './composables/calendarWithEvents'\nimport { makeCalendarWithIntervalsProps } from './composables/calendarWithIntervals'\nimport { makeIntervalHighlightProps } from './composables/intervalHighlight'\nimport { forwardRefs } from '@/composables/forwardRefs'\n\n// Directives\nimport vResize from '@/directives/resize'\n\n// Utilities\nimport { computed, onMounted, onUpdated, ref, watch } from 'vue'\nimport { getParsedCategories } from './util/parser'\nimport {\n  copyTimestamp,\n  DAY_MIN,\n  DAYS_IN_MONTH_MAX,\n  DAYS_IN_WEEK,\n  getEndOfMonth,\n  getStartOfMonth,\n  nextDay,\n  prevDay,\n  relativeDays,\n  timestampToDate,\n  updateFormatted,\n  updateRelative,\n  updateWeekday,\n  validateTimestamp,\n} from './util/timestamp'\nimport { genericComponent, isNumber, isObject, isString, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type {\n  CalendarCategory, CalendarCategoryTextFunction,\n  CalendarDayBodySlotScope,\n  CalendarDaySlotScope, CalendarEvent, CalendarEventParsed,\n  CalendarTimestamp,\n} from './types'\nimport type { EventProp, GenericProps, JSXComponent } from '@/util'\n\n// Types\ninterface VCalendarRenderProps {\n  start: CalendarTimestamp\n  end: CalendarTimestamp\n  component: JSXComponent & { filterProps: <T>(props: T) => Partial<T> }\n  maxDays: number\n  categories: CalendarCategory[]\n}\n\ninterface EventSlotScope {\n  event: CalendarEvent\n  outside: boolean\n  singline: boolean\n  overlapsNoon: boolean\n  formatTime: (withTime: CalendarTimestamp, ampm: boolean) => string\n  timeSummary: () => string\n  eventSummary: () => JSX.Element\n  eventParsed: CalendarEventParsed\n  day: CalendarDaySlotScope\n  start: boolean\n  end: boolean\n  timed: boolean\n}\n\ninterface DaySlotScope extends CalendarTimestamp {\n  outside: boolean\n  index: number\n  week: CalendarTimestamp[]\n}\n\ninterface DayHeaderSlotScope extends CalendarTimestamp {\n  index: number\n  week: CalendarTimestamp[]\n}\n\ninterface CalendarDayCategorySlotScope extends CalendarDayBodySlotScope {\n  category: CalendarCategory\n}\n\nexport const VCalendar = genericComponent<new (\n  props: {\n    [key: `on${Capitalize<string>}:date`]: EventProp<[Event, CalendarTimestamp]>\n    [key: `on${Capitalize<string>}:dayCategory`]: EventProp<[Event, CalendarDayCategorySlotScope]>\n    [key: `on${Capitalize<string>}:day`]: EventProp<[Event, CalendarDayBodySlotScope]>\n    [key: `on${Capitalize<string>}:event`]: EventProp<[Event, EventSlotScope]>\n    [key: `on${Capitalize<string>}:interval`]: EventProp<[Event, CalendarTimestamp]>\n    [key: `on${Capitalize<string>}:more`]: EventProp<[Event, CalendarDaySlotScope]>\n    [key: `on${Capitalize<string>}:timeCategory`]: EventProp<[Event, CalendarDayCategorySlotScope]>\n    [key: `on${Capitalize<string>}:time`]: EventProp<[Event, CalendarDayBodySlotScope]>\n  },\n  slots: {\n    'category': CalendarDayCategorySlotScope\n    'day': DaySlotScope\n    'day-body': CalendarDayBodySlotScope\n    'day-header': DayHeaderSlotScope\n    'day-label': CalendarTimestamp\n    'day-label-header': CalendarTimestamp\n    'day-month': CalendarTimestamp\n    'event': EventSlotScope\n    'interval': CalendarDayCategorySlotScope\n    'interval-header': never\n  },\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VCalendar',\n\n  directives: { vResize },\n\n  props: {\n    modelValue: {\n      type: [String, Number, Date] as PropType<string | number | Date>,\n      validate: validateTimestamp,\n    },\n    categoryDays: {\n      type: [Number, String],\n      default: 1,\n      validate: (x: any) => isFinite(parseInt(x)) && parseInt(x) > 0,\n    },\n    categories: {\n      type: [Array, String] as PropType<CalendarCategory[] | string>,\n      default: '',\n    },\n    categoryText: {\n      type: [String, Function] as PropType<string | CalendarCategoryTextFunction>,\n    },\n    categoryHideDynamic: {\n      type: Boolean,\n    },\n    categoryShowAll: {\n      type: Boolean,\n    },\n    categoryForInvalid: {\n      type: String,\n      default: '',\n    },\n\n    ...makeIntervalHighlightProps(),\n    ...makeCalendarBaseProps(),\n    ...makeCalendarWithEventsProps(),\n    ...makeCalendarWithIntervalsProps(),\n  },\n\n  setup (props, { slots, attrs, emit }) {\n    const root = ref<VCalendarWeekly | VCalendarDaily | VCalendarCategory>()\n    const base = useCalendarWithEvents(props, slots, attrs)\n\n    const lastStart = ref<CalendarTimestamp | null>(null)\n    const lastEnd = ref<CalendarTimestamp | null>(null)\n\n    const parsedCategoryDays = computed((): number => {\n      return parseInt(String(props.categoryDays)) || 1\n    })\n\n    const parsedCategories = computed((): CalendarCategory[] => {\n      return getParsedCategories(props.categories, props.categoryText)\n    })\n\n    const renderProps = computed((): VCalendarRenderProps => {\n      const around = base.parsedValue.value\n      let component: any = null\n      let maxDays = props.maxDays\n      let categories = parsedCategories.value\n      let start = around\n      let end = around\n\n      switch (props.type) {\n        case 'month':\n          component = VCalendarWeekly\n          start = getStartOfMonth(around)\n          end = getEndOfMonth(around)\n          break\n        case 'week':\n          component = VCalendarDaily\n          start = base.getStartOfWeek(around)\n          end = base.getEndOfWeek(around)\n          maxDays = 7\n          break\n        case 'day':\n          component = VCalendarDaily\n          maxDays = 1\n          break\n        case '4day':\n          component = VCalendarDaily\n          end = relativeDays(copyTimestamp(end), nextDay, 3)\n          updateFormatted(end)\n          maxDays = 4\n          break\n        case 'custom-weekly':\n          component = VCalendarWeekly\n          start = base.parsedStart.value || around\n          end = base.parsedEnd.value\n          break\n        case 'custom-daily':\n          component = VCalendarDaily\n          start = base.parsedStart.value || around\n          end = base.parsedEnd.value\n          break\n        case 'category':\n          const days = parsedCategoryDays.value\n\n          component = VCalendarCategory\n          end = relativeDays(copyTimestamp(end), nextDay, days)\n          updateFormatted(end)\n          maxDays = days\n\n          categories = getCategoryList(categories)\n          break\n        default:\n          const type = props.type satisfies never\n          throw new Error(`${type} is not a valid Calendar type`)\n      }\n\n      return { component, start, end, maxDays, categories }\n    })\n\n    const eventWeekdays = computed((): number[] => {\n      return base.effectiveWeekdays.value\n    })\n\n    const categoryMode = computed((): boolean => {\n      return props.type === 'category'\n    })\n\n    const monthLongFormatter = computed(() => {\n      return base.getFormatter({\n        timeZone: 'UTC', month: 'long',\n      })\n    })\n\n    const monthShortFormatter = computed(() => {\n      return base.getFormatter({\n        timeZone: 'UTC', month: 'short',\n      })\n    })\n\n    const title = computed((): string => {\n      const { start, end } = renderProps.value\n      const spanYears = start.year !== end.year\n      const spanMonths = spanYears || start.month !== end.month\n\n      if (spanYears) {\n        return monthShortFormatter.value(start, true) + ' ' + start.year + ' - ' + monthShortFormatter.value(end, true) + ' ' + end.year\n      }\n\n      if (spanMonths) {\n        return monthShortFormatter.value(start, true) + ' - ' + monthShortFormatter.value(end, true) + ' ' + end.year\n      } else {\n        return monthLongFormatter.value(start, false) + ' ' + start.year\n      }\n    })\n\n    function checkChange (): void {\n      const { start, end } = renderProps.value\n      if (!lastStart.value || !lastEnd.value ||\n        start.date !== lastStart.value.date ||\n        end.date !== lastEnd.value.date) {\n        lastStart.value = start\n        lastEnd.value = end\n        emit('change', { start, end })\n      }\n    }\n\n    function move (amount = 1): void {\n      const moved = copyTimestamp(base.parsedValue.value)\n      const forward = amount > 0\n      const mover = forward ? nextDay : prevDay\n      const limit = forward ? DAYS_IN_MONTH_MAX : DAY_MIN\n      let times = forward ? amount : -amount\n\n      while (--times >= 0) {\n        switch (props.type) {\n          case 'month':\n            moved.day = limit\n            mover(moved)\n            break\n          case 'week':\n            relativeDays(moved, mover, DAYS_IN_WEEK)\n            break\n          case 'day':\n            relativeDays(moved, mover, 1)\n            break\n          case '4day':\n            relativeDays(moved, mover, 4)\n            break\n          case 'category':\n            relativeDays(moved, mover, parsedCategoryDays.value)\n            break\n        }\n      }\n\n      updateWeekday(moved)\n      updateFormatted(moved)\n      updateRelative(moved, base.times.now)\n\n      if (props.modelValue instanceof Date) {\n        emit('update:modelValue', timestampToDate(moved))\n      } else if (isNumber(props.modelValue)) {\n        emit('update:modelValue', timestampToDate(moved).getTime())\n      } else {\n        emit('update:modelValue', moved.date)\n      }\n\n      emit('moved', moved)\n    }\n\n    function next (amount = 1): void {\n      move(amount)\n    }\n\n    function prev (amount = 1): void {\n      move(-amount)\n    }\n\n    function getCategoryList (categories: CalendarCategory[]): CalendarCategory[] {\n      if (!base.noEvents.value) {\n        const categoryMap: any = categories.reduce((map: any, category, index) => {\n          if (isObject(category) && category.categoryName) map[category.categoryName] = { index, count: 0 }\n          else if (isString(category)) map[category] = { index, count: 0 }\n          return map\n        }, {})\n\n        if (!props.categoryHideDynamic || !props.categoryShowAll) {\n          let categoryLength = categories.length\n\n          base.parsedEvents.value.forEach(ev => {\n            let category = ev.category\n\n            if (!isString(category)) {\n              category = props.categoryForInvalid\n            }\n\n            if (!category) {\n              return\n            }\n\n            if (category in categoryMap) {\n              categoryMap[category].count++\n            } else if (!props.categoryHideDynamic) {\n              categoryMap[category] = {\n                index: categoryLength++,\n                count: 1,\n              }\n            }\n          })\n        }\n\n        if (!props.categoryShowAll) {\n          for (const category in categoryMap) {\n            if (categoryMap[category].count === 0) {\n              delete categoryMap[category]\n            }\n          }\n        }\n\n        categories = categories.filter((category: CalendarCategory) => {\n          if (isObject(category) && category.categoryName) {\n            return categoryMap.hasOwnProperty(category.categoryName)\n          } else if (isString(category)) {\n            return categoryMap.hasOwnProperty(category)\n          }\n          return false\n        })\n      }\n      return categories\n    }\n\n    watch(renderProps, checkChange)\n\n    onMounted(() => {\n      base.updateEventVisibility()\n      checkChange()\n    })\n\n    onUpdated(() => {\n      window.requestAnimationFrame(base.updateEventVisibility)\n    })\n\n    useRender(() => {\n      const { start, end, maxDays, component: Component, categories } = renderProps.value\n      return (\n        <Component\n          ref={ root }\n          class={['v-calendar', { 'v-calendar-events': !base.noEvents.value }]}\n          v-resize_quiet={ base.updateEventVisibility }\n          role=\"grid\"\n          { ...Component.filterProps(props) }\n          start={ start.date }\n          end={ end.date }\n          maxDays={ maxDays }\n          weekdays={ base.effectiveWeekdays.value }\n          categories={ categories }\n          onClick:date={ (e: MouseEvent, day: CalendarTimestamp) => {\n            if (attrs['onUpdate:modelValue']) emit('update:modelValue', day.date)\n          }}\n          v-slots={ base.getScopedSlots() }\n        />\n      )\n    })\n\n    return forwardRefs({\n      ...base,\n      lastStart,\n      lastEnd,\n      parsedCategoryDays,\n      renderProps,\n      eventWeekdays,\n      categoryMode,\n      title,\n      monthLongFormatter,\n      monthShortFormatter,\n      parsedCategories,\n      checkChange,\n      move,\n      next,\n      prev,\n      getCategoryList,\n    }, root)\n  },\n})\n\nexport type VCalendar = InstanceType<typeof VCalendar>\n","// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVCardActionsProps = propsFactory({\n  ...makeComponentProps(),\n  ...makeTagProps(),\n}, 'VCardActions')\n\nexport const VCardActions = genericComponent()({\n  name: 'VCardActions',\n\n  props: makeVCardActionsProps(),\n\n  setup (props, { slots }) {\n    provideDefaults({\n      VBtn: {\n        slim: true,\n        variant: 'text',\n      },\n    })\n\n    useRender(() => (\n      <props.tag\n        class={[\n          'v-card-actions',\n          props.class,\n        ]}\n        style={ props.style }\n        v-slots={ slots }\n      />\n    ))\n\n    return {}\n  },\n})\n\nexport type VCardActions = InstanceType<typeof VCardActions>\n","// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVCardSubtitleProps = propsFactory({\n  opacity: [Number, String],\n\n  ...makeComponentProps(),\n  ...makeTagProps(),\n}, 'VCardSubtitle')\n\nexport const VCardSubtitle = genericComponent()({\n  name: 'VCardSubtitle',\n\n  props: makeVCardSubtitleProps(),\n\n  setup (props, { slots }) {\n    useRender(() => (\n      <props.tag\n        class={[\n          'v-card-subtitle',\n          props.class,\n        ]}\n        style={[\n          { '--v-card-subtitle-opacity': props.opacity },\n          props.style,\n        ]}\n        v-slots={ slots }\n      />\n    ))\n\n    return {}\n  },\n})\n\nexport type VCardSubtitle = InstanceType<typeof VCardSubtitle>\n","// Utilities\nimport { createSimpleFunctional } from '@/util'\n\nexport const VCardTitle = createSimpleFunctional('v-card-title')\n\nexport type VCardTitle = InstanceType<typeof VCardTitle>\n","// Components\nimport { VCardSubtitle } from './VCardSubtitle'\nimport { VCardTitle } from './VCardTitle'\nimport { VAvatar } from '@/components/VAvatar'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDensityProps } from '@/composables/density'\nimport { IconValue } from '@/composables/icons'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { toDisplayString } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport type VCardItemSlots = {\n  default: never\n  prepend: never\n  append: never\n  title: never\n  subtitle: never\n}\n\nexport const makeCardItemProps = propsFactory({\n  appendAvatar: String,\n  appendIcon: IconValue,\n  prependAvatar: String,\n  prependIcon: IconValue,\n  subtitle: {\n    type: [String, Number, Boolean],\n    default: undefined,\n  },\n  title: {\n    type: [String, Number, Boolean],\n    default: undefined,\n  },\n\n  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...makeTagProps(),\n}, 'VCardItem')\n\nexport const VCardItem = genericComponent<VCardItemSlots>()({\n  name: 'VCardItem',\n\n  props: makeCardItemProps(),\n\n  setup (props, { slots }) {\n    useRender(() => {\n      const hasPrependMedia = !!(props.prependAvatar || props.prependIcon)\n      const hasPrepend = !!(hasPrependMedia || slots.prepend)\n      const hasAppendMedia = !!(props.appendAvatar || props.appendIcon)\n      const hasAppend = !!(hasAppendMedia || slots.append)\n      const hasTitle = !!(props.title != null || slots.title)\n      const hasSubtitle = !!(props.subtitle != null || slots.subtitle)\n\n      return (\n        <props.tag\n          class={[\n            'v-card-item',\n            props.class,\n          ]}\n          style={ props.style }\n        >\n          { hasPrepend && (\n            <div key=\"prepend\" class=\"v-card-item__prepend\">\n              { !slots.prepend ? (\n                <>\n                  { props.prependAvatar && (\n                    <VAvatar\n                      key=\"prepend-avatar\"\n                      density={ props.density }\n                      image={ props.prependAvatar }\n                    />\n                  )}\n\n                  { props.prependIcon && (\n                    <VIcon\n                      key=\"prepend-icon\"\n                      density={ props.density }\n                      icon={ props.prependIcon }\n                    />\n                  )}\n                </>\n              ) : (\n                <VDefaultsProvider\n                  key=\"prepend-defaults\"\n                  disabled={ !hasPrependMedia }\n                  defaults={{\n                    VAvatar: {\n                      density: props.density,\n                      image: props.prependAvatar,\n                    },\n                    VIcon: {\n                      density: props.density,\n                      icon: props.prependIcon,\n                    },\n                  }}\n                  v-slots:default={ slots.prepend }\n                />\n              )}\n            </div>\n          )}\n\n          <div class=\"v-card-item__content\">\n            { hasTitle && (\n              <VCardTitle key=\"title\">\n                { slots.title?.() ?? toDisplayString(props.title) }\n              </VCardTitle>\n            )}\n\n            { hasSubtitle && (\n              <VCardSubtitle key=\"subtitle\">\n                { slots.subtitle?.() ?? toDisplayString(props.subtitle) }\n              </VCardSubtitle>\n            )}\n\n            { slots.default?.() }\n          </div>\n\n          { hasAppend && (\n            <div key=\"append\" class=\"v-card-item__append\">\n              { !slots.append ? (\n                <>\n                  { props.appendIcon && (\n                    <VIcon\n                      key=\"append-icon\"\n                      density={ props.density }\n                      icon={ props.appendIcon }\n                    />\n                  )}\n\n                  { props.appendAvatar && (\n                    <VAvatar\n                      key=\"append-avatar\"\n                      density={ props.density }\n                      image={ props.appendAvatar }\n                    />\n                  )}\n                </>\n              ) : (\n                <VDefaultsProvider\n                  key=\"append-defaults\"\n                  disabled={ !hasAppendMedia }\n                  defaults={{\n                    VAvatar: {\n                      density: props.density,\n                      image: props.appendAvatar,\n                    },\n                    VIcon: {\n                      density: props.density,\n                      icon: props.appendIcon,\n                    },\n                  }}\n                  v-slots:default={ slots.append }\n                />\n              )}\n           </div>\n          )}\n        </props.tag>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VCardItem = InstanceType<typeof VCardItem>\n","// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVCardTextProps = propsFactory({\n  opacity: [Number, String],\n\n  ...makeComponentProps(),\n  ...makeTagProps(),\n}, 'VCardText')\n\nexport const VCardText = genericComponent()({\n  name: 'VCardText',\n\n  props: makeVCardTextProps(),\n\n  setup (props, { slots }) {\n    useRender(() => (\n      <props.tag\n        class={[\n          'v-card-text',\n          props.class,\n        ]}\n        style={[\n          { '--v-card-text-opacity': props.opacity },\n          props.style,\n        ]}\n        v-slots={ slots }\n      />\n    ))\n\n    return {}\n  },\n})\n\nexport type VCardText = InstanceType<typeof VCardText>\n","/* eslint-disable complexity */\n\n// Styles\nimport './VCard.sass'\n\n// Components\nimport { VCardActions } from './VCardActions'\nimport { VCardItem } from './VCardItem'\nimport { VCardText } from './VCardText'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VImg } from '@/components/VImg'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { IconValue } from '@/composables/icons'\nimport { LoaderSlot, makeLoaderProps, useLoader } from '@/composables/loader'\nimport { makeLocationProps, useLocation } from '@/composables/location'\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 vRipple from '@/directives/ripple'\n\n// Utilities\nimport { shallowRef, watch } from 'vue'\nimport { convertToUnit, genericComponent, isBoolean, isString, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VCardItemSlots } from './VCardItem'\nimport type { LoaderSlotProps } from '@/composables/loader'\nimport type { RippleDirectiveBinding } from '@/directives/ripple'\n\nexport const makeVCardProps = propsFactory({\n  appendAvatar: String,\n  appendIcon: IconValue,\n  disabled: Boolean,\n  flat: Boolean,\n  hover: Boolean,\n  image: String,\n  link: {\n    type: Boolean,\n    default: undefined,\n  },\n  prependAvatar: String,\n  prependIcon: IconValue,\n  ripple: {\n    type: [Boolean, Object] as PropType<RippleDirectiveBinding['value']>,\n    default: true,\n  },\n  subtitle: {\n    type: [String, Number, Boolean],\n    default: undefined,\n  },\n  text: {\n    type: [String, Number, Boolean],\n    default: undefined,\n  },\n  title: {\n    type: [String, Number, Boolean],\n    default: undefined,\n  },\n\n  ...makeBorderProps(),\n  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...makeDimensionProps(),\n  ...makeElevationProps(),\n  ...makeLoaderProps(),\n  ...makeLocationProps(),\n  ...makePositionProps(),\n  ...makeRoundedProps(),\n  ...makeRouterProps(),\n  ...makeTagProps(),\n  ...makeThemeProps(),\n  ...makeVariantProps({ variant: 'elevated' } as const),\n}, 'VCard')\n\nexport type VCardSlots = VCardItemSlots & {\n  default: never\n  actions: never\n  text: never\n  loader: LoaderSlotProps\n  image: never\n  item: never\n}\n\nexport const VCard = genericComponent<VCardSlots>()({\n  name: 'VCard',\n\n  directives: { vRipple },\n\n  props: makeVCardProps(),\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 { loaderClasses } = useLoader(props)\n    const { locationStyles } = useLocation(props)\n    const { positionClasses } = usePosition(props)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n    const link = useLink(props, attrs)\n    const loadingColor = shallowRef<string | undefined>(undefined)\n\n    watch(() => props.loading, (val, old) => {\n      loadingColor.value = !val && isString(old)\n        ? old\n        : isBoolean(val)\n          ? undefined\n          : val\n    }, { immediate: true })\n\n    useRender(() => {\n      const isLink = props.link !== false && link.isLink.value\n      const isClickable = (\n        !props.disabled &&\n        props.link !== false &&\n        (props.link || link.isClickable.value)\n      )\n      const Tag = isLink ? 'a' : props.tag\n      const hasTitle = !!(slots.title || props.title != null)\n      const hasSubtitle = !!(slots.subtitle || props.subtitle != null)\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 hasImage = !!(slots.image || props.image)\n      const hasCardItem = hasHeader || hasPrepend || hasAppend\n      const hasText = !!(slots.text || props.text != null)\n\n      return (\n        <Tag\n          { ...link.linkProps }\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            loaderClasses.value,\n            positionClasses.value,\n            roundedClasses.value,\n            variantClasses.value,\n            props.class,\n          ]}\n          style={[\n            colorStyles.value,\n            dimensionStyles.value,\n            locationStyles.value,\n            {\n              '--v-card-height': convertToUnit(props.height),\n            },\n            roundedStyles.value,\n            props.style,\n          ]}\n          onClick={ isClickable && link.navigate.value }\n          v-ripple={ isClickable && props.ripple }\n          tabindex={ props.disabled ? -1 : undefined }\n        >\n          { hasImage && (\n            <div key=\"image\" class=\"v-card__image\">\n              { !slots.image ? (\n                <VImg\n                  key=\"image-img\"\n                  cover\n                  src={ props.image }\n                />\n              ) : (\n                <VDefaultsProvider\n                  key=\"image-defaults\"\n                  disabled={ !props.image }\n                  defaults={{\n                    VImg: {\n                      cover: true,\n                      src: props.image,\n                    },\n                  }}\n                  v-slots:default={ slots.image }\n                />\n              )}\n            </div>\n          )}\n\n          <LoaderSlot\n            name=\"v-card\"\n            active={ !!props.loading }\n            color={ loadingColor.value }\n            v-slots={{ default: slots.loader }}\n          />\n\n          { hasCardItem && (\n            <VCardItem\n              key=\"item\"\n              prependAvatar={ props.prependAvatar }\n              prependIcon={ props.prependIcon }\n              title={ props.title }\n              subtitle={ props.subtitle }\n              appendAvatar={ props.appendAvatar }\n              appendIcon={ props.appendIcon }\n            >\n              {{\n                default: slots.item,\n                prepend: slots.prepend,\n                title: slots.title,\n                subtitle: slots.subtitle,\n                append: slots.append,\n              }}\n            </VCardItem>\n          )}\n\n          { hasText && (\n            <VCardText key=\"text\">\n              { slots.text?.() ?? props.text }\n            </VCardText>\n          )}\n\n          { slots.default?.() }\n\n          { slots.actions && (\n            <VCardActions v-slots={{ default: slots.actions }} />\n          )}\n\n          { genOverlays(isClickable, 'v-card') }\n        </Tag>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VCard = InstanceType<typeof VCard>\n","// Utilities\nimport { keys } from '@/util'\n\n// Types\nimport type {\n  DirectiveBinding,\n} from 'vue'\n\nexport interface TouchHandlers {\n  start?: (wrapperEvent: { originalEvent: TouchEvent } & TouchData) => void\n  end?: (wrapperEvent: { originalEvent: TouchEvent } & TouchData) => void\n  move?: (wrapperEvent: { originalEvent: TouchEvent } & TouchData) => void\n  left?: (wrapper: TouchData) => void\n  right?: (wrapper: TouchData) => void\n  up?: (wrapper: TouchData) => void\n  down?: (wrapper: TouchData) => void\n}\n\nexport interface TouchData {\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 type TouchWrapper = TouchHandlers & TouchData\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\nexport interface TouchDirectiveBinding extends Omit<DirectiveBinding, 'value'> {\n  value?: TouchValue\n}\n\nconst handleGesture = (wrapper: TouchWrapper, scrolled: ScrolledAxes) => {\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 (!scrolled.x && 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 (!scrolled.y && 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\ninterface ScrolledAxes {\n  x: boolean\n  y: boolean\n}\n\n// native scroll within is not a gesture\nfunction trackScroll (target: EventTarget | null) {\n  const origins: [Element, number, number][] = []\n\n  for (let el = target instanceof Element ? target : null; el; el = el.parentElement) {\n    origins.push([el, el.scrollLeft, el.scrollTop])\n  }\n\n  return (): ScrolledAxes => ({\n    x: origins.some(([el, left]) => el.scrollLeft !== left),\n    y: origins.some(([el,, top]) => el.scrollTop !== top),\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?.({ originalEvent: event, ...wrapper })\n}\n\nfunction touchend (event: TouchEvent, wrapper: TouchWrapper, scrolled: ScrolledAxes) {\n  const touch = event.changedTouches[0]\n  wrapper.touchendX = touch.clientX\n  wrapper.touchendY = touch.clientY\n\n  wrapper.end?.({ originalEvent: event, ...wrapper })\n\n  handleGesture(wrapper, scrolled)\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?.({ originalEvent: 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  let getScrolled = () => ({ x: false, y: false })\n\n  return {\n    touchstart: (e: TouchEvent) => {\n      getScrolled = trackScroll(e.target)\n      touchstart(e, wrapper)\n    },\n    touchend: (e: TouchEvent) => touchend(e, wrapper, getScrolled()),\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 (!value || !target || uid === undefined) 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 === undefined) return\n\n  const handlers = target._touchHandlers[uid]\n\n  // guard against double teardown: e.g. router & suspence racing\n  if (!handlers) return\n\n  keys(handlers).forEach(eventName => {\n    target.removeEventListener(eventName, handlers[eventName])\n  })\n\n  delete target._touchHandlers[uid]\n\n  if (!keys(target._touchHandlers).length) {\n    // only relevant if we keep `parent: boolean`\n    delete target._touchHandlers\n  }\n}\n\nfunction updated (el: HTMLElement, binding: TouchDirectiveBinding) {\n  if (binding.value === binding.oldValue) return\n\n  unmounted(el, { ...binding, value: binding.oldValue } as TouchDirectiveBinding)\n  mounted(el, binding)\n}\n\nexport const Touch = {\n  mounted,\n  unmounted,\n  updated,\n}\n\nexport default Touch\n","// Styles\nimport './VWindow.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { useGroup } from '@/composables/group'\nimport { useLocale, useRtl } from '@/composables/locale'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Directives\nimport vTouch from '@/directives/touch'\n\n// Utilities\nimport { computed, nextTick, provide, ref, shallowRef, toRef, watch } from 'vue'\nimport { convertToUnit, genericComponent, IN_BROWSER, isBoolean, PREFERS_REDUCED_MOTION, propsFactory, useRender } from '@/util'\nimport { getScrollParent } from '@/util/getScrollParent'\n\n// Types\nimport type { ComputedRef, InjectionKey, PropType, Ref } from 'vue'\nimport type { GroupItemProvide, GroupProvide } from '@/composables/group'\nimport type { IconValue } from '@/composables/icons'\nimport type { TouchHandlers } from '@/directives/touch'\nimport type { GenericProps } from '@/util'\n\nexport type VWindowSlots = {\n  default: { group: GroupProvide }\n  additional: { group: GroupProvide }\n  prev: { props: ControlProps }\n  next: { props: ControlProps }\n}\n\ntype WindowProvide = {\n  transition: ComputedRef<undefined | string>\n  transitionCount: Ref<number>\n  transitionHeight: Ref<undefined | string>\n  transitionDuration: Readonly<Ref<undefined | string>>\n  isReversed: Ref<boolean>\n  rootRef: Ref<HTMLElement | undefined>\n}\n\ntype ControlProps = {\n  icon: IconValue\n  class: string\n  onClick: () => void\n  'aria-label': string\n}\n\nexport const VWindowSymbol: InjectionKey<WindowProvide> = Symbol.for('vuetify:v-window')\nexport const VWindowGroupSymbol: InjectionKey<GroupItemProvide> = Symbol.for('vuetify:v-window-group')\n\nexport const makeVWindowProps = propsFactory({\n  continuous: Boolean,\n  nextIcon: {\n    type: [Boolean, String, Function, Object] as PropType<IconValue>,\n    default: '$next',\n  },\n  prevIcon: {\n    type: [Boolean, String, Function, Object] as PropType<IconValue>,\n    default: '$prev',\n  },\n  reverse: Boolean,\n  showArrows: {\n    type: [Boolean, String],\n    validator: (v: any) => isBoolean(v) || v === 'hover',\n  },\n  verticalArrows: [Boolean, String] as PropType<boolean | 'left' | 'right'>,\n  touch: {\n    type: [Object, Boolean] as PropType<boolean | TouchHandlers>,\n    default: undefined,\n  },\n  direction: {\n    type: String as PropType<'horizontal' | 'vertical'>,\n    default: 'horizontal',\n  },\n\n  modelValue: null,\n  disabled: Boolean,\n  selectedClass: {\n    type: String,\n    default: 'v-window-item--active',\n  },\n  // TODO: mandatory should probably not be exposed but do this for now\n  mandatory: {\n    type: [Boolean, String] as PropType<boolean | 'force'>,\n    default: 'force' as const,\n  },\n  crossfade: Boolean,\n  transitionDuration: Number,\n\n  ...makeComponentProps(),\n  ...makeTagProps(),\n  ...makeThemeProps(),\n}, 'VWindow')\n\nexport const VWindow = genericComponent<new <T>(\n  props: {\n    modelValue?: T\n    'onUpdate:modelValue'?: (value: T) => void\n  },\n  slots: VWindowSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VWindow',\n\n  directives: { vTouch },\n\n  props: makeVWindowProps(),\n\n  emits: {\n    'update:modelValue': (value: any) => true,\n  },\n\n  setup (props, { slots }) {\n    const { themeClasses } = provideTheme(props)\n    const { isRtl } = useRtl()\n    const { t } = useLocale()\n\n    const group = useGroup(props, VWindowGroupSymbol)\n\n    const rootRef = ref()\n    const isRtlReverse = computed(() => isRtl.value ? !props.reverse : props.reverse)\n    const isReversed = shallowRef(false)\n    const transition = computed(() => {\n      if (props.crossfade) {\n        return 'v-window-crossfade-transition'\n      }\n\n      const axis = props.direction === 'vertical' ? 'y' : 'x'\n      const isAxisReversed = props.direction === 'vertical' ? props.reverse : isRtlReverse.value\n      const reverse = isAxisReversed ? !isReversed.value : isReversed.value\n      const direction = reverse ? '-reverse' : ''\n\n      return `v-window-${axis}${direction}-transition`\n    })\n    const transitionCount = shallowRef(0)\n    const transitionHeight = ref<undefined | string>(undefined)\n\n    const activeIndex = computed(() => {\n      return group.items.value.findIndex(item => group.selected.value.includes(item.id))\n    })\n\n    // Fix for https://github.com/vuetifyjs/vuetify/issues/18447\n    watch(activeIndex, (newVal, oldVal) => {\n      let scrollableParent: HTMLElement | undefined\n      const savedScrollPosition = { left: 0, top: 0 }\n\n      if (IN_BROWSER && oldVal >= 0) {\n        scrollableParent = getScrollParent(rootRef.value)\n\n        savedScrollPosition.left = scrollableParent?.scrollLeft\n        savedScrollPosition.top = scrollableParent?.scrollTop\n      }\n\n      const itemsLength = group.items.value.length\n      const lastIndex = itemsLength - 1\n\n      if (itemsLength <= 2) {\n        isReversed.value = newVal < oldVal\n      } else if (newVal === lastIndex && oldVal === 0) {\n        isReversed.value = false\n      } else if (newVal === 0 && oldVal === lastIndex) {\n        isReversed.value = true\n      } else {\n        isReversed.value = newVal < oldVal\n      }\n\n      nextTick(() => {\n        if (!IN_BROWSER || !scrollableParent) return\n\n        const currentScrollY = scrollableParent.scrollTop\n\n        if (currentScrollY !== savedScrollPosition.top) {\n          scrollableParent.scrollTo({ ...savedScrollPosition, behavior: 'instant' })\n        }\n\n        requestAnimationFrame(() => {\n          if (!scrollableParent) return\n\n          const rafScrollY = scrollableParent.scrollTop\n\n          if (rafScrollY !== savedScrollPosition.top) {\n            scrollableParent.scrollTo({ ...savedScrollPosition, behavior: 'instant' })\n          }\n        })\n      })\n    }, { flush: 'sync' }) // Run synchronously before DOM updates\n\n    provide(VWindowSymbol, {\n      transition,\n      isReversed,\n      transitionCount,\n      transitionHeight,\n      transitionDuration: toRef(() => PREFERS_REDUCED_MOTION() ? undefined : convertToUnit(props.transitionDuration, 'ms')),\n      rootRef,\n    })\n\n    const canMoveBack = toRef(() => props.continuous || activeIndex.value !== 0)\n    const canMoveForward = toRef(() => props.continuous || activeIndex.value !== group.items.value.length - 1)\n\n    function prev () {\n      canMoveBack.value && group.prev()\n    }\n\n    function next () {\n      canMoveForward.value && group.next()\n    }\n\n    const arrows = computed(() => {\n      const arrows = []\n\n      const prevProps = {\n        icon: isRtl.value && !props.verticalArrows ? props.nextIcon : props.prevIcon,\n        class: `v-window__${isRtlReverse.value ? 'right' : 'left'}`,\n        onClick: group.prev,\n        'aria-label': t('$vuetify.carousel.prev'),\n      }\n\n      arrows.push(canMoveBack.value\n        ? slots.prev\n          ? slots.prev({ props: prevProps })\n          : <VBtn { ...prevProps } />\n        : <div />\n      )\n\n      const nextProps = {\n        icon: isRtl.value && !props.verticalArrows ? props.prevIcon : props.nextIcon,\n        class: `v-window__${isRtlReverse.value ? 'left' : 'right'}`,\n        onClick: group.next,\n        'aria-label': t('$vuetify.carousel.next'),\n      }\n\n      arrows.push(canMoveForward.value\n        ? slots.next\n          ? slots.next({ props: nextProps })\n          : <VBtn { ...nextProps } />\n        : <div />\n      )\n\n      return arrows\n    })\n\n    const touchOptions = computed(() => {\n      if (props.touch === false) return props.touch\n\n      const options: TouchHandlers = {\n        left: () => {\n          isRtlReverse.value ? prev() : next()\n        },\n        right: () => {\n          isRtlReverse.value ? next() : prev()\n        },\n        start: ({ originalEvent }) => {\n          originalEvent.stopPropagation()\n        },\n      }\n\n      return {\n        ...options,\n        ...(props.touch === true ? {} : props.touch),\n      }\n    })\n\n    function onKeyDown (e: KeyboardEvent) {\n      const [backKey, forwardKey] = isRtl.value ? ['ArrowRight', 'ArrowLeft'] : ['ArrowLeft', 'ArrowRight']\n\n      if (\n        (props.direction === 'horizontal' && e.key === backKey) ||\n        (props.direction === 'vertical' && e.key === 'ArrowUp')\n      ) {\n        e.preventDefault()\n        prev()\n        nextTick(() => { canMoveBack.value ? focusArrow(0) : focusArrow(1) })\n      }\n\n      if (\n        (props.direction === 'horizontal' && e.key === forwardKey) ||\n        (props.direction === 'vertical' && e.key === 'ArrowDown')\n      ) {\n        e.preventDefault()\n        next()\n        nextTick(() => { canMoveForward.value ? focusArrow(1) : focusArrow(0) })\n      }\n    }\n\n    function focusArrow (index: number) {\n      const arrow = arrows.value[index]\n\n      if (!arrow) return\n\n      const arrowEl = Array.isArray(arrow) ? arrow[0] : arrow\n      arrowEl.el?.focus()\n    }\n\n    useRender(() => (\n      <props.tag\n        ref={ rootRef }\n        class={[\n          'v-window',\n          {\n            'v-window--show-arrows-on-hover': props.showArrows === 'hover',\n            'v-window--vertical-arrows': !!props.verticalArrows,\n            'v-window--crossfade': !!props.crossfade,\n          },\n          themeClasses.value,\n          props.class,\n        ]}\n        style={ props.style }\n        v-touch={ touchOptions.value }\n      >\n        <div\n          class=\"v-window__container\"\n          style={{\n            height: transitionHeight.value,\n          }}\n        >\n          { slots.default?.({ group }) }\n\n          { props.showArrows !== false && (\n            <div\n              class={[\n                'v-window__controls',\n                { 'v-window__controls--left': props.verticalArrows === 'left' || props.verticalArrows === true },\n                { 'v-window__controls--right': props.verticalArrows === 'right' },\n              ]}\n              onKeydown={ onKeyDown }\n            >\n              { arrows.value }\n            </div>\n          )}\n        </div>\n\n        { slots.additional?.({ group }) }\n      </props.tag>\n    ))\n\n    return {\n      group,\n    }\n  },\n})\n\nexport type VWindow = InstanceType<typeof VWindow>\n","// Styles\nimport './VCarousel.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VProgressLinear } from '@/components/VProgressLinear'\nimport { makeVWindowProps, VWindow } from '@/components/VWindow/VWindow'\n\n// Composables\nimport { injectNestedDefaults } from '@/composables/defaults'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale, useRtl } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { nextTick, onMounted, ref, watch } from 'vue'\nimport { convertToUnit, genericComponent, isString, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VWindowSlots } from '@/components/VWindow/VWindow'\nimport type { GroupProvide } from '@/composables/group'\nimport type { GenericProps } from '@/util'\n\nexport const makeVCarouselProps = propsFactory({\n  color: String,\n  cycle: Boolean,\n  delimiterIcon: {\n    type: IconValue,\n    default: '$delimiter',\n  },\n  height: {\n    type: [Number, String],\n    default: 500,\n  },\n  hideDelimiters: Boolean,\n  hideDelimiterBackground: Boolean,\n  interval: {\n    type: [Number, String],\n    default: 6000,\n    validator: (value: string | number) => Number(value) > 0,\n  },\n  progress: [Boolean, String],\n  verticalDelimiters: [Boolean, String] as PropType<boolean | 'left' | 'right'>,\n\n  ...makeVWindowProps({\n    continuous: true,\n    mandatory: 'force' as const,\n    showArrows: true,\n  }),\n}, 'VCarousel')\n\ntype VCarouselSlots = Omit<VWindowSlots, 'additional'> & {\n  item: {\n    props: Record<string, any>\n    item: {\n      id: string\n      value: unknown\n      disabled: boolean | undefined\n    }\n  }\n}\n\nexport const VCarousel = genericComponent<new <T>(\n  props: {\n    modelValue?: T\n    'onUpdate:modelValue'?: (value: T) => void\n  },\n  slots: VCarouselSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VCarousel',\n\n  props: makeVCarouselProps(),\n\n  emits: {\n    'update:modelValue': (value: any) => true,\n  },\n\n  setup (props, { slots }) {\n    const model = useProxiedModel(props, 'modelValue')\n    const { t } = useLocale()\n    const { isRtl } = useRtl()\n    const windowRef = ref<VWindow>()\n    const delimiterDefaults = injectNestedDefaults<VBtn['$props']>('VBtn')\n\n    let slideTimeout = -1\n    watch(model, restartTimeout)\n    watch(() => props.interval, restartTimeout)\n    watch(() => props.cycle, val => {\n      if (val) restartTimeout()\n      else window.clearTimeout(slideTimeout)\n    })\n\n    onMounted(startTimeout)\n\n    function startTimeout () {\n      if (!props.cycle || !windowRef.value) return\n\n      slideTimeout = window.setTimeout(\n        windowRef.value.group.next,\n        Number(props.interval) > 0 ? Number(props.interval) : 6000\n      )\n    }\n\n    function restartTimeout () {\n      window.clearTimeout(slideTimeout)\n      window.requestAnimationFrame(startTimeout)\n    }\n\n    function onDelimiterKeyDown (e: KeyboardEvent, group: GroupProvide) {\n      const [backKey, forwardKey] = isRtl.value ? ['ArrowRight', 'ArrowLeft'] : ['ArrowLeft', 'ArrowRight']\n\n      if (\n        (props.direction === 'horizontal' && e.key === backKey) ||\n        (props.direction === 'vertical' && e.key === 'ArrowUp')\n      ) {\n        e.preventDefault()\n        group.prev()\n        nextTick(() => windowRef.value?.$el.querySelector('.v-btn--active')?.focus())\n      }\n\n      if (\n        (props.direction === 'horizontal' && e.key === forwardKey) ||\n        (props.direction === 'vertical' && e.key === 'ArrowDown')\n      ) {\n        e.preventDefault()\n        group.next()\n        nextTick(() => windowRef.value?.$el.querySelector('.v-btn--active')?.focus())\n      }\n    }\n\n    useRender(() => {\n      const windowProps = VWindow.filterProps(props)\n\n      return (\n        <VWindow\n          ref={ windowRef }\n          { ...windowProps }\n          v-model={ model.value }\n          class={[\n            'v-carousel',\n            {\n              'v-carousel--hide-delimiter-background': props.hideDelimiterBackground,\n              'v-carousel--vertical-delimiters': props.verticalDelimiters,\n            },\n            props.class,\n          ]}\n          style={[\n            { height: convertToUnit(props.height) },\n            props.style,\n          ]}\n        >\n          {{\n            default: slots.default,\n            additional: ({ group }: { group: GroupProvide }) => (\n              <>\n                { !props.hideDelimiters && (\n                  <div\n                    class=\"v-carousel__controls\"\n                    style={{\n                      left: props.verticalDelimiters === 'left' && props.verticalDelimiters ? 0 : 'auto',\n                      right: props.verticalDelimiters === 'right' ? 0 : 'auto',\n                    }}\n                  >\n                    { group.items.value.length > 0 && (\n                      <VDefaultsProvider\n                        defaults={{\n                          VBtn: {\n                            color: props.color,\n                            icon: props.delimiterIcon,\n                            size: delimiterDefaults.value?.size ?? 'x-small',\n                            variant: delimiterDefaults.value?.variant ?? 'text',\n                          },\n                        }}\n                        scoped\n                      >\n                        { group.items.value.map((item, index) => {\n                          const props = {\n                            id: `carousel-item-${item.id}`,\n                            'aria-label': t('$vuetify.carousel.ariaLabel.delimiter', index + 1, group.items.value.length),\n                            class: [\n                              'v-carousel__controls__item',\n                              group.isSelected(item.id) && 'v-btn--active',\n                            ],\n                            onClick: () => group.select(item.id, true),\n                            onKeydown: (e: KeyboardEvent) => onDelimiterKeyDown(e, group),\n                          }\n\n                          return slots.item\n                            ? slots.item({ props, item })\n                            : (<VBtn { ...item } { ...props } />)\n                        })}\n                      </VDefaultsProvider>\n                    )}\n                  </div>\n                )}\n\n                { props.progress && (\n                  <VProgressLinear\n                    absolute\n                    class=\"v-carousel__progress\"\n                    color={ isString(props.progress) ? props.progress : undefined }\n                    modelValue={ (group.getItemIndex(model.value) + 1) / group.items.value.length * 100 }\n                  />\n                )}\n              </>\n            ),\n            prev: slots.prev,\n            next: slots.next,\n          }}\n        </VWindow>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VCarousel = InstanceType<typeof VCarousel>\n","// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeGroupItemProps, useGroupItem } from '@/composables/group'\nimport { makeLazyProps, useLazy } from '@/composables/lazy'\nimport { useSsrBoot } from '@/composables/ssrBoot'\nimport { MaybeTransition } from '@/composables/transition'\n\n// Directives\nimport vTouch from '@/directives/touch'\n\n// Utilities\nimport { computed, inject, nextTick, shallowRef } from 'vue'\nimport { convertToUnit, genericComponent, isString, propsFactory, useRender } from '@/util'\n\n// Types\nimport { VWindowGroupSymbol, VWindowSymbol } from './VWindow'\n\nexport const makeVWindowItemProps = propsFactory({\n  reverseTransition: {\n    type: [Boolean, String],\n    default: undefined,\n  },\n  transition: {\n    type: [Boolean, String],\n    default: undefined,\n  },\n\n  ...makeComponentProps(),\n  ...makeGroupItemProps(),\n  ...makeLazyProps(),\n}, 'VWindowItem')\n\nexport const VWindowItem = genericComponent()({\n  name: 'VWindowItem',\n\n  directives: { vTouch },\n\n  props: makeVWindowItemProps(),\n\n  emits: {\n    'group:selected': (val: { value: boolean }) => true,\n  },\n\n  setup (props, { slots }) {\n    const window = inject(VWindowSymbol)\n    const groupItem = useGroupItem(props, VWindowGroupSymbol)\n    const { isBooted } = useSsrBoot()\n\n    if (!window || !groupItem) throw new Error('[Vuetify] VWindowItem must be used inside VWindow')\n\n    const isTransitioning = shallowRef(false)\n    const hasTransition = computed(() => isBooted.value && (\n      window.isReversed.value\n        ? props.reverseTransition !== false\n        : props.transition !== false\n    ))\n\n    function onAfterTransition () {\n      if (!isTransitioning.value || !window) {\n        return\n      }\n\n      // Finalize transition state.\n      isTransitioning.value = false\n      if (window.transitionCount.value > 0) {\n        window.transitionCount.value -= 1\n\n        // Remove container height if we are out of transition.\n        if (window.transitionCount.value === 0) {\n          window.transitionHeight.value = undefined\n        }\n      }\n    }\n\n    function onBeforeTransition () {\n      if (isTransitioning.value || !window) {\n        return\n      }\n\n      // Initialize transition state here.\n      isTransitioning.value = true\n\n      if (window.transitionCount.value === 0) {\n        // Set initial height for height transition.\n        window.transitionHeight.value = convertToUnit(window.rootRef.value?.clientHeight)\n      }\n\n      window.transitionCount.value += 1\n    }\n\n    function onTransitionCancelled () {\n      onAfterTransition() // This should have the same path as normal transition end.\n    }\n\n    function onEnterTransition (el: Element) {\n      if (!isTransitioning.value) {\n        return\n      }\n\n      nextTick(() => {\n        // Do not set height if no transition or cancelled.\n        if (!hasTransition.value || !isTransitioning.value || !window) {\n          return\n        }\n\n        // Set transition target height.\n        window.transitionHeight.value = convertToUnit(el.clientHeight)\n      })\n    }\n\n    const transition = computed(() => {\n      const name = window.isReversed.value\n        ? props.reverseTransition\n        : props.transition\n\n      return !hasTransition.value ? false : {\n        name: !isString(name) ? window.transition.value : name,\n        onBeforeEnter: onBeforeTransition,\n        onAfterEnter: onAfterTransition,\n        onEnterCancelled: onTransitionCancelled,\n        onBeforeLeave: onBeforeTransition,\n        onAfterLeave: onAfterTransition,\n        onLeaveCancelled: onTransitionCancelled,\n        onEnter: onEnterTransition,\n      }\n    })\n\n    const { hasContent } = useLazy(props, groupItem.isSelected)\n\n    useRender(() => (\n      <MaybeTransition transition={ transition.value } disabled={ !isBooted.value }>\n        <div\n          class={[\n            'v-window-item',\n            groupItem.selectedClass.value,\n            props.class,\n          ]}\n          style={[{ transitionDuration: window.transitionDuration.value }, props.style]}\n          v-show={ groupItem.isSelected.value }\n        >\n          { hasContent.value && slots.default?.() }\n        </div>\n      </MaybeTransition>\n    ))\n\n    return { groupItem }\n  },\n})\n\nexport type VWindowItem = InstanceType<typeof VWindowItem>\n","// Components\nimport { makeVImgProps, VImg } from '@/components/VImg/VImg'\nimport { makeVWindowItemProps, VWindowItem } from '@/components/VWindow/VWindowItem'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { VImgSlots } from '@/components/VImg/VImg'\n\nexport const makeVCarouselItemProps = propsFactory({\n  ...makeVImgProps(),\n  ...makeVWindowItemProps(),\n}, 'VCarouselItem')\n\nexport const VCarouselItem = genericComponent<VImgSlots>()({\n  name: 'VCarouselItem',\n\n  inheritAttrs: false,\n\n  props: makeVCarouselItemProps(),\n\n  setup (props, { slots, attrs }) {\n    useRender(() => {\n      const imgProps = VImg.filterProps(props)\n      const windowItemProps = VWindowItem.filterProps(props)\n\n      return (\n        <VWindowItem\n          class={[\n            'v-carousel-item',\n            props.class,\n          ]}\n          { ...windowItemProps }\n        >\n          <VImg\n            { ...attrs }\n            { ...imgProps }\n            v-slots={ slots }\n          />\n        </VWindowItem>\n      )\n    })\n  },\n})\n\nexport type VCarouselItem = InstanceType<typeof VCarouselItem>\n","// Styles\nimport './VCode.sass'\n\n// Utilities\nimport { createSimpleFunctional } from '@/util'\n\nexport const VCode = createSimpleFunctional('v-code', 'code')\n\nexport type VCode = InstanceType<typeof VCode>\n","// Styles\nimport './VColorPickerCanvas.sass'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { useResizeObserver } from '@/composables/resizeObserver'\n\n// Utilities\nimport { computed, onMounted, ref, shallowRef, toRef, watch } from 'vue'\nimport { clamp, convertToUnit, defineComponent, getEventCoordinates, propsFactory, useRender } from '@/util'\nimport { getTargetBox } from '@/util/box'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { HSV } from '@/util'\nimport type { Box } from '@/util/box'\n\nexport const makeVColorPickerCanvasProps = propsFactory({\n  color: {\n    type: Object as PropType<HSV | null>,\n  },\n  disabled: Boolean,\n  readonly: Boolean,\n  dotSize: {\n    type: [Number, String],\n    default: 10,\n  },\n  height: {\n    type: [Number, String],\n    default: 150,\n  },\n  width: {\n    type: [Number, String],\n    default: 300,\n  },\n\n  ...makeComponentProps(),\n}, 'VColorPickerCanvas')\n\nexport const VColorPickerCanvas = defineComponent({\n  name: 'VColorPickerCanvas',\n\n  props: makeVColorPickerCanvasProps(),\n\n  emits: {\n    'update:color': (color: HSV) => true,\n    'update:position': (hue: any) => true,\n  },\n\n  setup (props, { emit }) {\n    const isInteracting = shallowRef(false)\n    const canvasRef = ref<HTMLCanvasElement | null>()\n    const canvasWidth = shallowRef(parseFloat(props.width))\n    const canvasHeight = shallowRef(parseFloat(props.height))\n\n    const _dotPosition = ref({ x: 0, y: 0 })\n    const isInteractive = toRef(() => !props.disabled && !props.readonly)\n\n    const dotPosition = computed({\n      get: () => _dotPosition.value,\n      set (val) {\n        if (!canvasRef.value) return\n\n        const { x, y } = val\n        _dotPosition.value = val\n\n        emit('update:color', {\n          h: props.color?.h ?? 0,\n          s: clamp(x, 0, canvasWidth.value) / canvasWidth.value,\n          v: 1 - clamp(y, 0, canvasHeight.value) / canvasHeight.value,\n          a: props.color?.a ?? 1,\n        })\n      },\n    })\n\n    const dotStyles = computed(() => {\n      const { x, y } = dotPosition.value\n      const radius = parseInt(props.dotSize, 10) / 2\n\n      return {\n        width: convertToUnit(props.dotSize),\n        height: convertToUnit(props.dotSize),\n        transform: `translate(${convertToUnit(x - radius)}, ${convertToUnit(y - radius)})`,\n      }\n    })\n\n    const { resizeRef } = useResizeObserver(entries => {\n      if (!resizeRef.el?.offsetParent) return\n\n      const { width, height } = entries[0].contentRect\n\n      canvasWidth.value = Math.round(width)\n      canvasHeight.value = Math.round(height)\n    })\n\n    function updateDotPosition (x: number, y: number, rect: Box) {\n      const { left, top, width, height } = rect\n      dotPosition.value = {\n        x: clamp(x - left, 0, width),\n        y: clamp(y - top, 0, height),\n      }\n    }\n\n    function handleMouseDown (e: MouseEvent | TouchEvent) {\n      if (e.type === 'mousedown') {\n        // Prevent text selection while dragging\n        e.preventDefault()\n      }\n\n      if (!isInteractive.value) return\n\n      handleMouseMove(e)\n\n      window.addEventListener('mousemove', handleMouseMove)\n      window.addEventListener('mouseup', handleMouseUp)\n      window.addEventListener('touchmove', handleMouseMove)\n      window.addEventListener('touchend', handleMouseUp)\n    }\n\n    function handleMouseMove (e: MouseEvent | TouchEvent) {\n      if (!isInteractive.value || !canvasRef.value) return\n\n      isInteracting.value = true\n\n      const coords = getEventCoordinates(e)\n      const point = getTargetBox([coords.clientX, coords.clientY])\n\n      updateDotPosition(point.x, point.y, getTargetBox(canvasRef.value))\n    }\n\n    function handleMouseUp () {\n      window.removeEventListener('mousemove', handleMouseMove)\n      window.removeEventListener('mouseup', handleMouseUp)\n      window.removeEventListener('touchmove', handleMouseMove)\n      window.removeEventListener('touchend', handleMouseUp)\n    }\n\n    function updateCanvas () {\n      if (!canvasRef.value) return\n\n      const canvas = canvasRef.value\n      const ctx = canvas.getContext('2d')\n\n      if (!ctx) return\n\n      const saturationGradient = ctx.createLinearGradient(0, 0, canvas.width, 0)\n      saturationGradient.addColorStop(0, 'hsla(0, 0%, 100%, 1)') // white\n      saturationGradient.addColorStop(1, `hsla(${props.color?.h ?? 0}, 100%, 50%, 1)`)\n      ctx.fillStyle = saturationGradient\n      ctx.fillRect(0, 0, canvas.width, canvas.height)\n\n      const valueGradient = ctx.createLinearGradient(0, 0, 0, canvas.height)\n      valueGradient.addColorStop(0, 'hsla(0, 0%, 0%, 0)') // transparent\n      valueGradient.addColorStop(1, 'hsla(0, 0%, 0%, 1)') // black\n      ctx.fillStyle = valueGradient\n      ctx.fillRect(0, 0, canvas.width, canvas.height)\n    }\n\n    watch(() => props.color?.h, updateCanvas, { immediate: true })\n    watch(() => [canvasWidth.value, canvasHeight.value], (newVal, oldVal) => {\n      updateCanvas()\n      _dotPosition.value = {\n        x: dotPosition.value.x * newVal[0] / oldVal[0],\n        y: dotPosition.value.y * newVal[1] / oldVal[1],\n      }\n    }, { flush: 'post' })\n\n    watch(() => props.color, () => {\n      if (isInteracting.value) {\n        isInteracting.value = false\n        return\n      }\n\n      _dotPosition.value = props.color ? {\n        x: props.color.s * canvasWidth.value,\n        y: (1 - props.color.v) * canvasHeight.value,\n      } : { x: 0, y: 0 }\n    }, { deep: true, immediate: true })\n\n    onMounted(() => updateCanvas())\n\n    useRender(() => (\n      <div\n        ref={ resizeRef }\n        class={[\n          'v-color-picker-canvas',\n          props.class,\n        ]}\n        style={ props.style }\n        onMousedown={ handleMouseDown }\n        onTouchstartPassive={ handleMouseDown }\n      >\n        <canvas\n          ref={ canvasRef }\n          width={ canvasWidth.value }\n          height={ canvasHeight.value }\n        />\n        { props.color && (\n          <div\n            class={[\n              'v-color-picker-canvas__dot',\n              {\n                'v-color-picker-canvas__dot--disabled': props.disabled,\n              },\n            ]}\n            style={ dotStyles.value }\n          />\n        )}\n      </div>\n    ))\n\n    return {}\n  },\n})\n\nexport type VColorPickerCanvas = InstanceType<typeof VColorPickerCanvas>\n","// Utilities\nimport { isObject } from '@/util'\nimport {\n  HexToHSV,\n  HSLtoHSV,\n  HSVtoHex,\n  HSVtoHSL,\n  HSVtoRGB,\n  RGBtoHSV,\n} from '@/util/colorUtils'\nimport { has } from '@/util/helpers'\nimport { isNumber, isString } from '@/util/v0'\n\n// Types\nimport type { HSL, HSV, RGB } from '@/util/colorUtils'\n\nfunction stripAlpha (color: any, stripAlpha: boolean) {\n  if (stripAlpha) {\n    const { a, ...rest } = color\n\n    return rest\n  }\n\n  return color\n}\n\nexport function extractColor (color: HSV, input: any) {\n  if (input == null || isString(input)) {\n    const hasA = isNumber(color.a) && color.a < 1\n    if (input?.startsWith('rgb(')) {\n      const { r, g, b, a } = HSVtoRGB(color)\n      return `rgb(${r} ${g} ${b}` + (hasA ? ` / ${a})` : ')')\n    } else if (input?.startsWith('hsl(')) {\n      const { h, s, l, a } = HSVtoHSL(color)\n      return `hsl(${h} ${Math.round(s * 100)} ${Math.round(l * 100)}` + (hasA ? ` / ${a})` : ')')\n    }\n\n    const hex = HSVtoHex(color)\n\n    if (color.a === 1) return hex.slice(0, 7)\n    else return hex\n  }\n\n  if (isObject(input)) {\n    let converted\n\n    if (has(input, ['r', 'g', 'b'])) converted = HSVtoRGB(color)\n    else if (has(input, ['h', 's', 'l'])) converted = HSVtoHSL(color)\n    else if (has(input, ['h', 's', 'v'])) converted = color\n\n    return stripAlpha(converted, !has(input, ['a']) && color.a === 1)\n  }\n\n  return color\n}\n\nexport function hasAlpha (color: any) {\n  if (!color) return false\n\n  if (isString(color)) {\n    return color.length > 7\n  }\n\n  if (isObject(color)) {\n    return has(color, ['a']) || has(color, ['alpha'])\n  }\n\n  return false\n}\n\nexport const nullColor = { h: 0, s: 0, v: 0, a: 1 }\n\nexport type ColorPickerMode = {\n  inputProps: Record<string, unknown>\n  inputs: {\n    [key: string]: any\n    label: string\n    getValue: (color: any) => number | string\n    getColor: (color: any, v: string) => any\n  }[]\n  from: (color: any) => HSV\n  to: (color: HSV) => any\n}\n\nconst rgba: ColorPickerMode = {\n  inputProps: {\n    type: 'number',\n    min: 0,\n  },\n  inputs: [\n    {\n      label: 'R',\n      max: 255,\n      step: 1,\n      getValue: (c: RGB) => Math.round(c.r),\n      getColor: (c: RGB, v: string): RGB => ({ ...c, r: Number(v) }),\n      localeKey: 'redInput',\n    },\n    {\n      label: 'G',\n      max: 255,\n      step: 1,\n      getValue: (c: RGB) => Math.round(c.g),\n      getColor: (c: RGB, v: string): RGB => ({ ...c, g: Number(v) }),\n      localeKey: 'greenInput',\n    },\n    {\n      label: 'B',\n      max: 255,\n      step: 1,\n      getValue: (c: RGB) => Math.round(c.b),\n      getColor: (c: RGB, v: string): RGB => ({ ...c, b: Number(v) }),\n      localeKey: 'blueInput',\n    },\n    {\n      label: 'A',\n      max: 1,\n      step: 0.01,\n      getValue: ({ a }: RGB) => a != null ? Math.round(a * 100) / 100 : 1,\n      getColor: (c: RGB, v: string): RGB => ({ ...c, a: Number(v) }),\n      localeKey: 'alphaInput',\n    },\n  ],\n  to: HSVtoRGB,\n  from: RGBtoHSV,\n}\n\nconst rgb = {\n  ...rgba,\n  inputs: rgba.inputs?.slice(0, 3),\n}\n\nconst hsla: ColorPickerMode = {\n  inputProps: {\n    type: 'number',\n    min: 0,\n  },\n  inputs: [\n    {\n      label: 'H',\n      max: 360,\n      step: 1,\n      getValue: (c: HSL) => Math.round(c.h),\n      getColor: (c: HSL, v: string): HSL => ({ ...c, h: Number(v) }),\n      localeKey: 'hueInput',\n    },\n    {\n      label: 'S',\n      max: 1,\n      step: 0.01,\n      getValue: (c: HSL) => Math.round(c.s * 100) / 100,\n      getColor: (c: HSL, v: string): HSL => ({ ...c, s: Number(v) }),\n      localeKey: 'saturationInput',\n    },\n    {\n      label: 'L',\n      max: 1,\n      step: 0.01,\n      getValue: (c: HSL) => Math.round(c.l * 100) / 100,\n      getColor: (c: HSL, v: string): HSL => ({ ...c, l: Number(v) }),\n      localeKey: 'lightnessInput',\n    },\n    {\n      label: 'A',\n      max: 1,\n      step: 0.01,\n      getValue: ({ a }: HSL) => a != null ? Math.round(a * 100) / 100 : 1,\n      getColor: (c: HSL, v: string): HSL => ({ ...c, a: Number(v) }),\n      localeKey: 'alphaInput',\n    },\n  ],\n  to: HSVtoHSL,\n  from: HSLtoHSV,\n}\n\nconst hsl = {\n  ...hsla,\n  inputs: hsla.inputs.slice(0, 3),\n}\n\nconst hexa: ColorPickerMode = {\n  inputProps: {\n    type: 'text',\n  },\n  inputs: [\n    {\n      label: 'HEXA',\n      getValue: (c: string) => c,\n      getColor: (c: string, v: string) => v,\n      localeKey: 'hexaInput',\n    },\n  ],\n  to: HSVtoHex,\n  from: HexToHSV,\n}\n\nconst hex = {\n  ...hexa,\n  inputs: [\n    {\n      label: 'HEX',\n      getValue: (c: string) => c.slice(0, 7),\n      getColor: (c: string, v: string) => v,\n      localeKey: 'hexInput',\n    },\n  ],\n}\n\nexport const modes = {\n  rgb,\n  rgba,\n  hsl,\n  hsla,\n  hex,\n  hexa,\n} satisfies Record<string, ColorPickerMode>\n","// Styles\nimport './VColorPickerEdit.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { computed } from 'vue'\nimport { modes, nullColor } from './util'\nimport { defineComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { HSV } from '@/util/colorUtils'\n\nconst VColorPickerInput = ({ label, ...rest }: any) => {\n  return (\n    <div\n      class=\"v-color-picker-edit__input\"\n    >\n      <input { ...rest } />\n      <span>{ label }</span>\n    </div>\n  )\n}\n\nexport const makeVColorPickerEditProps = propsFactory({\n  color: Object as PropType<HSV | null>,\n  disabled: Boolean,\n  hideInputLabels: Boolean,\n  readonly: Boolean,\n  mode: {\n    type: String as PropType<keyof typeof modes>,\n    default: 'rgba',\n    validator: (v: string) => Object.keys(modes).includes(v),\n  },\n  modes: {\n    type: Array as PropType<readonly (keyof typeof modes)[]>,\n    default: () => Object.keys(modes),\n    validator: (v: any) => Array.isArray(v) && v.every(m => Object.keys(modes).includes(m)),\n  },\n\n  ...makeComponentProps(),\n}, 'VColorPickerEdit')\n\nexport const VColorPickerEdit = defineComponent({\n  name: 'VColorPickerEdit',\n\n  props: makeVColorPickerEditProps(),\n\n  emits: {\n    'update:color': (color: HSV) => true,\n    'update:mode': (mode: keyof typeof modes) => true,\n  },\n\n  setup (props, { emit }) {\n    const { t } = useLocale()\n    const enabledModes = computed(() => {\n      return props.modes.map(key => ({ ...modes[key], name: key }))\n    })\n\n    const inputs = computed(() => {\n      const mode = enabledModes.value.find(m => m.name === props.mode)\n\n      if (!mode) return []\n\n      const color = props.color ? mode.to(props.color) : null\n\n      return mode.inputs?.map(({ getValue, getColor, localeKey, ...inputProps }) => {\n        return {\n          ...mode.inputProps,\n          ...inputProps,\n          ariaLabel: t(`$vuetify.colorPicker.ariaLabel.${localeKey}`),\n          disabled: props.disabled,\n          readonly: props.readonly,\n          value: color && getValue(color),\n          onChange: (e: InputEvent) => {\n            const target = e.target as HTMLInputElement | null\n\n            if (!target) return\n\n            emit('update:color', mode.from(getColor(color ?? mode.to(nullColor), target.value)))\n          },\n        }\n      })\n    })\n\n    useRender(() => (\n      <div\n        class={[\n          'v-color-picker-edit',\n          props.class,\n        ]}\n        style={ props.style }\n      >\n        { inputs.value?.map(inputProps => (\n          <VColorPickerInput\n            { ...inputProps }\n            label={ props.hideInputLabels ? undefined : inputProps.label }\n          />\n        ))}\n        { enabledModes.value.length > 1 && (\n          <VBtn\n            icon=\"$unfold\"\n            size=\"x-small\"\n            variant=\"plain\"\n            aria-label={ t('$vuetify.colorPicker.ariaLabel.changeFormat') }\n            onClick={ () => {\n              const mi = enabledModes.value.findIndex(m => m.name === props.mode)\n\n              emit('update:mode', enabledModes.value[(mi + 1) % enabledModes.value.length].name)\n            }}\n          />\n        )}\n      </div>\n    ))\n\n    return {}\n  },\n})\n\nexport type VColorPickerEdit = InstanceType<typeof VColorPickerEdit>\n","/* eslint-disable max-statements */\n// Composables\nimport { makeElevationProps } from '@/composables/elevation'\nimport { useForm } from '@/composables/form'\nimport { useRtl } from '@/composables/locale'\nimport { makeRoundedProps } from '@/composables/rounded'\n\n// Utilities\nimport { computed, nextTick, onScopeDispose, provide, ref, shallowRef, toRef } from 'vue'\nimport { clamp, createRange, getDecimals, IN_BROWSER, isBoolean, propsFactory } from '@/util'\n\n// Types\nimport type { ExtractPropTypes, InjectionKey, PropType, Ref } from 'vue'\nimport type { VSliderTrack } from './VSliderTrack'\n\nexport type Tick = {\n  value: number\n  position: number\n  label?: string\n}\n\ntype SliderProvide = {\n  activeThumbRef: Ref<HTMLElement | undefined>\n  color: Ref<string | undefined>\n  decimals: Ref<number>\n  direction: Ref<'vertical' | 'horizontal'>\n  disabled: Ref<boolean>\n  elevation: Ref<number | string | undefined>\n  min: Ref<number>\n  max: Ref<number>\n  mousePressed: Ref<boolean>\n  noKeyboard: Ref<boolean>\n  numTicks: Ref<number>\n  onSliderMousedown: (e: MouseEvent) => void\n  onSliderTouchstart: (e: TouchEvent) => void\n  parseMouseMove: (e: MouseEvent | TouchEvent) => number | void\n  position: (val: number) => number\n  readonly: Ref<boolean>\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  thumbLabelColor: Ref<string | undefined>\n  trackColor: Ref<string | undefined>\n  trackFillColor: Ref<string | undefined>\n  trackSize: Ref<number>\n  ticks: Ref<readonly number[] | Record<string, string> | undefined>\n  tickSize: Ref<number>\n  trackContainerRef: Ref<VSliderTrack | undefined>\n  vertical: Ref<boolean>\n  parsedTicks: Ref<Tick[]>\n  hasLabels: Ref<boolean>\n  isReversed: Ref<boolean>\n  indexFromEnd: Ref<boolean>\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: {\n    type: Boolean as PropType<boolean | null>,\n    default: null,\n  },\n  error: Boolean,\n  readonly: {\n    type: Boolean as PropType<boolean | null>,\n    default: null,\n  },\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' | 'hover' | undefined>,\n    default: undefined,\n    validator: (v: any) => isBoolean(v) || v === 'always' || v === 'hover',\n  },\n  thumbSize: {\n    type: [Number, String],\n    default: 20,\n  },\n  showTicks: {\n    type: [Boolean, String] as PropType<boolean | 'always'>,\n    default: false,\n    validator: (v: any) => isBoolean(v) || v === 'always',\n  },\n  ticks: {\n    type: [Array, Object] as PropType<readonly number[] | Record<number, 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  noKeyboard: Boolean,\n\n  ...makeRoundedProps(),\n  ...makeElevationProps({\n    elevation: 1,\n  }),\n  ripple: {\n    type: Boolean,\n    default: true,\n  },\n}, 'Slider')\n\ntype SliderProps = ExtractPropTypes<ReturnType<typeof makeSliderProps>>\n\ntype SliderData = {\n  value: number\n}\n\nexport const useSteps = (props: SliderProps) => {\n  const min = computed(() => parseFloat(props.min))\n  const max = computed(() => parseFloat(props.max))\n  const step = computed(() => Number(props.step) > 0 ? parseFloat(props.step) : 0)\n  const decimals = computed(() => Math.max(getDecimals(step.value), getDecimals(min.value)))\n\n  function roundValue (value: string | number) {\n    value = parseFloat(value)\n\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    let newValue = Math.round((clamped - offset) / step.value) * step.value + offset\n\n    if (clamped > newValue && newValue + step.value > max.value) {\n      newValue = max.value\n    }\n\n    return parseFloat(Math.min(newValue, max.value).toFixed(decimals.value))\n  }\n\n  return { min, max, step, decimals, roundValue }\n}\n\nexport const useSlider = ({\n  props,\n  steps,\n  onSliderStart,\n  onSliderMove,\n  onSliderEnd,\n  getActiveThumb,\n}: {\n  props: SliderProps\n  steps: ReturnType<typeof useSteps>\n  onSliderEnd: (data: SliderData) => void\n  onSliderStart: (data: SliderData) => void\n  onSliderMove: (data: SliderData) => void\n  getActiveThumb: (e: MouseEvent | TouchEvent) => HTMLElement\n}) => {\n  const form = useForm(props)\n  const { isRtl } = useRtl()\n  const isReversed = toRef(() => props.reverse)\n  const vertical = computed(() => props.direction === 'vertical')\n  const indexFromEnd = computed(() => vertical.value !== isReversed.value)\n\n  const { min, max, step, decimals, roundValue } = steps\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\n  const thumbColor = computed(() => props.error || form.isDisabled.value ? undefined : props.thumbColor ?? props.color)\n  const thumbLabelColor = computed(() => props.error || form.isDisabled.value ? undefined : props.thumbColor)\n  const trackColor = computed(() => props.error || form.isDisabled.value ? undefined : props.trackColor ?? props.color)\n  const trackFillColor = computed(() => props.error || form.isDisabled.value ? undefined : props.trackFillColor ?? props.color)\n\n  const mousePressed = shallowRef(false)\n\n  const startOffset = shallowRef(0)\n  const trackContainerRef = ref<VSliderTrack | undefined>()\n  const activeThumbRef = ref<HTMLElement | undefined>()\n\n  function parseMouseMove (e: MouseEvent | TouchEvent): number | void {\n    const el: HTMLElement = trackContainerRef.value?.$el\n\n    if (!el) return\n\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    } = el.getBoundingClientRect()\n    const clickOffset = getPosition(e, position)\n\n    // It is possible for left to be NaN, force to number\n    let clickPos = clamp((clickOffset - trackStart - startOffset.value) / trackLength) || 0\n\n    if (vertical ? indexFromEnd.value : indexFromEnd.value !== isRtl.value) clickPos = 1 - clickPos\n\n    return roundValue(min.value + clickPos * (max.value - min.value))\n  }\n\n  const handleStop = (e: MouseEvent | TouchEvent) => {\n    const value = parseMouseMove(e)\n    if (value != null) {\n      onSliderEnd({ value })\n    }\n\n    mousePressed.value = false\n    startOffset.value = 0\n  }\n\n  const handleStart = (e: MouseEvent | TouchEvent) => {\n    const value = parseMouseMove(e)\n    activeThumbRef.value = getActiveThumb(e)\n\n    if (!activeThumbRef.value) return\n\n    mousePressed.value = true\n\n    if (activeThumbRef.value.contains(e.target as Node)) {\n      startOffset.value = getOffset(e, activeThumbRef.value, props.direction)\n    } else {\n      startOffset.value = 0\n      if (value != null) {\n        onSliderMove({ value })\n      }\n    }\n\n    if (value != null) {\n      onSliderStart({ value })\n    }\n    nextTick(() => activeThumbRef.value?.focus())\n  }\n\n  const moveListenerOptions = { passive: true, capture: true }\n\n  function onMouseMove (e: MouseEvent | TouchEvent) {\n    const value = parseMouseMove(e)\n    if (value != null) {\n      onSliderMove({ value })\n    }\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    handleStop(e)\n\n    window.removeEventListener('touchmove', onMouseMove, moveListenerOptions)\n    e.target?.removeEventListener('touchend', onSliderTouchend as EventListener)\n  }\n\n  function onSliderTouchstart (e: TouchEvent) {\n    handleStart(e)\n\n    window.addEventListener('touchmove', onMouseMove, moveListenerOptions)\n    e.target?.addEventListener('touchend', onSliderTouchend as EventListener, { passive: false })\n  }\n\n  function onSliderMousedown (e: MouseEvent) {\n    if (e.button !== 0) return\n\n    e.preventDefault()\n\n    handleStart(e)\n\n    window.addEventListener('mousemove', onMouseMove, moveListenerOptions)\n    window.addEventListener('mouseup', onSliderMouseUp, { passive: false })\n  }\n\n  onScopeDispose(() => {\n    if (!IN_BROWSER) return\n    window.removeEventListener('touchmove', onMouseMove)\n    window.removeEventListener('mousemove', onMouseMove)\n    window.removeEventListener('mouseup', onSliderMouseUp)\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 showTicks = toRef(() => props.showTicks)\n  const parsedTicks = computed<Tick[]>(() => {\n    if (!showTicks.value) return []\n\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: parseFloat(key),\n      position: position(parseFloat(key)),\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    activeThumbRef,\n    color: toRef(() => props.color),\n    decimals,\n    disabled: form.isDisabled,\n    direction: toRef(() => props.direction),\n    elevation: toRef(() => props.elevation),\n    hasLabels,\n    isReversed,\n    indexFromEnd,\n    min,\n    max,\n    mousePressed,\n    noKeyboard: toRef(() => props.noKeyboard),\n    numTicks,\n    onSliderMousedown,\n    onSliderTouchstart,\n    parsedTicks,\n    parseMouseMove,\n    position,\n    readonly: form.isReadonly,\n    rounded: toRef(() => props.rounded),\n    roundValue,\n    showTicks,\n    startOffset,\n    step,\n    thumbSize,\n    thumbColor,\n    thumbLabelColor,\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 { VSliderSymbol } from './slider'\nimport { VScaleTransition } from '../transitions'\n\n// Composables\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { useElevation } from '@/composables/elevation'\nimport { useRtl } from '@/composables/locale'\n\n// Directives\nimport vRipple from '@/directives/ripple'\n\n// Utilities\nimport { computed, inject, shallowRef, watch } from 'vue'\nimport { convertToUnit, genericComponent, keyValues, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { RippleDirectiveBinding } from '@/directives/ripple'\n\nexport type VSliderThumbSlots = {\n  'thumb-label': { modelValue: number }\n}\n\nexport const makeVSliderThumbProps = propsFactory({\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  ripple: {\n    type: [Boolean, Object] as PropType<RippleDirectiveBinding['value']>,\n    default: true,\n  },\n  name: String,\n  noKeyboard: Boolean,\n\n  ...makeComponentProps(),\n}, 'VSliderThumb')\n\nexport const VSliderThumb = genericComponent<VSliderThumbSlots>()({\n  name: 'VSliderThumb',\n\n  directives: { vRipple },\n\n  props: makeVSliderThumbProps(),\n\n  emits: {\n    'update:modelValue': (v: number) => true,\n  },\n\n  setup (props, { slots, emit }) {\n    const slider = inject(VSliderSymbol)\n    const { isRtl, rtlClasses } = useRtl()\n    if (!slider) throw new Error('[Vuetify] v-slider-thumb must be used inside v-slider or v-range-slider')\n\n    const {\n      min,\n      max,\n      thumbColor,\n      thumbLabelColor,\n      step,\n      disabled,\n      thumbSize,\n      thumbLabel,\n      direction,\n      isReversed,\n      vertical,\n      readonly,\n      elevation,\n      mousePressed,\n      decimals,\n      indexFromEnd,\n    } = slider\n\n    const isHovered = shallowRef(false)\n    const isHidden = shallowRef(false)\n\n    const elevationProps = computed(() => !disabled.value ? elevation.value : undefined)\n    const { elevationClasses } = useElevation(elevationProps)\n    const { textColorClasses, textColorStyles } = useTextColor(thumbColor)\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(thumbLabelColor)\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 (props.noKeyboard || disabled.value) return\n      if (!relevantKeys.includes(e.key)) return\n\n      e.preventDefault()\n\n      const _step = step.value || 0.1\n      const steps = (max.value - min.value) / _step\n      if ([left, right, down, up].includes(e.key)) {\n        const increase = vertical.value\n          ? [isRtl.value ? left : right, isReversed.value ? down : up]\n          : indexFromEnd.value !== isRtl.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        if (direction === -1 && value === max.value && !multiplier && !Number.isInteger(steps)) {\n          value = value - (steps % 1) * _step\n        } else {\n          value = value + (direction * _step * multipliers.value[multiplier])\n        }\n      } else if (e.key === home) {\n        value = min.value\n      } else if (e.key === end) {\n        value = max.value\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      if (newValue != null) {\n        isHidden.value = false\n\n        emit('update:modelValue', newValue)\n      }\n    }\n\n    watch(() => props.focused, val => {\n      if (val) {\n        isHidden.value = false\n      }\n    })\n\n    useRender(() => {\n      const positionPercentage = convertToUnit(indexFromEnd.value ? 100 - props.position : props.position, '%')\n\n      const thumbLabelVisible = thumbLabel.value === 'always' ||\n        (thumbLabel.value === true && props.focused) ||\n        (thumbLabel.value === 'hover' && (isHovered.value || (props.focused && !isHidden.value)))\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            props.class,\n            rtlClasses.value,\n          ]}\n          style={[\n            {\n              '--v-slider-thumb-position': positionPercentage,\n              '--v-slider-thumb-size': convertToUnit(thumbSize.value),\n            },\n            props.style,\n          ]}\n          role=\"slider\"\n          tabindex={ disabled.value ? -1 : 0 }\n          aria-label={ props.name }\n          aria-valuemin={ min.value }\n          aria-valuemax={ max.value }\n          aria-valuenow={ props.modelValue }\n          aria-readonly={ !!readonly.value }\n          aria-orientation={ direction.value }\n          onKeydown={ !readonly.value ? onKeydown : undefined }\n          onMouseenter={ () => { isHovered.value = true } }\n          onMouseleave={ () => { isHovered.value = false; isHidden.value = true } }\n        >\n          <div\n            class={[\n              'v-slider-thumb__surface',\n              textColorClasses.value,\n              elevationClasses.value,\n            ]}\n            style={ textColorStyles.value }\n          />\n          <div\n            class={[\n              'v-slider-thumb__ripple',\n              textColorClasses.value,\n            ]}\n            style={ textColorStyles.value }\n            v-ripple={[props.ripple, null, ['circle', 'center']]}\n          />\n          <VScaleTransition origin=\"bottom center\">\n            <div\n              class=\"v-slider-thumb__label-container\"\n              v-show={ thumbLabelVisible }\n            >\n              <div\n                class={[\n                  'v-slider-thumb__label',\n                  backgroundColorClasses.value,\n                ]}\n                style={ backgroundColorStyles.value }\n              >\n                <div>\n                  { slots['thumb-label']?.({ modelValue: props.modelValue }) ?? props.modelValue.toFixed(step.value ? decimals.value : 1) }\n                </div>\n                <div class=\"v-slider-thumb__label-wedge\" />\n              </div>\n            </div>\n          </VScaleTransition>\n        </div>\n      )\n    })\n\n    return {}\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 { makeComponentProps } from '@/composables/component'\nimport { useRounded } from '@/composables/rounded'\n\n// Utilities\nimport { computed, inject } from 'vue'\nimport { convertToUnit, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { Tick } from './slider'\n\nexport type VSliderTrackSlots = {\n  'tick-label': { tick: Tick, index: number }\n}\n\nexport const makeVSliderTrackProps = propsFactory({\n  start: {\n    type: Number,\n    required: true,\n  },\n  stop: {\n    type: Number,\n    required: true,\n  },\n\n  ...makeComponentProps(),\n}, 'VSliderTrack')\n\nexport const VSliderTrack = genericComponent<VSliderTrackSlots>()({\n  name: 'VSliderTrack',\n\n  props: makeVSliderTrackProps(),\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      color,\n      parsedTicks,\n      rounded,\n      showTicks,\n      tickSize,\n      trackColor,\n      trackFillColor,\n      trackSize,\n      vertical,\n      min,\n      max,\n      indexFromEnd,\n    } = slider\n\n    const { roundedClasses, roundedStyles } = 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' : 'inline'}-${indexFromEnd.value ? 'end' : '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      if (!showTicks.value) return []\n\n      const ticks = vertical.value ? parsedTicks.value.slice().reverse() : parsedTicks.value\n\n      return ticks.map((tick, index) => {\n        const directionValue = tick.value !== min.value && tick.value !== max.value ? convertToUnit(tick.position, '%') : undefined\n\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                'v-slider-track__tick--first': tick.value === min.value,\n                'v-slider-track__tick--last': tick.value === max.value,\n              },\n            ]}\n            style={{ [startDir.value]: directionValue }}\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    useRender(() => {\n      return (\n        <div\n          class={[\n            'v-slider-track',\n            roundedClasses.value,\n            props.class,\n          ]}\n          style={[\n            {\n              '--v-slider-track-size': convertToUnit(trackSize.value),\n              '--v-slider-tick-size': convertToUnit(tickSize.value),\n            },\n            roundedStyles.value,\n            props.style,\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    return {}\n  },\n})\n\nexport type VSliderTrack = InstanceType<typeof VSliderTrack>\n","// Styles\nimport './VSlider.sass'\n\n// Components\nimport { VSliderThumb } from './VSliderThumb'\nimport { VSliderTrack } from './VSliderTrack'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\nimport { VLabel } from '@/components/VLabel'\n\n// Composables\nimport { makeSliderProps, useSlider, useSteps } from './slider'\nimport { makeFocusProps, useFocus } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useRtl } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { filterInputAttrs, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { VSliderThumbSlots } from './VSliderThumb'\nimport type { VSliderTrackSlots } from './VSliderTrack'\nimport type { VInputSlot, VInputSlots } from '@/components/VInput/VInput'\n\nexport type VSliderSlots = VInputSlots & VSliderThumbSlots & VSliderTrackSlots & {\n  label: VInputSlot\n}\n\nexport const makeVSliderProps = propsFactory({\n  ...makeFocusProps(),\n  ...makeSliderProps(),\n  ...makeVInputProps(),\n\n  modelValue: {\n    type: [Number, String],\n    default: 0,\n  },\n}, 'VSlider')\n\nexport const VSlider = genericComponent<VSliderSlots>()({\n  name: 'VSlider',\n\n  inheritAttrs: false,\n\n  props: makeVSliderProps(),\n\n  emits: {\n    'update:focused': (value: boolean) => true,\n    'update:modelValue': (v: number) => true,\n    start: (value: number) => true,\n    end: (value: number) => true,\n  },\n\n  setup (props, { slots, emit, attrs }) {\n    const thumbContainerRef = ref<VSliderThumb>()\n    const inputRef = ref<VInput>()\n    const { rtlClasses } = useRtl()\n\n    const steps = useSteps(props)\n\n    const model = useProxiedModel(\n      props,\n      'modelValue',\n      undefined,\n      value => {\n        return steps.roundValue(value == null ? steps.min.value : value)\n      },\n    )\n\n    const {\n      min,\n      max,\n      mousePressed,\n      roundValue,\n      onSliderMousedown,\n      onSliderTouchstart,\n      trackContainerRef,\n      position,\n      hasLabels,\n      disabled,\n      readonly,\n      noKeyboard,\n    } = useSlider({\n      props,\n      steps,\n      onSliderStart: () => {\n        if (!disabled.value && !readonly.value) {\n          emit('start', model.value)\n        }\n      },\n      onSliderEnd: ({ value }) => {\n        const roundedValue = roundValue(value)\n\n        if (!disabled.value && !readonly.value) {\n          model.value = roundedValue\n        }\n\n        emit('end', roundedValue)\n      },\n      onSliderMove: ({ value }) => {\n        if (!disabled.value && !readonly.value) {\n          model.value = roundValue(value)\n        }\n      },\n      getActiveThumb: () => thumbContainerRef.value?.$el,\n    })\n\n    const { isFocused, focus, blur } = useFocus(props)\n    const trackStop = computed(() => position(model.value))\n\n    useRender(() => {\n      const inputProps = VInput.filterProps(props)\n      const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n      const hasPrepend = !!(props.label || slots.label || slots.prepend)\n\n      return (\n        <VInput\n          ref={ inputRef }\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': disabled.value,\n            },\n            rtlClasses.value,\n            props.class,\n          ]}\n          style={ props.style }\n          { ...inputProps }\n          { ...rootAttrs }\n          focused={ isFocused.value }\n        >\n          {{\n            ...slots,\n            prepend: hasPrepend ? slotProps => (\n              <>\n                { slots.label?.(slotProps) ?? (\n                  props.label\n                    ? (\n                      <VLabel\n                        id={ slotProps.id.value }\n                        class=\"v-slider__label\"\n                        text={ props.label }\n                      />\n                    ) : undefined\n                )}\n\n                { slots.prepend?.(slotProps) }\n              </>\n            ) : undefined,\n            default: ({ id, messagesId }) => (\n              <div\n                class=\"v-slider__container\"\n                onMousedown={ !readonly.value ? onSliderMousedown : undefined }\n                onTouchstartPassive={ !readonly.value ? onSliderTouchstart : undefined }\n              >\n                <input\n                  id={ id.value }\n                  name={ props.name || id.value }\n                  disabled={ disabled.value }\n                  readonly={ readonly.value }\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                  aria-describedby={ messagesId.value }\n                  focused={ isFocused.value }\n                  noKeyboard={ noKeyboard.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                  ripple={ props.ripple }\n                  name={ props.name }\n                  { ...inputAttrs }\n                >\n                  {{ 'thumb-label': slots['thumb-label'] }}\n                </VSliderThumb>\n              </div>\n            ),\n          }}\n        </VInput>\n      )\n    })\n\n    return forwardRefs({\n      focus: () => thumbContainerRef.value?.$el.focus(),\n    }, inputRef)\n  },\n})\n\nexport type VSlider = InstanceType<typeof VSlider>\n","// Styles\nimport './VColorPickerPreview.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VSlider } from '@/components/VSlider'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { onUnmounted, toRef } from 'vue'\nimport { nullColor } from './util'\nimport {\n  defineComponent,\n  HSVtoCSS,\n  parseColor,\n  propsFactory,\n  RGBtoHSV,\n  SUPPORTS_EYE_DROPPER,\n  useRender,\n} from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { HSV } from '@/util'\n\nexport const makeVColorPickerPreviewProps = propsFactory({\n  color: {\n    type: Object as PropType<HSV | null>,\n  },\n  disabled: Boolean,\n  readonly: Boolean,\n  hideAlpha: Boolean,\n  hideEyeDropper: Boolean,\n  eyeDropperIcon: {\n    type: IconValue,\n    default: '$eyeDropper',\n  },\n\n  ...makeComponentProps(),\n}, 'VColorPickerPreview')\n\nexport const VColorPickerPreview = defineComponent({\n  name: 'VColorPickerPreview',\n\n  props: makeVColorPickerPreviewProps(),\n\n  emits: {\n    'update:color': (color: HSV) => true,\n  },\n\n  setup (props, { emit }) {\n    const { t } = useLocale()\n\n    const abortController = new AbortController()\n\n    const isInteractive = toRef(() => !props.disabled && !props.readonly)\n\n    onUnmounted(() => abortController.abort())\n\n    async function openEyeDropper () {\n      if (!SUPPORTS_EYE_DROPPER || !isInteractive.value) return\n\n      const eyeDropper = new window.EyeDropper()\n      try {\n        const result = await eyeDropper.open({ signal: abortController.signal })\n        const colorHexValue = RGBtoHSV(parseColor(result.sRGBHex))\n        emit('update:color', { ...(props.color ?? nullColor), ...colorHexValue })\n      } catch (e) {}\n    }\n\n    useRender(() => (\n      <div\n        class={[\n          'v-color-picker-preview',\n          {\n            'v-color-picker-preview--hide-alpha': props.hideAlpha,\n          },\n          props.class,\n        ]}\n        style={ props.style }\n      >\n        { SUPPORTS_EYE_DROPPER && !props.hideEyeDropper && (\n          <div class=\"v-color-picker-preview__eye-dropper\" key=\"eyeDropper\">\n            <VBtn\n              aria-label={ t('$vuetify.colorPicker.ariaLabel.eyedropper') }\n              density=\"comfortable\"\n              disabled={ props.disabled }\n              readonly={ props.readonly }\n              icon={ props.eyeDropperIcon }\n              variant=\"plain\"\n              onClick={ openEyeDropper }\n            />\n          </div>\n        )}\n\n        <div class=\"v-color-picker-preview__dot\">\n          <div style={{ background: HSVtoCSS(props.color ?? nullColor) }} />\n        </div>\n\n        <div class=\"v-color-picker-preview__sliders\">\n          <VSlider\n            class=\"v-color-picker-preview__track v-color-picker-preview__hue\"\n            aria-label={ t('$vuetify.colorPicker.ariaLabel.hueSlider') }\n            modelValue={ props.color?.h }\n            onUpdate:modelValue={ h => emit('update:color', { ...(props.color ?? nullColor), h }) }\n            step={ 1 }\n            min={ 0 }\n            max={ 360 }\n            disabled={ props.disabled }\n            readonly={ props.readonly }\n            thumbSize={ 14 }\n            trackSize={ 8 }\n            trackFillColor=\"white\"\n            hideDetails\n          />\n\n          { !props.hideAlpha && (\n            <VSlider\n              class=\"v-color-picker-preview__track v-color-picker-preview__alpha\"\n              aria-label={ t('$vuetify.colorPicker.ariaLabel.alphaSlider') }\n              modelValue={ props.color?.a ?? 1 }\n              onUpdate:modelValue={ a => emit('update:color', { ...(props.color ?? nullColor), a }) }\n              step={ 0.01 }\n              min={ 0 }\n              max={ 1 }\n              disabled={ props.disabled }\n              readonly={ props.readonly }\n              thumbSize={ 14 }\n              trackSize={ 8 }\n              trackFillColor=\"white\"\n              hideDetails\n            />\n          )}\n        </div>\n      </div>\n    ))\n\n    return {}\n  },\n})\n\nexport type VColorPickerPreview = InstanceType<typeof VColorPickerPreview>\n","export const red = {\n  base: '#f44336',\n  lighten5: '#ffebee',\n  lighten4: '#ffcdd2',\n  lighten3: '#ef9a9a',\n  lighten2: '#e57373',\n  lighten1: '#ef5350',\n  darken1: '#e53935',\n  darken2: '#d32f2f',\n  darken3: '#c62828',\n  darken4: '#b71c1c',\n  accent1: '#ff8a80',\n  accent2: '#ff5252',\n  accent3: '#ff1744',\n  accent4: '#d50000',\n}\n\nexport const pink = {\n  base: '#e91e63',\n  lighten5: '#fce4ec',\n  lighten4: '#f8bbd0',\n  lighten3: '#f48fb1',\n  lighten2: '#f06292',\n  lighten1: '#ec407a',\n  darken1: '#d81b60',\n  darken2: '#c2185b',\n  darken3: '#ad1457',\n  darken4: '#880e4f',\n  accent1: '#ff80ab',\n  accent2: '#ff4081',\n  accent3: '#f50057',\n  accent4: '#c51162',\n}\n\nexport const purple = {\n  base: '#9c27b0',\n  lighten5: '#f3e5f5',\n  lighten4: '#e1bee7',\n  lighten3: '#ce93d8',\n  lighten2: '#ba68c8',\n  lighten1: '#ab47bc',\n  darken1: '#8e24aa',\n  darken2: '#7b1fa2',\n  darken3: '#6a1b9a',\n  darken4: '#4a148c',\n  accent1: '#ea80fc',\n  accent2: '#e040fb',\n  accent3: '#d500f9',\n  accent4: '#aa00ff',\n}\n\nexport const deepPurple = {\n  base: '#673ab7',\n  lighten5: '#ede7f6',\n  lighten4: '#d1c4e9',\n  lighten3: '#b39ddb',\n  lighten2: '#9575cd',\n  lighten1: '#7e57c2',\n  darken1: '#5e35b1',\n  darken2: '#512da8',\n  darken3: '#4527a0',\n  darken4: '#311b92',\n  accent1: '#b388ff',\n  accent2: '#7c4dff',\n  accent3: '#651fff',\n  accent4: '#6200ea',\n}\n\nexport const indigo = {\n  base: '#3f51b5',\n  lighten5: '#e8eaf6',\n  lighten4: '#c5cae9',\n  lighten3: '#9fa8da',\n  lighten2: '#7986cb',\n  lighten1: '#5c6bc0',\n  darken1: '#3949ab',\n  darken2: '#303f9f',\n  darken3: '#283593',\n  darken4: '#1a237e',\n  accent1: '#8c9eff',\n  accent2: '#536dfe',\n  accent3: '#3d5afe',\n  accent4: '#304ffe',\n}\n\nexport const blue = {\n  base: '#2196f3',\n  lighten5: '#e3f2fd',\n  lighten4: '#bbdefb',\n  lighten3: '#90caf9',\n  lighten2: '#64b5f6',\n  lighten1: '#42a5f5',\n  darken1: '#1e88e5',\n  darken2: '#1976d2',\n  darken3: '#1565c0',\n  darken4: '#0d47a1',\n  accent1: '#82b1ff',\n  accent2: '#448aff',\n  accent3: '#2979ff',\n  accent4: '#2962ff',\n}\n\nexport const lightBlue = {\n  base: '#03a9f4',\n  lighten5: '#e1f5fe',\n  lighten4: '#b3e5fc',\n  lighten3: '#81d4fa',\n  lighten2: '#4fc3f7',\n  lighten1: '#29b6f6',\n  darken1: '#039be5',\n  darken2: '#0288d1',\n  darken3: '#0277bd',\n  darken4: '#01579b',\n  accent1: '#80d8ff',\n  accent2: '#40c4ff',\n  accent3: '#00b0ff',\n  accent4: '#0091ea',\n}\n\nexport const cyan = {\n  base: '#00bcd4',\n  lighten5: '#e0f7fa',\n  lighten4: '#b2ebf2',\n  lighten3: '#80deea',\n  lighten2: '#4dd0e1',\n  lighten1: '#26c6da',\n  darken1: '#00acc1',\n  darken2: '#0097a7',\n  darken3: '#00838f',\n  darken4: '#006064',\n  accent1: '#84ffff',\n  accent2: '#18ffff',\n  accent3: '#00e5ff',\n  accent4: '#00b8d4',\n}\n\nexport const teal = {\n  base: '#009688',\n  lighten5: '#e0f2f1',\n  lighten4: '#b2dfdb',\n  lighten3: '#80cbc4',\n  lighten2: '#4db6ac',\n  lighten1: '#26a69a',\n  darken1: '#00897b',\n  darken2: '#00796b',\n  darken3: '#00695c',\n  darken4: '#004d40',\n  accent1: '#a7ffeb',\n  accent2: '#64ffda',\n  accent3: '#1de9b6',\n  accent4: '#00bfa5',\n}\n\nexport const green = {\n  base: '#4caf50',\n  lighten5: '#e8f5e9',\n  lighten4: '#c8e6c9',\n  lighten3: '#a5d6a7',\n  lighten2: '#81c784',\n  lighten1: '#66bb6a',\n  darken1: '#43a047',\n  darken2: '#388e3c',\n  darken3: '#2e7d32',\n  darken4: '#1b5e20',\n  accent1: '#b9f6ca',\n  accent2: '#69f0ae',\n  accent3: '#00e676',\n  accent4: '#00c853',\n}\n\nexport const lightGreen = {\n  base: '#8bc34a',\n  lighten5: '#f1f8e9',\n  lighten4: '#dcedc8',\n  lighten3: '#c5e1a5',\n  lighten2: '#aed581',\n  lighten1: '#9ccc65',\n  darken1: '#7cb342',\n  darken2: '#689f38',\n  darken3: '#558b2f',\n  darken4: '#33691e',\n  accent1: '#ccff90',\n  accent2: '#b2ff59',\n  accent3: '#76ff03',\n  accent4: '#64dd17',\n}\n\nexport const lime = {\n  base: '#cddc39',\n  lighten5: '#f9fbe7',\n  lighten4: '#f0f4c3',\n  lighten3: '#e6ee9c',\n  lighten2: '#dce775',\n  lighten1: '#d4e157',\n  darken1: '#c0ca33',\n  darken2: '#afb42b',\n  darken3: '#9e9d24',\n  darken4: '#827717',\n  accent1: '#f4ff81',\n  accent2: '#eeff41',\n  accent3: '#c6ff00',\n  accent4: '#aeea00',\n}\n\nexport const yellow = {\n  base: '#ffeb3b',\n  lighten5: '#fffde7',\n  lighten4: '#fff9c4',\n  lighten3: '#fff59d',\n  lighten2: '#fff176',\n  lighten1: '#ffee58',\n  darken1: '#fdd835',\n  darken2: '#fbc02d',\n  darken3: '#f9a825',\n  darken4: '#f57f17',\n  accent1: '#ffff8d',\n  accent2: '#ffff00',\n  accent3: '#ffea00',\n  accent4: '#ffd600',\n}\n\nexport const amber = {\n  base: '#ffc107',\n  lighten5: '#fff8e1',\n  lighten4: '#ffecb3',\n  lighten3: '#ffe082',\n  lighten2: '#ffd54f',\n  lighten1: '#ffca28',\n  darken1: '#ffb300',\n  darken2: '#ffa000',\n  darken3: '#ff8f00',\n  darken4: '#ff6f00',\n  accent1: '#ffe57f',\n  accent2: '#ffd740',\n  accent3: '#ffc400',\n  accent4: '#ffab00',\n}\n\nexport const orange = {\n  base: '#ff9800',\n  lighten5: '#fff3e0',\n  lighten4: '#ffe0b2',\n  lighten3: '#ffcc80',\n  lighten2: '#ffb74d',\n  lighten1: '#ffa726',\n  darken1: '#fb8c00',\n  darken2: '#f57c00',\n  darken3: '#ef6c00',\n  darken4: '#e65100',\n  accent1: '#ffd180',\n  accent2: '#ffab40',\n  accent3: '#ff9100',\n  accent4: '#ff6d00',\n}\n\nexport const deepOrange = {\n  base: '#ff5722',\n  lighten5: '#fbe9e7',\n  lighten4: '#ffccbc',\n  lighten3: '#ffab91',\n  lighten2: '#ff8a65',\n  lighten1: '#ff7043',\n  darken1: '#f4511e',\n  darken2: '#e64a19',\n  darken3: '#d84315',\n  darken4: '#bf360c',\n  accent1: '#ff9e80',\n  accent2: '#ff6e40',\n  accent3: '#ff3d00',\n  accent4: '#dd2c00',\n}\n\nexport const brown = {\n  base: '#795548',\n  lighten5: '#efebe9',\n  lighten4: '#d7ccc8',\n  lighten3: '#bcaaa4',\n  lighten2: '#a1887f',\n  lighten1: '#8d6e63',\n  darken1: '#6d4c41',\n  darken2: '#5d4037',\n  darken3: '#4e342e',\n  darken4: '#3e2723',\n}\n\nexport const blueGrey = {\n  base: '#607d8b',\n  lighten5: '#eceff1',\n  lighten4: '#cfd8dc',\n  lighten3: '#b0bec5',\n  lighten2: '#90a4ae',\n  lighten1: '#78909c',\n  darken1: '#546e7a',\n  darken2: '#455a64',\n  darken3: '#37474f',\n  darken4: '#263238',\n}\n\nexport const grey = {\n  base: '#9e9e9e',\n  lighten5: '#fafafa',\n  lighten4: '#f5f5f5',\n  lighten3: '#eeeeee',\n  lighten2: '#e0e0e0',\n  lighten1: '#bdbdbd',\n  darken1: '#757575',\n  darken2: '#616161',\n  darken3: '#424242',\n  darken4: '#212121',\n}\n\nexport const shades = {\n  black: '#000000',\n  white: '#ffffff',\n  transparent: '#ffffff00',\n}\n\nexport default {\n  red,\n  pink,\n  purple,\n  deepPurple,\n  indigo,\n  blue,\n  lightBlue,\n  cyan,\n  teal,\n  green,\n  lightGreen,\n  lime,\n  yellow,\n  amber,\n  orange,\n  deepOrange,\n  brown,\n  blueGrey,\n  grey,\n  shades,\n}\n","// Styles\nimport './VColorPickerSwatches.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\n\n// Utilities\nimport { toRef } from 'vue'\nimport {\n  convertToUnit,\n  deepEqual,\n  defineComponent,\n  getContrast,\n  parseColor,\n  propsFactory,\n  RGBtoCSS,\n  RGBtoHSV,\n  useRender,\n} from '@/util'\nimport colors from '@/util/colors'\n\n// Types\nimport type { DeepReadonly, PropType } from 'vue'\nimport type { Color, HSV } from '@/util'\n\nexport const makeVColorPickerSwatchesProps = propsFactory({\n  swatches: {\n    type: Array as PropType<DeepReadonly<Color[][]>>,\n    default: () => parseDefaultColors(colors),\n  },\n  disabled: Boolean,\n  readonly: Boolean,\n  color: Object as PropType<HSV | null>,\n  maxHeight: [Number, String],\n\n  ...makeComponentProps(),\n}, 'VColorPickerSwatches')\n\nfunction parseDefaultColors (colors: Record<string, Record<string, string>>) {\n  return Object.keys(colors).map(key => {\n    const color = colors[key]\n    return color.base ? [\n      color.base,\n      color.darken4,\n      color.darken3,\n      color.darken2,\n      color.darken1,\n      color.lighten1,\n      color.lighten2,\n      color.lighten3,\n      color.lighten4,\n      color.lighten5,\n    ] : [\n      color.black,\n      color.white,\n      color.transparent,\n    ]\n  })\n}\n\nexport const VColorPickerSwatches = defineComponent({\n  name: 'VColorPickerSwatches',\n\n  props: makeVColorPickerSwatchesProps(),\n\n  emits: {\n    'update:color': (color: HSV) => true,\n  },\n\n  setup (props, { emit }) {\n    const isInteractive = toRef(() => !props.disabled && !props.readonly)\n\n    function onSwatchClick (hsva: HSV) {\n      if (!isInteractive.value || !hsva) {\n        return\n      }\n\n      emit('update:color', hsva)\n    }\n\n    useRender(() => (\n      <div\n        class={[\n          'v-color-picker-swatches',\n          props.class,\n        ]}\n        style={[\n          { maxHeight: convertToUnit(props.maxHeight) },\n          props.style,\n        ]}\n      >\n        <div>\n          { props.swatches.map(swatch => (\n            <div class=\"v-color-picker-swatches__swatch\">\n              { swatch.map(color => {\n                const rgba = parseColor(color)\n                const hsva = RGBtoHSV(rgba)\n                const background = RGBtoCSS(rgba)\n\n                return (\n                  <div\n                    class={[\n                      'v-color-picker-swatches__color',\n                      {\n                        'v-color-picker-swatches__color--disabled': props.disabled,\n                      },\n                    ]}\n                    onClick={ () => onSwatchClick(hsva) }\n                  >\n                    <div style={{ background }}>\n                      { props.color && deepEqual(props.color, hsva)\n                        ? <VIcon size=\"x-small\" icon=\"$success\" color={ getContrast(color, '#FFFFFF') > 2 ? 'white' : 'black' } />\n                        : undefined\n                      }\n                    </div>\n                  </div>\n                )\n              })}\n            </div>\n          ))}\n        </div>\n      </div>\n    ))\n\n    return {}\n  },\n})\n\nexport type VColorPickerSwatches = InstanceType<typeof VColorPickerSwatches>\n","// Utilities\nimport { createSimpleFunctional } from '@/util'\n\nexport const VPickerTitle = createSimpleFunctional('v-picker-title')\n\nexport type VPickerTitle = InstanceType<typeof VPickerTitle>\n","// Styles\nimport './VPicker.sass'\n\n// Components\nimport { VPickerTitle } from './VPickerTitle'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider/VDefaultsProvider'\nimport { makeVSheetProps, VSheet } from '@/components/VSheet/VSheet'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nexport type VPickerSlots = {\n  header: never\n  default: never\n  actions: never\n  title: never\n}\n\nexport const makeVPickerProps = propsFactory({\n  bgColor: String,\n  divided: Boolean,\n  landscape: Boolean,\n  title: String,\n  hideHeader: Boolean,\n  hideTitle: Boolean,\n\n  ...makeVSheetProps(),\n}, 'VPicker')\n\nexport const VPicker = genericComponent<VPickerSlots>()({\n  name: 'VPicker',\n\n  props: makeVPickerProps(),\n\n  setup (props, { slots }) {\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)\n    useRender(() => {\n      const sheetProps = VSheet.filterProps(props)\n      const hasTitle = !props.hideTitle && !!(props.title || slots.title)\n\n      return (\n        <VSheet\n          { ...sheetProps }\n          color={ props.bgColor }\n          class={[\n            'v-picker',\n            {\n              'v-picker--divided': props.divided,\n              'v-picker--landscape': props.landscape,\n              'v-picker--with-actions': !!slots.actions,\n            },\n            props.class,\n          ]}\n          style={ props.style }\n        >\n          { !props.hideHeader && (\n            <div\n              key=\"header\"\n              class={[\n                'v-picker__header-wrapper',\n                backgroundColorClasses.value,\n              ]}\n              style={[\n                backgroundColorStyles.value,\n              ]}\n            >\n              { hasTitle && (\n                <VPickerTitle key=\"picker-title\">\n                  { slots.title?.() ?? props.title }\n                </VPickerTitle>\n              )}\n\n              { slots.header && (\n                <div class=\"v-picker__header\">\n                  { slots.header() }\n                </div>\n              )}\n            </div>\n          )}\n\n          <div class=\"v-picker__body\">\n            { slots.default?.() }\n          </div>\n\n          { slots.actions && (\n            <VDefaultsProvider\n              defaults={{\n                VBtn: {\n                  slim: true,\n                  variant: 'text',\n                },\n              }}\n            >\n              <div class=\"v-picker__actions\">\n                { slots.actions() }\n              </div>\n            </VDefaultsProvider>\n          )}\n        </VSheet>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VPicker = InstanceType<typeof VPicker>\n","// Styles\nimport './VColorPicker.sass'\n\n// Components\nimport { VColorPickerCanvas } from './VColorPickerCanvas'\nimport { VColorPickerEdit } from './VColorPickerEdit'\nimport { makeVColorPickerPreviewProps, VColorPickerPreview } from './VColorPickerPreview'\nimport { VColorPickerSwatches } from './VColorPickerSwatches'\nimport { makeVPickerProps, VPicker } from '@/components/VPicker/VPicker'\n\n// Composables\nimport { useRtl } from '@/composables'\nimport { provideDefaults } from '@/composables/defaults'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, onBeforeMount, ref, watch } from 'vue'\nimport { extractColor, modes, nullColor } from './util'\nimport { consoleWarn, defineComponent, HSVtoCSS, parseColor, pick, propsFactory, RGBtoHSV, useRender } from '@/util'\n\n// Types\nimport type { DeepReadonly, PropType } from 'vue'\nimport type { Color, HSV } from '@/util'\n\nexport const makeVColorPickerProps = propsFactory({\n  canvasHeight: {\n    type: [String, Number],\n    default: 150,\n  },\n  disabled: Boolean,\n  dotSize: {\n    type: [Number, String],\n    default: 10,\n  },\n  hideCanvas: Boolean,\n  hideSliders: Boolean,\n  hideInputs: Boolean,\n  hideInputLabels: Boolean,\n  mode: {\n    type: String as PropType<keyof typeof modes>,\n    default: 'rgba',\n    validator: (v: string) => Object.keys(modes).includes(v),\n  },\n  modes: {\n    type: Array as PropType<readonly (keyof typeof modes)[]>,\n    default: () => Object.keys(modes),\n    validator: (v: any) => Array.isArray(v) && v.every(m => Object.keys(modes).includes(m)),\n  },\n  showSwatches: Boolean,\n  readonly: Boolean,\n  swatches: Array as PropType<DeepReadonly<Color[][]>>,\n  swatchesMaxHeight: {\n    type: [Number, String],\n    default: 150,\n  },\n  modelValue: {\n    type: [Object, String] as PropType<Record<string, unknown> | string | undefined | null>,\n  },\n\n  ...makeVPickerProps({ hideHeader: true }),\n  ...pick(makeVColorPickerPreviewProps(), ['hideEyeDropper', 'eyeDropperIcon']),\n}, 'VColorPicker')\n\nexport const VColorPicker = defineComponent({\n  name: 'VColorPicker',\n\n  props: makeVColorPickerProps(),\n\n  emits: {\n    'update:modelValue': (color: any) => true,\n    'update:mode': (mode: keyof typeof modes) => true,\n  },\n\n  setup (props, { slots }) {\n    const mode = useProxiedModel(props, 'mode')\n    const hue = ref<number | null>(null)\n    const model = useProxiedModel(\n      props,\n      'modelValue',\n      undefined,\n      v => {\n        if (v == null || v === '') return null\n\n        let c: HSV\n        try {\n          c = RGBtoHSV(parseColor(v as any))\n        } catch (err) {\n          consoleWarn(err as any)\n          return null\n        }\n\n        return c\n      },\n      v => {\n        if (!v) return null\n\n        return extractColor(v, props.modelValue)\n      }\n    )\n    const currentColor = computed(() => {\n      return model.value\n        ? { ...model.value, h: hue.value ?? model.value.h }\n        : null\n    })\n    const { rtlClasses } = useRtl()\n\n    let externalChange = true\n    watch(model, v => {\n      if (!externalChange) {\n        // prevent hue shift from rgb conversion inaccuracy\n        externalChange = true\n        return\n      }\n      if (!v) return\n      hue.value = v.h\n    }, { immediate: true })\n\n    const updateColor = (hsva: HSV) => {\n      externalChange = false\n      hue.value = hsva.h\n      model.value = hsva\n    }\n\n    onBeforeMount(() => {\n      if (!props.modes.includes(mode.value)) mode.value = props.modes[0]\n    })\n\n    provideDefaults({\n      VSlider: {\n        color: null,\n        trackColor: null,\n        trackFillColor: null,\n      },\n    })\n\n    useRender(() => {\n      const pickerProps = VPicker.filterProps(props)\n\n      return (\n        <VPicker\n          { ...pickerProps }\n          class={[\n            'v-color-picker',\n            rtlClasses.value,\n            props.class,\n          ]}\n          style={[\n            {\n              '--v-color-picker-color-hsv': HSVtoCSS({ ...(currentColor.value ?? nullColor), a: 1 }),\n            },\n            props.style,\n          ]}\n          v-slots={{\n            ...slots,\n            default: () => (\n              <>\n                { !props.hideCanvas && (\n                  <VColorPickerCanvas\n                    key=\"canvas\"\n                    color={ currentColor.value }\n                    onUpdate:color={ updateColor }\n                    disabled={ props.disabled }\n                    readonly={ props.readonly }\n                    dotSize={ props.dotSize }\n                    width={ props.width }\n                    height={ props.canvasHeight }\n                  />\n                )}\n\n                { (!props.hideSliders || !props.hideInputs) && (\n                  <div key=\"controls\" class=\"v-color-picker__controls\">\n                    { !props.hideSliders && (\n                      <VColorPickerPreview\n                        key=\"preview\"\n                        color={ currentColor.value }\n                        onUpdate:color={ updateColor }\n                        hideAlpha={ !mode.value.endsWith('a') }\n                        disabled={ props.disabled }\n                        readonly={ props.readonly }\n                        hideEyeDropper={ props.hideEyeDropper }\n                        eyeDropperIcon={ props.eyeDropperIcon }\n                      />\n                    )}\n\n                    { !props.hideInputs && (\n                      <VColorPickerEdit\n                        key=\"edit\"\n                        modes={ props.modes }\n                        mode={ mode.value }\n                        onUpdate:mode={ m => mode.value = m }\n                        color={ currentColor.value }\n                        onUpdate:color={ updateColor }\n                        disabled={ props.disabled }\n                        readonly={ props.readonly }\n                        hideInputLabels={ props.hideInputLabels }\n                      />\n                    )}\n                  </div>\n                )}\n\n                { props.showSwatches && (\n                  <VColorPickerSwatches\n                    key=\"swatches\"\n                    color={ currentColor.value }\n                    onUpdate:color={ updateColor }\n                    maxHeight={ props.swatchesMaxHeight }\n                    swatches={ props.swatches }\n                    disabled={ props.disabled }\n                    readonly={ props.readonly }\n                  />\n                )}\n              </>\n            ),\n          }}\n        />\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VColorPicker = InstanceType<typeof VColorPicker>\n","// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { injectNestedDefaults } from '@/composables/defaults'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref, watchEffect } from 'vue'\nimport { deepEqual, deepToRaw, genericComponent, isBoolean, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType, Ref, VNode } from 'vue'\nimport type { GenericProps } from '@/util'\n\nexport type VConfirmEditSlots<T> = {\n  default: {\n    model: Ref<T>\n    save: () => void\n    cancel: () => void\n    isPristine: boolean\n    get actions (): (props?: {}) => VNode\n  }\n}\n\nexport const makeVConfirmEditProps = propsFactory({\n  modelValue: null,\n  color: String,\n  cancelText: {\n    type: String,\n    default: '$vuetify.confirmEdit.cancel',\n  },\n  okText: {\n    type: String,\n    default: '$vuetify.confirmEdit.ok',\n  },\n  disabled: {\n    type: [Boolean, Array] as PropType<boolean | ('save' | 'cancel')[]>,\n    default: undefined,\n  },\n  hideActions: Boolean,\n}, 'VConfirmEdit')\n\nexport const VConfirmEdit = genericComponent<new <T> (\n  props: {\n    modelValue?: T\n    'onUpdate:modelValue'?: (value: T) => void\n    'onSave'?: (value: T) => void\n  },\n  slots: VConfirmEditSlots<T>\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VConfirmEdit',\n\n  props: makeVConfirmEditProps(),\n\n  emits: {\n    cancel: () => true,\n    save: (value: any) => true,\n    'update:modelValue': (value: any) => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const btnDefaults = injectNestedDefaults<VBtn['$props']>('VBtn')\n    const model = useProxiedModel(props, 'modelValue')\n    const internalModel = ref()\n    watchEffect(() => {\n      internalModel.value = structuredClone(deepToRaw(model.value))\n    })\n\n    const { t } = useLocale()\n\n    const isPristine = computed(() => {\n      return deepEqual(model.value, internalModel.value)\n    })\n\n    function isActionDisabled (action: 'save' | 'cancel') {\n      if (isBoolean(props.disabled)) {\n        return props.disabled\n      }\n\n      if (Array.isArray(props.disabled)) {\n        return props.disabled.includes(action)\n      }\n\n      return isPristine.value\n    }\n\n    const isSaveDisabled = computed(() => isActionDisabled('save'))\n    const isCancelDisabled = computed(() => isActionDisabled('cancel'))\n\n    function save () {\n      model.value = internalModel.value\n      emit('save', internalModel.value)\n    }\n\n    function cancel () {\n      internalModel.value = structuredClone(deepToRaw(model.value))\n      emit('cancel')\n    }\n\n    function actions (actionsProps?: {}) {\n      return (\n        <>\n          <VBtn\n            disabled={ isCancelDisabled.value }\n            variant={ btnDefaults.value?.variant ?? 'text' }\n            color={ props.color }\n            onClick={ cancel }\n            text={ t(props.cancelText) }\n            { ...actionsProps }\n          />\n\n          <VBtn\n            disabled={ isSaveDisabled.value }\n            variant={ btnDefaults.value?.variant ?? 'text' }\n            color={ props.color }\n            onClick={ save }\n            text={ t(props.okText) }\n            { ...actionsProps }\n          />\n        </>\n      )\n    }\n\n    let actionsUsed = false\n    useRender(() => {\n      return (\n        <>\n          {\n            slots.default?.({\n              model: internalModel,\n              save,\n              cancel,\n              isPristine: isPristine.value,\n              get actions () {\n                actionsUsed = true\n                return actions\n              },\n            })\n          }\n\n          { !props.hideActions && !actionsUsed && actions() }\n        </>\n      )\n    })\n\n    return {\n      save,\n      cancel,\n      isPristine,\n    }\n  },\n})\n\nexport type VConfirmEdit = InstanceType<typeof VConfirmEdit>\n","// Styles\nimport './VColorInput.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { makeVColorPickerProps, VColorPicker } from '@/components/VColorPicker/VColorPicker'\nimport { makeVConfirmEditProps, VConfirmEdit } from '@/components/VConfirmEdit/VConfirmEdit'\nimport { VMenu } from '@/components/VMenu/VMenu'\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\n\n// Composables\nimport { makeFocusProps } from '@/composables/focus'\nimport { closeWhenFocusLeaves, useOpenOnFocus } from '@/composables/openOnFocus'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref, shallowRef } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VTextFieldSlots } from '@/components/VTextField/VTextField'\n\nexport type VColorInputActionsSlot = {\n  save: () => void\n  cancel: () => void\n  isPristine: boolean\n}\n\nexport type VColorInputSlots = Omit<VTextFieldSlots, 'default'> & {\n  actions: VColorInputActionsSlot\n  default: never\n}\n\nconst availablePipLocations = ['prepend', 'prepend-inner', 'append', 'append-inner'] as const\nexport type PipLocation = typeof availablePipLocations[number]\n\nexport const makeVColorInputProps = propsFactory({\n  hidePip: Boolean,\n  colorPip: Boolean,\n  menuProps: Object as PropType<VMenu['$props']>,\n  openOnFocus: Boolean,\n  pipIcon: {\n    type: String,\n    default: '$color',\n  },\n  pipLocation: {\n    type: String as PropType<PipLocation>,\n    default: 'prepend',\n    validator: (v: any) => availablePipLocations.includes(v),\n  },\n  pipVariant: {\n    type: String as PropType<VAvatar['$props']['variant']>,\n    default: 'text',\n  },\n  pickerProps: Object as PropType<VColorPicker['$props']>,\n\n  ...makeFocusProps(),\n  ...makeVConfirmEditProps(),\n  ...makeVTextFieldProps(),\n  ...omit(makeVColorPickerProps(), [\n    'location',\n    'height',\n    'minHeight',\n    'maxHeight',\n  ]),\n}, 'VColorInput')\n\nexport const VColorInput = genericComponent<VColorInputSlots>()({\n  name: 'VColorInput',\n\n  props: makeVColorInputProps(),\n\n  emits: {\n    'update:modelValue': (val: string) => true,\n  },\n\n  setup (props, { slots }) {\n    const model = useProxiedModel(props, 'modelValue')\n    const menu = shallowRef(false)\n    const vMenuRef = ref<VMenu>()\n    const vTextFieldRef = ref<VTextField>()\n    const isFocused = shallowRef(props.focused)\n\n    const isInteractive = computed(() => !props.disabled && !props.readonly)\n\n    const display = computed(() => model.value || null)\n\n    useOpenOnFocus(menu, isFocused, () => props.openOnFocus && isInteractive.value)\n\n    function onKeydown (e: KeyboardEvent) {\n      if (e.key !== 'Enter') return\n\n      if (!menu.value || !isFocused.value) {\n        menu.value = true\n\n        return\n      }\n\n      const target = e.target as HTMLInputElement\n\n      model.value = target.value\n    }\n\n    function onClick (e: MouseEvent) {\n      e.preventDefault()\n      e.stopPropagation()\n\n      menu.value = true\n    }\n\n    function onBlur () {\n      closeWhenFocusLeaves(menu, vTextFieldRef.value?.$el, vMenuRef.value?.contentEl)\n    }\n\n    function onSave () {\n      menu.value = false\n    }\n\n    function onCancel () {\n      menu.value = false\n    }\n\n    useRender(() => {\n      const confirmEditProps = VConfirmEdit.filterProps(props)\n      const colorPickerProps = {\n        ...VColorPicker.filterProps(omit(props, [\n          'active',\n          'bgColor',\n          'color',\n          'rounded',\n          'maxWidth',\n          'minWidth',\n          'width',\n        ])),\n        ...props.pickerProps,\n      }\n      const textFieldProps = VTextField.filterProps(props)\n\n      const slotWithPip = props.hidePip\n        ? undefined\n        : {\n          [props.pipLocation]: (arg: any) => (\n            <>\n              <VAvatar\n                class=\"v-color-input__pip\"\n                color={ props.colorPip ? model.value as string : undefined }\n                variant={ props.pipVariant }\n                icon={ props.pipIcon }\n              />\n              { slots[props.pipLocation]?.(arg) }\n            </>\n          ),\n        }\n\n      return (\n        <VTextField\n          ref={ vTextFieldRef }\n          { ...textFieldProps }\n          class={[\n            'v-color-input',\n            props.class,\n          ]}\n          style={ props.style }\n          modelValue={ display.value }\n          onKeydown={ isInteractive.value ? onKeydown : undefined }\n          focused={ menu.value || isFocused.value }\n          onClick:control={ !props.disabled ? onClick : undefined }\n          onClick:prependInner={ !props.disabled ? onClick : undefined }\n          onUpdate:focused={ event => isFocused.value = event }\n          onBlur={ onBlur }\n          onClick:appendInner={ !props.disabled ? onClick : undefined }\n          onUpdate:modelValue={ val => {\n            model.value = val\n          }}\n        >\n          {{\n            ...slots,\n            ...slotWithPip,\n            default: () => (\n              <>\n                <VMenu\n                  ref={ vMenuRef }\n                  v-model={ menu.value }\n                  activator=\"parent\"\n                  minWidth=\"0\"\n                  closeOnContentClick={ false }\n                  openOnClick={ false }\n                  { ...props.menuProps }\n                >\n                  <VConfirmEdit\n                    { ...confirmEditProps }\n                    v-model={ model.value }\n                    onSave={ onSave }\n                    onCancel={ onCancel }\n                  >\n                    {{\n                      default: ({ actions, model: proxyModel, save, cancel, isPristine }) => {\n                        function onUpdateModel (value: string) {\n                          if (!props.hideActions) {\n                            proxyModel.value = value\n                          } else {\n                            model.value = value\n                          }\n                        }\n\n                        return (\n                          <VColorPicker\n                            { ...colorPickerProps }\n                            modelValue={ props.hideActions ? model.value : proxyModel.value }\n                            onUpdate:modelValue={ value => onUpdateModel(value) }\n                          >\n                            {{\n                              actions: !props.hideActions ? () => slots.actions?.({ save, cancel, isPristine }) ?? actions() : undefined,\n                            }}\n                          </VColorPicker>\n                        )\n                      },\n                    }}\n                  </VConfirmEdit>\n                </VMenu>\n\n                { slots.default?.() }\n              </>\n            ),\n          }}\n        </VTextField>\n      )\n    })\n  },\n})\n\nexport type VColorInput = InstanceType<typeof VColorInput>\n","// Styles\nimport './VCombobox.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { VCheckboxBtn } from '@/components/VCheckbox'\nimport { VChip } from '@/components/VChip'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VDivider } from '@/components/VDivider'\nimport { VIcon } from '@/components/VIcon'\nimport { useInputIcon } from '@/components/VInput/InputIcon'\nimport { VList, VListItem, VListSubheader } from '@/components/VList'\nimport { VMenu } from '@/components/VMenu'\nimport { makeSelectProps } from '@/components/VSelect/VSelect'\nimport { VSheet } from '@/components/VSheet'\nimport { VTextField } from '@/components/VTextField'\nimport { makeVTextFieldProps } from '@/components/VTextField/VTextField'\nimport { VVirtualScroll } from '@/components/VVirtualScroll'\nimport { VHighlight } from '@/labs/VHighlight'\n\n// Composables\nimport { useFocusRepair } from '../VSelect/useFocusRepair'\nimport { useScrolling } from '../VSelect/useScrolling'\nimport { useSelectionMenu } from '../VSelect/useSelectionMenu'\nimport { useTextColor } from '@/composables/color'\nimport { injectNestedDefaults } from '@/composables/defaults'\nimport { useElevation } from '@/composables/elevation'\nimport { makeFilterProps, useFilter } from '@/composables/filter'\nimport { useFocusGroups } from '@/composables/focusGroups'\nimport { useForm } from '@/composables/form'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { transformItem, useItems } from '@/composables/list-items'\nimport { useLocale } from '@/composables/locale'\nimport { useMenuActivator } from '@/composables/menuActivator'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, mergeProps, nextTick, ref, shallowRef, toRef, watch } from 'vue'\nimport {\n  camelizeProps,\n  checkPrintable,\n  deepEqual,\n  ensureValidVNode,\n  escapeForRegex,\n  genericComponent,\n  getActiveElement,\n  IN_BROWSER,\n  isComposingIgnoreKey,\n  isFunction,\n  isNumber,\n  noop,\n  omit,\n  propsFactory,\n  useRender,\n  wrapInArray,\n} from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\nimport type { ListItem } from '@/composables/list-items'\nimport type { GenericProps, SelectItemKey } from '@/util'\n\ntype Primitive = string | number | boolean | symbol\n\ntype Val <T, ReturnObject extends boolean> = string | ([T] extends [Primitive]\n  ? T\n  : (ReturnObject extends true ? T : any))\n\ntype Value <T, ReturnObject extends boolean, Multiple extends boolean> =\n  Multiple extends true\n    ? readonly Val<T, ReturnObject>[]\n    : Val<T, ReturnObject> | null\n\nexport const makeVComboboxProps = propsFactory({\n  alwaysFilter: Boolean,\n  autoSelectFirst: {\n    type: [Boolean, String] as PropType<boolean | 'exact'>,\n  },\n  clearOnSelect: {\n    type: Boolean,\n    default: true,\n  },\n  delimiters: Array as PropType<readonly string[]>,\n  closeOnInputClick: Boolean,\n  trimValues: Boolean,\n\n  ...makeFilterProps({ filterKeys: ['title'] }),\n  ...makeSelectProps({ hideNoData: true, returnObject: true }),\n  ...omit(makeVTextFieldProps({\n    modelValue: null,\n    role: 'combobox',\n  }), ['validationValue', 'dirty']),\n}, 'VCombobox')\n\ntype ItemType<T> = T extends readonly (infer U)[] ? U : never\n\nexport const VCombobox = genericComponent<new <\n  T extends readonly any[],\n  Item = ItemType<T>,\n  ReturnObject extends boolean = true,\n  Multiple extends boolean = false,\n  V extends Value<Item, ReturnObject, Multiple> = Value<Item, ReturnObject, Multiple>\n>(\n  props: {\n    items?: T\n    itemTitle?: SelectItemKey<ItemType<T>>\n    itemValue?: SelectItemKey<ItemType<T>>\n    itemProps?: SelectItemKey<ItemType<T>>\n    returnObject?: ReturnObject\n    multiple?: Multiple\n    modelValue?: V | null\n    'onUpdate:modelValue'?: (value: V) => void\n  },\n  slots: Omit<VInputSlots & VFieldSlots, 'default'> & {\n    item: { item: Item, internalItem: ListItem<Item>, index: number, props: Record<string, unknown> }\n    chip: { item: Item, internalItem: ListItem<Item>, index: number, props: Record<string, unknown> }\n    selection: { item: Item, internalItem: ListItem<Item>, index: number }\n    subheader: { props: Record<string, unknown>, index: number }\n    divider: { props: Record<string, unknown>, index: number }\n    'prepend-item': never\n    'append-item': never\n    'no-data': never\n    'menu-header': { search: Ref<string | undefined>, filteredItems: ListItem<Item>[] }\n    'menu-footer': { search: Ref<string | undefined>, filteredItems: ListItem<Item>[] }\n  }\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VCombobox',\n\n  props: makeVComboboxProps(),\n\n  emits: {\n    'update:focused': (focused: boolean) => true,\n    'update:modelValue': (value: any) => true,\n    'update:search': (value: string) => true,\n    'update:menu': (value: boolean) => true,\n    'item:added': (item: ListItem) => true,\n    'item:removed': (item: ListItem) => true,\n    'item:created': (item: ListItem) => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const { t } = useLocale()\n    const { elevationClasses } = useElevation(toRef(() => props.menuElevation))\n\n    const vTextFieldRef = ref<VTextField>()\n    const vMenuRef = ref<VMenu>()\n    const listRef = ref<VList>()\n    const headerRef = ref<HTMLElement>()\n    const footerRef = ref<HTMLElement>()\n    const vVirtualScrollRef = ref<VVirtualScroll>()\n\n    const isFocused = shallowRef(false)\n    const isPristine = shallowRef(true)\n    const listHasFocus = shallowRef(false)\n    const selectionIndex = shallowRef(-1)\n    let cleared = false\n    const { items, transformIn, transformOut } = useItems(props)\n    const { textColorClasses, textColorStyles } = useTextColor(() => vTextFieldRef.value?.color)\n    const { InputIcon } = useInputIcon(props)\n    const model = useProxiedModel(\n      props,\n      'modelValue',\n      [],\n      v => transformIn(wrapInArray(v)),\n      v => {\n        const transformed = transformOut(v)\n        return props.multiple ? transformed : (transformed[0] ?? null)\n      }\n    )\n    const form = useForm(props)\n\n    const closableChips = toRef(() => props.closableChips && !form.isReadonly.value && !form.isDisabled.value)\n    const chipDefaults = injectNestedDefaults<VChip['$props']>('VChip')\n    const hasChips = computed(() => !!(props.chips || slots.chip))\n    const hasSelectionSlot = computed(() => hasChips.value || !!slots.selection)\n\n    const _search = shallowRef(!props.multiple && !hasSelectionSlot.value ? model.value[0]?.title ?? '' : '')\n    const _searchLock = shallowRef<string | null>(null)\n\n    const search = computed<string>({\n      get: () => {\n        return _search.value\n      },\n      set: async (val: string | null) => {\n        _search.value = val ?? ''\n        if (val === null || (val === '' && !props.multiple && !hasSelectionSlot.value)) {\n          for (const item of model.value) {\n            emit('item:removed', item)\n          }\n          model.value = []\n        } else if (!props.multiple && !hasSelectionSlot.value) {\n          model.value = [transformItem(props, val)]\n          nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0))\n        }\n\n        if (val && props.multiple && props.delimiters?.length) {\n          const values = splitByDelimiters(val)\n          if (values.length > 1) {\n            selectMultiple(values)\n            _search.value = ''\n          }\n        }\n\n        if (!val) selectionIndex.value = -1\n\n        isPristine.value = !val\n      },\n    })\n\n    const counterValue = computed(() => {\n      return isFunction(props.counterValue) ? props.counterValue(model.value)\n        : isNumber(props.counterValue) ? props.counterValue\n        : (props.multiple ? model.value.length : search.value.length)\n    })\n\n    const { filteredItems, getMatches } = useFilter(\n      props,\n      items,\n      () => _searchLock.value ?? (props.alwaysFilter || !isPristine.value ? search.value : '')\n    )\n\n    const displayItems = computed(() => {\n      if (props.hideSelected && _searchLock.value === null) {\n        return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value))\n      }\n      return filteredItems.value\n    })\n\n    const menuDisabled = computed(() => (\n      (props.hideNoData && !displayItems.value.length) ||\n      form.isReadonly.value || form.isDisabled.value\n    ))\n    const { menu, closeOnSelect } = useSelectionMenu(props, { vMenuRef, menuDisabled, isFocused })\n\n    const { menuId, ariaExpanded, ariaControls } = useMenuActivator(props, menu)\n\n    const {\n      listEvents,\n      onActivatorKeydown,\n      setPendingFocus,\n      flushPendingFocus,\n    } = useScrolling(\n      listRef,\n      vTextFieldRef,\n      vVirtualScrollRef,\n      displayItems,\n      {\n        selectedIndex: () => isPristine.value ? getSelectedIndex() : -1,\n        headerEl: () => headerRef.value,\n        menuContentEl: () => vMenuRef.value?.contentEl,\n        noAutoScroll: () => props.noAutoScroll,\n      }\n    )\n\n    watch(_search, value => {\n      if (cleared) {\n        // wait for clear to finish, VTextField sets _search to null\n        // then search computed triggers and updates _search to ''\n        nextTick(() => (cleared = false))\n      } else if (isFocused.value && !menu.value) {\n        menu.value = true\n      }\n\n      if (menu.value && isFocused.value) {\n        nextTick(() => {\n          vVirtualScrollRef.value?.scrollToIndex(0)\n          if (listRef.value?.$el?.contains(getActiveElement())) {\n            vTextFieldRef.value?.focus()\n          }\n        })\n      }\n\n      emit('update:search', value)\n    })\n\n    watch(model, value => {\n      if (!props.multiple && !hasSelectionSlot.value) {\n        _search.value = value[0]?.title ?? ''\n      }\n    })\n\n    const selectedValues = computed(() => model.value.map(selection => selection.value))\n\n    const firstSelectableItem = computed(() => displayItems.value.find(x => x.type === 'item' && !x.props.disabled))\n\n    const highlightFirst = computed(() => {\n      const selectFirst = props.autoSelectFirst === true ||\n        (props.autoSelectFirst === 'exact' && search.value === firstSelectableItem.value?.title)\n      return selectFirst &&\n        displayItems.value.length > 0 &&\n        !isPristine.value &&\n        !listHasFocus.value\n    })\n    const repairOrphanedFocus = useFocusRepair(\n      menu,\n      () => vMenuRef.value?.contentEl,\n      () => vTextFieldRef.value?.controlRef,\n    )\n    const { onTabKeydown } = useFocusGroups({\n      groups: [\n        { type: 'element' as const, contentRef: headerRef },\n        { type: 'list' as const, contentRef: listRef, displayItemsCount: () => displayItems.value.length },\n        { type: 'element' as const, contentRef: footerRef },\n      ],\n      onLeave: () => {\n        menu.value = false\n        vTextFieldRef.value?.focus()\n      },\n    })\n    function onClear (e: MouseEvent) {\n      cleared = true\n      nextTick(() => (cleared = false))\n\n      if (props.openOnClear) {\n        menu.value = true\n      }\n    }\n    function onMousedownControl () {\n      if (menuDisabled.value) return\n\n      menu.value = props.closeOnInputClick ? !menu.value : true\n    }\n    function onMousedownMenuIcon (e: MouseEvent) {\n      if (menuDisabled.value) return\n\n      if (isFocused.value) {\n        e.preventDefault()\n        e.stopPropagation()\n        menu.value = !menu.value\n      }\n    }\n    function onMenuKeydown (e: KeyboardEvent) {\n      if (e.key === 'Tab') {\n        onTabKeydown(e)\n      }\n\n      if (listRef.value?.$el.contains(e.target) && (checkPrintable(e) || e.key === 'Backspace')) {\n        vTextFieldRef.value?.focus()\n      }\n    }\n\n    function onKeydown (e: KeyboardEvent) {\n      if (isComposingIgnoreKey(e) || form.isReadonly.value) return\n\n      switch (e.key) {\n        case 'Escape':\n          menu.value = false\n          break\n        case 'ArrowDown':\n        case 'ArrowUp':\n          e.preventDefault()\n          if (onActivatorKeydown(e, menu)) break\n          if (e.key === 'ArrowDown' && highlightFirst.value) {\n            listRef.value?.focus('next')\n          }\n          break\n        case 'Enter':\n          e.preventDefault()\n          menu.value = true\n          selectHighlighted()\n          if (search.value) selectFreeText()\n          break\n        case 'Tab':\n          selectHighlighted()\n          menu.value = false\n          break\n        default:\n          onSelectionKeydown(e)\n      }\n    }\n\n    function selectHighlighted () {\n      const item = firstSelectableItem.value\n      if (!highlightFirst.value || !item) return\n      if (model.value.some(({ value }) => value === item.value)) return\n\n      select(item)\n    }\n\n    function selectFreeText () {\n      const value = props.trimValues ? search.value.trim() : search.value\n\n      if (!value) {\n        search.value = ''\n        return\n      }\n\n      select(transformItem(props, value), true, true)\n      if (hasSelectionSlot.value) _search.value = ''\n    }\n\n    function onSelectionKeydown (e: KeyboardEvent) {\n      const length = model.value.length\n\n      if (['Backspace', 'Delete'].includes(e.key)) {\n        if (\n          !props.multiple &&\n          hasSelectionSlot.value &&\n          length > 0 &&\n          !search.value\n        ) return select(model.value[0], false)\n\n        if (~selectionIndex.value) {\n          e.preventDefault()\n          const originalSelectionIndex = selectionIndex.value\n          select(model.value[selectionIndex.value], false)\n\n          selectionIndex.value = originalSelectionIndex >= length - 1 ? (length - 2) : originalSelectionIndex\n        } else if (e.key === 'Backspace' && !search.value) {\n          selectionIndex.value = length - 1\n        }\n\n        return\n      }\n\n      if (!props.multiple) return\n\n      if (e.key === 'ArrowLeft') {\n        if (selectionIndex.value < 0 && (vTextFieldRef.value?.selectionStart ?? 0) > 0) return\n\n        const prev = selectionIndex.value > -1\n          ? selectionIndex.value - 1\n          : length - 1\n\n        if (model.value[prev]) {\n          selectionIndex.value = prev\n        } else {\n          selectionIndex.value = -1\n          vTextFieldRef.value?.setSelectionRange(search.value.length, search.value.length)\n        }\n      } else if (e.key === 'ArrowRight') {\n        if (selectionIndex.value < 0) return\n\n        const next = selectionIndex.value + 1\n\n        if (model.value[next]) {\n          selectionIndex.value = next\n        } else {\n          selectionIndex.value = -1\n          vTextFieldRef.value?.setSelectionRange(0, 0)\n        }\n      } else if (~selectionIndex.value && checkPrintable(e)) {\n        selectionIndex.value = -1\n      }\n    }\n    function onPaste (e: ClipboardEvent) {\n      const clipboardText = e?.clipboardData?.getData('Text') ?? ''\n      const values = splitByDelimiters(clipboardText)\n\n      if (values.length > 1 && props.multiple) {\n        e.preventDefault()\n        selectMultiple(values)\n      }\n    }\n    function getSelectedIndex () {\n      return displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)))\n    }\n    function onAfterEnter () {\n      if (props.eager) {\n        vVirtualScrollRef.value?.calculateVisibleItems()\n      }\n      flushPendingFocus()\n    }\n    function onAfterLeave () {\n      if (isFocused.value) {\n        if (vMenuRef.value?.contentEl?._clickOutside?.lastMousedownWasOutside) {\n          isFocused.value = false\n        } else {\n          vTextFieldRef.value?.focus()\n        }\n      }\n      isPristine.value = true\n      _searchLock.value = null\n    }\n\n    function isExistingItem (item: ListItem) {\n      const comparator = props.valueComparator || deepEqual\n      return items.value.some(i => comparator(i.value, item.value))\n    }\n\n    /** @param set - null means toggle */\n    function select (item: ListItem | undefined, set: boolean | null = true, keepMenu = false) {\n      if (!item || item.props.disabled) return\n\n      const comparator = props.valueComparator || deepEqual\n\n      if (props.multiple) {\n        const index = model.value.findIndex(selection => comparator(selection.value, item.value))\n        const add = set == null ? !~index : set\n\n        if (~index) {\n          const value = add ? [...model.value, item] : [...model.value]\n          const [removed] = value.splice(index, 1)\n          if (!add) emit('item:removed', removed) // skip if only reordered\n          model.value = value\n        } else if (add) {\n          emit('item:added', item)\n          if (!isExistingItem(item)) emit('item:created', item)\n          model.value = [...model.value, item]\n        }\n\n        if (props.clearOnSelect) {\n          search.value = ''\n        }\n      } else {\n        const add = set !== false\n        const old = model.value[0]\n\n        if (add) {\n          if (old && !comparator(old.value, item.value)) {\n            emit('item:removed', old)\n            emit('item:added', item)\n            if (!isExistingItem(item)) emit('item:created', item)\n          } else if (!old) {\n            emit('item:added', item)\n            if (!isExistingItem(item)) emit('item:created', item)\n          }\n          model.value = [item]\n        } else {\n          if (old) emit('item:removed', old)\n          model.value = []\n        }\n\n        if ((!isPristine.value || props.alwaysFilter) && _search.value) {\n          _searchLock.value = _search.value\n        }\n        _search.value = add && !hasSelectionSlot.value ? item.title : ''\n\n        // watch for search watcher to trigger\n        nextTick(() => {\n          if (!keepMenu) closeOnSelect()\n          isPristine.value = true\n        })\n      }\n    }\n    function splitByDelimiters (val: string) {\n      const effectiveDelimiters = ['\\n', ...props.delimiters ?? []]\n      const signsToMatch = effectiveDelimiters.map(escapeForRegex).join('|')\n      return val.split(new RegExp(`(?:${signsToMatch})+`))\n    }\n    async function selectMultiple (values: string[]) {\n      for (let value of values) {\n        value = value.trim()\n        if (value) {\n          select(transformItem(props, value))\n          await nextTick()\n        }\n      }\n    }\n    function onFocusin (e: FocusEvent) {\n      isFocused.value = true\n      setTimeout(() => {\n        listHasFocus.value = true\n      })\n    }\n    function onFocusout (e: FocusEvent) {\n      listHasFocus.value = false\n      if (!vTextFieldRef.value?.$el.contains(e.relatedTarget as Node)) {\n        if (repairOrphanedFocus(e)) return\n        isFocused.value = false\n      }\n    }\n\n    let mousedownInsideContentAt = 0\n    function onMousedownContent () {\n      mousedownInsideContentAt = performance.now()\n    }\n\n    function onBlur (e: FocusEvent) {\n      const next = e.relatedTarget as Node | null\n      const menuContent = vMenuRef.value?.contentEl\n      if (\n        menuContent?.contains(next) ||\n        (!next && performance.now() - mousedownInsideContentAt < 10)\n      ) {\n        isFocused.value = true\n      }\n    }\n\n    watch(isFocused, (val, oldVal) => {\n      if (val || val === oldVal) return\n\n      selectionIndex.value = -1\n      menu.value = false\n\n      if (search.value) {\n        const value = props.trimValues ? search.value.trim() : search.value\n\n        if (!value) {\n          search.value = ''\n          return\n        }\n\n        if (props.multiple) {\n          select(transformItem(props, value))\n          return\n        }\n\n        if (!hasSelectionSlot.value) {\n          if (value !== search.value) select(transformItem(props, value))\n          return\n        }\n\n        if (model.value.some(({ title }) => title === value)) {\n          _search.value = ''\n        } else {\n          select(transformItem(props, value))\n        }\n      }\n    })\n\n    watch(menu, val => {\n      if (!val) setPendingFocus(null)\n\n      if (!props.hideSelected && val && model.value.length && isPristine.value) {\n        const index = getSelectedIndex()\n        IN_BROWSER && !props.noAutoScroll && window.requestAnimationFrame(() => {\n          index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index, 'center')\n        })\n      }\n\n      if (val) _searchLock.value = null\n    })\n\n    watch(items, (newVal, oldVal) => {\n      if (menu.value) return\n\n      if (isFocused.value && !oldVal.length && newVal.length) {\n        menu.value = true\n      }\n    })\n\n    useRender(() => {\n      const hasList = !!(\n        (!props.hideNoData || displayItems.value.length) ||\n        slots['prepend-item'] ||\n        slots['append-item'] ||\n        slots['no-data']\n      )\n      const isDirty = model.value.length > 0\n      const textFieldProps = VTextField.filterProps(props)\n\n      const menuSlotProps = {\n        search,\n        filteredItems: filteredItems.value,\n      }\n\n      return (\n        <VTextField\n          ref={ vTextFieldRef }\n          { ...textFieldProps }\n          form={ props.autocomplete === 'suppress' ? '' : undefined }\n          name={ props.autocomplete === 'suppress' ? props.name : undefined }\n          v-model={ search.value }\n          v-model:focused={ isFocused.value }\n          validationValue={ model.externalValue }\n          counterValue={ counterValue.value }\n          dirty={ isDirty }\n          class={[\n            'v-combobox',\n            {\n              'v-combobox--active-menu': menu.value,\n              'v-combobox--chips': !!props.chips,\n              'v-combobox--selection-slot': !!hasSelectionSlot.value,\n              'v-combobox--selecting-index': selectionIndex.value > -1,\n              [`v-combobox--${props.multiple ? 'multiple' : 'single'}`]: true,\n            },\n            props.class,\n          ]}\n          style={ props.style }\n          readonly={ form.isReadonly.value }\n          placeholder={ isDirty ? undefined : props.placeholder }\n          onClick:clear={ onClear }\n          onMousedown:control={ onMousedownControl }\n          onKeydown={ onKeydown }\n          onPaste={ onPaste }\n          onBlur={ onBlur }\n          aria-expanded={ ariaExpanded.value }\n          aria-controls={ ariaControls.value }\n        >\n          {{\n            ...slots,\n            default: ({ id }) => (\n              <>\n                { selectedValues.value.map((value, i) => (\n                  <input\n                    key={ i }\n                    type=\"hidden\"\n                    name={ props.name }\n                    value={ value }\n                    form={ props.form }\n                  />\n                ))}\n\n                <VMenu\n                  id={ menuId.value }\n                  ref={ vMenuRef }\n                  v-model={ menu.value }\n                  activator=\"parent\"\n                  captureFocus={ false }\n                  openOnArrow={ false }\n                  disabled={ menuDisabled.value }\n                  _disableKeys\n                  eager={ props.eager }\n                  maxHeight={ 310 }\n                  openOnClick={ false }\n                  closeOnContentClick={ false }\n                  onAfterEnter={ onAfterEnter }\n                  onAfterLeave={ onAfterLeave }\n                  { ...props.menuProps }\n                  contentClass={['v-combobox__content', elevationClasses.value, props.menuProps?.contentClass]}\n                >\n                  <VSheet\n                    onFocusin={ onFocusin }\n                    onKeydown={ onMenuKeydown }\n                    onMousedown={ onMousedownContent }\n                  >\n                    { slots['menu-header'] && (\n                      <header ref={ headerRef }>\n                        { slots['menu-header'](menuSlotProps) }\n                      </header>\n                    )}\n\n                    { hasList && (\n                      <VList\n                        key=\"combobox-list\"\n                        ref={ listRef }\n                        class=\"v-list--navigable\"\n                        filterable\n                        selected={ selectedValues.value }\n                        selectStrategy={ props.multiple ? 'independent' : 'single-independent' }\n                        onMousedown={ (e: MouseEvent) => e.preventDefault() }\n                        selectable={ !!displayItems.value.length }\n                        onFocusout={ onFocusout }\n                        tabindex=\"-1\"\n                        aria-live=\"polite\"\n                        aria-labelledby={ `${id.value}-label` }\n                        aria-multiselectable={ props.multiple }\n                        color={ props.itemColor ?? props.color }\n                        { ...listEvents }\n                        { ...props.listProps }\n                      >\n                      { slots['prepend-item']?.() }\n\n                      { !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? (\n                        <VListItem key=\"no-data\" title={ t(props.noDataText) } />\n                      ))}\n\n                      <VVirtualScroll ref={ vVirtualScrollRef } renderless items={ displayItems.value } itemKey=\"value\">\n                        { ({ item, index, itemRef }) => {\n                          const camelizedProps = camelizeProps(item.props)\n                          const itemProps = mergeProps(item.props, {\n                            ref: itemRef,\n                            key: item.value,\n                            active: (highlightFirst.value && item === firstSelectableItem.value) ? true : undefined,\n                            onClick: () => select(item, null),\n                            'aria-posinset': index + 1,\n                            'aria-setsize': displayItems.value.length,\n                          })\n\n                          if (item.type === 'divider') {\n                            return slots.divider?.({ props: item.raw, index }) ?? (\n                              <VDivider { ...item.props } ref={ itemRef } key={ `divider-${index}` } />\n                            )\n                          }\n\n                          if (item.type === 'subheader') {\n                            return slots.subheader?.({ props: item.raw, index }) ?? (\n                              <VListSubheader { ...item.props } ref={ itemRef } key={ `subheader-${index}` } />\n                            )\n                          }\n\n                          return slots.item?.({\n                            item: item.raw,\n                            internalItem: item,\n                            index,\n                            props: itemProps,\n                          }) ?? (\n                            <VListItem { ...itemProps } role=\"option\">\n                            {{\n                              prepend: ({ isSelected }) => (\n                                <>\n                                  { props.multiple && !props.hideSelected ? (\n                                    <VCheckboxBtn\n                                      key={ item.value }\n                                      modelValue={ isSelected }\n                                      ripple={ false }\n                                      tabindex=\"-1\"\n                                      aria-hidden\n                                      onClick={ (event: MouseEvent) => event.preventDefault() }\n                                    />\n                                  ) : undefined }\n\n                                  { camelizedProps.prependAvatar && (\n                                    <VAvatar image={ camelizedProps.prependAvatar } />\n                                  )}\n\n                                  { camelizedProps.prependIcon && (\n                                    <VIcon icon={ camelizedProps.prependIcon } />\n                                  )}\n                                </>\n                              ),\n                              title: () => {\n                                return isPristine.value\n                                  ? item.title\n                                  : (\n                                    <VHighlight\n                                      text={ item.title }\n                                      matches={ getMatches(item)?.title }\n                                      markClass=\"v-combobox__mask\"\n                                      matchAll\n                                      ignoreCase\n                                    />\n                                  )\n                              },\n                            }}\n                          </VListItem>\n                          )\n                        }}\n                      </VVirtualScroll>\n\n                      { slots['append-item']?.() }\n                    </VList>\n                    )}\n\n                    { slots['menu-footer'] && (\n                      <footer ref={ footerRef }>\n                        { slots['menu-footer'](menuSlotProps) }\n                      </footer>\n                    )}\n                  </VSheet>\n                </VMenu>\n\n                { model.value.map((item, index) => {\n                  function onChipClose (e: Event) {\n                    e.stopPropagation()\n                    e.preventDefault()\n\n                    select(item, false)\n                  }\n\n                  const slotProps = mergeProps(VChip.filterProps(item.props), {\n                    'onClick:close': onChipClose,\n                    onKeydown (e: KeyboardEvent) {\n                      if (e.key !== 'Enter' && e.key !== ' ') return\n\n                      e.preventDefault()\n                      e.stopPropagation()\n\n                      onChipClose(e)\n                    },\n                    onMousedown (e: MouseEvent) {\n                      e.preventDefault()\n                      e.stopPropagation()\n                    },\n                    modelValue: true,\n                    'onUpdate:modelValue': undefined,\n                  })\n\n                  const hasSlot = hasChips.value ? !!slots.chip : !!slots.selection\n                  const slotContent = hasSlot\n                    ? ensureValidVNode(\n                      hasChips.value\n                        ? slots.chip!({ item: item.raw, internalItem: item, index, props: slotProps })\n                        : slots.selection!({ item: item.raw, internalItem: item, index })\n                    )\n                    : undefined\n\n                  if (hasSlot && !slotContent) return undefined\n\n                  return (\n                    <div\n                      key={ item.value }\n                      class={[\n                        'v-combobox__selection',\n                        index === selectionIndex.value && [\n                          'v-combobox__selection--selected',\n                          textColorClasses.value,\n                        ],\n                      ]}\n                      style={ index === selectionIndex.value ? textColorStyles.value : {} }\n                    >\n                      { hasChips.value ? (\n                        !slots.chip ? (\n                          <VChip\n                            key=\"chip\"\n                            closable={ closableChips.value }\n                            size={ chipDefaults.value?.size ?? 'small' }\n                            text={ item.title }\n                            disabled={ item.props.disabled }\n                            { ...slotProps }\n                          />\n                        ) : (\n                          <VDefaultsProvider\n                            key=\"chip-defaults\"\n                            defaults={{\n                              VChip: {\n                                closable: closableChips.value,\n                                size: chipDefaults.value?.size ?? 'small',\n                                text: item.title,\n                              },\n                            }}\n                          >\n                            { slotContent }\n                          </VDefaultsProvider>\n                        )\n                      ) : (\n                        slotContent ?? (\n                          <span class=\"v-combobox__selection-text\">\n                            { item.title }\n                            { props.multiple && (index < model.value.length - 1) && (\n                              <span class=\"v-combobox__selection-comma\">,</span>\n                            )}\n                          </span>\n                        )\n                      )}\n                    </div>\n                  )\n                })}\n              </>\n            ),\n            'append-inner': (...args) => (\n              <>\n                { slots['append-inner']?.(...args) }\n                { (!props.hideNoData || props.items.length) && props.menuIcon ? (\n                  <VIcon\n                    class=\"v-combobox__menu-icon\"\n                    color={ vTextFieldRef.value?.fieldIconColor }\n                    icon={ props.menuIcon }\n                    onMousedown={ onMousedownMenuIcon }\n                    onClick={ noop }\n                    aria-hidden\n                    tabindex=\"-1\"\n                  />\n                ) : undefined }\n                { props.appendInnerIcon && (\n                  <InputIcon\n                    key=\"append-icon\"\n                    name=\"appendInner\"\n                    color={ args[0].iconColor.value }\n                  />\n                )}\n              </>\n            ),\n          }}\n        </VTextField>\n      )\n    })\n\n    return forwardRefs({\n      isFocused,\n      isPristine,\n      menu,\n      search,\n      selectionIndex,\n      filteredItems,\n      select,\n    }, vTextFieldRef)\n  },\n})\n\nexport type VCombobox = InstanceType<typeof VCombobox>\n","// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { inject, provide, toRaw, toRef } from 'vue'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType, Ref } from 'vue'\nimport type { DataTableItem } from '../types'\n\nexport const makeDataTableExpandProps = propsFactory({\n  expandOnClick: Boolean,\n  showExpand: Boolean,\n  expanded: {\n    type: Array as PropType<readonly string[]>,\n    default: () => ([]),\n  },\n  expandStrategy: {\n    type: String as PropType<'multiple' | 'single'>,\n    default: 'multiple',\n  },\n}, 'DataTable-expand')\n\nexport const VDataTableExpandedKey: InjectionKey<{\n  expand: (item: DataTableItem, value: boolean) => void\n  expanded: Ref<Set<string>>\n  expandOnClick: Ref<boolean | undefined>\n  isExpanded: (item: DataTableItem) => boolean\n  toggleExpand: (item: DataTableItem) => void\n}> = Symbol.for('vuetify:datatable:expanded')\n\ntype ExpandProps = {\n  expandOnClick: boolean\n  expanded: readonly string[]\n  expandStrategy: 'multiple' | 'single'\n  'onUpdate:expanded': ((value: any[]) => void) | undefined\n}\n\nexport function provideExpanded (props: ExpandProps) {\n  const expandOnClick = toRef(() => props.expandOnClick)\n  const expanded = useProxiedModel(props, 'expanded', props.expanded, v => {\n    return new Set(v)\n  }, v => {\n    return [...v.values()]\n  })\n\n  function expand (item: DataTableItem, value: boolean) {\n    const rawValue = toRaw(item.value)\n    const newExpanded = value && props.expandStrategy === 'single'\n      ? new Set<string>()\n      : new Set(expanded.value)\n\n    if (!value) {\n      const existing = [...expanded.value].find(x => toRaw(x) === rawValue)!\n      newExpanded.delete(existing)\n    } else {\n      newExpanded.add(item.value)\n    }\n\n    expanded.value = newExpanded\n  }\n\n  function isExpanded (item: DataTableItem) {\n    const rawValue = toRaw(item.value)\n    return [...expanded.value].some(x => toRaw(x) === rawValue)\n  }\n\n  function toggleExpand (item: DataTableItem) {\n    expand(item, !isExpanded(item))\n  }\n\n  const data = { expand, expanded, expandOnClick, isExpanded, toggleExpand }\n\n  provide(VDataTableExpandedKey, data)\n\n  return data\n}\n\nexport function useExpanded () {\n  const data = inject(VDataTableExpandedKey)\n\n  if (!data) throw new Error('foo')\n\n  return data\n}\n","// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, inject, provide, ref, shallowRef, toRef, toValue, watch } from 'vue'\nimport { getObjectValueByPath, propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, MaybeRefOrGetter, PropType, Ref } from 'vue'\nimport type { SortItem } from './sort'\nimport type { DataTableItem } from '../types'\n\nexport interface GroupableItem<T = any> {\n  type: 'item'\n  raw: T\n}\n\nexport interface Group<T = any> {\n  type: 'group'\n  depth: number\n  id: string\n  key: string\n  value: any\n  items: readonly (T | Group<T> | GroupSummary<T>)[]\n}\n\nexport interface GroupSummary<T = any> {\n  type: 'group-summary'\n  depth: number\n  id: string\n  key: string\n  value: any\n  items: readonly (T | Group<T> | GroupSummary<T>)[]\n}\n\nexport type GroupKeyFunction = (options: { key: string, value: any, parentKey: string | null }) => string\n\nexport const makeDataTableGroupProps = propsFactory({\n  groupBy: {\n    type: Array as PropType<readonly SortItem[]>,\n    default: () => ([]),\n  },\n  opened: {\n    type: Array as PropType<readonly string[]>,\n    default: () => ([]),\n  },\n  openAll: Boolean,\n  groupKey: Function as PropType<GroupKeyFunction>,\n}, 'DataTable-group')\n\nconst VDataTableGroupSymbol: InjectionKey<{\n  opened: Ref<Set<string>>\n  toggleGroup: (group: Group) => void\n  isGroupOpen: (group: Group) => boolean\n  sortByWithGroups: Ref<SortItem[]>\n  groupBy: Ref<readonly SortItem[]>\n  extractRows: (items: (DataTableItem | Group<DataTableItem>)[]) => DataTableItem[]\n}> = Symbol.for('vuetify:data-table-group')\n\ntype GroupProps = {\n  groupBy: readonly SortItem[]\n  'onUpdate:groupBy': ((value: SortItem[]) => void) | undefined\n  opened: readonly string[]\n  'onUpdate:opened': ((value: string[]) => void) | undefined\n  openAll: boolean\n  groupKey: GroupKeyFunction | undefined\n}\n\nexport function createGroupBy (props: GroupProps) {\n  const groupBy = useProxiedModel(props, 'groupBy')\n  const opened = useProxiedModel(props, 'opened')\n  const openAll = toRef(() => props.openAll)\n  const groupKey = toRef(() => props.groupKey)\n\n  return { groupBy, opened, openAll, groupKey }\n}\n\nexport function provideGroupBy (options: {\n  groupBy: Ref<readonly SortItem[]>\n  sortBy: Ref<readonly SortItem[]>\n  disableSort?: Ref<boolean>\n  opened?: Ref<readonly string[]>\n}) {\n  const { disableSort, groupBy, sortBy } = options\n\n  const openedModel = options.opened ?? ref<readonly string[]>([])\n\n  // Keep a Set mirror for O(1) lookups; the v-model carries the string[] form.\n  const localOpened = shallowRef(new Set<string>(openedModel.value))\n  watch(openedModel, val => { localOpened.value = new Set(val) })\n\n  const opened = computed<Set<string>>({\n    get: () => localOpened.value,\n    set: v => {\n      localOpened.value = v\n      openedModel.value = [...v.values()]\n    },\n  })\n\n  const sortByWithGroups = computed(() => {\n    return groupBy.value.map<SortItem>(val => ({\n      ...val,\n      order: val.order ?? false,\n    })).concat(disableSort?.value ? [] : sortBy.value)\n  })\n\n  function isGroupOpen (group: Group) {\n    return opened.value.has(group.id)\n  }\n\n  function toggleGroup (group: Group) {\n    const newOpened = new Set(opened.value)\n    if (isGroupOpen(group)) newOpened.delete(group.id)\n    else newOpened.add(group.id)\n    opened.value = newOpened\n  }\n\n  function extractRows <T extends GroupableItem> (items: readonly (T | Group<T> | GroupSummary<T>)[]) {\n    function dive (group: Group<T>): T[] {\n      const arr = []\n\n      for (const item of group.items) {\n        if ('type' in item && item.type === 'group') {\n          arr.push(...dive(item))\n        } else {\n          arr.push(item as T)\n        }\n      }\n\n      return [...new Set(arr)]\n    }\n    return dive({ type: 'group', items, id: 'dummy', key: 'dummy', value: 'dummy', depth: 0 })\n  }\n\n  const data = { sortByWithGroups, toggleGroup, opened, groupBy, extractRows, isGroupOpen }\n\n  provide(VDataTableGroupSymbol, data)\n\n  return data\n}\n\nexport function useGroupBy () {\n  const data = inject(VDataTableGroupSymbol)\n\n  if (!data) throw new Error('Missing group!')\n\n  return data\n}\n\nfunction groupItemsByProperty <T extends GroupableItem> (items: readonly T[], groupBy: string) {\n  if (!items.length) return []\n\n  const groups = new Map<any, T[]>()\n  for (const item of items) {\n    const value = getObjectValueByPath(item.raw, groupBy)\n\n    if (!groups.has(value)) {\n      groups.set(value, [])\n    }\n    groups.get(value)!.push(item)\n  }\n\n  return groups\n}\n\nconst defaultGroupId = (key: string, value: any, parentKey: string) => `${parentKey}_${key}_${value}`\n\nfunction groupItems <T extends GroupableItem> (\n  items: readonly T[],\n  groupBy: readonly string[],\n  groupKey?: GroupKeyFunction,\n  depth = 0,\n  parentKey = 'root',\n) {\n  if (!groupBy.length) return []\n\n  const groupedItems = groupItemsByProperty(items, groupBy[0])\n  const groups: Group<T>[] = []\n\n  const rest = groupBy.slice(1)\n  groupedItems.forEach((items, value) => {\n    const key = groupBy[0]\n    const id = groupKey\n      ? groupKey({ key, value, parentKey: depth === 0 ? null : parentKey })\n      : defaultGroupId(key, value, parentKey)\n    groups.push({\n      depth,\n      id,\n      key,\n      value,\n      items: rest.length ? groupItems(items, rest, groupKey, depth + 1, id) : items,\n      type: 'group',\n    })\n  })\n\n  return groups\n}\n\nfunction collectGroupIds <T extends GroupableItem> (groups: readonly Group<T>[]): string[] {\n  return groups.flatMap(group => [\n    group.id,\n    ...collectGroupIds(group.items.filter((item): item is Group<T> => 'type' in item && item.type === 'group')),\n  ])\n}\n\nexport function useOpenAllGroups (\n  opened: Ref<Set<string>>,\n  openAll: MaybeRefOrGetter<boolean>,\n  items: MaybeRefOrGetter<readonly GroupableItem[]>,\n  groupBy: Ref<readonly SortItem[]>,\n  groupKey?: MaybeRefOrGetter<GroupKeyFunction | undefined>,\n) {\n  const allIds = computed(() => {\n    if (!toValue(openAll) || !groupBy.value.length) return new Set<string>()\n    return new Set(collectGroupIds(\n      groupItems(toValue(items), groupBy.value.map(group => group.key), toValue(groupKey))\n    ))\n  })\n\n  watch(allIds, (newIds, oldIds) => {\n    if (!toValue(openAll)) return\n\n    const current = new Set(opened.value)\n    let changed = false\n\n    for (const id of newIds) {\n      if (!oldIds?.has(id) && !current.has(id)) { current.add(id); changed = true }\n    }\n    for (const id of oldIds ?? []) {\n      if (!newIds.has(id) && current.has(id)) { current.delete(id); changed = true }\n    }\n\n    if (changed) opened.value = current\n  }, { immediate: true })\n}\n\nfunction flattenItems <T extends GroupableItem> (\n  items: readonly (T | Group<T> | GroupSummary<T>)[],\n  isOpen: (group: Group) => boolean,\n  hasSummary: boolean\n): readonly (T | Group<T> | GroupSummary<T>)[] {\n  const flatItems: (T | Group<T> | GroupSummary<T>)[] = []\n\n  for (const item of items) {\n    // TODO: make this better\n    if ('type' in item && item.type === 'group') {\n      if (item.value != null) {\n        flatItems.push(item)\n      }\n\n      if (isOpen(item) || item.value == null) {\n        flatItems.push(...flattenItems(item.items, isOpen, hasSummary))\n\n        if (hasSummary) {\n          flatItems.push({ ...item, type: 'group-summary' })\n        }\n      }\n    } else {\n      flatItems.push(item)\n    }\n  }\n\n  return flatItems\n}\n\nexport function useGroupedItems <T extends GroupableItem> (\n  items: MaybeRefOrGetter<readonly T[]>,\n  groupBy: Ref<readonly SortItem[]>,\n  opened: Ref<Set<string>>,\n  hasSummary: MaybeRefOrGetter<boolean>,\n  isGroupOpen?: (group: Group) => boolean,\n  groupKey?: MaybeRefOrGetter<GroupKeyFunction | undefined>,\n) {\n  const groups = computed(() => {\n    if (!groupBy.value.length) return []\n    return groupItems(toValue(items), groupBy.value.map(item => item.key), toValue(groupKey))\n  })\n\n  const isOpen = isGroupOpen ?? ((group: Group) => opened.value.has(group.id))\n\n  const flatItems = computed(() => {\n    if (!groupBy.value.length) return toValue(items)\n    return flattenItems(groups.value, isOpen, toValue(hasSummary))\n  })\n\n  return { groups, flatItems }\n}\n","// Utilities\nimport { watch } from 'vue'\nimport { deepEqual, getCurrentInstance } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\nimport type { SortItem } from './sort'\n\nexport function useOptions ({\n  page,\n  itemsPerPage,\n  sortBy,\n  groupBy,\n  search,\n}: {\n  page: Ref<number>\n  itemsPerPage: Ref<number>\n  sortBy: Ref<readonly SortItem[]>\n  groupBy: Ref<readonly SortItem[]>\n  search: Ref<string | undefined>\n}) {\n  const vm = getCurrentInstance('VDataTable')\n\n  const options = () => ({\n    page: page.value,\n    itemsPerPage: itemsPerPage.value,\n    sortBy: sortBy.value,\n    groupBy: groupBy.value,\n    search: search.value,\n  })\n\n  let oldOptions: ReturnType<typeof options> | null = null\n  watch(options, value => {\n    if (deepEqual(oldOptions, value)) return\n\n    // Reset page when searching\n    if (oldOptions && oldOptions.search !== value.search) {\n      page.value = 1\n      value.page = 1\n    }\n\n    vm.emit('update:options', value)\n    oldOptions = value\n  }, { deep: true, immediate: true })\n}\n","// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, inject, provide, toValue, watch } from 'vue'\nimport { clamp, getCurrentInstance, propsFactory } from '@/util'\n\n// Types\nimport type { ComputedRef, InjectionKey, MaybeRefOrGetter, PropType, Ref } from 'vue'\nimport type { Group, GroupableItem, GroupSummary } from './group'\nimport type { EventProp } from '@/util'\n\nexport const makeDataTablePaginateProps = propsFactory({\n  page: {\n    type: [Number, String],\n    default: 1,\n  },\n  itemsPerPage: {\n    type: [Number, String],\n    default: 10,\n  },\n  pageBy: {\n    type: String as PropType<'item' | 'any' | 'auto'>,\n    default: 'any',\n  },\n}, 'DataTable-paginate')\n\nexport type VDataTablePaginationInjectionData = {\n  page: Ref<number>\n  itemsPerPage: Ref<number>\n  startIndex: Ref<number>\n  stopIndex: Ref<number>\n  pageCount: Ref<number>\n  itemsLength: Ref<number>\n  prevPage: () => void\n  nextPage: () => void\n  setPage: (value: number) => void\n  setItemsPerPage: (value: number) => void\n}\n\nconst VDataTablePaginationSymbol: InjectionKey<VDataTablePaginationInjectionData> = Symbol.for('vuetify:data-table-pagination')\n\ntype PaginationProps = {\n  page: number | string\n  'onUpdate:page': EventProp | undefined\n  itemsPerPage: number | string\n  'onUpdate:itemsPerPage': EventProp | undefined\n  itemsLength?: number | string\n}\n\nexport function createPagination (props: PaginationProps) {\n  const page = useProxiedModel(props, 'page', undefined, value => Number(value ?? 1))\n  const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => Number(value ?? 10))\n\n  return { page, itemsPerPage }\n}\n\nexport function providePagination (options: {\n  page: Ref<number>\n  itemsPerPage: Ref<number>\n  itemsLength: Ref<number>\n}) {\n  const { page, itemsPerPage, itemsLength } = options\n\n  const startIndex = computed(() => {\n    if (itemsPerPage.value === -1) return 0\n\n    return itemsPerPage.value * (page.value - 1)\n  })\n  const stopIndex = computed(() => {\n    if (itemsPerPage.value === -1) return itemsLength.value\n\n    return Math.min(itemsLength.value, startIndex.value + itemsPerPage.value)\n  })\n\n  const pageCount = computed(() => {\n    if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1\n\n    return Math.ceil(itemsLength.value / itemsPerPage.value)\n  })\n\n  // Don't run immediately, items may not have been loaded yet: #17966\n  watch([page, pageCount], () => {\n    if (page.value > pageCount.value) {\n      page.value = pageCount.value\n    }\n  })\n\n  function setItemsPerPage (value: number) {\n    itemsPerPage.value = value\n    page.value = 1\n  }\n\n  function nextPage () {\n    page.value = clamp(page.value + 1, 1, pageCount.value)\n  }\n\n  function prevPage () {\n    page.value = clamp(page.value - 1, 1, pageCount.value)\n  }\n\n  function setPage (value: number) {\n    page.value = clamp(value, 1, pageCount.value)\n  }\n\n  const data = { page, itemsPerPage, startIndex, stopIndex, pageCount, itemsLength, nextPage, prevPage, setPage, setItemsPerPage }\n\n  provide(VDataTablePaginationSymbol, data)\n\n  return data\n}\n\nexport function usePagination () {\n  const data = inject(VDataTablePaginationSymbol)\n\n  if (!data) throw new Error('Missing pagination!')\n\n  return data\n}\n\nexport function usePaginatedItems <T> (options: {\n  items: MaybeRefOrGetter<readonly T[]>\n  startIndex: Ref<number>\n  stopIndex: Ref<number>\n  itemsPerPage: Ref<number>\n}) {\n  const vm = getCurrentInstance('usePaginatedItems')\n\n  const { items, startIndex, stopIndex, itemsPerPage } = options\n  const paginatedItems = computed(() => {\n    if (itemsPerPage.value <= 0) return toValue(items)\n\n    return toValue(items).slice(startIndex.value, stopIndex.value)\n  })\n\n  watch(paginatedItems, val => {\n    vm.emit('update:currentItems', val)\n  }, { immediate: true })\n\n  return { paginatedItems }\n}\n\nexport function usePaginatedGroups <T extends GroupableItem> (options: {\n  pageBy: ComputedRef<'item' | 'group' | 'any'>\n  sortedItems: Ref<readonly T[]>\n  paginate: <TItem>(items: MaybeRefOrGetter<readonly TItem[]>) => {\n    paginatedItems: ComputedRef<readonly TItem[]>\n    pageCount: ComputedRef<number>\n    setItemsPerPage: (value: number) => void\n    prevPage: () => void\n    nextPage: () => void\n    setPage: (value: number) => void\n  }\n  group: (items: MaybeRefOrGetter<readonly T[]>) => {\n    flatItems: ComputedRef<readonly (T | Group<T> | GroupSummary<T>)[]>\n    groups: ComputedRef<readonly Group<T>[]>\n  }\n}) {\n  const { sortedItems, paginate, group } = options\n  const pageBy = toValue(options.pageBy) // TODO: make reactive\n\n  if (pageBy === 'item') {\n    const { paginatedItems, pageCount, setItemsPerPage, prevPage, nextPage, setPage } = paginate(sortedItems)\n    const { flatItems: paginatedItemsWithGroups } = group(paginatedItems)\n\n    return {\n      pageCount,\n      setItemsPerPage,\n      prevPage,\n      nextPage,\n      setPage,\n      paginatedItems: paginatedItemsWithGroups,\n    }\n  }\n\n  if (pageBy === 'group') {\n    const { flatItems, groups } = group(sortedItems)\n    const { paginatedItems: paginatedGroups, pageCount, setItemsPerPage, prevPage, nextPage, setPage } = paginate(groups)\n    const paginatedItemsWithGroups = computed(() => {\n      if (!paginatedGroups.value.length) return []\n      const firstGroupId = paginatedGroups.value.at(0)!.id\n      const lastGroupId = paginatedGroups.value.at(-1)!.id\n      const start = flatItems.value.findIndex(item => item.type === 'group' && item.id === firstGroupId)\n      const lastGroupIndex = flatItems.value.findIndex(item => item.type === 'group' && item.id === lastGroupId)\n      const stop = flatItems.value.findIndex((item, i) => i > lastGroupIndex && item.type === 'group' && item.depth === 0)\n      return flatItems.value.slice(start, stop === -1 ? undefined : stop)\n    })\n\n    return {\n      pageCount,\n      setItemsPerPage,\n      prevPage,\n      nextPage,\n      setPage,\n      paginatedItems: paginatedItemsWithGroups,\n    }\n  }\n\n  if (pageBy === 'any') {\n    const { flatItems } = group(sortedItems)\n    const { paginatedItems: paginatedItemsWithGroups, pageCount, setItemsPerPage, prevPage, nextPage, setPage } = paginate(flatItems)\n\n    return {\n      pageCount,\n      setItemsPerPage,\n      prevPage,\n      nextPage,\n      setPage,\n      paginatedItems: paginatedItemsWithGroups,\n    }\n  }\n\n  throw new Error(`Unrecognized pagination target ${pageBy}`)\n}\n","// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, inject, provide, shallowRef, toRef, toValue } from 'vue'\nimport { deepEqual, isObject, isPrimitive, propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { InjectionKey, MaybeRefOrGetter, PropType, Ref } from 'vue'\nimport type { DataTableItemProps } from './items'\nimport type { EventProp, ValueComparator } from '@/util'\n\nexport interface SelectableItem {\n  value: any\n  selectable: boolean\n}\n\nexport interface DataTableSelectStrategy {\n  showSelectAll: boolean\n  allSelected: (data: {\n    allItems: SelectableItem[]\n    currentPage: SelectableItem[]\n  }) => SelectableItem[]\n  select: (data: {\n    items: SelectableItem[]\n    value: boolean\n    selected: Set<unknown>\n  }) => Set<unknown>\n  selectAll: (data: {\n    value: boolean\n    allItems: SelectableItem[]\n    currentPage: SelectableItem[]\n    selected: Set<unknown>\n  }) => Set<unknown>\n}\n\ntype SelectionProps = Pick<DataTableItemProps, 'itemValue'> & {\n  modelValue: readonly any[]\n  selectStrategy: 'single' | 'page' | 'all'\n  valueComparator?: ValueComparator\n  'onUpdate:modelValue': EventProp<[any[]]> | undefined\n}\n\nconst singleSelectStrategy: DataTableSelectStrategy = {\n  showSelectAll: false,\n  allSelected: () => [],\n  select: ({ items, value }) => {\n    return new Set(value ? [items[0]?.value] : [])\n  },\n  selectAll: ({ selected }) => selected,\n}\n\nconst pageSelectStrategy: DataTableSelectStrategy = {\n  showSelectAll: true,\n  allSelected: ({ currentPage }) => currentPage,\n  select: ({ items, value, selected }) => {\n    for (const item of items) {\n      if (value) selected.add(item.value)\n      else selected.delete(item.value)\n    }\n\n    return selected\n  },\n  selectAll: ({ value, currentPage, selected }) => pageSelectStrategy.select({ items: currentPage, value, selected }),\n}\n\nconst allSelectStrategy: DataTableSelectStrategy = {\n  showSelectAll: true,\n  allSelected: ({ allItems }) => allItems,\n  select: ({ items, value, selected }) => {\n    for (const item of items) {\n      if (value) selected.add(item.value)\n      else selected.delete(item.value)\n    }\n\n    return selected\n  },\n  selectAll: ({ value, allItems }) => {\n    return new Set(value ? allItems.map(item => item.value) : [])\n  },\n}\n\nexport const makeDataTableSelectProps = propsFactory({\n  showSelect: Boolean,\n  selectStrategy: {\n    type: [String, Object] as PropType<'single' | 'page' | 'all'>,\n    default: 'page',\n  },\n  modelValue: {\n    type: Array as PropType<readonly any[]>,\n    default: () => ([]),\n  },\n  valueComparator: Function as PropType<ValueComparator>,\n}, 'DataTable-select')\n\nexport const VDataTableSelectionSymbol: InjectionKey<ReturnType<typeof provideSelection>> = Symbol.for('vuetify:data-table-selection')\n\nexport function provideSelection (\n  props: SelectionProps,\n  { allItems, currentPage }: { allItems: Ref<SelectableItem[]>, currentPage: MaybeRefOrGetter<readonly SelectableItem[]> }\n) {\n  const selected = useProxiedModel(props, 'modelValue', props.modelValue, v => {\n    const customComparator = props.valueComparator\n    if (customComparator) {\n      return new Set(wrapInArray(v).map(v => {\n        return allItems.value.find(item => customComparator(v, item.value))?.value ?? v\n      }))\n    }\n    return new Set(wrapInArray(v).map(v => {\n      return isPrimitive(v)\n        ? allItems.value.find(item => v === item.value)?.value ?? v\n        : allItems.value.find(item => deepEqual(v, item.value))?.value ?? v\n    }))\n  }, v => {\n    return [...v.values()]\n  })\n\n  const allSelectable = computed(() => allItems.value.filter(item => item.selectable))\n  const currentPageSelectable = computed(() => toValue(currentPage).filter(item => item.selectable))\n\n  const selectStrategy = computed(() => {\n    if (isObject(props.selectStrategy)) return props.selectStrategy\n\n    switch (props.selectStrategy) {\n      case 'single': return singleSelectStrategy\n      case 'all': return allSelectStrategy\n      case 'page':\n      default: return pageSelectStrategy\n    }\n  })\n\n  const lastSelectedIndex = shallowRef<number | null>(null)\n\n  function isSelected (items: SelectableItem | SelectableItem[]) {\n    return wrapInArray(items).every(item => selected.value.has(item.value))\n  }\n\n  function isSomeSelected (items: SelectableItem | SelectableItem[]) {\n    return wrapInArray(items).some(item => selected.value.has(item.value))\n  }\n\n  function select (items: SelectableItem[], value: boolean) {\n    const newSelected = selectStrategy.value.select({\n      items,\n      value,\n      selected: new Set(selected.value),\n    })\n\n    selected.value = newSelected\n  }\n\n  function toggleSelect (item: SelectableItem, index?: number, event?: MouseEvent) {\n    const items = []\n    const pageItems = toValue(currentPage)\n    index = index ?? pageItems.findIndex(i => i.value === item.value)\n\n    if (props.selectStrategy !== 'single' && event?.shiftKey && lastSelectedIndex.value !== null) {\n      const [start, end] = [lastSelectedIndex.value, index].sort((a, b) => a - b)\n\n      items.push(...pageItems.slice(start, end + 1).filter(item => item.selectable))\n    } else {\n      items.push(item)\n      lastSelectedIndex.value = index\n    }\n\n    select(items, !isSelected([item]))\n  }\n\n  function selectAll (value: boolean) {\n    const newSelected = selectStrategy.value.selectAll({\n      value,\n      allItems: allSelectable.value,\n      currentPage: currentPageSelectable.value,\n      selected: new Set(selected.value),\n    })\n\n    selected.value = newSelected\n  }\n\n  const someSelected = computed(() => selected.value.size > 0)\n  const allSelected = computed(() => {\n    const items = selectStrategy.value.allSelected({\n      allItems: allSelectable.value,\n      currentPage: currentPageSelectable.value,\n    })\n    return !!items.length && isSelected(items)\n  })\n  const showSelectAll = toRef(() => selectStrategy.value.showSelectAll)\n\n  const data = {\n    toggleSelect,\n    select,\n    selectAll,\n    isSelected,\n    isSomeSelected,\n    someSelected,\n    allSelected,\n    showSelectAll,\n    lastSelectedIndex,\n    selectStrategy,\n  }\n\n  provide(VDataTableSelectionSymbol, data)\n\n  return data\n}\n\nexport function useSelection () {\n  const data = inject(VDataTableSelectionSymbol)\n\n  if (!data) throw new Error('Missing selection!')\n\n  return data\n}\n","// Composables\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, inject, provide, toRef } from 'vue'\nimport { getObjectValueByPath, isEmpty, isObject, propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType, Ref } from 'vue'\nimport type { DataTableCompareFunction, InternalDataTableHeader } from '../types'\nimport type { InternalItem } from '@/composables/filter'\n\nexport const makeDataTableSortProps = propsFactory({\n  initialSortOrder: {\n    type: String as PropType<'asc' | 'desc'>,\n    default: 'asc',\n    validator: (v: any) => !v || ['asc', 'desc'].includes(v),\n  },\n  sortBy: {\n    type: Array as PropType<readonly SortItem[]>,\n    default: () => ([]),\n  },\n  customKeySort: Object as PropType<Record<string, DataTableCompareFunction>>,\n  multiSort: {\n    type: [Boolean, Object] as PropType<boolean | MultiSortProps>,\n    default: false,\n  },\n  mustSort: Boolean,\n}, 'DataTable-sort')\n\nconst VDataTableSortSymbol: InjectionKey<{\n  sortBy: Ref<readonly SortItem[]>\n  toggleSort: (column: InternalDataTableHeader, event?: KeyboardEvent | PointerEvent, mandatory?: boolean) => void\n  isSorted: (column: InternalDataTableHeader) => boolean\n}> = Symbol.for('vuetify:data-table-sort')\n\nexport type SortItem = { key: string, order?: boolean | 'asc' | 'desc' }\nexport type MultiSortProps = {\n  key?: 'ctrl'\n  mode?: MultiSortMode\n  modifier?: 'alt' | 'shift'\n}\n\nexport type MultiSortMode = 'append' | 'prepend'\n\ntype SortProps = {\n  initialSortOrder: 'asc' | 'desc'\n  sortBy: readonly SortItem[]\n  'onUpdate:sortBy': ((value: any) => void) | undefined\n  multiSort: boolean | MultiSortProps\n  mustSort: boolean\n}\n\nexport function createSort (props: SortProps) {\n  const initialSortOrder = toRef(() => props.initialSortOrder)\n  const sortBy = useProxiedModel(props, 'sortBy')\n  const mustSort = toRef(() => props.mustSort)\n  const multiSort = toRef(() => props.multiSort)\n  return { initialSortOrder, sortBy, multiSort, mustSort }\n}\n\nfunction resolveMultiSort (\n  multiSort: boolean | MultiSortProps,\n  event?: KeyboardEvent | PointerEvent\n): {\n    active: boolean\n    mode?: MultiSortMode\n  } {\n  if (!isObject(multiSort)) {\n    return { active: !!multiSort }\n  }\n\n  const { key, mode, modifier } = multiSort\n  const reverseMode = (modifier === 'alt' && event?.altKey) ||\n    (modifier === 'shift' && event?.shiftKey)\n\n  return {\n    active: !key || event?.ctrlKey || event?.metaKey || false,\n    mode: reverseMode ? (mode === 'append' ? 'prepend' : 'append') : mode,\n  }\n}\n\nexport function provideSort (options: {\n  initialSortOrder: Ref<'asc' | 'desc'>\n  sortBy: Ref<readonly SortItem[]>\n  multiSort: Ref<boolean | MultiSortProps>\n  mustSort: Ref<boolean>\n  page?: Ref<number>\n}) {\n  const { initialSortOrder, sortBy, mustSort, multiSort, page } = options\n\n  const toggleSort = (column: InternalDataTableHeader, event?: KeyboardEvent | PointerEvent, mandatory = false) => {\n    if (column.key == null) return\n\n    let newSortBy = sortBy.value.map(x => ({ ...x })) ?? []\n    const item = newSortBy.find(x => x.key === column.key)\n\n    const initialOrder = initialSortOrder.value\n    const secondaryOrder = initialSortOrder.value === 'desc' ? 'asc' : 'desc'\n    if (!item) {\n      const { active, mode } = resolveMultiSort(multiSort.value, event)\n      if (active) {\n        if (mode === 'prepend') {\n          newSortBy.unshift({ key: column.key, order: initialOrder })\n        } else {\n          newSortBy.push({ key: column.key, order: initialOrder })\n        }\n      } else {\n        newSortBy = [{ key: column.key, order: initialOrder }]\n      }\n    } else if (item.order === secondaryOrder) {\n      if (mandatory || (mustSort.value && newSortBy.length === 1)) {\n        item.order = initialSortOrder.value\n      } else {\n        newSortBy = newSortBy.filter(x => x.key !== column.key)\n      }\n    } else {\n      item.order = secondaryOrder\n    }\n\n    sortBy.value = newSortBy\n    if (page) page.value = 1\n  }\n\n  function isSorted (column: InternalDataTableHeader) {\n    return !!sortBy.value.find(item => item.key === column.key)\n  }\n\n  const data = { sortBy, toggleSort, isSorted }\n\n  provide(VDataTableSortSymbol, data)\n\n  return data\n}\n\nexport function useSort () {\n  const data = inject(VDataTableSortSymbol)\n\n  if (!data) throw new Error('Missing sort!')\n\n  return data\n}\n\n// TODO: abstract into project composable\nexport function useSortedItems<T extends InternalItem> (\n  props: {\n    customKeySort: Record<string, DataTableCompareFunction> | undefined\n  },\n  items: Ref<T[]>,\n  sortBy: Ref<readonly SortItem[]>,\n  options?: {\n    transform?: (item: T) => {}\n    sortFunctions?: Ref<Record<string, DataTableCompareFunction> | undefined>\n    sortRawFunctions?: Ref<Record<string, DataTableCompareFunction> | undefined>\n  },\n) {\n  const locale = useLocale()\n  const sortedItems = computed(() => {\n    if (!sortBy.value.length) return items.value\n\n    return sortItems(items.value, sortBy.value, locale.current.value, {\n      transform: options?.transform,\n      sortFunctions: {\n        ...props.customKeySort,\n        ...options?.sortFunctions?.value,\n      },\n      sortRawFunctions: options?.sortRawFunctions?.value,\n    })\n  })\n\n  return { sortedItems }\n}\n\nexport function sortItems<T extends InternalItem> (\n  items: T[],\n  sortByItems: readonly SortItem[],\n  locale: string,\n  options?: {\n    transform?: (item: T) => Record<string, any>\n    sortFunctions?: Record<string, DataTableCompareFunction>\n    sortRawFunctions?: Record<string, DataTableCompareFunction>\n  },\n): T[] {\n  const stringCollator = new Intl.Collator(locale, { sensitivity: 'accent', usage: 'sort' })\n\n  const transformedItems = items.map(item => (\n    [item, options?.transform ? options.transform(item) : item as never] as const)\n  )\n\n  return transformedItems.sort((a, b) => {\n    for (let i = 0; i < sortByItems.length; i++) {\n      let hasCustomResult = false\n      const sortKey = sortByItems[i].key\n      const sortOrder = sortByItems[i].order ?? 'asc'\n\n      if (sortOrder === false) continue\n\n      let sortA = getObjectValueByPath(a[1], sortKey)\n      let sortB = getObjectValueByPath(b[1], sortKey)\n      let sortARaw = a[0].raw\n      let sortBRaw = b[0].raw\n\n      if (sortOrder === 'desc') {\n        [sortA, sortB] = [sortB, sortA]\n        ;[sortARaw, sortBRaw] = [sortBRaw, sortARaw]\n      }\n\n      if (options?.sortRawFunctions?.[sortKey]) {\n        const customResult = options.sortRawFunctions[sortKey](sortARaw, sortBRaw)\n\n        if (customResult == null) continue\n        hasCustomResult = true\n        if (customResult) return customResult\n      }\n\n      if (options?.sortFunctions?.[sortKey]) {\n        const customResult = options.sortFunctions[sortKey](sortA, sortB)\n\n        if (customResult == null) continue\n        hasCustomResult = true\n        if (customResult) return customResult\n      }\n\n      if (hasCustomResult) continue\n\n      // Dates should be compared numerically\n      if (sortA instanceof Date && sortB instanceof Date) {\n        sortA = sortA.getTime()\n        sortB = sortB.getTime()\n      }\n\n      [sortA, sortB] = [sortA, sortB].map(s => s != null ? s.toString().toLocaleLowerCase() : s)\n\n      if (sortA !== sortB) {\n        if (isEmpty(sortA) && isEmpty(sortB)) return 0\n        if (isEmpty(sortA)) return -1\n        if (isEmpty(sortB)) return 1\n        if (!isNaN(sortA) && !isNaN(sortB)) return Number(sortA) - Number(sortB)\n        return stringCollator.compare(sortA, sortB)\n      }\n    }\n\n    return 0\n  }).map(([item]) => item)\n}\n","// Utilities\nimport { computed } from 'vue'\nimport { getPropertyFromItem, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { GroupableItem } from '@/components/VDataTable/composables/group'\nimport type { SelectableItem } from '@/components/VDataTable/composables/select'\nimport type { InternalItem } from '@/composables/filter'\nimport type { SelectItemKey } from '@/util'\n\nexport interface DataIteratorItemProps {\n  items: any[]\n  itemValue: SelectItemKey\n  itemSelectable: SelectItemKey\n  returnObject: boolean\n}\n\nexport interface DataIteratorItem<T = any> extends Omit<InternalItem<T>, 'type'>, GroupableItem<T>, SelectableItem {\n  value: unknown\n}\n\n// Composables\nexport const makeDataIteratorItemsProps = propsFactory({\n  items: {\n    type: Array as PropType<DataIteratorItemProps['items']>,\n    default: () => ([]),\n  },\n  itemValue: {\n    type: [String, Array, Function] as PropType<SelectItemKey>,\n    default: 'id',\n  },\n  itemSelectable: {\n    type: [String, Array, Function] as PropType<SelectItemKey>,\n    default: null,\n  },\n  returnObject: Boolean,\n}, 'DataIterator-items')\n\nexport function transformItem (\n  props: Omit<DataIteratorItemProps, 'items'>,\n  item: any\n): DataIteratorItem {\n  const value = props.returnObject ? item : getPropertyFromItem(item, props.itemValue)\n  const selectable = getPropertyFromItem(item, props.itemSelectable, true)\n\n  return {\n    type: 'item',\n    value,\n    selectable,\n    raw: item,\n  }\n}\n\nexport function transformItems (\n  props: Omit<DataIteratorItemProps, 'items'>,\n  items: DataIteratorItemProps['items']\n) {\n  const array: DataIteratorItem[] = []\n\n  for (const item of items) {\n    array.push(transformItem(props, item))\n  }\n\n  return array\n}\n\nexport function useDataIteratorItems (props: DataIteratorItemProps) {\n  const items = computed(() => transformItems(props, props.items))\n\n  return { items }\n}\n","// Components\nimport { VFadeTransition } from '@/components/transitions'\nimport { makeDataTableExpandProps, provideExpanded } from '@/components/VDataTable/composables/expand'\nimport {\n  createGroupBy,\n  makeDataTableGroupProps,\n  provideGroupBy,\n  useGroupedItems,\n  useOpenAllGroups,\n} from '@/components/VDataTable/composables/group'\nimport { useOptions } from '@/components/VDataTable/composables/options'\nimport {\n  createPagination,\n  makeDataTablePaginateProps,\n  providePagination,\n  usePaginatedItems,\n} from '@/components/VDataTable/composables/paginate'\nimport { makeDataTableSelectProps, provideSelection } from '@/components/VDataTable/composables/select'\nimport { createSort, makeDataTableSortProps, provideSort, useSortedItems } from '@/components/VDataTable/composables/sort'\n\n// Composables\nimport { makeDataIteratorItemsProps, useDataIteratorItems } from './composables/items'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeFilterProps, useFilter } from '@/composables/filter'\nimport { LoaderSlot } from '@/composables/loader'\nimport { makeTagProps } from '@/composables/tag'\nimport { useToggleScope } from '@/composables/toggleScope'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { computed, shallowRef, toRef, watchEffect } from 'vue'\nimport { genericComponent, isEmpty, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { Component } from 'vue'\nimport type { DataIteratorItem } from './composables/items'\nimport type { Group, GroupSummary } from '@/components/VDataTable/composables/group'\nimport type { SortItem } from '@/components/VDataTable/composables/sort'\nimport type { LoaderSlotProps } from '@/composables/loader'\nimport type { GenericProps } from '@/util'\n\ntype VDataIteratorSlotProps<T> = {\n  page: number\n  itemsPerPage: number\n  sortBy: readonly SortItem[]\n  pageCount: number\n  toggleSort: ReturnType<typeof provideSort>['toggleSort']\n  prevPage: ReturnType<typeof providePagination>['prevPage']\n  nextPage: ReturnType<typeof providePagination>['nextPage']\n  setPage: ReturnType<typeof providePagination>['setPage']\n  setItemsPerPage: ReturnType<typeof providePagination>['setItemsPerPage']\n  isSelected: ReturnType<typeof provideSelection>['isSelected']\n  select: ReturnType<typeof provideSelection>['select']\n  selectAll: ReturnType<typeof provideSelection>['selectAll']\n  toggleSelect: ReturnType<typeof provideSelection>['toggleSelect']\n  isExpanded: ReturnType<typeof provideExpanded>['isExpanded']\n  toggleExpand: ReturnType<typeof provideExpanded>['toggleExpand']\n  isGroupOpen: ReturnType<typeof provideGroupBy>['isGroupOpen']\n  toggleGroup: ReturnType<typeof provideGroupBy>['toggleGroup']\n  items: readonly DataIteratorItem<T>[]\n  itemsCount: number\n  groupedItems: readonly (DataIteratorItem<T> | Group<DataIteratorItem<T>> | GroupSummary<DataIteratorItem<T>>)[]\n}\n\nexport type VDataIteratorSlots<T> = {\n  default: VDataIteratorSlotProps<T>\n  header: VDataIteratorSlotProps<T>\n  footer: VDataIteratorSlotProps<T>\n  loader: LoaderSlotProps\n  'no-data': never\n}\n\nexport const makeVDataIteratorProps = propsFactory({\n  search: String,\n  loading: Boolean,\n  itemsLength: [Number, String],\n\n  ...makeComponentProps(),\n  ...makeDataIteratorItemsProps(),\n  ...makeDataTableSelectProps(),\n  ...makeDataTableSortProps(),\n  ...makeDataTablePaginateProps({ itemsPerPage: 5 }),\n  ...makeDataTableExpandProps(),\n  ...makeDataTableGroupProps(),\n  ...makeFilterProps(),\n  ...makeTagProps(),\n  ...makeTransitionProps({\n    transition: {\n      component: VFadeTransition as Component,\n      hideOnLeave: true,\n    },\n  }),\n}, 'VDataIterator')\n\nexport const VDataIterator = genericComponent<new <T> (\n  props: {\n    items?: readonly T[]\n  },\n  slots: VDataIteratorSlots<T>,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VDataIterator',\n\n  props: makeVDataIteratorProps(),\n\n  emits: {\n    'update:modelValue': (value: any[]) => true,\n    'update:groupBy': (value: any) => true,\n    'update:page': (value: number) => true,\n    'update:itemsPerPage': (value: number) => true,\n    'update:sortBy': (value: any) => true,\n    'update:options': (value: any) => true,\n    'update:expanded': (value: any) => true,\n    'update:opened': (value: string[]) => true,\n    'update:currentItems': (value: any) => true,\n  },\n\n  setup (props, { slots }) {\n    const { groupBy, opened, openAll, groupKey } = createGroupBy(props)\n    const search = toRef(() => props.search)\n\n    const { items } = useDataIteratorItems(props)\n    const { filteredItems } = useFilter(props, items, search, { transform: item => item.raw })\n\n    const { initialSortOrder, sortBy, multiSort, mustSort } = createSort(props)\n    const { page, itemsPerPage } = createPagination(props)\n\n    const { toggleSort } = provideSort({ initialSortOrder, sortBy, multiSort, mustSort, page })\n    const {\n      sortByWithGroups,\n      opened: openedGroups,\n      extractRows,\n      isGroupOpen,\n      toggleGroup,\n    } = provideGroupBy({ groupBy, sortBy, opened })\n\n    const { sortedItems } = useSortedItems(props, filteredItems, sortByWithGroups, { transform: item => item.raw })\n    useOpenAllGroups(openedGroups, openAll, sortedItems, groupBy, groupKey)\n    const { flatItems } = useGroupedItems(sortedItems, groupBy, openedGroups, false, isGroupOpen, groupKey)\n\n    const manualPagination = toRef(() => !isEmpty(props.itemsLength))\n    const itemsLength = toRef(() => manualPagination.value ? Number(props.itemsLength) : flatItems.value.length)\n\n    const {\n      startIndex,\n      stopIndex,\n      pageCount,\n      prevPage,\n      nextPage,\n      setItemsPerPage,\n      setPage,\n    } = providePagination({ page, itemsPerPage, itemsLength })\n\n    const paginatedItems = shallowRef<typeof flatItems.value>([])\n    const currentItems = computed(() => manualPagination.value ? flatItems.value : paginatedItems.value)\n\n    useToggleScope(() => !manualPagination.value, () => {\n      const { paginatedItems: items } = usePaginatedItems({ items: flatItems, startIndex, stopIndex, itemsPerPage })\n\n      watchEffect(() => {\n        paginatedItems.value = items.value\n      })\n    })\n\n    const currentItemsWithoutGroups = computed(() => extractRows(currentItems.value))\n\n    const {\n      isSelected,\n      select,\n      selectAll,\n      toggleSelect,\n    } = provideSelection(props, { allItems: items, currentPage: currentItemsWithoutGroups })\n    const { isExpanded, toggleExpand } = provideExpanded(props)\n\n    useOptions({\n      page,\n      itemsPerPage,\n      sortBy,\n      groupBy,\n      search,\n    })\n\n    const slotProps = computed(() => ({\n      page: page.value,\n      itemsPerPage: itemsPerPage.value,\n      sortBy: sortBy.value,\n      pageCount: pageCount.value,\n      toggleSort,\n      prevPage,\n      nextPage,\n      setPage,\n      setItemsPerPage,\n      isSelected,\n      select,\n      selectAll,\n      toggleSelect,\n      isExpanded,\n      toggleExpand,\n      isGroupOpen,\n      toggleGroup,\n      items: currentItemsWithoutGroups.value,\n      itemsCount: filteredItems.value.length,\n      groupedItems: currentItems.value,\n    }))\n\n    useRender(() => (\n      <props.tag\n        class={[\n          'v-data-iterator',\n          {\n            'v-data-iterator--loading': props.loading,\n          },\n          props.class,\n        ]}\n        style={ props.style }\n      >\n        { slots.header?.(slotProps.value) }\n\n        <MaybeTransition transition={ props.transition }>\n          { props.loading ? (\n            <LoaderSlot key=\"loader\" name=\"v-data-iterator\" active>\n              { slotProps => slots.loader?.(slotProps) }\n            </LoaderSlot>\n          ) : (\n            <div key=\"items\">\n              { !currentItems.value.length\n                ? slots['no-data']?.()\n                : slots.default?.(slotProps.value)\n              }\n            </div>\n          )}\n        </MaybeTransition>\n\n        { slots.footer?.(slotProps.value) }\n      </props.tag>\n    ))\n\n    return {}\n  },\n})\n\nexport type VDataIterator = InstanceType<typeof VDataIterator>\n","// Styles\nimport './VPagination.sass'\n\n// Components\nimport { VBtn } from '../VBtn'\n\n// Composables\nimport { useDisplay } from '@/composables'\nimport { makeBorderProps } from '@/composables/border'\nimport { makeComponentProps } from '@/composables/component'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeDensityProps } from '@/composables/density'\nimport { makeElevationProps } from '@/composables/elevation'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale, useRtl } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useRefs } from '@/composables/refs'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { makeRoundedProps } from '@/composables/rounded'\nimport { makeSizeProps } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeVariantProps } from '@/composables/variant'\n\n// Utilities\nimport { computed, nextTick, onMounted, shallowRef, toRef, watch } from 'vue'\nimport { createRange, genericComponent, isString, keyValues, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { ComponentPublicInstance, PropType } from 'vue'\n\ntype ItemSlot = {\n  isActive: boolean\n  key: string | number\n  page: string\n  props: Record<string, any>\n}\n\ntype ControlSlot = {\n  icon: IconValue\n  onClick: (e: Event) => void\n  disabled: boolean\n  'aria-label': string\n  'aria-disabled': boolean\n}\n\nexport type VPaginationSlots = {\n  item: ItemSlot\n  first: ControlSlot\n  prev: ControlSlot\n  next: ControlSlot\n  last: ControlSlot\n}\n\nexport const makeVPaginationProps = propsFactory({\n  activeColor: String,\n  start: {\n    type: [Number, String],\n    default: 1,\n  },\n  modelValue: {\n    type: Number,\n    default: (props: any) => props.start as number,\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: IconValue,\n    default: '$first',\n  },\n  prevIcon: {\n    type: IconValue,\n    default: '$prev',\n  },\n  nextIcon: {\n    type: IconValue,\n    default: '$next',\n  },\n  lastIcon: {\n    type: IconValue,\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: {\n    type: [Boolean, String] as PropType<boolean | 'only-first'>,\n    default: false,\n  },\n\n  ...makeBorderProps(),\n  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...makeElevationProps(),\n  ...makeRoundedProps(),\n  ...makeSizeProps(),\n  ...makeTagProps({ tag: 'nav' }),\n  ...makeThemeProps(),\n  ...makeVariantProps({ variant: 'text' } as const),\n}, 'VPagination')\n\nexport const VPagination = genericComponent<VPaginationSlots>()({\n  name: 'VPagination',\n\n  props: makeVPaginationProps(),\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 { width } = useDisplay()\n    const maxButtons = shallowRef(-1)\n\n    provideDefaults(undefined, { scoped: true })\n\n    const { resizeRef } = useResizeObserver(() => {\n      maxButtons.value = measure() ?? maxButtons.value\n    })\n\n    function measure () {\n      const list = resizeRef.el?.querySelector('.v-pagination__list')\n      const items = Array.from(list?.children ?? [])\n\n      if (!list || items.length < 2) return\n\n      const rects = items.map(item => item.getBoundingClientRect())\n      const span = Math.max(...rects.map(rect => rect.right)) - Math.min(...rects.map(rect => rect.left))\n      const gap = (span - rects.reduce((total, rect) => total + rect.width, 0)) / (items.length - 1)\n\n      let controlsWidth = 0\n      let pagesWidth = 0\n      let pages = 0\n      items.forEach((item, index) => {\n        const width = rects[index].width + gap\n        if (item.classList.contains('v-pagination__item')) {\n          pagesWidth += width\n          pages++\n        } else {\n          controlsWidth += width\n        }\n      })\n\n      const pageWidth = pages ? pagesWidth / pages : rects[0].width + gap\n      return getMax(list.getBoundingClientRect().width - controlsWidth, pageWidth)\n    }\n\n    let parentWidth = 0\n    const { resizeRef: parentRef } = useResizeObserver(entries => {\n      const width = entries[0]?.contentRect.width ?? 0\n      const grew = parentWidth > 0 && width > parentWidth\n      parentWidth = width\n\n      if (grew) maxButtons.value = -1\n    })\n\n    onMounted(() => {\n      parentRef.value = resizeRef.el?.parentElement ?? null\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 != null) return parseInt(props.totalVisible, 10)\n      else if (maxButtons.value >= 0) return maxButtons.value\n      return getMax(width.value - 58 * (props.showFirstLastPage ? 4 : 2), 58)\n    })\n\n    function getMax (totalWidth: number, itemWidth: number) {\n      return Math.max(0, Math.floor(Number((totalWidth / itemWidth).toFixed(2))))\n    }\n\n    function getRange (visible: number): (string | number)[] {\n      if (visible <= 0) return []\n      else if (visible === 1) return [page.value]\n\n      if (length.value <= visible) {\n        return createRange(length.value, start.value)\n      }\n\n      const even = visible % 2 === 0\n      const middle = even ? visible / 2 : Math.floor(visible / 2)\n      const left = even ? middle : middle + 1\n      const right = length.value - middle\n\n      if (left - page.value >= 0) {\n        return [...createRange(Math.max(1, visible - 1), start.value), props.ellipsis, length.value]\n      } else if (page.value - right >= (even ? 1 : 0)) {\n        const rangeLength = visible - 1\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, visible - 2)\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    const range = computed(() => {\n      if (length.value <= 0 || isNaN(length.value) || length.value > Number.MAX_SAFE_INTEGER) return []\n\n      if (props.totalVisible != null) return getRange(totalVisible.value)\n\n      if (length.value < 3) {\n        return createRange(length.value, start.value)\n      }\n\n      const slots = totalVisible.value\n      let visible = slots\n      let items = getRange(visible)\n      while (items.length > slots) items = getRange(--visible)\n\n      return items.map((item, index) => {\n        if (!isString(item)) return item\n        const previous = items[index - 1] as number\n        return items[index + 1] === previous + 2 ? previous + 1 : item\n      })\n    })\n\n    watch(range, () => {\n      const count = measure()\n      if (count != null && count < totalVisible.value) maxButtons.value = count\n    }, { flush: 'post' })\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      VPaginationBtn: {\n        color: toRef(() => props.color),\n        border: toRef(() => props.border),\n        density: toRef(() => props.density),\n        size: toRef(() => props.size),\n        variant: toRef(() => props.variant),\n        rounded: toRef(() => props.rounded),\n        elevation: toRef(() => props.elevation),\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 (isString(item)) {\n          return {\n            isActive: false,\n            key: `ellipsis-${index}`,\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            key: item,\n            page: n(item),\n            props: {\n              ref,\n              ellipsis: false,\n              icon: true,\n              disabled: !!props.disabled || Number(props.length) < 2,\n              color: isActive ? props.activeColor : props.color,\n              'aria-current': isActive,\n              'aria-label': t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, item),\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: [true, 'only-first'].includes(props.showFirstLastPage) ? {\n          icon: isRtl.value ? props.lastIcon : props.firstIcon,\n          onClick: (e: Event) => setValue(e, start.value, 'first'),\n          disabled: prevDisabled,\n          'aria-label': t(props.firstAriaLabel),\n          'aria-disabled': 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          'aria-label': t(props.previousAriaLabel),\n          'aria-disabled': 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          'aria-label': t(props.nextAriaLabel),\n          'aria-disabled': nextDisabled,\n        },\n        last: props.showFirstLastPage === true ? {\n          icon: isRtl.value ? props.firstIcon : props.lastIcon,\n          onClick: (e: Event) => setValue(e, start.value + length.value - 1, 'last'),\n          disabled: nextDisabled,\n          'aria-label': t(props.lastAriaLabel),\n          'aria-disabled': 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 > Number(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    useRender(() => (\n      <props.tag\n        ref={ resizeRef }\n        class={[\n          'v-pagination',\n          themeClasses.value,\n          props.class,\n        ]}\n        style={ props.style }\n        role=\"navigation\"\n        aria-label={ t(props.ariaLabel) }\n        onKeydown={ onKeydown }\n        data-testid=\"v-pagination-root\"\n      >\n        <ul class=\"v-pagination__list\">\n          {[true, 'only-first'].includes(props.showFirstLastPage) && (\n            <li key=\"first\" class=\"v-pagination__first\" data-testid=\"v-pagination-first\">\n              { slots.first ? slots.first(controls.value.first!) : (\n                <VBtn _as=\"VPaginationBtn\" { ...controls.value.first } />\n              )}\n            </li>\n          )}\n\n          <li key=\"prev\" class=\"v-pagination__prev\" data-testid=\"v-pagination-prev\">\n            { slots.prev ? slots.prev(controls.value.prev) : (\n              <VBtn _as=\"VPaginationBtn\" { ...controls.value.prev } />\n            )}\n          </li>\n\n          { items.value.map((item, index) => (\n            <li\n              key={ item.key }\n              class={[\n                'v-pagination__item',\n                {\n                  'v-pagination__item--is-active': item.isActive,\n                },\n              ]}\n              data-testid=\"v-pagination-item\"\n            >\n              { slots.item ? slots.item(item) : (\n                <VBtn _as=\"VPaginationBtn\" { ...item.props }>{ item.page }</VBtn>\n              )}\n            </li>\n          ))}\n\n          <li key=\"next\" class=\"v-pagination__next\" data-testid=\"v-pagination-next\">\n            { slots.next ? slots.next(controls.value.next) : (\n              <VBtn _as=\"VPaginationBtn\" { ...controls.value.next } />\n            )}\n          </li>\n\n          { props.showFirstLastPage === true && (\n            <li key=\"last\" class=\"v-pagination__last\" data-testid=\"v-pagination-last\">\n              { slots.last ? slots.last(controls.value.last!) : (\n                <VBtn _as=\"VPaginationBtn\" { ...controls.value.last } />\n              )}\n            </li>\n          )}\n        </ul>\n      </props.tag>\n    ))\n\n    return {}\n  },\n})\n\nexport type VPagination = InstanceType<typeof VPagination>\n","// Utilities\nimport { onBeforeUpdate, ref } from 'vue'\n\n// Types\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 './VDataTableFooter.sass'\n\n// Components\nimport { VPagination } from '@/components/VPagination'\nimport { VSelect } from '@/components/VSelect'\n\n// Composables\nimport { usePagination } from './composables/paginate'\nimport { injectNestedDefaults } from '@/composables/defaults'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent, isNumber, omit, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport { makeVPaginationProps } from '../VPagination/VPagination'\n\nexport const makeVDataTableFooterProps = propsFactory({\n  color: String,\n  prevIcon: {\n    type: IconValue,\n    default: '$prev',\n  },\n  nextIcon: {\n    type: IconValue,\n    default: '$next',\n  },\n  firstIcon: {\n    type: IconValue,\n    default: '$first',\n  },\n  lastIcon: {\n    type: IconValue,\n    default: '$last',\n  },\n  itemsPerPageText: {\n    type: String,\n    default: '$vuetify.dataFooter.itemsPerPageText',\n  },\n  pageText: {\n    type: String,\n    default: '$vuetify.dataFooter.pageText',\n  },\n  firstPageLabel: {\n    type: String,\n    default: '$vuetify.dataFooter.firstPage',\n  },\n  prevPageLabel: {\n    type: String,\n    default: '$vuetify.dataFooter.prevPage',\n  },\n  nextPageLabel: {\n    type: String,\n    default: '$vuetify.dataFooter.nextPage',\n  },\n  lastPageLabel: {\n    type: String,\n    default: '$vuetify.dataFooter.lastPage',\n  },\n  itemsPerPageOptions: {\n    type: Array as PropType<readonly (number | { title: string, value: number })[]>,\n    default: () => ([\n      { value: 10, title: '10' },\n      { value: 25, title: '25' },\n      { value: 50, title: '50' },\n      { value: 100, title: '100' },\n      { value: -1, title: '$vuetify.dataFooter.itemsPerPageAll' },\n    ]),\n  },\n  showCurrentPage: Boolean,\n\n  ...pick(makeVPaginationProps({\n    showFirstLastPage: true,\n  }), ['showFirstLastPage']),\n}, 'VDataTableFooter')\n\nexport const VDataTableFooter = genericComponent<{ prepend: never }>()({\n  name: 'VDataTableFooter',\n\n  props: makeVDataTableFooterProps(),\n\n  setup (props, { slots }) {\n    const { t } = useLocale()\n    const selectDefaults = injectNestedDefaults<VSelect['$props']>('VSelect')\n    const { page, pageCount, startIndex, stopIndex, itemsLength, itemsPerPage, setItemsPerPage } = usePagination()\n\n    const itemsPerPageOptions = computed(() => (\n      props.itemsPerPageOptions.map(option => {\n        if (isNumber(option)) {\n          return {\n            value: option,\n            title: option === -1\n              ? t('$vuetify.dataFooter.itemsPerPageAll')\n              : String(option),\n          }\n        }\n\n        return {\n          ...option,\n          title: !isNaN(Number(option.title)) ? option.title : t(option.title),\n        }\n      })\n    ))\n\n    useRender(() => {\n      const paginationProps = VPagination.filterProps(props)\n\n      return (\n        <div class=\"v-data-table-footer\">\n          { slots.prepend?.() }\n\n          <div class=\"v-data-table-footer__items-per-page\">\n            <span>{ t(props.itemsPerPageText) }</span>\n\n            <VSelect\n              items={ itemsPerPageOptions.value }\n              itemColor={ props.color }\n              modelValue={ itemsPerPage.value }\n              onUpdate:modelValue={ v => setItemsPerPage(Number(v)) }\n              density=\"compact\"\n              variant={ selectDefaults.value?.variant ?? 'outlined' }\n              aria-label={ t(props.itemsPerPageText) }\n              hideDetails\n            />\n          </div>\n\n          <div class=\"v-data-table-footer__info\">\n            <div>\n              { t(props.pageText, !itemsLength.value ? 0 : startIndex.value + 1, stopIndex.value, itemsLength.value) }\n            </div>\n          </div>\n\n          <div class=\"v-data-table-footer__pagination\">\n            <VPagination\n              v-model={ page.value }\n              density=\"comfortable\"\n              firstAriaLabel={ props.firstPageLabel }\n              lastAriaLabel={ props.lastPageLabel }\n              length={ pageCount.value }\n              nextAriaLabel={ props.nextPageLabel }\n              previousAriaLabel={ props.prevPageLabel }\n              rounded\n              showFirstLastPage\n              totalVisible={ props.showCurrentPage ? 1 : 0 }\n              variant=\"plain\"\n              { ...omit(paginationProps, ['color']) }\n            ></VPagination>\n          </div>\n        </div>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VDataTableFooter = InstanceType<typeof VDataTableFooter>\n","// Utilities\nimport { convertToUnit, defineFunctionalComponent, isString } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const VDataTableColumn = defineFunctionalComponent({\n  align: {\n    type: String as PropType<'start' | 'center' | 'end'>,\n    default: 'start',\n  },\n  fixed: {\n    type: [Boolean, String] as PropType<boolean | 'start' | 'end'>,\n    default: false,\n  },\n  fixedOffset: [Number, String],\n  fixedEndOffset: [Number, String],\n  height: [Number, String],\n  lastFixed: Boolean,\n  firstFixedEnd: Boolean,\n\n  noPadding: Boolean,\n  indent: [Number, String],\n  empty: Boolean,\n\n  tag: String,\n  width: [Number, String],\n  maxWidth: [Number, String],\n  nowrap: Boolean,\n}, (props, { slots }) => {\n  const Tag = props.tag ?? 'td'\n\n  const fixedSide = isString(props.fixed) ? props.fixed\n    : props.fixed ? 'start'\n    : 'none'\n\n  return (\n    <Tag\n      class={[\n        'v-data-table__td',\n        {\n          'v-data-table-column--fixed': fixedSide === 'start',\n          'v-data-table-column--fixed-end': fixedSide === 'end',\n          'v-data-table-column--last-fixed': props.lastFixed,\n          'v-data-table-column--first-fixed-end': props.firstFixedEnd,\n          'v-data-table-column--no-padding': props.noPadding,\n          'v-data-table-column--nowrap': props.nowrap,\n          'v-data-table-column--empty': props.empty,\n        },\n        `v-data-table-column--align-${props.align}`,\n      ]}\n      style={{\n        height: convertToUnit(props.height),\n        width: convertToUnit(props.width),\n        maxWidth: convertToUnit(props.maxWidth),\n        left: fixedSide === 'start' ? convertToUnit(props.fixedOffset || null) : undefined,\n        right: fixedSide === 'end' ? convertToUnit(props.fixedEndOffset || null) : undefined,\n        paddingInlineStart: props.indent ? convertToUnit(props.indent) : undefined,\n      }}\n    >\n      { slots.default?.() }\n    </Tag>\n  )\n})\n","// Utilities\nimport { capitalize, inject, provide, ref, watchEffect } from 'vue'\nimport { consoleError, isString, propsFactory } from '@/util'\n\n// Types\nimport type { DeepReadonly, InjectionKey, PropType, Ref } from 'vue'\nimport type { SortItem } from './sort'\nimport type { DataTableCompareFunction, DataTableHeader, InternalDataTableHeader } from '../types'\nimport type { FilterKeyFunctions } from '@/composables/filter'\n\nexport const makeDataTableHeaderProps = propsFactory({\n  headers: Array as PropType<DeepReadonly<DataTableHeader[]>>,\n}, 'DataTable-header')\n\nexport const VDataTableHeadersSymbol: InjectionKey<{\n  headers: Ref<InternalDataTableHeader[][]>\n  columns: Ref<InternalDataTableHeader[]>\n}> = Symbol.for('vuetify:data-table-headers')\n\ntype HeaderProps = {\n  headers: DeepReadonly<DataTableHeader[]> | undefined\n  items: any[]\n}\n\nconst defaultHeader = { title: '', sortable: false }\nconst defaultActionHeader = { ...defaultHeader, width: 48 }\n\nfunction priorityQueue <T> (arr: T[] = []) {\n  const queue: { element: T, priority: number }[] = arr.map(element => ({ element, priority: 0 }))\n\n  return {\n    enqueue: (element: T, priority: number) => {\n      let added = false\n      for (let i = 0; i < queue.length; i++) {\n        const item = queue[i]\n        if (item.priority > priority) {\n          queue.splice(i, 0, { element, priority })\n          added = true\n          break\n        }\n      }\n\n      if (!added) queue.push({ element, priority })\n    },\n    size: () => queue.length,\n    count: () => {\n      let count = 0\n\n      if (!queue.length) return 0\n\n      const whole = Math.floor(queue[0].priority)\n      for (let i = 0; i < queue.length; i++) {\n        if (Math.floor(queue[i].priority) === whole) count += 1\n      }\n\n      return count\n    },\n    dequeue: () => {\n      return queue.shift()\n    },\n  }\n}\n\nfunction extractLeaves (item: InternalDataTableHeader, columns: InternalDataTableHeader[] = []) {\n  if (!item.children) {\n    columns.push(item)\n  } else {\n    for (const child of item.children) {\n      extractLeaves(child, columns)\n    }\n  }\n\n  return columns\n}\n\nfunction extractKeys (headers: DeepReadonly<DataTableHeader[]>, keys = new Set<string>()) {\n  for (const item of headers) {\n    if (item.key) keys.add(item.key)\n\n    if (item.children) {\n      extractKeys(item.children, keys)\n    }\n  }\n\n  return keys\n}\n\nfunction getDefaultItem (item: DeepReadonly<DataTableHeader>) {\n  if (!item.key) return undefined\n  if (item.key === 'data-table-group') return defaultHeader\n  if (['data-table-expand', 'data-table-select'].includes(item.key)) return defaultActionHeader\n  return undefined\n}\n\nfunction getDepth (item: InternalDataTableHeader, depth = 0): number {\n  if (!item.children) return depth\n\n  return Math.max(depth, ...item.children.map(child => getDepth(child, depth + 1)))\n}\n\nfunction parseFixedColumns (items: InternalDataTableHeader[]) {\n  let seenFixed = false\n\n  function setFixed (\n    item: InternalDataTableHeader,\n    side: 'start' | 'end',\n    parentFixedSide: 'start' | 'end' | 'none' = 'none'\n  ) {\n    if (!item) return\n\n    if (parentFixedSide !== 'none') {\n      item.fixed = parentFixedSide\n    }\n\n    // normalize to simplify logic below\n    if (item.fixed === true) {\n      item.fixed = 'start'\n    }\n\n    if (item.fixed === side) {\n      if (item.children) {\n        if (side === 'start') {\n          for (let i = item.children.length - 1; i >= 0; i--) {\n            setFixed(item.children[i], side, side)\n          }\n        } else {\n          for (let i = 0; i < item.children.length; i++) {\n            setFixed(item.children[i], side, side)\n          }\n        }\n      } else {\n        if (!seenFixed && side === 'start') {\n          item.lastFixed = true\n        } else if (!seenFixed && side === 'end') {\n          item.firstFixedEnd = true\n        } else if (isNaN(Number(item.width))) {\n          consoleError(`Multiple fixed columns should have a static width (key: ${item.key})`)\n        } else {\n          item.minWidth = Math.max(Number(item.width) || 0, Number(item.minWidth) || 0)\n        }\n        seenFixed = true\n      }\n    } else {\n      if (item.children) {\n        if (side === 'start') {\n          for (let i = item.children.length - 1; i >= 0; i--) {\n            setFixed(item.children[i], side)\n          }\n        } else {\n          for (let i = 0; i < item.children.length; i++) {\n            setFixed(item.children[i], side)\n          }\n        }\n      } else {\n        seenFixed = false\n      }\n    }\n  }\n\n  for (let i = items.length - 1; i >= 0; i--) {\n    setFixed(items[i], 'start')\n  }\n\n  for (let i = 0; i < items.length; i++) {\n    setFixed(items[i], 'end')\n  }\n\n  let fixedOffset = 0\n  for (let i = 0; i < items.length; i++) {\n    fixedOffset = setFixedOffset(items[i], fixedOffset)\n  }\n\n  let fixedEndOffset = 0\n  for (let i = items.length - 1; i >= 0; i--) {\n    fixedEndOffset = setFixedEndOffset(items[i], fixedEndOffset)\n  }\n}\n\nfunction setFixedOffset (item: InternalDataTableHeader, offset = 0) {\n  if (!item) return offset\n\n  if (item.children) {\n    item.fixedOffset = offset\n    for (const child of item.children) {\n      offset = setFixedOffset(child, offset)\n    }\n  } else if (item.fixed && item.fixed !== 'end') {\n    item.fixedOffset = offset\n    offset += parseFloat(item.width || '0') || 0\n  }\n\n  return offset\n}\n\nfunction setFixedEndOffset (item: InternalDataTableHeader, offset = 0) {\n  if (!item) return offset\n\n  if (item.children) {\n    item.fixedEndOffset = offset\n    for (const child of item.children) {\n      offset = setFixedEndOffset(child, offset)\n    }\n  } else if (item.fixed === 'end') {\n    item.fixedEndOffset = offset\n    offset += parseFloat(item.width || '0') || 0\n  }\n\n  return offset\n}\n\nfunction parse (items: InternalDataTableHeader[], maxDepth: number) {\n  const headers: InternalDataTableHeader[][] = []\n  let currentDepth = 0\n  const queue = priorityQueue(items)\n\n  while (queue.size() > 0) {\n    let rowSize = queue.count()\n    const row: InternalDataTableHeader[] = []\n    let fraction = 1\n    while (rowSize > 0) {\n      const { element: item, priority } = queue.dequeue()!\n      const diff = maxDepth - currentDepth - getDepth(item)\n\n      row.push({\n        ...item,\n        rowspan: diff ?? 1,\n        colspan: item.children ? extractLeaves(item).length : 1,\n      })\n\n      if (item.children) {\n        for (const child of item.children) {\n          // This internally sorts items that are on the same priority \"row\"\n          const sort = priority % 1 + (fraction / Math.pow(10, currentDepth + 2))\n          queue.enqueue(child, currentDepth + diff + sort)\n        }\n      }\n\n      fraction += 1\n      rowSize -= 1\n    }\n    currentDepth += 1\n    headers.push(row)\n  }\n\n  const columns = items.map(item => extractLeaves(item)).flat()\n\n  return { columns, headers }\n}\n\nfunction convertToInternalHeaders (items: DeepReadonly<DataTableHeader[]>) {\n  const internalHeaders: InternalDataTableHeader[] = []\n  for (const item of items) {\n    const defaultItem = { ...getDefaultItem(item), ...item }\n    const key = defaultItem.key ?? (isString(defaultItem.value) ? defaultItem.value : null)\n    const value = defaultItem.value ?? key ?? null\n    const internalItem: InternalDataTableHeader = {\n      ...defaultItem,\n      key,\n      value,\n      sortable: defaultItem.sortable ?? (defaultItem.key != null || !!defaultItem.sort),\n      children: defaultItem.children ? convertToInternalHeaders(defaultItem.children) : undefined,\n    }\n\n    internalHeaders.push(internalItem)\n  }\n\n  return internalHeaders\n}\n\nexport function createHeaders (\n  props: HeaderProps,\n  options?: {\n    groupBy?: Ref<readonly SortItem[]>\n    showSelect?: Ref<boolean>\n    showExpand?: Ref<boolean>\n  }\n) {\n  const headers = ref<InternalDataTableHeader[][]>([])\n  const columns = ref<InternalDataTableHeader[]>([])\n  const sortFunctions = ref<Record<string, DataTableCompareFunction>>({})\n  const sortRawFunctions = ref<Record<string, DataTableCompareFunction>>({})\n  const filterFunctions = ref<FilterKeyFunctions>({})\n\n  watchEffect(() => {\n    const _headers = props.headers ||\n      Object.keys(props.items[0] ?? {}).map(key => ({ key, title: capitalize(key) })) as never\n\n    const items = _headers.slice()\n    const keys = extractKeys(items)\n\n    if (options?.groupBy?.value.length && !keys.has('data-table-group')) {\n      items.unshift({ key: 'data-table-group', title: 'Group' })\n    }\n\n    if (options?.showSelect?.value && !keys.has('data-table-select')) {\n      items.unshift({ key: 'data-table-select' })\n    }\n\n    if (options?.showExpand?.value && !keys.has('data-table-expand')) {\n      items.push({ key: 'data-table-expand' })\n    }\n\n    const internalHeaders = convertToInternalHeaders(items)\n\n    parseFixedColumns(internalHeaders)\n\n    const maxDepth = Math.max(...internalHeaders.map(item => getDepth(item))) + 1\n    const parsed = parse(internalHeaders, maxDepth)\n\n    headers.value = parsed.headers\n    columns.value = parsed.columns\n\n    const flatHeaders = parsed.headers.flat(1)\n\n    sortFunctions.value = {}\n    sortRawFunctions.value = {}\n    filterFunctions.value = {}\n\n    for (const header of flatHeaders) {\n      if (!header.key) continue\n\n      if (header.sortable) {\n        if (header.sort) {\n          sortFunctions.value[header.key] = header.sort\n        }\n\n        if (header.sortRaw) {\n          sortRawFunctions.value[header.key] = header.sortRaw\n        }\n      }\n\n      if (header.filter) {\n        filterFunctions.value[header.key] = header.filter\n      }\n    }\n  })\n\n  const data = { headers, columns, sortFunctions, sortRawFunctions, filterFunctions }\n\n  provide(VDataTableHeadersSymbol, data)\n\n  return data\n}\n\nexport function useHeaders () {\n  const data = inject(VDataTableHeadersSymbol)\n\n  if (!data) throw new Error('Missing headers!')\n\n  return data\n}\n","// Utilities\nimport { computed } from 'vue'\nimport { isObject, isString } from '@/util'\n\n// Types\nimport type { DataTableLoading, DataTableLoadingSide } from '../types'\n\nexport function useLoadingConfig (\n  loading: () => DataTableLoading | undefined,\n  fallbackColor: () => string | undefined,\n) {\n  const active = computed(() => {\n    const v = loading()\n    return v != null && v !== false && v !== 'false'\n  })\n\n  const side = computed<DataTableLoadingSide>(() => {\n    const v = loading()\n    if (isObject(v) && v.side) return v.side\n    return 'start'\n  })\n\n  const color = computed(() => {\n    const v = loading()\n    if (isObject(v) && v.color) return v.color\n    if (isString(v) && v !== 'true') return v\n    return fallbackColor()\n  })\n\n  return { active, side, color }\n}\n","// Components\nimport { VDataTableColumn } from './VDataTableColumn'\nimport { VCheckboxBtn } from '@/components/VCheckbox'\nimport { VChip } from '@/components/VChip'\nimport { VIcon } from '@/components/VIcon'\nimport { VSelect } from '@/components/VSelect'\n\n// Composables\nimport { useHeaders } from './composables/headers'\nimport { useLoadingConfig } from './composables/loading'\nimport { useSelection } from './composables/select'\nimport { useSort } from './composables/sort'\nimport { useBackgroundColor } from '@/composables/color'\nimport { injectNestedDefaults } from '@/composables/defaults'\nimport { makeDensityProps } from '@/composables/density'\nimport { makeDisplayProps, useDisplay } from '@/composables/display'\nimport { IconValue } from '@/composables/icons'\nimport { LoaderSlot, makeLoaderProps, useLoader } from '@/composables/loader'\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { computed, mergeProps, nextTick } from 'vue'\nimport { convertToUnit, genericComponent, isString, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { CSSProperties, PropType, UnwrapRef } from 'vue'\nimport type { provideSelection } from './composables/select'\nimport type { provideSort } from './composables/sort'\nimport type { InternalDataTableHeader } from './types'\nimport type { ItemProps } from '@/composables/list-items'\nimport type { LoaderSlotProps } from '@/composables/loader'\n\nexport type HeadersSlotProps = {\n  headers: InternalDataTableHeader[][]\n  columns: InternalDataTableHeader[]\n  sortBy: UnwrapRef<ReturnType<typeof provideSort>['sortBy']>\n  someSelected: UnwrapRef<ReturnType<typeof provideSelection>['someSelected']>\n  allSelected: UnwrapRef<ReturnType<typeof provideSelection>['allSelected']>\n  toggleSort: ReturnType<typeof provideSort>['toggleSort']\n  selectAll: ReturnType<typeof provideSelection>['selectAll']\n  getSortIcon: (column: InternalDataTableHeader) => IconValue\n  isSorted: ReturnType<typeof provideSort>['isSorted']\n}\n\nexport type VDataTableHeaderCellColumnSlotProps = {\n  column: InternalDataTableHeader\n  selectAll: ReturnType<typeof provideSelection>['selectAll']\n  isSorted: ReturnType<typeof provideSort>['isSorted']\n  toggleSort: ReturnType<typeof provideSort>['toggleSort']\n  sortBy: UnwrapRef<ReturnType<typeof provideSort>['sortBy']>\n  someSelected: UnwrapRef<ReturnType<typeof provideSelection>['someSelected']>\n  allSelected: UnwrapRef<ReturnType<typeof provideSelection>['allSelected']>\n  getSortIcon: (column: InternalDataTableHeader) => IconValue\n}\n\nexport type VDataTableHeadersSlots = {\n  headers: HeadersSlotProps\n  loader: LoaderSlotProps\n  'header.data-table-select': VDataTableHeaderCellColumnSlotProps\n  'header.data-table-expand': VDataTableHeaderCellColumnSlotProps\n  'mobile.header': HeadersSlotProps\n} & { [key: `header.${string}`]: VDataTableHeaderCellColumnSlotProps }\n\nexport const makeVDataTableHeadersProps = propsFactory({\n  color: String,\n  disableSort: Boolean,\n  fixedHeader: Boolean,\n  multiSort: Boolean,\n  initialSortOrder: String as PropType<'asc' | 'desc'>,\n  sortIcon: {\n    type: IconValue,\n    // default: '$sort', // maybe in v4\n  },\n  sortAscIcon: {\n    type: IconValue,\n    default: '$sortAsc',\n  },\n  sortDescIcon: {\n    type: IconValue,\n    default: '$sortDesc',\n  },\n  headerProps: {\n    type: Object as PropType<Record<string, any>>,\n  },\n  selectAllLabel: {\n    type: String,\n    default: '$vuetify.dataTable.ariaLabel.selectAll',\n  },\n\n  /** @deprecated */\n  sticky: Boolean,\n\n  ...makeDensityProps(),\n  ...makeDisplayProps(),\n  ...makeLoaderProps(),\n}, 'VDataTableHeaders')\n\nexport const VDataTableHeaders = genericComponent<VDataTableHeadersSlots>()({\n  name: 'VDataTableHeaders',\n\n  props: makeVDataTableHeadersProps(),\n\n  setup (props, { slots }) {\n    const { t } = useLocale()\n    const { toggleSort, sortBy, isSorted } = useSort()\n    const { someSelected, allSelected, selectAll, showSelectAll } = useSelection()\n    const { columns, headers } = useHeaders()\n    const { loaderClasses } = useLoader(props)\n    const selectDefaults = injectNestedDefaults<VSelect['$props']>('VSelect')\n\n    function getFixedStyles (column: InternalDataTableHeader, y: number): CSSProperties | undefined {\n      if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined\n\n      const fixedSide = isString(column.fixed) ? column.fixed\n        : column.fixed ? 'start'\n        : 'none'\n\n      return {\n        position: 'sticky',\n        left: fixedSide === 'start' ? convertToUnit(column.fixedOffset) : undefined,\n        right: fixedSide === 'end' ? convertToUnit(column.fixedEndOffset) : undefined,\n        top: (props.sticky || props.fixedHeader) ? `calc(var(--v-table-header-height) * ${y})` : undefined,\n      }\n    }\n    function handleEnterKeyPress (event: KeyboardEvent, column: InternalDataTableHeader) {\n      if (event.key === 'Enter' && !props.disableSort) {\n        toggleSort(column, event)\n      }\n    }\n    function getSortIcon (column: InternalDataTableHeader) {\n      const item = sortBy.value.find(item => item.key === column.key)\n\n      switch (item?.order) {\n        case 'asc': return props.sortAscIcon\n        case 'desc': return props.sortDescIcon\n        default: return props.sortIcon ||\n          (\n            props.initialSortOrder === 'asc'\n              ? props.sortAscIcon\n              : props.sortDescIcon\n          )\n      }\n    }\n\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)\n\n    const { displayClasses, mobile } = useDisplay(props)\n\n    const loadingConfig = useLoadingConfig(() => props.loading, () => props.color)\n\n    const slotProps = computed(() => ({\n      headers: headers.value,\n      columns: columns.value,\n      toggleSort,\n      isSorted,\n      sortBy: sortBy.value,\n      someSelected: someSelected.value,\n      allSelected: allSelected.value,\n      selectAll,\n      getSortIcon,\n    } satisfies HeadersSlotProps))\n\n    const headerCellClasses = computed(() => ([\n      'v-data-table__th',\n      {\n        'v-data-table__th--sticky': (props.sticky || props.fixedHeader),\n      },\n      displayClasses.value,\n      loaderClasses.value,\n    ]))\n\n    const VDataTableHeaderCell = ({ column, x, y }: { column: InternalDataTableHeader, x: number, y: number }) => {\n      const noPadding = column.key === 'data-table-select' || column.key === 'data-table-expand'\n      const isEmpty = column.key === 'data-table-group' && column.width === 0 && !column.title\n      const headerProps = mergeProps(props.headerProps ?? {}, column.headerProps ?? {})\n      const isSortable = column.sortable && !props.disableSort\n      const sortItem = isSortable ? sortBy.value.find(item => item.key === column.key) : undefined\n      const ariaSort = sortItem?.order === 'asc'\n        ? 'ascending'\n        : sortItem?.order === 'desc'\n          ? 'descending'\n          : undefined\n\n      return (\n        <VDataTableColumn\n          tag=\"th\"\n          aria-sort={ ariaSort }\n          align={ column.align }\n          class={[\n            {\n              'v-data-table__th--sortable': isSortable,\n              'v-data-table__th--sorted': isSorted(column),\n              'v-data-table__th--fixed': column.fixed,\n            },\n            ...headerCellClasses.value,\n          ]}\n          style={{\n            width: convertToUnit(column.width),\n            minWidth: convertToUnit(column.minWidth),\n            maxWidth: convertToUnit(column.maxWidth),\n            ...getFixedStyles(column, y),\n          }}\n          colspan={ column.colspan }\n          rowspan={ column.rowspan }\n          fixed={ column.fixed }\n          nowrap={ column.nowrap }\n          lastFixed={ column.lastFixed }\n          firstFixedEnd={ column.firstFixedEnd }\n          noPadding={ noPadding }\n          empty={ isEmpty }\n          tabindex={ isSortable ? 0 : undefined }\n          onClick={ isSortable ? (event: PointerEvent) => toggleSort(column, event) : undefined }\n          onKeydown={ isSortable ? (event: KeyboardEvent) => handleEnterKeyPress(event, column) : undefined }\n          { ...headerProps }\n        >\n          {{\n            default: () => {\n              const columnSlotName = `header.${column.key}` as const\n              const columnSlotProps: VDataTableHeaderCellColumnSlotProps = {\n                column,\n                selectAll,\n                isSorted,\n                toggleSort,\n                sortBy: sortBy.value,\n                someSelected: someSelected.value,\n                allSelected: allSelected.value,\n                getSortIcon,\n              }\n\n              if (slots[columnSlotName]) return slots[columnSlotName]!(columnSlotProps)\n\n              if (isEmpty) return ''\n\n              if (column.key === 'data-table-select') {\n                return slots['header.data-table-select']?.(columnSlotProps) ?? (showSelectAll.value && (\n                  <VCheckboxBtn\n                    aria-label={ t(props.selectAllLabel) }\n                    color={ props.color }\n                    density={ props.density }\n                    modelValue={ allSelected.value }\n                    indeterminate={ someSelected.value && !allSelected.value }\n                    onUpdate:modelValue={ selectAll }\n                  />\n                ))\n              }\n\n              return (\n                <div class=\"v-data-table-header__content\">\n                  <span>{ column.title }</span>\n                  { column.sortable && !props.disableSort && (\n                    <VIcon\n                      key=\"icon\"\n                      class=\"v-data-table-header__sort-icon\"\n                      icon={ getSortIcon(column) }\n                    />\n                  )}\n                  { props.multiSort && isSorted(column) && (\n                    <div\n                      key=\"badge\"\n                      class={[\n                        'v-data-table-header__sort-badge',\n                        ...backgroundColorClasses.value,\n                      ]}\n                      style={ backgroundColorStyles.value }\n                    >\n                      { sortBy.value.findIndex(x => x.key === column.key) + 1 }\n                    </div>\n                  )}\n                </div>\n              )\n            },\n          }}\n        </VDataTableColumn>\n      )\n    }\n\n    const VDataTableMobileHeaderCell = () => {\n      const sortableColumns = computed<ItemProps['items']>(() => {\n        return columns.value.filter(column => column?.sortable && !props.disableSort)\n      })\n      const showSelectColumn = columns.value.find(column => column.key === 'data-table-select')\n      const sortingChips = computed<InternalDataTableHeader | InternalDataTableHeader[] | null>({\n        get: () => sortableColumns.value.filter(({ key }) => sortBy.value.some(v => v.key === key)),\n        set: val => {\n          const sortedColumns = wrapInArray(val)\n          const activeSortKeys = sortBy.value.map(v => v.key)\n          const newColumnsToSort = sortedColumns.filter(({ key }) => !activeSortKeys.includes(key!))\n          newColumnsToSort.forEach(column => toggleSort(column))\n          // sortBy is proxied model, needs nextTick after toggleSort\n          nextTick(() => sortBy.value = sortBy.value.filter(({ key }) => sortedColumns.some(c => c.key === key)))\n        },\n      })\n\n      function renderSortSelect () {\n        return (\n          <VSelect\n            v-model={ sortingChips.value }\n            chips\n            color={ props.color }\n            class=\"v-data-table__td-sort-select\"\n            clearable\n            density=\"default\"\n            items={ sortableColumns.value }\n            label={ t('$vuetify.dataTable.sortBy') }\n            multiple={ props.multiSort }\n            variant={ selectDefaults.value?.variant ?? 'underlined' }\n            returnObject\n            onClick:clear={ () => sortBy.value = [] }\n          >\n            {{\n              chip: ({ internalItem }) => (\n                <VChip\n                  onClick={ internalItem.raw.sortable ? () => toggleSort(internalItem.raw, undefined, true) : undefined }\n                  onMousedown={ (e: MouseEvent) => {\n                    e.preventDefault()\n                    e.stopPropagation()\n                  }}\n                >\n                  { internalItem.title }\n                  <VIcon\n                    class={[\n                      'v-data-table__td-sort-icon',\n                      isSorted(internalItem.raw) && 'v-data-table__td-sort-icon-active',\n                    ]}\n                    icon={ getSortIcon(internalItem.raw) }\n                    size=\"small\"\n                  />\n                </VChip>\n              ),\n            }}\n          </VSelect>\n        )\n      }\n\n      function renderSelectAll () {\n        return (\n          <VCheckboxBtn\n            aria-label={ t(props.selectAllLabel) }\n            class=\"v-data-table-header__select-all\"\n            color={ props.color }\n            density=\"compact\"\n            modelValue={ allSelected.value }\n            indeterminate={ someSelected.value && !allSelected.value }\n            onUpdate:modelValue={ () => selectAll(!allSelected.value) }\n          />\n        )\n      }\n\n      return (\n        <VDataTableColumn\n          tag=\"th\"\n          class={[\n            ...headerCellClasses.value,\n          ]}\n          colspan={ headers.value.length + 1 }\n          { ...props.headerProps }\n        >\n          <div class=\"v-data-table-header__content\">\n            { slots['mobile.header']?.(slotProps.value) ?? (\n              <>\n                { sortableColumns.value.length > 0 && renderSortSelect() }\n                { showSelectColumn && renderSelectAll() }\n              </>\n            )}\n          </div>\n        </VDataTableColumn>\n      )\n    }\n\n    const showMobileHeader = computed(() => {\n      if (slots['mobile.header']) return true\n      const hasSortableColumns = columns.value.some(column => column?.sortable && !props.disableSort)\n      const hasSelectionControl = columns.value.some(column => column.key === 'data-table-select')\n      return hasSortableColumns || hasSelectionControl\n    })\n\n    useRender(() => {\n      return mobile.value ? (\n        <>\n          { showMobileHeader.value && (\n            <tr>\n              <VDataTableMobileHeaderCell />\n            </tr>\n          )}\n        </>\n      ) : (\n        <>\n          { slots.headers\n            ? slots.headers(slotProps.value)\n            : headers.value.map((row, y) => (\n              <tr>\n                { row.map((column, x) => (\n                  <VDataTableHeaderCell key={ column.key ?? x } column={ column } x={ x } y={ y } />\n                ))}\n              </tr>\n            ))}\n\n          { loadingConfig.active.value && ['start', 'both'].includes(loadingConfig.side.value) && (\n            <tr class=\"v-data-table-progress\">\n              <th colspan={ columns.value.length }>\n                <LoaderSlot\n                  name=\"v-data-table-progress\"\n                  absolute\n                  active\n                  color={ loadingConfig.color.value }\n                  indeterminate\n                  v-slots={{ default: slots.loader }}\n                />\n              </th>\n            </tr>\n          )}\n        </>\n      )\n    })\n  },\n})\n\nexport type VDataTableHeaders = InstanceType<typeof VDataTableHeaders>\n","// Components\nimport { VDataTableColumn } from './VDataTableColumn'\nimport { VBtn } from '@/components/VBtn'\nimport { VCheckboxBtn } from '@/components/VCheckbox'\n\n// Composables\nimport { useGroupBy } from './composables/group'\nimport { useHeaders } from './composables/headers'\nimport { useSelection } from './composables/select'\nimport { makeDensityProps } from '@/composables/density'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { genericComponent, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { Group } from './composables/group'\n\nexport type VDataTableGroupHeaderRowSlots = {\n  'data-table-group': { item: Group, count: number, props: Record<string, unknown> }\n  'data-table-select': { props: Record<string, unknown> }\n}\n\nexport const makeVDataTableGroupHeaderRowProps = propsFactory({\n  item: {\n    type: Object as PropType<Group>,\n    required: true,\n  },\n  groupCollapseIcon: {\n    type: IconValue,\n    default: '$tableGroupCollapse',\n  },\n  groupExpandIcon: {\n    type: IconValue,\n    default: '$tableGroupExpand',\n  },\n  selectGroupLabel: {\n    type: String,\n    default: '$vuetify.dataTable.ariaLabel.selectGroup',\n  },\n  ...makeDensityProps(),\n}, 'VDataTableGroupHeaderRow')\n\nexport const VDataTableGroupHeaderRow = genericComponent<VDataTableGroupHeaderRowSlots>()({\n  name: 'VDataTableGroupHeaderRow',\n\n  props: makeVDataTableGroupHeaderRowProps(),\n\n  setup (props, { slots }) {\n    const { t } = useLocale()\n    const { isGroupOpen, toggleGroup, extractRows } = useGroupBy()\n    const { isSelected, isSomeSelected, select } = useSelection()\n    const { columns } = useHeaders()\n\n    const rows = computed(() => {\n      return extractRows([props.item])\n    })\n\n    const colspan = toRef(() => columns.value.length - (columns.value.some(c => c.key === 'data-table-select') ? 1 : 0))\n\n    return () => (\n      <tr\n        class=\"v-data-table-group-header-row\"\n        style={{\n          '--v-data-table-group-header-row-depth': props.item.depth,\n        }}\n      >\n        { columns.value.map(column => {\n          if (column.key === 'data-table-group') {\n            const icon = isGroupOpen(props.item) ? props.groupCollapseIcon : props.groupExpandIcon\n            const onClick = () => toggleGroup(props.item)\n\n            return slots['data-table-group']?.({ item: props.item, count: rows.value.length, props: { icon, onClick } }) ?? (\n              <VDataTableColumn\n                class=\"v-data-table-group-header-row__column\"\n                colspan={ colspan.value }\n              >\n                <VBtn\n                  size=\"small\"\n                  variant=\"text\"\n                  icon={ icon }\n                  onClick={ onClick }\n                />\n                <span>{ props.item.value }</span>\n                <span>({ rows.value.length })</span>\n              </VDataTableColumn>\n            )\n          } else if (column.key === 'data-table-select') {\n            const selectableRows = rows.value.filter(x => x.selectable)\n            const modelValue = selectableRows.length > 0 && isSelected(selectableRows)\n            const indeterminate = isSomeSelected(selectableRows) && !modelValue\n            const selectGroup = (v: boolean) => select(selectableRows, v)\n            return slots['data-table-select']?.({ props: { modelValue, indeterminate, 'onUpdate:modelValue': selectGroup } }) ?? (\n              <VDataTableColumn class=\"v-data-table__td--select-row\" noPadding>\n                <VCheckboxBtn\n                  aria-label={ t(props.selectGroupLabel) }\n                  density={ props.density }\n                  disabled={ selectableRows.length === 0 }\n                  modelValue={ modelValue }\n                  indeterminate={ indeterminate }\n                  onUpdate:modelValue={ selectGroup }\n                />\n              </VDataTableColumn>\n            )\n          }\n\n          return ''\n        })}\n      </tr>\n    )\n  },\n})\n","// Components\nimport { VDataTableColumn } from './VDataTableColumn'\nimport { VBtn } from '@/components/VBtn'\nimport { VCheckboxBtn } from '@/components/VCheckbox'\nimport { VHighlight } from '@/labs/VHighlight'\n\n// Composables\nimport { useExpanded } from './composables/expand'\nimport { useHeaders } from './composables/headers'\nimport { useSelection } from './composables/select'\nimport { useSort } from './composables/sort'\nimport { makeDensityProps } from '@/composables/density'\nimport { makeDisplayProps, useDisplay } from '@/composables/display'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { toDisplayString, withModifiers } from 'vue'\nimport { EventProp, genericComponent, getObjectValueByPath, isFunction, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { CellProps, DataTableItem, ItemKeySlot } from './types'\nimport type { VDataTableHeaderCellColumnSlotProps } from './VDataTableHeaders'\nimport type { FilterMatchArrayMultiple } from '@/composables/filter'\nimport type { GenericProps } from '@/util'\n\nexport type VDataTableItemCellColumnSlotProps<T> = Omit<ItemKeySlot<T>, 'value'> & {\n  props: Record<string, unknown>\n}\n\nexport type VDataTableRowSlots<T> = {\n  'item.data-table-select': VDataTableItemCellColumnSlotProps<T>\n  'item.data-table-expand': VDataTableItemCellColumnSlotProps<T>\n  'header.data-table-select': VDataTableHeaderCellColumnSlotProps\n  'header.data-table-expand': VDataTableHeaderCellColumnSlotProps\n} & {\n  [key: `item.${string}`]: ItemKeySlot<T>\n  [key: `header.${string}`]: VDataTableHeaderCellColumnSlotProps\n}\n\nexport const makeVDataTableRowProps = propsFactory({\n  color: String,\n  index: Number,\n  item: Object as PropType<DataTableItem>,\n  cellProps: [Object, Function] as PropType<CellProps<any>>,\n  collapseIcon: {\n    type: IconValue,\n    default: '$collapse',\n  },\n  expandIcon: {\n    type: IconValue,\n    default: '$expand',\n  },\n  selectRowLabel: {\n    type: String,\n    default: '$vuetify.dataTable.ariaLabel.selectRow',\n  },\n\n  getMatches: Function as PropType<(item: DataTableItem) => Record<string, FilterMatchArrayMultiple | undefined> | undefined>,\n  onClick: EventProp<[MouseEvent]>(),\n  onContextmenu: EventProp<[MouseEvent]>(),\n  onDblclick: EventProp<[MouseEvent]>(),\n\n  ...makeDensityProps(),\n  ...makeDisplayProps(),\n}, 'VDataTableRow')\n\nexport const VDataTableRow = genericComponent<new <T>(\n  props: {\n    item?: DataTableItem<T>\n    cellProps?: CellProps<T>\n  },\n  slots: VDataTableRowSlots<T>,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VDataTableRow',\n\n  props: makeVDataTableRowProps(),\n\n  setup (props, { slots }) {\n    const { t } = useLocale()\n    const { displayClasses, mobile } = useDisplay(props, 'v-data-table__tr')\n    const { isSelected, toggleSelect, someSelected, allSelected, selectAll } = useSelection()\n    const { isExpanded, toggleExpand } = useExpanded()\n    const { toggleSort, sortBy, isSorted } = useSort()\n    const { columns } = useHeaders()\n\n    useRender(() => (\n      <tr\n        class={[\n          'v-data-table__tr',\n          {\n            'v-data-table__tr--clickable': !!(props.onClick || props.onContextmenu || props.onDblclick),\n          },\n          displayClasses.value,\n        ]}\n        onClick={ props.onClick as any }\n        onContextmenu={ props.onContextmenu as any }\n        onDblclick={ props.onDblclick as any }\n      >\n        { props.item && columns.value.map((column, i) => {\n          const item = props.item!\n          const slotName = `item.${column.key}` as const\n          const headerSlotName = `header.${column.key}` as const\n          const slotProps = {\n            index: props.index!,\n            item: item.raw,\n            internalItem: item,\n            value: getObjectValueByPath(item.columns, column.key),\n            column,\n            isSelected,\n            toggleSelect,\n            isExpanded,\n            toggleExpand,\n          } satisfies ItemKeySlot<any>\n\n          const columnSlotProps: VDataTableHeaderCellColumnSlotProps = {\n            column,\n            selectAll,\n            isSorted,\n            toggleSort,\n            sortBy: sortBy.value,\n            someSelected: someSelected.value,\n            allSelected: allSelected.value,\n            getSortIcon: () => '',\n          }\n\n          const cellProps = isFunction(props.cellProps)\n            ? props.cellProps({\n              index: slotProps.index,\n              item: slotProps.item,\n              internalItem: slotProps.internalItem,\n              value: slotProps.value,\n              column,\n            })\n            : props.cellProps\n          const columnCellProps = isFunction(column.cellProps)\n            ? column.cellProps({\n              index: slotProps.index,\n              item: slotProps.item,\n              internalItem: slotProps.internalItem,\n              value: slotProps.value,\n            })\n            : column.cellProps\n\n          const noPadding = column.key === 'data-table-select' || column.key === 'data-table-expand'\n          const isEmpty = column.key === 'data-table-group' && column.width === 0 && !column.title\n\n          return (\n            <VDataTableColumn\n              key={ column.key ?? i }\n              align={ column.align }\n              indent={ column.indent }\n              class={{\n                'v-data-table__td--expanded-row': column.key === 'data-table-expand',\n                'v-data-table__td--select-row': column.key === 'data-table-select',\n              }}\n              fixed={ column.fixed }\n              fixedOffset={ column.fixedOffset }\n              fixedEndOffset={ column.fixedEndOffset }\n              lastFixed={ column.lastFixed }\n              firstFixedEnd={ column.firstFixedEnd }\n              maxWidth={ !mobile.value ? column.maxWidth : undefined }\n              noPadding={ noPadding }\n              empty={ isEmpty }\n              nowrap={ column.nowrap }\n              width={ !mobile.value ? column.width : undefined }\n              { ...cellProps }\n              { ...columnCellProps }\n            >\n              {{\n                default: () => {\n                  if (column.key === 'data-table-select') {\n                    return slots['item.data-table-select']?.({\n                      ...slotProps,\n                      props: {\n                        color: props.color,\n                        disabled: !item.selectable,\n                        modelValue: isSelected([item]),\n                        onClick: withModifiers(() => toggleSelect(item), ['stop']),\n                      },\n                    }) ?? (\n                      <VCheckboxBtn\n                        aria-label={ t(props.selectRowLabel) }\n                        color={ props.color }\n                        disabled={ !item.selectable }\n                        density={ props.density }\n                        modelValue={ isSelected([item]) }\n                        onClick={ withModifiers(\n                          (event: Event) => toggleSelect(item, props.index, event as PointerEvent),\n                          ['stop']\n                        )}\n                      />\n                    )\n                  }\n\n                  if (column.key === 'data-table-expand') {\n                    return slots['item.data-table-expand']?.({\n                      ...slotProps,\n                      props: {\n                        icon: isExpanded(item) ? props.collapseIcon : props.expandIcon,\n                        size: 'small',\n                        variant: 'text',\n                        onClick: withModifiers(() => toggleExpand(item), ['stop']),\n                      },\n                    }) ?? (\n                      <VBtn\n                        icon={ isExpanded(item) ? props.collapseIcon : props.expandIcon }\n                        size=\"small\"\n                        variant=\"text\"\n                        onClick={ withModifiers(() => toggleExpand(item), ['stop']) }\n                      />\n                    )\n                  }\n\n                  if (slots[slotName] && !mobile.value) return slots[slotName](slotProps)\n\n                  const text = toDisplayString(slotProps.value)\n                  const matches = props.getMatches?.(item)?.[column.key!]\n                  const displayValue = matches?.length\n                    ? <VHighlight text={ text } matches={ matches } />\n                    : text\n\n                  return !mobile.value ? displayValue : (\n                    <>\n                      <div class=\"v-data-table__td-title\">\n                        { slots[headerSlotName]?.(columnSlotProps) ?? column.title }\n                      </div>\n\n                      <div class=\"v-data-table__td-value\">\n                        { slots[slotName]?.(slotProps) ?? displayValue }\n                      </div>\n                    </>\n                  )\n                },\n              }}\n            </VDataTableColumn>\n          )\n        })}\n      </tr>\n    ))\n  },\n})\n\nexport type VDataTableRow = InstanceType<typeof VDataTableRow>\n","// Components\nimport { makeVDataTableGroupHeaderRowProps, VDataTableGroupHeaderRow } from './VDataTableGroupHeaderRow'\nimport { makeVDataTableRowProps, VDataTableRow } from './VDataTableRow'\nimport { VExpandTransition } from '@/components/transitions'\n\n// Composables\nimport { useExpanded } from './composables/expand'\nimport { useGroupBy } from './composables/group'\nimport { useHeaders } from './composables/headers'\nimport { useSelection } from './composables/select'\nimport { makeDisplayProps, useDisplay } from '@/composables/display'\nimport { useLocale } from '@/composables/locale'\nimport { MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { Fragment, mergeProps } from 'vue'\nimport { genericComponent, getPrefixedEventHandlers, isFunction, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { Component, PropType, TransitionProps } from 'vue'\nimport type { Group, GroupSummary } from './composables/group'\nimport type { CellProps, DataTableItem, DataTableLoading, GroupHeaderSlot, GroupSummarySlot, ItemSlot, RowProps } from './types'\nimport type { VDataTableGroupHeaderRowSlots } from './VDataTableGroupHeaderRow'\nimport type { VDataTableRowSlots } from './VDataTableRow'\nimport type { GenericProps } from '@/util'\n\nexport type VDataTableRowsSlots<T> = VDataTableGroupHeaderRowSlots & VDataTableRowSlots<T> & {\n  item: ItemSlot<T> & { props: Record<string, any> }\n  loading: never\n  'group-header': GroupHeaderSlot\n  'group-summary': GroupSummarySlot\n  'no-data': never\n  'expanded-row': ItemSlot<T>\n  expanded: ItemSlot<T>\n}\n\nexport const makeVDataTableRowsProps = propsFactory({\n  color: String,\n  loading: [Boolean, String, Object] as PropType<DataTableLoading>,\n  loadingText: {\n    type: String,\n    default: '$vuetify.dataIterator.loadingText',\n  },\n  hideNoData: Boolean,\n  items: {\n    type: Array as PropType<readonly (DataTableItem | Group | GroupSummary)[]>,\n    default: () => ([]),\n  },\n  noDataText: {\n    type: String,\n    default: '$vuetify.noDataText',\n  },\n  rowProps: [Object, Function] as PropType<RowProps<any>>,\n  cellProps: [Object, Function] as PropType<CellProps<any>>,\n  expandTransition: {\n    type: null as unknown as PropType<null | string | boolean | TransitionProps & { component?: Component }>,\n    default: () => ({ component: VExpandTransition }),\n    validator: val => val !== true,\n  },\n\n  ...pick(makeVDataTableRowProps(), ['collapseIcon', 'expandIcon', 'density', 'getMatches']),\n  ...pick(makeVDataTableGroupHeaderRowProps(), ['groupCollapseIcon', 'groupExpandIcon', 'density']),\n  ...makeDisplayProps(),\n}, 'VDataTableRows')\n\nexport const VDataTableRows = genericComponent<new <T>(\n  props: {\n    items?: readonly (DataTableItem<T> | Group<T> | GroupSummary<T>)[]\n  },\n  slots: VDataTableRowsSlots<T>,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VDataTableRows',\n\n  inheritAttrs: false,\n\n  props: makeVDataTableRowsProps(),\n\n  setup (props, { attrs, slots }) {\n    const { columns } = useHeaders()\n    const { expandOnClick, toggleExpand, isExpanded } = useExpanded()\n    const { isSelected, toggleSelect } = useSelection()\n    const { toggleGroup, isGroupOpen } = useGroupBy()\n    const { t } = useLocale()\n    const { mobile } = useDisplay(props)\n\n    useRender(() => {\n      const groupHeaderRowProps = pick(props, ['groupCollapseIcon', 'groupExpandIcon', 'density'])\n\n      if (props.loading && (!props.items.length || slots.loading)) {\n        return (\n          <tr\n            class=\"v-data-table-rows-loading\"\n            key=\"loading\"\n          >\n            <td colspan={ columns.value.length }>\n              { slots.loading?.() ?? t(props.loadingText) }\n            </td>\n          </tr>\n        )\n      }\n\n      if (!props.loading && !props.items.length && !props.hideNoData) {\n        return (\n          <tr\n            class=\"v-data-table-rows-no-data\"\n            key=\"no-data\"\n          >\n            <td colspan={ columns.value.length }>\n              { slots['no-data']?.() ?? t(props.noDataText) }\n            </td>\n          </tr>\n        )\n      }\n\n      return (\n        <>\n          { props.items.map((item, index) => {\n            if (item.type === 'group') {\n              const slotProps = {\n                index,\n                item,\n                columns: columns.value,\n                isExpanded,\n                toggleExpand,\n                isSelected,\n                toggleSelect,\n                toggleGroup,\n                isGroupOpen,\n              } satisfies GroupHeaderSlot\n\n              return slots['group-header'] ? slots['group-header'](slotProps) : (\n                <VDataTableGroupHeaderRow\n                  key={ `group-header_${item.id}` }\n                  item={ item }\n                  { ...getPrefixedEventHandlers(attrs, ':groupHeader', () => slotProps) }\n                  { ...groupHeaderRowProps }\n                  v-slots={ slots }\n                />\n              )\n            }\n\n            if (item.type === 'group-summary') {\n              const slotProps = {\n                index,\n                item,\n                columns: columns.value,\n                toggleGroup,\n              } satisfies GroupSummarySlot\n\n              return slots['group-summary']?.(slotProps) ?? ''\n            }\n\n            const slotProps = {\n              index: item.virtualIndex ?? index,\n              item: item.raw,\n              internalItem: item,\n              columns: columns.value,\n              isExpanded,\n              toggleExpand,\n              isSelected,\n              toggleSelect,\n            } satisfies ItemSlot<any>\n\n            const itemSlotProps = {\n              ...slotProps,\n              props: mergeProps(\n                {\n                  key: `item_${item.key ?? item.index}`,\n                  onClick: expandOnClick.value ? () => {\n                    toggleExpand(item)\n                  } : undefined,\n                  index,\n                  item,\n                  color: props.color,\n                  cellProps: props.cellProps,\n                  collapseIcon: props.collapseIcon,\n                  expandIcon: props.expandIcon,\n                  density: props.density,\n                  mobile: mobile.value,\n                  getMatches: props.getMatches,\n                },\n                getPrefixedEventHandlers(attrs, ':row', () => slotProps),\n                isFunction(props.rowProps)\n                  ? props.rowProps({\n                    item: slotProps.item,\n                    index: slotProps.index,\n                    internalItem: slotProps.internalItem,\n                  })\n                  : props.rowProps,\n              ),\n            }\n\n            return (\n              <Fragment key={ itemSlotProps.props.key as string }>\n                { slots.item ? slots.item(itemSlotProps) : (\n                  <VDataTableRow\n                    { ...itemSlotProps.props }\n                    v-slots={ slots }\n                  />\n                )}\n\n                { slots['expanded-row']\n                  ? isExpanded(item) && slots['expanded-row'](slotProps)\n                  : slots.expanded && (\n                    <tr class=\"v-data-table__tr--expanded\">\n                      <td colspan={ columns.value.length }>\n                        { props.expandTransition\n                          ? (\n                            <MaybeTransition transition={ props.expandTransition }>\n                              { isExpanded(item)\n                                ? <div>{ slots.expanded(slotProps) }</div>\n                                : null }\n                            </MaybeTransition>\n                          )\n                          // bypass <Transition> to avoid flash when expand-strategy=single\n                          : isExpanded(item) && <div>{ slots.expanded(slotProps) }</div>\n                        }\n                      </td>\n                    </tr>\n                  )\n                }\n              </Fragment>\n            )\n          })}\n        </>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VDataTableRows = InstanceType<typeof VDataTableRows>\n","// Styles\nimport './VTable.sass'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed } from 'vue'\nimport { convertToUnit, genericComponent, isBoolean, pickWithRest, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport type VTableSlots = {\n  default: never\n  top: never\n  bottom: never\n  wrapper: never\n  caption: never\n}\n\nexport type Striped = null | 'odd' | 'even'\nexport type Gridlines = 'horizontal' | 'vertical' | 'all'\n\nexport const makeVTableProps = propsFactory({\n  gridlines: {\n    type: [Boolean, String] as PropType<boolean | Gridlines>,\n    default: 'horizontal',\n    validator: (v: any) => isBoolean(v) || ['horizontal', 'vertical', 'all'].includes(v),\n  },\n  fixedHeader: Boolean,\n  fixedFooter: Boolean,\n  height: [Number, String],\n  hover: Boolean,\n  striped: {\n    type: String as PropType<Striped>,\n    default: null,\n    validator: (v: any) => ['even', 'odd'].includes(v),\n  },\n\n  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...makeTagProps(),\n  ...makeThemeProps(),\n}, 'VTable')\n\nexport const VTable = genericComponent<VTableSlots>()({\n  name: 'VTable',\n\n  inheritAttrs: false,\n\n  props: makeVTableProps(),\n\n  setup (props, { attrs, slots, emit }) {\n    const { themeClasses } = provideTheme(props)\n    const { densityClasses } = useDensity(props)\n\n    const gridlinesVariant = computed<'none' | 'horizontal' | 'vertical' | 'all'>(() => {\n      if (props.gridlines === false) return 'none'\n      if (props.gridlines === true) return 'all'\n      return props.gridlines\n    })\n\n    useRender(() => {\n      const [tableAttrs, rootAttrs] = pickWithRest(attrs, [/^aria-label/])\n\n      return (\n        <props.tag\n          { ...rootAttrs }\n          class={[\n            'v-table',\n            `v-table--gridlines-${gridlinesVariant.value}`,\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              'v-table--hover': props.hover,\n              'v-table--striped-even': props.striped === 'even',\n              'v-table--striped-odd': props.striped === 'odd',\n            },\n            themeClasses.value,\n            densityClasses.value,\n            props.class,\n          ]}\n          style={ props.style }\n        >\n          { slots.top?.() }\n\n          { slots.default ? (\n            <div\n              class=\"v-table__wrapper\"\n              style={{ height: convertToUnit(props.height) }}\n            >\n              <table { ...tableAttrs }>\n                { slots.caption?.() }\n                { slots.default() }\n              </table>\n            </div>\n          ) : slots.wrapper?.()}\n\n          { slots.bottom?.() }\n        </props.tag>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VTable = InstanceType<typeof VTable>\n","// Utilities\nimport { computed } from 'vue'\nimport { getPropertyFromItem, propsFactory } from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { CellProps, DataTableItem, InternalDataTableHeader, RowProps } from '../types'\nimport type { SelectItemKey } from '@/util'\n\nexport interface DataTableItemProps {\n  items: any[]\n  itemValue: SelectItemKey\n  itemSelectable: SelectItemKey\n  returnObject: boolean\n}\n\n// Composables\nexport const makeDataTableItemsProps = propsFactory({\n  items: {\n    type: Array as PropType<DataTableItemProps['items']>,\n    default: () => ([]),\n  },\n  itemValue: {\n    type: [String, Array, Function] as PropType<SelectItemKey>,\n    default: 'id',\n  },\n  itemSelectable: {\n    type: [String, Array, Function] as PropType<SelectItemKey>,\n    default: null,\n  },\n  rowProps: [Object, Function] as PropType<RowProps<any>>,\n  cellProps: [Object, Function] as PropType<CellProps<any>>,\n  returnObject: Boolean,\n}, 'DataTable-items')\n\nexport function transformItem (\n  props: Omit<DataTableItemProps, 'items'>,\n  item: any,\n  index: number,\n  columns: InternalDataTableHeader[]\n): DataTableItem {\n  const value = props.returnObject ? item : getPropertyFromItem(item, props.itemValue)\n  const selectable = getPropertyFromItem(item, props.itemSelectable, true)\n  const itemColumns = columns.reduce((obj, column) => {\n    if (column.key != null) obj[column.key] = getPropertyFromItem(item, column.value!)\n    return obj\n  }, {} as Record<string, unknown>)\n\n  return {\n    type: 'item',\n    key: props.returnObject ? getPropertyFromItem(item, props.itemValue) : value,\n    index,\n    value,\n    selectable,\n    columns: itemColumns,\n    raw: item,\n  }\n}\n\nexport function transformItems (\n  props: Omit<DataTableItemProps, 'items'>,\n  items: DataTableItemProps['items'],\n  columns: InternalDataTableHeader[]\n): DataTableItem[] {\n  return items.map((item, index) => transformItem(props, item, index, columns))\n}\n\nexport function useDataTableItems (props: DataTableItemProps, columns: Ref<InternalDataTableHeader[]>) {\n  const items = computed(() => transformItems(props, props.items, columns.value))\n\n  return { items }\n}\n","// Styles\nimport './VDataTable.sass'\n\n// Components\nimport { makeVDataTableFooterProps, VDataTableFooter } from './VDataTableFooter'\nimport { makeVDataTableHeadersProps, VDataTableHeaders } from './VDataTableHeaders'\nimport { makeVDataTableRowsProps, VDataTableRows } from './VDataTableRows'\nimport { VDivider } from '@/components/VDivider'\nimport { makeVTableProps, VTable } from '@/components/VTable/VTable'\n\n// Composables\nimport { makeDataTableExpandProps, provideExpanded } from './composables/expand'\nimport { createGroupBy, makeDataTableGroupProps, provideGroupBy, useGroupedItems, useOpenAllGroups } from './composables/group'\nimport { createHeaders, makeDataTableHeaderProps } from './composables/headers'\nimport { makeDataTableItemsProps, useDataTableItems } from './composables/items'\nimport { useLoadingConfig } from './composables/loading'\nimport { useOptions } from './composables/options'\nimport {\n  createPagination,\n  makeDataTablePaginateProps,\n  providePagination,\n  usePaginatedGroups,\n  usePaginatedItems,\n} from './composables/paginate'\nimport { makeDataTableSelectProps, provideSelection } from './composables/select'\nimport { createSort, makeDataTableSortProps, provideSort, useSortedItems } from './composables/sort'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeFilterProps, useFilter } from '@/composables/filter'\nimport { LoaderSlot } from '@/composables/loader'\n\n// Utilities\nimport { computed, toRef, toRefs, toValue } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { DeepReadonly, UnwrapRef } from 'vue'\nimport type { Group, GroupSummary } from './composables/group'\nimport type { CellProps, DataTableHeader, DataTableItem, InternalDataTableHeader, RowProps } from './types'\nimport type { VDataTableHeadersSlots } from './VDataTableHeaders'\nimport type { VDataTableRowsSlots } from './VDataTableRows'\nimport type { GenericProps, SelectItemKey } from '@/util'\n\nexport type VDataTableSlotProps<T> = {\n  page: number\n  itemsPerPage: number\n  itemsLength: number\n  sortBy: UnwrapRef<ReturnType<typeof provideSort>['sortBy']>\n  pageCount: number\n  toggleSort: ReturnType<typeof provideSort>['toggleSort']\n  setItemsPerPage: (value: number) => void\n  prevPage: () => void\n  nextPage: () => void\n  setPage: (value: number) => void\n  someSelected: boolean\n  allSelected: boolean\n  isSelected: ReturnType<typeof provideSelection>['isSelected']\n  select: ReturnType<typeof provideSelection>['select']\n  selectAll: ReturnType<typeof provideSelection>['selectAll']\n  toggleSelect: ReturnType<typeof provideSelection>['toggleSelect']\n  isExpanded: ReturnType<typeof provideExpanded>['isExpanded']\n  toggleExpand: ReturnType<typeof provideExpanded>['toggleExpand']\n  isGroupOpen: ReturnType<typeof provideGroupBy>['isGroupOpen']\n  toggleGroup: ReturnType<typeof provideGroupBy>['toggleGroup']\n  items: readonly T[]\n  internalItems: readonly DataTableItem[]\n  groupedItems: readonly (DataTableItem<T> | Group<DataTableItem<T>> | GroupSummary<DataTableItem<T>>)[]\n  columns: InternalDataTableHeader[]\n  headers: InternalDataTableHeader[][]\n}\n\nexport type VDataTableSlots<T> = VDataTableRowsSlots<T> & VDataTableHeadersSlots & {\n  default: VDataTableSlotProps<T>\n  caption: never\n  colgroup: VDataTableSlotProps<T>\n  top: VDataTableSlotProps<T>\n  body: VDataTableSlotProps<T>\n  tbody: VDataTableSlotProps<T>\n  thead: VDataTableSlotProps<T>\n  tfoot: VDataTableSlotProps<T>\n  bottom: VDataTableSlotProps<T>\n  'body.prepend': VDataTableSlotProps<T>\n  'body.append': VDataTableSlotProps<T>\n  'footer.prepend': never\n}\n\nexport const makeDataTableProps = propsFactory({\n  ...makeVDataTableRowsProps(),\n\n  hideDefaultBody: Boolean,\n  hideDefaultFooter: Boolean,\n  hideDefaultHeader: Boolean,\n  width: [String, Number],\n  search: String,\n\n  ...makeDataTableExpandProps(),\n  ...makeDataTableGroupProps(),\n  ...makeDataTableHeaderProps(),\n  ...makeDataTableItemsProps(),\n  ...makeDataTableSelectProps(),\n  ...makeDataTableSortProps(),\n  ...omit(makeVDataTableHeadersProps(), ['multiSort', 'initialSortOrder']),\n  ...makeVTableProps(),\n}, 'DataTable')\n\nexport const makeVDataTableProps = propsFactory({\n  ...makeDataTablePaginateProps(),\n  ...makeDataTableProps(),\n  ...makeFilterProps(),\n  ...makeVDataTableFooterProps(),\n}, 'VDataTable')\n\ntype ItemType<T> = T extends readonly (infer U)[] ? U : never\n\nexport const VDataTable = genericComponent<new <T extends readonly any[], V>(\n  props: {\n    items?: T\n    itemValue?: SelectItemKey<ItemType<T>>\n    rowProps?: RowProps<ItemType<T>>\n    cellProps?: CellProps<ItemType<T>>\n    itemSelectable?: SelectItemKey<ItemType<T>>\n    headers?: DeepReadonly<DataTableHeader<ItemType<T>>[]>\n    modelValue?: V\n    'onUpdate:modelValue'?: (value: V) => void\n  },\n  slots: VDataTableSlots<ItemType<T>>,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VDataTable',\n\n  props: makeVDataTableProps(),\n\n  emits: {\n    'update:modelValue': (value: any[]) => true,\n    'update:page': (value: number) => true,\n    'update:itemsPerPage': (value: number) => true,\n    'update:sortBy': (value: any) => true,\n    'update:options': (value: any) => true,\n    'update:groupBy': (value: any) => true,\n    'update:expanded': (value: any) => true,\n    'update:opened': (value: string[]) => true,\n    'update:currentItems': (value: any) => true,\n  },\n\n  setup (props, { attrs, slots }) {\n    const { groupBy, opened, openAll, groupKey } = createGroupBy(props)\n    const { initialSortOrder, sortBy, multiSort, mustSort } = createSort(props)\n    const { page, itemsPerPage } = createPagination(props)\n    const { disableSort } = toRefs(props)\n\n    const {\n      columns,\n      headers,\n      sortFunctions,\n      sortRawFunctions,\n      filterFunctions,\n    } = createHeaders(props, {\n      groupBy,\n      showSelect: toRef(() => props.showSelect),\n      showExpand: toRef(() => props.showExpand),\n    })\n\n    const { items } = useDataTableItems(props, columns)\n\n    const search = toRef(() => props.search)\n    const { filteredItems, getMatches } = useFilter(props, items, search, {\n      transform: item => item.columns,\n      customKeyFilter: filterFunctions,\n    })\n\n    const { toggleSort } = provideSort({ initialSortOrder, sortBy, multiSort, mustSort, page })\n    const {\n      sortByWithGroups,\n      opened: openedGroups,\n      extractRows,\n      isGroupOpen,\n      toggleGroup,\n    } = provideGroupBy({ groupBy, sortBy, disableSort, opened })\n\n    const { sortedItems } = useSortedItems(props, filteredItems, sortByWithGroups, {\n      transform: item => ({ ...item.raw, ...item.columns }),\n      sortFunctions,\n      sortRawFunctions,\n    })\n    useOpenAllGroups(openedGroups, openAll, sortedItems, groupBy, groupKey)\n\n    const pageBy = computed(() => {\n      if (props.pageBy === 'auto') {\n        return props.groupBy.length ? 'group' : 'item'\n      }\n      return props.pageBy\n    })\n\n    const {\n      pageCount,\n      setItemsPerPage,\n      prevPage,\n      nextPage,\n      setPage,\n      paginatedItems,\n    } = usePaginatedGroups({\n      pageBy,\n      sortedItems,\n      paginate: items => {\n        const itemsLength = computed(() => toValue(items).length)\n        const {\n          startIndex, stopIndex, pageCount, setItemsPerPage, prevPage, nextPage, setPage,\n        } = providePagination({ page, itemsPerPage, itemsLength })\n        const { paginatedItems } = usePaginatedItems({ items, startIndex, stopIndex, itemsPerPage })\n        return { paginatedItems, pageCount, setItemsPerPage, prevPage, nextPage, setPage }\n      },\n      group: items => useGroupedItems(items, groupBy, openedGroups, () => !!slots['group-summary'], isGroupOpen, groupKey),\n    })\n\n    const paginatedItemsWithoutGroups = computed(() => extractRows(paginatedItems.value))\n\n    const {\n      isSelected,\n      select,\n      selectAll,\n      toggleSelect,\n      someSelected,\n      allSelected,\n    } = provideSelection(props, { allItems: items, currentPage: paginatedItemsWithoutGroups })\n\n    const { isExpanded, toggleExpand } = provideExpanded(props)\n\n    const loadingConfig = useLoadingConfig(() => props.loading, () => props.color)\n\n    useOptions({\n      page,\n      itemsPerPage,\n      sortBy,\n      groupBy,\n      search,\n    })\n\n    provideDefaults({\n      VDataTableRows: {\n        hideNoData: toRef(() => props.hideNoData),\n        noDataText: toRef(() => props.noDataText),\n        loading: toRef(() => props.loading),\n        loadingText: toRef(() => props.loadingText),\n      },\n    })\n\n    const slotProps = computed<VDataTableSlotProps<any>>(() => ({\n      page: page.value,\n      itemsPerPage: itemsPerPage.value,\n      itemsLength: filteredItems.value.length,\n      sortBy: sortBy.value,\n      pageCount: pageCount.value,\n      toggleSort,\n      setItemsPerPage,\n      prevPage,\n      nextPage,\n      setPage,\n      someSelected: someSelected.value,\n      allSelected: allSelected.value,\n      isSelected,\n      select,\n      selectAll,\n      toggleSelect,\n      isExpanded,\n      toggleExpand,\n      isGroupOpen,\n      toggleGroup,\n      items: paginatedItemsWithoutGroups.value.map(item => item.raw),\n      internalItems: paginatedItemsWithoutGroups.value,\n      groupedItems: paginatedItems.value,\n      columns: columns.value,\n      headers: headers.value,\n    }))\n\n    useRender(() => {\n      const dataTableFooterProps = VDataTableFooter.filterProps(props)\n      const dataTableHeadersProps = VDataTableHeaders.filterProps(omit(props, ['multiSort']))\n      const dataTableRowsProps = VDataTableRows.filterProps(props)\n      const tableProps = VTable.filterProps(props)\n\n      return (\n        <VTable\n          class={[\n            'v-data-table',\n            {\n              'v-data-table--show-select': props.showSelect,\n              'v-data-table--loading': props.loading,\n            },\n            props.class,\n          ]}\n          style={ props.style }\n          { ...tableProps }\n          fixedHeader={ props.fixedHeader || props.sticky }\n        >\n          {{\n            top: () => slots.top?.(slotProps.value),\n            caption: slots.caption,\n            default: () => slots.default ? slots.default(slotProps.value) : (\n              <>\n                { slots.colgroup?.(slotProps.value) }\n                { !props.hideDefaultHeader && (\n                  <thead key=\"thead\">\n                    <VDataTableHeaders\n                      { ...dataTableHeadersProps }\n                      multiSort={ !!props.multiSort }\n                      v-slots={ slots }\n                    />\n                  </thead>\n                )}\n                { slots.thead?.(slotProps.value) }\n                { !props.hideDefaultBody && (\n                  <tbody>\n                    { slots['body.prepend']?.(slotProps.value) }\n                    { slots.body ? slots.body(slotProps.value) : (\n                      <VDataTableRows\n                        { ...attrs }\n                        { ...dataTableRowsProps }\n                        items={ paginatedItems.value }\n                        getMatches={ getMatches }\n                        v-slots={ slots }\n                      />\n                    )}\n                    { slots['body.append']?.(slotProps.value) }\n                    { loadingConfig.active.value && ['end', 'both'].includes(loadingConfig.side.value) && (\n                      <tr class=\"v-data-table-progress v-data-table-progress--bottom\">\n                        <th colspan={ columns.value.length }>\n                          <LoaderSlot\n                            name=\"v-data-table-progress\"\n                            absolute\n                            active\n                            color={ loadingConfig.color.value }\n                            indeterminate\n                            v-slots={{ default: slots.loader }}\n                          />\n                        </th>\n                      </tr>\n                    )}\n                  </tbody>\n                )}\n                { slots.tbody?.(slotProps.value) }\n                { slots.tfoot?.(slotProps.value) }\n              </>\n            ),\n            bottom: () => slots.bottom ? slots.bottom(slotProps.value) : !props.hideDefaultFooter && (\n              <>\n                <VDivider />\n\n                <VDataTableFooter\n                  { ...dataTableFooterProps }\n                  v-slots={{\n                    prepend: slots['footer.prepend'],\n                  }}\n                />\n              </>\n            ),\n          }}\n        </VTable>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VDataTable = InstanceType<typeof VDataTable>\n","// Components\nimport { makeDataTableProps } from './VDataTable'\nimport { VDataTableHeaders } from './VDataTableHeaders'\nimport { VDataTableRow } from './VDataTableRow'\nimport { VDataTableRows } from './VDataTableRows'\nimport { VTable } from '@/components/VTable'\nimport { VVirtualScrollItem } from '@/components/VVirtualScroll/VVirtualScrollItem'\n\n// Composables\nimport { provideExpanded } from './composables/expand'\nimport { createGroupBy, makeDataTableGroupProps, provideGroupBy, useGroupedItems, useOpenAllGroups } from './composables/group'\nimport { createHeaders } from './composables/headers'\nimport { useDataTableItems } from './composables/items'\nimport { useOptions } from './composables/options'\nimport { provideSelection } from './composables/select'\nimport { createSort, provideSort, useSortedItems } from './composables/sort'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeFilterProps, useFilter } from '@/composables/filter'\nimport { MaybeTransition } from '@/composables/transition'\nimport { makeVirtualProps, useVirtual } from '@/composables/virtual'\n\n// Utilities\nimport { cloneVNode, computed, Fragment, isVNode, nextTick, shallowRef, toRef, toRefs, watch } from 'vue'\nimport { convertToUnit, genericComponent, omit, pickWithRest, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { DeepReadonly, VNode, VNodeArrayChildren } from 'vue'\nimport type { VDataTableSlotProps } from './VDataTable'\nimport type { VDataTableHeadersSlots } from './VDataTableHeaders'\nimport type { VDataTableRowsSlots } from './VDataTableRows'\nimport type { CellProps, DataTableHeader, RowProps } from '@/components/VDataTable/types'\nimport type { GenericProps, SelectItemKey, TemplateRef } from '@/util'\n\ntype VDataTableVirtualSlotProps<T> = Omit<\n  VDataTableSlotProps<T>,\n  | 'setItemsPerPage'\n  | 'page'\n  | 'pageCount'\n  | 'itemsPerPage'\n  | 'prevPage'\n  | 'nextPage'\n  | 'setPage'\n>\n\nexport type VDataTableVirtualSlots<T> = VDataTableRowsSlots<T> & VDataTableHeadersSlots & {\n  caption: never\n  colgroup: VDataTableVirtualSlotProps<T>\n  top: VDataTableVirtualSlotProps<T>\n  headers: VDataTableHeadersSlots['headers']\n  tbody: VDataTableVirtualSlotProps<T>\n  thead: VDataTableVirtualSlotProps<T>\n  tfoot: VDataTableVirtualSlotProps<T>\n  bottom: VDataTableVirtualSlotProps<T>\n  'body.prepend': VDataTableVirtualSlotProps<T>\n  'body.append': VDataTableVirtualSlotProps<T>\n  item: {\n    itemRef: TemplateRef\n  }\n}\n\nexport const makeVDataTableVirtualProps = propsFactory({\n  ...omit(makeDataTableProps(), ['hideDefaultFooter']),\n  ...makeDataTableGroupProps(),\n  ...makeVirtualProps(),\n  ...makeFilterProps(),\n}, 'VDataTableVirtual')\n\ntype ItemType<T> = T extends readonly (infer U)[] ? U : never\n\nfunction elementNodes (nodes?: VNodeArrayChildren): VNode[] {\n  return (nodes ?? []).flatMap(node =>\n    Array.isArray(node) ? elementNodes(node)\n    : !isVNode(node) ? []\n    : node.type === Fragment ? elementNodes(node.children as VNodeArrayChildren)\n    : typeof node.type === 'symbol' ? []\n    : [node]\n  )\n}\n\nexport const VDataTableVirtual = genericComponent<new <T extends readonly any[], V>(\n  props: {\n    items?: T\n    itemValue?: SelectItemKey<ItemType<T>>\n    rowProps?: RowProps<ItemType<T>>\n    cellProps?: CellProps<ItemType<T>>\n    itemSelectable?: SelectItemKey<ItemType<T>>\n    headers?: DeepReadonly<DataTableHeader<ItemType<T>>[]>\n    modelValue?: V\n    'onUpdate:modelValue'?: (value: V) => void\n  },\n  slots: VDataTableVirtualSlots<ItemType<T>>,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VDataTableVirtual',\n\n  props: makeVDataTableVirtualProps(),\n\n  emits: {\n    'update:modelValue': (value: any[]) => true,\n    'update:sortBy': (value: any) => true,\n    'update:options': (value: any) => true,\n    'update:groupBy': (value: any) => true,\n    'update:expanded': (value: any) => true,\n    'update:opened': (value: string[]) => true,\n  },\n\n  setup (props, { attrs, slots }) {\n    const { groupBy, opened, openAll, groupKey } = createGroupBy(props)\n    const { initialSortOrder, sortBy, multiSort, mustSort } = createSort(props)\n    const { disableSort } = toRefs(props)\n\n    const {\n      columns,\n      headers,\n      filterFunctions,\n      sortFunctions,\n      sortRawFunctions,\n    } = createHeaders(props, {\n      groupBy,\n      showSelect: toRef(() => props.showSelect),\n      showExpand: toRef(() => props.showExpand),\n    })\n    const { items } = useDataTableItems(props, columns)\n\n    const search = toRef(() => props.search)\n    const { filteredItems, getMatches } = useFilter(props, items, search, {\n      transform: item => item.columns,\n      customKeyFilter: filterFunctions,\n    })\n\n    const { toggleSort } = provideSort({ initialSortOrder, sortBy, multiSort, mustSort })\n    const {\n      sortByWithGroups,\n      opened: openedGroups,\n      extractRows,\n      isGroupOpen,\n      toggleGroup,\n    } = provideGroupBy({ groupBy, sortBy, disableSort, opened })\n\n    const { sortedItems } = useSortedItems(props, filteredItems, sortByWithGroups, {\n      transform: item => ({ ...item.raw, ...item.columns }),\n      sortFunctions,\n      sortRawFunctions,\n    })\n    useOpenAllGroups(openedGroups, openAll, sortedItems, groupBy, groupKey)\n    const { flatItems } = useGroupedItems(sortedItems, groupBy, openedGroups, () => !!slots['group-summary'], isGroupOpen, groupKey)\n\n    const allItems = computed(() => extractRows(flatItems.value))\n\n    const { isSelected, select, selectAll, toggleSelect, someSelected, allSelected } = provideSelection(props, {\n      allItems,\n      currentPage: allItems,\n    })\n    const { expanded, isExpanded, toggleExpand } = provideExpanded(props)\n\n    const {\n      containerRef,\n      markerRef,\n      paddingTop,\n      paddingBottom,\n      computedItems,\n      handleItemResize,\n      handleScroll,\n      handleScrollend,\n      calculateVisibleItems,\n      scrollToIndex,\n    } = useVirtual(props, flatItems)\n\n    const displayItems = computed(() =>\n      computedItems.value\n        .map(item => ({\n          ...item.raw,\n          virtualIndex: item.index,\n        }))\n    )\n\n    // one virtual size per index = item row + optional expanded rows\n    const rowHeights = new Map<number, number>()\n    const expandedHeights = new Map<number, number[]>()\n\n    function updateSize (index: number) {\n      const expanded = expandedHeights.get(index)?.reduce((sum, height) => sum + (height || 0), 0) ?? 0\n      handleItemResize(index, (rowHeights.get(index) ?? 0) + expanded)\n    }\n\n    function setRowHeight (index: number, height: number) {\n      rowHeights.set(index, height)\n      updateSize(index)\n    }\n\n    function setExpandedHeight (index: number, row: number, height: number) {\n      const heights = expandedHeights.get(index) ?? []\n      heights[row] = height\n      expandedHeights.set(index, heights)\n      updateSize(index)\n    }\n\n    function trimExpandedHeights (index: number, count: number) {\n      const heights = expandedHeights.get(index)\n      if (!heights || heights.length <= count) return\n\n      heights.length = count\n      updateSize(index)\n    }\n\n    watch(expanded, () => {\n      if (!slots['expanded-row']) return\n      for (const index of [...expandedHeights.keys()]) {\n        const item = flatItems.value[index]\n        if (item?.type === 'item' && isExpanded(item)) continue\n        expandedHeights.delete(index)\n        updateSize(index)\n      }\n    })\n\n    watch(flatItems, () => {\n      rowHeights.clear()\n      expandedHeights.clear()\n    })\n\n    useOptions({\n      sortBy,\n      page: shallowRef(1),\n      itemsPerPage: shallowRef(-1),\n      groupBy,\n      search,\n    })\n\n    provideDefaults({\n      VDataTableRows: {\n        hideNoData: toRef(() => props.hideNoData),\n        noDataText: toRef(() => props.noDataText),\n        loading: toRef(() => props.loading),\n        loadingText: toRef(() => props.loadingText),\n      },\n    })\n\n    const slotProps = computed<VDataTableVirtualSlotProps<any>>(() => ({\n      itemsLength: allItems.value.length,\n      sortBy: sortBy.value,\n      toggleSort,\n      someSelected: someSelected.value,\n      allSelected: allSelected.value,\n      isSelected,\n      select,\n      selectAll,\n      toggleSelect,\n      isExpanded,\n      toggleExpand,\n      isGroupOpen,\n      toggleGroup,\n      items: allItems.value.map(item => item.raw),\n      internalItems: allItems.value,\n      groupedItems: flatItems.value,\n      columns: columns.value,\n      headers: headers.value,\n    }))\n\n    useRender(() => {\n      const dataTableHeadersProps = VDataTableHeaders.filterProps(omit(props, ['multiSort']))\n      const dataTableRowsProps = VDataTableRows.filterProps(props)\n      const tableProps = VTable.filterProps(props)\n      const [tableAttrs] = pickWithRest(attrs, [/^aria-label/])\n\n      return (\n        <VTable\n          class={[\n            'v-data-table',\n            {\n              'v-data-table--loading': props.loading,\n            },\n            props.class,\n          ]}\n          style={ props.style }\n          { ...tableProps }\n          fixedHeader={ props.fixedHeader || props.sticky }\n        >\n          {{\n            top: () => slots.top?.(slotProps.value),\n            wrapper: () => (\n              <div\n                ref={ containerRef }\n                onScrollPassive={ handleScroll }\n                onScrollend={ handleScrollend }\n                class=\"v-table__wrapper\"\n                style={{\n                  height: convertToUnit(props.height),\n                }}\n              >\n                <table { ...tableAttrs }>\n                  { slots.caption?.() }\n                  { slots.colgroup?.(slotProps.value) }\n                  { !props.hideDefaultHeader && (\n                    <thead key=\"thead\">\n                      <VDataTableHeaders\n                        { ...dataTableHeadersProps }\n                        multiSort={ !!props.multiSort }\n                        v-slots={ slots }\n                      />\n                    </thead>\n                  )}\n                  { slots.thead?.(slotProps.value) }\n                  { !props.hideDefaultBody && (\n                    <tbody key=\"tbody\">\n                      <tr ref={ markerRef } style={{ height: convertToUnit(paddingTop.value), border: 0 }}>\n                        <td colspan={ columns.value.length } style={{ height: 0, border: 0 }}></td>\n                      </tr>\n\n                      { slots['body.prepend']?.(slotProps.value) }\n\n                      <VDataTableRows\n                        { ...attrs }\n                        { ...dataTableRowsProps }\n                        items={ displayItems.value }\n                        getMatches={ getMatches }\n                      >\n                        {{\n                          ...omit(slots, ['expanded', 'expanded-row']),\n                          item: itemSlotProps => {\n                            const { props: rowProps, ...itemSlot } = itemSlotProps\n                            const index = itemSlotProps.internalItem.virtualIndex ?? itemSlotProps.internalItem.index\n                            const itemExpanded = isExpanded(itemSlotProps.internalItem)\n                            const expandedRows = props.showExpand && itemExpanded && slots['expanded-row']\n                              ? elementNodes(slots['expanded-row'](itemSlot))\n                              : []\n\n                            // rows that stay never resize, so a shrunk slot reports nothing\n                            if (slots['expanded-row'] && (expandedHeights.get(index)?.length ?? 0) > expandedRows.length) {\n                              nextTick(() => trimExpandedHeights(index, expandedRows.length))\n                            }\n\n                            return (\n                              <>\n                                <VVirtualScrollItem\n                                  key={ index }\n                                  renderless\n                                  onUpdate:height={ height => setRowHeight(index, height) }\n                                >\n                                  { ({ itemRef }) => (\n                                    slots.item?.({ ...itemSlotProps, itemRef }) ?? (\n                                      <VDataTableRow\n                                        { ...rowProps }\n                                        ref={ itemRef }\n                                        index={ itemSlotProps.index }\n                                        getMatches={ getMatches }\n                                        v-slots={ slots }\n                                      />\n                                    )\n                                  )}\n                                </VVirtualScrollItem>\n\n                                { props.showExpand && (\n                                  slots['expanded-row']\n                                    ? expandedRows.map((node, row) => (\n                                      <VVirtualScrollItem\n                                        key={ `${index}-expanded-${row}` }\n                                        renderless\n                                        onUpdate:height={ height => setExpandedHeight(index, row, height) }\n                                      >\n                                        { ({ itemRef }) => cloneVNode(node, { ref: itemRef }, true) }\n                                      </VVirtualScrollItem>\n                                    ))\n                                    : slots.expanded && (\n                                      <VVirtualScrollItem\n                                        key={ `${index}-expanded` }\n                                        renderless\n                                        onUpdate:height={ height => setExpandedHeight(index, 0, height) }\n                                      >\n                                        { ({ itemRef }) => (\n                                          <tr class=\"v-data-table__tr--expanded\" ref={ itemRef }>\n                                            <td colspan={ columns.value.length }>\n                                              { props.expandTransition\n                                                ? (\n                                                  <MaybeTransition transition={ props.expandTransition }>\n                                                    { itemExpanded\n                                                      ? <div>{ slots.expanded!(itemSlot) }</div>\n                                                      : null }\n                                                  </MaybeTransition>\n                                                )\n                                                // bypass <Transition> to avoid flash when expand-strategy=single\n                                                : itemExpanded && <div>{ slots.expanded!(itemSlot) }</div>\n                                              }\n                                            </td>\n                                          </tr>\n                                        )}\n                                      </VVirtualScrollItem>\n                                    )\n                                )}\n                              </>\n                            )\n                          },\n                        }}\n                      </VDataTableRows>\n\n                      { slots['body.append']?.(slotProps.value) }\n\n                      <tr style={{ height: convertToUnit(paddingBottom.value), border: 0 }}>\n                        <td colspan={ columns.value.length } style={{ height: 0, border: 0 }}></td>\n                      </tr>\n                    </tbody>\n                  )}\n                  { slots.tbody?.(slotProps.value) }\n                  { slots.tfoot?.(slotProps.value) }\n                </table>\n              </div>\n            ),\n            bottom: () => slots.bottom?.(slotProps.value),\n          }}\n        </VTable>\n      )\n    })\n\n    return {\n      calculateVisibleItems,\n      scrollToIndex,\n    }\n  },\n})\n\nexport type VDataTableVirtual = InstanceType<typeof VDataTableVirtual>\n","// Components\nimport { makeDataTableProps } from './VDataTable'\nimport { makeVDataTableFooterProps, VDataTableFooter } from './VDataTableFooter'\nimport { VDataTableHeaders } from './VDataTableHeaders'\nimport { VDataTableRows } from './VDataTableRows'\nimport { VDivider } from '@/components/VDivider'\nimport { VTable } from '@/components/VTable'\n\n// Composables\nimport { provideExpanded } from './composables/expand'\nimport { createGroupBy, provideGroupBy, useGroupedItems, useOpenAllGroups } from './composables/group'\nimport { createHeaders } from './composables/headers'\nimport { useDataTableItems } from './composables/items'\nimport { useOptions } from './composables/options'\nimport { createPagination, makeDataTablePaginateProps, providePagination } from './composables/paginate'\nimport { provideSelection } from './composables/select'\nimport { createSort, provideSort } from './composables/sort'\nimport { provideDefaults } from '@/composables/defaults'\n\n// Utilities\nimport { computed, provide, toRef, toRefs } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { DeepReadonly } from 'vue'\nimport type { VDataTableSlotProps, VDataTableSlots } from './VDataTable'\nimport type { CellProps, DataTableHeader, RowProps } from '@/components/VDataTable/types'\nimport type { GenericProps, SelectItemKey } from '@/util'\n\nexport const makeVDataTableServerProps = propsFactory({\n  itemsLength: {\n    type: [Number, String],\n    required: true,\n  },\n\n  ...makeDataTablePaginateProps(),\n  ...makeDataTableProps(),\n  ...makeVDataTableFooterProps(),\n}, 'VDataTableServer')\n\ntype ItemType<T> = T extends readonly (infer U)[] ? U : never\n\nexport const VDataTableServer = genericComponent<new <T extends readonly any[], V>(\n  props: {\n    items?: T\n    itemValue?: SelectItemKey<ItemType<T>>\n    rowProps?: RowProps<ItemType<T>>\n    cellProps?: CellProps<ItemType<T>>\n    itemSelectable?: SelectItemKey<ItemType<T>>\n    headers?: DeepReadonly<DataTableHeader<ItemType<T>>[]>\n    modelValue?: V\n    'onUpdate:modelValue'?: (value: V) => void\n  },\n  slots: VDataTableSlots<ItemType<T>>,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VDataTableServer',\n\n  props: makeVDataTableServerProps(),\n\n  emits: {\n    'update:modelValue': (value: any[]) => true,\n    'update:page': (page: number) => true,\n    'update:itemsPerPage': (page: number) => true,\n    'update:sortBy': (sortBy: any) => true,\n    'update:options': (options: any) => true,\n    'update:expanded': (options: any) => true,\n    'update:groupBy': (value: any) => true,\n    'update:opened': (value: string[]) => true,\n  },\n\n  setup (props, { attrs, slots }) {\n    const { groupBy, opened, openAll, groupKey } = createGroupBy(props)\n    const { initialSortOrder, sortBy, multiSort, mustSort } = createSort(props)\n    const { page, itemsPerPage } = createPagination(props)\n    const { disableSort } = toRefs(props)\n    const itemsLength = computed(() => parseInt(props.itemsLength, 10))\n\n    const { columns, headers } = createHeaders(props, {\n      groupBy,\n      showSelect: toRef(() => props.showSelect),\n      showExpand: toRef(() => props.showExpand),\n    })\n\n    const { items } = useDataTableItems(props, columns)\n\n    const { toggleSort } = provideSort({ initialSortOrder, sortBy, multiSort, mustSort, page })\n\n    const {\n      opened: openedGroups,\n      isGroupOpen,\n      toggleGroup,\n      extractRows,\n    } = provideGroupBy({ groupBy, sortBy, disableSort, opened })\n    useOpenAllGroups(openedGroups, openAll, items, groupBy, groupKey)\n\n    const { pageCount, setItemsPerPage, prevPage, nextPage, setPage } = providePagination({ page, itemsPerPage, itemsLength })\n\n    const { flatItems } = useGroupedItems(items, groupBy, openedGroups, () => !!slots['group-summary'], isGroupOpen, groupKey)\n\n    const { isSelected, select, selectAll, toggleSelect, someSelected, allSelected } = provideSelection(props, {\n      allItems: items,\n      currentPage: items,\n    })\n\n    const { isExpanded, toggleExpand } = provideExpanded(props)\n\n    const itemsWithoutGroups = computed(() => extractRows(items.value))\n\n    useOptions({\n      page,\n      itemsPerPage,\n      sortBy,\n      groupBy,\n      search: toRef(() => props.search),\n    })\n\n    provide('v-data-table', {\n      toggleSort,\n      sortBy,\n    })\n\n    provideDefaults({\n      VDataTableRows: {\n        hideNoData: toRef(() => props.hideNoData),\n        noDataText: toRef(() => props.noDataText),\n        loading: toRef(() => props.loading),\n        loadingText: toRef(() => props.loadingText),\n      },\n    })\n\n    const slotProps = computed<VDataTableSlotProps<any>>(() => ({\n      page: page.value,\n      itemsPerPage: itemsPerPage.value,\n      itemsLength: itemsLength.value,\n      sortBy: sortBy.value,\n      pageCount: pageCount.value,\n      toggleSort,\n      setItemsPerPage,\n      prevPage,\n      nextPage,\n      setPage,\n      someSelected: someSelected.value,\n      allSelected: allSelected.value,\n      isSelected,\n      select,\n      selectAll,\n      toggleSelect,\n      isExpanded,\n      toggleExpand,\n      isGroupOpen,\n      toggleGroup,\n      items: itemsWithoutGroups.value.map(item => item.raw),\n      internalItems: itemsWithoutGroups.value,\n      groupedItems: flatItems.value,\n      columns: columns.value,\n      headers: headers.value,\n    }))\n\n    useRender(() => {\n      const dataTableFooterProps = VDataTableFooter.filterProps(props)\n      const dataTableHeadersProps = VDataTableHeaders.filterProps(omit(props, ['multiSort']))\n      const dataTableRowsProps = VDataTableRows.filterProps(props)\n      const tableProps = VTable.filterProps(props)\n\n      return (\n        <VTable\n          class={[\n            'v-data-table',\n            {\n              'v-data-table--loading': props.loading,\n            },\n            props.class,\n          ]}\n          style={ props.style }\n          { ...tableProps }\n          fixedHeader={ props.fixedHeader || props.sticky }\n        >\n          {{\n            top: () => slots.top?.(slotProps.value),\n            caption: slots.caption,\n            default: () => slots.default ? slots.default(slotProps.value) : (\n              <>\n                { slots.colgroup?.(slotProps.value) }\n                { !props.hideDefaultHeader && (\n                  <thead key=\"thead\" class=\"v-data-table__thead\" role=\"rowgroup\">\n                    <VDataTableHeaders\n                      { ...dataTableHeadersProps }\n                      multiSort={ !!props.multiSort }\n                      v-slots={ slots }\n                    />\n                  </thead>\n                )}\n                { slots.thead?.(slotProps.value) }\n                { !props.hideDefaultBody && (\n                  <tbody class=\"v-data-table__tbody\" role=\"rowgroup\">\n                    { slots['body.prepend']?.(slotProps.value) }\n                    { slots.body ? slots.body(slotProps.value) : (\n                      <VDataTableRows\n                        { ...attrs }\n                        { ...dataTableRowsProps }\n                        items={ flatItems.value }\n                        v-slots={ slots }\n                      />\n                    )}\n                    { slots['body.append']?.(slotProps.value) }\n                  </tbody>\n                )}\n                { slots.tbody?.(slotProps.value) }\n                { slots.tfoot?.(slotProps.value) }\n              </>\n            ),\n            bottom: () => slots.bottom ? slots.bottom(slotProps.value) : !props.hideDefaultFooter && (\n              <>\n                <VDivider />\n\n                <VDataTableFooter\n                  { ...dataTableFooterProps }\n                  v-slots={{\n                    prepend: slots['footer.prepend'],\n                  }}\n                />\n              </>\n            ),\n          }}\n        </VTable>\n      )\n    })\n  },\n})\n\nexport type VDataTableServer = InstanceType<typeof VDataTableServer>\n","// Styles\nimport './VContainer.sass'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useRtl } from '@/composables/locale'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVContainerProps = propsFactory({\n  fluid: {\n    type: Boolean,\n    default: false,\n  },\n\n  ...makeComponentProps(),\n  ...makeDimensionProps(),\n  ...makeTagProps(),\n}, 'VContainer')\n\nexport const VContainer = genericComponent()({\n  name: 'VContainer',\n\n  props: makeVContainerProps(),\n\n  setup (props, { slots }) {\n    const { rtlClasses } = useRtl()\n    const { dimensionStyles } = useDimension(props)\n\n    useRender(() => (\n      <props.tag\n        class={[\n          'v-container',\n          { 'v-container--fluid': props.fluid },\n          rtlClasses.value,\n          props.class,\n        ]}\n        style={[\n          dimensionStyles.value,\n          props.style,\n        ]}\n        v-slots={ slots }\n      />\n    ))\n\n    return {}\n  },\n})\n\nexport type VContainer = InstanceType<typeof VContainer>\n","// Styles\nimport './VGrid.sass'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { breakpoints } from '@/composables/display'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { capitalize, computed, h } from 'vue'\nimport { genericComponent, isString, keys, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { Breakpoint } from '@/composables/display'\n\ntype BreakpointOffset = `offset${Capitalize<Breakpoint>}`\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<Breakpoint, {\n    type: [BooleanConstructor, StringConstructor, NumberConstructor]\n    default: false\n  }>)\n})()\n\nconst offsetProps = (() => {\n  return breakpoints.reduce((props, val) => {\n    const offsetKey = ('offset' + capitalize(val)) as BreakpointOffset\n    props[offsetKey] = {\n      type: [String, Number],\n      default: null,\n    }\n    return props\n  }, {} as Record<BreakpointOffset, {\n    type: [StringConstructor, NumberConstructor]\n    default: null\n  }>)\n})()\n\nconst propMap = {\n  col: keys(breakpointProps),\n  offset: keys(offsetProps),\n  order: ['order', 'orderSm', 'orderMd', 'orderLg', 'orderXl', 'orderXxl'],\n}\n\nfunction parseCols (val: boolean | string | number) {\n  if (isString(val) && val.includes('/')) {\n    const [cols, size] = val.split('/')\n    return { cols: Number(cols), size: Number(size) }\n  }\n  return { cols: val }\n}\n\nfunction parseBreakpoint (type: keyof typeof propMap, prop: string, val: boolean | string | number) {\n  if (val == null || val === false) {\n    return {}\n  }\n  const { cols, size } = parseCols(val)\n\n  const breakpoint = prop.replace(type, '').toLowerCase()\n\n  if (type === 'offset') {\n    return {\n      className: `v-col--offset-${breakpoint}-${cols}`,\n      variables: [{ [`--v-col-offset-base-${breakpoint}`]: size }],\n    }\n  } else if (type === 'order') {\n    return { className: `order-${breakpoint}-${cols}` }\n  }\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  return {\n    className: cols === '' || cols === true\n      ? `v-col--${breakpoint}`\n      : `v-col--cols-${breakpoint}-${cols}`,\n    variables: [{ [`--v-col-size-base-${breakpoint}`]: size }],\n  }\n}\n\nconst ALIGN_SELF_VALUES = ['auto', 'start', 'end', 'center', 'baseline', 'stretch'] as const\nconst alignSelfValidator = (str: any) => ALIGN_SELF_VALUES.includes(str)\n\nexport const makeVColProps = propsFactory({\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\n  /** @deprecated use order-* class instead */\n  order: { type: [String, Number], default: null },\n  /** @deprecated use order-sm-* class instead */\n  orderSm: { type: [String, Number], default: null },\n  /** @deprecated use order-md-* class instead */\n  orderMd: { type: [String, Number], default: null },\n  /** @deprecated use order-lg-* class instead */\n  orderLg: { type: [String, Number], default: null },\n  /** @deprecated use order-xl-* class instead */\n  orderXl: { type: [String, Number], default: null },\n  /** @deprecated use order-xxl-* class instead */\n  orderXxl: { type: [String, Number], default: null },\n  /** @deprecated use align-self-* class instead */\n  alignSelf: { type: String as PropType<typeof ALIGN_SELF_VALUES[number]>, default: null, validator: alignSelfValidator },\n\n  ...makeComponentProps(),\n  ...makeTagProps(),\n}, 'VCol')\n\nexport const VCol = genericComponent()({\n  name: 'VCol',\n\n  props: makeVColProps(),\n\n  setup (props, { slots }) {\n    const sizeBaseOverride = computed(() => parseCols(props.cols).size)\n    const offsetBaseOverride = computed(() => parseCols(props.offset).size)\n\n    const responsive = computed(() => {\n      const classList: any[] = ['v-col']\n      const variablesList: 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 = (props as any)[prop]\n          const { className, variables } = parseBreakpoint(type, prop, value)\n          if (className) classList.push(className)\n          if (variables) variablesList.push(...variables)\n        })\n      }\n\n      const { cols } = parseCols(props.cols)\n      const { cols: offset } = parseCols(props.offset)\n\n      classList.push({\n        [`v-col--cols-${cols}`]: cols,\n        [`v-col--offset-${offset}`]: offset,\n        [`order-${props.order}`]: props.order,\n        [`align-self-${props.alignSelf}`]: props.alignSelf,\n      })\n\n      return {\n        classes: classList,\n        variables: variablesList,\n      }\n    })\n\n    return () => h(props.tag, {\n      class: [\n        responsive.value.classes,\n        props.class,\n      ],\n      style: [\n        { '--v-col-size-base': sizeBaseOverride.value },\n        { '--v-col-offset-base': offsetBaseOverride.value },\n        responsive.value.variables,\n        props.style,\n      ],\n    }, slots.default?.())\n  },\n})\n\nexport type VCol = InstanceType<typeof VCol>\n","// Styles\nimport './VGrid.sass'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDensityProps } from '@/composables/density'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed, h } from 'vue'\nimport { convertToUnit, deprecate, genericComponent, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nconst ALIGNMENT = ['start', 'end', 'center'] as const\n\nconst SPACE = ['space-between', 'space-around', 'space-evenly'] as const\n\nconst ALIGN_VALUES = [...ALIGNMENT, 'baseline', 'stretch'] as const\nconst alignValidator = (str: any) => ALIGN_VALUES.includes(str)\n\nconst JUSTIFY_VALUES = [...ALIGNMENT, ...SPACE] as const\nconst justifyValidator = (str: any) => JUSTIFY_VALUES.includes(str)\n\nconst ALIGN_CONTENT_VALUES = [...ALIGNMENT, ...SPACE, 'stretch'] as const\nconst alignContentValidator = (str: any) => ALIGN_CONTENT_VALUES.includes(str)\n\nconst propMap = {\n  align: ['align', 'alignSm', 'alignMd', 'alignLg', 'alignXl', 'alignXxl'],\n  justify: ['justify', 'justifySm', 'justifyMd', 'justifyLg', 'justifyXl', 'justifyXxl'],\n  alignContent: ['alignContent', 'alignContentSm', 'alignContentMd', 'alignContentLg', 'alignContentXl', 'alignContentXxl'],\n}\n\nconst classMap = {\n  align: 'align',\n  justify: 'justify',\n  alignContent: 'align-content',\n}\n\nfunction breakpointClass (type: keyof typeof classMap, 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 makeVRowProps = propsFactory({\n  /** @deprecated use density=\"compact\" instead */\n  dense: Boolean,\n  /** @deprecated use align-* class instead */\n  align: { type: String as PropType<typeof ALIGN_VALUES[number]>, default: null, validator: alignValidator },\n  /** @deprecated use align-sm-* class instead */\n  alignSm: { type: String as PropType<typeof ALIGN_VALUES[number]>, default: null, validator: alignValidator },\n  /** @deprecated use align-md-* class instead */\n  alignMd: { type: String as PropType<typeof ALIGN_VALUES[number]>, default: null, validator: alignValidator },\n  /** @deprecated use align-lg-* class instead */\n  alignLg: { type: String as PropType<typeof ALIGN_VALUES[number]>, default: null, validator: alignValidator },\n  /** @deprecated use align-xl-* class instead */\n  alignXl: { type: String as PropType<typeof ALIGN_VALUES[number]>, default: null, validator: alignValidator },\n  /** @deprecated use align-xxl-* class instead */\n  alignXxl: { type: String as PropType<typeof ALIGN_VALUES[number]>, default: null, validator: alignValidator },\n  /** @deprecated use justify-* class instead */\n  justify: { type: String as PropType<typeof JUSTIFY_VALUES[number]>, default: null, validator: justifyValidator },\n  /** @deprecated use justify-sm-* class instead */\n  justifySm: { type: String as PropType<typeof JUSTIFY_VALUES[number]>, default: null, validator: justifyValidator },\n  /** @deprecated use justify-md-* class instead */\n  justifyMd: { type: String as PropType<typeof JUSTIFY_VALUES[number]>, default: null, validator: justifyValidator },\n  /** @deprecated use justify-lg-* class instead */\n  justifyLg: { type: String as PropType<typeof JUSTIFY_VALUES[number]>, default: null, validator: justifyValidator },\n  /** @deprecated use justify-xl-* class instead */\n  justifyXl: { type: String as PropType<typeof JUSTIFY_VALUES[number]>, default: null, validator: justifyValidator },\n  /** @deprecated use justify-xxl-* class instead */\n  justifyXxl: { type: String as PropType<typeof JUSTIFY_VALUES[number]>, default: null, validator: justifyValidator },\n  /** @deprecated use align-content-* class instead */\n  alignContent: { type: String as PropType<typeof ALIGN_CONTENT_VALUES[number]>, default: null, validator: alignContentValidator },\n  /** @deprecated use align-content-sm-* class instead */\n  alignContentSm: { type: String as PropType<typeof ALIGN_CONTENT_VALUES[number]>, default: null, validator: alignContentValidator },\n  /** @deprecated use align-content-md-* class instead */\n  alignContentMd: { type: String as PropType<typeof ALIGN_CONTENT_VALUES[number]>, default: null, validator: alignContentValidator },\n  /** @deprecated use align-content-lg-* class instead */\n  alignContentLg: { type: String as PropType<typeof ALIGN_CONTENT_VALUES[number]>, default: null, validator: alignContentValidator },\n  /** @deprecated use align-content-xl-* class instead */\n  alignContentXl: { type: String as PropType<typeof ALIGN_CONTENT_VALUES[number]>, default: null, validator: alignContentValidator },\n  /** @deprecated use align-content-xxl-* class instead */\n  alignContentXxl: { type: String as PropType<typeof ALIGN_CONTENT_VALUES[number]>, default: null, validator: alignContentValidator },\n\n  noGutters: Boolean,\n  gap: [Number, String, Array] as PropType<number | string | (string | number)[]>,\n  size: [Number, String],\n  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...makeTagProps(),\n}, 'VRow')\n\nexport const VRow = genericComponent()({\n  name: 'VRow',\n\n  props: makeVRowProps(),\n\n  setup (props, { slots }) {\n    if (props.dense) {\n      deprecate('dense', 'density=\"compact\"')\n    }\n\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--density-default': props.density === 'default' && !props.noGutters && !props.dense,\n        'v-row--density-compact': props.density === 'compact' || props.dense,\n        'v-row--density-comfortable': props.density === 'comfortable',\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    const horizontalGap = computed(() => {\n      return (Array.isArray(props.gap))\n        ? convertToUnit(props.gap[0] || 0)\n        : convertToUnit(props.gap)\n    })\n\n    const verticalGap = computed(() => {\n      return (Array.isArray(props.gap))\n        ? convertToUnit(props.gap[1] || 0)\n        : horizontalGap.value\n    })\n\n    return () => h(props.tag, {\n      class: [\n        'v-row',\n        classes.value,\n        props.class,\n      ],\n      style: [\n        {\n          '--v-col-gap-x': horizontalGap.value,\n          '--v-col-gap-y': verticalGap.value,\n          '--v-row-columns': props.size,\n        },\n        props.style,\n      ],\n    }, slots.default?.())\n  },\n})\n\nexport type VRow = InstanceType<typeof VRow>\n","// Styles\nimport './VSpacer.sass'\n\n// Utilities\nimport { createSimpleFunctional } from '@/util'\n\nexport const VSpacer = createSimpleFunctional('v-spacer', 'div', 'VSpacer')\n\nexport type VSpacer = InstanceType<typeof VSpacer>\n","// Styles\nimport './VDatePickerControls.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VSpacer } from '@/components/VGrid'\n\n// Composables\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { computed } from 'vue'\nimport { convertToUnit, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\ntype ControlVariant = 'docked' | 'modal'\n\nexport type VDatePickerControlsDefaultSlotProps = {\n  viewMode: 'month' | 'months' | 'year'\n  monthYearText: string\n  monthText: string\n  yearText: string\n  disabled: string[]\n  openMonths: () => void\n  openYears: () => void\n  prevMonth: () => void\n  nextMonth: () => void\n  prevYear: () => void\n  nextYear: () => void\n}\n\ntype VDatePickerControlsSlots = {\n  default: VDatePickerControlsDefaultSlotProps\n}\n\nexport const makeVDatePickerControlsProps = propsFactory({\n  active: {\n    type: [String, Array] as PropType<string | string[]>,\n    default: undefined,\n  },\n  controlHeight: [Number, String],\n  controlVariant: {\n    type: String as PropType<ControlVariant>,\n    default: 'docked',\n  },\n  noMonthPicker: Boolean,\n  disabled: {\n    type: [Boolean, String, Array] as PropType<boolean | string | string[] | null>,\n    default: null,\n  },\n  nextIcon: {\n    type: IconValue,\n    default: '$next',\n  },\n  prevIcon: {\n    type: IconValue,\n    default: '$prev',\n  },\n  modeIcon: {\n    type: IconValue,\n    default: '$subgroup',\n  },\n  text: String,\n  monthText: String,\n  yearText: String,\n  viewMode: {\n    type: String as PropType<'month' | 'months' | 'year'>,\n    default: 'month',\n  },\n}, 'VDatePickerControls')\n\nexport const VDatePickerControls = genericComponent<VDatePickerControlsSlots>()({\n  name: 'VDatePickerControls',\n\n  props: makeVDatePickerControlsProps(),\n\n  emits: {\n    'click:year': () => true,\n    'click:month': () => true,\n    'click:prev': () => true,\n    'click:next': () => true,\n    'click:prev-year': () => true,\n    'click:next-year': () => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const { t } = useLocale()\n\n    const disableMonth = computed(() => {\n      return Array.isArray(props.disabled)\n        ? props.disabled.includes('text')\n        : !!props.disabled\n    })\n    const disableYear = computed(() => {\n      return Array.isArray(props.disabled)\n        ? props.disabled.includes('mode')\n        : !!props.disabled\n    })\n    const disablePrevMonth = computed(() => {\n      return Array.isArray(props.disabled)\n        ? props.disabled.includes('prev-month')\n        : !!props.disabled\n    })\n    const disableNextMonth = computed(() => {\n      return Array.isArray(props.disabled)\n        ? props.disabled.includes('next-month')\n        : !!props.disabled\n    })\n    const disablePrevYear = computed(() => {\n      return Array.isArray(props.disabled)\n        ? props.disabled.includes('prev-year')\n        : !!props.disabled\n    })\n    const disableNextYear = computed(() => {\n      return Array.isArray(props.disabled)\n        ? props.disabled.includes('next-year')\n        : !!props.disabled\n    })\n\n    function onClickPrevMonth () {\n      emit('click:prev')\n    }\n\n    function onClickNextMonth () {\n      emit('click:next')\n    }\n\n    function onClickPrevYear () {\n      emit('click:prev-year')\n    }\n\n    function onClickNextYear () {\n      emit('click:next-year')\n    }\n\n    function onClickYear () {\n      emit('click:year')\n    }\n\n    function onClickMonth () {\n      emit('click:month')\n    }\n\n    useRender(() => {\n      const innerDefaults = {\n        VBtn: {\n          density: 'comfortable',\n          variant: 'text',\n        },\n      }\n\n      const prevMonth = (\n        <VBtn\n          data-testid=\"prev-month\"\n          disabled={ disablePrevMonth.value }\n          icon={ props.prevIcon }\n          aria-label={ t('$vuetify.datePicker.ariaLabel.previousMonth') }\n          onClick={ onClickPrevMonth }\n        />\n      )\n\n      const nextMonth = (\n        <VBtn\n          data-testid=\"next-month\"\n          disabled={ disableNextMonth.value }\n          icon={ props.nextIcon }\n          aria-label={ t('$vuetify.datePicker.ariaLabel.nextMonth') }\n          onClick={ onClickNextMonth }\n        />\n      )\n\n      const prevYear = (\n        <VBtn\n          data-testid=\"prev-year\"\n          disabled={ disablePrevYear.value }\n          icon={ props.prevIcon }\n          aria-label={ t('$vuetify.datePicker.ariaLabel.previousYear') }\n          onClick={ onClickPrevYear }\n        />\n      )\n\n      const nextYear = (\n        <VBtn\n          data-testid=\"next-year\"\n          disabled={ disableNextYear.value }\n          icon={ props.nextIcon }\n          aria-label={ t('$vuetify.datePicker.ariaLabel.nextYear') }\n          onClick={ onClickNextYear }\n        />\n      )\n\n      const onlyMonthBtn = (\n        <VBtn\n          class=\"v-date-picker-controls__only-month-btn\"\n          data-testid=\"month-btn\"\n          density=\"default\"\n          disabled={ disableMonth.value }\n          text={ props.monthText }\n          appendIcon={ props.modeIcon }\n          rounded\n          aria-label={ t('$vuetify.datePicker.ariaLabel.selectMonth') }\n          onClick={ onClickMonth }\n        />\n      )\n\n      const onlyYearBtn = (\n        <VBtn\n          class=\"v-date-picker-controls__only-year-btn\"\n          data-testid=\"year-btn\"\n          density=\"default\"\n          disabled={ disableYear.value }\n          text={ props.yearText }\n          appendIcon={ props.modeIcon }\n          rounded\n          aria-label={ t('$vuetify.datePicker.ariaLabel.selectYear') }\n          onClick={ onClickYear }\n        />\n      )\n\n      const monthYearBtn = (\n        <VBtn\n          class=\"v-date-picker-controls__year-btn\"\n          data-testid=\"year-btn\"\n          density=\"default\"\n          disabled={ disableYear.value }\n          text={ props.text }\n          appendIcon={ props.modeIcon }\n          rounded\n          aria-label={ t('$vuetify.datePicker.ariaLabel.selectYear') }\n          onClick={ onClickYear }\n        />\n      )\n\n      const monthYearSplit = (\n        <>\n          <VBtn\n            class=\"v-date-picker-controls__month-btn\"\n            data-testid=\"month-btn\"\n            height=\"36\"\n            disabled={ disableMonth.value }\n            text={ props.text }\n            rounded\n            aria-label={ t('$vuetify.datePicker.ariaLabel.selectMonth') }\n            onClick={ onClickMonth }\n          />\n          <VBtn\n            class=\"v-date-picker-controls__mode-btn\"\n            data-testid=\"year-btn\"\n            disabled={ disableYear.value }\n            icon={ props.modeIcon }\n            aria-label={ t('$vuetify.datePicker.ariaLabel.selectYear') }\n            onClick={ onClickYear }\n          />\n        </>\n      )\n\n      const slotProps: VDatePickerControlsDefaultSlotProps = {\n        viewMode: props.viewMode,\n        disabled: Array.isArray(props.disabled) ? props.disabled : [],\n        monthYearText: props.text ?? '',\n        monthText: props.monthText ?? '',\n        yearText: props.yearText ?? '',\n        openMonths: onClickMonth,\n        openYears: onClickYear,\n        prevMonth: onClickPrevMonth,\n        nextMonth: onClickNextMonth,\n        prevYear: onClickPrevYear,\n        nextYear: onClickNextYear,\n      }\n\n      const modalControls = (\n        <>\n          { props.noMonthPicker ? monthYearBtn : monthYearSplit }\n\n          <VSpacer />\n\n          <div class=\"v-date-picker-controls__month\">\n            { prevMonth }\n            { nextMonth }\n          </div>\n        </>\n      )\n\n      const dockedControls = (\n        <>\n          <div class=\"v-date-picker-controls__month\">\n            { prevMonth }\n            { onlyMonthBtn }\n            { nextMonth }\n          </div>\n\n          <VSpacer />\n\n          <div class=\"v-date-picker-controls__year\">\n            { prevYear }\n            { onlyYearBtn }\n            { nextYear }\n          </div>\n        </>\n      )\n\n      return (\n        <VDefaultsProvider defaults={ innerDefaults }>\n          <div\n            class={[\n              'v-date-picker-controls',\n              `v-date-picker-controls--variant-${props.controlVariant}`,\n            ]}\n            style={{\n              '--v-date-picker-controls-height': convertToUnit(props.controlHeight),\n            }}\n          >\n            { slots.default?.(slotProps) ?? (\n              <>\n                { props.controlVariant === 'modal' && modalControls }\n                { props.controlVariant === 'docked' && dockedControls }\n              </>\n            )}\n          </div>\n        </VDefaultsProvider>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VDatePickerControls = InstanceType<typeof VDatePickerControls>\n","// Styles\nimport './VDatePickerHeader.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { IconValue } from '@/composables/icons'\nimport { MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { EventProp, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nexport type VDatePickerHeaderSlots = {\n  prepend: never\n  default: never\n  append: never\n}\n\nexport const makeVDatePickerHeaderProps = propsFactory({\n  appendIcon: IconValue,\n  color: String,\n  header: String,\n  transition: String,\n  onClick: EventProp<[MouseEvent]>(),\n  onClickOnce: EventProp<[MouseEvent]>(),\n}, 'VDatePickerHeader')\n\nexport const VDatePickerHeader = genericComponent<VDatePickerHeaderSlots>()({\n  name: 'VDatePickerHeader',\n\n  props: makeVDatePickerHeaderProps(),\n\n  emits: {\n    click: () => true,\n    'click:append': () => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)\n\n    function onClick () {\n      emit('click')\n    }\n\n    function onClickAppend () {\n      emit('click:append')\n    }\n\n    useRender(() => {\n      const hasContent = !!(slots.default || props.header)\n      const hasAppend = !!(slots.append || props.appendIcon)\n\n      return (\n        <div\n          class={[\n            'v-date-picker-header',\n            {\n              'v-date-picker-header--clickable': !!(props.onClick || props.onClickOnce),\n            },\n            backgroundColorClasses.value,\n          ]}\n          style={ backgroundColorStyles.value }\n          onClick={ (props.onClick || props.onClickOnce) && onClick }\n        >\n          { slots.prepend && (\n            <div key=\"prepend\" class=\"v-date-picker-header__prepend\">\n              { slots.prepend() }\n            </div>\n          )}\n\n          { hasContent && (\n            <MaybeTransition key=\"content\" name={ props.transition }>\n              <div key={ props.header } class=\"v-date-picker-header__content\">\n                { slots.default?.() ?? props.header }\n              </div>\n            </MaybeTransition>\n          )}\n\n          { hasAppend && (\n            <div class=\"v-date-picker-header__append\">\n              { !slots.append ? (\n                <VBtn\n                  key=\"append-btn\"\n                  icon={ props.appendIcon }\n                  variant=\"text\"\n                  onClick={ onClickAppend }\n                />\n              ) : (\n                <VDefaultsProvider\n                  key=\"append-defaults\"\n                  disabled={ !props.appendIcon }\n                  defaults={{\n                    VBtn: {\n                      icon: props.appendIcon,\n                      variant: 'text',\n                    },\n                  }}\n                >\n                  { slots.append?.() }\n                </VDefaultsProvider>\n              )}\n            </div>\n          )}\n        </div>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VDatePickerHeader = InstanceType<typeof VDatePickerHeader>\n","// Composables\nimport { useDate } from '@/composables/date/date'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed } from 'vue'\nimport { isFunction, isNullOrUndefined, propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// Types\nexport interface CalendarProps {\n  allowedDates: unknown[] | ((date: unknown) => boolean) | undefined\n  disabled: boolean\n  displayValue?: unknown\n  modelValue: unknown[] | undefined\n  max: unknown\n  min: unknown\n  showAdjacentMonths: boolean\n  month: number | string | undefined\n  weekdays: number[]\n  year: number | string | undefined\n  weeksInMonth: 'dynamic' | 'static'\n  firstDayOfWeek: number | string | undefined\n  firstDayOfYear: number | string | undefined\n  weekdayFormat: 'long' | 'short' | 'narrow' | undefined\n\n  'onUpdate:modelValue': ((value: unknown[]) => void) | undefined\n  'onUpdate:month': ((value: number) => void) | undefined\n  'onUpdate:year': ((value: number) => void) | undefined\n}\n\nexport type CalendarDay = {\n  date: Date\n  formatted: string\n  isAdjacent: boolean\n  isDisabled: boolean\n  isEnd: boolean\n  isHidden: boolean\n  isSame: boolean\n  isSelected: boolean\n  isStart: boolean\n  isToday: boolean\n  isWeekEnd: boolean\n  isWeekStart: boolean\n  isoDate: string\n  localized: string\n  month: number\n  year: number\n}\n\nexport type CalendarWeekdays = 0 | 1 | 2 | 3 | 4 | 5 | 6\n\n// Composables\nexport const makeCalendarProps = propsFactory({\n  allowedDates: [Array, Function] as PropType<unknown[] | ((date: unknown) => boolean)>,\n  disabled: {\n    type: Boolean,\n    default: null,\n  },\n  displayValue: null as any as PropType<unknown>,\n  modelValue: Array as PropType<unknown[]>,\n  month: [Number, String],\n  max: null as any as PropType<unknown>,\n  min: null as any as PropType<unknown>,\n  showAdjacentMonths: Boolean,\n  year: [Number, String],\n  weekdays: {\n    type: Array as PropType<CalendarWeekdays[]>,\n    default: () => [0, 1, 2, 3, 4, 5, 6],\n  },\n  weeksInMonth: {\n    type: String as PropType<'dynamic' | 'static'>,\n    default: 'dynamic',\n  },\n  firstDayOfWeek: {\n    type: [Number, String],\n    default: undefined,\n  },\n  firstDayOfYear: {\n    type: [Number, String],\n    default: undefined,\n  },\n  weekdayFormat: String as PropType<'long' | 'short' | 'narrow' | undefined>,\n}, 'calendar')\n\nexport function useCalendar (props: CalendarProps) {\n  const adapter = useDate()\n  const model = useProxiedModel(\n    props,\n    'modelValue',\n    [],\n    v => wrapInArray(v).map(i => adapter.date(i)),\n  )\n  const displayValue = computed(() => {\n    if (props.displayValue) return adapter.date(props.displayValue)\n    if (model.value.length > 0) return adapter.date(model.value[0])\n    if (props.min) return adapter.date(props.min)\n    if (Array.isArray(props.allowedDates)) return adapter.date(props.allowedDates[0])\n\n    return adapter.date()\n  })\n\n  const year = useProxiedModel(\n    props,\n    'year',\n    undefined,\n    v => {\n      const value = !isNullOrUndefined(v) ? Number(v) : adapter.getYear(displayValue.value)\n\n      return adapter.startOfYear(adapter.setYear(adapter.date(), value))\n    },\n    v => adapter.getYear(v)\n  )\n\n  const month = useProxiedModel(\n    props,\n    'month',\n    undefined,\n    v => {\n      const value = !isNullOrUndefined(v) ? Number(v) : adapter.getMonth(displayValue.value)\n      const date = adapter.setYear(adapter.startOfMonth(adapter.date()), adapter.getYear(year.value))\n\n      return adapter.setMonth(date, value)\n    },\n    v => adapter.getMonth(v)\n  )\n\n  const weekdayLabels = computed(() => {\n    const firstDayOfWeek = adapter.toJsDate(adapter.startOfWeek(adapter.date(), props.firstDayOfWeek)).getDay()\n    return adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat)\n      .filter((_, i) => props.weekdays.includes((i + firstDayOfWeek) % 7))\n  })\n\n  const weeksInMonth = computed(() => {\n    const weeks = adapter.getWeekArray(month.value, props.firstDayOfWeek)\n\n    const days = weeks.flat()\n\n    // Make sure there's always 6 weeks in month (6 * 7 days)\n    // if weeksInMonth is 'static'\n    const daysInMonth = 6 * 7\n    if (props.weeksInMonth === 'static' && days.length < daysInMonth) {\n      const lastDay = days[days.length - 1]\n\n      let week = []\n      for (let day = 1; day <= daysInMonth - days.length; day++) {\n        week.push(adapter.addDays(lastDay, day))\n\n        if (day % 7 === 0) {\n          weeks.push(week)\n          week = []\n        }\n      }\n    }\n\n    return weeks\n  })\n\n  function genDays (days: Date[], today: Date): CalendarDay[] {\n    return days.filter(date => {\n      return props.weekdays.includes(adapter.toJsDate(date).getDay())\n    }).map((date, index) => {\n      const isoDate = adapter.toISO(date)\n      const isAdjacent = !adapter.isSameMonth(date, month.value)\n      const isStart = adapter.isSameDay(date, adapter.startOfMonth(month.value))\n      const isEnd = adapter.isSameDay(date, adapter.endOfMonth(month.value))\n      const isSame = adapter.isSameDay(date, month.value)\n      const weekdaysCount = props.weekdays.length\n\n      return {\n        date,\n        formatted: adapter.format(date, 'keyboardDate'),\n        isAdjacent,\n        isDisabled: isDisabled(date),\n        isEnd,\n        isHidden: isAdjacent && !props.showAdjacentMonths,\n        isSame,\n        isSelected: model.value.some(value => adapter.isSameDay(date, value)),\n        isStart,\n        isToday: adapter.isSameDay(date, today),\n        isWeekEnd: index % weekdaysCount === weekdaysCount - 1,\n        isWeekStart: index % weekdaysCount === 0,\n        isoDate,\n        localized: adapter.format(date, 'dayOfMonth'),\n        month: adapter.getMonth(date),\n        year: adapter.getYear(date),\n      }\n    })\n  }\n\n  const daysInWeek = computed(() => {\n    const lastDay = adapter.startOfWeek(displayValue.value, props.firstDayOfWeek)\n    const week: Date[] = []\n    for (let day = 0; day <= 6; day++) {\n      week.push(adapter.addDays(lastDay, day) as Date)\n    }\n\n    const today = adapter.date() as Date\n\n    return genDays(week as Date[], today as Date)\n  })\n\n  const daysInMonth = computed(() => {\n    const days = weeksInMonth.value.flat() as Date[]\n    const today = adapter.date() as Date\n\n    return genDays(days as Date[], today)\n  })\n\n  const weekNumbers = computed(() => {\n    return weeksInMonth.value.map(week => {\n      return week.length ? adapter.getWeek(week[0], props.firstDayOfWeek, props.firstDayOfYear) : null\n    })\n  })\n\n  const { minDate, maxDate } = useCalendarRange(props)\n\n  function isDisabled (value: unknown) {\n    if (props.disabled) return true\n\n    const date = adapter.date(value)\n\n    if (minDate.value && adapter.isBefore(adapter.endOfDay(date), minDate.value)) return true\n    if (maxDate.value && adapter.isAfter(date, maxDate.value)) return true\n\n    if (Array.isArray(props.allowedDates) && props.allowedDates.length > 0) {\n      return !props.allowedDates.some(d => adapter.isSameDay(adapter.date(d), date))\n    }\n\n    if (isFunction(props.allowedDates)) {\n      return !props.allowedDates(date)\n    }\n\n    return false\n  }\n\n  return {\n    displayValue,\n    daysInMonth,\n    daysInWeek,\n    genDays,\n    model,\n    weeksInMonth,\n    weekdayLabels,\n    weekNumbers,\n  }\n}\n\nexport function useCalendarRange (props: Pick<CalendarProps, 'min' | 'max'>) {\n  const adapter = useDate()\n\n  const minDate = computed(() => {\n    if (!props.min) return null\n    const date = adapter.date(props.min)\n    return adapter.isValid(date) ? date : null\n  })\n\n  const maxDate = computed(() => {\n    if (!props.max) return null\n    const date = adapter.date(props.max)\n    return adapter.isValid(date) ? date : null\n  })\n\n  function clampDate (date: unknown) {\n    if (minDate.value && adapter.isBefore(date, minDate.value)) {\n      return minDate.value\n    }\n    if (maxDate.value && adapter.isAfter(date, maxDate.value)) {\n      return maxDate.value\n    }\n    return date\n  }\n\n  function isInAllowedRange (date: unknown) {\n    return (!minDate.value || adapter.isAfter(date, minDate.value)) &&\n      (!maxDate.value || adapter.isBefore(date, maxDate.value))\n  }\n\n  return {\n    minDate,\n    maxDate,\n    clampDate,\n    isInAllowedRange,\n  }\n}\n","// Utilities\nimport { onScopeDispose, shallowRef, toValue } from 'vue'\nimport { isNullOrUndefined } from '@/util'\n\n// Types\nimport type { MaybeRefOrGetter, ShallowRef } from 'vue'\n\ninterface VirtualFocusItem {\n  id: string | number\n  disabled?: MaybeRefOrGetter<boolean>\n  el?: MaybeRefOrGetter<HTMLElement | null | undefined>\n}\n\ninterface VirtualFocusOptions {\n  /** Element that retains DOM focus and receives aria-activedescendant */\n  control: MaybeRefOrGetter<HTMLElement | null | undefined>\n  /** Arrow key mapping — ignored when `columns` is set (grid uses all 4 arrows) */\n  orientation?: 'horizontal' | 'vertical' | 'both'\n  circular?: boolean\n  /**\n   * Column count for grid navigation. Left/Right step ±1, Up/Down step ±columns,\n   * Home/End go to row start/end, Ctrl+Home/End go to first/last overall.\n   */\n  columns?: MaybeRefOrGetter<number>\n  onHighlight?: (id: string | number) => void\n}\n\nexport interface VirtualFocusReturn {\n  highlightedId: ShallowRef<string | number | undefined>\n  highlight: (id: string | number) => void\n  focusHighlighted: () => void\n  clear: () => void\n  next: () => void\n  prev: () => void\n  first: () => void\n  last: () => void\n  onKeydown: (e: KeyboardEvent) => void\n}\n\n// pulled from v0, should be replaced by direct v0 import in v5.0\n// the only change was adapting to jsDOM by adding `?` in `el.scrollIntoView?.({ block: 'nearest' })`\nexport function useVirtualFocus (\n  items: () => VirtualFocusItem[],\n  options: VirtualFocusOptions,\n): VirtualFocusReturn {\n  const { control, orientation = 'vertical', circular = false, columns: _columns, onHighlight } = options\n\n  const highlightedId = shallowRef<string | number | undefined>()\n  let previousEl: HTMLElement | null = null\n\n  function applyHighlight (id: string | number): boolean {\n    const item = items().find(i => i.id === id)\n    if (!item?.el) return false\n\n    const el = toValue(item.el)\n    if (!el) return false\n\n    const controlEl = toValue(control)\n    if (controlEl) {\n      const itemId = el.getAttribute('id')\n      if (itemId) controlEl.setAttribute('aria-activedescendant', itemId)\n    }\n\n    if (previousEl) delete previousEl.dataset.highlighted\n    el.dataset.highlighted = ''\n    previousEl = el\n\n    el.scrollIntoView?.({ block: 'nearest' })\n    onHighlight?.(id)\n    return true\n  }\n\n  function mod (n: number, i: number) {\n    return ((i % n) + n) % n\n  }\n\n  function indexOf (id: string | number) {\n    return items().findIndex(item => item.id === id)\n  }\n\n  function go (id: string | number) {\n    highlightedId.value = id\n    applyHighlight(id)\n  }\n\n  function step (stride: number) {\n    const all = items()\n    if (!all.length) return\n\n    const current = isNullOrUndefined(highlightedId.value) ? -1 : indexOf(highlightedId.value)\n    const dir = stride > 0 ? 1 : -1\n    const abs = Math.abs(stride)\n    const maxHops = Math.ceil(all.length / abs)\n    let index = current + stride\n    let hops = 0\n\n    if (circular) {\n      index = mod(all.length, index)\n    } else if (index < 0 || index >= all.length) {\n      return\n    }\n\n    while (hops < maxHops) {\n      const item = all[index]\n      if (item && !toValue(item.disabled)) { go(item.id); return }\n      hops++\n      index = circular ? mod(all.length, index + stride) : index + (dir * abs)\n      if (!circular && (index < 0 || index >= all.length)) return\n    }\n  }\n\n  function first () {\n    const item = items().find(i => !toValue(i.disabled))\n    if (item) go(item.id)\n  }\n\n  function last () {\n    const item = [...items()].reverse().find(i => !toValue(i.disabled))\n    if (item) go(item.id)\n  }\n\n  function rowFirst () {\n    const cols = toValue(_columns) ?? 0\n    if (!cols) return first()\n    const all = items()\n    const cur = isNullOrUndefined(highlightedId.value) ? 0 : Math.max(0, indexOf(highlightedId.value))\n    const start = cur - (cur % cols)\n    for (let i = start; i < Math.min(start + cols, all.length); i++) {\n      if (!toValue(all[i]?.disabled)) { go(all[i]!.id); return }\n    }\n  }\n\n  function rowLast () {\n    const cols = toValue(_columns) ?? 0\n    if (!cols) return last()\n    const all = items()\n    const cur = isNullOrUndefined(highlightedId.value) ? 0 : Math.max(0, indexOf(highlightedId.value))\n    const start = cur - (cur % cols)\n    const end = Math.min(start + cols, all.length)\n    for (let i = end - 1; i >= start; i--) {\n      if (!toValue(all[i]?.disabled)) { go(all[i]!.id); return }\n    }\n  }\n\n  function highlight (id: string | number) {\n    const prev = highlightedId.value\n    highlightedId.value = id\n    if (!applyHighlight(id)) highlightedId.value = prev\n  }\n\n  function focusHighlighted () {\n    if (isNullOrUndefined(highlightedId.value)) return\n    const item = items().find(i => i.id === highlightedId.value)\n    if (!item?.el) return\n    toValue(item.el)?.focus()\n  }\n\n  function clear () {\n    highlightedId.value = undefined\n    toValue(control)?.removeAttribute('aria-activedescendant')\n    if (previousEl) {\n      delete previousEl.dataset.highlighted\n      previousEl = null\n    }\n  }\n\n  function isRtl (e: KeyboardEvent) {\n    const el = e.currentTarget as HTMLElement | null\n    return el ? getComputedStyle(el).direction === 'rtl' : false\n  }\n\n  function onKeydown (e: KeyboardEvent) {\n    const cols = toValue(_columns)\n    const rtl = isRtl(e)\n\n    if (cols) {\n      switch (e.key) {\n        case 'ArrowRight': e.preventDefault(); step(rtl ? -1 : 1); break\n        case 'ArrowLeft': e.preventDefault(); step(rtl ? 1 : -1); break\n        case 'ArrowDown': e.preventDefault(); step(cols); break\n        case 'ArrowUp': e.preventDefault(); step(-cols); break\n        case 'Home': e.preventDefault(); e.ctrlKey ? first() : rowFirst(); break\n        case 'End': e.preventDefault(); e.ctrlKey ? last() : rowLast(); break\n      }\n      return\n    }\n\n    const prevKeys: string[] = []\n    const nextKeys: string[] = []\n    if (orientation === 'vertical' || orientation === 'both') {\n      prevKeys.push('ArrowUp'); nextKeys.push('ArrowDown')\n    }\n    if (orientation === 'horizontal' || orientation === 'both') {\n      prevKeys.push(rtl ? 'ArrowRight' : 'ArrowLeft')\n      nextKeys.push(rtl ? 'ArrowLeft' : 'ArrowRight')\n    }\n\n    if (prevKeys.includes(e.key)) {\n      e.preventDefault()\n      step(-1)\n    } else if (nextKeys.includes(e.key)) {\n      e.preventDefault()\n      step(1)\n    } else if (e.key === 'Home') {\n      e.preventDefault()\n      first()\n    } else if (e.key === 'End') {\n      e.preventDefault()\n      last()\n    }\n  }\n\n  onScopeDispose(clear)\n\n  return {\n    highlightedId,\n    highlight,\n    focusHighlighted,\n    clear,\n    next: () => step(1),\n    prev: () => step(-1),\n    first,\n    last,\n    onKeydown,\n  }\n}\n","// Composables\nimport { useVirtualFocus } from '@/composables/virtualFocus'\n\n// Utilities\nimport { computed, shallowRef, watch } from 'vue'\nimport { isNullOrUndefined } from '@/util'\n\n// Types\nimport type { MaybeRefOrGetter } from 'vue'\n\nexport type GridDirection = 'up' | 'down' | 'left' | 'right'\n\nexport function keyToDirection (key: string): GridDirection | null {\n  switch (key) {\n    case 'ArrowUp': return 'up'\n    case 'ArrowDown': return 'down'\n    case 'ArrowLeft': return 'left'\n    case 'ArrowRight': return 'right'\n    default: return null\n  }\n}\n\nexport interface GridSelectionItem<T extends string | number> {\n  value: T\n  isDisabled?: boolean\n}\n\nexport interface GridSelectionOptions<T extends string | number> {\n  items: () => GridSelectionItem<T>[]\n  columns: MaybeRefOrGetter<number>\n  initialValue: (current: T | undefined) => T | undefined\n  itemAttribute: string\n  onSelect: (value: T) => void\n  onNavigation?: (direction: GridDirection, e: KeyboardEvent, currentValue: T | undefined) => boolean\n  onHighlight?: (value: T | undefined) => void\n  onEscape?: () => void\n}\n\nexport function useGridSelection<T extends string | number> ({\n  items,\n  columns,\n  initialValue,\n  itemAttribute,\n  onSelect,\n  onNavigation,\n  onHighlight,\n  onEscape,\n}: GridSelectionOptions<T>) {\n  const hasFocusIn = shallowRef(false)\n  const containerEl = shallowRef<HTMLElement>()\n\n  const virtualFocus = useVirtualFocus(\n    () => items().map(item => ({\n      id: item.value,\n      disabled: item.isDisabled,\n      el: () => containerEl.value?.querySelector<HTMLElement>(`[${itemAttribute}=\"${item.value}\"]`),\n    })),\n    {\n      control: containerEl,\n      columns,\n    }\n  )\n\n  if (onHighlight) {\n    watch(virtualFocus.highlightedId, id => onHighlight(id as T | undefined))\n  }\n\n  function onFocusin (e: FocusEvent) {\n    const grid = containerEl.value\n    if (!grid || grid.contains(e.relatedTarget as Node)) return\n\n    hasFocusIn.value = true\n\n    const targetEl = e.target as HTMLElement | null\n    const targetId = targetEl?.getAttribute?.(itemAttribute)\n\n    if (!isNullOrUndefined(targetId) && items().some(item => String(item.value) === targetId)) {\n      virtualFocus.highlight(targetId as T)\n\n      return\n    }\n\n    const initial = initialValue(virtualFocus.highlightedId.value as T | undefined)\n    if (!isNullOrUndefined(initial)) virtualFocus.highlight(initial)\n    virtualFocus.focusHighlighted()\n  }\n\n  function onFocusout (e: FocusEvent) {\n    if (containerEl.value?.contains(e.relatedTarget as Node)) return\n\n    hasFocusIn.value = false\n    virtualFocus.clear()\n  }\n\n  function onActivate () {\n    const id = virtualFocus.highlightedId.value as T | undefined\n    if (isNullOrUndefined(id)) return\n\n    const item = items().find(x => x.value === id)\n\n    if (item && !item.isDisabled) {\n      onSelect(id)\n    }\n  }\n\n  function selectItem (value: T) {\n    virtualFocus.highlight(value)\n    virtualFocus.focusHighlighted()\n\n    onSelect(value)\n  }\n\n  function focusItem (value: T) {\n    virtualFocus.highlight(value)\n    if (isNullOrUndefined(virtualFocus.highlightedId.value)) virtualFocus.first()\n    virtualFocus.focusHighlighted()\n  }\n\n  function onContainerKeydown (e: KeyboardEvent) {\n    if (e.key === 'Escape') {\n      e.preventDefault()\n      onEscape?.()\n      return\n    }\n\n    if ((e.key === 'Enter' || e.key === ' ') && !isNullOrUndefined(virtualFocus.highlightedId.value)) {\n      e.preventDefault()\n      onActivate()\n      return\n    }\n\n    const direction = keyToDirection(e.key)\n    if (direction && onNavigation?.(direction, e, virtualFocus.highlightedId.value as T | undefined)) return\n\n    virtualFocus.onKeydown(e)\n    virtualFocus.focusHighlighted()\n  }\n\n  const containerProps = computed(() => ({\n    ref: (el: any) => containerEl.value = el as HTMLElement ?? undefined,\n    tabindex: hasFocusIn.value ? -1 : 0,\n    onKeydown: onContainerKeydown,\n    onFocusin,\n    onFocusout,\n  }))\n\n  return {\n    containerProps,\n    containerEl,\n    selectItem,\n    focusItem,\n    clear: virtualFocus.clear,\n  }\n}\n","// Utilities\nimport { computed, shallowRef } from 'vue'\n\n// Types\nimport type { Ref } from 'vue'\n\nexport interface RangePickerOptions<T> {\n  multiple: Readonly<Ref<boolean | 'range' | undefined>>\n  model: Ref<readonly T[]>\n  compare: (a: T, b: T) => number\n  normalizeEnd?: (value: T) => T\n  previewValue?: Ref<T | undefined>\n}\n\nexport function useRangePicker <T> ({\n  multiple,\n  model,\n  compare,\n  normalizeEnd = (v: T) => v,\n  previewValue: externalPreview,\n}: RangePickerOptions<T>) {\n  const rangeStart = computed(() => model.value.length >= 1 ? model.value[0] : undefined)\n  const rangeEnd = computed(() => model.value.length >= 2 ? model.value[model.value.length - 1] : undefined)\n  const previewValue = externalPreview ?? shallowRef<T>()\n\n  const previewRange = computed<[T, T] | null>(() => {\n    if (multiple.value !== 'range') return null\n    if (!rangeStart.value || rangeEnd.value) return null\n    if (!previewValue.value) return null\n    const start = rangeStart.value\n    const preview = previewValue.value\n    if (compare(start, preview) === 0) return null\n    return compare(start, preview) < 0\n      ? [start, preview]\n      : [preview, start]\n  })\n\n  function isSelected (value: T): boolean {\n    if (multiple.value === 'range' && model.value.length === 2) {\n      return isWithinRange(value)\n    }\n    for (const v of model.value) {\n      if (compare(v, value) === 0) return true\n    }\n    return false\n  }\n\n  function isWithinRange (value: T): boolean {\n    if (multiple.value !== 'range' || model.value.length < 2) return false\n    const [start, end] = [model.value[0], model.value[model.value.length - 1]]\n    return compare(value, start) >= 0 && compare(value, end) <= 0\n  }\n\n  function isRangeStart (value: T): boolean {\n    if (multiple.value !== 'range' || model.value.length < 2) return false\n    return compare(value, model.value[0]) === 0\n  }\n\n  function isRangeEnd (value: T): boolean {\n    if (multiple.value !== 'range' || model.value.length < 2) return false\n    return compare(value, model.value[model.value.length - 1]) === 0\n  }\n\n  function isRangeMiddle (value: T): boolean {\n    return isWithinRange(value) && !isRangeStart(value) && !isRangeEnd(value)\n  }\n\n  function select (value: T): void {\n    if (multiple.value === 'range') {\n      onRangeSelect(value)\n    } else if (multiple.value) {\n      onMultipleSelect(value)\n    } else {\n      model.value = [value]\n    }\n  }\n\n  function onRangeSelect (value: T): void {\n    if (model.value.length === 0) {\n      model.value = [value]\n    } else if (model.value.length === 1) {\n      const start = model.value[0]\n      if (compare(value, start) === 0) {\n        model.value = []\n      } else if (compare(value, start) < 0) {\n        model.value = [value, normalizeEnd(start)]\n      } else {\n        model.value = [start, normalizeEnd(value)]\n      }\n    } else {\n      model.value = [value]\n    }\n  }\n\n  function setPreview (value: T | undefined): void {\n    previewValue.value = value\n  }\n\n  function clearPreview (): void {\n    previewValue.value = undefined\n  }\n\n  function isPreviewStart (value: T): boolean {\n    const range = previewRange.value\n    if (!range) return false\n    return compare(value, range[0]) === 0\n  }\n\n  function isPreviewEnd (value: T): boolean {\n    const range = previewRange.value\n    if (!range) return false\n    return compare(value, range[1]) === 0\n  }\n\n  function isPreviewMiddle (value: T): boolean {\n    const range = previewRange.value\n    if (!range) return false\n    return compare(value, range[0]) > 0 && compare(value, range[1]) < 0\n  }\n\n  function isInPreviewRange (value: T): boolean {\n    return isPreviewStart(value) || isPreviewEnd(value) || isPreviewMiddle(value)\n  }\n\n  function onMultipleSelect (value: T): void {\n    const index = model.value.findIndex(v => compare(v, value) === 0)\n    if (index === -1) {\n      model.value = [...model.value, value]\n    } else {\n      const copy = [...model.value]\n      copy.splice(index, 1)\n      model.value = copy\n    }\n  }\n\n  return {\n    isSelected,\n    isRangeStart,\n    isRangeEnd,\n    isRangeMiddle,\n    select,\n    setPreview,\n    clearPreview,\n    isPreviewStart,\n    isPreviewEnd,\n    isPreviewMiddle,\n    isInPreviewRange,\n  }\n}\n","// Styles\nimport './VDatePickerMonth.sass'\n\n// Components\nimport { VBadge } from '@/components/VBadge'\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { makeCalendarProps, useCalendar } from '@/composables/calendar'\nimport { useBackgroundColor } from '@/composables/color'\nimport { useDate } from '@/composables/date/date'\nimport { useGridSelection } from '@/composables/gridSelection'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useRangePicker } from '@/composables/rangePicker'\nimport { MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { computed, nextTick, shallowRef, toRef, useId, watch } from 'vue'\nimport { chunkArray, genericComponent, isFunction, isObject, isString, omit, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { CalendarWeekdays } from '@/composables/calendar'\nimport type { GenericProps } from '@/util'\n\nexport type DatePickerEventColorValue = boolean | string | string[]\n\nexport type DatePickerEventColors = DatePickerEventColorValue |\nRecord<string, DatePickerEventColorValue> | ((date: string) => DatePickerEventColorValue)\n\nexport type DatePickerEvents = string[] |\n((date: string) => DatePickerEventColorValue) | Record<string, DatePickerEventColorValue>\n\nexport type VDatePickerMonthSlots = {\n  day: {\n    props: {\n      onClick: () => void\n    }\n    item: any\n    i: number\n  }\n}\n\nexport const makeVDatePickerMonthProps = propsFactory({\n  color: String,\n  hideWeekdays: Boolean,\n  multiple: [Boolean, Number, String] as PropType<boolean | 'range' | number | (string & {})>,\n  showWeek: Boolean,\n  readonly: Boolean,\n  transition: {\n    type: String,\n    default: 'picker-transition',\n  },\n  reverseTransition: {\n    type: String,\n    default: 'picker-reverse-transition',\n  },\n  events: {\n    type: [Array, Function, Object] as PropType<DatePickerEvents | null>,\n    default: () => null,\n  },\n  eventColor: {\n    type: [Array, Function, Object, String] as PropType<DatePickerEventColors>,\n    default: () => null,\n  },\n  noAutoNavigation: Boolean,\n  previewValue: null as any as PropType<unknown>,\n  ...omit(makeCalendarProps(), ['displayValue']),\n}, 'VDatePickerMonth')\n\nexport const VDatePickerMonth = genericComponent<new <TModel>(\n  props: {\n    modelValue?: TModel\n    'onUpdate:modelValue'?: (value: TModel) => void\n  },\n  slots: VDatePickerMonthSlots\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VDatePickerMonth',\n\n  props: makeVDatePickerMonthProps(),\n\n  emits: {\n    'update:modelValue': (date: unknown) => true,\n    'update:month': (date: number) => true,\n    'update:year': (date: number) => true,\n    'update:previewValue': (_value: unknown) => true,\n    'boundary-navigate': (_payload: { direction: 'up' | 'down' | 'left' | 'right', targetIsoDate: string }) => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const uid = useId()\n    const { t } = useLocale()\n\n    const { daysInMonth, model, weekNumbers, weekdayLabels } = useCalendar(props)\n    const adapter = useDate()\n\n    const isReverse = shallowRef(false)\n\n    const transition = toRef(() => {\n      return !isReverse.value ? props.transition : props.reverseTransition\n    })\n\n    function compareDays (a: unknown, b: unknown): number {\n      if (adapter.isSameDay(a, b)) return 0\n      return adapter.isBefore(a, b) ? -1 : 1\n    }\n\n    const previewValue = useProxiedModel(props, 'previewValue')\n\n    const range = useRangePicker({\n      multiple: computed(() => {\n        if (props.multiple === 'range') return 'range'\n        return !!props.multiple\n      }),\n      model,\n      compare: compareDays,\n      normalizeEnd: (value: unknown) => adapter.endOfDay(value),\n      previewValue,\n    })\n\n    const selectionColor = toRef(() => props.color || 'surface-variant')\n    const { backgroundColorClasses: rangeColorClasses, backgroundColorStyles: rangeColorStyles } = useBackgroundColor(selectionColor)\n\n    const atMax = computed(() => {\n      const max = ['number', 'string'].includes(typeof props.multiple) ? Number(props.multiple) : Infinity\n\n      return model.value.length >= max\n    })\n\n    const dayRows = computed(() => {\n      return chunkArray(daysInMonth.value, props.weekdays.length)\n    })\n\n    function isSelectedDay (item: (typeof daysInMonth.value)[number]): boolean {\n      return range.isSelected(item.date)\n    }\n\n    function isDayDisabled (item: (typeof daysInMonth.value)[number]): boolean {\n      return item.isDisabled || item.isHidden || (atMax.value && !isSelectedDay(item))\n    }\n\n    function getDateAriaLabel (item: any) {\n      const fullDate = adapter.format(item.date, 'fullDateWithWeekday')\n      const localeKey = item.isToday ? 'currentDate' : 'selectDate'\n      return t(`$vuetify.datePicker.ariaLabel.${localeKey}`, fullDate)\n    }\n\n    function onClick (value: unknown) {\n      range.select(adapter.startOfDay(value))\n    }\n\n    function initialFocusDate (current: string | undefined): string | undefined {\n      const isVisible = (d: (typeof daysInMonth.value)[number]) => !d.isAdjacent && !d.isDisabled\n\n      // Preserve existing highlight if it's still pointing to a visible day in the current grid\n      if (current != null) {\n        const cur = daysInMonth.value.find(d => d.isoDate === current)\n        if (cur && !cur.isAdjacent) return current\n      }\n\n      const selected = daysInMonth.value.find(d =>\n        isVisible(d) && model.value.some(m => adapter.isSameDay(m, d.date))\n      )\n      return (selected ?? daysInMonth.value.find(isVisible))?.isoDate\n    }\n\n    const { containerProps, containerEl, selectItem, focusItem, clear } = useGridSelection<string>({\n      items: () => daysInMonth.value.map(d => ({\n        value: d.isoDate,\n        isDisabled: isDayDisabled(d),\n      })),\n      columns: () => props.weekdays.length,\n      initialValue: initialFocusDate,\n      itemAttribute: 'data-v-date',\n      onSelect: onDaySelect,\n      onNavigation: onNavigationBoundary,\n      onEscape,\n    })\n\n    function onDaySelect (isoDate: string) {\n      const item = daysInMonth.value.find(d => d.isoDate === isoDate)\n      if (!item || isDayDisabled(item)) return\n\n      onClick(item.date)\n\n      if (item.isAdjacent) {\n        emit('update:month', adapter.getMonth(item.date))\n        emit('update:year', adapter.getYear(item.date))\n        nextTick(() => focusItem(isoDate))\n      }\n    }\n\n    function onNavigationBoundary (direction: 'up' | 'down' | 'left' | 'right', e: KeyboardEvent, curId: string | undefined): boolean {\n      if (curId == null) return false\n\n      const cols = props.weekdays.length\n      const rtl = getComputedStyle(e.currentTarget as HTMLElement).direction === 'rtl'\n\n      // stride = array-index delta; calendarDays = actual date offset for boundary crossing\n      let stride: number\n      let calendarDays: number\n\n      if (direction === 'left') {\n        stride = rtl ? 1 : -1\n        calendarDays = stride\n      } else if (direction === 'right') {\n        stride = rtl ? -1 : 1\n        calendarDays = stride\n      } else if (direction === 'up') {\n        stride = -cols\n        calendarDays = -7\n      } else {\n        stride = cols\n        calendarDays = 7\n      }\n\n      const all = daysInMonth.value\n      const curIndex = all.findIndex(d => d.isoDate === curId)\n      if (curIndex < 0) return false\n\n      const targetItem = all[curIndex + stride]\n\n      // isHidden = isAdjacent && !showAdjacentMonths — no button in DOM for this day\n      if (targetItem && !targetItem.isHidden) return false\n\n      e.preventDefault()\n\n      let targetIsoDate: string\n      if (targetItem) {\n        targetIsoDate = targetItem.isoDate\n      } else {\n        const step = calendarDays < 0 ? -1 : 1\n        let candidate = adapter.addDays(adapter.date(curId), calendarDays)\n        while (!props.weekdays.includes(adapter.toJsDate(candidate).getDay() as CalendarWeekdays)) {\n          candidate = adapter.addDays(candidate, step)\n        }\n        targetIsoDate = adapter.toISO(candidate)\n      }\n\n      if (props.noAutoNavigation) {\n        emit('boundary-navigate', { direction, targetIsoDate })\n\n        return true\n      }\n\n      const targetDate = adapter.date(targetIsoDate)\n      emit('update:month', adapter.getMonth(targetDate))\n      emit('update:year', adapter.getYear(targetDate))\n      nextTick(() => focusItem(targetIsoDate))\n      return true\n    }\n\n    function onEscape () {\n      const rawTarget = model.value[0] ?? adapter.date()\n      const targetIso = adapter.toISO(adapter.date(rawTarget))\n      const inCurrentMonth = daysInMonth.value.find(d => d.isoDate === targetIso && !d.isAdjacent)\n\n      if (inCurrentMonth) {\n        focusItem(targetIso)\n        return\n      }\n\n      const targetDate = adapter.date(rawTarget)\n      emit('update:month', adapter.getMonth(targetDate))\n      emit('update:year', adapter.getYear(targetDate))\n      nextTick(() => focusItem(targetIso))\n    }\n\n    function onDayClick (item: (typeof daysInMonth.value)[number]) {\n      if (item.isAdjacent) {\n        onDaySelect(item.isoDate)\n      } else {\n        selectItem(item.isoDate)\n      }\n    }\n\n    function focusGrid () {\n      containerEl.value?.focus()\n    }\n\n    watch(daysInMonth, (val, oldVal) => {\n      if (!oldVal || val[0].isoDate === oldVal[0].isoDate) return // only clear when the month actually changes\n\n      isReverse.value = adapter.isBefore(val[0].date, oldVal[0].date)\n      clear()\n    })\n\n    function getEventColors (date: string): string[] {\n      const { events, eventColor } = props\n      let eventData: boolean | DatePickerEventColorValue\n      let eventColors: (boolean | string)[] = []\n\n      if (Array.isArray(events)) {\n        eventData = events.includes(date)\n      } else if (events instanceof Function) {\n        eventData = events(date) || false\n      } else if (events) {\n        eventData = events[date] || false\n      } else {\n        eventData = false\n      }\n\n      if (!eventData) {\n        return []\n      } else if (eventData !== true) {\n        eventColors = wrapInArray(eventData)\n      } else if (isString(eventColor)) {\n        eventColors = [eventColor]\n      } else if (isFunction(eventColor)) {\n        eventColors = wrapInArray(eventColor(date))\n      } else if (Array.isArray(eventColor)) {\n        eventColors = eventColor\n      } else if (isObject(eventColor)) {\n        eventColors = wrapInArray(eventColor[date])\n      }\n\n      // Fallback to default color if no color is found\n      return !eventColors.length\n        ? ['surface-variant']\n        : eventColors\n          .filter(Boolean)\n          .map((color: string | boolean) => isString(color) ? color : 'surface-variant')\n    }\n\n    function genEvents (date: string): JSX.Element | null {\n      const eventColors = getEventColors(date)\n\n      if (!eventColors.length) return null\n\n      return (\n        <div class=\"v-date-picker-month__events\">\n          { eventColors.map((color: string) => <VBadge dot color={ color } />) }\n        </div>\n      )\n    }\n    useRender(() => (\n      <div\n        class=\"v-date-picker-month\"\n        style={{ '--v-date-picker-days-in-week': props.weekdays.length }}\n      >\n        { props.showWeek && (\n          <div key=\"weeks\" class=\"v-date-picker-month__weeks\">\n            { !props.hideWeekdays && (\n              <div key=\"hide-week-days\" class=\"v-date-picker-month__day\">&nbsp;</div>\n            )}\n            { weekNumbers.value.map(week => (\n              <div\n                class={[\n                  'v-date-picker-month__day',\n                  'v-date-picker-month__day--adjacent',\n                ]}\n              >{ week }</div>\n            ))}\n          </div>\n        )}\n\n        <MaybeTransition name={ transition.value }>\n          <div\n            key={ daysInMonth.value[0].date?.toString() }\n            class=\"v-date-picker-month__days\"\n            role=\"grid\"\n            onMouseleave={ range.clearPreview }\n            { ...containerProps.value }\n          >\n            { !props.hideWeekdays && (\n              <div key=\"weekday-labels\" class=\"v-date-picker-month__days-row\">\n                { weekdayLabels.value.map(weekDay => (\n                  <div\n                    class={[\n                      'v-date-picker-month__day',\n                      'v-date-picker-month__weekday',\n                    ]}\n                  >{ weekDay }</div>\n                ))}\n              </div>\n            )}\n\n            { dayRows.value.map((row, rowIndex) => (\n              <div class=\"v-date-picker-month__days-row\" role=\"row\">\n                { row.map((item, colIndex) => {\n                  const i = rowIndex * props.weekdays.length + colIndex\n                  const isSelected = isSelectedDay(item)\n                  const disabled = isDayDisabled(item)\n                  const rangeStart = range.isRangeStart(item.date)\n                  const rangeEnd = range.isRangeEnd(item.date)\n                  const rangeMiddle = range.isRangeMiddle(item.date)\n                  const previewStart = range.isPreviewStart(item.date)\n                  const previewEnd = range.isPreviewEnd(item.date)\n                  const previewMiddle = range.isPreviewMiddle(item.date)\n\n                  const slotProps = {\n                    props: {\n                      class: 'v-date-picker-month__day-btn',\n                      color: ((isSelected && !rangeMiddle) || item.isToday) ? props.color : undefined,\n                      disabled,\n                      readonly: props.readonly,\n                      icon: true,\n                      ripple: false,\n                      tabindex: -1,\n                      variant: (isSelected && !rangeMiddle) ? 'flat' : item.isToday ? 'outlined' : 'text',\n                      'aria-label': getDateAriaLabel(item),\n                      'aria-current': item.isToday ? 'date' : undefined,\n                      id: `${uid}-day-${item.isoDate}`,\n                      'data-v-date': !disabled ? item.isoDate : undefined,\n                      onMousedown: (e: MouseEvent) => e.preventDefault(), // preserve virtual focus\n                      onClick: () => onDayClick(item),\n                      onMouseenter: () => range.setPreview(item.date),\n                      onFocus: () => range.setPreview(item.date),\n                      onBlur: range.clearPreview,\n                    },\n                    item,\n                    i,\n                  } as const\n\n                  const hasRangeBg = rangeStart || rangeEnd || rangeMiddle\n                  const hasPreviewBg = previewStart || previewEnd || previewMiddle\n\n                  return (\n                    <div\n                      class={[\n                        'v-date-picker-month__day',\n                        {\n                          'v-date-picker-month__day--adjacent': item.isAdjacent,\n                          'v-date-picker-month__day--hide-adjacent': item.isHidden,\n                          'v-date-picker-month__day--selected': isSelected,\n                          'v-date-picker-month__day--week-end': item.isWeekEnd,\n                          'v-date-picker-month__day--week-start': item.isWeekStart,\n                          'v-date-picker-month__day--range-start': rangeStart,\n                          'v-date-picker-month__day--range-end': rangeEnd,\n                          'v-date-picker-month__day--range-middle': rangeMiddle,\n                          'v-date-picker-month__day--preview-start': previewStart,\n                          'v-date-picker-month__day--preview-end': previewEnd,\n                          'v-date-picker-month__day--preview-middle': previewMiddle,\n                        },\n                      ]}\n                      role=\"gridcell\"\n                    >\n                      { (hasRangeBg || hasPreviewBg) && (\n                        <div\n                          key=\"range-bg\"\n                          class={[\n                            'v-date-picker-month__range-bg',\n                            hasRangeBg ? 'v-date-picker-month__range-bg--range' : 'v-date-picker-month__range-bg--preview',\n                            rangeColorClasses.value,\n                          ]}\n                          style={ rangeColorStyles.value }\n                        />\n                      )}\n                      { (props.showAdjacentMonths || !item.isAdjacent) && (\n                        slots.day?.(slotProps) ?? (\n                          <VBtn { ...slotProps.props }>\n                            { item.localized }\n                            { genEvents(item.isoDate) }\n                          </VBtn>\n                        )\n                      )}\n                    </div>\n                  )\n                })}\n              </div>\n            ))}\n          </div>\n        </MaybeTransition>\n      </div>\n    ))\n\n    return { focusGrid, focusItem }\n  },\n})\n\nexport type VDatePickerMonth = InstanceType<typeof VDatePickerMonth>\n","// Styles\nimport './VDatePickerMonths.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { useDate } from '@/composables/date'\nimport { useGridSelection } from '@/composables/gridSelection'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, useId, watchEffect } from 'vue'\nimport { convertToUnit, createRange, genericComponent, isFunction, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport type VDatePickerMonthsSlots = {\n  month: {\n    month: {\n      text: string\n      value: number\n    }\n    i: number\n    props: {\n      onClick: () => void\n    }\n  }\n}\n\nexport const makeVDatePickerMonthsProps = propsFactory({\n  color: String,\n  columns: {\n    type: Number,\n    default: 2,\n  },\n  height: [String, Number],\n  min: null as any as PropType<unknown>,\n  max: null as any as PropType<unknown>,\n  modelValue: Number,\n  year: Number,\n  allowedMonths: [Array, Function] as PropType<number[] | ((date: number) => boolean)>,\n}, 'VDatePickerMonths')\n\nexport const VDatePickerMonths = genericComponent<VDatePickerMonthsSlots>()({\n  name: 'VDatePickerMonths',\n\n  props: makeVDatePickerMonthsProps(),\n\n  emits: {\n    'update:modelValue': (date: any) => true,\n    escape: () => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const adapter = useDate()\n    const model = useProxiedModel(props, 'modelValue')\n    const uid = useId()\n\n    const months = computed(() => {\n      let date = adapter.startOfYear(adapter.date())\n      if (props.year) {\n        date = adapter.setYear(date, props.year)\n      }\n      return createRange(12).map(i => {\n        const text = adapter.format(date, 'monthShort')\n        const label = adapter.format(date, 'month')\n        const isDisabled =\n          !!(\n            !isMonthAllowed(i) ||\n            (props.min && adapter.isAfter(adapter.startOfMonth(adapter.date(props.min)), date)) ||\n            (props.max && adapter.isAfter(date, adapter.startOfMonth(adapter.date(props.max))))\n          )\n        date = adapter.getNextMonth(date)\n\n        return {\n          isDisabled,\n          text,\n          label,\n          value: i,\n        }\n      })\n    })\n\n    watchEffect(() => {\n      model.value = model.value ?? adapter.getMonth(adapter.date())\n    })\n\n    function isMonthAllowed (month: number) {\n      if (Array.isArray(props.allowedMonths) && props.allowedMonths.length) {\n        return props.allowedMonths.includes(month)\n      }\n\n      if (isFunction(props.allowedMonths)) {\n        return props.allowedMonths(month)\n      }\n\n      return true\n    }\n\n    function onMonthSelect (value: number) {\n      if (model.value === value) emit('update:modelValue', value)\n      else model.value = value\n    }\n\n    const { containerProps, selectItem } = useGridSelection<number>({\n      items: () => months.value,\n      columns: () => props.columns,\n      initialValue: current => current ?? model.value ?? adapter.getMonth(adapter.date()),\n      itemAttribute: 'data-v-month',\n      onSelect: onMonthSelect,\n      onEscape: () => emit('escape'),\n    })\n\n    useRender(() => (\n      <div\n        class=\"v-date-picker-months\"\n        style={{\n          height: convertToUnit(props.height),\n        }}\n      >\n        <div\n          class=\"v-date-picker-months__content\"\n          style={{ '--v-date-picker-months-columns': props.columns }}\n          { ...containerProps.value }\n        >\n          { months.value.map((month, i) => {\n            const btnProps = {\n              id: `${uid}-month-${i}`,\n              active: model.value === i,\n              ariaLabel: month.label,\n              color: model.value === i ? props.color : undefined,\n              disabled: month.isDisabled,\n              rounded: true,\n              tabindex: -1,\n              text: month.text,\n              variant: model.value === month.value ? 'flat' : 'text',\n              'data-v-month': month.value,\n              onMousedown: (e: MouseEvent) => e.preventDefault(), // preserve virtual focus\n              onClick: () => selectItem(i),\n            } as const\n\n            return slots.month?.({\n              month,\n              i,\n              props: btnProps,\n            }) ?? (\n              <VBtn\n                key=\"month\"\n                { ...btnProps }\n              />\n            )\n          })}\n        </div>\n      </div>\n    ))\n\n    return {}\n  },\n})\n\nexport type VDatePickerMonths = InstanceType<typeof VDatePickerMonths>\n","// Styles\nimport './VDatePickerYears.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { useDate } from '@/composables/date'\nimport { useGridSelection } from '@/composables/gridSelection'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport vIntersect from '@/directives/intersect'\n\n// Utilities\nimport { computed, useId, watchEffect } from 'vue'\nimport { convertToUnit, createRange, genericComponent, isFunction, propsFactory, templateRef, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// Types\nexport type VDatePickerYearsSlots = {\n  year: {\n    year: {\n      text: string\n      value: number\n    }\n    i: number\n    props: {\n      active: boolean\n      color?: string\n      rounded: boolean\n      text: string\n      variant: 'flat' | 'text'\n      onClick: () => void\n    }\n  }\n}\n\nexport const makeVDatePickerYearsProps = propsFactory({\n  color: String,\n  columns: {\n    type: Number,\n    default: 3,\n  },\n  height: [String, Number],\n  min: null as any as PropType<unknown>,\n  max: null as any as PropType<unknown>,\n  modelValue: Number,\n  allowedYears: [Array, Function] as PropType<number[] | ((date: number) => boolean)>,\n}, 'VDatePickerYears')\n\nexport const VDatePickerYears = genericComponent<VDatePickerYearsSlots>()({\n  name: 'VDatePickerYears',\n\n  props: makeVDatePickerYearsProps(),\n\n  directives: { vIntersect },\n\n  emits: {\n    'update:modelValue': (year: number) => true,\n    escape: () => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const adapter = useDate()\n    const model = useProxiedModel(props, 'modelValue')\n    const containerRef = templateRef()\n    const uid = useId()\n\n    const years = computed(() => {\n      const year = adapter.getYear(adapter.date())\n\n      let min = year - 100\n      let max = year + 52\n\n      if (props.min) {\n        min = adapter.getYear(adapter.date(props.min))\n      }\n\n      if (props.max) {\n        max = adapter.getYear(adapter.date(props.max))\n      }\n\n      let date = adapter.startOfYear(adapter.date())\n\n      date = adapter.setYear(date, min)\n\n      return createRange(max - min + 1, min).map(i => {\n        const text = adapter.format(date, 'year')\n        date = adapter.setYear(date, adapter.getYear(date) + 1)\n\n        return {\n          text,\n          value: i,\n          isDisabled: !isYearAllowed(i),\n        }\n      })\n    })\n\n    watchEffect(() => {\n      model.value = model.value ?? adapter.getYear(adapter.date())\n    })\n\n    function isYearAllowed (year: number) {\n      if (Array.isArray(props.allowedYears) && props.allowedYears.length) {\n        return props.allowedYears.includes(year)\n      }\n\n      if (isFunction(props.allowedYears)) {\n        return props.allowedYears(year)\n      }\n\n      return true\n    }\n\n    function onYearSelect (value: number) {\n      if (model.value === value) emit('update:modelValue', value)\n      else model.value = value\n    }\n\n    const { containerProps, containerEl, selectItem } = useGridSelection<number>({\n      items: () => years.value,\n      columns: () => props.columns,\n      initialValue: current => current ?? model.value ?? adapter.getYear(adapter.date()),\n      itemAttribute: 'data-v-year',\n      onSelect: onYearSelect,\n      onEscape: () => emit('escape'),\n    })\n\n    function scrollToSelected () {\n      const container = containerRef.el\n      const target = containerEl.value?.querySelector<HTMLElement>(`[data-v-year=\"${model.value}\"]`)\n      if (!container || !target) return\n\n      const containerRect = container.getBoundingClientRect()\n      const targetRect = target.getBoundingClientRect()\n\n      container.scrollTop += (targetRect.top - containerRect.top) - (container.clientHeight / 2) + (targetRect.height / 2)\n    }\n\n    useRender(() => (\n      <div\n        class=\"v-date-picker-years\"\n        ref={ containerRef }\n        tabindex={ -1 }\n        v-intersect={[{\n          handler: scrollToSelected,\n        }, null, ['once']]}\n        style={{\n          height: convertToUnit(props.height),\n        }}\n      >\n        <div\n          class=\"v-date-picker-years__content\"\n          style={{ '--v-date-picker-years-columns': props.columns }}\n          { ...containerProps.value }\n        >\n          { years.value.map((year, i) => {\n            const btnProps = {\n              id: `${uid}-year-${year.value}`,\n              active: model.value === year.value,\n              color: model.value === year.value ? props.color : undefined,\n              rounded: true,\n              tabindex: -1,\n              text: year.text,\n              disabled: year.isDisabled,\n              variant: model.value === year.value ? 'flat' : 'text',\n              'data-v-year': year.value,\n              onMousedown: (e: MouseEvent) => e.preventDefault(), // preserve virtual focus\n              onClick: () => selectItem(year.value),\n            } as const\n\n            return slots.year?.({\n              year,\n              i,\n              props: btnProps,\n            }) ?? (\n              <VBtn\n                key=\"month\"\n                { ...btnProps }\n              />\n            )\n          })}\n        </div>\n      </div>\n    ))\n\n    return {}\n  },\n})\n\nexport type VDatePickerYears = InstanceType<typeof VDatePickerYears>\n","// Styles\nimport './VDatePicker.sass'\n\n// Components\nimport { makeVDatePickerControlsProps, VDatePickerControls } from './VDatePickerControls'\nimport { VDatePickerHeader } from './VDatePickerHeader'\nimport { makeVDatePickerMonthProps, VDatePickerMonth } from './VDatePickerMonth'\nimport { makeVDatePickerMonthsProps, VDatePickerMonths } from './VDatePickerMonths'\nimport { makeVDatePickerYearsProps, VDatePickerYears } from './VDatePickerYears'\nimport { VFadeTransition } from '@/components/transitions'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { makeVPickerProps, VPicker } from '@/components/VPicker/VPicker'\n\n// Composables\nimport { useCalendarRange } from '@/composables/calendar'\nimport { useDate } from '@/composables/date'\nimport { daysDiff } from '@/composables/date/date'\nimport { useLocale, useRtl } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, shallowRef, toRef, watch } from 'vue'\nimport { convertToUnit, genericComponent, isFunction, omit, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { VDatePickerControlsDefaultSlotProps } from './VDatePickerControls'\nimport type { VDatePickerHeaderSlots } from './VDatePickerHeader'\nimport type { VDatePickerMonthSlots } from './VDatePickerMonth'\nimport type { VDatePickerMonthsSlots } from './VDatePickerMonths'\nimport type { VDatePickerYearsSlots } from './VDatePickerYears'\nimport type { VPickerSlots } from '@/components/VPicker/VPicker'\nimport type { GenericProps } from '@/util'\n\n// Types\nexport type VDatePickerSlots =\n  & Omit<VPickerSlots, 'header' | 'default'>\n  & Omit<VDatePickerHeaderSlots, 'default'>\n  & VDatePickerYearsSlots\n  & VDatePickerMonthsSlots\n  & VDatePickerMonthSlots\n  & {\n    header: {\n      header: string\n      transition: string\n    }\n    controls: VDatePickerControlsDefaultSlotProps\n  }\n\nexport const makeVDatePickerProps = propsFactory({\n  // TODO: implement in v3.5\n  // calendarIcon: {\n  //   type: String,\n  //   default: '$calendar',\n  // },\n  // keyboardIcon: {\n  //   type: String,\n  //   default: '$edit',\n  // },\n  // inputMode: {\n  //   type: String as PropType<'calendar' | 'keyboard'>,\n  //   default: 'calendar',\n  // },\n  // inputText: {\n  //   type: String,\n  //   default: '$vuetify.datePicker.input.placeholder',\n  // },\n  // inputPlaceholder: {\n  //   type: String,\n  //   default: 'dd/mm/yyyy',\n  // },\n  header: {\n    type: String,\n    default: '$vuetify.datePicker.header',\n  },\n  headerColor: String,\n  headerDateFormat: {\n    type: String,\n    default: 'normalDateWithWeekday',\n  },\n  landscapeHeaderWidth: [Number, String],\n\n  ...omit(makeVDatePickerControlsProps(), ['active', 'monthText', 'yearText']),\n  ...makeVDatePickerMonthProps({\n    weeksInMonth: 'static' as const,\n  }),\n  ...omit(makeVDatePickerMonthsProps(), ['modelValue', 'columns']),\n  ...omit(makeVDatePickerYearsProps(), ['modelValue', 'columns']),\n  ...makeVPickerProps({ title: '$vuetify.datePicker.title' }),\n\n  modelValue: null,\n}, 'VDatePicker')\n\nexport const VDatePicker = genericComponent<new <\n  T,\n  Multiple extends boolean | 'range' | number | (string & {}) = false,\n  TModel = Multiple extends true | number | string\n    ? T[]\n    : T,\n> (\n  props: {\n    modelValue?: TModel\n    'onUpdate:modelValue'?: (value: TModel) => void\n    multiple?: Multiple\n  },\n  slots: VDatePickerSlots\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VDatePicker',\n\n  props: makeVDatePickerProps(),\n\n  emits: {\n    'update:modelValue': (date: any) => true,\n    'update:month': (date: any) => true,\n    'update:year': (date: any) => true,\n    'update:previewValue': (_value: any) => true,\n    // 'update:inputMode': (date: any) => true,\n    'update:viewMode': (date: any) => true,\n    'boundary-navigate': (_payload: { direction: 'up' | 'down' | 'left' | 'right', targetIsoDate: string }) => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const adapter = useDate()\n    const { t } = useLocale()\n    const { rtlClasses } = useRtl()\n\n    const model = useProxiedModel(\n      props,\n      'modelValue',\n      undefined,\n      v => wrapInArray(v).map(i => adapter.date(i)),\n      v => props.multiple ? v : v[0],\n    )\n\n    const viewMode = useProxiedModel(props, 'viewMode')\n    // owns the hover preview so VDatePickerMonth isn't handed a prop nobody writes back\n    const previewValue = useProxiedModel(props, 'previewValue')\n    // const inputMode = useProxiedModel(props, 'inputMode')\n\n    const { minDate, maxDate, clampDate } = useCalendarRange(props)\n\n    const internal = computed(() => {\n      const today = adapter.date()\n      const value = model.value?.[0]\n        ? adapter.date(model.value[0])\n        : clampDate(today)\n\n      return value && adapter.isValid(value) ? value : today\n    })\n    const headerColor = toRef(() => props.headerColor ?? props.color)\n\n    const _month = useProxiedModel(props, 'month')\n    const month = computed({\n      get: () => Number(_month.value ?? adapter.getMonth(adapter.startOfMonth(internal.value))),\n      set: v => _month.value = v,\n    })\n\n    const _year = useProxiedModel(props, 'year')\n    const year = computed({\n      get: () => Number(_year.value ?? adapter.getYear(adapter.startOfYear(adapter.setMonth(internal.value, month.value)))),\n      set: v => _year.value = v,\n    })\n\n    const isReversing = shallowRef(false)\n    const header = computed(() => {\n      if (props.multiple === 'range' && model.value.length === 2) {\n        const [startDate, endDate] = model.value\n        const daysBetween = adapter.getDiff(endDate, startDate, 'days') + 1\n\n        return t('$vuetify.datePicker.itemsSelected', daysBetween)\n      }\n\n      if (props.multiple && model.value.length > 1) {\n        return t('$vuetify.datePicker.itemsSelected', model.value.length)\n      }\n\n      const formattedDate = (model.value[0] && adapter.isValid(model.value[0]))\n        ? adapter.format(adapter.date(model.value[0]), props.headerDateFormat)\n        : t(props.header)\n\n      return props.landscape && formattedDate.split(' ').length === 3\n        ? formattedDate.replace(' ', '\\n')\n        : formattedDate\n    })\n\n    const monthStart = toRef(() => {\n      let date = adapter.date()\n      date = adapter.setDate(date, 1)\n      date = adapter.setMonth(date, month.value)\n      date = adapter.setYear(date, year.value) // year is not always ISO\n      return date\n    })\n    const monthYearText = toRef(() => adapter.format(monthStart.value, 'monthAndYear'))\n    const monthText = toRef(() => adapter.format(monthStart.value, 'monthShort'))\n    const yearText = toRef(() => adapter.format(monthStart.value, 'year'))\n\n    // const headerIcon = toRef(() => props.inputMode === 'calendar' ? props.keyboardIcon : props.calendarIcon)\n    const headerTransition = toRef(() => `date-picker-header${isReversing.value ? '-reverse' : ''}-transition`)\n\n    const disabled = computed(() => {\n      if (props.disabled) return true\n\n      const targets = []\n\n      if (viewMode.value !== 'month') {\n        targets.push(...['prev-month', 'next-month', 'prev-year', 'next-year'])\n      } else {\n        let _date = adapter.date()\n\n        _date = adapter.startOfMonth(_date)\n        _date = adapter.setMonth(_date, month.value)\n        _date = adapter.setYear(_date, year.value)\n\n        if (minDate.value) {\n          const prevMonthEnd = adapter.addDays(adapter.startOfMonth(_date), -1)\n          const prevYearEnd = adapter.addDays(adapter.startOfYear(_date), -1)\n\n          adapter.isAfter(minDate.value, prevMonthEnd) && targets.push('prev-month')\n          adapter.isAfter(minDate.value, prevYearEnd) && targets.push('prev-year')\n        }\n\n        if (maxDate.value) {\n          const nextMonthStart = adapter.addDays(adapter.endOfMonth(_date), 1)\n          const nextYearStart = adapter.addDays(adapter.endOfYear(_date), 1)\n\n          adapter.isAfter(nextMonthStart, maxDate.value) && targets.push('next-month')\n          adapter.isAfter(nextYearStart, maxDate.value) && targets.push('next-year')\n        }\n      }\n\n      return targets\n    })\n\n    const allowedYears = computed(() => {\n      return props.allowedYears || isYearAllowed\n    })\n\n    const allowedMonths = computed(() => {\n      return props.allowedMonths || isMonthAllowed\n    })\n\n    function isAllowedInRange (start: unknown, end: unknown) {\n      const allowedDates = props.allowedDates\n      if (!isFunction(allowedDates)) return true\n\n      const days = 1 + daysDiff(adapter, start, end)\n\n      for (let i = 0; i < days; i++) {\n        if (allowedDates(adapter.addDays(start, i))) return true\n      }\n      return false\n    }\n\n    function isYearAllowed (year: number) {\n      if (isFunction(props.allowedDates)) {\n        const startOfYear = adapter.parseISO(`${year}-01-01`)\n        return isAllowedInRange(startOfYear, adapter.endOfYear(startOfYear))\n      }\n\n      if (Array.isArray(props.allowedDates) && props.allowedDates.length) {\n        for (const date of props.allowedDates) {\n          if (adapter.getYear(adapter.date(date)) === year) return true\n        }\n        return false\n      }\n\n      return true\n    }\n\n    function isMonthAllowed (month: number) {\n      if (isFunction(props.allowedDates)) {\n        const monthTwoDigits = String(month + 1).padStart(2, '0')\n        const startOfMonth = adapter.parseISO(`${year.value}-${monthTwoDigits}-01`)\n        return isAllowedInRange(startOfMonth, adapter.endOfMonth(startOfMonth))\n      }\n\n      if (Array.isArray(props.allowedDates) && props.allowedDates.length) {\n        for (const date of props.allowedDates) {\n          if (\n            adapter.getYear(adapter.date(date)) === year.value &&\n            adapter.getMonth(adapter.date(date)) === month\n          ) return true\n        }\n        return false\n      }\n\n      return true\n    }\n\n    // function onClickAppend () {\n    //   inputMode.value = inputMode.value === 'calendar' ? 'keyboard' : 'calendar'\n    // }\n\n    function onClickNextMonth () {\n      if (month.value < 11) {\n        month.value++\n      } else {\n        year.value++\n        month.value = 0\n        onUpdateYear()\n      }\n      onUpdateMonth()\n    }\n\n    function onClickPrevMonth () {\n      if (month.value > 0) {\n        month.value--\n      } else {\n        year.value--\n        month.value = 11\n        onUpdateYear()\n      }\n      onUpdateMonth()\n    }\n\n    function onClickNextYear () {\n      year.value++\n      if (maxDate.value) {\n        const monthTwoDigits = String(month.value + 1).padStart(2, '0')\n        const monthStart = adapter.parseISO(`${year.value}-${monthTwoDigits}-01`)\n        if (adapter.isAfter(monthStart, maxDate.value)) {\n          month.value = adapter.getMonth(maxDate.value)\n        }\n      }\n      onUpdateYear()\n    }\n\n    function onClickPrevYear () {\n      year.value--\n      if (minDate.value) {\n        const monthTwoDigits = String(month.value + 1).padStart(2, '0')\n        const monthStart = adapter.endOfMonth(adapter.parseISO(`${year.value}-${monthTwoDigits}-01`))\n        if (adapter.isAfter(minDate.value, monthStart)) {\n          month.value = adapter.getMonth(minDate.value)\n        }\n      }\n      onUpdateYear()\n    }\n\n    const monthGridRef = shallowRef<{ focusGrid: () => void, focusItem: (isoDate: string) => void }>()\n\n    function focusDate (isoDate: string) {\n      monthGridRef.value?.focusItem(isoDate)\n    }\n\n    function onClickDate () {\n      viewMode.value = 'month'\n    }\n\n    function onEscape () {\n      viewMode.value = 'month'\n      nextTick(() => monthGridRef.value?.focusGrid())\n    }\n\n    function onClickMonth () {\n      viewMode.value = viewMode.value === 'months' ? 'month' : 'months'\n    }\n\n    function onClickYear () {\n      viewMode.value = viewMode.value === 'year' ? 'month' : 'year'\n    }\n\n    function onUpdateMonth () {\n      if (viewMode.value === 'months') onClickMonth()\n    }\n\n    function onUpdateYear () {\n      if (viewMode.value === 'year') onClickYear()\n    }\n\n    watch(model, (val, oldVal) => {\n      if (props.noAutoNavigation) return\n\n      const arrBefore = wrapInArray(oldVal)\n      const arrAfter = wrapInArray(val)\n\n      if (!arrAfter.length) return\n\n      const before = adapter.date(arrBefore[arrBefore.length - 1])\n      const after = adapter.date(arrAfter[arrAfter.length - 1])\n\n      if (adapter.isSameDay(before, after)) return\n\n      const newMonth = adapter.getMonth(after)\n      const newYear = adapter.getYear(after)\n\n      if (newMonth !== month.value) {\n        month.value = newMonth\n        onUpdateMonth()\n      }\n\n      if (newYear !== year.value) {\n        year.value = newYear\n        onUpdateYear()\n      }\n\n      isReversing.value = adapter.isBefore(before, after)\n    })\n\n    useRender(() => {\n      const pickerProps = VPicker.filterProps(props)\n      const datePickerControlsProps = omit(VDatePickerControls.filterProps(props), ['viewMode'])\n      const datePickerHeaderProps = VDatePickerHeader.filterProps(props)\n      const datePickerMonthProps = VDatePickerMonth.filterProps(props)\n      const datePickerMonthsProps = omit(VDatePickerMonths.filterProps(props), ['modelValue'])\n      const datePickerYearsProps = omit(VDatePickerYears.filterProps(props), ['modelValue'])\n\n      const headerProps = {\n        color: headerColor.value,\n        header: header.value,\n        transition: headerTransition.value,\n      }\n\n      return (\n        <VPicker\n          { ...pickerProps }\n          color={ headerColor.value }\n          class={[\n            'v-date-picker',\n            `v-date-picker--${viewMode.value}`,\n            {\n              'v-date-picker--show-week': props.showWeek,\n            },\n            rtlClasses.value,\n            props.class,\n          ]}\n          style={[\n            {\n              '--v-date-picker-landscape-header-width': convertToUnit(props.landscapeHeaderWidth),\n            },\n            props.style,\n          ]}\n          v-slots={{\n            title: () => slots.title?.() ?? (\n              <div class=\"v-date-picker__title\">\n                { t(props.title) }\n              </div>\n            ),\n            header: () => slots.header ? (\n              <VDefaultsProvider\n                defaults={{\n                  VDatePickerHeader: { ...headerProps },\n                }}\n              >\n                { slots.header?.(headerProps) }\n              </VDefaultsProvider>\n            ) : (\n              <VDatePickerHeader\n                key=\"header\"\n                { ...datePickerHeaderProps }\n                { ...headerProps }\n                onClick={ viewMode.value !== 'month' ? onClickDate : undefined }\n                v-slots={{\n                  prepend: slots.prepend,\n                  append: slots.append,\n                }}\n              />\n            ),\n            default: () => (\n              <>\n                <VDatePickerControls\n                  { ...datePickerControlsProps }\n                  disabled={ disabled.value }\n                  viewMode={ viewMode.value }\n                  text={ monthYearText.value }\n                  monthText={ monthText.value }\n                  yearText={ yearText.value }\n                  onClick:next={ onClickNextMonth }\n                  onClick:prev={ onClickPrevMonth }\n                  onClick:nextYear={ onClickNextYear }\n                  onClick:prevYear={ onClickPrevYear }\n                  onClick:month={ onClickMonth }\n                  onClick:year={ onClickYear }\n                  v-slots={{ default: slots.controls }}\n                />\n\n                <VFadeTransition hideOnLeave>\n                  { viewMode.value === 'months' ? (\n                    <VDatePickerMonths\n                      key=\"date-picker-months\"\n                      { ...datePickerMonthsProps }\n                      v-model={ month.value }\n                      min={ minDate.value }\n                      max={ maxDate.value }\n                      year={ year.value }\n                      allowedMonths={ allowedMonths.value }\n                      onUpdate:modelValue={ onUpdateMonth }\n                      onEscape={ onEscape }\n                    >\n                      {{ month: slots.month }}\n                    </VDatePickerMonths>\n                  ) : viewMode.value === 'year' ? (\n                    <VDatePickerYears\n                      key=\"date-picker-years\"\n                      { ...datePickerYearsProps }\n                      v-model={ year.value }\n                      min={ minDate.value }\n                      max={ maxDate.value }\n                      allowedYears={ allowedYears.value }\n                      onUpdate:modelValue={ onUpdateYear }\n                      onEscape={ onEscape }\n                    >\n                      {{ year: slots.year }}\n                    </VDatePickerYears>\n                  ) : (\n                    <VDatePickerMonth\n                      ref={ monthGridRef }\n                      key=\"date-picker-month\"\n                      { ...datePickerMonthProps }\n                      v-model={ model.value }\n                      v-model:month={ month.value }\n                      v-model:year={ year.value }\n                      onUpdate:month={ onUpdateMonth }\n                      onUpdate:year={ onUpdateYear }\n                      v-model:previewValue={ previewValue.value }\n                      onBoundaryNavigate={ (payload: any) => emit('boundary-navigate', payload) }\n                      min={ minDate.value }\n                      max={ maxDate.value }\n                    >\n                      {{ day: slots.day }}\n                    </VDatePickerMonth>\n                  )}\n                </VFadeTransition>\n              </>\n            ),\n            actions: slots.actions,\n          }}\n        />\n      )\n    })\n\n    return { focusDate }\n  },\n})\n\nexport type VDatePicker = InstanceType<typeof VDatePicker>\n","// Types\nimport type { MaskEditResult, MaskResult, Segment, SegmentParts, ValueSegment } from './types'\n\nfunction readSection (segment: ValueSegment, text: string, start: number, tail: boolean, parts: SegmentParts) {\n  const max = segment.max ?? 10 ** segment.size - 1\n  const limit = Math.min(max, segment.softMax?.(parts) ?? max)\n  let index = start\n  let digits = ''\n  let filled = false\n\n  while (index < text.length && !filled && /\\d/.test(text[index])) {\n    const value = Number(digits + text[index])\n\n    if (value > limit) {\n      digits = String(limit).padStart(digits.length + 1, '0')\n      index++\n      filled = true\n      break\n    }\n\n    digits += text[index++]\n\n    if (segment.min && !Number(digits)) {\n      digits = '0'\n    }\n\n    filled = digits.length === segment.size\n  }\n\n  const separatorStart = index\n\n  // only the last section swallows what follows, elsewhere a second separator means an empty one\n  if (tail) {\n    while (index < text.length && !/\\d/.test(text[index])) index++\n  } else if (index < text.length && !/\\d/.test(text[index])) {\n    index++\n  }\n\n  // a section with no room left for another digit is closed, e.g. 4 is April\n  filled ||= !!digits && Number(digits) * 10 ** (segment.size - digits.length) > limit\n\n  return {\n    digits,\n    index,\n    end: separatorStart,\n    filled,\n    closed: index > separatorStart,\n  }\n}\n\n// a section cannot be left holding less than its minimum, e.g. a month is never 00\nfunction closeSection (segment: ValueSegment, digits: string, left: boolean) {\n  const value = segment.close?.(digits) ?? digits\n  const min = left ? segment.min ?? 0 : 0\n\n  return String(Math.max(Number(value), min)).padStart(segment.size, '0')\n}\n\nexport function maskSegmentsFrom (\n  segments: readonly Segment[],\n  text: string,\n  startIndex = 0,\n  caret = -1\n): MaskResult {\n  let index = startIndex\n  let result = ''\n  let closed = false\n  let gaps = false\n  let outCaret = -1\n  let width = 0\n  let base = 0\n  let pending = ''\n  let complete = true\n\n  const parts: SegmentParts = {}\n  const limited: { segment: ValueSegment, at: number }[] = []\n\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i]\n    if (segment.type === 'separator') continue\n\n    const next = segments[i + 1]\n    const tail = !segments.slice(i + 1).some(item => item.type === 'value')\n    const separator = !tail && next?.type === 'separator' ? next.value : ''\n    const start = index\n\n    const section = readSection(segment, text, index, tail, parts)\n    const filled = section.filled\n    let digits = section.digits\n\n    index = section.index\n    closed = section.closed\n\n    const typed = digits.length\n    // the caret is read against the digits the section took, which a cap or a zero can shorten\n    const editing = caret >= start && caret <= section.end\n    const holds = editing || (caret >= start && caret < index)\n\n    if (!digits) {\n      // a hole only ends the value when nothing comes after it\n      if (tail || !closed) complete = false\n      if (!closed) break\n\n      if (holds && outCaret < 0) outCaret = result.length + pending.length\n\n      // an empty section keeps its place as long as a later one still holds digits\n      pending += separator\n      base += segment.size + separator.length\n      continue\n    }\n\n    // a separator closes a section only once the caret has moved on\n    const done = filled || typed === segment.size || (closed && !editing)\n\n    // sections keep their full width, an overwriting edit counts on it\n    if (typed < segment.size && done) {\n      digits = closeSection(segment, digits, caret >= section.end)\n    }\n\n    if (pending) gaps = true\n\n    parts[segment.key] = digits\n    result += pending + digits\n    pending = ''\n\n    if (segment.softMax) limited.push({ segment, at: result.length - digits.length })\n\n    width = base + digits.length\n\n    if (holds && outCaret < 0) {\n      outCaret = caret >= start + typed && done\n        ? result.length + separator.length\n        : result.length - typed + Math.min(caret - start, typed)\n    }\n\n    if (typed < segment.size && !filled && !closed) {\n      complete = false\n      break\n    }\n\n    base += segment.size + separator.length\n    result += separator\n\n    // a trailing separator moves the format along with it\n    if (separator) width = base\n  }\n\n  // a section read before the one that narrows it is capped afterwards, e.g. 31.04 is April 30th\n  for (const { segment, at } of limited) {\n    const digits = parts[segment.key]\n    const limit = segment.softMax!(parts)\n\n    if (Number(digits) <= limit) continue\n\n    const capped = String(limit).padStart(digits.length, '0')\n\n    parts[segment.key] = capped\n    result = result.slice(0, at) + capped + result.slice(at + digits.length)\n  }\n\n  return {\n    value: result,\n    index,\n    closed,\n    caret: outCaret,\n    width,\n    gaps,\n    complete,\n  }\n}\n\nexport function toMaskSource (input: string, noise: RegExp, caret = -1) {\n  const text = input.trimStart().replace(noise, '')\n  const before = caret < 0 ? -1 : input.slice(0, caret).trimStart().replace(noise, '').length\n\n  return {\n    text,\n    caret: before,\n  }\n}\n\nexport function maskInput (\n  segments: readonly Segment[],\n  input: string,\n  noise: RegExp,\n  caret = -1,\n  decorate?: (masked: MaskResult, raw: string) => string,\n): MaskEditResult {\n  const raw = input.trimStart()\n  const source = toMaskSource(input, noise, caret)\n  const masked = maskSegmentsFrom(segments, source.text, 0, source.caret)\n  const value = decorate ? decorate(masked, raw) : masked.value\n\n  return {\n    value,\n    caret: masked.caret < 0 ? value.length : masked.caret,\n    width: masked.width,\n    gaps: masked.gaps,\n    complete: masked.complete,\n  }\n}\n","// Utilities\nimport { shallowRef, toValue } from 'vue'\nimport { clamp } from '@/util'\n\n// Types\nimport type { MaybeRefOrGetter } from 'vue'\nimport type { MaskEdit } from './types'\n\n// sections have a fixed width, so typing inside one overwrites instead of shifting\nexport function overtype (text: string, start: number, typed: string, rtl = false, moved = false) {\n  const chars = [...text]\n  const isDigit = (index: number) => /\\d/.test(chars[index] ?? '')\n  let caret = start\n  let wrote = -1\n\n  // a caret the user put between sections is typed into the one it follows, an rtl field fills those in front\n  if (rtl && moved && caret && !isDigit(caret) && isDigit(caret - 1)) caret--\n\n  for (const char of typed) {\n    // the period is not a section, typing a or p flips it in place\n    const period = chars.length - 2\n    if (/[ap]/i.test(char) && /[ap]/i.test(chars[period] ?? '') && chars[period + 1]?.toLowerCase() === 'm') {\n      chars[period] = char.toUpperCase()\n      caret = chars.length\n      continue\n    }\n\n    while (caret < chars.length && !isDigit(caret)) {\n      caret++\n    }\n\n    if (!/\\d/.test(char)) {\n      // a typed separator jumps to the next section, from the start of one it has nothing to close\n      if (caret && isDigit(caret - 1)) {\n        while (caret < chars.length && isDigit(caret)) {\n          caret++\n        }\n      }\n    } else if (caret < chars.length) {\n      chars[caret] = char\n      wrote = caret++\n    }\n  }\n\n  // the caret steps over the separator on its own, unless the mask is the one handing it\n  if (!rtl) {\n    while (caret < chars.length && !isDigit(caret)) {\n      caret++\n    }\n  }\n\n  return {\n    value: chars.join(''),\n    caret,\n    wrote,\n  }\n}\n\nfunction sectionAt (text: string, at: number) {\n  let start = at\n  let end = at\n\n  while (start && /\\d/.test(text[start - 1])) start--\n  while (end < text.length && /\\d/.test(text[end])) end++\n\n  return {\n    start,\n    end,\n  }\n}\n\n// deleting takes out digits but leaves the separators, so the sections keep their place\nfunction keepSeparators (previous: string, start: number, removed: number, after: boolean) {\n  const cut = previous.slice(start, start + removed)\n  const tail = previous.slice(start + removed)\n  const kept = /\\d/.test(tail) ? cut.replace(/\\d/g, '') : ''\n  const value = previous.slice(0, start) + kept + tail\n\n  return {\n    value: /\\d/.test(value) ? value : '',\n    // a separator that survived the delete is stepped over instead of removed\n    caret: after ? start + kept.length : start,\n  }\n}\n\n// an emptied section is retyped from its start, which an rtl value only reads back for a whole one\nfunction canReplay (value: string, start: number, end: number, rtl: boolean) {\n  return !rtl || !(/\\d/.test(value[start - 1] ?? '') || /\\d/.test(value[end] ?? ''))\n}\n\nexport function createSegmentedEdit (\n  mask: MaskEdit,\n  separator: MaybeRefOrGetter<string>,\n  isRtl?: MaybeRefOrGetter<boolean>,\n) {\n  const text = shallowRef('')\n  let edit: { value: string, start: number, end: number } | undefined\n  // the caret the mask handed over last, anywhere else the user put it there\n  let placed: number | undefined\n\n  function onBeforeinput (e: InputEvent) {\n    const inputElement = e.target as HTMLInputElement\n\n    edit = { value: inputElement.value, start: inputElement.selectionStart ?? 0, end: inputElement.selectionEnd ?? 0 }\n  }\n\n  function apply (el: HTMLInputElement, next: { value: string, caret: number }) {\n    if (next.value !== el.value) el.value = next.value\n    if (next.caret !== el.selectionStart) el.setSelectionRange(next.caret, next.caret)\n\n    placed = next.caret\n    text.value = el.value\n  }\n\n  // the arrow the value grows towards closes the section being typed, like the separator key does\n  function onKeydown (e: KeyboardEvent) {\n    const step = e.key === 'ArrowRight' ? 1 : e.key === 'ArrowLeft' ? -1 : 0\n    const inputElement = e.target as HTMLInputElement\n    const caret = inputElement.selectionStart ?? 0\n\n    if (!step || e.altKey || e.ctrlKey || e.metaKey || e.shiftKey || caret !== inputElement.selectionEnd) {\n      return\n    }\n\n    const rtl = !!toValue(isRtl)\n    // an rtl section grows in front of its separator, with the caret still behind its digits\n    const ahead = rtl ? inputElement.value.slice(0, caret) : inputElement.value.slice(caret)\n    const grows = (rtl ? step < 0 : step > 0) && !(rtl ? /\\D/ : /\\d/).test(ahead)\n    const at = rtl ? 0 : caret\n\n    const next = grows\n      ? mask(inputElement.value.slice(0, at) + toValue(separator) + inputElement.value.slice(at), rtl ? 0 : caret + 1)\n      // elsewhere the caret only moves, the mask settles the section it leaves behind\n      : mask(inputElement.value, clamp(caret + step, 0, inputElement.value.length))\n\n    if (next.value === inputElement.value) {\n      return // with nothing to close or settle the caret moves on its own\n    }\n\n    e.preventDefault()\n    apply(inputElement, next)\n  }\n\n  function typeIn (state: { value: string, caret: number }, char: string, moved = false) {\n    const { value, caret } = state\n    const shaped = mask(value)\n    const rtl = !!toValue(isRtl)\n\n    // sections of an rtl field fill towards the front, where the mask parks the caret\n    // with every section filled nothing grows, and what is typed overwrites wherever the caret sits\n    const grows = !rtl ? value.length : shaped.complete ? -1 : shaped.caret\n    // a value the mask would rewrite has no sections to overwrite, e.g. after a backspace\n    // and one that can still take another digit is edited by inserting, e.g. after a delete\n    const isInside = caret !== grows &&\n      // an emptied section is typed into, only the digits around it are overwritten\n      (!shaped.gaps || /\\d/.test(value[caret])) &&\n      shaped.value === value &&\n      mask(value + '0').value !== value + '0'\n\n    if (isInside) {\n      // an rtl field hands the caret to the section in front of the value, which the mask knows\n      const { value: overtyped, caret: at, wrote } = overtype(value, caret, char, rtl, moved)\n\n      // the mask has the last word on the sections the overwrite made invalid, e.g. February 31st\n      const next = mask(overtyped, at, true)\n\n      if (wrote < 0 || next.value.length !== overtyped.length || next.value[wrote] === overtyped[wrote]) {\n        return next\n      }\n\n      // a section that cannot hold what was typed into it starts over with it, e.g. 9 over a 12 is September\n      const { start, end } = sectionAt(overtyped, wrote)\n\n      return mask(overtyped.slice(0, start) + overtyped[wrote] + overtyped.slice(end), start + 1, true)\n    }\n\n    const insert = (at: number) => mask(value.slice(0, at) + char + value.slice(at), at + char.length)\n    const digits = (text: string) => text.replace(/\\D/g, '').length\n    const inPlace = insert(caret)\n\n    // two separators in a row hold an empty section, what the section behind it cannot take goes inside\n    return shaped.gaps && /^\\D\\D/.test(value.slice(caret)) && digits(inPlace.value) <= digits(value)\n      ? insert(caret + 1)\n      : inPlace\n  }\n\n  function onInput (e: InputEvent) {\n    const inputElement = e.target as HTMLInputElement\n    const previous = edit?.value ?? ''\n    const removed = previous.length - inputElement.value.length\n\n    if (e.isComposing) {\n      text.value = inputElement.value\n      return\n    }\n\n    if (e.inputType?.startsWith('delete') && edit && removed > 0) {\n      const collapsed = edit.start === edit.end\n      const forward = collapsed && !!e.inputType.includes('Forward')\n\n      apply(inputElement, keepSeparators(previous, collapsed && !forward ? edit.start - removed : edit.start, removed, forward))\n      return\n    }\n\n    // what the browser has put in, read back out of the value it landed in\n    const typed = edit\n      ? inputElement.value.slice(edit.start, inputElement.value.length - previous.length + edit.end)\n      : ''\n\n    if (edit &&\n      edit.start !== edit.end &&\n      e.inputType?.startsWith('insert') &&\n      canReplay(previous, edit.start, edit.end, !!toValue(isRtl))\n    ) {\n      // a substitution empties the sections it covers first, then takes the characters one at a time\n      const emptied = keepSeparators(previous, edit.start, edit.end - edit.start, false)\n      const next = [...typed].reduce((state, char) => typeIn(state, char), emptied)\n      apply(inputElement, next)\n      return\n    }\n\n    const state = { value: previous, caret: edit?.start ?? previous.length }\n    const next = typeIn(state, typed, edit?.start !== placed)\n    apply(inputElement, next)\n  }\n\n  return {\n    onBeforeinput,\n    onInput,\n    onKeydown,\n    text,\n  }\n}\n","// Types\nimport type { Segment, SegmentParts, ValueSegment } from './types'\n\nfunction lastDayInMonth (parts: SegmentParts) {\n  let days = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][Number(parts.m) - 1] ?? 31\n  const year = Number(parts.y)\n  const isLeapYear = !(year % 4) && (year % 100 || !(year % 400))\n  if (days === 29 && parts.y?.length === 4 && !isLeapYear) {\n    days = 28\n  }\n  return days\n}\n\nexport function dateSegments (order: string, separator: string, fixYear?: (year: number) => number): Segment[] {\n  const value: Record<string, ValueSegment> = {\n    y: { type: 'value', key: 'y', size: 4, max: 9999, close: digits => String(fixYear?.(Number(digits)) ?? digits) },\n    m: { type: 'value', key: 'm', size: 2, min: 1, max: 12 },\n    d: { type: 'value', key: 'd', size: 2, min: 1, max: 31, softMax: lastDayInMonth },\n  }\n\n  return [...order].flatMap((key, i) => [\n    ...i ? [{ type: 'separator', value: separator } as const] : [],\n    value[key],\n  ])\n}\n","// Composables\nimport { useDate } from '@/composables/date/date'\nimport { dateSegments, maskSegmentsFrom, remainingHint, toMaskSource } from '@/composables/segmentedMask'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { consoleWarn, isString, propsFactory } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\n// Types\nexport interface DateFormatProps {\n  inputFormat?: string\n  multiple?: boolean | 'range' | number | (string & {})\n  placeholder?: string\n}\n\nclass DateFormatSpec {\n  constructor (\n    public readonly order: string, // mdy | dmy | ymd\n    public readonly separator: string // / | - | .\n  ) { }\n\n  get format () {\n    return this.order.split('')\n      .map(sign => `${sign}${sign}`)\n      .join(this.separator)\n      .replace('yy', 'yyyy')\n  }\n\n  static canBeParsed (v: any) {\n    if (!isString(v)) return false\n    const lowercase = v.toLowerCase()\n    return ['y', 'm', 'd'].every(sign => lowercase.includes(sign)) &&\n      ['/', '-', '.'].some(sign => v.includes(sign))\n  }\n\n  static parse (v: string) {\n    if (!DateFormatSpec.canBeParsed(v)) {\n      throw new Error(`[${v}] cannot be parsed into date format specification`)\n    }\n    const order = v.toLowerCase().split('')\n      .filter((c, i, all) => 'dmy'.includes(c) && all.indexOf(c) === i)\n      .join('')\n    const separator = ['/', '-', '.'].find(sign => v.includes(sign))!\n    return new DateFormatSpec(order, separator)\n  }\n}\n\nexport const makeDateFormatProps = propsFactory({\n  inputFormat: {\n    type: String,\n    validator: (v: string) => !v || DateFormatSpec.canBeParsed(v),\n  },\n}, 'date-format')\n\nexport function useDateFormat (props: DateFormatProps, locale: Ref<string>, isRtl: Ref<boolean>) {\n  const adapter = useDate()\n\n  function inferFromLocale () {\n    const localeForDateFormat = locale.value ?? 'en-US'\n    const parts = new Intl.DateTimeFormat(localeForDateFormat, { year: 'numeric', month: '2-digit', day: '2-digit' })\n      .formatToParts(adapter.toJsDate(adapter.parseISO('1999-12-07')))\n\n    const logicalOrder = parts.filter(p => ['year', 'month', 'day'].includes(p.type)).map(p => p.type[0]).join('')\n    const literal = parts.find(p => p.type === 'literal')?.value ?? ''\n    const separator = ['/', '-', '.'].find(sign => literal.includes(sign)) ?? '/'\n\n    if (logicalOrder.length !== 3) {\n      consoleWarn(`Date format inferred from locale [${localeForDateFormat}] is invalid: [${logicalOrder}]`)\n      return new DateFormatSpec('mdy', '/')\n    }\n\n    const visualOrder = literal.includes('\\u200f')\n      ? [...logicalOrder].reverse().join('')\n      : logicalOrder\n\n    return new DateFormatSpec(visualOrder, separator)\n  }\n\n  const currentFormat = toRef(() => {\n    return DateFormatSpec.canBeParsed(props.inputFormat)\n      ? DateFormatSpec.parse(props.inputFormat!)\n      : inferFromLocale()\n  })\n\n  function autoFixYear (year: number) {\n    const currentYear = adapter.getYear(adapter.date())\n    if (year > 100 || currentYear % 100 >= 50) {\n      return year\n    }\n\n    const currentCentury = ~~(currentYear / 100) * 100\n\n    return year < 50\n      ? currentCentury + year\n      : (currentCentury - 100) + year\n  }\n\n  const typingOrder = toRef(() => {\n    const { order } = currentFormat.value\n\n    return isRtl.value\n      ? [...order].reverse().join('')\n      : order\n  })\n\n  const layout = toRef(() => {\n    const isRange = props.multiple === 'range'\n    const limit = isRange ? 2 : props.multiple ? Infinity : 1\n\n    return {\n      join: isRange ? ' - ' : ', ',\n      limit,\n      bounded: Number.isFinite(limit),\n    }\n  })\n\n  const hintFormat = toRef(() => {\n    const { format, separator } = currentFormat.value\n    const custom = props.placeholder?.slice(0, format.length)\n\n    return custom?.length === format.length && !/\\d/.test(custom) &&\n      [...format].every((char, i) => (char === separator) === (custom[i] === separator))\n      ? custom\n      : format\n  })\n\n  const segments = toRef(() => dateSegments(typingOrder.value, currentFormat.value.separator, autoFixYear))\n\n  function mirror (text: string, caret = -1) {\n    const parts = text.split(/(\\D+)/)\n    const value = [...parts].reverse().join('')\n\n    if (caret < 0) return { value, caret }\n\n    let at = 0\n    let start = 0\n\n    while (at < parts.length - 1 && caret > start + parts[at].length) {\n      start += parts[at].length + parts[at + 1].length\n      at += 2\n    }\n\n    const mirroredCaret = text.length - start - parts[at].length + Math.max(caret - start, 0)\n\n    return { value, caret: mirroredCaret }\n  }\n\n  function joinDates (dates: string[]) {\n    return (isRtl.value\n      ? [...dates].reverse()\n      : dates).join(layout.value.join)\n  }\n\n  function parseDate (dateString: string) {\n    function parseDateParts (text: string): Record<'y' |'m' | 'd', number> {\n      const parts = text.trim().split(currentFormat.value.separator)\n\n      return {\n        y: Number(parts[currentFormat.value.order.indexOf('y')]),\n        m: Number(parts[currentFormat.value.order.indexOf('m')]),\n        d: Number(parts[currentFormat.value.order.indexOf('d')]),\n      }\n    }\n\n    function validateDateParts (dateParts: Record<string, number>) {\n      const { y: year, m: month, d: day } = dateParts\n      if (!year || !month || !day) return null\n      if (month < 1 || month > 12) return null\n      if (day < 1 || day > 31) return null\n\n      return { year: autoFixYear(year), month, day }\n    }\n\n    const dateParts = parseDateParts(dateString)\n    const validatedParts = validateDateParts(dateParts)\n\n    if (!validatedParts) return null\n\n    const { year, month, day } = validatedParts\n\n    const pad = (v: number) => String(v).padStart(2, '0')\n\n    return adapter.parseISO(`${year}-${pad(month)}-${pad(day)}`)\n  }\n\n  function isValid (text: string) {\n    return !!parseDate(text)\n  }\n\n  function remainingFormat (width: number, dates: number) {\n    const { bounded, join, limit } = layout.value\n    const template = Array.from({ length: bounded ? limit : dates }, () => hintFormat.value).join(join)\n\n    return isRtl.value\n      ? template.slice(0, template.length - width)\n      : template.slice(width)\n  }\n\n  function maskInTypingOrder (input: string, caret: number) {\n    const { join, limit } = layout.value\n    const { text, caret: before } = toMaskSource(input, /[^\\d/.\\- ]/g, caret)\n\n    let result = ''\n    let index = 0\n    let width = 0\n    let outCaret = -1\n    let gaps = false\n    let dates = 1\n\n    for (let date = 0; date < limit; date++) {\n      const start = index\n      const masked = maskSegmentsFrom(segments.value, text, index, before)\n      index = masked.index\n\n      // the next date waits for the end of the previous one\n      if (index === start || !masked.value) {\n        break\n      }\n\n      if (masked.caret >= 0 && outCaret < 0) {\n        outCaret = result.length + masked.caret\n      }\n\n      result += masked.value\n      width += masked.width\n      gaps ||= masked.gaps\n\n      if (!masked.complete || (!masked.closed && index >= text.length)) {\n        break\n      }\n\n      if (date + 1 < limit) {\n        result += join\n        width += join.length\n        dates++\n      }\n    }\n\n    const hint = remainingFormat(width, dates)\n\n    return {\n      value: result,\n      caret: outCaret < 0 ? result.length : outCaret,\n      width,\n      gaps,\n      hint,\n      complete: layout.value.bounded && !hint,\n    }\n  }\n\n  function maskDate (input: string, caret = -1, inPlace = false) {\n    if (!isRtl.value) {\n      return maskInTypingOrder(input, caret)\n    }\n\n    const typed = mirror(input, caret)\n    const at = caret >= input.length ? typed.value.length : typed.caret\n    const masked = maskInTypingOrder(typed.value, at)\n    const shown = mirror(masked.value, masked.caret)\n    const filled = !inPlace &&\n      masked.caret >= masked.value.length &&\n      layout.value.bounded &&\n      !masked.hint\n\n    return {\n      ...masked,\n      value: shown.value,\n      caret: filled ? 0 : shown.caret,\n    }\n  }\n\n  function getHint (text: string) {\n    const { value, hint } = maskDate(text)\n    const flip = (v: string) => isRtl.value ? [...v].reverse().join('') : v\n\n    return flip(remainingHint(flip(value), flip(hint), flip(text)))\n  }\n\n  function formatDate (value: unknown) {\n    const parts = adapter.toISO(value).split('T')[0].split('-')\n\n    return currentFormat.value.order.split('')\n      .map(sign => parts['ymd'.indexOf(sign)])\n      .join(currentFormat.value.separator)\n  }\n\n  return {\n    isValid,\n    getHint,\n    joinDates,\n    maskDate,\n    parseDate,\n    formatDate,\n    separator: toRef(() => currentFormat.value.separator),\n    parserFormat: toRef(() => currentFormat.value.format),\n  }\n}\n","// what is left of the format once the characters already on screen are struck off it,\n// the mask having padded sections the display has not caught up with yet\nexport function remainingHint (masked: string, hint: string, shown: string) {\n  const digitsLeft = (value: string, from: number) => /^\\d*/.exec(value.slice(from))![0].length\n  let at = 0\n  let read = 0\n\n  while (at < masked.length && read < shown.length) {\n    if (masked[at] === shown[read]) {\n      at++\n      read++\n    } else if (digitsLeft(masked, at) > digitsLeft(shown, read)) {\n      at++\n    } else {\n      return ''\n    }\n  }\n\n  let left = masked.slice(at) + hint\n\n  for (const char of shown.slice(read)) {\n    const next = left.indexOf(char)\n    if (next < 0) return ''\n    left = left.slice(next + 1)\n  }\n\n  return left\n}\n","// Styles\nimport './VDateInput.sass'\n\n// Components\nimport { makeVConfirmEditProps, VConfirmEdit } from '@/components/VConfirmEdit/VConfirmEdit'\nimport { makeVDatePickerProps, VDatePicker } from '@/components/VDatePicker/VDatePicker'\nimport { useInputIcon } from '@/components/VInput/InputIcon'\nimport { VMenu } from '@/components/VMenu/VMenu'\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\n\n// Composables\nimport { useCalendarRange } from '@/composables/calendar'\nimport { useDate } from '@/composables/date'\nimport { makeDateFormatProps, useDateFormat } from '@/composables/dateFormat'\nimport { makeDisplayProps, useDisplay } from '@/composables/display'\nimport { makeFocusProps } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useLocale } from '@/composables/locale'\nimport { closeWhenFocusLeaves, useOpenOnFocus } from '@/composables/openOnFocus'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { createSegmentedEdit } from '@/composables/segmentedMask'\n\n// Utilities\nimport { computed, ref, shallowRef, watch } from 'vue'\nimport { genericComponent, isFunction, omit, pick, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VDatePickerSlots } from '@/components/VDatePicker/VDatePicker'\nimport type { StrategyProps } from '@/components/VOverlay/locationStrategies'\nimport type { VTextFieldSlots } from '@/components/VTextField/VTextField'\nimport type { GenericProps } from '@/util'\n\n// Types\nexport type VDateInputActionsSlot = {\n  save: () => void\n  cancel: () => void\n  isPristine: boolean\n}\n\nexport type VDateInputSlots = Omit<VTextFieldSlots, 'default'> &\n  Pick<VDatePickerSlots, 'title' | 'header' | 'day' | 'month' | 'year'> & {\n    actions: VDateInputActionsSlot\n    default: never\n  }\n\nexport const makeVDateInputProps = propsFactory({\n  displayFormat: {\n    type: [Function, String] as PropType<string | ((date: unknown) => any)>,\n    default: undefined,\n  },\n  location: {\n    type: String as PropType<StrategyProps['location']>,\n    default: 'bottom start',\n  },\n  menu: Boolean,\n  menuProps: Object as PropType<VMenu['$props']>,\n  openOnFocus: Boolean,\n  updateOn: {\n    type: Array as PropType<('blur' | 'enter')[]>,\n    default: () => ['blur', 'enter'],\n  },\n  pickerProps: Object as PropType<VDatePicker['$props']>,\n\n  ...makeDateFormatProps(),\n  ...makeDisplayProps({\n    mobile: null,\n  }),\n  ...makeFocusProps(),\n  ...makeVConfirmEditProps({\n    hideActions: true,\n  }),\n  ...makeVTextFieldProps({\n    prependIcon: '$calendar',\n  }),\n  ...omit(makeVDatePickerProps({\n    hideHeader: true,\n    showAdjacentMonths: true,\n  }), [\n    'location',\n    'rounded',\n    'height',\n    'minHeight',\n    'maxHeight',\n  ]),\n}, 'VDateInput')\n\nexport const VDateInput = genericComponent<new <\n  T,\n  Multiple extends boolean | 'range' | number | (string & {}) = false,\n  TModel = Multiple extends true | number | string\n    ? T[]\n    : T,\n> (\n  props: {\n    modelValue?: TModel\n    onSave?: (value: TModel) => void\n    'onUpdate:modelValue'?: (value: TModel) => void\n    multiple?: Multiple\n  },\n  slots: VDateInputSlots\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VDateInput',\n\n  props: makeVDateInputProps(),\n\n  emits: {\n    save: (value: unknown) => true,\n    cancel: () => true,\n    'update:focused': (val: boolean) => true,\n    'update:modelValue': (val: unknown) => true,\n    'update:menu': (val: boolean) => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const { t, isRtl } = useLocale()\n    const adapter = useDate()\n    const adapterLocale = computed(() => adapter.locale)\n\n    const {\n      getHint,\n      isValid,\n      joinDates,\n      maskDate,\n      parseDate,\n      formatDate,\n      separator,\n      parserFormat,\n    } = useDateFormat(props, adapterLocale, isRtl)\n\n    const {\n      onBeforeinput,\n      onInput,\n      onKeydown: onInputKeydown,\n      text,\n    } = createSegmentedEdit(maskDate, separator, isRtl)\n\n    const { mobile } = useDisplay(props)\n    const { InputIcon } = useInputIcon(props)\n\n    const { clampDate, isInAllowedRange } = useCalendarRange(props)\n\n    const emptyModelValue = () => props.multiple ? [] : null\n\n    const model = useProxiedModel(\n      props,\n      'modelValue',\n      emptyModelValue(),\n      val => Array.isArray(val) ? val.map(item => adapter.toJsDate(item)) : val ? adapter.toJsDate(val) : val,\n      val => Array.isArray(val) ? val.map(item => adapter.date(item)) : val ? adapter.date(val) : val\n    )\n\n    const menu = useProxiedModel(props, 'menu')\n    const isEditingInput = shallowRef(false)\n    const isFocused = shallowRef(props.focused)\n    const vTextFieldRef = ref<VTextField>()\n    const vMenuRef = ref<VMenu>()\n    const disabledActions = ref<typeof VConfirmEdit['props']['disabled']>(['save'])\n\n    useOpenOnFocus(menu, isFocused, () => props.openOnFocus && !props.disabled)\n\n    function format (date: unknown) {\n      if (isFunction(props.displayFormat)) {\n        return props.displayFormat(date)\n      }\n      if (props.displayFormat) {\n        return adapter.format(date, props.displayFormat ?? 'keyboardDate')\n      }\n      return formatDate(date)\n    }\n\n    const display = computed(() => {\n      const value = wrapInArray(model.value)\n\n      if (!value.length) return null\n\n      if (props.multiple === true) {\n        return t('$vuetify.datePicker.itemsSelected', value.length)\n      }\n\n      if (props.multiple === 'range') {\n        const start = value[0]\n        const end = value[value.length - 1]\n\n        if (!adapter.isValid(start) || !adapter.isValid(end)) return ''\n\n        return joinDates([format(adapter.date(start)), format(adapter.date(end))])\n      }\n\n      return adapter.isValid(model.value) ? format(adapter.date(model.value)) : ''\n    })\n\n    const placeholder = computed(() => {\n      if (props.placeholder) return props.placeholder\n\n      if (props.multiple === 'range') return joinDates([parserFormat.value, parserFormat.value])\n      if (props.multiple) return `${parserFormat.value}, ...`\n\n      return parserFormat.value\n    })\n\n    const formatHint = computed(() => getHint(text.value))\n\n    // the mask writes to the input directly, the text field has to render the same value\n    watch(display, value => text.value = value ?? '', { immediate: true })\n\n    const inputmode = computed(() => {\n      if (!mobile.value) return undefined\n      if (isEditingInput.value) return 'text'\n\n      return 'none'\n    })\n\n    const isInteractive = computed(() => !props.disabled && !props.readonly)\n\n    const isReadonly = computed(() => {\n      if (!props.updateOn.length) return true\n\n      return !(mobile.value && isEditingInput.value) && props.readonly\n    })\n\n    watch(menu, val => {\n      if (val) return\n\n      isEditingInput.value = false\n      disabledActions.value = ['save']\n    })\n\n    function onKeydown (e: KeyboardEvent) {\n      onInputKeydown(e)\n\n      if (e.key !== 'Enter') return\n\n      if (!menu.value || !isFocused.value) {\n        menu.value = true\n      }\n\n      if (props.updateOn.includes('enter') && !props.readonly) {\n        onUserInput(e.target as HTMLInputElement)\n      }\n    }\n\n    function onClick (e: MouseEvent) {\n      if (props.disabled) return\n\n      e.preventDefault()\n      e.stopPropagation()\n\n      if (menu.value && mobile.value) {\n        isEditingInput.value = !props.readonly\n      } else {\n        menu.value = true\n      }\n    }\n\n    function onCancel () {\n      emit('cancel')\n      menu.value = false\n      isEditingInput.value = false\n    }\n\n    function onSave (value: string) {\n      emit('save', value)\n      menu.value = false\n    }\n\n    function onUpdateDisplayModel (value: unknown) {\n      if (value != null) return\n\n      model.value = emptyModelValue()\n    }\n\n    function onBlur (e: FocusEvent) {\n      if ((e.relatedTarget as HTMLElement | null)?.closest('[data-v-date]')) {\n        return // first click on a day\n      }\n\n      if (props.updateOn.includes('blur') && !props.readonly) {\n        onUserInput(e.target as HTMLInputElement)\n      }\n\n      text.value = display.value ?? ''\n\n      // When in mobile mode and editing is done (due to keyboard dismissal), close the menu\n      if (mobile.value && isEditingInput.value && !isFocused.value) {\n        menu.value = false\n        isEditingInput.value = false\n      }\n\n      closeWhenFocusLeaves(menu, vTextFieldRef.value?.$el, vMenuRef.value?.contentEl)\n    }\n\n    function onUserInput ({ value }: HTMLInputElement) {\n      if (!value.trim()) {\n        model.value = emptyModelValue()\n      } else if (!props.multiple) {\n        if (isValid(value)) {\n          model.value = clampDate(parseDate(value))\n        }\n      } else {\n        const parts = value.trim().split(/\\D+-\\D+|[^\\d\\-/.]+/).filter(Boolean)\n        if (parts.every(isValid)) {\n          if (props.multiple === 'range') {\n            const [start, stop] = parts\n              .map(parseDate)\n              .map(clampDate)\n              .toSorted((a, b) => adapter.isAfter(a, b) ? 1 : -1)\n            model.value = stop == null ? [start] : [start, adapter.endOfDay(stop)]\n          } else {\n            model.value = parts\n              .map(parseDate)\n              .filter(isInAllowedRange)\n          }\n        }\n      }\n    }\n\n    useRender(() => {\n      const hasPrepend = !!(props.prependIcon || slots.prepend)\n      const confirmEditProps = VConfirmEdit.filterProps(props)\n      const datePickerProps = {\n        ...VDatePicker.filterProps(omit(props, [\n          'active',\n          'bgColor',\n          'color',\n          'location',\n          'rounded',\n          'maxWidth',\n          'minWidth',\n          'width',\n        ])),\n        ...props.pickerProps,\n      }\n      const datePickerSlots = pick(slots, ['title', 'header', 'day', 'month', 'year'])\n      const textFieldProps = VTextField.filterProps(omit(props, ['placeholder']))\n\n      return (\n        <VTextField\n          ref={ vTextFieldRef }\n          { ...textFieldProps }\n          class={['v-date-input', props.class]}\n          style={ props.style }\n          modelValue={ text.value }\n          inputmode={ inputmode.value }\n          placeholder={ placeholder.value }\n          readonly={ isReadonly.value }\n          onKeydown={ isInteractive.value ? onKeydown : undefined }\n          onBeforeinput={ isInteractive.value ? onBeforeinput : undefined }\n          onInput={ isInteractive.value ? onInput : undefined }\n          focused={ menu.value || isFocused.value }\n          onBlur={ onBlur }\n          validationValue={ model.value }\n          onClick:control={ onClick }\n          onUpdate:modelValue={ onUpdateDisplayModel }\n          onUpdate:focused={ event => isFocused.value = event }\n        >\n          {{\n            ...slots,\n            default: () => (\n              <>\n                { isFocused.value && !isReadonly.value && !!text.value && (\n                  <div class=\"v-date-input__format-hint\" aria-hidden=\"true\">\n                    <span style={{ order: isRtl.value ? 1 : 0 }}>{ text.value }</span>\n                    { formatHint.value }\n                  </div>\n                )}\n\n                <VMenu\n                  ref={ vMenuRef }\n                  v-model={ menu.value }\n                  activator=\"parent\"\n                  minWidth=\"0\"\n                  eager={ isFocused.value }\n                  location={ props.location }\n                  closeOnContentClick={ false }\n                  openOnClick={ false }\n                  { ...props.menuProps }\n                >\n                  <VConfirmEdit\n                    { ...confirmEditProps }\n                    v-model={ model.value }\n                    disabled={ disabledActions.value }\n                    onSave={ onSave }\n                    onCancel={ onCancel }\n                  >\n                    {{\n                      default: ({ actions, model: proxyModel, save, cancel, isPristine }) => {\n                        function onUpdateModel (value: string) {\n                          if (!props.hideActions) {\n                            proxyModel.value = value\n                          } else {\n                            model.value = value\n\n                            if (!props.multiple) {\n                              menu.value = false\n                            }\n                          }\n\n                          emit('save', value)\n\n                          disabledActions.value = []\n                        }\n\n                        return (\n                          <VDatePicker\n                            { ...datePickerProps }\n                            modelValue={ props.hideActions ? model.value : proxyModel.value }\n                            onUpdate:modelValue={ value => onUpdateModel(value) }\n                            onMousedown={ (e: MouseEvent) => e.preventDefault() }\n                          >\n                            {{\n                              ...datePickerSlots,\n                              actions: !props.hideActions ? () => slots.actions?.({ save, cancel, isPristine }) ?? actions() : undefined,\n                            }}\n                          </VDatePicker>\n                        )\n                      },\n                    }}\n                  </VConfirmEdit>\n                </VMenu>\n\n                { slots.default?.() }\n              </>\n            ),\n            prepend: hasPrepend ? prependSlotProps => (\n              slots.prepend\n                ? slots.prepend(prependSlotProps)\n                : (props.prependIcon && (\n                  <InputIcon\n                    key=\"prepend-icon\"\n                    name=\"prepend\"\n                    tabindex={ props['onClick:prepend'] ? undefined : -1 }\n                    onClick={ isInteractive.value ? onClick : undefined }\n                  />\n                ))\n            ) : undefined,\n          }}\n        </VTextField>\n      )\n    })\n\n    return forwardRefs({}, vTextFieldRef)\n  },\n})\n\nexport type VDateInput = InstanceType<typeof VDateInput>\n","// Styles\nimport './VEmptyState.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\nimport { VImg } from '@/components/VImg'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useDisplay } from '@/composables/display'\nimport { IconValue } from '@/composables/icons'\nimport { makeSizeProps } from '@/composables/size'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { convertToUnit, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// Types\n\nexport type VEmptyStateSlots = {\n  actions: {\n    props: {\n      onClick: (e: Event) => void\n    }\n  }\n  default: never\n  headline: never\n  title: never\n  media: never\n  text: never\n}\n\nexport const makeVEmptyStateProps = propsFactory({\n  actionText: String,\n  bgColor: String,\n  color: String,\n  icon: IconValue,\n  image: String,\n  justify: {\n    type: String as PropType<'start' | 'center' | 'end'>,\n    default: 'center',\n  },\n  headline: String,\n  title: String,\n  text: String,\n  textWidth: {\n    type: [Number, String],\n    default: 500,\n  },\n  href: String,\n  to: String,\n\n  ...makeComponentProps(),\n  ...makeDimensionProps(),\n  ...makeSizeProps({ size: undefined }),\n  ...makeThemeProps(),\n}, 'VEmptyState')\n\nexport const VEmptyState = genericComponent<VEmptyStateSlots>()({\n  name: 'VEmptyState',\n\n  props: makeVEmptyStateProps(),\n\n  emits: {\n    'click:action': (e: Event) => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const { themeClasses } = provideTheme(props)\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.bgColor)\n    const { dimensionStyles } = useDimension(props)\n    const { displayClasses } = useDisplay()\n\n    function onClickAction (e: Event) {\n      emit('click:action', e)\n    }\n\n    useRender(() => {\n      const hasActions = !!(slots.actions || props.actionText)\n      const hasHeadline = !!(slots.headline || props.headline)\n      const hasTitle = !!(slots.title || props.title)\n      const hasText = !!(slots.text || props.text)\n      const hasMedia = !!(slots.media || props.image || props.icon)\n      const size = props.size || (props.image ? 200 : 96)\n\n      return (\n        <div\n          class={[\n            'v-empty-state',\n            {\n              [`v-empty-state--${props.justify}`]: true,\n            },\n            themeClasses.value,\n            backgroundColorClasses.value,\n            displayClasses.value,\n            props.class,\n          ]}\n          style={[\n            backgroundColorStyles.value,\n            dimensionStyles.value,\n            props.style,\n          ]}\n        >\n          { hasMedia && (\n            <div key=\"media\" class=\"v-empty-state__media\">\n              { !slots.media ? (\n                <>\n                  { props.image ? (\n                    <VImg\n                      key=\"image\"\n                      src={ props.image }\n                      height={ size }\n                    />\n                  ) : props.icon ? (\n                    <VIcon\n                      key=\"icon\"\n                      color={ props.color }\n                      size={ size }\n                      icon={ props.icon }\n                    />\n                  ) : undefined }\n                </>\n              ) : (\n                <VDefaultsProvider\n                  key=\"media-defaults\"\n                  defaults={{\n                    VImg: {\n                      src: props.image,\n                      height: size,\n                    },\n                    VIcon: {\n                      size,\n                      icon: props.icon,\n                    },\n                  }}\n                >\n                  { slots.media() }\n                </VDefaultsProvider>\n              )}\n            </div>\n          )}\n\n          { hasHeadline && (\n            <div key=\"headline\" class=\"v-empty-state__headline\">\n              { slots.headline?.() ?? props.headline }\n            </div>\n          )}\n\n          { hasTitle && (\n            <div key=\"title\" class=\"v-empty-state__title\">\n              { slots.title?.() ?? props.title }\n            </div>\n          )}\n\n          { hasText && (\n            <div\n              key=\"text\"\n              class=\"v-empty-state__text\"\n              style={{\n                maxWidth: convertToUnit(props.textWidth),\n              }}\n            >\n              { slots.text?.() ?? props.text }\n            </div>\n          )}\n\n          { slots.default && (\n            <div key=\"content\" class=\"v-empty-state__content\">\n              { slots.default() }\n            </div>\n          )}\n\n          { hasActions && (\n            <div key=\"actions\" class=\"v-empty-state__actions\">\n              <VDefaultsProvider\n                defaults={{\n                  VBtn: {\n                    class: 'v-empty-state__action-btn',\n                    color: props.color ?? 'surface-variant',\n                    href: props.href,\n                    text: props.actionText,\n                    to: props.to,\n                  },\n                }}\n              >\n                {\n                  slots.actions?.({ props: { onClick: onClickAction } }) ?? (\n                    <VBtn onClick={ onClickAction } />\n                  )\n                }\n              </VDefaultsProvider>\n            </div>\n          )}\n        </div>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VEmptyState = InstanceType<typeof VEmptyState>\n","// Types\nimport type { InjectionKey } from 'vue'\nimport type { GroupItemProvide } from '@/composables/group'\n\nexport const VExpansionPanelSymbol: InjectionKey<GroupItemProvide> = Symbol.for('vuetify:v-expansion-panel')\n","// Components\nimport { VExpansionPanelSymbol } from './shared'\nimport { VExpandTransition } from '@/components/transitions'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeLazyProps, useLazy } from '@/composables/lazy'\n\n// Utilities\nimport { inject } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVExpansionPanelTextProps = propsFactory({\n  ...makeComponentProps(),\n  ...makeLazyProps(),\n}, 'VExpansionPanelText')\n\nexport const VExpansionPanelText = genericComponent()({\n  name: 'VExpansionPanelText',\n\n  props: makeVExpansionPanelTextProps(),\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    useRender(() => (\n      <VExpandTransition onAfterLeave={ onAfterLeave }>\n        <div\n          class={[\n            'v-expansion-panel-text',\n            props.class,\n          ]}\n          style={ props.style }\n          v-show={ expansionPanel.isSelected.value }\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    return {}\n  },\n})\n\nexport type VExpansionPanelText = InstanceType<typeof VExpansionPanelText>\n","// Components\nimport { VExpansionPanelSymbol } from './shared'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { IconValue } from '@/composables/icons'\n\n// Directives\nimport vRipple from '@/directives/ripple'\n\n// Utilities\nimport { computed, inject, toRef } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { RippleDirectiveBinding } from '@/directives/ripple'\n\ninterface ExpansionPanelTitleSlot {\n  collapseIcon: IconValue\n  disabled: boolean | undefined\n  expanded: boolean\n  expandIcon: IconValue\n  readonly: boolean\n}\n\nexport type VExpansionPanelTitleSlots = {\n  default: ExpansionPanelTitleSlot\n  actions: ExpansionPanelTitleSlot\n}\n\nexport const makeVExpansionPanelTitleProps = propsFactory({\n  color: String,\n  expandIcon: {\n    type: IconValue,\n    default: '$expand',\n  },\n  collapseIcon: {\n    type: IconValue,\n    default: '$collapse',\n  },\n  hideActions: Boolean,\n  focusable: Boolean,\n  static: Boolean,\n  ripple: {\n    type: [Boolean, Object] as PropType<RippleDirectiveBinding['value']>,\n    default: false,\n  },\n  readonly: Boolean,\n  hover: {\n    type: Boolean,\n    default: true,\n  },\n\n  ...makeComponentProps(),\n  ...makeDimensionProps(),\n}, 'VExpansionPanelTitle')\n\nexport const VExpansionPanelTitle = genericComponent<VExpansionPanelTitleSlots>()({\n  name: 'VExpansionPanelTitle',\n\n  directives: { vRipple },\n\n  props: makeVExpansionPanelTitleProps(),\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    const { dimensionStyles } = useDimension(props)\n\n    const slotProps = computed(() => ({\n      collapseIcon: props.collapseIcon,\n      disabled: expansionPanel.disabled.value,\n      expanded: expansionPanel.isSelected.value,\n      expandIcon: props.expandIcon,\n      readonly: props.readonly,\n    }))\n\n    const icon = toRef(() => expansionPanel.isSelected.value ? props.collapseIcon : props.expandIcon)\n\n    useRender(() => (\n      <button\n        class={[\n          'v-expansion-panel-title',\n          {\n            'v-expansion-panel-title--active': expansionPanel.isSelected.value,\n            'v-expansion-panel-title--focusable': props.focusable,\n            'v-expansion-panel-title--static': props.static,\n            'v-expansion-panel-title--hover': props.hover,\n          },\n          backgroundColorClasses.value,\n          props.class,\n        ]}\n        style={[\n          backgroundColorStyles.value,\n          dimensionStyles.value,\n          props.style,\n        ]}\n        type=\"button\"\n        tabindex={ expansionPanel.disabled.value ? -1 : undefined }\n        disabled={ expansionPanel.disabled.value }\n        aria-expanded={ expansionPanel.isSelected.value }\n        onClick={ !props.readonly ? expansionPanel.toggle : undefined }\n        v-ripple={ props.ripple }\n      >\n        <span class=\"v-expansion-panel-title__overlay\" />\n\n        { slots.default?.(slotProps.value) }\n\n        { !props.hideActions && (\n          <VDefaultsProvider\n            defaults={{\n              VIcon: {\n                icon: icon.value,\n              },\n            }}\n          >\n            <span class=\"v-expansion-panel-title__icon\">\n              { slots.actions?.(slotProps.value) ?? <VIcon /> }\n            </span>\n          </VDefaultsProvider>\n        )}\n      </button>\n    ))\n\n    return {}\n  },\n})\n\nexport type VExpansionPanelTitle = InstanceType<typeof VExpansionPanelTitle>\n","// Components\nimport { VExpansionPanelSymbol } from './shared'\nimport { makeVExpansionPanelTextProps, VExpansionPanelText } from './VExpansionPanelText'\nimport { makeVExpansionPanelTitleProps, VExpansionPanelTitle } from './VExpansionPanelTitle'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeGroupItemProps, useGroupItem } from '@/composables/group'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed, provide, toRef } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVExpansionPanelProps = propsFactory({\n  title: String,\n  text: String,\n  bgColor: String,\n\n  ...makeElevationProps(),\n  ...makeGroupItemProps(),\n  ...makeRoundedProps(),\n  ...makeTagProps(),\n  ...makeVExpansionPanelTitleProps(),\n  ...makeVExpansionPanelTextProps(),\n}, 'VExpansionPanel')\n\nexport type VExpansionPanelSlots = {\n  default: never\n  title: never\n  text: never\n}\n\nexport const VExpansionPanel = genericComponent<VExpansionPanelSlots>()({\n  name: 'VExpansionPanel',\n\n  props: makeVExpansionPanelProps(),\n\n  emits: {\n    'group:selected': (val: { value: boolean }) => true,\n  },\n\n  setup (props, { slots }) {\n    const groupItem = useGroupItem(props, VExpansionPanelSymbol)\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.bgColor)\n    const { elevationClasses } = useElevation(props)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n    const isDisabled = toRef(() => groupItem?.disabled.value || props.disabled)\n\n    const selectedIndices = computed(() => groupItem.group.items.value.reduce<number[]>((arr, item, index) => {\n      if (groupItem.group.selected.value.includes(item.id)) arr.push(index)\n      return arr\n    }, []))\n\n    const isBeforeSelected = computed(() => {\n      const index = groupItem.group.items.value.findIndex(item => item.id === groupItem.id)\n      return !groupItem.isSelected.value &&\n        selectedIndices.value.some(selectedIndex => selectedIndex - index === 1)\n    })\n\n    const isAfterSelected = computed(() => {\n      const index = groupItem.group.items.value.findIndex(item => item.id === groupItem.id)\n      return !groupItem.isSelected.value &&\n        selectedIndices.value.some(selectedIndex => selectedIndex - index === -1)\n    })\n\n    provide(VExpansionPanelSymbol, groupItem)\n\n    useRender(() => {\n      const hasText = !!(slots.text || props.text)\n      const hasTitle = !!(slots.title || props.title)\n\n      const expansionPanelTitleProps = VExpansionPanelTitle.filterProps(props)\n      const expansionPanelTextProps = VExpansionPanelText.filterProps(props)\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': isDisabled.value,\n            },\n            roundedClasses.value,\n            backgroundColorClasses.value,\n            props.class,\n          ]}\n          style={[\n            backgroundColorStyles.value,\n            roundedStyles.value,\n            props.style,\n          ]}\n        >\n          <div\n            class={[\n              'v-expansion-panel__shadow',\n              ...elevationClasses.value,\n            ]}\n          />\n\n          <VDefaultsProvider\n            defaults={{\n              VExpansionPanelTitle: {\n                ...expansionPanelTitleProps,\n              },\n              VExpansionPanelText: {\n                ...expansionPanelTextProps,\n              },\n            }}\n          >\n            { hasTitle && (\n              <VExpansionPanelTitle key=\"title\">\n                { slots.title ? slots.title() : props.title }\n              </VExpansionPanelTitle>\n            )}\n\n            { hasText && (\n              <VExpansionPanelText key=\"text\">\n                { slots.text ? slots.text() : props.text }\n              </VExpansionPanelText>\n            )}\n\n            { slots.default?.() }\n          </VDefaultsProvider>\n        </props.tag>\n      )\n    })\n\n    return {\n      groupItem,\n    }\n  },\n})\n\nexport type VExpansionPanel = InstanceType<typeof VExpansionPanel>\n","// Styles\nimport './VExpansionPanel.sass'\n\n// Components\nimport { VExpansionPanelSymbol } from './shared'\nimport { makeVExpansionPanelProps } from './VExpansionPanel'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeGroupProps, useGroup } from '@/composables/group'\nimport { useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { convertToUnit, genericComponent, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { GenericProps } from '@/util'\n\nconst allowedVariants = ['default', 'accordion', 'inset', 'popout'] as const\n\ntype Variant = typeof allowedVariants[number]\n\nexport type VExpansionPanelSlot = {\n  prev: () => void\n  next: () => void\n}\n\nexport type VExpansionPanelSlots = {\n  default: VExpansionPanelSlot\n}\n\nexport const makeVExpansionPanelsProps = propsFactory({\n  flat: Boolean,\n  gap: [String, Number],\n  noDivider: Boolean,\n  rounded: {\n    type: [Boolean, Number, String, Array] as PropType<boolean | number | string | (number | string)[]>,\n    default: undefined,\n  },\n\n  ...makeGroupProps(),\n  ...pick(makeVExpansionPanelProps(), [\n    'bgColor',\n    'collapseIcon',\n    'color',\n    'eager',\n    'elevation',\n    'expandIcon',\n    'focusable',\n    'hideActions',\n    'hover',\n    'readonly',\n    'ripple',\n    'static',\n    'tile',\n  ]),\n  ...makeThemeProps(),\n  ...makeComponentProps(),\n  ...makeTagProps(),\n\n  variant: {\n    type: String as PropType<Variant>,\n    default: 'default',\n    validator: (v: any) => allowedVariants.includes(v),\n  },\n}, 'VExpansionPanels')\n\nexport const VExpansionPanels = genericComponent<new <TModel>(\n  props: {\n    modelValue?: TModel\n    'onUpdate:modelValue'?: (value: TModel) => void\n  },\n  slots: VExpansionPanelSlots\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VExpansionPanels',\n\n  props: makeVExpansionPanelsProps(),\n\n  emits: {\n    'update:modelValue': (val: unknown) => true,\n  },\n\n  setup (props, { slots }) {\n    const { next, prev } = useGroup(props, VExpansionPanelSymbol)\n\n    const { themeClasses } = provideTheme(props)\n\n    const outerRounded = toRef(() => Array.isArray(props.rounded) ? props.rounded[0] : props.rounded)\n    const innerRounded = toRef(() => Array.isArray(props.rounded) ? props.rounded[1] : undefined)\n    const { roundedClasses, roundedStyles } = useRounded(outerRounded)\n\n    const variantClass = toRef(() => props.variant && `v-expansion-panels--variant-${props.variant}`)\n\n    provideDefaults({\n      VExpansionPanel: {\n        bgColor: toRef(() => props.bgColor),\n        collapseIcon: toRef(() => props.collapseIcon),\n        color: toRef(() => props.color),\n        eager: toRef(() => props.eager),\n        elevation: toRef(() => props.elevation),\n        expandIcon: toRef(() => props.expandIcon),\n        focusable: toRef(() => props.focusable),\n        hideActions: toRef(() => props.hideActions),\n        hover: toRef(() => props.hover),\n        readonly: toRef(() => props.readonly),\n        ripple: toRef(() => props.ripple),\n        static: toRef(() => props.static),\n      },\n    })\n\n    useRender(() => (\n      <props.tag\n        class={[\n          'v-expansion-panels',\n          {\n            'v-expansion-panels--flat': props.flat,\n            'v-expansion-panels--tile': props.tile,\n            'v-expansion-panels--no-divider': props.noDivider || !!props.gap,\n          },\n          themeClasses.value,\n          roundedClasses.value,\n          variantClass.value,\n          props.class,\n        ]}\n        style={[\n          roundedStyles.value,\n          {\n            '--v-expansion-panels-inner-radius': convertToUnit(innerRounded.value),\n            gap: props.gap ? convertToUnit(props.gap) : undefined,\n          },\n          props.style,\n        ]}\n      >\n        { slots.default?.({ prev, next }) }\n      </props.tag>\n    ))\n\n    return {\n      next,\n      prev,\n    }\n  },\n})\n\nexport type VExpansionPanels = InstanceType<typeof VExpansionPanels>\n","// Styles\nimport './VFab.sass'\n\n// Components\nimport { makeVBtnProps, VBtn } from '@/components/VBtn/VBtn'\n\n// Composables\nimport { makeLayoutItemProps, useLayoutItem } from '@/composables/layout'\nimport { makeLocationProps } from '@/composables/location'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { useToggleScope } from '@/composables/toggleScope'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { computed, ref, shallowRef, toRef, watchEffect } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { ComputedRef } from 'vue'\nimport type { Position } from '@/composables/layout'\n\nexport const makeVFabProps = propsFactory({\n  app: Boolean,\n  appear: Boolean,\n  extended: Boolean,\n  layout: Boolean,\n  offset: Boolean,\n  modelValue: {\n    type: Boolean,\n    default: true,\n  },\n\n  ...omit(makeVBtnProps({ active: true }), ['location', 'spaced']),\n  ...makeLayoutItemProps(),\n  ...makeLocationProps(),\n  ...makeTransitionProps({ transition: 'fab-transition' }),\n}, 'VFab')\n\nexport const VFab = genericComponent()({\n  name: 'VFab',\n\n  props: makeVFabProps(),\n\n  emits: {\n    'update:modelValue': (value: boolean) => true,\n  },\n\n  setup (props, { slots }) {\n    const model = useProxiedModel(props, 'modelValue')\n    const height = shallowRef(56)\n    const layoutItemStyles = ref()\n\n    const { resizeRef } = useResizeObserver(entries => {\n      if (!entries.length) return\n      height.value = entries[0].target.clientHeight\n    })\n\n    const hasPosition = toRef(() => props.app || props.absolute)\n\n    const position = computed(() => {\n      if (!hasPosition.value) return false\n\n      return props.location?.split(' ').shift() ?? 'bottom'\n    }) as ComputedRef<Position>\n\n    const orientation = computed(() => {\n      if (!hasPosition.value) return false\n\n      return props.location?.split(' ')[1] ?? 'end'\n    })\n\n    useToggleScope(() => props.app, () => {\n      const layout = useLayoutItem({\n        id: props.name,\n        order: computed(() => parseInt(props.order, 10)),\n        position,\n        layoutSize: computed(() => props.layout ? height.value + 24 : 0),\n        elementSize: computed(() => height.value + 24),\n        active: computed(() => props.app && model.value),\n        absolute: toRef(() => props.absolute),\n      })\n\n      watchEffect(() => {\n        layoutItemStyles.value = layout.layoutItemStyles.value\n      })\n    })\n\n    const vFabRef = ref()\n\n    useRender(() => {\n      const btnProps = VBtn.filterProps(props)\n\n      return (\n        <div\n          ref={ vFabRef }\n          class={[\n            'v-fab',\n            {\n              'v-fab--absolute': props.absolute,\n              'v-fab--app': !!props.app,\n              'v-fab--extended': props.extended,\n              'v-fab--offset': props.offset,\n              [`v-fab--${position.value}`]: hasPosition.value,\n              [`v-fab--${orientation.value}`]: hasPosition.value,\n            },\n            props.class,\n          ]}\n          style={[\n            props.app\n              ? { ...layoutItemStyles.value }\n              : {\n                height: props.absolute\n                  ? '100%'\n                  : 'inherit',\n              },\n            props.style,\n          ]}\n        >\n          <div class=\"v-fab__container\">\n            <MaybeTransition\n              appear={ props.appear }\n              transition={ props.transition }\n            >\n              <VBtn\n                v-show={ props.active }\n                ref={ resizeRef }\n                { ...btnProps }\n                active={ undefined }\n                location={ undefined }\n                v-slots={ slots }\n              />\n            </MaybeTransition>\n          </div>\n        </div>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VFab = InstanceType<typeof VFab>\n","// Types\ntype FileSelection = { file: File, path: string }\n\nexport function useFileDrop () {\n  function getTransfer (e: DragEvent | ClipboardEvent): DataTransfer | null {\n    return (e as DragEvent).dataTransfer ?? (e as ClipboardEvent).clipboardData ?? null\n  }\n\n  function hasFilesOrFolders (e: DragEvent | ClipboardEvent): boolean {\n    const transfer = getTransfer(e)\n    const entries = [...transfer?.items ?? []]\n      .filter(x => x.kind === 'file')\n      .map(x => x.webkitGetAsEntry())\n      .filter(Boolean)\n\n    return entries.length > 0 || [...transfer?.files ?? []].length > 0\n  }\n\n  function isDraggingFiles (e: DragEvent): boolean {\n    return e.dataTransfer?.types.includes('Files') ?? false\n  }\n\n  async function handleDrop (e: DragEvent | ClipboardEvent) {\n    const transfer = getTransfer(e)\n    const result: File[] = []\n\n    const entries = [...transfer?.items ?? []]\n      .filter(x => x.kind === 'file')\n      .map(x => x.webkitGetAsEntry())\n      .filter(Boolean)\n\n    if (entries.length) {\n      for (const entry of entries) {\n        const files = await traverseFileTree(entry!, appendIfDirectory('.', entry!))\n        result.push(...files.map(x => x.file))\n      }\n    } else {\n      result.push(...[...transfer?.files ?? []])\n    }\n\n    return result\n  }\n\n  return {\n    handleDrop,\n    hasFilesOrFolders,\n    isDraggingFiles,\n  }\n}\n\nfunction traverseFileTree (item: FileSystemEntry, path = ''): Promise<FileSelection[]> {\n  return new Promise<FileSelection[]>((resolve, reject) => {\n    if (item.isFile) {\n      const fileEntry = item as FileSystemFileEntry\n      fileEntry.file((file: File) => resolve([{ file, path }]), reject)\n    } else if (item.isDirectory) {\n      const directoryReader = (item as FileSystemDirectoryEntry).createReader()\n      directoryReader.readEntries(async entries => {\n        const files = [] as FileSelection[]\n        for (const entry of entries) {\n          files.push(...(await traverseFileTree(entry, appendIfDirectory(path, entry))))\n        }\n        resolve(files)\n      })\n    }\n  })\n}\n\nfunction appendIfDirectory (path: string, item: FileSystemEntry) {\n  return item.isDirectory\n    ? `${path}/${item.name}`\n    : path\n}\n","// Utilities\nimport { computed } from 'vue'\nimport { propsFactory } from '@/util'\n\nexport interface FileFilterProps {\n  filterByType?: string\n}\n\nexport type FileFilterResult = {\n  accepted: File[]\n  rejected: File[]\n}\n\n// Composables\nexport const makeFileFilterProps = propsFactory({\n  filterByType: String,\n}, 'file-accept')\n\nexport function useFileFilter (props: FileFilterProps) {\n  const fileFilter = computed(() => props.filterByType ? createFilter(props.filterByType) : null)\n\n  function filterAccepted (files: File[]): FileFilterResult {\n    if (fileFilter.value) {\n      const accepted = files.filter(fileFilter.value)\n      return {\n        accepted,\n        rejected: files.filter(f => !accepted.includes(f)),\n      }\n    }\n    return {\n      accepted: files,\n      rejected: [],\n    }\n  }\n\n  return {\n    filterAccepted,\n  }\n}\n\nfunction createFilter (v: string): ((v: File) => boolean) {\n  const types = v.split(',').map(x => x.trim().toLowerCase())\n  const extensionsToMatch = types.filter(x => x.startsWith('.'))\n  const wildcards = types.filter(x => x.endsWith('/*'))\n  const typesToMatch = types.filter(x => !extensionsToMatch.includes(x) && !wildcards.includes(x))\n\n  return (file: File): boolean => {\n    const extension = file.name.split('.').at(-1)?.toLowerCase() ?? ''\n    const typeGroup = file.type.split('/').at(0)?.toLowerCase() ?? ''\n    return typesToMatch.includes(file.type) ||\n      extensionsToMatch.includes(`.${extension}`) ||\n      wildcards.includes(`${typeGroup}/*`)\n  }\n}\n","// Styles\nimport './VFileInput.sass'\n\n// Components\nimport { VChip } from '@/components/VChip'\nimport { VCounter } from '@/components/VCounter'\nimport { VField } from '@/components/VField'\nimport { makeVFieldProps } from '@/components/VField/VField'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\n\n// Composables\nimport { injectNestedDefaults } from '@/composables/defaults'\nimport { useFileDrop } from '@/composables/fileDrop'\nimport { makeFileFilterProps, useFileFilter } from '@/composables/fileFilter'\nimport { useFocus } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, ref, shallowRef, toRef, watch } from 'vue'\nimport {\n  callEvent,\n  filterInputAttrs,\n  genericComponent,\n  getActiveElement,\n  humanReadableFileSize,\n  isBoolean,\n  isObject,\n  omit,\n  propsFactory,\n  useRender,\n  wrapInArray,\n} from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\n\nexport type VFileInputSlots = VInputSlots & VFieldSlots & {\n  counter: never\n  selection: {\n    fileNames: string[]\n    totalBytes: number\n    totalBytesReadable: string\n  }\n}\n\nexport const makeVFileInputProps = propsFactory({\n  chips: Boolean,\n  counter: {\n    type: Boolean as PropType<boolean | null>,\n    default: undefined,\n  },\n  counterSizeString: {\n    type: String,\n    default: '$vuetify.fileInput.counterSize',\n  },\n  counterString: {\n    type: String,\n    default: '$vuetify.fileInput.counter',\n  },\n  hideInput: Boolean,\n  multiple: Boolean,\n  placeholder: String,\n  persistentPlaceholder: Boolean,\n  showSize: {\n    type: [Boolean, Number, String] as PropType<boolean | 1000 | 1024>,\n    default: false,\n    validator: (v: boolean | number) => {\n      return (\n        isBoolean(v) ||\n        [1000, 1024].includes(Number(v))\n      )\n    },\n  },\n  truncateLength: {\n    type: [Number, String],\n    default: 22,\n  },\n\n  ...omit(makeVInputProps({ prependIcon: '$file' }), ['direction']),\n\n  modelValue: {\n    type: [Array, Object] as PropType<File[] | File | null>,\n    default: (props: any) => props.multiple ? [] : null,\n    validator: (val: any) => wrapInArray(val).every(isObject),\n  },\n\n  ...makeFileFilterProps(),\n  ...makeVFieldProps({ clearable: true }),\n}, 'VFileInput')\n\nexport const VFileInput = genericComponent<VFileInputSlots>()({\n  name: 'VFileInput',\n\n  inheritAttrs: false,\n\n  props: makeVFileInputProps(),\n\n  emits: {\n    'click:control': (e: MouseEvent) => true,\n    'mousedown:control': (e: MouseEvent) => true,\n    'update:focused': (focused: boolean) => true,\n    'update:modelValue': (files: File | File[]) => true,\n    rejected: (files: File[]) => true,\n  },\n\n  setup (props, { attrs, emit, slots }) {\n    const { t } = useLocale()\n    const { filterAccepted } = useFileFilter(props)\n    const model = useProxiedModel(\n      props,\n      'modelValue',\n      props.modelValue,\n      val => wrapInArray(val),\n      val => (!props.multiple && Array.isArray(val)) ? val[0] : val,\n    )\n    const { isFocused, focus, blur } = useFocus(props)\n    const chipDefaults = injectNestedDefaults<VChip['$props']>('VChip')\n    const base = computed(() => !isBoolean(props.showSize) ? 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      const truncatedText = truncateText(name)\n      return !props.showSize\n        ? truncatedText\n        : `${truncatedText} (${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    const vInputRef = ref<VInput>()\n    const vFieldRef = ref<VField>()\n    const inputRef = ref<HTMLInputElement>()\n    const isActive = toRef(() => (\n      props.persistentPlaceholder ||\n      isFocused.value ||\n      props.active\n    ))\n    const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant))\n    const isDragging = shallowRef(false)\n    const { handleDrop, hasFilesOrFolders, isDraggingFiles } = useFileDrop()\n\n    function onFocus () {\n      if (inputRef.value !== getActiveElement()) {\n        inputRef.value?.focus()\n      }\n\n      if (!isFocused.value) focus()\n    }\n\n    function onClickPrepend (e: MouseEvent) {\n      inputRef.value?.click()\n    }\n\n    function onControlMousedown (e: MouseEvent) {\n      emit('mousedown:control', e)\n    }\n\n    function onControlClick (e: MouseEvent) {\n      inputRef.value?.click()\n\n      emit('click:control', e)\n    }\n\n    function onClear (e: MouseEvent) {\n      e.stopPropagation()\n\n      onFocus()\n\n      nextTick(() => {\n        model.value = []\n\n        callEvent(props['onClick:clear'], e)\n      })\n    }\n    function truncateText (str: string) {\n      if (str.length < Number(props.truncateLength)) return str\n      const charsKeepOneSide = Math.floor((Number(props.truncateLength) - 1) / 2)\n      return `${str.slice(0, charsKeepOneSide)}…${str.slice(str.length - charsKeepOneSide)}`\n    }\n\n    function onDragover (e: DragEvent) {\n      if (props.disabled || props.readonly) return\n      e.preventDefault()\n      e.stopImmediatePropagation()\n      if (isDraggingFiles(e)) isDragging.value = true\n    }\n\n    function onDragleave (e: DragEvent) {\n      e.preventDefault()\n      const container = e.currentTarget as HTMLElement\n      if (!container.contains(e.relatedTarget as Node)) {\n        isDragging.value = false\n      }\n    }\n\n    async function onDrop (e: DragEvent) {\n      e.preventDefault()\n      e.stopImmediatePropagation()\n      isDragging.value = false\n\n      if (!inputRef.value || props.disabled || props.readonly || !hasFilesOrFolders(e)) return\n\n      const allDroppedFiles = await handleDrop(e)\n      selectAccepted(allDroppedFiles)\n    }\n\n    async function onPaste (e: ClipboardEvent) {\n      if (!inputRef.value || props.disabled || props.readonly || !hasFilesOrFolders(e)) return\n      e.preventDefault()\n\n      const files = await handleDrop(e)\n      if (files.length) {\n        selectAccepted(files)\n      }\n    }\n\n    function onFileSelection (e: Event) {\n      if (!e.target || (e as any).repack) return // prevent loop\n\n      if (!props.filterByType) {\n        const target = e.target as HTMLInputElement\n        model.value = [...target.files ?? []]\n      } else {\n        selectAccepted([...(e as any).target.files])\n      }\n    }\n\n    function selectAccepted (files: File[]) {\n      const dataTransfer = new DataTransfer()\n      const { accepted, rejected } = filterAccepted(files)\n\n      if (rejected.length) {\n        emit('rejected', rejected)\n      }\n\n      for (const file of accepted) {\n        dataTransfer.items.add(file)\n      }\n\n      inputRef.value!.files = dataTransfer.files\n      model.value = [...dataTransfer.files]\n\n      const event = new Event('change', { bubbles: true }) as any\n      event.repack = true\n      inputRef.value!.dispatchEvent(event)\n    }\n\n    watch(model, newValue => {\n      const hasModelReset = !Array.isArray(newValue) || !newValue.length\n\n      if (hasModelReset && inputRef.value) {\n        inputRef.value.value = ''\n      }\n    })\n\n    useRender(() => {\n      const hasCounter = !!(slots.counter || props.counter !== undefined)\n      const counterActive = props.counter !== false && props.counter !== null && !!model.value?.length\n      const hasDetails = props.hideDetails !== true && !!(slots.details || hasCounter)\n      const detailsActive = !!(slots.details || (hasCounter && counterActive))\n      const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n      const { modelValue: _, ...inputProps } = VInput.filterProps(props)\n      const fieldProps = {\n        ...VField.filterProps(props),\n        'onClick:clear': onClear,\n      }\n\n      const expectsDirectory = attrs.webkitdirectory !== undefined && attrs.webkitdirectory !== false\n      const acceptFallback = attrs.accept ? String(attrs.accept) : undefined\n      const inputAccept = expectsDirectory ? undefined : (props.filterByType ?? acceptFallback)\n\n      const showPlaceholder = !!props.placeholder && !model.value?.length &&\n        (isFocused.value || props.persistentPlaceholder || !props.label)\n\n      return (\n        <VInput\n          ref={ vInputRef }\n          modelValue={ props.multiple ? model.value : model.value[0] }\n          class={[\n            'v-file-input',\n            {\n              'v-file-input--chips': !!props.chips,\n              'v-file-input--dragging': isDragging.value,\n              'v-file-input--hide': props.hideInput,\n              'v-input--plain-underlined': isPlainOrUnderlined.value,\n            },\n            props.class,\n          ]}\n          style={ props.style }\n          onClick:prepend={ onClickPrepend }\n          { ...rootAttrs }\n          { ...inputProps }\n          centerAffix={ !isPlainOrUnderlined.value }\n          focused={ isFocused.value }\n          detailsActive={ detailsActive }\n          indentDetails={ props.indentDetails ?? !isPlainOrUnderlined.value }\n        >\n          {{\n            ...slots,\n            default: ({\n              id,\n              isDisabled,\n              isDirty,\n              isReadonly,\n              isValid,\n              hasDetails,\n            }) => (\n              <VField\n                ref={ vFieldRef }\n                prependIcon={ props.prependIcon }\n                onMousedown={ onControlMousedown }\n                onClick={ onControlClick }\n                onClick:prependInner={ props['onClick:prependInner'] }\n                onClick:appendInner={ props['onClick:appendInner'] }\n                { ...fieldProps }\n                id={ id.value }\n                active={ isActive.value || isDirty.value }\n                dirty={ isDirty.value || props.dirty }\n                disabled={ isDisabled.value }\n                focused={ isFocused.value }\n                details={ hasDetails.value }\n                error={ isValid.value === false }\n                onDragleave={ onDragleave }\n                onDragover={ onDragover }\n                onDrop={ onDrop }\n              >\n                {{\n                  ...slots,\n                  default: ({\n                    props: { class: fieldClass, ...slotProps },\n                    controlRef,\n                  }) => (\n                    <>\n                      <input\n                        ref={ val => inputRef.value = controlRef.value = val as HTMLInputElement }\n                        type=\"file\"\n                        accept={ inputAccept }\n                        readonly={ isReadonly.value }\n                        disabled={ isDisabled.value }\n                        multiple={ props.multiple }\n                        name={ props.name }\n                        onClick={ e => {\n                          e.stopPropagation()\n\n                          if (isReadonly.value) e.preventDefault()\n\n                          onFocus()\n                        }}\n                        onChange={ onFileSelection }\n                        onFocus={ onFocus }\n                        onBlur={ blur }\n                        onPaste={ onPaste }\n                        { ...slotProps }\n                        { ...inputAttrs }\n                      />\n\n                      { showPlaceholder\n                        ? (\n                          <input\n                            class={ fieldClass }\n                            inert\n                            placeholder={ props.placeholder }\n                            readonly\n                            form=\"\"\n                            type=\"text\"\n                          />\n                        )\n                        : (\n                          <div class={ fieldClass }>\n                            { !!model.value?.length && !props.hideInput && (\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={ chipDefaults.value?.size ?? 'small' }\n                                  text={ text }\n                                />\n                              ))\n                              : fileNames.value.join(', ')\n                            )}\n                          </div>\n                        )}\n                    </>\n                  ),\n                }}\n              </VField>\n            ),\n            details: hasDetails ? slotProps => (\n              <>\n                { slots.details?.(slotProps) }\n\n                { hasCounter && (\n                  <>\n                    <span />\n\n                    <VCounter\n                      active={ counterActive }\n                      value={ counterValue.value }\n                      disabled={ props.disabled }\n                      v-slots:default={ slots.counter }\n                    />\n                  </>\n                )}\n              </>\n            ) : undefined,\n          }}\n        </VInput>\n      )\n    })\n\n    return forwardRefs({}, vInputRef, vFieldRef, inputRef)\n  },\n})\n\nexport type VFileInput = InstanceType<typeof VFileInput>\n","// Components\nimport { VAvatar } from '@/components/VAvatar/VAvatar'\nimport { VBtn } from '@/components/VBtn/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider/VDefaultsProvider'\nimport { makeVListItemProps, VListItem } from '@/components/VList/VListItem'\n\n// Composables\nimport { injectNestedDefaults } from '@/composables/defaults'\n\n// Utilities\nimport { computed, ref, watchEffect } from 'vue'\nimport { genericComponent, humanReadableFileSize, isBoolean, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VListItemSlots } from '@/components/VList/VListItem'\n\nexport type VFileUploadItemSlots = {\n  clear: {\n    props: { onClick: () => void }\n  }\n} & VListItemSlots\n\nexport const makeVFileUploadItemProps = propsFactory({\n  clearable: Boolean,\n  file: {\n    type: Object as PropType<File>,\n    default: null,\n  },\n  fileIcon: {\n    type: String,\n    // TODO: setup up a proper aliased icon\n    default: 'mdi-file-document',\n  },\n  showSize: Boolean,\n\n  ...makeVListItemProps({\n    border: true,\n    rounded: true,\n    lines: 'two' as const,\n  }),\n}, 'VFileUploadItem')\n\nexport const VFileUploadItem = genericComponent<VFileUploadItemSlots>()({\n  name: 'VFileUploadItem',\n\n  props: makeVFileUploadItemProps(),\n\n  emits: {\n    'click:remove': () => true,\n    click: (e: MouseEvent | KeyboardEvent) => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const btnDefaults = injectNestedDefaults<VBtn['$props']>('VBtn')\n    const preview = ref()\n    const base = computed(() => !isBoolean(props.showSize) ? props.showSize : undefined)\n\n    function onClickRemove () {\n      emit('click:remove')\n    }\n\n    watchEffect(() => {\n      preview.value = props.file?.type.startsWith('image') ? URL.createObjectURL(props.file) : undefined\n    })\n\n    useRender(() => {\n      const listItemProps = VListItem.filterProps(props)\n\n      return (\n        <VListItem\n          { ...listItemProps }\n          class={[\n            'v-file-upload-item',\n            props.class,\n          ]}\n          title={ props.title ?? props.file?.name }\n          subtitle={ props.showSize ? humanReadableFileSize(props.file?.size, base.value) : props.file?.type }\n          style={ props.style }\n        >\n          {{\n            ...slots,\n            title: slots.title ?? (() => props?.title ?? props.file?.name),\n            prepend: slotProps => (\n              <>\n                { !slots.prepend ? (\n                  <VAvatar\n                    icon={ props.fileIcon }\n                    image={ preview.value }\n                    rounded\n                  />\n                ) : (\n                  <VDefaultsProvider\n                    defaults={{\n                      VAvatar: {\n                        image: preview.value,\n                        icon: !preview.value ? props.fileIcon : undefined,\n                        rounded: true,\n                      },\n                    }}\n                  >\n                    { slots.prepend?.(slotProps) ?? (\n                      <VAvatar />\n                    )}\n                  </VDefaultsProvider>\n                )}\n              </>\n            ),\n            append: slotProps => (\n              <>\n                { props.clearable && (\n                  <>\n                    { !slots.clear ? (\n                      <VBtn\n                        icon=\"$clear\"\n                        density=\"comfortable\"\n                        variant={ btnDefaults.value?.variant ?? 'text' }\n                        onClick={ onClickRemove }\n                      />\n                    ) : (\n                      <VDefaultsProvider\n                        defaults={{\n                          VBtn: {\n                            icon: '$clear',\n                            density: 'comfortable',\n                            variant: btnDefaults.value?.variant ?? 'text',\n                          },\n                        }}\n                      >\n                        { slots.clear?.({\n                          ...slotProps,\n                          props: { onClick: onClickRemove },\n                        }) ?? (<VBtn />)}\n                      </VDefaultsProvider>\n                    )}\n                  </>\n                )}\n\n                { slots.append?.(slotProps) }\n              </>\n            ),\n          }}\n        </VListItem>\n      )\n    })\n  },\n})\n\nexport type VFileUploadItem = InstanceType<typeof VFileUploadItem>\n","let nextId = 0\nconst fileIds = new WeakMap<File, number>()\n\nexport function getFileKey (file: File): number {\n  let id = fileIds.get(file)\n  if (id == null) {\n    id = ++nextId\n    fileIds.set(file, id)\n  }\n  return id\n}\n","// Components\nimport { VFileUploadItem } from './VFileUploadItem'\nimport { VBtn } from '@/components/VBtn/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider/VDefaultsProvider'\nimport { makeVDividerProps, VDivider } from '@/components/VDivider/VDivider'\nimport { VIcon } from '@/components/VIcon/VIcon'\nimport { VOverlay } from '@/components/VOverlay/VOverlay'\nimport { makeVSheetProps, VSheet } from '@/components/VSheet/VSheet'\n\n// Composables\nimport { injectNestedDefaults } from '@/composables/defaults'\nimport { makeDelayProps } from '@/composables/delay'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { useFileDrop } from '@/composables/fileDrop'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { inject, ref, shallowRef, toRef } from 'vue'\nimport { getFileKey } from './fileKey'\nimport { genericComponent, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType, Ref } from 'vue'\n\nexport interface VFileUploadContext {\n  files: Ref<readonly File[]>\n  disabled: Ref<boolean>\n  readonly: Ref<boolean>\n  error: Ref<boolean>\n  onDrop: (files: File[]) => void\n  onClickBrowse: () => void\n  onClickRemove: (index: number) => void\n}\n\nexport const VFileUploadKey: InjectionKey<VFileUploadContext> = Symbol.for('vuetify:file-upload')\n\nexport type VFileUploadDropzoneSlots = {\n  default: {\n    isDragging: boolean\n    hasFiles: boolean\n    files: readonly File[]\n    props: { onClick: () => void }\n  }\n  browse: {\n    props: { onClick: (e: MouseEvent) => void }\n  }\n  icon: never\n  title: never\n  divider: never\n  single: {\n    file: File\n    props: { 'onClick:remove': () => void }\n  }\n  item: {\n    file: File\n    props: { 'onClick:remove': () => void }\n  }\n  input: never\n  loader: never\n}\n\nexport const makeVFileUploadDropzoneProps = propsFactory({\n  browseText: {\n    type: String,\n    default: '$vuetify.fileUpload.browse',\n  },\n  dividerText: {\n    type: String,\n    default: '$vuetify.fileUpload.divider',\n  },\n  title: {\n    type: String,\n    default: '$vuetify.fileUpload.title',\n  },\n  subtitle: String,\n  icon: {\n    type: IconValue,\n    default: '$upload',\n  },\n  clearable: Boolean,\n  disabled: Boolean,\n  readonly: Boolean,\n  error: Boolean,\n  hideBrowse: Boolean,\n  insetFileList: Boolean,\n  multiple: Boolean,\n  scrim: {\n    type: [Boolean, String],\n    default: true,\n  },\n  showSize: Boolean,\n\n  ...makeDelayProps(),\n  ...makeDensityProps(),\n  ...pick(makeVDividerProps({\n    length: 150,\n  }), ['length', 'thickness', 'opacity']),\n  ...makeVSheetProps(),\n\n  modelValue: {\n    type: Array as PropType<File[]>,\n    default: () => [],\n  },\n}, 'VFileUploadDropzone')\n\nexport const VFileUploadDropzone = genericComponent<VFileUploadDropzoneSlots>()({\n  name: 'VFileUploadDropzone',\n\n  props: makeVFileUploadDropzoneProps(),\n\n  emits: {\n    'click:browse': () => true,\n    'click:remove': (index: number) => true,\n    drop: (files: File[]) => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const { t } = useLocale()\n    const btnDefaults = injectNestedDefaults<VBtn['$props']>('VBtn')\n    const insetBrowseVariant = toRef(() => btnDefaults.value?.variant ?? 'text')\n    const browseSize = toRef(() => btnDefaults.value?.size ?? 'large')\n    const browseVariant = toRef(() => btnDefaults.value?.variant ?? 'tonal')\n    const { densityClasses } = useDensity(props)\n    const { handleDrop, hasFilesOrFolders, isDraggingFiles } = useFileDrop()\n    const context = inject(VFileUploadKey, null)\n    const vSheetRef = ref<VSheet>()\n    const isDragging = shallowRef(false)\n    const isDisabled = toRef(() => context?.disabled.value ?? props.disabled)\n    const isReadonly = toRef(() => context?.readonly.value ?? props.readonly)\n    const isInteractive = toRef(() => !isDisabled.value && !isReadonly.value)\n\n    function onDragover (e: DragEvent) {\n      if (!isInteractive.value) return\n      e.preventDefault()\n      e.stopImmediatePropagation()\n      if (isDraggingFiles(e)) isDragging.value = true\n    }\n\n    function onDragleave (e: DragEvent) {\n      e.preventDefault()\n      const container = e.currentTarget as HTMLElement\n      if (!container.contains(e.relatedTarget as Node)) {\n        isDragging.value = false\n      }\n    }\n\n    async function onDrop (e: DragEvent) {\n      e.preventDefault()\n      e.stopImmediatePropagation()\n\n      isDragging.value = false\n\n      if (!isInteractive.value || !hasFilesOrFolders(e)) return\n\n      const files = await handleDrop(e)\n      if (context) {\n        context.onDrop(files)\n      } else {\n        emit('drop', files)\n      }\n    }\n\n    function onClickBrowse () {\n      if (!isInteractive.value) return\n      if (context) {\n        context.onClickBrowse()\n      } else {\n        emit('click:browse')\n      }\n    }\n\n    function onKeydown (e: KeyboardEvent) {\n      if (!isInteractive.value) return\n      if (e.key === 'Enter' || e.key === ' ') {\n        e.preventDefault()\n        onClickBrowse()\n      }\n    }\n\n    function onClickRemove (index: number) {\n      if (!isInteractive.value) return\n      if (context) {\n        context.onClickRemove(index)\n      } else {\n        emit('click:remove', index)\n      }\n    }\n\n    async function onPaste (e: ClipboardEvent) {\n      if (!isInteractive.value || !hasFilesOrFolders(e)) return\n\n      e.preventDefault()\n      const files = await handleDrop(e)\n      if (!files.length) return\n\n      if (context) {\n        context.onDrop(files)\n      } else {\n        emit('drop', files)\n      }\n    }\n\n    useRender(() => {\n      const modelValue = context?.files.value ?? props.modelValue\n      const disabled = isDisabled.value\n      const readonly = isReadonly.value\n      const interactive = isInteractive.value\n      const error = context?.error.value || props.error\n      const hasTitle = !!(slots.title || props.title)\n      const hasIcon = !!(slots.icon || props.icon)\n      const hasBrowse = !!(!props.hideBrowse && (slots.browse || props.density === 'default'))\n      const hasFiles = modelValue.length > 0\n      const isInset = props.insetFileList && hasFiles\n      const sheetProps = VSheet.filterProps(props)\n      const dividerProps = VDivider.filterProps(props)\n\n      return (\n        <VSheet\n          ref={ vSheetRef }\n          tabindex={ disabled ? -1 : 0 }\n          { ...sheetProps }\n          class={[\n            'v-file-upload-dropzone',\n            {\n              'v-file-upload-dropzone--clickable': !hasBrowse,\n              'v-file-upload-dropzone--disabled': disabled,\n              'v-file-upload-dropzone--readonly': readonly,\n              'v-file-upload-dropzone--dragging': isDragging.value,\n              'v-file-upload-dropzone--has-files': hasFiles,\n              'v-file-upload-dropzone--inset': isInset,\n              'v-file-upload-dropzone--error': error,\n            },\n            densityClasses.value,\n            props.class,\n          ]}\n          style={ props.style }\n          onDragleave={ onDragleave }\n          onDragover={ onDragover }\n          onDrop={ onDrop }\n          onPaste={ onPaste }\n          onClick={ !hasBrowse && !(isInset && hasFiles) ? onClickBrowse : undefined }\n          onKeydown={ onKeydown }\n        >\n          { slots.default?.({\n            isDragging: isDragging.value,\n            hasFiles,\n            files: modelValue,\n            props: { onClick: onClickBrowse },\n          }) ?? (isInset ? (\n            <div key=\"inset\" class=\"v-file-upload-inset\">\n              { modelValue.length === 1 && !props.multiple ? (\n                slots.single?.({\n                  file: modelValue[0],\n                  props: { 'onClick:remove': () => onClickRemove(0) },\n                }) ?? (\n                  <VDefaultsProvider\n                    defaults={{\n                      VFileUploadItem: {\n                        file: modelValue[0],\n                        clearable: props.clearable && !readonly,\n                        disabled,\n                        showSize: props.showSize,\n                        border: false,\n                      },\n                    }}\n                  >\n                    <VFileUploadItem\n                      onClick:remove={ () => onClickRemove(0) }\n                    />\n                  </VDefaultsProvider>\n                )\n              ) : (\n                modelValue.map((file, i) => {\n                  const key = getFileKey(file)\n                  const slotProps = {\n                    file,\n                    props: {\n                      'onClick:remove': () => onClickRemove(i),\n                    },\n                  }\n\n                  return (\n                    <VDefaultsProvider\n                      key={ key }\n                      defaults={{\n                        VFileUploadItem: {\n                          file,\n                          clearable: props.clearable && !readonly,\n                          disabled,\n                          showSize: props.showSize,\n                          border: false,\n                        },\n                      }}\n                    >\n                      { slots.item?.(slotProps) ?? (\n                        <VFileUploadItem\n                          key={ key }\n                          onClick:remove={ () => onClickRemove(i) }\n                        />\n                      )}\n                    </VDefaultsProvider>\n                  )\n                })\n              )}\n\n              <VDivider />\n\n              <div class=\"v-file-upload-inset__action\">\n                { !slots.browse ? (\n                  <VBtn\n                    readonly={ !interactive }\n                    text={ t(props.browseText) }\n                    variant={ insetBrowseVariant.value }\n                    onClick={ onClickBrowse }\n                  />\n                ) : (\n                  <VDefaultsProvider\n                    defaults={{\n                      VBtn: {\n                        readonly: !interactive,\n                        text: t(props.browseText),\n                        variant: insetBrowseVariant.value,\n                      },\n                    }}\n                  >\n                    { slots.browse({ props: { onClick: onClickBrowse } }) }\n                  </VDefaultsProvider>\n                )}\n              </div>\n            </div>\n          ) : (\n            <>\n              { hasIcon && (\n                <div key=\"icon\" class=\"v-file-upload-icon\">\n                  { !slots.icon ? (\n                    <VIcon\n                      key=\"icon-icon\"\n                      icon={ props.icon }\n                    />\n                  ) : (\n                    <VDefaultsProvider\n                      key=\"icon-defaults\"\n                      defaults={{\n                        VIcon: {\n                          icon: props.icon,\n                        },\n                      }}\n                    >\n                      { slots.icon() }\n                    </VDefaultsProvider>\n                  )}\n                </div>\n              )}\n\n              { hasTitle && (\n                <div key=\"title\" class=\"v-file-upload-title\">\n                  { slots.title?.() ?? t(props.title) }\n                </div>\n              )}\n\n              { props.density === 'default' && (\n                <>\n                  { hasBrowse && (\n                    <>\n                      <div key=\"upload-divider\" class=\"v-file-upload-divider\">\n                        { slots.divider?.() ?? (\n                          <VDivider { ...dividerProps }>\n                            { t(props.dividerText) }\n                          </VDivider>\n                        )}\n                      </div>\n                      { !slots.browse ? (\n                        <VBtn\n                          readonly={ !interactive }\n                          size={ browseSize.value }\n                          text={ t(props.browseText) }\n                          variant={ browseVariant.value }\n                          onClick={ onClickBrowse }\n                        />\n                      ) : (\n                        <VDefaultsProvider\n                          defaults={{\n                            VBtn: {\n                              readonly: !interactive,\n                              size: browseSize.value,\n                              text: t(props.browseText),\n                              variant: browseVariant.value,\n                            },\n                          }}\n                        >\n                          { slots.browse({ props: { onClick: onClickBrowse } }) }\n                        </VDefaultsProvider>\n                      )}\n                    </>\n                  )}\n\n                  { props.subtitle && (\n                    <div class=\"v-file-upload-subtitle\">\n                      { props.subtitle }\n                    </div>\n                  )}\n                </>\n              )}\n            </>\n          ))}\n\n          <VOverlay\n            modelValue={ isDragging.value }\n            contained\n            scrim={ props.scrim }\n          />\n\n          { slots.input?.() }\n\n          { slots.loader?.() }\n        </VSheet>\n      )\n    })\n\n    return forwardRefs({}, vSheetRef)\n  },\n})\n\nexport type VFileUploadDropzone = InstanceType<typeof VFileUploadDropzone>\n","// Components\nimport { VFileUploadKey } from './VFileUploadDropzone'\nimport { VFileUploadItem } from './VFileUploadItem'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider/VDefaultsProvider'\nimport { makeVListProps, VList } from '@/components/VList/VList'\n\n// Utilities\nimport { createCommentVNode, inject } from 'vue'\nimport { getFileKey } from './fileKey'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport type VFileUploadListSlots = {\n  default: {\n    files: readonly File[]\n    onClickRemove: (index: number) => void\n  }\n  item: {\n    file: File\n    props: { 'onClick:remove': () => void }\n  }\n}\n\nexport const makeVFileUploadListProps = propsFactory({\n  clearable: Boolean,\n  showSize: Boolean,\n  files: Array as PropType<File[]>,\n\n  ...makeVListProps({\n    border: false,\n    elevation: 0,\n    lines: false as const,\n  }),\n}, 'VFileUploadList')\n\nexport const VFileUploadList = genericComponent<VFileUploadListSlots>()({\n  name: 'VFileUploadList',\n\n  props: makeVFileUploadListProps(),\n\n  setup (props, { slots }) {\n    const context = inject(VFileUploadKey, null)\n\n    useRender(() => {\n      const files = props.files ?? context?.files.value ?? []\n      const disabled = context?.disabled.value ?? props.disabled\n      const readonly = context?.readonly.value ?? false\n      const listProps = VList.filterProps(props)\n\n      if (!slots.default && !files.length) return createCommentVNode()\n\n      return (\n        <VList\n          { ...listProps }\n          disabled={ disabled }\n          class={[\n            'v-file-upload-list',\n            props.class,\n          ]}\n          style={ props.style }\n          bgColor=\"transparent\"\n        >\n          { slots.default?.({ files, onClickRemove: (i: number) => context?.onClickRemove(i) }) ?? files.map((file, index) => {\n            const key = getFileKey(file)\n            const slotProps = {\n              file,\n              props: {\n                'onClick:remove': () => context?.onClickRemove(index),\n              },\n            }\n\n            return (\n              <VDefaultsProvider\n                key={ key }\n                defaults={{\n                  VFileUploadItem: {\n                    file,\n                    clearable: props.clearable && !readonly,\n                    disabled,\n                    showSize: props.showSize,\n                    variant: 'flat',\n                  },\n                }}\n              >\n                { slots.item?.(slotProps) ?? (\n                  <VFileUploadItem\n                    key={ key }\n                    onClick:remove={ () => context?.onClickRemove(index) }\n                  />\n                )}\n              </VDefaultsProvider>\n            )\n          })}\n        </VList>\n      )\n    })\n  },\n})\n\nexport type VFileUploadList = InstanceType<typeof VFileUploadList>\n","// Styles\nimport './VFileUpload.sass'\n\n// Components\nimport { VFileUploadDropzone, VFileUploadKey } from './VFileUploadDropzone'\nimport { VFileUploadList } from './VFileUploadList'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider/VDefaultsProvider'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\n\n// Composables\nimport { makeFileFilterProps, useFileFilter } from '@/composables/fileFilter'\nimport { useFocus } from '@/composables/focus'\nimport { useForm } from '@/composables/form'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { IconValue } from '@/composables/icons'\nimport { LoaderSlot, makeLoaderProps, useLoader } from '@/composables/loader'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { provide, ref, shallowRef, toRef, watch } from 'vue'\nimport { filterInputAttrs, genericComponent, isBoolean, isObject, isString, omit, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType, VNode } from 'vue'\nimport type { VInputSlots } from '@/components/VInput/VInput'\nimport type { LoaderSlotProps } from '@/composables/loader'\n\nexport type VFileUploadSlots = Omit<VInputSlots, 'default'> & {\n  browse: {\n    props: { onClick: (e: MouseEvent) => void }\n  }\n  default: never\n  icon: never\n  input: {\n    inputNode: VNode\n  }\n  item: {\n    file: File\n    props: { 'onClick:remove': () => void }\n  }\n  single: {\n    file: File\n    props: { 'onClick:remove': () => void }\n  }\n  title: never\n  divider: never\n  loader: LoaderSlotProps\n}\n\nexport const makeVFileUploadProps = propsFactory({\n  browseText: {\n    type: String,\n    default: '$vuetify.fileUpload.browse',\n  },\n  dividerText: {\n    type: String,\n    default: '$vuetify.fileUpload.divider',\n  },\n  title: {\n    type: String,\n    default: '$vuetify.fileUpload.title',\n  },\n  subtitle: String,\n  icon: {\n    type: IconValue,\n    default: '$upload',\n  },\n  clearable: Boolean,\n  insetFileList: Boolean,\n  hideBrowse: Boolean,\n  multiple: Boolean,\n  scrim: {\n    type: [Boolean, String],\n    default: true,\n  },\n  showSize: Boolean,\n\n  ...makeFileFilterProps(),\n  ...makeLoaderProps(),\n  ...omit(makeVInputProps(), ['direction']),\n\n  modelValue: {\n    type: [Array, Object] as PropType<File[] | File>,\n    default: null,\n    validator: (val: any) => wrapInArray(val).every(isObject),\n  },\n}, 'VFileUpload')\n\nexport const VFileUpload = genericComponent<VFileUploadSlots>()({\n  name: 'VFileUpload',\n\n  inheritAttrs: false,\n\n  props: makeVFileUploadProps(),\n\n  emits: {\n    'update:modelValue': (files: File[]) => true,\n    'update:focused': (focused: boolean) => true,\n    rejected: (files: File[]) => true,\n  },\n\n  setup (props, { attrs, emit, slots }) {\n    const { filterAccepted } = useFileFilter(props)\n    const { isFocused } = useFocus(props)\n    const { loaderClasses } = useLoader(props)\n    const form = useForm(props)\n    const model = useProxiedModel(\n      props,\n      'modelValue',\n      props.modelValue,\n      val => wrapInArray(val),\n      val => (props.multiple || Array.isArray(props.modelValue)) ? val : val[0],\n    )\n\n    const vInputRef = ref<VInput>()\n    const vDropzoneRef = ref<VFileUploadDropzone>()\n    const inputRef = ref<HTMLInputElement | null>(null)\n    const isError = toRef(() => vInputRef.value?.isValid === false)\n    const isInteractive = toRef(() => !form.isDisabled.value && !form.isReadonly.value)\n    const loadingColor = shallowRef<string | undefined>(undefined)\n\n    watch(() => props.loading, (val, old) => {\n      loadingColor.value = !val && isString(old)\n        ? old\n        : isBoolean(val)\n          ? undefined\n          : val\n    }, { immediate: true })\n\n    provide(VFileUploadKey, {\n      files: model,\n      disabled: form.isDisabled,\n      readonly: form.isReadonly,\n      error: isError,\n      onDrop,\n      onClickBrowse: onClick,\n      onClickRemove,\n    })\n\n    watch(model, newValue => {\n      const hasModelReset = !Array.isArray(newValue) || !newValue.length\n      if (hasModelReset && inputRef.value) {\n        inputRef.value.value = ''\n      }\n    })\n\n    function onDrop (files: File[]) {\n      if (!isInteractive.value) return\n      selectAccepted(files)\n    }\n\n    function onFileSelection (e: Event) {\n      if (!e.target || (e as any).repack) return // prevent loop\n      const target = e.target as HTMLInputElement\n      const selectedFiles = [...target.files ?? []]\n      if (!selectedFiles.length) return\n\n      if (!props.filterByType) {\n        model.value = props.multiple ? [...model.value, ...selectedFiles] : selectedFiles\n      } else {\n        selectAccepted(selectedFiles)\n      }\n    }\n\n    function selectAccepted (files: File[]) {\n      const dataTransfer = new DataTransfer()\n      const { accepted, rejected } = filterAccepted(files)\n\n      if (rejected.length) {\n        emit('rejected', rejected)\n      }\n\n      for (const file of accepted) {\n        dataTransfer.items.add(file)\n      }\n\n      inputRef.value!.files = dataTransfer.files\n      const newFiles = [...dataTransfer.files]\n      model.value = props.multiple ? [...model.value, ...newFiles] : newFiles\n\n      const event = new Event('change', { bubbles: true }) as any\n      event.repack = true\n      inputRef.value!.dispatchEvent(event)\n    }\n\n    function onClick () {\n      if (!isInteractive.value) return\n      inputRef.value?.click()\n    }\n\n    function onClickRemove (index: number) {\n      if (!isInteractive.value) return\n      const newValue = model.value.filter((_, i) => i !== index)\n      model.value = newValue\n\n      if (newValue.length > 0 || !inputRef.value) return\n\n      inputRef.value.value = ''\n    }\n\n    useRender(() => {\n      const { modelValue: _, ...inputProps } = VInput.filterProps(props)\n      const { modelValue: __, ...dropzoneProps } = VFileUploadDropzone.filterProps(props as any)\n      const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n\n      const expectsDirectory = attrs.webkitdirectory !== undefined && attrs.webkitdirectory !== false\n      const acceptFallback = attrs.accept ? String(attrs.accept) : undefined\n      const inputAccept = expectsDirectory ? undefined : (props.filterByType ?? acceptFallback)\n\n      const inputNode = (\n        <input\n          ref={ inputRef }\n          type=\"file\"\n          accept={ inputAccept }\n          disabled={ props.disabled ?? undefined }\n          multiple={ props.multiple }\n          name={ props.name }\n          onChange={ onFileSelection }\n          { ...inputAttrs }\n        />\n      )\n\n      return (\n        <VInput\n          ref={ vInputRef }\n          modelValue={ props.multiple ? model.value : model.value[0] }\n          onUpdate:modelValue={ val => {\n            if (val == null || (Array.isArray(val) && !val.length)) {\n              model.value = []\n            }\n          }}\n          class={[\n            'v-file-upload',\n            loaderClasses.value,\n            props.class,\n          ]}\n          style={ props.style }\n          focused={ isFocused.value }\n          { ...rootAttrs }\n          { ...inputProps }\n        >\n          {{\n            ...slots,\n            default: () => {\n              return (\n              <>\n                { slots.default ? (\n                  <>\n                    { slots.default() }\n                    <input\n                      ref={ inputRef }\n                      type=\"file\"\n                      accept={ inputAccept }\n                      disabled={ props.disabled ?? undefined }\n                      multiple={ props.multiple }\n                      name={ props.name }\n                      style=\"display: none;\"\n                      onChange={ onFileSelection }\n                      { ...inputAttrs }\n                    />\n                  </>\n                ) : (\n                  <VFileUploadDropzone\n                    ref={ vDropzoneRef }\n                    { ...dropzoneProps }\n                  >\n                    {{\n                      browse: slots.browse,\n                      icon: slots.icon,\n                      title: slots.title,\n                      divider: slots.divider,\n                      single: slots.single,\n                      item: slots.item,\n                      input: () => slots.input?.({ inputNode }) ?? inputNode,\n                      loader: () => (\n                        <LoaderSlot\n                          name=\"v-file-upload\"\n                          active={ !!props.loading }\n                          color={ loadingColor.value }\n                          v-slots={{ default: slots.loader }}\n                        />\n                      ),\n                    }}\n                  </VFileUploadDropzone>\n                )}\n\n                { !slots.default && !props.insetFileList && (\n                  <VDefaultsProvider\n                    defaults={{\n                      VFileUploadList: {\n                        clearable: props.clearable,\n                        showSize: props.showSize,\n                      },\n                    }}\n                  >\n                    <VFileUploadList>\n                      {{ item: slots.item }}\n                    </VFileUploadList>\n                  </VDefaultsProvider>\n                )}\n              </>\n              )\n            },\n          }}\n        </VInput>\n      )\n    })\n\n    return forwardRefs({\n      controlRef: inputRef,\n    }, vInputRef, vDropzoneRef)\n  },\n})\n\nexport type VFileUpload = InstanceType<typeof VFileUpload>\n","// Styles\nimport './VFooter.sass'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeLayoutItemProps, useLayoutItem } from '@/composables/layout'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useToggleScope } from '@/composables/toggleScope'\n\n// Utilities\nimport { computed, ref, shallowRef, toRef, watchEffect } from 'vue'\nimport { convertToUnit, genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVFooterProps = propsFactory({\n  app: Boolean,\n  color: String,\n  height: {\n    type: [Number, String],\n    default: 'auto',\n  },\n\n  ...makeBorderProps(),\n  ...makeComponentProps(),\n  ...makeElevationProps(),\n  ...makeLayoutItemProps(),\n  ...makeRoundedProps(),\n  ...makeTagProps({ tag: 'footer' }),\n  ...makeThemeProps(),\n}, 'VFooter')\n\nexport const VFooter = genericComponent()({\n  name: 'VFooter',\n\n  props: makeVFooterProps(),\n\n  setup (props, { slots }) {\n    const layoutItemStyles = ref()\n\n    const { themeClasses } = provideTheme(props)\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)\n    const { borderClasses } = useBorder(props)\n    const { elevationClasses } = useElevation(props)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n\n    const autoHeight = shallowRef(32)\n    const { resizeRef } = useResizeObserver(entries => {\n      if (!entries.length) return\n      autoHeight.value = entries[0].target.clientHeight\n    })\n    const height = computed(() => props.height === 'auto' ? autoHeight.value : props.height)\n\n    useToggleScope(() => props.app, () => {\n      const layout = useLayoutItem({\n        id: props.name,\n        order: computed(() => parseInt(props.order, 10)),\n        position: toRef(() => 'bottom'),\n        layoutSize: height,\n        elementSize: computed(() => props.height === 'auto' ? undefined : height.value),\n        active: toRef(() => props.app),\n        absolute: toRef(() => props.absolute),\n      })\n\n      watchEffect(() => {\n        layoutItemStyles.value = layout.layoutItemStyles.value\n      })\n    })\n\n    useRender(() => (\n      <props.tag\n        ref={ resizeRef }\n        class={[\n          'v-footer',\n          themeClasses.value,\n          backgroundColorClasses.value,\n          borderClasses.value,\n          elevationClasses.value,\n          roundedClasses.value,\n          props.class,\n        ]}\n        style={[\n          backgroundColorStyles.value,\n          props.app ? layoutItemStyles.value : {\n            height: convertToUnit(props.height),\n          },\n          roundedStyles.value,\n          props.style,\n        ]}\n        v-slots={ slots }\n      />\n    ))\n\n    return {}\n  },\n})\n\nexport type VFooter = InstanceType<typeof VFooter>\n","// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { createForm, makeFormProps } from '@/composables/form'\nimport { forwardRefs } from '@/composables/forwardRefs'\n\n// Utilities\nimport { ref } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { FieldValidationResult, FormField, FormValidationResult, SubmitEventPromise } from '@/composables/form'\n\nexport const makeVFormProps = propsFactory({\n  ...makeComponentProps(),\n  ...makeFormProps(),\n}, 'VForm')\n\ntype VFormSlots = {\n  default: {\n    errors: FieldValidationResult[]\n    isDisabled: boolean\n    isReadonly: boolean\n    isValidating: boolean\n    isValid: boolean | null\n    items: FormField[]\n    validate: () => Promise<FormValidationResult>\n    reset: () => void\n    resetValidation: () => void\n  }\n}\n\nexport const VForm = genericComponent<VFormSlots>()({\n  name: 'VForm',\n\n  props: makeVFormProps(),\n\n  emits: {\n    'update:modelValue': (val: boolean | null) => true,\n    submit: (e: SubmitEventPromise) => 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      const e = _e as SubmitEventPromise\n\n      const ready = form.validate()\n      e.then = ready.then.bind(ready)\n      e.catch = ready.catch.bind(ready)\n      e.finally = ready.finally.bind(ready)\n\n      emit('submit', e)\n\n      if (!e.defaultPrevented) {\n        ready.then(({ valid }) => {\n          if (valid) {\n            formRef.value?.submit()\n          }\n        })\n      }\n\n      e.preventDefault()\n    }\n\n    useRender(() => ((\n      <form\n        ref={ formRef }\n        class={[\n          'v-form',\n          props.class,\n        ]}\n        style={ props.style }\n        novalidate\n        onReset={ onReset }\n        onSubmit={ onSubmit }\n      >\n        { slots.default?.({\n          get errors () { return form.errors.value },\n          get isDisabled () { return form.isDisabled.value },\n          get isReadonly () { return form.isReadonly.value },\n          get isValidating () { return form.isValidating.value },\n          get isValid () { return form.isValid.value },\n          get items () { return form.items.value },\n          validate: form.validate,\n          reset: form.reset,\n          resetValidation: form.resetValidation,\n        })}\n      </form>\n    )))\n\n    return forwardRefs(form, formRef)\n  },\n})\n\nexport type VForm = InstanceType<typeof VForm>\n","// Styles\nimport './VKbd.scss'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVKbdProps = propsFactory({\n  color: String,\n\n  ...makeBorderProps(),\n  ...makeComponentProps(),\n  ...makeRoundedProps(),\n  ...makeTagProps({ tag: 'kbd' }),\n  ...makeThemeProps(),\n  ...makeElevationProps(),\n}, 'VKbd')\n\nexport const VKbd = genericComponent()({\n  name: 'VKbd',\n\n  props: makeVKbdProps(),\n\n  setup (props, { slots }) {\n    const { themeClasses } = provideTheme(props)\n    const { borderClasses } = useBorder(props)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)\n    const { elevationClasses } = useElevation(props)\n\n    useRender(() => (\n      <props.tag\n        class={[\n          'v-kbd',\n          themeClasses.value,\n          backgroundColorClasses.value,\n          borderClasses.value,\n          elevationClasses.value,\n          roundedClasses.value,\n          props.class,\n        ]}\n        style={[\n          backgroundColorStyles.value,\n          roundedStyles.value,\n          props.style,\n        ]}\n        v-slots={ slots }\n      />\n    ))\n\n    return {}\n  },\n})\n\nexport type VKbd = InstanceType<typeof VKbd>\n","/**\n * VHotkey Component\n *\n * Purpose: Renders keyboard shortcuts in a visually consistent and accessible way.\n * This component handles the complex logic of displaying keyboard combinations\n * across different platforms (Mac vs PC) and display modes (icons, symbols, text).\n *\n * Why it exists:\n * - Provides consistent visual representation of keyboard shortcuts\n * - Handles platform-specific key differences (Cmd vs Ctrl, Option vs Alt)\n * - Supports multiple display modes for different design needs\n * - Encapsulates complex key parsing and rendering logic\n * - Used throughout the command palette for instruction display\n *\n * Key Mapping Structure:\n * The keyMap uses a simple object structure where each key has:\n * - `default`: Required configuration for all platforms\n * - `mac`: Optional Mac-specific overrides\n * Each config can specify `symbol`, `icon`, and `text` representations.\n *\n * Example:\n * ```\n * ctrl: {\n *   mac: { symbol: '⌃', icon: '$ctrl', text: 'Control' },\n *   default: { text: 'Ctrl', icon: '$ctrl' }\n * }\n * ```\n */\n\n// Styles\nimport './VHotkey.scss'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VKbd } from '@/components/VKbd'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { parseKeyCombination } from '@/composables/hotkey/hotkey-parsing'\nimport { useLocale, useRtl } from '@/composables/locale'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useVariant } from '@/composables/variant'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent, isString, mergeDeep, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { KeyCombination } from '@/composables/hotkey/hotkey-parsing'\nimport type { IconValue } from '@/composables/icons'\n\n// Display mode types for different visual representations\ntype DisplayMode = 'icon' | 'symbol' | 'text'\n\n// Extended variant type that includes our custom 'contained' variant\ntype HotkeyVariant = 'elevated' | 'flat' | 'tonal' | 'outlined' | 'text' | 'plain' | 'contained'\n\n// Key display tuple: [mode, content] where content is string or IconValue\ntype KeyDisplay = [Exclude<DisplayMode, 'icon'>, string] | [Extract<DisplayMode, 'icon'>, IconValue]\n\n// Key tuple: [mode, content, keycode] where content is string or IconValue\ntype Key = [Exclude<DisplayMode, 'icon'>, string, string] | [Extract<DisplayMode, 'icon'>, IconValue, string]\n\ntype KeyConfig = {\n  symbol?: string\n  icon?: string\n  text: string\n}\n\ntype PlatformKeyConfig = {\n  mac?: KeyConfig\n  default: KeyConfig\n}\n\ntype KeyMapConfig = Record<string, PlatformKeyConfig>\n\nfunction processKey (config: PlatformKeyConfig, requestedMode: DisplayMode, isMac: boolean): KeyDisplay {\n  const keyCfg = (isMac && config.mac) ? config.mac : config.default\n\n  // 1. Resolve the safest display mode for the current platform\n  const mode: DisplayMode = (() => {\n    // If the requested mode lacks an asset, fall back to text\n    if (requestedMode === 'icon' && !keyCfg.icon) return 'text'\n    if (requestedMode === 'symbol' && !keyCfg.symbol) return 'text'\n\n    return requestedMode\n  })()\n\n  // 2. Pick value for the chosen mode, defaulting to text representation\n  let value: string | IconValue = keyCfg[mode] ?? keyCfg.text\n\n  // 3. Guard against icon tokens leaking into text mode (e.g. \"$ctrl\")\n  if (mode === 'text' && isString(value) && value.startsWith('$') && !value.startsWith('$vuetify.')) {\n    value = value.slice(1).toUpperCase() // \"$ctrl\" → \"CTRL\"\n  }\n\n  return mode === 'icon'\n    ? ['icon', value as IconValue]\n    : [mode as Exclude<DisplayMode, 'icon'>, value as string]\n}\n\nexport const hotkeyMap: KeyMapConfig = {\n  ctrl: {\n    mac: { symbol: '⌃', icon: '$ctrl', text: '$vuetify.hotkey.ctrl' },\n    default: { text: 'Ctrl' },\n  },\n  meta: {\n    mac: { symbol: '⌘', icon: '$command', text: '$vuetify.hotkey.command' },\n    default: { text: 'Ctrl' },\n  },\n  cmd: {\n    mac: { symbol: '⌘', icon: '$command', text: '$vuetify.hotkey.command' },\n    default: { text: 'Ctrl' },\n  },\n  shift: {\n    mac: { symbol: '⇧', icon: '$shift', text: '$vuetify.hotkey.shift' },\n    default: { text: 'Shift' },\n  },\n  alt: {\n    mac: { symbol: '⌥', icon: '$alt', text: '$vuetify.hotkey.option' },\n    default: { text: 'Alt' },\n  },\n  enter: {\n    default: { symbol: '↵', icon: '$enter', text: '$vuetify.hotkey.enter' },\n  },\n  arrowup: {\n    default: { symbol: '↑', icon: '$arrowup', text: '$vuetify.hotkey.upArrow' },\n  },\n  arrowdown: {\n    default: { symbol: '↓', icon: '$arrowdown', text: '$vuetify.hotkey.downArrow' },\n  },\n  arrowleft: {\n    default: { symbol: '←', icon: '$arrowleft', text: '$vuetify.hotkey.leftArrow' },\n  },\n  arrowright: {\n    default: { symbol: '→', icon: '$arrowright', text: '$vuetify.hotkey.rightArrow' },\n  },\n  backspace: {\n    default: { symbol: '⌫', icon: '$backspace', text: '$vuetify.hotkey.backspace' },\n  },\n  escape: {\n    default: { text: '$vuetify.hotkey.escape' },\n  },\n  ' ': {\n    mac: { symbol: '␣', icon: '$space', text: '$vuetify.hotkey.space' },\n    default: { text: '$vuetify.hotkey.space' },\n  },\n  '-': {\n    default: { text: '-' },\n  },\n  '+': {\n    default: { text: '+' },\n  },\n}\n\nexport const makeVHotkeyProps = propsFactory({\n  // String representing keyboard shortcuts (e.g., \"ctrl+k\", \"meta+shift+p\")\n  keys: String,\n  // How to display keys: 'symbol' uses special characters (⌘, ⌃), 'icon' uses SVG icons, 'text' uses words\n  displayMode: {\n    type: String as PropType<DisplayMode>,\n    default: 'icon',\n  },\n  // Custom key mapping configuration. Users can import and modify the exported hotkeyMap as needed\n  keyMap: {\n    type: Object as PropType<KeyMapConfig>,\n    default: () => hotkeyMap,\n  },\n  platform: {\n    type: String as PropType<'auto' | 'pc' | 'mac'>,\n    default: 'auto',\n  },\n  inline: Boolean,\n  disabled: Boolean,\n  prefix: String,\n  suffix: String,\n  variant: {\n    type: String as PropType<HotkeyVariant>,\n    default: 'elevated' as const,\n    validator: (v: any) => ['elevated', 'flat', 'tonal', 'outlined', 'text', 'plain', 'contained'].includes(v),\n  },\n\n  ...makeComponentProps(),\n  ...makeThemeProps(),\n  ...makeBorderProps(),\n  ...makeRoundedProps(),\n  ...makeElevationProps(),\n  color: String,\n}, 'VHotkey')\n\nconst AND_DELINEATOR = Symbol('VHotkey:AND_DELINEATOR') // For +_ separators\nconst OR_DELINEATOR = Symbol('VHotkey:OR_DELINEATOR') // For / separators\nconst THEN_DELINEATOR = Symbol('VHotkey:THEN_DELINEATOR') // For - separators\ntype Delineator = typeof AND_DELINEATOR | typeof OR_DELINEATOR | typeof THEN_DELINEATOR\n\nfunction getKeyText (keyMap: KeyMapConfig, key: string, isMac: boolean): string {\n  const lowerKey = key.toLowerCase()\n\n  if (lowerKey in keyMap) {\n    const result = processKey(keyMap[lowerKey], 'text', isMac)\n    return isString(result[1]) ? result[1] : String(result[1])\n  }\n\n  return key.toUpperCase()\n}\n\nfunction applyDisplayModeToKey (keyMap: KeyMapConfig, mode: DisplayMode, key: string, isMac: boolean): Key {\n  const lowerKey = key.toLowerCase()\n\n  if (lowerKey in keyMap) {\n    const result = processKey(keyMap[lowerKey], mode, isMac)\n\n    if (result[0] === 'text' && isString(result[1]) && result[1].startsWith('$') && !result[1].startsWith('$vuetify.')) {\n      return ['text', result[1].replace('$', '').toUpperCase(), key]\n    }\n\n    return [...result, key]\n  }\n\n  return ['text', key.toUpperCase(), key]\n}\n\nexport const VHotkey = genericComponent()({\n  name: 'VHotkey',\n\n  props: makeVHotkeyProps(),\n\n  setup (props) {\n    const { t } = useLocale()\n    const { themeClasses } = provideTheme(props)\n    const { rtlClasses } = useRtl()\n    const { borderClasses } = useBorder(props)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n    const { elevationClasses } = useElevation(props)\n\n    const { colorClasses, colorStyles, variantClasses } = useVariant(() => ({\n      color: props.color,\n      variant: props.variant === 'contained' ? 'elevated' : props.variant,\n    }))\n\n    const isMac = computed(() =>\n      props.platform === 'auto'\n        ? (typeof navigator !== 'undefined' && /macintosh/i.test(navigator.userAgent))\n        : props.platform === 'mac'\n    )\n\n    const keyCombinations = computed(() => {\n      if (!props.keys) return []\n\n      // Split by spaces to handle multiple key combinations\n      // Example: \"ctrl+k meta+p\" -> [\"ctrl+k\", \"meta+p\"]\n      return props.keys.split(/\\b \\b/).map(combination => {\n        const result: Array<Key | Delineator> = []\n\n        function visit (node: KeyCombination) {\n          if (isString(node)) {\n            if (node !== '') {\n              result.push(applyDisplayModeToKey(props.keyMap, props.displayMode, node, isMac.value))\n            }\n          } else {\n            for (let i = 0; i < node.parts.length; i++) {\n              if (i > 0) {\n                if (node.type === 'sequence') {\n                  result.push(THEN_DELINEATOR)\n                } else if (node.type === 'alternate') {\n                  result.push(OR_DELINEATOR)\n                } else if (node.type === 'combo') {\n                  result.push(AND_DELINEATOR)\n                } else {\n                  void (node satisfies never)\n                }\n              }\n              visit(node.parts[i])\n            }\n          }\n        }\n\n        visit(parseKeyCombination(combination))\n        return result\n      })\n    })\n\n    const accessibleLabel = computed(() => {\n      if (!props.keys) return ''\n\n      // Convert the parsed key combinations into readable text\n      const readableShortcuts = keyCombinations.value.map(combination => {\n        const readableParts: string[] = []\n\n        for (const key of combination) {\n          if (Array.isArray(key)) {\n            // Always use text representation for screen readers\n            const textKey = key[0] === 'icon' || key[0] === 'symbol'\n              ? applyDisplayModeToKey(mergeDeep(hotkeyMap, props.keyMap), 'text', String(key[1]), isMac.value)[1]\n              : key[1]\n            readableParts.push(translateKey(textKey as string))\n          } else {\n            if (key === AND_DELINEATOR) {\n              readableParts.push(t('$vuetify.hotkey.plus'))\n            } else if (key === OR_DELINEATOR) {\n              readableParts.push(t('$vuetify.hotkey.or'))\n            } else if (key === THEN_DELINEATOR) {\n              readableParts.push(t('$vuetify.hotkey.then'))\n            }\n          }\n        }\n\n        return readableParts.join(' ')\n      })\n\n      const shortcutText = readableShortcuts.join(', ')\n      return t('$vuetify.hotkey.shortcut', shortcutText)\n    })\n\n    function translateKey (key: string) {\n      return key.startsWith('$vuetify.') ? t(key) : key\n    }\n\n    function getKeyTooltip (key: Key): string | undefined {\n      if (props.displayMode === 'text') return undefined\n\n      const textKey = getKeyText(props.keyMap, String(key[2]), isMac.value)\n      return translateKey(textKey)\n    }\n\n    function renderKey (key: Key, keyIndex: number) {\n      const isContained = props.variant === 'contained'\n      const KeyComponent = isContained ? 'kbd' : VKbd\n      const keyClasses = [\n        'v-hotkey__key',\n        `v-hotkey__key-${key[0]}`,\n        ...(isContained ? ['v-hotkey__key--nested'] : [\n          borderClasses.value,\n          roundedClasses.value,\n          elevationClasses.value,\n          colorClasses.value,\n        ]),\n      ]\n\n      return (\n        <KeyComponent\n          key={ keyIndex }\n          class={ keyClasses }\n          style={ isContained ? undefined : [colorStyles.value, roundedStyles.value] }\n          aria-hidden=\"true\"\n          title={ getKeyTooltip(key) }\n        >\n          {\n            key[0] === 'icon' ? (\n              <VIcon\n                icon={ key[1] }\n                aria-hidden=\"true\"\n              />\n            ) : translateKey(key[1])\n          }\n        </KeyComponent>\n      )\n    }\n\n    function renderDivider (key: Delineator, keyIndex: number) {\n      return (\n        <span\n          key={ keyIndex }\n          class=\"v-hotkey__divider\"\n          aria-hidden=\"true\"\n        >\n          { key === AND_DELINEATOR ? '+'\n          : key === OR_DELINEATOR ? t('$vuetify.hotkey.or')\n          : t('$vuetify.hotkey.then')}\n        </span>\n      )\n    }\n\n    useRender(() => {\n      const content = (\n        <>\n          { props.prefix && (\n            <span key=\"prefix\" class=\"v-hotkey__prefix\">{ props.prefix }</span>\n          )}\n\n          { keyCombinations.value.map((combination, comboIndex) => (\n            <span class=\"v-hotkey__combination\" key={ comboIndex }>\n              { combination.map((key, keyIndex) =>\n                Array.isArray(key)\n                  ? renderKey(key, keyIndex)\n                  : renderDivider(key, keyIndex)\n              )}\n              { comboIndex < keyCombinations.value.length - 1 && (\n                <span aria-hidden=\"true\">&nbsp;</span>\n              )}\n            </span>\n          ))}\n\n          { props.suffix && (\n            <span key=\"suffix\" class=\"v-hotkey__suffix\">{ props.suffix }</span>\n          )}\n        </>\n      )\n\n      return (\n        <div\n          class={[\n            'v-hotkey',\n            {\n              'v-hotkey--disabled': props.disabled,\n              'v-hotkey--inline': props.inline,\n              'v-hotkey--contained': props.variant === 'contained',\n            },\n            themeClasses.value,\n            rtlClasses.value,\n            variantClasses.value,\n            props.class,\n          ]}\n          style={ props.style }\n          role=\"img\"\n          aria-label={ accessibleLabel.value }\n        >\n          { props.variant !== 'contained' ? content : (\n            <VKbd\n              key=\"contained\"\n              class={[\n                'v-hotkey__contained-wrapper',\n                borderClasses.value,\n                roundedClasses.value,\n                elevationClasses.value,\n                colorClasses.value,\n              ]}\n              style={[colorStyles.value, roundedStyles.value]}\n              aria-hidden=\"true\"\n            >\n              { content }\n            </VKbd>\n          )}\n        </div>\n      )\n    })\n  },\n})\n\nexport type VHotkey = InstanceType<typeof VHotkey>\n\nexport type { KeyConfig, PlatformKeyConfig, KeyMapConfig, DisplayMode }\n","// Composables\nimport { makeDelayProps, useDelay } from '@/composables/delay'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { shallowRef, watch } from 'vue'\nimport { genericComponent, propsFactory } from '@/util'\n\ntype VHoverSlots = {\n  default: {\n    isHovering: boolean | null\n    props: Record<string, unknown>\n  }\n}\n\nexport const makeVHoverProps = propsFactory({\n  disabled: Boolean,\n  modelValue: {\n    type: Boolean,\n    default: null,\n  },\n\n  ...makeDelayProps(),\n}, 'VHover')\n\nexport const VHover = genericComponent<VHoverSlots>()({\n  name: 'VHover',\n\n  props: makeVHoverProps(),\n\n  emits: {\n    'update:modelValue': (value: boolean) => true,\n  },\n\n  setup (props, { slots }) {\n    const isHovering = useProxiedModel(props, 'modelValue')\n\n    // track hover state regardless of disabled, so we can reconcile\n    const internal = shallowRef(false)\n    const { runOpenDelay, runCloseDelay } = useDelay(props, value => {\n      internal.value = value\n\n      if (!props.disabled) {\n        isHovering.value = value\n      }\n    })\n\n    watch(() => props.disabled, (val, old) => {\n      if (old && !val) {\n        isHovering.value = internal.value\n      }\n    })\n\n    return () => slots.default?.({\n      isHovering: isHovering.value,\n      props: {\n        onMouseenter: runOpenDelay,\n        onMouseleave: runCloseDelay,\n      },\n    })\n  },\n})\n\nexport type VHover = InstanceType<typeof VHover>\n","// Styles\nimport './VInfiniteScroll.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VProgressCircular } from '@/components/VProgressCircular'\n\n// Composables\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useLocale } from '@/composables/locale'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed, nextTick, onMounted, ref, shallowRef, watch } from 'vue'\nimport { convertToUnit, defineComponent, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport type InfiniteScrollSide = 'start' | 'end' | 'both'\nexport type InfiniteScrollStatus = 'ok' | 'empty' | 'loading' | 'error'\n\ntype InfiniteScrollSlot = {\n  side: InfiniteScrollSide\n  props: Record<string, any>\n}\n\ntype VInfiniteScrollSlots = {\n  default: never\n  loading: InfiniteScrollSlot\n  error: InfiniteScrollSlot\n  empty: InfiniteScrollSlot\n  'load-more': InfiniteScrollSlot\n}\n\nexport const makeVInfiniteScrollProps = propsFactory({\n  color: String,\n  direction: {\n    type: String as PropType<'vertical' | 'horizontal'>,\n    default: 'vertical',\n    validator: (v: any) => ['vertical', 'horizontal'].includes(v),\n  },\n  side: {\n    type: String as PropType<InfiniteScrollSide>,\n    default: 'end',\n    validator: (v: any) => ['start', 'end', 'both'].includes(v),\n  },\n  mode: {\n    type: String as PropType<'intersect' | 'manual'>,\n    default: 'intersect',\n    validator: (v: any) => ['intersect', 'manual'].includes(v),\n  },\n  margin: [Number, String],\n  loadMoreText: {\n    type: String,\n    default: '$vuetify.infiniteScroll.loadMore',\n  },\n  emptyText: {\n    type: String,\n    default: '$vuetify.infiniteScroll.empty',\n  },\n\n  ...makeDimensionProps(),\n  ...makeTagProps(),\n}, 'VInfiniteScroll')\n\nexport const VInfiniteScrollIntersect = defineComponent({\n  name: 'VInfiniteScrollIntersect',\n\n  props: {\n    side: {\n      type: String as PropType<InfiniteScrollSide>,\n      required: true,\n    },\n    rootMargin: String,\n  },\n\n  emits: {\n    intersect: (side: InfiniteScrollSide, isIntersecting: boolean) => true,\n  },\n\n  setup (props, { emit }) {\n    const { intersectionRef, isIntersecting } = useIntersectionObserver()\n\n    watch(isIntersecting, async val => {\n      emit('intersect', props.side, val)\n    })\n\n    useRender(() => (\n      <div\n        class=\"v-infinite-scroll-intersect\"\n        style={{\n          '--v-infinite-margin-size': props.rootMargin,\n        }}\n        ref={ intersectionRef }\n      >&nbsp;</div>\n    ))\n\n    return {}\n  },\n})\n\nexport const VInfiniteScroll = genericComponent<VInfiniteScrollSlots>()({\n  name: 'VInfiniteScroll',\n\n  props: makeVInfiniteScrollProps(),\n\n  emits: {\n    load: (options: { side: InfiniteScrollSide, done: (status: InfiniteScrollStatus) => void }) => true,\n  },\n\n  setup (props, { slots, emit }) {\n    const rootEl = ref<HTMLDivElement>()\n    const startStatus = shallowRef<InfiniteScrollStatus>('ok')\n    const endStatus = shallowRef<InfiniteScrollStatus>('ok')\n    const margin = computed(() => convertToUnit(props.margin))\n    const isIntersecting = shallowRef(false)\n\n    function setScrollAmount (amount: number) {\n      if (!rootEl.value) return\n\n      const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft'\n      rootEl.value[property] = amount\n    }\n\n    function getScrollAmount () {\n      if (!rootEl.value) return 0\n\n      const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft'\n      return rootEl.value[property]\n    }\n\n    function getScrollSize () {\n      if (!rootEl.value) return 0\n\n      const property = props.direction === 'vertical' ? 'scrollHeight' : 'scrollWidth'\n      return rootEl.value[property]\n    }\n\n    function getContainerSize () {\n      if (!rootEl.value) return 0\n\n      const property = props.direction === 'vertical' ? 'clientHeight' : 'clientWidth'\n      return rootEl.value[property]\n    }\n\n    onMounted(() => {\n      if (!rootEl.value) return\n\n      if (props.side === 'start') {\n        setScrollAmount(getScrollSize())\n      } else if (props.side === 'both') {\n        setScrollAmount(getScrollSize() / 2 - getContainerSize() / 2)\n      }\n    })\n\n    function setStatus (side: InfiniteScrollSide, status: InfiniteScrollStatus) {\n      if (side === 'start') {\n        startStatus.value = status\n      } else if (side === 'end') {\n        endStatus.value = status\n      } else if (side === 'both') {\n        startStatus.value = status\n        endStatus.value = status\n      }\n    }\n\n    function getStatus (side: string) {\n      return side === 'start' ? startStatus.value : endStatus.value\n    }\n\n    let previousScrollSize = 0\n    function handleIntersect (side: InfiniteScrollSide, _isIntersecting: boolean) {\n      isIntersecting.value = _isIntersecting\n      if (isIntersecting.value) {\n        intersecting(side)\n      }\n    }\n\n    function intersecting (side: InfiniteScrollSide) {\n      if (props.mode !== 'manual' && !isIntersecting.value) return\n\n      const status = getStatus(side)\n      if (!rootEl.value || ['empty', 'loading'].includes(status)) return\n\n      previousScrollSize = getScrollSize()\n      setStatus(side, 'loading')\n\n      function done (status: InfiniteScrollStatus) {\n        setStatus(side, status)\n\n        nextTick(() => {\n          if (status === 'empty' || status === 'error') return\n\n          if (status === 'ok' && side === 'start') {\n            setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount())\n          }\n          if (props.mode !== 'manual') {\n            nextTick(() => {\n              // Browser takes 2 - 3 animation frames to trigger IntersectionObserver after\n              // VInfiniteScrollIntersect leaves the viewpoint. So far I couldn't come up\n              // with a better solution than using 3 nested window.requestAnimationFrame. (#17475)\n              window.requestAnimationFrame(() => {\n                window.requestAnimationFrame(() => {\n                  window.requestAnimationFrame(() => {\n                    intersecting(side)\n                  })\n                })\n              })\n            })\n          }\n        })\n      }\n\n      emit('load', { side, done })\n    }\n\n    const { t } = useLocale()\n\n    function renderSide (side: InfiniteScrollSide, status: InfiniteScrollStatus) {\n      if (props.side !== side && props.side !== 'both') return\n\n      const onClick = () => intersecting(side)\n      const slotProps = { side, props: { onClick, color: props.color } }\n\n      if (status === 'error') return slots.error?.(slotProps)\n\n      if (status === 'empty') return slots.empty?.(slotProps) ?? <div>{ t(props.emptyText) }</div>\n\n      if (props.mode === 'manual') {\n        if (status === 'loading') {\n          return slots.loading?.(slotProps) ?? (\n            <VProgressCircular indeterminate color={ props.color } />\n          )\n        }\n\n        return slots['load-more']?.(slotProps) ?? (\n          <VBtn variant=\"outlined\" color={ props.color } onClick={ onClick }>\n            { t(props.loadMoreText) }\n          </VBtn>\n        )\n      }\n\n      return slots.loading?.(slotProps) ?? (\n        <VProgressCircular indeterminate color={ props.color } />\n      )\n    }\n\n    const { dimensionStyles } = useDimension(props)\n\n    useRender(() => {\n      const Tag = props.tag\n      const hasStartIntersect = props.side === 'start' || props.side === 'both'\n      const hasEndIntersect = props.side === 'end' || props.side === 'both'\n      const intersectMode = props.mode === 'intersect'\n\n      return (\n        <Tag\n          ref={ rootEl }\n          class={[\n            'v-infinite-scroll',\n            `v-infinite-scroll--${props.direction}`,\n            {\n              'v-infinite-scroll--start': hasStartIntersect,\n              'v-infinite-scroll--end': hasEndIntersect,\n            },\n          ]}\n          style={ dimensionStyles.value }\n        >\n          <div class=\"v-infinite-scroll__side\">\n            { renderSide('start', startStatus.value) }\n          </div>\n\n          { hasStartIntersect && intersectMode && (\n            <VInfiniteScrollIntersect\n              key=\"start\"\n              side=\"start\"\n              onIntersect={ handleIntersect }\n              rootMargin={ margin.value }\n            />\n          )}\n\n          { slots.default?.() }\n\n          { hasEndIntersect && intersectMode && (\n            <VInfiniteScrollIntersect\n              key=\"end\"\n              side=\"end\"\n              onIntersect={ handleIntersect }\n              rootMargin={ margin.value }\n            />\n          )}\n\n          <div class=\"v-infinite-scroll__side\">\n            { renderSide('end', endStatus.value) }\n          </div>\n        </Tag>\n      )\n    })\n\n    function reset (side?: InfiniteScrollSide) {\n      const effectiveSide = side ?? props.side\n      setStatus(effectiveSide, 'ok')\n\n      nextTick(() => {\n        if (effectiveSide !== 'end') {\n          setScrollAmount(\n            getScrollSize() - previousScrollSize + getScrollAmount(),\n          )\n        }\n        if (props.mode !== 'manual') {\n          nextTick(() => {\n            // See #17475\n            window.requestAnimationFrame(() => {\n              window.requestAnimationFrame(() => {\n                window.requestAnimationFrame(() => {\n                  if (effectiveSide === 'both') {\n                    intersecting('start')\n                    intersecting('end')\n                  } else {\n                    intersecting(effectiveSide)\n                  }\n                })\n              })\n            })\n          })\n        }\n      })\n    }\n\n    return { reset }\n  },\n})\n\nexport type VInfiniteScroll = InstanceType<typeof VInfiniteScroll>\n","// Styles\nimport './VItemGroup.sass'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeGroupProps, useGroup } from '@/composables/group'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { genericComponent, propsFactory } from '@/util'\n\n// Types\nimport type { GenericProps } from '@/util'\n\nexport const VItemGroupSymbol = Symbol.for('vuetify:v-item-group')\n\nexport const makeVItemGroupProps = propsFactory({\n  ...makeComponentProps(),\n  ...makeGroupProps({\n    selectedClass: 'v-item--selected',\n  }),\n  ...makeTagProps(),\n  ...makeThemeProps(),\n}, 'VItemGroup')\n\ntype VItemGroupSlots = {\n  default: {\n    isSelected: (id: string) => boolean\n    select: (id: string, value: boolean) => void\n    next: () => void\n    prev: () => void\n    selected: readonly string[]\n  }\n}\n\nexport const VItemGroup = genericComponent<new <T>(\n  props: {\n    modelValue?: T\n    'onUpdate:modelValue'?: (value: T) => void\n  },\n  slots: VItemGroupSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VItemGroup',\n\n  props: makeVItemGroupProps(),\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          props.class,\n        ]}\n        style={ props.style }\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 { VItemGroupSymbol } from './VItemGroup'\nimport { makeGroupItemProps, useGroupItem } from '@/composables/group'\n\n// Utilities\nimport { genericComponent } from '@/util'\n\ntype VItemSlots = {\n  default: {\n    isSelected: boolean | undefined\n    selectedClass: boolean | (string | undefined)[] | undefined\n    select: ((value: boolean) => void) | undefined\n    toggle: (() => void) | undefined\n    value: unknown\n    disabled: boolean | undefined\n  }\n}\n\nexport const VItem = genericComponent<VItemSlots>()({\n  name: 'VItem',\n\n  props: makeGroupItemProps(),\n\n  emits: {\n    'group:selected': (val: { value: boolean }) => true,\n  },\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","// Styles\nimport './VLayout.sass'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { createLayout, makeLayoutProps } from '@/composables/layout'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVLayoutProps = propsFactory({\n  ...makeComponentProps(),\n  ...makeDimensionProps(),\n  ...makeLayoutProps(),\n}, 'VLayout')\n\nexport const VLayout = genericComponent()({\n  name: 'VLayout',\n\n  props: makeVLayoutProps(),\n\n  setup (props, { slots }) {\n    const { layoutClasses, layoutStyles, getLayoutItem, items, layoutRef } = createLayout(props)\n    const { dimensionStyles } = useDimension(props)\n\n    useRender(() => (\n      <div\n        ref={ layoutRef }\n        class={[\n          layoutClasses.value,\n          props.class,\n        ]}\n        style={[\n          dimensionStyles.value,\n          layoutStyles.value,\n          props.style,\n        ]}\n      >\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 { makeComponentProps } from '@/composables/component'\nimport { makeLayoutItemProps, useLayoutItem } from '@/composables/layout'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { genericComponent, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const makeVLayoutItemProps = propsFactory({\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\n  ...makeComponentProps(),\n  ...makeLayoutItemProps(),\n}, 'VLayoutItem')\n\nexport const VLayoutItem = genericComponent()({\n  name: 'VLayoutItem',\n\n  props: makeVLayoutItemProps(),\n\n  setup (props, { slots }) {\n    const { layoutItemStyles } = useLayoutItem({\n      id: props.name,\n      order: computed(() => parseInt(props.order, 10)),\n      position: toRef(() => props.position),\n      elementSize: toRef(() => props.size),\n      layoutSize: toRef(() => props.size),\n      active: toRef(() => props.modelValue),\n      absolute: toRef(() => props.absolute),\n    })\n\n    return () => (\n      <div\n        class={[\n          'v-layout-item',\n          props.class,\n        ]}\n        style={[\n          layoutItemStyles.value,\n          props.style,\n        ]}\n      >\n        { slots.default?.() }\n      </div>\n    )\n  },\n})\n\nexport type VLayoutItem = InstanceType<typeof VLayoutItem>\n","// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeTransitionProps, MaybeTransition } from '@/composables/transition'\n\n// Directives\nimport vIntersect from '@/directives/intersect'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const makeVLazyProps = propsFactory({\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  ...makeComponentProps(),\n  ...makeDimensionProps(),\n  ...makeTagProps(),\n  ...makeTransitionProps({ transition: 'fade-transition' }),\n}, 'VLazy')\n\nexport const VLazy = genericComponent()({\n  name: 'VLazy',\n\n  directives: { vIntersect },\n\n  props: makeVLazyProps(),\n\n  emits: {\n    'update:modelValue': (value: boolean) => true,\n  },\n\n  setup (props, { slots }) {\n    const { dimensionStyles } = useDimension(props)\n\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    useRender(() => (\n      <props.tag\n        class={[\n          'v-lazy',\n          props.class,\n        ]}\n        v-intersect={[\n          {\n            handler: onIntersect,\n            options: props.options,\n          },\n          null,\n          isActive.value ? [] : ['once'],\n        ]}\n        style={[\n          dimensionStyles.value,\n          props.style,\n        ]}\n      >\n        { isActive.value && (\n          <MaybeTransition transition={ props.transition } appear>\n            { slots.default?.() }\n          </MaybeTransition>\n        )}\n      </props.tag>\n    ))\n\n    return {}\n  },\n})\n\nexport type VLazy = InstanceType<typeof VLazy>\n","// Styles\nimport './VLocaleProvider.sass'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { provideLocale } from '@/composables/locale'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVLocaleProviderProps = propsFactory({\n  locale: String,\n  fallbackLocale: String,\n  messages: Object,\n  rtl: {\n    type: Boolean,\n    default: undefined,\n  },\n\n  ...makeComponentProps(),\n}, 'VLocaleProvider')\n\nexport const VLocaleProvider = genericComponent()({\n  name: 'VLocaleProvider',\n\n  props: makeVLocaleProviderProps(),\n\n  setup (props, { slots }) {\n    const { rtlClasses } = provideLocale(props)\n\n    useRender(() => (\n      <div\n        class={[\n          'v-locale-provider',\n          rtlClasses.value,\n          props.class,\n        ]}\n        style={ props.style }\n      >\n        { slots.default?.() }\n      </div>\n    ))\n\n    return {}\n  },\n})\n\nexport type VLocaleProvider = InstanceType<typeof VLocaleProvider>\n","// Styles\nimport './VMain.sass'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useLayout } from '@/composables/layout'\nimport { useSsrBoot } from '@/composables/ssrBoot'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVMainProps = propsFactory({\n  scrollable: Boolean,\n\n  ...makeComponentProps(),\n  ...makeDimensionProps(),\n  ...makeTagProps({ tag: 'main' }),\n}, 'VMain')\n\nexport const VMain = genericComponent()({\n  name: 'VMain',\n\n  props: makeVMainProps(),\n\n  setup (props, { slots }) {\n    const { dimensionStyles } = useDimension(props)\n    const { mainStyles } = useLayout()\n    const { ssrBootStyles } = useSsrBoot()\n\n    useRender(() => (\n      <props.tag\n        class={[\n          'v-main',\n          { 'v-main--scrollable': props.scrollable },\n          props.class,\n        ]}\n        style={[\n          mainStyles.value,\n          ssrBootStyles.value,\n          dimensionStyles.value,\n          props.style,\n        ]}\n      >\n        { props.scrollable\n          ? (\n            <div class=\"v-main__scroller\">\n              { slots.default?.() }\n            </div>\n          )\n          : slots.default?.()\n        }\n      </props.tag>\n    ))\n\n    return {}\n  },\n})\n\nexport type VMain = InstanceType<typeof VMain>\n","// Utilities\nimport { 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","// Composables\nimport { useToggleScope } from '@/composables/toggleScope'\nimport { useVelocity } from '@/composables/touch'\n\n// Utilities\nimport { computed, onBeforeUnmount, onMounted, onScopeDispose, shallowRef, watchEffect } from 'vue'\nimport { clamp } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\nexport function useTouch ({\n  el,\n  isActive,\n  isTemporary,\n  width,\n  touchless,\n  position,\n}: {\n  el: Ref<HTMLElement | undefined>\n  isActive: Ref<boolean>\n  isTemporary: Ref<boolean>\n  width: Ref<number>\n  touchless: Ref<boolean>\n  position: Ref<'left' | 'right' | 'top' | '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(() => ['left', 'right'].includes(position.value))\n\n  const { addMovement, endTouch, getVelocity } = useVelocity()\n  let maybeDragging = false\n  const isDragging = shallowRef(false)\n  const dragProgress = shallowRef(0)\n  const offset = shallowRef(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 === 'top' ? 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 === 'top' ? (pos - offset.value) / width.value\n      : position.value === 'bottom' ? (document.documentElement.clientHeight - pos - offset.value) / width.value\n      : oops()\n    )\n    return limit ? clamp(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 === 'top' ? touchY < 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 === 'top' ? touchY < 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      start = [touchX, touchY]\n\n      offset.value = getOffset(isHorizontal.value ? touchX : touchY, isActive.value)\n      dragProgress.value = getProgress(isHorizontal.value ? touchX : touchY)\n\n      maybeDragging = offset.value > -20 && offset.value < 80\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        top: 'down',\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 === 'top' ? `translateY(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  useToggleScope(isDragging, () => {\n    const transform = el.value?.style.transform ?? null\n    const transition = el.value?.style.transition ?? null\n\n    watchEffect(() => {\n      el.value?.style.setProperty('transform', dragStyles.value?.transform || 'none')\n      el.value?.style.setProperty('transition', dragStyles.value?.transition || null)\n    })\n\n    onScopeDispose(() => {\n      el.value?.style.setProperty('transform', transform)\n      el.value?.style.setProperty('transition', transition)\n    })\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// Components\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VImg } from '@/components/VImg'\n\n// Composables\nimport { useSticky } from './sticky'\nimport { useTouch } from './touch'\nimport { useRtl } from '@/composables'\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeDelayProps, useDelay } from '@/composables/delay'\nimport { makeDisplayProps, useDisplay } from '@/composables/display'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeFocusTrapProps, useFocusTrap } from '@/composables/focusTrap'\nimport { makeLayoutItemProps, useLayout, useLayoutItem } from '@/composables/layout'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { useRouter } from '@/composables/router'\nimport { useScopeId } from '@/composables/scopeId'\nimport { useSsrBoot } from '@/composables/ssrBoot'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useToggleScope } from '@/composables/toggleScope'\n\n// Utilities\nimport { computed, nextTick, readonly, ref, shallowRef, toRef, Transition, watch } from 'vue'\nimport { genericComponent, isString, omit, propsFactory, resolveSize, toPhysical, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport type VNavigationDrawerImageSlot = {\n  image: string | undefined\n}\n\nexport type VNavigationDrawerSlots = {\n  default: never\n  prepend: never\n  append: never\n  image: VNavigationDrawerImageSlot\n}\n\nconst locations = ['start', 'end', 'left', 'right', 'top', 'bottom'] as const\n\nexport const makeVNavigationDrawerProps = propsFactory({\n  color: String,\n  disableResizeWatcher: Boolean,\n  disableRouteWatcher: Boolean,\n  expandOnHover: Boolean,\n  floating: Boolean,\n  modelValue: {\n    type: Boolean as PropType<boolean | null>,\n    default: null,\n  },\n  permanent: Boolean,\n  rail: {\n    type: Boolean as PropType<boolean | null>,\n    default: null,\n  },\n  railWidth: {\n    type: [Number, String],\n    default: 56,\n  },\n  scrim: {\n    type: [Boolean, String],\n    default: true,\n  },\n  image: String,\n  temporary: Boolean,\n  persistent: Boolean,\n  touchless: Boolean,\n  width: {\n    type: [Number, String],\n    default: 256,\n  },\n  location: {\n    type: String as PropType<typeof locations[number]>,\n    default: 'start',\n    validator: (value: any) => locations.includes(value),\n  },\n  sticky: Boolean,\n\n  ...makeBorderProps(),\n  ...makeComponentProps(),\n  ...makeDelayProps(),\n  ...makeDisplayProps({ mobile: null }),\n  ...makeElevationProps(),\n  ...makeLayoutItemProps(),\n  ...makeRoundedProps(),\n  ...omit(makeFocusTrapProps(), ['disableInitialFocus']),\n  ...makeTagProps({ tag: 'nav' }),\n  ...makeThemeProps(),\n}, 'VNavigationDrawer')\n\nexport const VNavigationDrawer = genericComponent<VNavigationDrawerSlots>()({\n  name: 'VNavigationDrawer',\n\n  props: makeVNavigationDrawerProps(),\n\n  emits: {\n    'update:modelValue': (val: boolean) => true,\n    'update:rail': (val: boolean) => true,\n  },\n\n  setup (props, { attrs, emit, slots }) {\n    const { isRtl } = useRtl()\n    const { themeClasses } = provideTheme(props)\n    const { borderClasses } = useBorder(props)\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)\n    const { elevationClasses } = useElevation(props)\n    const { displayClasses, mobile } = useDisplay(props)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n    const router = useRouter()\n    const isActive = useProxiedModel(props, 'modelValue', null, v => !!v)\n    const { ssrBootStyles } = useSsrBoot()\n    const { scopeId } = useScopeId()\n\n    const rootEl = ref<HTMLElement>()\n    const isHovering = shallowRef(false)\n\n    const { runOpenDelay, runCloseDelay } = useDelay(props, value => {\n      isHovering.value = value\n    })\n\n    const { layoutRect } = useLayout()\n\n    const location = computed(() => toPhysical(props.location, isRtl.value) as 'left' | 'right' | 'top' | 'bottom')\n    const isVertical = computed(() => location.value === 'top' || location.value === 'bottom')\n    const layoutSpan = computed(() => (isVertical.value ? layoutRect.value?.height : layoutRect.value?.width) ?? 0)\n\n    const width = computed(() => {\n      return (props.rail && props.expandOnHover && isHovering.value)\n        ? props.width\n        : props.rail\n          ? props.railWidth\n          : props.width\n    })\n    const widthPx = computed(() => resolveSize(width.value, layoutSpan.value))\n\n    const isPersistent = toRef(() => props.persistent)\n    const isTemporary = computed(() => !props.permanent && (mobile.value || props.temporary))\n    const isSticky = computed(() =>\n      props.sticky &&\n      !isTemporary.value &&\n      location.value !== 'bottom'\n    )\n\n    useFocusTrap(props, { isActive, localTop: isTemporary, contentEl: rootEl })\n\n    useToggleScope(() => props.expandOnHover && props.rail != null, () => {\n      watch(isHovering, val => emit('update:rail', !val))\n    })\n\n    useToggleScope(() => !props.disableResizeWatcher, () => {\n      watch(isTemporary, val => !props.permanent && (nextTick(() => isActive.value = !val)))\n    })\n\n    useToggleScope(() => !props.disableRouteWatcher && !!router, () => {\n      watch(router!.currentRoute, () => isTemporary.value && (isActive.value = false))\n    })\n\n    watch(() => props.permanent, val => {\n      if (val) isActive.value = true\n    })\n\n    if (props.modelValue == null && !isTemporary.value) {\n      isActive.value = props.permanent || !mobile.value\n    }\n\n    const { isDragging, dragProgress } = useTouch({\n      el: rootEl,\n      isActive,\n      isTemporary,\n      width: widthPx,\n      touchless: toRef(() => props.touchless),\n      position: location,\n    })\n\n    const layoutSize = computed(() => {\n      const size = isTemporary.value ? 0\n        : props.rail && props.expandOnHover ? props.railWidth\n        : width.value\n\n      return isDragging.value\n        ? resolveSize(size, layoutSpan.value) * dragProgress.value\n        : size\n    })\n    const { layoutItemStyles, layoutItemScrimStyles } = useLayoutItem({\n      id: props.name,\n      order: computed(() => parseInt(props.order, 10)),\n      position: location,\n      layoutSize,\n      elementSize: width,\n      active: readonly(isActive),\n      disableTransitions: toRef(() => isDragging.value),\n      absolute: computed(() =>\n        // eslint-disable-next-line @typescript-eslint/no-use-before-define\n        props.absolute || (isSticky.value && !isString(isStuck.value))\n      ),\n    })\n\n    const { isStuck, stickyStyles } = useSticky({ rootEl, isSticky, layoutItemStyles })\n\n    const scrimColor = useBackgroundColor(() => {\n      return isString(props.scrim) ? props.scrim : null\n    })\n    const scrimStyles = computed(() => ({\n      ...isDragging.value ? {\n        opacity: dragProgress.value * 0.2,\n        transition: 'none',\n      } : undefined,\n      ...layoutItemScrimStyles.value,\n    }))\n\n    provideDefaults({\n      VList: {\n        bgColor: 'transparent',\n      },\n    })\n\n    useRender(() => {\n      const hasImage = (slots.image || props.image)\n\n      return (\n        <>\n          <props.tag\n            ref={ rootEl }\n            onMouseenter={ runOpenDelay }\n            onMouseleave={ runCloseDelay }\n            class={[\n              'v-navigation-drawer',\n              `v-navigation-drawer--${location.value}`,\n              {\n                'v-navigation-drawer--expand-on-hover': props.expandOnHover,\n                'v-navigation-drawer--floating': props.floating,\n                'v-navigation-drawer--is-hovering': isHovering.value,\n                'v-navigation-drawer--rail': props.rail,\n                'v-navigation-drawer--temporary': isTemporary.value,\n                'v-navigation-drawer--persistent': isPersistent.value,\n                'v-navigation-drawer--active': isActive.value,\n                'v-navigation-drawer--sticky': isSticky.value,\n              },\n              themeClasses.value,\n              backgroundColorClasses.value,\n              borderClasses.value,\n              displayClasses.value,\n              elevationClasses.value,\n              roundedClasses.value,\n              props.class,\n            ]}\n            style={[\n              backgroundColorStyles.value,\n              layoutItemStyles.value,\n              ssrBootStyles.value,\n              stickyStyles.value,\n              roundedStyles.value,\n              props.style,\n            ]}\n            inert={ !isActive.value }\n            { ...scopeId }\n            { ...attrs }\n          >\n            { hasImage && (\n              <div key=\"image\" class=\"v-navigation-drawer__img\">\n                { !slots.image ? (\n                  <VImg\n                    key=\"image-img\"\n                    alt=\"\"\n                    cover\n                    height=\"inherit\"\n                    src={ props.image }\n                  />\n                ) : (\n                  <VDefaultsProvider\n                    key=\"image-defaults\"\n                    disabled={ !props.image }\n                    defaults={{\n                      VImg: {\n                        alt: '',\n                        cover: true,\n                        height: 'inherit',\n                        src: props.image,\n                      },\n                    }}\n                    v-slots:default={ slots.image }\n                  />\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) && !!props.scrim && (\n              <div\n                class={['v-navigation-drawer__scrim', scrimColor.backgroundColorClasses.value]}\n                style={[scrimStyles.value, scrimColor.backgroundColorStyles.value]}\n                onClick={ () => {\n                  if (isPersistent.value) return\n                  isActive.value = false\n                }}\n                { ...scopeId }\n              />\n            )}\n          </Transition>\n        </>\n      )\n    })\n\n    return {\n      isStuck,\n    }\n  },\n})\n\nexport type VNavigationDrawer = InstanceType<typeof VNavigationDrawer>\n","// Utilities\nimport { computed, onBeforeUnmount, onMounted, shallowRef, watch } from 'vue'\nimport { convertToUnit, isBoolean } from '@/util'\n\n// Types\nimport type { CSSProperties, Ref, StyleValue } from 'vue'\n\ninterface StickyProps {\n  rootEl: Ref<HTMLElement | undefined>\n  isSticky: Ref<boolean>\n  layoutItemStyles: Ref<CSSProperties>\n}\n\nexport function useSticky ({ rootEl, isSticky, layoutItemStyles }: StickyProps) {\n  const isStuck = shallowRef<boolean | 'top' | 'bottom'>(false)\n  const stuckPosition = shallowRef(0)\n\n  const stickyStyles = computed<StyleValue>(() => {\n    const side = isBoolean(isStuck.value) ? 'top' : isStuck.value\n    return [\n      isSticky.value ? { top: 'auto', bottom: 'auto', height: undefined } : undefined,\n      isStuck.value\n        ? { [side]: convertToUnit(stuckPosition.value) }\n        : { top: layoutItemStyles.value.top },\n    ]\n  })\n\n  onMounted(() => {\n    watch(isSticky, val => {\n      if (val) {\n        window.addEventListener('scroll', onScroll, { passive: true })\n      } else {\n        window.removeEventListener('scroll', onScroll)\n      }\n    }, { immediate: true })\n  })\n\n  onBeforeUnmount(() => {\n    window.removeEventListener('scroll', onScroll)\n  })\n\n  let lastScrollTop = 0\n  function onScroll () {\n    const direction = lastScrollTop > window.scrollY ? 'up' : 'down'\n    const rect = rootEl.value!.getBoundingClientRect()\n    const layoutTop = parseFloat(layoutItemStyles.value.top ?? 0)\n    const top = window.scrollY - Math.max(0, stuckPosition.value - layoutTop)\n    const bottom =\n      rect.height +\n      Math.max(stuckPosition.value, layoutTop) -\n      window.scrollY -\n      window.innerHeight\n    const bodyScroll = parseFloat(getComputedStyle(rootEl.value!).getPropertyValue('--v-body-scroll-y')) || 0\n\n    if (rect.height < window.innerHeight - layoutTop) {\n      isStuck.value = 'top'\n      stuckPosition.value = layoutTop\n    } else if (\n      (direction === 'up' && isStuck.value === 'bottom') ||\n      (direction === 'down' && isStuck.value === 'top')\n    ) {\n      stuckPosition.value = window.scrollY + rect.top - bodyScroll\n      isStuck.value = true\n    } else if (direction === 'down' && bottom <= 0) {\n      stuckPosition.value = 0\n      isStuck.value = 'bottom'\n    } else if (direction === 'up' && top <= 0) {\n      if (!bodyScroll) {\n        stuckPosition.value = rect.top + top\n        isStuck.value = 'top'\n      } else if (isStuck.value !== 'top') {\n        stuckPosition.value = -top + bodyScroll + layoutTop\n        isStuck.value = 'top'\n      }\n    }\n\n    lastScrollTop = window.scrollY\n  }\n\n  return { isStuck, stickyStyles }\n}\n","// Composables\nimport { useHydration } from '@/composables/hydration'\n\n// Utilities\nimport { defineComponent } from '@/util'\n\nexport const VNoSsr = defineComponent({\n  name: 'VNoSsr',\n\n  setup (_, { slots }) {\n    const show = useHydration()\n\n    return () => show.value && slots.default?.()\n  },\n})\n\nexport type VNoSsr = InstanceType<typeof VNoSsr>\n","const NUMERAL_ZEROS = [\n  0x0660, // Arabic-Indic\n  0x06F0, // Extended Arabic-Indic — Persian, Dari\n  0x0966, // Devanagari\n  0x09E6, // Bengali\n  0x0A66, // Gurmukhi\n  0x0AE6, // Gujarati\n  0x0B66, // Oriya\n  0x0BE6, // Tamil\n  0x0C66, // Telugu\n  0x0CE6, // Kannada\n  0x0D66, // Malayalam\n  0x0E50, // Thai\n  0x0ED0, // Lao\n  0x0F20, // Tibetan\n  0x1040, // Myanmar\n  0x17E0, // Khmer\n  0x1810, // Mongolian\n  0xFF10, // Fullwidth\n]\n\nfunction normalizeDigits (str: string): string {\n  return str.replace(/[^\\x20-\\x7F]/g, char => {\n    const code = char.codePointAt(0)!\n    for (const zero of NUMERAL_ZEROS) {\n      if (code >= zero && code <= zero + 9) {\n        return String(code - zero)\n      }\n    }\n    return char\n  })\n}\n\ninterface FormatNumberOptions {\n  locale: string\n  precision?: number | null\n  minFractionDigits?: number | null\n  useGrouping: Intl.NumberFormatOptions['useGrouping']\n  decimalSeparator: string\n  groupSeparator: string\n}\n\nexport function formatNumber (val: number, options: FormatNumberOptions): string {\n  const { precision, minFractionDigits } = options\n  const formatter = new Intl.NumberFormat(\n    options.locale, {\n      minimumFractionDigits: minFractionDigits && precision != null\n        ? Math.min(minFractionDigits, precision)\n        : (minFractionDigits ?? precision ?? undefined),\n      maximumFractionDigits: precision ?? 20, // Intl defaults are dynamic (0, 2, 3)\n      useGrouping: options.useGrouping,\n    })\n\n  return formatter.formatToParts(val)\n    .map(p => {\n      if (p.type === 'group') return options.groupSeparator\n      if (p.type === 'decimal') return options.decimalSeparator\n      return normalizeDigits(p.value)\n    })\n    .join('')\n}\n","/* eslint-disable complexity */\n\n// Utilities\nimport { escapeForRegex, extractNumber, normalizeMinusSign } from '@/util'\n\ntype GroupingOption = 'always' | 'auto' | 'min2' | boolean\n\ninterface GroupedInputOptions {\n  groupSeparator: string\n  decimalSeparator: string\n  precision: number | null\n  grouping: GroupingOption\n  locale: string\n  minusSign: string\n}\n\ninterface InputResult {\n  text: string\n  cursor: number\n}\n\nfunction localizeMinusSign (text: string, minusSign: string): string {\n  return minusSign === '-' ? text : text.replace('-', minusSign)\n}\n\nfunction stripGrouping (text: string, groupSeparator: string): string {\n  return text.replaceAll(groupSeparator, '')\n}\n\n/** Fallback: fixed 3-digit groups */\nfunction formatWithoutLocale (digits: string, groupSeparator: string, grouping: GroupingOption): string {\n  if (grouping === 'min2' && digits.length <= 4) {\n    return digits\n  }\n\n  const groups: string[] = []\n  for (let i = digits.length; i > 0; i -= 3) {\n    groups.unshift(digits.slice(Math.max(0, i - 3), i))\n  }\n\n  return groups.join(groupSeparator)\n}\n\nfunction addGrouping (\n  raw: string,\n  groupSeparator: string,\n  decimalSeparator: string,\n  grouping: GroupingOption,\n  locale?: string,\n): string {\n  if (!grouping) return raw\n\n  const decimalIndex = raw.indexOf(decimalSeparator)\n  const integerPart = decimalIndex >= 0 ? raw.slice(0, decimalIndex) : raw\n  const rest = decimalIndex >= 0 ? raw.slice(decimalIndex) : ''\n\n  const sign = integerPart.startsWith('-') ? '-' : ''\n  const digits = sign ? integerPart.slice(1) : integerPart\n\n  if (!digits) return raw\n\n  if (locale) {\n    const num = Number(digits)\n    if (!Number.isFinite(num)) return raw\n    const grouped = new Intl.NumberFormat(locale, {\n      useGrouping: grouping,\n      numberingSystem: 'latn',\n    })\n      .formatToParts(num)\n      .map(p => p.type === 'group' ? groupSeparator : p.value)\n      .join('')\n    return sign + grouped + rest\n  }\n\n  return sign + formatWithoutLocale(digits, groupSeparator, grouping) + rest\n}\n\n/** Count non-separator characters before displayPosition */\nfunction toLogicalPosition (text: string, groupSeparator: string, displayPosition: number): number {\n  let logical = 0\n  for (let i = 0; i < displayPosition && i < text.length; i++) {\n    if (text[i] !== groupSeparator) logical++\n  }\n  return logical\n}\n\nfunction toDisplayPosition (text: string, groupSeparator: string, logicalPosition: number): number {\n  let logical = 0\n  for (let i = 0; i <= text.length; i++) {\n    if (logical === logicalPosition) return i\n    if (i < text.length && text[i] !== groupSeparator) logical++\n  }\n  return text.length\n}\n\n/**\n * Process a beforeinput event for plain (non-grouped) number input.\n * Returns { text, cursor } when the input needs correction, or null to let browser handle it.\n */\nexport function processPlainInput (\n  data: string | null,\n  value: string,\n  selectionStart: number,\n  selectionEnd: number,\n  options: { decimalSeparator: string, precision: number | null, minusSign: string },\n): InputResult | null {\n  if (!data) return null\n\n  const { decimalSeparator, precision, minusSign } = options\n\n  value = normalizeMinusSign(value)\n\n  const beforePart = value.slice(0, selectionStart)\n  let cleanData = extractNumber(data, precision, decimalSeparator)\n  if (cleanData.startsWith('-') && beforePart.length > 0) cleanData = cleanData.slice(1)\n  if (cleanData.includes(decimalSeparator) && beforePart.includes(decimalSeparator)) {\n    cleanData = cleanData.replace(decimalSeparator, '')\n  }\n\n  const candidate = beforePart + cleanData + value.slice(selectionEnd)\n  const validPattern = new RegExp(`^-?\\\\d*${escapeForRegex(decimalSeparator)}?\\\\d*$`)\n\n  if (!validPattern.test(candidate)) {\n    return {\n      text: localizeMinusSign(extractNumber(candidate, precision, decimalSeparator), minusSign),\n      cursor: selectionStart,\n    }\n  }\n\n  if (precision != null && (candidate.split(decimalSeparator)[1]?.length ?? 0) > precision) {\n    const text = extractNumber(candidate, precision, decimalSeparator)\n    return {\n      text: localizeMinusSign(text, minusSign),\n      cursor: text === beforePart + value.slice(selectionEnd)\n        ? selectionStart\n        : selectionStart + cleanData.length,\n    }\n  }\n\n  if (cleanData === data) return null\n  return {\n    text: localizeMinusSign(candidate, minusSign),\n    cursor: selectionStart + cleanData.length,\n  }\n}\n\n/**\n * Process a beforeinput event for grouped number input.\n * Returns { text, cursor } to apply, or null for interactions that do not need override\n */\nexport function processGroupedInput (\n  inputType: string,\n  data: string | null,\n  value: string,\n  selectionStart: number,\n  selectionEnd: number,\n  options: GroupedInputOptions,\n): InputResult | null {\n  const { groupSeparator, decimalSeparator, precision, grouping, locale, minusSign } = options\n\n  value = normalizeMinusSign(value)\n  data = data && normalizeMinusSign(data)\n\n  const raw = stripGrouping(value, groupSeparator)\n  const logicalStart = toLogicalPosition(value, groupSeparator, selectionStart)\n  const logicalEnd = toLogicalPosition(value, groupSeparator, selectionEnd)\n  const hasSelection = logicalStart !== logicalEnd\n\n  let newRaw: string\n  let newLogicalCursor: number\n\n  switch (inputType) {\n    case 'insertText': {\n      if (!data) return null\n      newRaw = raw.slice(0, logicalStart) + data + raw.slice(logicalEnd)\n      newLogicalCursor = logicalStart + data.length\n      break\n    }\n    case 'insertFromPaste':\n    case 'insertFromDrop': {\n      if (!data) return null\n      const rawBefore = raw.slice(0, logicalStart)\n      let cleanData = extractNumber(data, precision, decimalSeparator)\n      if (cleanData.startsWith('-') && rawBefore.length > 0) {\n        cleanData = cleanData.slice(1)\n      }\n      if (cleanData.includes(decimalSeparator) && rawBefore.includes(decimalSeparator)) {\n        cleanData = cleanData.replace(decimalSeparator, '')\n      }\n      newRaw = rawBefore + cleanData + raw.slice(logicalEnd)\n      newLogicalCursor = logicalStart + cleanData.length\n      break\n    }\n    case 'deleteContentBackward': {\n      if (hasSelection) {\n        newRaw = raw.slice(0, logicalStart) + raw.slice(logicalEnd)\n        newLogicalCursor = logicalStart\n      } else if (logicalStart > 0) {\n        newRaw = raw.slice(0, logicalStart - 1) + raw.slice(logicalStart)\n        newLogicalCursor = logicalStart - 1\n      } else {\n        // At the start, nothing to delete\n        newRaw = raw\n        newLogicalCursor = 0\n      }\n      break\n    }\n    case 'deleteContentForward': {\n      if (hasSelection) {\n        newRaw = raw.slice(0, logicalStart) + raw.slice(logicalEnd)\n        newLogicalCursor = logicalStart\n      } else if (logicalStart < raw.length) {\n        newRaw = raw.slice(0, logicalStart) + raw.slice(logicalStart + 1)\n        newLogicalCursor = logicalStart\n      } else {\n        // At the end, nothing to delete\n        newRaw = raw\n        newLogicalCursor = logicalStart\n      }\n      break\n    }\n    case 'deleteByCut': {\n      newRaw = raw.slice(0, logicalStart) + raw.slice(logicalEnd)\n      newLogicalCursor = logicalStart\n      break\n    }\n    case 'deleteWordBackward': {\n      if (hasSelection) {\n        newRaw = raw.slice(0, logicalStart) + raw.slice(logicalEnd)\n        newLogicalCursor = logicalStart\n      } else {\n        let deleteEnd = logicalStart\n        // Skip non-digits first (e.g., decimal separator)\n        while (deleteEnd > 0 && !/\\d/.test(raw[deleteEnd - 1])) deleteEnd--\n        // Then skip digits\n        while (deleteEnd > 0 && /\\d/.test(raw[deleteEnd - 1])) deleteEnd--\n        newRaw = raw.slice(0, deleteEnd) + raw.slice(logicalStart)\n        newLogicalCursor = deleteEnd\n      }\n      break\n    }\n    case 'deleteWordForward': {\n      if (hasSelection) {\n        newRaw = raw.slice(0, logicalStart) + raw.slice(logicalEnd)\n        newLogicalCursor = logicalStart\n      } else {\n        let deleteEnd = logicalStart\n        while (deleteEnd < raw.length && !/\\d/.test(raw[deleteEnd])) deleteEnd++\n        while (deleteEnd < raw.length && /\\d/.test(raw[deleteEnd])) deleteEnd++\n        newRaw = raw.slice(0, logicalStart) + raw.slice(deleteEnd)\n        newLogicalCursor = logicalStart\n      }\n      break\n    }\n    case 'deleteSoftLineBackward': {\n      newRaw = raw.slice(logicalEnd)\n      newLogicalCursor = 0\n      break\n    }\n    case 'deleteSoftLineForward': {\n      newRaw = raw.slice(0, logicalStart)\n      newLogicalCursor = logicalStart\n      break\n    }\n    default:\n      return null\n  }\n\n  const validPattern = new RegExp(`^-?\\\\d*${escapeForRegex(decimalSeparator)}?\\\\d*$`)\n  if (!validPattern.test(newRaw)) {\n    newRaw = extractNumber(newRaw, precision, decimalSeparator)\n    newLogicalCursor = Math.min(newLogicalCursor, newRaw.length)\n  }\n\n  if (precision != null) {\n    const parts = newRaw.split(decimalSeparator)\n    if (parts[1]?.length > precision) {\n      newRaw = parts[0] + decimalSeparator + parts[1].slice(0, precision)\n      newLogicalCursor = Math.min(newLogicalCursor, newRaw.length)\n    }\n    if (precision === 0 && newRaw.endsWith(decimalSeparator)) {\n      newRaw = newRaw.slice(0, -1)\n      newLogicalCursor = Math.min(newLogicalCursor, newRaw.length)\n    }\n  }\n\n  const formatted = addGrouping(newRaw, groupSeparator, decimalSeparator, grouping, locale)\n  const cursor = toDisplayPosition(formatted, groupSeparator, newLogicalCursor)\n\n  return { text: localizeMinusSign(formatted, minusSign), cursor }\n}\n","// Styles\nimport './VNumberInput.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VDivider } from '@/components/VDivider'\nimport { makeVTextFieldProps, VTextField } from '@/components/VTextField/VTextField'\n\n// Composables\nimport { formatNumber } from './format'\nimport { useHold } from './hold'\nimport { processGroupedInput, processPlainInput } from './typing'\nimport { injectNestedDefaults } from '@/composables/defaults'\nimport { useForm } from '@/composables/form'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, ref, shallowRef, toRef, watch } from 'vue'\nimport { clamp, consoleWarn, genericComponent, normalizeMinusSign, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VTextFieldSlots } from '@/components/VTextField/VTextField'\n\ntype ControlSlot = {\n  props: Record<string, unknown>\n}\n\ntype VNumberInputSlots = Omit<VTextFieldSlots, 'default'> & {\n  increment: ControlSlot\n  decrement: ControlSlot\n}\n\ntype ControlVariant = 'default' | 'stacked' | 'split' | 'hidden'\n\nconst makeVNumberInputProps = propsFactory({\n  controlVariant: {\n    type: String as PropType<ControlVariant>,\n    default: 'default',\n  },\n  inset: Boolean,\n  hideInput: Boolean,\n  modelValue: {\n    type: Number as PropType<number | null>,\n    default: null,\n  },\n  min: {\n    type: Number,\n    default: Number.MIN_SAFE_INTEGER,\n  },\n  max: {\n    type: Number,\n    default: Number.MAX_SAFE_INTEGER,\n  },\n  step: {\n    type: Number,\n    default: 1,\n  },\n  precision: {\n    type: Number as PropType<number | null>,\n    default: 0,\n  },\n  minFractionDigits: {\n    type: Number as PropType<number | null>,\n    default: null,\n  },\n  decimalSeparator: {\n    type: String,\n    validator: (v: any) => !v || v.length === 1,\n  },\n  grouping: {\n    type: [Boolean, String] as PropType<'always' | 'auto' | 'min2' | boolean>,\n    default: false,\n  },\n  groupSeparator: {\n    type: String,\n    validator: (v: any) => !v || (v.length === 1 && !/[0-9+-]/.test(v)),\n  },\n\n  ...omit(makeVTextFieldProps(), ['modelValue', 'validationValue']),\n}, 'VNumberInput')\n\nexport const VNumberInput = genericComponent<VNumberInputSlots>()({\n  name: 'VNumberInput',\n\n  props: {\n    ...makeVNumberInputProps(),\n  },\n\n  emits: {\n    'update:focused': (val: boolean) => true,\n    'update:modelValue': (val: number) => true,\n  },\n\n  setup (props, { slots }) {\n    const vTextFieldRef = ref<VTextField>()\n    const controlDefaults = injectNestedDefaults<VBtn['$props']>('VBtn')\n\n    const { holdStart, holdStop } = useHold({ toggleUpDown })\n    const form = useForm(props)\n    const controlsDisabled = computed(() => (\n      form.isDisabled.value || form.isReadonly.value\n    ))\n\n    const isFocused = shallowRef(props.focused)\n\n    const {\n      current: locale,\n      decimalSeparator: decimalSeparatorFromLocale,\n      numericGroupSeparator: numericGroupSeparatorFromLocale,\n    } = useLocale()\n\n    const decimalSeparator = computed(() => props.decimalSeparator?.[0] || decimalSeparatorFromLocale.value)\n    const groupSeparator = computed(() => {\n      const separator = props.groupSeparator?.[0] || numericGroupSeparatorFromLocale.value\n      if (separator !== decimalSeparator.value) return separator\n      if (props.grouping) {\n        consoleWarn(`decimalSeparator and groupSeparator are both \"${separator}\", groups will not be separated`)\n      }\n      return ''\n    })\n    const minusSign = computed(() => new Intl.NumberFormat(locale.value).formatToParts(-1).find(p => p.type === 'minusSign')?.value ?? '-')\n\n    function toNumber (val: string | null | undefined) {\n      return Number(normalizeMinusSign(val ?? '')\n        .replaceAll(groupSeparator.value, '')\n        .replace(decimalSeparator.value, '.')\n        .replace(/[^0-9.-]/g, ''))\n    }\n\n    function correctPrecision (val: number, precision?: number | null, trim = true) {\n      precision ??= isFocused.value && trim ? undefined : props.precision ?? undefined\n      return formatNumber(val, {\n        locale: locale.value,\n        precision,\n        minFractionDigits: props.minFractionDigits,\n        useGrouping: props.grouping,\n        decimalSeparator: decimalSeparator.value,\n        groupSeparator: groupSeparator.value,\n      })\n    }\n\n    const model = useProxiedModel(props, 'modelValue', null,\n      val => val ?? null,\n      val => val == null\n        ? val ?? null\n        : clamp(Number(val), props.min, props.max)\n    )\n\n    const _inputText = shallowRef<string | null>(null)\n    const _lastParsedValue = shallowRef<number | null>(null)\n\n    watch(model, val => {\n      if (\n        isFocused.value &&\n          !controlsDisabled.value &&\n          toNumber(_inputText.value) === val\n      ) {\n        // ignore external changes while typing\n        // e.g. 5.01{backspace}2 » should result in 5.02\n        //      but we emit '5' in and want to preserve '5.0'\n      } else if (val == null) {\n        _inputText.value = null\n        _lastParsedValue.value = null\n      } else if (!isNaN(val)) {\n        _inputText.value = correctPrecision(val)\n        _lastParsedValue.value = toNumber(_inputText.value)\n      }\n    }, { immediate: true })\n\n    const inputText = computed<string | null>({\n      get: () => _inputText.value,\n      set (val) {\n        if (val === null || val === '') {\n          model.value = null\n          _inputText.value = null\n          _lastParsedValue.value = null\n          return\n        }\n        const parsedValue = toNumber(val)\n        if (!isNaN(parsedValue)) {\n          _inputText.value = val\n          _lastParsedValue.value = parsedValue\n\n          if (parsedValue <= props.max && parsedValue >= props.min) {\n            model.value = parsedValue\n          }\n        }\n      },\n    })\n\n    const isOutOfRange = computed(() => {\n      if (_lastParsedValue.value === null) return false\n      const numberFromText = toNumber(_inputText.value)\n      return numberFromText !== clamp(numberFromText, props.min, props.max)\n    })\n\n    function stepResult (increment: boolean) {\n      const current = toNumber(inputText.value)\n      const stepped = current + (increment ? props.step : -props.step)\n      return { current, stepped, next: clamp(stepped, props.min, props.max) }\n    }\n\n    const canIncrease = computed(() => {\n      if (controlsDisabled.value) return false\n      if (model.value == null) return true\n      const { current, next } = stepResult(true)\n      return next !== current\n    })\n    const canDecrease = computed(() => {\n      if (controlsDisabled.value) return false\n      if (model.value == null) return true\n      const { current, next } = stepResult(false)\n      return next !== current\n    })\n\n    const controlVariant = computed(() => {\n      return props.hideInput ? 'stacked' : props.controlVariant\n    })\n\n    const incrementIcon = toRef(() => controlVariant.value === 'split' ? '$plus' : '$collapse')\n    const decrementIcon = toRef(() => controlVariant.value === 'split' ? '$minus' : '$expand')\n    const controlNodeSize = toRef(() => controlVariant.value === 'split' ? 'default' : 'small')\n    const controlNodeDefaultHeight = toRef(() => controlVariant.value === 'stacked' ? 'auto' : '100%')\n\n    const incrementSlotProps = {\n      props: {\n        onClick: onControlClick,\n        onPointerup: onControlMouseup,\n        onPointerdown: onUpControlMousedown,\n        onPointercancel: onControlMouseup,\n      },\n    }\n    const decrementSlotProps = {\n      props: {\n        onClick: onControlClick,\n        onPointerup: onControlMouseup,\n        onPointerdown: onDownControlMousedown,\n        onPointercancel: onControlMouseup,\n      },\n    }\n\n    watch(\n      () => [locale.value, decimalSeparator.value, groupSeparator.value, props.precision, props.minFractionDigits],\n      () => formatInputValue()\n    )\n\n    function inferPrecision (value: number | string | null) {\n      if (value == null) return 0\n      const str = value.toString()\n      const idx = str.indexOf('.') + 1\n      return idx ? str.length - idx : 0\n    }\n\n    function emitChange () {\n      vTextFieldRef.value?.controlRef?.dispatchEvent(new Event('change', { bubbles: true }))\n    }\n\n    function toggleUpDown (increment = true) {\n      if (controlsDisabled.value) return\n      if (increment ? !canIncrease.value : !canDecrease.value) return\n      if (model.value == null) {\n        inputText.value = correctPrecision(clamp(0, props.min, props.max))\n        emitChange()\n        return\n      }\n      const { current, stepped, next } = stepResult(increment)\n\n      inputText.value = next === stepped\n        ? correctPrecision(next, Math.max(inferPrecision(current), inferPrecision(props.step)))\n        : correctPrecision(next)\n      emitChange()\n    }\n\n    function onBeforeinput (e: InputEvent) {\n      if (controlsDisabled.value) return\n      const inputElement = e.target as HTMLInputElement\n\n      const result = props.grouping\n        ? processGroupedInput(\n          e.inputType,\n          e.data,\n          inputElement.value ?? '',\n          inputElement.selectionStart ?? 0,\n          inputElement.selectionEnd ?? 0,\n          {\n            groupSeparator: groupSeparator.value,\n            decimalSeparator: decimalSeparator.value,\n            precision: props.precision,\n            grouping: props.grouping,\n            locale: locale.value,\n            minusSign: minusSign.value,\n          }\n        )\n        : processPlainInput(\n          e.data,\n          inputElement.value ?? '',\n          inputElement.selectionStart ?? 0,\n          inputElement.selectionEnd ?? 0,\n          {\n            decimalSeparator: decimalSeparator.value,\n            precision: props.precision,\n            minusSign: minusSign.value,\n          }\n        )\n\n      if (result === null) return\n\n      e.preventDefault()\n\n      inputElement.value = result.text\n      inputElement.setSelectionRange(result.cursor, result.cursor)\n\n      nextTick(() => inputText.value = result.text)\n    }\n\n    function onKeydown (e: KeyboardEvent) {\n      if (\n        ['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab'].includes(e.key) ||\n        e.ctrlKey\n      ) return\n\n      if (['ArrowDown', 'ArrowUp'].includes(e.key)) {\n        e.preventDefault()\n        e.stopPropagation()\n        toggleUpDown(e.key === 'ArrowUp')\n      }\n    }\n\n    function onControlClick (e: MouseEvent) {\n      e.stopPropagation()\n    }\n\n    function onControlMouseup (e: PointerEvent) {\n      const el = e.currentTarget as HTMLElement\n      el?.releasePointerCapture(e.pointerId)\n      e.preventDefault()\n      holdStop()\n    }\n\n    function onUpControlMousedown (e: PointerEvent) {\n      const el = e.currentTarget as HTMLElement\n      el?.setPointerCapture(e.pointerId)\n      e.preventDefault()\n      e.stopPropagation()\n      holdStart('up')\n    }\n\n    function onDownControlMousedown (e: PointerEvent) {\n      const el = e.currentTarget as HTMLElement\n      el?.setPointerCapture(e.pointerId)\n      e.preventDefault()\n      e.stopPropagation()\n      holdStart('down')\n    }\n\n    function clampModel () {\n      if (controlsDisabled.value) return\n      if (!vTextFieldRef.value) return\n      const actualText = vTextFieldRef.value.value\n      const parsedValue = toNumber(actualText)\n      if (actualText && !isNaN(parsedValue)) {\n        inputText.value = correctPrecision(clamp(parsedValue, props.min, props.max))\n      } else {\n        inputText.value = null\n      }\n    }\n\n    function formatInputValue () {\n      if (controlsDisabled.value) return\n      inputText.value = model.value !== null && !isNaN(model.value)\n        ? correctPrecision(model.value, props.precision, false)\n        : null\n    }\n\n    function trimDecimalZeros () {\n      if (controlsDisabled.value) return\n      if (model.value === null || isNaN(model.value)) {\n        inputText.value = null\n        return\n      }\n      inputText.value = correctPrecision(model.value)\n    }\n\n    function onFocus () {\n      trimDecimalZeros()\n    }\n\n    function onBlur () {\n      clampModel()\n    }\n\n    useRender(() => {\n      const { modelValue: _, type, ...textFieldProps } = VTextField.filterProps(props)\n\n      function incrementControlNode () {\n        return !slots.increment ? (\n          <VBtn\n            aria-hidden=\"true\"\n            data-testid=\"increment\"\n            disabled={ !canIncrease.value }\n            height={ controlNodeDefaultHeight.value }\n            icon={ incrementIcon.value }\n            key=\"increment-btn\"\n            onClick={ onControlClick }\n            onPointerdown={ onUpControlMousedown }\n            onPointerup={ onControlMouseup }\n            onPointercancel={ onControlMouseup }\n            size={ controlNodeSize.value }\n            variant={ controlDefaults.value?.variant ?? 'text' }\n            tabindex=\"-1\"\n          />\n        ) : (\n          <VDefaultsProvider\n            key=\"increment-defaults\"\n            defaults={{\n              VBtn: {\n                disabled: !canIncrease.value,\n                height: controlNodeDefaultHeight.value,\n                size: controlNodeSize.value,\n                icon: incrementIcon.value,\n                variant: controlDefaults.value?.variant ?? 'text',\n              },\n            }}\n          >\n            { slots.increment(incrementSlotProps) }\n          </VDefaultsProvider>\n        )\n      }\n\n      function decrementControlNode () {\n        return !slots.decrement ? (\n          <VBtn\n            aria-hidden=\"true\"\n            data-testid=\"decrement\"\n            disabled={ !canDecrease.value }\n            height={ controlNodeDefaultHeight.value }\n            icon={ decrementIcon.value }\n            key=\"decrement-btn\"\n            onClick={ onControlClick }\n            onPointerdown={ onDownControlMousedown }\n            onPointerup={ onControlMouseup }\n            onPointercancel={ onControlMouseup }\n            size={ controlNodeSize.value }\n            variant={ controlDefaults.value?.variant ?? 'text' }\n            tabindex=\"-1\"\n          />\n        ) : (\n          <VDefaultsProvider\n            key=\"decrement-defaults\"\n            defaults={{\n              VBtn: {\n                disabled: !canDecrease.value,\n                height: controlNodeDefaultHeight.value,\n                size: controlNodeSize.value,\n                icon: decrementIcon.value,\n                variant: controlDefaults.value?.variant ?? 'text',\n              },\n            }}\n          >\n            { slots.decrement(decrementSlotProps) }\n          </VDefaultsProvider>\n        )\n      }\n\n      function controlNode () {\n        return (\n          <div class=\"v-number-input__control\">\n            { decrementControlNode() }\n\n            <VDivider\n              vertical={ controlVariant.value !== 'stacked' }\n            />\n\n            { incrementControlNode() }\n          </div>\n        )\n      }\n\n      function dividerNode () {\n        return !props.hideInput && !props.inset ? <VDivider vertical /> : undefined\n      }\n\n      const appendInnerControl =\n        controlVariant.value === 'split'\n          ? (\n            <div class=\"v-number-input__control\">\n              <VDivider vertical />\n\n              { incrementControlNode() }\n            </div>\n          ) : (props.reverse || controlVariant.value === 'hidden'\n            ? undefined\n            : <>{ dividerNode() }{ controlNode() }</>)\n\n      const hasAppendInner = slots['append-inner'] || appendInnerControl\n\n      const prependInnerControl =\n        controlVariant.value === 'split'\n          ? (\n            <div class=\"v-number-input__control\">\n              { decrementControlNode() }\n\n              <VDivider vertical />\n            </div>\n          ) : (props.reverse && controlVariant.value !== 'hidden'\n            ? <>{ controlNode() }{ dividerNode() }</>\n            : undefined)\n\n      const hasPrependInner = slots['prepend-inner'] || prependInnerControl\n\n      return (\n        <VTextField\n          ref={ vTextFieldRef }\n          { ...textFieldProps }\n          v-model={ inputText.value }\n          v-model:focused={ isFocused.value }\n          validationValue={ model.value }\n          error={ props.error || isOutOfRange.value || undefined }\n          onBeforeinput={ onBeforeinput }\n          onFocus={ onFocus }\n          onBlur={ onBlur }\n          onKeydown={ onKeydown }\n          class={[\n            'v-number-input',\n            {\n              'v-number-input--default': controlVariant.value === 'default',\n              'v-number-input--hide-input': props.hideInput,\n              'v-number-input--inset': props.inset,\n              'v-number-input--reverse': props.reverse,\n              'v-number-input--split': controlVariant.value === 'split',\n              'v-number-input--stacked': controlVariant.value === 'stacked',\n            },\n            props.class,\n          ]}\n          style={ props.style }\n          inputmode=\"decimal\"\n        >\n          {{\n            ...slots,\n            'append-inner': hasAppendInner ? (...args) => (\n              <>\n                { slots['append-inner']?.(...args) }\n                { appendInnerControl }\n              </>\n            ) : undefined,\n            'prepend-inner': hasPrependInner ? (...args) => (\n              <>\n                { prependInnerControl }\n                { slots['prepend-inner']?.(...args) }\n              </>\n            ) : undefined,\n          }}\n        </VTextField>\n      )\n    })\n\n    return forwardRefs({}, vTextFieldRef)\n  },\n})\n\nexport type VNumberInput = InstanceType<typeof VNumberInput>\n","// Utilities\nimport { onScopeDispose } from 'vue'\nimport { IN_BROWSER } from '@/util'\n\nconst HOLD_REPEAT = 50\nconst HOLD_DELAY = 500\n\nexport function useHold ({ toggleUpDown }: { toggleUpDown: (increment: boolean) => void }) {\n  let timeout = -1\n  let interval = -1\n\n  onScopeDispose(holdStop)\n\n  function holdStart (value: 'up' | 'down') {\n    holdStop()\n    tick(value)\n    window.addEventListener('pointerup', holdStop)\n    document.addEventListener('blur', holdStop)\n    timeout = window.setTimeout(() => {\n      interval = window.setInterval(() => tick(value), HOLD_REPEAT)\n    }, HOLD_DELAY)\n  }\n\n  function holdStop () {\n    if (!IN_BROWSER) return\n    window.clearTimeout(timeout)\n    window.clearInterval(interval)\n    window.removeEventListener('pointerup', holdStop)\n    document.removeEventListener('blur', holdStop)\n  }\n\n  onScopeDispose(holdStop)\n\n  function tick (value: 'up' | 'down') {\n    toggleUpDown(value === 'up')\n  }\n\n  return { holdStart, holdStop }\n}\n","// Types\nimport type { InjectionKey, Ref } from 'vue'\nimport type { OtpSlotData } from './useOtpInput'\n\nexport interface VOtpInputContext {\n  otpSlots: Readonly<Ref<OtpSlotData[]>>\n  isFocused: Ref<boolean>\n  focusAll: Ref<boolean>\n  divider: Ref<string | undefined>\n  merged: Ref<boolean>\n  focusAt: (index: number) => void\n}\n\nexport const VOtpInputSymbol: InjectionKey<VOtpInputContext> = Symbol.for('vuetify:v-otp-input')\n","// Components\nimport { VField } from '@/components/VField/VField'\n\n// Utilities\nimport { computed, createCommentVNode, inject } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Shared\nimport { VOtpInputSymbol } from './shared'\n\nexport const makeVOtpFieldProps = propsFactory({\n  index: {\n    type: Number,\n    required: true,\n  },\n}, 'VOtpField')\n\nexport const VOtpField = genericComponent()({\n  name: 'VOtpField',\n\n  props: makeVOtpFieldProps(),\n\n  setup (props) {\n    const otpInput = inject(VOtpInputSymbol)\n\n    if (!otpInput) {\n      throw new Error('[Vuetify] VOtpField must be used inside VOtpInput')\n    }\n\n    const slot = computed(() => otpInput.otpSlots.value[props.index])\n\n    const isHighlighted = computed(() =>\n      otpInput.isFocused.value && otpInput.focusAll.value && !slot.value?.isActive\n    )\n\n    useRender(() => {\n      if (!slot.value) return createCommentVNode()\n\n      return (\n        <VField\n          data-otp-index={ props.index }\n          focused={ slot.value.isActive || isHighlighted.value }\n          class={{ 'v-otp-input__field--highlighted': isHighlighted.value }}\n          onMousedown={ (e: MouseEvent) => e.preventDefault() }\n          onClick={ () => otpInput.focusAt(props.index) }\n        >\n          {{\n            loader: undefined,\n            default: () => (\n              <div class=\"v-otp-input__field\">\n                <input class=\"v-otp-input__spacer\" aria-hidden=\"true\" tabindex=\"-1\" />\n                { slot.value.compositionChar ? (\n                  <span class=\"v-otp-input__composition\">\n                    { slot.value.compositionChar }\n                  </span>\n                ) : slot.value.hasFakeCaret ? (\n                  <span class=\"v-otp-input__caret\" />\n                ) : (\n                  <span class={ !slot.value.char ? 'v-otp-input__placeholder' : undefined }>\n                    { slot.value.char ?? slot.value.placeholderChar ?? '' }\n                  </span>\n                )}\n              </div>\n            ),\n          }}\n        </VField>\n      )\n    })\n  },\n})\n\nexport type VOtpField = InstanceType<typeof VOtpField>\n","// Utilities\nimport { computed, Fragment, inject } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Shared\nimport { VOtpInputSymbol } from './shared'\n\n// Types\nimport type { PropType, VNode } from 'vue'\n\nfunction countSlotChildren (vnodes: VNode[]): number {\n  let count = 0\n  for (const vnode of vnodes) {\n    if (vnode.type === Fragment && Array.isArray(vnode.children)) {\n      count += countSlotChildren(vnode.children as VNode[])\n    } else {\n      count++\n    }\n  }\n  return count\n}\n\nexport const makeVOtpGroupProps = propsFactory({\n  merged: {\n    type: Boolean as PropType<boolean | null>,\n    default: null,\n  },\n}, 'VOtpGroup')\n\nexport const VOtpGroup = genericComponent()({\n  name: 'VOtpGroup',\n\n  props: makeVOtpGroupProps(),\n\n  setup (props, { slots }) {\n    const otpInput = inject(VOtpInputSymbol)\n\n    const isMerged = computed(() => props.merged ?? otpInput?.merged.value ?? false)\n\n    useRender(() => {\n      const children = slots.default?.() ?? []\n\n      return (\n        <div\n          class={[\n            'v-otp-group',\n            {\n              'v-otp-group--merged': isMerged.value,\n            },\n          ]}\n          style={ isMerged.value ? { flex: countSlotChildren(children) } : undefined }\n        >\n          { children }\n        </div>\n      )\n    })\n  },\n})\n\nexport type VOtpGroup = InstanceType<typeof VOtpGroup>\n","// Utilities\nimport { createSimpleFunctional } from '@/util'\n\nexport const VOtpSeparator = createSimpleFunctional('v-otp-input__divider')\n\nexport type VOtpSeparator = InstanceType<typeof VOtpSeparator>\n","// to be replaced by v0 implementation in v5.0\n\n// Utilities\nimport { computed, shallowRef, toRef, toValue } from 'vue'\n\n// Types\nimport type { MaybeRefOrGetter, Ref } from 'vue'\n\nexport interface OtpSlotData {\n  char: string | null\n  compositionChar: string | null\n  placeholderChar: string | null\n  isActive: boolean\n  hasFakeCaret: boolean\n}\n\nexport interface OtpSelection {\n  start: number\n  end: number\n  direction: 'forward' | 'backward' | 'none'\n}\n\nexport interface OtpSelectionInput {\n  value: string\n  selectionStart: number | null\n  selectionEnd: number | null\n  selectionDirection: 'forward' | 'backward' | 'none' | null\n  maxLength: number\n}\n\nexport const OtpInputPatterns = {\n  numeric: /[0-9]/,\n  alpha: /[a-zA-Z]/,\n  alphanumeric: /[a-zA-Z0-9]/,\n  'unicode-alpha': /\\p{L}/u,\n  'unicode-alphanumeric': /[\\p{L}\\p{N}]/u,\n} as const\n\nexport type OtpInputPattern = keyof typeof OtpInputPatterns\n\nconst IME_SCRIPT_RE = /[\\p{Script=Han}\\p{Script=Hiragana}\\p{Script=Katakana}\\p{Script=Hangul}\\p{Script=Bopomofo}]/u\n\nconst graphemeSegmenter = /* @__PURE__ */ new Intl.Segmenter(undefined, { granularity: 'grapheme' })\n\nexport interface OtpInputOptions {\n  value: Ref<string>\n  length?: MaybeRefOrGetter<number>\n  pattern?: MaybeRefOrGetter<OtpInputPattern | RegExp | null | undefined>\n  type?: MaybeRefOrGetter<'text' | 'password' | 'number'>\n  masked?: MaybeRefOrGetter<boolean>\n  placeholder?: MaybeRefOrGetter<string | null | undefined>\n  isFocused?: Ref<boolean>\n}\n\nexport interface OtpInputContext {\n  value: Ref<string>\n  length: Readonly<Ref<number>>\n  slots: Readonly<Ref<OtpSlotData[]>>\n  selection: Readonly<Ref<OtpSelection | null>>\n  composition: Readonly<Ref<string>>\n  isComposing: Readonly<Ref<boolean>>\n  isFocused: Ref<boolean>\n  effectivePattern: Readonly<Ref<RegExp | null>>\n  inputMode: Readonly<Ref<'numeric' | 'text'>>\n\n  filter: (text: string) => string\n  isImeText: (text: string) => boolean\n\n  setValue: (text: string) => string\n  insert: (text: string, range?: { start: number, end: number }) => string\n  deleteRange: (start: number, end: number) => string\n  bulkDelete: (isBackward: boolean) => string\n\n  syncSelection: (raw: OtpSelectionInput) => OtpSelection | null\n  setSelection: (start: number | null, end: number | null, direction?: 'forward' | 'backward' | 'none') => void\n  clearSelection: () => void\n  selectAtEnd: () => OtpSelection\n  selectSlot: (index: number) => OtpSelection\n  moveCaret: (direction: -1 | 1) => OtpSelection | null\n  extendSelection: (direction: -1 | 1) => OtpSelection | null\n\n  startComposition: () => void\n  updateComposition: (data: string) => void\n  endComposition: () => void\n\n  reset: () => void\n}\n\nexport function useOtpInput (options: OtpInputOptions): OtpInputContext {\n  const {\n    value,\n    length: _length = 6,\n    pattern,\n    type = 'number',\n    masked = false,\n    placeholder,\n    isFocused = shallowRef(false),\n  } = options\n\n  const selection = shallowRef<OtpSelection | null>(null)\n  const composition = shallowRef('')\n  const isComposing = shallowRef(false)\n  let prevSelection: OtpSelection | null = null\n  // Shift+Arrow anchor/focus tracked in grapheme space.\n  let anchorG: number | null = null\n  let focusG: number | null = null\n\n  const length = toRef(() => Number(toValue(_length)))\n  const isMasked = toRef(() => toValue(masked) || toValue(type) === 'password')\n  const effectivePattern = toRef((): RegExp | null => {\n    const p = toValue(pattern)\n    if (p instanceof RegExp) return p\n    if (p != null) return OtpInputPatterns[p as OtpInputPattern] ?? null\n    if (toValue(type) === 'number') return OtpInputPatterns.numeric\n    return null\n  })\n  const inputMode = toRef(() =>\n    effectivePattern.value === OtpInputPatterns.numeric ? 'numeric' as const : 'text' as const\n  )\n\n  // Selection is stored in code units (for `setSelectionRange`), but every slot\n  // boundary works in grapheme space so emoji, ZWJ sequences and skin-tone\n  // modifiers each occupy one slot.\n  function graphemes (s: string): string[] {\n    return Array.from(graphemeSegmenter.segment(s), seg => seg.segment)\n  }\n\n  function codeUnitsToGraphemeIndex (s: string, pos: number): number {\n    let count = 0\n    for (const seg of graphemeSegmenter.segment(s)) {\n      if (seg.index >= pos) break\n      count++\n    }\n    return count\n  }\n\n  function graphemeIndexToCodeUnits (s: string, gIndex: number): number {\n    if (gIndex <= 0) return 0\n    let count = 0\n    for (const seg of graphemeSegmenter.segment(s)) {\n      if (count === gIndex) return seg.index\n      count++\n    }\n    return s.length\n  }\n\n  const slots = computed((): OtpSlotData[] => {\n    const chars = graphemes(value.value)\n    const compositionChars = graphemes(composition.value)\n    const placeholderChar = toValue(placeholder) ?? null\n    const currentSelection = selection.value\n    const startG = currentSelection ? codeUnitsToGraphemeIndex(value.value, currentSelection.start) : null\n    const endG = currentSelection ? codeUnitsToGraphemeIndex(value.value, currentSelection.end) : null\n    const compositionStart = startG ?? chars.length\n\n    return Array.from({ length: length.value }, (_, i) => {\n      const char = chars[i] ?? null\n      const displayChar = char !== null && isMasked.value ? '•' : char\n\n      let compositionChar: string | null = null\n      if (composition.value && i >= compositionStart) {\n        const offset = i - compositionStart\n        const c = compositionChars[offset]\n        if (c != null) compositionChar = isMasked.value ? '•' : c\n      }\n\n      const isActive =\n        isFocused.value &&\n        startG !== null &&\n        endG !== null &&\n        (\n          (startG === endG && i === startG) ||\n          (i >= startG && i < endG)\n        )\n\n      return {\n        char: displayChar,\n        compositionChar,\n        placeholderChar,\n        isActive,\n        hasFakeCaret: isActive && char === null && compositionChar === null,\n      }\n    })\n  })\n\n  function filter (text: string): string {\n    const re = effectivePattern.value\n    if (!re) return text\n    return graphemes(text).filter(c => re.test(c)).join('')\n  }\n\n  function clampGraphemes (text: string, max: number): string {\n    const chars = graphemes(text)\n    if (chars.length <= max) return text\n    return chars.slice(0, max).join('')\n  }\n\n  function isImeText (text: string): boolean {\n    return IME_SCRIPT_RE.test(text)\n  }\n\n  function setValue (text: string): string {\n    const next = clampGraphemes(filter(text), length.value)\n    value.value = next\n    return next\n  }\n\n  function insert (text: string, range?: { start: number, end: number }): string {\n    const current = value.value\n    const start = range?.start ?? current.length\n    const end = range?.end ?? current.length\n    const filtered = filter(text)\n    const next = clampGraphemes(current.slice(0, start) + filtered + current.slice(end), length.value)\n    value.value = next\n\n    const insertEnd = Math.min(start + filtered.length, next.length)\n    const insertEndG = codeUnitsToGraphemeIndex(next, insertEnd)\n    const cursorG = Math.min(insertEndG, length.value - 1)\n    const cursor = graphemeIndexToCodeUnits(next, cursorG)\n    setSelection(cursor, insertEnd, 'forward')\n    return next\n  }\n\n  function deleteRange (start: number, end: number): string {\n    const current = value.value\n    const next = current.slice(0, start) + current.slice(end)\n    value.value = next\n    const newEnd = Math.min(start + 1, next.length)\n    setSelection(start, newEnd, 'forward')\n    return next\n  }\n\n  function bulkDelete (isBackward: boolean): string {\n    const current = value.value\n    const currentSelection = selection.value\n    const next = isBackward\n      ? current.slice(currentSelection?.end ?? current.length)\n      : current.slice(0, currentSelection?.start ?? 0)\n    value.value = next\n\n    if (next.length === 0) setSelection(0, 0, 'none')\n    else if (isBackward) setSelection(0, 1, 'forward')\n    else setSelection(next.length, next.length, 'none')\n    return next\n  }\n\n  function setSelection (\n    start: number | null,\n    end: number | null,\n    direction: 'forward' | 'backward' | 'none' = 'none'\n  ): void {\n    if (start === null || end === null) {\n      selection.value = null\n      anchorG = null\n      focusG = null\n      return\n    }\n    const next: OtpSelection = { start, end, direction }\n    selection.value = next\n    prevSelection = next\n    const startG = codeUnitsToGraphemeIndex(value.value, start)\n    anchorG = startG\n    focusG = startG\n  }\n\n  function clearSelection (): void {\n    selection.value = null\n    anchorG = null\n    focusG = null\n  }\n\n  function selectAtEnd (): OtpSelection {\n    const current = value.value\n    const graphemeCount = graphemes(current).length\n    let start: number\n    let end: number\n    if (graphemeCount >= length.value) {\n      // Full: range over the last slot so it renders as active.\n      start = graphemeIndexToCodeUnits(current, length.value - 1)\n      end = current.length\n    } else {\n      // Partial: single caret at the end of the typed content.\n      start = current.length\n      end = current.length\n    }\n    const next: OtpSelection = { start, end, direction: 'forward' }\n    selection.value = next\n    prevSelection = next\n    anchorG = graphemeCount >= length.value ? length.value - 1 : graphemeCount\n    focusG = anchorG\n    return next\n  }\n\n  function selectSlot (index: number): OtpSelection {\n    const current = value.value\n    const graphemeCount = graphemes(current).length\n    const clamped = Math.min(index, graphemeCount)\n    const start = graphemeIndexToCodeUnits(current, clamped)\n    const end = clamped < graphemeCount\n      ? graphemeIndexToCodeUnits(current, clamped + 1)\n      : current.length\n    const next: OtpSelection = { start, end, direction: 'forward' }\n    selection.value = next\n    prevSelection = next\n    anchorG = clamped\n    focusG = clamped\n    return next\n  }\n\n  function moveCaret (direction: -1 | 1): OtpSelection | null {\n    const current = value.value\n    if (graphemes(current).length === 0) return null\n\n    const currentSelection = selection.value\n    const currentG = currentSelection ? codeUnitsToGraphemeIndex(current, currentSelection.start) : 0\n    return selectSlot(Math.max(0, currentG + direction))\n  }\n\n  function extendSelection (direction: -1 | 1): OtpSelection | null {\n    const current = value.value\n    const valueG = graphemes(current).length\n    if (valueG === 0) return null\n\n    const maxFocus = Math.min(length.value - 1, valueG)\n\n    // Fallback when Shift+Arrow fires before anchor/focus were tracked.\n    if (anchorG === null || focusG === null) {\n      const currentSelection = selection.value\n      if (!currentSelection) return null\n      const selectionStartG = codeUnitsToGraphemeIndex(current, currentSelection.start)\n      const selectionEndG = codeUnitsToGraphemeIndex(current, currentSelection.end)\n      if (selectionEndG - selectionStartG <= 1) {\n        anchorG = selectionStartG\n        focusG = selectionStartG\n      } else if (currentSelection.direction === 'backward') {\n        anchorG = selectionEndG - 1\n        focusG = selectionStartG\n      } else {\n        anchorG = selectionStartG\n        focusG = selectionEndG - 1\n      }\n    }\n\n    const newFocus = Math.max(0, Math.min(maxFocus, focusG + direction))\n    focusG = newFocus\n\n    const minG = Math.min(anchorG, newFocus)\n    const maxG = Math.max(anchorG, newFocus)\n    const start = graphemeIndexToCodeUnits(current, minG)\n    const end = (maxG + 1) >= valueG ? current.length : graphemeIndexToCodeUnits(current, maxG + 1)\n    const newDirection: 'forward' | 'backward' = newFocus < anchorG ? 'backward' : 'forward'\n\n    const next: OtpSelection = { start, end, direction: newDirection }\n    selection.value = next\n    prevSelection = next\n    return next\n  }\n\n  // Force the rendered selection to always cover at least one slot, so a slot\n  // stays \"active\" when a caret would otherwise be between two.\n  function syncSelection (raw: OtpSelectionInput): OtpSelection | null {\n    if (composition.value) return selection.value\n\n    const { value: inputValue, selectionStart, selectionEnd, selectionDirection, maxLength } = raw\n\n    if (selectionStart === null || selectionEnd === null) {\n      selection.value = null\n      prevSelection = null\n      return null\n    }\n\n    const valueG = graphemes(inputValue).length\n    const startG = codeUnitsToGraphemeIndex(inputValue, selectionStart)\n    const endG = codeUnitsToGraphemeIndex(inputValue, selectionEnd)\n\n    let outStartG = -1\n    let outEndG = -1\n    let direction: 'forward' | 'backward' | 'none' | undefined\n\n    if (valueG !== 0) {\n      const isSingleCaret = startG === endG\n      const isInsertMode = startG === valueG && valueG < maxLength\n\n      if (isSingleCaret && !isInsertMode) {\n        if (startG === 0) {\n          outStartG = 0\n          outEndG = 1\n          direction = 'forward'\n        } else if (startG === maxLength) {\n          outStartG = startG - 1\n          outEndG = startG\n          direction = 'backward'\n        } else if (maxLength > 1 && valueG > 1) {\n          let offset = 0\n          if (prevSelection !== null) {\n            const prevStartG = codeUnitsToGraphemeIndex(inputValue, prevSelection.start)\n            const prevEndG = codeUnitsToGraphemeIndex(inputValue, prevSelection.end)\n            direction = startG < prevEndG ? 'backward' : 'forward'\n            const wasPreviouslyInserting = prevStartG === prevEndG && prevStartG < maxLength\n            // Multi-slot collapse: caret landed at an edge of the prior range,\n            // user didn't navigate between slots, so don't shift the slot back.\n            const wasMultiSlot = prevEndG - prevStartG > 1\n            if (direction === 'backward' && !wasPreviouslyInserting && !wasMultiSlot) {\n              offset = -1\n            }\n          }\n          outStartG = offset + startG\n          outEndG = offset + startG + 1\n        }\n      }\n    }\n\n    const finalStartG = outStartG !== -1 ? outStartG : startG\n    const finalEndG = outEndG !== -1 ? outEndG : endG\n    const finalStart = graphemeIndexToCodeUnits(inputValue, finalStartG)\n    const finalEnd = graphemeIndexToCodeUnits(inputValue, finalEndG)\n    const finalDirection = direction ?? selectionDirection ?? 'none'\n\n    const next: OtpSelection = { start: finalStart, end: finalEnd, direction: finalDirection }\n    selection.value = next\n    prevSelection = next\n    // Reset anchor on plain navigation; preserve it during extendSelection's round-trip.\n    if (finalEndG - finalStartG <= 1) {\n      anchorG = finalStartG\n      focusG = finalStartG\n    }\n    return next\n  }\n\n  function startComposition (): void {\n    isComposing.value = true\n    composition.value = ''\n  }\n\n  function updateComposition (data: string): void {\n    composition.value = IME_SCRIPT_RE.test(data) ? data : ''\n  }\n\n  function endComposition (): void {\n    isComposing.value = false\n    composition.value = ''\n  }\n\n  function reset (): void {\n    value.value = ''\n    selection.value = null\n    composition.value = ''\n    isComposing.value = false\n    prevSelection = null\n    anchorG = null\n    focusG = null\n  }\n\n  return {\n    value,\n    length,\n    slots,\n    selection,\n    composition,\n    isComposing,\n    isFocused,\n    effectivePattern,\n    inputMode,\n\n    filter,\n    isImeText,\n\n    setValue,\n    insert,\n    deleteRange,\n    bulkDelete,\n\n    syncSelection,\n    setSelection,\n    clearSelection,\n    selectAtEnd,\n    selectSlot,\n    moveCaret,\n    extendSelection,\n\n    startComposition,\n    updateComposition,\n    endComposition,\n\n    reset,\n  }\n}\n","// Styles\nimport './VOtpInput.sass'\n\n// Components\nimport { VOtpField } from './VOtpField'\nimport { VOtpGroup } from './VOtpGroup'\nimport { VOtpSeparator } from './VOtpSeparator'\nimport { makeVFieldProps } from '@/components/VField/VField'\nimport { VOverlay } from '@/components/VOverlay/VOverlay'\nimport { VProgressCircular } from '@/components/VProgressCircular/VProgressCircular'\n\n// Composables\nimport { useOtpInput } from './useOtpInput'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeFocusProps, useFocus } from '@/composables/focus'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useLocale, useRtl } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useToggleScope } from '@/composables/toggleScope'\n\n// Utilities\nimport { effectScope, provide, ref, toRef, watch, watchEffect } from 'vue'\nimport { filterInputAttrs, genericComponent, isBoolean, pick, propsFactory, useRender } from '@/util'\n\n// Shared\nimport { VOtpInputSymbol } from './shared'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { OtpInputPattern } from './useOtpInput'\n\nexport type { OtpSlotData, OtpInputPattern } from './useOtpInput'\nexport { VOtpInputSymbol } from './shared'\nexport type { VOtpInputContext } from './shared'\n\nexport type VOtpInputSlots = {\n  default: never\n  fields: never\n  divider: { index: number }\n  loader: never\n}\n\nexport const makeVOtpInputProps = propsFactory({\n  autofocus: Boolean,\n  divider: String,\n  focusAll: Boolean,\n  merged: Boolean,\n  label: {\n    type: String,\n    default: '$vuetify.input.otp',\n  },\n  length: {\n    type: [Number, String],\n    default: 6,\n  },\n  masked: Boolean,\n  modelValue: {\n    type: [Number, String],\n    default: undefined,\n  },\n  pattern: {\n    type: [String, Object] as PropType<OtpInputPattern | RegExp>,\n    default: undefined,\n  },\n  placeholder: String,\n  type: {\n    type: String as PropType<'text' | 'password' | 'number'>,\n    default: 'number',\n  },\n\n  ...makeDensityProps(),\n  ...makeDimensionProps(),\n  ...makeFocusProps(),\n  ...pick(makeVFieldProps({\n    variant: 'outlined' as const,\n  }), [\n    'baseColor',\n    'bgColor',\n    'class',\n    'color',\n    'disabled',\n    'error',\n    'loading',\n    'rounded',\n    'style',\n    'theme',\n    'variant',\n  ]),\n}, 'VOtpInput')\n\nexport const VOtpInput = genericComponent<VOtpInputSlots>()({\n  name: 'VOtpInput',\n\n  props: makeVOtpInputProps(),\n\n  emits: {\n    finish: (value: string) => true,\n    'update:focused': (value: boolean) => true,\n    'update:modelValue': (value: string) => true,\n  },\n\n  setup (props, { attrs, emit, slots }) {\n    const { densityClasses } = useDensity(props)\n    const { dimensionStyles } = useDimension(props)\n    const { isFocused } = useFocus(props)\n    const { t } = useLocale()\n    const { isRtl } = useRtl()\n\n    const model = useProxiedModel(props, 'modelValue', '', val => val == null ? '' : String(val))\n    const inputRef = ref<HTMLInputElement>()\n    const length = toRef(() => Number(props.length))\n    let focusAtPending = false\n\n    const otp = useOtpInput({\n      value: model,\n      length,\n      pattern: () => props.pattern,\n      type: () => props.type,\n      masked: () => props.masked,\n      placeholder: () => props.placeholder,\n      isFocused,\n    })\n\n    function applySelection () {\n      const input = inputRef.value\n      const selection = otp.selection.value\n      if (!input || !selection) return\n      input.setSelectionRange(selection.start, selection.end, selection.direction)\n    }\n\n    function syncDOM () {\n      const input = inputRef.value\n      if (!input) return\n      if (input.value !== otp.value.value) input.value = otp.value.value\n      applySelection()\n    }\n\n    function onSelectionChange () {\n      const input = inputRef.value\n      if (!input) {\n        otp.clearSelection()\n        return\n      }\n      const result = otp.syncSelection({\n        value: input.value,\n        selectionStart: input.selectionStart,\n        selectionEnd: input.selectionEnd,\n        selectionDirection: input.selectionDirection,\n        // Slot count, not `input.maxLength` (code units).\n        maxLength: length.value,\n      })\n      if (!result || otp.isComposing.value) return\n      if (input.selectionStart !== result.start || input.selectionEnd !== result.end) {\n        input.setSelectionRange(result.start, result.end, result.direction)\n      }\n    }\n\n    function onInput (e: Event) {\n      const ev = e as InputEvent\n      const target = e.target as HTMLInputElement\n      const composing = ev.isComposing || otp.isComposing.value\n\n      // CJK composition renders via the overlay until compositionend.\n      if (composing && otp.isImeText(target.value)) return\n\n      // Non-CJK composition (dead keys, Samsung predictive, Chrome OTP autofill)\n      // commits into the model now; don't end composition early or selection\n      // will advance past the model length on the next selectionchange.\n      const next = otp.setValue(target.value)\n      if (target.value !== next) target.value = next\n    }\n\n    function onCompositionstart () {\n      otp.startComposition()\n    }\n\n    function onCompositionupdate (e: CompositionEvent) {\n      otp.updateComposition(e.data ?? '')\n    }\n\n    function onCompositionend (e: CompositionEvent) {\n      otp.endComposition()\n      onInput(e)\n      onSelectionChange()\n    }\n\n    function onFocus () {\n      isFocused.value = true\n      if (focusAtPending) return\n      if (!inputRef.value) return\n      otp.selectAtEnd()\n      applySelection()\n    }\n\n    function onBlur () {\n      isFocused.value = false\n      otp.clearSelection()\n    }\n\n    function onKeydown (e: KeyboardEvent) {\n      if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n        const direction = (e.key === 'ArrowLeft' ? -1 : 1) * (isRtl.value ? -1 : 1) as -1 | 1\n        const moved = e.shiftKey\n          ? otp.extendSelection(direction)\n          : otp.moveCaret(direction)\n\n        if (moved) {\n          e.preventDefault()\n          syncDOM()\n        }\n        return\n      }\n\n      if (e.key !== 'Backspace' && e.key !== 'Delete') return\n      if (!e.metaKey && !e.ctrlKey && !e.altKey) return\n      e.preventDefault()\n      otp.bulkDelete(e.key === 'Backspace')\n      syncDOM()\n    }\n\n    function onBeforeinput (e: InputEvent) {\n      if (e.inputType === 'insertText' && e.data && otp.effectivePattern.value && !otp.effectivePattern.value.test(e.data)) {\n        e.preventDefault()\n        return\n      }\n\n      if (e.inputType === 'deleteContentForward') {\n        e.preventDefault()\n        const input = inputRef.value\n        if (!input) return\n        const selection = otp.selection.value\n        const start = selection?.start ?? 0\n        const end = selection?.end ?? input.value.length\n        otp.deleteRange(start, end)\n        syncDOM()\n        return\n      }\n\n      const isBackward = [\n        'deleteWordBackward',\n        'deleteSoftLineBackward',\n        'deleteHardLineBackward',\n      ].includes(e.inputType)\n      const isForward = [\n        'deleteWordForward',\n        'deleteSoftLineForward',\n        'deleteHardLineForward',\n      ].includes(e.inputType)\n      if (!isBackward && !isForward) return\n      e.preventDefault()\n      otp.bulkDelete(isBackward)\n      syncDOM()\n    }\n\n    function onPaste (e: ClipboardEvent) {\n      e.preventDefault()\n      const input = inputRef.value\n      if (!input) return\n      const text = e.clipboardData?.getData('text/plain').trim() ?? ''\n      const selection = otp.selection.value\n      otp.insert(text, {\n        start: selection?.start ?? 0,\n        end: selection?.end ?? input.value.length,\n      })\n      syncDOM()\n    }\n\n    function focusAt (index: number) {\n      const input = inputRef.value\n      if (!input) return\n      focusAtPending = true\n      input.focus()\n      focusAtPending = false\n      otp.selectSlot(index)\n      applySelection()\n    }\n\n    function slotIndexAtPoint (x: number, y: number): number | null {\n      const slot = document.elementsFromPoint(x, y).find(el => el.hasAttribute('data-otp-index'))\n      const index = slot ? Number(slot.getAttribute('data-otp-index')) : NaN\n      return Number.isNaN(index) ? null : index\n    }\n\n    function onClick (e: MouseEvent) {\n      const index = slotIndexAtPoint(e.clientX, e.clientY)\n      if (index != null) focusAt(index)\n    }\n\n    // selectionchange is not in InputHTMLAttributes types\n    watch(inputRef, (input, _, onCleanup) => {\n      if (!input) return\n      input.addEventListener('selectionchange', onSelectionChange)\n      onCleanup(() => input.removeEventListener('selectionchange', onSelectionChange))\n    }, { immediate: true })\n\n    useToggleScope(() => props.autofocus, () => {\n      const intersectScope = effectScope()\n      intersectScope.run(() => {\n        const { intersectionRef, isIntersecting } = useIntersectionObserver()\n        watchEffect(() => {\n          intersectionRef.value = inputRef.value\n        })\n        watch(isIntersecting, v => {\n          if (!v) return\n          intersectionRef.value?.focus()\n          intersectScope.stop()\n        })\n      })\n    })\n\n    watch(model, val => {\n      if (otp.isComposing.value) return\n      if (val.length === length.value) emit('finish', val)\n    })\n\n    provideDefaults({\n      VField: {\n        color: toRef(() => props.color),\n        bgColor: toRef(() => props.color),\n        baseColor: toRef(() => props.baseColor),\n        disabled: toRef(() => props.disabled),\n        error: toRef(() => props.error),\n        variant: toRef(() => props.variant),\n        rounded: toRef(() => props.rounded),\n      },\n    }, { scoped: true })\n\n    provide(VOtpInputSymbol, {\n      otpSlots: otp.slots,\n      isFocused,\n      focusAll: toRef(() => props.focusAll),\n      divider: toRef(() => props.divider),\n      merged: toRef(() => props.merged),\n      focusAt,\n    })\n\n    useRender(() => {\n      const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n\n      return (\n        <div\n          class={[\n            'v-otp-input',\n            {\n              'v-otp-input--divided': !!props.divider,\n            },\n            densityClasses.value,\n            props.class,\n          ]}\n          style={[props.style]}\n          { ...rootAttrs }\n        >\n          <div\n            class=\"v-otp-input__content\"\n            style={[dimensionStyles.value]}\n          >\n            { slots.fields ? slots.fields() : props.merged\n              ? (\n                <VOtpGroup merged>\n                  { Array.from({ length: length.value }, (_, i) => (\n                    <VOtpField index={ i } key={ i } />\n                  ))}\n                </VOtpGroup>\n              )\n              : Array.from({ length: length.value }, (_, i) => (\n                <>\n                  { (props.divider || slots.divider) && i !== 0 && (\n                    <VOtpSeparator key={ `d-${i}` }>\n                      { slots.divider?.({ index: i - 1 }) ?? props.divider }\n                    </VOtpSeparator>\n                  )}\n                  <VOtpField index={ i } key={ i } />\n                </>\n              ))\n            }\n\n            <input\n              ref={ inputRef }\n              class=\"v-otp-input__input\"\n              type=\"text\"\n              inputmode={ otp.inputMode.value }\n              dir={ isRtl.value ? 'rtl' : 'ltr' }\n              autocomplete=\"one-time-code\"\n              autocorrect=\"off\"\n              autocapitalize=\"off\"\n              spellcheck={ false }\n              disabled={ props.disabled }\n              aria-label={ t(props.label) }\n              value={ model.value }\n              { ...inputAttrs }\n              onClick={ onClick }\n              onInput={ onInput }\n              onKeydown={ onKeydown }\n              onBeforeinput={ onBeforeinput }\n              onFocus={ onFocus }\n              onBlur={ onBlur }\n              onPaste={ onPaste }\n              onCompositionstart={ onCompositionstart }\n              onCompositionupdate={ onCompositionupdate }\n              onCompositionend={ onCompositionend }\n            />\n\n            <VOverlay\n              contained\n              contentClass=\"v-otp-input__loader\"\n              modelValue={ !!props.loading }\n              persistent\n            >\n              { slots.loader?.() ?? (\n                <VProgressCircular\n                  color={ isBoolean(props.loading) ? undefined : props.loading }\n                  indeterminate\n                  size=\"24\"\n                  width=\"2\"\n                />\n              )}\n            </VOverlay>\n\n            { slots.default?.() }\n          </div>\n        </div>\n      )\n    })\n\n    return {\n      blur: () => { inputRef.value?.blur() },\n      focus: () => { inputRef.value?.focus() },\n      reset: otp.reset,\n      isFocused,\n    }\n  },\n})\n\nexport type VOtpInput = InstanceType<typeof VOtpInput>\n\nexport { useOtpInput, OtpInputPatterns } from './useOtpInput'\nexport type { OtpInputContext, OtpInputOptions } from './useOtpInput'\n","// Styles\nimport './VParallax.sass'\n\n// Components\nimport { VImg } from '@/components/VImg'\n\n// Composables\nimport { useDisplay } from '@/composables'\nimport { makeComponentProps } from '@/composables/component'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useResizeObserver } from '@/composables/resizeObserver'\n\n// Utilities\nimport { computed, onBeforeUnmount, ref, watch, watchEffect } from 'vue'\nimport { clamp, genericComponent, getScrollParent, PREFERS_REDUCED_MOTION, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { VImgSlots } from '@/components/VImg/VImg'\n\nfunction floor (val: number) {\n  return Math.floor(Math.abs(val)) * Math.sign(val)\n}\n\nexport const makeVParallaxProps = propsFactory({\n  scale: {\n    type: [Number, String],\n    default: 0.5,\n  },\n\n  ...makeComponentProps(),\n}, 'VParallax')\n\nexport const VParallax = genericComponent<VImgSlots>()({\n  name: 'VParallax',\n\n  props: makeVParallaxProps(),\n\n  setup (props, { slots }) {\n    const { intersectionRef, isIntersecting } = useIntersectionObserver()\n    const { resizeRef, contentRect } = useResizeObserver()\n    const { height: displayHeight } = useDisplay()\n\n    const root = ref<VImg>()\n\n    watchEffect(() => {\n      intersectionRef.value = resizeRef.value = root.value?.$el\n    })\n\n    let scrollParent: Element | Document\n    watch(isIntersecting, val => {\n      if (val) {\n        scrollParent = getScrollParent(intersectionRef.value)\n        scrollParent = scrollParent === document.scrollingElement ? document : 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    watch(displayHeight, onScroll)\n    watch(() => contentRect.value?.height, onScroll)\n\n    const scale = computed(() => {\n      return 1 - clamp(Number(props.scale))\n    })\n\n    let frame = -1\n    function onScroll () {\n      if (!isIntersecting.value || PREFERS_REDUCED_MOTION()) 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 scrollHeight = scrollParent instanceof Document ? document.documentElement.clientHeight : scrollParent.clientHeight\n        const scrollPos = scrollParent instanceof Document ? window.scrollY : scrollParent.scrollTop\n        const top = intersectionRef.value!.getBoundingClientRect().top + scrollPos\n        const height = contentRect.value!.height\n\n        const center = top + (height - scrollHeight) / 2\n        const translate = floor((scrollPos - center) * scale.value)\n        const sizeScale = Math.max(1, (scale.value * (scrollHeight - height) + height) / height)\n\n        el.style.setProperty('transform', `translateY(${translate}px) scale(${sizeScale})`)\n      })\n    }\n\n    useRender(() => (\n      <VImg\n        class={[\n          'v-parallax',\n          { 'v-parallax--active': isIntersecting.value },\n          props.class,\n        ]}\n        style={ props.style }\n        ref={ root }\n        cover\n        onLoadstart={ onScroll }\n        onLoad={ onScroll }\n        v-slots={ slots }\n      />\n    ))\n\n    return {}\n  },\n})\n\nexport type VParallax = InstanceType<typeof VParallax>\n","// Styles\nimport './VPullToRefresh.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VProgressCircular } from '@/components/VProgressCircular'\n\n// Utilities\nimport { computed, onMounted, ref, shallowRef, watch } from 'vue'\nimport { clamp, convertToUnit, genericComponent, getScrollParents, useRender } from '@/util'\n\nexport type VPullToRefreshSlots = {\n  default: never\n  pullDownPanel: {\n    canRefresh: boolean\n    goingUp: boolean\n    refreshing: boolean\n  }\n}\n\nexport const VPullToRefresh = genericComponent<VPullToRefreshSlots>()({\n  name: 'VPullToRefresh',\n\n  props: {\n    disabled: Boolean,\n    pullDownThreshold: {\n      type: Number,\n      default: 64,\n    },\n  },\n\n  emits: {\n    load: (options: { done: () => void }) => true,\n  },\n\n  setup (props, { slots, emit }) {\n    let touchstartY = 0\n    let scrollParents: HTMLElement[] = []\n\n    const touchDiff = shallowRef(0)\n    const containerRef = ref<HTMLElement>()\n\n    const refreshing = shallowRef(false)\n    const goingUp = shallowRef(false)\n    const touching = shallowRef(false)\n\n    const canRefresh = computed(() => touchDiff.value >= props.pullDownThreshold && !refreshing.value)\n    const topOffset = computed(() => clamp(touchDiff.value, 0, props.pullDownThreshold))\n\n    function onTouchstart (e: TouchEvent | MouseEvent) {\n      if (refreshing.value || props.disabled) return\n      touching.value = true\n      touchstartY = 'clientY' in e ? e.clientY : e.touches[0].clientY\n    }\n\n    function onTouchmove (e: TouchEvent | MouseEvent) {\n      if (refreshing.value || !touching.value || props.disabled) return\n\n      const touchY = 'clientY' in e ? e.clientY : e.touches[0].clientY\n\n      if (scrollParents.length && !scrollParents[0].scrollTop) {\n        touchDiff.value = touchY - touchstartY\n      }\n    }\n\n    function onTouchend (e: TouchEvent | MouseEvent) {\n      if (refreshing.value || props.disabled) return\n      touching.value = false\n      if (canRefresh.value) {\n        function done () {\n          if (!refreshing.value) return\n          touchDiff.value = 0\n          refreshing.value = false\n        }\n        emit('load', { done })\n        refreshing.value = true\n      } else {\n        touchDiff.value = 0\n      }\n    }\n\n    onMounted(() => {\n      scrollParents = getScrollParents(containerRef.value)\n    })\n\n    watch([topOffset, refreshing], () => {\n      if (scrollParents.length) {\n        const stopScrolling = topOffset.value && !refreshing.value\n        scrollParents.forEach(p => p.style.overflow = stopScrolling ? 'hidden' : 'auto')\n      }\n    })\n\n    watch(topOffset, (newVal, oldVal) => {\n      goingUp.value = newVal < oldVal\n    })\n\n    useRender(() => {\n      return (\n        <div\n          class={[\n            'v-pull-to-refresh',\n          ]}\n          onTouchstart={ onTouchstart }\n          onTouchmove={ onTouchmove }\n          onTouchend={ onTouchend }\n          onMousedown={ onTouchstart }\n          onMouseup={ onTouchend }\n          onMouseleave={ onTouchend }\n          onMousemove={ onTouchmove }\n          ref={ containerRef }\n        >\n          <div\n            class={[\n              'v-pull-to-refresh__pull-down',\n              {\n                'v-pull-to-refresh__pull-down--touching': touching.value,\n              },\n            ]}\n            style={{\n              top: convertToUnit(-1 * props.pullDownThreshold + topOffset.value),\n              height: convertToUnit(props.pullDownThreshold),\n            }}\n          >\n            { slots.pullDownPanel\n              ? slots.pullDownPanel({\n                canRefresh: canRefresh.value,\n                goingUp: goingUp.value,\n                refreshing: refreshing.value,\n              }) : (\n                <div\n                  class={[\n                    'v-pull-to-refresh__pull-down-default',\n                  ]}\n                >\n                  {\n                    refreshing.value ? (\n                      <VProgressCircular\n                        indeterminate\n                        active={ false }\n                      />\n                    ) : (\n                      <VIcon\n                        icon={ canRefresh.value || goingUp.value ? '$sortAsc' : '$sortDesc' }\n                      />\n                    )\n                  }\n                </div>\n              )\n            }\n          </div>\n          <div\n            class={[\n              'v-pull-to-refresh__scroll-container',\n              {\n                'v-pull-to-refresh__scroll-container--touching': touching.value,\n              },\n            ]}\n            style={{ top: convertToUnit(topOffset.value) }}\n          >\n            { slots.default?.() }\n          </div>\n        </div>\n      )\n    })\n  },\n})\n\nexport type VPullToRefresh = InstanceType<typeof VPullToRefresh>\n","// Components\nimport { makeVSelectionControlProps, VSelectionControl } from '@/components/VSelectionControl/VSelectionControl'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { VSelectionControlSlots } from '@/components/VSelectionControl/VSelectionControl'\nimport type { GenericProps } from '@/util'\n\nexport const makeVRadioProps = propsFactory({\n  ...omit(makeVSelectionControlProps({\n    falseIcon: '$radioOff',\n    trueIcon: '$radioOn',\n  }), ['indeterminate', 'indeterminateIcon']),\n}, 'VRadio')\n\nexport const VRadio = genericComponent<new <T>(\n  props: {\n    modelValue?: T\n    'onUpdate:modelValue'?: (value: T) => void\n  },\n  slots: VSelectionControlSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VRadio',\n\n  props: makeVRadioProps(),\n\n  emits: {\n    'update:modelValue': (value: any) => true,\n  },\n\n  setup (props, { slots }) {\n    const model = useProxiedModel(props, 'modelValue')\n\n    useRender(() => {\n      const controlProps = omit(VSelectionControl.filterProps(props), ['modelValue'])\n\n      return (\n        <VSelectionControl\n          { ...controlProps }\n          v-model={ model.value }\n          class={[\n            'v-radio',\n            props.class,\n          ]}\n          style={ props.style }\n          type=\"radio\"\n          v-slots={ slots }\n        />\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VRadio = InstanceType<typeof VRadio>\n","// Styles\nimport './VRadioGroup.sass'\n\n// Components\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\nimport { VLabel } from '@/components/VLabel'\nimport { VSelectionControl } from '@/components/VSelectionControl'\nimport { makeSelectionControlGroupProps, VSelectionControlGroup } from '@/components/VSelectionControlGroup/VSelectionControlGroup'\n\n// Composables\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { IconValue } from '@/composables/icons'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref, useId } from 'vue'\nimport { filterInputAttrs, genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { VInputSlots } from '@/components/VInput/VInput'\nimport type { GenericProps } from '@/util'\n\nexport type VRadioGroupSlots = Omit<VInputSlots, 'default'> & {\n  default: never\n  label: {\n    label: string | undefined\n    props: Record<string, any>\n  }\n}\n\nexport const makeVRadioGroupProps = propsFactory({\n  height: {\n    type: [Number, String],\n    default: 'auto',\n  },\n\n  ...omit(makeVInputProps(), ['direction', 'glow']),\n  ...omit(makeSelectionControlGroupProps(), ['multiple']),\n\n  trueIcon: {\n    type: IconValue,\n    default: '$radioOn',\n  },\n  falseIcon: {\n    type: IconValue,\n    default: '$radioOff',\n  },\n  type: {\n    type: String,\n    default: 'radio',\n  },\n}, 'VRadioGroup')\n\nexport const VRadioGroup = genericComponent<new <T>(\n  props: {\n    modelValue?: T | null\n    'onUpdate:modelValue'?: (value: T | null) => void\n  },\n  slots: VRadioGroupSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VRadioGroup',\n\n  inheritAttrs: false,\n\n  props: makeVRadioGroupProps(),\n\n  emits: {\n    'update:modelValue': (value: any) => true,\n  },\n\n  setup (props, { attrs, slots }) {\n    const uid = useId()\n    const id = computed(() => props.id || `radio-group-${uid}`)\n    const model = useProxiedModel(props, 'modelValue')\n    const inputRef = ref<VInput>()\n\n    useRender(() => {\n      const [rootAttrs, controlAttrs] = filterInputAttrs(attrs)\n      const inputProps = VInput.filterProps(props)\n      const controlProps = VSelectionControl.filterProps(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          ref={ inputRef }\n          class={[\n            'v-radio-group',\n            props.class,\n          ]}\n          style={ props.style }\n          { ...rootAttrs }\n          { ...inputProps }\n          v-model={ model.value }\n          id={ id.value }\n        >\n          {{\n            ...slots,\n            default: ({\n              id,\n              messagesId,\n              isDisabled,\n              isReadonly,\n            }) => (\n              <>\n                { label && (\n                  <VLabel id={ id.value }>\n                    { label }\n                  </VLabel>\n                )}\n\n                <VSelectionControlGroup\n                  { ...controlProps }\n                  id={ id.value }\n                  aria-describedby={ messagesId.value }\n                  defaultsTarget=\"VRadio\"\n                  trueIcon={ props.trueIcon }\n                  falseIcon={ props.falseIcon }\n                  type={ props.type }\n                  disabled={ isDisabled.value }\n                  readonly={ isReadonly.value }\n                  aria-labelledby={ label ? id.value : undefined }\n                  multiple={ false }\n                  { ...controlAttrs }\n                  v-model={ model.value }\n                  v-slots={ slots }\n                />\n              </>\n            ),\n          }}\n        </VInput>\n      )\n    })\n\n    return forwardRefs({}, inputRef)\n  },\n})\n\nexport type VRadioGroup = InstanceType<typeof VRadioGroup>\n","// Styles\nimport '../VSlider/VSlider.sass'\n\n// Components\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\nimport { VLabel } from '@/components/VLabel'\nimport { getOffset, makeSliderProps, useSlider, useSteps } from '@/components/VSlider/slider'\nimport { VSliderThumb } from '@/components/VSlider/VSliderThumb'\nimport { VSliderTrack } from '@/components/VSlider/VSliderTrack'\n\n// Composables\nimport { makeFocusProps, useFocus } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useRtl } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { filterInputAttrs, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType, WritableComputedRef } from 'vue'\nimport type { VSliderSlots } from '../VSlider/VSlider'\n\nexport const makeVRangeSliderProps = propsFactory({\n  ...makeFocusProps(),\n  ...makeVInputProps(),\n  ...makeSliderProps(),\n\n  strict: Boolean,\n  modelValue: {\n    type: Array as PropType<readonly (string | number)[]>,\n    default: () => ([0, 0]),\n  },\n}, 'VRangeSlider')\n\nexport const VRangeSlider = genericComponent<VSliderSlots>()({\n  name: 'VRangeSlider',\n\n  inheritAttrs: false,\n\n  props: makeVRangeSliderProps(),\n\n  emits: {\n    'update:focused': (value: boolean) => true,\n    'update:modelValue': (value: [number, number]) => true,\n    end: (value: [number, number]) => true,\n    start: (value: [number, number]) => true,\n  },\n\n  setup (props, { slots, emit, attrs }) {\n    const startThumbRef = ref<VSliderThumb>()\n    const stopThumbRef = ref<VSliderThumb>()\n    const inputRef = ref<VInput>()\n    const { rtlClasses } = useRtl()\n\n    function getActiveThumb (e: MouseEvent | TouchEvent) {\n      if (!startThumbRef.value || !stopThumbRef.value) return\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 steps = useSteps(props)\n\n    const model = useProxiedModel(\n      props,\n      'modelValue',\n      undefined,\n      arr => {\n        if (!arr?.length) return [0, 0]\n\n        return arr.map(value => steps.roundValue(value))\n      },\n    ) as WritableComputedRef<[number, number]> & { readonly externalValue: number[] }\n\n    const {\n      activeThumbRef,\n      hasLabels,\n      max,\n      min,\n      mousePressed,\n      onSliderMousedown,\n      onSliderTouchstart,\n      position,\n      trackContainerRef,\n      disabled,\n      readonly,\n    } = useSlider({\n      props,\n      steps,\n      onSliderStart: () => {\n        if (disabled.value || readonly.value) {\n          activeThumbRef.value?.blur()\n          return\n        }\n        emit('start', model.value)\n      },\n      onSliderEnd: ({ value }) => {\n        if (disabled.value || readonly.value) {\n          activeThumbRef.value?.blur()\n        } else {\n          const newValue: [number, number] =\n            activeThumbRef.value === startThumbRef.value?.$el\n              ? [value, model.value[1]]\n              : [model.value[0], value]\n\n          if (!props.strict && newValue[0] < newValue[1]) {\n            model.value = newValue\n          }\n        }\n\n        emit('end', model.value)\n      },\n      onSliderMove: ({ value }) => {\n        const [start, stop] = model.value\n\n        if (disabled.value || readonly.value) {\n          activeThumbRef.value?.blur()\n          return\n        }\n\n        if (!props.strict && start === stop && start !== min.value) {\n          activeThumbRef.value =\n            value > start ? stopThumbRef.value?.$el : startThumbRef.value?.$el\n          activeThumbRef.value?.focus()\n        }\n\n        if (activeThumbRef.value === startThumbRef.value?.$el) {\n          model.value = [Math.min(value, stop), stop]\n        } else {\n          model.value = [start, Math.max(start, value)]\n        }\n      },\n      getActiveThumb,\n    })\n\n    const { isFocused, focus, blur } = useFocus(props)\n    const trackStart = computed(() => position(model.value[0]))\n    const trackStop = computed(() => position(model.value[1]))\n\n    useRender(() => {\n      const inputProps = VInput.filterProps(props)\n      const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n      const hasPrepend = !!(props.label || slots.label || slots.prepend)\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': disabled.value,\n            },\n            rtlClasses.value,\n            props.class,\n          ]}\n          style={ props.style }\n          ref={ inputRef }\n          { ...inputProps }\n          { ...rootAttrs }\n          focused={ isFocused.value }\n        >\n          {{\n            ...slots,\n            prepend: hasPrepend ? slotProps => (\n              <>\n                { slots.label?.(slotProps) ?? (\n                  props.label\n                    ? (\n                      <VLabel\n                        class=\"v-slider__label\"\n                        text={ props.label }\n                      />\n                    ) : undefined\n                )}\n\n                { slots.prepend?.(slotProps) }\n              </>\n            ) : undefined,\n            default: ({ id, messagesId }) => (\n              <div\n                class=\"v-slider__container\"\n                onMousedown={ !readonly.value ? onSliderMousedown : undefined }\n                onTouchstartPassive={ !readonly.value ? onSliderTouchstart : undefined }\n              >\n                <input\n                  id={ `${id.value}_start` }\n                  name={ props.name || id.value }\n                  disabled={ disabled.value }\n                  readonly={ readonly.value }\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={ disabled.value }\n                  readonly={ readonly.value }\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                  aria-describedby={ messagesId.value }\n                  focused={ isFocused && activeThumbRef.value === startThumbRef.value?.$el }\n                  modelValue={ model.value[0] }\n                  onUpdate:modelValue={ v => (model.value = [v, model.value[1]]) }\n                  onFocus={ (e: FocusEvent) => {\n                    focus()\n                    activeThumbRef.value = startThumbRef.value?.$el\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                      max.value !== min.value &&\n                      model.value[0] === model.value[1] &&\n                      model.value[1] === min.value &&\n                      e.relatedTarget !== stopThumbRef.value?.$el\n                    ) {\n                      startThumbRef.value?.$el.blur()\n                      stopThumbRef.value?.$el.focus()\n                    }\n                  }}\n                  onBlur={ () => {\n                    blur()\n                    activeThumbRef.value = undefined\n                  }}\n                  min={ min.value }\n                  max={ model.value[1] }\n                  position={ trackStart.value }\n                  ripple={ props.ripple }\n                  { ...inputAttrs }\n                >\n                  {{ 'thumb-label': slots['thumb-label'] }}\n                </VSliderThumb>\n\n                <VSliderThumb\n                  ref={ stopThumbRef }\n                  aria-describedby={ messagesId.value }\n                  focused={ isFocused && activeThumbRef.value === stopThumbRef.value?.$el }\n                  modelValue={ model.value[1] }\n                  onUpdate:modelValue={ v => (model.value = [model.value[0], v]) }\n                  onFocus={ (e: FocusEvent) => {\n                    focus()\n                    activeThumbRef.value = stopThumbRef.value?.$el\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                      max.value !== min.value &&\n                      model.value[0] === model.value[1] &&\n                      model.value[0] === max.value &&\n                      e.relatedTarget !== startThumbRef.value?.$el\n                    ) {\n                      stopThumbRef.value?.$el.blur()\n                      startThumbRef.value?.$el.focus()\n                    }\n                  }}\n                  onBlur={ () => {\n                    blur()\n                    activeThumbRef.value = undefined\n                  }}\n                  min={ model.value[0] }\n                  max={ max.value }\n                  position={ trackStop.value }\n                  ripple={ props.ripple }\n                  { ...inputAttrs }\n                >\n                  {{ 'thumb-label': slots['thumb-label'] }}\n                </VSliderThumb>\n              </div>\n            ),\n          }}\n        </VInput>\n      )\n    })\n\n    return forwardRefs({\n      focus: () => startThumbRef.value?.$el.focus(),\n    }, inputRef)\n  },\n})\n\nexport type VRangeSlider = InstanceType<typeof VRangeSlider>\n","// Styles\nimport './VRating.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDensityProps } from '@/composables/density'\nimport { IconValue } from '@/composables/icons'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeSizeProps } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed, nextTick, ref, shallowRef, useId } from 'vue'\nimport { clamp, createRange, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { Prop } from 'vue'\nimport type { Variant } from '@/composables/variant'\n\ntype VRatingItemSlot = {\n  value: number\n  index: number\n  isFilled: boolean\n  isHovered: boolean\n  icon: IconValue\n  color?: string\n  activeColor?: string\n  props: Record<string, unknown>\n  rating: number\n}\n\ntype VRatingItemLabelSlot = {\n  value: number\n  index: number\n  label?: string\n}\n\ntype VRatingSlots = {\n  item: VRatingItemSlot\n  'item-label': VRatingItemLabelSlot\n}\n\nexport const makeVRatingProps = propsFactory({\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: IconValue,\n    default: '$ratingEmpty',\n  },\n  fullIcon: {\n    type: IconValue,\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, String],\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  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...makeSizeProps(),\n  ...makeTagProps(),\n  ...makeThemeProps(),\n}, 'VRating')\n\nexport const VRating = genericComponent<VRatingSlots>()({\n  name: 'VRating',\n\n  props: makeVRatingProps(),\n\n  emits: {\n    'update:modelValue': (value: number | string) => true,\n  },\n\n  setup (props, { slots }) {\n    const { t } = useLocale()\n    const { themeClasses } = provideTheme(props)\n    const root = ref<HTMLElement>()\n    const rating = useProxiedModel(props, 'modelValue')\n    const normalizedValue = computed(() => clamp(parseFloat(rating.value), 0, Number(props.length)))\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 = shallowRef(-1)\n\n    const itemState = computed(() => increments.value.map(value => {\n      const isHovering = props.hover && hoverIndex.value > -1\n      const isFilled = normalizedValue.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, activeColor }\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 onClick () {\n        if (props.disabled || props.readonly) return\n        rating.value = normalizedValue.value === value && props.clearable ? 0 : value\n      }\n\n      return {\n        onMouseenter: props.hover ? onMouseenter : undefined,\n        onMouseleave: props.hover ? onMouseleave : undefined,\n        onClick,\n      }\n    }))\n\n    const currentItemIndex = computed(() => {\n      return props.halfIncrements\n        ? 1 + Math.floor(Math.max(0, Number(rating.value ?? 0) - 0.5)) * 2\n        : Math.floor(Math.max(0, Number(rating.value ?? 0) - 1))\n    })\n\n    function moveCurrentFocus () {\n      const currentItem = root.value?.querySelector('[tabindex=\"0\"]') as HTMLElement\n      currentItem?.focus()\n    }\n\n    function onItemKeydown (event: KeyboardEvent) {\n      if (props.disabled || props.readonly) return\n      if (event.ctrlKey || event.altKey) return\n\n      const step = props.halfIncrements ? 0.5 : 1\n\n      if (event.key === 'ArrowRight') {\n        const newValue = Math.min(Number(props.length), Number(rating.value ?? 0) + step)\n        rating.value = newValue\n        nextTick(() => moveCurrentFocus())\n      }\n      if (event.key === 'ArrowLeft') {\n        const newValue = Math.max(0, Number(rating.value ?? 0) - step)\n        rating.value = newValue\n        nextTick(() => moveCurrentFocus())\n      }\n    }\n\n    const uid = useId()\n    const name = computed(() => props.name ?? `v-rating-${uid}`)\n\n    function VRatingItem ({ value, index, showStar = true }: { value: number, index: number, showStar?: boolean }) {\n      const { onMouseenter, onMouseleave, onClick } = eventState.value[index + 1]\n      const id = `${name.value}-${String(value).replace('.', '-')}`\n      const isFocusable = index === currentItemIndex.value\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        variant: 'plain' as Variant,\n        tabindex: isFocusable ? 0 : -1,\n        onKeydown: onItemKeydown,\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            onMouseenter={ onMouseenter }\n            onMouseleave={ onMouseleave }\n            onClick={ onClick }\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[index],\n                props: btnProps,\n                value,\n                index,\n                rating: normalizedValue.value,\n              })\n              : (\n                <VBtn\n                  aria-label={ t(props.itemAriaLabel, value, props.length) }\n                  { ...btnProps }\n                />\n              )\n            }\n          </label>\n\n          <input\n            class=\"v-rating__hidden\"\n            name={ name.value }\n            id={ id }\n            type=\"radio\"\n            value={ value }\n            checked={ normalizedValue.value === value }\n            tabindex={ -1 }\n            readonly={ props.readonly }\n            disabled={ props.disabled }\n          />\n        </>\n      )\n    }\n\n    function createLabel (labelProps: { value: number, index: number, label?: string }) {\n      if (slots['item-label']) return slots['item-label'](labelProps)\n\n      if (labelProps.label) return <span>{ labelProps.label }</span>\n\n      return <span>&nbsp;</span>\n    }\n\n    useRender(() => {\n      const hasLabels = !!props.itemLabels?.length || slots['item-label']\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            props.class,\n          ]}\n          style={ props.style }\n          ref={ root }\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 && props.itemLabelPosition === 'top'\n                  ? createLabel({ value, index: i, label: props.itemLabels?.[i] })\n                  : undefined\n              }\n              <div class=\"v-rating__item\">\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              {\n                hasLabels && props.itemLabelPosition === 'bottom'\n                  ? createLabel({ value, index: i, label: props.itemLabels?.[i] })\n                  : undefined\n              }\n            </div>\n          ))}\n        </props.tag>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VRating = InstanceType<typeof VRating>\n","// Styles\nimport './VSkeletonLoader.sass'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { useLocale } from '@/composables/locale'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed } from 'vue'\nimport { consoleWarn, genericComponent, propsFactory, useRender, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType, VNode } from 'vue'\n\ntype VSkeletonBone<T> = T | VSkeletonBone<T>[]\n\nexport type VSkeletonBones = VSkeletonBone<VNode>\nexport type VSkeletonLoaderType = keyof typeof rootTypes\n\nexport const rootTypes = {\n  actions: 'button@2',\n  article: 'heading, paragraph',\n  avatar: 'avatar',\n  button: 'button',\n  card: 'image, heading',\n  'card-avatar': 'image, list-item-avatar',\n  chip: 'chip',\n  'chip-group': 'chip@8',\n  'date-picker': 'list-item, heading, divider, date-picker-options, date-picker-days, actions',\n  'date-picker-options': 'text, avatar@2',\n  'date-picker-days': 'avatar@28',\n  divider: 'divider',\n  heading: 'heading',\n  image: 'image',\n  'list-item': 'text',\n  'list-item-avatar': 'avatar, text',\n  'list-item-two-line': 'sentences',\n  'list-item-avatar-two-line': 'avatar, sentences',\n  'list-item-three-line': 'paragraph',\n  'list-item-avatar-three-line': 'avatar, paragraph',\n  ossein: 'ossein',\n  paragraph: 'text@3',\n  sentences: 'text@2',\n  subtitle: 'text',\n  table: 'table-heading, table-thead, table-tbody, table-tfoot',\n  'table-heading': 'heading, text',\n  'table-thead': 'heading@6',\n  'table-tbody': 'table-row-divider@6',\n  'table-row-divider': 'table-row, divider',\n  'table-row': 'table-cell@6',\n  'table-cell': 'text',\n  'table-tfoot': 'text@2, avatar@2',\n  text: 'text',\n} as const\n\nfunction genBone (type: string, children: VSkeletonBones = []) {\n  return (\n    <div\n      class={[\n        'v-skeleton-loader__bone',\n        `v-skeleton-loader__${type}`,\n      ]}\n    >\n      { children }\n    </div>\n  )\n}\n\nfunction genBones (bone: string, types: Record<string, string>) {\n  // e.g. 'text@3'\n  const [type, length] = bone.split('@') as [string, number]\n\n  // Generate a length array based upon\n  // value after @ in the bone string\n  return Array.from({ length }).map(() => genStructure(type, types))\n}\n\nfunction genStructure (type: string | undefined, types: Record<string, string>): VSkeletonBones {\n  if (!type) return []\n\n  // Array of values - e.g. 'heading, paragraph, text@2'\n  if (type.includes(',')) return mapBones(type, types)\n  // Array of values - e.g. 'paragraph@4'\n  if (type.includes('@')) return genBones(type, types)\n  // Must stay below the ',' and '@' branches - neither is ever a key\n  if (!(type in types)) {\n    consoleWarn(`Unknown skeleton type \"${type}\", register it with the types prop`)\n    return [genBone(type)]\n  }\n\n  const bone = types[type]\n  let children: VSkeletonBones = []\n\n  // End of recursion, do nothing\n  /* eslint-disable-next-line no-empty, brace-style */\n  if (type === bone) {}\n  // Array of values - e.g. 'card@2'\n  else if (bone.includes(',')) children = mapBones(bone, types)\n  // Array of values - e.g. 'list-item@2'\n  else if (bone.includes('@')) children = genBones(bone, types)\n  // Single value - e.g. 'card-heading'\n  else children.push(genStructure(bone, types))\n\n  return [genBone(type, children)]\n}\n\nfunction mapBones (bones: string, types: Record<string, string>) {\n  // Remove spaces and return array of structures\n  return bones.replace(/\\s/g, '').split(',').map(bone => genStructure(bone, types))\n}\n\nexport const makeVSkeletonLoaderProps = propsFactory({\n  boilerplate: Boolean,\n  color: String,\n  loading: Boolean,\n  loadingText: {\n    type: String,\n    default: '$vuetify.loading',\n  },\n  type: {\n    type: [String, Array] as PropType<\n      | VSkeletonLoaderType | (string & {})\n      | ReadonlyArray<VSkeletonLoaderType | (string & {})>\n    >,\n    default: 'ossein',\n  },\n  types: Object as PropType<Record<string, string>>,\n\n  ...makeDimensionProps(),\n  ...makeElevationProps(),\n  ...makeThemeProps(),\n}, 'VSkeletonLoader')\n\nexport const VSkeletonLoader = genericComponent()({\n  name: 'VSkeletonLoader',\n\n  inheritAttrs: false,\n\n  props: makeVSkeletonLoaderProps(),\n\n  setup (props, { attrs, slots }) {\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)\n    const { dimensionStyles } = useDimension(props)\n    const { elevationClasses } = useElevation(props)\n    const { themeClasses } = provideTheme(props)\n    const { t } = useLocale()\n\n    const items = computed(() => genStructure(\n      wrapInArray(props.type).join(','),\n      { ...rootTypes, ...props.types },\n    ))\n\n    useRender(() => {\n      const isLoading = !slots.default || props.loading\n      const loadingProps = (props.boilerplate || !isLoading) ? {} : {\n        ariaLive: 'polite',\n        ariaLabel: t(props.loadingText),\n        role: 'alert',\n      }\n\n      return isLoading\n        ? (\n          <div\n            class={[\n              'v-skeleton-loader',\n              {\n                'v-skeleton-loader--boilerplate': props.boilerplate,\n              },\n              themeClasses.value,\n              backgroundColorClasses.value,\n              elevationClasses.value,\n            ]}\n            style={[\n              backgroundColorStyles.value,\n              dimensionStyles.value,\n            ]}\n            { ...loadingProps }\n            { ...attrs }\n          >\n            { items.value }\n          </div>\n        )\n        : <>{ slots.default?.() }</>\n    })\n\n    return {}\n  },\n})\n\nexport type VSkeletonLoader = InstanceType<typeof VSkeletonLoader>\n","// Composables\nimport { makeGroupItemProps, useGroupItem } from '@/composables/group'\n\n// Utilities\nimport { VSlideGroupSymbol } from './VSlideGroup'\nimport { genericComponent } from '@/util'\n\n// Types\nimport type { UnwrapRef } from 'vue'\nimport type { GroupItemProvide } from '@/composables/group'\n\ntype VSlideGroupItemSlots = {\n  default: {\n    isSelected: UnwrapRef<GroupItemProvide['isSelected']>\n    select: GroupItemProvide['select']\n    toggle: GroupItemProvide['toggle']\n    selectedClass: UnwrapRef<GroupItemProvide['selectedClass']>\n  }\n}\n\nexport const VSlideGroupItem = genericComponent<VSlideGroupItemSlots>()({\n  name: 'VSlideGroupItem',\n\n  props: makeGroupItemProps(),\n\n  emits: {\n    'group:selected': (val: { value: boolean }) => true,\n  },\n\n  setup (props, { slots }) {\n    const slideGroupItem = useGroupItem(props, VSlideGroupSymbol)\n\n    return () => slots.default?.({\n      isSelected: slideGroupItem.isSelected.value,\n      select: slideGroupItem.select,\n      toggle: slideGroupItem.toggle,\n      selectedClass: slideGroupItem.selectedClass.value,\n    })\n  },\n})\n\nexport type VSlideGroupItem = InstanceType<typeof VSlideGroupItem>\n","// Composables\nimport { useResizeObserver } from '@/composables/resizeObserver'\n\n// Utilities\nimport { computed, inject, onBeforeUnmount, provide, ref, toRef, useId, watch } from 'vue'\n\n// Types\nimport type { InjectionKey, Ref } from 'vue'\n\nexport interface SnackbarQueueItemState {\n  height: number\n  width: number\n}\n\nexport interface SnackbarQueueProvide {\n  register: (id: string) => void\n  unregister: (id: string) => void\n  setSize: (id: string, height: number, width: number) => void\n  getOffset: (id: string) => number | null\n  items: Ref<Map<string, SnackbarQueueItemState>>\n  gap: Ref<number>\n  lastItemSize: Ref<{ height: number, width: number }>\n}\n\nexport const VSnackbarQueueSymbol: InjectionKey<SnackbarQueueProvide> = Symbol.for('vuetify:v-snackbar-queue')\n\nexport function useSnackbarQueue (props: { gap: string | number }): SnackbarQueueProvide {\n  const items = ref<Map<string, SnackbarQueueItemState>>(new Map())\n  const gap = toRef(() => Number(props.gap))\n\n  function register (id: string) {\n    items.value.set(id, { height: 0, width: 0 })\n  }\n\n  function unregister (id: string) {\n    items.value.delete(id)\n  }\n\n  function setSize (id: string, height: number, width: number) {\n    const item = items.value.get(id)\n    if (!item || (item.height === height && item.width === width)) return\n    item.height = height\n    item.width = width\n  }\n\n  const lastItemSize = computed(() => {\n    for (const { width, height } of [...items.value.values()].toReversed()) {\n      if (!width || !height) continue\n      return { width, height }\n    }\n    return { width: 0, height: 0 }\n  })\n\n  function getOffset (id: string): number | null {\n    if (!items.value.has(id)) return null\n\n    let offset = 0\n    for (const [itemId, state] of [...items.value.entries()].toReversed()) {\n      if (itemId === id) break\n      offset += state.height + gap.value\n    }\n    return offset\n  }\n\n  const state: SnackbarQueueProvide = {\n    register,\n    unregister,\n    setSize,\n    getOffset,\n    items,\n    gap,\n    lastItemSize,\n  }\n\n  provide(VSnackbarQueueSymbol, state)\n\n  return state\n}\n\nexport function useSnackbarItem (\n  isActive: Ref<boolean>,\n  contentEl: () => HTMLElement | undefined,\n) {\n  const queue = inject(VSnackbarQueueSymbol, null)\n\n  if (!queue) return null\n\n  const id = useId()\n\n  queue.register(id)\n  onBeforeUnmount(() => queue.unregister(id))\n  watch(isActive, val => !val && queue.unregister(id), { flush: 'sync' })\n\n  const { resizeRef, contentRect } = useResizeObserver()\n  watch(contentEl, el => { resizeRef.value = el ?? null })\n  watch(contentRect, rect => {\n    if (rect?.width) queue.setSize(id, rect.height, rect.width)\n  })\n\n  const offset = computed(() => queue.getOffset(id))\n\n  return {\n    id,\n    offset,\n  }\n}\n","// Styles\nimport './VSnackbar.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\nimport { VOverlay } from '@/components/VOverlay'\nimport { makeVOverlayProps } from '@/components/VOverlay/VOverlay'\nimport { VProgressCircular } from '@/components/VProgressCircular'\nimport { VProgressLinear } from '@/components/VProgressLinear'\nimport { useSnackbarItem } from '@/components/VSnackbarQueue/queue'\n\n// Composables\nimport { useLayout } from '@/composables'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { IconValue } from '@/composables/icons'\nimport { VuetifyLayoutKey } from '@/composables/layout'\nimport { makeLocationProps } from '@/composables/location'\nimport { makePositionProps, usePosition } from '@/composables/position'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { useScopeId } from '@/composables/scopeId'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useToggleScope } from '@/composables/toggleScope'\nimport { genOverlays, makeVariantProps, useVariant } from '@/composables/variant'\n\n// Utilities\nimport { computed, inject, mergeProps, nextTick, onMounted, onScopeDispose, ref, shallowRef, watch, watchEffect } from 'vue'\nimport { convertToUnit, genericComponent, isString, noop, omit, propsFactory, refElement, useRender } from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { LocationStrategyFunction } from '@/types'\n\ntype VSnackbarSlots = {\n  activator: { isActive: boolean, props: Record<string, any> }\n  default: never\n  prepend: never\n  actions: { isActive: Ref<boolean> }\n  header: never\n  title: never\n  text: never\n}\n\nfunction useCountdown (milliseconds: () => number) {\n  const time = shallowRef(milliseconds())\n  let timer = -1\n\n  function clear () {\n    clearInterval(timer)\n  }\n\n  function reset () {\n    clear()\n\n    nextTick(() => time.value = milliseconds())\n  }\n\n  function start (el?: HTMLElement) {\n    const style = el ? getComputedStyle(el) : { transitionDuration: 0.2 }\n    const interval = parseFloat(style.transitionDuration) * 1000 || 200\n\n    clear()\n\n    if (time.value <= 0) return\n\n    const startTime = performance.now()\n    timer = window.setInterval(() => {\n      const elapsed = performance.now() - startTime + interval\n      time.value = Math.max(milliseconds() - elapsed, 0)\n\n      if (time.value <= 0) clear()\n    }, interval)\n  }\n\n  onScopeDispose(clear)\n\n  return { clear, time, start, reset }\n}\n\nexport const makeVSnackbarProps = propsFactory({\n  collapsed: Object as PropType<{ width: number, height: number }>,\n  loading: Boolean,\n  prependAvatar: String,\n  prependIcon: IconValue,\n  queueGap: Number,\n  queueIndex: Number,\n  title: String,\n  text: String,\n  reverseTimer: Boolean,\n  timer: {\n    type: [Boolean, String] as PropType<boolean | 'top' | 'bottom'>,\n    default: false,\n  },\n  timerColor: String,\n  timeout: {\n    type: [Number, String],\n    default: 5000,\n  },\n  vertical: Boolean,\n\n  ...makeLocationProps({ location: 'bottom center' } as const),\n  ...makePositionProps(),\n  ...makeRoundedProps(),\n  ...makeVariantProps(),\n  ...makeThemeProps(),\n  ...omit(makeVOverlayProps({\n    closeOnBack: false,\n    locationStrategy: null,\n    transition: 'v-snackbar-transition',\n  }), [\n    'persistent',\n    'noClickAnimation',\n    'offset',\n    'retainFocus',\n    'captureFocus',\n    'disableInitialFocus',\n    'location',\n    'scrim',\n    'scrollStrategy',\n    'stickToTarget',\n    'viewportMargin',\n  ]),\n}, 'VSnackbar')\n\nexport const VSnackbar = genericComponent<VSnackbarSlots>()({\n  name: 'VSnackbar',\n\n  props: makeVSnackbarProps(),\n\n  emits: {\n    'update:modelValue': (v: boolean) => true,\n  },\n\n  setup (props, { slots }) {\n    const isActive = useProxiedModel(props, 'modelValue')\n    const { positionClasses } = usePosition(props)\n    const { scopeId } = useScopeId()\n    const { themeClasses } = provideTheme(props)\n    const { colorClasses, colorStyles, variantClasses } = useVariant(props)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n    const countdown = useCountdown(() => Number(props.timeout))\n\n    const overlay = ref<VOverlay>()\n    const queueItem = useSnackbarItem(isActive, () => overlay.value?.contentEl)\n    let _lastOffset: string\n\n    const timerRef = ref<VProgressLinear>()\n    const isHovering = shallowRef(false)\n    const isFocused = shallowRef(false)\n    const startY = shallowRef(0)\n    const mainStyles = ref()\n    const hasLayout = inject(VuetifyLayoutKey, undefined)\n\n    useToggleScope(() => !!hasLayout, () => {\n      const layout = useLayout()\n\n      watchEffect(() => {\n        mainStyles.value = layout.mainStyles.value\n      })\n    })\n\n    watch(isActive, startTimeout)\n    watch(() => props.timeout, startTimeout)\n\n    onMounted(() => {\n      if (isActive.value) startTimeout()\n    })\n\n    let activeTimeout = -1\n    function startTimeout () {\n      countdown.clear()\n      window.clearTimeout(activeTimeout)\n      const timeout = Number(props.timeout)\n\n      if (!isActive.value || timeout === -1) return\n\n      countdown.reset()\n\n      const element = refElement(timerRef.value)\n\n      nextTick(() => countdown.start(element))\n\n      activeTimeout = window.setTimeout(() => {\n        isActive.value = false\n      }, timeout)\n    }\n\n    function clearTimeout () {\n      countdown.reset()\n      window.clearTimeout(activeTimeout)\n    }\n\n    function onPointerenter () {\n      isHovering.value = true\n      clearTimeout()\n    }\n\n    function onPointerleave () {\n      isHovering.value = false\n      if (!isFocused.value) startTimeout()\n    }\n\n    function onFocusin () {\n      isFocused.value = true\n      clearTimeout()\n    }\n\n    function onFocusout (event: FocusEvent) {\n      const contentEl = overlay.value?.contentEl\n      if (contentEl?.contains(event.relatedTarget as Node)) {\n        return\n      }\n      isFocused.value = false\n      if (!isHovering.value) startTimeout()\n    }\n\n    function onTouchstart (event: TouchEvent) {\n      startY.value = event.touches[0].clientY\n    }\n\n    function onTouchend (event: TouchEvent) {\n      if (Math.abs(startY.value - event.changedTouches[0].clientY) > 50) {\n        isActive.value = false\n      }\n    }\n\n    function onAfterLeave () {\n      if (isHovering.value) onPointerleave()\n      isFocused.value = false\n    }\n\n    const locationClasses = computed(() => {\n      return props.location!.split(' ').reduce((acc, loc) => {\n        acc[`v-snackbar--${loc}`] = true\n\n        return acc\n      }, {} as Record<string, any>)\n    })\n\n    const queueDirection = computed(() => {\n      const [side, align] = props.location!.split(' ')\n      return side === 'bottom' || (['left', 'right'].includes(side) && align === 'end') ? -1 : 1\n    })\n\n    const collapsedStyles = computed(() => {\n      if (!props.collapsed) return null\n      return {\n        '--v-snackbar-collapsed-height': convertToUnit(props.collapsed.height),\n        '--v-snackbar-collapsed-width': convertToUnit(props.collapsed.width),\n      }\n    })\n\n    const offset = computed(() => {\n      if (!queueItem) return undefined\n\n      if (queueItem.offset.value === null) {\n        return _lastOffset\n      }\n\n      return _lastOffset = convertToUnit(queueItem.offset.value)\n    })\n\n    const transition = computed(() => {\n      if (!isString(props.transition) || !props.transition.endsWith('-auto')) {\n        return props.transition\n      }\n\n      const prefix = props.transition.replace('-auto', '')\n      const [side, align] = props.location!.split(' ')\n      const axis = ['start', 'end', 'left', 'right'].includes(align) || ['left', 'right'].includes(side) ? 'x' : 'y'\n      const reverse = ['end', 'right'].includes(align) ||\n        (!['start', 'left'].includes(align) && ['bottom', 'right'].includes(side))\n        ? '-reverse'\n        : ''\n\n      return `${prefix}-${axis}${reverse}-transition`\n    })\n\n    useRender(() => {\n      const overlayProps = VOverlay.filterProps({\n        ...props,\n        location: props.location!,\n        locationStrategy: props.locationStrategy ?? (noop as LocationStrategyFunction),\n      })\n      const hasPrependMedia = !!(props.prependAvatar || props.prependIcon)\n      const hasPrepend = !!(hasPrependMedia || props.loading || slots.prepend)\n      const hasContent = !!(slots.default || slots.text || slots.title || props.text || props.title)\n\n      return (\n        <VOverlay\n          ref={ overlay }\n          class={[\n            'v-snackbar',\n            {\n              'v-snackbar--active': isActive.value,\n              'v-snackbar--collapsed': !!props.collapsed,\n              'v-snackbar--timer': !!props.timer,\n              'v-snackbar--vertical': props.vertical,\n            },\n            locationClasses.value,\n            positionClasses.value,\n            props.class,\n          ]}\n          style={[\n            mainStyles.value,\n            {\n              '--v-snackbar-offset': offset.value,\n              '--v-snackbar-gap': convertToUnit(props.queueGap),\n              '--v-snackbar-index': props.queueIndex,\n              '--v-snackbar-direction': queueDirection.value,\n            },\n            collapsedStyles.value,\n            props.style,\n          ]}\n          { ...overlayProps }\n          transition={ transition.value }\n          v-model={ isActive.value }\n          contentProps={ mergeProps({\n            class: [\n              'v-snackbar__wrapper',\n              themeClasses.value,\n              colorClasses.value,\n              roundedClasses.value,\n              variantClasses.value,\n            ],\n            style: [\n              colorStyles.value,\n              roundedStyles.value,\n            ],\n            onPointerenter,\n            onPointerleave,\n            onFocusin,\n            onFocusout,\n          }, overlayProps.contentProps)}\n          persistent\n          noClickAnimation\n          scrim={ false }\n          scrollStrategy=\"none\"\n          onTouchstartPassive={ onTouchstart }\n          onTouchend={ onTouchend }\n          onAfterLeave={ onAfterLeave }\n          { ...scopeId }\n          v-slots={{ activator: slots.activator }}\n        >\n          { genOverlays(false, 'v-snackbar') }\n\n          { slots.header && (\n            <div class=\"v-snackbar__header\">{ slots.header?.() }</div>\n          )}\n\n          { props.timer && Number(props.timeout) > 0 && !isHovering.value && (\n            <div\n              key=\"timer\"\n              class={[\n                'v-snackbar__timer',\n                `v-snackbar__timer--${props.timer === 'bottom' ? 'bottom' : 'top'}`,\n              ]}\n            >\n              <VProgressLinear\n                ref={ timerRef }\n                color={ props.timerColor ?? 'info' }\n                max={ props.timeout }\n                modelValue={ props.reverseTimer ? Number(props.timeout) - countdown.time.value : countdown.time.value }\n              />\n            </div>\n          )}\n\n          { hasPrepend && (\n            <VDefaultsProvider\n              key=\"prepend-defaults\"\n              disabled={ !hasPrependMedia && !props.loading }\n              defaults={{\n                VAvatar: {\n                  image: props.prependAvatar,\n                },\n                VIcon: {\n                  icon: props.prependIcon,\n                },\n                VProgressCircular: {\n                  indeterminate: true,\n                  size: 24,\n                  width: 3,\n                },\n              }}\n            >\n              <div class=\"v-snackbar__prepend\">\n                { slots.prepend\n                  ? slots.prepend()\n                  : (\n                    <>\n                      { props.loading && <VProgressCircular /> }\n                      { !props.loading && props.prependAvatar && <VAvatar /> }\n                      { !props.loading && props.prependIcon && <VIcon /> }\n                    </>\n                  )\n                }\n              </div>\n            </VDefaultsProvider>\n          )}\n\n          { hasContent && (\n            <div\n              key=\"content\"\n              class=\"v-snackbar__content\"\n              role=\"status\"\n              aria-live=\"polite\"\n            >\n              { slots.title?.() ?? (\n                props.title\n                  ? (<div class=\"v-snackbar__title\" key=\"title\">{ props.title }</div>)\n                  : ''\n              )}\n              { slots.text?.() ?? props.text }\n\n              { slots.default?.() }\n            </div>\n          )}\n\n          { slots.actions && (\n            <VDefaultsProvider\n              defaults={{\n                VBtn: {\n                  variant: 'text',\n                  ripple: false,\n                  slim: true,\n                },\n              }}\n            >\n              <div class=\"v-snackbar__actions\">\n                { slots.actions({ isActive }) }\n              </div>\n            </VDefaultsProvider>\n          )}\n        </VOverlay>\n      )\n    })\n\n    return forwardRefs({}, overlay)\n  },\n})\n\nexport type VSnackbar = InstanceType<typeof VSnackbar>\n","// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { makeVSnackbarProps, VSnackbar } from '@/components/VSnackbar/VSnackbar'\n\n// Composables\nimport { useSnackbarQueue } from './queue'\nimport { useDelay } from '@/composables/delay'\nimport { useDocumentVisibility } from '@/composables/documentVisibility'\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { computed, mergeProps, ref, shallowRef, toRef, triggerRef, watch } from 'vue'\nimport { genericComponent, isString, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType, VNodeProps } from 'vue'\nimport type { GenericProps } from '@/util'\n\nexport type VSnackbarQueueSlots<T extends string | SnackbarMessage> = {\n  header: { item: T }\n  item: { item: T }\n  text: { item: T }\n  actions: {\n    item: T\n    props: {\n      onClick: () => void\n    }\n  }\n}\n\nexport type SnackbarMessageDismissType =\n  | 'dismissed'\n  | 'cleared'\n  | 'overflow'\n  | 'auto'\n\ntype SingleSnackbarProps = Omit<\n  VSnackbar['$props'],\n  | 'modelValue'\n  | 'onUpdate:modelValue'\n  | 'activator'\n  | 'activatorProps'\n  | 'closeDelay'\n  | 'openDelay'\n  | 'openOnClick'\n  | 'openOnFocus'\n  | 'openOnHover'\n  | 'collapsed'\n  | 'style'\n  | '$children'\n  | 'v-slots'\n  | `v-slot:${string}`\n  | keyof VNodeProps\n> & {\n  style?: any\n}\n\nexport type SnackbarMessage =\n  | string\n  | (SingleSnackbarProps & {\n    collapsed?: { width: number, height: number }\n    promise?: Promise<unknown>\n    success?: (val?: unknown) => SingleSnackbarProps\n    error?: (val?: Error) => SingleSnackbarProps\n    onDismiss?: (reason: SnackbarMessageDismissType) => void\n  })\n\nexport type SnackbarQueueItem = {\n  id: number\n  item: Exclude<SnackbarMessage, string>\n  active: boolean\n  onDismiss?: (reason: SnackbarMessageDismissType) => void\n}\n\nexport const makeVSnackbarQueueProps = propsFactory({\n  // TODO: Port this to Snackbar on dev\n  closable: [Boolean, String],\n  closeText: {\n    type: String,\n    default: '$vuetify.dismiss',\n  },\n  collapsed: Boolean,\n  displayStrategy: {\n    type: String as PropType<'overflow' | 'hold'>,\n    default: 'hold',\n  },\n  modelValue: {\n    type: Array as PropType<readonly SnackbarMessage[]>,\n    default: () => [],\n  },\n  totalVisible: {\n    type: [Number, String],\n    default: 1,\n  },\n  gap: {\n    type: [Number, String],\n    default: 8,\n  },\n  ...omit(makeVSnackbarProps(), ['modelValue', 'collapsed', 'queueIndex', 'queueGap']),\n}, 'VSnackbarQueue')\n\nexport const VSnackbarQueue = genericComponent<new <T extends readonly SnackbarMessage[]> (\n  props: {\n    modelValue?: T\n    'onUpdate:modelValue'?: (val: T) => void\n  },\n  slots: VSnackbarQueueSlots<T[number]>,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VSnackbarQueue',\n\n  inheritAttrs: false,\n\n  props: makeVSnackbarQueueProps(),\n\n  emits: {\n    'update:modelValue': (val: SnackbarMessage[]) => true,\n  },\n\n  setup (props, { attrs, emit, slots }) {\n    const { t } = useLocale()\n    const documentVisibility = useDocumentVisibility()\n    const queue = useSnackbarQueue(props)\n\n    const isHovered = shallowRef(false)\n    const { runOpenDelay, runCloseDelay } = useDelay(\n      { openDelay: 0, closeDelay: 500 },\n      val => {\n        isHovered.value = val\n        updateDynamicProps()\n      }\n    )\n\n    let _lastId = 0\n    const visibleItems = ref<SnackbarQueueItem[]>([])\n    const limit = toRef(() => Number(props.totalVisible))\n\n    watch(() => props.modelValue.length, showNext)\n\n    function removeItem (id: number) {\n      visibleItems.value = visibleItems.value.filter(x => x.id !== id)\n      if (visibleItems.value.length === 0) {\n        isHovered.value = false\n      }\n      showNext()\n    }\n\n    function showNext () {\n      if (!props.modelValue.length) return\n\n      const activeCount = visibleItems.value.filter(x => x.active).length\n      if (activeCount >= limit.value) {\n        if (props.displayStrategy !== 'overflow') return\n\n        // Dismiss oldest active items to make room\n        visibleItems.value\n          .filter(x => x.active)\n          .slice(limit.value - 1)\n          .forEach(item => {\n            item.active = false\n            item.onDismiss?.('overflow')\n          })\n      }\n\n      const [next, ...rest] = props.modelValue\n      emit('update:modelValue', rest)\n\n      const item = isString(next) ? { text: next } : next\n      const { promise, success, error, onDismiss, ...itemProps } = item\n\n      const newItem: SnackbarQueueItem = {\n        id: _lastId++,\n        item: {\n          ...promise ? { timeout: -1, loading: true } : {},\n          ...itemProps,\n        },\n        active: true,\n        onDismiss,\n      }\n      visibleItems.value.unshift(newItem)\n      updateDynamicProps()\n\n      promise?.then(\n        (data: any) => {\n          if (!newItem.active) return\n          newItem.item = success?.(data) ?? { ...newItem.item, timeout: 1 }\n          updateDynamicProps()\n          triggerRef(visibleItems)\n        },\n        (data: any) => {\n          if (!newItem.active) return\n          newItem.item = error?.(data) ?? { ...newItem.item, timeout: 1 }\n          updateDynamicProps()\n          triggerRef(visibleItems)\n        }\n      )\n    }\n\n    function dismiss (id: number, reason: SnackbarMessageDismissType) {\n      const item = visibleItems.value.find(x => x.id === id)\n      if (!item) return\n      item.active = false\n      item.onDismiss?.(reason)\n      updateDynamicProps()\n    }\n\n    function clear () {\n      emit('update:modelValue', [])\n      visibleItems.value\n        .toReversed()\n        .forEach((item, i) => setTimeout(() => {\n          item.active = false\n          item.onDismiss?.('cleared')\n        }, 100 * i))\n    }\n\n    const btnProps = computed(() => ({\n      color: isString(props.closable) ? props.closable : undefined,\n      text: t(props.closeText),\n    }))\n\n    function updateDynamicProps () {\n      let activeIndex = 0\n      visibleItems.value.forEach(({ item, active }) => {\n        item.queueIndex = activeIndex\n        if (active) activeIndex++\n      })\n\n      if (!props.collapsed || isHovered.value) {\n        visibleItems.value.forEach(({ item }) => item.collapsed = undefined)\n        return\n      }\n\n      for (const { item } of visibleItems.value) {\n        item.collapsed = item.queueIndex! > 0 ? {\n          width: queue.lastItemSize.value.width,\n          height: queue.lastItemSize.value.height,\n        } : undefined\n      }\n    }\n\n    watch(queue.lastItemSize, updateDynamicProps)\n    watch(() => props.collapsed, updateDynamicProps)\n\n    useRender(() => {\n      const hasActions = !!(props.closable || slots.actions)\n      const snackbarProps = omit(VSnackbar.filterProps(props as any), ['modelValue', 'collapsed'])\n      const pauseAll = documentVisibility.value === 'hidden' || (props.collapsed && isHovered.value)\n\n      return (\n        <>\n          { visibleItems.value.map(({ id, item, active }) => (\n            slots.item\n              ? (\n                <VDefaultsProvider defaults={{ VSnackbar: item }}>\n                  { slots.item({ item }) }\n                </VDefaultsProvider>\n              ) : (\n                <VSnackbar\n                  key={ id }\n                  { ...attrs }\n                  { ...snackbarProps }\n                  { ...item }\n                  { ...(pauseAll ? { timeout: -1 } : {}) }\n                  queueGap={ Number(props.gap) }\n                  contentProps={ mergeProps(snackbarProps.contentProps, {\n                    onMouseenter: runOpenDelay,\n                    onMouseleave: () => runCloseDelay(),\n                  })}\n                  modelValue={ active }\n                  onUpdate:modelValue={ () => dismiss(id, 'auto') }\n                  onAfterLeave={ () => removeItem(id) }\n                >\n                  {{\n                    header: slots.header ? () => slots.header?.({ item }) : undefined,\n                    text: slots.text ? () => slots.text?.({ item }) : undefined,\n                    actions: hasActions ? () => (\n                      <>\n                        { !slots.actions ? (\n                          <VBtn\n                            { ...btnProps.value }\n                            onClick={ () => dismiss(id, 'dismissed') }\n                          />\n                        ) : (\n                          <VDefaultsProvider defaults={{ VBtn: btnProps.value }}>\n                            { slots.actions({\n                              item,\n                              props: { onClick: () => dismiss(id, 'dismissed') },\n                            })}\n                          </VDefaultsProvider>\n                        )}\n                      </>\n                    ) : undefined,\n                  }}\n                </VSnackbar>\n              )\n          ))}\n        </>\n      )\n    })\n\n    return {\n      clear,\n    }\n  },\n})\n\nexport type VSnackbarQueue = InstanceType<typeof VSnackbarQueue>\n","// Utilities\nimport { onBeforeUnmount, shallowRef } from 'vue'\nimport { IN_BROWSER } from '@/util/globals'\n\nexport function useDocumentVisibility () {\n  const visibility = shallowRef(IN_BROWSER ? document.visibilityState : 'visible')\n\n  if (IN_BROWSER) {\n    const onVisibilityChange = () => {\n      visibility.value = document.visibilityState\n    }\n    document.addEventListener('visibilitychange', onVisibilityChange, { passive: true })\n    onBeforeUnmount(() => {\n      document.removeEventListener('visibilitychange', onVisibilityChange)\n    })\n  }\n\n  return visibility\n}\n","// Styles\nimport './VTooltip.sass'\n\n// Components\nimport { VOverlay } from '@/components/VOverlay'\nimport { makeVOverlayProps } from '@/components/VOverlay/VOverlay'\n\n// Composables\nimport { useColor } from '@/composables/color'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useScopeId } from '@/composables/scopeId'\n\n// Utilities\nimport { computed, mergeProps, ref, toRef, useId } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { StrategyProps } from '@/components/VOverlay/locationStrategies'\nimport type { OverlaySlots } from '@/components/VOverlay/VOverlay'\n\nexport const makeVTooltipProps = propsFactory({\n  id: String,\n  interactive: Boolean,\n  text: String,\n  color: String,\n\n  ...omit(makeVOverlayProps({\n    closeOnBack: false,\n    location: 'end' as const,\n    locationStrategy: 'connected' as const,\n    eager: true,\n    minWidth: 0,\n    offset: 10,\n    openOnClick: false,\n    openOnHover: true,\n    origin: 'auto' as const,\n    scrim: false,\n    scrollStrategy: 'reposition' as const,\n    transition: null,\n  }), [\n    'absolute',\n    'retainFocus',\n    'captureFocus',\n    'disableInitialFocus',\n  ]),\n}, 'VTooltip')\n\nexport const VTooltip = genericComponent<OverlaySlots>()({\n  name: 'VTooltip',\n\n  props: makeVTooltipProps(),\n\n  emits: {\n    'update:modelValue': (value: boolean) => true,\n  },\n\n  setup (props, { slots }) {\n    const isActive = useProxiedModel(props, 'modelValue')\n    const { scopeId } = useScopeId()\n\n    const { colorClasses, colorStyles } = useColor(() => ({\n      background: props.color,\n    }))\n\n    const uid = useId()\n    const id = toRef(() => props.id || `v-tooltip-${uid}`)\n\n    const overlay = ref<VOverlay>()\n\n    const location = computed(() => {\n      return props.location.split(' ').length > 1\n        ? props.location\n        : props.location + ' center' as StrategyProps['location']\n    })\n\n    const origin = computed(() => {\n      return (\n        props.origin === 'auto' ||\n        props.origin === 'overlap' ||\n        props.origin.split(' ').length > 1 ||\n        props.location.split(' ').length > 1\n      ) ? props.origin\n        : props.origin + ' center' as StrategyProps['origin']\n    })\n\n    const transition = toRef(() => {\n      if (props.transition != null) return props.transition\n      return isActive.value ? 'scale-transition' : 'fade-transition'\n    })\n\n    const activatorProps = computed(() =>\n      mergeProps({\n        'aria-describedby': id.value,\n      }, props.activatorProps)\n    )\n\n    useRender(() => {\n      const overlayProps = VOverlay.filterProps(props)\n\n      return (\n        <VOverlay\n          ref={ overlay }\n          class={[\n            'v-tooltip',\n            { 'v-tooltip--interactive': props.interactive },\n            props.class,\n          ]}\n          style={[\n            props.style,\n          ]}\n          id={ id.value }\n          { ...overlayProps }\n          contentClass={[\n            colorClasses.value,\n            props.contentClass,\n          ]}\n          contentProps={ mergeProps(\n            { style: [colorStyles.value] },\n            props.contentProps,\n          )}\n          v-model={ isActive.value }\n          transition={ transition.value }\n          absolute\n          location={ location.value }\n          origin={ origin.value }\n          role=\"tooltip\"\n          activatorProps={ activatorProps.value }\n          _disableGlobalStack\n          { ...scopeId }\n        >\n          {{\n            activator: slots.activator,\n            default: (...args) => slots.default?.(...args) ?? props.text,\n          }}\n        </VOverlay>\n      )\n    })\n\n    return forwardRefs({}, overlay)\n  },\n})\n\nexport type VTooltip = InstanceType<typeof VTooltip>\n","// Components\nimport { VTooltip } from '@/components/VTooltip/VTooltip'\n\n// Utilities\nimport { genericComponent, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { ClassValue } from '@/composables/component'\nimport type { Anchor } from '@/util'\n\nexport type VSparklineTooltipSlots = {\n  default: { index: number, value: number }\n}\n\nexport const makeVSparklineTooltipProps = propsFactory({\n  modelValue: Boolean,\n  target: Object as PropType<[number, number] | undefined>,\n  index: {\n    type: Number as PropType<number | null>,\n    default: null,\n  },\n  value: {\n    type: Number,\n    default: 0,\n  },\n  titleFormat: {\n    type: Function as PropType<(item: { index: number, value: number }) => string>,\n    default: (item: { index: number, value: number }) => String(item.value),\n  },\n  offset: Number,\n  contentClass: null as unknown as PropType<ClassValue>,\n  location: String as PropType<Anchor>,\n}, 'VSparklineTooltip')\n\nexport const VSparklineTooltip = genericComponent<VSparklineTooltipSlots>()({\n  name: 'VSparklineTooltip',\n\n  props: makeVSparklineTooltipProps(),\n\n  emits: {\n    afterLeave: () => true,\n  },\n\n  setup (props, { slots, emit }) {\n    return () => (\n      <VTooltip\n        modelValue={ props.modelValue }\n        target={ props.target }\n        offset={ props.offset }\n        contentClass={ props.contentClass }\n        location={ props.location }\n        onAfterLeave={ () => emit('afterLeave') }\n      >\n        { props.index !== null && (\n          slots.default?.({ index: props.index, value: props.value }) ??\n          props.titleFormat({ index: props.index, value: props.value })\n        )}\n      </VTooltip>\n    )\n  },\n})\n\nexport type VSparklineTooltip = InstanceType<typeof VSparklineTooltip>\n","// Types\nimport type { Point } from './line'\n\n/**\n * From https://github.com/unsplash/react-trend/blob/master/src/helpers/DOM.helpers.js#L18\n */\nexport function genRoundedPath (points: Point[], radius: number, fill = false, height = 75, consistentStructure = false) {\n  if (points.length === 0) return ''\n  const start = points.shift()!\n  const end = points[points.length - 1]\n\n  return (\n    (fill ? `M${start.x} ${height - start.x + 2} L${start.x} ${start.y}` : `M${start.x} ${start.y}`) +\n    points\n      .map((point, index) => {\n        const next = points[index + 1]\n        const prev = points[index - 1] || start\n        const isCollinear = next && checkCollinear(next, point, prev)\n\n        if (!next) {\n          return consistentStructure\n            ? `L${point.x} ${point.y}S${point.x} ${point.y} ${point.x} ${point.y}`\n            : `L${point.x} ${point.y}`\n        }\n\n        if (isCollinear && !consistentStructure) {\n          return `L${point.x} ${point.y}`\n        }\n\n        const threshold = Math.min(\n          getDistance(prev, point),\n          getDistance(next, point)\n        )\n        const isTooCloseForRadius = threshold / 2 < radius\n        const radiusForPoint = isTooCloseForRadius ? threshold / 2 : radius\n\n        const before = moveTo(prev, point, radiusForPoint)\n        const after = moveTo(next, point, radiusForPoint)\n\n        return `L${before.x} ${before.y}S${point.x} ${point.y} ${after.x} ${after.y}`\n      })\n      .join('') +\n    (fill ? `L${end.x} ${height - start.x + 2} Z` : '')\n  )\n}\n\nfunction int (value: string | number): number {\n  return parseInt(value, 10)\n}\n\n/**\n * https://en.wikipedia.org/wiki/Collinearity\n * x=(x1+x2)/2\n * y=(y1+y2)/2\n */\nexport function checkCollinear (p0: Point, p1: Point, p2: Point): boolean {\n  return int(p0.x + p2.x) === int(2 * p1.x) && int(p0.y + p2.y) === int(2 * p1.y)\n}\n\nexport function getDistance (p1: Point, p2: Point): number {\n  return Math.sqrt(\n    Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2)\n  )\n}\n\nexport function moveTo (to: Point, from: Point, radius: number) {\n  const vector = { x: to.x - from.x, y: to.y - from.y }\n  const length = Math.sqrt((vector.x * vector.x) + (vector.y * vector.y))\n  const unitVector = { x: vector.x / length, y: vector.y / length }\n\n  return {\n    x: from.x + unitVector.x * radius,\n    y: from.y + unitVector.y * radius,\n  }\n}\n","// Utilities\nimport { genMonotonePath } from './monotone'\nimport { genRoundedPath } from './path'\nimport { isBoolean, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { ClassValue } from '@/composables/component'\n\nexport type SparklineItem = number | { value: number }\n\nexport type SparklineText = {\n  x: number\n  value: string\n}\n\nexport interface Boundary {\n  minX: number\n  minY: number\n  maxX: number\n  maxY: number\n}\n\nexport interface Point {\n  x: number\n  y: number\n  value: number\n}\n\nexport type SparklineAnimationConfig = {\n  duration?: number\n  easing?: string\n}\n\nexport type SparklineTooltipConfig = {\n  titleFormat?: (item: { index: number, value: number }) => string\n  offset?: number\n  class?: ClassValue\n  showCrosshair?: boolean\n}\n\nexport const makeLineProps = propsFactory({\n  animation: {\n    type: [Boolean, Object] as PropType<boolean | SparklineAnimationConfig>,\n    default: false,\n  },\n  autoDraw: {\n    type: [Boolean, String] as PropType<boolean | 'once'>,\n    default: false,\n  },\n  autoDrawDuration: [Number, String],\n  autoDrawEasing: {\n    type: String,\n    default: 'ease',\n  },\n  color: String,\n  gradient: {\n    type: Array as PropType<string[]>,\n    default: () => ([]),\n  },\n  gradientDirection: {\n    type: String as PropType<'top' | 'bottom' | 'left' | 'right'>,\n    validator: (val: string) => ['top', 'bottom', 'left', 'right'].includes(val),\n    default: 'top',\n  },\n  height: {\n    type: [String, Number],\n    default: 75,\n  },\n  labels: {\n    type: Array as PropType<(string | SparklineItem)[]>,\n    default: () => ([]),\n  },\n  labelSize: {\n    type: [Number, String],\n    default: 7,\n  },\n  lineWidth: {\n    type: [String, Number],\n    default: 4,\n  },\n  id: String,\n  itemValue: {\n    type: String,\n    default: 'value',\n  },\n  modelValue: {\n    type: Array as PropType<SparklineItem[]>,\n    default: () => ([]),\n  },\n  min: [String, Number],\n  max: [String, Number],\n  padding: {\n    type: [String, Number],\n    default: 8,\n  },\n  markerSize: {\n    type: [Number, String],\n    default: 8,\n  },\n  markerStroke: {\n    type: String,\n    default: '#fff',\n  },\n  inset: Boolean,\n  showLabels: Boolean,\n  showMarkers: Boolean,\n  smooth: [Boolean, String, Number],\n  smoothMode: {\n    type: String as PropType<'default' | 'monotone'>,\n    default: 'default',\n  },\n  interactive: Boolean,\n  tooltip: {\n    type: [Boolean, Object] as PropType<boolean | SparklineTooltipConfig>,\n    default: false,\n  },\n  width: {\n    type: [Number, String],\n    default: 300,\n  },\n}, 'Line')\n\nexport function resample (values: number[], targetCount: number): number[] {\n  const length = values.length\n  if (length === 0) return Array(targetCount).fill(0)\n  if (length === 1) return Array(targetCount).fill(values[0])\n\n  const result: number[] = []\n  for (let i = 0; i < targetCount; i++) {\n    const t = i / (targetCount - 1) * (length - 1)\n    const low = Math.floor(t)\n    const high = Math.min(low + 1, length - 1)\n    const fraction = t - low\n    result.push(values[low] + (values[high] - values[low]) * fraction)\n  }\n  return result\n}\n\nexport function extendPoints (points: Point[], inset: boolean, totalWidth: number): Point[] {\n  if (!inset || points.length < 2) return points\n\n  const first = points[0]\n  const second = points[1]\n  const last = points[points.length - 1]\n  const secondLast = points[points.length - 2]\n\n  const slopeStart = (second.y - first.y) / (second.x - first.x)\n  const slopeEnd = (last.y - secondLast.y) / (last.x - secondLast.x)\n\n  const ghostStart: Point = { x: 0, y: first.y - first.x * slopeStart, value: first.value }\n  const ghostEnd: Point = { x: totalWidth, y: last.y + (totalWidth - last.x) * slopeEnd, value: last.value }\n\n  return [ghostStart, ...points, ghostEnd]\n}\n\nexport interface BuildPathOptions {\n  smooth: boolean | string | number | undefined\n  smoothMode: 'default' | 'monotone'\n  height: number\n  fill: boolean\n  animation: boolean\n}\n\nexport function buildPath (points: Point[], options: BuildPathOptions): string {\n  const smoothValue = isBoolean(options.smooth)\n    ? (options.smooth ? 8 : 0)\n    : Number(options.smooth ?? 0)\n\n  // genRoundedPath mutates via shift(); slice defensively so callers don't have to\n  const copy = points.slice()\n  if (options.smoothMode === 'monotone') {\n    return genMonotonePath(copy, smoothValue, options.fill, options.height)\n  }\n  return genRoundedPath(copy, smoothValue, options.fill, options.height, options.animation)\n}\n","// Types\nimport type { Point } from './line'\n\n/**\n * Monotone cubic Hermite interpolation (Fritsch-Carlson) converted to cubic Bezier.\n * Prevents overshoot at local extrema (e.g. consecutive equal min/max values)\n * by zeroing tangents at turning points and applying an alpha-beta constraint.\n *\n * `smooth` controls tension: 0 = straight lines, 8 (default true) = full curve.\n */\nexport function genMonotonePath (points: Point[], smooth: number, fill = false, height = 75) {\n  if (points.length === 0) return ''\n\n  const start = points[0]\n  const end = points[points.length - 1]\n\n  const prefix = fill\n    ? `M${start.x} ${height - start.x + 2} L${start.x} ${start.y}`\n    : `M${start.x} ${start.y}`\n\n  const suffix = fill ? `L${end.x} ${height - start.x + 2} Z` : ''\n\n  if (smooth === 0 || points.length < 3) {\n    return prefix + points.slice(1).map(point => `L${point.x} ${point.y}`).join('') + suffix\n  }\n\n  const tension = Math.min(smooth / 8, 1)\n  const n = points.length\n\n  const delta: number[] = []\n  for (let i = 0; i < n - 1; i++) {\n    const dx = points[i + 1].x - points[i].x\n    delta[i] = dx === 0 ? 0 : (points[i + 1].y - points[i].y) / dx\n  }\n\n  const tangent: number[] = new Array(n)\n  tangent[0] = delta[0]\n  tangent[n - 1] = delta[n - 2]\n\n  for (let i = 1; i < n - 1; i++) {\n    if (delta[i - 1] === 0 || delta[i] === 0 ||\n        (delta[i - 1] > 0) !== (delta[i] > 0)) {\n      tangent[i] = 0\n    } else {\n      tangent[i] = (delta[i - 1] + delta[i]) / 2\n    }\n  }\n\n  for (let i = 0; i < n - 1; i++) {\n    if (delta[i] === 0) {\n      tangent[i] = 0\n      tangent[i + 1] = 0\n    } else {\n      const alpha = tangent[i] / delta[i]\n      const beta = tangent[i + 1] / delta[i]\n      const squaredSum = alpha * alpha + beta * beta\n\n      if (squaredSum > 9) {\n        const tau = 3 / Math.sqrt(squaredSum)\n        tangent[i] = tau * alpha * delta[i]\n        tangent[i + 1] = tau * beta * delta[i]\n      }\n    }\n  }\n\n  const curves = points.slice(1).map((curr, index) => {\n    const prev = points[index]\n    const dx = curr.x - prev.x\n\n    const controlPoint1X = prev.x + dx * tension / 3\n    const controlPoint1Y = prev.y + tangent[index] * dx * tension / 3\n    const controlPoint2X = curr.x - dx * tension / 3\n    const controlPoint2Y = curr.y - tangent[index + 1] * dx * tension / 3\n\n    return `C${controlPoint1X} ${controlPoint1Y} ${controlPoint2X} ${controlPoint2Y} ${curr.x} ${curr.y}`\n  })\n\n  return prefix + curves.join('') + suffix\n}\n","// Components\nimport { VSparklineTooltip } from './VSparklineTooltip'\n\n// Utilities\nimport { computed, Fragment, nextTick, ref, shallowRef, useId, watch } from 'vue'\nimport { makeLineProps } from './util/line'\nimport { genericComponent, getPropertyFromItem, isBoolean, isObject, PREFERS_REDUCED_MOTION, propsFactory, useRender } from '@/util'\nimport { easingPatterns, useTransition } from '@/util/easing'\n\n// Types\nimport type { Boundary } from './util/line'\n\nexport type VBarlineSlots = {\n  default: void\n  label: { index: number, value: string }\n  tooltip: { index: number, value: number }\n}\n\nexport interface Bar {\n  x: number\n  y: number\n  height: number\n  value: number\n}\n\nexport const makeVBarlineProps = propsFactory({\n  autoLineWidth: Boolean,\n\n  ...makeLineProps(),\n}, 'VBarline')\n\nexport const VBarline = genericComponent<VBarlineSlots>()({\n  name: 'VBarline',\n\n  inheritAttrs: false,\n\n  props: makeVBarlineProps(),\n\n  emits: {\n    'update:currentIndex': (_index: number | null) => true,\n  },\n\n  setup (props, { slots, attrs, emit }) {\n    const uid = useId()\n    const id = computed(() => props.id || `barline-${uid}`)\n    const autoDrawDuration = computed(() => Number(props.autoDrawDuration) || 500)\n    const hasDrawn = ref(false)\n    const clipRects = shallowRef<SVGRectElement[]>([])\n    const animationDuration = computed(() =>\n      isObject(props.animation) ? (props.animation.duration ?? 300) : 300\n    )\n    const animationEasing = computed(() =>\n      isObject(props.animation) ? (props.animation.easing ?? 'ease') : 'ease'\n    )\n\n    const hasLabels = computed(() => {\n      return Boolean(\n        props.showLabels ||\n        props.labels.length > 0 ||\n        !!slots?.label\n      )\n    })\n\n    const lineWidth = computed(() => parseFloat(props.lineWidth) || 4)\n\n    const items = computed(() => props.modelValue.map(item => getPropertyFromItem(item, props.itemValue, item)))\n\n    const totalWidth = computed(() => Math.max(items.value.length * lineWidth.value, Number(props.width)))\n\n    const boundary = computed<Boundary>(() => {\n      return {\n        minX: 0,\n        maxX: totalWidth.value,\n        minY: 0,\n        maxY: parseInt(props.height, 10),\n      }\n    })\n\n    function genBars (\n      values: number[],\n      boundary: Boundary\n    ): Bar[] {\n      const { minX, maxX, minY, maxY } = boundary\n\n      const totalValues = values.length\n      let maxValue = props.max != null ? Number(props.max) : Math.max(...values)\n      let minValue = props.min != null ? Number(props.min) : Math.min(...values)\n\n      if (minValue > 0 && props.min == null) minValue = 0\n      if (maxValue < 0 && props.max == null) maxValue = 0\n\n      const gridX = maxX / (totalValues === 1 ? 2 : totalValues)\n      const gridY = (maxY - minY) / ((maxValue - minValue) || 1)\n      const horizonY = maxY - Math.abs(minValue * gridY)\n\n      return values.map((value, index) => {\n        const height = Math.abs(gridY * value)\n\n        return {\n          x: minX + index * gridX,\n          y: horizonY - height +\n            Number(value < 0) * height,\n          height,\n          value,\n        }\n      })\n    }\n\n    const bars = computed(() => genBars(items.value, boundary.value))\n    const prevBarCount = ref(0)\n\n    function applyTransition (el: SVGRectElement, duration: number, easing: string) {\n      el.style.transition = `y ${duration}ms ${easing}, height ${duration}ms ${easing}`\n    }\n\n    function collapseNewBars (bars: Bar[], fromIndex: number, duration: number, easing: string) {\n      for (let i = fromIndex; i < bars.length; i++) {\n        const el = clipRects.value[i]\n        if (!el) continue\n\n        // Snap to collapsed at bar's baseline\n        el.style.transition = 'none'\n        el.setAttribute('y', String(bars[i].y + bars[i].height))\n        el.setAttribute('height', '0')\n        el.getBoundingClientRect()\n\n        // Animate to final state\n        applyTransition(el, duration, easing)\n        el.setAttribute('y', String(bars[i].y))\n        el.setAttribute('height', String(bars[i].height))\n      }\n    }\n\n    function applyBarsTransition (oldCount: number) {\n      if (!props.animation) return\n\n      clipRects.value.forEach(el => {\n        if (el) applyTransition(el, animationDuration.value, animationEasing.value)\n      })\n      if (bars.value.length > oldCount && oldCount > 0) {\n        collapseNewBars(bars.value, oldCount, animationDuration.value, animationEasing.value)\n      }\n    }\n\n    watch(() => props.modelValue, async () => {\n      await nextTick()\n\n      if (PREFERS_REDUCED_MOTION() || !clipRects.value.length) return\n\n      const oldCount = prevBarCount.value\n      prevBarCount.value = bars.value.length\n\n      // Animation-only mode (no auto-draw), or draw-once after first draw: just ensure transition is set\n      if (!props.autoDraw || (props.autoDraw === 'once' && hasDrawn.value)) {\n        applyBarsTransition(oldCount)\n        return\n      }\n      hasDrawn.value = true\n\n      const shouldDrawOnce = props.autoDraw === 'once'\n      clipRects.value.forEach((el, i) => {\n        const bar = bars.value[i]\n        if (!el || !bar) return\n\n        // Snap to collapsed state\n        el.style.transition = 'none'\n        el.setAttribute('y', String(bar.y + bar.height))\n        el.setAttribute('height', '0')\n        el.getBoundingClientRect()\n\n        // Animate to final state\n        applyTransition(el, autoDrawDuration.value, props.autoDrawEasing)\n        el.setAttribute('y', String(bar.y))\n        el.setAttribute('height', String(bar.height))\n\n        // After initial draw, switch to animation timing for subsequent changes\n        if (shouldDrawOnce && props.animation) {\n          el.addEventListener('transitionend', () => {\n            applyTransition(el, animationDuration.value, animationEasing.value)\n          }, { once: true })\n        }\n      })\n    }, { immediate: true })\n\n    const parsedLabels = computed(() => {\n      return bars.value.map((bar, i) => ({\n        x: bar.x,\n        value: String(props.labels[i] ?? bar.value),\n      }))\n    })\n\n    const offsetX = computed(() => bars.value.length === 1\n      ? (boundary.value.maxX - lineWidth.value) / 2\n      : (Math.abs(bars.value[0].x - bars.value[1].x) - lineWidth.value) / 2\n    )\n    const smooth = computed(() => isBoolean(props.smooth) ? (props.smooth ? 2 : 0) : Number(props.smooth))\n    const columnWidth = computed(() => {\n      const len = bars.value.length\n      return totalWidth.value / (len === 1 ? 2 : len)\n    })\n\n    // Hover / tooltip state\n    const svgRef = shallowRef<SVGSVGElement | null>(null)\n    const currentIndex = shallowRef<number | null>(null)\n    const tooltipVisible = shallowRef(false)\n\n    const targetX = shallowRef(0)\n    const targetY = shallowRef(0)\n    const targetHeight = shallowRef(0)\n\n    watch(currentIndex, index => {\n      if (index === null) return\n      const bar = bars.value[index]\n      if (!bar) return\n      targetX.value = bar.x + offsetX.value\n      targetY.value = bar.y\n      targetHeight.value = bar.height\n    })\n\n    const transitionOptions = { duration: 150, transition: easingPatterns.easeOutQuad }\n    const animatedX = useTransition(targetX, transitionOptions)\n    const animatedY = useTransition(targetY, transitionOptions)\n\n    const tooltipTarget = computed<[number, number] | undefined>(() => {\n      if (currentIndex.value === null || !svgRef.value) return undefined\n      const ctm = svgRef.value.getScreenCTM()\n      if (!ctm) return undefined\n      const svgPoint = svgRef.value.createSVGPoint()\n      svgPoint.x = animatedX.value + lineWidth.value / 2\n      svgPoint.y = animatedY.value\n      const { x, y } = svgPoint.matrixTransform(ctm)\n      return [x, y]\n    })\n\n    const tooltipConfig = computed(() => ({\n      showCrosshair: false,\n      titleFormat: (item: { index: number, value: number }) => String(item.value),\n      ...(isObject(props.tooltip) ? props.tooltip : {}),\n    }))\n\n    let frame = -1\n\n    function onSvgMousemove (e: MouseEvent) {\n      const target = e.currentTarget as SVGSVGElement\n      cancelAnimationFrame(frame)\n      frame = requestAnimationFrame(() => {\n        const rect = target.getBoundingClientRect()\n        const svgX = (e.clientX - rect.left) / rect.width * totalWidth.value\n\n        let nearest = 0\n        let minDist = Infinity\n        bars.value.forEach((bar, i) => {\n          const barCenter = bar.x + offsetX.value + lineWidth.value / 2\n          const dist = Math.abs(barCenter - svgX)\n          if (dist < minDist) {\n            minDist = dist\n            nearest = i\n          }\n        })\n\n        currentIndex.value = nearest\n        emit('update:currentIndex', nearest)\n        tooltipVisible.value = true\n      })\n    }\n\n    function onSvgMouseleave () {\n      cancelAnimationFrame(frame)\n      tooltipVisible.value = false\n      if (!props.tooltip) {\n        currentIndex.value = null\n        emit('update:currentIndex', null)\n      }\n    }\n\n    function onTooltipAfterLeave () {\n      currentIndex.value = null\n      emit('update:currentIndex', null)\n    }\n\n    function setIndex (index: number | null) {\n      currentIndex.value = index\n      emit('update:currentIndex', index)\n      tooltipVisible.value = index !== null\n    }\n\n    function onSvgFocus () {\n      if (!bars.value.length) return\n      setIndex(bars.value.length - 1)\n    }\n\n    function onSvgBlur () {\n      tooltipVisible.value = false\n      if (!props.tooltip) {\n        setIndex(null)\n      }\n    }\n\n    function onSvgKeydown (e: KeyboardEvent) {\n      if (!bars.value.length) return\n      const len = bars.value.length\n\n      if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n        e.preventDefault()\n        const direction = e.key === 'ArrowLeft' ? -1 : 1\n        const current = currentIndex.value ?? (direction === 1 ? -1 : len)\n        const next = Math.max(0, Math.min(len - 1, current + direction))\n        setIndex(next)\n      }\n    }\n\n    useRender(() => {\n      const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse()\n      return (\n        <Fragment>\n        <svg\n          ref={ svgRef }\n          display=\"block\"\n          tabindex={ props.interactive ? 0 : undefined }\n          onMousemove={ props.interactive ? onSvgMousemove : undefined }\n          onMouseleave={ props.interactive ? onSvgMouseleave : undefined }\n          onFocus={ props.interactive ? onSvgFocus : undefined }\n          onBlur={ props.interactive ? onSvgBlur : undefined }\n          onKeydown={ props.interactive ? onSvgKeydown : undefined }\n          { ...attrs }\n        >\n          <defs>\n            <linearGradient\n              id={ id.value }\n              gradientUnits=\"userSpaceOnUse\"\n              x1={ props.gradientDirection === 'left' ? '100%' : '0' }\n              y1={ props.gradientDirection === 'top' ? '100%' : '0' }\n              x2={ props.gradientDirection === 'right' ? '100%' : '0' }\n              y2={ props.gradientDirection === 'bottom' ? '100%' : '0' }\n            >\n              {\n                gradientData.map((color, index) => (\n                  <stop offset={ index / (Math.max(gradientData.length - 1, 1)) } stop-color={ color || 'currentColor' } />\n                ))\n              }\n            </linearGradient>\n          </defs>\n\n          <clipPath id={ `${id.value}-clip` }>\n            {\n              bars.value.map((item, i) => (\n                <rect\n                    ref={ (el: any) => { if (el) clipRects.value[i] = el } }\n                    x={ item.x + offsetX.value }\n                    y={ item.y }\n                    width={ lineWidth.value }\n                    height={ item.height }\n                    rx={ smooth.value }\n                    ry={ smooth.value }\n                />\n              ))\n            }\n          </clipPath>\n\n          { hasLabels.value && (\n            <g\n              key=\"labels\"\n              style={{\n                textAnchor: 'middle',\n                dominantBaseline: 'mathematical',\n                fill: 'currentColor',\n              }}\n            >\n              {\n                parsedLabels.value.map((item, i) => (\n                  <text\n                    x={ item.x + offsetX.value + lineWidth.value / 2 }\n                    y={ (parseInt(props.height, 10) - 2) + (parseInt(props.labelSize, 10) || 7 * 0.75) }\n                    font-size={ Number(props.labelSize) || 7 }\n                  >\n                    { slots.label?.({ index: i, value: item.value }) ?? item.value }\n                  </text>\n                ))\n              }\n            </g>\n          )}\n\n          { props.interactive && currentIndex.value !== null && (\n            <rect\n              key=\"highlight\"\n              x={ animatedX.value - offsetX.value }\n              y={ 0 }\n              width={ columnWidth.value }\n              height={ props.height }\n              fill=\"currentColor\"\n              opacity={ 0.1 }\n              pointer-events=\"none\"\n            />\n          )}\n\n          <g\n            clip-path={ `url(#${id.value}-clip)` }\n            fill={ `url(#${id.value})` }\n          >\n            <rect\n              x={ 0 }\n              y={ 0 }\n              width={ totalWidth.value }\n              height={ props.height }\n            ></rect>\n          </g>\n        </svg>\n\n        { !!props.tooltip && (\n          <VSparklineTooltip\n            key=\"tooltip\"\n            modelValue={ tooltipVisible.value }\n            target={ tooltipTarget.value }\n            index={ currentIndex.value }\n            value={ currentIndex.value !== null ? bars.value[currentIndex.value].value : 0 }\n            offset={ tooltipConfig.value.offset }\n            contentClass={ tooltipConfig.value.class }\n            titleFormat={ tooltipConfig.value.titleFormat }\n            location=\"top center\"\n            onAfterLeave={ onTooltipAfterLeave }\n            v-slots={{ default: slots.tooltip }}\n          />\n        )}\n        </Fragment>\n      )\n    })\n  },\n})\n\nexport type VBarline = InstanceType<typeof VBarline>\n","// Components\nimport { VSparklineTooltip } from './VSparklineTooltip'\n\n// Utilities\nimport { computed, Fragment, nextTick, ref, shallowRef, useId, watch } from 'vue'\nimport { buildPath, extendPoints, makeLineProps, resample } from './util/line'\nimport { genericComponent, getPropertyFromItem, isNumber, isObject, PREFERS_REDUCED_MOTION, propsFactory, useRender } from '@/util'\nimport { easingPatterns, useTransition } from '@/util/easing'\n\n// Types\nimport type { Boundary, Point } from './util/line'\n\nexport type VTrendlineSlots = {\n  default: void\n  label: { index: number, value: string }\n  tooltip: { index: number, value: number }\n}\n\nexport const makeVTrendlineProps = propsFactory({\n  fill: Boolean,\n\n  ...makeLineProps(),\n}, 'VTrendline')\n\nexport const VTrendline = genericComponent<VTrendlineSlots>()({\n  name: 'VTrendline',\n\n  inheritAttrs: false,\n\n  props: makeVTrendlineProps(),\n\n  emits: {\n    'update:currentIndex': (_index: number | null) => true,\n  },\n\n  setup (props, { slots, attrs, emit }) {\n    const uid = useId()\n    const id = computed(() => props.id || `trendline-${uid}`)\n    const autoDrawDuration = computed(() => Number(props.autoDrawDuration) || (props.fill ? 500 : 2000))\n\n    const hasDrawn = ref(false)\n    const fillPath = ref<SVGPathElement | null>(null)\n    const strokePath = ref<SVGPathElement | null>(null)\n    const animationDuration = computed(() =>\n      isObject(props.animation) ? (props.animation.duration ?? 300) : 300\n    )\n    const animationEasing = computed(() =>\n      isObject(props.animation) ? (props.animation.easing ?? 'ease') : 'ease'\n    )\n\n    function genPoints (\n      values: number[],\n      boundary: Boundary\n    ): Point[] {\n      const { minX, maxX, minY, maxY } = boundary\n\n      if (values.length === 1) {\n        values = [values[0], values[0]]\n      }\n\n      const totalValues = values.length\n      const maxValue = props.max != null ? Number(props.max) : Math.max(...values)\n      const minValue = props.min != null ? Number(props.min) : Math.min(...values)\n\n      const gridX = (maxX - minX) / (totalValues - 1)\n      const gridY = (maxY - minY) / ((maxValue - minValue) || 1)\n\n      return values.map((value, index) => ({\n        x: minX + index * gridX,\n        y: maxY - (value - minValue) * gridY,\n        value,\n      }))\n    }\n\n    const hasLabels = computed(() => {\n      return Boolean(\n        props.showLabels ||\n        props.labels.length > 0 ||\n        !!slots?.label\n      )\n    })\n\n    const totalWidth = computed(() => Number(props.width))\n\n    const boundary = computed<Boundary>(() => {\n      const padding = Number(props.padding)\n\n      return {\n        minX: padding,\n        maxX: totalWidth.value - padding,\n        minY: padding,\n        maxY: parseInt(props.height, 10) - padding,\n      }\n    })\n\n    const items = computed(() => props.modelValue.map(item => getPropertyFromItem(item, props.itemValue, item)))\n\n    // When animation is enabled, resample to a consistent point count\n    // so the SVG path always has the same number of commands for CSS d transitions\n    const sampleCount = ref(0)\n\n    // When sampleCount grows (new dataset is longer than any seen before),\n    // manually patch the DOM path to old-data-at-new-count before Vue re-renders,\n    // so the browser sees same-structure paths and can CSS-transition between them.\n    watch(items, (newVal, oldVal) => {\n      if (!props.animation) return\n\n      const prevCount = sampleCount.value\n      if (newVal.length > prevCount) {\n        sampleCount.value = newVal.length\n\n        if (prevCount > 0 && oldVal) {\n          const oldResampled = resample(oldVal, sampleCount.value)\n          for (const [pathRef, fill] of [[strokePath, false], [fillPath, true]] as const) {\n            const path = pathRef.value\n            if (!path) continue\n            path.setAttribute('d', genPath(oldResampled, fill))\n          }\n        }\n      }\n    }, { immediate: true })\n\n    const normalizedItems = computed(() => {\n      if (!props.animation || !sampleCount.value || items.value.length === sampleCount.value) {\n        return items.value\n      }\n      return resample(items.value, sampleCount.value)\n    })\n\n    const points = computed(() => genPoints(normalizedItems.value, boundary.value))\n\n    const extendedPoints = computed(() => extendPoints(points.value, props.inset, totalWidth.value))\n\n    function genPath (input: Point[] | number[], fill: boolean): string {\n      const points = isNumber(input[0])\n        ? extendPoints(genPoints(input as number[], boundary.value), props.inset, totalWidth.value)\n        : input as Point[]\n\n      return buildPath(points, {\n        smooth: props.smooth,\n        smoothMode: props.smoothMode,\n        height: parseInt(props.height, 10),\n        fill,\n        animation: !!props.animation,\n      })\n    }\n\n    const parsedLabels = computed(() => {\n      const labels = []\n      const len = points.value.length\n\n      for (let i = 0; labels.length < len; i++) {\n        const point = points.value[i]\n        let value = props.labels[i]\n\n        if (!value) {\n          value = point.value\n        }\n\n        labels.push({\n          x: point.x,\n          value: String(value),\n        })\n      }\n\n      return labels\n    })\n\n    function applyDTransition (path: SVGPathElement, duration: number, easing: string) {\n      path.style.transition = `d ${duration}ms ${easing}`\n    }\n\n    watch(() => props.modelValue, async () => {\n      await nextTick()\n\n      if (PREFERS_REDUCED_MOTION()) return\n\n      // Animation-only mode (no auto-draw): just ensure d transition is set\n      if (!props.autoDraw) {\n        if (props.animation && strokePath.value) {\n          for (const path of [fillPath.value, strokePath.value]) {\n            if (path) applyDTransition(path, animationDuration.value, animationEasing.value)\n          }\n        }\n        return\n      }\n\n      if (!strokePath.value) return\n\n      if (props.autoDraw === 'once' && hasDrawn.value) return\n      hasDrawn.value = true\n\n      const shouldDrawOnce = props.autoDraw === 'once'\n\n      if (!props.fill) {\n        const path = strokePath.value\n        const length = path.getTotalLength()\n\n        path.style.transition = 'none'\n        path.style.strokeDasharray = `${length}`\n        path.style.strokeDashoffset = `${length}`\n        path.getBoundingClientRect()\n\n        const dTransition = props.animation\n          ? `, d ${animationDuration.value}ms ${animationEasing.value}`\n          : ''\n        path.style.transition = `stroke-dashoffset ${autoDrawDuration.value}ms ${props.autoDrawEasing}${dTransition}`\n        path.style.strokeDashoffset = '0'\n\n        if (shouldDrawOnce) {\n          path.addEventListener('transitionend', e => {\n            if (e.propertyName !== 'stroke-dashoffset') return\n            path.style.strokeDasharray = ''\n            path.style.strokeDashoffset = ''\n            if (props.animation) {\n              applyDTransition(path, animationDuration.value, animationEasing.value)\n            } else {\n              path.style.transition = ''\n            }\n          }, { once: true })\n        }\n      } else {\n        for (const path of [fillPath.value, strokePath.value]) {\n          if (!path) continue\n\n          path.style.transformOrigin = 'bottom center'\n          path.style.transition = 'none'\n          path.style.transform = `scaleY(0)`\n          path.getBoundingClientRect()\n\n          const dTransition = props.animation\n            ? `, d ${animationDuration.value}ms ${animationEasing.value}`\n            : ''\n          path.style.transition = `transform ${autoDrawDuration.value}ms ${props.autoDrawEasing}${dTransition}`\n          path.style.transform = `scaleY(1)`\n\n          if (shouldDrawOnce) {\n            path.addEventListener('transitionend', e => {\n              if (e.propertyName !== 'transform') return\n              path.style.transform = ''\n              path.style.transformOrigin = ''\n              if (props.animation) {\n                applyDTransition(path, animationDuration.value, animationEasing.value)\n              } else {\n                path.style.transition = ''\n              }\n            }, { once: true })\n          }\n        }\n      }\n    }, { immediate: true })\n\n    // Hover / tooltip state\n    const svgRef = shallowRef<SVGSVGElement | null>(null)\n    const currentIndex = shallowRef<number | null>(null)\n    const tooltipVisible = shallowRef(false)\n\n    const currentPoint = computed(() =>\n      currentIndex.value !== null ? points.value[currentIndex.value] : null\n    )\n\n    function getPathLengthAtX (svgPath: SVGPathElement, targetX: number): number {\n      const total = svgPath.getTotalLength()\n      let low = 0\n      let high = total\n      // 32 bisections ≈ sub-pixel accuracy on any reasonable chart width\n      for (let i = 0; i < 32; i++) {\n        const mid = (low + high) / 2\n        if (svgPath.getPointAtLength(mid).x < targetX) low = mid\n        else high = mid\n      }\n      return (low + high) / 2\n    }\n\n    const markerPathLength = shallowRef(0)\n    watch(currentPoint, point => {\n      if (!point || !strokePath.value) return\n      markerPathLength.value = getPathLengthAtX(strokePath.value, point.x)\n    })\n\n    const animatedLength = useTransition(markerPathLength, { duration: 150, transition: easingPatterns.easeOutQuad })\n    const markerPoint = computed(() => {\n      const { x, y } = strokePath.value?.getPointAtLength(animatedLength.value) ?? { x: 0, y: 0 }\n      return { x, y }\n    })\n\n    const tooltipTarget = computed<[number, number] | undefined>(() => {\n      if (!currentPoint.value || !svgRef.value) return undefined\n      const matrix = svgRef.value.getScreenCTM()\n      if (!matrix) return undefined\n      const svgPoint = svgRef.value.createSVGPoint()\n      svgPoint.x = markerPoint.value.x\n      svgPoint.y = markerPoint.value.y\n      const { x, y } = svgPoint.matrixTransform(matrix)\n      return [x, y]\n    })\n\n    const tooltipConfig = computed(() => ({\n      showCrosshair: true,\n      offset: 16 as number | undefined,\n      titleFormat: (item: { index: number, value: number }) => String(item.value),\n      ...(isObject(props.tooltip) ? props.tooltip : {}),\n    }))\n\n    let frame = -1\n\n    function onSvgMousemove (e: MouseEvent) {\n      const target = e.currentTarget as SVGSVGElement\n      cancelAnimationFrame(frame)\n      frame = requestAnimationFrame(() => {\n        const rect = target.getBoundingClientRect()\n        const svgX = (e.clientX - rect.left) / rect.width * Number(props.width)\n\n        let nearest = 0\n        let minDist = Infinity\n        points.value.forEach((point, index) => {\n          const dist = Math.abs(point.x - svgX)\n          if (dist < minDist) {\n            minDist = dist\n            nearest = index\n          }\n        })\n\n        currentIndex.value = nearest\n        emit('update:currentIndex', nearest)\n        tooltipVisible.value = true\n      })\n    }\n\n    function onSvgMouseleave () {\n      cancelAnimationFrame(frame)\n      tooltipVisible.value = false\n      if (!props.tooltip) {\n        currentIndex.value = null\n        emit('update:currentIndex', null)\n      }\n    }\n\n    function onTooltipAfterLeave () {\n      currentIndex.value = null\n      emit('update:currentIndex', null)\n    }\n\n    function setIndex (index: number | null) {\n      currentIndex.value = index\n      emit('update:currentIndex', index)\n      tooltipVisible.value = index !== null\n    }\n\n    function onSvgFocus () {\n      if (!points.value.length) return\n      setIndex(points.value.length - 1)\n    }\n\n    function onSvgBlur () {\n      tooltipVisible.value = false\n      if (!props.tooltip) {\n        setIndex(null)\n      }\n    }\n\n    function onSvgKeydown (e: KeyboardEvent) {\n      if (!points.value.length) return\n      const length = points.value.length\n\n      if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n        e.preventDefault()\n        const direction = e.key === 'ArrowLeft' ? -1 : 1\n        const current = currentIndex.value ?? (direction === 1 ? -1 : length)\n        const next = Math.max(0, Math.min(length - 1, current + direction))\n        setIndex(next)\n      }\n    }\n\n    useRender(() => {\n      const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse()\n      const markerRadius = (parseFloat(props.markerSize) || 8) / 2\n\n      return (\n        <Fragment>\n        <svg\n          ref={ svgRef }\n          display=\"block\"\n          stroke-width={ parseFloat(props.lineWidth) ?? 4 }\n          tabindex={ props.interactive ? 0 : undefined }\n          onMousemove={ props.interactive ? onSvgMousemove : undefined }\n          onMouseleave={ props.interactive ? onSvgMouseleave : undefined }\n          onFocus={ props.interactive ? onSvgFocus : undefined }\n          onBlur={ props.interactive ? onSvgBlur : undefined }\n          onKeydown={ props.interactive ? onSvgKeydown : undefined }\n          { ...attrs }\n        >\n          <defs>\n            <linearGradient\n              id={ id.value }\n              gradientUnits=\"userSpaceOnUse\"\n              x1={ props.gradientDirection === 'left' ? '100%' : '0' }\n              y1={ props.gradientDirection === 'top' ? '100%' : '0' }\n              x2={ props.gradientDirection === 'right' ? '100%' : '0' }\n              y2={ props.gradientDirection === 'bottom' ? '100%' : '0' }\n            >\n              {\n                gradientData.map((color, index) => (\n                  <stop offset={ index / (Math.max(gradientData.length - 1, 1)) } stop-color={ color || 'currentColor' } />\n                ))\n              }\n            </linearGradient>\n          </defs>\n\n          { hasLabels.value && (\n            <g\n              key=\"labels\"\n              style={{\n                textAnchor: 'middle',\n                dominantBaseline: 'mathematical',\n                fill: 'currentColor',\n              }}\n            >\n              {\n                parsedLabels.value.map((item, i) => (\n                  <text\n                    x={ item.x }\n                    y={ (parseInt(props.height, 10) - 4) + (parseInt(props.labelSize, 10) || 7 * 0.75) }\n                    font-size={ Number(props.labelSize) || 7 }\n                  >\n                    { slots.label?.({ index: i, value: item.value }) ?? item.value }\n                  </text>\n                ))\n              }\n            </g>\n          )}\n\n          <path\n            key=\"fill\"\n            ref={ props.fill ? fillPath : strokePath }\n            d={ genPath(extendedPoints.value, props.fill) }\n            fill={ props.fill ? `url(#${id.value})` : 'none' }\n            stroke={ props.fill ? 'none' : `url(#${id.value})` }\n          />\n\n          { props.fill && (\n            <path\n              key=\"trendline\"\n              ref={ strokePath }\n              d={ genPath(extendedPoints.value, false) }\n              fill=\"none\"\n              stroke=\"currentColor\"\n            />\n          )}\n\n          { props.showMarkers && (\n            <g key=\"markers\">\n              { points.value.map((point, i) => (\n                <circle\n                  key={ i }\n                  cx={ point.x }\n                  cy={ point.y }\n                  r={ markerRadius }\n                  fill=\"currentColor\"\n                  stroke={ props.markerStroke }\n                  stroke-width={ 2 }\n                  pointer-events=\"none\"\n                />\n              ))}\n            </g>\n          )}\n\n          { props.interactive && currentPoint.value && (\n            <g key=\"hover\" pointer-events=\"none\">\n              { tooltipConfig.value.showCrosshair && (\n                <line\n                  key=\"crosshair-line\"\n                  x1={ markerPoint.value.x }\n                  y1={ props.inset ? 0 : boundary.value.minY }\n                  x2={ markerPoint.value.x }\n                  y2={ props.inset ? parseInt(props.height, 10) : boundary.value.maxY }\n                  stroke=\"currentColor\"\n                  stroke-width={ 1 }\n                  stroke-dasharray=\"4 2\"\n                  opacity={ 0.5 }\n                />\n              )}\n              <circle\n                key=\"marker\"\n                cx={ markerPoint.value.x }\n                cy={ markerPoint.value.y }\n                r={ markerRadius }\n                fill=\"currentColor\"\n                stroke={ props.markerStroke }\n                stroke-width={ 2 }\n              />\n            </g>\n          )}\n\n        </svg>\n\n        { !!props.tooltip && (\n          <VSparklineTooltip\n            key=\"tooltip\"\n            modelValue={ tooltipVisible.value }\n            target={ tooltipTarget.value }\n            index={ currentIndex.value }\n            value={ currentIndex.value !== null ? points.value[currentIndex.value].value : 0 }\n            offset={ tooltipConfig.value.offset }\n            contentClass={ tooltipConfig.value.class }\n            titleFormat={ tooltipConfig.value.titleFormat }\n            onAfterLeave={ onTooltipAfterLeave }\n            v-slots={{ default: slots.tooltip }}\n          />\n        )}\n        </Fragment>\n      )\n    })\n  },\n})\n\nexport type VTrendline = InstanceType<typeof VTrendline>\n","// Components\nimport { makeVBarlineProps, VBarline } from './VBarline'\nimport { makeVTrendlineProps, VTrendline } from './VTrendline'\n\n// Composables\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { computed } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const makeVSparklineProps = propsFactory({\n  type: {\n    type: String as PropType<'trend' | 'bar'>,\n    default: 'trend',\n  },\n\n  ...makeVBarlineProps(),\n  ...makeVTrendlineProps(),\n}, 'VSparkline')\n\nexport type VSparklineSlots = {\n  default: void\n  label: { index: number, value: string }\n  tooltip: { index: number, value: number }\n}\n\nexport const VSparkline = genericComponent<VSparklineSlots>()({\n  name: 'VSparkline',\n\n  props: makeVSparklineProps(),\n\n  emits: {\n    'update:currentIndex': (_index: number | null) => true,\n  },\n\n  setup (props, { slots, emit }) {\n    const { textColorClasses, textColorStyles } = useTextColor(() => props.color)\n    const hasLabels = computed(() => {\n      return Boolean(\n        props.showLabels ||\n        props.labels.length > 0 ||\n        !!slots?.label\n      )\n    })\n    const totalHeight = computed(() => {\n      let height = parseInt(props.height, 10)\n\n      if (hasLabels.value) height += parseInt(props.labelSize, 10) * 1.5\n\n      return height\n    })\n\n    useRender(() => {\n      const Tag = props.type === 'trend' ? VTrendline : VBarline\n      const lineProps = props.type === 'trend' ? VTrendline.filterProps(props) : VBarline.filterProps(props)\n\n      return (\n        <Tag\n          key={ props.type }\n          class={ textColorClasses.value }\n          style={ textColorStyles.value }\n          viewBox={ `0 0 ${props.width} ${totalHeight.value}` }\n          { ...lineProps }\n          onUpdate:currentIndex={ (v: number | null) => emit('update:currentIndex', v) }\n          v-slots={ slots }\n        />\n      )\n    })\n  },\n})\n\nexport type VSparkline = InstanceType<typeof VSparkline>\n","// Styles\nimport './VSpeedDial.sass'\n\n// Components\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { makeVMenuProps, VMenu } from '@/components/VMenu/VMenu'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { injectNestedDefaults } from '@/composables/defaults'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { VBtn } from '@/components/VBtn'\nimport type { OverlaySlots } from '@/components/VOverlay/VOverlay'\nimport type { Anchor } from '@/util'\n\nexport const makeVSpeedDialProps = propsFactory({\n  ...makeComponentProps(),\n  ...makeVMenuProps({\n    offset: 8,\n    minWidth: 0,\n    openDelay: 0,\n    closeDelay: 100,\n    location: 'top center' as const,\n    transition: 'scale-transition',\n  }),\n}, 'VSpeedDial')\n\nexport const VSpeedDial = genericComponent<OverlaySlots>()({\n  name: 'VSpeedDial',\n\n  props: makeVSpeedDialProps(),\n\n  emits: {\n    'update:modelValue': (value: boolean) => true,\n  },\n\n  setup (props, { slots }) {\n    const model = useProxiedModel(props, 'modelValue')\n    const btnDefaults = injectNestedDefaults<VBtn['$props']>('VBtn')\n\n    const menuRef = ref<VMenu>()\n\n    const location = computed<Anchor>(() => {\n      const [y, x = 'center'] = props.location?.split(' ') ?? []\n\n      return `${y} ${x}` as Anchor\n    })\n\n    const locationClasses = computed(() => ({\n      [`v-speed-dial__content--${location.value.replace(' ', '-')}`]: true,\n    }))\n\n    useRender(() => {\n      const menuProps = VMenu.filterProps(props)\n\n      return (\n        <VMenu\n          { ...menuProps }\n          v-model={ model.value }\n          class={ props.class }\n          style={ props.style }\n          contentClass={[\n            'v-speed-dial__content',\n            locationClasses.value,\n            props.contentClass,\n          ]}\n          location={ location.value }\n          ref={ menuRef }\n          transition=\"fade-transition\"\n        >\n          {{\n            ...slots,\n            default: slotProps => (\n              <VDefaultsProvider\n                defaults={{\n                  VBtn: {\n                    size: btnDefaults.value?.size ?? 'small',\n                  },\n                }}\n              >\n                <MaybeTransition\n                  appear\n                  group\n                  transition={ props.transition }\n                >\n                  { slots.default?.(slotProps) }\n                </MaybeTransition>\n              </VDefaultsProvider>\n            ),\n          }}\n        </VMenu>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VSpeedDial = InstanceType<typeof VSpeedDial>\n","// Types\nimport type { InjectionKey } from 'vue'\nimport type { GroupProvide } from '@/composables/group'\n\nexport const VStepperSymbol: InjectionKey<GroupProvide> = Symbol.for('vuetify:v-stepper')\n","// Components\nimport { VBtn } from '@/components/VBtn/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider/VDefaultsProvider'\n\n// Composables\nimport { injectComponentDefaults, injectNestedDefaults } from '@/composables/defaults'\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport type VStepperActionsSlots = {\n  prev: {\n    props: { onClick: () => void }\n  }\n  next: {\n    props: { onClick: () => void }\n  }\n}\n\nexport const makeVStepperActionsProps = propsFactory({\n  color: String,\n  disabled: {\n    type: [Boolean, String] as PropType<boolean | 'next' | 'prev'>,\n    default: false,\n  },\n  prevText: {\n    type: String,\n    default: '$vuetify.stepper.prev',\n  },\n  nextText: {\n    type: String,\n    default: '$vuetify.stepper.next',\n  },\n}, 'VStepperActions')\n\nexport const VStepperActions = genericComponent<VStepperActionsSlots>()({\n  name: 'VStepperActions',\n\n  props: makeVStepperActionsProps(),\n\n  emits: {\n    'click:prev': () => true,\n    'click:next': () => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const { t } = useLocale()\n    const btnDefaults = injectNestedDefaults<VBtn['$props']>('VBtn')\n    const prevDefaults = injectComponentDefaults<VBtn['$props']>('VStepperActionsPrevBtn')\n    const nextDefaults = injectComponentDefaults<VBtn['$props']>('VStepperActionsNextBtn')\n\n    function onClickPrev () {\n      emit('click:prev')\n    }\n\n    function onClickNext () {\n      emit('click:next')\n    }\n\n    useRender(() => {\n      const prevSlotProps = {\n        onClick: onClickPrev,\n      }\n      const nextSlotProps = {\n        onClick: onClickNext,\n      }\n      const prevProps = {\n        disabled: ['prev', true].includes(props.disabled),\n        text: t(props.prevText),\n        variant: prevDefaults.value?.variant ?? btnDefaults.value?.variant ?? 'text',\n      }\n      const nextProps = {\n        color: props.color,\n        disabled: ['next', true].includes(props.disabled),\n        text: t(props.nextText),\n        variant: nextDefaults.value?.variant ?? btnDefaults.value?.variant ?? 'tonal',\n      }\n\n      return (\n        <div class=\"v-stepper-actions\">\n          <VDefaultsProvider\n            defaults={{\n              VBtn: prevProps,\n              VStepperActionsPrevBtn: { ...btnDefaults.value, ...prevDefaults.value, ...prevProps },\n            }}\n          >\n            { slots.prev?.({ props: prevSlotProps }) ?? (\n              <VBtn _as=\"VStepperActionsPrevBtn\" { ...prevSlotProps } />\n            )}\n          </VDefaultsProvider>\n\n          <VDefaultsProvider\n            defaults={{\n              VBtn: nextProps,\n              VStepperActionsNextBtn: { ...btnDefaults.value, ...nextDefaults.value, ...nextProps },\n            }}\n          >\n            { slots.next?.({ props: nextSlotProps }) ?? (\n              <VBtn _as=\"VStepperActionsNextBtn\" { ...nextSlotProps } />\n            )}\n          </VDefaultsProvider>\n        </div>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VStepperActions = InstanceType<typeof VStepperActions>\n","// Utilities\nimport { createSimpleFunctional } from '@/util'\n\nexport const VStepperHeader = createSimpleFunctional('v-stepper-header')\n\nexport type VStepperHeader = InstanceType<typeof VStepperHeader>\n","// Styles\nimport './VStepperItem.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar/VAvatar'\nimport { VIcon } from '@/components/VIcon/VIcon'\n\n// Composables\nimport { makeGroupItemProps, useGroupItem } from '@/composables/group'\nimport { IconValue } from '@/composables/icons'\nimport { genOverlays } from '@/composables/variant'\n\n// Directives\nimport vRipple from '@/directives/ripple'\n\n// Utilities\nimport { computed } from 'vue'\nimport { VStepperSymbol } from './shared'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { RippleDirectiveBinding } from '@/directives/ripple'\n\nexport type StepperItem = string | Record<string, any>\n\nexport type StepperItemSlot<T = any> = {\n  canEdit: boolean\n  hasError: boolean\n  hasCompleted: boolean\n  title?: string | number\n  subtitle?: string | number\n  step: T\n}\n\nexport type VStepperItemSlots<T = any> = {\n  default: StepperItemSlot<T>\n  icon: StepperItemSlot<T>\n  title: StepperItemSlot<T>\n  subtitle: StepperItemSlot<T>\n}\n\nexport type ValidationRule = () => string | boolean\n\nexport const makeStepperItemProps = propsFactory({\n  color: String,\n  title: String,\n  subtitle: String,\n  complete: Boolean,\n  completeIcon: {\n    type: IconValue,\n    default: '$complete',\n  },\n  editable: Boolean,\n  editIcon: {\n    type: IconValue,\n    default: '$edit',\n  },\n  error: Boolean,\n  errorIcon: {\n    type: IconValue,\n    default: '$error',\n  },\n  icon: IconValue,\n  ripple: {\n    type: [Boolean, Object] as PropType<RippleDirectiveBinding['value']>,\n    default: true,\n  },\n  rules: {\n    type: Array as PropType<readonly ValidationRule[]>,\n    default: () => ([]),\n  },\n}, 'StepperItem')\n\nexport const makeVStepperItemProps = propsFactory({\n  ...makeStepperItemProps(),\n  ...makeGroupItemProps(),\n}, 'VStepperItem')\n\nexport const VStepperItem = genericComponent<VStepperItemSlots>()({\n  name: 'VStepperItem',\n\n  directives: { vRipple },\n\n  props: makeVStepperItemProps(),\n\n  emits: {\n    'group:selected': (val: { value: boolean }) => true,\n  },\n\n  setup (props, { slots }) {\n    const group = useGroupItem(props, VStepperSymbol, true)\n    const step = computed(() => group?.value.value ?? props.value)\n    const isValid = computed(() => props.rules.every(handler => handler() === true))\n    const isClickable = computed(() => !props.disabled && props.editable)\n    const canEdit = computed(() => !props.disabled && props.editable)\n    const hasError = computed(() => props.error || !isValid.value)\n    const hasCompleted = computed(() => props.complete || (props.rules.length > 0 && isValid.value))\n    const icon = computed(() => {\n      if (hasError.value) return props.errorIcon\n      if (hasCompleted.value) return props.completeIcon\n      if (group.isSelected.value && props.editable) return props.editIcon\n\n      return props.icon\n    })\n    const slotProps = computed(() => ({\n      canEdit: canEdit.value,\n      hasError: hasError.value,\n      hasCompleted: hasCompleted.value,\n      title: props.title,\n      subtitle: props.subtitle,\n      step: step.value,\n      value: props.value,\n    }))\n\n    useRender(() => {\n      const hasColor = (\n        !group ||\n        group.isSelected.value ||\n        hasCompleted.value ||\n        canEdit.value\n      ) && (\n        !hasError.value &&\n        !props.disabled\n      )\n      const hasTitle = !!(props.title != null || slots.title)\n      const hasSubtitle = !!(props.subtitle != null || slots.subtitle)\n\n      function onClick () {\n        group?.toggle()\n      }\n\n      return (\n        <button\n          class={[\n            'v-stepper-item',\n            {\n              'v-stepper-item--complete': hasCompleted.value,\n              'v-stepper-item--disabled': props.disabled,\n              'v-stepper-item--error': hasError.value,\n            },\n            group?.selectedClass.value,\n          ]}\n          disabled={ !props.editable }\n          type=\"button\"\n          v-ripple={[\n            props.editable && props.ripple,\n            null,\n            null,\n          ]}\n          onClick={ onClick }\n        >\n          { isClickable.value && genOverlays(true, 'v-stepper-item') }\n\n          <VAvatar\n            key=\"stepper-avatar\"\n            class=\"v-stepper-item__avatar\"\n            color={ hasColor ? props.color : undefined }\n            size={ 24 }\n          >\n            { slots.icon?.(slotProps.value) ?? (\n              icon.value ? (\n                <VIcon icon={ icon.value }></VIcon>\n              ) : step.value\n            )}\n          </VAvatar>\n\n          <div class=\"v-stepper-item__content\">\n            { hasTitle && (\n              <div\n                key=\"title\"\n                class=\"v-stepper-item__title\"\n              >\n                { slots.title?.(slotProps.value) ?? props.title }\n              </div>\n            )}\n\n            { hasSubtitle && (\n              <div\n                key=\"subtitle\"\n                class=\"v-stepper-item__subtitle\"\n              >\n                { slots.subtitle?.(slotProps.value) ?? props.subtitle }\n              </div>\n            )}\n\n            { slots.default?.(slotProps.value) }\n          </div>\n        </button>\n      )\n    })\n    return {}\n  },\n})\n\nexport type VStepperItem = InstanceType<typeof VStepperItem>\n","// Components\nimport { VStepperSymbol } from './shared'\nimport { makeVWindowProps, VWindow } from '@/components/VWindow/VWindow'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, inject } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { VWindowSlots } from '@/components/VWindow/VWindow'\nimport type { GenericProps } from '@/util'\n\nexport const makeVStepperWindowProps = propsFactory({\n  ...omit(makeVWindowProps(), ['continuous', 'nextIcon', 'prevIcon', 'showArrows', 'touch', 'mandatory']),\n}, 'VStepperWindow')\n\nexport const VStepperWindow = genericComponent<new <TModel>(\n  props: {\n    modelValue?: TModel\n    'onUpdate:modelValue'?: (value: TModel) => void\n  },\n  slots: VWindowSlots\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VStepperWindow',\n\n  props: makeVStepperWindowProps(),\n\n  emits: {\n    'update:modelValue': (v: unknown) => true,\n  },\n\n  setup (props, { slots }) {\n    const group = inject(VStepperSymbol, null)\n    const _model = useProxiedModel(props, 'modelValue')\n\n    const model = computed({\n      get () {\n        // Always return modelValue if defined\n        // or if not within a VStepper group\n        if (_model.value != null || !group) return _model.value\n\n        // If inside of a VStepper, find the currently selected\n        // item by id. Item value may be assigned by its index\n        return group.items.value.find(item => group.selected.value.includes(item.id))?.value\n      },\n      set (val) {\n        _model.value = val\n      },\n    })\n\n    useRender(() => {\n      const windowProps = VWindow.filterProps(props)\n\n      return (\n        <VWindow\n          _as=\"VStepperWindow\"\n          { ...windowProps }\n          v-model={ model.value }\n          class={[\n            'v-stepper-window',\n            props.class,\n          ]}\n          style={ props.style }\n          mandatory={ false }\n          touch={ false }\n          v-slots={ slots }\n        />\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VStepperWindow = InstanceType<typeof VStepperWindow>\n","// Components\nimport { makeVWindowItemProps, VWindowItem } from '@/components/VWindow/VWindowItem'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVStepperWindowItemProps = propsFactory({\n  ...makeVWindowItemProps(),\n}, 'VStepperWindowItem')\n\nexport const VStepperWindowItem = genericComponent()({\n  name: 'VStepperWindowItem',\n\n  props: makeVStepperWindowItemProps(),\n\n  setup (props, { slots }) {\n    useRender(() => {\n      const windowItemProps = VWindowItem.filterProps(props)\n\n      return (\n        <VWindowItem\n          _as=\"VStepperWindowItem\"\n          { ...windowItemProps }\n          class={[\n            'v-stepper-window-item',\n            props.class,\n          ]}\n          style={ props.style }\n          v-slots={ slots }\n        />\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VStepperWindowItem = InstanceType<typeof VStepperWindowItem>\n","// Styles\nimport './VStepper.sass'\n\n// Components\nimport { VStepperSymbol } from './shared'\nimport { makeVStepperActionsProps, VStepperActions } from './VStepperActions'\nimport { VStepperHeader } from './VStepperHeader'\nimport { VStepperItem } from './VStepperItem'\nimport { VStepperWindow } from './VStepperWindow'\nimport { VStepperWindowItem } from './VStepperWindowItem'\nimport { VDivider } from '@/components/VDivider'\nimport { makeVSheetProps, VSheet } from '@/components/VSheet/VSheet'\n\n// Composables\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeDisplayProps, useDisplay } from '@/composables/display'\nimport { makeGroupProps, useGroup } from '@/composables/group'\nimport { IconValue } from '@/composables/icons'\n\n// Utilities\nimport { computed, toRefs } from 'vue'\nimport { genericComponent, getPropertyFromItem, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { StepperItem, StepperItemSlot } from './VStepperItem'\nimport type { GenericProps, SelectItemKey } from '@/util'\n\nexport type VStepperSlot = {\n  prev: () => void\n  next: () => void\n}\n\nexport type VStepperSlots = {\n  actions: VStepperSlot\n  default: VStepperSlot\n  header: StepperItem\n  'header-item': StepperItemSlot\n  icon: StepperItemSlot\n  title: StepperItemSlot\n  subtitle: StepperItemSlot\n  item: StepperItem\n  prev: never\n  next: never\n} & {\n  [key: `header-item.${string}`]: StepperItemSlot\n  [key: `item.${string}`]: StepperItem\n}\n\nexport const makeStepperProps = propsFactory({\n  altLabels: Boolean,\n  bgColor: String,\n  completeIcon: IconValue,\n  editIcon: IconValue,\n  editable: Boolean,\n  errorIcon: IconValue,\n  hideActions: Boolean,\n  items: {\n    type: Array as PropType<readonly StepperItem[]>,\n    default: () => ([]),\n  },\n  itemTitle: {\n    type: [String, Array, Function] as PropType<SelectItemKey>,\n    default: 'title',\n  },\n  itemValue: {\n    type: [String, Array, Function] as PropType<SelectItemKey>,\n    default: 'value',\n  },\n  itemProps: {\n    type: [Boolean, String, Array, Function] as PropType<SelectItemKey>,\n    default: 'props',\n  },\n  nonLinear: Boolean,\n  flat: Boolean,\n\n  ...makeDisplayProps(),\n}, 'Stepper')\n\nexport const makeVStepperProps = propsFactory({\n  ...makeStepperProps(),\n  ...makeGroupProps({\n    mandatory: 'force' as const,\n    selectedClass: 'v-stepper-item--selected',\n  }),\n  ...makeVSheetProps(),\n  ...pick(makeVStepperActionsProps(), ['prevText', 'nextText']),\n}, 'VStepper')\n\nexport const VStepper = genericComponent<new <TModel>(\n  props: {\n    modelValue?: TModel\n    'onUpdate:modelValue'?: (value: TModel) => void\n  },\n  slots: VStepperSlots\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VStepper',\n\n  props: makeVStepperProps(),\n\n  emits: {\n    'update:modelValue': (v: unknown) => true,\n  },\n\n  setup (props, { slots }) {\n    const { items: _items, next, prev, selected } = useGroup(props, VStepperSymbol)\n    const { displayClasses, mobile } = useDisplay(props)\n    const { completeIcon, editIcon, errorIcon, color, editable, prevText, nextText } = toRefs(props)\n\n    const items = computed(() => props.items.map((item, index) => {\n      const title = getPropertyFromItem(item, props.itemTitle, item)\n      const value = getPropertyFromItem(item, props.itemValue, index + 1)\n      const itemProps = props.itemProps === true\n        ? item\n        : getPropertyFromItem(item, props.itemProps)\n\n      const _props = {\n        title,\n        value,\n        ...itemProps,\n      }\n\n      return {\n        title: _props.title,\n        value: _props.value,\n        props: _props,\n        raw: item,\n      }\n    }))\n    const activeIndex = computed(() => {\n      return _items.value.findIndex(item => selected.value.includes(item.id))\n    })\n    const disabled = computed(() => {\n      if (props.disabled) return props.disabled\n      if (activeIndex.value === 0) return 'prev'\n      if (activeIndex.value === _items.value.length - 1) return 'next'\n\n      return false\n    })\n\n    provideDefaults({\n      VStepperItem: {\n        editable,\n        errorIcon,\n        completeIcon,\n        editIcon,\n        prevText,\n        nextText,\n      },\n      VStepperActions: {\n        color,\n        disabled,\n        prevText,\n        nextText,\n      },\n    })\n\n    useRender(() => {\n      const sheetProps = VSheet.filterProps(props)\n\n      const hasHeader = !!(slots.header || props.items.length)\n      const hasWindow = props.items.length > 0\n      const hasActions = !props.hideActions && !!(hasWindow || slots.actions)\n\n      return (\n        <VSheet\n          { ...sheetProps }\n          color={ props.bgColor }\n          class={[\n            'v-stepper',\n            {\n              'v-stepper--alt-labels': props.altLabels,\n              'v-stepper--flat': props.flat,\n              'v-stepper--non-linear': props.nonLinear,\n              'v-stepper--mobile': mobile.value,\n            },\n            displayClasses.value,\n            props.class,\n          ]}\n          style={ props.style }\n        >\n          { hasHeader && (\n            <VStepperHeader key=\"stepper-header\">\n              { items.value.map(({ raw, ...item }, index) => (\n                <>\n                  { !!index && (<VDivider />) }\n\n                  <VStepperItem\n                    { ...item.props }\n                    v-slots={{\n                      default: slots[`header-item.${item.value}`] ?? slots.header,\n                      icon: slots.icon,\n                      title: slots.title,\n                      subtitle: slots.subtitle,\n                    }}\n                  />\n                </>\n              ))}\n            </VStepperHeader>\n          )}\n\n          { hasWindow && (\n            <VStepperWindow key=\"stepper-window\">\n              { items.value.map(item => (\n                <VStepperWindowItem\n                  value={ item.value }\n                  v-slots={{\n                    default: () => slots[`item.${item.value}`]?.(item) ?? slots.item?.(item),\n                  }}\n                />\n              ))}\n            </VStepperWindow>\n          )}\n\n          { slots.default?.({ prev, next }) }\n\n          { hasActions && (\n            slots.actions?.({ next, prev }) ?? (\n              <VStepperActions\n                key=\"stepper-actions\"\n                onClick:prev={ prev }\n                onClick:next={ next }\n                v-slots={ slots }\n              />\n            )\n          )}\n        </VSheet>\n      )\n    })\n\n    return {\n      prev,\n      next,\n    }\n  },\n})\n\nexport type VStepper = InstanceType<typeof VStepper>\n","// Components\nimport { makeVStepperActionsProps, VStepperActions } from '@/components/VStepper/VStepperActions'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { VStepperActionsSlots } from '@/components/VStepper/VStepperActions'\n\nexport const makeVStepperVerticalActionsProps = propsFactory({\n  ...makeVStepperActionsProps(),\n}, 'VStepperActions')\n\nexport const VStepperVerticalActions = genericComponent<VStepperActionsSlots>()({\n  name: 'VStepperVerticalActions',\n\n  props: makeVStepperVerticalActionsProps(),\n\n  emits: {\n    'click:prev': () => true,\n    'click:next': () => true,\n  },\n\n  setup (props, { emit, slots }) {\n    function onClickPrev () {\n      emit('click:prev')\n    }\n\n    function onClickNext () {\n      emit('click:next')\n    }\n\n    useRender(() => {\n      const stepperActionsProps = VStepperActions.filterProps(props)\n\n      return (\n        <VStepperActions\n          class=\"v-stepper-vertical-actions\"\n          { ...stepperActionsProps }\n          onClick:prev={ onClickPrev }\n          onClick:next={ onClickNext }\n          v-slots={ slots }\n        />\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VStepperVerticalActions = InstanceType<typeof VStepperVerticalActions>\n","// Styles\nimport './VStepperVerticalItem.sass'\n\n// Components\nimport { VStepperVerticalActions } from './VStepperVerticalActions'\nimport { VAvatar } from '@/components/VAvatar/VAvatar'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider/VDefaultsProvider'\nimport { makeVExpansionPanelProps, VExpansionPanel } from '@/components/VExpansionPanel/VExpansionPanel'\nimport { VIcon } from '@/components/VIcon/VIcon'\nimport { makeStepperItemProps } from '@/components/VStepper/VStepperItem'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { StepperItemSlot } from '@/components/VStepper/VStepperItem'\n\nexport type StepperVerticalItemActionSlot<T = any> = StepperItemSlot<T> & {\n  next: () => void\n  prev: () => void\n}\n\nexport type VStepperVerticalItemSlots<T = any> = {\n  default: StepperItemSlot<T>\n  icon: StepperItemSlot<T>\n  subtitle: StepperItemSlot<T>\n  title: StepperItemSlot<T>\n  text: StepperItemSlot<T>\n  prev: StepperVerticalItemActionSlot<T>\n  next: StepperVerticalItemActionSlot<T>\n  actions: StepperVerticalItemActionSlot<T>\n}\n\nexport const makeVStepperVerticalItemProps = propsFactory({\n  hideActions: Boolean,\n\n  ...makeStepperItemProps(),\n  ...omit(makeVExpansionPanelProps({\n    expandIcon: '',\n    collapseIcon: '',\n  }), ['hideActions']),\n}, 'VStepperVerticalItem')\n\nexport const VStepperVerticalItem = genericComponent<VStepperVerticalItemSlots>()({\n  name: 'VStepperVerticalItem',\n\n  props: makeVStepperVerticalItemProps(),\n\n  emits: {\n    'click:next': () => true,\n    'click:prev': () => true,\n    'click:finish': () => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const vExpansionPanelRef = ref<typeof VExpansionPanel>()\n    const step = computed(() => !isNaN(parseInt(props.value)) ? Number(props.value) : props.value)\n    const groupItem = computed(() => vExpansionPanelRef.value?.groupItem)\n    const isValid = computed(() => props.rules.every(handler => handler() === true))\n    const canEdit = computed(() => !props.disabled && props.editable)\n    const hasError = computed(() => props.error || !isValid.value)\n    const hasCompleted = computed(() => props.complete || (props.rules.length > 0 && isValid.value))\n\n    const disabled = computed(() => {\n      if (props.disabled) return props.disabled\n      if (groupItem.value?.isFirst.value) return 'prev'\n\n      return false\n    })\n    const icon = computed(() => {\n      if (hasError.value) return props.errorIcon\n      if (hasCompleted.value) return props.completeIcon\n      if (groupItem.value?.isSelected.value && props.editable) return props.editIcon\n\n      return props.icon\n    })\n\n    const slotProps = computed(() => ({\n      canEdit: canEdit.value,\n      hasError: hasError.value,\n      hasCompleted: hasCompleted.value,\n      title: props.title,\n      subtitle: props.subtitle,\n      step: step.value,\n    } satisfies StepperItemSlot))\n\n    const actionProps = computed(() => ({\n      ...slotProps.value,\n      prev: onClickPrev,\n      next: onClickNext,\n    } satisfies StepperVerticalItemActionSlot))\n\n    function onClickNext () {\n      emit('click:next')\n\n      if (groupItem.value?.isLast.value) return\n\n      groupItem.value.group.next()\n    }\n\n    function onClickPrev () {\n      emit('click:prev')\n\n      groupItem.value.group.prev()\n    }\n\n    useRender(() => {\n      const hasColor = (\n        !groupItem.value ||\n        groupItem.value?.isSelected.value ||\n        hasCompleted.value ||\n        canEdit.value\n      ) && (\n        !hasError.value &&\n        !props.disabled\n      )\n\n      const hasActions = !props.hideActions || !!slots.actions\n      const expansionPanelProps = VExpansionPanel.filterProps(props)\n\n      return (\n        <VExpansionPanel\n          _as=\"VStepperVerticalItem\"\n          ref={ vExpansionPanelRef }\n          { ...expansionPanelProps }\n          class={[\n            'v-stepper-vertical-item',\n            {\n              'v-stepper-vertical-item--complete': hasCompleted.value,\n              'v-stepper-vertical-item--disabled': props.disabled,\n              'v-stepper-vertical-item--editable': canEdit.value,\n              'v-stepper-vertical-item--error': hasError.value,\n            },\n            props.class,\n          ]}\n          readonly={ !props.editable }\n          style={ props.style }\n          color=\"\"\n          hideActions={ false }\n          value={ step.value }\n        >\n          {{\n            title: () => (\n              <>\n                <VAvatar\n                  key=\"stepper-avatar\"\n                  class=\"v-stepper-vertical-item__avatar\"\n                  color={ hasColor ? props.color : undefined }\n                  size={ 24 }\n                  start\n                >\n                  { slots.icon?.(slotProps.value) ?? (\n                    icon.value ? (\n                      <VIcon icon={ icon.value }></VIcon>\n                    ) : step.value\n                  )}\n                </VAvatar>\n\n                <div>\n                  <div class=\"v-stepper-vertical-item__title\">\n                    { slots.title?.(slotProps.value) ?? props.title }\n                  </div>\n\n                  <div class=\"v-stepper-vertical-item__subtitle\">\n                    { slots.subtitle?.(slotProps.value) ?? props.subtitle }\n                  </div>\n                </div>\n              </>\n            ),\n            text: () => (\n              <>\n                { slots.default?.(slotProps.value) ?? props.text }\n\n                { hasActions && (\n                  <VDefaultsProvider\n                    defaults={{\n                      VStepperVerticalActions: {\n                        disabled: disabled.value,\n                        finish: groupItem.value?.isLast.value,\n                      },\n                    }}\n                  >\n                    { slots.actions?.(actionProps.value) ?? (\n                      <VStepperVerticalActions\n                        onClick:next={ onClickNext }\n                        onClick:prev={ onClickPrev }\n                        v-slots={{\n                          prev: slots.prev ? () => slots.prev?.(actionProps.value) : undefined,\n                          next: slots.next ? () => slots.next?.(actionProps.value) : undefined,\n                        }}\n                      />\n                    )}\n                  </VDefaultsProvider>\n                )}\n              </>\n            ),\n          }}\n        </VExpansionPanel>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VStepperVerticalItem = InstanceType<typeof VStepperVerticalItem>\n","// Components\nimport { VStepperVerticalItem } from './VStepperVerticalItem'\nimport { makeVExpansionPanelsProps, VExpansionPanels } from '@/components/VExpansionPanel/VExpansionPanels'\nimport { makeStepperProps } from '@/components/VStepper/VStepper'\n\n// Composables\nimport { provideDefaults } from '@/composables/defaults'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref, toRefs } from 'vue'\nimport { genericComponent, getPropertyFromItem, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { StepperVerticalItemActionSlot } from './VStepperVerticalItem'\nimport type { VStepperSlot } from '@/components/VStepper/VStepper'\nimport type { StepperItemSlot } from '@/components/VStepper/VStepperItem'\nimport type { GenericProps } from '@/util'\n\nexport type VStepperVerticalSlots<T> = {\n  actions: StepperVerticalItemActionSlot<T>\n  default: VStepperSlot & { step: T }\n  icon: StepperItemSlot<T>\n  title: StepperItemSlot<T>\n  subtitle: StepperItemSlot<T>\n  prev: StepperVerticalItemActionSlot<T>\n  next: StepperVerticalItemActionSlot<T>\n} & {\n  [key: `header-item.${string}`]: StepperItemSlot<T>\n  [key: `item.${string}`]: StepperItemSlot<T>\n}\n\nexport const makeVStepperVerticalProps = propsFactory({\n  prevText: {\n    type: String,\n    default: '$vuetify.stepper.prev',\n  },\n  nextText: {\n    type: String,\n    default: '$vuetify.stepper.next',\n  },\n\n  ...makeStepperProps(),\n  ...omit(makeVExpansionPanelsProps({\n    mandatory: 'force' as const,\n    variant: 'accordion' as const,\n  }), ['static']),\n}, 'VStepperVertical')\n\nexport const VStepperVertical = genericComponent<new <T = number>(\n  props: {\n    modelValue?: T\n    'onUpdate:modelValue'?: (value: T) => void\n  },\n  slots: VStepperVerticalSlots<T>,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VStepperVertical',\n\n  props: makeVStepperVerticalProps(),\n\n  emits: {\n    'update:modelValue': (val: any) => true,\n  },\n\n  setup (props, { slots }) {\n    const vExpansionPanelsRef = ref<typeof VExpansionPanels>()\n    const { color, eager, editable, prevText, nextText, hideActions } = toRefs(props)\n\n    const model = useProxiedModel(props, 'modelValue')\n    const items = computed(() => props.items.map((item, index) => {\n      const title = getPropertyFromItem(item, props.itemTitle, item)\n      const value = getPropertyFromItem(item, props.itemValue, index + 1)\n      const itemProps = props.itemProps === true\n        ? item\n        : getPropertyFromItem(item, props.itemProps)\n\n      const _props = {\n        title,\n        value,\n        ...itemProps,\n      }\n\n      return {\n        title: _props.title,\n        value: _props.value,\n        props: _props,\n        raw: item,\n      }\n    }))\n\n    provideDefaults({\n      VStepperVerticalItem: {\n        color,\n        eager,\n        editable,\n        hideActions,\n        static: true,\n      },\n      VStepperVerticalActions: {\n        color,\n        nextText,\n        prevText,\n      },\n    })\n\n    useRender(() => {\n      const expansionPanelProps = VExpansionPanels.filterProps(props)\n\n      return (\n        <VExpansionPanels\n          { ...expansionPanelProps }\n          v-model={ model.value }\n          ref={ vExpansionPanelsRef }\n          class={[\n            'v-stepper',\n            {\n              'v-stepper--alt-labels': props.altLabels,\n              'v-stepper--flat': props.flat,\n              'v-stepper--non-linear': props.nonLinear,\n              'v-stepper--mobile': props.mobile,\n            },\n            props.class,\n          ]}\n          style={ props.style }\n        >\n          {{\n            ...slots,\n            default: ({ prev, next }) => {\n              return (\n                <>\n                  { items.value.map(({ raw, ...item }) => (\n                    <VStepperVerticalItem { ...item.props }>\n                      {{\n                        ...slots,\n                        default: slots[`item.${item.value}`],\n                      }}\n                    </VStepperVerticalItem>\n                  ))}\n\n                  { slots.default?.({ prev, next, step: model.value }) }\n                </>\n              )\n            },\n          }}\n        </VExpansionPanels>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VStepperVertical = InstanceType<typeof VStepperVertical>\n","// Styles\nimport './VSwitch.sass'\n\n// Components\nimport { VScaleTransition } from '@/components/transitions'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\nimport { VProgressCircular } from '@/components/VProgressCircular'\nimport { makeVSelectionControlProps, VSelectionControl } from '@/components/VSelectionControl/VSelectionControl'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { useFocus } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { LoaderSlot, useLoader } from '@/composables/loader'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeSizeProps } from '@/composables/size'\n\n// Utilities\nimport { ref, toRef, useId } from 'vue'\nimport { filterInputAttrs, genericComponent, isString, omit, propsFactory, SUPPORTS_MATCH_MEDIA, useRender } from '@/util'\n\n// Types\nimport type { ComputedRef, PropType, Ref } from 'vue'\nimport type { VInputSlots } from '@/components/VInput/VInput'\nimport type { VSelectionControlSlots } from '@/components/VSelectionControl/VSelectionControl'\nimport type { IconValue } from '@/composables/icons'\nimport type { LoaderSlotProps } from '@/composables/loader'\nimport type { GenericProps } from '@/util'\n\nexport type VSwitchSlot = {\n  model: Ref<boolean>\n  isValid: ComputedRef<boolean | null>\n}\n\nexport type VSwitchSlots =\n  & VInputSlots\n  & VSelectionControlSlots\n  & {\n    loader: LoaderSlotProps\n    thumb: { icon: IconValue | undefined } & VSwitchSlot\n    'track-false': VSwitchSlot\n    'track-true': VSwitchSlot\n  }\n\nexport const makeVSwitchProps = propsFactory({\n  inset: {\n    type: [Boolean, String] as PropType<boolean | 'tonal' | 'material' | 'square'>,\n    default: false,\n  },\n  flat: Boolean,\n  thumbColor: String,\n  loading: {\n    type: [Boolean, String],\n    default: false,\n  },\n\n  ...omit(makeVInputProps(), ['glow']),\n  ...makeVSelectionControlProps(),\n  ...makeSizeProps(),\n}, 'VSwitch')\n\nconst predefinedSizes = ['x-small', 'small', 'default', 'large', 'x-large']\nconst iconSizes: Record<string, number> = {\n  'x-small': 11,\n  small: 14,\n  default: 16,\n  large: 18,\n  'x-large': 22,\n}\n\nexport const VSwitch = genericComponent<new <T>(\n  props: {\n    modelValue?: T | null\n    'onUpdate:modelValue'?: (value: T | null) => void\n  },\n  slots: VSwitchSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VSwitch',\n\n  inheritAttrs: false,\n\n  props: makeVSwitchProps(),\n\n  emits: {\n    'update:focused': (focused: boolean) => true,\n    'update:modelValue': (value: any) => true,\n    'update:indeterminate': (value: boolean) => true,\n  },\n\n  setup (props, { attrs, slots }) {\n    const indeterminate = useProxiedModel(props, 'indeterminate')\n    const model = useProxiedModel(props, 'modelValue')\n    const { loaderClasses } = useLoader(props)\n    const { isFocused, focus, blur } = useFocus(props)\n    const {\n      backgroundColorClasses: thumbColorClasses,\n      backgroundColorStyles: thumbColorStyles,\n    } = useBackgroundColor(() => props.thumbColor)\n    const control = ref<VSelectionControl>()\n    const inputRef = ref<VInput>()\n    const isForcedColorsModeActive = SUPPORTS_MATCH_MEDIA && window.matchMedia('(forced-colors: active)').matches\n\n    const loaderColor = toRef(() => {\n      return isString(props.loading) && props.loading !== ''\n        ? props.loading\n        : props.color\n    })\n\n    const uid = useId()\n    const id = toRef(() => props.id || `switch-${uid}`)\n\n    const isPredefinedSize = toRef(() => predefinedSizes.includes(props.size as string))\n    const iconSize = toRef(() => {\n      return isPredefinedSize.value ? iconSizes[props.size as string] : Math.round(16 * Number(props.size) / 32)\n    })\n\n    function onChange () {\n      if (indeterminate.value) {\n        indeterminate.value = false\n      }\n    }\n    function onTrackClick (e: Event) {\n      e.stopPropagation()\n      e.preventDefault()\n      control.value?.input?.click()\n    }\n\n    useRender(() => {\n      const [rootAttrs, controlAttrs] = filterInputAttrs(attrs)\n      const inputProps = VInput.filterProps(props)\n      const controlProps = VSelectionControl.filterProps(props)\n      const isMaterial = ['material', 'square'].includes(String(props.inset))\n      const hasThumbColor = !isForcedColorsModeActive && !!props.thumbColor\n\n      return (\n        <VInput\n          ref={ inputRef }\n          class={[\n            'v-switch',\n            { 'v-switch--flat': props.flat },\n            { 'v-switch--inset': !!props.inset },\n            { 'v-switch--inset-material': isMaterial },\n            { 'v-switch--inset-square': props.inset === 'square' },\n            { 'v-switch--indeterminate': indeterminate.value },\n            isPredefinedSize.value ? `v-switch--size-${props.size}` : undefined,\n            loaderClasses.value,\n            props.class,\n          ]}\n          { ...rootAttrs }\n          { ...inputProps }\n          v-model={ model.value }\n          id={ id.value }\n          focused={ isFocused.value }\n          style={[\n            { '--v-switch-scale': isPredefinedSize.value ? undefined : Number(props.size) / 32 },\n            props.style,\n          ]}\n        >\n          {{\n            ...slots,\n            default: ({\n              id,\n              messagesId,\n              isDisabled,\n              isReadonly,\n              isValid,\n            }) => {\n              const slotProps = {\n                model,\n                isValid,\n              }\n\n              return (\n                <VSelectionControl\n                  ref={ control }\n                  { ...controlProps }\n                  v-model={ model.value }\n                  id={ id.value }\n                  aria-describedby={ messagesId.value }\n                  type=\"checkbox\"\n                  onUpdate:modelValue={ onChange }\n                  aria-checked={ indeterminate.value ? 'mixed' : undefined }\n                  disabled={ isDisabled.value }\n                  readonly={ isReadonly.value }\n                  onFocus={ focus }\n                  onBlur={ blur }\n                  { ...controlAttrs }\n                >\n                  {{\n                    ...slots,\n                    default: ({ backgroundColorClasses, backgroundColorStyles }) => (\n                      <div\n                        class={[\n                          'v-switch__track',\n                          !isForcedColorsModeActive ? backgroundColorClasses.value : undefined,\n                        ]}\n                        style={ backgroundColorStyles.value }\n                        onClick={ onTrackClick }\n                      >\n                        { slots['track-true'] && (\n                          <div key=\"prepend\" class=\"v-switch__track-true\">\n                            { slots['track-true'](slotProps) }\n                          </div>\n                        )}\n\n                        { slots['track-false'] && (\n                          <div key=\"append\" class=\"v-switch__track-false\">\n                            { slots['track-false'](slotProps) }\n                          </div>\n                        )}\n                      </div>\n                    ),\n                    input: ({\n                      inputNode,\n                      icon,\n                      model: isSelected,\n                      backgroundColorClasses,\n                      backgroundColorStyles,\n                      textColorClasses,\n                      textColorStyles,\n                    }) => (\n                      <>\n                        { inputNode }\n                        <div\n                          class={[\n                            'v-switch__thumb',\n                            { 'v-switch__thumb--filled': icon || props.loading },\n                            isForcedColorsModeActive ? undefined\n                            : (hasThumbColor && isSelected.value) ? thumbColorClasses.value\n                            : isMaterial ? backgroundColorClasses.value\n                            : props.inset ? undefined\n                            : backgroundColorClasses.value,\n                          ]}\n                          style={[\n                            (hasThumbColor && isSelected.value) ? thumbColorStyles.value\n                            : isMaterial\n                              ? (backgroundColorClasses.value.length || backgroundColorStyles.value.backgroundColor\n                                ? { backgroundColor: 'currentColor' }\n                                : undefined)\n                              : props.inset ? undefined\n                              : backgroundColorStyles.value,\n                          ]}\n                        >\n                          { slots.thumb ? (\n                            <VDefaultsProvider\n                              defaults={{\n                                VIcon: {\n                                  icon,\n                                  size: isMaterial ? iconSize.value : 'x-small',\n                                },\n                              }}\n                            >\n                              { slots.thumb({ ...slotProps, icon }) }\n                            </VDefaultsProvider>\n                          ) : (\n                            <VScaleTransition>\n                              { !props.loading ? (\n                                (icon && (\n                                  <VIcon\n                                    key={ String(icon) }\n                                    class={ isMaterial ? textColorClasses.value : undefined }\n                                    style={ isMaterial ? textColorStyles.value : undefined }\n                                    icon={ icon }\n                                    size={ isMaterial ? iconSize.value : 'x-small' }\n                                  />\n                                ))) : (\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={ iconSize.value }\n                                          width=\"2\"\n                                        />\n                                      )\n                                  )}\n                                </LoaderSlot>\n                              )}\n                            </VScaleTransition>\n                          )}\n                        </div>\n                      </>\n                    ),\n                  }}\n                </VSelectionControl>\n              )\n            },\n          }}\n        </VInput>\n      )\n    })\n\n    return forwardRefs({}, inputRef)\n  },\n})\n\nexport type VSwitch = InstanceType<typeof VSwitch>\n","// Styles\nimport './VSystemBar.sass'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeLayoutItemProps, useLayoutItem } from '@/composables/layout'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { useSsrBoot } from '@/composables/ssrBoot'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed, shallowRef, toRef } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVSystemBarProps = propsFactory({\n  color: String,\n  height: [Number, String],\n  window: Boolean,\n\n  ...makeComponentProps(),\n  ...makeElevationProps(),\n  ...makeLayoutItemProps(),\n  ...makeRoundedProps(),\n  ...makeTagProps(),\n  ...makeThemeProps(),\n}, 'VSystemBar')\n\nexport const VSystemBar = genericComponent()({\n  name: 'VSystemBar',\n\n  props: makeVSystemBarProps(),\n\n  setup (props, { slots }) {\n    const { themeClasses } = provideTheme(props)\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)\n    const { elevationClasses } = useElevation(props)\n    const { roundedClasses, roundedStyles } = useRounded(props)\n    const { ssrBootStyles } = useSsrBoot()\n    const height = computed(() => props.height ?? (props.window ? 32 : 24))\n    const { layoutItemStyles } = useLayoutItem({\n      id: props.name,\n      order: computed(() => parseInt(props.order, 10)),\n      position: shallowRef('top'),\n      layoutSize: height,\n      elementSize: height,\n      active: computed(() => true),\n      absolute: toRef(() => props.absolute),\n    })\n\n    useRender(() => (\n      <props.tag\n        class={[\n          'v-system-bar',\n          { 'v-system-bar--window': props.window },\n          themeClasses.value,\n          backgroundColorClasses.value,\n          elevationClasses.value,\n          roundedClasses.value,\n          props.class,\n        ]}\n        style={[\n          backgroundColorStyles.value,\n          layoutItemStyles.value,\n          ssrBootStyles.value,\n          roundedStyles.value,\n          props.style,\n        ]}\n        v-slots={ slots }\n      />\n    ))\n\n    return {}\n  },\n})\n\nexport type VSystemBar = InstanceType<typeof VSystemBar>\n","// Types\nimport type { InjectionKey } from 'vue'\nimport type { GroupProvide } from '@/composables/group'\n\nexport const VTabsSymbol: InjectionKey<GroupProvide> = Symbol.for('vuetify:v-tabs')\n","// Styles\nimport './VTab.sass'\n\n// Components\nimport { makeVBtnProps, VBtn } from '@/components/VBtn/VBtn'\n\n// Composables\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { forwardRefs } from '@/composables/forwardRefs'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { VTabsSymbol } from './shared'\nimport { animate, genericComponent, omit, propsFactory, standardEasing, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VBtnSlots } from '@/components/VBtn/VBtn'\n\nexport const makeVTabProps = propsFactory({\n  fixed: Boolean,\n\n  sliderColor: String,\n  sliderTransition: String as PropType<'shift' | 'grow' | 'fade'>,\n  sliderTransitionDuration: [String, Number],\n  hideSlider: Boolean,\n  inset: Boolean,\n\n  direction: {\n    type: String as PropType<'horizontal' | 'vertical'>,\n    default: 'horizontal',\n  },\n\n  ...omit(makeVBtnProps({\n    selectedClass: 'v-tab--selected',\n    variant: 'text' as const,\n  }), [\n    'active',\n    'block',\n    'flat',\n    'location',\n    'position',\n    'symbol',\n  ]),\n}, 'VTab')\n\nexport const VTab = genericComponent<VBtnSlots>()({\n  name: 'VTab',\n\n  props: makeVTabProps(),\n\n  setup (props, { slots, attrs }) {\n    const {\n      textColorClasses: sliderColorClasses,\n      textColorStyles: sliderColorStyles,\n    } = useTextColor(() => props.sliderColor)\n    const {\n      backgroundColorClasses: insetColorClasses,\n      backgroundColorStyles: insetColorStyles,\n    } = useBackgroundColor(() => props.sliderColor)\n\n    const rootEl = ref<VBtn>()\n    const sliderEl = ref<HTMLElement>()\n\n    const isHorizontal = computed(() => props.direction === 'horizontal')\n    const isSelected = computed(() => rootEl.value?.group?.isSelected.value ?? false)\n\n    function fade (nextEl: HTMLElement, prevEl: HTMLElement) {\n      return { opacity: [0, 1] }\n    }\n\n    function grow (nextEl: HTMLElement, prevEl: HTMLElement) {\n      return props.direction === 'vertical'\n        ? { transform: ['scaleY(0)', 'scaleY(1)'] }\n        : { transform: ['scaleX(0)', 'scaleX(1)'] }\n    }\n\n    function shift (nextEl: HTMLElement, prevEl: HTMLElement) {\n      const prevBox = prevEl.getBoundingClientRect()\n      const nextBox = nextEl.getBoundingClientRect()\n\n      const xy = isHorizontal.value ? 'x' : 'y'\n      const XY = isHorizontal.value ? 'X' : 'Y'\n      const rightBottom = isHorizontal.value ? 'right' : 'bottom'\n      const widthHeight = isHorizontal.value ? 'width' : 'height'\n\n      const prevPos = prevBox[xy]\n      const nextPos = nextBox[xy]\n      const delta = prevPos > nextPos\n        ? prevBox[rightBottom] - nextBox[rightBottom]\n        : prevBox[xy] - nextBox[xy]\n      const origin =\n        Math.sign(delta) > 0 ? (isHorizontal.value ? 'right' : 'bottom')\n        : Math.sign(delta) < 0 ? (isHorizontal.value ? 'left' : 'top')\n        : 'center'\n      const size = Math.abs(delta) + (Math.sign(delta) < 0 ? prevBox[widthHeight] : nextBox[widthHeight])\n      const scale = size / Math.max(prevBox[widthHeight], nextBox[widthHeight]) || 0\n      const initialScale = prevBox[widthHeight] / nextBox[widthHeight] || 0\n      const sigma = 1.5\n\n      return {\n        transform: [\n          `translate${XY}(${delta}px) scale${XY}(${initialScale})`,\n          `translate${XY}(${delta / sigma}px) scale${XY}(${(scale - 1) / sigma + 1})`,\n          'none',\n        ],\n        transformOrigin: Array(3).fill(origin),\n      }\n    }\n\n    function updateSlider ({ value }: { value: boolean }) {\n      if (value) {\n        const prevEl: HTMLElement | undefined = rootEl.value?.$el.parentElement?.querySelector('.v-tab--selected .v-tab__slider')\n        const nextEl = sliderEl.value\n\n        if (!prevEl || !nextEl) return\n\n        const color = getComputedStyle(prevEl).backgroundColor\n\n        const keyframes = { fade, grow, shift }[props.sliderTransition ?? 'shift'] ?? shift\n        const duration = Number(props.sliderTransitionDuration) ||\n          ({ fade: 400, grow: 350, shift: 225 }[props.sliderTransition ?? 'shift'] ?? 225)\n\n        animate(nextEl, {\n          backgroundColor: [color, color],\n          ...keyframes(nextEl, prevEl),\n        }, {\n          duration,\n          easing: standardEasing,\n        })\n      }\n    }\n\n    useRender(() => {\n      const btnProps = VBtn.filterProps(props)\n\n      return (\n        <VBtn\n          symbol={ VTabsSymbol }\n          ref={ rootEl }\n          class={[\n            'v-tab',\n            props.class,\n            isSelected.value && props.inset ? insetColorClasses.value : [],\n          ]}\n          style={[\n            props.style,\n            isSelected.value && props.inset ? insetColorStyles.value : [],\n            { backgroundColor: isSelected.value && props.inset ? 'transparent !important' : undefined },\n          ]}\n          tabindex={ isSelected.value ? 0 : -1 }\n          role=\"tab\"\n          aria-selected={ String(isSelected.value) }\n          active={ false }\n          { ...btnProps }\n          { ...attrs }\n          block={ props.fixed }\n          maxWidth={ props.fixed ? 300 : undefined }\n          onGroup:selected={ updateSlider }\n        >\n          {{\n            ...slots,\n            default: () => (\n              <>\n                { slots.default?.() ?? props.text }\n\n                { !props.hideSlider && (\n                  <div\n                    ref={ sliderEl }\n                    class={[\n                      'v-tab__slider',\n                      props.inset ? insetColorClasses.value : sliderColorClasses.value,\n                    ]}\n                    style={[\n                      sliderColorStyles.value,\n                      props.inset ? insetColorStyles.value : sliderColorClasses.value,\n                    ]}\n                  />\n                )}\n              </>\n            ),\n          }}\n        </VBtn>\n      )\n    })\n\n    return forwardRefs({}, rootEl)\n  },\n})\n\nexport type VTab = InstanceType<typeof VTab>\n","// Components\nimport { makeVWindowProps, VWindow } from '@/components/VWindow/VWindow'\n\n// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, inject } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport { VTabsSymbol } from './shared'\nimport type { VWindowSlots } from '@/components/VWindow/VWindow'\nimport type { GenericProps } from '@/util'\n\nexport const makeVTabsWindowProps = propsFactory({\n  ...omit(makeVWindowProps(), ['continuous', 'nextIcon', 'prevIcon', 'showArrows', 'touch', 'mandatory']),\n}, 'VTabsWindow')\n\nexport const VTabsWindow = genericComponent<new <TModel>(\n  props: {\n    modelValue?: TModel\n    'onUpdate:modelValue'?: (value: TModel) => void\n  },\n  slots: VWindowSlots\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VTabsWindow',\n\n  props: makeVTabsWindowProps(),\n\n  emits: {\n    'update:modelValue': (v: any) => true,\n  },\n\n  setup (props, { slots }) {\n    const group = inject(VTabsSymbol, null)\n    const _model = useProxiedModel(props, 'modelValue')\n\n    const model = computed({\n      get () {\n        // Always return modelValue if defined\n        // or if not within a VTabs group\n        if (_model.value != null || !group) return _model.value\n\n        // If inside of a VTabs, find the currently selected\n        // item by id. Item value may be assigned by its index\n        return group.items.value.find(item => group.selected.value.includes(item.id))?.value\n      },\n      set (val) {\n        _model.value = val\n      },\n    })\n\n    useRender(() => {\n      const windowProps = VWindow.filterProps(props)\n\n      return (\n        <VWindow\n          _as=\"VTabsWindow\"\n          { ...windowProps }\n          v-model={ model.value }\n          class={[\n            'v-tabs-window',\n            props.class,\n          ]}\n          style={ props.style }\n          mandatory={ false }\n          touch={ false }\n          v-slots={ slots }\n        />\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VTabsWindow = InstanceType<typeof VTabsWindow>\n","// Components\nimport { makeVWindowItemProps, VWindowItem } from '@/components/VWindow/VWindowItem'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVTabsWindowItemProps = propsFactory({\n  ...makeVWindowItemProps(),\n}, 'VTabsWindowItem')\n\nexport const VTabsWindowItem = genericComponent()({\n  name: 'VTabsWindowItem',\n\n  props: makeVTabsWindowItemProps(),\n\n  setup (props, { slots }) {\n    useRender(() => {\n      const windowItemProps = VWindowItem.filterProps(props)\n\n      return (\n        <VWindowItem\n          _as=\"VTabsWindowItem\"\n          { ...windowItemProps }\n          class={[\n            'v-tabs-window-item',\n            props.class,\n          ]}\n          style={ props.style }\n          v-slots={ slots }\n        />\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VTabsWindowItem = InstanceType<typeof VTabsWindowItem>\n","// Styles\nimport './VTabs.sass'\n\n// Components\nimport { makeVTabProps, VTab } from './VTab'\nimport { VTabsWindow } from './VTabsWindow'\nimport { VTabsWindowItem } from './VTabsWindowItem'\nimport { makeVSlideGroupProps, VSlideGroup } from '@/components/VSlideGroup/VSlideGroup'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useScopeId } from '@/composables/scopeId'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { VTabsSymbol } from './shared'\nimport { convertToUnit, genericComponent, isObject, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { GenericProps } from '@/util'\n\nexport type TabItem = string | number | Record<string, any>\n\nexport type VTabsSlot<T> = {\n  item: T\n}\n\nexport type VTabsSlots<T> = {\n  default: never\n  tab: VTabsSlot<T>\n  item: VTabsSlot<T>\n  window: never\n  prev: never\n  next: never\n} & {\n  [key: `tab.${string}`]: VTabsSlot<T>\n  [key: `item.${string}`]: VTabsSlot<T>\n}\n\nfunction parseItems (items: readonly TabItem[] | undefined) {\n  if (!items) return []\n\n  return items.map(item => {\n    if (!isObject(item)) return { text: item, value: item }\n\n    return item\n  })\n}\n\nexport const makeVTabsProps = propsFactory({\n  alignTabs: {\n    type: String as PropType<'start' | 'title' | 'center' | 'end'>,\n    default: 'start',\n  },\n  color: String,\n  fixedTabs: Boolean,\n  items: {\n    type: Array as PropType<readonly TabItem[]>,\n    default: () => ([]),\n  },\n  stacked: Boolean,\n  bgColor: String,\n  grow: Boolean,\n  height: {\n    type: [Number, String],\n    default: undefined,\n  },\n  hideSlider: Boolean,\n  inset: Boolean,\n  insetPadding: [String, Number],\n  insetRadius: [String, Number],\n  sliderColor: String,\n\n  ...pick(makeVTabProps(), ['spaced', 'sliderTransition', 'sliderTransitionDuration']),\n  ...makeVSlideGroupProps({\n    mandatory: 'force' as const,\n    selectedClass: 'v-tab-item--selected',\n  }),\n  ...makeDensityProps(),\n  ...makeTagProps(),\n}, 'VTabs')\n\nexport const VTabs = genericComponent<new <TModel, T = TabItem>(\n  props: {\n    items?: T[]\n    modelValue?: TModel\n    'onUpdate:modelValue'?: (value: TModel) => void\n  },\n  slots: VTabsSlots<T>\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VTabs',\n\n  props: makeVTabsProps(),\n\n  emits: {\n    'update:modelValue': (v: unknown) => true,\n  },\n\n  setup (props, { attrs, slots }) {\n    const model = useProxiedModel(props, 'modelValue')\n    const items = computed(() => parseItems(props.items))\n    const { densityClasses } = useDensity(props)\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.bgColor)\n    const { scopeId } = useScopeId()\n\n    provideDefaults({\n      VTab: {\n        color: toRef(props, 'color'),\n        direction: toRef(props, 'direction'),\n        stacked: toRef(props, 'stacked'),\n        fixed: toRef(props, 'fixedTabs'),\n        inset: toRef(props, 'inset'),\n        sliderColor: toRef(props, 'sliderColor'),\n        sliderTransition: toRef(props, 'sliderTransition'),\n        sliderTransitionDuration: toRef(props, 'sliderTransitionDuration'),\n        hideSlider: toRef(props, 'hideSlider'),\n      },\n    })\n\n    useRender(() => {\n      const slideGroupProps = VSlideGroup.filterProps(props)\n      const hasWindow = !!(slots.window || props.items.length > 0)\n\n      return (\n        <>\n          <VSlideGroup\n            { ...slideGroupProps }\n            v-model={ model.value }\n            class={[\n              'v-tabs',\n              `v-tabs--${props.direction}`,\n              `v-tabs--align-tabs-${props.alignTabs}`,\n              {\n                'v-tabs--fixed-tabs': props.fixedTabs,\n                'v-tabs--grow': props.grow,\n                'v-tabs--inset': props.inset,\n                'v-tabs--stacked': props.stacked,\n              },\n              densityClasses.value,\n              backgroundColorClasses.value,\n              props.class,\n            ]}\n            style={[\n              {\n                '--v-tabs-height': convertToUnit(props.height),\n                '--v-tabs-inset-padding': props.inset ? convertToUnit(props.insetPadding) : undefined,\n                '--v-tabs-inset-radius': props.inset ? convertToUnit(props.insetRadius) : undefined,\n              },\n              backgroundColorStyles.value,\n              props.style,\n            ]}\n            role=\"tablist\"\n            symbol={ VTabsSymbol }\n            { ...scopeId }\n            { ...attrs }\n          >\n            {{\n              default: slots.default ?? (() => items.value.map(item => (\n                slots.tab?.({ item }) ?? (\n                  <VTab\n                    { ...item }\n                    key={ item.text }\n                    value={ item.value }\n                    spaced={ props.spaced }\n                    v-slots={{\n                      default: slots[`tab.${item.value}`] ? () => slots[`tab.${item.value}`]?.({ item }) : undefined,\n                    }}\n                  />\n                )\n              ))),\n              prev: slots.prev,\n              next: slots.next,\n            }}\n          </VSlideGroup>\n\n          { hasWindow && (\n            <VTabsWindow\n              v-model={ model.value }\n              key=\"tabs-window\"\n              { ...scopeId }\n            >\n              { items.value.map(item => slots.item?.({ item }) ?? (\n                <VTabsWindowItem\n                  value={ item.value }\n                  v-slots={{\n                    default: () => slots[`item.${item.value}`]?.({ item }),\n                  }}\n                />\n              ))}\n\n              { slots.window?.() }\n            </VTabsWindow>\n          )}\n        </>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VTabs = InstanceType<typeof VTabs>\n","// Styles\nimport './VTextarea.sass'\nimport '../VTextField/VTextField.sass'\n\n// Components\nimport { VCounter } from '@/components/VCounter/VCounter'\nimport { VField } from '@/components/VField'\nimport { makeVFieldProps } from '@/components/VField/VField'\nimport { makeVInputProps, VInput } from '@/components/VInput/VInput'\n\n// Composables\nimport { useDisplay } from '@/composables'\nimport { makeAutocompleteProps, useAutocomplete } from '@/composables/autocomplete'\nimport { useAutofocus } from '@/composables/autofocus'\nimport { useFocus } from '@/composables/focus'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport vIntersect from '@/directives/intersect'\n\n// Utilities\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, shallowRef, watch, watchEffect } from 'vue'\nimport {\n  callEvent,\n  clamp,\n  convertToUnit,\n  filterInputAttrs,\n  genericComponent,\n  getActiveElement,\n  isFunction,\n  isNumber,\n  isString,\n  omit,\n  propsFactory,\n  useRender,\n} from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VCounterSlot } from '@/components/VCounter/VCounter'\nimport type { VFieldSlots } from '@/components/VField/VField'\nimport type { VInputSlots } from '@/components/VInput/VInput'\n\nexport const makeVTextareaProps = propsFactory({\n  autoGrow: Boolean,\n  autofocus: Boolean,\n  counter: {\n    type: [Boolean, Number, String] as PropType<boolean | number | string | null>,\n    default: undefined,\n  },\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  maxHeight: {\n    type: [Number, String],\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  modelModifiers: Object as PropType<Record<string, boolean>>,\n\n  ...makeAutocompleteProps(),\n  ...omit(makeVInputProps(), ['direction']),\n  ...makeVFieldProps(),\n}, 'VTextarea')\n\ntype VTextareaSlots = Omit<VInputSlots & VFieldSlots, 'default'> & {\n  counter: VCounterSlot\n}\n\nexport const VTextarea = genericComponent<VTextareaSlots>()({\n  name: 'VTextarea',\n\n  directives: { vIntersect },\n\n  inheritAttrs: false,\n\n  props: makeVTextareaProps(),\n\n  emits: {\n    'click:control': (e: MouseEvent) => true,\n    'mousedown:control': (e: MouseEvent) => true,\n    'update:focused': (focused: boolean) => true,\n    'update:modelValue': (val: string) => true,\n    'update:rows': (rows: number) => true,\n  },\n\n  setup (props, { attrs, emit, slots }) {\n    const model = useProxiedModel(props, 'modelValue')\n    const { isFocused, focus, blur } = useFocus(props)\n    const { onIntersect } = useAutofocus(props)\n    const counterValue = computed(() => {\n      return isFunction(props.counterValue)\n        ? props.counterValue(model.value)\n        : (model.value || '').toString().length\n    })\n    const max = computed(() => {\n      if (attrs.maxlength) return attrs.maxlength as string | number\n\n      if (\n        !props.counter ||\n        (!isNumber(props.counter) && !isString(props.counter))\n      ) return undefined\n\n      return props.counter\n    })\n\n    const vInputRef = ref<VInput>()\n    const vFieldRef = ref<VField>()\n    const controlHeight = shallowRef('')\n    const textareaRef = ref<HTMLTextAreaElement>()\n    const scrollbarWidth = ref(0)\n    const { platform } = useDisplay()\n    const autocomplete = useAutocomplete(props)\n    const isActive = computed(() => (\n      props.persistentPlaceholder ||\n      isFocused.value ||\n      props.active\n    ))\n\n    function onFocus () {\n      if (autocomplete.isSuppressing.value) {\n        autocomplete.update()\n      }\n\n      if (textareaRef.value !== getActiveElement()) {\n        textareaRef.value?.focus()\n      }\n\n      if (!isFocused.value) focus()\n    }\n    function onControlClick (e: MouseEvent) {\n      onFocus()\n\n      emit('click:control', e)\n    }\n    function onControlMousedown (e: MouseEvent) {\n      emit('mousedown:control', e)\n    }\n    function onClear (e: MouseEvent) {\n      e.stopPropagation()\n\n      onFocus()\n\n      nextTick(() => {\n        model.value = ''\n\n        callEvent(props['onClick:clear'], e)\n      })\n    }\n    function onInput (e: Event) {\n      const el = e.target as HTMLTextAreaElement\n      if (!props.modelModifiers?.trim) {\n        model.value = el.value\n        return\n      }\n\n      const value = el.value\n      const start = el.selectionStart\n      const end = el.selectionEnd\n\n      model.value = value\n\n      nextTick(() => {\n        let offset = 0\n        if (value.trimStart().length === el.value.length) {\n          // #22307 - Whitespace has been removed from the\n          // start, offset the caret position to compensate\n          offset = value.length - el.value.length\n        }\n        if (start != null) el.selectionStart = start - offset\n        if (end != null) el.selectionEnd = end - offset\n      })\n    }\n\n    const sizerRef = ref<HTMLTextAreaElement>()\n    const rows = ref(Number(props.rows))\n    const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant))\n    watchEffect(() => {\n      if (!props.autoGrow) rows.value = Number(props.rows)\n    })\n    function calculateInputHeight () {\n      nextTick(() => {\n        if (!textareaRef.value) return\n        if (platform.value.firefox) {\n          scrollbarWidth.value = 12\n          return\n        }\n        const { offsetWidth, clientWidth } = textareaRef.value\n        scrollbarWidth.value = Math.max(0, offsetWidth - clientWidth)\n      })\n\n      if (!props.autoGrow) return\n\n      nextTick(() => {\n        if (!sizerRef.value || !vFieldRef.value) return\n\n        const style = getComputedStyle(sizerRef.value)\n        const fieldStyle = getComputedStyle(vFieldRef.value.$el)\n\n        const padding = parseFloat(style.getPropertyValue('--v-field-padding-top')) +\n          parseFloat(style.getPropertyValue('--v-input-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 = Math.max(\n          parseFloat(props.rows) * lineHeight + padding,\n          parseFloat(fieldStyle.getPropertyValue('--v-input-control-height'))\n        )\n\n        const maxHeight = props.maxHeight\n          ? parseFloat(props.maxHeight!)\n          : parseFloat(props.maxRows!) * lineHeight + padding || Infinity\n\n        const newHeight = clamp(height ?? 0, minHeight, maxHeight)\n        rows.value = Math.floor((newHeight - padding) / lineHeight)\n\n        controlHeight.value = convertToUnit(newHeight)\n      })\n    }\n\n    onMounted(calculateInputHeight)\n    watch(model, calculateInputHeight)\n    watch(() => props.rows, calculateInputHeight)\n    watch(() => props.maxHeight, calculateInputHeight)\n    watch(() => props.maxRows, calculateInputHeight)\n    watch(() => props.density, calculateInputHeight)\n    watch(rows, val => {\n      emit('update:rows', val)\n    })\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 !== undefined || props.counterValue != null)\n      const counterActive = props.counter !== false && props.counter !== null &&\n        (props.persistentCounter || isFocused.value)\n      const hasDetails = props.hideDetails !== true && !!(slots.details || hasCounter)\n      const detailsActive = !!(slots.details || (hasCounter && counterActive))\n      const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n      const { modelValue: _, ...inputProps } = VInput.filterProps(props)\n      const fieldProps = {\n        ...VField.filterProps(props),\n        'onClick:clear': onClear,\n      }\n\n      return (\n        <VInput\n          ref={ vInputRef }\n          v-model={ model.value }\n          class={[\n            'v-textarea v-text-field',\n            {\n              'v-textarea--prefixed': props.prefix,\n              'v-textarea--suffixed': props.suffix,\n              'v-text-field--prefixed': props.prefix,\n              'v-text-field--suffixed': props.suffix,\n              'v-textarea--auto-grow': props.autoGrow,\n              'v-textarea--no-resize': props.noResize || props.autoGrow,\n              'v-input--plain-underlined': isPlainOrUnderlined.value,\n            },\n            props.class,\n          ]}\n          style={[\n            {\n              '--v-textarea-max-height': props.maxHeight ? convertToUnit(props.maxHeight) : undefined,\n              '--v-textarea-scroll-bar-width': convertToUnit(scrollbarWidth.value),\n            },\n            props.style,\n          ]}\n          { ...rootAttrs }\n          { ...inputProps }\n          centerAffix={ rows.value === 1 && !isPlainOrUnderlined.value }\n          focused={ isFocused.value }\n          detailsActive={ detailsActive }\n          indentDetails={ props.indentDetails ?? !isPlainOrUnderlined.value }\n        >\n          {{\n            ...slots,\n            default: ({\n              id,\n              isDisabled,\n              isDirty,\n              isReadonly,\n              isValid,\n              hasDetails,\n            }) => (\n              <VField\n                ref={ vFieldRef }\n                style={{\n                  '--v-textarea-control-height': controlHeight.value,\n                }}\n                onClick={ onControlClick }\n                onMousedown={ onControlMousedown }\n                onClick:prependInner={ props['onClick:prependInner'] }\n                onClick:appendInner={ props['onClick:appendInner'] }\n                { ...fieldProps }\n                id={ id.value }\n                active={ isActive.value || isDirty.value }\n                labelId={ `${id.value}-label` }\n                centerAffix={ rows.value === 1 && !isPlainOrUnderlined.value }\n                dirty={ isDirty.value || props.dirty }\n                disabled={ isDisabled.value }\n                focused={ isFocused.value }\n                details={ hasDetails.value }\n                error={ isValid.value === false }\n              >\n                {{\n                  ...slots,\n                  default: ({\n                    props: { class: fieldClass, ...slotProps },\n                    controlRef,\n                  }) => (\n                    <>\n                      { props.prefix && (\n                        <span class=\"v-text-field__prefix\">\n                          { props.prefix }\n                        </span>\n                      )}\n\n                      <textarea\n                        ref={ val => textareaRef.value = controlRef.value = val as HTMLTextAreaElement }\n                        class={ fieldClass }\n                        value={ model.value }\n                        onInput={ onInput }\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                        name={ autocomplete.fieldName.value }\n                        autocomplete={ autocomplete.fieldAutocomplete.value }\n                        onFocus={ onFocus }\n                        onBlur={ blur }\n                        aria-labelledby={ `${id.value}-label` }\n                        { ...slotProps }\n                        { ...inputAttrs }\n                      />\n\n                      { props.autoGrow && (\n                        <textarea\n                          class={[\n                            fieldClass,\n                            'v-textarea__sizer',\n                          ]}\n                          id={ `${slotProps.id}-sizer` }\n                          v-model={ model.value }\n                          ref={ sizerRef }\n                          readonly\n                          aria-hidden=\"true\"\n                        />\n                      )}\n\n                      { props.suffix && (\n                        <span class=\"v-text-field__suffix\">\n                          { props.suffix }\n                        </span>\n                      )}\n                    </>\n                  ),\n                }}\n              </VField>\n            ),\n            details: hasDetails ? slotProps => (\n              <>\n                { slots.details?.(slotProps) }\n\n                { hasCounter && (\n                  <>\n                    <span />\n\n                    <VCounter\n                      active={ counterActive }\n                      value={ counterValue.value }\n                      max={ max.value }\n                      disabled={ props.disabled }\n                      v-slots:default={ slots.counter }\n                    />\n                  </>\n                )}\n              </>\n            ) : undefined,\n          }}\n        </VInput>\n      )\n    })\n\n    return forwardRefs({}, vInputRef, vFieldRef, textareaRef)\n  },\n})\n\nexport type VTextarea = InstanceType<typeof VTextarea>\n","// Components\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { IconValue } from '@/composables/icons'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeSizeProps, useSize } from '@/composables/size'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVTimelineDividerProps = propsFactory({\n  dotColor: String,\n  fillDot: Boolean,\n  hideDot: Boolean,\n  icon: IconValue,\n  iconColor: String,\n  lineColor: String,\n\n  ...makeComponentProps(),\n  ...makeRoundedProps(),\n  ...makeSizeProps(),\n  ...makeElevationProps(),\n}, 'VTimelineDivider')\n\nexport const VTimelineDivider = genericComponent()({\n  name: 'VTimelineDivider',\n\n  props: makeVTimelineDividerProps(),\n\n  setup (props, { slots }) {\n    const { sizeClasses, sizeStyles } = useSize(props, 'v-timeline-divider__dot')\n    const { backgroundColorStyles, backgroundColorClasses } = useBackgroundColor(() => props.dotColor)\n    const { roundedClasses, roundedStyles } = useRounded(props, 'v-timeline-divider__dot')\n    const { elevationClasses } = useElevation(props)\n    const {\n      backgroundColorClasses: lineColorClasses,\n      backgroundColorStyles: lineColorStyles,\n    } = useBackgroundColor(() => props.lineColor)\n\n    useRender(() => (\n      <div\n        class={[\n          'v-timeline-divider',\n          {\n            'v-timeline-divider--fill-dot': props.fillDot,\n          },\n          props.class,\n        ]}\n        style={ props.style }\n      >\n        <div\n          class={[\n            'v-timeline-divider__before',\n            lineColorClasses.value,\n          ]}\n          style={ lineColorStyles.value }\n        />\n\n        { !props.hideDot && (\n          <div\n            key=\"dot\"\n            class={[\n              'v-timeline-divider__dot',\n              elevationClasses.value,\n              roundedClasses.value,\n              sizeClasses.value,\n            ]}\n            style={[sizeStyles.value, roundedStyles.value]}\n          >\n            <div\n              class={[\n                'v-timeline-divider__inner-dot',\n                backgroundColorClasses.value,\n                roundedClasses.value,\n              ]}\n              style={[backgroundColorStyles.value, roundedStyles.value]}\n            >\n              { !slots.default ? (\n                <VIcon\n                  key=\"icon\"\n                  color={ props.iconColor }\n                  icon={ props.icon }\n                  size={ props.size }\n                />\n              ) : (\n                <VDefaultsProvider\n                  key=\"icon-defaults\"\n                  disabled={ !props.icon }\n                  defaults={{\n                    VIcon: {\n                      color: props.iconColor,\n                      icon: props.icon,\n                      size: props.size,\n                    },\n                  }}\n                  v-slots:default={ slots.default }\n                />\n              )}\n            </div>\n          </div>\n        )}\n\n        <div\n          class={[\n            'v-timeline-divider__after',\n            lineColorClasses.value,\n          ]}\n          style={ lineColorStyles.value }\n        />\n      </div>\n    ))\n\n    return {}\n  },\n})\n\nexport type VTimelineDivider = InstanceType<typeof VTimelineDivider>\n","// Components\nimport { VTimelineDivider } from './VTimelineDivider'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { makeElevationProps } from '@/composables/elevation'\nimport { IconValue } from '@/composables/icons'\nimport { makeRoundedProps } from '@/composables/rounded'\nimport { makeSizeProps } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { ref, shallowRef, watch } from 'vue'\nimport { convertToUnit, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { Prop, PropType } from 'vue'\n\n// Types\nexport type TimelineItemSide = 'start' | 'end' | undefined\nexport type VTimelineItemSlots = {\n  default: never\n  icon: never\n  opposite: never\n}\n\nexport const makeVTimelineItemProps = propsFactory({\n  density: String as PropType<'default' | 'compact'>,\n  dotColor: String,\n  fillDot: Boolean,\n  hideDot: Boolean,\n  hideOpposite: {\n    type: Boolean,\n    default: undefined,\n  },\n  icon: IconValue,\n  iconColor: String,\n  lineInset: [Number, String],\n  side: {\n    type: String,\n    validator: (v: any) => v == null || ['start', 'end'].includes(v),\n  } as Prop<TimelineItemSide>,\n\n  ...makeComponentProps(),\n  ...makeDimensionProps(),\n  ...makeElevationProps(),\n  ...makeRoundedProps(),\n  ...makeSizeProps(),\n  ...makeTagProps(),\n}, 'VTimelineItem')\n\nexport const VTimelineItem = genericComponent<VTimelineItemSlots>()({\n  name: 'VTimelineItem',\n\n  props: makeVTimelineItemProps(),\n\n  setup (props, { slots }) {\n    const { dimensionStyles } = useDimension(props)\n\n    const dotSize = shallowRef(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    useRender(() => (\n      <div\n        class={[\n          'v-timeline-item',\n          {\n            'v-timeline-item--fill-dot': props.fillDot,\n            'v-timeline-item--side-start': props.side === 'start',\n            'v-timeline-item--side-end': props.side === 'end',\n          },\n          props.class,\n        ]}\n        style={[\n          {\n            '--v-timeline-dot-size': convertToUnit(dotSize.value),\n            '--v-timeline-line-inset': props.lineInset ? `calc(var(--v-timeline-dot-size) / 2 + ${convertToUnit(props.lineInset)})` : convertToUnit(0),\n          },\n          props.style,\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        { props.density !== 'compact' && (\n          <div class=\"v-timeline-item__opposite\">\n            { !props.hideOpposite && slots.opposite?.() }\n          </div>\n        )}\n      </div>\n    ))\n\n    return {}\n  },\n})\n\nexport type VTimelineItem = InstanceType<typeof VTimelineItem>\n","// Styles\nimport './VTimeline.sass'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { useRtl } from '@/composables/locale'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed, toRef } from 'vue'\nimport { convertToUnit, genericComponent, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { Prop } from 'vue'\nimport { makeVTimelineItemProps } from './VTimelineItem'\n\nexport type TimelineDirection = 'vertical' | 'horizontal'\nexport type TimelineSide = 'start' | 'end' | undefined\nexport type TimelineAlign = 'center' | 'start'\nexport type TimelineJustify = 'auto' | 'center'\nexport type TimelineTruncateLine = 'start' | 'end' | 'both' | undefined\n\nexport const makeVTimelineProps = propsFactory({\n  align: {\n    type: String,\n    default: 'center',\n    validator: (v: any) => ['center', 'start'].includes(v),\n  } as Prop<TimelineAlign>,\n  direction: {\n    type: String,\n    default: 'vertical',\n    validator: (v: any) => ['vertical', 'horizontal'].includes(v),\n  } as Prop<TimelineDirection>,\n  justify: {\n    type: String,\n    default: 'auto',\n    validator: (v: any) => ['auto', 'center'].includes(v),\n  } as Prop<TimelineJustify>,\n  side: {\n    type: String,\n    validator: (v: any) => v == null || ['start', 'end'].includes(v),\n  } as Prop<TimelineSide>,\n  lineThickness: {\n    type: [String, Number],\n    default: 2,\n  },\n  lineColor: String,\n  truncateLine: {\n    type: String,\n    validator: (v: any) => ['start', 'end', 'both'].includes(v),\n  } as Prop<TimelineTruncateLine>,\n\n  ...pick(makeVTimelineItemProps({\n    lineInset: 0,\n  }), ['dotColor', 'fillDot', 'hideOpposite', 'iconColor', 'lineInset', 'size']),\n  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...makeTagProps(),\n  ...makeThemeProps(),\n}, 'VTimeline')\n\nexport const VTimeline = genericComponent()({\n  name: 'VTimeline',\n\n  props: makeVTimelineProps(),\n\n  setup (props, { slots }) {\n    const { themeClasses } = provideTheme(props)\n    const { densityClasses } = useDensity(props)\n    const { rtlClasses } = useRtl()\n\n    provideDefaults({\n      VTimelineDivider: {\n        lineColor: toRef(() => props.lineColor),\n      },\n      VTimelineItem: {\n        density: toRef(() => props.density),\n        dotColor: toRef(() => props.dotColor),\n        fillDot: toRef(() => props.fillDot),\n        hideOpposite: toRef(() => props.hideOpposite),\n        iconColor: toRef(() => props.iconColor),\n        lineColor: toRef(() => props.lineColor),\n        lineInset: toRef(() => props.lineInset),\n        size: toRef(() => props.size),\n      },\n    })\n\n    const sideClasses = computed(() => {\n      const side = props.side ? props.side : props.density !== 'default' ? 'end' : null\n\n      return side && `v-timeline--side-${side}`\n    })\n\n    const truncateClasses = computed(() => {\n      const classes = [\n        'v-timeline--truncate-line-start',\n        'v-timeline--truncate-line-end',\n      ]\n\n      switch (props.truncateLine) {\n        case 'both': return classes\n        case 'start': return classes[0]\n        case 'end': return classes[1]\n        default: return null\n      }\n    })\n\n    useRender(() => (\n      <props.tag\n        class={[\n          'v-timeline',\n          `v-timeline--${props.direction}`,\n          `v-timeline--align-${props.align}`,\n          `v-timeline--justify-${props.justify}`,\n          truncateClasses.value,\n          {\n            'v-timeline--inset-line': !!props.lineInset,\n          },\n          themeClasses.value,\n          densityClasses.value,\n          sideClasses.value,\n          rtlClasses.value,\n          props.class,\n        ]}\n        style={[\n          {\n            '--v-timeline-line-thickness': convertToUnit(props.lineThickness),\n          },\n          props.style,\n        ]}\n        v-slots={ slots }\n      />\n    ))\n\n    return {}\n  },\n})\n\nexport type VTimeline = InstanceType<typeof VTimeline>\n","// Styles\nimport './VTimePickerClock.sass'\n\n// Composables\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\n\n// Utilities\nimport { computed, onScopeDispose, ref, watch } from 'vue'\nimport { debounce, genericComponent, IN_BROWSER, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\ninterface Point {\n  x: number\n  y: number\n}\n\nexport const makeVTimePickerClockProps = propsFactory({\n  allowedValues: Function as PropType<(value: number) => boolean>,\n  ampm: Boolean,\n  color: String,\n  disabled: Boolean,\n  displayedValue: null,\n  double: Boolean,\n  format: {\n    type: Function,\n    default: (val: string | number) => val,\n  },\n  max: {\n    type: Number,\n    required: true,\n  },\n  min: {\n    type: Number,\n    required: true,\n  },\n  scrollable: Boolean,\n  readonly: Boolean,\n  rotate: {\n    type: Number,\n    default: 0,\n  },\n  step: {\n    type: Number,\n    default: 1,\n  },\n  modelValue: {\n    type: Number,\n  },\n}, 'VTimePickerClock')\n\nexport const VTimePickerClock = genericComponent()({\n  name: 'VTimePickerClock',\n\n  props: makeVTimePickerClockProps(),\n\n  emits: {\n    change: (val: number) => true,\n    input: (val: number) => true,\n  },\n\n  setup (props, { emit }) {\n    const clockRef = ref<HTMLElement | null>(null)\n    const innerClockRef = ref<HTMLElement | null>(null)\n    const inputValue = ref<number | undefined>(undefined)\n    const isDragging = ref(false)\n    const valueOnMouseDown = ref(null as number | null)\n    const valueOnMouseUp = ref(null as number | null)\n    const emitChangeDebounced = debounce((value: number) => emit('change', value), 750)\n\n    const { textColorClasses, textColorStyles } = useTextColor(() => props.color)\n    const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)\n\n    const count = computed(() => props.max - props.min + 1)\n    const roundCount = computed(() => props.double ? (count.value / 2) : count.value)\n    const degreesPerUnit = computed(() => 360 / roundCount.value)\n    const degrees = computed(() => degreesPerUnit.value * Math.PI / 180)\n    const displayedValue = computed(() => props.modelValue == null ? props.min : props.modelValue)\n    const innerRadiusScale = computed(() => 0.62)\n\n    const genChildren = computed(() => {\n      const children = []\n      for (let value = props.min; value <= props.max; value = value + props.step) {\n        children.push(value)\n      }\n      return children\n    })\n\n    watch(() => props.modelValue, val => {\n      inputValue.value = val\n    })\n\n    function update (value: number) {\n      if (inputValue.value !== value) {\n        inputValue.value = value\n      }\n      emit('input', value)\n    }\n\n    function isAllowed (value: number) {\n      return !props.allowedValues || props.allowedValues(value)\n    }\n\n    function wheel (e: WheelEvent) {\n      if (!props.scrollable || props.disabled) return\n\n      e.preventDefault()\n\n      const delta = Math.sign(-e.deltaY || 1)\n      let value = displayedValue.value\n      do {\n        value = value + delta\n        value = (value - props.min + count.value) % count.value + props.min\n      } while (!isAllowed(value) && value !== displayedValue.value)\n\n      if (value !== props.displayedValue) {\n        update(value)\n      }\n\n      emitChangeDebounced(value)\n    }\n\n    function isInner (value: number) {\n      return props.double && (value - props.min >= roundCount.value)\n    }\n\n    function handScale (value: number) {\n      return isInner(value) ? innerRadiusScale.value : 1\n    }\n\n    function getPosition (value: number) {\n      const rotateRadians = props.rotate * Math.PI / 180\n      return {\n        x: Math.sin((value - props.min) * degrees.value + rotateRadians) * handScale(value),\n        y: -Math.cos((value - props.min) * degrees.value + rotateRadians) * handScale(value),\n      }\n    }\n\n    function angleToValue (angle: number, insideClick: boolean): number {\n      const value = (\n        Math.round(angle / degreesPerUnit.value) +\n        (insideClick ? roundCount.value : 0)\n      ) % count.value + props.min\n\n      // Necessary to fix edge case when selecting left part of the value(s) at 12 o'clock\n      if (angle < (360 - degreesPerUnit.value / 2)) return value\n\n      return insideClick ? props.max - roundCount.value + 1 : props.min\n    }\n\n    function getTransform (i: number) {\n      const { x, y } = getPosition(i)\n      return {\n        left: `${Math.round(50 + x * 50)}%`,\n        top: `${Math.round(50 + y * 50)}%`,\n      }\n    }\n\n    function euclidean (p0: Point, p1: Point) {\n      const dx = p1.x - p0.x\n      const dy = p1.y - p0.y\n\n      return Math.sqrt(dx * dx + dy * dy)\n    }\n\n    function angle (center: Point, p1: Point) {\n      const value = 2 * Math.atan2(p1.y - center.y - euclidean(center, p1), p1.x - center.x)\n      return Math.abs(value * 180 / Math.PI)\n    }\n\n    function setMouseDownValue (value: number) {\n      if (valueOnMouseDown.value === null) {\n        valueOnMouseDown.value = value\n      }\n\n      valueOnMouseUp.value = value\n      update(value)\n    }\n\n    function onDragMove (e: MouseEvent | TouchEvent) {\n      e.preventDefault()\n      if ((!isDragging.value && e.type !== 'click') || !clockRef.value) return\n      const { width, top, left } = clockRef.value?.getBoundingClientRect()\n      const { width: innerWidth }: DOMRect = innerClockRef.value?.getBoundingClientRect() ?? { width: 0 } as DOMRect\n      const { clientX, clientY } = 'touches' in e ? e.touches[0] : e\n      const center = { x: width / 2, y: -width / 2 }\n      const coords = { x: clientX - left, y: top - clientY }\n      const handAngle = Math.round(angle(center, coords) - props.rotate + 360) % 360\n      const insideClick = props.double && euclidean(center, coords) < (innerWidth as number + innerWidth * innerRadiusScale.value) / 4\n      const checksCount = Math.ceil(15 / degreesPerUnit.value)\n      let value\n\n      for (let i = 0; i < checksCount; i++) {\n        value = angleToValue(handAngle + i * degreesPerUnit.value, insideClick)\n        if (isAllowed(value)) return setMouseDownValue(value)\n\n        value = angleToValue(handAngle - i * degreesPerUnit.value, insideClick)\n        if (isAllowed(value)) return setMouseDownValue(value)\n      }\n    }\n\n    function onMouseDown (e: MouseEvent | TouchEvent) {\n      if (props.disabled) return\n\n      e.preventDefault()\n\n      window.addEventListener('mousemove', onDragMove)\n      window.addEventListener('touchmove', onDragMove)\n      window.addEventListener('mouseup', onMouseUp)\n      window.addEventListener('touchend', onMouseUp)\n      valueOnMouseDown.value = null\n      valueOnMouseUp.value = null\n      isDragging.value = true\n      onDragMove(e)\n    }\n\n    function onMouseUp (e: MouseEvent | TouchEvent) {\n      e.stopPropagation()\n      removeListeners()\n\n      isDragging.value = false\n      if (valueOnMouseUp.value !== null && isAllowed(valueOnMouseUp.value)) {\n        emit('change', valueOnMouseUp.value)\n      }\n    }\n\n    function removeListeners () {\n      if (!IN_BROWSER) return\n      window.removeEventListener('mousemove', onDragMove)\n      window.removeEventListener('touchmove', onDragMove)\n      window.removeEventListener('mouseup', onMouseUp)\n      window.removeEventListener('touchend', onMouseUp)\n    }\n\n    onScopeDispose(removeListeners)\n\n    useRender(() => {\n      return (\n        <div\n          class={[\n            {\n              'v-time-picker-clock': true,\n              'v-time-picker-clock--indeterminate': props.modelValue == null,\n              'v-time-picker-clock--readonly': props.readonly,\n            },\n          ]}\n          onMousedown={ onMouseDown }\n          onTouchstart={ onMouseDown }\n          onWheel={ wheel }\n          ref={ clockRef }\n        >\n          <div class=\"v-time-picker-clock__inner\" ref={ innerClockRef }>\n            <div\n              class={[\n                {\n                  'v-time-picker-clock__hand': true,\n                  'v-time-picker-clock__hand--inner': isInner(props.modelValue as number),\n                },\n                textColorClasses.value,\n              ]}\n              style={[\n                {\n                  transform: `rotate(${props.rotate + degreesPerUnit.value * (displayedValue.value - props.min)}deg) scaleY(${handScale(displayedValue.value)})`,\n                },\n                textColorStyles.value,\n              ]}\n            />\n\n            {\n              genChildren.value.map(value => {\n                const isActive = value === displayedValue.value\n\n                return (\n                  <div\n                    class={[\n                      {\n                        'v-time-picker-clock__item': true,\n                        'v-time-picker-clock__item--active': isActive,\n                        'v-time-picker-clock__item--disabled': props.disabled || !isAllowed(value),\n                      },\n                      isActive && backgroundColorClasses.value,\n                    ]}\n                    style={[\n                      getTransform(value),\n                      isActive && backgroundColorStyles.value,\n                    ]}\n                  >\n                    <span>{ props.format(value) }</span>\n                  </div>\n                )\n              })\n            }\n          </div>\n        </div>\n      )\n    })\n  },\n})\n\nexport type VTimePickerClock = InstanceType<typeof VTimePickerClock>\n","// Components\nimport { VTextField } from '@/components/VTextField'\n\n// Composables\nimport { useTextColor } from '@/composables/color'\nimport { forwardRefs } from '@/composables/forwardRefs'\n\n// Utilities\nimport { ref, shallowRef } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport const makeVTimePickerFieldProps = propsFactory({\n  active: Boolean,\n  color: String,\n  disabled: Boolean,\n  label: String,\n  modelValue: String as PropType<string | number | null>,\n  error: String,\n  showHint: Boolean,\n  readonly: Boolean,\n}, 'VTimePickerField')\n\nexport const VTimePickerField = genericComponent()({\n  name: 'VTimePickerField',\n\n  props: makeVTimePickerFieldProps(),\n\n  emits: {\n    'update:modelValue': (v: string | null) => true,\n  },\n\n  setup (props, { emit }) {\n    const { textColorClasses, textColorStyles } = useTextColor(() => props.color)\n\n    const vTextInputRef = ref<VTextField>()\n    const isFocused = shallowRef(false)\n\n    function onKeydown (e: KeyboardEvent) {\n      if (['Backspace', 'Delete'].includes(e.key)) {\n        e.preventDefault()\n\n        const target = e.target as HTMLInputElement\n        target.value = ''\n        emit('update:modelValue', null)\n      }\n    }\n\n    useRender(() => {\n      return (\n        <VTextField\n          ref={ vTextInputRef }\n          _as=\"VTimePickerField\"\n          autocomplete=\"off\"\n          class={[\n            'v-time-picker-controls__time__field',\n            { 'v-time-picker-controls__time__field--active': props.active },\n            props.active ? textColorClasses.value : [],\n          ]}\n          style={ props.active ? textColorStyles.value : [] }\n          disabled={ props.disabled }\n          variant=\"solo-filled\"\n          inputmode=\"numeric\"\n          hideDetails=\"auto\"\n          aria-label={ props.label }\n          aria-invalid={ !!props.error }\n          aria-errormessage={ props.error }\n          error={ !!props.error }\n          hint={ props.showHint ? props.label : undefined }\n          persistentHint\n          flat\n          modelValue={ props.modelValue ?? (isFocused.value ? '' : '--') }\n          onUpdate:modelValue={ v => emit('update:modelValue', v) }\n          onKeydown={ onKeydown }\n          onFocus={ () => isFocused.value = true }\n          onBlur={ () => isFocused.value = false }\n        />\n      )\n    })\n\n    return forwardRefs({}, vTextInputRef)\n  },\n})\n\nexport type VTimePickerField = InstanceType<typeof VTimePickerField>\n","// Types\nimport type { Period } from './shared'\n\nexport function pad (n: string | number, length = 2) {\n  return String(n).padStart(length, '0')\n}\n\nexport function convert24to12 (hour: number) {\n  return hour ? ((hour - 1) % 12 + 1) : 12\n}\n\nexport function convert12to24 (hour: number, period: Period) {\n  return hour % 12 + (period === 'pm' ? 12 : 0)\n}\n\nexport function extractInteger (v: string): number | null {\n  const digits = v.replaceAll(/\\D/g, '')\n  return digits.length > 0\n    ? Number(digits)\n    : null\n}\n\nexport function incrementHour (hour: number, increment: boolean, period: Period | null) {\n  if (period) {\n    if (hour === 12 && increment) { return { value: 1 } }\n    if (hour === 11 && increment) { return { value: 12, togglePeriod: true } }\n    if (hour === 12 && !increment) { return { value: 11, togglePeriod: true } }\n    if (hour === 1 && !increment) { return { value: 12 } }\n  } else {\n    if (hour === 23 && increment) { return { value: 0 } }\n    if (hour === 0 && !increment) { return { value: 23 } }\n  }\n  return { value: hour + (increment ? 1 : -1) }\n}\n\nexport function incrementMinuteOrSecond (val: number, increment: boolean) {\n  if (val === 59 && increment) return 0\n  if (val === 0 && !increment) return 59\n  return val + (increment ? 1 : -1)\n}\n","// Utilities\nimport { computed } from 'vue'\nimport { incrementHour, incrementMinuteOrSecond } from './util'\nimport { isFunction, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VTimePickerViewMode } from './shared'\n\nexport type AllowFunction = (val: number) => boolean\n\nexport const makeTimeValidationProps = propsFactory({\n  allowedHours: [Function, Array] as PropType<AllowFunction | number[]>,\n  allowedMinutes: [Function, Array] as PropType<AllowFunction | number[]>,\n  allowedSeconds: [Function, Array] as PropType<AllowFunction | number[]>,\n  max: String,\n  min: String,\n}, 'time-validation')\n\nexport interface TimeValidationProps {\n  allowedHours?: AllowFunction | number[]\n  allowedMinutes?: AllowFunction | number[]\n  allowedSeconds?: AllowFunction | number[]\n  min?: string\n  max?: string\n}\n\nexport function useTimeValidation (props: TimeValidationProps) {\n  const isAllowedHour = computed(() => {\n    const minHour = props.min ? Number(props.min.split(':')[0]) : 0\n    const maxHour = props.max ? Number(props.max.split(':')[0]) : 23\n\n    return (val: number) => {\n      if (val < minHour) return false\n      if (val > maxHour) return false\n      if (Array.isArray(props.allowedHours)) return props.allowedHours.includes(val)\n      if (isFunction(props.allowedHours)) return props.allowedHours(val)\n      return true\n    }\n  })\n\n  const isAllowedMinute = computed(() => {\n    const [minHour, minMinute] = props.min ? props.min.split(':').map(Number) : [0, 0]\n    const [maxHour, maxMinute] = props.max ? props.max.split(':').map(Number) : [23, 59]\n    const minTime = minHour * 60 + minMinute\n    const maxTime = maxHour * 60 + maxMinute\n\n    return (hour24hr: number | null, val: number) => {\n      if (hour24hr !== null) {\n        const time = 60 * hour24hr + val\n        if (time < minTime) return false\n        if (time > maxTime) return false\n      }\n      if (Array.isArray(props.allowedMinutes)) return props.allowedMinutes.includes(val)\n      if (isFunction(props.allowedMinutes)) return props.allowedMinutes(val)\n      return true\n    }\n  })\n\n  const isAllowedSecond = computed(() => {\n    const [minHour, minMinute, minSecond] = props.min ? props.min.split(':').map(Number) : [0, 0, 0]\n    const [maxHour, maxMinute, maxSecond] = props.max ? props.max.split(':').map(Number) : [23, 59, 59]\n    const minTime = minHour * 3600 + minMinute * 60 + (minSecond || 0)\n    const maxTime = maxHour * 3600 + maxMinute * 60 + (maxSecond || 0)\n\n    return (hour24hr: number | null, minute: number | null, val: number) => {\n      if (hour24hr !== null && minute !== null) {\n        const time = 3600 * hour24hr + 60 * minute + val\n        if (time < minTime) return false\n        if (time > maxTime) return false\n      }\n      if (Array.isArray(props.allowedSeconds)) return props.allowedSeconds.includes(val)\n      if (isFunction(props.allowedSeconds)) return props.allowedSeconds(val)\n      return true\n    }\n  })\n\n  function findNextAllowed (\n    type: VTimePickerViewMode,\n    value: number,\n    increment: boolean,\n    currentHour: number | null = null,\n    currentMinute: number | null = null\n  ): number {\n    const isAllowed = type === 'hour'\n      ? isAllowedHour.value\n      : type === 'minute'\n        ? (v: number) => isAllowedMinute.value(currentHour, v)\n        : (v: number) => isAllowedSecond.value(currentHour, currentMinute, v)\n\n    const nextValue = type === 'hour'\n      ? (v: number) => incrementHour(v, increment, null).value\n      : (v: number) => incrementMinuteOrSecond(v, increment)\n\n    const limit = type === 'hour' ? 24 : 60\n    for (let i = 1; i <= limit; i++) {\n      value = nextValue(value)\n      if (isAllowed(value)) break\n    }\n    return value\n  }\n\n  return {\n    isAllowedHour,\n    isAllowedMinute,\n    isAllowedSecond,\n    findNextAllowed,\n  }\n}\n","// Styles\nimport './VTimePickerControls.sass'\n\n// Components\nimport { VTimePickerField } from './VTimePickerField'\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, nextTick, ref, watch } from 'vue'\nimport { makeTimeValidationProps, useTimeValidation } from './useTimeValidation'\nimport { convert12to24, convert24to12, extractInteger, pad } from './util'\nimport { clamp, genericComponent, isString, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\nimport type { Period, VTimePickerViewMode } from './shared'\n\nexport const makeVTimePickerControlsProps = propsFactory({\n  ampm: Boolean,\n  color: String,\n  disabled: Boolean,\n  inputHints: Boolean,\n  hour: [Number, String] as PropType<number | string | null>,\n  minute: [Number, String] as PropType<number | string | null>,\n  second: [Number, String] as PropType<number | string | null>,\n  period: String as PropType<Period>,\n  readonly: Boolean,\n  useSeconds: Boolean,\n  value: Number,\n  viewMode: String as PropType<VTimePickerViewMode>,\n  ...makeTimeValidationProps(),\n}, 'VTimePickerControls')\n\nexport const VTimePickerControls = genericComponent()({\n  name: 'VTimePickerControls',\n\n  props: makeVTimePickerControlsProps(),\n\n  emits: {\n    'update:period': (data: Period) => true,\n    'update:viewMode': (data: VTimePickerViewMode) => true,\n    'update:hour': (v: number) => true,\n    'update:minute': (v: number) => true,\n    'update:second': (v: number) => true,\n  },\n\n  setup (props, { emit }) {\n    const { t } = useLocale()\n\n    const {\n      isAllowedHour,\n      isAllowedMinute,\n      isAllowedSecond,\n      findNextAllowed,\n    } = useTimeValidation(props)\n\n    const currentHour = computed(() =>\n      props.hour !== null\n        ? props.ampm\n          ? convert12to24(Number(props.hour), props.period ?? 'am')\n          : Number(props.hour)\n        : null\n    )\n    const currentMinute = computed(() => props.minute !== null ? Number(props.minute) : null)\n\n    const isHourValid = computed(() => {\n      if (props.hour === null) return true\n      return isAllowedHour.value?.(Number(currentHour.value)) ?? true\n    })\n    const isMinuteValid = computed(() => {\n      if (props.minute === null) return true\n      return isAllowedMinute.value?.(currentHour.value, Number(props.minute)) ?? true\n    })\n    const isSecondValid = computed(() => {\n      if (props.second === null) return true\n      return isAllowedSecond.value?.(currentHour.value, currentMinute.value, Number(props.second)) ?? true\n    })\n\n    const transformHours = {\n      in: (v?: number | string | null) => {\n        if (v == null || isNaN(Number(v))) return null\n        const val = Number(v)\n        return props.ampm\n          ? pad(convert24to12(val))\n          : pad(val)\n      },\n      out: (v: number | string | null) => {\n        if (isNaN(Number(v)) || v == null || v === '') return null\n        const val = isString(v) ? extractInteger(v) : Number(v)\n        if (val === null) return null\n        return props.ampm\n          ? convert12to24(val, props.period ?? 'am')\n          : clamp(val, 0, 23)\n      },\n    }\n\n    const hour: Ref<string | number | null> = useProxiedModel(props, 'hour', undefined, transformHours.in, transformHours.out)\n\n    const transformMinutesOrSeconds = {\n      in: (v?: number | string | null) => v != null && !isNaN(Number(v)) ? pad(`${v}`) : null,\n      out: (v: number | string | null) => {\n        if (isNaN(Number(v)) || v == null || v === '') return null\n        const val = isString(v) ? extractInteger(v) : Number(v)\n        return val !== null\n          ? clamp(val, 0, 59)\n          : null\n      },\n    }\n\n    const minute: Ref<string | number | null> = useProxiedModel(\n      props,\n      'minute',\n      undefined,\n      transformMinutesOrSeconds.in,\n      transformMinutesOrSeconds.out,\n    )\n\n    const second: Ref<string | number | null> = useProxiedModel(\n      props,\n      'second',\n      undefined,\n      transformMinutesOrSeconds.in,\n      transformMinutesOrSeconds.out,\n    )\n\n    function onHourFieldKeydown (e: KeyboardEvent) {\n      if (!['ArrowUp', 'ArrowDown'].includes(e.key)) return\n      e.preventDefault()\n      e.stopPropagation()\n\n      const isAm = props.period === 'am'\n      const current = props.ampm\n        ? convert12to24(Number(hour.value ?? 0), isAm ? 'am' : 'pm')\n        : Number(hour.value ?? 0)\n\n      const next = findNextAllowed('hour', current, e.key === 'ArrowUp')\n      const togglePeriod = (isAm && next >= 12) || (!isAm && next < 12)\n\n      if (props.ampm && togglePeriod) {\n        emit('update:period', props.period === 'am' ? 'pm' : 'am')\n        nextTick(() => hour.value = pad(next))\n      } else {\n        hour.value = pad(next)\n      }\n    }\n\n    function onMinuteFieldKeydown (e: KeyboardEvent) {\n      if (!['ArrowUp', 'ArrowDown'].includes(e.key)) return\n      e.preventDefault()\n      e.stopPropagation()\n\n      const current = Number(minute.value ?? 0)\n      const next = findNextAllowed('minute', current, e.key === 'ArrowUp', currentHour.value)\n      minute.value = pad(next)\n    }\n\n    function onSecondFieldKeydown (e: KeyboardEvent) {\n      if (!['ArrowUp', 'ArrowDown'].includes(e.key)) return\n      e.preventDefault()\n      e.stopPropagation()\n\n      const current = Number(second.value ?? 0)\n      const next = findNextAllowed('second', current, e.key === 'ArrowUp', currentHour.value, currentMinute.value)\n      second.value = pad(next)\n    }\n\n    function createInputInterceptor (\n      valueTransformOut: (v: string) => number | null,\n      compare: (v: number | null) => boolean,\n      apply: (v: string) => void,\n    ) {\n      return (e: InputEvent) => {\n        if (!e.data) return\n        const inputElement = e.target as HTMLInputElement\n        const { value: existingTxt, selectionStart, selectionEnd } = inputElement ?? {}\n\n        if (extractInteger(e.data) === null) {\n          e.preventDefault()\n          return\n        }\n\n        const potentialNewInputVal =\n          existingTxt\n            ? existingTxt.slice(0, selectionStart as number | undefined) + e.data + existingTxt.slice(selectionEnd as number | undefined)\n            : e.data\n\n        if (potentialNewInputVal.length > 2) {\n          if (selectionStart === selectionEnd && selectionEnd === 0 && e.data.trim().startsWith('0')) {\n            e.preventDefault()\n            inputElement!.value = potentialNewInputVal.trim().substring(0, 2)\n            apply(inputElement!.value)\n            if (e.data.trim().length === 1) {\n              inputElement!.setSelectionRange(1, 1)\n            }\n            return\n          }\n          if (selectionStart === selectionEnd && selectionEnd === 1 && existingTxt.startsWith('0')) {\n            e.preventDefault()\n            inputElement!.value = potentialNewInputVal.trim().substring(0, 2)\n            apply(inputElement!.value)\n            return\n          }\n\n          const maxValue = props.viewMode === 'hour' ? (props.ampm ? 12 : 23) : 59\n          const value = extractInteger(potentialNewInputVal)!\n          if (value > maxValue) {\n            e.preventDefault()\n            inputElement!.value = pad(String(extractInteger(e.data)).substring(0, 2))\n            apply(inputElement!.value)\n            return\n          }\n        }\n\n        const potentialNewNumber = valueTransformOut(potentialNewInputVal)\n        if (compare(potentialNewNumber)) {\n          // ignore input when results in the same number\n          // prevents typing more digits\n          e.preventDefault()\n        }\n      }\n    }\n\n    function setPeriod (val: Period) {\n      emit('update:period', val)\n    }\n\n    const hourInputRef = ref<VTimePickerField>()\n    const minuteInputRef = ref<VTimePickerField>()\n    const secondInputRef = ref<VTimePickerField>()\n\n    watch(() => props.viewMode, (_, old) => {\n      switch (old) {\n        case 'hour': hourInputRef.value!.blur(); break\n        case 'minute': minuteInputRef.value!.blur(); break\n        case 'second': secondInputRef.value!.blur(); break\n      }\n    })\n\n    const hourInputFilter = createInputInterceptor(\n      transformHours.out,\n      (v: number | null) => transformHours.in(v) === hour.value,\n      (v: string) => hour.value = v,\n    )\n\n    const minuteInputFilter = createInputInterceptor(\n      transformMinutesOrSeconds.out,\n      (v: number | null) => transformMinutesOrSeconds.in(v) === minute.value,\n      (v: string) => minute.value = v,\n    )\n\n    const secondInputFilter = createInputInterceptor(\n      transformMinutesOrSeconds.out,\n      (v: number | null) => transformMinutesOrSeconds.in(v) === second.value,\n      (v: string) => second.value = v,\n    )\n\n    useRender(() => {\n      return (\n        <div class=\"v-time-picker-controls\">\n          <div\n            class={{\n              'v-time-picker-controls__time': true,\n              'v-time-picker-controls__time--with-ampm': props.ampm,\n              'v-time-picker-controls__time--with-seconds': props.useSeconds,\n            }}\n          >\n            <VTimePickerField\n              ref={ hourInputRef }\n              active={ props.viewMode === 'hour' }\n              color={ props.color }\n              disabled={ props.disabled }\n              label={ t('$vuetify.timePicker.hour') }\n              showHint={ props.inputHints }\n              error={ isHourValid.value ? undefined : t('$vuetify.timePicker.notAllowed') }\n              modelValue={ hour.value }\n              onUpdate:modelValue={ v => hour.value = v }\n              onKeydown={ onHourFieldKeydown }\n              onBeforeinput={ hourInputFilter }\n              onFocus={ () => emit('update:viewMode', 'hour') }\n            />\n\n            <span class=\"v-time-picker-controls__time__separator\">:</span>\n\n            <VTimePickerField\n              ref={ minuteInputRef }\n              active={ props.viewMode === 'minute' }\n              color={ props.color }\n              disabled={ props.disabled }\n              label={ t('$vuetify.timePicker.minute') }\n              showHint={ props.inputHints }\n              error={ isMinuteValid.value ? undefined : t('$vuetify.timePicker.notAllowed') }\n              modelValue={ minute.value }\n              onUpdate:modelValue={ v => minute.value = v }\n              onKeydown={ onMinuteFieldKeydown }\n              onBeforeinput={ minuteInputFilter }\n              onFocus={ () => emit('update:viewMode', 'minute') }\n            />\n\n            { props.useSeconds && (\n              <span key=\"secondsDivider\" class=\"v-time-picker-controls__time__separator\">:</span>\n            )}\n\n            { props.useSeconds && (\n              <>\n                <VTimePickerField\n                  key=\"secondsVal\"\n                  ref={ secondInputRef }\n                  active={ props.viewMode === 'second' }\n                  color={ props.color }\n                  disabled={ props.disabled }\n                  label={ t('$vuetify.timePicker.second') }\n                  showHint={ props.inputHints }\n                  error={ isSecondValid.value ? undefined : t('$vuetify.timePicker.notAllowed') }\n                  modelValue={ second.value }\n                  onUpdate:modelValue={ v => second.value = v }\n                  onKeydown={ onSecondFieldKeydown }\n                  onBeforeinput={ secondInputFilter }\n                  onFocus={ () => emit('update:viewMode', 'second') }\n                />\n              </>\n            )}\n\n            { props.ampm && (\n              <div class=\"v-time-picker-controls__ampm\">\n                <VBtn\n                  active={ props.period === 'am' }\n                  color={ props.period === 'am' ? props.color : undefined }\n                  class={{\n                    'v-time-picker-controls__ampm__am': true,\n                    'v-time-picker-controls__ampm__btn': true,\n                    'v-time-picker-controls__ampm__btn__active': props.period === 'am',\n                  }}\n                  disabled={ props.disabled }\n                  text={ t('$vuetify.timePicker.am') }\n                  variant={ props.disabled && props.period === 'am' ? 'elevated' : 'tonal' }\n                  onClick={ () => props.period !== 'am' ? setPeriod('am') : null }\n                />\n\n                <VBtn\n                  active={ props.period === 'pm' }\n                  color={ props.period === 'pm' ? props.color : undefined }\n                  class={{\n                    'v-time-picker-controls__ampm__pm': true,\n                    'v-time-picker-controls__ampm__btn': true,\n                    'v-time-picker-controls__ampm__btn__active': props.period === 'pm',\n                  }}\n                  disabled={ props.disabled }\n                  text={ t('$vuetify.timePicker.pm') }\n                  variant={ props.disabled && props.period === 'pm' ? 'elevated' : 'tonal' }\n                  onClick={ () => props.period !== 'pm' ? setPeriod('pm') : null }\n                />\n              </div>\n            )}\n          </div>\n        </div>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VTimePickerControls = InstanceType<typeof VTimePickerControls>\n","// Styles\nimport './VTimePicker.sass'\n\n// Components\nimport { VTimePickerClock } from './VTimePickerClock'\nimport { VTimePickerControls } from './VTimePickerControls'\nimport { makeVPickerProps, VPicker } from '@/components/VPicker/VPicker'\n\n// Composables\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, onMounted, ref, toRef, watch } from 'vue'\nimport { makeTimeValidationProps, useTimeValidation } from './useTimeValidation'\nimport { convert12to24, convert24to12, pad } from './util'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { Period, VTimePickerViewMode } from './shared'\nimport type { VPickerSlots } from '@/components/VPicker/VPicker'\n\nexport type VTimePickerSlots = Omit<VPickerSlots, 'header'>\n\ntype Variant = 'dial' | 'input'\n\nexport const makeVTimePickerProps = propsFactory({\n  disabled: Boolean,\n  format: {\n    type: String as PropType<'ampm' | '24hr'>,\n    default: 'ampm',\n  },\n  viewMode: {\n    type: String as PropType<VTimePickerViewMode>,\n    default: 'hour',\n  },\n  period: {\n    type: String as PropType<Period>,\n    default: 'am',\n    validator: (v: any) => ['am', 'pm'].includes(v),\n  },\n  modelValue: null as any as PropType<any>,\n  readonly: Boolean,\n  scrollable: Boolean,\n  useSeconds: Boolean,\n  variant: {\n    type: String as PropType<Variant>,\n    default: 'dial',\n  },\n  ...makeTimeValidationProps(),\n  ...omit(makeVPickerProps({ title: '$vuetify.timePicker.title' }), ['landscape']),\n  ...makeDensityProps(),\n}, 'VTimePicker')\n\nexport const VTimePicker = genericComponent<VTimePickerSlots>()({\n  name: 'VTimePicker',\n\n  props: makeVTimePickerProps(),\n\n  emits: {\n    'update:hour': (val: number) => true,\n    'update:minute': (val: number) => true,\n    'update:period': (val: Period) => true,\n    'update:second': (val: number) => true,\n    'update:modelValue': (val: string | null) => true,\n    'update:viewMode': (val: VTimePickerViewMode) => true,\n  },\n\n  setup (props, { emit, slots }) {\n    const { t } = useLocale()\n    const { densityClasses } = useDensity(props)\n    const inputHour = ref(null as number | null)\n    const inputMinute = ref(null as number | null)\n    const inputSecond = ref(null as number | null)\n    const lazyInputHour = ref(null as number | null)\n    const lazyInputMinute = ref(null as number | null)\n    const lazyInputSecond = ref(null as number | null)\n    const period = useProxiedModel(props, 'period', 'am')\n    const viewMode = useProxiedModel(props, 'viewMode', 'hour')\n    const controlsRef = ref<VTimePickerControls | null>(null)\n    const clockRef = ref<VTimePickerClock | null>(null)\n\n    const isAmPm = computed((): boolean => {\n      return props.format === 'ampm'\n    })\n\n    const {\n      isAllowedHour,\n      isAllowedMinute,\n      isAllowedSecond,\n    } = useTimeValidation(props)\n\n    const shouldClear = toRef(() => {\n      return props.modelValue !== null &&\n        inputHour.value === null &&\n        inputMinute.value === null &&\n        (!props.useSeconds || inputSecond.value === null)\n    })\n\n    function emitValue () {\n      const value = genValue()\n\n      if (value !== null && value !== props.modelValue) {\n        emit('update:modelValue', value)\n      }\n      if (shouldClear.value) {\n        emit('update:modelValue', null)\n      }\n    }\n\n    watch(inputHour, emitValue)\n    watch(inputMinute, emitValue)\n    watch(inputSecond, emitValue)\n\n    watch(period, (newPeriod, oldPeriod) => {\n      if (inputHour.value == null || newPeriod === oldPeriod) return\n      if (newPeriod === 'pm' && inputHour.value < 12) {\n        inputHour.value = inputHour.value + 12\n      } else if (newPeriod === 'am' && inputHour.value >= 12) {\n        inputHour.value = inputHour.value - 12\n      }\n    })\n\n    watch(() => props.modelValue, val => setInputData(val))\n\n    watch(() => props.useSeconds, (val, old) => {\n      if (old && !val && viewMode.value === 'second') {\n        viewMode.value = 'minute'\n      }\n      if (!val && inputSecond.value !== null) {\n        inputSecond.value = null\n      }\n    })\n\n    onMounted(() => {\n      setInputData(props.modelValue)\n    })\n\n    function genValue () {\n      if (inputHour.value != null && inputMinute.value != null && (!props.useSeconds || inputSecond.value != null)) {\n        return `${pad(inputHour.value)}:${pad(inputMinute.value)}` + (props.useSeconds ? `:${pad(inputSecond.value!)}` : '')\n      }\n\n      return null\n    }\n\n    function setInputData (value: string | null | Date) {\n      if (value == null || value === '') {\n        inputHour.value = null\n        inputMinute.value = null\n        inputSecond.value = null\n      } else if (value instanceof Date) {\n        inputHour.value = value.getHours()\n        inputMinute.value = value.getMinutes()\n        inputSecond.value = value.getSeconds()\n      } else {\n        const [hour, , minute, , second, period] = value.trim().toLowerCase().match(/^(\\d+):(\\d+)(:(\\d+))?([ap]m)?$/) || new Array(6)\n\n        inputHour.value = period ? convert12to24(parseInt(hour, 10), period as Period) : parseInt(hour, 10)\n        inputMinute.value = parseInt(minute, 10)\n        inputSecond.value = parseInt(second || 0, 10)\n      }\n\n      period.value = (inputHour.value == null || inputHour.value < 12) ? 'am' : 'pm'\n    }\n\n    function onInput (value: number) {\n      if (viewMode.value === 'hour') {\n        inputHour.value = isAmPm.value ? convert12to24(value, period.value) : value\n      } else if (viewMode.value === 'minute') {\n        inputMinute.value = value\n      } else {\n        inputSecond.value = value\n      }\n    }\n\n    function onChange (value: number) {\n      switch (viewMode.value || 'hour') {\n        case 'hour':\n          emit('update:hour', value)\n          break\n        case 'minute':\n          emit('update:minute', value)\n          break\n        case 'second':\n          emit('update:second', value)\n          break\n        default:\n          break\n      }\n\n      const emitChange = inputHour.value !== null && inputMinute.value !== null && (props.useSeconds ? inputSecond.value !== null : true)\n      if (viewMode.value === 'hour') {\n        viewMode.value = 'minute'\n      } else if (props.useSeconds && viewMode.value === 'minute') {\n        viewMode.value = 'second'\n      }\n\n      if (inputHour.value === lazyInputHour.value &&\n        inputMinute.value === lazyInputMinute.value &&\n        (!props.useSeconds || inputSecond.value === lazyInputSecond.value)\n      ) return\n\n      const time = genValue()\n      if (time === null) return\n\n      lazyInputHour.value = inputHour.value\n      lazyInputMinute.value = inputMinute.value\n      props.useSeconds && (lazyInputSecond.value = inputSecond.value)\n\n      emitChange && emitValue()\n    }\n\n    useRender(() => {\n      const pickerProps = omit(VPicker.filterProps(props), ['hideHeader'])\n      const timePickerControlsProps = VTimePickerControls.filterProps(props)\n      const timePickerClockProps = VTimePickerClock.filterProps(omit(props, ['format', 'modelValue', 'min', 'max']))\n\n      const clockValidation = viewMode.value === 'hour'\n        ? isAllowedHour.value\n        : viewMode.value === 'minute'\n          ? (v: number) => isAllowedMinute.value(inputHour.value, v)\n          : (v: number) => isAllowedSecond.value(inputHour.value, inputMinute.value, v)\n\n      return (\n        <VPicker\n          { ...pickerProps }\n          color={ undefined }\n          class={[\n            'v-time-picker',\n            `v-time-picker--variant-${props.variant}`,\n            props.class,\n            densityClasses.value,\n          ]}\n          hideHeader={ props.hideHeader && props.variant !== 'input' }\n          style={ props.style }\n          v-slots={{\n            title: () => slots.title?.() ?? (\n              <div class=\"v-time-picker__title\">\n                { t(props.title) }\n              </div>\n            ),\n            header: () => (\n              <VTimePickerControls\n                { ...timePickerControlsProps }\n                ampm={ isAmPm.value }\n                hour={ inputHour.value as number }\n                minute={ inputMinute.value as number }\n                period={ period.value }\n                second={ inputSecond.value as number }\n                viewMode={ viewMode.value }\n                inputHints={ props.variant === 'input' }\n                onUpdate:hour={ (val: number) => inputHour.value = val }\n                onUpdate:minute={ (val: number) => inputMinute.value = val }\n                onUpdate:second={ (val: number) => inputSecond.value = val }\n                onUpdate:period={ (val: Period) => period.value = val }\n                onUpdate:viewMode={ (value: VTimePickerViewMode) => (viewMode.value = value) }\n                ref={ controlsRef }\n              />\n            ),\n            default: () => (\n              <VTimePickerClock\n                { ...timePickerClockProps }\n                allowedValues={ clockValidation }\n                double={ viewMode.value === 'hour' && !isAmPm.value }\n                format={ viewMode.value === 'hour'\n                  ? (isAmPm.value ? convert24to12 : (val: number) => val)\n                  : (val: number) => pad(val, 2)\n                }\n                max={ viewMode.value === 'hour' ? (isAmPm.value && period.value === 'am' ? 11 : 23) : 59 }\n                min={ viewMode.value === 'hour' && isAmPm.value && period.value === 'pm' ? 12 : 0 }\n                size={ 20 }\n                step={ viewMode.value === 'hour' ? 1 : 5 }\n                modelValue={ viewMode.value === 'hour'\n                  ? inputHour.value as number\n                  : (viewMode.value === 'minute'\n                    ? inputMinute.value as number\n                    : inputSecond.value as number)\n                }\n                onChange={ onChange }\n                onInput={ onInput }\n                ref={ clockRef }\n              />\n            ),\n            actions: slots.actions,\n          }}\n        />\n      )\n    })\n  },\n})\n\nexport type VTimePicker = InstanceType<typeof VTimePicker>\n","// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeVariantProps } from '@/composables/variant'\n\n// Utilities\nimport { toRef } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVToolbarItemsProps = propsFactory({\n  ...makeComponentProps(),\n  ...makeVariantProps({ variant: 'text' } as const),\n}, 'VToolbarItems')\n\nexport const VToolbarItems = genericComponent()({\n  name: 'VToolbarItems',\n\n  props: makeVToolbarItemsProps(),\n\n  setup (props, { slots }) {\n    provideDefaults({\n      VBtn: {\n        color: toRef(() => props.color),\n        height: 'inherit',\n        variant: toRef(() => props.variant),\n      },\n    })\n\n    useRender(() => (\n      <div\n        class={[\n          'v-toolbar-items',\n          props.class,\n        ]}\n        style={ props.style }\n      >\n        { slots.default?.() }\n      </div>\n    ))\n\n    return {}\n  },\n})\n\nexport type VToolbarItems = InstanceType<typeof VToolbarItems>\n","// Components\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { makeVListGroupProps, VListGroup } from '@/components/VList/VListGroup'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { VListGroupSlots } from '@/components/VList/VListGroup'\n\nexport const makeVTreeviewGroupProps = propsFactory({\n  ...omit(makeVListGroupProps({\n    collapseIcon: '$treeviewCollapse',\n    expandIcon: '$treeviewExpand',\n  }), ['subgroup']),\n}, 'VTreeviewGroup')\n\nexport const VTreeviewGroup = genericComponent<VListGroupSlots>()({\n  name: 'VTreeviewGroup',\n\n  props: makeVTreeviewGroupProps(),\n\n  setup (props, { slots }) {\n    const vListGroupRef = ref<VListGroup>()\n    const toggleIcon = computed(() => vListGroupRef.value?.isOpen ? props.collapseIcon : props.expandIcon)\n\n    const activatorDefaults = computed(() => ({\n      VTreeviewItem: {\n        prependIcon: undefined,\n        appendIcon: undefined,\n        toggleIcon: toggleIcon.value,\n      },\n    }))\n\n    useRender(() => {\n      const listGroupProps = VListGroup.filterProps(props)\n\n      return (\n        <VListGroup\n          { ...listGroupProps }\n          ref={ vListGroupRef }\n          class={[\n            'v-treeview-group',\n            props.class,\n          ]}\n          subgroup\n        >\n          {{\n            ...slots,\n            activator: slots.activator ? slotProps => (\n              <>\n                <VDefaultsProvider defaults={ activatorDefaults.value }>\n                  { slots.activator?.(slotProps) }\n                </VDefaultsProvider>\n              </>\n            ) : undefined,\n          }}\n        </VListGroup>\n      )\n    })\n\n    return {}\n  },\n})\n\nexport type VTreeviewGroup = InstanceType<typeof VTreeviewGroup>\n","// Types\nimport type { ComputedRef, InjectionKey } from 'vue'\nimport type { ListItemSlot } from '@/components/VList/VListItem'\n\nexport interface TreeViewProvide {\n  visibleIds: ComputedRef<Set<unknown> | null>\n}\n\nexport type ToggleListItemSlot = ListItemSlot & {\n  props: { onClick: (e: PointerEvent) => void }\n}\n\nexport const VTreeviewSymbol: InjectionKey<TreeViewProvide> = Symbol.for('vuetify:v-treeview')\n","// Styles\nimport './VTreeviewItem.sass'\n\n// Components\nimport { VAvatar } from '@/components/VAvatar'\nimport { VBtn } from '@/components/VBtn'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider'\nimport { VIcon } from '@/components/VIcon'\nimport { VListItemAction } from '@/components/VList'\nimport { makeVListItemProps, VListItem } from '@/components/VList/VListItem'\nimport { VProgressCircular } from '@/components/VProgressCircular'\n\n// Composables\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { IconValue } from '@/composables/icons'\n\n// Utilities\nimport { computed, inject, ref, toRaw } from 'vue'\nimport { VTreeviewSymbol } from './shared'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { ToggleListItemSlot } from './shared'\nimport type { VListItemSlots } from '@/components/VList/VListItem'\nimport type { IndentLineType } from '@/util'\n\nexport const makeVTreeviewItemProps = propsFactory({\n  loading: Boolean,\n  hideActions: Boolean,\n  hasCustomPrepend: Boolean,\n  indentLines: Array as PropType<IndentLineType[]>,\n  toggleIcon: IconValue,\n\n  ...makeVListItemProps({ slim: true }),\n}, 'VTreeviewItem')\n\nexport type VTreeviewItemSlots = VListItemSlots & {\n  toggle: ToggleListItemSlot & { loading: boolean }\n}\n\nexport const VTreeviewItem = genericComponent<VTreeviewItemSlots>()({\n  name: 'VTreeviewItem',\n\n  props: makeVTreeviewItemProps(),\n\n  emits: {\n    toggleExpand: (value: PointerEvent) => true,\n  },\n\n  setup (props, { slots, emit }) {\n    const visibleIds = inject(VTreeviewSymbol, { visibleIds: ref() }).visibleIds\n\n    const vListItemRef = ref<VListItem>()\n\n    const isActivatableGroupActivator = computed(() =>\n      (vListItemRef.value?.root.activatable.value) &&\n      vListItemRef.value?.isGroupActivator\n    )\n    const isActivatable = computed(() =>\n      !props.disabled &&\n      props.link !== false &&\n      isActivatableGroupActivator.value\n    )\n    const isFiltered = computed(() => visibleIds.value && !visibleIds.value.has(toRaw(vListItemRef.value?.id)))\n\n    function activateGroupActivator (e: MouseEvent | KeyboardEvent) {\n      vListItemRef.value?.activate(!vListItemRef.value?.isActivated, e)\n    }\n\n    function onClickAction (e: PointerEvent) {\n      e.preventDefault()\n      e.stopPropagation()\n      emit('toggleExpand', e)\n    }\n\n    useRender(() => {\n      const listItemProps = VListItem.filterProps(props)\n      const hasPrepend = slots.prepend ||\n        props.toggleIcon ||\n        props.indentLines ||\n        props.prependIcon ||\n        props.prependAvatar\n\n      return (\n        <VListItem\n          ref={ vListItemRef }\n          { ...listItemProps }\n          active={ vListItemRef.value?.isActivated || undefined }\n          class={[\n            'v-treeview-item',\n            {\n              'v-treeview-item--activatable-group-activator': isActivatableGroupActivator.value,\n              'v-treeview-item--filtered': isFiltered.value,\n            },\n            props.class,\n          ]}\n          role=\"treeitem\"\n          aria-busy={ props.loading || undefined }\n          ripple={ false }\n          onClick={ isActivatable.value ? activateGroupActivator : undefined }\n        >\n          {{\n            ...slots,\n            prepend: hasPrepend ? slotProps => {\n              return (\n                <>\n                  { props.indentLines && props.indentLines.length > 0 ? (\n                    <div\n                      key=\"indent-lines\"\n                      class=\"v-treeview-indent-lines\"\n                      style={{ '--v-indent-parts': props.indentLines.length }}\n                    >\n                      { props.indentLines.map(type => (\n                        <div class={ `v-treeview-indent-line v-treeview-indent-line--${type}` } />\n                      ))}\n                    </div>\n                  ) : '' }\n                  { !props.hideActions && (\n                    <VListItemAction start>\n                      { props.toggleIcon ? (\n                        <>\n                          { !slots.toggle ? (\n                            <VBtn\n                              key=\"prepend-toggle\"\n                              density=\"compact\"\n                              icon={ props.toggleIcon }\n                              loading={ props.loading }\n                              tabindex={ -1 }\n                              variant=\"text\"\n                              aria-hidden=\"true\"\n                              onClick={ onClickAction }\n                            >\n                              {{\n                                loader: () => (\n                                  <VProgressCircular\n                                    indeterminate=\"disable-shrink\"\n                                    size=\"20\"\n                                    width=\"2\"\n                                  />\n                                ),\n                              }}\n                            </VBtn>\n                          ) : (\n                            <VDefaultsProvider\n                              key=\"prepend-defaults\"\n                              defaults={{\n                                VBtn: {\n                                  density: 'compact',\n                                  icon: props.toggleIcon,\n                                  variant: 'text',\n                                  loading: props.loading,\n                                  tabindex: -1,\n                                },\n                                VProgressCircular: {\n                                  indeterminate: 'disable-shrink',\n                                  size: 20,\n                                  width: 2,\n                                },\n                              }}\n                            >\n                              { slots.toggle({\n                                ...slotProps,\n                                loading: props.loading,\n                                props: {\n                                  onClick: onClickAction,\n                                },\n                              })}\n                            </VDefaultsProvider>\n                          )}\n                        </>\n                      ) : (\n                        <div class=\"v-treeview-item__level\" />\n                      )}\n                    </VListItemAction>\n                  )}\n\n                  { !props.hasCustomPrepend ? (\n                    <>\n                      { slots.prepend?.(slotProps) }\n                      { props.prependAvatar && (\n                        <VAvatar\n                          key=\"prepend-avatar\"\n                          density={ props.density }\n                          image={ props.prependAvatar }\n                        />\n                      )}\n\n                      { props.prependIcon && (\n                        <VIcon\n                          key=\"prepend-icon\"\n                          density={ props.density }\n                          icon={ props.prependIcon }\n                        />\n                      )}\n                    </>\n                  ) : (\n                    <VDefaultsProvider\n                      key=\"prepend-defaults\"\n                      defaults={{\n                        VAvatar: {\n                          density: props.density,\n                          image: props.appendAvatar,\n                        },\n                        VIcon: {\n                          density: props.density,\n                          icon: props.appendIcon,\n                        },\n                        VListItemAction: {\n                          start: true,\n                        },\n                      }}\n                    >\n                      { slots.prepend?.(slotProps) }\n                    </VDefaultsProvider>\n                  )}\n                </>\n              )\n            } : undefined,\n          }}\n        </VListItem>\n      )\n    })\n\n    return forwardRefs({}, vListItemRef)\n  },\n})\n\nexport type VTreeviewItem = InstanceType<typeof VTreeviewItem>\n","// Composables\nimport { useRtl } from '@/composables/locale'\nimport { VNestedSymbol } from '@/composables/nested/nested'\n\n// Utilities\nimport { inject, toRaw } from 'vue'\nimport { focusableChildren } from '@/util'\n\n// Types\nimport type { InternalListItem } from '@/components/VList/VList'\nimport type { SelectStrategyProp } from '@/composables/nested/nested'\n\ninterface TreeviewKeyboardProps {\n  returnObject: boolean\n  activatable: boolean\n  selectable: boolean\n  selectStrategy: SelectStrategyProp | undefined\n  items: readonly InternalListItem[] | undefined\n}\n\nfunction focusFirstChild (el: HTMLElement) {\n  el.closest('.v-list-group')\n    ?.querySelector<HTMLElement>(':scope > .v-list-group__items [role=\"treeitem\"]')\n    ?.focus()\n}\n\nfunction focusParent (el: HTMLElement) {\n  const id = el.closest('.v-list-group__items')?.getAttribute('aria-labelledby')\n  if (id) document.getElementById(id)?.focus()\n}\n\nfunction visibleTreeitems (el: HTMLElement) {\n  const tree = el.closest('.v-treeview')\n  return tree\n    ? focusableChildren(tree).filter(x => x.matches('[role=\"treeitem\"]'))\n    : []\n}\n\nfunction siblingTreeitem (el: HTMLElement, offset: 1 | -1) {\n  const items = visibleTreeitems(el)\n  return items[items.indexOf(el) + offset] ?? null\n}\n\nfunction focusSibling (el: HTMLElement, offset: 1 | -1) {\n  siblingTreeitem(el, offset)?.focus()\n}\n\nfunction focusEdge (el: HTMLElement, edge: 'first' | 'last') {\n  const items = visibleTreeitems(el)\n  ;(edge === 'first' ? items[0] : items.at(-1))?.focus()\n}\n\nconst verticalKeys = ['ArrowUp', 'ArrowDown', 'Home', 'End']\n\nexport function useTreeviewKeyboard (\n  props: TreeviewKeyboardProps,\n  checkChildren: (item: InternalListItem) => void,\n) {\n  const { isRtl } = useRtl()\n  const nested = inject(VNestedSymbol, null)\n\n  function idOf (item: InternalListItem) {\n    return props.returnObject ? toRaw(item.raw) : item.value\n  }\n\n  function onKeydown (e: KeyboardEvent, item: InternalListItem) {\n    const root = nested?.root\n    if (!root) return\n\n    const el = e.currentTarget as HTMLElement\n    const onItem = e.target === e.currentTarget\n\n    if (verticalKeys.includes(e.key)) {\n      e.stopPropagation()\n      if (!onItem) return\n      e.preventDefault()\n      if (e.key === 'ArrowDown') focusSibling(el, 1)\n      else if (e.key === 'ArrowUp') focusSibling(el, -1)\n      else if (e.key === 'Home') focusEdge(el, 'first')\n      else if (e.key === 'End') focusEdge(el, 'last')\n      return\n    }\n\n    if (e.key === 'Tab') {\n      const controls = focusableChildren(el)\n      if (controls.length) {\n        if (!e.shiftKey && e.target === controls.at(-1)) {\n          const next = siblingTreeitem(el, 1)\n          if (next) {\n            e.preventDefault()\n            next.focus()\n          }\n        } else if (e.shiftKey && e.target === controls[0]) {\n          e.preventDefault()\n          el.focus()\n        }\n      }\n      return\n    }\n\n    if (onItem) onItemActionKeydown(e, item, el, root)\n  }\n\n  function onItemActionKeydown (e: KeyboardEvent, item: InternalListItem, el: HTMLElement, root: NonNullable<typeof nested>['root']) {\n    const expandKey = isRtl.value ? 'ArrowLeft' : 'ArrowRight'\n    const collapseKey = isRtl.value ? 'ArrowRight' : 'ArrowLeft'\n    const expandable = !!item.children\n    const isExpanded = root.opened.value.has(idOf(item))\n    const selectableNode = props.selectable &&\n      (!item.children || !['leaf', 'single-leaf'].includes(props.selectStrategy as string))\n\n    const toggleExpand = () => {\n      checkChildren(item)\n      root.open(idOf(item), !isExpanded, e)\n    }\n    const toggleSelect = () => root.select(idOf(item), root.selected.value.get(idOf(item)) !== 'on', e)\n\n    if (e.key === 'Enter') {\n      e.preventDefault()\n      if (props.activatable) root.activate(idOf(item), !root.activated.value.has(idOf(item)), e)\n      if (expandable) toggleExpand()\n      else if (selectableNode) toggleSelect()\n    } else if (e.key === ' ') {\n      e.preventDefault()\n      if (selectableNode) toggleSelect()\n      else if (expandable) toggleExpand()\n    } else if (e.key === expandKey) {\n      e.preventDefault()\n      if (expandable && !isExpanded) {\n        checkChildren(item)\n        root.open(idOf(item), true, e)\n      } else if (isExpanded) {\n        focusFirstChild(el)\n      }\n    } else if (e.key === collapseKey) {\n      e.preventDefault()\n      if (expandable && isExpanded) {\n        root.open(idOf(item), false, e)\n      } else {\n        focusParent(el)\n      }\n    } else if (e.key === '*') {\n      e.preventDefault()\n      for (const sibling of props.items ?? []) {\n        if (!sibling.children) continue\n        checkChildren(sibling)\n        root.open(idOf(sibling), true, e)\n      }\n    }\n  }\n\n  return { onKeydown }\n}\n","// Components\nimport { VTreeviewGroup } from './VTreeviewGroup'\nimport { makeVTreeviewItemProps, VTreeviewItem } from './VTreeviewItem'\nimport { VCheckboxBtn } from '@/components/VCheckbox'\nimport { VDivider } from '@/components/VDivider'\nimport { VListItemAction, VListSubheader } from '@/components/VList'\n\n// Composables\nimport { useTreeviewKeyboard } from './useTreeviewKeyboard'\nimport { makeDensityProps } from '@/composables/density'\nimport { IconValue } from '@/composables/icons'\n\n// Utilities\nimport { computed, reactive, ref, toRaw } from 'vue'\nimport { genericComponent, getIndentLines, pick, propsFactory, renderSlot } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { VTreeviewItemSlots } from './VTreeviewItem'\nimport type { InternalListItem } from '@/components/VList/VList'\nimport type { SelectStrategyProp } from '@/composables/nested/nested'\nimport type { GenericProps, IndentLinesVariant, IndentLineType } from '@/util'\n\nexport type VTreeviewChildrenSlots<T> = {\n  [K in keyof Omit<VTreeviewItemSlots, 'default'>]: VTreeviewItemSlots[K] & {\n    item: T\n    internalItem: InternalListItem<T>\n  }\n} & {\n  default: never\n  item: {\n    props: InternalListItem['props'] & { indentLines?: IndentLineType[] }\n    item: T\n    internalItem: InternalListItem<T>\n  }\n  header: {\n    props: InternalListItem['props'] & { indentLines?: IndentLineType[] }\n    item: T\n    internalItem: InternalListItem<T>\n    loading: boolean\n  }\n  footer: {\n    props: { indentLines?: IndentLineType[] }\n    item: T\n    internalItem: InternalListItem<T>\n    loading: boolean\n  }\n  divider: { props: InternalListItem['props'] }\n  subheader: { props: InternalListItem['props'] }\n}\n\nexport const makeVTreeviewChildrenProps = propsFactory({\n  fluid: Boolean,\n  disabled: Boolean,\n  loadChildren: Function as PropType<(item: unknown) => Promise<void>>,\n  loadingIcon: {\n    type: String,\n    default: '$loading',\n  },\n  items: Array as PropType<readonly InternalListItem[]>,\n  openOnClick: {\n    type: Boolean,\n    default: undefined,\n  },\n  indeterminateIcon: {\n    type: IconValue,\n    default: '$checkboxIndeterminate',\n  },\n  falseIcon: IconValue,\n  trueIcon: IconValue,\n  returnObject: Boolean,\n  activatable: Boolean,\n  selectable: Boolean,\n  selectedColor: String,\n  selectStrategy: [String, Function, Object] as PropType<SelectStrategyProp>,\n  index: Number,\n  isLastGroup: Boolean,\n  separateRoots: Boolean,\n  parentIndentLines: Array as PropType<IndentLineType[]>,\n  indentLinesVariant: String as PropType<IndentLinesVariant>,\n  path: {\n    type: Array as PropType<number[]>,\n    default: () => [],\n  },\n  ...pick(makeVTreeviewItemProps(), ['hideActions']),\n  ...makeDensityProps(),\n}, 'VTreeviewChildren')\n\nexport const VTreeviewChildren = genericComponent<new <T extends InternalListItem>(\n  props: {\n    items?: readonly T[]\n  },\n  slots: VTreeviewChildrenSlots<T>\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VTreeviewChildren',\n\n  props: makeVTreeviewChildrenProps(),\n\n  setup (props, { slots }) {\n    const isLoading = reactive(new Set<unknown>())\n    const activatorItems = ref<VTreeviewItem[]>([])\n\n    const isClickOnOpen = computed(() => (\n      !props.disabled && (\n        props.openOnClick != null\n          ? props.openOnClick\n          : props.selectable && !props.activatable\n      )))\n\n    async function checkChildren (item: InternalListItem) {\n      try {\n        if (!props.items?.length || !props.loadChildren) return\n\n        if (item?.children?.length === 0) {\n          isLoading.add(item.value)\n          await props.loadChildren(item.raw)\n        }\n      } finally {\n        isLoading.delete(item.value)\n      }\n    }\n\n    function selectItem (select: (value: boolean) => void, isSelected: boolean) {\n      if (props.selectable) {\n        select(isSelected)\n      }\n    }\n\n    const { onKeydown } = useTreeviewKeyboard(props, checkChildren)\n\n    return () => slots.default?.() ?? props.items?.map((item, index, items) => {\n      const { children, props: itemProps } = item\n      const loading = isLoading.has(item.value)\n      const nextItemHasChildren = !!items.at(index + 1)?.children\n\n      const depth = props.path?.length ?? 0\n      const isLast = items.length - 1 === index\n      const nodePositionProps = {\n        index,\n        depth,\n        isFirst: index === 0,\n        isLast,\n        path: [...props.path, index],\n      }\n\n      const indentLines = getIndentLines({\n        depth,\n        isLast,\n        isLastGroup: props.isLastGroup,\n        leafLinks: !props.hideActions && !props.fluid,\n        separateRoots: props.separateRoots,\n        parentIndentLines: props.parentIndentLines,\n        variant: props.indentLinesVariant,\n      })\n\n      const treeItemProps = {\n        ...itemProps as InternalListItem['props'] & { disabled?: boolean },\n        hideActions: props.hideActions,\n        indentLines: children ? indentLines.node : indentLines.leaf,\n        onKeydown: (e: KeyboardEvent) => onKeydown(e, item),\n      }\n\n      const slotsWithItem = {\n        toggle: slots.toggle\n          ? slotProps => slots.toggle?.({ ...slotProps, ...nodePositionProps, item: item.raw, internalItem: item, loading })\n          : undefined,\n        prepend: slotProps => (\n          <>\n            { props.selectable && (!children || (children && !['leaf', 'single-leaf'].includes(props.selectStrategy as string))) && (\n              <VListItemAction start>\n                <VCheckboxBtn\n                  key={ item.value }\n                  aria-hidden=\"true\"\n                  tabindex={ -1 }\n                  modelValue={ slotProps.isSelected }\n                  disabled={ props.disabled || itemProps.disabled }\n                  loading={ loading }\n                  color={ props.selectedColor }\n                  density={ props.density }\n                  indeterminate={ slotProps.isIndeterminate }\n                  indeterminateIcon={ props.indeterminateIcon }\n                  falseIcon={ props.falseIcon }\n                  trueIcon={ props.trueIcon }\n                  onUpdate:modelValue={ v => selectItem(slotProps.select, v) }\n                  onClick={ (e: PointerEvent) => e.stopPropagation() }\n                />\n              </VListItemAction>\n            )}\n\n            { slots.prepend?.({ ...slotProps, ...nodePositionProps, item: item.raw, internalItem: item }) }\n          </>\n        ),\n        append: slots.append\n          ? slotProps => slots.append?.({ ...slotProps, ...nodePositionProps, item: item.raw, internalItem: item })\n          : undefined,\n        title: slots.title ? slotProps => slots.title?.({ ...slotProps, item: item.raw, internalItem: item }) : undefined,\n        subtitle: slots.subtitle ? slotProps => slots.subtitle?.({ ...slotProps, item: item.raw, internalItem: item }) : undefined,\n      } satisfies VTreeviewItem['$props']['$children']\n\n      const treeviewGroupProps = VTreeviewGroup.filterProps(itemProps)\n      const treeviewChildrenProps = VTreeviewChildren.filterProps({ ...props, ...nodePositionProps })\n\n      const footerProps = {\n        hideActions: props.hideActions,\n        indentLines: indentLines.footer,\n      }\n\n      return children ? (\n        <VTreeviewGroup\n          { ...treeviewGroupProps }\n          value={ props.returnObject ? item.raw : treeviewGroupProps?.value }\n          rawId={ treeviewGroupProps?.value }\n        >\n          {{\n            activator: ({ props: activatorProps, isOpen }) => {\n              const listItemProps = {\n                ...treeItemProps,\n                ...activatorProps,\n                value: treeItemProps?.value,\n                'aria-expanded': isOpen,\n                'aria-level': depth + 1,\n                'aria-posinset': index + 1,\n                'aria-setsize': items.length,\n                onToggleExpand: [() => checkChildren(item), activatorProps.onClick] as any,\n                onClick: props.disabled || treeItemProps.disabled\n                  ? undefined\n                  : isClickOnOpen.value\n                    ? [() => checkChildren(item), activatorProps.onClick] as any\n                    : () => selectItem(activatorItems.value[index]?.select, !activatorItems.value[index]?.isSelected),\n              }\n\n              return renderSlot(\n                slots.header,\n                { props: listItemProps, item: item.raw, internalItem: item, loading },\n                () => (\n                  <VTreeviewItem\n                    ref={ el => activatorItems.value[index] = el as VTreeviewItem }\n                    { ...listItemProps }\n                    hasCustomPrepend={ !!slots.prepend }\n                    value={ props.returnObject ? item.raw : itemProps.value }\n                    loading={ loading }\n                    v-slots={ slotsWithItem }\n                  />\n                )\n              )\n            },\n            default: () => (\n              <>\n                <VTreeviewChildren\n                  { ...treeviewChildrenProps }\n                  items={ children }\n                  indentLinesVariant={ props.indentLinesVariant }\n                  parentIndentLines={ indentLines.children }\n                  isLastGroup={ nextItemHasChildren }\n                  returnObject={ props.returnObject }\n                  v-slots={ slots }\n                />\n                { slots.footer?.({ props: footerProps, item: item.raw, internalItem: item, loading }) }\n              </>\n            ),\n          }}\n        </VTreeviewGroup>\n      ) : renderSlot(\n        slots.item,\n        { props: treeItemProps, item: item.raw, internalItem: item, ...nodePositionProps },\n        () => {\n          if (item.type === 'divider') {\n            return renderSlot(\n              slots.divider,\n              { props: item.raw },\n              () => <VDivider { ...item.props } />,\n            )\n          }\n          if (item.type === 'subheader') {\n            return renderSlot(\n              slots.subheader,\n              { props: item.raw },\n              () => <VListSubheader { ...item.props } />,\n            )\n          }\n          return (\n            <VTreeviewItem\n              { ...treeItemProps }\n              hasCustomPrepend={ !!slots.prepend }\n              aria-level={ depth + 1 }\n              aria-posinset={ index + 1 }\n              aria-setsize={ items.length }\n              value={ props.returnObject ? toRaw(item.raw) : treeItemProps.value }\n              v-slots={ slotsWithItem }\n            />\n          )\n        })\n    })\n  },\n})\n","// Types\nexport type IndentLinesVariant = 'default' | 'simple'\nexport type IndentLineType = 'leaf' | 'last-leaf' | 'line' | 'leaf-link' | 'none'\n\nexport type IndentLinesOptions = {\n  depth: number\n  isLast: boolean\n  isLastGroup: boolean\n  leafLinks: boolean\n  separateRoots: boolean\n  parentIndentLines: IndentLineType[] | undefined\n  variant: IndentLinesVariant | undefined\n}\n\nexport type IndentLines = {\n  leaf: IndentLineType[] | undefined\n  node: IndentLineType[] | undefined\n  children: IndentLineType[] | undefined\n  footer: IndentLineType[] | undefined\n}\n\nexport function getIndentLines ({\n  depth,\n  isLast,\n  isLastGroup,\n  leafLinks,\n  separateRoots,\n  parentIndentLines,\n  variant,\n}: IndentLinesOptions): IndentLines {\n  const isLastLeaf = isLast && (!isLastGroup || separateRoots || depth > 1)\n\n  if (!parentIndentLines || !depth) {\n    return {\n      leaf: undefined,\n      node: undefined,\n      children: parentIndentLines,\n      footer: parentIndentLines && (!isLastLeaf || variant === 'simple')\n        ? [...parentIndentLines, separateRoots ? 'none' : 'line']\n        : ['none'],\n    }\n  }\n\n  if (variant === 'simple') {\n    return {\n      leaf: [...parentIndentLines, 'line'],\n      node: [...parentIndentLines, 'line'],\n      children: [...parentIndentLines, 'line'],\n      footer: [...parentIndentLines, 'line', 'line'],\n    }\n  }\n\n  return {\n    leaf: [\n      ...parentIndentLines,\n      isLastLeaf ? 'last-leaf' : 'leaf',\n      ...leafLinks ? ['leaf-link'] as IndentLineType[] : [],\n    ],\n    node: [\n      ...parentIndentLines,\n      isLastLeaf ? 'last-leaf' : 'leaf',\n    ],\n    children: [\n      ...parentIndentLines,\n      isLastLeaf ? 'none' : 'line',\n    ],\n    footer: [\n      ...parentIndentLines,\n      isLastLeaf ? 'none' : 'line',\n    ],\n  }\n}\n","// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, toRaw, toValue, watch } from 'vue'\n\n// Types\nimport type { MaybeRefOrGetter, Ref } from 'vue'\nimport type { ListItem } from '@/composables/list-items'\nimport type { EventProp } from '@/util'\n\ntype GetPath = (id: unknown) => unknown[]\n\ninterface OpenProps {\n  opened: unknown[]\n  'onUpdate:opened': EventProp | undefined\n  openAll: boolean\n  returnObject: boolean\n  search: string | undefined\n}\n\nexport function useOpened (\n  props: OpenProps,\n  items: Ref<ListItem[]>,\n  filteredItems: Ref<ListItem[]>,\n  getPath: MaybeRefOrGetter<GetPath | undefined>,\n) {\n  const opened = useProxiedModel(\n    props,\n    'opened',\n    props.opened,\n    (v): unknown[] => Array.isArray(v) ? v : [],\n  )\n\n  const revealedBySearch = new Set<unknown>()\n  const collapsedByUser = new Set<unknown>()\n\n  function idOf (item: ListItem) {\n    return props.returnObject ? toRaw(item.raw) : item.props.value\n  }\n\n  function everyGroupId (items: ListItem[]): unknown[] {\n    return items.flatMap(item => item.children\n      ? [idOf(item), ...everyGroupId(item.children)]\n      : []\n    )\n  }\n\n  const allGroupIds = computed(() => {\n    return props.openAll ? everyGroupId(items.value).map(toRaw) : []\n  })\n\n  watch(allGroupIds, (ids, previous = []) => {\n    const open = new Set(opened.value.map(toRaw))\n    const all = new Set(ids)\n\n    const toOpen = ids.filter(id => !previous.includes(id) && !open.has(id))\n    const toClose = previous.filter(id => !all.has(id) && open.has(id))\n\n    if (!toOpen.length && !toClose.length) return\n\n    toOpen.forEach(id => open.add(id))\n    toClose.forEach(id => open.delete(id))\n\n    opened.value = [...open]\n  }, { immediate: true })\n\n  const groupsRevealingMatches = computed<unknown[]>(() => {\n    const getPathTo = toValue(getPath)\n\n    if (!props.search || !getPathTo) return []\n\n    const groups = filteredItems.value\n      .flatMap(item => {\n        const branch = getPathTo(idOf(item))\n        return item.children ? branch : branch.slice(0, -1)\n      })\n\n    return [...new Set(groups.map(toRaw))]\n  })\n\n  watch(opened, val => {\n    const open = new Set(val.map(toRaw))\n    revealedBySearch.forEach(id => open.has(id) || collapsedByUser.add(id))\n  })\n\n  watch(() => props.search, () => collapsedByUser.clear())\n\n  watch(groupsRevealingMatches, groups => {\n    const open = new Set(opened.value.map(toRaw))\n    const toOpen = groups.filter(id => !open.has(id) && !collapsedByUser.has(id))\n\n    if (!toOpen.length) return\n\n    toOpen.forEach(id => revealedBySearch.add(id))\n\n    opened.value = [...opened.value, ...toOpen]\n  })\n\n  watch(() => !props.search, cleared => {\n    if (!cleared || !revealedBySearch.size) return\n\n    const getPathTo = toValue(getPath)\n\n    const stillNeeded = new Set(\n      opened.value\n        .map(toRaw)\n        .filter(id => !revealedBySearch.has(id))\n        .flatMap(id => (getPathTo?.(id) ?? [id]))\n        .map(toRaw)\n    )\n\n    opened.value = opened.value\n      .map(toRaw)\n      .filter(val => !revealedBySearch.has(val) || stillNeeded.has(val))\n\n    revealedBySearch.clear()\n  })\n\n  return opened\n}\n","// Components\nimport { makeVTreeviewChildrenProps, VTreeviewChildren } from './VTreeviewChildren'\nimport { makeVListProps, useListItems, VList } from '@/components/VList/VList'\nimport { VListItem } from '@/components/VList/VListItem'\n\n// Composables\nimport { useOpened } from './open'\nimport { useLocale } from '@/composables'\nimport { provideDefaults } from '@/composables/defaults'\nimport { makeFilterProps, useFilter } from '@/composables/filter'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, provide, ref, toRaw, toRef } from 'vue'\nimport { genericComponent, isBoolean, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport { VTreeviewSymbol } from './shared'\nimport type { VTreeviewChildrenSlots } from './VTreeviewChildren'\nimport type { ListItem } from '@/composables/list-items'\nimport type { GenericProps, IndentLinesVariant } from '@/util'\n\nfunction flatten (items: ListItem[], flat: ListItem[] = []) {\n  for (const item of items) {\n    flat.push(item)\n    if (item.children) flatten(item.children, flat)\n  }\n  return flat\n}\n\nexport const makeVTreeviewProps = propsFactory({\n  openAll: Boolean,\n  indentLines: [Boolean, String] as PropType<boolean | IndentLinesVariant>,\n  indentLinesColor: String,\n  indentLinesOpacity: [String, Number],\n  search: String,\n  hideNoData: Boolean,\n  noDataText: {\n    type: String,\n    default: '$vuetify.noDataText',\n  },\n\n  ...makeFilterProps({ filterKeys: ['title'] }),\n  ...omit(makeVTreeviewChildrenProps(), [\n    'index',\n    'path',\n    'indentLinesVariant',\n    'parentIndentLines',\n    'isLastGroup',\n  ]),\n  ...omit(makeVListProps({\n    collapseIcon: '$treeviewCollapse',\n    expandIcon: '$treeviewExpand',\n    slim: true,\n  }), ['nav', 'openStrategy']),\n\n  modelValue: Array,\n}, 'VTreeview')\n\nexport const VTreeview = genericComponent<new <T, O, A, S, M>(\n  props: {\n    items?: T[]\n    opened?: O\n    activated?: A\n    selected?: S\n    modelValue?: M\n    'onUpdate:opened'?: (value: O) => void\n    'onUpdate:activated'?: (value: A) => void\n    'onUpdate:selected'?: (value: S) => void\n    'onUpdate:modelValue'?: (value: M) => void\n  },\n  slots: VTreeviewChildrenSlots<T> & {\n    'no-data': never\n  }\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VTreeview',\n\n  props: makeVTreeviewProps(),\n\n  emits: {\n    'update:opened': (val: unknown) => true,\n    'update:activated': (val: unknown) => true,\n    'update:selected': (val: unknown) => true,\n    'update:modelValue': (val: unknown) => true,\n    'click:open': (value: { id: unknown, value: boolean, path: unknown[] }) => true,\n    'click:select': (value: { id: unknown, value: boolean, path: unknown[] }) => true,\n  },\n\n  setup (props, { slots, emit }) {\n    const { t } = useLocale()\n    const { items } = useListItems(props)\n    const activeColor = toRef(() => props.activeColor)\n    const baseColor = toRef(() => props.baseColor)\n    const color = toRef(() => props.color)\n    const activated = useProxiedModel(props, 'activated')\n    const _selected = useProxiedModel(props, 'selected')\n\n    const selected = computed({\n      get: () => props.modelValue ?? _selected.value,\n      set (val) {\n        _selected.value = val\n        emit('update:modelValue', val)\n      },\n    })\n\n    const vListRef = ref<VList>()\n\n    const flatItems = computed(() => flatten(items.value))\n    const search = toRef(() => props.search)\n    const { filteredItems } = useFilter(props, flatItems, search)\n    const opened = useOpened(props, items, filteredItems, () => vListRef.value?.getPath)\n\n    const visibleIds = computed(() => {\n      if (!search.value) return null\n      const getPath = vListRef.value?.getPath\n      if (!getPath) return null\n      return new Set(filteredItems.value.flatMap(item => {\n        const itemVal = props.returnObject ? item.raw : item.props.value\n        return [\n          ...getPath(itemVal),\n          ...getChildren(itemVal),\n        ].map(toRaw)\n      }))\n    })\n\n    function getChildren (id: unknown) {\n      const arr: unknown[] = []\n      const queue = ((vListRef.value?.children.get(toRaw(id)) ?? []).slice())\n      while (queue.length) {\n        const child = queue.shift()\n        if (!child) continue\n        arr.push(child)\n        queue.push(...((vListRef.value?.children.get(child) ?? []).slice()))\n      }\n      return arr\n    }\n\n    provide(VTreeviewSymbol, { visibleIds })\n\n    provideDefaults({\n      VTreeviewGroup: {\n        activeColor,\n        baseColor,\n        color,\n        collapseIcon: toRef(() => props.collapseIcon),\n        expandIcon: toRef(() => props.expandIcon),\n      },\n      VTreeviewItem: {\n        activeClass: toRef(() => props.activeClass),\n        activeColor,\n        baseColor,\n        color,\n        density: toRef(() => props.density),\n        disabled: toRef(() => props.disabled),\n        lines: toRef(() => props.lines),\n        variant: toRef(() => props.variant),\n      },\n    })\n\n    useRender(() => {\n      const listProps = VList.filterProps(props)\n      const treeviewChildrenProps = VTreeviewChildren.filterProps(props)\n      const indentLinesVariant = isBoolean(props.indentLines) ? 'default' : props.indentLines\n\n      return (\n        <VList\n          ref={ vListRef }\n          { ...listProps }\n          class={[\n            'v-treeview',\n            {\n              'v-treeview--fluid': props.fluid,\n            },\n            props.class,\n          ]}\n          role=\"tree\"\n          openStrategy=\"multiple\"\n          style={[\n            {\n              '--v-treeview-indent-line-color': props.indentLinesColor,\n              '--v-treeview-indent-line-opacity': props.indentLinesOpacity,\n            },\n            props.style,\n          ]}\n          v-model:opened={ opened.value }\n          v-model:activated={ activated.value }\n          v-model:selected={ selected.value }\n        >\n          { visibleIds.value?.size === 0 && !props.hideNoData && (\n            slots['no-data']?.() ?? (<VListItem key=\"no-data\" title={ t(props.noDataText) } />)\n          )}\n          <VTreeviewChildren\n            { ...treeviewChildrenProps }\n            density={ props.density }\n            returnObject={ props.returnObject }\n            items={ items.value }\n            parentIndentLines={ props.indentLines ? [] : undefined }\n            indentLinesVariant={ indentLinesVariant }\n            v-slots={ slots }\n          ></VTreeviewChildren>\n        </VList>\n      )\n    })\n\n    return { }\n  },\n})\n\nexport type VTreeview = InstanceType<typeof VTreeview>\n","// Composables\nimport { makeValidationProps, useValidation } from '@/composables/validation'\n\n// Utilities\nimport { genericComponent } from '@/util'\n\n// Types\nimport type { GenericProps } from '@/util'\n\nexport type VValidationSlots = {\n  default: ReturnType<typeof useValidation>\n}\n\nexport const VValidation = genericComponent<new <T>(\n  props: {\n    modelValue?: T | null\n    'onUpdate:modelValue'?: (value: T | null) => void\n  },\n  slots: VValidationSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VValidation',\n\n  props: makeValidationProps(),\n\n  emits: {\n    'update:modelValue': (value: any) => true,\n  },\n\n  setup (props, { slots }) {\n    const validation = useValidation(props, 'validation')\n\n    return () => slots.default?.(validation)\n  },\n})\n\nexport type VValidation = InstanceType<typeof VValidation>\n","// Utilities\nimport { isFunction } from '@/util'\n\n// Types\nimport type { DirectiveBinding } 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 = isFunction(value) ? value : value.handler\n  const options = isFunction(value)\n    ? {\n      attributes: modifierKeys?.attr ?? defaultValue,\n      characterData: modifierKeys?.char ?? defaultValue,\n      childList: modifierKeys?.child ?? defaultValue,\n      subtree: modifierKeys?.sub ?? defaultValue,\n    }\n    : value.options\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 = {\n  mounted,\n  unmounted,\n}\n\nexport default Mutate\n","// Utilities\nimport { isFunction, isObject } from '@/util'\n\n// Types\nimport 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 = (isFunction(value) || !isObject(value) ? undefined : value.options) || { passive: true }\n  const handler = isFunction(value) || '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","// Components\nimport { VTooltip } from '@/components/VTooltip'\n\n// Composables\nimport { useDirectiveComponent } from '@/composables/directiveComponent'\n\n// Utilities\nimport { isBoolean, isObject } from '@/util'\n\n// Types\nimport type { DirectiveBinding } from 'vue'\nimport type { Anchor } from '@/util'\n\nexport interface TooltipDirectiveBinding extends Omit<DirectiveBinding<string>, 'arg' | 'value'> {\n  arg?: { [T in Anchor]: T extends `${infer A} ${infer B}` ? `${A}-${B}` : T }[Anchor]\n  value: boolean | string | Record<string, any>\n}\n\nexport const Tooltip = useDirectiveComponent<TooltipDirectiveBinding>(VTooltip, binding => {\n  const disabled = isObject(binding.value)\n    ? !binding.value.text\n    : ['', false, null, undefined].includes(binding.value)\n\n  return {\n    activator: disabled ? null : 'parent',\n    location: binding.arg?.replace('-', ' '),\n    text: isBoolean(binding.value) ? undefined : binding.value,\n  }\n})\n\nexport default Tooltip\n","// Utilities\nimport { h, mergeProps, render, resolveComponent } from 'vue'\nimport { consoleError, isFunction, isObject, isString } from '@/util'\n\n// Types\nimport type {\n  Component,\n  ComponentInternalInstance,\n  ComponentPublicInstance,\n  ConcreteComponent,\n  DirectiveBinding,\n  ObjectDirective,\n  VNode,\n} from 'vue'\nimport type { ComponentInstance } from '@/util'\n\ntype ExcludeProps =\n  | 'v-slots'\n  | `v-slot:${string}`\n  | `on${Uppercase<string>}${string}`\n  | 'key'\n  | 'ref'\n  | 'ref_for'\n  | 'ref_key'\n  | '$children'\n\ndeclare const CustomDirectiveSymbol: unique symbol\ntype DirectiveHook<B extends DirectiveBinding> = (el: any, binding: B, vnode: VNode<any, any>, prevVNode: VNode<any, any>) => void\nexport interface CustomDirective<B extends DirectiveBinding = DirectiveBinding> {\n  created?: DirectiveHook<B>\n  beforeMount?: DirectiveHook<B>\n  mounted?: DirectiveHook<B>\n  beforeUpdate?: DirectiveHook<B>\n  updated?: DirectiveHook<B>\n  beforeUnmount?: DirectiveHook<B>\n  unmounted?: DirectiveHook<B>\n  [CustomDirectiveSymbol]: true\n}\n\nexport function useDirectiveComponent <\n  Binding extends DirectiveBinding,\n> (component: string | Component, props?: (binding: Binding) => Record<string, any>): CustomDirective<Binding>\nexport function useDirectiveComponent <\n  C extends Component,\n  Props = Omit<ComponentInstance<C>['$props'], ExcludeProps>\n> (component: string | C, props?: Record<string, any>): ObjectDirective<any, Props>\nexport function useDirectiveComponent (\n  component: string | Component,\n  props?: Record<string, any> | ((binding: DirectiveBinding) => Record<string, any>)\n): ObjectDirective | CustomDirective {\n  const concreteComponent = (isString(component)\n    ? resolveComponent(component)\n    : component) as ConcreteComponent\n\n  const hook = mountComponent(concreteComponent, props)\n\n  return {\n    mounted: hook,\n    updated: hook,\n    unmounted (el: HTMLElement) {\n      render(null, el)\n    },\n  }\n}\n\nfunction mountComponent (component: ConcreteComponent, props?: Record<string, any> | ((binding: DirectiveBinding) => Record<string, any>)) {\n  return function (el: HTMLElement, binding: DirectiveBinding, vnode: VNode) {\n    const _props = isFunction(props) ? props(binding) : props\n    const text = isObject(binding.value) ? binding.value.text\n      : isString(binding.value) ? binding.value\n      : _props?.text\n    const value = isObject(binding.value) ? binding.value : {}\n\n    // Get the children from the props or directive value, or the element's children\n    const children = () => text ?? el.textContent\n\n    // If vnode.ctx is the same as the instance, then we're bound to a plain element\n    // and need to find the nearest parent component instance to inherit provides from\n    const provides = (vnode.ctx === binding.instance!.$\n      ? findComponentParent(vnode, binding.instance!.$)?.provides\n      : vnode.ctx?.provides) ?? binding.instance!.$.provides\n\n    const node = h(component, mergeProps(_props, value), children)\n    node.appContext = Object.assign(\n      Object.create(null),\n      (binding.instance as ComponentPublicInstance).$.appContext,\n      { provides }\n    )\n\n    render(node, el)\n  }\n}\n\nfunction findComponentParent (vnode: VNode, root: ComponentInternalInstance): ComponentInternalInstance | null {\n  // Walk the tree from root until we find the child vnode\n  const stack = new Set<VNode>()\n  const walk = (children: VNode[]): boolean => {\n    for (const child of children) {\n      if (!child) continue\n\n      if (child === vnode || (child.el && vnode.el && child.el === vnode.el)) {\n        return true\n      }\n\n      stack.add(child)\n      let result\n      if (child.suspense) {\n        result = walk([child.ssContent!])\n      } else if (Array.isArray(child.children)) {\n        result = walk(child.children as VNode[])\n      } else if (child.component?.vnode) {\n        result = walk([child.component?.subTree])\n      }\n      if (result) {\n        return result\n      }\n      stack.delete(child)\n    }\n\n    return false\n  }\n  if (!walk([root.subTree])) {\n    consoleError('Could not find original vnode, component will not inherit provides')\n    return root\n  }\n\n  // Return the first component parent\n  const result = Array.from(stack).reverse()\n  for (const child of result) {\n    if (child.component) {\n      return child.component\n    }\n  }\n  return root\n}\n","// Composables\nimport { VClassIcon, VSvgIcon } from '@/composables/icons'\nimport { aliases, mdi } from '@/iconsets/mdi'\n\n// Utilities\nimport { mergeDeep } from '@/util'\n\n// Types\nimport type { IconOptions, IconSet, InternalIconOptions } from '@/composables/icons'\n\nfunction genDefaults (): Record<string, IconSet> {\n  return {\n    svg: {\n      component: VSvgIcon,\n    },\n    class: {\n      component: VClassIcon,\n    },\n  }\n}\n\nexport function createIcons (options?: IconOptions) {\n  const sets = genDefaults()\n  const defaultSet = options?.defaultSet ?? 'mdi'\n\n  if (defaultSet === 'mdi' && !sets.mdi) {\n    sets.mdi = mdi\n  }\n\n  return mergeDeep({\n    defaultSet,\n    sets,\n    aliases: {\n      ...aliases,\n      /* eslint-disable max-len */\n      vuetify: [\n        'M8.2241 14.2009L12 21L22 3H14.4459L8.2241 14.2009Z',\n        ['M7.26303 12.4733L7.00113 12L2 3H12.5261C12.5261 3 12.5261 3 12.5261 3L7.26303 12.4733Z', 0.6],\n      ],\n      'vuetify-outline': 'svg:M7.26 12.47 12.53 3H2L7.26 12.47ZM14.45 3 8.22 14.2 12 21 22 3H14.45ZM18.6 5 12 16.88 10.51 14.2 15.62 5ZM7.26 8.35 5.4 5H9.13L7.26 8.35Z',\n      'vuetify-play': [\n        'm6.376 13.184-4.11-7.192C1.505 4.66 2.467 3 4.003 3h8.532l-.953 1.576-.006.01-.396.677c-.429.732-.214 1.507.194 2.015.404.503 1.092.878 1.869.806a3.72 3.72 0 0 1 1.005.022c.276.053.434.143.523.237.138.146.38.635-.25 2.09-.893 1.63-1.553 1.722-1.847 1.677-.213-.033-.468-.158-.756-.406a4.95 4.95 0 0 1-.8-.927c-.39-.564-1.04-.84-1.66-.846-.625-.006-1.316.27-1.693.921l-.478.826-.911 1.506Z',\n        ['M9.093 11.552c.046-.079.144-.15.32-.148a.53.53 0 0 1 .43.207c.285.414.636.847 1.046 1.2.405.35.914.662 1.516.754 1.334.205 2.502-.698 3.48-2.495l.014-.028.013-.03c.687-1.574.774-2.852-.005-3.675-.37-.391-.861-.586-1.333-.676a5.243 5.243 0 0 0-1.447-.044c-.173.016-.393-.073-.54-.257-.145-.18-.127-.316-.082-.392l.393-.672L14.287 3h5.71c1.536 0 2.499 1.659 1.737 2.992l-7.997 13.996c-.768 1.344-2.706 1.344-3.473 0l-3.037-5.314 1.377-2.278.004-.006.004-.007.481-.831Z', 0.6],\n      ],\n      /* eslint-enable max-len */\n    },\n  }, options) as InternalIconOptions\n}\n","// Composables\nimport { createIcons } from './icons'\nimport { createDate, DateAdapterSymbol, DateOptionsSymbol } from '@/composables/date/date'\nimport { createDefaults, DefaultsSymbol, RootDefaultsSymbol } from '@/composables/defaults'\nimport { createDisplay, DisplaySymbol } from '@/composables/display'\nimport { createGoTo, GoToSymbol } from '@/composables/goto'\nimport { IconSymbol } from '@/composables/icons'\nimport { createLocale, LocaleSymbol } from '@/composables/locale'\nimport { createTheme, ThemeSymbol } from '@/composables/theme'\n\n// Utilities\nimport { effectScope, nextTick, reactive } from 'vue'\nimport { defineComponent, IN_BROWSER, mergeDeep } from '@/util'\n\n// Types\nimport type { App, ComponentPublicInstance, InjectionKey } from 'vue'\nimport type { DateOptions } from '@/composables/date'\nimport type { DefaultsOptions } from '@/composables/defaults'\nimport type { DisplayOptions, SSROptions } from '@/composables/display'\nimport type { GoToOptions } from '@/composables/goto'\nimport type { IconOptions } from '@/composables/icons'\nimport type { LocaleOptions, RtlOptions } from '@/composables/locale'\nimport type { ThemeOptions } from '@/composables/theme'\n\n// Exports\nexport * from './composables'\nexport * from './types'\n\nexport interface VuetifyOptions {\n  aliases?: Record<string, any>\n  blueprint?: Blueprint\n  components?: Record<string, any>\n  date?: DateOptions\n  directives?: Record<string, any>\n  defaults?: DefaultsOptions\n  display?: DisplayOptions\n  goTo?: GoToOptions\n  theme?: ThemeOptions\n  icons?: IconOptions\n  locale?: LocaleOptions & RtlOptions\n  ssr?: SSROptions\n}\n\nexport interface Blueprint extends Omit<VuetifyOptions, 'blueprint'> {}\n\nexport function createVuetify (vuetify: VuetifyOptions = {}) {\n  const { blueprint, ...rest } = vuetify\n  const options: VuetifyOptions = mergeDeep(blueprint, rest)\n  const {\n    aliases = {},\n    components = {},\n    directives = {},\n  } = options\n\n  const scope = effectScope()\n  return scope.run(() => {\n    const defaults = createDefaults(options.defaults)\n    const display = createDisplay(options.display, options.ssr)\n    const theme = createTheme(options.theme)\n    const icons = createIcons(options.icons)\n    const locale = createLocale(options.locale)\n    const date = createDate(options.date, locale)\n    const goTo = createGoTo(options.goTo, locale)\n\n    function install (app: App) {\n      for (const key in directives) {\n        app.directive(key, directives[key])\n      }\n\n      for (const key in components) {\n        app.component(key, components[key])\n      }\n\n      for (const key in aliases) {\n        app.component(key, defineComponent({\n          ...aliases[key],\n          name: key,\n          aliasName: aliases[key].name,\n        }))\n      }\n\n      const appScope = effectScope()\n      appScope.run(() => {\n        theme.install(app)\n      })\n      app.onUnmount(() => appScope.stop())\n\n      app.provide(DefaultsSymbol, defaults)\n      app.provide(RootDefaultsSymbol, defaults)\n      app.provide(DisplaySymbol, display)\n      app.provide(ThemeSymbol, theme)\n      app.provide(IconSymbol, icons)\n      app.provide(LocaleSymbol, locale)\n      app.provide(DateOptionsSymbol, date.options)\n      app.provide(DateAdapterSymbol, date.instance)\n      app.provide(GoToSymbol, goTo)\n\n      if (IN_BROWSER && options.ssr) {\n        if (app.$nuxt) {\n          app.$nuxt.hook('app:suspense:resolve', () => {\n            display.update()\n          })\n        } else {\n          const { mount } = app\n          app.mount = (...args) => {\n            const vm = mount(...args)\n            nextTick(() => display.update())\n            app.mount = mount\n            return vm\n          }\n        }\n      }\n\n      if (typeof __VUE_OPTIONS_API__ !== 'boolean' || __VUE_OPTIONS_API__) {\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, LocaleSymbol),\n                date: inject.call(this, DateAdapterSymbol),\n              })\n            },\n          },\n        })\n      }\n    }\n\n    function unmount () {\n      scope.stop()\n    }\n\n    return {\n      install,\n      unmount,\n      defaults,\n      display,\n      theme,\n      icons,\n      locale,\n      date,\n      goTo,\n    }\n  })!\n}\n\nexport const version = __VUETIFY_VERSION__\ncreateVuetify.version = version\n\n// Vue's inject() can only be used in setup\nfunction 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","/* eslint-disable local-rules/sort-imports */\n\n// Styles\nimport './styles/main.sass'\n\n// Components\nimport * as blueprints from './blueprints'\nimport * as components from './components'\nimport * as directives from './directives'\nimport { createVuetify as _createVuetify } from './framework'\n\n// Types\nimport type { VuetifyOptions } from './framework'\n\nexport const createVuetify = (options: VuetifyOptions = {}) => {\n  return _createVuetify({ components, directives, ...options })\n}\n\nexport const version = __VUETIFY_VERSION__\ncreateVuetify.version = version\n\nexport {\n  blueprints,\n  components,\n  directives,\n}\nexport * from './composables'\n","// Composables\nimport { createRules, RulesSymbol } from './rules'\n\n// Types\nimport type { App } from 'vue'\nimport type { RulesOptions } from './rules'\nimport type { LocaleInstance } from '@/composables/locale'\n\nexport interface RulesPlugin {\n  install: (app: App) => void\n}\n\nexport function createRulesPlugin (rules: RulesOptions, locale: LocaleInstance): RulesPlugin {\n  return {\n    install (app: App) {\n      app.provide(RulesSymbol, createRules(rules, locale))\n    },\n  }\n}\n"],"names":["consoleWarn","message","warn","consoleError","deprecate","original","replacement","Array","isArray","slice","map","s","join","at","COMBINING_MARKS","FINAL_SIGMA","lower","str","toLowerCase","replace","SPECIAL_LETTERS","ł","ø","đ","ð","þ","ħ","ŧ","ŋ","ß","æ","œ","ı","Ł","Ø","Đ","Ð","Þ","Ħ","Ŧ","Ŋ","ẞ","Æ","Œ","SPECIAL_LETTER","RegExp","Object","keys","fold","normalize","char","collect","haystack","needle","matchAll","ranges","index","indexOf","push","length","remap","start","end","sourceStart","sourceEnd","current","search","text","query","ignoreCase","foldQuery","foldTarget","folded","lowered","foldAccents","raw","chunk","unit","foldWithMap","projected","span","last","project","findMatchRanges","options","ignoreAccents","merged","a","b","combined","toSorted","x","y","range","mergeRanges","isFunction","item","isString","isNumber","isBoolean","isObject","isElement","Element","isNull","isNullOrUndefined","isUndefined","isSymbol","from","_","IN_BROWSER","window","SUPPORTS_INTERSECTION","SUPPORTS_TOUCH","navigator","maxTouchPoints","SUPPORTS_EYE_DROPPER","SUPPORTS_MATCH_MEDIA","matchMedia","PREFERS_REDUCED_MOTION","matches","IS_WEBKIT","CSS","supports","getNestedValue","obj","path","fallback","i","undefined","getObjectValueByPath","split","getPropertyFromItem","property","value","isPercentage","endsWith","resolveSize","spanSize","parseFloat","String","convertToUnit","num","Number","isNaN","isFinite","isPlainObject","proto","getPrototypeOf","prototype","refElement","el","$el","nodeType","Node","TEXT_NODE","nextElementSibling","keyValues","freeze","enter","tab","delete","esc","space","up","down","left","right","home","del","backspace","insert","pageup","pagedown","shift","o","has","key","every","k","hasOwnProperty","pick","paths","found","call","pickWithRest","exclude","create","rest","some","test","omit","clone","forEach","prop","onRE","isOn","bubblingEvents","compositionIgnoreKeys","isComposingIgnoreKey","e","isComposing","includes","filterInputAttrs","attrs","events","props","inputEvents","rootAttrs","inputAttrs","assign","wrapInArray","v","debounce","fn","delay","timeoutId","wrap","args","clearTimeout","setTimeout","unref","clear","immediate","clamp","min","max","Math","getDecimals","trimmedStr","toString","trim","padEnd","repeat","padStart","humanReadableFileSize","bytes","base","prefix","abs","toFixed","mergeDeep","source","target","arrayFn","targetCondition","out","targetProperty","sourceProperty","flattenFragments","nodes","node","type","Fragment","children","flat","toKebabCase","cache","get","kebab","set","findChildrenWithProvide","vnode","child","suspense","ssContent","component","getOwnPropertyDescriptor","provides","subTree","Map","CircularBuffer","arr","pointer","constructor","size","this","isFull","val","values","concat","destructComputed","getter","computed","toRef","eventName","propName","EventProp","Function","hasEvent","name","capitalize","callEvent","handler","h","focusableChildren","filterByTabIndex","targets","elements","querySelectorAll","err","filter","closest","offsetParent","getClientRects","parentElement","tagName","getActiveElement","active","document","activeElement","shadowRoot","getNextElement","location","condition","_el","idx","focusTarget","focusTargetRole","getAttribute","findIndex","inc","focusChild","focusable","contains","focus","isEmpty","noop","matchesSelector","selector","isAutofill","isTrusted","ensureValidVNode","vnodes","isVNode","Comment","renderSlot","slot","templateRef","shallowRef","defineProperty","enumerable","checkPrintable","isPrintableChar","noModifier","ctrlKey","metaKey","altKey","isPrimitive","escapeForRegex","sign","normalizeMinusSign","extractNumber","decimalDigitsLimit","decimalSeparator","onlyValidCharacters","cleanText","all","decimalPart","parts","substring","camelizeProps","camelize","deepToRaw","objectIterator","input","isRef","isReactive","isProxy","toRaw","reduce","acc","block","inline","parseAnchor","anchor","isRtl","side","align","toPhysical","flipSide","center","top","bottom","flipAlign","flipCorner","getAxis","Box","pageScale","body","currentCSSZoom","factor","width","height","getBoundingClientRect","getOverflow","before","after","getTargetBox","getElementBox","documentElement","visualViewport","localWidth","clientWidth","scale","offsetLeft","offsetTop","clientHeight","nullifyTransforms","rect","style","getComputedStyle","tx","transform","ta","sx","sy","dx","dy","startsWith","to","transformOrigin","w","offsetWidth","offsetHeight","animate","keyframes","finished","Promise","resolve","animation","onfinish","handlers","WeakMap","mainTRC","Rco","Gco","Bco","blkThrs","loConFactor","loConOffset","APCAcontrast","background","Rtxt","r","Gtxt","g","Btxt","Rbg","Gbg","Bbg","outputContrast","Ytxt","Ybg","SAPC","delta","cielabForwardTransform","t","cbrt","cielabReverseTransform","fromXYZ","xyz","transformedY","toXYZ","lab","Ln","srgbForwardMatrix","srgbForwardTransform","C","srgbReverseMatrix","srgbReverseTransform","rgb","matrix","round","isCssColor","color","cssColorRe","mappers","rgba","hsl","l","HSLtoRGB","hsla","hsv","HSVtoRGB","hsva","parseColor","groups","match","realValues","hex","int","parseInt","HexToRGB","HSLtoHSV","TypeError","f","n","RGBtoHSV","HSVtoHSL","RGBtoCSS","HSVtoCSS","toHex","substr","toUpperCase","RGBtoHex","parseHex","chunked","c","HSVtoHex","lighten","amount","CIELAB","sRGB","darken","getLuma","getContrast","first","second","l1","l2","hasLightForeground","blackContrast","propsFactory","defaults","definition","default","makeComponentProps","class","getCurrentInstance","vm","_getCurrentInstance","Error","getCurrentInstanceName","aliasName","injectSelf","DefaultsSymbol","Symbol","for","RootDefaultsSymbol","injectDefaults","inject","provideDefaults","injectedDefaults","injectedRoot","providedDefaults","ref","newDefaults","disabled","scoped","reset","root","properties","prev","len","Infinity","rootDefaults","provide","injectComponentDefaults","injectNestedDefaults","self","_as","internalUseDefaults","__name","componentDefaults","_props","Proxy","propValue","Reflect","propIsDefined","_componentDefault","_globalDefault","global","_subcomponentDefaults","watchEffect","subComponents","entries","fromEntries","provideSubDefaults","injected","defineComponent","_setup","setup","propKeys","filterProps","ctx","setupBindings","genericComponent","exposeDefaults","_defineComponent","createSimpleFunctional","klass","tag","slots","deepEqual","recursionCache","Date","getTime","cachedComparisonResult","r1","r2","findCachedComparison","result","visitedObject","newCacheItem","updateRecursionCache","p","attachedRoot","getRootNode","parentNode","composed","standardEasing","deceleratedEasing","acceleratedEasing","easingPatterns","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","instant","useTransition","defaultTransition","duration","transition","raf","outputRef","toValue","watch","async","cancelAnimationFrame","easing","startTime","performance","now","ease","requestAnimationFrame","step","currentTime","progress","executeTransition","getPrefixedEventHandlers","suffix","getData","event","getScrollParent","includeHidden","isPotentiallyScrollable","hasScrollbar","scrollingElement","getScrollParents","stopAt","ELEMENT_NODE","hasVerticalScrollbar","overflowY","scrollHeight","hasHorizontalScrollbar","overflowX","scrollWidth","useRender","render","IconValue","IconSymbol","makeIconProps","icon","required","VComponentIcon","Icon","_createVNode","VSvgIcon","inheritAttrs","_mergeProps","_createElementVNode","xmlns","viewBox","role","d","VLigatureIcon","VClassIcon","_normalizeClass","aliases","collapse","complete","cancel","close","success","info","warning","error","next","checkboxOn","checkboxOff","checkboxIndeterminate","delimiter","sortAsc","sortDesc","expand","menu","subgroup","dropdown","radioOn","radioOff","edit","ratingEmpty","ratingFull","ratingHalf","loading","unfold","file","plus","minus","calendar","treeviewCollapse","treeviewExpand","tableGroupCollapse","tableGroupExpand","eyeDropper","upload","command","ctrl","alt","arrowup","arrowdown","arrowleft","arrowright","play","pause","fullscreen","fullscreenExit","volumeHigh","volumeMedium","volumeLow","volumeOff","mdi","md1","rounded","VAvatar","VAutocomplete","variant","VBanner","VBtn","VCheckbox","indentDetails","VCombobox","VDatePicker","controlHeight","elevation","controlVariant","VSelect","VSlider","VSwitch","VRadioGroup","VRangeSlider","VTabs","VTextarea","VTextField","VToolbar","icons","defaultSet","sets","theme","themes","light","colors","primary","secondary","accent","md2","md3","VAppBar","VBottomSheet","contentClass","VBtnGroup","VCard","inset","VChip","VDateInput","divided","headerColor","VFileInput","VList","prependGap","VNavigationDrawer","VNumberInput","tertiary","surface","useResizeObserver","callback","box","resizeRef","contentRect","observer","ResizeObserver","border","borderBoxSize","inlineSize","blockSize","onBeforeUnmount","disconnect","newValue","oldValue","unobserve","observe","flush","readonly","VuetifyLayoutKey","VuetifyLayoutItemKey","makeLayoutProps","overlaps","fullHeight","Boolean","makeLayoutItemProps","order","absolute","useLayout","layout","getLayoutItem","mainRect","mainStyles","layoutRect","useLayoutItem","id","useId","isKeptAlive","onDeactivated","onActivated","layoutItemStyles","layoutItemScrimStyles","register","unregister","createLayout","parentLayout","rootZIndex","registered","positions","reactive","layoutSizes","priorities","activeItems","disabledTransitions","sizeOf","position","isResizing","resizeTimeout","onScopeDispose","computedOverlaps","overlap","topPosition","bottomPosition","topAmount","bottomAmount","layers","uniquePriorities","Set","sort","items","generateLayers","previousLayer","layer","transitionsEnabled","find","rootVm","isMounted","onMounted","layoutSize","elementSize","disableTransitions","instanceIndex","splice","zIndex","isHorizontal","isOppositeHorizontal","isOppositeVertical","direction","offscreen","transformFunction","styles","measuredSize","layoutClasses","layoutStyles","overflow","layoutRef","useToggleScope","scope","effectScope","run","stop","useProxiedModel","defaultValue","transformIn","transformOut","internal","kebabProp","isControlled","model","externalValue","internalValue","emit","en","badge","open","dismiss","confirmEdit","ok","dataIterator","noResultsText","loadingText","dataTable","itemsPerPageText","ariaLabel","sortDescending","sortAscending","sortNone","activateNone","activateDescending","activateAscending","selectRow","selectAll","selectGroup","sortBy","dataFooter","itemsPerPageAll","nextPage","prevPage","firstPage","lastPage","pageText","dateRangeInput","divider","monthPicker","title","itemsSelected","header","previousYear","nextYear","selectYear","currentMonth","datePicker","placeholder","previousMonth","nextMonth","selectMonth","selectDate","currentDate","noDataText","carousel","moreEvents","today","heatmap","less","more","prependAction","appendAction","otp","fileInput","counter","counterSize","fileUpload","browse","timePicker","am","pm","hour","minute","notAllowed","pagination","previous","page","currentPage","stepper","rating","infiniteScroll","loadMore","empty","rules","email","number","integer","capital","maxLength","minLength","strictLength","notEmpty","pattern","hotkey","then","escape","upArrow","downArrow","leftArrow","rightArrow","option","shortcut","or","video","seek","volume","showVolume","mute","unmute","enterFullscreen","exitFullscreen","colorPicker","eyedropper","hueSlider","alphaSlider","redInput","greenInput","blueInput","alphaInput","hueInput","saturationInput","lightnessInput","hexInput","hexaInput","changeFormat","LANG_PREFIX","params","createTranslateFunction","messages","shortKey","currentLocale","fallbackLocale","createNumberFunction","Intl","NumberFormat","format","inferDecimalSeparator","inferNumericGroupSeparator","useGrouping","formatToParts","useProvided","provided","createProvideFunction","state","numericGroupSeparator","LocaleSymbol","createLocale","i18n","adapter","locale","createVuetifyAdapter","rtl","af","ar","bg","ca","ckb","cs","de","es","et","fa","fi","fr","hr","hu","he","it","ja","km","ko","lv","lt","nl","no","pl","pt","ro","ru","sk","sl","srCyrl","srLatn","sv","th","tr","az","uk","vi","zhHans","zhHant","rtlClasses","createRtl","useLocale","provideLocale","provideRtl","data","useRtl","ThemeSymbol","makeThemeProps","createCssClass","lines","content","scopeSelector","getScopedSelector","line","genCssVariables","lightOverlay","dark","darkOverlay","variables","genVariation","variations","object","variation","createRange","genVariations","variationColors","genOnColors","onColors","onColor","colorVal","upsertStyles","cspNonce","styleEl","getElementById","createElement","setAttribute","head","appendChild","getOrCreateStyleElement","innerHTML","createTheme","parsedOptions","defaultTheme","stylesheetId","utilities","isDisabled","parseThemeOptions","_name","systemName","computedThemes","isSystem","themeName","bgLines","fgLines","flatMap","themeClasses","themeNames","media","updateSystemName","addEventListener","passive","getCurrentScope","removeEventListener","_transitionOrigin","change","apply","transitionOptions","local","origin","resolveTransitionOptions","startViewTransition","textContent","update","types","remove","updateCallbackDone","withPageTransition","cycle","themeArray","currentIndex","globalName","install","app","_context","usehead","getHead","nonce","tagPosition","entry","patch","addHeadObjs","updateDOM","updateStyles","toggle","setTransitionOrigin","clientX","clientY","originX","innerWidth","originY","innerHeight","provideTheme","newTheme","useTheme","makeVAppProps","VApp","_normalizeStyle","makeTagProps","makeVToolbarTitleProps","VToolbarTitle","hasText","makeTransitionProps","group","hideOnLeave","leaveAbsolute","mode","createCssTransition","functions","onBeforeEnter","onLeave","_transitionInitialStyles","setProperty","onAfterLeave","TransitionGroup","Transition","css","createJavascriptTransition","ExpandTransitionGenerator","expandedParentClass","_parent","_initialStyle","onEnter","initialStyle","classList","add","onAfterEnter","resetStyles","onEnterCancelled","onLeaveCancelled","makeVDialogTransitionProps","saved","VDialogTransition","pointerEvents","visibility","done","dimensions","getDimensions","speed","opacity","getChildren","offset","removeProperty","onBeforeLeave","els","querySelector","targetBox","elBox","anchorSide","anchorOffset","getPropertyValue","offsetX","offsetY","tsx","tsy","maxs","asa","VFabTransition","VDialogBottomTransition","VDialogTopTransition","VFadeTransition","VScaleTransition","VScrollXTransition","VScrollXReverseTransition","VScrollYTransition","VScrollYReverseTransition","VSlideXTransition","VSlideXReverseTransition","VSlideYTransition","VSlideYReverseTransition","VExpandTransition","VExpandXTransition","VExpandBothTransition","makeVDefaultsProviderProps","VDefaultsProvider","toRefs","makeDimensionProps","maxHeight","maxWidth","minHeight","minWidth","useDimension","dimensionStyles","makeVResponsiveProps","aspectRatio","VResponsive","aspectStyles","ratio","paddingBottom","useAspectStyles","additional","useColor","colorClasses","colorStyles","computeColor","useTextColor","textColorClasses","textColorStyles","useBackgroundColor","backgroundColorClasses","backgroundColorStyles","_colors","normalizeColors","classes","backgroundColor","caretColor","CSS_LENGTH","splitTokens","isCssLength","token","isCssValue","makeRoundedProps","tile","useRounded","roundedClasses","roundedStyles","borderRadius","validator","MaybeTransition","customProps","transitionProps","mergeProps","booleanAttributes","onlyDefinedProps","mounted","binding","modifiers","IntersectionObserver","_observe","instance","$","uid","isIntersecting","quiet","init","once","unmounted","Intersect","updated","makeVImgProps","cover","draggable","eager","gradient","imageClass","lazySrc","rootMargin","threshold","sizes","src","crossorigin","referrerpolicy","srcset","VImg","directives","vIntersect","emits","loadstart","load","currentSrc","image","naturalWidth","naturalHeight","deferredLoadEmit","normalisedSrc","aspect","lazyImg","Image","pollForSize","nextTick","isUnmounted","onError","onLoad","getSrc","img","oldVal","onBeforeMount","timer","timeout","poll","imgHeight","imgWidth","containClasses","__image","objectPosition","sources","appear","withDirectives","vShow","__preloadImage","__placeholder","__error","__gradient","backgroundImage","isBooted","responsiveProps","imageAttrs","_withDirectives","_Fragment","makeBorderProps","useBorder","borderClasses","makeElevationProps","hoverElevation","useElevation","elevationClasses","oppositeMap","makeLocationProps","useLocation","opposite","locationStyles","getOffset","allowedDensities","makeVToolbarProps","collapsePosition","density","extended","extensionHeight","floating","isExtended","extension","contentHeight","hasTitle","hasImage","prepend","append","makeScrollProps","scrollTarget","scrollThreshold","useSsrBoot","ssrBootStyles","makeVAppBarProps","scrollBehavior","modelValue","vToolbarRef","isActive","behavior","hide","fullyHide","inverted","elevate","fadeImage","canScroll","appBarHeight","currentScroll","isScrollingUp","scrollRatio","isAtBottom","reachedBottomWhileScrollingDown","hasEnoughScrollableSpace","previousScroll","previousScrollHeight","savedScroll","currentThreshold","isScrollActive","getScrollMetrics","targetEl","checkScrollableSpace","maxScrollableDistance","elementHeight","minRequiredDistance","onResize","onScroll","pageYOffset","scrollTop","currentScrollHeight","Window","atBottom","scrollJumped","atTop","newTarget","useScroll","canHide","isCollapsed","isFlat","toolbarProps","makeDensityProps","useDensity","densityClasses","predefinedSizes","makeSizeProps","useSize","sizeClasses","sizeStyles","allowedVariants","genOverlays","isClickable","makeVariantProps","useVariant","variantClasses","makeVBtnGroupProps","baseColor","makeGroupProps","multiple","mandatory","selectedClass","makeGroupItemProps","useGroupItem","injectKey","description","isSelected","isFirst","isLast","select","useGroup","selected","getIds","ids","itemIndex","getValues","groupVm","forceMandatoryValue","currentId","newIndex","newItem","onUpdated","useIndexAsValue","unwrapped","getItemIndex","itemByIndex","VBtnToggleSymbol","makeVBtnToggleProps","VBtnToggle","btnGroupProps","makeVIconProps","VIcon","slotIcon","iconData","iconAlias","iconSetName","setName","iconName","useIcon","slotValue","Text","hasClick","onClick","onClickOnce","fontSize","tabindex","useIntersectionObserver","intersectionRef","makeRevealProps","reveal","useReveal","makeVProgressCircularProps","bgColor","indeterminate","rotate","VProgressCircular","CIRCUMFERENCE","PI","underlayColorClasses","underlayColorStyles","revealState","revealDuration","normalizedValue","transitionDuration","diameter","strokeWidth","strokeDashOffset","baseLength","startAngle","baseAngle","fill","cx","cy","makeChunksProps","chunkCount","chunkWidth","chunkGap","makeVProgressLinearProps","bgOpacity","bufferValue","bufferColor","bufferOpacity","clickable","reverse","stream","striped","roundedBar","VProgressLinear","bufferColorClasses","bufferColorStyles","barColorClasses","barColorStyles","normalizedBuffer","isReversed","transitionName","containerWidth","hasChunks","splitStyles","chunksMaskStyles","snapValueToChunk","reversed","isSplit","containerSize","chunkGapPx","chunkWidthPx","maskRepeat","maskImage","maskSize","halfGap","buffer","hasBar","hasBuffer","bufferSplit","edge","bar","gapRelativeSize","chunkRelativeSize","floor","useChunks","bufferWidth","barWidth","handleClick","renderBackgroundBar","borderTop","makeLoaderProps","useLoader","loaderClasses","LoaderSlot","positionValues","makePositionProps","usePosition","positionClasses","useRouter","proxy","$router","useLink","RouterLink","resolveDynamicComponent","isLink","href","isRouterLink","linkProps","route","navigate","routerLink","link","$route","useRoute","matched","isExactActive","exact","makeRouterProps","inTransition","stopSymbol","webkitTransform","isTouchEvent","isKeyboardEvent","ripples","show","_ripple","enabled","container","className","radius","centerX","centerY","calculate","localX","localY","touches","point","circle","sqrt","dataset","previousPosition","activated","getElementsByClassName","findLast","ripple","isHiding","diff","removeChild","isRippleEnabled","rippleShow","element","currentTarget","touched","isTouch","centered","showTimerCommit","showTimer","rippleStop","rippleHide","rippleCancelShow","keyboardRipple","keyboardRippleHide","focusRippleHide","updateRipple","wasEnabled","bindingValue","allowedKeys","keyDownHandler","keyboardRippleShow","removeListeners","Ripple","makeVBtnProps","activeColor","symbol","prependIcon","appendIcon","slim","stacked","spaced","variantProps","isElevated","valueAttr","JSON","stringify","shiftKey","button","useSelectLink","Tag","hasPrepend","hasAppend","hasIcon","toDisplayString","loader","vRipple","makeVAppBarNavIconProps","VAppBarNavIcon","VAppBarTitle","VAlertTitle","makeIconSizeProps","iconSize","iconSizes","useIconSizes","iconSizeMap","_iconSize","allowedTypes","makeVAlertProps","borderColor","closable","closeIcon","closeLabel","prominent","VAlert","closeProps","hasClose","iconProps","makeVThemeProviderProps","withBackground","VThemeProvider","makeVBadgeProps","bordered","dot","dotSize","label","textColor","VBadge","badgeAttrs","_vShow","makeVAvatarProps","badgeDotSize","badgeOffset","badgeProps","avatar","makeVLabelProps","VLabel","VSelectionControlGroupSymbol","makeSelectionControlGroupProps","defaultsTarget","falseIcon","trueIcon","indeterminateIcon","valueComparator","makeVSelectionControlGroupProps","VSelectionControlGroup","updateHandlers","forceUpdate","onForceUpdate","cb","makeVSelectionControlProps","trueValue","falseValue","VSelectionControl","isMultiple","currentValue","newVal","useSelectionControl","isFocused","isFocusVisible","isInteractive","onFocus","onBlur","onClickLabel","stopPropagation","onInput","checked","inputNode","makeVCheckboxBtnProps","VCheckboxBtn","onChange","controlProps","$event","useInputIcon","InputIcon","localeKey","prependInner","appendInner","listener","onKeydown","preventDefault","PointerEvent","makeVMessagesProps","VMessages","makeFocusProps","focused","useFocus","focusClasses","blur","FormKey","makeFormProps","fastFail","validateOn","useForm","form","isReadonly","RulesSymbol","useRules","makeValidationProps","errorMessages","maxErrors","validationValue","useValidation","validationModel","internalErrorMessages","isPristine","isDirty","invalidInput","lazy","isValid","isValidating","isResetting","validationClasses","resetValidation","validate","silent","results","rule","console","makeVInputProps","centerAffix","glow","iconColor","detailsActive","hideDetails","hideSpinButtons","hint","persistentHint","VInput","hasMessages","hasDetails","details","messagesId","slotProps","Refs","getDescriptor","currentObj","descriptor","forwardRefs","refs","bind","setupState","childRefs","queue","makeVCheckboxProps","inputRef","controlAttrs","inputProps","checkboxProps","breakpoints","DisplaySymbol","defaultDisplayOptions","mobileBreakpoint","thresholds","xs","sm","md","lg","xl","xxl","getClientWidth","ssr","getClientHeight","getPlatform","userAgent","regexp","android","ios","cordova","electron","chrome","firefox","opera","win","mac","linux","touch","createDisplay","parseDisplayOptions","platform","updateSize","breakpointValue","mobile","smAndUp","mdAndUp","lgAndUp","xlAndUp","smAndDown","mdAndDown","lgAndDown","xlAndDown","makeDisplayProps","useDisplay","display","displayClasses","GoToSymbol","genDefaults","patterns","getTarget","horizontal","totalOffset","scrollTo","_target","_options","goTo","HTMLElement","targetLocation","layoutOffset","containerHeight","clampTarget","startLocation","useGoTo","goToInstance","go","getScrollSize","getScrollPosition","scrollLeft","getOffsetSize","getOffsetPosition","VSlideGroupSymbol","makeVSlideGroupProps","centerActive","scrollDistance","scrollSnap","scrollToActive","nextIcon","prevIcon","showArrows","VSlideGroup","isOverflowing","scrollOffset","contentSize","containerRef","containerRect","contentRef","goToOptions","firstSelectedIndex","lastSelectedIndex","frame","sizeProperty","scrollToChildren","scrollToPosition","getBounds","ideal","getPosition","getSnapPositions","reveals","best","nearestTo","getSnapPosition","snapToElement","selectedElement","containerElement","containerOffsetSize","calculateCenteredTarget","scrollPosition","childrenSize","childrenStartPosition","additionalOffset","calculateUpdatedTarget","mirrorInRtl","activeAnimations","newPosition","offsetSize","scrollSize","scrolling","scrollSnapType","finally","onFocusin","composedPath","onFocusout","ignoreFocusEvent","relatedTarget","onFocusAffixes","toFocus","getSiblingElement","sibling","hasAttribute","firstElementChild","lastElementChild","preventScroll","getItemBounds","snapToItem","forward","candidates","revealing","slide","distance","by","getScrollDistance","hasOverflowOrScroll","hasAffixes","hasPrev","hasNext","hadPrev","hadNext","onMousedown","hasOverflow","VChipGroupSymbol","makeVChipGroupProps","column","VChipGroup","slideGroupProps","makeVChipProps","activeClass","appendAvatar","filterIcon","pill","prependAvatar","click","slideGroup","onKeyDown","hasAppendMedia","hasFilter","hasPrependMedia","makeVDividerProps","contentOffset","thickness","vertical","VDivider","dividerStyles","contentStyles","margin","marginBlock","marginInline","hasSlot","ListKey","createList","filterable","parent","updateHasPrepend","trackingIndex","navigationStrategy","useList","independentActiveStrategy","strategy","activate","in","parents","independentSingleActiveStrategy","parentStrategy","singleSelected","singleOpenStrategy","opened","newOpened","multipleOpenStrategy","listOpenStrategy","independentSelectStrategy","on","independentSingleSelectStrategy","classicSelectStrategy","everySelected","noneSelected","cid","VNestedSymbol","emptyNested","itemsRegistration","updateDisabled","openOnSelect","activatable","selectable","selectedValues","getPath","makeNestedProps","activeStrategy","selectStrategy","openStrategy","useNested","returnObject","batch","currentOpened","queueMicrotask","setOpened","leafActiveStrategy","leafSingleActiveStrategy","leafSingleSelectStrategy","leafSelectStrategy","trunkSelectStrategy","branchSelectStrategy","flatItems","stack","pop","resolveValue","comparator","_returnObject","itemVal","unshift","nodeIds","itemsUpdatePropagation","leading","trailing","lastExec","throttling","elapsed","invoke","throttle","_parents","_children","_disabled","getValue","itemValue","childValues","childValue","updateInternalMaps","nested","parentId","isGroup","list","newSelected","newActivated","useNestedItem","uidSymbol","computedId","idValue","isOpen","isActivated","isIndeterminate","isLeaf","isGroupActivator","VListGroupActivator","useNestedGroupActivator","makeVListGroupProps","collapseIcon","expandIcon","rawId","fluid","VListGroup","_id","renderWhenClosed","activatorProps","toggleIcon","activatorDefaults","VListItem","activator","inert","makeVListItemSubtitleProps","VListItemSubtitle","VListItemTitle","makeVListItemProps","nav","subtitle","rootEl","isSelectable","isTracked","ariaSelected","roundedProps","handleActiveLink","scrollIntoView","lineClasses","rippleOptions","dispatchEvent","MouseEvent","hasSubtitle","VListItemAction","makeVListSubheaderProps","sticky","VListSubheader","makeVListChildrenProps","VListChildren","itemProps","subheader","slotsWithItem","listGroupProps","listItemProps","makeItemsProps","itemTitle","itemChildren","itemType","itemTypes","transformItem","transformItems","neededProps","array","useItems","hasNullItem","itemsMap","keylessItems","_items","keyless","_allItems","_keylessItems","_hasNullItem","hasValueComparator","returnValue","main","fastItems","useListItems","makeVListProps","indent","navigationIndex","getNextIndex","itemCount","nextIndex","startIndex","attempts","getNavigationDirection","ariaMultiselectable","VListImg","makeVListItemActionProps","makeVListItemMediaProps","VListItemMedia","VMenuSymbol","elementToViewport","anchorToPoint","locationStrategies","static","updateLocation","connected","isFixedPosition","preferredAnchor","preferredOrigin","parsedAnchor","parsedOrigin","getMinWidth","getMinHeight","getMaxWidth","getMaxHeight","isWidth","contentEl","probe","resolveCssLength","lastFrame","flipped","newTime","newNewTime","contentBox","getIntrinsicSize","scrollParents","viewportMargin","viewport","scrollBox","stickToTarget","placement","checkOverflow","_placement","targetPoint","contentPoint","overflows","available","resets","_x","_y","axis","hasOverflowX","hasOverflowY","newPlacement","flip","newOverflows","pixelRound","pixelCeil","oldTarget","newContentEl","oldContentEl","makeLocationStrategyProps","locationStrategy","devicePixelRatio","ceil","clean","frames","scrollStrategies","none","bindScroll","getTargetEl","scrollElements","contained","scrollbarWidth","scrollableParent","reposition","slow","ric","time","requestIdleCallback","cancelIdleCallback","makeScrollStrategyProps","scrollStrategy","elementsFromPoint","makeDelayProps","closeDelay","openDelay","useDelay","clearDelay","runDelay","isOpening","normalizedDelay","minDelay","defer","runOpenDelay","runCloseDelay","makeActivatorProps","openOnClick","openOnHover","openOnFocus","closeOnContentClick","useActivator","isTop","isSubmenu","activatorEl","parentMenu","isHovered","firstEnter","openedByHover","delayCallbackFiredOpen","shouldCloseOnLeave","rootOpenedByHover","reopenLock","cursorTarget","availableEvents","activatorEvents","onMouseenter","onMouseleave","onMousemove","contentEvents","closeParents","scrimEvents","activatorRef","targetRef","bindActivatorProps","getActivator","_handler","removeAttribute","bindProps","unbindActivatorProps","unbindProps","_useActivator","makeFocusTrapProps","retainFocus","captureFocus","disableInitialFocus","registry","subscribers","parentTraps","closestTrap","currentNode","trapEl","lastActiveTrap","tabIndex","firstElement","lastElement","atFirst","atLast","useFocusTrap","localTop","trapId","focusTrapSuppressed","focusTrapSuppressionTimeout","onPointerdown","captureOnFocus","captureOnKeydown","allFocusableElements","shouldCapture","useHydration","makeLazyProps","useLazy","hasContent","useScopeId","scopeId","StackSymbol","globalStack","defaultConditional","checkEvent","ignoreActive","checkIsActive","ShadowRoot","host","include","closeConditional","handleShadow","ClickOutside","shadowTarget","_clickOutside","lastMousedownWasOutside","directive","beforeUnmount","overlayActivators","Scrim","makeVOverlayProps","attach","closeOnBack","contentProps","noClickAnimation","persistent","scrim","VOverlay","vClickOutside","_disableGlobalStack","_submenu","keydown","afterEnter","afterLeave","scrimEl","_onAfterLeave","scrimColor","globalTop","stackStyles","disableGlobalStack","createStackEntry","activeChildren","_zIndex","lastZIndex","_isTop","useStack","teleportTarget","targetElement","useTeleport","rootNode","staticLocationClasses","normalized","justify","getStaticLocationClasses","onVisualResize","onVisualScroll","useLocationStrategies","useScrollStrategies","onClickOutside","animateClick","openedWithActivatorFocus","ownsFocus","visited","onKeydownSelf","activeEl","isConnected","focusableWithin","returnFocusToActivator","router","removeBefore","removeAfter","popped","disposed","onPopstate","replaced","beforeEach","afterEach","useBackButton","scrollParent","Teleport","persisted","makeVMenuProps","_disableKeys","submenu","openOnArrow","VMenu","overlay","openChildren","onActivatorKeydown","stopImmediatePropagation","focusContentWhenReady","attempt","selectedOption","setInitialFocus","childUid","otherUid","closeOther","clickedOutside","closeChild","overlayProps","ΨopenChildren","makeVSheetProps","VSheet","makeVCounterProps","VCounter","functional","lastMax","makeVFieldLabelProps","VFieldLabel","makeVFieldProps","appendInnerIcon","clearable","clearIcon","dirty","persistentClear","prependInnerIcon","singleLine","VField","labelId","hasLabel","hasFloatingLabel","labelRef","floatingLabelRef","controlRef","isPlainOrUnderlined","targetRect","targetWidth","targetStyle","floatingLabelProps","ariaHidden","mainLabelProps","isOutlined","hasClear","fieldIconColor","makeAutocompleteProps","autocomplete","useAutocomplete","uniqueId","reloadTrigger","isSuppressing","fieldName","fieldAutocomplete","useAutofocus","onIntersect","autofocus","activeTypes","makeVTextFieldProps","counterValue","persistentPlaceholder","persistentCounter","modelModifiers","is","maxlength","vInputRef","vFieldRef","onControlMousedown","onControlClick","selectionStart","selectionEnd","trimStart","hasCounter","counterActive","fieldProps","onClear","fieldClass","cloneVNode","makeVVirtualScrollItemProps","renderless","VVirtualScrollItem","itemRef","BUFFER_PX","makeVirtualProps","itemHeight","itemKey","useVirtual","paddingTop","markerRef","markerOffset","viewportHeight","hasInitialRender","offsets","heights","updateTime","targetScrollIndex","targetScrollPosition","targetScrollHeight","getSize","updateOffsets","calculateVisibleItems","unwatch","scrollToIndex","calculateOffset","whole","fraction","wholeOffset","calculateIndex","high","low","mid","binaryClosest","lastScrollTop","scrollVelocity","lastScrollTime","scrollTimeout","handleScrollend","_calculateVisibleItems","topOverflow","bottomOverflow","itemSize","lead","scrollport","calculateScrollTop","computedItems","_index","deep","handleScroll","scrollTime","handleItemResize","prevHeight","prevItemHeight","count","total","seen","estimateItemHeight","makeVVirtualScrollProps","VVirtualScroll","handleListeners","method","onScrollPassive","onScrollend","toArray","merge","sorted","chunks","cursor","toHighlight","_text","_query","_matches","spans","term","VHighlight","markClass","makeVHighlightProps","useAutofill","pending","pendingTimeout","findItem","resetAutofill","autofill","useFocusRepair","isNavigable","findNavigableIndex","useScrolling","listRef","textFieldRef","virtualScrollRef","displayItems","isScrolling","focusToken","pendingOpenStep","getListEl","findItemEl","focusItem","scroll","listEl","deadline","viewTop","clientTop","viewHeight","alignItem","focusFirstItem","focusLastItem","focusFromActivator","landOnSelected","noAutoScroll","selectedIndex","headerEl","firstInHeader","menuContentEl","setPendingFocus","listEvents","onKeydownCapture","itemEl","finishScrolling","wasOpen","flushPendingFocus","closeWhenFocusLeaves","useOpenOnFocus","returningFocus","useSelectionMenu","_menu","vMenuRef","menuProps","menuDisabled","closeOnSelect","useFocusGroups","getContentRef","onTabKeydown","currentGroupIndex","originGroup","displayItemsCount","nextFocusGroup","refocused","relayed","KeyboardEvent","bubbles","cancelable","defaultPrevented","nextGroup","fromBefore","normaliseMatch","makeFilterProps","customFilter","customKeyFilter","filterKeys","filterMode","noFilter","filterItems","customFiltersLength","lookAheadItems","loop","transformed","customMatches","defaultMatches","hasOnlyCustomFilters","keyFilter","defaultMatchesLength","customMatchesLength","useFilter","filteredItems","filteredMatches","transformedItems","strQuery","originalItems","_filteredItems","_filteredMatches","getMatches","makeMenuActivatorProps","closeText","openText","useMenuActivator","menuId","ariaExpanded","ariaControls","makeSelectProps","chips","closableChips","hideNoData","hideSelected","listProps","menuElevation","menuIcon","openOnClear","itemColor","makeVSelectProps","ue","vTextFieldRef","headerRef","footerRef","vVirtualScrollRef","selection","chipDefaults","keyboardLookupLastTime","keyboardLookupPrefix","keyboardLookupIndex","openedByKeyboard","baseItems","computedMenuProps","getSelectedIndex","repairOrphanedFocus","onMousedownControl","onMenuKeydown","findItemBase","_item","closeMenu","removed","old","mousedownInsideContentAt","onMousedownContent","isAutofilling","onInputCapture","onModelUpdate","hasChips","chip","hasList","textFieldProps","menuSlotProps","inputmode","camelizedProps","internalItem","onChipClose","slotContent","_createTextVNode","append-inner","makeVAutocompleteProps","autoSelectFirst","clearOnSelect","closeOnInputClick","listHasFocus","selectionIndex","_searchLock","filteredItem","hasSelectionSlot","selectedTitle","firstSelectableItem","highlightFirst","onMousedownMenuIcon","selectHighlighted","originalSelectionIndex","searchLength","setSelectionRange","onSelectionKeydown","onUpdateModelValue","menuContent","makeVBannerActionsProps","VBannerActions","VBannerText","makeVBannerProps","actions","makeVBottomNavigationProps","grow","VBottomNavigation","makeVDialogProps","scrollable","VDialog","makeVBottomSheetProps","dialogProps","makeVBreadcrumbsDividerProps","VBreadcrumbsDivider","makeVBreadcrumbsItemProps","VBreadcrumbsItem","makeVBreadcrumbsProps","VBreadcrumbs","makeVIconBtnProps","activeIcon","activeVariant","baseVariant","hideOverlay","VIconBtn","btnSizeMap","_btnSize","btnSize","btnHeight","btnWidth","PARSE_REGEX","PARSE_TIME","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP","getStartOfMonth","timestamp","copyTimestamp","day","updateWeekday","updateFormatted","getEndOfMonth","daysInMonth","year","month","validateNumber","parseTime","exec","validateTimestamp","parseTimestamp","parseDate","date","weekday","hasDay","hasTime","past","present","future","getFullYear","getMonth","getDate","getDay","getHours","getMinutes","getDayIdentifier","getTimeIdentifier","getTimestampIdentifier","updateRelative","isTimedless","updateHasTime","updateMinutes","minutes","nextMinutes","m","Y","getWeekday","padNumber","isLeapYear","padded","nextDay","prevDay","relativeDays","mover","days","findWeekday","maxDays","timestampToDate","createDayList","weekdaySkips","currentIdentifier","stopped","createNativeLocaleFormatter","getOptions","emptyFormatter","_t","_s","DateTimeFormat","short","weekInfo","code","firstDay","firstWeekSize","startOfWeek","firstDayOfWeek","setDate","startOfMonth","endOfMonth","_YYYMMDD","parsed","parseLocalDate","parse","sundayJanuarySecond2000","formatString","formats","newDate","customFormat","hour12","timeZone","timeZoneName","addDays","getYear","getWeek","firstDayOfYear","weekInfoFromLocale","weekStart","minWeekSize","firstDayOfYearOffset","currentWeekStart","currentWeekEnd","yearStartWeekdayOffset","yearStart","d1w1","getDiff","endOfDay","startOfDay","calculateWeekWithFirstDayOfYear","calculateWeekWithMinWeekSize","isAfter","comparing","isEqual","VuetifyDateAdapter","toJsDate","toISO","parseISO","addMinutes","setMinutes","addHours","setHours","addWeeks","addMonths","setMonth","getWeekArray","weeks","currentWeek","firstDayOfMonth","lastDayOfMonth","firstDayWeekIndex","lastDayWeekIndex","adjacentDay","endOfWeek","lastDay","isWithinRange","isBefore","isAfterDay","isSameDay","isSameMonth","isSameYear","setYear","setFullYear","getWeekdays","weekdayFormat","daysFromSunday","firstWeekStart","getNextMonth","getPreviousMonth","startOfYear","endOfYear","DateOptionsSymbol","DateAdapterSymbol","createInstance","useDate","makeCalendarBaseProps","weekdays","ints","wrapped","dayFormat","useCalendarBase","times","updateTimes","parsedNow","setPresent","getNow","updateDay","useTimes","parsedStart","parsedEnd","parsedValue","parsedWeekdays","effectiveWeekdays","categoryDays","skips","filled","skip","j","getWeekdaySkips","dayFormatter","weekdayFormatter","_tms","getColorProps","getRelativeClasses","outside","getWeekNumber","getStartOfWeek","getEndOfWeek","getFormatter","makeCalendarWithIntervalsProps","intervalHeight","intervalWidth","intervalMinutes","firstInterval","firstTime","intervalCount","intervalFormat","intervalStyle","showIntervalLabel","useCalendarWithIntervals","scrollAreaRef","parsedFirstInterval","parsedIntervalMinutes","parsedIntervalCount","parsedIntervalHeight","parsedFirstTime","firstMinute","effectiveIntervalCount","dayLimit","bodyHeight","intervals","daysValue","mins","createIntervalList","intervalFormatter","hourStyle","tms","getIntervalAtEvent","bounds","touchEvent","mouseEvent","changedTouches","minutesToPixels","timeToY","targetDateOrClamp","timeDelta","targetDate","gap","showIntervalLabelDefault","interval","intervalStyleDefault","_interval","getTimestampAtEvent","getSlotScope","week","intervalRange","scrollToTime","pane","makeIntervalHighlightProps","intervalHighlight","useIntervalHighlight","hoveredTime","getHoveredTimeFromEvent","isHighlighted","genUnderlay","Resize","_onResize","VCalendarDaily","vResize","shortWeekdays","shortIntervals","hideHeader","scrollPush","highlight","getScrollPush","genHeadIntervals","genHeadDay","nativeEvent","genHeadWeekday","genHeadDayLabel","genDayHeader","genHeadDayButton","genDayBody","genDayIntervals","genDayInterval","styler","genBodyIntervals","genIntervalLabels","genIntervalLabel","onDragstart","marginRight","getParsedCategories","categories","categoryText","category","categoryName","parsedCategoryText","VCalendarCategory","categoryForInvalid","parsedCategories","getCategoryScope","headerTitle","genDayHeaderCategoryTitle","genDayHeaderCategory","genDays","categoryIndex","genDay","genDayBodyCategory","keyAliasMap","control","spacebar","return","slash","underscore","hyphen","ParseError","parseKeyCombination","pos","parseAlternate","peek","consume","parseSequence","atEnd","ahead","parseCombo","parseKey","ch","isSep","chars","lowerKey","normalizeKey","MODIFIERS","modifiersSet","isModifier","emptyModifiers","matchesKeyGroup","isMac","part","actualKey","parseKeyGroup","expectCtrl","cmd","meta","expectMeta","presets","phone","social","defaultTokens","A","convert","N","X","VCalendarWeekly","minWeeks","monthFormat","showWeek","showMonthOnFirst","shortMonths","parsedMinWeeks","minDays","MAX_SAFE_INTEGER","todayWeek","monthFormatter","isOutside","dayIdentifier","genHeadDays","genWeeks","weekDays","genWeek","weekNumber","weekNodes","genDayLabel","genWeekNumber","determineDay","genDayLabelButton","hasMonth","getVisuals","minStart","visuals","columnCount","startTimestampIdentifier","endTimestampIdentifier","hasOverlap","s0","e0","s1","e1","setColumnCount","groupVisual","getRange","getDayRange","startIdentifier","endIdentifier","getNormalizedRange","dayStart","getOverlapGroupHandler","firstWeekday","dayEvents","timed","visual","targetGroup","intersected","groupStart","groupEnd","getOpenGroup","FULL_WIDTH","calculateBounds","overlapThreshold","columns","getMaxChildIndex","spaceLeft","spaceWidth","columnWidthMultiplier","getColumnWidthMultiplier","columnOffset","columnWidth","hasFullWidth","maxColumn","indices","other","getOverlappingIndices","getOverlappingRange","indexMin","indexMax","returnFirstColumn","overlapping","getParent","addTime","getNode","childMax","identifier","removeMinutes","totalMinutes","CalendarEventOverlapModes","added","getGroups","grand","isEventOn","isEventStart","makeCalendarWithEventsProps","eventStart","eventEnd","eventTimed","eventCategory","eventHeight","eventColor","eventTextColor","eventOverlapThreshold","eventOverlapMode","eventMore","eventMoreText","eventRipple","eventMarginBottom","useCalendarWithEvents","noEvents","categoryMode","eventTimedFunction","eventCategoryFunction","parsedEvents","startProperty","endProperty","startInput","endInput","startParsed","endParsed","endOffset","allDay","parseEvent","parsedEventOverlapThreshold","eventTextColorFunction","eventNameFunction","timedEvent","eventModeFunction","eventWeekdays","eventColorFunction","eventsRef","getEventsMap","eventsMap","genDayEvent","weekdayIdentifier","genEvent","eventParsed","marginBottom","genTimedEvent","startDelta","endDelta","isEventHiddenOn","scopeInput","overlapsNoon","singline","formatTime","withTime","ampm","formatter","timeSummary","eventSummary","ref_for","genName","genPlaceholder","genMore","isEventForCategory","getEventsForDay","getEventsForDayAll","getEventsForDayTimed","inRange","dayEnd","starts","ends","isEventOnDay","updateEventVisibility","parentBounds","eventsSorted","hidden","getVisibleEvents","isEventOverlapping","getScopedSlots","isNode","getSlotChildren","mapper","mapped","VCalendar","categoryHideDynamic","categoryShowAll","lastStart","lastEnd","parsedCategoryDays","renderProps","around","getCategoryList","monthLongFormatter","monthShortFormatter","spanYears","spanMonths","checkChange","move","moved","limit","categoryMap","categoryLength","ev","Component","onClick:date","makeVCardActionsProps","VCardActions","makeVCardSubtitleProps","VCardSubtitle","VCardTitle","makeCardItemProps","VCardItem","makeVCardTextProps","VCardText","makeVCardProps","hover","loadingColor","hasHeader","hasCardItem","touchend","wrapper","scrolled","touchendX","touchendY","originalEvent","handleGesture","touchstartX","touchstartY","createHandlers","touchmoveX","touchmoveY","getScrolled","touchstart","origins","trackScroll","touchmove","_touchHandlers","Touch","VWindowSymbol","VWindowGroupSymbol","makeVWindowProps","continuous","verticalArrows","crossfade","VWindow","vTouch","rootRef","isRtlReverse","transitionCount","transitionHeight","activeIndex","savedScrollPosition","itemsLength","lastIndex","canMoveBack","canMoveForward","arrows","prevProps","nextProps","touchOptions","backKey","forwardKey","focusArrow","arrow","arrowEl","makeVCarouselProps","delimiterIcon","hideDelimiters","hideDelimiterBackground","verticalDelimiters","VCarousel","windowRef","delimiterDefaults","slideTimeout","startTimeout","restartTimeout","onDelimiterKeyDown","windowProps","makeVWindowItemProps","reverseTransition","VWindowItem","groupItem","isTransitioning","hasTransition","onAfterTransition","onBeforeTransition","onTransitionCancelled","onEnterTransition","makeVCarouselItemProps","VCarouselItem","imgProps","windowItemProps","VCode","VColorPickerCanvas","makeVColorPickerCanvasProps","hue","isInteracting","canvasRef","canvasWidth","canvasHeight","_dotPosition","dotPosition","dotStyles","handleMouseDown","handleMouseMove","handleMouseUp","coords","getEventCoordinates","updateDotPosition","updateCanvas","canvas","getContext","saturationGradient","createLinearGradient","addColorStop","fillStyle","fillRect","valueGradient","onTouchstartPassive","nullColor","inputs","getColor","hexa","modes","VColorPickerInput","_normalizeProps","_guardReactiveProps","VColorPickerEdit","hideInputLabels","makeVColorPickerEditProps","enabledModes","mi","VSliderSymbol","makeSliderProps","thumbColor","thumbLabel","thumbSize","showTicks","ticks","tickSize","trackColor","trackFillColor","trackSize","noKeyboard","useSteps","decimals","roundValue","clamped","useSlider","steps","onSliderStart","onSliderMove","onSliderEnd","getActiveThumb","indexFromEnd","numTicks","thumbLabelColor","mousePressed","startOffset","trackContainerRef","activeThumbRef","parseMouseMove","trackStart","trackLength","clickOffset","clickPos","handleStop","handleStart","moveListenerOptions","capture","onMouseMove","onSliderMouseUp","onSliderTouchend","percentage","parsedTicks","hasLabels","onSliderMousedown","onSliderTouchstart","makeVSliderThumbProps","VSliderThumb","slider","isHidden","elevationProps","relevantKeys","multipliers","_step","multiplier","isInteger","parseKeydown","positionPercentage","thumbLabelVisible","makeVSliderTrackProps","VSliderTrack","trackFillColorClasses","trackFillColorStyles","trackColorClasses","trackColorStyles","startDir","endDir","backgroundStyles","trackFillWidth","trackFillStyles","computedTicks","tick","directionValue","makeVSliderProps","thumbContainerRef","roundedValue","trackStop","makeVColorPickerPreviewProps","hideAlpha","hideEyeDropper","eyeDropperIcon","VColorPickerPreview","abortController","AbortController","openEyeDropper","EyeDropper","colorHexValue","signal","sRGBHex","onUnmounted","abort","red","lighten5","lighten4","lighten3","lighten2","lighten1","darken1","darken2","darken3","darken4","accent1","accent2","accent3","accent4","pink","purple","deepPurple","indigo","blue","lightBlue","cyan","teal","green","lightGreen","lime","yellow","amber","orange","deepOrange","brown","blueGrey","grey","shades","black","white","transparent","makeVColorPickerSwatchesProps","swatches","parseDefaultColors","VColorPickerSwatches","swatch","onSwatchClick","VPickerTitle","makeVPickerProps","landscape","hideTitle","VPicker","sheetProps","makeVColorPickerProps","hideCanvas","hideSliders","hideInputs","showSwatches","swatchesMaxHeight","VColorPicker","hasA","converted","stripAlpha","extractColor","currentColor","externalChange","updateColor","pickerProps","makeVConfirmEditProps","cancelText","okText","hideActions","VConfirmEdit","save","btnDefaults","internalModel","structuredClone","isActionDisabled","action","isSaveDisabled","isCancelDisabled","actionsProps","actionsUsed","availablePipLocations","makeVColorInputProps","hidePip","colorPip","pipIcon","pipLocation","pipVariant","VColorInput","onSave","onCancel","confirmEditProps","colorPickerProps","slotWithPip","arg","proxyModel","onUpdateModel","makeVComboboxProps","alwaysFilter","delimiters","trimValues","cleared","_search","splitByDelimiters","selectMultiple","selectFreeText","onPaste","clipboardData","isExistingItem","keepMenu","signsToMatch","makeDataTableExpandProps","expandOnClick","showExpand","expanded","expandStrategy","VDataTableExpandedKey","provideExpanded","rawValue","newExpanded","existing","isExpanded","toggleExpand","useExpanded","makeDataTableGroupProps","groupBy","openAll","groupKey","VDataTableGroupSymbol","createGroupBy","provideGroupBy","disableSort","openedModel","localOpened","isGroupOpen","sortByWithGroups","toggleGroup","extractRows","dive","useGroupBy","groupItems","depth","parentKey","groupedItems","groupItemsByProperty","defaultGroupId","collectGroupIds","useOpenAllGroups","allIds","newIds","oldIds","changed","flattenItems","hasSummary","useGroupedItems","useOptions","itemsPerPage","oldOptions","makeDataTablePaginateProps","pageBy","VDataTablePaginationSymbol","createPagination","providePagination","stopIndex","pageCount","setPage","setItemsPerPage","usePaginatedItems","paginatedItems","singleSelectStrategy","showSelectAll","allSelected","pageSelectStrategy","allSelectStrategy","allItems","makeDataTableSelectProps","showSelect","VDataTableSelectionSymbol","provideSelection","customComparator","allSelectable","currentPageSelectable","someSelected","toggleSelect","pageItems","isSomeSelected","useSelection","makeDataTableSortProps","initialSortOrder","customKeySort","multiSort","mustSort","VDataTableSortSymbol","createSort","provideSort","toggleSort","newSortBy","initialOrder","secondaryOrder","modifier","reverseMode","resolveMultiSort","isSorted","useSort","useSortedItems","sortedItems","sortByItems","stringCollator","Collator","sensitivity","usage","hasCustomResult","sortKey","sortOrder","sortA","sortB","sortARaw","sortBRaw","sortRawFunctions","customResult","sortFunctions","toLocaleLowerCase","compare","sortItems","makeDataIteratorItemsProps","itemSelectable","useDataIteratorItems","makeVDataIteratorProps","VDataIterator","openedGroups","manualPagination","currentItems","currentItemsWithoutGroups","itemsCount","footer","makeVPaginationProps","totalVisible","firstIcon","lastIcon","pageAriaLabel","currentPageAriaLabel","firstAriaLabel","previousAriaLabel","nextAriaLabel","lastAriaLabel","ellipsis","showFirstLastPage","VPagination","maxButtons","measure","rects","controlsWidth","pagesWidth","pages","pageWidth","getMax","parentWidth","parentRef","grew","totalWidth","itemWidth","visible","even","middle","rangeLength","rangeStart","setValue","updateRef","onBeforeUpdate","useRefs","VPaginationBtn","controls","prevDisabled","nextDisabled","updateFocus","makeVDataTableFooterProps","firstPageLabel","prevPageLabel","nextPageLabel","lastPageLabel","itemsPerPageOptions","showCurrentPage","VDataTableFooter","selectDefaults","usePagination","paginationProps","VDataTableColumn","fixed","fixedOffset","fixedEndOffset","lastFixed","firstFixedEnd","noPadding","nowrap","fixedSide","paddingInlineStart","makeDataTableHeaderProps","headers","VDataTableHeadersSymbol","defaultHeader","sortable","defaultActionHeader","extractLeaves","extractKeys","getDefaultItem","getDepth","setFixedOffset","setFixedEndOffset","maxDepth","currentDepth","priority","enqueue","dequeue","priorityQueue","rowSize","row","rowspan","colspan","pow","convertToInternalHeaders","internalHeaders","defaultItem","createHeaders","filterFunctions","seenFixed","setFixed","parentFixedSide","parseFixedColumns","flatHeaders","sortRaw","useHeaders","useLoadingConfig","fallbackColor","makeVDataTableHeadersProps","fixedHeader","sortIcon","sortAscIcon","sortDescIcon","headerProps","selectAllLabel","VDataTableHeaders","getFixedStyles","getSortIcon","loadingConfig","headerCellClasses","VDataTableHeaderCell","isSortable","sortItem","ariaSort","handleEnterKeyPress","columnSlotName","columnSlotProps","VDataTableMobileHeaderCell","sortableColumns","showSelectColumn","sortingChips","sortedColumns","activeSortKeys","onClick:clear","onUpdate:modelValue","showMobileHeader","hasSortableColumns","hasSelectionControl","makeVDataTableGroupHeaderRowProps","groupCollapseIcon","groupExpandIcon","selectGroupLabel","VDataTableGroupHeaderRow","rows","selectableRows","makeVDataTableRowProps","cellProps","selectRowLabel","onContextmenu","onDblclick","VDataTableRow","slotName","headerSlotName","columnCellProps","withModifiers","displayValue","makeVDataTableRowsProps","rowProps","expandTransition","VDataTableRows","groupHeaderRowProps","virtualIndex","itemSlotProps","makeVTableProps","gridlines","fixedFooter","VTable","gridlinesVariant","tableAttrs","caption","makeDataTableItemsProps","itemColumns","useDataTableItems","makeDataTableProps","hideDefaultBody","hideDefaultFooter","hideDefaultHeader","makeVDataTableProps","VDataTable","paginate","paginatedItemsWithGroups","paginatedGroups","firstGroupId","lastGroupId","lastGroupIndex","usePaginatedGroups","paginatedItemsWithoutGroups","internalItems","dataTableFooterProps","dataTableHeadersProps","dataTableRowsProps","tableProps","colgroup","thead","tbody","tfoot","makeVDataTableVirtualProps","elementNodes","VDataTableVirtual","rowHeights","expandedHeights","sum","setExpandedHeight","itemSlot","itemExpanded","expandedRows","trimExpandedHeights","setRowHeight","makeVDataTableServerProps","VDataTableServer","itemsWithoutGroups","makeVContainerProps","VContainer","breakpointProps","offsetProps","propMap","col","parseCols","cols","parseBreakpoint","breakpoint","ALIGN_SELF_VALUES","makeVColProps","orderSm","orderMd","orderLg","orderXl","orderXxl","alignSelf","VCol","sizeBaseOverride","offsetBaseOverride","responsive","variablesList","ALIGNMENT","SPACE","ALIGN_VALUES","alignValidator","JUSTIFY_VALUES","justifyValidator","ALIGN_CONTENT_VALUES","alignContentValidator","alignContent","classMap","breakpointClass","makeVRowProps","dense","alignSm","alignMd","alignLg","alignXl","alignXxl","justifySm","justifyMd","justifyLg","justifyXl","justifyXxl","alignContentSm","alignContentMd","alignContentLg","alignContentXl","alignContentXxl","noGutters","VRow","horizontalGap","verticalGap","VSpacer","makeVDatePickerControlsProps","noMonthPicker","modeIcon","monthText","yearText","viewMode","VDatePickerControls","click:year","click:month","click:prev","click:next","click:prev-year","click:next-year","disableMonth","disableYear","disablePrevMonth","disableNextMonth","disablePrevYear","disableNextYear","onClickPrevMonth","onClickNextMonth","onClickPrevYear","onClickNextYear","onClickYear","onClickMonth","prevMonth","prevYear","onlyMonthBtn","onlyYearBtn","monthYearBtn","monthYearSplit","monthYearText","openMonths","openYears","modalControls","dockedControls","makeVDatePickerHeaderProps","VDatePickerHeader","click:append","onClickAppend","makeCalendarProps","allowedDates","showAdjacentMonths","weeksInMonth","useCalendarRange","minDate","maxDate","clampDate","isInAllowedRange","useVirtualFocus","orientation","circular","_columns","onHighlight","highlightedId","previousEl","applyHighlight","controlEl","itemId","highlighted","mod","stride","dir","maxHops","hops","focusHighlighted","cur","rowFirst","rowLast","prevKeys","nextKeys","useGridSelection","initialValue","itemAttribute","onSelect","onNavigation","onEscape","hasFocusIn","containerEl","virtualFocus","grid","targetId","initial","onContainerKeydown","onActivate","keyToDirection","containerProps","selectItem","useRangePicker","normalizeEnd","previewValue","externalPreview","rangeEnd","previewRange","preview","isRangeStart","isRangeEnd","isPreviewStart","isPreviewEnd","isPreviewMiddle","isRangeMiddle","onRangeSelect","copy","onMultipleSelect","setPreview","clearPreview","isInPreviewRange","makeVDatePickerMonthProps","hideWeekdays","noAutoNavigation","VDatePickerMonth","_value","_payload","weekNumbers","weekdayLabels","isoDate","isAdjacent","isStart","isEnd","isSame","weekdaysCount","formatted","isToday","isWeekEnd","isWeekStart","localized","daysInWeek","useCalendar","isReverse","selectionColor","rangeColorClasses","rangeColorStyles","atMax","dayRows","chunkArray","isSelectedDay","isDayDisabled","getDateAriaLabel","fullDate","isVisible","onDaySelect","curId","calendarDays","curIndex","targetItem","targetIsoDate","candidate","rawTarget","targetIso","genEvents","eventColors","eventData","getEventColors","weekDay","rowIndex","colIndex","rangeMiddle","previewStart","previewEnd","previewMiddle","onDayClick","hasRangeBg","hasPreviewBg","focusGrid","makeVDatePickerMonthsProps","allowedMonths","VDatePickerMonths","months","isMonthAllowed","btnProps","makeVDatePickerYearsProps","allowedYears","VDatePickerYears","years","isYearAllowed","scrollToSelected","makeVDatePickerProps","headerDateFormat","landscapeHeaderWidth","_month","_year","isReversing","startDate","endDate","daysBetween","formattedDate","monthStart","headerTransition","_date","prevMonthEnd","prevYearEnd","nextMonthStart","nextYearStart","isAllowedInRange","iso","daysDiff","monthTwoDigits","onUpdateYear","onUpdateMonth","monthGridRef","onClickDate","arrBefore","arrAfter","newMonth","newYear","datePickerControlsProps","datePickerHeaderProps","datePickerMonthProps","datePickerMonthsProps","datePickerYearsProps","onBoundaryNavigate","payload","focusDate","readSection","segment","tail","softMax","digits","separatorStart","closed","closeSection","maskSegmentsFrom","segments","caret","gaps","outCaret","limited","separator","section","typed","editing","holds","capped","keepSeparators","cut","kept","lastDayInMonth","DateFormatSpec","canBeParsed","lowercase","makeDateFormatProps","inputFormat","useDateFormat","currentFormat","localeForDateFormat","logicalOrder","literal","visualOrder","inferFromLocale","autoFixYear","currentYear","currentCentury","typingOrder","isRange","bounded","hintFormat","custom","fixYear","dateSegments","mirror","dateString","validatedParts","dateParts","validateDateParts","parseDateParts","pad","maskInTypingOrder","noise","toMaskSource","dates","masked","template","remainingFormat","maskDate","inPlace","shown","getHint","digitsLeft","read","remainingHint","joinDates","formatDate","parserFormat","makeVDateInputProps","displayFormat","updateOn","adapterLocale","onBeforeinput","onInputKeydown","mask","placed","typeIn","shaped","overtyped","wrote","isDigit","period","overtype","sectionAt","inputElement","inputType","collapsed","emptied","createSegmentedEdit","emptyModelValue","isEditingInput","disabledActions","formatHint","onUserInput","onUpdateDisplayModel","datePickerProps","datePickerSlots","prependSlotProps","makeVEmptyStateProps","actionText","headline","textWidth","VEmptyState","onClickAction","hasActions","hasHeadline","hasMedia","VExpansionPanelSymbol","makeVExpansionPanelTextProps","VExpansionPanelText","expansionPanel","makeVExpansionPanelTitleProps","VExpansionPanelTitle","makeVExpansionPanelProps","VExpansionPanel","selectedIndices","isBeforeSelected","isAfterSelected","expansionPanelTitleProps","expansionPanelTextProps","makeVExpansionPanelsProps","noDivider","VExpansionPanels","outerRounded","innerRounded","variantClass","makeVFabProps","VFab","hasPosition","vFabRef","useFileDrop","getTransfer","dataTransfer","handleDrop","transfer","kind","webkitGetAsEntry","files","traverseFileTree","appendIfDirectory","hasFilesOrFolders","isDraggingFiles","reject","isFile","isDirectory","createReader","readEntries","makeFileFilterProps","filterByType","useFileFilter","fileFilter","extensionsToMatch","wildcards","typesToMatch","typeGroup","createFilter","filterAccepted","accepted","rejected","makeVFileInputProps","counterSizeString","counterString","hideInput","showSize","truncateLength","totalBytes","totalBytesReadable","fileNames","truncatedText","charsKeepOneSide","truncateText","fileCount","isDragging","onClickPrepend","onDragover","onDragleave","onDrop","selectAccepted","onFileSelection","repack","DataTransfer","Event","expectsDirectory","webkitdirectory","acceptFallback","accept","inputAccept","showPlaceholder","makeVFileUploadItemProps","fileIcon","VFileUploadItem","click:remove","onClickRemove","URL","createObjectURL","nextId","fileIds","getFileKey","VFileUploadKey","makeVFileUploadDropzoneProps","browseText","dividerText","hideBrowse","insetFileList","VFileUploadDropzone","click:browse","drop","insetBrowseVariant","browseSize","browseVariant","context","vSheetRef","onClickBrowse","interactive","hasBrowse","hasFiles","isInset","dividerProps","onClick:remove","single","makeVFileUploadListProps","VFileUploadList","createCommentVNode","makeVFileUploadProps","VFileUpload","vDropzoneRef","isError","selectedFiles","newFiles","__","dropzoneProps","makeVFooterProps","VFooter","autoHeight","makeVFormProps","VForm","submit","errors","valid","invalid","markRaw","itemErrorMessages","createForm","formRef","onReset","onSubmit","_e","ready","catch","novalidate","makeVKbdProps","VKbd","processKey","config","requestedMode","keyCfg","hotkeyMap","makeVHotkeyProps","displayMode","keyMap","AND_DELINEATOR","OR_DELINEATOR","THEN_DELINEATOR","applyDisplayModeToKey","VHotkey","keyCombinations","combination","visit","accessibleLabel","shortcutText","readableParts","textKey","translateKey","getKeyTooltip","getKeyText","comboIndex","keyIndex","isContained","KeyComponent","keyClasses","renderKey","renderDivider","makeVHoverProps","VHover","isHovering","makeVInfiniteScrollProps","loadMoreText","emptyText","VInfiniteScrollIntersect","intersect","VInfiniteScroll","startStatus","endStatus","setScrollAmount","getScrollAmount","setStatus","status","getContainerSize","previousScrollSize","handleIntersect","_isIntersecting","intersecting","getStatus","renderSide","hasStartIntersect","hasEndIntersect","intersectMode","effectiveSide","VItemGroupSymbol","makeVItemGroupProps","VItemGroup","VItem","makeVLayoutProps","VLayout","makeVLayoutItemProps","VLayoutItem","makeVLazyProps","VLazy","makeVLocaleProviderProps","VLocaleProvider","makeVMainProps","VMain","kineticEnergyToVelocity","work","calculateImpulseVelocity","samples","vprev","vcurr","useVelocity","addMovement","timeStamp","endTouch","getVelocity","newest","absX","absY","oops","locations","makeVNavigationDrawerProps","disableResizeWatcher","disableRouteWatcher","expandOnHover","permanent","rail","railWidth","temporary","touchless","isVertical","layoutSpan","widthPx","isPersistent","isTemporary","isSticky","currentRoute","dragProgress","onTouchstart","onTouchmove","onTouchend","maybeDragging","getProgress","touchX","touchY","inTouchZone","inElement","velocity","vx","vy","thresholdMet","dragStyles","useTouch","isStuck","stickyStyles","stuckPosition","scrollY","layoutTop","bodyScroll","useSticky","scrimStyles","VNoSsr","NUMERAL_ZEROS","formatNumber","precision","minFractionDigits","minimumFractionDigits","maximumFractionDigits","groupSeparator","codePointAt","zero","localizeMinusSign","minusSign","addGrouping","grouping","decimalIndex","integerPart","numberingSystem","formatWithoutLocale","toLogicalPosition","displayPosition","logical","makeVNumberInputProps","MIN_SAFE_INTEGER","controlDefaults","holdStart","holdStop","toggleUpDown","clearInterval","setInterval","useHold","controlsDisabled","decimalSeparatorFromLocale","numericGroupSeparatorFromLocale","toNumber","replaceAll","correctPrecision","_inputText","_lastParsedValue","inputText","isOutOfRange","numberFromText","stepResult","increment","stepped","canIncrease","canDecrease","incrementIcon","decrementIcon","controlNodeSize","controlNodeDefaultHeight","incrementSlotProps","onPointerup","onControlMouseup","onUpControlMousedown","onPointercancel","decrementSlotProps","onDownControlMousedown","inferPrecision","emitChange","stripGrouping","logicalStart","logicalEnd","hasSelection","newRaw","newLogicalCursor","rawBefore","cleanData","deleteEnd","logicalPosition","toDisplayPosition","processGroupedInput","beforePart","processPlainInput","releasePointerCapture","pointerId","setPointerCapture","actualText","clampModel","formatInputValue","incrementControlNode","decrementControlNode","decrement","controlNode","dividerNode","appendInnerControl","hasAppendInner","prependInnerControl","hasPrependInner","VOtpInputSymbol","makeVOtpFieldProps","VOtpField","otpInput","otpSlots","focusAll","focusAt","compositionChar","hasFakeCaret","placeholderChar","countSlotChildren","makeVOtpGroupProps","VOtpGroup","isMerged","flex","VOtpSeparator","OtpInputPatterns","numeric","alpha","alphanumeric","IME_SCRIPT_RE","graphemeSegmenter","Segmenter","granularity","makeVOtpInputProps","VOtpInput","finish","focusAtPending","_length","composition","prevSelection","anchorG","focusG","isMasked","effectivePattern","inputMode","graphemes","seg","codeUnitsToGraphemeIndex","graphemeIndexToCodeUnits","gIndex","compositionChars","currentSelection","startG","endG","compositionStart","displayChar","re","clampGraphemes","setSelection","selectSlot","graphemeCount","isImeText","filtered","insertEnd","insertEndG","deleteRange","bulkDelete","isBackward","syncSelection","inputValue","selectionDirection","valueG","outStartG","outEndG","prevStartG","prevEndG","finalStartG","finalEndG","clearSelection","selectAtEnd","moveCaret","currentG","extendSelection","maxFocus","selectionStartG","selectionEndG","newFocus","minG","maxG","startComposition","updateComposition","endComposition","useOtpInput","applySelection","syncDOM","onSelectionChange","onCompositionstart","onCompositionupdate","onCompositionend","isForward","NaN","slotIndexAtPoint","onCleanup","intersectScope","fields","autocorrect","autocapitalize","spellcheck","makeVParallaxProps","VParallax","displayHeight","Document","scrollPos","translate","sizeScale","onLoadstart","VPullToRefresh","pullDownThreshold","touchDiff","refreshing","goingUp","touching","canRefresh","topOffset","stopScrolling","onMouseup","pullDownPanel","makeVRadioProps","VRadio","makeVRadioGroupProps","makeVRangeSliderProps","strict","startThumbRef","stopThumbRef","stopOffset","makeVRatingProps","itemAriaLabel","emptyIcon","fullIcon","halfIncrements","itemLabels","itemLabelPosition","VRating","increments","hoverIndex","itemState","isFilled","eventState","currentItemIndex","moveCurrentFocus","currentItem","onItemKeydown","VRatingItem","showStar","isFocusable","createLabel","labelProps","rootTypes","article","card","heading","ossein","paragraph","sentences","table","genBone","genBones","bone","genStructure","mapBones","bones","makeVSkeletonLoaderProps","boilerplate","VSkeletonLoader","isLoading","loadingProps","ariaLive","VSlideGroupItem","slideGroupItem","VSnackbarQueueSymbol","makeVSnackbarProps","queueGap","queueIndex","reverseTimer","timerColor","VSnackbar","countdown","milliseconds","useCountdown","queueItem","setSize","useSnackbarItem","_lastOffset","timerRef","startY","hasLayout","activeTimeout","onPointerenter","onPointerleave","locationClasses","loc","queueDirection","collapsedStyles","makeVSnackbarQueueProps","displayStrategy","VSnackbarQueue","documentVisibility","visibilityState","onVisibilityChange","useDocumentVisibility","lastItemSize","toReversed","useSnackbarQueue","updateDynamicProps","_lastId","visibleItems","showNext","onDismiss","promise","triggerRef","reason","snackbarProps","pauseAll","removeItem","makeVTooltipProps","VTooltip","makeVSparklineTooltipProps","titleFormat","VSparklineTooltip","genRoundedPath","points","consistentStructure","isCollinear","p1","p2","p0","getDistance","radiusForPoint","moveTo","vector","unitVector","makeLineProps","autoDraw","autoDrawDuration","autoDrawEasing","gradientDirection","labels","labelSize","lineWidth","padding","markerSize","markerStroke","showLabels","showMarkers","smooth","smoothMode","tooltip","resample","targetCount","extendPoints","secondLast","slopeStart","slopeEnd","ghostStart","ghostEnd","buildPath","smoothValue","tension","tangent","beta","squaredSum","tau","curves","curr","genMonotonePath","makeVBarlineProps","autoLineWidth","VBarline","hasDrawn","clipRects","animationDuration","animationEasing","boundary","minX","maxX","minY","maxY","bars","totalValues","maxValue","minValue","gridX","gridY","horizonY","genBars","prevBarCount","applyTransition","applyBarsTransition","oldCount","fromIndex","collapseNewBars","shouldDrawOnce","parsedLabels","svgRef","tooltipVisible","targetX","targetY","targetHeight","animatedX","animatedY","tooltipTarget","ctm","getScreenCTM","svgPoint","createSVGPoint","matrixTransform","tooltipConfig","showCrosshair","onSvgMousemove","svgX","nearest","minDist","barCenter","dist","onSvgMouseleave","onTooltipAfterLeave","setIndex","onSvgFocus","onSvgBlur","onSvgKeydown","gradientData","gradientUnits","x1","y1","x2","y2","rx","ry","textAnchor","dominantBaseline","makeVTrendlineProps","VTrendline","fillPath","strokePath","genPoints","sampleCount","prevCount","oldResampled","pathRef","genPath","normalizedItems","extendedPoints","applyDTransition","dTransition","propertyName","getTotalLength","strokeDasharray","strokeDashoffset","currentPoint","markerPathLength","svgPath","getPointAtLength","getPathLengthAtX","animatedLength","markerPoint","markerRadius","stroke","makeVSparklineProps","VSparkline","totalHeight","lineProps","makeVSpeedDialProps","VSpeedDial","menuRef","VStepperSymbol","makeVStepperActionsProps","prevText","nextText","VStepperActions","prevDefaults","nextDefaults","onClickPrev","onClickNext","prevSlotProps","nextSlotProps","VStepperActionsPrevBtn","VStepperActionsNextBtn","VStepperHeader","makeStepperItemProps","completeIcon","editable","editIcon","errorIcon","makeVStepperItemProps","VStepperItem","canEdit","hasError","hasCompleted","hasColor","makeVStepperWindowProps","VStepperWindow","_model","makeVStepperWindowItemProps","VStepperWindowItem","makeStepperProps","altLabels","nonLinear","makeVStepperProps","VStepper","hasWindow","makeVStepperVerticalActionsProps","VStepperVerticalActions","stepperActionsProps","makeVStepperVerticalItemProps","VStepperVerticalItem","click:finish","vExpansionPanelRef","actionProps","expansionPanelProps","makeVStepperVerticalProps","VStepperVertical","vExpansionPanelsRef","makeVSwitchProps","small","large","thumbColorClasses","thumbColorStyles","isForcedColorsModeActive","loaderColor","isPredefinedSize","onTrackClick","isMaterial","hasThumbColor","thumb","makeVSystemBarProps","VSystemBar","VTabsSymbol","makeVTabProps","sliderColor","sliderTransition","sliderTransitionDuration","hideSlider","VTab","sliderColorClasses","sliderColorStyles","insetColorClasses","insetColorStyles","sliderEl","fade","nextEl","prevEl","prevBox","nextBox","xy","XY","rightBottom","widthHeight","updateSlider","makeVTabsWindowProps","VTabsWindow","makeVTabsWindowItemProps","VTabsWindowItem","makeVTabsProps","alignTabs","fixedTabs","insetPadding","insetRadius","parseItems","makeVTextareaProps","autoGrow","noResize","maxRows","textareaRef","sizerRef","calculateInputHeight","fieldStyle","lineHeight","newHeight","_vModelText","makeVTimelineDividerProps","dotColor","fillDot","hideDot","lineColor","VTimelineDivider","lineColorClasses","lineColorStyles","makeVTimelineItemProps","hideOpposite","lineInset","VTimelineItem","dotRef","makeVTimelineProps","lineThickness","truncateLine","VTimeline","sideClasses","truncateClasses","makeVTimePickerClockProps","allowedValues","displayedValue","double","VTimePickerClock","clockRef","innerClockRef","valueOnMouseDown","valueOnMouseUp","emitChangeDebounced","roundCount","degreesPerUnit","degrees","innerRadiusScale","genChildren","isAllowed","wheel","deltaY","isInner","handScale","angleToValue","angle","insideClick","getTransform","rotateRadians","sin","cos","euclidean","setMouseDownValue","onDragMove","handAngle","atan2","checksCount","onMouseDown","onMouseUp","onWheel","makeVTimePickerFieldProps","showHint","VTimePickerField","vTextInputRef","convert24to12","convert12to24","extractInteger","makeTimeValidationProps","allowedHours","allowedMinutes","allowedSeconds","useTimeValidation","isAllowedHour","minHour","maxHour","isAllowedMinute","minMinute","maxMinute","minTime","maxTime","hour24hr","isAllowedSecond","minSecond","maxSecond","findNextAllowed","currentHour","currentMinute","nextValue","incrementHour","incrementMinuteOrSecond","makeVTimePickerControlsProps","inputHints","useSeconds","VTimePickerControls","isHourValid","isMinuteValid","isSecondValid","transformHours","transformMinutesOrSeconds","onHourFieldKeydown","isAm","togglePeriod","onMinuteFieldKeydown","onSecondFieldKeydown","createInputInterceptor","valueTransformOut","existingTxt","potentialNewInputVal","potentialNewNumber","setPeriod","hourInputRef","minuteInputRef","secondInputRef","hourInputFilter","minuteInputFilter","secondInputFilter","makeVTimePickerProps","VTimePicker","inputHour","inputMinute","inputSecond","lazyInputHour","lazyInputMinute","lazyInputSecond","controlsRef","isAmPm","shouldClear","emitValue","genValue","setInputData","getSeconds","newPeriod","oldPeriod","timePickerControlsProps","timePickerClockProps","clockValidation","makeVToolbarItemsProps","VToolbarItems","makeVTreeviewGroupProps","VTreeviewGroup","vListGroupRef","VTreeviewItem","VTreeviewSymbol","makeVTreeviewItemProps","hasCustomPrepend","indentLines","visibleIds","vListItemRef","isActivatableGroupActivator","isActivatable","isFiltered","activateGroupActivator","visibleTreeitems","tree","siblingTreeitem","focusSibling","focusEdge","verticalKeys","useTreeviewKeyboard","checkChildren","idOf","onItem","expandKey","collapseKey","expandable","selectableNode","focusFirstChild","focusParent","onItemActionKeydown","makeVTreeviewChildrenProps","loadChildren","loadingIcon","selectedColor","isLastGroup","separateRoots","parentIndentLines","indentLinesVariant","VTreeviewChildren","activatorItems","isClickOnOpen","nextItemHasChildren","nodePositionProps","leafLinks","isLastLeaf","leaf","getIndentLines","treeItemProps","treeviewGroupProps","treeviewChildrenProps","footerProps","onToggleExpand","useOpened","revealedBySearch","collapsedByUser","everyGroupId","allGroupIds","toOpen","toClose","groupsRevealingMatches","getPathTo","branch","stillNeeded","flatten","makeVTreeviewProps","indentLinesColor","indentLinesOpacity","VTreeview","_selected","vListRef","VValidation","validation","_mutate","Mutate","modifierKeys","attributes","attr","characterData","childList","subtree","sub","MutationObserver","mutations","_onScroll","Scroll","Tooltip","hook","walk","findComponentParent","appContext","mountComponent","resolveComponent","useDirectiveComponent","createIcons","svg","vuetify","createVuetify","blueprint","components","createDefaults","da","createDate","createGoTo","appScope","onUnmount","$nuxt","mount","__VUE_OPTIONS_API__","mixin","$vuetify","unmount","version","_createVuetify","forbiddenCharacters","character","ruleName","ruleParams","createRules","sequenceTimeout","keyGroups","isSequence","groupIndex","resetSequence","isContentEditable","contentEditable","isInputFocused","cleanup","newKeys","newEvent","oldEvent","tokens","isMask","maskValidates","maskText","trimmedText","textIndex","maskIndex","newText","mchar","tchar","unmaskText","unmaskMap","getUnmaskMap","isDelimiter","isComplete","unmask"],"mappings":"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","x_google_ignoreList":[1,150,151]}