{"version":3,"file":"users.js","names":["isOn","hasOwnProperty","isArray","isFunction","isString","isSymbol","isObject","isPlainObject","isRef","isArray","isSymbol","isObject","isFunction","computed","watch","isPlainObject","stack","isFunction","isArray","inject","getCurrentInstance","isString","enterCbKey","defineComponent","useId","ret","isOn","requestIdleCallback","cancelIdleCallback","isObject","renderSlot","ensureValidVNode","isSymbol","callHook","normalizeKey","compile","version","isArray","isObject","getCurrentInstance","isString","isSymbol","isOn","camelize$1","isFunction","defineComponent","isPlainObject","getPosition","isPlainObject","noop","inject","_sfc_main","_resolveComponent","_openBlock","_createBlock","_unref","_withCtx","_createVNode","_mergeProps","_hoisted_1","_sfc_main","_resolveComponent","_openBlock","_createElementBlock","_Fragment","_renderList","_createBlock","_withCtx","_createTextVNode","_toDisplayString","_hoisted_1","_hoisted_2","_sfc_main","props","_resolveComponent","_openBlock","_createBlock","_withCtx","_createVNode","_createTextVNode","_createElementVNode","_unref","UserLinks","_sfc_main","_resolveComponent","_openBlock","_createBlock","_withCtx","_createVNode","_createTextVNode","UserLinks","_hoisted_1","_hoisted_2","_sfc_main","props","_resolveComponent","_openBlock","_createBlock","_withCtx","_createVNode","_createTextVNode","_createElementVNode","_unref","UserLinks","_sfc_main","props","_resolveComponent","_openBlock","_createBlock","_withCtx","_createVNode","_createTextVNode","_createElementVNode","_unref","UserLinks","LoginView","LogoutView","PasswordNewView","PasswordEditView","_resolveComponent","_openBlock","_createBlock","_withCtx","_createVNode","_resolveDynamicComponent","FlashContainer","IN_BROWSER","SUPPORTS_TOUCH","SUPPORTS_MATCH_MEDIA","Rco","Gco","Bco","normBG","normTXT","revBG","revTXT","blkThrs","blkClmp","scaleBoW","scaleWoB","deltaYmin","Vue","Vue.getCurrentInstance","isPlainObject","mergeDeep","clamp","chunk","fromXYZ","toXYZ","chunk","CIELAB.fromXYZ","sRGB.toXYZ","sRGB.fromXYZ","CIELAB.toXYZ","_getCurrentInstance","inject","_defineComponent","_createVNode","_mergeProps","_createElementVNode","_normalizeClass","inject","aliases","mdi","genDefaults","mdi","aliases","createRtl","inject","genDefaults","useRtl","createRange","getDate","inject","inject","genDefaults","getTarget","getOffset","inject","useRtl","createRange","createTheme","inject","useTheme","inject","useId","inject","createTheme","useRtl","_createElementVNode","_normalizeClass","_normalizeStyle","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","makeTransitionProps","_createVNode","_mergeProps","ExpandTransitionGenerator","_createElementVNode","_normalizeClass","_normalizeStyle","mounted","unmounted","_createElementVNode","_normalizeClass","_createVNode","_withDirectives","_mergeProps","_Fragment","vIntersect","useRtl","allowedDensities","useRtl","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_createVNode","_mergeProps","predefinedSizes","allowedVariants","_createElementVNode","_Fragment","_normalizeClass","_createVNode","_normalizeClass","_normalizeStyle","useId","inject","_createVNode","_mergeProps","_createVNode","_normalizeClass","_normalizeStyle","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","useRtl","_createElementVNode","_normalizeClass","_normalizeStyle","_createVNode","_Fragment","_createElementVNode","_normalizeClass","_createVNode","mounted","unmounted","updated","_createVNode","_mergeProps","_createElementVNode","vRipple","_createVNode","_mergeProps","_createVNode","_mergeProps","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_mergeProps","_createVNode","_normalizeClass","_normalizeStyle","useTheme","_createVNode","_mergeProps","_createElementVNode","_withDirectives","_vShow","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_normalizeClass","_normalizeStyle","useId","_createElementVNode","_normalizeClass","_normalizeStyle","inject","useId","_createElementVNode","_mergeProps","_normalizeClass","_normalizeStyle","_withDirectives","_Fragment","_createVNode","vRipple","_createVNode","_mergeProps","_createVNode","_mergeProps","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","inject","useId","useRtl","useId","_createElementVNode","_normalizeClass","_normalizeStyle","_createVNode","useId","_createVNode","_mergeProps","useRtl","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_createVNode","_mergeProps","_withDirectives","_createVNode","_mergeProps","_createElementVNode","_vShow","_Fragment","vRipple","allowedVariants","_createElementVNode","_normalizeClass","_normalizeStyle","inject","useId","inject","inject","_createVNode","_normalizeClass","_normalizeStyle","_withDirectives","_createElementVNode","_vShow","_createVNode","_normalizeClass","_normalizeStyle","_withDirectives","_createVNode","_mergeProps","_createElementVNode","_Fragment","vRipple","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_createVNode","_mergeProps","itemTypes","transformItem","transformItems","transformItem","transformItems","useId","_createVNode","_normalizeClass","_normalizeStyle","_createVNode","_normalizeClass","_normalizeStyle","_createVNode","_normalizeClass","_normalizeStyle","getOffset","getOffset","inject","useHydration","inject","_createVNode","_createElementVNode","_mergeProps","useRtl","useHydration","inject","_Fragment","_withDirectives","_vShow","vClickOutside","useRtl","useId","inject","_createVNode","_mergeProps","_createVNode","_normalizeClass","_normalizeStyle","_createVNode","_withDirectives","_createElementVNode","_normalizeClass","_normalizeStyle","_vShow","_createVNode","_normalizeClass","_normalizeStyle","allowedVariants","useRtl","useId","_createElementVNode","_mergeProps","_createVNode","_withDirectives","_vShow","_normalizeClass","_normalizeStyle","_Fragment","useId","_createVNode","_mergeProps","_createElementVNode","_Fragment","_normalizeClass","vIntersect","_createElementVNode","_Fragment","_mergeProps","_createVNode","_createElementVNode","_Fragment","_normalizeClass","_normalizeStyle","inject","inject","IN_BROWSER","flatten","IN_BROWSER","IN_BROWSER","IN_BROWSER","SUPPORTS_MATCH_MEDIA","IN_BROWSER","SUPPORTS_MATCH_MEDIA","_createVNode","_createElementVNode","_normalizeClass","_normalizeStyle","useId","_createVNode","_mergeProps","_createElementVNode","_Fragment","_createTextVNode","_createVNode","_mergeProps","_createElementVNode","_Fragment","_normalizeClass","_normalizeStyle","_createTextVNode","_createElementVNode","_normalizeClass","_normalizeStyle","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_createVNode","_mergeProps","_createVNode","_mergeProps","_createElementVNode","_normalizeClass","_normalizeStyle","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_mergeProps","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_Fragment","_mergeProps","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_mergeProps","_createElementVNode","_normalizeClass","_normalizeStyle","mounted","unmounted","_createElementVNode","_mergeProps","_createVNode","_normalizeClass","_normalizeStyle","_withDirectives","vResize","_createElementVNode","_mergeProps","_normalizeClass","_normalizeStyle","_createVNode","useTheme","_createElementVNode","_mergeProps","_createVNode","_normalizeClass","FULL_WIDTH","_createElementVNode","_createTextVNode","_withDirectives","_mergeProps","vRipple","_withDirectives","_createVNode","_mergeProps","vResize","_createVNode","_normalizeClass","_normalizeStyle","_createVNode","_normalizeClass","_normalizeStyle","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_Fragment","_createVNode","_normalizeClass","_normalizeStyle","_withDirectives","_createVNode","_mergeProps","_createElementVNode","vRipple","mounted","unmounted","updated","useRtl","_createVNode","_createElementVNode","_withDirectives","_normalizeClass","_normalizeStyle","vTouch","_createVNode","_mergeProps","_createElementVNode","_Fragment","inject","_createVNode","_withDirectives","_createElementVNode","_normalizeClass","_normalizeStyle","_vShow","_createVNode","_mergeProps","_createElementVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_normalizeProps","_guardReactiveProps","_normalizeClass","_normalizeStyle","_createVNode","_mergeProps","useRtl","createRange","inject","useRtl","_createElementVNode","_normalizeClass","_normalizeStyle","_withDirectives","vRipple","_createVNode","_vShow","inject","_createElementVNode","_normalizeClass","_normalizeStyle","useRtl","_createVNode","_mergeProps","_createElementVNode","_Fragment","_createElementVNode","_normalizeClass","_normalizeStyle","_createVNode","colors","_createElementVNode","_normalizeClass","_normalizeStyle","_createVNode","_createVNode","_mergeProps","_createElementVNode","_normalizeClass","_normalizeStyle","useRtl","_createVNode","_mergeProps","_createElementVNode","_Fragment","_createElementVNode","_Fragment","_createVNode","_mergeProps","_createElementVNode","_Fragment","_createVNode","_mergeProps","transformItem","_createVNode","_mergeProps","_createElementVNode","_Fragment","_normalizeClass","_normalizeStyle","_createTextVNode","inject","inject","inject","inject","inject","transformItem","transformItems","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","useRtl","range","createRange","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_mergeProps","_createElementVNode","_createVNode","_mergeProps","_createVNode","_normalizeClass","inject","_createVNode","_mergeProps","_createElementVNode","_normalizeClass","_normalizeStyle","_Fragment","_createElementVNode","_createVNode","_createTextVNode","_createElementVNode","_normalizeClass","_createVNode","_mergeProps","_Fragment","_createElementVNode","_Fragment","_createVNode","_mergeProps","_createVNode","_mergeProps","_createElementVNode","_normalizeProps","_guardReactiveProps","_createVNode","_mergeProps","_createElementVNode","_Fragment","_createVNode","_mergeProps","_createElementVNode","_normalizeProps","_guardReactiveProps","_Fragment","_createVNode","_mergeProps","_createElementVNode","_Fragment","useRtl","_createVNode","_normalizeClass","_normalizeStyle","propMap","_createVNode","_createElementVNode","_Fragment","_normalizeClass","_createElementVNode","_normalizeClass","_normalizeStyle","_createVNode","useId","_createElementVNode","_createVNode","_createTextVNode","_normalizeClass","_mergeProps","_normalizeStyle","useId","createRange","_createElementVNode","_mergeProps","_createVNode","useId","createRange","_withDirectives","_createElementVNode","_mergeProps","_createVNode","vIntersect","useRtl","_createVNode","_mergeProps","_createElementVNode","_Fragment","_createVNode","_mergeProps","_createElementVNode","_Fragment","_createElementVNode","_normalizeClass","_normalizeStyle","_Fragment","_createVNode","inject","_createVNode","_withDirectives","_createElementVNode","_normalizeClass","_normalizeStyle","_vShow","inject","_withDirectives","_createElementVNode","_normalizeClass","_normalizeStyle","_createVNode","vRipple","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_normalizeClass","_normalizeStyle","_createVNode","_withDirectives","_mergeProps","_vShow","_createVNode","_mergeProps","_createElementVNode","_Fragment","_normalizeClass","_createVNode","_mergeProps","_createElementVNode","_Fragment","inject","_createVNode","_mergeProps","_createElementVNode","_Fragment","inject","_createVNode","_mergeProps","_createElementVNode","_mergeProps","_createVNode","_Fragment","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_normalizeClass","_normalizeStyle","_createVNode","_normalizeClass","_normalizeStyle","useRtl","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_Fragment","_createTextVNode","_createElementVNode","_createTextVNode","_createVNode","_normalizeClass","_normalizeStyle","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_normalizeClass","_normalizeStyle","_withDirectives","_createVNode","_normalizeClass","_normalizeStyle","vIntersect","_createElementVNode","_normalizeClass","_normalizeStyle","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","oops","useRtl","_createElementVNode","_Fragment","_createVNode","_mergeProps","useHydration","_createVNode","_createElementVNode","_Fragment","_mergeProps","inject","_createVNode","_normalizeClass","_createElementVNode","inject","_createElementVNode","_normalizeClass","_normalizeStyle","useRtl","_createElementVNode","_mergeProps","_normalizeStyle","_createVNode","_Fragment","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_normalizeClass","_createVNode","_createVNode","_mergeProps","useId","_createVNode","_mergeProps","_createElementVNode","_Fragment","useRtl","_createVNode","_mergeProps","_createElementVNode","_Fragment","range","createRange","useId","_createElementVNode","_Fragment","_normalizeClass","_createVNode","_mergeProps","_createTextVNode","_normalizeStyle","_createElementVNode","_normalizeClass","_mergeProps","_Fragment","inject","useId","inject","_createVNode","_mergeProps","_createElementVNode","_normalizeClass","_Fragment","_createElementVNode","_Fragment","_createVNode","_mergeProps","useId","_createVNode","_mergeProps","_createVNode","useId","_createElementVNode","_Fragment","_mergeProps","_createVNode","useId","_createElementVNode","_Fragment","_mergeProps","_createVNode","_createVNode","_mergeProps","_createVNode","_mergeProps","_createElementVNode","_createVNode","_mergeProps","_withDirectives","_createElementVNode","_normalizeClass","_createVNode","vRipple","inject","_createVNode","_mergeProps","_createVNode","_mergeProps","_createVNode","_mergeProps","_createElementVNode","_Fragment","_createVNode","_mergeProps","_createVNode","_mergeProps","_createElementVNode","_Fragment","_createVNode","_mergeProps","_createElementVNode","_Fragment","useId","_createVNode","_mergeProps","_createElementVNode","_normalizeClass","_normalizeStyle","_Fragment","_createVNode","_normalizeClass","_normalizeStyle","_createVNode","_mergeProps","_createElementVNode","_Fragment","_normalizeClass","_normalizeStyle","inject","_createVNode","_mergeProps","_createVNode","_mergeProps","_createElementVNode","_Fragment","_createVNode","_mergeProps","_createVNode","_mergeProps","_createElementVNode","_Fragment","_withDirectives","vIntersect","_normalizeClass","_vModelText","_createElementVNode","_normalizeClass","_normalizeStyle","_createVNode","_createElementVNode","_normalizeClass","_normalizeStyle","_createVNode","useRtl","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_normalizeClass","_normalizeStyle","_createVNode","_normalizeClass","_normalizeStyle","_createElementVNode","_normalizeClass","_createVNode","_createTextVNode","_Fragment","_createVNode","_mergeProps","_createElementVNode","_createElementVNode","_normalizeClass","_normalizeStyle","_createVNode","_mergeProps","_createElementVNode","_Fragment","inject","_createVNode","_mergeProps","_createElementVNode","_Fragment","_normalizeClass","useRtl","inject","_createElementVNode","_Fragment","_createVNode","_mergeProps","_createVNode","_mergeProps","mounted","unmounted","vuetifyCss","piniaPluginPersistedstate","App"],"sources":["../../../node_modules/@vue/shared/dist/shared.esm-bundler.js","../../../node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js","../../../node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js","../../../node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js","../../../node_modules/vue/dist/vue.runtime.esm-bundler.js","../../../node_modules/pinia/dist/pinia.js","../../javascript/stores/flash_store.js","../../javascript/components/FlashContainer.vue","../../javascript/apps/users/components/UserLinks.vue","../../javascript/apps/users/views/LoginView.vue","../../javascript/apps/users/views/LogoutView.vue","../../javascript/apps/users/views/PasswordNewView.vue","../../javascript/apps/users/views/PasswordEditView.vue","../../javascript/apps/users/App.vue","../../../node_modules/vuetify/lib/util/console.js","../../../node_modules/@vuetify/v0/dist/globals-Bxw-y98v.mjs","../../../node_modules/@vuetify/v0/dist/utilities/index.mjs","../../../node_modules/vuetify/lib/util/globals.js","../../../node_modules/vuetify/lib/util/helpers.js","../../../node_modules/vuetify/lib/util/anchor.js","../../../node_modules/vuetify/lib/util/box.js","../../../node_modules/vuetify/lib/util/animation.js","../../../node_modules/vuetify/lib/util/bindProps.js","../../../node_modules/vuetify/lib/util/color/APCA.js","../../../node_modules/vuetify/lib/util/color/transformCIELAB.js","../../../node_modules/vuetify/lib/util/color/transformSRGB.js","../../../node_modules/vuetify/lib/util/colorUtils.js","../../../node_modules/vuetify/lib/util/propsFactory.js","../../../node_modules/vuetify/lib/composables/component.js","../../../node_modules/vuetify/lib/util/getCurrentInstance.js","../../../node_modules/vuetify/lib/util/injectSelf.js","../../../node_modules/vuetify/lib/composables/defaults.js","../../../node_modules/vuetify/lib/util/defineComponent.js","../../../node_modules/vuetify/lib/util/createSimpleFunctional.js","../../../node_modules/vuetify/lib/util/deepEqual.js","../../../node_modules/vuetify/lib/util/dom.js","../../../node_modules/vuetify/lib/util/easing.js","../../../node_modules/vuetify/lib/util/events.js","../../../node_modules/vuetify/lib/util/getScrollParent.js","../../../node_modules/vuetify/lib/util/indentLines.js","../../../node_modules/vuetify/lib/util/isFixedPosition.js","../../../node_modules/vuetify/lib/util/useRender.js","../../../node_modules/vuetify/lib/util/throttle.js","../../../node_modules/vuetify/lib/composables/icons.js","../../../node_modules/vuetify/lib/iconsets/mdi.js","../../../node_modules/vuetify/lib/icons.js","../../../node_modules/vuetify/lib/composables/toggleScope.js","../../../node_modules/vuetify/lib/composables/proxiedModel.js","../../../node_modules/vuetify/lib/locale/en.js","../../../node_modules/vuetify/lib/locale/adapters/vuetify.js","../../../node_modules/vuetify/lib/composables/locale.js","../../../node_modules/vuetify/lib/composables/date/adapters/vuetify.js","../../../node_modules/vuetify/lib/composables/date/date.js","../../../node_modules/vuetify/lib/composables/display.js","../../../node_modules/vuetify/lib/composables/goto.js","../../../node_modules/vuetify/lib/composables/theme.js","../../../node_modules/vuetify/lib/composables/resizeObserver.js","../../../node_modules/vuetify/lib/composables/layout.js","../../../node_modules/vuetify/lib/composables/hotkey/key-aliases.js","../../../node_modules/vuetify/lib/composables/hotkey/hotkey-parsing.js","../../../node_modules/vuetify/lib/composables/rules/rules.js","../../../node_modules/vuetify/lib/framework.js","../../../node_modules/vuetify/lib/components/VApp/VApp.js","../../../node_modules/vuetify/lib/composables/tag.js","../../../node_modules/vuetify/lib/components/VToolbar/VToolbarTitle.js","../../../node_modules/vuetify/lib/components/transitions/createTransition.js","../../../node_modules/vuetify/lib/components/transitions/expand-transition.js","../../../node_modules/vuetify/lib/components/transitions/dialog-transition.js","../../../node_modules/vuetify/lib/components/transitions/index.js","../../../node_modules/vuetify/lib/components/VDefaultsProvider/VDefaultsProvider.js","../../../node_modules/vuetify/lib/composables/dimensions.js","../../../node_modules/vuetify/lib/components/VResponsive/VResponsive.js","../../../node_modules/vuetify/lib/composables/color.js","../../../node_modules/vuetify/lib/composables/rounded.js","../../../node_modules/vuetify/lib/composables/transition.js","../../../node_modules/vuetify/lib/directives/intersect/index.js","../../../node_modules/vuetify/lib/components/VImg/VImg.js","../../../node_modules/vuetify/lib/composables/border.js","../../../node_modules/vuetify/lib/composables/elevation.js","../../../node_modules/vuetify/lib/composables/location.js","../../../node_modules/vuetify/lib/components/VToolbar/VToolbar.js","../../../node_modules/vuetify/lib/composables/scroll.js","../../../node_modules/vuetify/lib/composables/ssrBoot.js","../../../node_modules/vuetify/lib/components/VAppBar/VAppBar.js","../../../node_modules/vuetify/lib/composables/density.js","../../../node_modules/vuetify/lib/composables/size.js","../../../node_modules/vuetify/lib/composables/variant.js","../../../node_modules/vuetify/lib/components/VBtnGroup/VBtnGroup.js","../../../node_modules/vuetify/lib/composables/group.js","../../../node_modules/vuetify/lib/components/VBtnToggle/VBtnToggle.js","../../../node_modules/vuetify/lib/components/VIcon/VIcon.js","../../../node_modules/vuetify/lib/composables/intersectionObserver.js","../../../node_modules/vuetify/lib/composables/reveal.js","../../../node_modules/vuetify/lib/components/VProgressCircular/VProgressCircular.js","../../../node_modules/vuetify/lib/components/VProgressLinear/chunks.js","../../../node_modules/vuetify/lib/components/VProgressLinear/VProgressLinear.js","../../../node_modules/vuetify/lib/composables/loader.js","../../../node_modules/vuetify/lib/composables/position.js","../../../node_modules/vuetify/lib/composables/router.js","../../../node_modules/vuetify/lib/composables/selectLink.js","../../../node_modules/vuetify/lib/directives/ripple/index.js","../../../node_modules/vuetify/lib/components/VBtn/VBtn.js","../../../node_modules/vuetify/lib/components/VAppBar/VAppBarNavIcon.js","../../../node_modules/vuetify/lib/components/VAppBar/VAppBarTitle.js","../../../node_modules/vuetify/lib/components/VAlert/VAlertTitle.js","../../../node_modules/vuetify/lib/composables/iconSizes.js","../../../node_modules/vuetify/lib/components/VAlert/VAlert.js","../../../node_modules/vuetify/lib/components/VThemeProvider/VThemeProvider.js","../../../node_modules/vuetify/lib/components/VBadge/VBadge.js","../../../node_modules/vuetify/lib/components/VAvatar/VAvatar.js","../../../node_modules/vuetify/lib/components/VLabel/VLabel.js","../../../node_modules/vuetify/lib/components/VSelectionControlGroup/VSelectionControlGroup.js","../../../node_modules/vuetify/lib/components/VSelectionControl/VSelectionControl.js","../../../node_modules/vuetify/lib/components/VCheckbox/VCheckboxBtn.js","../../../node_modules/vuetify/lib/components/VInput/InputIcon.js","../../../node_modules/vuetify/lib/components/VMessages/VMessages.js","../../../node_modules/vuetify/lib/composables/focus.js","../../../node_modules/vuetify/lib/composables/form.js","../../../node_modules/vuetify/lib/composables/validation.js","../../../node_modules/vuetify/lib/components/VInput/VInput.js","../../../node_modules/vuetify/lib/composables/forwardRefs.js","../../../node_modules/vuetify/lib/components/VCheckbox/VCheckbox.js","../../../node_modules/vuetify/lib/components/VSlideGroup/helpers.js","../../../node_modules/vuetify/lib/components/VSlideGroup/VSlideGroup.js","../../../node_modules/vuetify/lib/components/VChipGroup/VChipGroup.js","../../../node_modules/vuetify/lib/components/VChip/VChip.js","../../../node_modules/vuetify/lib/components/VDivider/VDivider.js","../../../node_modules/vuetify/lib/components/VList/list.js","../../../node_modules/vuetify/lib/composables/nested/activeStrategies.js","../../../node_modules/vuetify/lib/composables/nested/openStrategies.js","../../../node_modules/vuetify/lib/composables/nested/selectStrategies.js","../../../node_modules/vuetify/lib/composables/nested/nested.js","../../../node_modules/vuetify/lib/components/VList/VListGroup.js","../../../node_modules/vuetify/lib/components/VList/VListItemSubtitle.js","../../../node_modules/vuetify/lib/components/VList/VListItemTitle.js","../../../node_modules/vuetify/lib/components/VList/VListItem.js","../../../node_modules/vuetify/lib/components/VList/VListSubheader.js","../../../node_modules/vuetify/lib/components/VList/VListChildren.js","../../../node_modules/vuetify/lib/composables/list-items.js","../../../node_modules/vuetify/lib/components/VList/VList.js","../../../node_modules/vuetify/lib/components/VList/VListImg.js","../../../node_modules/vuetify/lib/components/VList/VListItemAction.js","../../../node_modules/vuetify/lib/components/VList/VListItemMedia.js","../../../node_modules/vuetify/lib/components/VMenu/shared.js","../../../node_modules/vuetify/lib/components/VOverlay/util/point.js","../../../node_modules/vuetify/lib/components/VOverlay/locationStrategies.js","../../../node_modules/vuetify/lib/components/VOverlay/requestNewFrame.js","../../../node_modules/vuetify/lib/components/VOverlay/scrollStrategies.js","../../../node_modules/vuetify/lib/composables/delay.js","../../../node_modules/vuetify/lib/components/VOverlay/useActivator.js","../../../node_modules/vuetify/lib/composables/focusTrap.js","../../../node_modules/vuetify/lib/composables/hydration.js","../../../node_modules/vuetify/lib/composables/lazy.js","../../../node_modules/vuetify/lib/composables/scopeId.js","../../../node_modules/vuetify/lib/composables/stack.js","../../../node_modules/vuetify/lib/composables/teleport.js","../../../node_modules/vuetify/lib/directives/click-outside/index.js","../../../node_modules/vuetify/lib/components/VOverlay/VOverlay.js","../../../node_modules/vuetify/lib/components/VMenu/VMenu.js","../../../node_modules/vuetify/lib/components/VSheet/VSheet.js","../../../node_modules/vuetify/lib/components/VCounter/VCounter.js","../../../node_modules/vuetify/lib/components/VField/VFieldLabel.js","../../../node_modules/vuetify/lib/components/VField/VField.js","../../../node_modules/vuetify/lib/composables/autocomplete.js","../../../node_modules/vuetify/lib/composables/autofocus.js","../../../node_modules/vuetify/lib/components/VTextField/VTextField.js","../../../node_modules/vuetify/lib/components/VVirtualScroll/VVirtualScrollItem.js","../../../node_modules/vuetify/lib/composables/virtual.js","../../../node_modules/vuetify/lib/components/VVirtualScroll/VVirtualScroll.js","../../../node_modules/@vuetify/v0/dist/createTrinity-DJROWgXU.mjs","../../../node_modules/@vuetify/v0/dist/createPlugin-YYkwbiUd.mjs","../../../node_modules/@vuetify/v0/dist/adapter-B5mEUP5W.mjs","../../../node_modules/@vuetify/v0/dist/v0-CLrKU-7h.mjs","../../../node_modules/@vuetify/v0/dist/useLogger-BIAZ6Iyu.mjs","../../../node_modules/@vuetify/v0/dist/createRegistry-COW_AjH1.mjs","../../../node_modules/@vuetify/v0/dist/createSelection-DQNMDMJj.mjs","../../../node_modules/@vuetify/v0/dist/createSingle-BcLDttSx.mjs","../../../node_modules/@vuetify/v0/dist/createTokens-D-xtNt9m.mjs","../../../node_modules/@vuetify/v0/dist/toArray-DCZRopC6.mjs","../../../node_modules/@vuetify/v0/dist/useEventListener-C1aOe4Iy.mjs","../../../node_modules/@vuetify/v0/dist/adapter-B6R54NMr.mjs","../../../node_modules/@vuetify/v0/dist/v0-CKU1z3Az.mjs","../../../node_modules/@vuetify/v0/dist/useTheme-Dh-EW4wo.mjs","../../../node_modules/@vuetify/v0/dist/composables-DEmU2w8H.mjs","../../../node_modules/vuetify/lib/labs/VHighlight/VHighlight.js","../../../node_modules/vuetify/lib/components/VSelect/useAutofill.js","../../../node_modules/vuetify/lib/components/VSelect/useFocusRepair.js","../../../node_modules/vuetify/lib/components/VSelect/useScrolling.js","../../../node_modules/vuetify/lib/composables/openOnFocus.js","../../../node_modules/vuetify/lib/components/VSelect/useSelectionMenu.js","../../../node_modules/vuetify/lib/composables/focusGroups.js","../../../node_modules/vuetify/lib/composables/filter.js","../../../node_modules/vuetify/lib/composables/menuActivator.js","../../../node_modules/vuetify/lib/components/VSelect/VSelect.js","../../../node_modules/vuetify/lib/components/VAutocomplete/VAutocomplete.js","../../../node_modules/vuetify/lib/components/VBanner/VBannerActions.js","../../../node_modules/vuetify/lib/components/VBanner/VBannerText.js","../../../node_modules/vuetify/lib/components/VBanner/VBanner.js","../../../node_modules/vuetify/lib/components/VBottomNavigation/VBottomNavigation.js","../../../node_modules/vuetify/lib/components/VDialog/VDialog.js","../../../node_modules/vuetify/lib/components/VBottomSheet/VBottomSheet.js","../../../node_modules/vuetify/lib/components/VBreadcrumbs/VBreadcrumbsDivider.js","../../../node_modules/vuetify/lib/components/VBreadcrumbs/VBreadcrumbsItem.js","../../../node_modules/vuetify/lib/components/VBreadcrumbs/VBreadcrumbs.js","../../../node_modules/vuetify/lib/components/VIconBtn/VIconBtn.js","../../../node_modules/vuetify/lib/components/VCalendar/util/dateTimeUtils.js","../../../node_modules/vuetify/lib/components/VCalendar/util/timestamp.js","../../../node_modules/vuetify/lib/components/VCalendar/composables/times.js","../../../node_modules/vuetify/lib/components/VCalendar/composables/calendarBase.js","../../../node_modules/vuetify/lib/components/VCalendar/composables/calendarWithIntervals.js","../../../node_modules/vuetify/lib/components/VCalendar/composables/intervalHighlight.js","../../../node_modules/vuetify/lib/directives/resize/index.js","../../../node_modules/vuetify/lib/components/VCalendar/VCalendarDaily.js","../../../node_modules/vuetify/lib/components/VCalendar/util/parser.js","../../../node_modules/vuetify/lib/components/VCalendar/VCalendarCategory.js","../../../node_modules/vuetify/lib/components/VCalendar/VCalendarWeekly.js","../../../node_modules/vuetify/lib/components/VCalendar/modes/common.js","../../../node_modules/vuetify/lib/components/VCalendar/modes/column.js","../../../node_modules/vuetify/lib/components/VCalendar/modes/stack.js","../../../node_modules/vuetify/lib/components/VCalendar/modes/index.js","../../../node_modules/vuetify/lib/components/VCalendar/util/events.js","../../../node_modules/vuetify/lib/components/VCalendar/composables/calendarWithEvents.js","../../../node_modules/vuetify/lib/components/VCalendar/VCalendar.js","../../../node_modules/vuetify/lib/components/VCard/VCardActions.js","../../../node_modules/vuetify/lib/components/VCard/VCardSubtitle.js","../../../node_modules/vuetify/lib/components/VCard/VCardTitle.js","../../../node_modules/vuetify/lib/components/VCard/VCardItem.js","../../../node_modules/vuetify/lib/components/VCard/VCardText.js","../../../node_modules/vuetify/lib/components/VCard/VCard.js","../../../node_modules/vuetify/lib/directives/touch/index.js","../../../node_modules/vuetify/lib/components/VWindow/VWindow.js","../../../node_modules/vuetify/lib/components/VCarousel/VCarousel.js","../../../node_modules/vuetify/lib/components/VWindow/VWindowItem.js","../../../node_modules/vuetify/lib/components/VCarousel/VCarouselItem.js","../../../node_modules/vuetify/lib/components/VCode/index.js","../../../node_modules/vuetify/lib/components/VColorPicker/VColorPickerCanvas.js","../../../node_modules/vuetify/lib/components/VColorPicker/util/index.js","../../../node_modules/vuetify/lib/components/VColorPicker/VColorPickerEdit.js","../../../node_modules/vuetify/lib/components/VSlider/slider.js","../../../node_modules/vuetify/lib/components/VSlider/VSliderThumb.js","../../../node_modules/vuetify/lib/components/VSlider/VSliderTrack.js","../../../node_modules/vuetify/lib/components/VSlider/VSlider.js","../../../node_modules/vuetify/lib/components/VColorPicker/VColorPickerPreview.js","../../../node_modules/vuetify/lib/util/colors.js","../../../node_modules/vuetify/lib/components/VColorPicker/VColorPickerSwatches.js","../../../node_modules/vuetify/lib/components/VPicker/VPickerTitle.js","../../../node_modules/vuetify/lib/components/VPicker/VPicker.js","../../../node_modules/vuetify/lib/components/VColorPicker/VColorPicker.js","../../../node_modules/vuetify/lib/components/VConfirmEdit/VConfirmEdit.js","../../../node_modules/vuetify/lib/components/VColorInput/VColorInput.js","../../../node_modules/vuetify/lib/components/VCombobox/VCombobox.js","../../../node_modules/vuetify/lib/components/VDataTable/composables/expand.js","../../../node_modules/vuetify/lib/components/VDataTable/composables/group.js","../../../node_modules/vuetify/lib/components/VDataTable/composables/options.js","../../../node_modules/vuetify/lib/components/VDataTable/composables/paginate.js","../../../node_modules/vuetify/lib/components/VDataTable/composables/select.js","../../../node_modules/vuetify/lib/components/VDataTable/composables/sort.js","../../../node_modules/vuetify/lib/components/VDataIterator/composables/items.js","../../../node_modules/vuetify/lib/components/VDataIterator/VDataIterator.js","../../../node_modules/vuetify/lib/composables/refs.js","../../../node_modules/vuetify/lib/components/VPagination/VPagination.js","../../../node_modules/vuetify/lib/components/VDataTable/VDataTableFooter.js","../../../node_modules/vuetify/lib/components/VDataTable/VDataTableColumn.js","../../../node_modules/vuetify/lib/components/VDataTable/composables/headers.js","../../../node_modules/vuetify/lib/components/VDataTable/composables/loading.js","../../../node_modules/vuetify/lib/components/VDataTable/VDataTableHeaders.js","../../../node_modules/vuetify/lib/components/VDataTable/VDataTableGroupHeaderRow.js","../../../node_modules/vuetify/lib/components/VDataTable/VDataTableRow.js","../../../node_modules/vuetify/lib/components/VDataTable/VDataTableRows.js","../../../node_modules/vuetify/lib/components/VTable/VTable.js","../../../node_modules/vuetify/lib/components/VDataTable/composables/items.js","../../../node_modules/vuetify/lib/components/VDataTable/VDataTable.js","../../../node_modules/vuetify/lib/components/VDataTable/VDataTableVirtual.js","../../../node_modules/vuetify/lib/components/VDataTable/VDataTableServer.js","../../../node_modules/vuetify/lib/components/VGrid/VContainer.js","../../../node_modules/vuetify/lib/components/VGrid/VCol.js","../../../node_modules/vuetify/lib/components/VGrid/VRow.js","../../../node_modules/vuetify/lib/components/VGrid/VSpacer.js","../../../node_modules/vuetify/lib/components/VDatePicker/VDatePickerControls.js","../../../node_modules/vuetify/lib/components/VDatePicker/VDatePickerHeader.js","../../../node_modules/vuetify/lib/composables/calendar.js","../../../node_modules/vuetify/lib/composables/virtualFocus.js","../../../node_modules/vuetify/lib/composables/gridSelection.js","../../../node_modules/vuetify/lib/composables/rangePicker.js","../../../node_modules/vuetify/lib/components/VDatePicker/VDatePickerMonth.js","../../../node_modules/vuetify/lib/components/VDatePicker/VDatePickerMonths.js","../../../node_modules/vuetify/lib/components/VDatePicker/VDatePickerYears.js","../../../node_modules/vuetify/lib/components/VDatePicker/VDatePicker.js","../../../node_modules/vuetify/lib/composables/segmentedMask/segmentedMask.js","../../../node_modules/vuetify/lib/composables/segmentedMask/formatHint.js","../../../node_modules/vuetify/lib/composables/segmentedMask/edit.js","../../../node_modules/vuetify/lib/composables/segmentedMask/presets.js","../../../node_modules/vuetify/lib/composables/dateFormat.js","../../../node_modules/vuetify/lib/components/VDateInput/VDateInput.js","../../../node_modules/vuetify/lib/components/VEmptyState/VEmptyState.js","../../../node_modules/vuetify/lib/components/VExpansionPanel/shared.js","../../../node_modules/vuetify/lib/components/VExpansionPanel/VExpansionPanelText.js","../../../node_modules/vuetify/lib/components/VExpansionPanel/VExpansionPanelTitle.js","../../../node_modules/vuetify/lib/components/VExpansionPanel/VExpansionPanel.js","../../../node_modules/vuetify/lib/components/VExpansionPanel/VExpansionPanels.js","../../../node_modules/vuetify/lib/components/VFab/VFab.js","../../../node_modules/vuetify/lib/composables/fileDrop.js","../../../node_modules/vuetify/lib/composables/fileFilter.js","../../../node_modules/vuetify/lib/components/VFileInput/VFileInput.js","../../../node_modules/vuetify/lib/components/VFileUpload/VFileUploadItem.js","../../../node_modules/vuetify/lib/components/VFileUpload/fileKey.js","../../../node_modules/vuetify/lib/components/VFileUpload/VFileUploadDropzone.js","../../../node_modules/vuetify/lib/components/VFileUpload/VFileUploadList.js","../../../node_modules/vuetify/lib/components/VFileUpload/VFileUpload.js","../../../node_modules/vuetify/lib/components/VFooter/VFooter.js","../../../node_modules/vuetify/lib/components/VForm/VForm.js","../../../node_modules/vuetify/lib/components/VKbd/VKbd.js","../../../node_modules/vuetify/lib/components/VHotkey/VHotkey.js","../../../node_modules/vuetify/lib/components/VHover/VHover.js","../../../node_modules/vuetify/lib/components/VInfiniteScroll/VInfiniteScroll.js","../../../node_modules/vuetify/lib/components/VItemGroup/VItemGroup.js","../../../node_modules/vuetify/lib/components/VItemGroup/VItem.js","../../../node_modules/vuetify/lib/components/VLayout/VLayout.js","../../../node_modules/vuetify/lib/components/VLayout/VLayoutItem.js","../../../node_modules/vuetify/lib/components/VLazy/VLazy.js","../../../node_modules/vuetify/lib/components/VLocaleProvider/VLocaleProvider.js","../../../node_modules/vuetify/lib/components/VMain/VMain.js","../../../node_modules/vuetify/lib/components/VNavigationDrawer/sticky.js","../../../node_modules/vuetify/lib/composables/touch.js","../../../node_modules/vuetify/lib/components/VNavigationDrawer/touch.js","../../../node_modules/vuetify/lib/components/VNavigationDrawer/VNavigationDrawer.js","../../../node_modules/vuetify/lib/components/VNoSsr/VNoSsr.js","../../../node_modules/vuetify/lib/components/VNumberInput/format.js","../../../node_modules/vuetify/lib/components/VNumberInput/hold.js","../../../node_modules/vuetify/lib/components/VNumberInput/typing.js","../../../node_modules/vuetify/lib/components/VNumberInput/VNumberInput.js","../../../node_modules/vuetify/lib/components/VOtpInput/shared.js","../../../node_modules/vuetify/lib/components/VOtpInput/VOtpField.js","../../../node_modules/vuetify/lib/components/VOtpInput/VOtpGroup.js","../../../node_modules/vuetify/lib/components/VOtpInput/VOtpSeparator.js","../../../node_modules/vuetify/lib/components/VOtpInput/useOtpInput.js","../../../node_modules/vuetify/lib/components/VOtpInput/VOtpInput.js","../../../node_modules/vuetify/lib/components/VParallax/VParallax.js","../../../node_modules/vuetify/lib/components/VPullToRefresh/VPullToRefresh.js","../../../node_modules/vuetify/lib/components/VRadio/VRadio.js","../../../node_modules/vuetify/lib/components/VRadioGroup/VRadioGroup.js","../../../node_modules/vuetify/lib/components/VRangeSlider/VRangeSlider.js","../../../node_modules/vuetify/lib/components/VRating/VRating.js","../../../node_modules/vuetify/lib/components/VSkeletonLoader/VSkeletonLoader.js","../../../node_modules/vuetify/lib/components/VSlideGroup/VSlideGroupItem.js","../../../node_modules/vuetify/lib/components/VSnackbarQueue/queue.js","../../../node_modules/vuetify/lib/components/VSnackbar/VSnackbar.js","../../../node_modules/vuetify/lib/composables/documentVisibility.js","../../../node_modules/vuetify/lib/components/VSnackbarQueue/VSnackbarQueue.js","../../../node_modules/vuetify/lib/components/VTooltip/VTooltip.js","../../../node_modules/vuetify/lib/components/VSparkline/VSparklineTooltip.js","../../../node_modules/vuetify/lib/components/VSparkline/util/monotone.js","../../../node_modules/vuetify/lib/components/VSparkline/util/path.js","../../../node_modules/vuetify/lib/components/VSparkline/util/line.js","../../../node_modules/vuetify/lib/components/VSparkline/VBarline.js","../../../node_modules/vuetify/lib/components/VSparkline/VTrendline.js","../../../node_modules/vuetify/lib/components/VSparkline/VSparkline.js","../../../node_modules/vuetify/lib/components/VSpeedDial/VSpeedDial.js","../../../node_modules/vuetify/lib/components/VStepper/shared.js","../../../node_modules/vuetify/lib/components/VStepper/VStepperActions.js","../../../node_modules/vuetify/lib/components/VStepper/VStepperHeader.js","../../../node_modules/vuetify/lib/components/VStepper/VStepperItem.js","../../../node_modules/vuetify/lib/components/VStepper/VStepperWindow.js","../../../node_modules/vuetify/lib/components/VStepper/VStepperWindowItem.js","../../../node_modules/vuetify/lib/components/VStepper/VStepper.js","../../../node_modules/vuetify/lib/components/VStepperVertical/VStepperVerticalActions.js","../../../node_modules/vuetify/lib/components/VStepperVertical/VStepperVerticalItem.js","../../../node_modules/vuetify/lib/components/VStepperVertical/VStepperVertical.js","../../../node_modules/vuetify/lib/components/VSwitch/VSwitch.js","../../../node_modules/vuetify/lib/components/VSystemBar/VSystemBar.js","../../../node_modules/vuetify/lib/components/VTabs/shared.js","../../../node_modules/vuetify/lib/components/VTabs/VTab.js","../../../node_modules/vuetify/lib/components/VTabs/VTabsWindow.js","../../../node_modules/vuetify/lib/components/VTabs/VTabsWindowItem.js","../../../node_modules/vuetify/lib/components/VTabs/VTabs.js","../../../node_modules/vuetify/lib/components/VTextarea/VTextarea.js","../../../node_modules/vuetify/lib/components/VTimeline/VTimelineDivider.js","../../../node_modules/vuetify/lib/components/VTimeline/VTimelineItem.js","../../../node_modules/vuetify/lib/components/VTimeline/VTimeline.js","../../../node_modules/vuetify/lib/components/VTimePicker/VTimePickerClock.js","../../../node_modules/vuetify/lib/components/VTimePicker/VTimePickerField.js","../../../node_modules/vuetify/lib/components/VTimePicker/util.js","../../../node_modules/vuetify/lib/components/VTimePicker/useTimeValidation.js","../../../node_modules/vuetify/lib/components/VTimePicker/VTimePickerControls.js","../../../node_modules/vuetify/lib/components/VTimePicker/VTimePicker.js","../../../node_modules/vuetify/lib/components/VToolbar/VToolbarItems.js","../../../node_modules/vuetify/lib/components/VTreeview/VTreeviewGroup.js","../../../node_modules/vuetify/lib/components/VTreeview/shared.js","../../../node_modules/vuetify/lib/components/VTreeview/VTreeviewItem.js","../../../node_modules/vuetify/lib/components/VTreeview/useTreeviewKeyboard.js","../../../node_modules/vuetify/lib/components/VTreeview/VTreeviewChildren.js","../../../node_modules/vuetify/lib/components/VTreeview/open.js","../../../node_modules/vuetify/lib/components/VTreeview/VTreeview.js","../../../node_modules/vuetify/lib/components/VValidation/VValidation.js","../../../node_modules/vuetify/lib/components/index.js","../../../node_modules/vuetify/lib/directives/mutate/index.js","../../../node_modules/vuetify/lib/directives/scroll/index.js","../../../node_modules/vuetify/lib/composables/directiveComponent.js","../../../node_modules/vuetify/lib/directives/tooltip/index.js","../../../node_modules/vuetify/lib/directives/index.js","../../../node_modules/vuetify/lib/iconsets/mdi-svg.js","../../../node_modules/vuetify/lib/styles/main.css?inline","../../javascript/plugins/vuetify.js","../../../node_modules/pinia-plugin-persistedstate/dist/index.js","../../javascript/plugins/pinia.js","../../javascript/apps/users/index.js","../../javascript/users.js"],"sourcesContent":["/**\n* @vue/shared v3.5.43\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n// @__NO_SIDE_EFFECTS__\nfunction makeMap(str) {\n const map = /* @__PURE__ */ Object.create(null);\n for (const key of str.split(\",\")) map[key] = 1;\n return (val) => val in map;\n}\n\nconst EMPTY_OBJ = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze({}) : {};\nconst EMPTY_ARR = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze([]) : [];\nconst NOOP = () => {\n};\nconst NO = () => false;\nconst isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter\n(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);\nconst isModelListener = (key) => key.startsWith(\"onUpdate:\");\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n const i = arr.indexOf(el);\n if (i > -1) {\n arr.splice(i, 1);\n }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === \"[object Map]\";\nconst isSet = (val) => toTypeString(val) === \"[object Set]\";\nconst isDate = (val) => toTypeString(val) === \"[object Date]\";\nconst isRegExp = (val) => toTypeString(val) === \"[object RegExp]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isPromise = (val) => {\n return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\nconst isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nconst isReservedProp = /* @__PURE__ */ makeMap(\n // the leading comma is intentional so empty string \"\" is also included\n \",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"\n);\nconst isBuiltInDirective = /* @__PURE__ */ makeMap(\n \"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"\n);\nconst cacheStringFunction = (fn) => {\n const cache = /* @__PURE__ */ Object.create(null);\n return ((str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n });\n};\nconst camelizeRE = /-\\w/g;\nconst camelize = cacheStringFunction(\n (str) => {\n return str.replace(camelizeRE, (c) => c.slice(1).toUpperCase());\n }\n);\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst capitalize = cacheStringFunction((str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n});\nconst toHandlerKey = cacheStringFunction(\n (str) => {\n const s = str ? `on${capitalize(str)}` : ``;\n return s;\n }\n);\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, ...arg) => {\n for (let i = 0; i < fns.length; i++) {\n fns[i](...arg);\n }\n};\nconst def = (obj, key, value, writable = false) => {\n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: false,\n writable,\n value\n });\n};\nconst looseToNumber = (val) => {\n const n = parseFloat(val);\n return isNaN(n) ? val : n;\n};\nconst toNumber = (val) => {\n const n = isString(val) ? Number(val) : NaN;\n return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n return identRE.test(name) ? `__props.${name}` : `__props[${JSON.stringify(name)}]`;\n}\nfunction genCacheKey(source, options) {\n return source + JSON.stringify(\n options,\n (_, val) => typeof val === \"function\" ? val.toString() : val\n );\n}\n\nconst PatchFlags = {\n \"TEXT\": 1,\n \"1\": \"TEXT\",\n \"CLASS\": 2,\n \"2\": \"CLASS\",\n \"STYLE\": 4,\n \"4\": \"STYLE\",\n \"PROPS\": 8,\n \"8\": \"PROPS\",\n \"FULL_PROPS\": 16,\n \"16\": \"FULL_PROPS\",\n \"NEED_HYDRATION\": 32,\n \"32\": \"NEED_HYDRATION\",\n \"STABLE_FRAGMENT\": 64,\n \"64\": \"STABLE_FRAGMENT\",\n \"KEYED_FRAGMENT\": 128,\n \"128\": \"KEYED_FRAGMENT\",\n \"UNKEYED_FRAGMENT\": 256,\n \"256\": \"UNKEYED_FRAGMENT\",\n \"NEED_PATCH\": 512,\n \"512\": \"NEED_PATCH\",\n \"DYNAMIC_SLOTS\": 1024,\n \"1024\": \"DYNAMIC_SLOTS\",\n \"DEV_ROOT_FRAGMENT\": 2048,\n \"2048\": \"DEV_ROOT_FRAGMENT\",\n \"CACHED\": -1,\n \"-1\": \"CACHED\",\n \"BAIL\": -2,\n \"-2\": \"BAIL\"\n};\nconst PatchFlagNames = {\n [1]: `TEXT`,\n [2]: `CLASS`,\n [4]: `STYLE`,\n [8]: `PROPS`,\n [16]: `FULL_PROPS`,\n [32]: `NEED_HYDRATION`,\n [64]: `STABLE_FRAGMENT`,\n [128]: `KEYED_FRAGMENT`,\n [256]: `UNKEYED_FRAGMENT`,\n [512]: `NEED_PATCH`,\n [1024]: `DYNAMIC_SLOTS`,\n [2048]: `DEV_ROOT_FRAGMENT`,\n [-1]: `CACHED`,\n [-2]: `BAIL`\n};\n\nconst ShapeFlags = {\n \"ELEMENT\": 1,\n \"1\": \"ELEMENT\",\n \"FUNCTIONAL_COMPONENT\": 2,\n \"2\": \"FUNCTIONAL_COMPONENT\",\n \"STATEFUL_COMPONENT\": 4,\n \"4\": \"STATEFUL_COMPONENT\",\n \"TEXT_CHILDREN\": 8,\n \"8\": \"TEXT_CHILDREN\",\n \"ARRAY_CHILDREN\": 16,\n \"16\": \"ARRAY_CHILDREN\",\n \"SLOTS_CHILDREN\": 32,\n \"32\": \"SLOTS_CHILDREN\",\n \"TELEPORT\": 64,\n \"64\": \"TELEPORT\",\n \"SUSPENSE\": 128,\n \"128\": \"SUSPENSE\",\n \"COMPONENT_SHOULD_KEEP_ALIVE\": 256,\n \"256\": \"COMPONENT_SHOULD_KEEP_ALIVE\",\n \"COMPONENT_KEPT_ALIVE\": 512,\n \"512\": \"COMPONENT_KEPT_ALIVE\",\n \"COMPONENT\": 6,\n \"6\": \"COMPONENT\"\n};\n\nconst SlotFlags = {\n \"STABLE\": 1,\n \"1\": \"STABLE\",\n \"DYNAMIC\": 2,\n \"2\": \"DYNAMIC\",\n \"FORWARDED\": 3,\n \"3\": \"FORWARDED\"\n};\nconst slotFlagsText = {\n [1]: \"STABLE\",\n [2]: \"DYNAMIC\",\n [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_ALLOWED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol\";\nconst isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED);\nconst isGloballyWhitelisted = isGloballyAllowed;\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n start = Math.max(0, Math.min(start, source.length));\n end = Math.max(0, Math.min(end, source.length));\n if (start > end) return \"\";\n let lines = source.split(/(\\r?\\n)/);\n const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n lines = lines.filter((_, idx) => idx % 2 === 0);\n let count = 0;\n const res = [];\n for (let i = 0; i < lines.length; i++) {\n count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);\n if (count >= start) {\n for (let j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length) continue;\n const line = j + 1;\n res.push(\n `${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`\n );\n const lineLength = lines[j].length;\n const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;\n if (j === i) {\n const pad = start - (count - (lineLength + newLineSeqLength));\n const length = Math.max(\n 1,\n end > count ? lineLength - pad : end - start\n );\n res.push(` | ` + \" \".repeat(pad) + \"^\".repeat(length));\n } else if (j > i) {\n if (end > count) {\n const length = Math.max(Math.min(end - count, lineLength), 1);\n res.push(` | ` + \"^\".repeat(length));\n }\n count += lineLength + newLineSeqLength;\n }\n }\n break;\n }\n }\n return res.join(\"\\n\");\n}\n\nfunction normalizeStyle(value) {\n if (isArray(value)) {\n const res = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);\n if (normalized) {\n for (const key in normalized) {\n res[key] = normalized[key];\n }\n }\n }\n return res;\n } else if (isString(value) || isObject(value)) {\n return value;\n }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\"(?:[^\"\\\\]|\\\\[^])*\"|'(?:[^'\\\\]|\\\\[^])*'|\\\\[^]|\\/\\*[^]*?\\*\\//g;\nfunction parseStringStyle(cssText) {\n const ret = {};\n cssText.replace(styleCommentRE, (match) => match.startsWith(\"/*\") ? \"\" : match).split(listDelimiterRE).forEach((item) => {\n if (item) {\n const tmp = item.split(propertyDelimiterRE);\n tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return ret;\n}\nfunction stringifyStyle(styles) {\n if (!styles) return \"\";\n if (isString(styles)) return styles;\n let ret = \"\";\n for (const key in styles) {\n const value = styles[key];\n if (isString(value) || typeof value === \"number\") {\n const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n ret += `${normalizedKey}:${value};`;\n }\n }\n return ret;\n}\nfunction normalizeClass(value) {\n let res = \"\";\n if (isString(value)) {\n res = value;\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const normalized = normalizeClass(value[i]);\n if (normalized) {\n res += normalized + \" \";\n }\n }\n } else if (isObject(value)) {\n for (const name in value) {\n if (value[name]) {\n res += name + \" \";\n }\n }\n }\n return res.trim();\n}\nfunction normalizeProps(props) {\n if (!props) return null;\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (style) {\n props.style = normalizeStyle(style);\n }\n return props;\n}\n\nconst HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\nconst SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\nconst MATH_TAGS = \"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\";\nconst VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\nconst isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\nconst isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\nconst isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS);\nconst isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\nconst isBooleanAttr = /* @__PURE__ */ makeMap(\n specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\nfunction includeBooleanAttr(value) {\n return !!value || value === \"\";\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u000d\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n if (attrValidationCache.hasOwnProperty(name)) {\n return attrValidationCache[name];\n }\n const isUnsafe = unsafeAttrCharRE.test(name);\n if (isUnsafe) {\n console.error(`unsafe attribute name: ${name}`);\n }\n return attrValidationCache[name] = !isUnsafe;\n}\nconst propsToAttrMap = {\n acceptCharset: \"accept-charset\",\n className: \"class\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\"\n};\nconst isKnownHtmlAttr = /* @__PURE__ */ makeMap(\n `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`\n);\nconst isKnownSvgAttr = /* @__PURE__ */ makeMap(\n `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\nconst isKnownMathMLAttr = /* @__PURE__ */ makeMap(\n `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns`\n);\nfunction isRenderableAttrValue(value) {\n if (value == null) {\n return false;\n }\n const type = typeof value;\n return type === \"string\" || type === \"number\" || type === \"boolean\";\n}\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n const str = \"\" + string;\n const match = escapeRE.exec(str);\n if (!match) {\n return str;\n }\n let html = \"\";\n let escaped;\n let index;\n let lastIndex = 0;\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escaped = \""\";\n break;\n case 38:\n escaped = \"&\";\n break;\n case 39:\n escaped = \"'\";\n break;\n case 60:\n escaped = \"<\";\n break;\n case 62:\n escaped = \">\";\n break;\n default:\n continue;\n }\n if (lastIndex !== index) {\n html += str.slice(lastIndex, index);\n }\n lastIndex = index + 1;\n html += escaped;\n }\n return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^(?:-?>)+||--!>|?@[\\\\\\]^`{|}~]/g;\nfunction getEscapedCssVarName(key, doubleEscape) {\n return key.replace(\n cssVarNameEscapeSymbolsRE,\n (s) => doubleEscape ? s === '\"' ? '\\\\\\\\\\\\\"' : `\\\\\\\\${s}` : `\\\\${s}`\n );\n}\n\nfunction looseCompareArrays(a, b, seen) {\n if (a.length !== b.length) return false;\n let equal = true;\n for (let i = 0; equal && i < a.length; i++) {\n equal = looseEqual(a[i], b[i], seen);\n }\n return equal;\n}\nfunction looseCompareCollections(a, b, seen) {\n if (a.size !== b.size) return false;\n const candidates = Array.from(b);\n const matched = new Uint8Array(candidates.length);\n for (const item of a) {\n let index = -1;\n for (let i = 0; i < candidates.length; i++) {\n if (!matched[i] && looseEqual(item, candidates[i], seen)) {\n index = i;\n break;\n }\n }\n if (index < 0) return false;\n matched[index] = 1;\n }\n return true;\n}\nfunction looseCompareObjects(a, b, seen) {\n let aValidType = isMap(a);\n let bValidType = isMap(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? looseCompareCollections(a, b, seen) : false;\n }\n aValidType = isSet(a);\n bValidType = isSet(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? looseCompareCollections(a, b, seen) : false;\n }\n const aKeysCount = Object.keys(a).length;\n const bKeysCount = Object.keys(b).length;\n if (aKeysCount !== bKeysCount) {\n return false;\n }\n for (const key in a) {\n const aHasKey = a.hasOwnProperty(key);\n const bHasKey = b.hasOwnProperty(key);\n if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key], seen)) {\n return false;\n }\n }\n return String(a) === String(b);\n}\nfunction looseCompareNested(a, b, seen, compare) {\n if (!seen) {\n seen = [/* @__PURE__ */ new Map(), /* @__PURE__ */ new Map()];\n }\n const [seenA, seenB] = seen;\n if (seenA.has(a) || seenB.has(b)) {\n return seenA.get(a) === b && seenB.get(b) === a;\n }\n seenA.set(a, b);\n seenB.set(b, a);\n const equal = compare(a, b, seen);\n seenA.delete(a);\n seenB.delete(b);\n return equal;\n}\nfunction looseEqual(a, b, seen) {\n if (a === b) return true;\n let aValidType = isDate(a);\n let bValidType = isDate(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n }\n aValidType = isSymbol(a);\n bValidType = isSymbol(b);\n if (aValidType || bValidType) {\n return a === b;\n }\n aValidType = isArray(a);\n bValidType = isArray(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? looseCompareNested(a, b, seen, looseCompareArrays) : false;\n }\n aValidType = isObject(a);\n bValidType = isObject(b);\n if (aValidType || bValidType) {\n if (!aValidType || !bValidType) {\n return false;\n }\n return looseCompareNested(a, b, seen, looseCompareObjects);\n }\n return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n return arr.findIndex((item) => looseEqual(item, val));\n}\n\nconst isRef = (val) => {\n return !!(val && val[\"__v_isRef\"] === true);\n};\nconst toDisplayString = (val) => {\n return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n if (isRef(val)) {\n return replacer(_key, val.value);\n } else if (isMap(val)) {\n return {\n [`Map(${val.size})`]: [...val.entries()].reduce(\n (entries, [key, val2], i) => {\n entries[stringifySymbol(key, i) + \" =>\"] = val2;\n return entries;\n },\n {}\n )\n };\n } else if (isSet(val)) {\n return {\n [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))\n };\n } else if (isSymbol(val)) {\n return stringifySymbol(val);\n } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n return String(val);\n }\n return val;\n};\nconst stringifySymbol = (v, i = \"\") => {\n var _a;\n return (\n // Symbol.description in es2019+ so we need to cast here to pass\n // the lib: es2016 check\n isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v\n );\n};\n\nfunction normalizeCssVarValue(value) {\n if (value == null) {\n return \"initial\";\n }\n if (typeof value === \"string\") {\n return value === \"\" ? \" \" : value;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n console.warn(\n \"[Vue warn] Invalid value used for CSS binding. Expected a string or a finite number but received:\",\n value\n );\n }\n }\n return String(value);\n}\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, PatchFlags, ShapeFlags, SlotFlags, camelize, capitalize, cssVarNameEscapeSymbolsRE, def, escapeHtml, escapeHtmlComment, extend, genCacheKey, genPropsAccessExp, generateCodeFrame, getEscapedCssVarName, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyAllowed, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownMathMLAttr, isKnownSvgAttr, isMap, isMathMLTag, isModelListener, isObject, isOn, isPlainObject, isPromise, isRegExp, isRenderableAttrValue, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, looseToNumber, makeMap, normalizeClass, normalizeCssVarValue, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n","/**\n* @vue/reactivity v3.5.43\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { extend, hasChanged, isArray, isIntegerKey, isSymbol, isMap, hasOwn, isObject, makeMap, capitalize, toRawType, def, isFunction, EMPTY_OBJ, isSet, isPlainObject, remove, NOOP } from '@vue/shared';\n\nfunction warn(msg, ...args) {\n console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n // TODO isolatedDeclarations \"__v_skip\"\n constructor(detached = false) {\n this.detached = detached;\n /**\n * @internal\n */\n this._active = true;\n /**\n * @internal track `on` calls, allow `on` call multiple times\n */\n this._on = 0;\n /**\n * @internal\n */\n this.effects = [];\n /**\n * @internal\n */\n this.cleanups = [];\n this._isPaused = false;\n this._warnOnRun = true;\n this.__v_skip = true;\n if (!detached && activeEffectScope) {\n if (activeEffectScope.active) {\n this.parent = activeEffectScope;\n this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(\n this\n ) - 1;\n } else {\n this._active = false;\n this._warnOnRun = false;\n }\n }\n }\n get active() {\n return this._active;\n }\n pause() {\n if (this._active) {\n this._isPaused = true;\n let i, l;\n if (this.scopes) {\n const scopes = this.scopes.slice();\n for (i = 0, l = scopes.length; i < l; i++) {\n scopes[i].pause();\n }\n }\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].pause();\n }\n }\n }\n /**\n * Resumes the effect scope, including all child scopes and effects.\n */\n resume() {\n if (this._active) {\n if (this._isPaused) {\n this._isPaused = false;\n let i, l;\n if (this.scopes) {\n const scopes = this.scopes.slice();\n for (i = 0, l = scopes.length; i < l; i++) {\n scopes[i].resume();\n }\n }\n const effects = this.effects.slice();\n for (i = 0, l = effects.length; i < l; i++) {\n effects[i].resume();\n }\n }\n }\n }\n run(fn) {\n if (this._active) {\n const currentEffectScope = activeEffectScope;\n try {\n activeEffectScope = this;\n return fn();\n } finally {\n activeEffectScope = currentEffectScope;\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && this._warnOnRun) {\n warn(`cannot run an inactive effect scope.`);\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n on() {\n if (++this._on === 1) {\n this.prevScope = activeEffectScope;\n activeEffectScope = this;\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n off() {\n if (this._on > 0 && --this._on === 0) {\n if (activeEffectScope === this) {\n activeEffectScope = this.prevScope;\n } else {\n let current = activeEffectScope;\n while (current) {\n if (current.prevScope === this) {\n current.prevScope = this.prevScope;\n break;\n }\n current = current.prevScope;\n }\n }\n this.prevScope = void 0;\n }\n }\n stop(fromParent) {\n if (this._active) {\n this._active = false;\n let i, l;\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].stop();\n }\n this.effects.length = 0;\n for (i = 0, l = this.cleanups.length; i < l; i++) {\n this.cleanups[i]();\n }\n this.cleanups.length = 0;\n if (this.scopes) {\n const scopes = this.scopes.slice();\n for (i = 0, l = scopes.length; i < l; i++) {\n scopes[i].stop(true);\n }\n this.scopes.length = 0;\n }\n if (!this.detached && this.parent && !fromParent) {\n const last = this.parent.scopes.pop();\n if (last && last !== this) {\n this.parent.scopes[this.index] = last;\n last.index = this.index;\n }\n }\n this.parent = void 0;\n }\n }\n}\nfunction effectScope(detached) {\n return new EffectScope(detached);\n}\nfunction getCurrentScope() {\n return activeEffectScope;\n}\nfunction onScopeDispose(fn, failSilently = false) {\n if (activeEffectScope) {\n activeEffectScope.cleanups.push(fn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onScopeDispose() is called when there is no active effect scope to be associated with.`\n );\n }\n}\n\nlet activeSub;\nconst EffectFlags = {\n \"ACTIVE\": 1,\n \"1\": \"ACTIVE\",\n \"RUNNING\": 2,\n \"2\": \"RUNNING\",\n \"TRACKING\": 4,\n \"4\": \"TRACKING\",\n \"NOTIFIED\": 8,\n \"8\": \"NOTIFIED\",\n \"DIRTY\": 16,\n \"16\": \"DIRTY\",\n \"ALLOW_RECURSE\": 32,\n \"32\": \"ALLOW_RECURSE\",\n \"PAUSED\": 64,\n \"64\": \"PAUSED\",\n \"EVALUATED\": 128,\n \"128\": \"EVALUATED\"\n};\nconst pausedQueueEffects = /* @__PURE__ */ new WeakSet();\nclass ReactiveEffect {\n constructor(fn) {\n this.fn = fn;\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 1 | 4;\n /**\n * @internal\n */\n this.next = void 0;\n /**\n * @internal\n */\n this.cleanup = void 0;\n this.scheduler = void 0;\n if (activeEffectScope) {\n if (activeEffectScope.active) {\n activeEffectScope.effects.push(this);\n } else {\n this.flags &= -2;\n }\n }\n }\n pause() {\n this.flags |= 64;\n }\n resume() {\n if (this.flags & 64) {\n this.flags &= -65;\n if (pausedQueueEffects.has(this)) {\n pausedQueueEffects.delete(this);\n this.trigger();\n }\n }\n }\n /**\n * @internal\n */\n notify() {\n if (this.flags & 2 && !(this.flags & 32)) {\n return;\n }\n if (!(this.flags & 8)) {\n batch(this);\n }\n }\n run() {\n if (!(this.flags & 1)) {\n return this.fn();\n }\n this.flags |= 2;\n cleanupEffect(this);\n prepareDeps(this);\n const prevEffect = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = this;\n shouldTrack = true;\n try {\n return this.fn();\n } finally {\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub !== this) {\n warn(\n \"Active effect was not restored correctly - this is likely a Vue internal bug.\"\n );\n }\n cleanupDeps(this);\n activeSub = prevEffect;\n shouldTrack = prevShouldTrack;\n this.flags &= -3;\n }\n }\n stop() {\n if (this.flags & 1) {\n for (let link = this.deps; link; link = link.nextDep) {\n removeSub(link);\n }\n this.deps = this.depsTail = void 0;\n cleanupEffect(this);\n this.onStop && this.onStop();\n this.flags &= -2;\n }\n }\n trigger() {\n if (this.flags & 64) {\n pausedQueueEffects.add(this);\n } else if (this.scheduler) {\n this.scheduler();\n } else {\n this.runIfDirty();\n }\n }\n /**\n * @internal\n */\n runIfDirty() {\n if (isDirty(this)) {\n this.run();\n }\n }\n get dirty() {\n return isDirty(this);\n }\n}\nlet batchDepth = 0;\nlet batchedSub;\nlet batchedComputed;\nfunction batch(sub, isComputed = false) {\n sub.flags |= 8;\n if (isComputed) {\n sub.next = batchedComputed;\n batchedComputed = sub;\n return;\n }\n sub.next = batchedSub;\n batchedSub = sub;\n}\nfunction startBatch() {\n batchDepth++;\n}\nfunction endBatch() {\n if (--batchDepth > 0) {\n return;\n }\n if (batchedComputed) {\n let e = batchedComputed;\n batchedComputed = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= -9;\n e = next;\n }\n }\n let error;\n while (batchedSub) {\n let e = batchedSub;\n batchedSub = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= -9;\n if (e.flags & 1) {\n try {\n ;\n e.trigger();\n } catch (err) {\n if (!error) error = err;\n }\n }\n e = next;\n }\n }\n if (error) throw error;\n}\nfunction prepareDeps(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n link.version = -1;\n link.prevActiveLink = link.dep.activeLink;\n link.dep.activeLink = link;\n }\n}\nfunction cleanupDeps(sub) {\n let head;\n let tail = sub.depsTail;\n let link = tail;\n while (link) {\n const prev = link.prevDep;\n if (link.version === -1) {\n if (link === tail) tail = prev;\n removeSub(link);\n removeDep(link);\n } else {\n head = link;\n }\n link.dep.activeLink = link.prevActiveLink;\n link.prevActiveLink = void 0;\n link = prev;\n }\n sub.deps = head;\n sub.depsTail = tail;\n}\nfunction isDirty(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) {\n return true;\n }\n }\n if (sub._dirty) {\n return true;\n }\n return false;\n}\nfunction refreshComputed(computed) {\n if (computed.flags & 4 && !(computed.flags & 16)) {\n return;\n }\n computed.flags &= -17;\n if (computed.globalVersion === globalVersion) {\n return;\n }\n computed.globalVersion = globalVersion;\n if (!computed.isSSR && computed.flags & 128 && (!computed.deps && !computed._dirty || !isDirty(computed))) {\n return;\n }\n computed.flags |= 2;\n const dep = computed.dep;\n const prevSub = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = computed;\n shouldTrack = true;\n try {\n prepareDeps(computed);\n const value = computed.fn(computed._value);\n if (dep.version === 0 || hasChanged(value, computed._value)) {\n computed.flags |= 128;\n computed._value = value;\n dep.version++;\n }\n } catch (err) {\n dep.version++;\n throw err;\n } finally {\n activeSub = prevSub;\n shouldTrack = prevShouldTrack;\n cleanupDeps(computed);\n computed.flags &= -3;\n }\n}\nfunction removeSub(link, soft = false) {\n const { dep, prevSub, nextSub } = link;\n if (prevSub) {\n prevSub.nextSub = nextSub;\n link.prevSub = void 0;\n }\n if (nextSub) {\n nextSub.prevSub = prevSub;\n link.nextSub = void 0;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && dep.subsHead === link) {\n dep.subsHead = nextSub;\n }\n if (dep.subs === link) {\n dep.subs = prevSub;\n if (!prevSub && dep.computed) {\n dep.computed.flags &= -5;\n for (let l = dep.computed.deps; l; l = l.nextDep) {\n removeSub(l, true);\n }\n }\n }\n if (!soft && !--dep.sc && dep.map) {\n dep.map.delete(dep.key);\n }\n}\nfunction removeDep(link) {\n const { prevDep, nextDep } = link;\n if (prevDep) {\n prevDep.nextDep = nextDep;\n link.prevDep = void 0;\n }\n if (nextDep) {\n nextDep.prevDep = prevDep;\n link.nextDep = void 0;\n }\n}\nfunction effect(fn, options) {\n if (fn.effect instanceof ReactiveEffect) {\n fn = fn.effect.fn;\n }\n const e = new ReactiveEffect(fn);\n if (options) {\n extend(e, options);\n }\n try {\n e.run();\n } catch (err) {\n e.stop();\n throw err;\n }\n const runner = e.run.bind(e);\n runner.effect = e;\n return runner;\n}\nfunction stop(runner) {\n runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = false;\n}\nfunction enableTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = true;\n}\nfunction resetTracking() {\n const last = trackStack.pop();\n shouldTrack = last === void 0 ? true : last;\n}\nfunction onEffectCleanup(fn, failSilently = false) {\n if (activeSub instanceof ReactiveEffect) {\n activeSub.cleanup = fn;\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onEffectCleanup() was called when there was no active effect to associate with.`\n );\n }\n}\nfunction cleanupEffect(e) {\n const { cleanup } = e;\n e.cleanup = void 0;\n if (cleanup) {\n const prevSub = activeSub;\n activeSub = void 0;\n try {\n cleanup();\n } finally {\n activeSub = prevSub;\n }\n }\n}\n\nlet globalVersion = 0;\nclass Link {\n constructor(sub, dep) {\n this.sub = sub;\n this.dep = dep;\n this.version = dep.version;\n this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0;\n }\n}\nclass Dep {\n // TODO isolatedDeclarations \"__v_skip\"\n constructor(computed) {\n this.computed = computed;\n this.version = 0;\n /**\n * Link between this dep and the current active effect\n */\n this.activeLink = void 0;\n /**\n * Doubly linked list representing the subscribing effects (tail)\n */\n this.subs = void 0;\n /**\n * For object property deps cleanup\n */\n this.map = void 0;\n this.key = void 0;\n /**\n * Subscriber counter\n */\n this.sc = 0;\n /**\n * @internal\n */\n this.__v_skip = true;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.subsHead = void 0;\n }\n }\n track(debugInfo) {\n if (!activeSub || !shouldTrack || activeSub === this.computed) {\n return;\n }\n let link = this.activeLink;\n if (link === void 0 || link.sub !== activeSub) {\n link = this.activeLink = new Link(activeSub, this);\n if (!activeSub.deps) {\n activeSub.deps = activeSub.depsTail = link;\n } else {\n link.prevDep = activeSub.depsTail;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n }\n addSub(link);\n } else if (link.version === -1) {\n link.version = this.version;\n if (link.nextDep) {\n const next = link.nextDep;\n next.prevDep = link.prevDep;\n if (link.prevDep) {\n link.prevDep.nextDep = next;\n }\n link.prevDep = activeSub.depsTail;\n link.nextDep = void 0;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n if (activeSub.deps === link) {\n activeSub.deps = next;\n }\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub.onTrack) {\n activeSub.onTrack(\n extend(\n {\n effect: activeSub\n },\n debugInfo\n )\n );\n }\n return link;\n }\n trigger(debugInfo) {\n this.version++;\n globalVersion++;\n this.notify(debugInfo);\n }\n notify(debugInfo) {\n startBatch();\n try {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n for (let head = this.subsHead; head; head = head.nextSub) {\n if (head.sub.onTrigger && !(head.sub.flags & 8)) {\n head.sub.onTrigger(\n extend(\n {\n effect: head.sub\n },\n debugInfo\n )\n );\n }\n }\n }\n for (let link = this.subs; link; link = link.prevSub) {\n if (link.sub.notify()) {\n ;\n link.sub.dep.notify();\n }\n }\n } finally {\n endBatch();\n }\n }\n}\nfunction addSub(link) {\n link.dep.sc++;\n if (link.sub.flags & 4) {\n const computed = link.dep.computed;\n if (computed && !link.dep.subs) {\n computed.flags |= 4 | 16;\n for (let l = computed.deps; l; l = l.nextDep) {\n addSub(l);\n }\n }\n const currentTail = link.dep.subs;\n if (currentTail !== link) {\n link.prevSub = currentTail;\n if (currentTail) currentTail.nextSub = link;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && link.dep.subsHead === void 0) {\n link.dep.subsHead = link;\n }\n link.dep.subs = link;\n }\n}\nconst targetMap = /* @__PURE__ */ new WeakMap();\nconst ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Object iterate\" : \"\"\n);\nconst MAP_KEY_ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Map keys iterate\" : \"\"\n);\nconst ARRAY_ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Array iterate\" : \"\"\n);\nfunction track(target, type, key) {\n if (shouldTrack && activeSub) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n }\n let dep = depsMap.get(key);\n if (!dep) {\n depsMap.set(key, dep = new Dep());\n dep.map = depsMap;\n dep.key = key;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.track({\n target,\n type,\n key\n });\n } else {\n dep.track();\n }\n }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n globalVersion++;\n return;\n }\n const run = (dep) => {\n if (dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.trigger({\n target,\n type,\n key,\n newValue,\n oldValue,\n oldTarget\n });\n } else {\n dep.trigger();\n }\n }\n };\n startBatch();\n if (type === \"clear\") {\n depsMap.forEach(run);\n } else {\n const targetIsArray = isArray(target);\n const isArrayIndex = targetIsArray && isIntegerKey(key);\n if (targetIsArray && key === \"length\") {\n const newLength = Number(newValue);\n depsMap.forEach((dep, key2) => {\n if (key2 === \"length\" || key2 === ARRAY_ITERATE_KEY || !isSymbol(key2) && key2 >= newLength) {\n run(dep);\n }\n });\n } else {\n if (key !== void 0 || depsMap.has(void 0)) {\n run(depsMap.get(key));\n }\n if (isArrayIndex) {\n run(depsMap.get(ARRAY_ITERATE_KEY));\n }\n switch (type) {\n case \"add\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n } else if (isArrayIndex) {\n run(depsMap.get(\"length\"));\n }\n break;\n case \"delete\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n }\n break;\n case \"set\":\n if (isMap(target)) {\n run(depsMap.get(ITERATE_KEY));\n }\n break;\n }\n }\n }\n endBatch();\n}\nfunction getDepFromReactive(object, key) {\n const depMap = targetMap.get(object);\n return depMap && depMap.get(key);\n}\n\nfunction reactiveReadArray(array) {\n const raw = toRaw(array);\n if (raw === array) return raw;\n track(raw, \"iterate\", ARRAY_ITERATE_KEY);\n if (isShallow(array)) return raw;\n if (!isReadonly(array)) return raw.map(toReactive);\n return isReactive(array) ? raw.map((item) => toReadonly(toReactive(item))) : raw.map(toReadonly);\n}\nfunction shallowReadArray(arr) {\n track(arr = toRaw(arr), \"iterate\", ARRAY_ITERATE_KEY);\n return arr;\n}\nfunction toWrapped(target, item) {\n if (isReadonly(target)) {\n return isReactive(target) ? toReadonly(toReactive(item)) : toReadonly(item);\n }\n return toReactive(item);\n}\nconst arrayInstrumentations = {\n __proto__: null,\n [Symbol.iterator]() {\n return iterator(this, Symbol.iterator, (item) => toWrapped(this, item));\n },\n concat(...args) {\n return reactiveReadArray(this).concat(\n ...args.map((x) => isArray(x) ? reactiveReadArray(x) : x)\n );\n },\n entries() {\n return iterator(this, \"entries\", (value) => {\n value[1] = toWrapped(this, value[1]);\n return value;\n });\n },\n every(fn, thisArg) {\n return apply(this, \"every\", fn, thisArg, void 0, arguments);\n },\n filter(fn, thisArg) {\n return apply(\n this,\n \"filter\",\n fn,\n thisArg,\n (v) => v.map((item) => toWrapped(this, item)),\n arguments\n );\n },\n find(fn, thisArg) {\n return apply(\n this,\n \"find\",\n fn,\n thisArg,\n (item) => toWrapped(this, item),\n arguments\n );\n },\n findIndex(fn, thisArg) {\n return apply(this, \"findIndex\", fn, thisArg, void 0, arguments);\n },\n findLast(fn, thisArg) {\n return apply(\n this,\n \"findLast\",\n fn,\n thisArg,\n (item) => toWrapped(this, item),\n arguments\n );\n },\n findLastIndex(fn, thisArg) {\n return apply(this, \"findLastIndex\", fn, thisArg, void 0, arguments);\n },\n // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement\n forEach(fn, thisArg) {\n return apply(this, \"forEach\", fn, thisArg, void 0, arguments);\n },\n includes(...args) {\n return searchProxy(this, \"includes\", args);\n },\n indexOf(...args) {\n return searchProxy(this, \"indexOf\", args);\n },\n join(separator) {\n return reactiveReadArray(this).join(separator);\n },\n // keys() iterator only reads `length`, no optimization required\n lastIndexOf(...args) {\n return searchProxy(this, \"lastIndexOf\", args);\n },\n map(fn, thisArg) {\n return apply(this, \"map\", fn, thisArg, void 0, arguments);\n },\n pop() {\n return noTracking(this, \"pop\");\n },\n push(...args) {\n return noTracking(this, \"push\", args);\n },\n reduce(fn, ...args) {\n return reduce(this, \"reduce\", fn, args);\n },\n reduceRight(fn, ...args) {\n return reduce(this, \"reduceRight\", fn, args);\n },\n shift() {\n return noTracking(this, \"shift\");\n },\n // slice could use ARRAY_ITERATE but also seems to beg for range tracking\n some(fn, thisArg) {\n return apply(this, \"some\", fn, thisArg, void 0, arguments);\n },\n splice(...args) {\n return noTracking(this, \"splice\", args);\n },\n toReversed() {\n return reactiveReadArray(this).toReversed();\n },\n toSorted(comparer) {\n return reactiveReadArray(this).toSorted(comparer);\n },\n toSpliced(...args) {\n return reactiveReadArray(this).toSpliced(...args);\n },\n unshift(...args) {\n return noTracking(this, \"unshift\", args);\n },\n values() {\n return iterator(this, \"values\", (item) => toWrapped(this, item));\n }\n};\nfunction iterator(self, method, wrapValue) {\n const arr = shallowReadArray(self);\n const iter = arr[method]();\n if (arr !== self && !isShallow(self)) {\n iter._next = iter.next;\n iter.next = () => {\n const result = iter._next();\n if (!result.done) {\n result.value = wrapValue(result.value);\n }\n return result;\n };\n }\n return iter;\n}\nconst arrayProto = Array.prototype;\nfunction apply(self, method, fn, thisArg, wrappedRetFn, args) {\n const arr = shallowReadArray(self);\n const needsWrap = arr !== self && !isShallow(self);\n const methodFn = arr[method];\n if (methodFn !== arrayProto[method]) {\n const result2 = methodFn.apply(self, args);\n return needsWrap ? toReactive(result2) : result2;\n }\n let wrappedFn = fn;\n if (arr !== self) {\n if (needsWrap) {\n wrappedFn = function(item, index) {\n return fn.call(this, toWrapped(self, item), index, self);\n };\n } else if (fn.length > 2) {\n wrappedFn = function(item, index) {\n return fn.call(this, item, index, self);\n };\n }\n }\n const result = methodFn.call(arr, wrappedFn, thisArg);\n return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result;\n}\nfunction reduce(self, method, fn, args) {\n const arr = shallowReadArray(self);\n const needsWrap = arr !== self && !isShallow(self);\n let wrappedFn = fn;\n let wrapInitialAccumulator = false;\n if (arr !== self) {\n if (needsWrap) {\n wrapInitialAccumulator = args.length === 0;\n wrappedFn = function(acc, item, index) {\n if (wrapInitialAccumulator) {\n wrapInitialAccumulator = false;\n acc = toWrapped(self, acc);\n }\n return fn.call(this, acc, toWrapped(self, item), index, self);\n };\n } else if (fn.length > 3) {\n wrappedFn = function(acc, item, index) {\n return fn.call(this, acc, item, index, self);\n };\n }\n }\n const result = arr[method](wrappedFn, ...args);\n return wrapInitialAccumulator ? toWrapped(self, result) : result;\n}\nfunction searchProxy(self, method, args) {\n const arr = toRaw(self);\n track(arr, \"iterate\", ARRAY_ITERATE_KEY);\n const res = arr[method](...args);\n if ((res === -1 || res === false) && isProxy(args[0])) {\n args[0] = toRaw(args[0]);\n return arr[method](...args);\n }\n return res;\n}\nfunction noTracking(self, method, args = []) {\n pauseTracking();\n startBatch();\n const res = toRaw(self)[method].apply(self, args);\n endBatch();\n resetTracking();\n return res;\n}\n\nconst isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== \"arguments\" && key !== \"caller\").map((key) => Symbol[key]).filter(isSymbol)\n);\nfunction hasOwnProperty(key) {\n if (!isSymbol(key)) key = String(key);\n const obj = toRaw(this);\n track(obj, \"has\", key);\n return obj.hasOwnProperty(key);\n}\nclass BaseReactiveHandler {\n constructor(_isReadonly = false, _isShallow = false) {\n this._isReadonly = _isReadonly;\n this._isShallow = _isShallow;\n }\n get(target, key, receiver) {\n if (key === \"__v_skip\") return target[\"__v_skip\"];\n const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_isShallow\") {\n return isShallow2;\n } else if (key === \"__v_raw\") {\n if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype\n // this means the receiver is a user proxy of the reactive proxy\n Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {\n return target;\n }\n return;\n }\n const targetIsArray = isArray(target);\n if (!isReadonly2) {\n let fn;\n if (targetIsArray && (fn = arrayInstrumentations[key])) {\n return fn;\n }\n if (key === \"hasOwnProperty\") {\n return hasOwnProperty;\n }\n }\n const res = Reflect.get(\n target,\n key,\n // if this is a proxy wrapping a ref, return methods using the raw ref\n // as receiver so that we don't have to call `toRaw` on the ref in all\n // its class methods\n isRef(target) ? target : receiver\n );\n if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n return res;\n }\n if (!isReadonly2) {\n track(target, \"get\", key);\n }\n if (isShallow2) {\n return res;\n }\n if (isRef(res)) {\n const value = targetIsArray && isIntegerKey(key) ? res : res.value;\n return isReadonly2 && isObject(value) ? readonly(value) : value;\n }\n if (isObject(res)) {\n return isReadonly2 ? readonly(res) : reactive(res);\n }\n return res;\n }\n}\nclass MutableReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(false, isShallow2);\n }\n set(target, key, value, receiver) {\n let oldValue = target[key];\n const isArrayWithIntegerKey = isArray(target) && isIntegerKey(key);\n if (!this._isShallow) {\n const isOldValueReadonly = isReadonly(oldValue);\n if (!isShallow(value) && !isReadonly(value)) {\n oldValue = toRaw(oldValue);\n value = toRaw(value);\n }\n if (!isArrayWithIntegerKey && isRef(oldValue) && !isRef(value)) {\n if (isOldValueReadonly) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target[key]\n );\n }\n return true;\n } else {\n oldValue.value = value;\n return true;\n }\n }\n }\n const hadKey = isArrayWithIntegerKey ? Number(key) < target.length : hasOwn(target, key);\n const result = Reflect.set(\n target,\n key,\n value,\n isRef(target) ? target : receiver\n );\n if (target === toRaw(receiver) && result) {\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n }\n return result;\n }\n deleteProperty(target, key) {\n const hadKey = hasOwn(target, key);\n const oldValue = target[key];\n const result = Reflect.deleteProperty(target, key);\n if (result && hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n }\n has(target, key) {\n const result = Reflect.has(target, key);\n if (!isSymbol(key) || !builtInSymbols.has(key)) {\n track(target, \"has\", key);\n }\n return result;\n }\n ownKeys(target) {\n track(\n target,\n \"iterate\",\n isArray(target) ? \"length\" : ITERATE_KEY\n );\n return Reflect.ownKeys(target);\n }\n}\nclass ReadonlyReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(true, isShallow2);\n }\n set(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n deleteProperty(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Delete operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n}\nconst mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();\nconst readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();\nconst shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(true);\nconst shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction createIterableMethod(method, isReadonly2, isShallow2) {\n return function(...args) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const targetIsMap = isMap(rawTarget);\n const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n const isKeyOnly = method === \"keys\" && targetIsMap;\n const innerIterator = target[method](...args);\n const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;\n !isReadonly2 && track(\n rawTarget,\n \"iterate\",\n isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY\n );\n return extend(\n // inheriting all iterator properties\n Object.create(innerIterator),\n {\n // iterator protocol\n next() {\n const { value, done } = innerIterator.next();\n return done ? { value, done } : {\n value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n done\n };\n }\n }\n );\n };\n}\nfunction createReadonlyMethod(type) {\n return function(...args) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n warn(\n `${capitalize(type)} operation ${key}failed: target is readonly.`,\n toRaw(this)\n );\n }\n return type === \"delete\" ? false : type === \"clear\" ? void 0 : this;\n };\n}\nfunction createInstrumentations(readonly, shallow) {\n const instrumentations = {\n get(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"get\", key);\n }\n track(rawTarget, \"get\", rawKey);\n }\n const { has } = getProto(rawTarget);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n if (has.call(rawTarget, key)) {\n return wrap(target.get(key));\n } else if (has.call(rawTarget, rawKey)) {\n return wrap(target.get(rawKey));\n } else if (target !== rawTarget) {\n target.get(key);\n }\n },\n get size() {\n const target = this[\"__v_raw\"];\n !readonly && track(toRaw(target), \"iterate\", ITERATE_KEY);\n return target.size;\n },\n has(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"has\", key);\n }\n track(rawTarget, \"has\", rawKey);\n }\n return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n },\n forEach(callback, thisArg) {\n const observed = this;\n const target = observed[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n !readonly && track(rawTarget, \"iterate\", ITERATE_KEY);\n return target.forEach((value, key) => {\n return callback.call(thisArg, wrap(value), wrap(key), observed);\n });\n }\n };\n extend(\n instrumentations,\n readonly ? {\n add: createReadonlyMethod(\"add\"),\n set: createReadonlyMethod(\"set\"),\n delete: createReadonlyMethod(\"delete\"),\n clear: createReadonlyMethod(\"clear\")\n } : {\n add(value) {\n const target = toRaw(this);\n const proto = getProto(target);\n const rawValue = toRaw(value);\n const valueToAdd = !shallow && !isShallow(value) && !isReadonly(value) ? rawValue : value;\n const hadKey = proto.has.call(target, valueToAdd) || hasChanged(value, valueToAdd) && proto.has.call(target, value) || hasChanged(rawValue, valueToAdd) && proto.has.call(target, rawValue);\n if (!hadKey) {\n target.add(valueToAdd);\n trigger(target, \"add\", valueToAdd, valueToAdd);\n }\n return this;\n },\n set(key, value) {\n if (!shallow && !isShallow(value) && !isReadonly(value)) {\n value = toRaw(value);\n }\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get.call(target, key);\n target.set(key, value);\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n return this;\n },\n delete(key) {\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get ? get.call(target, key) : void 0;\n const result = target.delete(key);\n if (hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n },\n clear() {\n const target = toRaw(this);\n const hadItems = target.size !== 0;\n const oldTarget = !!(process.env.NODE_ENV !== \"production\") ? isMap(target) ? new Map(target) : new Set(target) : void 0;\n const result = target.clear();\n if (hadItems) {\n trigger(\n target,\n \"clear\",\n void 0,\n void 0,\n oldTarget\n );\n }\n return result;\n }\n }\n );\n const iteratorMethods = [\n \"keys\",\n \"values\",\n \"entries\",\n Symbol.iterator\n ];\n iteratorMethods.forEach((method) => {\n instrumentations[method] = createIterableMethod(method, readonly, shallow);\n });\n return instrumentations;\n}\nfunction createInstrumentationGetter(isReadonly2, shallow) {\n const instrumentations = createInstrumentations(isReadonly2, shallow);\n return (target, key, receiver) => {\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_raw\") {\n return target;\n }\n return Reflect.get(\n hasOwn(instrumentations, key) && key in target ? instrumentations : target,\n key,\n receiver\n );\n };\n}\nconst mutableCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has, key) {\n const rawKey = toRaw(key);\n if (rawKey !== key && has.call(target, rawKey)) {\n const type = toRawType(target);\n warn(\n `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`\n );\n }\n}\n\nconst reactiveMap = /* @__PURE__ */ new WeakMap();\nconst shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nconst readonlyMap = /* @__PURE__ */ new WeakMap();\nconst shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n switch (rawType) {\n case \"Object\":\n case \"Array\":\n return 1 /* COMMON */;\n case \"Map\":\n case \"Set\":\n case \"WeakMap\":\n case \"WeakSet\":\n return 2 /* COLLECTION */;\n default:\n return 0 /* INVALID */;\n }\n}\n// @__NO_SIDE_EFFECTS__\nfunction reactive(target) {\n if (/* @__PURE__ */ isReadonly(target)) {\n return target;\n }\n return createReactiveObject(\n target,\n false,\n mutableHandlers,\n mutableCollectionHandlers,\n reactiveMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowReactive(target) {\n return createReactiveObject(\n target,\n false,\n shallowReactiveHandlers,\n shallowCollectionHandlers,\n shallowReactiveMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction readonly(target) {\n return createReactiveObject(\n target,\n true,\n readonlyHandlers,\n readonlyCollectionHandlers,\n readonlyMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowReadonly(target) {\n return createReactiveObject(\n target,\n true,\n shallowReadonlyHandlers,\n shallowReadonlyCollectionHandlers,\n shallowReadonlyMap\n );\n}\nfunction createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {\n if (!isObject(target)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `value cannot be made ${isReadonly2 ? \"readonly\" : \"reactive\"}: ${String(\n target\n )}`\n );\n }\n return target;\n }\n if (target[\"__v_raw\"] && !(isReadonly2 && target[\"__v_isReactive\"])) {\n return target;\n }\n if (target[\"__v_skip\"] || !Object.isExtensible(target)) {\n return target;\n }\n const existingProxy = proxyMap.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n const targetType = targetTypeMap(toRawType(target));\n if (targetType === 0 /* INVALID */) {\n return target;\n }\n const proxy = new Proxy(\n target,\n targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers\n );\n proxyMap.set(target, proxy);\n return proxy;\n}\n// @__NO_SIDE_EFFECTS__\nfunction isReactive(value) {\n if (/* @__PURE__ */ isReadonly(value)) {\n return /* @__PURE__ */ isReactive(value[\"__v_raw\"]);\n }\n return !!(value && value[\"__v_isReactive\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isReadonly(value) {\n return !!(value && value[\"__v_isReadonly\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isShallow(value) {\n return !!(value && value[\"__v_isShallow\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isProxy(value) {\n return value ? !!value[\"__v_raw\"] : false;\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRaw(observed) {\n const raw = observed && observed[\"__v_raw\"];\n return raw ? /* @__PURE__ */ toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n if (!hasOwn(value, \"__v_skip\") && Object.isExtensible(value)) {\n def(value, \"__v_skip\", true);\n }\n return value;\n}\nconst toReactive = (value) => isObject(value) ? /* @__PURE__ */ reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? /* @__PURE__ */ readonly(value) : value;\n\n// @__NO_SIDE_EFFECTS__\nfunction isRef(r) {\n return r ? r[\"__v_isRef\"] === true : false;\n}\n// @__NO_SIDE_EFFECTS__\nfunction ref(value) {\n return createRef(value, false);\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowRef(value) {\n return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n if (/* @__PURE__ */ isRef(rawValue)) {\n return rawValue;\n }\n return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n constructor(value, isShallow2) {\n this.dep = new Dep();\n this[\"__v_isRef\"] = true;\n this[\"__v_isShallow\"] = false;\n this._rawValue = isShallow2 ? value : toRaw(value);\n this._value = isShallow2 ? value : toReactive(value);\n this[\"__v_isShallow\"] = isShallow2;\n }\n get value() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n });\n } else {\n this.dep.track();\n }\n return this._value;\n }\n set value(newValue) {\n const oldValue = this._rawValue;\n const useDirectValue = this[\"__v_isShallow\"] || isShallow(newValue) || isReadonly(newValue);\n newValue = useDirectValue ? newValue : toRaw(newValue);\n if (hasChanged(newValue, oldValue)) {\n this._rawValue = newValue;\n this._value = useDirectValue ? newValue : toReactive(newValue);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.trigger({\n target: this,\n type: \"set\",\n key: \"value\",\n newValue,\n oldValue\n });\n } else {\n this.dep.trigger();\n }\n }\n }\n}\nfunction triggerRef(ref2) {\n if (ref2.dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n ref2.dep.trigger({\n target: ref2,\n type: \"set\",\n key: \"value\",\n newValue: ref2._value\n });\n } else {\n ref2.dep.trigger();\n }\n }\n}\nfunction unref(ref2) {\n return /* @__PURE__ */ isRef(ref2) ? ref2.value : ref2;\n}\nfunction toValue(source) {\n return isFunction(source) ? source() : unref(source);\n}\nconst shallowUnwrapHandlers = {\n get: (target, key, receiver) => key === \"__v_raw\" ? target : unref(Reflect.get(target, key, receiver)),\n set: (target, key, value, receiver) => {\n const oldValue = target[key];\n if (/* @__PURE__ */ isRef(oldValue) && !/* @__PURE__ */ isRef(value)) {\n oldValue.value = value;\n return true;\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n }\n};\nfunction proxyRefs(objectWithRefs) {\n return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n constructor(factory) {\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n const dep = this.dep = new Dep();\n const { get, set } = factory(dep.track.bind(dep), dep.trigger.bind(dep));\n this._get = get;\n this._set = set;\n }\n get value() {\n return this._value = this._get();\n }\n set value(newVal) {\n this._set(newVal);\n }\n}\nfunction customRef(factory) {\n return new CustomRefImpl(factory);\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRefs(object) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isProxy(object)) {\n warn(`toRefs() expects a reactive object but received a plain one.`);\n }\n const ret = isArray(object) ? new Array(object.length) : {};\n for (const key in object) {\n ret[key] = propertyToRef(object, key);\n }\n return ret;\n}\nclass ObjectRefImpl {\n constructor(_object, key, _defaultValue) {\n this._object = _object;\n this._defaultValue = _defaultValue;\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n this._key = isSymbol(key) ? key : String(key);\n this._raw = toRaw(_object);\n let shallow = true;\n let obj = _object;\n if (!isArray(_object) || isSymbol(this._key) || !isIntegerKey(this._key)) {\n do {\n shallow = !isProxy(obj) || isShallow(obj);\n } while (shallow && (obj = obj[\"__v_raw\"]));\n }\n this._shallow = shallow;\n }\n get value() {\n let val = this._object[this._key];\n if (this._shallow) {\n val = unref(val);\n }\n return this._value = val === void 0 ? this._defaultValue : val;\n }\n set value(newVal) {\n if (this._shallow && /* @__PURE__ */ isRef(this._raw[this._key])) {\n const nestedRef = this._object[this._key];\n if (/* @__PURE__ */ isRef(nestedRef)) {\n nestedRef.value = newVal;\n return;\n }\n }\n this._object[this._key] = newVal;\n }\n get dep() {\n return getDepFromReactive(this._raw, this._key);\n }\n}\nclass GetterRefImpl {\n constructor(_getter) {\n this._getter = _getter;\n this[\"__v_isRef\"] = true;\n this[\"__v_isReadonly\"] = true;\n this._value = void 0;\n }\n get value() {\n return this._value = this._getter();\n }\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRef(source, key, defaultValue) {\n if (/* @__PURE__ */ isRef(source)) {\n return source;\n } else if (isFunction(source)) {\n return new GetterRefImpl(source);\n } else if (isObject(source) && arguments.length > 1) {\n return propertyToRef(source, key, defaultValue);\n } else {\n return /* @__PURE__ */ ref(source);\n }\n}\nfunction propertyToRef(source, key, defaultValue) {\n return new ObjectRefImpl(source, key, defaultValue);\n}\n\nclass ComputedRefImpl {\n constructor(fn, setter, isSSR) {\n this.fn = fn;\n this.setter = setter;\n /**\n * @internal\n */\n this._value = void 0;\n /**\n * @internal\n */\n this.dep = new Dep(this);\n /**\n * @internal\n */\n this.__v_isRef = true;\n // TODO isolatedDeclarations \"__v_isReadonly\"\n // A computed is also a subscriber that tracks other deps\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 16;\n /**\n * @internal\n */\n this.globalVersion = globalVersion - 1;\n /**\n * @internal\n */\n this.next = void 0;\n // for backwards compat\n this.effect = this;\n this[\"__v_isReadonly\"] = !setter;\n this.isSSR = isSSR;\n }\n /**\n * @internal\n */\n notify() {\n this.flags |= 16;\n if (!(this.flags & 8) && // avoid infinite self recursion\n activeSub !== this) {\n batch(this, true);\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\")) ;\n }\n get value() {\n const link = !!(process.env.NODE_ENV !== \"production\") ? this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n }) : this.dep.track();\n refreshComputed(this);\n if (link) {\n link.version = this.dep.version;\n }\n return this._value;\n }\n set value(newValue) {\n if (this.setter) {\n this.setter(newValue);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\"Write operation failed: computed value is readonly\");\n }\n }\n}\n// @__NO_SIDE_EFFECTS__\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n let getter;\n let setter;\n if (isFunction(getterOrOptions)) {\n getter = getterOrOptions;\n } else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n const cRef = new ComputedRefImpl(getter, setter, isSSR);\n if (!!(process.env.NODE_ENV !== \"production\") && debugOptions && !isSSR) {\n cRef.onTrack = debugOptions.onTrack;\n cRef.onTrigger = debugOptions.onTrigger;\n }\n return cRef;\n}\n\nconst TrackOpTypes = {\n \"GET\": \"get\",\n \"HAS\": \"has\",\n \"ITERATE\": \"iterate\"\n};\nconst TriggerOpTypes = {\n \"SET\": \"set\",\n \"ADD\": \"add\",\n \"DELETE\": \"delete\",\n \"CLEAR\": \"clear\"\n};\nconst ReactiveFlags = {\n \"SKIP\": \"__v_skip\",\n \"IS_REACTIVE\": \"__v_isReactive\",\n \"IS_READONLY\": \"__v_isReadonly\",\n \"IS_SHALLOW\": \"__v_isShallow\",\n \"RAW\": \"__v_raw\",\n \"IS_REF\": \"__v_isRef\"\n};\n\nconst WatchErrorCodes = {\n \"WATCH_GETTER\": 2,\n \"2\": \"WATCH_GETTER\",\n \"WATCH_CALLBACK\": 3,\n \"3\": \"WATCH_CALLBACK\",\n \"WATCH_CLEANUP\": 4,\n \"4\": \"WATCH_CLEANUP\"\n};\nconst INITIAL_WATCHER_VALUE = {};\nconst cleanupMap = /* @__PURE__ */ new WeakMap();\nlet activeWatcher = void 0;\nfunction getCurrentWatcher() {\n return activeWatcher;\n}\nfunction onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) {\n if (owner) {\n let cleanups = cleanupMap.get(owner);\n if (!cleanups) cleanupMap.set(owner, cleanups = []);\n cleanups.push(cleanupFn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onWatcherCleanup() was called when there was no active watcher to associate with.`\n );\n }\n}\nfunction watch(source, cb, options = EMPTY_OBJ) {\n const { immediate, deep, once, scheduler, augmentJob, call } = options;\n const warnInvalidSource = (s) => {\n (options.onWarn || warn)(\n `Invalid watch source: `,\n s,\n `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`\n );\n };\n const reactiveGetter = (source2) => {\n if (deep) return source2;\n if (isShallow(source2) || deep === false || deep === 0)\n return traverse(source2, 1);\n return traverse(source2);\n };\n let effect;\n let getter;\n let cleanup;\n let boundCleanup;\n let forceTrigger = false;\n let isMultiSource = false;\n if (isRef(source)) {\n getter = () => source.value;\n forceTrigger = isShallow(source);\n } else if (isReactive(source)) {\n getter = () => reactiveGetter(source);\n forceTrigger = true;\n } else if (isArray(source)) {\n isMultiSource = true;\n forceTrigger = source.some((s) => isReactive(s) || isShallow(s));\n getter = () => source.map((s) => {\n if (isRef(s)) {\n return s.value;\n } else if (isReactive(s)) {\n return reactiveGetter(s);\n } else if (isFunction(s)) {\n return call ? call(s, 2) : s();\n } else {\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(s);\n }\n });\n } else if (isFunction(source)) {\n if (cb) {\n getter = call ? () => call(source, 2) : source;\n } else {\n getter = () => {\n if (cleanup) {\n pauseTracking();\n try {\n cleanup();\n } finally {\n resetTracking();\n }\n }\n const currentEffect = activeWatcher;\n activeWatcher = effect;\n try {\n return call ? call(source, 3, [boundCleanup]) : source(boundCleanup);\n } finally {\n activeWatcher = currentEffect;\n }\n };\n }\n } else {\n getter = NOOP;\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(source);\n }\n if (cb && deep) {\n const baseGetter = getter;\n const depth = deep === true ? Infinity : deep;\n getter = () => traverse(baseGetter(), depth);\n }\n const scope = getCurrentScope();\n const watchHandle = () => {\n effect.stop();\n if (scope && scope.active) {\n remove(scope.effects, effect);\n }\n };\n if (once && cb) {\n const _cb = cb;\n cb = (...args) => {\n const res = _cb(...args);\n watchHandle();\n return res;\n };\n }\n let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;\n const job = (immediateFirstRun) => {\n if (!(effect.flags & 1) || !effect.dirty && !immediateFirstRun) {\n return;\n }\n if (cb) {\n const newValue = effect.run();\n if (immediateFirstRun || deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) {\n if (cleanup) {\n cleanup();\n }\n const currentWatcher = activeWatcher;\n activeWatcher = effect;\n try {\n const args = [\n newValue,\n // pass undefined as the old value when it's changed for the first time\n oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,\n boundCleanup\n ];\n oldValue = newValue;\n call ? call(cb, 3, args) : (\n // @ts-expect-error\n cb(...args)\n );\n } finally {\n activeWatcher = currentWatcher;\n }\n }\n } else {\n effect.run();\n }\n };\n if (augmentJob) {\n augmentJob(job);\n }\n effect = new ReactiveEffect(getter);\n effect.scheduler = scheduler ? () => scheduler(job, false) : job;\n boundCleanup = (fn) => onWatcherCleanup(fn, false, effect);\n cleanup = effect.onStop = () => {\n const cleanups = cleanupMap.get(effect);\n if (cleanups) {\n if (call) {\n call(cleanups, 4);\n } else {\n for (const cleanup2 of cleanups) cleanup2();\n }\n cleanupMap.delete(effect);\n }\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n effect.onTrack = options.onTrack;\n effect.onTrigger = options.onTrigger;\n }\n if (cb) {\n if (immediate) {\n job(true);\n } else {\n oldValue = effect.run();\n }\n } else if (scheduler) {\n scheduler(job.bind(null, true), true);\n } else {\n effect.run();\n }\n watchHandle.pause = effect.pause.bind(effect);\n watchHandle.resume = effect.resume.bind(effect);\n watchHandle.stop = watchHandle;\n return watchHandle;\n}\nfunction traverse(value, depth = Infinity, seen) {\n if (depth <= 0 || !isObject(value) || value[\"__v_skip\"]) {\n return value;\n }\n seen = seen || /* @__PURE__ */ new Map();\n if ((seen.get(value) || 0) >= depth) {\n return value;\n }\n seen.set(value, depth);\n depth--;\n if (isRef(value)) {\n traverse(value.value, depth, seen);\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n traverse(value[i], depth, seen);\n }\n } else if (isSet(value) || isMap(value)) {\n value.forEach((v) => {\n traverse(v, depth, seen);\n });\n } else if (isPlainObject(value)) {\n for (const key in value) {\n traverse(value[key], depth, seen);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n if (Object.prototype.propertyIsEnumerable.call(value, key)) {\n traverse(value[key], depth, seen);\n }\n }\n }\n return value;\n}\n\nexport { ARRAY_ITERATE_KEY, EffectFlags, EffectScope, ITERATE_KEY, MAP_KEY_ITERATE_KEY, ReactiveEffect, ReactiveFlags, TrackOpTypes, TriggerOpTypes, WatchErrorCodes, computed, customRef, effect, effectScope, enableTracking, getCurrentScope, getCurrentWatcher, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onEffectCleanup, onScopeDispose, onWatcherCleanup, pauseTracking, proxyRefs, reactive, reactiveReadArray, readonly, ref, resetTracking, shallowReactive, shallowReadArray, shallowReadonly, shallowRef, stop, toRaw, toReactive, toReadonly, toRef, toRefs, toValue, track, traverse, trigger, triggerRef, unref, watch };\n","/**\n* @vue/runtime-core v3.5.43\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { pauseTracking, resetTracking, isRef, toRaw, traverse, watch as watch$1, shallowRef, readonly, isReactive, ref, isShallow, isReadonly, shallowReadArray, toReadonly, toReactive, shallowReadonly, track, reactive, customRef, shallowReactive, trigger, ReactiveEffect, isProxy, proxyRefs, markRaw, EffectScope, computed as computed$1 } from '@vue/reactivity';\nexport { EffectScope, ReactiveEffect, TrackOpTypes, TriggerOpTypes, customRef, effect, effectScope, getCurrentScope, getCurrentWatcher, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, onWatcherCleanup, proxyRefs, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, toValue, triggerRef, unref } from '@vue/reactivity';\nimport { isString, isFunction, EMPTY_OBJ, isPromise, isArray, NOOP, getGlobalThis, extend, isBuiltInDirective, NO, hasOwn, remove, def, isOn, isReservedProp, normalizeClass, stringifyStyle, normalizeStyle, isKnownSvgAttr, isBooleanAttr, isKnownHtmlAttr, includeBooleanAttr, isRenderableAttrValue, normalizeCssVarValue, getEscapedCssVarName, isObject, isRegExp, invokeArrayFns, toHandlerKey, camelize, capitalize, isSymbol, isGloballyAllowed, hyphenate, hasChanged, looseToNumber, isModelListener, looseEqual, EMPTY_ARR, toRawType, makeMap, toNumber } from '@vue/shared';\nexport { camelize, capitalize, normalizeClass, normalizeProps, normalizeStyle, toDisplayString, toHandlerKey } from '@vue/shared';\n\nconst stack = [];\nfunction pushWarningContext(vnode) {\n stack.push(vnode);\n}\nfunction popWarningContext() {\n stack.pop();\n}\nlet isWarning = false;\nfunction warn$1(msg, ...args) {\n if (isWarning) return;\n isWarning = true;\n pauseTracking();\n const instance = stack.length ? stack[stack.length - 1].component : null;\n const appWarnHandler = instance && instance.appContext.config.warnHandler;\n const trace = getComponentTrace();\n if (appWarnHandler) {\n callWithErrorHandling(\n appWarnHandler,\n instance,\n 11,\n [\n // eslint-disable-next-line no-restricted-syntax\n msg + args.map((a) => {\n var _a, _b;\n return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);\n }).join(\"\"),\n instance && instance.proxy,\n trace.map(\n ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`\n ).join(\"\\n\"),\n trace\n ]\n );\n } else {\n const warnArgs = [`[Vue warn]: ${msg}`, ...args];\n if (trace.length && // avoid spamming console during tests\n true) {\n warnArgs.push(`\n`, ...formatTrace(trace));\n }\n console.warn(...warnArgs);\n }\n resetTracking();\n isWarning = false;\n}\nfunction getComponentTrace() {\n let currentVNode = stack[stack.length - 1];\n if (!currentVNode) {\n return [];\n }\n const normalizedStack = [];\n while (currentVNode) {\n const last = normalizedStack[0];\n if (last && last.vnode === currentVNode) {\n last.recurseCount++;\n } else {\n normalizedStack.push({\n vnode: currentVNode,\n recurseCount: 0\n });\n }\n const parentInstance = currentVNode.component && currentVNode.component.parent;\n currentVNode = parentInstance && parentInstance.vnode;\n }\n return normalizedStack;\n}\nfunction formatTrace(trace) {\n const logs = [];\n trace.forEach((entry, i) => {\n logs.push(...i === 0 ? [] : [`\n`], ...formatTraceEntry(entry));\n });\n return logs;\n}\nfunction formatTraceEntry({ vnode, recurseCount }) {\n const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\n const isRoot = vnode.component ? vnode.component.parent == null : false;\n const open = ` at <${formatComponentName(\n vnode.component,\n vnode.type,\n isRoot\n )}`;\n const close = `>` + postfix;\n return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close];\n}\nfunction formatProps(props) {\n const res = [];\n const keys = Object.keys(props);\n keys.slice(0, 3).forEach((key) => {\n res.push(...formatProp(key, props[key]));\n });\n if (keys.length > 3) {\n res.push(` ...`);\n }\n return res;\n}\nfunction formatProp(key, value, raw) {\n if (isString(value)) {\n value = JSON.stringify(value);\n return raw ? value : [`${key}=${value}`];\n } else if (typeof value === \"number\" || typeof value === \"boolean\" || value == null) {\n return raw ? value : [`${key}=${value}`];\n } else if (isRef(value)) {\n value = formatProp(key, toRaw(value.value), true);\n return raw ? value : [`${key}=Ref<`, value, `>`];\n } else if (isFunction(value)) {\n return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\n } else {\n value = toRaw(value);\n return raw ? value : [`${key}=`, value];\n }\n}\nfunction assertNumber(val, type) {\n if (!!!(process.env.NODE_ENV !== \"production\")) return;\n if (val === void 0) {\n return;\n } else if (typeof val !== \"number\") {\n warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`);\n } else if (isNaN(val)) {\n warn$1(`${type} is NaN - the duration expression might be incorrect.`);\n }\n}\n\nconst ErrorCodes = {\n \"SETUP_FUNCTION\": 0,\n \"0\": \"SETUP_FUNCTION\",\n \"RENDER_FUNCTION\": 1,\n \"1\": \"RENDER_FUNCTION\",\n \"NATIVE_EVENT_HANDLER\": 5,\n \"5\": \"NATIVE_EVENT_HANDLER\",\n \"COMPONENT_EVENT_HANDLER\": 6,\n \"6\": \"COMPONENT_EVENT_HANDLER\",\n \"VNODE_HOOK\": 7,\n \"7\": \"VNODE_HOOK\",\n \"DIRECTIVE_HOOK\": 8,\n \"8\": \"DIRECTIVE_HOOK\",\n \"TRANSITION_HOOK\": 9,\n \"9\": \"TRANSITION_HOOK\",\n \"APP_ERROR_HANDLER\": 10,\n \"10\": \"APP_ERROR_HANDLER\",\n \"APP_WARN_HANDLER\": 11,\n \"11\": \"APP_WARN_HANDLER\",\n \"FUNCTION_REF\": 12,\n \"12\": \"FUNCTION_REF\",\n \"ASYNC_COMPONENT_LOADER\": 13,\n \"13\": \"ASYNC_COMPONENT_LOADER\",\n \"SCHEDULER\": 14,\n \"14\": \"SCHEDULER\",\n \"COMPONENT_UPDATE\": 15,\n \"15\": \"COMPONENT_UPDATE\",\n \"APP_UNMOUNT_CLEANUP\": 16,\n \"16\": \"APP_UNMOUNT_CLEANUP\"\n};\nconst ErrorTypeStrings$1 = {\n [\"sp\"]: \"serverPrefetch hook\",\n [\"bc\"]: \"beforeCreate hook\",\n [\"c\"]: \"created hook\",\n [\"bm\"]: \"beforeMount hook\",\n [\"m\"]: \"mounted hook\",\n [\"bu\"]: \"beforeUpdate hook\",\n [\"u\"]: \"updated\",\n [\"bum\"]: \"beforeUnmount hook\",\n [\"um\"]: \"unmounted hook\",\n [\"a\"]: \"activated hook\",\n [\"da\"]: \"deactivated hook\",\n [\"ec\"]: \"errorCaptured hook\",\n [\"rtc\"]: \"renderTracked hook\",\n [\"rtg\"]: \"renderTriggered hook\",\n [0]: \"setup function\",\n [1]: \"render function\",\n [2]: \"watcher getter\",\n [3]: \"watcher callback\",\n [4]: \"watcher cleanup function\",\n [5]: \"native event handler\",\n [6]: \"component event handler\",\n [7]: \"vnode hook\",\n [8]: \"directive hook\",\n [9]: \"transition hook\",\n [10]: \"app errorHandler\",\n [11]: \"app warnHandler\",\n [12]: \"ref function\",\n [13]: \"async component loader\",\n [14]: \"scheduler flush\",\n [15]: \"component update\",\n [16]: \"app unmount cleanup function\"\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n try {\n return args ? fn(...args) : fn();\n } catch (err) {\n handleError(err, instance, type);\n }\n}\nfunction callWithAsyncErrorHandling(fn, instance, type, args) {\n if (isFunction(fn)) {\n const res = callWithErrorHandling(fn, instance, type, args);\n if (res && isPromise(res)) {\n res.catch((err) => {\n handleError(err, instance, type);\n });\n }\n return res;\n }\n if (isArray(fn)) {\n const values = [];\n for (let i = 0; i < fn.length; i++) {\n values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\n }\n return values;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof fn}`\n );\n }\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n const contextVNode = instance ? instance.vnode : null;\n const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || EMPTY_OBJ;\n if (instance) {\n let cur = instance.parent;\n const exposedInstance = instance.proxy;\n const errorInfo = !!(process.env.NODE_ENV !== \"production\") ? ErrorTypeStrings$1[type] : `https://vuejs.org/error-reference/#runtime-${type}`;\n while (cur) {\n const errorCapturedHooks = cur.ec;\n if (errorCapturedHooks) {\n for (let i = 0; i < errorCapturedHooks.length; i++) {\n if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n return;\n }\n }\n }\n cur = cur.parent;\n }\n if (errorHandler) {\n pauseTracking();\n callWithErrorHandling(errorHandler, null, 10, [\n err,\n exposedInstance,\n errorInfo\n ]);\n resetTracking();\n return;\n }\n }\n logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction);\n}\nfunction logError(err, type, contextVNode, throwInDev = true, throwInProd = false) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const info = ErrorTypeStrings$1[type];\n if (contextVNode) {\n pushWarningContext(contextVNode);\n }\n warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\n if (contextVNode) {\n popWarningContext();\n }\n if (throwInDev) {\n throw err;\n } else {\n console.error(err);\n }\n } else if (throwInProd) {\n throw err;\n } else {\n console.error(err);\n }\n}\n\nconst queue = [];\nlet flushIndex = -1;\nconst pendingPostFlushCbs = [];\nlet activePostFlushCbs = null;\nlet postFlushIndex = 0;\nconst resolvedPromise = /* @__PURE__ */ Promise.resolve();\nlet currentFlushPromise = null;\nconst RECURSION_LIMIT = 100;\nfunction nextTick(fn) {\n const p = currentFlushPromise || resolvedPromise;\n return fn ? p.then(this ? fn.bind(this) : fn) : p;\n}\nfunction findInsertionIndex(id) {\n let start = flushIndex + 1;\n let end = queue.length;\n while (start < end) {\n const middle = start + end >>> 1;\n const middleJob = queue[middle];\n const middleJobId = getId(middleJob);\n if (middleJobId < id || middleJobId === id && middleJob.flags & 2) {\n start = middle + 1;\n } else {\n end = middle;\n }\n }\n return start;\n}\nfunction queueJob(job) {\n if (!(job.flags & 1)) {\n const jobId = getId(job);\n const lastJob = queue[queue.length - 1];\n if (!lastJob || // fast path when the job id is larger than the tail\n !(job.flags & 2) && jobId >= getId(lastJob)) {\n queue.push(job);\n } else {\n queue.splice(findInsertionIndex(jobId), 0, job);\n }\n job.flags |= 1;\n queueFlush();\n }\n}\nfunction queueFlush() {\n if (!currentFlushPromise) {\n currentFlushPromise = resolvedPromise.then(flushJobs);\n }\n}\nfunction queuePostFlushCb(cb) {\n if (!isArray(cb)) {\n if (activePostFlushCbs && cb.id === -1) {\n activePostFlushCbs.splice(postFlushIndex + 1, 0, cb);\n } else if (!(cb.flags & 1)) {\n pendingPostFlushCbs.push(cb);\n cb.flags |= 1;\n }\n } else {\n for (let i = 0; i < cb.length; i++) {\n pendingPostFlushCbs.push(cb[i]);\n }\n }\n queueFlush();\n}\nfunction flushPreFlushCbs(instance, seen, i = flushIndex + 1) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (; i < queue.length; i++) {\n const cb = queue[i];\n if (cb && cb.flags & 2) {\n if (instance && cb.id !== instance.uid) {\n continue;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n queue.splice(i, 1);\n i--;\n if (cb.flags & 4) {\n cb.flags &= -2;\n }\n cb();\n if (!(cb.flags & 4)) {\n cb.flags &= -2;\n }\n }\n }\n}\nfunction flushPostFlushCbs(seen) {\n if (pendingPostFlushCbs.length) {\n const deduped = [...new Set(pendingPostFlushCbs)].sort(\n (a, b) => getId(a) - getId(b)\n );\n pendingPostFlushCbs.length = 0;\n if (activePostFlushCbs) {\n for (let i = 0; i < deduped.length; i++) {\n activePostFlushCbs.push(deduped[i]);\n }\n return;\n }\n activePostFlushCbs = deduped;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n const cb = activePostFlushCbs[postFlushIndex];\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n if (cb.flags & 4) {\n cb.flags &= -2;\n }\n if (!(cb.flags & 8)) cb();\n cb.flags &= -2;\n }\n activePostFlushCbs = null;\n postFlushIndex = 0;\n }\n}\nconst getId = (job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id;\nfunction flushJobs(seen) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n const check = !!(process.env.NODE_ENV !== \"production\") ? (job) => checkRecursiveUpdates(seen, job) : NOOP;\n try {\n for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job && !(job.flags & 8)) {\n if (!!(process.env.NODE_ENV !== \"production\") && check(job)) {\n continue;\n }\n if (job.flags & 4) {\n job.flags &= ~1;\n }\n callWithErrorHandling(\n job,\n job.i,\n job.i ? 15 : 14\n );\n if (!(job.flags & 4)) {\n job.flags &= ~1;\n }\n }\n }\n } finally {\n for (; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job) {\n job.flags &= -2;\n }\n }\n flushIndex = -1;\n queue.length = 0;\n flushPostFlushCbs(seen);\n currentFlushPromise = null;\n if (queue.length || pendingPostFlushCbs.length) {\n flushJobs(seen);\n }\n }\n}\nfunction checkRecursiveUpdates(seen, fn) {\n const count = seen.get(fn) || 0;\n if (count > RECURSION_LIMIT) {\n const instance = fn.i;\n const componentName = instance && getComponentName(instance.type);\n handleError(\n `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,\n null,\n 10\n );\n return true;\n }\n seen.set(fn, count + 1);\n return false;\n}\n\nlet isHmrUpdating = false;\nconst setHmrUpdating = (v) => {\n try {\n return isHmrUpdating;\n } finally {\n isHmrUpdating = v;\n }\n};\nconst hmrDirtyComponents = /* @__PURE__ */ new Map();\nif (!!(process.env.NODE_ENV !== \"production\")) {\n getGlobalThis().__VUE_HMR_RUNTIME__ = {\n createRecord: tryWrap(createRecord),\n rerender: tryWrap(rerender),\n reload: tryWrap(reload)\n };\n}\nconst map = /* @__PURE__ */ new Map();\nfunction registerHMR(instance) {\n const id = instance.type.__hmrId;\n let record = map.get(id);\n if (!record) {\n createRecord(id, instance.type);\n record = map.get(id);\n }\n record.instances.add(instance);\n}\nfunction unregisterHMR(instance) {\n map.get(instance.type.__hmrId).instances.delete(instance);\n}\nfunction createRecord(id, initialDef) {\n if (map.has(id)) {\n return false;\n }\n map.set(id, {\n initialDef: normalizeClassComponent(initialDef),\n instances: /* @__PURE__ */ new Set()\n });\n return true;\n}\nfunction normalizeClassComponent(component) {\n return isClassComponent(component) ? component.__vccOpts : component;\n}\nfunction rerender(id, newRender) {\n const record = map.get(id);\n if (!record) {\n return;\n }\n record.initialDef.render = newRender;\n [...record.instances].forEach((instance) => {\n if (newRender) {\n instance.render = newRender;\n normalizeClassComponent(instance.type).render = newRender;\n }\n instance.renderCache = [];\n isHmrUpdating = true;\n if (!(instance.job.flags & 8)) {\n instance.update();\n }\n isHmrUpdating = false;\n });\n}\nfunction reload(id, newComp) {\n const record = map.get(id);\n if (!record) return;\n newComp = normalizeClassComponent(newComp);\n updateComponentDef(record.initialDef, newComp);\n const instances = [...record.instances];\n for (let i = 0; i < instances.length; i++) {\n const instance = instances[i];\n const oldComp = normalizeClassComponent(instance.type);\n let dirtyInstances = hmrDirtyComponents.get(oldComp);\n if (!dirtyInstances) {\n if (oldComp !== record.initialDef) {\n updateComponentDef(oldComp, newComp);\n }\n hmrDirtyComponents.set(oldComp, dirtyInstances = /* @__PURE__ */ new Set());\n }\n dirtyInstances.add(instance);\n instance.appContext.propsCache.delete(instance.type);\n instance.appContext.emitsCache.delete(instance.type);\n instance.appContext.optionsCache.delete(instance.type);\n if (instance.ceReload) {\n dirtyInstances.add(instance);\n instance.ceReload(newComp.styles);\n dirtyInstances.delete(instance);\n } else if (instance.parent) {\n queueJob(() => {\n if (!(instance.job.flags & 8)) {\n isHmrUpdating = true;\n instance.parent.update();\n isHmrUpdating = false;\n dirtyInstances.delete(instance);\n }\n });\n } else if (instance.appContext.reload) {\n instance.appContext.reload();\n } else if (typeof window !== \"undefined\") {\n window.location.reload();\n } else {\n console.warn(\n \"[HMR] Root or manually mounted instance modified. Full reload required.\"\n );\n }\n if (instance.root.ce && instance !== instance.root) {\n instance.root.ce._removeChildStyle(oldComp);\n }\n }\n queuePostFlushCb(() => {\n hmrDirtyComponents.clear();\n });\n}\nfunction updateComponentDef(oldComp, newComp) {\n extend(oldComp, newComp);\n for (const key in oldComp) {\n if (key !== \"__file\" && !(key in newComp)) {\n delete oldComp[key];\n }\n }\n}\nfunction tryWrap(fn) {\n return (id, arg) => {\n try {\n return fn(id, arg);\n } catch (e) {\n console.error(e);\n console.warn(\n `[HMR] Something went wrong during Vue component hot-reload. Full reload required.`\n );\n }\n };\n}\n\nlet devtools$1;\nlet buffer = [];\nlet devtoolsNotInstalled = false;\nfunction emit$1(event, ...args) {\n if (devtools$1) {\n devtools$1.emit(event, ...args);\n } else if (!devtoolsNotInstalled) {\n buffer.push({ event, args });\n }\n}\nfunction setDevtoolsHook$1(hook, target) {\n var _a, _b;\n devtools$1 = hook;\n if (devtools$1) {\n devtools$1.enabled = true;\n buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args));\n buffer = [];\n } else if (\n // handle late devtools injection - only do this if we are in an actual\n // browser environment to avoid the timer handle stalling test runner exit\n // (#4815)\n typeof window !== \"undefined\" && // some envs mock window but not fully\n window.HTMLElement && // also exclude jsdom\n // eslint-disable-next-line no-restricted-syntax\n !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes(\"jsdom\"))\n ) {\n const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];\n replay.push((newHook) => {\n setDevtoolsHook$1(newHook, target);\n });\n setTimeout(() => {\n if (!devtools$1) {\n target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;\n devtoolsNotInstalled = true;\n buffer = [];\n }\n }, 3e3);\n } else {\n devtoolsNotInstalled = true;\n buffer = [];\n }\n}\nfunction devtoolsInitApp(app, version) {\n emit$1(\"app:init\" /* APP_INIT */, app, version, {\n Fragment,\n Text,\n Comment,\n Static\n });\n}\nfunction devtoolsUnmountApp(app) {\n emit$1(\"app:unmount\" /* APP_UNMOUNT */, app);\n}\nconst devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook(\"component:added\" /* COMPONENT_ADDED */);\nconst devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook(\"component:updated\" /* COMPONENT_UPDATED */);\nconst _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook(\n \"component:removed\" /* COMPONENT_REMOVED */\n);\nconst devtoolsComponentRemoved = (component) => {\n if (devtools$1 && typeof devtools$1.cleanupBuffer === \"function\" && // remove the component if it wasn't buffered\n !devtools$1.cleanupBuffer(component)) {\n _devtoolsComponentRemoved(component);\n }\n};\n// @__NO_SIDE_EFFECTS__\nfunction createDevtoolsComponentHook(hook) {\n return (component) => {\n emit$1(\n hook,\n component.appContext.app,\n component.uid,\n component.parent ? component.parent.uid : void 0,\n component\n );\n };\n}\nconst devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook(\"perf:start\" /* PERFORMANCE_START */);\nconst devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook(\"perf:end\" /* PERFORMANCE_END */);\nfunction createDevtoolsPerformanceHook(hook) {\n return (component, type, time) => {\n emit$1(hook, component.appContext.app, component.uid, component, type, time);\n };\n}\nfunction devtoolsComponentEmit(component, event, params) {\n emit$1(\n \"component:emit\" /* COMPONENT_EMIT */,\n component.appContext.app,\n component,\n event,\n params\n );\n}\n\nlet currentRenderingInstance = null;\nlet currentScopeId = null;\nfunction setCurrentRenderingInstance(instance) {\n const prev = currentRenderingInstance;\n currentRenderingInstance = instance;\n currentScopeId = instance && instance.type.__scopeId || null;\n return prev;\n}\nfunction pushScopeId(id) {\n currentScopeId = id;\n}\nfunction popScopeId() {\n currentScopeId = null;\n}\nconst withScopeId = (_id) => withCtx;\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) {\n if (!ctx) return fn;\n if (fn._n) {\n return fn;\n }\n const renderFnWithContext = (...args) => {\n if (renderFnWithContext._d) {\n setBlockTracking(-1);\n }\n const prevInstance = setCurrentRenderingInstance(ctx);\n const prevStackSize = blockStack.length;\n let res;\n try {\n res = fn(...args);\n } finally {\n for (let i = blockStack.length; i > prevStackSize; i--) closeBlock();\n setCurrentRenderingInstance(prevInstance);\n if (renderFnWithContext._d) {\n setBlockTracking(1);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentUpdated(ctx);\n }\n return res;\n };\n renderFnWithContext._n = true;\n renderFnWithContext._c = true;\n renderFnWithContext._d = true;\n return renderFnWithContext;\n}\n\nfunction validateDirectiveName(name) {\n if (isBuiltInDirective(name)) {\n warn$1(\"Do not use built-in directive ids as custom directive id: \" + name);\n }\n}\nfunction withDirectives(vnode, directives) {\n if (currentRenderingInstance === null) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`withDirectives can only be used inside render functions.`);\n return vnode;\n }\n const instance = getComponentPublicInstance(currentRenderingInstance);\n const bindings = vnode.dirs || (vnode.dirs = []);\n for (let i = 0; i < directives.length; i++) {\n let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];\n if (dir) {\n if (isFunction(dir)) {\n dir = {\n mounted: dir,\n updated: dir\n };\n }\n if (dir.deep) {\n traverse(value);\n }\n bindings.push({\n dir,\n instance,\n value,\n oldValue: void 0,\n arg,\n modifiers\n });\n }\n }\n return vnode;\n}\nfunction invokeDirectiveHook(vnode, prevVNode, instance, name) {\n const bindings = vnode.dirs;\n const oldBindings = prevVNode && prevVNode.dirs;\n for (let i = 0; i < bindings.length; i++) {\n const binding = bindings[i];\n if (oldBindings) {\n binding.oldValue = oldBindings[i].value;\n }\n let hook = binding.dir[name];\n if (hook) {\n pauseTracking();\n callWithAsyncErrorHandling(hook, instance, 8, [\n vnode.el,\n binding,\n vnode,\n prevVNode\n ]);\n resetTracking();\n }\n }\n}\n\nfunction provide(key, value) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!currentInstance || currentInstance.isMounted) {\n warn$1(`provide() can only be used inside setup().`);\n }\n }\n if (currentInstance) {\n let provides = currentInstance.provides;\n const parentProvides = currentInstance.parent && currentInstance.parent.provides;\n if (parentProvides === provides) {\n provides = currentInstance.provides = Object.create(parentProvides);\n }\n provides[key] = value;\n }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory = false) {\n const instance = getCurrentInstance();\n if (instance || currentApp) {\n let provides = currentApp ? currentApp._context.provides : instance ? instance.parent == null || instance.ce ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : void 0;\n if (provides && key in provides) {\n return provides[key];\n } else if (arguments.length > 1) {\n return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`injection \"${String(key)}\" not found.`);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`inject() can only be used inside setup() or functional components.`);\n }\n}\nfunction hasInjectionContext() {\n return !!(getCurrentInstance() || currentApp);\n}\n\nconst ssrContextKey = /* @__PURE__ */ Symbol.for(\"v-scx\");\nconst useSSRContext = () => {\n {\n const ctx = inject(ssrContextKey);\n if (!ctx) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build.`\n );\n }\n return ctx;\n }\n};\n\nfunction watchEffect(effect, options) {\n return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n return doWatch(\n effect,\n null,\n !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"post\" }) : { flush: \"post\" }\n );\n}\nfunction watchSyncEffect(effect, options) {\n return doWatch(\n effect,\n null,\n !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"sync\" }) : { flush: \"sync\" }\n );\n}\nfunction watch(source, cb, options) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isFunction(cb)) {\n warn$1(\n `\\`watch(fn, options?)\\` signature has been moved to a separate API. Use \\`watchEffect(fn, options?)\\` instead. \\`watch\\` now only supports \\`watch(source, cb, options?) signature.`\n );\n }\n return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, options = EMPTY_OBJ) {\n const { immediate, deep, flush, once } = options;\n if (!!(process.env.NODE_ENV !== \"production\") && !cb) {\n if (immediate !== void 0) {\n warn$1(\n `watch() \"immediate\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n if (deep !== void 0) {\n warn$1(\n `watch() \"deep\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n if (once !== void 0) {\n warn$1(\n `watch() \"once\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n }\n const baseWatchOptions = extend({}, options);\n if (!!(process.env.NODE_ENV !== \"production\")) baseWatchOptions.onWarn = warn$1;\n const runsImmediately = cb && immediate || !cb && flush !== \"post\";\n let ssrCleanup;\n if (isInSSRComponentSetup) {\n if (flush === \"sync\") {\n const ctx = useSSRContext();\n ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []);\n } else if (!runsImmediately) {\n const watchStopHandle = () => {\n };\n watchStopHandle.stop = NOOP;\n watchStopHandle.resume = NOOP;\n watchStopHandle.pause = NOOP;\n return watchStopHandle;\n }\n }\n const instance = currentInstance;\n baseWatchOptions.call = (fn, type, args) => callWithAsyncErrorHandling(fn, instance, type, args);\n let isPre = false;\n if (flush === \"post\") {\n baseWatchOptions.scheduler = (job) => {\n queuePostRenderEffect(job, instance && instance.suspense);\n };\n } else if (flush !== \"sync\") {\n isPre = true;\n baseWatchOptions.scheduler = (job, isFirstRun) => {\n if (isFirstRun) {\n job();\n } else {\n queueJob(job);\n }\n };\n }\n baseWatchOptions.augmentJob = (job) => {\n if (cb) {\n job.flags |= 4;\n }\n if (isPre) {\n job.flags |= 2;\n if (instance) {\n job.id = instance.uid;\n job.i = instance;\n }\n }\n };\n const watchHandle = watch$1(source, cb, baseWatchOptions);\n if (isInSSRComponentSetup) {\n if (ssrCleanup) {\n ssrCleanup.push(watchHandle);\n } else if (runsImmediately) {\n watchHandle();\n }\n }\n return watchHandle;\n}\nfunction instanceWatch(source, value, options) {\n const publicThis = this.proxy;\n const getter = isString(source) ? source.includes(\".\") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis);\n let cb;\n if (isFunction(value)) {\n cb = value;\n } else {\n cb = value.handler;\n options = value;\n }\n const reset = setCurrentInstance(this);\n const res = doWatch(getter, cb.bind(publicThis), options);\n reset();\n return res;\n}\nfunction createPathGetter(ctx, path) {\n const segments = path.split(\".\");\n return () => {\n let cur = ctx;\n for (let i = 0; i < segments.length && cur; i++) {\n cur = cur[segments[i]];\n }\n return cur;\n };\n}\n\nconst pendingMounts = /* @__PURE__ */ new WeakMap();\nconst TeleportEndKey = /* @__PURE__ */ Symbol(\"_vte\");\nconst isTeleport = (type) => type.__isTeleport;\nconst isTeleportDisabled = (props) => props && (props.disabled || props.disabled === \"\");\nconst isTeleportDeferred = (props) => props && (props.defer || props.defer === \"\");\nconst isTargetSVG = (target) => typeof SVGElement !== \"undefined\" && target instanceof SVGElement;\nconst isTargetMathML = (target) => typeof MathMLElement === \"function\" && target instanceof MathMLElement;\nconst resolveTarget = (props, select) => {\n const targetSelector = props && props.to;\n if (isString(targetSelector)) {\n if (!select) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Current renderer does not support string target for Teleports. (missing querySelector renderer option)`\n );\n return null;\n } else {\n const target = select(targetSelector);\n if (!!(process.env.NODE_ENV !== \"production\") && !target && !isTeleportDisabled(props)) {\n warn$1(\n `Failed to locate Teleport target with selector \"${targetSelector}\". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.`\n );\n }\n return target;\n }\n } else {\n if (!!(process.env.NODE_ENV !== \"production\") && !targetSelector && !isTeleportDisabled(props)) {\n warn$1(`Invalid Teleport target: ${targetSelector}`);\n }\n return targetSelector;\n }\n};\nconst TeleportImpl = {\n name: \"Teleport\",\n __isTeleport: true,\n process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, internals) {\n const {\n mc: mountChildren,\n pc: patchChildren,\n pbc: patchBlockChildren,\n o: { insert, querySelector, createText, createComment, parentNode }\n } = internals;\n const disabled = isTeleportDisabled(n2.props);\n let { dynamicChildren } = n2;\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n optimized = false;\n dynamicChildren = null;\n }\n const mount = (vnode, container2, anchor2) => {\n if (vnode.shapeFlag & 16) {\n mountChildren(\n vnode.children,\n container2,\n anchor2,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n };\n const mountToTarget = (vnode = n2) => {\n const disabled2 = isTeleportDisabled(vnode.props);\n const target = vnode.target = resolveTarget(vnode.props, querySelector);\n const targetAnchor = prepareAnchor(target, vnode, createText, insert);\n if (target) {\n if (namespace !== \"svg\" && isTargetSVG(target)) {\n namespace = \"svg\";\n } else if (namespace !== \"mathml\" && isTargetMathML(target)) {\n namespace = \"mathml\";\n }\n if (parentComponent && parentComponent.isCE) {\n (parentComponent.ce._teleportTargets || (parentComponent.ce._teleportTargets = /* @__PURE__ */ new Set())).add(target);\n }\n if (!disabled2) {\n mount(vnode, target, targetAnchor);\n updateCssVars(vnode, false);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && !disabled2) {\n warn$1(\"Invalid Teleport target on mount:\", target, `(${typeof target})`);\n }\n };\n const queuePendingMount = (vnode) => {\n const mountJob = () => {\n if (pendingMounts.get(vnode) !== mountJob) return;\n pendingMounts.delete(vnode);\n if (isTeleportDisabled(vnode.props)) {\n const mountContainer = parentNode(vnode.el) || container;\n mount(vnode, mountContainer, vnode.anchor);\n updateCssVars(vnode, true);\n }\n mountToTarget(vnode);\n };\n pendingMounts.set(vnode, mountJob);\n queuePostRenderEffect(mountJob, parentSuspense);\n };\n if (n1 == null) {\n const placeholder = n2.el = !!(process.env.NODE_ENV !== \"production\") ? createComment(\"teleport start\") : createText(\"\");\n const mainAnchor = n2.anchor = !!(process.env.NODE_ENV !== \"production\") ? createComment(\"teleport end\") : createText(\"\");\n insert(placeholder, container, anchor);\n insert(mainAnchor, container, anchor);\n if (isTeleportDeferred(n2.props) || parentSuspense && parentSuspense.pendingBranch) {\n queuePendingMount(n2);\n return;\n }\n if (disabled) {\n mount(n2, container, mainAnchor);\n updateCssVars(n2, true);\n }\n mountToTarget();\n } else {\n n2.el = n1.el;\n const mainAnchor = n2.anchor = n1.anchor;\n const pendingMount = pendingMounts.get(n1);\n if (pendingMount) {\n pendingMount.flags |= 8;\n pendingMounts.delete(n1);\n queuePendingMount(n2);\n return;\n }\n n2.targetStart = n1.targetStart;\n const target = n2.target = n1.target;\n const targetAnchor = n2.targetAnchor = n1.targetAnchor;\n const wasDisabled = isTeleportDisabled(n1.props);\n const currentContainer = wasDisabled ? container : target;\n const currentAnchor = wasDisabled ? mainAnchor : targetAnchor;\n if (namespace === \"svg\" || isTargetSVG(target)) {\n namespace = \"svg\";\n } else if (namespace === \"mathml\" || isTargetMathML(target)) {\n namespace = \"mathml\";\n }\n if (dynamicChildren) {\n patchBlockChildren(\n n1.dynamicChildren,\n dynamicChildren,\n currentContainer,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds\n );\n traverseStaticChildren(n1, n2, !!!(process.env.NODE_ENV !== \"production\"));\n } else if (!optimized) {\n patchChildren(\n n1,\n n2,\n currentContainer,\n currentAnchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n false\n );\n }\n if (disabled) {\n if (!wasDisabled) {\n moveTeleport(\n n2,\n container,\n mainAnchor,\n internals,\n 1\n );\n } else {\n if (n2.props && n1.props && n2.props.to !== n1.props.to) {\n n2.props.to = n1.props.to;\n }\n }\n } else {\n if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) {\n const nextTarget = resolveTarget(n2.props, querySelector);\n if (nextTarget) {\n n2.target = nextTarget;\n moveTeleport(\n n2,\n nextTarget,\n null,\n internals,\n 0\n );\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n \"Invalid Teleport target on update:\",\n target,\n `(${typeof target})`\n );\n }\n } else if (wasDisabled) {\n moveTeleport(\n n2,\n target,\n targetAnchor,\n internals,\n 1\n );\n }\n }\n updateCssVars(n2, disabled);\n }\n },\n remove(vnode, parentComponent, parentSuspense, { um: unmount, o: { remove: hostRemove } }, doRemove) {\n const {\n shapeFlag,\n children,\n anchor,\n targetStart,\n targetAnchor,\n target,\n props\n } = vnode;\n const disabled = isTeleportDisabled(props);\n const shouldRemove = doRemove || !disabled;\n const pendingMount = pendingMounts.get(vnode);\n if (pendingMount) {\n pendingMount.flags |= 8;\n pendingMounts.delete(vnode);\n }\n if (target) {\n hostRemove(targetStart);\n hostRemove(targetAnchor);\n }\n doRemove && hostRemove(anchor);\n if (!pendingMount && (disabled || target) && shapeFlag & 16) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n unmount(\n child,\n parentComponent,\n parentSuspense,\n shouldRemove,\n !!child.dynamicChildren\n );\n }\n }\n },\n move: moveTeleport,\n hydrate: hydrateTeleport\n};\nfunction moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2) {\n if (moveType === 0) {\n insert(vnode.targetAnchor, container, parentAnchor);\n }\n const { el, anchor, shapeFlag, children, props } = vnode;\n const isReorder = moveType === 2;\n if (isReorder) {\n insert(el, container, parentAnchor);\n }\n if (!pendingMounts.has(vnode) && (!isReorder || isTeleportDisabled(props))) {\n if (shapeFlag & 16) {\n for (let i = 0; i < children.length; i++) {\n move(\n children[i],\n container,\n parentAnchor,\n 2\n );\n }\n }\n }\n if (isReorder) {\n insert(anchor, container, parentAnchor);\n }\n}\nfunction hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, {\n o: { nextSibling, parentNode, querySelector, insert, createText }\n}, hydrateChildren) {\n function hydrateAnchor(target2, targetNode) {\n let targetAnchor = targetNode;\n while (targetAnchor) {\n if (targetAnchor && targetAnchor.nodeType === 8) {\n if (targetAnchor.data === \"teleport start anchor\") {\n vnode.targetStart = targetAnchor;\n } else if (targetAnchor.data === \"teleport anchor\") {\n vnode.targetAnchor = targetAnchor;\n target2._lpa = vnode.targetAnchor && nextSibling(vnode.targetAnchor);\n break;\n }\n }\n targetAnchor = nextSibling(targetAnchor);\n }\n }\n function hydrateDisabledTeleport(node2, vnode2) {\n vnode2.anchor = hydrateChildren(\n nextSibling(node2),\n vnode2,\n parentNode(node2),\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n const target = vnode.target = resolveTarget(\n vnode.props,\n querySelector\n );\n const disabled = isTeleportDisabled(vnode.props);\n if (target) {\n const targetNode = target._lpa || target.firstChild;\n if (vnode.shapeFlag & 16) {\n if (disabled) {\n hydrateDisabledTeleport(node, vnode);\n hydrateAnchor(target, targetNode);\n if (!vnode.targetAnchor) {\n prepareAnchor(\n target,\n vnode,\n createText,\n insert,\n // if target is the same as the main view, insert anchors before current node\n // to avoid hydrating mismatch\n parentNode(node) === target ? node : null\n );\n }\n } else {\n vnode.anchor = nextSibling(node);\n hydrateAnchor(target, targetNode);\n if (!vnode.targetAnchor) {\n prepareAnchor(target, vnode, createText, insert);\n }\n hydrateChildren(\n targetNode && nextSibling(targetNode),\n vnode,\n target,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n }\n updateCssVars(vnode, disabled);\n } else if (disabled) {\n if (vnode.shapeFlag & 16) {\n hydrateDisabledTeleport(node, vnode);\n vnode.targetStart = node;\n vnode.targetAnchor = nextSibling(node);\n }\n }\n return vnode.anchor && nextSibling(vnode.anchor);\n}\nconst Teleport = TeleportImpl;\nfunction updateCssVars(vnode, isDisabled) {\n const ctx = vnode.ctx;\n if (ctx && ctx.ut) {\n let node, anchor;\n if (isDisabled) {\n node = vnode.el;\n anchor = vnode.anchor;\n } else {\n node = vnode.targetStart;\n anchor = vnode.targetAnchor;\n }\n while (node && node !== anchor) {\n if (node.nodeType === 1) node.setAttribute(\"data-v-owner\", ctx.uid);\n node = node.nextSibling;\n }\n ctx.ut();\n }\n}\nfunction prepareAnchor(target, vnode, createText, insert, anchor = null) {\n const targetStart = vnode.targetStart = createText(\"\");\n const targetAnchor = vnode.targetAnchor = createText(\"\");\n targetStart[TeleportEndKey] = targetAnchor;\n if (target) {\n insert(targetStart, target, anchor);\n insert(targetAnchor, target, anchor);\n }\n return targetAnchor;\n}\n\nconst leaveCbKey = /* @__PURE__ */ Symbol(\"_leaveCb\");\nconst enterCbKey = /* @__PURE__ */ Symbol(\"_enterCb\");\nfunction useTransitionState() {\n const state = {\n isMounted: false,\n isLeaving: false,\n isUnmounting: false,\n leavingVNodes: /* @__PURE__ */ new Map()\n };\n onMounted(() => {\n state.isMounted = true;\n });\n onBeforeUnmount(() => {\n state.isUnmounting = true;\n });\n return state;\n}\nconst TransitionHookValidator = [Function, Array];\nconst BaseTransitionPropsValidators = {\n mode: String,\n appear: Boolean,\n persisted: Boolean,\n // enter\n onBeforeEnter: TransitionHookValidator,\n onEnter: TransitionHookValidator,\n onAfterEnter: TransitionHookValidator,\n onEnterCancelled: TransitionHookValidator,\n // leave\n onBeforeLeave: TransitionHookValidator,\n onLeave: TransitionHookValidator,\n onAfterLeave: TransitionHookValidator,\n onLeaveCancelled: TransitionHookValidator,\n // appear\n onBeforeAppear: TransitionHookValidator,\n onAppear: TransitionHookValidator,\n onAfterAppear: TransitionHookValidator,\n onAppearCancelled: TransitionHookValidator\n};\nconst recursiveGetSubtree = (instance) => {\n const subTree = instance.subTree;\n return subTree.component ? recursiveGetSubtree(subTree.component) : subTree;\n};\nconst BaseTransitionImpl = {\n name: `BaseTransition`,\n props: BaseTransitionPropsValidators,\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const state = useTransitionState();\n return () => {\n const children = slots.default && getTransitionRawChildren(slots.default(), true);\n const child = children && children.length ? findNonCommentChild(children) : (\n // Keep explicit default-slot conditionals on the same transition path\n // as regular v-if branches, which render a comment placeholder.\n instance.subTree ? createCommentVNode() : void 0\n );\n if (!child) {\n return;\n }\n const rawProps = toRaw(props);\n const { mode } = rawProps;\n if (!!(process.env.NODE_ENV !== \"production\") && mode && mode !== \"in-out\" && mode !== \"out-in\" && mode !== \"default\") {\n warn$1(`invalid mode: ${mode}`);\n }\n if (state.isLeaving) {\n return emptyPlaceholder(child);\n }\n const innerChild = getInnerChild$1(child);\n if (!innerChild) {\n return emptyPlaceholder(child);\n }\n let enterHooks = resolveTransitionHooks(\n innerChild,\n rawProps,\n state,\n instance,\n // #11061, ensure enterHooks is fresh after clone\n (hooks) => enterHooks = hooks\n );\n if (innerChild.type !== Comment) {\n setTransitionHooks(innerChild, enterHooks);\n }\n let oldInnerChild = instance.subTree && getInnerChild$1(instance.subTree);\n if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(oldInnerChild, innerChild) && recursiveGetSubtree(instance).type !== Comment) {\n let leavingHooks = resolveTransitionHooks(\n oldInnerChild,\n rawProps,\n state,\n instance\n );\n setTransitionHooks(oldInnerChild, leavingHooks);\n if (mode === \"out-in\" && innerChild.type !== Comment) {\n state.isLeaving = true;\n leavingHooks.afterLeave = () => {\n state.isLeaving = false;\n if (!(instance.job.flags & 8)) {\n instance.update();\n }\n delete leavingHooks.afterLeave;\n oldInnerChild = void 0;\n };\n return emptyPlaceholder(child);\n } else if (mode === \"in-out\" && innerChild.type !== Comment) {\n leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {\n const leavingVNodesCache = getLeavingNodesForType(\n state,\n oldInnerChild\n );\n leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;\n el[leaveCbKey] = () => {\n earlyRemove();\n el[leaveCbKey] = void 0;\n delete enterHooks.delayedLeave;\n oldInnerChild = void 0;\n };\n enterHooks.delayedLeave = () => {\n delayedLeave();\n delete enterHooks.delayedLeave;\n oldInnerChild = void 0;\n };\n };\n } else {\n oldInnerChild = void 0;\n }\n } else if (oldInnerChild) {\n oldInnerChild = void 0;\n }\n return child;\n };\n }\n};\nfunction findNonCommentChild(children) {\n let child = children[0];\n if (children.length > 1) {\n let hasFound = false;\n for (const c of children) {\n if (c.type !== Comment) {\n if (!!(process.env.NODE_ENV !== \"production\") && hasFound) {\n warn$1(\n \" can only be used on a single element or component. Use for lists.\"\n );\n break;\n }\n child = c;\n hasFound = true;\n if (!!!(process.env.NODE_ENV !== \"production\")) break;\n }\n }\n }\n return child;\n}\nconst BaseTransition = BaseTransitionImpl;\nfunction getLeavingNodesForType(state, vnode) {\n const { leavingVNodes } = state;\n let leavingVNodesCache = leavingVNodes.get(vnode.type);\n if (!leavingVNodesCache) {\n leavingVNodesCache = /* @__PURE__ */ Object.create(null);\n leavingVNodes.set(vnode.type, leavingVNodesCache);\n }\n return leavingVNodesCache;\n}\nfunction resolveTransitionHooks(vnode, props, state, instance, postClone) {\n const {\n appear,\n mode,\n persisted = false,\n onBeforeEnter,\n onEnter,\n onAfterEnter,\n onEnterCancelled,\n onBeforeLeave,\n onLeave,\n onAfterLeave,\n onLeaveCancelled,\n onBeforeAppear,\n onAppear,\n onAfterAppear,\n onAppearCancelled\n } = props;\n const key = String(vnode.key);\n const leavingVNodesCache = getLeavingNodesForType(state, vnode);\n const callHook = (hook, args) => {\n hook && callWithAsyncErrorHandling(\n hook,\n instance,\n 9,\n args\n );\n };\n const callAsyncHook = (hook, args) => {\n const done = args[1];\n callHook(hook, args);\n if (isArray(hook)) {\n if (hook.every((hook2) => hook2.length <= 1)) done();\n } else if (hook.length <= 1) {\n done();\n }\n };\n const hooks = {\n mode,\n persisted,\n beforeEnter(el) {\n let hook = onBeforeEnter;\n if (!state.isMounted) {\n if (appear) {\n hook = onBeforeAppear || onBeforeEnter;\n } else {\n return;\n }\n }\n if (el[leaveCbKey]) {\n el[leaveCbKey](\n true\n /* cancelled */\n );\n }\n const leavingVNode = leavingVNodesCache[key];\n if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) {\n leavingVNode.el[leaveCbKey]();\n }\n callHook(hook, [el]);\n },\n enter(el) {\n if (!isHmrUpdating && leavingVNodesCache[key] === vnode) return;\n let hook = onEnter;\n let afterHook = onAfterEnter;\n let cancelHook = onEnterCancelled;\n if (!state.isMounted) {\n if (appear) {\n hook = onAppear || onEnter;\n afterHook = onAfterAppear || onAfterEnter;\n cancelHook = onAppearCancelled || onEnterCancelled;\n } else {\n return;\n }\n }\n let called = false;\n el[enterCbKey] = (cancelled) => {\n if (called) return;\n called = true;\n if (cancelled) {\n callHook(cancelHook, [el]);\n } else {\n callHook(afterHook, [el]);\n }\n if (hooks.delayedLeave) {\n hooks.delayedLeave();\n }\n el[enterCbKey] = void 0;\n };\n const done = el[enterCbKey].bind(null, false);\n if (hook) {\n callAsyncHook(hook, [el, done]);\n } else {\n done();\n }\n },\n leave(el, remove) {\n const key2 = String(vnode.key);\n if (el[enterCbKey]) {\n el[enterCbKey](\n true\n /* cancelled */\n );\n }\n if (state.isUnmounting) {\n return remove();\n }\n callHook(onBeforeLeave, [el]);\n let called = false;\n el[leaveCbKey] = (cancelled) => {\n if (called) return;\n called = true;\n remove();\n if (cancelled) {\n callHook(onLeaveCancelled, [el]);\n } else {\n callHook(onAfterLeave, [el]);\n }\n el[leaveCbKey] = void 0;\n if (leavingVNodesCache[key2] === vnode) {\n delete leavingVNodesCache[key2];\n }\n };\n const done = el[leaveCbKey].bind(null, false);\n leavingVNodesCache[key2] = vnode;\n if (onLeave) {\n callAsyncHook(onLeave, [el, done]);\n } else {\n done();\n }\n },\n clone(vnode2) {\n const hooks2 = resolveTransitionHooks(\n vnode2,\n props,\n state,\n instance,\n postClone\n );\n if (postClone) postClone(hooks2);\n return hooks2;\n }\n };\n return hooks;\n}\nfunction emptyPlaceholder(vnode) {\n if (isKeepAlive(vnode)) {\n vnode = cloneVNode(vnode);\n vnode.children = null;\n return vnode;\n }\n}\nfunction getInnerChild$1(vnode) {\n if (!isKeepAlive(vnode)) {\n if (isTeleport(vnode.type) && vnode.children) {\n return findNonCommentChild(vnode.children);\n }\n return vnode;\n }\n if (vnode.component) {\n return vnode.component.subTree;\n }\n const { shapeFlag, children } = vnode;\n if (children) {\n if (shapeFlag & 16) {\n return children[0];\n }\n if (shapeFlag & 32 && isFunction(children.default)) {\n return children.default();\n }\n }\n}\nfunction setTransitionHooks(vnode, hooks) {\n if (vnode.shapeFlag & 6 && vnode.component) {\n vnode.transition = hooks;\n const subTree = vnode.component.subTree;\n setTransitionHooks(\n isTeleport(subTree.type) ? getInnerChild$1(subTree) || subTree : subTree,\n hooks\n );\n } else if (vnode.shapeFlag & 128) {\n vnode.ssContent.transition = hooks.clone(vnode.ssContent);\n vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);\n } else {\n vnode.transition = hooks;\n }\n}\nfunction getTransitionRawChildren(children, keepComment = false, parentKey) {\n let ret = [];\n let keyedFragmentCount = 0;\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i);\n if (child.type === Fragment) {\n if (child.patchFlag & 128) keyedFragmentCount++;\n ret = ret.concat(\n getTransitionRawChildren(child.children, keepComment, key)\n );\n } else if (keepComment || child.type !== Comment) {\n ret.push(key != null ? cloneVNode(child, { key }) : child);\n }\n }\n if (keyedFragmentCount > 1) {\n for (let i = 0; i < ret.length; i++) {\n ret[i].patchFlag = -2;\n }\n }\n return ret;\n}\n\n// @__NO_SIDE_EFFECTS__\nfunction defineComponent(options, extraOptions) {\n return isFunction(options) ? (\n // #8236: extend call and options.name access are considered side-effects\n // by Rollup, so we have to wrap it in a pure-annotated IIFE.\n /* @__PURE__ */ (() => extend({ name: options.name }, extraOptions, { setup: options }))()\n ) : options;\n}\n\nfunction useId() {\n const i = getCurrentInstance();\n if (i) {\n return (i.appContext.config.idPrefix || \"v\") + \"-\" + i.ids[0] + i.ids[1]++;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `useId() is called when there is no active component instance to be associated with.`\n );\n }\n return \"\";\n}\nfunction markAsyncBoundary(instance) {\n instance.ids = [instance.ids[0] + instance.ids[2]++ + \"-\", 0, 0];\n}\n\nconst knownTemplateRefs = /* @__PURE__ */ new WeakSet();\nfunction useTemplateRef(key) {\n const i = getCurrentInstance();\n const r = shallowRef(null);\n if (i) {\n const refs = i.refs === EMPTY_OBJ ? i.refs = {} : i.refs;\n if (!!(process.env.NODE_ENV !== \"production\") && isTemplateRefKey(refs, key)) {\n warn$1(`useTemplateRef('${key}') already exists.`);\n } else {\n Object.defineProperty(refs, key, {\n enumerable: true,\n get: () => r.value,\n set: (val) => r.value = val\n });\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `useTemplateRef() is called when there is no active component instance to be associated with.`\n );\n }\n const ret = !!(process.env.NODE_ENV !== \"production\") ? readonly(r) : r;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n knownTemplateRefs.add(ret);\n }\n return ret;\n}\nfunction isTemplateRefKey(refs, key) {\n let desc;\n return !!((desc = Object.getOwnPropertyDescriptor(refs, key)) && !desc.configurable);\n}\n\nconst pendingSetRefMap = /* @__PURE__ */ new WeakMap();\nfunction setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {\n if (isArray(rawRef)) {\n rawRef.forEach(\n (r, i) => setRef(\n r,\n oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef),\n parentSuspense,\n vnode,\n isUnmount\n )\n );\n return;\n }\n if (isAsyncWrapper(vnode) && !isUnmount) {\n if (vnode.shapeFlag & 512 && vnode.type.__asyncResolved && vnode.component.subTree.component) {\n setRef(rawRef, oldRawRef, parentSuspense, vnode.component.subTree);\n }\n return;\n }\n const refValue = vnode.shapeFlag & 4 ? getComponentPublicInstance(vnode.component) : vnode.el;\n const value = isUnmount ? null : refValue;\n const { i: owner, r: ref } = rawRef;\n if (!!(process.env.NODE_ENV !== \"production\") && !owner) {\n warn$1(\n `Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.`\n );\n return;\n }\n const oldRef = oldRawRef && oldRawRef.r;\n const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs;\n const setupState = owner.setupState;\n const rawSetupState = toRaw(setupState);\n const canSetSetupRef = setupState === EMPTY_OBJ ? NO : (key) => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (hasOwn(rawSetupState, key) && !isRef(rawSetupState[key])) {\n warn$1(\n `Template ref \"${key}\" used on a non-ref value. It will not work in the production build.`\n );\n }\n if (knownTemplateRefs.has(rawSetupState[key])) {\n return false;\n }\n }\n if (isTemplateRefKey(refs, key)) {\n return false;\n }\n return hasOwn(rawSetupState, key);\n };\n const canSetRef = (ref2, key) => {\n if (!!(process.env.NODE_ENV !== \"production\") && knownTemplateRefs.has(ref2)) {\n return false;\n }\n if (key && isTemplateRefKey(refs, key)) {\n return false;\n }\n return true;\n };\n if (oldRef != null && oldRef !== ref) {\n invalidatePendingSetRef(oldRawRef);\n if (isString(oldRef)) {\n refs[oldRef] = null;\n if (canSetSetupRef(oldRef)) {\n setupState[oldRef] = null;\n }\n } else if (isRef(oldRef)) {\n const oldRawRefAtom = oldRawRef;\n if (canSetRef(oldRef, oldRawRefAtom.k)) {\n oldRef.value = null;\n }\n if (oldRawRefAtom.k) refs[oldRawRefAtom.k] = null;\n }\n }\n if (isFunction(ref)) {\n callWithErrorHandling(ref, owner, 12, [value, refs]);\n } else {\n const _isString = isString(ref);\n const _isRef = isRef(ref);\n if (_isString || _isRef) {\n const doSet = () => {\n if (rawRef.f) {\n const existing = _isString ? canSetSetupRef(ref) ? setupState[ref] : refs[ref] : canSetRef(ref) || !rawRef.k ? ref.value : refs[rawRef.k];\n if (isUnmount) {\n isArray(existing) && remove(existing, refValue);\n } else {\n if (!isArray(existing)) {\n if (_isString) {\n refs[ref] = [refValue];\n if (canSetSetupRef(ref)) {\n setupState[ref] = refs[ref];\n }\n } else {\n const newVal = [refValue];\n if (canSetRef(ref, rawRef.k)) {\n ref.value = newVal;\n }\n if (rawRef.k) refs[rawRef.k] = newVal;\n }\n } else if (!existing.includes(refValue)) {\n existing.push(refValue);\n }\n }\n } else if (_isString) {\n refs[ref] = value;\n if (canSetSetupRef(ref)) {\n setupState[ref] = value;\n }\n } else if (_isRef) {\n if (canSetRef(ref, rawRef.k)) {\n ref.value = value;\n }\n if (rawRef.k) refs[rawRef.k] = value;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid template ref type:\", ref, `(${typeof ref})`);\n }\n };\n if (value) {\n const job = () => {\n doSet();\n pendingSetRefMap.delete(rawRef);\n };\n job.id = -1;\n pendingSetRefMap.set(rawRef, job);\n queuePostRenderEffect(job, parentSuspense);\n } else {\n invalidatePendingSetRef(rawRef);\n doSet();\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid template ref type:\", ref, `(${typeof ref})`);\n }\n }\n}\nfunction invalidatePendingSetRef(rawRef) {\n const pendingSetRef = pendingSetRefMap.get(rawRef);\n if (pendingSetRef) {\n pendingSetRef.flags |= 8;\n pendingSetRefMap.delete(rawRef);\n }\n}\n\nlet hasLoggedMismatchError = false;\nconst logMismatchError = () => {\n if (hasLoggedMismatchError) {\n return;\n }\n console.error(\"Hydration completed but contains mismatches.\");\n hasLoggedMismatchError = true;\n};\nconst isSVGContainer = (container) => container.namespaceURI.includes(\"svg\") && container.tagName !== \"foreignObject\";\nconst isMathMLContainer = (container) => container.namespaceURI.includes(\"MathML\");\nconst getContainerType = (container) => {\n if (container.nodeType !== 1) return void 0;\n if (isSVGContainer(container)) return \"svg\";\n if (isMathMLContainer(container)) return \"mathml\";\n return void 0;\n};\nconst isComment = (node) => node.nodeType === 8;\nfunction createHydrationFunctions(rendererInternals) {\n const {\n mt: mountComponent,\n p: patch,\n o: {\n patchProp,\n createText,\n nextSibling,\n parentNode,\n remove,\n insert,\n createComment\n }\n } = rendererInternals;\n const hydrate = (vnode, container) => {\n if (!container.hasChildNodes()) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Attempting to hydrate existing markup but container is empty. Performing full mount instead.`\n );\n patch(null, vnode, container);\n flushPostFlushCbs();\n container._vnode = vnode;\n return;\n }\n hydrateNode(container.firstChild, vnode, null, null, null);\n flushPostFlushCbs();\n container._vnode = vnode;\n };\n const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => {\n optimized = optimized || !!vnode.dynamicChildren;\n const isFragmentStart = isComment(node) && node.data === \"[\";\n const onMismatch = () => handleMismatch(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n isFragmentStart\n );\n const { type, ref, shapeFlag, patchFlag } = vnode;\n let domType = node.nodeType;\n vnode.el = node;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n def(node, \"__vnode\", vnode, true);\n def(node, \"__vueParentComponent\", parentComponent, true);\n }\n if (patchFlag === -2) {\n optimized = false;\n vnode.dynamicChildren = null;\n }\n let nextNode = null;\n switch (type) {\n case Text:\n if (domType !== 3) {\n if (vnode.children === \"\") {\n insert(vnode.el = createText(\"\"), parentNode(node), node);\n nextNode = node;\n } else {\n nextNode = onMismatch();\n }\n } else {\n if (node.data !== vnode.children) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration text mismatch in`,\n node.parentNode,\n `\n - rendered on server: ${JSON.stringify(\n node.data\n )}\n - expected on client: ${JSON.stringify(vnode.children)}`\n );\n logMismatchError();\n node.data = vnode.children;\n }\n nextNode = nextSibling(node);\n }\n break;\n case Comment:\n if (isTemplateNode(node)) {\n nextNode = nextSibling(node);\n replaceNode(\n vnode.el = node.content.firstChild,\n node,\n parentComponent\n );\n } else if (domType !== 8 || isFragmentStart) {\n nextNode = onMismatch();\n } else {\n nextNode = nextSibling(node);\n }\n break;\n case Static:\n if (isFragmentStart) {\n node = nextSibling(node);\n domType = node.nodeType;\n }\n if (domType === 1 || domType === 3) {\n nextNode = node;\n const needToAdoptContent = !vnode.children.length;\n for (let i = 0; i < vnode.staticCount; i++) {\n if (needToAdoptContent)\n vnode.children += nextNode.nodeType === 1 ? nextNode.outerHTML : nextNode.data;\n if (i === vnode.staticCount - 1) {\n vnode.anchor = nextNode;\n }\n nextNode = nextSibling(nextNode);\n }\n return isFragmentStart ? nextSibling(nextNode) : nextNode;\n } else {\n onMismatch();\n }\n break;\n case Fragment:\n if (!isFragmentStart) {\n nextNode = onMismatch();\n } else {\n nextNode = hydrateFragment(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n break;\n default:\n if (shapeFlag & 1) {\n if ((domType !== 1 || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) && !isTemplateNode(node)) {\n nextNode = onMismatch();\n } else {\n nextNode = hydrateElement(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n } else if (shapeFlag & 6) {\n vnode.slotScopeIds = slotScopeIds;\n const container = parentNode(node);\n if (isFragmentStart) {\n nextNode = locateClosingAnchor(node);\n } else if (isComment(node) && node.data === \"teleport start\") {\n nextNode = locateClosingAnchor(node, node.data, \"teleport end\");\n } else {\n nextNode = nextSibling(node);\n }\n mountComponent(\n vnode,\n container,\n null,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n optimized\n );\n if ((isAsyncWrapper(vnode) || vnode.component.asyncDep) && !vnode.component.subTree) {\n let subTree;\n if (isFragmentStart) {\n subTree = createVNode(Static);\n subTree.anchor = nextNode ? nextNode.previousSibling : container.lastChild;\n } else {\n subTree = node.nodeType === 3 ? createTextVNode(\"\") : createVNode(\n node.nodeType === 8 ? Comment : \"div\"\n );\n }\n subTree.el = node;\n vnode.component.subTree = subTree;\n }\n } else if (shapeFlag & 64) {\n if (domType !== 8) {\n nextNode = onMismatch();\n } else {\n nextNode = vnode.type.hydrate(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized,\n rendererInternals,\n hydrateChildren\n );\n }\n } else if (shapeFlag & 128) {\n nextNode = vnode.type.hydrate(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n getContainerType(parentNode(node)),\n slotScopeIds,\n optimized,\n rendererInternals,\n hydrateNode\n );\n } else if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) {\n warn$1(\"Invalid HostVNode type:\", type, `(${typeof type})`);\n }\n }\n if (ref != null) {\n setRef(ref, null, parentSuspense, vnode);\n }\n return nextNode;\n };\n const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n optimized = optimized || !!vnode.dynamicChildren;\n const {\n type,\n dynamicProps,\n props,\n patchFlag,\n shapeFlag,\n dirs,\n transition\n } = vnode;\n const forcePatch = type === \"input\" || type === \"option\";\n const hasDynamicProps = !!dynamicProps;\n if (!!(process.env.NODE_ENV !== \"production\") || forcePatch || hasDynamicProps || patchFlag !== -1) {\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n }\n let needCallTransitionHooks = false;\n if (isTemplateNode(el)) {\n needCallTransitionHooks = needTransition(\n null,\n // no need check parentSuspense in hydration\n transition\n ) && parentComponent && parentComponent.vnode.props && parentComponent.vnode.props.appear;\n const content = el.content.firstChild;\n if (needCallTransitionHooks) {\n const cls = content.getAttribute(\"class\");\n if (cls) content.$cls = cls;\n transition.beforeEnter(content);\n }\n replaceNode(content, el, parentComponent);\n vnode.el = el = content;\n }\n if (shapeFlag & 16 && // skip if element has innerHTML / textContent\n !(props && (props.innerHTML || props.textContent))) {\n let next = hydrateChildren(\n el.firstChild,\n vnode,\n el,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n if (next && !isMismatchAllowed(el, 1 /* CHILDREN */)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration children mismatch on`,\n el,\n `\nServer rendered element contains more child nodes than client vdom.`\n );\n logMismatchError();\n }\n while (next) {\n const cur = next;\n next = next.nextSibling;\n remove(cur);\n }\n } else if (shapeFlag & 8) {\n let clientText = vnode.children;\n if (clientText[0] === \"\\n\" && (el.tagName === \"PRE\" || el.tagName === \"TEXTAREA\")) {\n clientText = clientText.slice(1);\n }\n const { textContent } = el;\n if (textContent !== clientText && // innerHTML normalize \\r\\n or \\r into a single \\n in the DOM\n textContent !== clientText.replace(/\\r\\n|\\r/g, \"\\n\")) {\n if (!isMismatchAllowed(el, 0 /* TEXT */)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration text content mismatch on`,\n el,\n `\n - rendered on server: ${textContent}\n - expected on client: ${clientText}`\n );\n logMismatchError();\n }\n el.textContent = vnode.children;\n }\n }\n if (props) {\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__ || forcePatch || hasDynamicProps || !optimized || patchFlag & (16 | 32)) {\n const isCustomElement = el.tagName.includes(\"-\");\n const namespace = el.namespaceURI.includes(\"svg\") ? \"svg\" : el.namespaceURI.includes(\"MathML\") ? \"mathml\" : void 0;\n for (const key in props) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && // #11189 skip if this node has directives that have created hooks\n // as it could have mutated the DOM in any possible way\n !(dirs && dirs.some((d) => d.dir.created)) && propHasMismatch(el, key, props[key], vnode, parentComponent)) {\n logMismatchError();\n }\n if (forcePatch && (key.endsWith(\"value\") || key === \"indeterminate\") || isOn(key) && !isReservedProp(key) || // force hydrate v-bind with .prop modifiers\n key[0] === \".\" || isCustomElement && !isReservedProp(key) || dynamicProps && dynamicProps.includes(key)) {\n if (isUnchangedResourceProp(el, key, props[key])) {\n continue;\n }\n patchProp(el, key, null, props[key], namespace, parentComponent);\n }\n }\n } else if (props.onClick) {\n patchProp(\n el,\n \"onClick\",\n null,\n props.onClick,\n void 0,\n parentComponent\n );\n } else if (patchFlag & 4 && isReactive(props.style)) {\n for (const key in props.style) props.style[key];\n }\n }\n let vnodeHooks;\n if (vnodeHooks = props && props.onVnodeBeforeMount) {\n invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n }\n if ((vnodeHooks = props && props.onVnodeMounted) || dirs || needCallTransitionHooks) {\n queueEffectWithSuspense(() => {\n vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n needCallTransitionHooks && transition.enter(el);\n dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n }, parentSuspense);\n }\n }\n return el.nextSibling;\n };\n const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n optimized = optimized || !!parentVNode.dynamicChildren;\n const children = parentVNode.children;\n const l = children.length;\n let hasCheckedMismatch = false;\n for (let i = 0; i < l; i++) {\n const vnode = optimized ? children[i] : children[i] = normalizeVNode(children[i]);\n const isText = vnode.type === Text;\n if (node) {\n if (isText && !optimized) {\n if (i + 1 < l && normalizeVNode(children[i + 1]).type === Text) {\n insert(\n createText(\n node.data.slice(vnode.children.length)\n ),\n container,\n nextSibling(node)\n );\n node.data = vnode.children;\n }\n }\n node = hydrateNode(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n } else if (isText && !vnode.children) {\n insert(vnode.el = createText(\"\"), container);\n } else {\n if (!hasCheckedMismatch) {\n hasCheckedMismatch = true;\n if (!isMismatchAllowed(container, 1 /* CHILDREN */)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration children mismatch on`,\n container,\n `\nServer rendered element contains fewer child nodes than client vdom.`\n );\n logMismatchError();\n }\n }\n patch(\n null,\n vnode,\n container,\n null,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n slotScopeIds\n );\n }\n }\n return node;\n };\n const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n const { slotScopeIds: fragmentSlotScopeIds } = vnode;\n if (fragmentSlotScopeIds) {\n slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;\n }\n const container = parentNode(node);\n const next = hydrateChildren(\n nextSibling(node),\n vnode,\n container,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n if (next && isComment(next) && next.data === \"]\") {\n return nextSibling(vnode.anchor = next);\n } else {\n logMismatchError();\n insert(vnode.anchor = createComment(`]`), container, next);\n return next;\n }\n };\n const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => {\n if (!isNodeMismatchAllowed(node, vnode)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration node mismatch:\n- rendered on server:`,\n node,\n node.nodeType === 3 ? `(text)` : isComment(node) && node.data === \"[\" ? `(start of fragment)` : ``,\n `\n- expected on client:`,\n vnode.type\n );\n logMismatchError();\n }\n vnode.el = null;\n if (isFragment) {\n const end = locateClosingAnchor(node);\n while (true) {\n const next2 = nextSibling(node);\n if (next2 && next2 !== end) {\n remove(next2);\n } else {\n break;\n }\n }\n }\n const next = nextSibling(node);\n const container = parentNode(node);\n remove(node);\n patch(\n null,\n vnode,\n container,\n next,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n slotScopeIds\n );\n if (parentComponent) {\n parentComponent.vnode.el = vnode.el;\n updateHOCHostEl(parentComponent, vnode.el);\n }\n return next;\n };\n const locateClosingAnchor = (node, open = \"[\", close = \"]\") => {\n let match = 0;\n while (node) {\n node = nextSibling(node);\n if (node && isComment(node)) {\n if (node.data === open) match++;\n if (node.data === close) {\n if (match === 0) {\n return nextSibling(node);\n } else {\n match--;\n }\n }\n }\n }\n return node;\n };\n const replaceNode = (newNode, oldNode, parentComponent) => {\n const parentNode2 = oldNode.parentNode;\n if (parentNode2) {\n parentNode2.replaceChild(newNode, oldNode);\n }\n let parent = parentComponent;\n while (parent) {\n if (parent.vnode.el === oldNode) {\n parent.vnode.el = parent.subTree.el = newNode;\n }\n parent = parent.parent;\n }\n };\n const isTemplateNode = (node) => {\n return node.nodeType === 1 && node.tagName === \"TEMPLATE\";\n };\n return [hydrate, hydrateNode];\n}\nconst resourceProps = /* @__PURE__ */ new Set([\"src\", \"srcset\", \"href\", \"poster\"]);\nfunction isUnchangedResourceProp(el, key, clientValue) {\n if (!resourceProps.has(key)) {\n return false;\n }\n return el.getAttribute(key) === (clientValue == null ? null : `${clientValue}`);\n}\nfunction propHasMismatch(el, key, clientValue, vnode, instance) {\n let mismatchType;\n let mismatchKey;\n let actual;\n let expected;\n if (key === \"class\") {\n if (el.$cls) {\n actual = el.$cls;\n delete el.$cls;\n } else {\n actual = el.getAttribute(\"class\");\n }\n expected = normalizeClass(clientValue);\n if (!isSetEqual(toClassSet(actual || \"\"), toClassSet(expected))) {\n mismatchType = 2 /* CLASS */;\n mismatchKey = `class`;\n }\n } else if (key === \"style\") {\n actual = el.getAttribute(\"style\") || \"\";\n expected = isString(clientValue) ? clientValue : stringifyStyle(normalizeStyle(clientValue));\n const actualMap = toStyleMap(actual);\n const expectedMap = toStyleMap(expected);\n if (vnode.dirs) {\n for (const { dir, value } of vnode.dirs) {\n if (dir.name === \"show\" && !value) {\n expectedMap.set(\"display\", \"none\");\n }\n }\n }\n if (instance) {\n resolveCssVars(instance, vnode, expectedMap);\n }\n if (!isMapEqual(actualMap, expectedMap)) {\n mismatchType = 3 /* STYLE */;\n mismatchKey = \"style\";\n }\n } else if (el instanceof SVGElement && isKnownSvgAttr(key) || el instanceof HTMLElement && (isBooleanAttr(key) || isKnownHtmlAttr(key))) {\n if (key === \"hidden\") {\n actual = normalizeHiddenValue(el.getAttribute(key));\n expected = normalizeHiddenValue(clientValue);\n } else if (isBooleanAttr(key)) {\n actual = el.hasAttribute(key);\n expected = includeBooleanAttr(clientValue);\n } else if (clientValue == null) {\n actual = el.hasAttribute(key);\n expected = false;\n } else {\n if (el.hasAttribute(key)) {\n actual = el.getAttribute(key);\n } else if (key === \"value\" && el.tagName === \"TEXTAREA\") {\n actual = el.value;\n } else {\n actual = false;\n }\n expected = isRenderableAttrValue(clientValue) ? String(clientValue) : false;\n }\n if (actual !== expected) {\n mismatchType = 4 /* ATTRIBUTE */;\n mismatchKey = key;\n }\n }\n if (mismatchType != null && !isMismatchAllowed(el, mismatchType)) {\n const format = (v) => v === false ? `(not rendered)` : `${mismatchKey}=\"${v}\"`;\n const preSegment = `Hydration ${MismatchTypeString[mismatchType]} mismatch on`;\n const postSegment = `\n - rendered on server: ${format(actual)}\n - expected on client: ${format(expected)}\n Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead.\n You should fix the source of the mismatch.`;\n {\n warn$1(preSegment, el, postSegment);\n }\n return true;\n }\n return false;\n}\nfunction normalizeHiddenValue(value) {\n if (!isRenderableAttrValue(value)) {\n return false;\n }\n if (isString(value)) {\n return value.toLowerCase() === \"until-found\" ? \"until-found\" : \"\";\n }\n return includeBooleanAttr(value) ? \"\" : false;\n}\nfunction toClassSet(str) {\n return new Set(str.trim().split(/\\s+/));\n}\nfunction isSetEqual(a, b) {\n if (a.size !== b.size) {\n return false;\n }\n for (const s of a) {\n if (!b.has(s)) {\n return false;\n }\n }\n return true;\n}\nfunction toStyleMap(str) {\n const styleMap = /* @__PURE__ */ new Map();\n for (const item of str.split(\";\")) {\n let [key, value] = item.split(\":\");\n key = key.trim();\n value = value && value.trim();\n if (key && value) {\n styleMap.set(key, value);\n }\n }\n return styleMap;\n}\nfunction isMapEqual(a, b) {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a) {\n if (value !== b.get(key)) {\n return false;\n }\n }\n return true;\n}\nfunction resolveCssVars(instance, vnode, expectedMap) {\n const root = instance.subTree;\n if (instance.getCssVars && (vnode === root || root && root.type === Fragment && root.children.includes(vnode))) {\n const cssVars = instance.getCssVars();\n for (const key in cssVars) {\n const value = normalizeCssVarValue(cssVars[key]);\n expectedMap.set(`--${getEscapedCssVarName(key, false)}`, value);\n }\n }\n if (vnode === root && instance.parent) {\n resolveCssVars(instance.parent, instance.vnode, expectedMap);\n }\n}\nconst allowMismatchAttr = \"data-allow-mismatch\";\nconst MismatchTypeString = {\n [0 /* TEXT */]: \"text\",\n [1 /* CHILDREN */]: \"children\",\n [2 /* CLASS */]: \"class\",\n [3 /* STYLE */]: \"style\",\n [4 /* ATTRIBUTE */]: \"attribute\"\n};\nfunction isMismatchAllowed(el, allowedType) {\n if (allowedType === 0 /* TEXT */ || allowedType === 1 /* CHILDREN */) {\n while (el && !el.hasAttribute(allowMismatchAttr)) {\n el = el.parentElement;\n }\n }\n return isMismatchAllowedByAttr(\n el && el.getAttribute(allowMismatchAttr),\n allowedType\n );\n}\nfunction isMismatchAllowedByAttr(allowedAttr, allowedType) {\n if (allowedAttr == null) {\n return false;\n } else if (allowedAttr === \"\") {\n return true;\n } else {\n const list = allowedAttr.split(\",\");\n if (allowedType === 0 /* TEXT */ && list.includes(\"children\")) {\n return true;\n }\n return list.includes(MismatchTypeString[allowedType]);\n }\n}\nfunction isNodeMismatchAllowed(node, vnode) {\n return isMismatchAllowed(node.parentElement, 1 /* CHILDREN */) || isMismatchAllowedByNode(node) || isMismatchAllowedByVNode(vnode);\n}\nfunction isMismatchAllowedByNode(node) {\n return node.nodeType === 1 && isMismatchAllowedByAttr(\n node.getAttribute(allowMismatchAttr),\n 1 /* CHILDREN */\n );\n}\nfunction isMismatchAllowedByVNode({ props }) {\n const allowedAttr = props && props[allowMismatchAttr];\n return typeof allowedAttr === \"string\" && isMismatchAllowedByAttr(allowedAttr, 1 /* CHILDREN */);\n}\n\nconst requestIdleCallback = getGlobalThis().requestIdleCallback || ((cb) => setTimeout(cb, 1));\nconst cancelIdleCallback = getGlobalThis().cancelIdleCallback || ((id) => clearTimeout(id));\nconst hydrateOnIdle = (timeout = 1e4) => (hydrate) => {\n const id = requestIdleCallback(hydrate, { timeout });\n return () => cancelIdleCallback(id);\n};\nfunction elementIsVisibleInViewport(el) {\n const { top, left, bottom, right } = el.getBoundingClientRect();\n const { innerHeight, innerWidth } = window;\n return (top > 0 && top < innerHeight || bottom > 0 && bottom < innerHeight) && (left > 0 && left < innerWidth || right > 0 && right < innerWidth);\n}\nconst hydrateOnVisible = (opts) => (hydrate, forEach) => {\n const ob = new IntersectionObserver((entries) => {\n for (const e of entries) {\n if (!e.isIntersecting) continue;\n ob.disconnect();\n hydrate();\n break;\n }\n }, opts);\n forEach((el) => {\n if (!(el instanceof Element)) return;\n if (elementIsVisibleInViewport(el)) {\n hydrate();\n ob.disconnect();\n return false;\n }\n ob.observe(el);\n });\n return () => ob.disconnect();\n};\nconst hydrateOnMediaQuery = (query) => (hydrate) => {\n if (query) {\n const mql = matchMedia(query);\n if (mql.matches) {\n hydrate();\n } else {\n mql.addEventListener(\"change\", hydrate, { once: true });\n return () => mql.removeEventListener(\"change\", hydrate);\n }\n }\n};\nconst hydrateOnInteraction = (interactions = []) => (hydrate, forEach) => {\n if (isString(interactions)) interactions = [interactions];\n let hasHydrated = false;\n const doHydrate = (e) => {\n if (!hasHydrated) {\n hasHydrated = true;\n teardown();\n hydrate();\n e.target.dispatchEvent(new e.constructor(e.type, e));\n }\n };\n const teardown = () => {\n forEach((el) => {\n for (const i of interactions) {\n el.removeEventListener(i, doHydrate);\n }\n });\n };\n forEach((el) => {\n for (const i of interactions) {\n el.addEventListener(i, doHydrate, { once: true });\n }\n });\n return teardown;\n};\nfunction forEachElement(node, cb) {\n if (isComment(node) && node.data === \"[\") {\n let depth = 1;\n let next = node.nextSibling;\n while (next) {\n if (next.nodeType === 1) {\n const result = cb(next);\n if (result === false) {\n break;\n }\n } else if (isComment(next)) {\n if (next.data === \"]\") {\n if (--depth === 0) break;\n } else if (next.data === \"[\") {\n depth++;\n }\n }\n next = next.nextSibling;\n }\n } else {\n cb(node);\n }\n}\n\nconst isAsyncWrapper = (i) => !!i.type.__asyncLoader;\n// @__NO_SIDE_EFFECTS__\nfunction defineAsyncComponent(source) {\n if (isFunction(source)) {\n source = { loader: source };\n }\n const {\n loader,\n loadingComponent,\n errorComponent,\n delay = 200,\n hydrate: hydrateStrategy,\n timeout,\n // undefined = never times out\n suspensible = true,\n onError: userOnError\n } = source;\n let pendingRequest = null;\n let resolvedComp;\n let retries = 0;\n const retry = () => {\n retries++;\n pendingRequest = null;\n return load();\n };\n const load = () => {\n let thisRequest;\n return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => {\n err = err instanceof Error ? err : new Error(String(err));\n if (userOnError) {\n return new Promise((resolve, reject) => {\n const userRetry = () => resolve(retry());\n const userFail = () => reject(err);\n userOnError(err, userRetry, userFail, retries + 1);\n });\n } else {\n throw err;\n }\n }).then((comp) => {\n if (thisRequest !== pendingRequest && pendingRequest) {\n return pendingRequest;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && !comp) {\n warn$1(\n `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.`\n );\n }\n if (comp && (comp.__esModule || comp[Symbol.toStringTag] === \"Module\")) {\n comp = comp.default;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && comp && !isObject(comp) && !isFunction(comp)) {\n throw new Error(`Invalid async component load result: ${comp}`);\n }\n resolvedComp = comp;\n return comp;\n }));\n };\n return defineComponent({\n name: \"AsyncComponentWrapper\",\n __asyncLoader: load,\n __asyncHydrate(el, instance, hydrate) {\n const wasConnected = el.isConnected;\n let patched = false;\n (instance.bu || (instance.bu = [])).push(() => patched = true);\n const performHydrate = () => {\n if (patched) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Skipping lazy hydration for component '${getComponentName(resolvedComp) || resolvedComp.__file}': it was updated before lazy hydration performed.`\n );\n }\n return;\n }\n if (!el.parentNode || wasConnected && !el.isConnected) return;\n hydrate();\n };\n const doHydrate = hydrateStrategy ? () => {\n const teardown = hydrateStrategy(\n performHydrate,\n (cb) => forEachElement(el, cb)\n );\n if (teardown) {\n (instance.bum || (instance.bum = [])).push(teardown);\n }\n } : performHydrate;\n if (resolvedComp) {\n doHydrate();\n } else {\n load().then(() => !instance.isUnmounted && doHydrate());\n }\n },\n get __asyncResolved() {\n return resolvedComp;\n },\n setup() {\n const instance = currentInstance;\n markAsyncBoundary(instance);\n if (resolvedComp) {\n return () => createInnerComp(resolvedComp, instance);\n }\n const onError = (err) => {\n pendingRequest = null;\n handleError(\n err,\n instance,\n 13,\n !errorComponent\n );\n };\n if (suspensible && instance.suspense || isInSSRComponentSetup) {\n return load().then((comp) => {\n return () => createInnerComp(comp, instance);\n }).catch((err) => {\n onError(err);\n return () => errorComponent ? createVNode(errorComponent, {\n error: err\n }) : null;\n });\n }\n const loaded = ref(false);\n const error = ref();\n const delayed = ref(!!delay);\n let timeoutTimer;\n let delayTimer;\n onUnmounted(() => {\n if (timeoutTimer != null) clearTimeout(timeoutTimer);\n if (delayTimer != null) clearTimeout(delayTimer);\n });\n if (delay) {\n delayTimer = setTimeout(() => {\n if (instance.isUnmounted) return;\n delayed.value = false;\n }, delay);\n }\n if (timeout != null) {\n timeoutTimer = setTimeout(() => {\n if (instance.isUnmounted) return;\n if (!loaded.value && !error.value) {\n const err = new Error(\n `Async component timed out after ${timeout}ms.`\n );\n onError(err);\n error.value = err;\n }\n }, timeout);\n }\n load().then(() => {\n if (instance.isUnmounted) return;\n loaded.value = true;\n if (instance.parent && isKeepAlive(instance.parent.vnode)) {\n instance.parent.update();\n }\n }).catch((err) => {\n if (instance.isUnmounted) {\n pendingRequest = null;\n return;\n }\n onError(err);\n error.value = err;\n });\n return () => {\n if (loaded.value && resolvedComp) {\n return createInnerComp(resolvedComp, instance);\n } else if (error.value && errorComponent) {\n return createVNode(errorComponent, {\n error: error.value\n });\n } else if (loadingComponent && !delayed.value) {\n return createInnerComp(\n loadingComponent,\n instance\n );\n }\n };\n }\n });\n}\nfunction createInnerComp(comp, parent) {\n const { ref: ref2, props, children, ce } = parent.vnode;\n const vnode = createVNode(comp, props, children);\n vnode.ref = ref2;\n vnode.ce = ce;\n delete parent.vnode.ce;\n return vnode;\n}\n\nconst isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\nconst KeepAliveImpl = {\n name: `KeepAlive`,\n // Marker for special handling inside the renderer. We are not using a ===\n // check directly on KeepAlive in the renderer, because importing it directly\n // would prevent it from being tree-shaken.\n __isKeepAlive: true,\n props: {\n include: [String, RegExp, Array],\n exclude: [String, RegExp, Array],\n max: [String, Number]\n },\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const sharedContext = instance.ctx;\n if (!sharedContext.renderer) {\n return () => {\n const children = slots.default && slots.default();\n return children && children.length === 1 ? children[0] : children;\n };\n }\n const cache = /* @__PURE__ */ new Map();\n const keys = /* @__PURE__ */ new Set();\n let current = null;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n instance.__v_cache = cache;\n }\n const parentSuspense = instance.suspense;\n const {\n renderer: {\n p: patch,\n m: move,\n um: _unmount,\n o: { createElement }\n }\n } = sharedContext;\n const storageContainer = createElement(\"div\");\n sharedContext.activate = (vnode, container, anchor, namespace, optimized) => {\n const instance2 = vnode.component;\n move(vnode, container, anchor, 0, parentSuspense);\n patch(\n instance2.vnode,\n vnode,\n container,\n anchor,\n instance2,\n parentSuspense,\n namespace,\n vnode.slotScopeIds,\n optimized\n );\n queuePostRenderEffect(() => {\n instance2.isDeactivated = false;\n if (instance2.a) {\n invokeArrayFns(instance2.a);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeMounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n };\n sharedContext.deactivate = (vnode) => {\n const instance2 = vnode.component;\n invalidateMount(instance2.m);\n invalidateMount(instance2.a);\n move(vnode, storageContainer, null, 1, parentSuspense);\n queuePostRenderEffect(() => {\n if (instance2.da) {\n invokeArrayFns(instance2.da);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n instance2.isDeactivated = true;\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n if (!!(process.env.NODE_ENV !== \"production\") && true) {\n instance2.__keepAliveStorageContainer = storageContainer;\n }\n };\n function unmount(vnode) {\n resetShapeFlag(vnode);\n _unmount(vnode, instance, parentSuspense, true);\n }\n function pruneCache(filter) {\n cache.forEach((vnode, key) => {\n const name = getComponentName(\n isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : vnode.type\n );\n if (name && !filter(name)) {\n pruneCacheEntry(key);\n }\n });\n }\n function pruneCacheEntry(key) {\n const cached = cache.get(key);\n if (cached && (!current || !isSameVNodeType(cached, current))) {\n unmount(cached);\n } else if (current) {\n resetShapeFlag(current);\n }\n cache.delete(key);\n keys.delete(key);\n }\n watch(\n () => [props.include, props.exclude],\n ([include, exclude]) => {\n include && pruneCache((name) => matches(include, name));\n exclude && pruneCache((name) => !matches(exclude, name));\n },\n // prune post-render after `current` has been updated\n { flush: \"post\", deep: true }\n );\n let pendingCacheKey = null;\n const cacheSubtree = () => {\n if (pendingCacheKey != null) {\n if (isSuspense(instance.subTree.type)) {\n queuePostRenderEffect(() => {\n const vnode = getInnerChild(instance.subTree);\n if (vnode.component) {\n cache.set(pendingCacheKey, vnode);\n }\n }, instance.subTree.suspense);\n } else {\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n }\n }\n };\n onMounted(cacheSubtree);\n onUpdated(cacheSubtree);\n onBeforeUnmount(() => {\n cache.forEach((cached) => {\n const { subTree, suspense } = instance;\n const vnode = getInnerChild(subTree);\n if (cached.type === vnode.type && cached.key === vnode.key) {\n resetShapeFlag(vnode);\n const da = vnode.component.da;\n da && queuePostRenderEffect(da, suspense);\n return;\n }\n unmount(cached);\n });\n });\n return () => {\n pendingCacheKey = null;\n if (!slots.default) {\n return current = null;\n }\n const children = slots.default();\n const rawVNode = children[0];\n if (children.length > 1) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`KeepAlive should contain exactly one component child.`);\n }\n current = null;\n return children;\n } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) {\n current = null;\n return rawVNode;\n }\n let vnode = getInnerChild(rawVNode);\n if (vnode.type === Comment) {\n current = null;\n return vnode;\n }\n const comp = vnode.type;\n const name = getComponentName(\n isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp\n );\n const { include, exclude, max } = props;\n if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) {\n vnode.shapeFlag &= -257;\n current = vnode;\n return rawVNode;\n }\n const key = vnode.key == null ? comp : vnode.key;\n const cachedVNode = cache.get(key);\n if (vnode.el) {\n vnode = cloneVNode(vnode);\n if (rawVNode.shapeFlag & 128) {\n rawVNode.ssContent = vnode;\n }\n }\n pendingCacheKey = key;\n if (cachedVNode) {\n vnode.el = cachedVNode.el;\n vnode.component = cachedVNode.component;\n if (vnode.transition) {\n setTransitionHooks(vnode, vnode.transition);\n }\n vnode.shapeFlag |= 512;\n keys.delete(key);\n keys.add(key);\n } else {\n keys.add(key);\n if (max && keys.size > parseInt(max, 10)) {\n pruneCacheEntry(keys.values().next().value);\n }\n }\n vnode.shapeFlag |= 256;\n current = vnode;\n return isSuspense(rawVNode.type) ? rawVNode : vnode;\n };\n }\n};\nconst KeepAlive = KeepAliveImpl;\nfunction matches(pattern, name) {\n if (isArray(pattern)) {\n return pattern.some((p) => matches(p, name));\n } else if (isString(pattern)) {\n return pattern.split(\",\").includes(name);\n } else if (isRegExp(pattern)) {\n pattern.lastIndex = 0;\n return pattern.test(name);\n }\n return false;\n}\nfunction onActivated(hook, target) {\n registerKeepAliveHook(hook, \"a\", target);\n}\nfunction onDeactivated(hook, target) {\n registerKeepAliveHook(hook, \"da\", target);\n}\nfunction registerKeepAliveHook(hook, type, target = currentInstance) {\n const wrappedHook = hook.__wdc || (hook.__wdc = () => {\n let current = target;\n while (current) {\n if (current.isDeactivated) {\n return;\n }\n current = current.parent;\n }\n return hook();\n });\n injectHook(type, wrappedHook, target);\n if (target) {\n let current = target.parent;\n while (current && current.parent) {\n if (isKeepAlive(current.parent.vnode)) {\n injectToKeepAliveRoot(wrappedHook, type, target, current);\n }\n current = current.parent;\n }\n }\n}\nfunction injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\n const injected = injectHook(\n type,\n hook,\n keepAliveRoot,\n true\n /* prepend */\n );\n onUnmounted(() => {\n remove(keepAliveRoot[type], injected);\n }, target);\n}\nfunction resetShapeFlag(vnode) {\n vnode.shapeFlag &= -257;\n vnode.shapeFlag &= -513;\n}\nfunction getInnerChild(vnode) {\n return vnode.shapeFlag & 128 ? vnode.ssContent : vnode;\n}\n\nfunction injectHook(type, hook, target = currentInstance, prepend = false) {\n if (target) {\n const hooks = target[type] || (target[type] = []);\n const wrappedHook = hook.__weh || (hook.__weh = (...args) => {\n pauseTracking();\n const reset = setCurrentInstance(target);\n const res = callWithAsyncErrorHandling(hook, target, type, args);\n reset();\n resetTracking();\n return res;\n });\n if (prepend) {\n hooks.unshift(wrappedHook);\n } else {\n hooks.push(wrappedHook);\n }\n return wrappedHook;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n const apiName = toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, \"\"));\n warn$1(\n `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().` + (` If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` )\n );\n }\n}\nconst createHook = (lifecycle) => (hook, target = currentInstance) => {\n if (!isInSSRComponentSetup || lifecycle === \"sp\") {\n injectHook(lifecycle, (...args) => hook(...args), target);\n }\n};\nconst onBeforeMount = createHook(\"bm\");\nconst onMounted = createHook(\"m\");\nconst onBeforeUpdate = createHook(\n \"bu\"\n);\nconst onUpdated = createHook(\"u\");\nconst onBeforeUnmount = createHook(\n \"bum\"\n);\nconst onUnmounted = createHook(\"um\");\nconst onServerPrefetch = createHook(\n \"sp\"\n);\nconst onRenderTriggered = createHook(\"rtg\");\nconst onRenderTracked = createHook(\"rtc\");\nfunction onErrorCaptured(hook, target = currentInstance) {\n injectHook(\"ec\", hook, target);\n}\n\nconst COMPONENTS = \"components\";\nconst DIRECTIVES = \"directives\";\nfunction resolveComponent(name, maybeSelfReference) {\n return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;\n}\nconst NULL_DYNAMIC_COMPONENT = /* @__PURE__ */ Symbol.for(\"v-ndc\");\nfunction resolveDynamicComponent(component) {\n if (isString(component)) {\n return resolveAsset(COMPONENTS, component, false) || component;\n } else {\n return component || NULL_DYNAMIC_COMPONENT;\n }\n}\nfunction resolveDirective(name) {\n return resolveAsset(DIRECTIVES, name);\n}\nfunction resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {\n const instance = currentRenderingInstance || currentInstance;\n if (instance) {\n const Component = instance.type;\n if (type === COMPONENTS) {\n const selfName = getComponentName(\n Component,\n false\n );\n if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {\n return Component;\n }\n }\n const res = (\n // local registration\n // check instance[type] first which is resolved for options API\n resolve(instance[type] || Component[type], name) || // global registration\n resolve(instance.appContext[type], name)\n );\n if (!res && maybeSelfReference) {\n return Component;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && warnMissing && !res) {\n const extra = type === COMPONENTS ? `\nIf this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``;\n warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);\n }\n return res;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().`\n );\n }\n}\nfunction resolve(registry, name) {\n return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);\n}\n\nfunction renderList(source, renderItem, cache, index) {\n let ret;\n const cached = cache && cache[index];\n const sourceIsArray = isArray(source);\n if (sourceIsArray || isString(source)) {\n const sourceIsReactiveArray = sourceIsArray && isReactive(source);\n let needsWrap = false;\n let isReadonlySource = false;\n if (sourceIsReactiveArray) {\n needsWrap = !isShallow(source);\n isReadonlySource = isReadonly(source);\n source = shallowReadArray(source);\n }\n ret = new Array(source.length);\n for (let i = 0, l = source.length; i < l; i++) {\n ret[i] = renderItem(\n needsWrap ? isReadonlySource ? toReadonly(toReactive(source[i])) : toReactive(source[i]) : source[i],\n i,\n void 0,\n cached && cached[i]\n );\n }\n } else if (typeof source === \"number\") {\n if (!!(process.env.NODE_ENV !== \"production\") && (!Number.isInteger(source) || source < 0)) {\n warn$1(\n `The v-for range expects a positive integer value but got ${source}.`\n );\n ret = [];\n } else {\n ret = new Array(source);\n for (let i = 0; i < source; i++) {\n ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]);\n }\n }\n } else if (isObject(source)) {\n if (source[Symbol.iterator]) {\n ret = Array.from(\n source,\n (item, i) => renderItem(item, i, void 0, cached && cached[i])\n );\n } else {\n const keys = Object.keys(source);\n ret = new Array(keys.length);\n for (let i = 0, l = keys.length; i < l; i++) {\n const key = keys[i];\n ret[i] = renderItem(source[key], key, i, cached && cached[i]);\n }\n }\n } else {\n ret = [];\n }\n if (cache) {\n cache[index] = ret;\n }\n return ret;\n}\n\nfunction createSlots(slots, dynamicSlots) {\n for (let i = 0; i < dynamicSlots.length; i++) {\n const slot = dynamicSlots[i];\n if (isArray(slot)) {\n for (let j = 0; j < slot.length; j++) {\n slots[slot[j].name] = slot[j].fn;\n }\n } else if (slot) {\n slots[slot.name] = slot.key ? (...args) => {\n const res = slot.fn(...args);\n if (res) res.key = slot.key;\n return res;\n } : slot.fn;\n }\n }\n return slots;\n}\n\nfunction renderSlot(slots, name, props, fallback, noSlotted, branchKey) {\n if (props == null) props = {};\n if (currentRenderingInstance.ce || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.ce) {\n const slotProps = branchKey != null && props.key == null ? extend({}, props, { key: branchKey }) : props;\n const hasProps = Object.keys(slotProps).length > 0;\n if (name !== \"default\") slotProps.name = name;\n return openBlock(), createBlock(\n Fragment,\n null,\n [createVNode(\"slot\", slotProps, fallback && fallback())],\n hasProps ? -2 : 64\n );\n }\n let slot = slots[name];\n if (!!(process.env.NODE_ENV !== \"production\") && slot && slot.length > 1) {\n warn$1(\n `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.`\n );\n slot = () => [];\n }\n if (slot && slot._c) {\n slot._d = false;\n }\n const prevStackSize = blockStack.length;\n openBlock();\n let rendered;\n try {\n const validSlotContent = slot && ensureValidVNode(slot(props));\n const slotKey = props.key || branchKey || // slot content array of a dynamic conditional slot may have a branch\n // key attached in the `createSlots` helper, respect that\n validSlotContent && validSlotContent.key;\n rendered = createBlock(\n Fragment,\n {\n key: (slotKey && !isSymbol(slotKey) ? slotKey : `_${name}`) + // #7256 force differentiate fallback content from actual content\n (!validSlotContent && fallback ? \"_fb\" : \"\")\n },\n validSlotContent || (fallback ? fallback() : []),\n validSlotContent && slots._ === 1 ? 64 : -2\n );\n } catch (err) {\n for (let i = blockStack.length; i > prevStackSize; i--) closeBlock();\n throw err;\n } finally {\n if (slot && slot._c) {\n slot._d = true;\n }\n }\n if (!noSlotted && rendered.scopeId) {\n rendered.slotScopeIds = [rendered.scopeId + \"-s\"];\n }\n return rendered;\n}\nfunction ensureValidVNode(vnodes) {\n return vnodes.some((child) => {\n if (!isVNode(child)) return true;\n if (child.type === Comment) return false;\n if (child.type === Fragment && !ensureValidVNode(child.children))\n return false;\n return true;\n }) ? vnodes : null;\n}\n\nfunction toHandlers(obj, preserveCaseIfNecessary) {\n const ret = {};\n if (!!(process.env.NODE_ENV !== \"production\") && !isObject(obj)) {\n warn$1(`v-on with no argument expects an object value.`);\n return ret;\n }\n for (const key in obj) {\n ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key];\n }\n return ret;\n}\n\nconst getPublicInstance = (i) => {\n if (!i) return null;\n if (isStatefulComponent(i)) return getComponentPublicInstance(i);\n return getPublicInstance(i.parent);\n};\nconst resolveDevRootEl = (vnode) => {\n let found = false;\n while (true) {\n if (vnode.patchFlag > 0 && vnode.patchFlag & 2048) {\n const root = filterSingleRoot(vnode.children);\n if (!root) {\n return;\n }\n vnode = root;\n found = true;\n continue;\n }\n const component = vnode.component;\n if (component && component.subTree) {\n vnode = component.subTree;\n continue;\n }\n const suspense = vnode.suspense;\n if (suspense && suspense.activeBranch) {\n vnode = suspense.activeBranch;\n continue;\n }\n return found ? vnode.el : void 0;\n }\n};\nconst getDevRootFragmentEl = (i) => {\n const el = i.subTree && resolveDevRootEl(i.subTree);\n return el === void 0 ? i.vnode.el : el;\n};\nconst publicPropertiesMap = (\n // Move PURE marker to new line to workaround compiler discarding it\n // due to type annotation\n /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), {\n $: (i) => i,\n $el: (i) => !!(process.env.NODE_ENV !== \"production\") ? getDevRootFragmentEl(i) : i.vnode.el,\n $data: (i) => i.data,\n $props: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.props) : i.props,\n $attrs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.attrs) : i.attrs,\n $slots: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.slots) : i.slots,\n $refs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.refs) : i.refs,\n $parent: (i) => getPublicInstance(i.parent),\n $root: (i) => getPublicInstance(i.root),\n $host: (i) => i.ce,\n $emit: (i) => i.emit,\n $options: (i) => __VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type,\n $forceUpdate: (i) => i.f || (i.f = () => {\n queueJob(i.update);\n }),\n $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)),\n $watch: (i) => __VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP\n })\n);\nconst isReservedPrefix = (key) => key === \"_\" || key === \"$\";\nconst hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);\nconst PublicInstanceProxyHandlers = {\n get({ _: instance }, key) {\n if (key === \"__v_skip\") {\n return true;\n }\n const { ctx, setupState, data, props, accessCache, type, appContext } = instance;\n if (!!(process.env.NODE_ENV !== \"production\") && key === \"__isVue\") {\n return true;\n }\n if (key[0] !== \"$\") {\n const n = accessCache[key];\n if (n !== void 0) {\n switch (n) {\n case 1 /* SETUP */:\n return setupState[key];\n case 2 /* DATA */:\n return data[key];\n case 4 /* CONTEXT */:\n return ctx[key];\n case 3 /* PROPS */:\n return props[key];\n }\n } else if (hasSetupBinding(setupState, key)) {\n accessCache[key] = 1 /* SETUP */;\n return setupState[key];\n } else if (__VUE_OPTIONS_API__ && data !== EMPTY_OBJ && hasOwn(data, key)) {\n accessCache[key] = 2 /* DATA */;\n return data[key];\n } else if (hasOwn(props, key)) {\n accessCache[key] = 3 /* PROPS */;\n return props[key];\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) {\n accessCache[key] = 0 /* OTHER */;\n }\n }\n const publicGetter = publicPropertiesMap[key];\n let cssModule, globalProperties;\n if (publicGetter) {\n if (key === \"$attrs\") {\n track(instance.attrs, \"get\", \"\");\n !!(process.env.NODE_ENV !== \"production\") && markAttrsAccessed();\n } else if (!!(process.env.NODE_ENV !== \"production\") && key === \"$slots\") {\n track(instance, \"get\", key);\n }\n return publicGetter(instance);\n } else if (\n // css module (injected by vue-loader)\n (cssModule = type.__cssModules) && (cssModule = cssModule[key])\n ) {\n return cssModule;\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (\n // global properties\n globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)\n ) {\n {\n return globalProperties[key];\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading\n // to infinite warning loop\n key.indexOf(\"__v\") !== 0)) {\n if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {\n warn$1(\n `Property ${JSON.stringify(\n key\n )} must be accessed via $data because it starts with a reserved character (\"$\" or \"_\") and is not proxied on the render context.`\n );\n } else if (instance === currentRenderingInstance) {\n warn$1(\n `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`\n );\n }\n }\n },\n set({ _: instance }, key, value) {\n const { data, setupState, ctx } = instance;\n if (hasSetupBinding(setupState, key)) {\n setupState[key] = value;\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\") && setupState.__isScriptSetup && hasOwn(setupState, key)) {\n warn$1(`Cannot mutate \n\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","\n\n\n","/* eslint-disable no-console */\n\n// Utilities\nimport { warn } from 'vue';\nexport function consoleWarn(message) {\n warn(`Vuetify: ${message}`);\n}\nexport function consoleError(message) {\n warn(`Vuetify error: ${message}`);\n}\nexport function deprecate(original, replacement) {\n replacement = Array.isArray(replacement) ? replacement.slice(0, -1).map(s => `'${s}'`).join(', ') + ` or '${replacement.at(-1)}'` : `'${replacement}'`;\n warn(`[Vuetify UPGRADE] '${original}' is deprecated, use ${replacement} instead.`);\n}\nexport function breaking(original, replacement) {\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) {\n // warn(`[Vuetify REMOVED] '${original}' has been removed. You can safely omit it.`)\n}\n//# sourceMappingURL=console.js.map","//#region src/constants/globals.ts\nconst IN_BROWSER = typeof window !== \"undefined\";\nconst SUPPORTS_TOUCH = IN_BROWSER && (\"ontouchstart\" in window || window.navigator.maxTouchPoints > 0);\nconst SUPPORTS_MATCH_MEDIA = IN_BROWSER && \"matchMedia\" in window && typeof window.matchMedia === \"function\";\nconst SUPPORTS_OBSERVER = IN_BROWSER && \"ResizeObserver\" in window;\nconst SUPPORTS_INTERSECTION_OBSERVER = IN_BROWSER && \"IntersectionObserver\" in window;\nconst SUPPORTS_MUTATION_OBSERVER = IN_BROWSER && \"MutationObserver\" in window;\nconst version = \"1.2.3\";\n/* v8 ignore next -- build-time constant, __DEV__ short-circuits in tests */\nconst __LOGGER_ENABLED__ = typeof (process.env.NODE_ENV !== \"production\") !== \"undefined\" && process.env.NODE_ENV !== \"production\" || typeof process.env.VITE_LOGGER_ENABLED !== \"undefined\" && process.env.VITE_LOGGER_ENABLED === \"true\";\n//#endregion\nexport { SUPPORTS_OBSERVER as a, version as c, SUPPORTS_MUTATION_OBSERVER as i, SUPPORTS_INTERSECTION_OBSERVER as n, SUPPORTS_TOUCH as o, SUPPORTS_MATCH_MEDIA as r, __LOGGER_ENABLED__ as s, IN_BROWSER as t };\n","import { t as IN_BROWSER } from \"../globals-Bxw-y98v.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 > -.027 ? 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` is load-bearing: TypeScript does not grant interfaces\n* an implicit index signature, so `Record` destroys known\n* property types on interface-typed values and fails to subtract\n* `Record` 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` 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.js\";\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 = () => SUPPORTS_MATCH_MEDIA && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\nexport const IS_WEBKIT = IN_BROWSER && CSS?.supports?.('-webkit-backdrop-filter', 'none');\n//# sourceMappingURL=globals.js.map","// Utilities\nimport { camelize, capitalize, Comment, Fragment, isProxy, isReactive, isRef, isVNode, reactive, shallowRef, toRaw, toRef, unref, watchEffect } from 'vue';\nimport { consoleError } from \"./console.js\";\nimport { IN_BROWSER } from \"./globals.js\"; // Types\nimport { isBoolean, isFunction, isNull, isNullOrUndefined, isNumber, isString, isUndefined } from \"./v0.js\";\nexport function getNestedValue(obj, path, fallback) {\n const last = path.length - 1;\n if (last < 0) return isUndefined(obj) ? fallback : obj;\n for (let i = 0; i < last; i++) {\n if (isNullOrUndefined(obj)) {\n return fallback;\n }\n obj = obj[path[i]];\n }\n if (isNullOrUndefined(obj)) return fallback;\n return obj[path[last]] === undefined ? fallback : obj[path[last]];\n}\nexport function getObjectValueByPath(obj, path, fallback) {\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}\nexport function getPropertyFromItem(item, property, fallback) {\n if (property === true) return isUndefined(item) ? fallback : item;\n if (isNullOrUndefined(property) || isBoolean(property)) return fallback;\n if (item !== Object(item)) {\n if (!isFunction(property)) return fallback;\n const value = property(item, fallback);\n return typeof value === 'undefined' ? fallback : value;\n }\n if (isString(property)) return getObjectValueByPath(item, property, fallback);\n if (Array.isArray(property)) return getNestedValue(item, property, fallback);\n if (!isFunction(property)) return fallback;\n const value = property(item, fallback);\n return typeof value === 'undefined' ? fallback : value;\n}\nexport function getZIndex(el) {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return 0;\n const index = Number(window.getComputedStyle(el).getPropertyValue('z-index'));\n if (!index) return getZIndex(el.parentNode);\n return index;\n}\nexport function isPercentage(value) {\n return isString(value) && value.endsWith('%');\n}\nexport function resolveSize(value, spanSize = 0) {\n return isPercentage(value) ? parseFloat(value) / 100 * spanSize : parseFloat(String(value)) || 0;\n}\nexport function convertToUnit(str, unit = 'px') {\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}\nexport function isPlainObject(obj) {\n let proto;\n return !!obj && typeof obj === 'object' && ((proto = Object.getPrototypeOf(obj)) === Object.prototype || !proto);\n}\nexport function refElement(obj) {\n if (obj && '$el' in obj) {\n const el = obj.$el;\n if (el?.nodeType === Node.TEXT_NODE) {\n // Multi-root component, use the first element\n return el.nextElementSibling;\n }\n return el;\n }\n return obj;\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});\nexport const keyValues = Object.freeze({\n enter: 'Enter',\n tab: 'Tab',\n delete: 'Delete',\n esc: 'Escape',\n space: 'Space',\n up: 'ArrowUp',\n down: 'ArrowDown',\n left: 'ArrowLeft',\n right: 'ArrowRight',\n end: 'End',\n home: 'Home',\n del: 'Delete',\n backspace: 'Backspace',\n insert: 'Insert',\n pageup: 'PageUp',\n pagedown: 'PageDown',\n shift: 'Shift'\n});\nexport function keys(o) {\n return Object.keys(o);\n}\nexport function has(obj, key) {\n return key.every(k => obj.hasOwnProperty(k));\n}\n// Array of keys\nexport function pick(obj, paths) {\n const found = {};\n for (const key of paths) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n found[key] = obj[key];\n }\n }\n return found;\n}\n\n// Array of keys\n\n// Array of keys or RegExp to test keys against\n\nexport function pickWithRest(obj, paths, exclude) {\n const found = Object.create(null);\n const rest = Object.create(null);\n for (const key in obj) {\n if (paths.some(path => path instanceof RegExp ? path.test(key) : path === key) && !exclude?.some(path => path === key)) {\n found[key] = obj[key];\n } else {\n rest[key] = obj[key];\n }\n }\n return [found, rest];\n}\nexport function omit(obj, exclude) {\n const clone = {\n ...obj\n };\n exclude.forEach(prop => delete clone[prop]);\n return clone;\n}\nconst onRE = /^on[^a-z]/;\nexport const isOn = key => onRE.test(key);\nconst bubblingEvents = ['onAfterscriptexecute', 'onAnimationcancel', 'onAnimationend', 'onAnimationiteration', 'onAnimationstart', 'onAuxclick', 'onBeforeinput', 'onBeforescriptexecute', 'onChange', 'onClick', 'onCompositionend', 'onCompositionstart', 'onCompositionupdate', 'onContextmenu', 'onCopy', 'onCut', 'onDblclick', 'onFocusin', 'onFocusout', 'onFullscreenchange', 'onFullscreenerror', 'onGesturechange', 'onGestureend', 'onGesturestart', 'onGotpointercapture', 'onInput', 'onKeydown', 'onKeypress', 'onKeyup', 'onLostpointercapture', 'onMousedown', 'onMousemove', 'onMouseout', 'onMouseover', 'onMouseup', 'onMousewheel', 'onPaste', 'onPointercancel', 'onPointerdown', 'onPointerenter', 'onPointerleave', 'onPointermove', 'onPointerout', 'onPointerover', 'onPointerup', 'onReset', 'onSelect', 'onSubmit', 'onTouchcancel', 'onTouchend', 'onTouchmove', 'onTouchstart', 'onTransitioncancel', 'onTransitionend', 'onTransitionrun', 'onTransitionstart', 'onWheel'];\nconst compositionIgnoreKeys = ['ArrowUp', 'ArrowDown', 'ArrowRight', 'ArrowLeft', 'Enter', 'Escape', 'Tab', ' '];\nexport function isComposingIgnoreKey(e) {\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 element inside.\n */\nexport function filterInputAttrs(attrs) {\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, b) {\n const diff = [];\n for (let i = 0; i < b.length; i++) {\n if (!a.includes(b[i])) diff.push(b[i]);\n }\n return diff;\n}\nexport function wrapInArray(v) {\n return isNullOrUndefined(v) ? [] : Array.isArray(v) ? v : [v];\n}\nexport function defaultFilter(value, search, item) {\n return !isNullOrUndefined(value) && !isNullOrUndefined(search) && !isBoolean(value) && value.toString().toLocaleLowerCase().indexOf(search.toLocaleLowerCase()) !== -1;\n}\nexport function debounce(fn, delay) {\n let timeoutId = 0;\n const wrap = (...args) => {\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}\nexport function clamp(value, min = 0, max = 1) {\n return Math.max(min, Math.min(max, value));\n}\nexport function getDecimals(value) {\n const trimmedStr = value.toString().trim();\n return trimmedStr.includes('.') ? trimmedStr.length - trimmedStr.indexOf('.') - 1 : 0;\n}\nexport function padEnd(str, length, char = '0') {\n return str + char.repeat(Math.max(0, length - str.length));\n}\nexport function padStart(str, length, char = '0') {\n return char.repeat(Math.max(0, length - str.length)) + str;\n}\nexport function chunk(str, size = 1) {\n const chunked = [];\n let index = 0;\n while (index < str.length) {\n chunked.push(str.substr(index, size));\n index += size;\n }\n return chunked;\n}\nexport function chunkArray(array, size = 1) {\n return Array.from({\n length: Math.ceil(array.length / size)\n }, (v, i) => array.slice(i * size, i * size + size));\n}\nexport function humanReadableFileSize(bytes, base = 1000) {\n if (bytes < base) {\n return `${bytes} B`;\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}\nexport function mergeDeep(source = {}, target = {}, arrayFn, targetCondition) {\n const out = {};\n for (const key in source) {\n out[key] = source[key];\n }\n for (const key in target) {\n const targetProperty = target[key];\n if (targetCondition && !targetCondition(key, targetProperty)) {\n continue;\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 continue;\n }\n if (arrayFn && Array.isArray(sourceProperty) && Array.isArray(targetProperty)) {\n out[key] = arrayFn(sourceProperty, targetProperty);\n continue;\n }\n out[key] = targetProperty;\n }\n return out;\n}\nexport function flattenFragments(nodes) {\n return nodes.map(node => {\n if (node.type === Fragment) {\n return flattenFragments(node.children);\n } else {\n return node;\n }\n }).flat();\n}\nexport function toKebabCase(str = '') {\n if (toKebabCase.cache.has(str)) return toKebabCase.cache.get(str);\n const kebab = str.replace(/[^a-z]/gi, '-').replace(/\\B([A-Z])/g, '-$1').toLowerCase();\n toKebabCase.cache.set(str, kebab);\n return kebab;\n}\ntoKebabCase.cache = new Map();\nexport function findChildrenWithProvide(key, vnode) {\n if (!vnode || typeof vnode !== 'object') return [];\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)) {\n return [vnode.component];\n } else if (vnode.component.subTree) {\n return findChildrenWithProvide(key, vnode.component.subTree).flat(1);\n }\n }\n return [];\n}\nexport class CircularBuffer {\n #arr = [];\n #pointer = 0;\n constructor(size) {\n this.size = size;\n }\n get isFull() {\n return this.#arr.length === this.size;\n }\n push(val) {\n this.#arr[this.#pointer] = val;\n this.#pointer = (this.#pointer + 1) % this.size;\n }\n values() {\n return this.#arr.slice(this.#pointer).concat(this.#arr.slice(0, this.#pointer));\n }\n clear() {\n this.#arr.length = 0;\n this.#pointer = 0;\n }\n}\nexport function getEventCoordinates(e) {\n if ('touches' in e) {\n return {\n clientX: e.touches[0].clientX,\n clientY: e.touches[0].clientY\n };\n }\n return {\n clientX: e.clientX,\n clientY: e.clientY\n };\n}\n\n// Only allow a single return type\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 */\n\nexport function destructComputed(getter) {\n const refs = reactive({});\n watchEffect(() => {\n const base = getter();\n for (const key in base) {\n refs[key] = base[key];\n }\n }, {\n flush: 'sync'\n });\n const obj = {};\n for (const key in refs) {\n obj[key] = toRef(() => refs[key]);\n }\n return obj;\n}\n\n/** Array.includes but value can be any type */\nexport function includes(arr, val) {\n return arr.includes(val);\n}\nexport function eventName(propName) {\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\n\nexport const EventProp = () => [Function, Array];\nexport function hasEvent(props, name) {\n name = 'on' + capitalize(name);\n return !!(props[name] || props[`${name}Once`] || props[`${name}Capture`] || props[`${name}OnceCapture`] || props[`${name}CaptureOnce`]);\n}\nexport function callEvent(handler, ...args) {\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}\nexport function focusableChildren(el, filterByTabIndex = true) {\n const targets = ['button', '[href]', 'input:not([type=\"hidden\"])', 'select', 'textarea', 'details:not(:has(> summary))', 'details > summary', '[tabindex]', '[contenteditable]:not([contenteditable=\"false\"])', 'audio[controls]', 'video[controls]'].map(s => `${s}${filterByTabIndex ? ':not([tabindex=\"-1\"])' : ''}:not([disabled], [inert])`).join(', ');\n let elements;\n try {\n elements = [...el.querySelectorAll(targets)];\n } catch (err) {\n consoleError(String(err));\n return [];\n }\n return elements.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])') || x.tagName === 'SUMMARY' && x.parentElement?.tagName === 'DETAILS');\n}\nexport function getActiveElement() {\n let active = document.activeElement;\n while (active?.shadowRoot?.activeElement) {\n active = active.shadowRoot.activeElement;\n }\n return active;\n}\nexport function getNextElement(elements, location, condition) {\n let _el;\n let idx = elements.indexOf(getActiveElement());\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}\nexport function focusChild(el, location, options) {\n const focusable = focusableChildren(el);\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);else focusChild(el, location === 'next' ? 'first' : 'last', options);\n }\n}\nexport function isEmpty(val) {\n return isNull(val) || isUndefined(val) || isString(val) && val.trim() === '';\n}\nexport function noop() {}\n\n/** Returns null if the selector is not supported or we can't check */\nexport function matchesSelector(el, selector) {\n const supportsSelector = IN_BROWSER && typeof CSS !== 'undefined' && typeof CSS.supports !== 'undefined' && CSS.supports(`selector(${selector})`);\n if (!supportsSelector) return null;\n try {\n return !!el && el.matches(selector);\n } catch (err) {\n return null;\n }\n}\nexport function isAutofill(e) {\n return !e.isTrusted || !!matchesSelector(e.target, ':autofill') || !!matchesSelector(e.target, ':-webkit-autofill');\n}\nexport function ensureValidVNode(vnodes) {\n return vnodes.some(child => {\n if (!isVNode(child)) return true;\n if (child.type === Comment) return false;\n return child.type !== Fragment || ensureValidVNode(child.children);\n }) ? vnodes : null;\n}\nexport function renderSlot(slot, props, fallback) {\n // TODO: check if slot returns elements: #18308\n return slot?.(props) ?? fallback?.(props);\n}\nexport function defer(timeout, cb) {\n if (!IN_BROWSER || timeout === 0) {\n cb();\n return () => {};\n }\n const timeoutId = window.setTimeout(cb, timeout);\n return () => window.clearTimeout(timeoutId);\n}\nexport function templateRef() {\n const el = shallowRef();\n const fn = target => {\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 return fn;\n}\nexport function checkPrintable(e) {\n const isPrintableChar = e.key.length === 1;\n const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey;\n return isPrintableChar && noModifier;\n}\nexport function isPrimitive(value) {\n return isString(value) || isNumber(value) || isBoolean(value) || typeof value === 'bigint';\n}\nexport function escapeForRegex(sign) {\n return '\\\\^$*+?.()|{}[]'.includes(sign) ? `\\\\${sign}` : sign;\n}\nexport function normalizeMinusSign(text) {\n return text.replace(/−/g, '-');\n}\nexport function extractNumber(text, decimalDigitsLimit, decimalSeparator) {\n const onlyValidCharacters = new RegExp(`[\\\\d\\\\-${escapeForRegex(decimalSeparator)}]`);\n const cleanText = normalizeMinusSign(text).split('').filter(x => onlyValidCharacters.test(x)).filter((x, i, all) => i === 0 && /[-]/.test(x) ||\n // sign allowed at the start\n x === decimalSeparator && i === all.indexOf(x) ||\n // decimal separator allowed only once\n /\\d/.test(x)).join('');\n if (decimalDigitsLimit === 0) {\n return cleanText.split(decimalSeparator)[0];\n }\n const decimalPart = new RegExp(`${escapeForRegex(decimalSeparator)}\\\\d`);\n if (isNumber(decimalDigitsLimit) && decimalPart.test(cleanText)) {\n const parts = cleanText.split(decimalSeparator);\n return [parts[0], parts[1].substring(0, decimalDigitsLimit)].join(decimalSeparator);\n }\n return cleanText;\n}\nexport function camelizeProps(props) {\n const out = {};\n for (const prop in props) {\n out[camelize(prop)] = props[prop];\n }\n return out;\n}\nexport function onlyDefinedProps(props) {\n const booleanAttributes = ['checked', 'disabled'];\n return Object.fromEntries(Object.entries(props).filter(([key, v]) => booleanAttributes.includes(key) ? !!v : !isUndefined(v)));\n}\nexport function deepToRaw(value) {\n const objectIterator = input => {\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] = objectIterator(input[key]);\n return acc;\n }, {});\n }\n return input;\n };\n return objectIterator(value);\n}\n//# sourceMappingURL=helpers.js.map","// Utilities\nimport { includes } from \"./helpers.js\";\nconst block = ['top', 'bottom'];\nconst inline = ['start', 'end', 'left', 'right'];\n/** Parse a raw anchor string into an object */\nexport function parseAnchor(anchor, isRtl) {\n let [side, align] = anchor.split(' ');\n if (!align) {\n align = includes(block, side) ? 'start' : includes(inline, side) ? 'top' : 'center';\n }\n return {\n side: toPhysical(side, isRtl),\n align: toPhysical(align, isRtl)\n };\n}\nexport function toPhysical(str, isRtl) {\n if (str === 'start') return isRtl ? 'right' : 'left';\n if (str === 'end') return isRtl ? 'left' : 'right';\n return str;\n}\nexport function flipSide(anchor) {\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 };\n}\nexport function flipAlign(anchor) {\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 };\n}\nexport function flipCorner(anchor) {\n return {\n side: anchor.align,\n align: anchor.side\n };\n}\nexport function getAxis(anchor) {\n return includes(block, anchor.side) ? 'y' : 'x';\n}\n//# sourceMappingURL=anchor.js.map","import { IS_WEBKIT } from \"./globals.js\";\nimport { isElement } from \"./v0.js\";\nexport class Box {\n constructor(args) {\n if (isElement(args)) {\n const pageScale = document.body.currentCSSZoom ?? 1;\n const factor = 1 + (1 - pageScale) / pageScale;\n const {\n x,\n y,\n width,\n height\n } = args.getBoundingClientRect();\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 get top() {\n return this.y;\n }\n get bottom() {\n return this.y + this.height;\n }\n get left() {\n return this.x;\n }\n get right() {\n return this.x + this.width;\n }\n}\nexport function getOverflow(a, b) {\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}\nexport function getTargetBox(target) {\n if (Array.isArray(target)) {\n const pageScale = document.body.currentCSSZoom ?? 1;\n const factor = 1 + (1 - pageScale) / pageScale;\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}\nexport function getElementBox(el) {\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 ?? (localWidth ? document.documentElement.clientWidth / localWidth : 1);\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//# sourceMappingURL=box.js.map","// Utilities\nimport { Box } from \"./box.js\";\n/** @see https://stackoverflow.com/a/57876601/2074736 */\nexport function nullifyTransforms(el) {\n const rect = new Box(el);\n const style = getComputedStyle(el);\n const tx = style.transform;\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 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 return new Box({\n x,\n y,\n width: w,\n height: h\n });\n } else {\n return new Box(rect);\n }\n}\nexport function animate(el, keyframes, options) {\n if (typeof el.animate === 'undefined') return {\n finished: Promise.resolve()\n };\n let animation;\n try {\n animation = el.animate(keyframes, options);\n } catch (err) {\n return {\n finished: Promise.resolve()\n };\n }\n if (typeof animation.finished === 'undefined') {\n animation.finished = new Promise(resolve => {\n animation.onfinish = () => {\n resolve(animation);\n };\n });\n }\n return animation;\n}\n//# sourceMappingURL=animation.js.map","// Utilities\nimport { isNullOrUndefined } from \"./v0.js\";\nimport { eventName, isOn } from \"./helpers.js\";\nconst handlers = new WeakMap();\nexport function bindProps(el, props) {\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}\nexport function unbindProps(el, props) {\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//# sourceMappingURL=bindProps.js.map","/**\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\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;\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, background) {\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 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; // 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 = SAPC < loClip ? 0.0 : SAPC < loConThresh ? SAPC - SAPC * loConFactor * loConOffset : 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 outputContrast = SAPC > -loClip ? 0.0 : SAPC > -loConThresh ? SAPC - SAPC * loConFactor * loConOffset : SAPC + loConOffset;\n }\n return outputContrast * 100;\n}\n//# sourceMappingURL=APCA.js.map","// Types\n\nconst delta = 0.20689655172413793; // 6÷29\n\nconst cielabForwardTransform = t => t > delta ** 3 ? Math.cbrt(t) : t / (3 * delta ** 2) + 4 / 29;\nconst cielabReverseTransform = t => t > delta ? t ** 3 : 3 * delta ** 2 * (t - 4 / 29);\nexport function fromXYZ(xyz) {\n const transform = cielabForwardTransform;\n const transformedY = transform(xyz[1]);\n return [116 * transformedY - 16, 500 * (transform(xyz[0] / 0.95047) - transformedY), 200 * (transformedY - transform(xyz[2] / 1.08883))];\n}\nexport function toXYZ(lab) {\n const transform = cielabReverseTransform;\n const Ln = (lab[0] + 16) / 116;\n return [transform(Ln + lab[1] / 500) * 0.95047, transform(Ln), transform(Ln - lab[2] / 200) * 1.08883];\n}\n//# sourceMappingURL=transformCIELAB.js.map","// Utilities\nimport { clamp } from \"../helpers.js\"; // Types\n// For converting XYZ to sRGB\nconst srgbForwardMatrix = [[3.2406, -1.5372, -0.4986], [-0.9689, 1.8758, 0.0415], [0.0557, -0.2040, 1.0570]];\n\n// Forward gamma adjust\nconst srgbForwardTransform = C => C <= 0.0031308 ? C * 12.92 : 1.055 * C ** (1 / 2.4) - 0.055;\n\n// For converting sRGB to XYZ\nconst srgbReverseMatrix = [[0.4124, 0.3576, 0.1805], [0.2126, 0.7152, 0.0722], [0.0193, 0.1192, 0.9505]];\n\n// Reverse gamma adjust\nconst srgbReverseTransform = C => C <= 0.04045 ? C / 12.92 : ((C + 0.055) / 1.055) ** 2.4;\nexport function fromXYZ(xyz) {\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(matrix[i][0] * xyz[0] + matrix[i][1] * xyz[1] + matrix[i][2] * xyz[2])) * 255);\n }\n return {\n r: rgb[0],\n g: rgb[1],\n b: rgb[2]\n };\n}\nexport function toXYZ({\n r,\n g,\n b\n}) {\n const 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 return xyz;\n}\n//# sourceMappingURL=transformSRGB.js.map","// Utilities\nimport { APCAcontrast } from \"./color/APCA.js\";\nimport { consoleWarn } from \"./console.js\";\nimport { chunk, has, padEnd } from \"./helpers.js\";\nimport { isObject } from \"./index.js\";\nimport * as CIELAB from \"./color/transformCIELAB.js\";\nimport * as sRGB from \"./color/transformSRGB.js\"; // Types\nimport { isNullOrUndefined, isNumber, isString } from \"./v0.js\";\nexport function isCssColor(color) {\n return !!color && /^(#|var\\(--|(rgb|hsl)a?\\()/.test(color);\n}\nexport function isParsableColor(color) {\n return isCssColor(color) && !/^((rgb|hsl)a?\\()?var\\(--/.test(color);\n}\nconst cssColorRe = /^(?(?:rgb|hsl)a?)\\((?.+)\\)/;\nconst mappers = {\n rgb: (r, g, b, a) => ({\n r,\n g,\n b,\n a\n }),\n rgba: (r, g, b, a) => ({\n r,\n g,\n b,\n a\n }),\n hsl: (h, s, l, a) => HSLtoRGB({\n h,\n s,\n l,\n a\n }),\n hsla: (h, s, l, a) => HSLtoRGB({\n h,\n s,\n l,\n a\n }),\n hsv: (h, s, v, a) => HSVtoRGB({\n h,\n s,\n v,\n a\n }),\n hsva: (h, s, v, a) => HSVtoRGB({\n h,\n s,\n v,\n a\n })\n};\nexport function parseColor(color) {\n if (isNumber(color)) {\n if (isNaN(color) || color < 0 || color > 0xFFFFFF) {\n // int can't have opacity\n consoleWarn(`'${color}' is not a valid hex color`);\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 {\n groups\n } = color.match(cssColorRe);\n const {\n fn,\n values\n } = groups;\n const realValues = values.split(/,\\s*|\\s*\\/\\s*|\\s+/).map((v, i) => {\n if (v.endsWith('%') ||\n // unitless slv are %\n i > 0 && i < 3 && ['hsl', 'hsla', 'hsv', 'hsva'].includes(fn)) {\n return parseFloat(v) / 100;\n } else {\n return parseFloat(v);\n }\n });\n return mappers[fn](...realValues);\n } else if (isString(color)) {\n let hex = color.startsWith('#') ? color.slice(1) : color;\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 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 return HexToRGB(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 throw new TypeError(`Invalid color: ${isNullOrUndefined(color) ? color : String(color) || color.constructor.name}\\nExpected #hex, #hexa, rgb(), rgba(), hsl(), hsla(), object or number`);\n}\nexport function RGBToInt(color) {\n return (color.r << 16) + (color.g << 8) + color.b;\n}\nexport function classToHex(color, colors, currentTheme) {\n const [colorName, colorModifier] = color.toString().trim().replace('-', '').split(' ', 2);\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];\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) {\n const {\n h,\n s,\n v,\n a\n } = hsva;\n const f = n => {\n const k = (n + h / 60) % 6;\n return v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n };\n const rgb = [f(5), f(3), f(1)].map(v => Math.round(v * 255));\n return {\n r: rgb[0],\n g: rgb[1],\n b: rgb[2],\n a\n };\n}\nexport function HSLtoRGB(hsla) {\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) {\n if (!rgba) return {\n h: 0,\n s: 1,\n v: 1,\n 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 let h = 0;\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 if (h < 0) h = h + 360;\n const s = max === 0 ? 0 : (max - min) / max;\n const hsv = [h, s, max];\n return {\n h: hsv[0],\n s: hsv[1],\n v: hsv[2],\n a: rgba.a\n };\n}\nexport function HSVtoHSL(hsva) {\n const {\n h,\n s,\n v,\n a\n } = hsva;\n const l = v - v * s / 2;\n const sprime = l === 1 || l === 0 ? 0 : (v - l) / Math.min(l, 1 - l);\n return {\n h,\n s: sprime,\n l,\n a\n };\n}\nexport function HSLtoHSV(hsl) {\n const {\n h,\n s,\n l,\n a\n } = hsl;\n const v = l + s * Math.min(l, 1 - l);\n const sprime = v === 0 ? 0 : 2 - 2 * l / v;\n return {\n h,\n s: sprime,\n v,\n a\n };\n}\nexport function RGBtoCSS({\n r,\n g,\n b,\n a\n}) {\n return isNumber(a) ? `rgb(${r}, ${g}, ${b}, ${a})` : `rgb(${r}, ${g}, ${b})`;\n}\nexport function HSVtoCSS(hsva) {\n return RGBtoCSS(HSVtoRGB(hsva));\n}\nfunction toHex(v) {\n const h = Math.round(v).toString(16);\n return ('00'.substr(0, 2 - h.length) + h).toUpperCase();\n}\nexport function RGBtoHex({\n r,\n g,\n b,\n a\n}) {\n return `#${[toHex(r), toHex(g), toHex(b), isNumber(a) ? toHex(Math.round(a * 255)) : ''].join('')}`;\n}\nexport function HexToRGB(hex) {\n hex = parseHex(hex);\n let [r, g, b, a] = chunk(hex, 2).map(c => parseInt(c, 16));\n a = isNumber(a) ? a / 255 : a;\n return {\n r,\n g,\n b,\n a\n };\n}\nexport function HexToHSV(hex) {\n const rgb = HexToRGB(hex);\n return RGBtoHSV(rgb);\n}\nexport function HSVtoHex(hsva) {\n return RGBtoHex(HSVtoRGB(hsva));\n}\nexport function parseHex(hex) {\n if (hex.startsWith('#')) {\n hex = hex.slice(1);\n }\n hex = hex.replace(/([^0-9a-f])/gi, 'F');\n if (hex.length === 3 || hex.length === 4) {\n hex = hex.split('').map(x => x + x).join('');\n }\n if (hex.length !== 6) {\n hex = padEnd(padEnd(hex, 6), 8, 'F');\n }\n return hex;\n}\nexport function parseGradient(gradient, colors, currentTheme) {\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}\nexport function lighten(value, amount) {\n const lab = CIELAB.fromXYZ(sRGB.toXYZ(value));\n lab[0] = lab[0] + amount * 10;\n return sRGB.fromXYZ(CIELAB.toXYZ(lab));\n}\nexport function darken(value, amount) {\n const lab = CIELAB.fromXYZ(sRGB.toXYZ(value));\n lab[0] = lab[0] - amount * 10;\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) {\n const rgb = parseColor(color);\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, second) {\n const l1 = getLuma(first);\n const l2 = getLuma(second);\n const light = Math.max(l1, l2);\n const dark = Math.min(l1, l2);\n return (light + 0.05) / (dark + 0.05);\n}\nexport function hasLightForeground(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//# sourceMappingURL=colorUtils.js.map","// Types\n// eslint-disable-line vue/prefer-import-from-vue\nimport { isObject } from \"./v0.js\";\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) => 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 */\nexport function propsFactory(props, source) {\n return defaults => {\n return Object.keys(props).reduce((obj, prop) => {\n const isObjectDefinition = isObject(props[prop]);\n const definition = isObjectDefinition ? props[prop] : {\n 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 if (source && !obj[prop].source) {\n obj[prop].source = source;\n }\n return obj;\n }, {});\n };\n}\n\n/**\n * Like `Partial` but doesn't care what the value is\n */\n\n// Copied from Vue\n//# sourceMappingURL=propsFactory.js.map","// Utilities\nimport { propsFactory } from \"../util/propsFactory.js\"; // Types\n// TODO: import from vue once upstream PR is merged\n// https://github.com/vuejs/core/pull/14441\n// Composables\nexport const makeComponentProps = propsFactory({\n class: [String, Array, Object],\n style: {\n type: [String, Array, Object],\n default: null\n }\n}, 'component');\n//# sourceMappingURL=component.js.map","// Utilities\nimport { getCurrentInstance as _getCurrentInstance } from 'vue';\nimport { toKebabCase } from \"./helpers.js\";\nexport function getCurrentInstance(name, message) {\n const vm = _getCurrentInstance();\n if (!vm) {\n throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);\n }\n return vm;\n}\nexport function getCurrentInstanceName(name = 'composables') {\n const vm = getCurrentInstance(name).type;\n return toKebabCase(vm?.aliasName || vm?.name);\n}\n//# sourceMappingURL=getCurrentInstance.js.map","// Utilities\nimport { getCurrentInstance } from \"./getCurrentInstance.js\"; // Types\nexport function injectSelf(key, vm = getCurrentInstance('injectSelf')) {\n const {\n provides\n } = vm;\n if (provides && key in provides) {\n // TS doesn't allow symbol as index type\n return provides[key];\n }\n return undefined;\n}\n//# sourceMappingURL=injectSelf.js.map","// Utilities\nimport { computed, inject, provide, ref, shallowRef, toRef, unref, watchEffect } from 'vue';\nimport { isString } from \"../util/index.js\";\nimport { getCurrentInstance } from \"../util/getCurrentInstance.js\";\nimport { mergeDeep, toKebabCase } from \"../util/helpers.js\";\nimport { injectSelf } from \"../util/injectSelf.js\"; // Types\nexport const DefaultsSymbol = Symbol.for('vuetify:defaults');\nexport const RootDefaultsSymbol = Symbol.for('vuetify:defaults:root');\nexport function createDefaults(options) {\n return ref(options);\n}\nexport function injectDefaults() {\n const defaults = inject(DefaultsSymbol);\n if (!defaults) throw new Error('[Vuetify] Could not find defaults instance');\n return defaults;\n}\nexport function provideDefaults(defaults, options) {\n const injectedDefaults = injectDefaults();\n const injectedRoot = inject(RootDefaultsSymbol, null);\n const providedDefaults = ref(defaults);\n const newDefaults = computed(() => {\n const disabled = unref(options?.disabled);\n if (disabled) return injectedDefaults.value;\n const scoped = unref(options?.scoped);\n const reset = unref(options?.reset);\n const root = unref(options?.root);\n if (!providedDefaults.value && !(scoped || reset || root)) return injectedDefaults.value;\n let properties = mergeDeep(providedDefaults.value, {\n prev: injectedDefaults.value\n });\n if (scoped) return properties;\n if (reset || root) {\n const len = Number(reset || Infinity);\n const rootDefaults = isString(root) ? properties.prev?.[root] : undefined;\n if (root && injectedRoot?.value) {\n properties = injectedRoot.value;\n }\n for (let i = 0; i <= len; i++) {\n if (!properties || !('prev' in properties)) {\n break;\n }\n properties = properties.prev;\n }\n if (properties && rootDefaults) {\n properties = mergeDeep(mergeDeep(properties, {\n prev: properties\n }), rootDefaults);\n }\n return properties;\n }\n return properties.prev ? mergeDeep(properties.prev, properties, undefined, (_, v) => v !== undefined) : properties;\n });\n provide(DefaultsSymbol, newDefaults);\n return newDefaults;\n}\nexport function injectComponentDefaults(name) {\n const vm = getCurrentInstance('injectComponentDefaults');\n return toRef(() => injectSelf(DefaultsSymbol, vm)?.value?.[name]);\n}\nexport function injectNestedDefaults(name) {\n const vm = getCurrentInstance('injectNestedDefaults');\n const defaults = injectDefaults();\n const self = vm.props._as ?? vm.type.name;\n return toRef(() => defaults.value?.[self]?.[name]);\n}\nfunction propIsDefined(vnode, prop) {\n return vnode.props && (typeof vnode.props[prop] !== 'undefined' || typeof vnode.props[toKebabCase(prop)] !== 'undefined');\n}\nexport function internalUseDefaults(props = {}, name, defaults = injectDefaults()) {\n const vm = getCurrentInstance('useDefaults');\n name = name ?? vm.type.name ?? vm.type.__name;\n if (!name) {\n throw new Error('[Vuetify] Could not determine component name');\n }\n const componentDefaults = computed(() => defaults.value?.[props._as ?? name]);\n const _props = new Proxy(props, {\n get(target, prop) {\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 const _subcomponentDefaults = shallowRef();\n watchEffect(() => {\n if (componentDefaults.value) {\n const subComponents = Object.entries(componentDefaults.value).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 function provideSubDefaults() {\n const injected = injectSelf(DefaultsSymbol, vm);\n provide(DefaultsSymbol, computed(() => {\n return _subcomponentDefaults.value ? mergeDeep(injected?.value ?? {}, _subcomponentDefaults.value) : injected?.value;\n }));\n }\n return {\n props: _props,\n provideSubDefaults\n };\n}\nexport function useDefaults(props = {}, name) {\n const {\n props: _props,\n provideSubDefaults\n } = internalUseDefaults(props, name);\n provideSubDefaults();\n return _props;\n}\n//# sourceMappingURL=defaults.js.map","// Composables\nimport { injectDefaults, internalUseDefaults } from \"../composables/defaults.js\"; // Utilities\nimport { defineComponent as _defineComponent // eslint-disable-line no-restricted-imports\n} from 'vue';\nimport { consoleWarn } from \"./console.js\";\nimport { pick } from \"./helpers.js\";\nimport { propsFactory } from \"./propsFactory.js\"; // Types\n// No props\n// Object Props\n// Implementation\nexport function defineComponent(options) {\n options._setup = options._setup ?? options.setup;\n if (!options.name) {\n consoleWarn('The component is missing an explicit name, unable to generate default prop value');\n return options;\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) {\n return pick(props, propKeys);\n };\n options.props._as = String;\n options.setup = function setup(props, 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 const {\n props: _props,\n provideSubDefaults\n } = internalUseDefaults(props, props._as ?? options.name, defaults);\n const setupBindings = options._setup(_props, ctx);\n provideSubDefaults();\n return setupBindings;\n };\n }\n return options;\n}\n\n// No argument - simple default slot\n\n// Generic constructor argument - generic props and slots\n\n// Slots argument - simple slots\n\n// Implementation\nexport function genericComponent(exposeDefaults = true) {\n return options => (exposeDefaults ? defineComponent : _defineComponent)(options);\n}\nexport function defineFunctionalComponent(props, render) {\n render.props = props;\n return render;\n}\n\n// Adds a filterProps method to the component options\n\n// https://github.com/vuejs/core/pull/10557\n\n// not a vue Component\n//# sourceMappingURL=defineComponent.js.map","// Composables\nimport { makeComponentProps } from \"../composables/component.js\"; // Utilities\nimport { camelize, capitalize, h } from 'vue';\nimport { genericComponent } from \"./defineComponent.js\";\nexport function createSimpleFunctional(klass, tag = 'div', name) {\n return genericComponent()({\n name: name ?? capitalize(camelize(klass.replace(/__/g, '-'))),\n props: {\n tag: {\n type: String,\n default: tag\n },\n ...makeComponentProps()\n },\n setup(props, {\n slots\n }) {\n return () => {\n return h(props.tag, {\n class: [klass, props.class],\n style: props.style\n }, slots.default?.());\n };\n }\n });\n}\n//# sourceMappingURL=createSimpleFunctional.js.map","import { isPrimitive } from \"./helpers.js\";\nimport { isBoolean } from \"./v0.js\";\nfunction updateRecursionCache(a, b, cache, result) {\n if (!cache || isPrimitive(a) || isPrimitive(b)) return;\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}\nfunction findCachedComparison(a, b, cache) {\n if (!cache || isPrimitive(a) || isPrimitive(b)) return null;\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}\nexport function deepEqual(a, b, recursionCache = new WeakMap()) {\n if (a === b) return true;\n if (a instanceof Date && b instanceof Date && a.getTime() !== b.getTime()) {\n // If the values are Date, compare them as timestamps\n return false;\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 const props = Object.keys(a);\n if (props.length !== Object.keys(b).length) {\n // Different number of props, don't bother to check\n return false;\n }\n const cachedComparisonResult = findCachedComparison(a, b, recursionCache);\n if (cachedComparisonResult) {\n return cachedComparisonResult;\n }\n updateRecursionCache(a, b, recursionCache, true);\n return props.every(p => deepEqual(a[p], b[p], recursionCache));\n}\n//# sourceMappingURL=deepEqual.js.map","import { isFunction } from \"./v0.js\";\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) {\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 return document;\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({\n composed: true\n }) !== document) return null;\n return root;\n}\n//# sourceMappingURL=dom.js.map","// Utilities\nimport { computed, shallowRef, toValue, watch } from 'vue';\nimport { clamp } from \"./helpers.js\";\nimport { PREFERS_REDUCED_MOTION } from \"./globals.js\"; // Types\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 const easingPatterns = {\n linear: t => t,\n easeInQuad: t => t ** 2,\n easeOutQuad: t => t * (2 - t),\n easeInOutQuad: t => t < 0.5 ? 2 * t ** 2 : -1 + (4 - 2 * t) * t,\n easeInCubic: t => t ** 3,\n easeOutCubic: t => --t ** 3 + 1,\n easeInOutCubic: t => t < 0.5 ? 4 * t ** 3 : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,\n easeInQuart: t => t ** 4,\n easeOutQuart: t => 1 - --t ** 4,\n easeInOutQuart: t => t < 0.5 ? 8 * t ** 4 : 1 - 8 * --t ** 4,\n easeInQuint: t => t ** 5,\n easeOutQuint: t => 1 + --t ** 5,\n easeInOutQuint: t => t < 0.5 ? 16 * t ** 5 : 1 + 16 * --t ** 5,\n instant: t => 1\n};\nexport function useTransition(source, options) {\n const defaultTransition = {\n duration: 300,\n transition: easingPatterns.easeInOutCubic\n };\n let raf = -1;\n const outputRef = shallowRef(toValue(source));\n watch(() => toValue(source), async to => {\n cancelAnimationFrame(raf);\n const easing = {\n ...defaultTransition,\n ...toValue(options)\n };\n await executeTransition(outputRef, outputRef.value, to, easing);\n });\n function executeTransition(out, from, to, options) {\n const startTime = performance.now();\n const ease = PREFERS_REDUCED_MOTION() ? easingPatterns.instant : options.transition ?? easingPatterns.easeInOutCubic;\n return new Promise(resolve => {\n raf = requestAnimationFrame(function step(currentTime) {\n const timeElapsed = currentTime - startTime;\n const progress = timeElapsed / options.duration;\n out.value = from + (to - from) * ease(clamp(progress, 0, 1));\n if (progress < 1) {\n raf = requestAnimationFrame(step);\n } else {\n out.value = to;\n resolve();\n }\n });\n });\n }\n return computed(() => outputRef.value);\n}\n//# sourceMappingURL=easing.js.map","// Utilities\nimport { callEvent, isOn } from \"./helpers.js\";\nexport function getPrefixedEventHandlers(attrs, suffix, getData) {\n return Object.keys(attrs).filter(key => isOn(key) && key.endsWith(suffix)).reduce((acc, key) => {\n acc[key.slice(0, -suffix.length)] = event => callEvent(attrs[key], event, getData(event));\n return acc;\n }, {});\n}\n//# sourceMappingURL=events.js.map","export function getScrollParent(el, includeHidden = false) {\n while (el) {\n if (includeHidden ? isPotentiallyScrollable(el) : hasScrollbar(el)) return el;\n el = el.parentElement;\n }\n return document.scrollingElement;\n}\nexport function getScrollParents(el, stopAt) {\n const elements = [];\n if (stopAt && el && !stopAt.contains(el)) return elements;\n while (el) {\n if (hasScrollbar(el)) elements.push(el);\n if (el === stopAt) break;\n el = el.parentElement;\n }\n return elements;\n}\nexport function hasScrollbar(el) {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;\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}\nfunction isPotentiallyScrollable(el) {\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;\n const style = window.getComputedStyle(el);\n return ['scroll', 'auto'].includes(style.overflowY);\n}\n//# sourceMappingURL=getScrollParent.js.map","// Types\n\nexport function getIndentLines({\n depth,\n isLast,\n isLastGroup,\n leafLinks,\n separateRoots,\n parentIndentLines,\n variant\n}) {\n const isLastLeaf = isLast && (!isLastGroup || separateRoots || depth > 1);\n if (!parentIndentLines || !depth) {\n return {\n leaf: undefined,\n node: undefined,\n children: parentIndentLines,\n footer: parentIndentLines && (!isLastLeaf || variant === 'simple') ? [...parentIndentLines, separateRoots ? 'none' : 'line'] : ['none']\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 return {\n leaf: [...parentIndentLines, isLastLeaf ? 'last-leaf' : 'leaf', ...(leafLinks ? ['leaf-link'] : [])],\n node: [...parentIndentLines, isLastLeaf ? 'last-leaf' : 'leaf'],\n children: [...parentIndentLines, isLastLeaf ? 'none' : 'line'],\n footer: [...parentIndentLines, isLastLeaf ? 'none' : 'line']\n };\n}\n//# sourceMappingURL=indentLines.js.map","export function isFixedPosition(el) {\n while (el) {\n if (window.getComputedStyle(el).position === 'fixed') {\n return true;\n }\n el = el.offsetParent;\n }\n return false;\n}\n//# sourceMappingURL=isFixedPosition.js.map","// Utilities\nimport { getCurrentInstance } from \"./getCurrentInstance.js\"; // Types\nexport function useRender(render) {\n const vm = getCurrentInstance('useRender');\n vm.render = render;\n}\n//# sourceMappingURL=useRender.js.map","export function throttle(fn, delay, options = {\n leading: true,\n trailing: true\n}) {\n let timeoutId = 0;\n let lastExec = 0;\n let throttling = false;\n let start = 0;\n function clear() {\n clearTimeout(timeoutId);\n throttling = false;\n start = 0;\n }\n const wrap = (...args) => {\n clearTimeout(timeoutId);\n const now = Date.now();\n if (!start) start = now;\n const elapsed = now - Math.max(start, lastExec);\n function invoke() {\n lastExec = Date.now();\n timeoutId = setTimeout(clear, delay);\n fn(...args);\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 wrap.clear = clear;\n wrap.immediate = fn;\n return wrap;\n}\n//# sourceMappingURL=throttle.js.map","// Utilities\nimport { computed, inject, toValue, createVNode as _createVNode, createElementVNode as _createElementVNode, mergeProps as _mergeProps, normalizeClass as _normalizeClass } from 'vue';\nimport { consoleWarn, defineComponent, genericComponent, isString, propsFactory } from \"../util/index.js\"; // Types\nexport const IconValue = [String, Function, Object, Array];\nexport const IconSymbol = Symbol.for('vuetify:icons');\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],\n required: true\n }\n}, 'icon');\nexport const VComponentIcon = genericComponent()({\n name: 'VComponentIcon',\n props: makeIconProps(),\n setup(props, {\n slots\n }) {\n return () => {\n const Icon = props.icon;\n return _createVNode(props.tag, null, {\n default: () => [props.icon ? _createVNode(Icon, null, null) : slots.default?.()]\n });\n };\n }\n});\nexport const VSvgIcon = defineComponent({\n name: 'VSvgIcon',\n inheritAttrs: false,\n props: makeIconProps(),\n setup(props, {\n attrs\n }) {\n return () => {\n return _createVNode(props.tag, _mergeProps(attrs, {\n \"style\": null\n }), {\n default: () => [_createElementVNode(\"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 }, [Array.isArray(props.icon) ? props.icon.map(path => Array.isArray(path) ? _createElementVNode(\"path\", {\n \"d\": path[0],\n \"fill-opacity\": path[1]\n }, null) : _createElementVNode(\"path\", {\n \"d\": path\n }, null)) : _createElementVNode(\"path\", {\n \"d\": props.icon\n }, null)])]\n });\n };\n }\n});\nexport const VLigatureIcon = defineComponent({\n name: 'VLigatureIcon',\n props: makeIconProps(),\n setup(props) {\n return () => {\n return _createVNode(props.tag, null, {\n default: () => [props.icon]\n });\n };\n }\n});\nexport const VClassIcon = defineComponent({\n name: 'VClassIcon',\n props: makeIconProps(),\n setup(props) {\n return () => {\n return _createVNode(props.tag, {\n \"class\": _normalizeClass(props.icon)\n }, null);\n };\n }\n});\nexport const useIcon = props => {\n const icons = inject(IconSymbol);\n if (!icons) throw new Error('Missing Vuetify Icons provide!');\n const iconData = computed(() => {\n const iconAlias = toValue(props);\n if (!iconAlias) return {\n component: VComponentIcon\n };\n let icon = iconAlias;\n if (isString(icon)) {\n icon = icon.trim();\n if (icon.startsWith('$')) {\n icon = icons.aliases?.[icon.slice(1)];\n }\n }\n if (!icon) consoleWarn(`Could not find aliased icon \"${iconAlias}\"`);\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 const iconSetName = Object.keys(icons.sets).find(setName => isString(icon) && icon.startsWith(`${setName}:`));\n const iconName = iconSetName ? icon.slice(iconSetName.length + 1) : icon;\n const iconSet = icons.sets[iconSetName ?? icons.defaultSet];\n return {\n component: iconSet.component,\n icon: iconName\n };\n });\n return {\n iconData\n };\n};\n//# sourceMappingURL=icons.js.map","// Composables\nimport { VClassIcon } from \"../composables/icons.js\"; // Utilities\nimport { h } from 'vue';\n\n// Types\n\nconst aliases = {\n collapse: 'mdi-chevron-up',\n complete: 'mdi-check',\n cancel: 'mdi-close-circle',\n close: 'mdi-close',\n delete: 'mdi-close-circle',\n // 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',\n // 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};\nconst mdi = {\n // Not using mergeProps here, functional components merge props by default (?)\n component: props => h(VClassIcon, {\n ...props,\n class: 'mdi'\n })\n};\nexport { aliases, mdi };\n//# sourceMappingURL=mdi.js.map","// Composables\nimport { VClassIcon, VSvgIcon } from \"./composables/icons.js\";\nimport { aliases, mdi } from \"./iconsets/mdi.js\"; // Utilities\nimport { mergeDeep } from \"./util/index.js\"; // Types\nfunction genDefaults() {\n return {\n svg: {\n component: VSvgIcon\n },\n class: {\n component: VClassIcon\n }\n };\n}\nexport function createIcons(options) {\n const sets = genDefaults();\n const defaultSet = options?.defaultSet ?? 'mdi';\n if (defaultSet === 'mdi' && !sets.mdi) {\n sets.mdi = mdi;\n }\n return mergeDeep({\n defaultSet,\n sets,\n aliases: {\n ...aliases,\n /* eslint-disable max-len */\n vuetify: ['M8.2241 14.2009L12 21L22 3H14.4459L8.2241 14.2009Z', ['M7.26303 12.4733L7.00113 12L2 3H12.5261C12.5261 3 12.5261 3 12.5261 3L7.26303 12.4733Z', 0.6]],\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': ['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', ['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 /* eslint-enable max-len */\n }\n }, options);\n}\n//# sourceMappingURL=icons.js.map","// Utilities\nimport { effectScope, onScopeDispose, watch } from 'vue';\n\n// Types\n\nexport function useToggleScope(source, fn) {\n let scope;\n function start() {\n scope = effectScope();\n scope.run(() => fn.length ? fn(() => {\n scope?.stop();\n start();\n }) : fn());\n }\n watch(source, active => {\n if (active && !scope) {\n start();\n } else if (!active) {\n scope?.stop();\n scope = undefined;\n }\n }, {\n immediate: true\n });\n onScopeDispose(() => {\n scope?.stop();\n });\n}\n//# sourceMappingURL=toggleScope.js.map","// Composables\nimport { useToggleScope } from \"./toggleScope.js\"; // Utilities\nimport { computed, ref, toRaw, watch } from 'vue';\nimport { getCurrentInstance, isUndefined, toKebabCase } from \"../util/index.js\"; // Types\n// Composables\nexport function useProxiedModel(props, prop, defaultValue, transformIn = v => v, transformOut = v => v) {\n const vm = getCurrentInstance('useProxiedModel');\n const internal = ref(!isUndefined(props[prop]) ? props[prop] : defaultValue);\n const kebabProp = toKebabCase(prop);\n const checkKebab = kebabProp !== prop;\n const isControlled = checkKebab ? computed(() => {\n void props[prop];\n return !!((vm.vnode.props?.hasOwnProperty(prop) || vm.vnode.props?.hasOwnProperty(kebabProp)) && (vm.vnode.props?.hasOwnProperty(`onUpdate:${prop}`) || vm.vnode.props?.hasOwnProperty(`onUpdate:${kebabProp}`)));\n }) : computed(() => {\n void props[prop];\n return !!(vm.vnode.props?.hasOwnProperty(prop) && vm.vnode.props?.hasOwnProperty(`onUpdate:${prop}`));\n });\n useToggleScope(() => !isControlled.value, () => {\n watch(() => props[prop], val => {\n internal.value = val;\n });\n });\n const model = computed({\n get() {\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 });\n Object.defineProperty(model, 'externalValue', {\n get: () => isControlled.value ? props[prop] : internal.value\n });\n return model;\n}\n//# sourceMappingURL=proxiedModel.js.map","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}',\n // 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//# sourceMappingURL=en.js.map","// Composables\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\"; // Utilities\nimport { ref, shallowRef, toRef, watch } from 'vue';\nimport { consoleError, consoleWarn, getObjectValueByPath, isString } from \"../../util/index.js\"; // Locales\nimport en from \"../en.js\"; // Types\nconst LANG_PREFIX = '$vuetify.';\nconst replace = (str, params) => {\n return str.replace(/\\{(\\d+)\\}/g, (match, index) => {\n return String(params[Number(index)]);\n });\n};\nconst createTranslateFunction = (current, fallback, messages) => {\n return (key, ...params) => {\n if (!key.startsWith(LANG_PREFIX)) {\n return replace(key, params);\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 let str = getObjectValueByPath(currentLocale, shortKey, null);\n if (!str) {\n consoleWarn(`Translation key \"${key}\" not found in \"${current.value}\", trying fallback locale`);\n str = getObjectValueByPath(fallbackLocale, shortKey, null);\n }\n if (!str) {\n consoleError(`Translation key \"${key}\" not found in fallback`);\n str = key;\n }\n if (!isString(str)) {\n consoleError(`Translation key \"${key}\" has a non-string value`);\n str = key;\n }\n return replace(str, params);\n };\n};\nfunction createNumberFunction(current, fallback) {\n return (value, options) => {\n const numberFormat = new Intl.NumberFormat([current.value, fallback.value], options);\n return numberFormat.format(value);\n };\n}\nfunction inferDecimalSeparator(current, fallback) {\n const format = createNumberFunction(current, fallback);\n return format(0.1).includes(',') ? ',' : '.';\n}\nfunction inferNumericGroupSeparator(current, fallback) {\n return new Intl.NumberFormat([current.value, fallback.value], {\n useGrouping: true\n }).formatToParts(10000).find(p => p.type === 'group')?.value ?? ' ';\n}\nfunction useProvided(props, prop, provided) {\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 watch(provided, v => {\n if (props[prop] == null) {\n internal.value = provided.value;\n }\n });\n return internal;\n}\nfunction createProvideFunction(state) {\n return props => {\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 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({\n current,\n fallback,\n messages\n })\n };\n };\n}\nexport function createVuetifyAdapter(options) {\n const current = shallowRef(options?.locale ?? 'en');\n const fallback = shallowRef(options?.fallback ?? 'en');\n const messages = ref({\n en,\n ...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({\n current,\n fallback,\n messages\n })\n };\n}\n//# sourceMappingURL=vuetify.js.map","// Utilities\nimport { computed, inject, provide, ref, toRef } from 'vue';\nimport { createVuetifyAdapter } from \"../locale/adapters/vuetify.js\"; // Types\nexport const LocaleSymbol = Symbol.for('vuetify:locale');\nexport function createLocale(options) {\n const i18n = options?.adapter?.name ? options.adapter : createVuetifyAdapter(options);\n const rtl = createRtl(i18n, options);\n return {\n ...i18n,\n ...rtl\n };\n}\nexport function useLocale() {\n const locale = inject(LocaleSymbol);\n if (!locale) throw new Error('[Vuetify] Could not find injected locale instance');\n return locale;\n}\nexport function provideLocale(props) {\n const locale = inject(LocaleSymbol);\n if (!locale) throw new Error('[Vuetify] Could not find injected locale instance');\n const i18n = locale.provide(props);\n const rtl = provideRtl(i18n, locale.rtl, props);\n const data = {\n ...i18n,\n ...rtl\n };\n provide(LocaleSymbol, data);\n return data;\n}\n\n// RTL\n\nexport const RtlSymbol = Symbol.for('vuetify:rtl');\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}\nexport function createRtl(i18n, options) {\n const rtl = ref(options?.rtl ?? genDefaults());\n const isRtl = computed(() => rtl.value[i18n.current.value] ?? false);\n return {\n isRtl,\n rtl,\n rtlClasses: toRef(() => `v-locale--is-${isRtl.value ? 'rtl' : 'ltr'}`)\n };\n}\nexport function provideRtl(locale, rtl, props) {\n const isRtl = computed(() => props.rtl ?? rtl.value[locale.current.value] ?? false);\n return {\n isRtl,\n rtl,\n rtlClasses: toRef(() => `v-locale--is-${isRtl.value ? 'rtl' : 'ltr'}`)\n };\n}\nexport function useRtl() {\n const locale = inject(LocaleSymbol);\n if (!locale) throw new Error('[Vuetify] Could not find injected rtl instance');\n return {\n isRtl: locale.isRtl,\n rtlClasses: locale.rtlClasses\n };\n}\n//# sourceMappingURL=locale.js.map","// Utilities\nimport { consoleWarn, createRange, padStart } from \"../../../util/index.js\"; // Types\nfunction weekInfo(locale) {\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 {\n return {\n firstDay: 0,\n firstWeekSize: 4\n };\n }\n case locale === '001':\n {\n return {\n firstDay: 1,\n firstWeekSize: 1\n };\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 {\n return {\n firstDay: 0,\n firstWeekSize: 1\n };\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 {\n return {\n firstDay: 1,\n firstWeekSize: 1\n };\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 {\n return {\n firstDay: 1,\n firstWeekSize: 4\n };\n }\n case `AE AF BH DJ DZ EG IQ IR JO KW LY OM QA SD SY`.includes(code):\n {\n return {\n firstDay: 6,\n firstWeekSize: 1\n };\n }\n case code === 'MV':\n {\n return {\n firstDay: 5,\n firstWeekSize: 1\n };\n }\n case code === 'PT':\n {\n return {\n firstDay: 0,\n firstWeekSize: 4\n };\n }\n default:\n return null;\n }\n}\nfunction getWeekArray(date, locale, firstDayOfWeek) {\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 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 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 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 if (currentWeek.length > 0) {\n weeks.push(currentWeek);\n }\n return weeks;\n}\nfunction startOfWeek(date, locale, firstDayOfWeek) {\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 const d = new Date(date);\n while (d.getDay() !== day) {\n d.setDate(d.getDate() - 1);\n }\n return d;\n}\nfunction endOfWeek(date, locale) {\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}\nfunction startOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n}\nfunction endOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0);\n}\nfunction parseLocalDate(value) {\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}\nconst _YYYMMDD = /^([12]\\d{3}-([1-9]|0[1-9]|1[0-2])-([1-9]|0[1-9]|[12]\\d|3[01]))$/;\nfunction date(value) {\n if (value == null) return new Date();\n if (value instanceof Date) return value;\n if (typeof value === 'string') {\n let parsed;\n if (_YYYMMDD.test(value)) {\n return parseLocalDate(value);\n } else {\n parsed = Date.parse(value);\n }\n if (!isNaN(parsed)) return new Date(parsed);\n }\n return null;\n}\nconst sundayJanuarySecond2000 = new Date(2000, 0, 2);\nfunction getWeekdays(locale, firstDayOfWeek, weekdayFormat) {\n const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;\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, {\n weekday: weekdayFormat ?? 'narrow'\n }).format(weekday);\n });\n}\nfunction format(value, formatString, locale, formats) {\n const newDate = date(value) ?? new Date();\n const customFormat = formats?.[formatString];\n if (typeof customFormat === 'function') {\n return customFormat(newDate, formatString, locale);\n }\n let options = {};\n switch (formatString) {\n case 'fullDate':\n options = {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n };\n break;\n case 'fullDateWithWeekday':\n options = {\n weekday: 'long',\n year: 'numeric',\n month: 'long',\n day: 'numeric'\n };\n break;\n case 'normalDate':\n const day = newDate.getDate();\n const month = new Intl.DateTimeFormat(locale, {\n month: 'long'\n }).format(newDate);\n return `${day} ${month}`;\n case 'normalDateWithWeekday':\n options = {\n weekday: 'short',\n day: 'numeric',\n month: 'short'\n };\n break;\n case 'shortDate':\n options = {\n month: 'short',\n day: 'numeric'\n };\n break;\n case 'year':\n options = {\n year: 'numeric'\n };\n break;\n case 'month':\n options = {\n month: 'long'\n };\n break;\n case 'monthShort':\n options = {\n month: 'short'\n };\n break;\n case 'monthAndYear':\n options = {\n month: 'long',\n year: 'numeric'\n };\n break;\n case 'monthAndDate':\n options = {\n month: 'long',\n day: 'numeric'\n };\n break;\n case 'weekday':\n options = {\n weekday: 'long'\n };\n break;\n case 'weekdayShort':\n options = {\n weekday: 'short'\n };\n break;\n case 'dayOfMonth':\n return new Intl.NumberFormat(locale).format(newDate.getDate());\n case 'hours12h':\n options = {\n hour: 'numeric',\n hour12: true\n };\n break;\n case 'hours24h':\n options = {\n hour: 'numeric',\n hour12: false\n };\n break;\n case 'minutes':\n options = {\n minute: 'numeric'\n };\n break;\n case 'seconds':\n options = {\n second: 'numeric'\n };\n break;\n case 'fullTime':\n options = {\n hour: 'numeric',\n minute: 'numeric'\n };\n break;\n case 'fullTime12h':\n options = {\n hour: 'numeric',\n minute: 'numeric',\n hour12: true\n };\n break;\n case 'fullTime24h':\n options = {\n hour: 'numeric',\n minute: 'numeric',\n hour12: false\n };\n break;\n case 'fullDateTime':\n options = {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric'\n };\n break;\n case 'fullDateTime12h':\n options = {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n hour12: true\n };\n break;\n case 'fullDateTime24h':\n options = {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n hour12: false\n };\n break;\n case 'keyboardDate':\n options = {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit'\n };\n break;\n case 'keyboardDateTime':\n options = {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: 'numeric',\n minute: 'numeric'\n };\n return new Intl.DateTimeFormat(locale, options).format(newDate).replace(/, /g, ' ');\n case 'keyboardDateTime12h':\n options = {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: 'numeric',\n minute: 'numeric',\n hour12: true\n };\n return new Intl.DateTimeFormat(locale, options).format(newDate).replace(/, /g, ' ');\n case 'keyboardDateTime24h':\n options = {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: 'numeric',\n minute: 'numeric',\n hour12: false\n };\n return new Intl.DateTimeFormat(locale, options).format(newDate).replace(/, /g, ' ');\n default:\n options = customFormat ?? {\n timeZone: 'UTC',\n timeZoneName: 'short'\n };\n }\n return new Intl.DateTimeFormat(locale, options).format(newDate);\n}\nfunction toISO(adapter, value) {\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 return `${year}-${month}-${day}`;\n}\nfunction parseISO(value) {\n const [year, month, day] = value.split('-').map(Number);\n return new Date(year, month - 1, day);\n}\nfunction addMinutes(date, amount) {\n const d = new Date(date);\n d.setMinutes(d.getMinutes() + amount);\n return d;\n}\nfunction addHours(date, amount) {\n const d = new Date(date);\n d.setHours(d.getHours() + amount);\n return d;\n}\nfunction addDays(date, amount) {\n const d = new Date(date);\n d.setDate(d.getDate() + amount);\n return d;\n}\nfunction addWeeks(date, amount) {\n const d = new Date(date);\n d.setDate(d.getDate() + amount * 7);\n return d;\n}\nfunction addMonths(date, amount) {\n const d = new Date(date);\n d.setDate(1);\n d.setMonth(d.getMonth() + amount);\n return d;\n}\nfunction getYear(date) {\n return date.getFullYear();\n}\nfunction getMonth(date) {\n return date.getMonth();\n}\nfunction getWeek(date, locale, firstDayOfWeek, firstDayOfYear) {\n const weekInfoFromLocale = weekInfo(locale);\n const weekStart = firstDayOfWeek ?? weekInfoFromLocale?.firstDay ?? 0;\n const minWeekSize = weekInfoFromLocale?.firstWeekSize ?? 1;\n return firstDayOfYear !== undefined ? calculateWeekWithFirstDayOfYear(date, locale, weekStart, firstDayOfYear) : calculateWeekWithMinWeekSize(date, locale, weekStart, minWeekSize);\n}\nfunction calculateWeekWithFirstDayOfYear(date, locale, weekStart, firstDayOfYear) {\n const firstDayOfYearOffset = (7 + firstDayOfYear - weekStart) % 7;\n const currentWeekStart = startOfWeek(date, locale, weekStart);\n const currentWeekEnd = addDays(currentWeekStart, 6);\n function yearStartWeekdayOffset(year) {\n return (7 + new Date(year, 0, 1).getDay() - weekStart) % 7;\n }\n let year = getYear(currentWeekStart);\n if (year < getYear(currentWeekEnd) && yearStartWeekdayOffset(year + 1) <= firstDayOfYearOffset) {\n year++;\n }\n const yearStart = new Date(year, 0, 1);\n const offset = yearStartWeekdayOffset(year);\n const d1w1 = offset <= firstDayOfYearOffset ? addDays(yearStart, -offset) : addDays(yearStart, 7 - offset);\n return 1 + getDiff(endOfDay(currentWeekStart), startOfDay(d1w1), 'weeks');\n}\nfunction calculateWeekWithMinWeekSize(date, locale, weekStart, minWeekSize) {\n const currentWeekStart = startOfWeek(date, locale, weekStart);\n const currentWeekEnd = addDays(startOfWeek(date, locale, weekStart), 6);\n function firstWeekSize(year) {\n const yearStart = new Date(year, 0, 1);\n return 7 - getDiff(yearStart, startOfWeek(yearStart, locale, weekStart), 'days');\n }\n let year = getYear(currentWeekStart);\n if (year < getYear(currentWeekEnd) && firstWeekSize(year + 1) >= minWeekSize) {\n year++;\n }\n const yearStart = new Date(year, 0, 1);\n const size = firstWeekSize(year);\n const d1w1 = size >= minWeekSize ? addDays(yearStart, size - 7) : addDays(yearStart, size);\n return 1 + getDiff(endOfDay(currentWeekStart), startOfDay(d1w1), 'weeks');\n}\nfunction getDate(date) {\n return date.getDate();\n}\nfunction getNextMonth(date) {\n return new Date(date.getFullYear(), date.getMonth() + 1, 1);\n}\nfunction getPreviousMonth(date) {\n return new Date(date.getFullYear(), date.getMonth() - 1, 1);\n}\nfunction getHours(date) {\n return date.getHours();\n}\nfunction getMinutes(date) {\n return date.getMinutes();\n}\nfunction startOfYear(date) {\n return new Date(date.getFullYear(), 0, 1);\n}\nfunction endOfYear(date) {\n return new Date(date.getFullYear(), 11, 31);\n}\nfunction isWithinRange(date, range) {\n return isEqual(date, range[0]) || isEqual(date, range[1]) || isAfter(date, range[0]) && isBefore(date, range[1]);\n}\nfunction isValid(date) {\n const d = new Date(date);\n return d instanceof Date && !isNaN(d.getTime());\n}\nfunction isAfter(date, comparing) {\n return date.getTime() > comparing.getTime();\n}\nfunction isAfterDay(date, comparing) {\n return isAfter(startOfDay(date), startOfDay(comparing));\n}\nfunction isBefore(date, comparing) {\n return date.getTime() < comparing.getTime();\n}\nfunction isEqual(date, comparing) {\n return date.getTime() === comparing.getTime();\n}\nfunction isSameDay(date, comparing) {\n return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();\n}\nfunction isSameMonth(date, comparing) {\n return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();\n}\nfunction isSameYear(date, comparing) {\n return date.getFullYear() === comparing.getFullYear();\n}\nfunction getDiff(date, comparing, unit) {\n const d = new Date(date);\n const c = new Date(comparing);\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 {\n return d.getTime() - c.getTime();\n }\n }\n}\nfunction setHours(date, count) {\n const d = new Date(date);\n d.setHours(count);\n return d;\n}\nfunction setMinutes(date, count) {\n const d = new Date(date);\n d.setMinutes(count);\n return d;\n}\nfunction setMonth(date, count) {\n const d = new Date(date);\n d.setMonth(count);\n return d;\n}\nfunction setDate(date, day) {\n const d = new Date(date);\n d.setDate(day);\n return d;\n}\nfunction setYear(date, year) {\n const d = new Date(date);\n d.setFullYear(year);\n return d;\n}\nfunction startOfDay(date) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0);\n}\nfunction endOfDay(date) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);\n}\nexport class VuetifyDateAdapter {\n constructor(options) {\n this.locale = options.locale;\n this.formats = options.formats;\n }\n date(value) {\n return date(value);\n }\n toJsDate(date) {\n return date;\n }\n toISO(date) {\n return toISO(this, date);\n }\n parseISO(date) {\n return parseISO(date);\n }\n addMinutes(date, amount) {\n return addMinutes(date, amount);\n }\n addHours(date, amount) {\n return addHours(date, amount);\n }\n addDays(date, amount) {\n return addDays(date, amount);\n }\n addWeeks(date, amount) {\n return addWeeks(date, amount);\n }\n addMonths(date, amount) {\n return addMonths(date, amount);\n }\n getWeekArray(date, firstDayOfWeek) {\n const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;\n return getWeekArray(date, this.locale, firstDay);\n }\n startOfWeek(date, firstDayOfWeek) {\n const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;\n return startOfWeek(date, this.locale, firstDay);\n }\n endOfWeek(date) {\n return endOfWeek(date, this.locale);\n }\n startOfMonth(date) {\n return startOfMonth(date);\n }\n endOfMonth(date) {\n return endOfMonth(date);\n }\n format(date, formatString) {\n return format(date, formatString, this.locale, this.formats);\n }\n isEqual(date, comparing) {\n return isEqual(date, comparing);\n }\n isValid(date) {\n return isValid(date);\n }\n isWithinRange(date, range) {\n return isWithinRange(date, range);\n }\n isAfter(date, comparing) {\n return isAfter(date, comparing);\n }\n isAfterDay(date, comparing) {\n return isAfterDay(date, comparing);\n }\n isBefore(date, comparing) {\n return !isAfter(date, comparing) && !isEqual(date, comparing);\n }\n isSameDay(date, comparing) {\n return isSameDay(date, comparing);\n }\n isSameMonth(date, comparing) {\n return isSameMonth(date, comparing);\n }\n isSameYear(date, comparing) {\n return isSameYear(date, comparing);\n }\n setMinutes(date, count) {\n return setMinutes(date, count);\n }\n setHours(date, count) {\n return setHours(date, count);\n }\n setMonth(date, count) {\n return setMonth(date, count);\n }\n setDate(date, day) {\n return setDate(date, day);\n }\n setYear(date, year) {\n return setYear(date, year);\n }\n getDiff(date, comparing, unit) {\n return getDiff(date, comparing, unit);\n }\n getWeekdays(firstDayOfWeek, weekdayFormat) {\n const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;\n return getWeekdays(this.locale, firstDay, weekdayFormat);\n }\n getYear(date) {\n return getYear(date);\n }\n getMonth(date) {\n return getMonth(date);\n }\n getWeek(date, firstDayOfWeek, firstDayOfYear) {\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 getDate(date) {\n return getDate(date);\n }\n getNextMonth(date) {\n return getNextMonth(date);\n }\n getPreviousMonth(date) {\n return getPreviousMonth(date);\n }\n getHours(date) {\n return getHours(date);\n }\n getMinutes(date) {\n return getMinutes(date);\n }\n startOfDay(date) {\n return startOfDay(date);\n }\n endOfDay(date) {\n return endOfDay(date);\n }\n startOfYear(date) {\n return startOfYear(date);\n }\n endOfYear(date) {\n return endOfYear(date);\n }\n}\n//# sourceMappingURL=vuetify.js.map","// Composables\nimport { useLocale } from \"../locale.js\"; // Utilities\nimport { inject, reactive, watch } from 'vue';\nimport { isFunction, isString, mergeDeep } from \"../../util/index.js\"; // Types\n// Adapters\nimport { VuetifyDateAdapter } from \"./adapters/vuetify.js\";\n/** Supports module augmentation to specify date adapter types */\nexport let DateModule;\nexport const DateOptionsSymbol = Symbol.for('vuetify:date-options');\nexport const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');\nexport function createDate(options, locale) {\n const _options = mergeDeep({\n adapter: VuetifyDateAdapter,\n locale: {\n af: 'af-ZA',\n // ar: '', # not the same value for all variants\n bg: 'bg-BG',\n ca: 'ca-ES',\n ckb: '',\n cs: 'cs-CZ',\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 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-SP',\n srLatn: 'sr-SP',\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);\n return {\n options: _options,\n instance: createInstance(_options, locale)\n };\n}\nexport function daysDiff(adapter, start, stop) {\n const iso = [`${adapter.toISO(stop ?? start).split('T')[0]}T00:00:00Z`, `${adapter.toISO(start).split('T')[0]}T00:00:00Z`];\n return isString(adapter.date()) ? adapter.getDiff(iso[0], iso[1], 'days') // for StringDateAdapter\n : adapter.getDiff(adapter.date(iso[0]), adapter.date(iso[1]), 'days');\n}\nfunction createInstance(options, locale) {\n const instance = reactive(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 }) : options.adapter);\n watch(locale.current, value => {\n instance.locale = options.locale[value] ?? value ?? instance.locale;\n });\n return instance;\n}\nexport function useDate() {\n const options = inject(DateOptionsSymbol);\n if (!options) throw new Error('[Vuetify] Could not find injected date options');\n const locale = useLocale();\n return createInstance(options, locale);\n}\n//# sourceMappingURL=date.js.map","// Utilities\nimport { computed, inject, onScopeDispose, reactive, shallowRef, toRef, toRefs, watchEffect } from 'vue';\nimport { getCurrentInstanceName, isNull, isNumber, isObject, mergeDeep, propsFactory } from \"../util/index.js\";\nimport { IN_BROWSER, SUPPORTS_TOUCH } from \"../util/globals.js\"; // Types\nexport const breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl']; // no xs\n\nexport const DisplaySymbol = Symbol.for('vuetify:display');\nconst defaultDisplayOptions = {\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};\nconst parseDisplayOptions = (options = defaultDisplayOptions) => {\n return mergeDeep(defaultDisplayOptions, options);\n};\nfunction getClientWidth(ssr) {\n return IN_BROWSER && !ssr ? window.innerWidth : isObject(ssr) && ssr.clientWidth || 0;\n}\nfunction getClientHeight(ssr) {\n return IN_BROWSER && !ssr ? window.innerHeight : isObject(ssr) && ssr.clientHeight || 0;\n}\nfunction getPlatform(ssr) {\n const userAgent = IN_BROWSER && !ssr ? window.navigator.userAgent : 'ssr';\n function match(regexp) {\n return Boolean(userAgent.match(regexp));\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 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}\nexport function createDisplay(options, ssr) {\n const {\n thresholds,\n mobileBreakpoint\n } = parseDisplayOptions(options);\n const height = shallowRef(getClientHeight(ssr));\n const platform = shallowRef(getPlatform(ssr));\n const state = reactive({});\n const width = shallowRef(getClientWidth(ssr));\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 = xs ? 'xs' : sm ? 'sm' : md ? 'md' : lg ? 'lg' : xl ? 'xl' : 'xxl';\n const breakpointValue = isNumber(mobileBreakpoint) ? mobileBreakpoint : thresholds[mobileBreakpoint];\n const mobile = width.value < breakpointValue;\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 if (IN_BROWSER) {\n window.addEventListener('resize', updateSize, {\n passive: true\n });\n onScopeDispose(() => {\n window.removeEventListener('resize', updateSize);\n }, true);\n }\n return {\n ...toRefs(state),\n update,\n ssr: !!ssr\n };\n}\nexport const makeDisplayProps = propsFactory({\n mobile: {\n type: Boolean,\n default: false\n },\n mobileBreakpoint: [Number, String]\n}, 'display');\nexport function useDisplay(props = {\n mobile: null\n}, name = getCurrentInstanceName()) {\n const display = inject(DisplaySymbol);\n if (!display) throw new Error('Could not find Vuetify display injection');\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 const displayClasses = toRef(() => {\n if (!name) return {};\n return {\n [`${name}--mobile`]: mobile.value\n };\n });\n return {\n ...display,\n displayClasses,\n mobile\n };\n}\n//# sourceMappingURL=display.js.map","// Utilities\nimport { inject, toRef } from 'vue';\nimport { useRtl } from \"./locale.js\";\nimport { clamp, consoleWarn, easingPatterns, isFunction, isNumber, isString, mergeDeep, PREFERS_REDUCED_MOTION, refElement } from \"../util/index.js\"; // Types\nexport const GoToSymbol = Symbol.for('vuetify:goto');\nfunction genDefaults() {\n return {\n container: undefined,\n duration: 300,\n layout: false,\n offset: 0,\n easing: 'easeInOutCubic',\n patterns: easingPatterns\n };\n}\nfunction getContainer(el) {\n return getTarget(el) ?? (document.scrollingElement || document.body);\n}\nfunction getTarget(el) {\n return isString(el) ? document.querySelector(el) : refElement(el);\n}\nfunction getOffset(target, horizontal, rtl) {\n if (isNumber(target)) return horizontal && rtl ? -target : target;\n let el = getTarget(target);\n let totalOffset = 0;\n while (el) {\n totalOffset += horizontal ? el.offsetLeft : el.offsetTop;\n el = el.offsetParent;\n }\n return totalOffset;\n}\nexport function createGoTo(options, locale) {\n return {\n rtl: locale.isRtl,\n options: mergeDeep(genDefaults(), options)\n };\n}\nexport async function scrollTo(_target, _options, horizontal, goTo) {\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 ? target.parentElement : getContainer(options.container);\n const ease = PREFERS_REDUCED_MOTION() ? options.patterns.instant : isFunction(options.easing) ? options.easing : options.patterns[options.easing];\n if (!ease) throw new TypeError(`Easing function \"${options.easing}\" not found.`);\n let targetLocation;\n if (isNumber(target)) {\n targetLocation = getOffset(target, horizontal, rtl);\n } else {\n targetLocation = getOffset(target, horizontal, rtl) - getOffset(container, horizontal, rtl);\n if (options.layout) {\n const styles = window.getComputedStyle(target);\n const layoutOffset = styles.getPropertyValue('--v-layout-top');\n if (layoutOffset) targetLocation -= parseInt(layoutOffset, 10);\n }\n }\n targetLocation += options.offset;\n targetLocation = clampTarget(container, targetLocation, !!rtl, !!horizontal);\n const startLocation = container[property] ?? 0;\n if (targetLocation === startLocation) return Promise.resolve(targetLocation);\n const startTime = performance.now();\n return new Promise(resolve => requestAnimationFrame(function step(currentTime) {\n const timeElapsed = currentTime - startTime;\n const progress = timeElapsed / options.duration;\n const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(clamp(progress, 0, 1)));\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 requestAnimationFrame(step);\n }));\n}\nexport function useGoTo(_options = {}) {\n const goToInstance = inject(GoToSymbol);\n const {\n isRtl\n } = useRtl();\n if (!goToInstance) throw new Error('[Vuetify] Could not find injected goto instance');\n const goTo = {\n ...goToInstance,\n // can be set via VLocaleProvider\n rtl: toRef(() => goToInstance.rtl.value || isRtl.value)\n };\n async function go(target, options) {\n return scrollTo(target, mergeDeep(_options, options), false, goTo);\n }\n go.horizontal = async (target, options) => {\n return scrollTo(target, mergeDeep(_options, options), true, goTo);\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(container, value, rtl, horizontal) {\n const {\n scrollWidth,\n scrollHeight\n } = container;\n const [containerWidth, containerHeight] = container === document.scrollingElement ? [window.innerWidth, window.innerHeight] : [container.offsetWidth, container.offsetHeight];\n let min;\n let max;\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 return clamp(value, min, max);\n}\n//# sourceMappingURL=goto.js.map","// Utilities\nimport { computed, getCurrentScope, inject, onScopeDispose, provide, ref, shallowRef, toRef, watch, watchEffect } from 'vue';\nimport { consoleWarn, createRange, darken, deprecate, getCurrentInstance, getLuma, hasLightForeground, IN_BROWSER, isElement, isNumber, isObject, isString, lighten, mergeDeep, parseColor, PREFERS_REDUCED_MOTION, propsFactory, RGBtoHex, SUPPORTS_MATCH_MEDIA } from \"../util/index.js\";\nimport { Box } from \"../util/box.js\"; // Types\nexport const ThemeSymbol = Symbol.for('vuetify:theme');\nexport const makeThemeProps = propsFactory({\n theme: String\n}, 'theme');\nfunction genDefaults() {\n return {\n defaultTheme: 'system',\n prefix: 'v-',\n variations: {\n colors: [],\n lighten: 0,\n darken: 0\n },\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}\nfunction parseThemeOptions(options = genDefaults()) {\n const defaults = genDefaults();\n if (!options) return {\n ...defaults,\n isDisabled: true\n };\n return mergeDeep(defaults, options);\n}\nfunction createCssClass(lines, selector, content, scope) {\n lines.push(`${getScopedSelector(selector, scope)} {\\n`, ...content.map(line => ` ${line};\\n`), '}\\n');\n}\nfunction genCssVariables(theme, prefix) {\n const lightOverlay = theme.dark ? 2 : 1;\n const darkOverlay = theme.dark ? 1 : 2;\n const variables = [];\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 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 return variables;\n}\nfunction genVariation(name, color, variations) {\n const object = {};\n if (variations) {\n for (const variation of ['lighten', 'darken']) {\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}\nfunction genVariations(colors, variations) {\n if (!variations) return {};\n let variationColors = {};\n for (const name of variations.colors) {\n const color = colors[name];\n if (!color) continue;\n variationColors = {\n ...variationColors,\n ...genVariation(name, color, variations)\n };\n }\n return variationColors;\n}\nfunction genOnColors(colors, variables) {\n const onColors = {};\n for (const color of Object.keys(colors)) {\n if (color.startsWith('on-') || colors[`on-${color}`]) continue;\n const onColor = `on-${color}`;\n const colorVal = parseColor(colors[color]);\n onColors[onColor] = hasLightForeground(colorVal) ? variables['theme-on-dark'] : variables['theme-on-light'];\n }\n return onColors;\n}\nfunction getScopedSelector(selector, scope) {\n if (!scope) return selector;\n const scopeSelector = `:where(${scope})`;\n return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;\n}\nfunction upsertStyles(id, cspNonce, styles) {\n const styleEl = getOrCreateStyleElement(id, cspNonce);\n if (!styleEl) return;\n styleEl.innerHTML = styles;\n}\nfunction getOrCreateStyleElement(id, cspNonce) {\n if (!IN_BROWSER) return null;\n let style = document.getElementById(id);\n if (!style) {\n style = document.createElement('style');\n style.id = id;\n style.type = 'text/css';\n if (cspNonce) style.setAttribute('nonce', cspNonce);\n document.head.appendChild(style);\n }\n return style;\n}\n\n// Composables\nexport function createTheme(options) {\n const parsedOptions = parseThemeOptions(options);\n const _name = shallowRef(parsedOptions.defaultTheme);\n const themes = ref(parsedOptions.themes);\n const systemName = shallowRef('light');\n const name = computed({\n get() {\n return _name.value === 'system' ? systemName.value : _name.value;\n },\n set(val) {\n _name.value = val;\n }\n });\n const computedThemes = computed(() => {\n const acc = {};\n for (const [name, original] of Object.entries(themes.value)) {\n const defaultTheme = original.dark || name === 'dark' ? themes.value.dark : themes.value.light;\n const merged = mergeDeep(defaultTheme, original);\n const colors = {\n ...merged.colors,\n ...genVariations(merged.colors, parsedOptions.variations)\n };\n acc[name] = {\n ...merged,\n colors: {\n ...colors,\n ...genOnColors(colors, merged.variables)\n }\n };\n }\n return acc;\n });\n const current = toRef(() => computedThemes.value[name.value]);\n const isSystem = toRef(() => _name.value === 'system');\n const styles = computed(() => {\n const lines = [];\n const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';\n lines.push('@layer theme-base {\\n');\n createCssClass(lines, ':root', [`color-scheme: ${current.value?.dark ? 'dark' : 'light'}`], parsedOptions.scope);\n createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);\n for (const [themeName, theme] of Object.entries(computedThemes.value)) {\n createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'light'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);\n }\n lines.push('}\\n');\n if (parsedOptions.utilities) {\n const bgLines = [];\n const fgLines = [];\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}`, [`--${parsedOptions.prefix}theme-overlay-multiplier: var(--${parsedOptions.prefix}theme-${key}-overlay-multiplier)`, `background-color: rgb(var(--${parsedOptions.prefix}theme-${key}))`, `color: rgb(var(--${parsedOptions.prefix}theme-on-${key}))`], 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 lines.push('@layer theme-background {\\n', ...bgLines.map(v => ` ${v}`), '}\\n', '@layer theme-foreground {\\n', ...fgLines.map(v => ` ${v}`), '}\\n');\n }\n return '@layer vuetify-utilities {\\n' + lines.map(v => ` ${v}`).join('') + '\\n}';\n });\n const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);\n const themeNames = toRef(() => Object.keys(computedThemes.value));\n if (SUPPORTS_MATCH_MEDIA) {\n const media = window.matchMedia('(prefers-color-scheme: dark)');\n function updateSystemName() {\n systemName.value = media.matches ? 'dark' : 'light';\n }\n updateSystemName();\n media.addEventListener('change', updateSystemName, {\n passive: true\n });\n if (getCurrentScope()) {\n onScopeDispose(() => {\n media.removeEventListener('change', updateSystemName);\n });\n }\n }\n function install(app) {\n if (parsedOptions.isDisabled) return;\n const head = app._context.provides.usehead;\n if (head) {\n function getHead() {\n return {\n style: [{\n textContent: styles.value,\n id: parsedOptions.stylesheetId,\n nonce: parsedOptions.cspNonce || false,\n tagPosition: 'bodyOpen'\n }]\n };\n }\n if (head.push) {\n const entry = head.push(getHead);\n if (IN_BROWSER) {\n watch(styles, () => {\n entry.patch(getHead);\n });\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, {\n immediate: true\n });\n } else {\n updateStyles();\n }\n function updateStyles() {\n upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);\n }\n }\n }\n let _transitionOrigin;\n function setTransitionOrigin(e) {\n if (!e) {\n _transitionOrigin = null;\n return;\n }\n let x;\n let y;\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 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 function resolveTransitionOptions(transition) {\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 function withPageTransition(callback, options) {\n if (!IN_BROWSER || !document.startViewTransition || PREFERS_REDUCED_MOTION()) {\n callback();\n return Promise.resolve();\n }\n const origin = options.origin ?? '50% 0%';\n const duration = options.duration ?? '500ms';\n const style = document.createElement('style');\n style.textContent = `html:active-view-transition-type(vuetify-theme)::view-transition-old(root) { animation: none; }` + `html:active-view-transition-type(vuetify-theme)::view-transition-new(root) { animation: v-circle-in ${duration} ease-in-out; }` + `@keyframes v-circle-in {` + ` from { clip-path: circle(0% at ${origin}); }` + ` to { clip-path: circle(150% at ${origin}); }` + `}`;\n document.head.appendChild(style);\n const transition = document.startViewTransition({\n update: () => callback(),\n types: ['vuetify-theme']\n });\n transition.finished.then(() => {\n _transitionOrigin = null;\n style.remove();\n });\n return transition.updateCallbackDone;\n }\n function change(themeName, transition) {\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 const apply = () => {\n name.value = themeName;\n };\n const transitionOptions = resolveTransitionOptions(transition);\n if (transitionOptions) {\n return withPageTransition(apply, transitionOptions);\n }\n apply();\n return Promise.resolve();\n }\n function cycle(themeArray = themeNames.value, transition) {\n const currentIndex = themeArray.indexOf(name.value);\n const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;\n return change(themeArray[nextIndex], transition);\n }\n function toggle(themeArray = ['light', 'dark'], transition) {\n return cycle(themeArray, transition);\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 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}\nexport function provideTheme(props) {\n getCurrentInstance('provideTheme');\n const theme = inject(ThemeSymbol, null);\n if (!theme) throw new Error('Could not find Vuetify theme injection');\n const name = toRef(() => props.theme ?? theme.name.value);\n const current = toRef(() => theme.computedThemes.value[name.value]);\n const themeClasses = toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);\n const newTheme = {\n ...theme,\n name,\n current,\n themeClasses\n };\n provide(ThemeSymbol, newTheme);\n return newTheme;\n}\nexport function useTheme() {\n getCurrentInstance('useTheme');\n const theme = inject(ThemeSymbol, null);\n if (!theme) throw new Error('Could not find Vuetify theme injection');\n return theme;\n}\n//# sourceMappingURL=theme.js.map","// Utilities\nimport { onBeforeUnmount, readonly, ref, watch } from 'vue';\nimport { templateRef } from \"../util/index.js\";\nimport { Box } from \"../util/box.js\";\nimport { IN_BROWSER } from \"../util/globals.js\"; // Types\nexport function useResizeObserver(callback, box = 'content') {\n const resizeRef = templateRef();\n const contentRect = ref();\n if (IN_BROWSER) {\n const observer = new ResizeObserver(entries => {\n callback?.(entries, observer);\n if (!entries.length) return;\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;\n contentRect.value = new Box({\n x: 0,\n y: 0,\n width: border?.inlineSize ?? el.offsetWidth,\n height: border?.blockSize ?? el.offsetHeight\n });\n }\n });\n onBeforeUnmount(() => {\n observer.disconnect();\n });\n watch(() => resizeRef.el, (newValue, oldValue) => {\n if (oldValue) {\n observer.unobserve(oldValue);\n contentRect.value = undefined;\n }\n if (newValue) observer.observe(newValue);\n }, {\n flush: 'post'\n });\n }\n return {\n resizeRef,\n contentRect: readonly(contentRect)\n };\n}\n//# sourceMappingURL=resizeObserver.js.map","// Composables\nimport { useResizeObserver } from \"./resizeObserver.js\"; // Utilities\nimport { computed, inject, onActivated, onBeforeUnmount, onDeactivated, onMounted, onScopeDispose, provide, reactive, ref, shallowRef, toRef, useId, watch } from 'vue';\nimport { consoleWarn, convertToUnit, findChildrenWithProvide, getCurrentInstance, isPercentage, propsFactory, resolveSize } from \"../util/index.js\"; // Types\nexport const VuetifyLayoutKey = Symbol.for('vuetify:layout');\nexport const VuetifyLayoutItemKey = Symbol.for('vuetify:layout-item');\nconst ROOT_ZINDEX = 1000;\nexport const makeLayoutProps = propsFactory({\n overlaps: {\n type: Array,\n default: () => []\n },\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');\nexport function useLayout() {\n const layout = inject(VuetifyLayoutKey);\n if (!layout) throw new Error('[Vuetify] Could not find injected layout');\n return {\n getLayoutItem: layout.getLayoutItem,\n mainRect: layout.mainRect,\n mainStyles: layout.mainStyles,\n layoutRect: layout.layoutRect\n };\n}\nexport function useLayoutItem(options) {\n const layout = inject(VuetifyLayoutKey);\n if (!layout) throw new Error('[Vuetify] Could not find injected layout');\n const id = options.id ?? `layout-item-${useId()}`;\n const vm = getCurrentInstance('useLayoutItem');\n provide(VuetifyLayoutItemKey, {\n id\n });\n const isKeptAlive = shallowRef(false);\n onDeactivated(() => isKeptAlive.value = true);\n onActivated(() => isKeptAlive.value = false);\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 onBeforeUnmount(() => layout.unregister(id));\n return {\n layoutItemStyles,\n layoutRect: layout.layoutRect,\n layoutItemScrimStyles\n };\n}\nconst generateLayers = (layout, positions, layoutSizes, activeItems, sizeOf) => {\n let previousLayer = {\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n };\n const layers = [{\n id: '',\n layer: {\n ...previousLayer\n }\n }];\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 const layer = {\n ...previousLayer,\n [position.value]: previousLayer[position.value] + (active.value ? sizeOf(amount.value, position.value) : 0)\n };\n layers.push({\n id,\n layer\n });\n previousLayer = layer;\n }\n return layers;\n};\nexport function createLayout(props) {\n const parentLayout = inject(VuetifyLayoutKey, null);\n const rootZIndex = computed(() => parentLayout ? parentLayout.rootZIndex.value - 100 : ROOT_ZINDEX);\n const registered = ref([]);\n const positions = reactive(new Map());\n const layoutSizes = reactive(new Map());\n const priorities = reactive(new Map());\n const activeItems = reactive(new Map());\n const disabledTransitions = reactive(new Map());\n const {\n resizeRef,\n contentRect: layoutRect\n } = useResizeObserver();\n function sizeOf(value, position) {\n const span = position === 'left' || position === 'right' ? layoutRect.value?.width : layoutRect.value?.height;\n return resolveSize(value, span ?? 0);\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 const computedOverlaps = computed(() => {\n const map = new Map();\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 const topPosition = positions.get(top);\n const bottomPosition = positions.get(bottom);\n const topAmount = layoutSizes.get(top);\n const bottomAmount = layoutSizes.get(bottom);\n if (!topPosition || !bottomPosition || !topAmount || !bottomAmount) continue;\n map.set(bottom, {\n position: topPosition.value,\n amount: sizeOf(topAmount.value, topPosition.value)\n });\n map.set(top, {\n position: bottomPosition.value,\n amount: -sizeOf(bottomAmount.value, bottomPosition.value)\n });\n }\n return map;\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 const transitionsEnabled = computed(() => {\n return !isResizing.value && !Array.from(disabledTransitions.values()).some(ref => ref.value);\n });\n const mainRect = computed(() => {\n return layers.value[layers.value.length - 1].layer;\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 : {\n transition: 'none'\n })\n };\n });\n const items = computed(() => {\n return layers.value.slice(1).map(({\n id\n }, index) => {\n const {\n layer\n } = layers.value[index];\n const size = layoutSizes.get(id);\n const position = positions.get(id);\n return {\n id,\n ...layer,\n size: sizeOf(size.value, position.value),\n position: position.value\n };\n });\n });\n const getLayoutItem = id => {\n return items.value.find(item => item.id === id);\n };\n const rootVm = getCurrentInstance('createLayout');\n const isMounted = shallowRef(false);\n onMounted(() => {\n isMounted.value = true;\n });\n provide(VuetifyLayoutKey, {\n register: (vm, {\n id,\n order,\n position,\n layoutSize,\n elementSize,\n active,\n disableTransitions,\n absolute\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 const instances = findChildrenWithProvide(VuetifyLayoutItemKey, rootVm?.vnode);\n const instanceIndex = instances.indexOf(vm);\n if (instanceIndex > -1) registered.value.splice(instanceIndex, 0, id);else registered.value.push(id);\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 const layoutItemStyles = computed(() => {\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 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 : {\n transition: 'none'\n })\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 ? sizeOf(elementSize.value, position.value) : elementSize.value;\n const item = items.value[index.value];\n if (!item) consoleWarn(`[Vuetify] Could not find layout item \"${id}\"`);\n const overlap = computedOverlaps.value.get(id);\n if (overlap) {\n item[overlap.position] += overlap.amount;\n }\n return {\n ...styles,\n height: isHorizontal ? `calc(100% - ${item.top}px - ${item.bottom}px)` : measuredSize ? convertToUnit(measuredSize) : 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: !isHorizontal ? `calc(100% - ${item.left}px - ${item.right}px)` : measuredSize ? convertToUnit(measuredSize) : undefined\n };\n });\n const layoutItemScrimStyles = computed(() => ({\n zIndex: zIndex.value - 1\n }));\n return {\n layoutItemStyles,\n layoutItemScrimStyles,\n zIndex\n };\n },\n unregister: id => {\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 const layoutClasses = toRef(() => ['v-layout', {\n 'v-layout--full-height': props.fullHeight\n }]);\n const layoutStyles = toRef(() => ({\n zIndex: parentLayout ? rootZIndex.value : undefined,\n position: parentLayout ? 'relative' : undefined,\n overflow: parentLayout ? 'hidden' : undefined\n }));\n return {\n layoutClasses,\n layoutStyles,\n getLayoutItem,\n items,\n layoutRect,\n layoutRef: resizeRef\n };\n}\n//# sourceMappingURL=layout.js.map","/**\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 = {\n // Modifier aliases (from vue-use, other libraries, and current implementation)\n control: 'ctrl',\n command: 'cmd',\n option: 'alt',\n // Arrow key aliases (common abbreviations)\n up: 'arrowup',\n down: 'arrowdown',\n left: 'arrowleft',\n right: 'arrowright',\n // Other common key aliases\n esc: 'escape',\n spacebar: ' ',\n space: ' ',\n return: 'enter',\n del: 'delete',\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) {\n const lowerKey = key.toLowerCase();\n return keyAliasMap[lowerKey] || lowerKey;\n}\n//# sourceMappingURL=key-aliases.js.map","// Utilities\nimport { normalizeKey } from \"./key-aliases.js\";\nimport { consoleWarn, includes, isString } from \"../../util/index.js\"; // Types\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) {\n let pos = 0;\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 function peek(ahead = 0) {\n return pos + ahead < input.length ? input[pos + ahead] : null;\n }\n function consume() {\n if (pos >= input.length) {\n throw new ParseError('Unexpected end of input');\n }\n return input[pos++];\n }\n function atEnd() {\n return pos >= input.length;\n }\n\n // sequence = alternate *('-' alternate)\n function parseSequence() {\n const parts = [parseAlternate()];\n while (peek() === '-') {\n consume();\n parts.push(parseAlternate());\n }\n if (parts.length === 1) return parts[0];\n return {\n type: 'sequence',\n parts\n };\n }\n\n // alternate = combo *('/' combo)\n function parseAlternate() {\n const parts = [parseCombo()];\n while (peek() === '/') {\n consume();\n parts.push(parseCombo());\n }\n if (parts.length === 1) return parts[0];\n return {\n type: 'alternate',\n parts\n };\n }\n\n // combo = key *(('+' | '_') key)\n function parseCombo() {\n const keys = [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() {\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 = [first];\n while (!atEnd() && !isSep(peek()) && peek() !== ' ') {\n chars.push(consume());\n }\n return normalizeKey(chars.join(''));\n }\n}\nfunction isSep(char) {\n return includes(['-', '/', '+', '_'], char);\n}\n//# sourceMappingURL=hotkey-parsing.js.map","// Utilities\nimport { computed, inject, toRef } from 'vue';\nimport { isString } from \"../../util/index.js\"; // Types\nexport function createRules(options, locale) {\n const {\n t\n } = locale;\n const aliases = {\n required: err => {\n return v => {\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 => {\n return v => !v || isString(v) && /^.+@\\S+\\.\\S+$/.test(v) || t(err || '$vuetify.rules.email');\n },\n number: err => {\n return v => !v || !isNaN(Number(v)) || t(err || '$vuetify.rules.number');\n },\n integer: err => {\n return v => /^[\\d]*$/.test(v) || t(err || '$vuetify.rules.integer');\n },\n capital: err => {\n return v => /^[A-Z]*$/.test(v) || t(err || '$vuetify.rules.capital');\n },\n maxLength: (len, err) => {\n return v => !v || v.length <= len || t(err || '$vuetify.rules.maxLength', len);\n },\n minLength: (len, err) => {\n return v => !v || v.length >= len || t(err || '$vuetify.rules.minLength', len);\n },\n strictLength: (len, err) => {\n return v => !v || v.length === len || t(err || '$vuetify.rules.strictLength', len);\n },\n exclude: (forbiddenCharacters, err) => {\n return v => {\n let error = 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 => {\n return v => v && v.length > 0 || t(err || '$vuetify.rules.notEmpty');\n },\n pattern: (pattern, err) => {\n return v => !v || pattern.test(v) || t(err || '$vuetify.rules.pattern');\n },\n ...options?.aliases\n };\n function resolve(fn) {\n return computed(() => fn().map(rule => {\n let ruleName = null;\n let ruleParams = [undefined];\n if (Array.isArray(rule)) {\n ruleName = rule[0];\n ruleParams = rule.slice(1);\n } else if (isString(rule)) {\n ruleName = rule;\n }\n if (ruleName) {\n if (ruleName.startsWith('$')) {\n ruleName = ruleName.slice(1);\n }\n return aliases[ruleName]?.(...ruleParams);\n } else {\n return rule;\n }\n }));\n }\n return {\n resolve,\n aliases\n };\n}\nexport const RulesSymbol = Symbol.for('vuetify:rules');\nexport function useRules(fn) {\n const rules = inject(RulesSymbol, null);\n if (!fn) {\n if (!rules) {\n throw new Error('Could not find Vuetify rules injection');\n }\n return rules.aliases;\n }\n return rules?.resolve(fn) ?? toRef(fn);\n}\n//# sourceMappingURL=rules.js.map","// Composables\nimport { createIcons } from \"./icons.js\";\nimport { createDate, DateAdapterSymbol, DateOptionsSymbol } from \"./composables/date/date.js\";\nimport { createDefaults, DefaultsSymbol, RootDefaultsSymbol } from \"./composables/defaults.js\";\nimport { createDisplay, DisplaySymbol } from \"./composables/display.js\";\nimport { createGoTo, GoToSymbol } from \"./composables/goto.js\";\nimport { IconSymbol } from \"./composables/icons.js\";\nimport { createLocale, LocaleSymbol } from \"./composables/locale.js\";\nimport { createTheme, ThemeSymbol } from \"./composables/theme.js\"; // Utilities\nimport { effectScope, nextTick, reactive } from 'vue';\nimport { defineComponent, IN_BROWSER, mergeDeep } from \"./util/index.js\"; // Types\n// Exports\nexport * from \"./composables/index.js\";\nexport * from \"./types.js\";\nexport function createVuetify(vuetify = {}) {\n const {\n blueprint,\n ...rest\n } = vuetify;\n const options = mergeDeep(blueprint, rest);\n const {\n aliases = {},\n components = {},\n directives = {}\n } = options;\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 function install(app) {\n for (const key in directives) {\n app.directive(key, directives[key]);\n }\n for (const key in components) {\n app.component(key, components[key]);\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 const appScope = effectScope();\n appScope.run(() => {\n theme.install(app);\n });\n app.onUnmount(() => appScope.stop());\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 if (IN_BROWSER && options.ssr) {\n if (app.$nuxt) {\n app.$nuxt.hook('app:suspense:resolve', () => {\n display.update();\n });\n } else {\n const {\n mount\n } = 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 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 function unmount() {\n scope.stop();\n }\n return {\n install,\n unmount,\n defaults,\n display,\n theme,\n icons,\n locale,\n date,\n goTo\n };\n });\n}\nexport const version = \"4.2.3\";\ncreateVuetify.version = version;\n\n// Vue's inject() can only be used in setup\nfunction inject(key) {\n const vm = this.$;\n const provides = vm.parent?.provides ?? vm.vnode.appContext?.provides;\n if (provides && key in provides) {\n return provides[key];\n }\n}\n//# sourceMappingURL=framework.js.map","import { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\";\n// Styles\nimport \"./VApp.css\";\n\n// Composables\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { createLayout, makeLayoutProps } from \"../../composables/layout.js\";\nimport { useRtl } from \"../../composables/locale.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\"; // Utilities\nimport { genericComponent, omit, propsFactory, useRender } from \"../../util/index.js\";\nexport const makeVAppProps = propsFactory({\n ...makeComponentProps(),\n ...omit(makeLayoutProps(), ['fullHeight']),\n ...makeThemeProps()\n}, 'VApp');\nexport const VApp = genericComponent()({\n name: 'VApp',\n props: makeVAppProps(),\n setup(props, {\n slots\n }) {\n const theme = provideTheme(props);\n const {\n layoutClasses,\n getLayoutItem,\n items,\n layoutRef\n } = createLayout({\n ...props,\n fullHeight: true\n });\n const {\n rtlClasses\n } = useRtl();\n useRender(() => _createElementVNode(\"div\", {\n \"ref\": layoutRef,\n \"class\": _normalizeClass(['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value, props.class]),\n \"style\": _normalizeStyle([props.style])\n }, [_createElementVNode(\"div\", {\n \"class\": \"v-application__wrap\"\n }, [slots.default?.()])]));\n return {\n getLayoutItem,\n items,\n theme\n };\n }\n});\n//# sourceMappingURL=VApp.js.map","// Utilities\nimport { propsFactory } from \"../util/index.js\"; // Types\n// Types\n// Composables\nexport const makeTagProps = propsFactory({\n tag: {\n type: [String, Object, Function],\n default: 'div'\n }\n}, 'tag');\n//# sourceMappingURL=tag.js.map","import { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createVNode as _createVNode } from \"vue\";\n// Composables\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeTagProps } from \"../../composables/tag.js\"; // Utilities\nimport { genericComponent, propsFactory, useRender } from \"../../util/index.js\";\nexport const makeVToolbarTitleProps = propsFactory({\n text: String,\n ...makeComponentProps(),\n ...makeTagProps()\n}, 'VToolbarTitle');\nexport const VToolbarTitle = genericComponent()({\n name: 'VToolbarTitle',\n props: makeVToolbarTitleProps(),\n setup(props, {\n slots\n }) {\n useRender(() => {\n const hasText = !!(slots.default || slots.text || props.text);\n return _createVNode(props.tag, {\n \"class\": _normalizeClass(['v-toolbar-title', props.class]),\n \"style\": _normalizeStyle(props.style)\n }, {\n default: () => [hasText && _createElementVNode(\"div\", {\n \"class\": \"v-toolbar-title__placeholder\"\n }, [slots.text ? slots.text() : props.text, slots.default?.()])]\n });\n });\n return {};\n }\n});\n//# sourceMappingURL=VToolbarTitle.js.map","// Utilities\nimport { h, Transition, TransitionGroup } from 'vue';\nimport { genericComponent, PREFERS_REDUCED_MOTION, propsFactory } from \"../../util/index.js\"; // Types\nexport const makeTransitionProps = propsFactory({\n disabled: Boolean,\n group: Boolean,\n hideOnLeave: Boolean,\n leaveAbsolute: Boolean,\n mode: String,\n origin: String\n}, 'transition');\nexport function createCssTransition(name, origin, mode) {\n return genericComponent()({\n name,\n props: makeTransitionProps({\n mode,\n origin\n }),\n setup(props, {\n slots\n }) {\n const functions = {\n onBeforeEnter(el) {\n if (props.origin) {\n el.style.transformOrigin = props.origin;\n }\n },\n onLeave(el) {\n if (props.leaveAbsolute) {\n const {\n offsetTop,\n offsetLeft,\n offsetWidth,\n offsetHeight\n } = 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 if (props.hideOnLeave) {\n el.style.setProperty('display', 'none', 'important');\n }\n },\n onAfterLeave(el) {\n if (props.leaveAbsolute && el?._transitionInitialStyles) {\n const {\n position,\n top,\n left,\n width,\n height\n } = 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 return () => {\n const tag = props.group ? TransitionGroup : Transition;\n return h(tag, {\n name: props.disabled ? '' : name,\n css: !props.disabled,\n ...(props.group ? undefined : {\n mode: props.mode\n }),\n ...(props.disabled ? {} : functions)\n }, slots.default);\n };\n }\n });\n}\nexport function createJavascriptTransition(name, functions, mode = 'in-out') {\n return genericComponent()({\n name,\n props: {\n mode: {\n type: String,\n default: mode\n },\n disabled: {\n type: Boolean,\n default: PREFERS_REDUCED_MOTION()\n },\n group: Boolean,\n hideOnLeave: Boolean\n },\n setup(props, {\n slots\n }) {\n const tag = props.group ? TransitionGroup : Transition;\n return () => {\n return h(tag, {\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 => {\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//# sourceMappingURL=createTransition.js.map","export default function (expandedParentClass = '', type = 'y') {\n return {\n onBeforeEnter(el) {\n el._parent = el.parentNode;\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 onEnter(el) {\n const initialStyle = el._initialStyle;\n if (!initialStyle) return;\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 if (['x', 'both'].includes(type)) el.style.width = '0';\n if (['y', 'both'].includes(type)) el.style.height = '0';\n void el.offsetHeight; // force reflow\n\n el.style.transition = initialStyle.transition;\n if (expandedParentClass && el._parent) {\n el._parent.classList.add(expandedParentClass);\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 onAfterEnter: resetStyles,\n onEnterCancelled: resetStyles,\n onLeave(el) {\n el._initialStyle = {\n transition: '',\n overflow: el.style.overflow,\n width: el.style.width,\n height: el.style.height\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 onAfterLeave,\n onLeaveCancelled: onAfterLeave\n };\n function onAfterLeave(el) {\n if (expandedParentClass && el._parent) {\n el._parent.classList.remove(expandedParentClass);\n }\n resetStyles(el);\n }\n function resetStyles(el) {\n if (!el._initialStyle) return;\n const {\n width: w,\n height: h\n } = 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//# sourceMappingURL=expand-transition.js.map","// Utilities\nimport { Transition, mergeProps as _mergeProps, createVNode as _createVNode } from 'vue';\nimport { acceleratedEasing, animate, deceleratedEasing, genericComponent, nullifyTransforms, PREFERS_REDUCED_MOTION, propsFactory, standardEasing } from \"../../util/index.js\";\nimport { getTargetBox } from \"../../util/box.js\"; // Types\nexport const makeVDialogTransitionProps = propsFactory({\n target: [Object, Array]\n}, 'v-dialog-transition');\nconst saved = new WeakMap();\nexport const VDialogTransition = genericComponent()({\n name: 'VDialogTransition',\n props: makeVDialogTransitionProps(),\n setup(props, {\n slots\n }) {\n const functions = {\n onBeforeEnter(el) {\n el.style.pointerEvents = 'none';\n el.style.visibility = 'hidden';\n },\n async onEnter(el, done) {\n await new Promise(resolve => requestAnimationFrame(resolve));\n await new Promise(resolve => requestAnimationFrame(resolve));\n el.style.visibility = '';\n const dimensions = getDimensions(props.target, el);\n const {\n x,\n y,\n sx,\n sy,\n speed\n } = dimensions;\n saved.set(el, dimensions);\n if (PREFERS_REDUCED_MOTION()) {\n animate(el, [{\n opacity: 0\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})`,\n opacity: 0\n }, {}], {\n duration: 225 * speed,\n easing: deceleratedEasing\n });\n getChildren(el)?.forEach(el => {\n animate(el, [{\n opacity: 0\n }, {\n opacity: 0,\n offset: 0.33\n }, {}], {\n duration: 225 * 2 * speed,\n easing: standardEasing\n });\n });\n animation.finished.then(() => done());\n }\n },\n onAfterEnter(el) {\n el.style.removeProperty('pointer-events');\n },\n onBeforeLeave(el) {\n el.style.pointerEvents = 'none';\n },\n async onLeave(el, done) {\n await new Promise(resolve => requestAnimationFrame(resolve));\n let dimensions;\n if (!saved.has(el) || Array.isArray(props.target) || props.target.offsetParent || props.target.getClientRects().length) {\n dimensions = getDimensions(props.target, el);\n } else {\n dimensions = saved.get(el);\n }\n const {\n x,\n y,\n sx,\n sy,\n speed\n } = dimensions;\n if (PREFERS_REDUCED_MOTION()) {\n animate(el, [{}, {\n opacity: 0\n }], {\n duration: 85 * speed,\n easing: acceleratedEasing\n }).finished.then(() => done());\n } else {\n const animation = animate(el, [{}, {\n transform: `translate(${x}px, ${y}px) scale(${sx}, ${sy})`,\n 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 opacity: 0,\n offset: 0.2\n }, {\n opacity: 0\n }], {\n duration: 125 * 2 * speed,\n easing: standardEasing\n });\n });\n }\n },\n onAfterLeave(el) {\n el.style.removeProperty('pointer-events');\n }\n };\n return () => {\n return props.target ? _createVNode(Transition, _mergeProps({\n \"name\": \"dialog-transition\"\n }, functions, {\n \"css\": false\n }), slots) : _createVNode(Transition, {\n \"name\": \"dialog-transition\"\n }, slots);\n };\n }\n});\n\n/** Animatable children (card, sheet, list) */\nfunction getChildren(el) {\n const els = el.querySelector(':scope > .v-card, :scope > .v-sheet, :scope > .v-list')?.children;\n return els && [...els];\n}\nfunction getDimensions(target, el) {\n const targetBox = getTargetBox(target);\n const elBox = nullifyTransforms(el);\n const [originX, originY] = getComputedStyle(el).transformOrigin.split(' ').map(v => parseFloat(v));\n const [anchorSide, anchorOffset] = getComputedStyle(el).getPropertyValue('--v-overlay-anchor-origin').split(' ');\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 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 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 ? Math.min(1.5, (asa - 0.12) * 10 + 1) : 1;\n return {\n x: offsetX - (originX + elBox.left),\n y: offsetY - (originY + elBox.top),\n sx,\n sy,\n speed\n };\n}\n//# sourceMappingURL=dialog-transition.js.map","import { createCssTransition, createJavascriptTransition } from \"./createTransition.js\";\nimport ExpandTransitionGenerator from \"./expand-transition.js\"; // 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'));\nexport { VDialogTransition } from \"./dialog-transition.js\";\n//# sourceMappingURL=index.js.map","// Composables\nimport { provideDefaults } from \"../../composables/defaults.js\"; // Utilities\nimport { toRefs } from 'vue';\nimport { genericComponent, propsFactory } from \"../../util/index.js\"; // Types\nexport const makeVDefaultsProviderProps = propsFactory({\n defaults: Object,\n disabled: Boolean,\n reset: [Number, String],\n root: [Boolean, String],\n scoped: Boolean\n}, 'VDefaultsProvider');\nexport const VDefaultsProvider = genericComponent(false)({\n name: 'VDefaultsProvider',\n props: makeVDefaultsProviderProps(),\n setup(props, {\n slots\n }) {\n const {\n defaults,\n disabled,\n reset,\n root,\n scoped\n } = toRefs(props);\n provideDefaults(defaults, {\n reset,\n root,\n scoped,\n disabled\n });\n return () => slots.default?.();\n }\n});\n//# sourceMappingURL=VDefaultsProvider.js.map","// Utilities\nimport { computed } from 'vue';\nimport { convertToUnit, propsFactory } from \"../util/index.js\"; // Types\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');\nexport function useDimension(props) {\n const dimensionStyles = computed(() => {\n const styles = {};\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 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 return styles;\n });\n return {\n dimensionStyles\n };\n}\n//# sourceMappingURL=dimensions.js.map","import { normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass } from \"vue\";\n// Styles\nimport \"./VResponsive.css\";\n\n// Composables\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeDimensionProps, useDimension } from \"../../composables/dimensions.js\"; // Utilities\nimport { computed } from 'vue';\nimport { genericComponent, propsFactory, useRender } from \"../../util/index.js\";\nexport function useAspectStyles(props) {\n return {\n aspectStyles: computed(() => {\n const ratio = Number(props.aspectRatio);\n return ratio ? {\n paddingBottom: String(1 / ratio * 100) + '%'\n } : undefined;\n })\n };\n}\nexport const makeVResponsiveProps = propsFactory({\n aspectRatio: [String, Number],\n contentClass: null,\n inline: Boolean,\n ...makeComponentProps(),\n ...makeDimensionProps()\n}, 'VResponsive');\nexport const VResponsive = genericComponent()({\n name: 'VResponsive',\n props: makeVResponsiveProps(),\n setup(props, {\n slots\n }) {\n const {\n aspectStyles\n } = useAspectStyles(props);\n const {\n dimensionStyles\n } = useDimension(props);\n useRender(() => _createElementVNode(\"div\", {\n \"class\": _normalizeClass(['v-responsive', {\n 'v-responsive--inline': props.inline\n }, props.class]),\n \"style\": _normalizeStyle([dimensionStyles.value, props.style])\n }, [_createElementVNode(\"div\", {\n \"class\": \"v-responsive__sizer\",\n \"style\": _normalizeStyle(aspectStyles.value)\n }, null), slots.additional?.(), slots.default && _createElementVNode(\"div\", {\n \"class\": _normalizeClass(['v-responsive__content', props.contentClass])\n }, [slots.default()])]));\n return {};\n }\n});\n//# sourceMappingURL=VResponsive.js.map","// Utilities\nimport { toValue } from 'vue';\nimport { destructComputed, hasLightForeground, isCssColor, isNumber, isParsableColor, isString, parseColor } from \"../util/index.js\"; // Types\n// Composables\nexport function useColor(colors) {\n return destructComputed(() => {\n const {\n class: colorClasses,\n style: colorStyles\n } = computeColor(colors);\n return {\n colorClasses,\n colorStyles\n };\n });\n}\nexport function useTextColor(color) {\n const {\n colorClasses: textColorClasses,\n colorStyles: textColorStyles\n } = useColor(() => ({\n text: toValue(color)\n }));\n return {\n textColorClasses,\n textColorStyles\n };\n}\nexport function useBackgroundColor(color) {\n const {\n colorClasses: backgroundColorClasses,\n colorStyles: backgroundColorStyles\n } = useColor(() => ({\n background: toValue(color)\n }));\n return {\n backgroundColorClasses,\n backgroundColorStyles\n };\n}\nfunction normalizeColors(colors) {\n return {\n text: isString(colors.text) ? colors.text.replace(/^text-/, '') : colors.text,\n background: isString(colors.background) ? colors.background.replace(/^bg-/, '') : colors.background\n };\n}\nexport function computeColor(colors) {\n const _colors = normalizeColors(toValue(colors));\n const classes = [];\n const styles = {};\n if (_colors.background) {\n if (isCssColor(_colors.background)) {\n styles.backgroundColor = _colors.background;\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) ? 'v-theme-on-dark' : 'v-theme-on-light');\n }\n }\n } else {\n classes.push(`bg-${_colors.background}`);\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 return {\n class: classes,\n style: styles\n };\n}\n//# sourceMappingURL=color.js.map","// Utilities\nimport { computed, isRef } from 'vue';\nimport { convertToUnit, getCurrentInstanceName, isString, propsFactory } from \"../util/index.js\"; // Types\nconst CSS_LENGTH = /^-?\\d*\\.?\\d+([a-z%]{0,4})$/i;\nfunction splitTokens(v) {\n return String(v).trim().split(/\\s+/);\n}\nfunction isCssLength(token) {\n return token.toLowerCase().match(CSS_LENGTH)?.at(1)?.startsWith('x') === false;\n}\nfunction isCssValue(v) {\n return typeof v === 'string' && !!v && (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');\nexport function useRounded(props, name = getCurrentInstanceName()) {\n const roundedClasses = computed(() => {\n const rounded = isRef(props) ? props.value : props.rounded;\n const tile = isRef(props) ? false : props.tile;\n const classes = [];\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 return classes;\n });\n const roundedStyles = computed(() => {\n const rounded = isRef(props) ? props.value : props.rounded;\n if ((!isCssValue(rounded) || String(rounded) === '0') && !(typeof rounded === 'number' && rounded !== 0)) {\n return {};\n }\n return {\n borderRadius: convertToUnit(rounded)\n };\n });\n return {\n roundedClasses,\n roundedStyles\n };\n}\n//# sourceMappingURL=rounded.js.map","// Utilities\nimport { h, mergeProps, Transition, TransitionGroup } from 'vue';\nimport { isObject, onlyDefinedProps, propsFactory } from \"../util/index.js\"; // Types\nexport const makeTransitionProps = propsFactory({\n transition: {\n type: null,\n default: 'fade-transition',\n validator: val => val !== true\n }\n}, 'transition');\nexport const MaybeTransition = (props, {\n slots\n}) => {\n const {\n transition,\n disabled,\n group,\n target,\n ...rest\n } = props;\n const {\n component = group ? TransitionGroup : Transition,\n ...customProps\n } = isObject(transition) ? transition : {};\n let transitionProps;\n if (isObject(transition)) {\n transitionProps = mergeProps(customProps, onlyDefinedProps({\n disabled,\n group,\n target\n }), rest);\n } else {\n transitionProps = mergeProps({\n name: disabled || !transition ? '' : transition\n }, rest);\n }\n return h(component, transitionProps, slots);\n};\n//# sourceMappingURL=transition.js.map","// Utilities\nimport { isFunction, isObject, SUPPORTS_INTERSECTION } from \"../../util/index.js\"; // Types\nfunction mounted(el, binding) {\n if (!SUPPORTS_INTERSECTION) return;\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 const observer = new IntersectionObserver((entries = [], observer) => {\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 (handler && (!modifiers.quiet || _observe.init) && (!modifiers.once || isIntersecting || _observe.init)) {\n handler(isIntersecting, entries, observer);\n }\n if (isIntersecting && modifiers.once) unmounted(el, binding);else _observe.init = true;\n }, options);\n el._observe = Object(el._observe);\n el._observe[binding.instance.$.uid] = {\n init: false,\n observer\n };\n observer.observe(el);\n}\nfunction unmounted(el, binding) {\n const observe = el._observe?.[binding.instance.$.uid];\n if (!observe) return;\n observe.observer.unobserve(el);\n delete el._observe[binding.instance.$.uid];\n}\nexport const Intersect = {\n mounted,\n unmounted,\n updated: (el, binding) => {\n if (el._observe?.[binding.instance.$.uid]) {\n unmounted(el, binding);\n mounted(el, binding);\n }\n }\n};\nexport default Intersect;\n//# sourceMappingURL=index.js.map","import { normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, createVNode as _createVNode, Fragment as _Fragment, mergeProps as _mergeProps, withDirectives as _withDirectives } from \"vue\";\n// Styles\nimport \"./VImg.css\";\n\n// Components\nimport { makeVResponsiveProps, VResponsive } from \"../VResponsive/VResponsive.js\"; // Composables\nimport { useBackgroundColor } from \"../../composables/color.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeRoundedProps, useRounded } from \"../../composables/rounded.js\";\nimport { makeTransitionProps, MaybeTransition } from \"../../composables/transition.js\"; // Directives\nimport vIntersect from \"../../directives/intersect/index.js\"; // Utilities\nimport { computed, nextTick, onBeforeMount, onBeforeUnmount, ref, shallowRef, toRef, vShow, watch, withDirectives } from 'vue';\nimport { convertToUnit, filterInputAttrs, genericComponent, getCurrentInstance, isObject, propsFactory, SUPPORTS_INTERSECTION, useRender } from \"../../util/index.js\"; // Types\n// not intended for public use, this is passed in by vuetify-loader\nexport const makeVImgProps = propsFactory({\n absolute: Boolean,\n alt: String,\n cover: Boolean,\n color: String,\n draggable: {\n type: [Boolean, String],\n default: undefined\n },\n eager: Boolean,\n gradient: String,\n imageClass: null,\n lazySrc: String,\n options: {\n type: Object,\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],\n default: ''\n },\n crossorigin: String,\n referrerpolicy: String,\n srcset: String,\n position: String,\n ...makeVResponsiveProps(),\n ...makeComponentProps(),\n ...makeRoundedProps(),\n ...makeTransitionProps()\n}, 'VImg');\nexport const VImg = genericComponent()({\n name: 'VImg',\n directives: {\n vIntersect\n },\n inheritAttrs: false,\n props: makeVImgProps(),\n emits: {\n loadstart: value => true,\n load: value => true,\n error: value => true\n },\n setup(props, {\n attrs,\n emit,\n slots\n }) {\n const {\n backgroundColorClasses,\n backgroundColorStyles\n } = useBackgroundColor(() => props.color);\n const {\n roundedClasses,\n roundedStyles\n } = useRounded(props);\n const vm = getCurrentInstance('VImg');\n const currentSrc = shallowRef(''); // Set from srcset\n const image = ref();\n const state = shallowRef(props.eager ? 'loading' : 'idle');\n const naturalWidth = shallowRef();\n const naturalHeight = shallowRef();\n let deferredLoadEmit = false;\n const normalisedSrc = computed(() => {\n return isObject(props.src) ? {\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 const aspectRatio = computed(() => {\n return normalisedSrc.value.aspect || naturalWidth.value / naturalHeight.value || 0;\n });\n watch(() => props.src, () => {\n init(state.value !== 'idle');\n });\n watch(aspectRatio, (val, oldVal) => {\n if (!val && oldVal && image.value) {\n pollForSize(image.value);\n }\n });\n watch(image, img => {\n if (!img || state.value === 'idle') return;\n if (!aspectRatio.value) pollForSize(img);\n getSrc(img);\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 function init(isIntersecting) {\n if (props.eager && isIntersecting) return;\n if (SUPPORTS_INTERSECTION && !isIntersecting && !props.eager) return;\n state.value = 'loading';\n if (normalisedSrc.value.lazySrc) {\n const lazyImg = new Image();\n lazyImg.src = normalisedSrc.value.lazySrc;\n pollForSize(lazyImg, null);\n }\n if (!normalisedSrc.value.src) return;\n nextTick(() => {\n emit('loadstart', image.value?.currentSrc || normalisedSrc.value.src);\n setTimeout(() => {\n if (vm.isUnmounted) return;\n if (image.value?.complete) {\n if (!image.value.naturalWidth) {\n onError();\n }\n if (state.value === 'error') return;\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 function onLoad() {\n if (vm.isUnmounted) return;\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 function onError() {\n if (vm.isUnmounted) return;\n state.value = 'error';\n emit('error', image.value?.currentSrc || normalisedSrc.value.src);\n }\n function getSrc(img) {\n currentSrc.value = img.currentSrc || img.src;\n }\n let timer = -1;\n onBeforeUnmount(() => {\n clearTimeout(timer);\n });\n function pollForSize(img, timeout = 100) {\n const poll = () => {\n clearTimeout(timer);\n if (vm.isUnmounted) return;\n const {\n naturalHeight: imgHeight,\n naturalWidth: imgWidth\n } = img;\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 poll();\n }\n const containClasses = toRef(() => ({\n 'v-img__img--cover': props.cover,\n 'v-img__img--contain': !props.cover\n }));\n const __image = () => {\n if (!normalisedSrc.value.src || state.value === 'idle') return null;\n const img = _createElementVNode(\"img\", {\n \"class\": _normalizeClass(['v-img__img', containClasses.value, props.imageClass]),\n \"style\": {\n objectPosition: props.position\n },\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 }, null);\n const sources = slots.sources?.();\n return _createVNode(MaybeTransition, {\n \"transition\": props.transition,\n \"appear\": true\n }, {\n default: () => [withDirectives(sources ? _createElementVNode(\"picture\", {\n \"class\": \"v-img__picture\"\n }, [sources, img]) : img, [[vShow, state.value === 'loaded']])]\n });\n };\n const __preloadImage = () => _createVNode(MaybeTransition, {\n \"transition\": props.transition\n }, {\n default: () => [normalisedSrc.value.lazySrc && state.value !== 'loaded' && _createElementVNode(\"img\", {\n \"class\": _normalizeClass(['v-img__img', 'v-img__img--preload', containClasses.value]),\n \"style\": {\n objectPosition: props.position\n },\n \"crossorigin\": props.crossorigin,\n \"src\": normalisedSrc.value.lazySrc,\n \"alt\": props.alt,\n \"referrerpolicy\": props.referrerpolicy,\n \"draggable\": props.draggable\n }, null)]\n });\n const __placeholder = () => {\n if (!slots.placeholder) return null;\n return _createVNode(MaybeTransition, {\n \"transition\": props.transition,\n \"appear\": true\n }, {\n default: () => [(state.value === 'loading' || state.value === 'error' && !slots.error) && _createElementVNode(\"div\", {\n \"class\": \"v-img__placeholder\"\n }, [slots.placeholder()])]\n });\n };\n const __error = () => {\n if (!slots.error) return null;\n return _createVNode(MaybeTransition, {\n \"transition\": props.transition,\n \"appear\": true\n }, {\n default: () => [state.value === 'error' && _createElementVNode(\"div\", {\n \"class\": \"v-img__error\"\n }, [slots.error()])]\n });\n };\n const __gradient = () => {\n if (!props.gradient) return null;\n return _createElementVNode(\"div\", {\n \"class\": \"v-img__gradient\",\n \"style\": {\n backgroundImage: `linear-gradient(${props.gradient})`\n }\n }, null);\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 useRender(() => {\n const responsiveProps = VResponsive.filterProps(props);\n const [rootAttrs, imageAttrs] = filterInputAttrs(attrs);\n return _withDirectives(_createVNode(VResponsive, _mergeProps({\n \"class\": ['v-img', {\n 'v-img--absolute': props.absolute,\n 'v-img--booting': !isBooted.value,\n 'v-img--fit-content': props.width === 'fit-content'\n }, backgroundColorClasses.value, roundedClasses.value, props.class],\n \"style\": [{\n width: convertToUnit(props.width === 'auto' ? naturalWidth.value : props.width)\n }, backgroundColorStyles.value, roundedStyles.value, props.style]\n }, responsiveProps, rootAttrs, {\n \"aspectRatio\": aspectRatio.value,\n \"aria-label\": props.alt || undefined,\n \"role\": props.alt ? 'img' : undefined\n }), {\n additional: () => _createElementVNode(_Fragment, null, [_createVNode(__image, imageAttrs, null), _createVNode(__preloadImage, null, null), _createVNode(__gradient, null, null), _createVNode(__placeholder, null, null), _createVNode(__error, null, null)]),\n default: slots.default\n }), [[vIntersect, {\n handler: init,\n options: props.options\n }, null, {\n once: true\n }]]);\n });\n return {\n currentSrc,\n image,\n state,\n naturalWidth,\n naturalHeight\n };\n }\n});\n//# sourceMappingURL=VImg.js.map","// Utilities\nimport { computed } from 'vue';\nimport { getCurrentInstanceName, isString, propsFactory } from \"../util/index.js\"; // Types\n// Composables\nexport const makeBorderProps = propsFactory({\n border: [Boolean, Number, String]\n}, 'border');\nexport function useBorder(props, name = getCurrentInstanceName()) {\n const borderClasses = computed(() => {\n const border = props.border;\n if (border === true || border === '') {\n return `${name}--border`;\n } else if (isString(border) || border === 0) {\n return String(border).split(' ').map(v => `border-${v}`);\n }\n return [];\n });\n return {\n borderClasses\n };\n}\n//# sourceMappingURL=border.js.map","// Utilities\nimport { isRef, toRef } from 'vue';\nimport { isNullOrUndefined, propsFactory } from \"../util/index.js\"; // Types\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 => parseInt(value) >= 0\n },\n hoverElevation: {\n type: [Number, String],\n validator: value => parseInt(value) >= 0\n }\n}, 'elevation');\nexport function useElevation(props) {\n const elevationClasses = toRef(() => {\n const elevation = isRef(props) ? props.value : props.elevation;\n const hoverElevation = isRef(props) ? null : props.hoverElevation;\n return [...(isNullOrUndefined(elevation) ? [] : [`elevation-${parseInt(elevation)}`]), ...(isNullOrUndefined(hoverElevation) ? [] : [`hover-elevation-${parseInt(hoverElevation)}`])];\n });\n return {\n elevationClasses\n };\n}\n//# sourceMappingURL=elevation.js.map","// Composables\nimport { useRtl } from \"./locale.js\"; // Utilities\nimport { computed } from 'vue';\nimport { parseAnchor, propsFactory } from \"../util/index.js\"; // Types\nconst oppositeMap = {\n center: 'center',\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left'\n};\nexport const makeLocationProps = propsFactory({\n location: String\n}, 'location');\nexport function useLocation(props, opposite = false, offset) {\n const {\n isRtl\n } = useRtl();\n const locationStyles = computed(() => {\n if (!props.location) return {};\n const {\n side,\n align\n } = parseAnchor(props.location.split(' ').length > 1 ? props.location : `${props.location} center`, isRtl.value);\n function getOffset(side) {\n return offset ? offset(side) : 0;\n }\n const styles = {};\n if (side !== 'center') {\n if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`;else styles[side] = 0;\n }\n if (align !== 'center') {\n if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`;else styles[align] = 0;\n } else {\n if (side === 'center') styles.top = styles.left = '50%';else {\n styles[{\n top: 'left',\n bottom: 'left',\n left: 'top',\n right: 'top'\n }[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 return styles;\n });\n return {\n locationStyles\n };\n}\n//# sourceMappingURL=location.js.map","import { createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\";\n// Styles\nimport \"./VToolbar.css\";\n\n// Components\nimport { VToolbarTitle } from \"./VToolbarTitle.js\";\nimport { VExpandTransition } from \"../transitions/index.js\";\nimport { VDefaultsProvider } from \"../VDefaultsProvider/index.js\";\nimport { VImg } from \"../VImg/index.js\"; // Composables\nimport { makeBorderProps, useBorder } from \"../../composables/border.js\";\nimport { useBackgroundColor } from \"../../composables/color.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { provideDefaults } from \"../../composables/defaults.js\";\nimport { makeElevationProps, useElevation } from \"../../composables/elevation.js\";\nimport { useRtl } from \"../../composables/locale.js\";\nimport { makeLocationProps, useLocation } from \"../../composables/location.js\";\nimport { makeRoundedProps, useRounded } from \"../../composables/rounded.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\"; // Utilities\nimport { computed, shallowRef } from 'vue';\nimport { convertToUnit, genericComponent, propsFactory, useRender } from \"../../util/index.js\"; // Types\nconst allowedDensities = [null, 'prominent', 'default', 'comfortable', 'compact'];\nexport const makeVToolbarProps = propsFactory({\n absolute: Boolean,\n collapse: Boolean,\n collapsePosition: {\n type: String,\n default: 'start'\n },\n color: String,\n density: {\n type: String,\n default: 'default',\n validator: v => 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 ...makeBorderProps(),\n ...makeComponentProps(),\n ...makeElevationProps(),\n ...makeLocationProps(),\n ...makeRoundedProps(),\n ...makeTagProps({\n tag: 'header'\n }),\n ...makeThemeProps()\n}, 'VToolbar');\nexport const VToolbar = genericComponent()({\n name: 'VToolbar',\n props: makeVToolbarProps(),\n setup(props, {\n slots\n }) {\n const {\n backgroundColorClasses,\n backgroundColorStyles\n } = useBackgroundColor(() => props.color);\n const {\n borderClasses\n } = useBorder(props);\n const {\n elevationClasses\n } = useElevation(props);\n const {\n locationStyles\n } = useLocation(props);\n const {\n roundedClasses,\n roundedStyles\n } = useRounded(props);\n const {\n themeClasses\n } = provideTheme(props);\n const {\n rtlClasses\n } = useRtl();\n const isExtended = shallowRef(props.extended === null ? !!slots.extension?.() : props.extended);\n const contentHeight = computed(() => parseInt(Number(props.height) + (props.density === 'prominent' ? Number(props.height) : 0) - (props.density === 'comfortable' ? 8 : 0) - (props.density === 'compact' ? 16 : 0), 10));\n const extensionHeight = computed(() => isExtended.value ? parseInt(Number(props.extensionHeight) + (props.density === 'prominent' ? Number(props.extensionHeight) : 0) - (props.density === 'comfortable' ? 4 : 0) - (props.density === 'compact' ? 8 : 0), 10) : 0);\n provideDefaults({\n VBtn: {\n variant: 'text'\n }\n });\n useRender(() => {\n const hasTitle = !!(props.title || slots.title);\n const hasImage = !!(slots.image || props.image);\n const extension = slots.extension?.();\n isExtended.value = props.extended === null ? !!extension : props.extended;\n return _createVNode(props.tag, {\n \"class\": _normalizeClass(['v-toolbar', `v-toolbar--collapse-${props.collapsePosition}`, {\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 }, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, themeClasses.value, rtlClasses.value, props.class]),\n \"style\": _normalizeStyle([backgroundColorStyles.value, locationStyles.value, roundedStyles.value, props.style])\n }, {\n default: () => [hasImage && _createElementVNode(\"div\", {\n \"key\": \"image\",\n \"class\": \"v-toolbar__image\"\n }, [!slots.image ? _createVNode(VImg, {\n \"key\": \"image-img\",\n \"cover\": true,\n \"src\": props.image\n }, null) : _createVNode(VDefaultsProvider, {\n \"key\": \"image-defaults\",\n \"disabled\": !props.image,\n \"defaults\": {\n VImg: {\n cover: true,\n src: props.image\n }\n }\n }, slots.image)]), _createVNode(VDefaultsProvider, {\n \"defaults\": {\n VTabs: {\n height: convertToUnit(contentHeight.value)\n }\n }\n }, {\n default: () => [_createElementVNode(\"div\", {\n \"class\": \"v-toolbar__content\",\n \"style\": {\n height: convertToUnit(contentHeight.value)\n }\n }, [slots.prepend && _createElementVNode(\"div\", {\n \"class\": \"v-toolbar__prepend\"\n }, [slots.prepend?.()]), hasTitle && _createVNode(VToolbarTitle, {\n \"key\": \"title\",\n \"text\": props.title\n }, {\n text: slots.title\n }), slots.default?.(), slots.append && _createElementVNode(\"div\", {\n \"class\": \"v-toolbar__append\"\n }, [slots.append?.()])])]\n }), _createVNode(VDefaultsProvider, {\n \"defaults\": {\n VTabs: {\n height: convertToUnit(extensionHeight.value)\n }\n }\n }, {\n default: () => [_createVNode(VExpandTransition, null, {\n default: () => [isExtended.value && _createElementVNode(\"div\", {\n \"class\": \"v-toolbar__extension\",\n \"style\": {\n height: convertToUnit(extensionHeight.value)\n }\n }, [extension])]\n })]\n })]\n });\n });\n return {\n contentHeight,\n extensionHeight\n };\n }\n});\n//# sourceMappingURL=VToolbar.js.map","// Utilities\nimport { computed, onBeforeUnmount, onMounted, ref, shallowRef, watch } from 'vue';\nimport { clamp, consoleWarn, propsFactory } from \"../util/index.js\"; // Types\n// Composables\nexport const makeScrollProps = propsFactory({\n scrollTarget: {\n type: String\n },\n scrollThreshold: {\n type: [String, Number],\n default: 300\n }\n}, 'scroll');\nexport function useScroll(props, args = {}) {\n const {\n canScroll,\n layoutSize\n } = args;\n let previousScroll = 0;\n let previousScrollHeight = 0;\n const target = ref(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 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 function getScrollMetrics(targetEl) {\n const clientHeight = 'window' in targetEl ? window.innerHeight : targetEl.clientHeight;\n const scrollHeight = 'window' in targetEl ? document.documentElement.scrollHeight : targetEl.scrollHeight;\n return {\n clientHeight,\n scrollHeight\n };\n }\n function checkScrollableSpace() {\n const targetEl = target.value;\n if (!targetEl) return;\n const {\n clientHeight,\n scrollHeight\n } = 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 function onResize() {\n checkScrollableSpace();\n }\n function onScroll() {\n const targetEl = target.value;\n if (!targetEl || canScroll && !canScroll.value) return;\n previousScroll = currentScroll.value;\n currentScroll.value = 'window' in targetEl ? targetEl.pageYOffset : targetEl.scrollTop;\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 isScrollingUp.value = currentScroll.value < previousScroll;\n currentThreshold.value = Math.abs(currentScroll.value - scrollThreshold.value);\n\n // Detect if at bottom of page\n const {\n clientHeight,\n scrollHeight\n } = 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 && currentScroll.value >= scrollThreshold.value && 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 watch(isScrollingUp, () => {\n savedScroll.value = savedScroll.value || currentScroll.value;\n });\n watch(isScrollActive, () => {\n savedScroll.value = 0;\n });\n onMounted(() => {\n watch(() => props.scrollTarget, scrollTarget => {\n const newTarget = scrollTarget ? document.querySelector(scrollTarget) : window;\n if (!newTarget) {\n consoleWarn(`Unable to locate element with identifier ${scrollTarget}`);\n return;\n }\n if (newTarget === target.value) return;\n target.value?.removeEventListener('scroll', onScroll);\n target.value = newTarget;\n target.value.addEventListener('scroll', onScroll, {\n passive: true\n });\n\n // Check scrollable space when target is set\n Promise.resolve().then(() => {\n checkScrollableSpace();\n });\n }, {\n immediate: true\n });\n\n // Listen to window resize to recalculate scrollable space\n window.addEventListener('resize', onResize, {\n 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, {\n immediate: true\n });\n return {\n scrollThreshold,\n currentScroll,\n currentThreshold,\n isScrollActive,\n scrollRatio,\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//# sourceMappingURL=scroll.js.map","// Utilities\nimport { onMounted, readonly, shallowRef, toRef } from 'vue';\n\n// Composables\nexport function useSsrBoot() {\n const isBooted = shallowRef(false);\n onMounted(() => {\n window.requestAnimationFrame(() => {\n isBooted.value = true;\n });\n });\n const ssrBootStyles = toRef(() => !isBooted.value ? {\n transition: 'none !important'\n } : undefined);\n return {\n ssrBootStyles,\n isBooted: readonly(isBooted)\n };\n}\n//# sourceMappingURL=ssrBoot.js.map","import { mergeProps as _mergeProps, createVNode as _createVNode } from \"vue\";\n// Styles\nimport \"./VAppBar.css\";\n\n// Components\nimport { makeVToolbarProps, VToolbar } from \"../VToolbar/VToolbar.js\"; // Composables\nimport { makeLayoutItemProps, useLayoutItem } from \"../../composables/layout.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\";\nimport { makeScrollProps, useScroll } from \"../../composables/scroll.js\";\nimport { useSsrBoot } from \"../../composables/ssrBoot.js\";\nimport { useToggleScope } from \"../../composables/toggleScope.js\"; // Utilities\nimport { computed, ref, shallowRef, toRef, watchEffect } from 'vue';\nimport { genericComponent, omit, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVAppBarProps = propsFactory({\n scrollBehavior: String,\n modelValue: {\n type: Boolean,\n default: true\n },\n location: {\n type: String,\n default: 'top',\n validator: value => ['top', 'bottom'].includes(value)\n },\n ...omit(makeVToolbarProps(), ['location']),\n ...makeLayoutItemProps(),\n ...makeScrollProps(),\n height: {\n type: [Number, String],\n default: 64\n }\n}, 'VAppBar');\nexport const VAppBar = genericComponent()({\n name: 'VAppBar',\n props: makeVAppBarProps(),\n emits: {\n 'update:modelValue': value => true\n },\n setup(props, {\n slots\n }) {\n const vToolbarRef = ref();\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 behavior.hide || behavior.fullyHide || behavior.inverted || behavior.collapse || behavior.elevate || behavior.fadeImage ||\n // behavior.shrink ||\n !isActive.value;\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 const {\n currentScroll,\n scrollThreshold,\n isScrollingUp,\n scrollRatio,\n isAtBottom,\n reachedBottomWhileScrollingDown,\n hasEnoughScrollableSpace\n } = useScroll(props, {\n canScroll,\n layoutSize: appBarHeight\n });\n const canHide = toRef(() => scrollBehavior.value.hide || scrollBehavior.value.fullyHide);\n const isCollapsed = computed(() => props.collapse || scrollBehavior.value.collapse && (scrollBehavior.value.inverted ? scrollRatio.value > 0 : scrollRatio.value === 0));\n const isFlat = computed(() => props.flat || scrollBehavior.value.fullyHide && !isActive.value || scrollBehavior.value.elevate && (scrollBehavior.value.inverted ? currentScroll.value > 0 : currentScroll.value === 0));\n const opacity = computed(() => scrollBehavior.value.fadeImage ? scrollBehavior.value.inverted ? 1 - scrollRatio.value : scrollRatio.value : undefined);\n const height = computed(() => {\n if (scrollBehavior.value.hide && scrollBehavior.value.inverted) return 0;\n const height = vToolbarRef.value?.contentHeight ?? 0;\n const extensionHeight = vToolbarRef.value?.extensionHeight ?? 0;\n if (!canHide.value) return height + extensionHeight;\n return currentScroll.value < scrollThreshold.value || scrollBehavior.value.fullyHide ? height + extensionHeight : height;\n });\n useToggleScope(() => !!props.scrollBehavior, () => {\n watchEffect(() => {\n if (!canHide.value) {\n isActive.value = true;\n return;\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 const {\n ssrBootStyles\n } = useSsrBoot();\n const {\n layoutItemStyles\n } = 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 useRender(() => {\n const toolbarProps = omit(VToolbar.filterProps(props), ['location']);\n return _createVNode(VToolbar, _mergeProps({\n \"ref\": vToolbarRef,\n \"class\": ['v-app-bar', {\n 'v-app-bar--bottom': props.location === 'bottom'\n }, props.class],\n \"style\": [{\n ...layoutItemStyles.value,\n '--v-toolbar-image-opacity': opacity.value,\n height: undefined,\n ...ssrBootStyles.value\n }, props.style]\n }, toolbarProps, {\n \"collapse\": isCollapsed.value,\n \"flat\": isFlat.value\n }), slots);\n });\n return {};\n }\n});\n//# sourceMappingURL=VAppBar.js.map","// Utilities\nimport { toRef } from 'vue';\nimport { getCurrentInstanceName, propsFactory } from \"../util/index.js\"; // Types\nconst allowedDensities = [null, 'default', 'comfortable', 'compact'];\n\n// typeof allowedDensities[number] evaluates to any\n// when generating api types for whatever reason.\n\n// Composables\nexport const makeDensityProps = propsFactory({\n density: {\n type: String,\n default: 'default',\n validator: v => allowedDensities.includes(v)\n }\n}, 'density');\nexport function useDensity(props, name = getCurrentInstanceName()) {\n const densityClasses = toRef(() => {\n return `${name}--density-${props.density}`;\n });\n return {\n densityClasses\n };\n}\n//# sourceMappingURL=density.js.map","// Utilities\nimport { convertToUnit, destructComputed, getCurrentInstanceName, includes, propsFactory } from \"../util/index.js\"; // Types\nconst predefinedSizes = ['x-small', 'small', 'default', 'large', 'x-large'];\n// Composables\nexport const makeSizeProps = propsFactory({\n size: {\n type: [String, Number],\n default: 'default'\n }\n}, 'size');\nexport function useSize(props, name = getCurrentInstanceName()) {\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 {\n sizeClasses,\n sizeStyles\n };\n });\n}\n//# sourceMappingURL=size.js.map","import { Fragment as _Fragment, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode } from \"vue\";\n// Composables\nimport { useColor } from \"./color.js\"; // Utilities\nimport { toRef, toValue } from 'vue';\nimport { getCurrentInstanceName, propsFactory } from \"../util/index.js\"; // Types\nexport const allowedVariants = ['elevated', 'flat', 'tonal', 'outlined', 'text', 'plain'];\nexport function genOverlays(isClickable, name) {\n return _createElementVNode(_Fragment, null, [isClickable && _createElementVNode(\"span\", {\n \"key\": \"overlay\",\n \"class\": _normalizeClass(`${name}__overlay`)\n }, null), _createElementVNode(\"span\", {\n \"key\": \"underlay\",\n \"class\": _normalizeClass(`${name}__underlay`)\n }, null)]);\n}\nexport const makeVariantProps = propsFactory({\n color: String,\n variant: {\n type: String,\n default: 'elevated',\n validator: v => allowedVariants.includes(v)\n }\n}, 'variant');\nexport function useVariant(props, name = getCurrentInstanceName()) {\n const variantClasses = toRef(() => {\n const {\n variant\n } = toValue(props);\n return `${name}--variant-${variant}`;\n });\n const {\n colorClasses,\n colorStyles\n } = useColor(() => {\n const {\n variant,\n color\n } = toValue(props);\n return {\n [['elevated', 'flat'].includes(variant) ? 'background' : 'text']: color\n };\n });\n return {\n colorClasses,\n colorStyles,\n variantClasses\n };\n}\n//# sourceMappingURL=variant.js.map","import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createVNode as _createVNode } from \"vue\";\n// Styles\nimport \"./VBtnGroup.css\";\n\n// Composables\nimport { makeBorderProps, useBorder } from \"../../composables/border.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { provideDefaults } from \"../../composables/defaults.js\";\nimport { makeDensityProps, useDensity } from \"../../composables/density.js\";\nimport { makeElevationProps, useElevation } from \"../../composables/elevation.js\";\nimport { makeRoundedProps, useRounded } from \"../../composables/rounded.js\";\nimport { makeSizeProps } from \"../../composables/size.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\";\nimport { makeVariantProps } from \"../../composables/variant.js\"; // Utilities\nimport { toRef } from 'vue';\nimport { genericComponent, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVBtnGroupProps = propsFactory({\n baseColor: String,\n divided: Boolean,\n direction: {\n type: String,\n default: 'horizontal'\n },\n ...makeBorderProps(),\n ...makeComponentProps(),\n ...makeDensityProps(),\n ...makeElevationProps(),\n ...makeRoundedProps(),\n ...makeSizeProps({\n size: undefined\n }),\n ...makeTagProps(),\n ...makeThemeProps(),\n ...makeVariantProps()\n}, 'VBtnGroup');\nexport const VBtnGroup = genericComponent()({\n name: 'VBtnGroup',\n props: makeVBtnGroupProps(),\n setup(props, {\n slots\n }) {\n const {\n themeClasses\n } = provideTheme(props);\n const {\n densityClasses\n } = useDensity(props);\n const {\n borderClasses\n } = useBorder(props);\n const {\n elevationClasses\n } = useElevation(props);\n const {\n roundedClasses,\n roundedStyles\n } = useRounded(props);\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 useRender(() => {\n return _createVNode(props.tag, {\n \"class\": _normalizeClass(['v-btn-group', `v-btn-group--${props.direction}`, {\n 'v-btn-group--divided': props.divided,\n 'v-btn-group--has-size': props.size != null\n }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class]),\n \"style\": _normalizeStyle([roundedStyles.value, props.style])\n }, slots);\n });\n }\n});\n//# sourceMappingURL=VBtnGroup.js.map","// Composables\nimport { useProxiedModel } from \"./proxiedModel.js\"; // Utilities\nimport { computed, inject, onBeforeUnmount, onMounted, onUpdated, provide, reactive, toRef, unref, useId, watch } from 'vue';\nimport { consoleWarn, deepEqual, findChildrenWithProvide, getCurrentInstance, isNull, isNumber, isUndefined, propsFactory, wrapInArray } from \"../util/index.js\"; // Types\nexport const makeGroupProps = propsFactory({\n modelValue: {\n type: null,\n default: undefined\n },\n multiple: Boolean,\n mandatory: [Boolean, String],\n max: Number,\n selectedClass: String,\n disabled: Boolean\n}, 'group');\nexport const makeGroupItemProps = propsFactory({\n value: null,\n disabled: Boolean,\n selectedClass: String\n}, 'group-item');\n\n// Composables\n\nexport function useGroupItem(props, injectKey, required = true) {\n const vm = getCurrentInstance('useGroupItem');\n if (!vm) {\n throw new Error('[Vuetify] useGroupItem composable must be used inside a component setup function');\n }\n const id = useId();\n provide(Symbol.for(`${injectKey.description}:id`), id);\n const group = inject(injectKey, null);\n if (!group) {\n if (!required) return group;\n throw new Error(`[Vuetify] Could not find useGroup injection with symbol ${injectKey.description}`);\n }\n const value = toRef(() => props.value);\n const disabled = computed(() => !!(group.disabled.value || props.disabled));\n function register() {\n group?.register({\n id,\n value,\n disabled\n }, vm);\n }\n function unregister() {\n group?.unregister(id);\n }\n register();\n onBeforeUnmount(() => unregister());\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 const selectedClass = computed(() => isSelected.value && [group.selectedClass.value, props.selectedClass]);\n watch(isSelected, value => {\n vm.emit('group:selected', {\n value\n });\n }, {\n flush: 'sync'\n });\n return {\n id,\n isSelected,\n isFirst,\n isLast,\n toggle: () => group.select(id, !isSelected.value),\n select: value => group.select(id, value),\n selectedClass,\n value,\n disabled,\n group,\n register,\n unregister\n };\n}\nexport function useGroup(props, injectKey) {\n let isUnmounted = false;\n const items = reactive([]);\n const selected = useProxiedModel(props, 'modelValue', [], v => {\n if (isUndefined(v)) return [];\n return getIds(items, isNull(v) ? [null] : wrapInArray(v));\n }, v => {\n const arr = getValues(items, v);\n return props.multiple ? arr : arr[0];\n });\n const groupVm = getCurrentInstance('useGroup');\n function register(item, vm) {\n // Is there a better way to fix this typing?\n const unwrapped = item;\n const key = Symbol.for(`${injectKey.description}:id`);\n const children = findChildrenWithProvide(key, groupVm?.vnode);\n const index = children.indexOf(vm);\n if (isUndefined(unref(unwrapped.value))) {\n unwrapped.value = index;\n unwrapped.useIndexAsValue = true;\n }\n if (index > -1) {\n items.splice(index, 0, unwrapped);\n } else {\n items.push(unwrapped);\n }\n }\n function unregister(id) {\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 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 onMounted(() => {\n forceMandatoryValue();\n });\n onBeforeUnmount(() => {\n isUnmounted = true;\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 function select(id, value) {\n const item = items.find(item => item.id === id);\n if (value && item?.disabled) return;\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 (isSelected && props.mandatory && internalValue.length <= 1) return;\n\n // We can't add value if it would\n // cause max limit to be exceeded\n if (!isSelected && isNumber(props.max) && internalValue.length + 1 > props.max) return;\n if (index < 0 && value) internalValue.push(id);else if (index >= 0 && !value) internalValue.splice(index, 1);\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 selected.value = value ?? !isSelected ? [id] : [];\n }\n }\n function step(offset) {\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 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 let newIndex = (currentIndex + offset) % items.length;\n let newItem = items[newIndex];\n while (newItem.disabled && newIndex !== currentIndex) {\n newIndex = (newIndex + offset) % items.length;\n newItem = items[newIndex];\n }\n if (newItem.disabled) return;\n selected.value = [items[newIndex].id];\n }\n }\n const state = {\n register,\n unregister,\n selected,\n select,\n disabled: toRef(() => props.disabled),\n prev: () => step(items.length - 1),\n next: () => step(1),\n isSelected: id => selected.value.includes(id),\n selectedClass: toRef(() => props.selectedClass),\n items: toRef(() => items),\n getItemIndex: value => getItemIndex(items, value)\n };\n provide(injectKey, state);\n return state;\n}\nfunction getItemIndex(items, value) {\n const ids = getIds(items, [value]);\n if (!ids.length) return -1;\n return items.findIndex(item => item.id === ids[0]);\n}\nfunction getIds(items, modelValue) {\n const ids = [];\n modelValue.forEach(value => {\n const item = items.find(item => deepEqual(value, item.value));\n const itemByIndex = items[value];\n if (!isUndefined(item?.value)) {\n ids.push(item.id);\n } else if (itemByIndex?.useIndexAsValue) {\n ids.push(itemByIndex.id);\n }\n });\n return ids;\n}\nfunction getValues(items, ids) {\n const values = [];\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 return values;\n}\n//# sourceMappingURL=group.js.map","import { mergeProps as _mergeProps, createVNode as _createVNode } from \"vue\";\n// Styles\nimport \"./VBtnToggle.css\";\n\n// Components\nimport { makeVBtnGroupProps, VBtnGroup } from \"../VBtnGroup/VBtnGroup.js\"; // Composables\nimport { makeGroupProps, useGroup } from \"../../composables/group.js\"; // Utilities\nimport { genericComponent, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const VBtnToggleSymbol = Symbol.for('vuetify:v-btn-toggle');\nexport const makeVBtnToggleProps = propsFactory({\n ...makeVBtnGroupProps(),\n ...makeGroupProps()\n}, 'VBtnToggle');\nexport const VBtnToggle = genericComponent()({\n name: 'VBtnToggle',\n props: makeVBtnToggleProps(),\n emits: {\n 'update:modelValue': value => true\n },\n setup(props, {\n slots\n }) {\n const {\n isSelected,\n next,\n prev,\n select,\n selected\n } = useGroup(props, VBtnToggleSymbol);\n useRender(() => {\n const btnGroupProps = VBtnGroup.filterProps(props);\n return _createVNode(VBtnGroup, _mergeProps({\n \"class\": ['v-btn-toggle', {\n 'v-btn-toggle--has-color': !!props.color\n }, props.class]\n }, btnGroupProps, {\n \"style\": props.style\n }), {\n default: () => [slots.default?.({\n isSelected,\n next,\n prev,\n select,\n selected\n })]\n });\n });\n return {\n next,\n prev,\n select\n };\n }\n});\n//# sourceMappingURL=VBtnToggle.js.map","import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createVNode as _createVNode } from \"vue\";\n// Styles\nimport \"./VIcon.css\";\n\n// Composables\nimport { useTextColor } from \"../../composables/color.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { IconValue, useIcon } from \"../../composables/icons.js\";\nimport { makeSizeProps, useSize } from \"../../composables/size.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\"; // Utilities\nimport { shallowRef, Text } from 'vue';\nimport { convertToUnit, flattenFragments, genericComponent, isString, propsFactory, useRender } from \"../../util/index.js\";\nexport const makeVIconProps = propsFactory({\n color: String,\n disabled: Boolean,\n start: Boolean,\n end: Boolean,\n icon: IconValue,\n opacity: [String, Number],\n ...makeComponentProps(),\n ...makeSizeProps(),\n ...makeTagProps({\n tag: 'i'\n }),\n ...makeThemeProps()\n}, 'VIcon');\nexport const VIcon = genericComponent()({\n name: 'VIcon',\n props: makeVIconProps(),\n setup(props, {\n attrs,\n slots\n }) {\n const slotIcon = shallowRef();\n const {\n themeClasses\n } = provideTheme(props);\n const {\n iconData\n } = useIcon(() => slotIcon.value || props.icon);\n const {\n sizeClasses\n } = useSize(props);\n const {\n textColorClasses,\n textColorStyles\n } = useTextColor(() => props.color);\n useRender(() => {\n const slotValue = slots.default?.();\n if (slotValue) {\n slotIcon.value = flattenFragments(slotValue).filter(node => node.type === Text && node.children && isString(node.children))[0]?.children;\n }\n const hasClick = !!(attrs.onClick || attrs.onClickOnce);\n return _createVNode(iconData.value.component, {\n \"tag\": props.tag,\n \"icon\": iconData.value.icon,\n \"class\": _normalizeClass(['v-icon', 'notranslate', themeClasses.value, sizeClasses.value, textColorClasses.value, {\n 'v-icon--clickable': hasClick,\n 'v-icon--disabled': props.disabled,\n 'v-icon--start': props.start,\n 'v-icon--end': props.end\n }, props.class]),\n \"style\": _normalizeStyle([{\n '--v-icon-opacity': props.opacity\n }, !sizeClasses.value ? {\n fontSize: convertToUnit(props.size),\n height: convertToUnit(props.size),\n width: convertToUnit(props.size)\n } : undefined, textColorStyles.value, props.style]),\n \"role\": hasClick ? 'button' : undefined,\n \"aria-hidden\": !hasClick,\n \"tabindex\": hasClick ? props.disabled ? -1 : 0 : undefined\n }, {\n default: () => [slotValue]\n });\n });\n return {};\n }\n});\n//# sourceMappingURL=VIcon.js.map","// Utilities\nimport { onScopeDispose, ref, shallowRef, watch } from 'vue';\nimport { SUPPORTS_INTERSECTION } from \"../util/index.js\";\nexport function useIntersectionObserver(callback, options) {\n const intersectionRef = ref();\n const isIntersecting = shallowRef(false);\n if (SUPPORTS_INTERSECTION) {\n const observer = new IntersectionObserver(entries => {\n callback?.(entries, observer);\n isIntersecting.value = !!entries.find(entry => entry.isIntersecting);\n }, options);\n onScopeDispose(() => {\n observer.disconnect();\n });\n watch(intersectionRef, (newValue, oldValue) => {\n if (oldValue) {\n observer.unobserve(oldValue);\n isIntersecting.value = false;\n }\n if (newValue) observer.observe(newValue);\n }, {\n flush: 'post'\n });\n }\n return {\n intersectionRef,\n isIntersecting\n };\n}\n//# sourceMappingURL=intersectionObserver.js.map","// Utilities\nimport { onMounted, shallowRef, toRef } from 'vue';\nimport { isObject, propsFactory } from \"../util/index.js\"; // Types\n// Types\n// Composables\nexport const makeRevealProps = propsFactory({\n reveal: {\n type: [Boolean, Object],\n default: false\n }\n}, 'reveal');\nexport function useReveal(props) {\n const defaultDuration = 900;\n const duration = toRef(() => isObject(props.reveal) ? Math.max(0, Number(props.reveal.duration ?? defaultDuration)) : defaultDuration);\n const state = shallowRef(props.reveal ? 'initial' : 'disabled');\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 return {\n duration,\n state\n };\n}\n//# sourceMappingURL=reveal.js.map","import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, createVNode as _createVNode } from \"vue\";\n// Styles\nimport \"./VProgressCircular.css\";\n\n// Composables\nimport { useTextColor } from \"../../composables/color.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { useIntersectionObserver } from \"../../composables/intersectionObserver.js\";\nimport { useResizeObserver } from \"../../composables/resizeObserver.js\";\nimport { makeRevealProps, useReveal } from \"../../composables/reveal.js\";\nimport { makeSizeProps, useSize } from \"../../composables/size.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\"; // Utilities\nimport { computed, ref, toRef, watchEffect } from 'vue';\nimport { clamp, convertToUnit, genericComponent, isObject, PREFERS_REDUCED_MOTION, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVProgressCircularProps = propsFactory({\n bgColor: String,\n color: String,\n indeterminate: [Boolean, String],\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],\n default: undefined\n },\n width: {\n type: [Number, String],\n default: 4\n },\n ...makeComponentProps(),\n ...makeRevealProps(),\n ...makeSizeProps(),\n ...makeTagProps({\n tag: 'div'\n }),\n ...makeThemeProps()\n}, 'VProgressCircular');\nexport const VProgressCircular = genericComponent()({\n name: 'VProgressCircular',\n props: makeVProgressCircularProps(),\n setup(props, {\n slots\n }) {\n const MAGIC_RADIUS_CONSTANT = 20;\n const CIRCUMFERENCE = 2 * Math.PI * MAGIC_RADIUS_CONSTANT;\n const root = ref();\n const {\n themeClasses\n } = provideTheme(props);\n const {\n sizeClasses,\n sizeStyles\n } = useSize(props);\n const {\n textColorClasses,\n textColorStyles\n } = useTextColor(() => props.color);\n const {\n textColorClasses: underlayColorClasses,\n textColorStyles: underlayColorStyles\n } = useTextColor(() => props.bgColor);\n const {\n intersectionRef,\n isIntersecting\n } = useIntersectionObserver();\n const {\n resizeRef,\n contentRect\n } = useResizeObserver();\n const {\n state: revealState,\n duration: revealDuration\n } = useReveal(props);\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(isObject(props.transition) ? props.transition.duration : undefined, 'ms'));\n const size = toRef(() => {\n // Get size from element if size prop value is small, large etc\n return sizeStyles.value ? Number(props.size) : contentRect.value ? contentRect.value.width : 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 ? convertToUnit(Math.min(CIRCUMFERENCE - 0.01, baseLength + strokeWidth.value)) : convertToUnit(baseLength);\n });\n const startAngle = computed(() => {\n const baseAngle = Number(props.rotate);\n return props.rounded ? baseAngle + strokeWidth.value / 2 / CIRCUMFERENCE * 360 : baseAngle;\n });\n watchEffect(() => {\n intersectionRef.value = root.value;\n resizeRef.value = root.value;\n });\n useRender(() => _createVNode(props.tag, {\n \"ref\": root,\n \"class\": _normalizeClass(['v-progress-circular', {\n 'v-progress-circular--indeterminate': !!props.indeterminate,\n 'v-progress-circular--visible': isIntersecting.value,\n 'v-progress-circular--disable-shrink': props.indeterminate && (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 }, themeClasses.value, sizeClasses.value, textColorClasses.value, props.class]),\n \"style\": _normalizeStyle([sizeStyles.value, textColorStyles.value, {\n '--v-progress-reveal-duration': `${revealDuration.value}ms`,\n '--v-progress-circular-transition-duration': transitionDuration.value\n }, props.style]),\n \"role\": \"progressbar\",\n \"aria-valuemin\": \"0\",\n \"aria-valuemax\": \"100\",\n \"aria-valuenow\": props.indeterminate ? undefined : normalizedValue.value\n }, {\n default: () => [_createElementVNode(\"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 }, [_createElementVNode(\"circle\", {\n \"class\": _normalizeClass(['v-progress-circular__underlay', underlayColorClasses.value]),\n \"style\": _normalizeStyle(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 }, null), _createElementVNode(\"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 }, null)]), slots.default && _createElementVNode(\"div\", {\n \"class\": \"v-progress-circular__content\"\n }, [slots.default({\n value: normalizedValue.value\n })])]\n }));\n return {};\n }\n});\n//# sourceMappingURL=VProgressCircular.js.map","// Utilities\nimport { computed, toRef, toValue } from 'vue';\nimport { clamp, convertToUnit, propsFactory } from \"../../util/index.js\"; // Types\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,\n default: undefined,\n validator: v => ['split'].includes(v)\n }\n}, 'chunks');\nexport function useChunks(props, containerWidth, value, bufferValue, reversed) {\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 const chunkWidth = computed(() => {\n const containerSize = toValue(containerWidth);\n if (!containerSize) return 0;\n if (chunkCount.value) {\n const availableWidth = containerSize - Number(props.chunkGap) * (chunkCount.value - 1);\n return availableWidth / chunkCount.value;\n }\n return Number(props.chunkWidth);\n });\n const chunkGap = toRef(() => Number(props.chunkGap));\n const chunksMaskStyles = computed(() => {\n if (!hasChunks.value) return {};\n const chunkGapPx = convertToUnit(chunkGap.value);\n const chunkWidthPx = convertToUnit(chunkWidth.value);\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 const splitStyles = computed(() => {\n if (!isSplit.value) return undefined;\n const halfGap = convertToUnit(chunkGap.value / 2);\n const position = toValue(reversed) ? 'right' : 'left';\n const val = toValue(value);\n if (val >= 100) return undefined;\n const buffer = toValue(bufferValue);\n const hasBar = val > 0;\n const hasBuffer = buffer > val && buffer < 100;\n if (!hasBar && !hasBuffer) return undefined;\n const split = convertToUnit(val, '%');\n const bufferSplit = convertToUnit(buffer, '%');\n const edge = hasBuffer ? bufferSplit : split;\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 ? `calc(${bufferSplit} - ${split} - ${convertToUnit(chunkGap.value)})` : `calc(${bufferSplit} - ${halfGap})`\n } : undefined,\n background: {\n [position]: `calc(${edge} + ${halfGap})`,\n width: `calc(100% - ${edge} - ${halfGap})`\n }\n };\n });\n function snapValueToChunk(val) {\n if (isSplit.value) return val;\n const containerSize = toValue(containerWidth);\n if (!containerSize) return val;\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 return clamp(filledChunks * chunkRelativeSize - gapRelativeSize / 2, 0, 100);\n }\n return {\n hasChunks: toRef(() => hasChunks.value || isSplit.value),\n isSplit,\n chunkCount,\n chunksMaskStyles,\n splitStyles,\n snapValueToChunk\n };\n}\n//# sourceMappingURL=chunks.js.map","import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, Fragment as _Fragment, createVNode as _createVNode } from \"vue\";\n// Styles\nimport \"./VProgressLinear.css\";\n\n// Composables\nimport { useBackgroundColor, useTextColor } from \"../../composables/color.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { useIntersectionObserver } from \"../../composables/intersectionObserver.js\";\nimport { useRtl } from \"../../composables/locale.js\";\nimport { makeLocationProps, useLocation } from \"../../composables/location.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\";\nimport { useResizeObserver } from \"../../composables/resizeObserver.js\";\nimport { makeRevealProps, useReveal } from \"../../composables/reveal.js\";\nimport { makeRoundedProps, useRounded } from \"../../composables/rounded.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\";\nimport { useToggleScope } from \"../../composables/toggleScope.js\"; // Utilities\nimport { computed, ref, shallowRef, Transition, watchEffect } from 'vue';\nimport { makeChunksProps, useChunks } from \"./chunks.js\";\nimport { clamp, convertToUnit, genericComponent, isObject, propsFactory, useRender } from \"../../util/index.js\"; // Types\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],\n default: undefined\n },\n ...makeChunksProps(),\n ...makeComponentProps(),\n ...makeLocationProps({\n location: 'top'\n }),\n ...makeRevealProps(),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps()\n}, 'VProgressLinear');\nexport const VProgressLinear = genericComponent()({\n name: 'VProgressLinear',\n props: makeVProgressLinearProps(),\n emits: {\n 'update:modelValue': value => true\n },\n setup(props, {\n slots\n }) {\n const root = ref();\n const progress = useProxiedModel(props, 'modelValue');\n const {\n isRtl,\n rtlClasses\n } = useRtl();\n const {\n themeClasses\n } = provideTheme(props);\n const {\n locationStyles\n } = useLocation(props);\n const {\n textColorClasses,\n textColorStyles\n } = 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 {\n roundedClasses,\n roundedStyles\n } = useRounded(props);\n const {\n intersectionRef,\n isIntersecting\n } = useIntersectionObserver();\n const {\n state: revealState,\n duration: revealDuration\n } = useReveal(props);\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' ? 0 : clamp(parseFloat(progress.value) / max.value * 100, 0, 100));\n const isReversed = computed(() => isRtl.value !== props.reverse);\n const transitionDuration = computed(() => props.transition === false ? undefined : convertToUnit(isObject(props.transition) ? props.transition.duration : undefined, 'ms'));\n const transitionName = computed(() => props.indeterminate ? 'fade-transition' : 'slide-x-transition');\n const containerWidth = shallowRef(0);\n const {\n hasChunks,\n splitStyles,\n chunksMaskStyles,\n snapValueToChunk\n } = useChunks(props, containerWidth, normalizedValue, normalizedBuffer, isReversed);\n useToggleScope(hasChunks, () => {\n const {\n resizeRef\n } = useResizeObserver(entries => containerWidth.value = entries[0].contentRect.width);\n watchEffect(() => resizeRef.value = root.value);\n });\n const bufferWidth = computed(() => {\n return hasChunks.value ? snapValueToChunk(normalizedBuffer.value) : normalizedBuffer.value;\n });\n const barWidth = computed(() => {\n return hasChunks.value ? snapValueToChunk(normalizedValue.value) : normalizedValue.value;\n });\n function handleClick(e) {\n if (!intersectionRef.value) return;\n const {\n left,\n right,\n width\n } = intersectionRef.value.getBoundingClientRect();\n const value = isReversed.value ? width - e.clientX + (right - width) : e.clientX - left;\n progress.value = Math.round(value / width * max.value);\n }\n watchEffect(() => {\n intersectionRef.value = root.value;\n });\n function renderBackgroundBar() {\n return _createElementVNode(\"div\", {\n \"class\": _normalizeClass(['v-progress-linear__background', backgroundColorClasses.value]),\n \"style\": _normalizeStyle([backgroundColorStyles.value, {\n opacity: props.bgOpacity != null ? parseFloat(props.bgOpacity) : undefined,\n width: props.stream ? 0 : undefined\n }, props.indeterminate ? {} : splitStyles.value?.background])\n }, null);\n }\n useRender(() => _createVNode(props.tag, {\n \"ref\": root,\n \"class\": _normalizeClass(['v-progress-linear', {\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 }, roundedClasses.value, themeClasses.value, rtlClasses.value, props.class]),\n \"style\": _normalizeStyle([{\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 }, chunksMaskStyles.value, roundedStyles.value, props.style]),\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 default: () => [props.stream && _createElementVNode(\"div\", {\n \"key\": \"stream\",\n \"class\": _normalizeClass(['v-progress-linear__stream', textColorClasses.value]),\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 }, null), (props.variant !== 'split' || !props.indeterminate) && renderBackgroundBar(), _createElementVNode(\"div\", {\n \"class\": _normalizeClass(['v-progress-linear__buffer', bufferColorClasses.value]),\n \"style\": _normalizeStyle([bufferColorStyles.value, {\n opacity: props.bufferOpacity != null ? parseFloat(props.bufferOpacity) : undefined,\n width: convertToUnit(bufferWidth.value, '%')\n }, splitStyles.value?.buffer])\n }, null), _createVNode(Transition, {\n \"name\": transitionName.value\n }, {\n default: () => [!props.indeterminate ? _createElementVNode(\"div\", {\n \"class\": _normalizeClass(['v-progress-linear__determinate', barColorClasses.value]),\n \"style\": _normalizeStyle([barColorStyles.value, {\n width: convertToUnit(barWidth.value, '%')\n }, splitStyles.value?.bar])\n }, null) : _createElementVNode(\"div\", {\n \"class\": \"v-progress-linear__indeterminate\"\n }, [props.variant === 'split' && _createElementVNode(_Fragment, null, [renderBackgroundBar(), renderBackgroundBar(), renderBackgroundBar()]), ['long', 'short'].map(bar => _createElementVNode(\"div\", {\n \"key\": bar,\n \"class\": _normalizeClass(['v-progress-linear__indeterminate', bar, barColorClasses.value]),\n \"style\": _normalizeStyle(barColorStyles.value)\n }, null))])]\n }), slots.default && _createElementVNode(\"div\", {\n \"class\": \"v-progress-linear__content\"\n }, [slots.default({\n value: normalizedValue.value,\n buffer: normalizedBuffer.value\n })])]\n }));\n return {};\n }\n});\n//# sourceMappingURL=VProgressLinear.js.map","import { createVNode as _createVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode } from \"vue\";\n// Components\nimport { VProgressLinear } from \"../components/VProgressLinear/index.js\"; // Utilities\nimport { toRef } from 'vue';\nimport { getCurrentInstanceName, propsFactory } from \"../util/index.js\"; // Types\n// Composables\nexport const makeLoaderProps = propsFactory({\n loading: [Boolean, String]\n}, 'loader');\nexport function useLoader(props, name = getCurrentInstanceName()) {\n const loaderClasses = toRef(() => ({\n [`${name}--loading`]: props.loading\n }));\n return {\n loaderClasses\n };\n}\nexport function LoaderSlot(props, {\n slots\n}) {\n return _createElementVNode(\"div\", {\n \"class\": _normalizeClass(`${props.name}__loader`)\n }, [slots.default?.({\n color: props.color,\n isActive: props.active\n }) || _createVNode(VProgressLinear, {\n \"absolute\": props.absolute,\n \"active\": props.active,\n \"color\": props.color,\n \"height\": \"2\",\n \"indeterminate\": true\n }, null)]);\n}\n//# sourceMappingURL=loader.js.map","// Utilities\nimport { toRef } from 'vue';\nimport { getCurrentInstanceName, propsFactory } from \"../util/index.js\"; // Types\nconst positionValues = ['static', 'relative', 'fixed', 'absolute', 'sticky'];\n// Composables\nexport const makePositionProps = propsFactory({\n position: {\n type: String,\n validator: /* istanbul ignore next */v => positionValues.includes(v)\n }\n}, 'position');\nexport function usePosition(props, name = getCurrentInstanceName()) {\n const positionClasses = toRef(() => {\n return props.position ? `${name}--${props.position}` : undefined;\n });\n return {\n positionClasses\n };\n}\n//# sourceMappingURL=position.js.map","// Utilities\nimport { computed, nextTick, onScopeDispose, reactive, resolveDynamicComponent, toRef } from 'vue';\nimport { deepEqual, getCurrentInstance, hasEvent, IN_BROWSER, isString, propsFactory } from \"../util/index.js\"; // Types\nexport function useRoute() {\n const vm = getCurrentInstance('useRoute');\n return computed(() => vm?.proxy?.$route);\n}\nexport function useRouter() {\n return getCurrentInstance('useRouter')?.proxy?.$router;\n}\nexport function useLink(props, attrs) {\n const RouterLink = resolveDynamicComponent('RouterLink');\n const isLink = toRef(() => !!(props.href || props.to));\n const isClickable = computed(() => {\n return isLink?.value || hasEvent(attrs, 'click') || hasEvent(props, 'click');\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({\n href\n }),\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 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 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}\nexport const makeRouterProps = propsFactory({\n href: String,\n replace: Boolean,\n to: [String, Object],\n exact: Boolean\n}, 'router');\nlet inTransition = false;\nexport function useBackButton(router, cb) {\n let popped = false;\n let removeBefore;\n let removeAfter;\n if (IN_BROWSER && router?.beforeEach) {\n nextTick(() => {\n window.addEventListener('popstate', onPopstate);\n removeBefore = router.beforeEach(() => {\n if (!inTransition) {\n inTransition = true;\n return new Promise(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 window.removeEventListener('popstate', onPopstate);\n removeBefore?.();\n removeAfter?.();\n });\n }\n function onPopstate(e) {\n if (e.state?.replaced) return;\n popped = true;\n setTimeout(() => popped = false);\n }\n}\n//# sourceMappingURL=router.js.map","// Utilities\nimport { nextTick, watch } from 'vue';\nimport { isBoolean } from \"../util/index.js\"; // Types\nexport function useSelectLink(link, select) {\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//# sourceMappingURL=selectLink.js.map","// Styles\nimport \"./VRipple.css\";\n\n// Utilities\nimport { isObject } from \"../../util/index.js\";\nimport { Box, getTargetBox } from \"../../util/box.js\"; // Types\nconst stopSymbol = Symbol('rippleStop');\nconst DELAY_RIPPLE = 80;\nfunction transform(el, value) {\n el.style.transform = value;\n el.style.webkitTransform = value;\n}\nfunction isTouchEvent(e) {\n return e.constructor.name === 'TouchEvent';\n}\nfunction isKeyboardEvent(e) {\n return e.constructor.name === 'KeyboardEvent';\n}\nconst calculate = (e, el, value = {}) => {\n let localX = 0;\n let localY = 0;\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 localX = point.x - offset.left;\n localY = point.y - offset.top;\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 const centerX = `${(el.clientWidth - radius * 2) / 2}px`;\n const centerY = `${(el.clientHeight - radius * 2) / 2}px`;\n const x = value.center ? centerX : `${localX - radius}px`;\n const y = value.center ? centerY : `${localY - radius}px`;\n return {\n radius,\n scale,\n x,\n y,\n centerX,\n centerY\n };\n};\nconst ripples = {\n /* eslint-disable max-statements */\n show(e, el, value = {}) {\n if (!el?._ripple?.enabled) {\n return;\n }\n const container = document.createElement('span');\n const animation = document.createElement('span');\n container.appendChild(animation);\n container.className = 'v-ripple__container';\n if (value.class) {\n container.className += ` ${value.class}`;\n }\n const {\n radius,\n scale,\n x,\n y,\n centerX,\n centerY\n } = calculate(e, el, value);\n const size = `${radius * 2}px`;\n animation.className = 'v-ripple__animation';\n animation.style.width = size;\n animation.style.height = size;\n el.appendChild(container);\n const computed = window.getComputedStyle(el);\n if (computed && computed.position === 'static') {\n el.style.position = 'relative';\n el.dataset.previousPosition = 'static';\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 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 hide(el) {\n if (!el?._ripple?.enabled) return;\n const ripples = el.getElementsByClassName('v-ripple__animation');\n if (ripples.length === 0) return;\n const animation = Array.from(ripples).findLast(ripple => !ripple.dataset.isHiding);\n if (!animation) return;else animation.dataset.isHiding = 'true';\n const diff = performance.now() - Number(animation.dataset.activated);\n const delay = Math.max(250 - diff, 0);\n setTimeout(() => {\n animation.classList.remove('v-ripple__animation--in');\n animation.classList.add('v-ripple__animation--out');\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 if (animation.parentNode?.parentNode === el) el.removeChild(animation.parentNode);\n }, 300);\n }, delay);\n }\n};\nfunction isRippleEnabled(value) {\n return typeof value === 'undefined' || !!value;\n}\nfunction rippleShow(e) {\n const value = {};\n const element = e.currentTarget;\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 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 value.center = element._ripple.centered || isKeyboardEvent(e);\n if (element._ripple.class) {\n value.class = element._ripple.class;\n }\n if (isTouchEvent(e)) {\n // already queued that shows or hides the ripple\n if (element._ripple.showTimerCommit) return;\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}\nfunction rippleStop(e) {\n e[stopSymbol] = true;\n}\nfunction rippleHide(e) {\n const element = e.currentTarget;\n if (!element?._ripple) return;\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 window.setTimeout(() => {\n if (element._ripple) {\n element._ripple.touched = false;\n }\n });\n ripples.hide(element);\n}\nfunction rippleCancelShow(e) {\n const element = e.currentTarget;\n if (!element?._ripple) return;\n if (element._ripple.showTimerCommit) {\n element._ripple.showTimerCommit = null;\n }\n window.clearTimeout(element._ripple.showTimer);\n}\nlet keyboardRipple = false;\nfunction keyboardRippleShow(e, keys) {\n if (!keyboardRipple && keys.includes(e.key)) {\n keyboardRipple = true;\n rippleShow(e);\n }\n}\nfunction keyboardRippleHide(e) {\n keyboardRipple = false;\n rippleHide(e);\n}\nfunction focusRippleHide(e) {\n if (keyboardRipple) {\n keyboardRipple = false;\n rippleHide(e);\n }\n}\nfunction updateRipple(el, binding, wasEnabled) {\n const {\n value,\n modifiers\n } = binding;\n const enabled = isRippleEnabled(value);\n if (!enabled) {\n ripples.hide(el);\n }\n el._ripple = el._ripple ?? {};\n el._ripple.enabled = enabled;\n el._ripple.centered = modifiers.center;\n el._ripple.circle = modifiers.circle;\n const bindingValue = isObject(value) ? value : {};\n if (bindingValue.class) {\n el._ripple.class = bindingValue.class;\n }\n const allowedKeys = bindingValue.keys ?? ['Enter', 'Space'];\n el._ripple.keyDownHandler = e => keyboardRippleShow(e, allowedKeys);\n if (enabled && !wasEnabled) {\n if (modifiers.stop) {\n el.addEventListener('touchstart', rippleStop, {\n passive: true\n });\n el.addEventListener('mousedown', rippleStop);\n return;\n }\n el.addEventListener('touchstart', rippleShow, {\n passive: true\n });\n el.addEventListener('touchend', rippleHide, {\n passive: true\n });\n el.addEventListener('touchmove', rippleCancelShow, {\n passive: true\n });\n el.addEventListener('touchcancel', rippleHide);\n el.addEventListener('mousedown', rippleShow);\n el.addEventListener('mouseup', rippleHide);\n el.addEventListener('mouseleave', rippleHide);\n el.addEventListener('keydown', el._ripple.keyDownHandler);\n el.addEventListener('keyup', keyboardRippleHide);\n el.addEventListener('blur', focusRippleHide);\n\n // Anchor tags can be dragged, causes other hides to fail - #1537\n el.addEventListener('dragstart', rippleHide, {\n passive: true\n });\n } else if (!enabled && wasEnabled) {\n removeListeners(el);\n }\n}\nfunction removeListeners(el) {\n el.removeEventListener('touchstart', rippleStop);\n el.removeEventListener('mousedown', rippleStop);\n el.removeEventListener('touchstart', rippleShow);\n el.removeEventListener('touchend', rippleHide);\n el.removeEventListener('touchmove', rippleCancelShow);\n el.removeEventListener('touchcancel', rippleHide);\n el.removeEventListener('mousedown', rippleShow);\n el.removeEventListener('mouseup', rippleHide);\n el.removeEventListener('mouseleave', rippleHide);\n if (el._ripple?.keyDownHandler) {\n el.removeEventListener('keydown', el._ripple.keyDownHandler);\n }\n el.removeEventListener('keyup', keyboardRippleHide);\n el.removeEventListener('blur', focusRippleHide);\n el.removeEventListener('dragstart', rippleHide);\n}\nfunction mounted(el, binding) {\n updateRipple(el, binding, false);\n}\nfunction unmounted(el) {\n removeListeners(el);\n delete el._ripple;\n}\nfunction updated(el, binding) {\n if (binding.value === binding.oldValue) {\n return;\n }\n const wasEnabled = isRippleEnabled(binding.oldValue);\n updateRipple(el, binding, wasEnabled);\n}\nexport const Ripple = {\n mounted,\n unmounted,\n updated\n};\nexport default Ripple;\n//# sourceMappingURL=index.js.map","import { createVNode as _createVNode, createElementVNode as _createElementVNode, mergeProps as _mergeProps } from \"vue\";\n// Styles\nimport \"./VBtn.css\";\n\n// Components\nimport { VBtnToggleSymbol } from \"../VBtnToggle/VBtnToggle.js\";\nimport { VDefaultsProvider } from \"../VDefaultsProvider/index.js\";\nimport { VIcon } from \"../VIcon/index.js\";\nimport { VProgressCircular } from \"../VProgressCircular/index.js\"; // Composables\nimport { makeBorderProps, useBorder } from \"../../composables/border.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeDensityProps, useDensity } from \"../../composables/density.js\";\nimport { makeDimensionProps, useDimension } from \"../../composables/dimensions.js\";\nimport { makeElevationProps, useElevation } from \"../../composables/elevation.js\";\nimport { makeGroupItemProps, useGroupItem } from \"../../composables/group.js\";\nimport { IconValue } from \"../../composables/icons.js\";\nimport { makeLoaderProps, useLoader } from \"../../composables/loader.js\";\nimport { makeLocationProps, useLocation } from \"../../composables/location.js\";\nimport { makePositionProps, usePosition } from \"../../composables/position.js\";\nimport { makeRoundedProps, useRounded } from \"../../composables/rounded.js\";\nimport { makeRouterProps, useLink } from \"../../composables/router.js\";\nimport { useSelectLink } from \"../../composables/selectLink.js\";\nimport { makeSizeProps, useSize } from \"../../composables/size.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\";\nimport { genOverlays, makeVariantProps, useVariant } from \"../../composables/variant.js\"; // Directives\nimport vRipple from \"../../directives/ripple/index.js\"; // Utilities\nimport { computed, toDisplayString, toRef, withDirectives } from 'vue';\nimport { genericComponent, isBoolean, propsFactory, useRender } from \"../../util/index.js\"; // Types\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],\n prependIcon: IconValue,\n appendIcon: IconValue,\n block: Boolean,\n readonly: Boolean,\n slim: Boolean,\n stacked: Boolean,\n spaced: String,\n ripple: {\n type: [Boolean, Object],\n default: true\n },\n text: {\n type: [String, Number, Boolean],\n default: undefined\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({\n tag: 'button'\n }),\n ...makeThemeProps(),\n ...makeVariantProps({\n variant: 'elevated'\n })\n}, 'VBtn');\nexport const VBtn = genericComponent()({\n name: 'VBtn',\n props: makeVBtnProps(),\n emits: {\n 'group:selected': val => true\n },\n setup(props, {\n attrs,\n slots\n }) {\n const {\n themeClasses\n } = provideTheme(props);\n const {\n borderClasses\n } = useBorder(props);\n const {\n densityClasses\n } = useDensity(props);\n const {\n dimensionStyles\n } = useDimension(props);\n const {\n elevationClasses\n } = useElevation(props);\n const {\n loaderClasses\n } = useLoader(props);\n const {\n locationStyles\n } = useLocation(props);\n const {\n positionClasses\n } = usePosition(props);\n const {\n roundedClasses,\n roundedStyles\n } = useRounded(props);\n const {\n sizeClasses,\n sizeStyles\n } = useSize(props);\n const group = useGroupItem(props, props.symbol, false);\n const link = useLink(props, attrs);\n const isActive = computed(() => {\n if (props.active !== undefined) {\n return props.active;\n }\n if (link.isRouterLink.value) {\n return link.isActive?.value;\n }\n return group?.isSelected.value;\n });\n const color = toRef(() => isActive.value ? props.activeColor ?? props.color : props.color);\n const variantProps = computed(() => {\n const showColor = group?.isSelected.value && (!link.isLink.value || link.isActive?.value) || !group || link.isActive?.value;\n return {\n color: showColor ? color.value ?? props.baseColor : props.baseColor,\n variant: props.variant\n };\n });\n const {\n colorClasses,\n colorStyles,\n variantClasses\n } = useVariant(variantProps);\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 return Object(props.value) === props.value ? JSON.stringify(props.value, null, 0) : props.value;\n });\n function onClick(e) {\n if (isDisabled.value || link.isLink.value && (e.metaKey || e.ctrlKey || e.shiftKey || e.button !== 0 || attrs.target === '_blank')) return;\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 useSelectLink(link, group?.select);\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 return withDirectives(_createVNode(Tag, _mergeProps(link.linkProps, {\n \"type\": Tag === 'a' ? undefined : 'button',\n \"class\": ['v-btn', group?.selectedClass.value, {\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 }, props.spaced ? ['v-btn--spaced', `v-btn--spaced-${props.spaced}`] : [], themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],\n \"style\": [colorStyles.value, dimensionStyles.value, locationStyles.value, sizeStyles.value, roundedStyles.value, props.style],\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 default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && _createElementVNode(\"span\", {\n \"key\": \"prepend\",\n \"class\": \"v-btn__prepend\"\n }, [!slots.prepend ? _createVNode(VIcon, {\n \"key\": \"prepend-icon\",\n \"icon\": props.prependIcon\n }, null) : _createVNode(VDefaultsProvider, {\n \"key\": \"prepend-defaults\",\n \"disabled\": !props.prependIcon,\n \"defaults\": {\n VIcon: {\n icon: props.prependIcon\n }\n }\n }, slots.prepend)]), _createElementVNode(\"span\", {\n \"class\": \"v-btn__content\",\n \"data-no-activator\": \"\"\n }, [!slots.default && hasIcon ? _createVNode(VIcon, {\n \"key\": \"content-icon\",\n \"icon\": props.icon\n }, null) : _createVNode(VDefaultsProvider, {\n \"key\": \"content-defaults\",\n \"disabled\": !hasIcon,\n \"defaults\": {\n VIcon: {\n icon: props.icon\n }\n }\n }, {\n default: () => [slots.default?.() ?? toDisplayString(props.text)]\n })]), !props.icon && hasAppend && _createElementVNode(\"span\", {\n \"key\": \"append\",\n \"class\": \"v-btn__append\"\n }, [!slots.append ? _createVNode(VIcon, {\n \"key\": \"append-icon\",\n \"icon\": props.appendIcon\n }, null) : _createVNode(VDefaultsProvider, {\n \"key\": \"append-defaults\",\n \"disabled\": !props.appendIcon,\n \"defaults\": {\n VIcon: {\n icon: props.appendIcon\n }\n }\n }, slots.append)]), !!props.loading && _createElementVNode(\"span\", {\n \"key\": \"loader\",\n \"class\": \"v-btn__loader\"\n }, [slots.loader?.() ?? _createVNode(VProgressCircular, {\n \"color\": isBoolean(props.loading) ? undefined : props.loading,\n \"indeterminate\": true,\n \"width\": \"2\"\n }, null)])]\n }), [[vRipple, !isDisabled.value && props.ripple, '', {\n center: !!props.icon\n }]]);\n });\n return {\n group\n };\n }\n});\n//# sourceMappingURL=VBtn.js.map","import { mergeProps as _mergeProps, createVNode as _createVNode } from \"vue\";\n// Components\nimport { makeVBtnProps, VBtn } from \"../VBtn/VBtn.js\"; // Utilities\nimport { genericComponent, omit, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVAppBarNavIconProps = propsFactory({\n ...omit(makeVBtnProps({\n icon: '$menu',\n variant: 'text'\n }), ['spaced'])\n}, 'VAppBarNavIcon');\nexport const VAppBarNavIcon = genericComponent()({\n name: 'VAppBarNavIcon',\n props: makeVAppBarNavIconProps(),\n setup(props, {\n slots\n }) {\n useRender(() => _createVNode(VBtn, _mergeProps(props, {\n \"class\": ['v-app-bar-nav-icon']\n }), slots));\n return {};\n }\n});\n//# sourceMappingURL=VAppBarNavIcon.js.map","import { mergeProps as _mergeProps, createVNode as _createVNode } from \"vue\";\n// Components\nimport { makeVToolbarTitleProps, VToolbarTitle } from \"../VToolbar/VToolbarTitle.js\"; // Utilities\nimport { genericComponent, useRender } from \"../../util/index.js\"; // Types\nexport const VAppBarTitle = genericComponent()({\n name: 'VAppBarTitle',\n props: makeVToolbarTitleProps(),\n setup(props, {\n slots\n }) {\n useRender(() => _createVNode(VToolbarTitle, _mergeProps(props, {\n \"class\": \"v-app-bar-title\"\n }), slots));\n return {};\n }\n});\n//# sourceMappingURL=VAppBarTitle.js.map","// Utilities\nimport { createSimpleFunctional } from \"../../util/index.js\";\nexport const VAlertTitle = createSimpleFunctional('v-alert-title');\n//# sourceMappingURL=VAlertTitle.js.map","// Utilities\nimport { computed } from 'vue';\nimport { propsFactory } from \"../util/index.js\"; // Types\n// Types\n// Composables\nexport const makeIconSizeProps = propsFactory({\n iconSize: [Number, String],\n iconSizes: {\n type: Array,\n default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]\n }\n}, 'iconSize');\nexport function useIconSizes(props, fallback) {\n const iconSize = computed(() => {\n const iconSizeMap = new Map(props.iconSizes);\n const _iconSize = props.iconSize ?? fallback() ?? 'default';\n return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;\n });\n return {\n iconSize\n };\n}\n//# sourceMappingURL=iconSizes.js.map","import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, mergeProps as _mergeProps, createVNode as _createVNode } from \"vue\";\n// Styles\nimport \"./VAlert.css\";\n\n// Components\nimport { VAlertTitle } from \"./VAlertTitle.js\";\nimport { VBtn } from \"../VBtn/index.js\";\nimport { VDefaultsProvider } from \"../VDefaultsProvider/index.js\";\nimport { VIcon } from \"../VIcon/index.js\"; // Composables\nimport { useTextColor } from \"../../composables/color.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeDensityProps, useDensity } from \"../../composables/density.js\";\nimport { makeDimensionProps, useDimension } from \"../../composables/dimensions.js\";\nimport { makeElevationProps, useElevation } from \"../../composables/elevation.js\";\nimport { IconValue } from \"../../composables/icons.js\";\nimport { makeIconSizeProps, useIconSizes } from \"../../composables/iconSizes.js\";\nimport { useLocale } from \"../../composables/locale.js\";\nimport { makeLocationProps, useLocation } from \"../../composables/location.js\";\nimport { makePositionProps, usePosition } from \"../../composables/position.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\";\nimport { makeRoundedProps, useRounded } from \"../../composables/rounded.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\";\nimport { genOverlays, makeVariantProps, useVariant } from \"../../composables/variant.js\"; // Utilities\nimport { toRef } from 'vue';\nimport { genericComponent, isBoolean, propsFactory } from \"../../util/index.js\"; // Types\nconst allowedTypes = ['success', 'info', 'warning', 'error'];\nexport const makeVAlertProps = propsFactory({\n border: {\n type: [Boolean, String],\n validator: val => {\n return isBoolean(val) || ['top', 'end', 'bottom', 'start'].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],\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,\n validator: val => allowedTypes.includes(val)\n },\n ...makeComponentProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makeIconSizeProps(),\n ...makeLocationProps(),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n ...makeVariantProps({\n variant: 'flat'\n })\n}, 'VAlert');\nexport const VAlert = genericComponent()({\n name: 'VAlert',\n props: makeVAlertProps(),\n emits: {\n 'click:close': e => true,\n 'update:modelValue': value => true\n },\n setup(props, {\n emit,\n slots\n }) {\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 return props.icon ?? `$${props.type}`;\n });\n const {\n iconSize\n } = useIconSizes(props, () => props.prominent ? 44 : undefined);\n const {\n themeClasses\n } = provideTheme(props);\n const {\n colorClasses,\n colorStyles,\n variantClasses\n } = useVariant(() => ({\n color: props.color ?? props.type,\n variant: props.variant\n }));\n const {\n densityClasses\n } = useDensity(props);\n const {\n dimensionStyles\n } = useDimension(props);\n const {\n elevationClasses\n } = useElevation(props);\n const {\n locationStyles\n } = useLocation(props);\n const {\n positionClasses\n } = usePosition(props);\n const {\n roundedClasses,\n roundedStyles\n } = useRounded(props);\n const {\n textColorClasses,\n textColorStyles\n } = useTextColor(() => props.borderColor);\n const {\n t\n } = useLocale();\n const closeProps = toRef(() => ({\n 'aria-label': t(props.closeLabel),\n onClick(e) {\n isActive.value = false;\n emit('click:close', e);\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 const iconProps = {\n density: props.density,\n icon: icon.value,\n size: props.iconSize || props.prominent ? iconSize.value : undefined\n };\n return isActive.value && _createVNode(props.tag, {\n \"class\": _normalizeClass(['v-alert', props.border && {\n 'v-alert--border': !!props.border,\n [`v-alert--border-${props.border === true ? 'start' : props.border}`]: true\n }, {\n 'v-alert--prominent': props.prominent\n }, themeClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, variantClasses.value, props.class]),\n \"style\": _normalizeStyle([colorStyles.value, dimensionStyles.value, locationStyles.value, roundedStyles.value, props.style]),\n \"role\": \"alert\"\n }, {\n default: () => [genOverlays(false, 'v-alert'), props.border && _createElementVNode(\"div\", {\n \"key\": \"border\",\n \"class\": _normalizeClass(['v-alert__border', textColorClasses.value]),\n \"style\": _normalizeStyle(textColorStyles.value)\n }, null), hasPrepend && _createElementVNode(\"div\", {\n \"key\": \"prepend\",\n \"class\": \"v-alert__prepend\"\n }, [!slots.prepend ? _createVNode(VIcon, _mergeProps({\n \"key\": \"prepend-icon\"\n }, iconProps), null) : _createVNode(VDefaultsProvider, {\n \"key\": \"prepend-defaults\",\n \"disabled\": !icon.value,\n \"defaults\": {\n VIcon: {\n ...iconProps\n }\n }\n }, slots.prepend)]), _createElementVNode(\"div\", {\n \"class\": \"v-alert__content\"\n }, [hasTitle && _createVNode(VAlertTitle, {\n \"key\": \"title\"\n }, {\n default: () => [slots.title?.() ?? props.title]\n }), slots.text?.() ?? props.text, slots.default?.()]), slots.append && _createElementVNode(\"div\", {\n \"key\": \"append\",\n \"class\": \"v-alert__append\"\n }, [slots.append()]), hasClose && _createElementVNode(\"div\", {\n \"key\": \"close\",\n \"class\": \"v-alert__close\"\n }, [!slots.close ? _createVNode(VBtn, _mergeProps({\n \"key\": \"close-btn\",\n \"icon\": props.closeIcon,\n \"size\": \"x-small\",\n \"variant\": \"text\"\n }, closeProps.value), null) : _createVNode(VDefaultsProvider, {\n \"key\": \"close-defaults\",\n \"defaults\": {\n VBtn: {\n icon: props.closeIcon,\n size: 'x-small',\n variant: 'text'\n }\n }\n }, {\n default: () => [slots.close?.({\n props: closeProps.value\n })]\n })])]\n });\n };\n }\n});\n//# sourceMappingURL=VAlert.js.map","import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createVNode as _createVNode } from \"vue\";\n// Styles\nimport \"./VThemeProvider.css\";\n\n// Composables\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\"; // Utilities\nimport { genericComponent, propsFactory } from \"../../util/index.js\";\nexport const makeVThemeProviderProps = propsFactory({\n withBackground: Boolean,\n ...makeComponentProps(),\n ...makeThemeProps(),\n ...makeTagProps()\n}, 'VThemeProvider');\nexport const VThemeProvider = genericComponent()({\n name: 'VThemeProvider',\n props: makeVThemeProviderProps(),\n setup(props, {\n slots\n }) {\n const {\n themeClasses\n } = provideTheme(props);\n return () => {\n if (!props.withBackground) return slots.default?.();\n return _createVNode(props.tag, {\n \"class\": _normalizeClass(['v-theme-provider', themeClasses.value, props.class]),\n \"style\": _normalizeStyle(props.style)\n }, {\n default: () => [slots.default?.()]\n });\n };\n }\n});\n//# sourceMappingURL=VThemeProvider.js.map","import { createVNode as _createVNode, vShow as _vShow, mergeProps as _mergeProps, createElementVNode as _createElementVNode, withDirectives as _withDirectives } from \"vue\";\n// Styles\nimport \"./VBadge.css\";\n\n// Components\nimport { VIcon } from \"../VIcon/index.js\";\nimport { VThemeProvider } from \"../VThemeProvider/index.js\"; // Composables\nimport { useBackgroundColor, useTextColor } from \"../../composables/color.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeDimensionProps, useDimension } from \"../../composables/dimensions.js\";\nimport { IconValue } from \"../../composables/icons.js\";\nimport { useLocale } from \"../../composables/locale.js\";\nimport { makeLocationProps, useLocation } from \"../../composables/location.js\";\nimport { makeRoundedProps, useRounded } from \"../../composables/rounded.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, useTheme } from \"../../composables/theme.js\";\nimport { makeTransitionProps, MaybeTransition } from \"../../composables/transition.js\"; // Utilities\nimport { toRef } from 'vue';\nimport { convertToUnit, genericComponent, pickWithRest, propsFactory, useRender } from \"../../util/index.js\";\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 ...makeComponentProps(),\n ...makeLocationProps({\n location: 'top end'\n }),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n ...makeTransitionProps({\n transition: 'scale-rotate-transition'\n }),\n ...makeDimensionProps()\n}, 'VBadge');\nexport const VBadge = genericComponent()({\n name: 'VBadge',\n inheritAttrs: false,\n props: makeVBadgeProps(),\n setup(props, ctx) {\n const {\n backgroundColorClasses,\n backgroundColorStyles\n } = useBackgroundColor(() => props.color);\n const {\n roundedClasses,\n roundedStyles\n } = useRounded(props);\n const {\n t\n } = useLocale();\n const {\n textColorClasses,\n textColorStyles\n } = useTextColor(() => props.textColor);\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 const {\n locationStyles\n } = useLocation(props, true, side => {\n const base = props.floating ? props.dot ? 2 : 4 : props.dot ? Number(props.dotSize ?? 8) : 12;\n return base + (['top', 'bottom'].includes(side) ? Number(props.offsetY ?? 0) : ['left', 'right'].includes(side) ? Number(props.offsetX ?? 0) : 0);\n });\n const {\n dimensionStyles\n } = useDimension(props);\n useRender(() => {\n const value = Number(props.content);\n const content = !props.max || isNaN(value) ? props.content : value <= Number(props.max) ? value : `${props.max}+`;\n const [badgeAttrs, attrs] = pickWithRest(ctx.attrs, ['aria-atomic', 'aria-label', 'aria-live', 'role', 'title']);\n return _createVNode(props.tag, _mergeProps({\n \"class\": ['v-badge', {\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 }, props.class]\n }, attrs, {\n \"style\": props.style\n }), {\n default: () => [_createElementVNode(\"div\", {\n \"class\": \"v-badge__wrapper\"\n }, [ctx.slots.default?.(), _createVNode(MaybeTransition, {\n \"transition\": props.transition\n }, {\n default: () => [_withDirectives(_createElementVNode(\"span\", _mergeProps({\n \"class\": ['v-badge__badge', themeClasses.value, backgroundColorClasses.value, roundedClasses.value, textColorClasses.value],\n \"style\": [backgroundColorStyles.value, textColorStyles.value, dimensionStyles.value, props.inline ? {} : locationStyles.value, props.dot && props.dotSize ? {\n width: convertToUnit(props.dotSize),\n height: convertToUnit(props.dotSize)\n } : {}, roundedStyles.value],\n \"aria-atomic\": \"true\",\n \"aria-label\": t(props.label, value),\n \"aria-live\": \"polite\",\n \"role\": \"status\"\n }, badgeAttrs), [_createVNode(VThemeProvider, {\n \"theme\": props.theme\n }, {\n default: () => [props.dot ? undefined : ctx.slots.badge ? ctx.slots.badge?.() : props.icon ? _createVNode(VIcon, {\n \"icon\": props.icon\n }, null) : content]\n })]), [[_vShow, props.modelValue]])]\n })])]\n });\n });\n return {};\n }\n});\n//# sourceMappingURL=VBadge.js.map","import { createVNode as _createVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\";\n// Styles\nimport \"./VAvatar.css\";\n\n// Components\nimport { VBadge } from \"../VBadge/VBadge.js\";\nimport { VDefaultsProvider } from \"../VDefaultsProvider/index.js\";\nimport { VIcon } from \"../VIcon/index.js\";\nimport { VImg } from \"../VImg/index.js\"; // Composables\nimport { makeBorderProps, useBorder } from \"../../composables/border.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeDensityProps, useDensity } from \"../../composables/density.js\";\nimport { IconValue } from \"../../composables/icons.js\";\nimport { makeRoundedProps, useRounded } from \"../../composables/rounded.js\";\nimport { makeSizeProps, useSize } from \"../../composables/size.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\";\nimport { genOverlays, makeVariantProps, useVariant } from \"../../composables/variant.js\"; // Utilities\nimport { computed } from 'vue';\nimport { genericComponent, isObject, isString, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVAvatarProps = propsFactory({\n badge: {\n type: [Boolean, Object],\n default: false\n },\n start: Boolean,\n end: Boolean,\n icon: IconValue,\n image: String,\n text: String,\n ...makeBorderProps(),\n ...makeComponentProps(),\n ...makeDensityProps(),\n ...makeRoundedProps(),\n ...makeSizeProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n ...makeVariantProps({\n variant: 'flat'\n })\n}, 'VAvatar');\nexport const VAvatar = genericComponent()({\n name: 'VAvatar',\n props: makeVAvatarProps(),\n setup(props, {\n slots\n }) {\n const {\n themeClasses\n } = provideTheme(props);\n const {\n borderClasses\n } = useBorder(props);\n const {\n colorClasses,\n colorStyles,\n variantClasses\n } = useVariant(props);\n const {\n densityClasses\n } = useDensity(props);\n const {\n roundedClasses,\n roundedStyles\n } = useRounded(props);\n const {\n sizeClasses,\n sizeStyles\n } = useSize(props);\n const badgeDotSize = computed(() => {\n switch (props.size) {\n case 'x-small':\n return 8;\n case 'small':\n return 10;\n case 'large':\n return 14;\n case 'x-large':\n return 16;\n default:\n return 12;\n }\n });\n const badgeOffset = computed(() => {\n const {\n floating\n } = isObject(props.badge) ? props.badge : {};\n return (floating ? badgeDotSize.value / 2 : 0) - 1.5;\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 useRender(() => {\n const avatar = _createVNode(props.tag, {\n \"class\": _normalizeClass(['v-avatar', {\n 'v-avatar--start': props.start,\n 'v-avatar--end': props.end\n }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class]),\n \"style\": _normalizeStyle([colorStyles.value, sizeStyles.value, roundedStyles.value, props.style])\n }, {\n default: () => [!slots.default ? props.image ? _createVNode(VImg, {\n \"key\": \"image\",\n \"src\": props.image,\n \"alt\": \"\",\n \"cover\": true\n }, null) : props.icon ? _createVNode(VIcon, {\n \"key\": \"icon\",\n \"icon\": props.icon\n }, null) : props.text : _createVNode(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 default: () => [slots.default()]\n }), genOverlays(false, 'v-avatar')]\n });\n return props.badge ? _createVNode(VBadge, badgeProps.value, {\n default: () => avatar,\n badge: slots.badge\n }) : avatar;\n });\n return {};\n }\n});\n//# sourceMappingURL=VAvatar.js.map","import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode } from \"vue\";\n// Styles\nimport \"./VLabel.css\";\n\n// Composables\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeThemeProps } from \"../../composables/theme.js\"; // Utilities\nimport { EventProp, genericComponent, propsFactory, useRender } from \"../../util/index.js\";\nexport const makeVLabelProps = propsFactory({\n text: String,\n onClick: EventProp(),\n ...makeComponentProps(),\n ...makeThemeProps()\n}, 'VLabel');\nexport const VLabel = genericComponent()({\n name: 'VLabel',\n props: makeVLabelProps(),\n setup(props, {\n slots\n }) {\n useRender(() => _createElementVNode(\"label\", {\n \"class\": _normalizeClass(['v-label', {\n 'v-label--clickable': !!props.onClick\n }, props.class]),\n \"style\": _normalizeStyle(props.style),\n \"onClick\": props.onClick\n }, [props.text, slots.default?.()]));\n return {};\n }\n});\n//# sourceMappingURL=VLabel.js.map","import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode } from \"vue\";\n// Styles\nimport \"./VSelectionControlGroup.css\";\n\n// Composables\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { provideDefaults } from \"../../composables/defaults.js\";\nimport { makeDensityProps } from \"../../composables/density.js\";\nimport { IconValue } from \"../../composables/icons.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\";\nimport { makeThemeProps } from \"../../composables/theme.js\"; // Utilities\nimport { onScopeDispose, provide, toRef, useId } from 'vue';\nimport { deepEqual, genericComponent, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const VSelectionControlGroupSymbol = Symbol.for('vuetify:selection-control-group');\nexport const makeSelectionControlGroupProps = propsFactory({\n color: String,\n disabled: {\n type: Boolean,\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],\n default: true\n },\n multiple: {\n type: Boolean,\n default: null\n },\n name: String,\n readonly: {\n type: Boolean,\n default: null\n },\n modelValue: null,\n type: String,\n valueComparator: {\n type: Function,\n default: deepEqual\n },\n ...makeComponentProps(),\n ...makeDensityProps(),\n ...makeThemeProps()\n}, 'SelectionControlGroup');\nexport const makeVSelectionControlGroupProps = propsFactory({\n ...makeSelectionControlGroupProps({\n defaultsTarget: 'VSelectionControl'\n })\n}, 'VSelectionControlGroup');\nexport const VSelectionControlGroup = genericComponent()({\n name: 'VSelectionControlGroup',\n props: makeVSelectionControlGroupProps(),\n emits: {\n 'update:modelValue': value => true\n },\n setup(props, {\n slots\n }) {\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 const updateHandlers = new Set();\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 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 useRender(() => _createElementVNode(\"div\", {\n \"class\": _normalizeClass(['v-selection-control-group', {\n 'v-selection-control-group--inline': props.inline\n }, props.class]),\n \"style\": _normalizeStyle(props.style),\n \"role\": props.type === 'radio' ? 'radiogroup' : undefined\n }, [slots.default?.()]));\n return {};\n }\n});\n//# sourceMappingURL=VSelectionControlGroup.js.map","import { mergeProps as _mergeProps, createElementVNode as _createElementVNode, Fragment as _Fragment, createVNode as _createVNode, normalizeClass as _normalizeClass, withDirectives as _withDirectives, normalizeStyle as _normalizeStyle } from \"vue\";\n// Styles\nimport \"./VSelectionControl.css\";\n\n// Components\nimport { VIcon } from \"../VIcon/index.js\";\nimport { VLabel } from \"../VLabel/index.js\";\nimport { makeSelectionControlGroupProps, VSelectionControlGroupSymbol } from \"../VSelectionControlGroup/VSelectionControlGroup.js\"; // Composables\nimport { useBackgroundColor, useTextColor } from \"../../composables/color.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { useDensity } from \"../../composables/density.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\"; // Directives\nimport vRipple from \"../../directives/ripple/index.js\"; // Utilities\nimport { computed, inject, nextTick, ref, shallowRef, toRef, useId } from 'vue';\nimport { filterInputAttrs, genericComponent, matchesSelector, propsFactory, useRender, wrapInArray } from \"../../util/index.js\"; // Types\nexport const makeVSelectionControlProps = propsFactory({\n indeterminate: Boolean,\n label: String,\n baseColor: String,\n trueValue: null,\n falseValue: null,\n value: null,\n ...makeComponentProps(),\n ...makeSelectionControlGroupProps()\n}, 'VSelectionControl');\nexport function useSelectionControl(props) {\n const group = inject(VSelectionControlGroupSymbol, undefined);\n const {\n densityClasses\n } = useDensity(props);\n const modelValue = useProxiedModel(props, 'modelValue');\n const trueValue = computed(() => props.trueValue !== undefined ? props.trueValue : props.value !== undefined ? props.value : true);\n const falseValue = computed(() => props.falseValue !== undefined ? props.falseValue : false);\n const isMultiple = computed(() => !!props.multiple || props.multiple == null && Array.isArray(modelValue.value));\n const model = computed({\n get() {\n const val = group ? group.modelValue.value : modelValue.value;\n return isMultiple.value ? wrapInArray(val).some(v => props.valueComparator(v, trueValue.value)) : props.valueComparator(val, trueValue.value);\n },\n set(val) {\n if (props.readonly) return;\n const currentValue = val ? trueValue.value : falseValue.value;\n let newVal = currentValue;\n if (isMultiple.value) {\n newVal = val ? [...wrapInArray(modelValue.value), currentValue] : wrapInArray(modelValue.value).filter(item => !props.valueComparator(item, trueValue.value));\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 {\n textColorClasses,\n textColorStyles\n } = useTextColor(() => {\n if (props.error || props.disabled) return undefined;\n return isActive.value ? props.color : props.baseColor;\n });\n const {\n backgroundColorClasses,\n backgroundColorStyles\n } = useBackgroundColor(() => {\n return isActive.value && !props.error && !props.disabled ? props.color : props.baseColor;\n });\n const icon = computed(() => props.indeterminate ? props.indeterminateIcon : model.value ? props.trueIcon : props.falseIcon);\n return {\n group,\n densityClasses,\n trueValue,\n falseValue,\n model,\n textColorClasses,\n textColorStyles,\n backgroundColorClasses,\n backgroundColorStyles,\n icon\n };\n}\nexport const VSelectionControl = genericComponent()({\n name: 'VSelectionControl',\n directives: {\n vRipple\n },\n inheritAttrs: false,\n props: makeVSelectionControlProps(),\n emits: {\n 'update:modelValue': value => true\n },\n setup(props, {\n attrs,\n slots\n }) {\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();\n const id = toRef(() => props.id || `input-${uid}`);\n const isInteractive = toRef(() => !props.disabled && !props.readonly);\n group?.onForceUpdate(() => {\n if (input.value) {\n input.value.checked = model.value;\n }\n });\n function onFocus(e) {\n if (props.disabled) return;\n isFocused.value = true;\n if (matchesSelector(e.target, ':focus-visible') !== false) {\n isFocusVisible.value = true;\n }\n }\n function onBlur() {\n isFocused.value = false;\n isFocusVisible.value = false;\n }\n function onClickLabel(e) {\n e.stopPropagation();\n }\n function onInput(e) {\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 return;\n }\n if (props.readonly && group) {\n nextTick(() => group.forceUpdate());\n }\n model.value = e.target.checked;\n }\n useRender(() => {\n const label = slots.label ? slots.label({\n label: props.label,\n props: {\n for: id.value\n }\n }) : props.label;\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);\n const inputNode = _createElementVNode(\"input\", _mergeProps({\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), null);\n return _createElementVNode(\"div\", _mergeProps({\n \"class\": ['v-selection-control', {\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 }, densityClasses.value, props.class]\n }, rootAttrs, {\n \"style\": props.style\n }), [_createElementVNode(\"div\", {\n \"class\": _normalizeClass(['v-selection-control__wrapper', textColorClasses.value]),\n \"style\": _normalizeStyle(textColorStyles.value)\n }, [slots.default?.({\n backgroundColorClasses,\n backgroundColorStyles\n }), _withDirectives(_createElementVNode(\"div\", {\n \"class\": _normalizeClass(['v-selection-control__input'])\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 }) ?? _createElementVNode(_Fragment, null, [icon.value && _createVNode(VIcon, {\n \"key\": \"icon\",\n \"icon\": icon.value\n }, null), inputNode])]), [[vRipple, !props.disabled && !props.readonly && props.ripple, null, {\n center: true,\n circle: true\n }]])]), label && _createVNode(VLabel, {\n \"for\": id.value,\n \"onClick\": onClickLabel\n }, {\n default: () => [label]\n })]);\n });\n return {\n isFocused,\n input\n };\n }\n});\n//# sourceMappingURL=VSelectionControl.js.map","import { mergeProps as _mergeProps, createVNode as _createVNode } from \"vue\";\n// Components\nimport { makeVSelectionControlProps, VSelectionControl } from \"../VSelectionControl/VSelectionControl.js\"; // Composables\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\"; // Utilities\nimport { genericComponent, omit, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVCheckboxBtnProps = propsFactory({\n ...makeVSelectionControlProps({\n falseIcon: '$checkboxOff',\n trueIcon: '$checkboxOn',\n indeterminateIcon: '$checkboxIndeterminate'\n })\n}, 'VCheckboxBtn');\nexport const VCheckboxBtn = genericComponent()({\n name: 'VCheckboxBtn',\n props: makeVCheckboxBtnProps(),\n emits: {\n 'update:modelValue': value => true,\n 'update:indeterminate': value => true\n },\n setup(props, {\n slots\n }) {\n const indeterminate = useProxiedModel(props, 'indeterminate');\n const model = useProxiedModel(props, 'modelValue');\n function onChange(v) {\n if (indeterminate.value) {\n indeterminate.value = false;\n }\n }\n useRender(() => {\n const controlProps = omit(VSelectionControl.filterProps(props), ['modelValue']);\n return _createVNode(VSelectionControl, _mergeProps(controlProps, {\n \"modelValue\": model.value,\n \"onUpdate:modelValue\": [$event => model.value = $event, onChange],\n \"class\": ['v-checkbox-btn', props.class],\n \"style\": props.style,\n \"type\": \"checkbox\",\n \"aria-checked\": indeterminate.value ? 'mixed' : undefined\n }), slots);\n });\n return {};\n }\n});\n//# sourceMappingURL=VCheckboxBtn.js.map","import { mergeProps as _mergeProps, createVNode as _createVNode } from \"vue\";\n// Components\nimport { VIcon } from \"../VIcon/index.js\"; // Composables\nimport { useLocale } from \"../../composables/locale.js\"; // Utilities\nimport { callEvent } from \"../../util/index.js\"; // Types\nexport function useInputIcon(props) {\n const {\n t\n } = useLocale();\n function InputIcon({\n name,\n color,\n ...attrs\n }) {\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}`];\n function onKeydown(e) {\n if (e.key !== 'Enter' && e.key !== ' ') return;\n e.preventDefault();\n e.stopPropagation();\n callEvent(listener, new PointerEvent('click', e));\n }\n const label = listener && localeKey ? t(`$vuetify.input.${localeKey}`, props.label ?? '') : undefined;\n return _createVNode(VIcon, _mergeProps({\n \"icon\": props[`${name}Icon`],\n \"aria-label\": label,\n \"onClick\": listener,\n \"onKeydown\": onKeydown,\n \"color\": color\n }, attrs), null);\n }\n return {\n InputIcon\n };\n}\n//# sourceMappingURL=InputIcon.js.map","import { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createVNode as _createVNode } from \"vue\";\n// Styles\nimport \"./VMessages.css\";\n\n// Components\nimport { VSlideYTransition } from \"../transitions/index.js\"; // Composables\nimport { useTextColor } from \"../../composables/color.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeTransitionProps, MaybeTransition } from \"../../composables/transition.js\"; // Utilities\nimport { computed } from 'vue';\nimport { genericComponent, propsFactory, useRender, wrapInArray } from \"../../util/index.js\"; // Types\nexport const makeVMessagesProps = propsFactory({\n active: Boolean,\n color: String,\n messages: {\n type: [Array, String],\n default: () => []\n },\n ...makeComponentProps(),\n ...makeTransitionProps({\n transition: {\n component: VSlideYTransition,\n leaveAbsolute: true,\n group: true\n }\n })\n}, 'VMessages');\nexport const VMessages = genericComponent()({\n name: 'VMessages',\n props: makeVMessagesProps(),\n setup(props, {\n slots\n }) {\n const messages = computed(() => wrapInArray(props.messages));\n const {\n textColorClasses,\n textColorStyles\n } = useTextColor(() => props.color);\n useRender(() => _createVNode(MaybeTransition, {\n \"transition\": props.transition,\n \"tag\": \"div\",\n \"class\": _normalizeClass(['v-messages', textColorClasses.value, props.class]),\n \"style\": _normalizeStyle([textColorStyles.value, props.style])\n }, {\n default: () => [props.active && messages.value.map((message, i) => _createElementVNode(\"div\", {\n \"class\": \"v-messages__message\",\n \"key\": `${i}-${messages.value}`\n }, [slots.message ? slots.message({\n message\n }) : message]))]\n }));\n return {};\n }\n});\n//# sourceMappingURL=VMessages.js.map","// Composables\nimport { useProxiedModel } from \"./proxiedModel.js\"; // Utilities\nimport { toRef } from 'vue';\nimport { EventProp, getCurrentInstanceName, propsFactory } from \"../util/index.js\"; // Types\n// Composables\nexport const makeFocusProps = propsFactory({\n focused: Boolean,\n 'onUpdate:focused': EventProp()\n}, 'focus');\nexport function useFocus(props, name = getCurrentInstanceName()) {\n const isFocused = useProxiedModel(props, 'focused');\n const focusClasses = toRef(() => {\n return {\n [`${name}--focused`]: isFocused.value\n };\n });\n function focus() {\n isFocused.value = true;\n }\n function blur() {\n isFocused.value = false;\n }\n return {\n focusClasses,\n isFocused,\n focus,\n blur\n };\n}\n//# sourceMappingURL=focus.js.map","// Composables\nimport { useProxiedModel } from \"./proxiedModel.js\"; // Utilities\nimport { computed, inject, markRaw, provide, ref, shallowRef, toRef, watch } from 'vue';\nimport { consoleWarn, propsFactory } from \"../util/index.js\"; // Types\nexport const FormKey = Symbol.for('vuetify:form');\nexport const makeFormProps = propsFactory({\n disabled: Boolean,\n fastFail: Boolean,\n readonly: Boolean,\n modelValue: {\n type: Boolean,\n default: null\n },\n validateOn: {\n type: String,\n default: 'input'\n }\n}, 'form');\nexport function createForm(props) {\n const model = useProxiedModel(props, 'modelValue');\n const isDisabled = toRef(() => props.disabled);\n const isReadonly = toRef(() => props.readonly);\n const isValidating = shallowRef(false);\n const items = ref([]);\n const errors = ref([]);\n async function validate() {\n const results = [];\n let valid = true;\n errors.value = [];\n isValidating.value = true;\n for (const item of items.value) {\n const itemErrorMessages = await item.validate();\n if (itemErrorMessages.length > 0) {\n valid = false;\n results.push({\n id: item.id,\n errorMessages: itemErrorMessages\n });\n }\n if (!valid && props.fastFail) break;\n }\n errors.value = results;\n isValidating.value = false;\n return {\n valid,\n errors: errors.value\n };\n }\n function reset() {\n items.value.forEach(item => item.reset());\n }\n function resetValidation() {\n items.value.forEach(item => item.resetValidation());\n }\n watch(items, () => {\n let valid = 0;\n let invalid = 0;\n const results = [];\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 errors.value = results;\n model.value = invalid > 0 ? false : valid === items.value.length ? true : null;\n }, {\n deep: true,\n flush: 'post'\n });\n provide(FormKey, {\n register: ({\n id,\n vm,\n validate,\n reset,\n resetValidation\n }) => {\n if (items.value.some(item => item.id === id)) {\n consoleWarn(`Duplicate input name \"${id}\"`);\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 if (!found) return;\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 return {\n errors,\n isDisabled,\n isReadonly,\n isValidating,\n isValid: model,\n items,\n validate,\n reset,\n resetValidation\n };\n}\nexport function useForm(props) {\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//# sourceMappingURL=form.js.map","// Composables\nimport { makeFocusProps } from \"./focus.js\";\nimport { useForm } from \"./form.js\";\nimport { useProxiedModel } from \"./proxiedModel.js\";\nimport { useRules } from \"./rules/index.js\";\nimport { useToggleScope } from \"./toggleScope.js\"; // Utilities\nimport { computed, nextTick, onBeforeMount, onBeforeUnmount, onMounted, ref, shallowRef, unref, useId, watch } from 'vue';\nimport { getCurrentInstance, getCurrentInstanceName, isFunction, isString, isUndefined, propsFactory, wrapInArray } from \"../util/index.js\"; // Types\nexport const makeValidationProps = propsFactory({\n disabled: {\n type: Boolean,\n default: null\n },\n error: Boolean,\n errorMessages: {\n type: [Array, String],\n default: () => []\n },\n maxErrors: {\n type: [Number, String],\n default: 1\n },\n name: String,\n label: String,\n readonly: {\n type: Boolean,\n default: null\n },\n rules: {\n type: Array,\n default: () => []\n },\n modelValue: null,\n validateOn: String,\n validationValue: null,\n ...makeFocusProps()\n}, 'validation');\nexport function useValidation(props, name = getCurrentInstanceName(), id = useId()) {\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([]);\n const isPristine = shallowRef(true);\n const isDirty = computed(() => !!(wrapInArray(model.value === '' ? null : model.value).length || wrapInArray(validationModel.value === '' ? null : validationModel.value).length));\n const errorMessages = computed(() => {\n return props.errorMessages?.length ? wrapInArray(props.errorMessages).concat(internalErrorMessages.value).slice(0, Math.max(0, Number(props.maxErrors))) : 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 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 const vm = getCurrentInstance('validation');\n const uid = computed(() => props.name ?? unref(id));\n onBeforeMount(() => {\n form.register?.({\n id: uid.value,\n vm,\n validate,\n reset,\n resetValidation\n });\n });\n onBeforeUnmount(() => {\n form.unregister?.(uid.value);\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 useToggleScope(() => validateOn.value.input || validateOn.value.invalidInput && isValid.value === false, () => {\n watch(validationModel, () => {\n if (!isResetting) validate();\n });\n });\n useToggleScope(() => validateOn.value.blur, () => {\n watch(() => props.focused, val => {\n if (!val) validate();\n });\n });\n watch([isValid, errorMessages], () => {\n form.update?.(uid.value, isValid.value, errorMessages.value);\n });\n async function reset() {\n isResetting = true;\n model.value = null;\n await nextTick();\n isResetting = false;\n await resetValidation();\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 async function validate(silent = false) {\n const results = [];\n isValidating.value = true;\n for (const rule of rules.value) {\n if (results.length >= Number(props.maxErrors ?? 1)) {\n break;\n }\n const handler = isFunction(rule) ? rule : () => rule;\n const result = await handler(validationModel.value);\n if (result === true) continue;\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 continue;\n }\n results.push(result || '');\n }\n internalErrorMessages.value = results;\n isValidating.value = false;\n isPristine.value = silent;\n return internalErrorMessages.value;\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//# sourceMappingURL=validation.js.map","import { createVNode as _createVNode, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\";\n// Styles\nimport \"./VInput.css\";\n\n// Components\nimport { useInputIcon } from \"./InputIcon.js\";\nimport { VMessages } from \"../VMessages/VMessages.js\"; // Composables\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeDensityProps, useDensity } from \"../../composables/density.js\";\nimport { makeDimensionProps, useDimension } from \"../../composables/dimensions.js\";\nimport { IconValue } from \"../../composables/icons.js\";\nimport { useRtl } from \"../../composables/locale.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\";\nimport { makeValidationProps, useValidation } from \"../../composables/validation.js\"; // Utilities\nimport { computed, toRef, useId } from 'vue';\nimport { EventProp, genericComponent, pick, propsFactory, useRender } from \"../../util/index.js\"; // Types\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],\n hideSpinButtons: Boolean,\n hint: String,\n indentDetails: {\n type: Boolean,\n default: null\n },\n persistentHint: Boolean,\n messages: {\n type: [Array, String],\n default: () => []\n },\n direction: {\n type: String,\n default: 'horizontal',\n validator: v => ['horizontal', 'vertical'].includes(v)\n },\n 'onClick:prepend': EventProp(),\n 'onClick:append': EventProp(),\n ...makeComponentProps(),\n ...makeDensityProps(),\n ...pick(makeDimensionProps(), ['maxWidth', 'minWidth', 'width']),\n ...makeThemeProps(),\n ...makeValidationProps()\n}, 'VInput');\nexport const VInput = genericComponent()({\n name: 'VInput',\n props: {\n ...makeVInputProps()\n },\n emits: {\n 'update:modelValue': value => true\n },\n setup(props, {\n attrs,\n slots,\n emit\n }) {\n const {\n densityClasses\n } = useDensity(props);\n const {\n dimensionStyles\n } = useDimension(props);\n const {\n themeClasses\n } = provideTheme(props);\n const {\n rtlClasses\n } = useRtl();\n const {\n InputIcon\n } = useInputIcon(props);\n const uid = useId();\n const id = computed(() => props.id || `input-${uid}`);\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 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 const hasMessages = toRef(() => messages.value.length > 0);\n const hasDetails = toRef(() => !props.hideDetails || props.hideDetails === 'auto' && (hasMessages.value || (props.detailsActive ?? !!slots.details)));\n const messagesId = computed(() => hasDetails.value ? `${id.value}-messages` : undefined);\n const slotProps = computed(() => ({\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 const color = toRef(() => {\n return props.error || props.disabled ? undefined : props.focused ? props.color : props.baseColor;\n });\n const iconColor = toRef(() => {\n if (!props.iconColor) return undefined;\n return props.iconColor === true ? color.value : props.iconColor;\n });\n useRender(() => {\n const hasPrepend = !!(slots.prepend || props.prependIcon);\n const hasAppend = !!(slots.append || props.appendIcon);\n return _createElementVNode(\"div\", {\n \"class\": _normalizeClass(['v-input', `v-input--${props.direction}`, {\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 }, densityClasses.value, themeClasses.value, rtlClasses.value, validationClasses.value, props.class]),\n \"style\": _normalizeStyle([dimensionStyles.value, props.style])\n }, [hasPrepend && _createElementVNode(\"div\", {\n \"key\": \"prepend\",\n \"class\": \"v-input__prepend\"\n }, [slots.prepend ? slots.prepend(slotProps.value) : props.prependIcon && _createVNode(InputIcon, {\n \"key\": \"prepend-icon\",\n \"name\": \"prepend\",\n \"color\": iconColor.value\n }, null)]), slots.default && _createElementVNode(\"div\", {\n \"class\": \"v-input__control\"\n }, [slots.default?.(slotProps.value)]), hasAppend && _createElementVNode(\"div\", {\n \"key\": \"append\",\n \"class\": \"v-input__append\"\n }, [slots.append ? slots.append(slotProps.value) : props.appendIcon && _createVNode(InputIcon, {\n \"key\": \"append-icon\",\n \"name\": \"append\",\n \"color\": iconColor.value\n }, null)]), props.hideDetails !== true && _createElementVNode(\"div\", {\n \"id\": messagesId.value,\n \"class\": _normalizeClass(['v-input__details', {\n 'v-input__details--hidden': !hasDetails.value\n }]),\n \"role\": \"alert\",\n \"aria-live\": \"polite\"\n }, [_createVNode(VMessages, {\n \"active\": hasMessages.value,\n \"messages\": messages.value\n }, {\n message: slots.message\n }), slots.details?.(slotProps.value)])]);\n });\n return {\n reset,\n resetValidation,\n validate,\n isValid,\n errorMessages\n };\n }\n});\n//# sourceMappingURL=VInput.js.map","// Utilities\nimport { isFunction, isSymbol } from \"../util/index.js\"; // Types\nconst Refs = Symbol('Forwarded refs');\n\n/** Omit properties starting with P */\n\n/** Omit keyof $props from T */\n\nfunction getDescriptor(obj, key) {\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}\nexport function forwardRefs(target, ...refs) {\n target[Refs] = refs;\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 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) ? val.bind(ref.value) : 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 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 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 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[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[Refs];\n if (childRefs) queue.push(...childRefs);\n }\n }\n return undefined;\n }\n });\n}\n//# sourceMappingURL=forwardRefs.js.map","import { mergeProps as _mergeProps, createVNode as _createVNode } from \"vue\";\n// Styles\nimport \"./VCheckbox.css\";\n\n// Components\nimport { makeVCheckboxBtnProps, VCheckboxBtn } from \"./VCheckboxBtn.js\";\nimport { makeVInputProps, VInput } from \"../VInput/VInput.js\"; // Composables\nimport { useFocus } from \"../../composables/focus.js\";\nimport { forwardRefs } from \"../../composables/forwardRefs.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\"; // Utilities\nimport { ref, useId } from 'vue';\nimport { filterInputAttrs, genericComponent, omit, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVCheckboxProps = propsFactory({\n ...omit(makeVInputProps(), ['direction', 'glow']),\n ...omit(makeVCheckboxBtnProps(), ['inline'])\n}, 'VCheckbox');\nexport const VCheckbox = genericComponent()({\n name: 'VCheckbox',\n inheritAttrs: false,\n props: makeVCheckboxProps(),\n emits: {\n 'update:modelValue': value => true,\n 'update:focused': focused => true\n },\n setup(props, {\n attrs,\n slots\n }) {\n const model = useProxiedModel(props, 'modelValue');\n const {\n isFocused,\n focus,\n blur\n } = useFocus(props);\n const inputRef = ref();\n const uid = useId();\n useRender(() => {\n const [rootAttrs, controlAttrs] = filterInputAttrs(attrs);\n const inputProps = VInput.filterProps(props);\n const checkboxProps = VCheckboxBtn.filterProps(props);\n return _createVNode(VInput, _mergeProps({\n \"ref\": inputRef,\n \"class\": ['v-checkbox', props.class]\n }, rootAttrs, inputProps, {\n \"modelValue\": model.value,\n \"onUpdate:modelValue\": $event => model.value = $event,\n \"id\": props.id || `checkbox-${uid}`,\n \"focused\": isFocused.value,\n \"style\": props.style\n }), {\n ...slots,\n default: ({\n id,\n messagesId,\n isDisabled,\n isReadonly,\n isValid\n }) => _createVNode(VCheckboxBtn, _mergeProps(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 \"modelValue\": model.value,\n \"onUpdate:modelValue\": $event => model.value = $event,\n \"onFocus\": focus,\n \"onBlur\": blur\n }), slots)\n });\n });\n return forwardRefs({}, inputRef);\n }\n});\n//# sourceMappingURL=VCheckbox.js.map","// Utilities\nimport { isString } from \"../../util/index.js\";\nexport function calculateUpdatedTarget({\n selectedElement,\n containerElement,\n isRtl,\n isHorizontal\n}) {\n const containerSize = getOffsetSize(isHorizontal, containerElement);\n const scrollPosition = getScrollPosition(isHorizontal, isRtl, containerElement);\n const childrenSize = getOffsetSize(isHorizontal, selectedElement);\n const childrenStartPosition = getOffsetPosition(isHorizontal, selectedElement);\n const additionalOffset = childrenSize * 0.4;\n if (scrollPosition > childrenStartPosition) {\n return childrenStartPosition - additionalOffset;\n } else if (scrollPosition + containerSize < childrenStartPosition + childrenSize) {\n return childrenStartPosition - containerSize + childrenSize + additionalOffset;\n }\n return scrollPosition;\n}\nexport function calculateCenteredTarget({\n selectedElement,\n containerElement,\n isHorizontal\n}) {\n const containerOffsetSize = getOffsetSize(isHorizontal, containerElement);\n const childrenOffsetPosition = getOffsetPosition(isHorizontal, selectedElement);\n const childrenOffsetSize = getOffsetSize(isHorizontal, selectedElement);\n return childrenOffsetPosition - containerOffsetSize / 2 + childrenOffsetSize / 2;\n}\nexport function getScrollSize(isHorizontal, element) {\n const key = isHorizontal ? 'scrollWidth' : 'scrollHeight';\n return element?.[key] || 0;\n}\nexport function getScrollPosition(isHorizontal, rtl, element) {\n if (!element) {\n return 0;\n }\n const {\n scrollLeft,\n offsetWidth,\n scrollWidth\n } = element;\n if (isHorizontal) {\n return rtl ? scrollWidth - offsetWidth + scrollLeft : scrollLeft;\n }\n return element.scrollTop;\n}\nexport function getOffsetSize(isHorizontal, element) {\n const key = isHorizontal ? 'offsetWidth' : 'offsetHeight';\n return element?.[key] || 0;\n}\nexport function getOffsetPosition(isHorizontal, element) {\n const key = isHorizontal ? 'offsetLeft' : 'offsetTop';\n return element?.[key] || 0;\n}\nexport function getScrollDistance(containerSize, distance) {\n if (isString(distance) && distance.endsWith('%')) {\n return containerSize * parseFloat(distance) / 100;\n }\n return parseFloat(String(distance)) || containerSize;\n}\n//# sourceMappingURL=helpers.js.map","import { createVNode as _createVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle } from \"vue\";\n// Styles\nimport \"./VSlideGroup.css\";\n\n// Components\nimport { VFadeTransition } from \"../transitions/index.js\";\nimport { VIcon } from \"../VIcon/index.js\"; // Composables\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeDisplayProps, useDisplay } from \"../../composables/display.js\";\nimport { useGoTo } from \"../../composables/goto.js\";\nimport { makeGroupProps, useGroup } from \"../../composables/group.js\";\nimport { IconValue } from \"../../composables/icons.js\";\nimport { useRtl } from \"../../composables/locale.js\";\nimport { useResizeObserver } from \"../../composables/resizeObserver.js\";\nimport { makeTagProps } from \"../../composables/tag.js\"; // Utilities\nimport { computed, shallowRef, watch } from 'vue';\nimport { calculateCenteredTarget, calculateUpdatedTarget, getOffsetPosition, getOffsetSize, getScrollDistance, getScrollPosition, getScrollSize } from \"./helpers.js\";\nimport { clamp, focusableChildren, genericComponent, IN_BROWSER, isBoolean, isObject, isString, matchesSelector, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');\nexport const makeVSlideGroupProps = propsFactory({\n centerActive: Boolean,\n scrollDistance: {\n type: [String, Number],\n default: '100%',\n validator: v => /^-?\\d*\\.?\\d+(px|%)?$/.test(String(v).trim())\n },\n scrollSnap: {\n type: String,\n validator: v => ['start', 'center', 'end'].includes(v)\n },\n scrollToActive: {\n type: Boolean,\n default: true\n },\n contentClass: null,\n direction: {\n type: String,\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 => isBoolean(v) || ['always', 'desktop', 'mobile', 'never'].includes(v)\n },\n ...makeComponentProps(),\n ...makeDisplayProps({\n mobile: null\n }),\n ...makeTagProps(),\n ...makeGroupProps({\n selectedClass: 'v-slide-group-item--active'\n })\n}, 'VSlideGroup');\nexport const VSlideGroup = genericComponent()({\n name: 'VSlideGroup',\n props: makeVSlideGroupProps(),\n emits: {\n 'update:modelValue': value => true,\n edge: side => true\n },\n setup(props, {\n emit,\n slots\n }) {\n const {\n isRtl\n } = useRtl();\n const {\n displayClasses,\n mobile\n } = 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 const {\n resizeRef: containerRef,\n contentRect: containerRect\n } = useResizeObserver();\n const {\n resizeRef: contentRef,\n contentRect\n } = useResizeObserver();\n const goTo = useGoTo();\n const goToOptions = computed(() => {\n return {\n container: containerRef.el,\n duration: 200,\n easing: 'easeOutQuart'\n };\n });\n const firstSelectedIndex = computed(() => {\n if (!group.selected.value.length) return -1;\n return group.items.value.findIndex(item => item.id === group.selected.value[0]);\n });\n const lastSelectedIndex = computed(() => {\n if (!group.selected.value.length) return -1;\n return group.items.value.findIndex(item => item.id === group.selected.value[group.selected.value.length - 1]);\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 containerSize.value = containerRect.value[sizeProperty];\n contentSize.value = contentRect.value[sizeProperty];\n isOverflowing.value = containerSize.value + 1 < contentSize.value;\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];\n scrollToChildren(selectedElement, props.centerActive);\n }\n });\n });\n }\n const isFocused = shallowRef(false);\n function scrollToChildren(children, center) {\n if (props.scrollSnap) {\n return scrollToPosition(snapToElement(children, center));\n }\n let target = 0;\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 scrollToPosition(mirrorInRtl(target));\n }\n let activeAnimations = 0;\n function scrollToPosition(newPosition) {\n if (!IN_BROWSER || !containerRef.el) return;\n const offsetSize = getOffsetSize(isHorizontal.value, containerRef.el);\n const scrollSize = getScrollSize(isHorizontal.value, containerRef.el);\n if (scrollSize <= offsetSize) return;\n newPosition = clamp(newPosition, 0, scrollSize - offsetSize);\n if (Math.abs(newPosition - getPosition()) <= 1) return;\n const scrolling = isHorizontal.value ? goTo.horizontal(newPosition, goToOptions.value) : 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 function onFocusin(e) {\n isFocused.value = true;\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, ':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);\n return;\n }\n }\n }\n }\n function onFocusout(e) {\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) {\n if (!ignoreFocusEvent && !isFocused.value && !(e.relatedTarget && contentRef.el?.contains(e.relatedTarget))) focus();\n ignoreFocusEvent = false;\n }\n function onFocusAffixes() {\n ignoreFocusEvent = true;\n }\n function onKeydown(e) {\n if (!contentRef.el) return;\n function toFocus(location) {\n e.preventDefault();\n focus(location);\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 if (e.key === 'Home') {\n toFocus('first');\n } else if (e.key === 'End') {\n toFocus('last');\n }\n }\n function getSiblingElement(el, location) {\n if (!el) return undefined;\n let sibling = el;\n do {\n sibling = sibling?.[location === 'next' ? 'nextElementSibling' : 'previousElementSibling'];\n } while (sibling?.hasAttribute('disabled'));\n return sibling;\n }\n function focus(location) {\n if (!contentRef.el) return;\n let el;\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 if (!el) return focus('first');\n } else if (location === 'prev') {\n el = getSiblingElement(contentRef.el.querySelector(':focus'), location);\n if (!el) return focus('last');\n } else if (location === 'first') {\n el = contentRef.el.firstElementChild;\n if (el?.hasAttribute('disabled')) el = getSiblingElement(el, 'next');\n } else if (location === 'last') {\n el = contentRef.el.lastElementChild;\n if (el?.hasAttribute('disabled')) el = getSiblingElement(el, 'prev');\n }\n if (el) {\n el.focus({\n preventScroll: true\n });\n }\n }\n function mirrorInRtl(position) {\n return isHorizontal.value && isRtl.value ? getScrollSize(true, containerRef.el) - getOffsetSize(true, containerRef.el) - position : position;\n }\n function getPosition() {\n return mirrorInRtl(getScrollPosition(isHorizontal.value, isRtl.value, containerRef.el));\n }\n function getBounds(child) {\n const size = getOffsetSize(isHorizontal.value, child);\n const start = isHorizontal.value && isRtl.value ? getScrollSize(true, containerRef.el) - child.offsetLeft - size : getOffsetPosition(isHorizontal.value, child);\n return {\n start,\n end: start + size\n };\n }\n function getItemBounds() {\n return contentRef.el ? Array.from(contentRef.el.children, getBounds) : [];\n }\n function getSnapPosition(item) {\n if (props.scrollSnap === 'end') return item.end - containerSize.value;\n if (props.scrollSnap === 'center') return (item.start + item.end - containerSize.value) / 2;\n return item.start;\n }\n function getSnapPositions() {\n return getItemBounds().map(getSnapPosition);\n }\n function getItemClippedAt(edge) {\n return getItemBounds().find(item => item.start < edge - 1 && item.end > edge + 1);\n }\n function reveals(item) {\n return position => !item || position <= item.start + 1 && position + containerSize.value >= item.end - 1;\n }\n function nearestTo(ideal) {\n return (best, position) => Math.abs(position - ideal) < Math.abs(best - ideal) ? position : best;\n }\n function snapToElement(child, center) {\n const item = getBounds(child);\n const ideal = center ? (item.start + item.end - containerSize.value) / 2 : getPosition();\n return getSnapPositions().filter(reveals(item)).reduce(nearestTo(ideal), getSnapPosition(item));\n }\n function snapToItem(from, step) {\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 return (forward ? options.findLast(p => p <= target) ?? options[0] : options.find(p => p >= target) ?? options.at(-1)) ?? target;\n }\n function slide(target) {\n if (!containerRef.el || !containerSize.value) return;\n if (isObject(target) && 'index' in target) {\n const item = contentRef.el?.children[target.index];\n if (item) {\n scrollToChildren(item, props.centerActive);\n }\n return;\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 const slotProps = computed(() => ({\n next: group.next,\n prev: group.prev,\n select: group.select,\n isSelected: group.isSelected\n }));\n const hasOverflowOrScroll = computed(() => isOverflowing.value || Math.abs(scrollOffset.value) > 0);\n const hasAffixes = computed(() => {\n switch (props.showArrows) {\n case 'never':\n return false;\n\n // Always show arrows on desktop & mobile\n case 'always':\n return true;\n\n // Always show arrows on desktop\n case 'desktop':\n return !mobile.value;\n\n // Show arrows on mobile when overflowing.\n // This matches the default 2.2 behavior\n case true:\n return hasOverflowOrScroll.value;\n\n // Always show on mobile\n case 'mobile':\n return mobile.value || hasOverflowOrScroll.value;\n\n // https://material.io/components/tabs#scrollable-tabs\n // Always show arrows when\n // overflowed on desktop\n default:\n return !mobile.value && hasOverflowOrScroll.value;\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 const hasNext = computed(() => {\n if (!hasOverflowOrScroll.value) return false;\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 scrollOffset.value = getPosition();\n if (hadPrev && !hasPrev.value) emit('edge', 'start');\n if (hadNext && !hasNext.value) emit('edge', 'end');\n }\n useRender(() => _createVNode(props.tag, {\n \"class\": _normalizeClass(['v-slide-group', {\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 }, displayClasses.value, props.class]),\n \"style\": _normalizeStyle(props.style),\n \"tabindex\": isFocused.value || group.selected.value.length ? -1 : 0,\n \"onFocus\": onFocus\n }, {\n default: () => [hasAffixes.value && _createElementVNode(\"div\", {\n \"key\": \"prev\",\n \"class\": _normalizeClass(['v-slide-group__prev', {\n 'v-slide-group__prev--disabled': !hasPrev.value\n }]),\n \"onMousedown\": onFocusAffixes,\n \"onClick\": () => hasPrev.value && slide('prev')\n }, [slots.prev?.(slotProps.value) ?? _createVNode(VFadeTransition, null, {\n default: () => [_createVNode(VIcon, {\n \"icon\": isRtl.value ? props.nextIcon : props.prevIcon\n }, null)]\n })]), _createElementVNode(\"div\", {\n \"key\": \"container\",\n \"ref\": containerRef,\n \"class\": _normalizeClass(['v-slide-group__container', props.contentClass]),\n \"style\": {\n '--v-slide-group-snap-align': props.scrollSnap\n },\n \"onScroll\": onScroll\n }, [_createElementVNode(\"div\", {\n \"ref\": contentRef,\n \"class\": \"v-slide-group__content\",\n \"onFocusin\": onFocusin,\n \"onFocusout\": onFocusout,\n \"onKeydown\": onKeydown\n }, [slots.default?.(slotProps.value)])]), hasAffixes.value && _createElementVNode(\"div\", {\n \"key\": \"next\",\n \"class\": _normalizeClass(['v-slide-group__next', {\n 'v-slide-group__next--disabled': !hasNext.value\n }]),\n \"onMousedown\": onFocusAffixes,\n \"onClick\": () => hasNext.value && slide('next')\n }, [slots.next?.(slotProps.value) ?? _createVNode(VFadeTransition, null, {\n default: () => [_createVNode(VIcon, {\n \"icon\": isRtl.value ? props.prevIcon : props.nextIcon\n }, null)]\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//# sourceMappingURL=VSlideGroup.js.map","import { mergeProps as _mergeProps, createVNode as _createVNode } from \"vue\";\n// Styles\nimport \"./VChipGroup.css\";\n\n// Components\nimport { makeVSlideGroupProps, VSlideGroup } from \"../VSlideGroup/VSlideGroup.js\"; // Composables\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { provideDefaults } from \"../../composables/defaults.js\";\nimport { makeGroupProps, useGroup } from \"../../composables/group.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\";\nimport { makeVariantProps } from \"../../composables/variant.js\"; // Utilities\nimport { toRef } from 'vue';\nimport { deepEqual, genericComponent, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const VChipGroupSymbol = Symbol.for('vuetify:v-chip-group');\nexport const makeVChipGroupProps = propsFactory({\n baseColor: String,\n column: Boolean,\n filter: Boolean,\n valueComparator: {\n type: Function,\n default: deepEqual\n },\n ...makeVSlideGroupProps({\n scrollToActive: false\n }),\n ...makeComponentProps(),\n ...makeGroupProps({\n selectedClass: 'v-chip--selected'\n }),\n ...makeTagProps(),\n ...makeThemeProps(),\n ...makeVariantProps({\n variant: 'tonal'\n })\n}, 'VChipGroup');\nexport const VChipGroup = genericComponent()({\n name: 'VChipGroup',\n props: makeVChipGroupProps(),\n emits: {\n 'update:modelValue': value => true\n },\n setup(props, {\n slots\n }) {\n const {\n themeClasses\n } = provideTheme(props);\n const {\n isSelected,\n select,\n next,\n prev,\n selected\n } = useGroup(props, VChipGroupSymbol);\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 useRender(() => {\n const slideGroupProps = VSlideGroup.filterProps(props);\n return _createVNode(VSlideGroup, _mergeProps(slideGroupProps, {\n \"class\": ['v-chip-group', {\n 'v-chip-group--column': props.column\n }, themeClasses.value, props.class],\n \"style\": props.style\n }), {\n default: () => [slots.default?.({\n isSelected,\n select,\n next,\n prev,\n selected: selected.value\n })]\n });\n });\n return {};\n }\n});\n//# sourceMappingURL=VChipGroup.js.map","import { createVNode as _createVNode, vShow as _vShow, createElementVNode as _createElementVNode, withDirectives as _withDirectives, Fragment as _Fragment, mergeProps as _mergeProps } from \"vue\";\n/* eslint-disable complexity */\n// Styles\nimport \"./VChip.css\";\n\n// Components\nimport { VExpandXTransition } from \"../transitions/index.js\";\nimport { VAvatar } from \"../VAvatar/index.js\";\nimport { VChipGroupSymbol } from \"../VChipGroup/VChipGroup.js\";\nimport { VDefaultsProvider } from \"../VDefaultsProvider/index.js\";\nimport { VIcon } from \"../VIcon/index.js\";\nimport { VSlideGroupSymbol } from \"../VSlideGroup/VSlideGroup.js\"; // Composables\nimport { makeBorderProps, useBorder } from \"../../composables/border.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeDensityProps, useDensity } from \"../../composables/density.js\";\nimport { makeElevationProps, useElevation } from \"../../composables/elevation.js\";\nimport { makeGroupItemProps, useGroupItem } from \"../../composables/group.js\";\nimport { IconValue } from \"../../composables/icons.js\";\nimport { useLocale } from \"../../composables/locale.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\";\nimport { makeRoundedProps, useRounded } from \"../../composables/rounded.js\";\nimport { makeRouterProps, useLink } from \"../../composables/router.js\";\nimport { makeSizeProps, useSize } from \"../../composables/size.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\";\nimport { genOverlays, makeVariantProps, useVariant } from \"../../composables/variant.js\"; // Directives\nimport vRipple from \"../../directives/ripple/index.js\"; // Utilities\nimport { computed, toDisplayString, toRef, watch } from 'vue';\nimport { EventProp, genericComponent, propsFactory } from \"../../util/index.js\"; // Types\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],\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 onClick: EventProp(),\n onClickOnce: EventProp(),\n ...makeBorderProps(),\n ...makeComponentProps(),\n ...makeDensityProps(),\n ...makeElevationProps(),\n ...makeGroupItemProps(),\n ...makeRoundedProps(),\n ...makeRouterProps(),\n ...makeSizeProps(),\n ...makeTagProps({\n tag: 'span'\n }),\n ...makeThemeProps(),\n ...makeVariantProps({\n variant: 'tonal'\n })\n}, 'VChip');\nexport const VChip = genericComponent()({\n name: 'VChip',\n directives: {\n vRipple\n },\n props: makeVChipProps(),\n emits: {\n 'click:close': e => true,\n 'update:modelValue': value => true,\n 'group:selected': val => true,\n click: e => true\n },\n setup(props, {\n attrs,\n emit,\n slots\n }) {\n const {\n t\n } = useLocale();\n const {\n borderClasses\n } = useBorder(props);\n const {\n densityClasses\n } = useDensity(props);\n const {\n elevationClasses\n } = useElevation(props);\n const {\n roundedClasses,\n roundedStyles\n } = useRounded(props);\n const {\n sizeClasses\n } = useSize(props);\n const {\n themeClasses\n } = provideTheme(props);\n const isActive = useProxiedModel(props, 'modelValue');\n const group = useGroupItem(props, VChipGroupSymbol, false);\n const slideGroup = useGroupItem(props, VSlideGroupSymbol, false);\n const link = useLink(props, attrs);\n const isLink = toRef(() => props.link !== false && link.isLink.value);\n const isClickable = computed(() => !props.disabled && props.link !== false && (!!group || props.link || link.isClickable.value));\n const closeProps = toRef(() => ({\n 'aria-label': t(props.closeLabel),\n disabled: props.disabled,\n onClick(e) {\n e.preventDefault();\n e.stopPropagation();\n isActive.value = false;\n emit('click:close', e);\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 const {\n colorClasses,\n colorStyles,\n variantClasses\n } = 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 function onClick(e) {\n emit('click', e);\n if (!isClickable.value) return;\n link.navigate.value?.(e);\n group?.toggle();\n }\n function onKeyDown(e) {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick(e);\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 return isActive.value && _withDirectives(_createVNode(Tag, _mergeProps(link.linkProps, {\n \"class\": ['v-chip', {\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 }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, group?.selectedClass.value, props.class],\n \"style\": [colorStyles.value, roundedStyles.value, props.style],\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 }), {\n default: () => [genOverlays(isClickable.value, 'v-chip'), hasFilter && _createVNode(VExpandXTransition, {\n \"key\": \"filter\"\n }, {\n default: () => [_withDirectives(_createElementVNode(\"div\", {\n \"class\": \"v-chip__filter\"\n }, [!slots.filter ? _createVNode(VIcon, {\n \"key\": \"filter-icon\",\n \"icon\": props.filterIcon\n }, null) : _createVNode(VDefaultsProvider, {\n \"key\": \"filter-defaults\",\n \"disabled\": !props.filterIcon,\n \"defaults\": {\n VIcon: {\n icon: props.filterIcon\n }\n }\n }, slots.filter)]), [[_vShow, group.isSelected.value]])]\n }), hasPrepend && _createElementVNode(\"div\", {\n \"key\": \"prepend\",\n \"class\": \"v-chip__prepend\"\n }, [!slots.prepend ? _createElementVNode(_Fragment, null, [props.prependIcon && _createVNode(VIcon, {\n \"key\": \"prepend-icon\",\n \"icon\": props.prependIcon,\n \"start\": true\n }, null), props.prependAvatar && _createVNode(VAvatar, {\n \"key\": \"prepend-avatar\",\n \"image\": props.prependAvatar,\n \"start\": true\n }, null)]) : _createVNode(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 }, slots.prepend)]), _createElementVNode(\"div\", {\n \"class\": \"v-chip__content\",\n \"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)]), hasAppend && _createElementVNode(\"div\", {\n \"key\": \"append\",\n \"class\": \"v-chip__append\"\n }, [!slots.append ? _createElementVNode(_Fragment, null, [props.appendIcon && _createVNode(VIcon, {\n \"key\": \"append-icon\",\n \"end\": true,\n \"icon\": props.appendIcon\n }, null), props.appendAvatar && _createVNode(VAvatar, {\n \"key\": \"append-avatar\",\n \"end\": true,\n \"image\": props.appendAvatar\n }, null)]) : _createVNode(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 }, slots.append)]), hasClose && _createElementVNode(\"button\", _mergeProps({\n \"key\": \"close\",\n \"class\": \"v-chip__close\",\n \"type\": \"button\",\n \"data-testid\": \"close-chip\"\n }, closeProps.value), [!slots.close ? _createVNode(VIcon, {\n \"key\": \"close-icon\",\n \"icon\": props.closeIcon,\n \"size\": \"x-small\"\n }, null) : _createVNode(VDefaultsProvider, {\n \"key\": \"close-defaults\",\n \"defaults\": {\n VIcon: {\n icon: props.closeIcon,\n size: 'x-small'\n }\n }\n }, slots.close)])]\n }), [[vRipple, isClickable.value && props.ripple, null]]);\n };\n }\n});\n//# sourceMappingURL=VChip.js.map","import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode } from \"vue\";\n// Styles\nimport \"./VDivider.css\";\n\n// Composables\nimport { useTextColor } from \"../../composables/color.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\"; // Utilities\nimport { computed, toRef } from 'vue';\nimport { convertToUnit, genericComponent, propsFactory, useRender } from \"../../util/index.js\"; // Types\nconst allowedVariants = ['dotted', 'dashed', 'solid', 'double'];\nexport const makeVDividerProps = propsFactory({\n color: String,\n contentOffset: [Number, String, Array],\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,\n default: 'solid',\n validator: v => allowedVariants.includes(v)\n },\n ...makeComponentProps(),\n ...makeThemeProps()\n}, 'VDivider');\nexport const VDivider = genericComponent()({\n name: 'VDivider',\n props: makeVDividerProps(),\n setup(props, {\n attrs,\n slots\n }) {\n const {\n themeClasses\n } = provideTheme(props);\n const {\n textColorClasses,\n textColorStyles\n } = useTextColor(() => props.color);\n const dividerStyles = computed(() => {\n const styles = {};\n if (props.length) {\n styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);\n }\n if (props.thickness) {\n styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);\n }\n return styles;\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 return {\n marginBlock: props.vertical && margin ? convertToUnit(margin) : undefined,\n marginInline: !props.vertical && margin ? convertToUnit(margin) : undefined,\n transform: shift ? `translate${props.vertical ? 'X' : 'Y'}(${convertToUnit(shift)})` : undefined\n };\n });\n useRender(() => {\n const role = attrs.role;\n const hasSlot = !!slots.default;\n const divider = _createElementVNode(\"hr\", {\n \"class\": _normalizeClass([{\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 }, themeClasses.value, textColorClasses.value, props.class]),\n \"style\": _normalizeStyle([dividerStyles.value, textColorStyles.value, {\n '--v-border-opacity': props.opacity\n }, {\n 'border-style': props.variant\n }, props.style]),\n \"aria-orientation\": !hasSlot && !role ? props.vertical ? 'vertical' : 'horizontal' : undefined,\n \"role\": !hasSlot ? role : undefined\n }, null);\n if (!hasSlot) return divider;\n return _createElementVNode(\"div\", {\n \"class\": _normalizeClass(['v-divider__wrapper', {\n 'v-divider__wrapper--gradient': props.gradient,\n 'v-divider__wrapper--inset': props.inset,\n 'v-divider__wrapper--vertical': props.vertical\n }])\n }, [divider, _createElementVNode(\"div\", {\n \"class\": \"v-divider__content\",\n \"style\": _normalizeStyle(contentStyles.value)\n }, [slots.default()]), divider]);\n });\n return {};\n }\n});\n//# sourceMappingURL=VDivider.js.map","// Utilities\nimport { computed, inject, provide, shallowRef, useId } from 'vue';\n\n// Types\n\n// Depth\nexport const DepthKey = Symbol.for('vuetify:depth');\nexport function useDepth(hasPrepend) {\n const parent = inject(DepthKey, shallowRef(-1));\n const depth = computed(() => parent.value + 1 + (hasPrepend?.value ? 1 : 0));\n provide(DepthKey, depth);\n return depth;\n}\n\n// List\nexport const ListKey = Symbol.for('vuetify:list');\nexport function createList(options = {\n filterable: false\n}) {\n const parent = inject(ListKey, {\n filterable: false,\n hasPrepend: shallowRef(false),\n updateHasPrepend: () => null,\n trackingIndex: shallowRef(-1),\n navigationStrategy: shallowRef('focus'),\n uid: ''\n });\n const {\n filterable,\n trackingIndex = parent.trackingIndex,\n navigationStrategy = parent.navigationStrategy,\n uid = parent.uid || useId()\n } = options;\n const data = {\n filterable: parent.filterable || filterable,\n hasPrepend: shallowRef(false),\n updateHasPrepend: value => {\n if (value) data.hasPrepend.value = value;\n },\n trackingIndex,\n navigationStrategy,\n uid\n };\n provide(ListKey, data);\n return parent;\n}\nexport function useList() {\n return inject(ListKey, null);\n}\n//# sourceMappingURL=list.js.map","/* eslint-disable sonarjs/no-identical-functions */\n// Utilities\nimport { toRaw } from 'vue';\nimport { isNullOrUndefined, wrapInArray } from \"../../util/index.js\";\nexport const independentActiveStrategy = mandatory => {\n const strategy = {\n activate: ({\n id,\n value,\n activated\n }) => {\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 if (value) {\n activated.add(id);\n } else {\n activated.delete(id);\n }\n return activated;\n },\n in: (v, children, parents) => {\n let set = new Set();\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 return set;\n },\n out: v => {\n return Array.from(v);\n }\n };\n return strategy;\n};\nexport const independentSingleActiveStrategy = mandatory => {\n const parentStrategy = independentActiveStrategy(mandatory);\n const strategy = {\n activate: ({\n activated,\n id,\n ...rest\n }) => {\n id = toRaw(id);\n const singleSelected = activated.has(id) ? new Set([id]) : new Set();\n return parentStrategy.activate({\n ...rest,\n id,\n activated: singleSelected\n });\n },\n in: (v, children, parents) => {\n let set = new Set();\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 return set;\n },\n out: (v, children, parents) => {\n return parentStrategy.out(v, children, parents);\n }\n };\n return strategy;\n};\nexport const leafActiveStrategy = mandatory => {\n const parentStrategy = independentActiveStrategy(mandatory);\n const strategy = {\n activate: ({\n id,\n activated,\n children,\n ...rest\n }) => {\n id = toRaw(id);\n if (children.has(id)) return activated;\n return parentStrategy.activate({\n id,\n activated,\n children,\n ...rest\n });\n },\n in: parentStrategy.in,\n out: parentStrategy.out\n };\n return strategy;\n};\nexport const leafSingleActiveStrategy = mandatory => {\n const parentStrategy = independentSingleActiveStrategy(mandatory);\n const strategy = {\n activate: ({\n id,\n activated,\n children,\n ...rest\n }) => {\n id = toRaw(id);\n if (children.has(id)) return activated;\n return parentStrategy.activate({\n id,\n activated,\n children,\n ...rest\n });\n },\n in: parentStrategy.in,\n out: parentStrategy.out\n };\n return strategy;\n};\n//# sourceMappingURL=activeStrategies.js.map","// Utilities\nimport { isNullOrUndefined } from \"../../util/index.js\";\nexport const singleOpenStrategy = {\n open: ({\n id,\n value,\n opened,\n parents\n }) => {\n if (value) {\n const newOpened = new Set();\n newOpened.add(id);\n let parent = parents.get(id);\n while (!isNullOrUndefined(parent)) {\n newOpened.add(parent);\n parent = parents.get(parent);\n }\n return newOpened;\n } else {\n opened.delete(id);\n return opened;\n }\n },\n select: () => null\n};\nexport const multipleOpenStrategy = {\n open: ({\n id,\n value,\n opened,\n parents\n }) => {\n if (value) {\n let parent = parents.get(id);\n opened.add(id);\n while (!isNullOrUndefined(parent) && parent !== id) {\n opened.add(parent);\n parent = parents.get(parent);\n }\n return opened;\n } else {\n opened.delete(id);\n }\n return opened;\n },\n select: () => null\n};\nexport const listOpenStrategy = {\n open: multipleOpenStrategy.open,\n select: ({\n id,\n value,\n opened,\n parents\n }) => {\n if (!value) return opened;\n const path = [];\n let parent = parents.get(id);\n while (!isNullOrUndefined(parent)) {\n path.push(parent);\n parent = parents.get(parent);\n }\n return new Set(path);\n }\n};\n//# sourceMappingURL=openStrategies.js.map","/* eslint-disable sonarjs/no-identical-functions */\n// Utilities\nimport { toRaw } from 'vue';\nexport const independentSelectStrategy = mandatory => {\n const strategy = {\n select: ({\n id,\n value,\n selected\n }) => {\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()).reduce((arr, [key, value]) => {\n if (value === 'on') arr.push(key);\n return arr;\n }, []);\n if (on.length === 1 && on[0] === id) return selected;\n }\n selected.set(id, value ? 'on' : 'off');\n return selected;\n },\n in: (v, children, parents, disabled) => {\n const map = new Map();\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 return map;\n },\n out: v => {\n const arr = [];\n for (const [key, value] of v.entries()) {\n if (value === 'on') arr.push(key);\n }\n return arr;\n }\n };\n return strategy;\n};\nexport const independentSingleSelectStrategy = mandatory => {\n const parentStrategy = independentSelectStrategy(mandatory);\n const strategy = {\n select: ({\n selected,\n id,\n ...rest\n }) => {\n id = toRaw(id);\n const singleSelected = selected.has(id) ? new Map([[id, selected.get(id)]]) : new Map();\n return parentStrategy.select({\n ...rest,\n id,\n selected: singleSelected\n });\n },\n in: (v, children, parents, disabled) => {\n if (v?.length) {\n return parentStrategy.in(v.slice(0, 1), children, parents, disabled);\n }\n return new Map();\n },\n out: (v, children, parents) => {\n return parentStrategy.out(v, children, parents);\n }\n };\n return strategy;\n};\nexport const leafSelectStrategy = mandatory => {\n const parentStrategy = independentSelectStrategy(mandatory);\n const strategy = {\n select: ({\n id,\n selected,\n children,\n ...rest\n }) => {\n id = toRaw(id);\n if (children.has(id)) return selected;\n return parentStrategy.select({\n id,\n selected,\n children,\n ...rest\n });\n },\n in: parentStrategy.in,\n out: parentStrategy.out\n };\n return strategy;\n};\nexport const leafSingleSelectStrategy = mandatory => {\n const parentStrategy = independentSingleSelectStrategy(mandatory);\n const strategy = {\n select: ({\n id,\n selected,\n children,\n ...rest\n }) => {\n id = toRaw(id);\n if (children.has(id)) return selected;\n return parentStrategy.select({\n id,\n selected,\n children,\n ...rest\n });\n },\n in: parentStrategy.in,\n out: parentStrategy.out\n };\n return strategy;\n};\nexport const classicSelectStrategy = mandatory => {\n const strategy = {\n select: ({\n id,\n value,\n selected,\n children,\n parents,\n disabled\n }) => {\n id = toRaw(id);\n const original = new Map(selected);\n const items = [id];\n while (items.length) {\n const item = items.shift();\n if (!disabled.has(item)) {\n selected.set(toRaw(item), value ? 'on' : 'off');\n }\n if (children.has(item)) {\n items.push(...children.get(item));\n }\n }\n let parent = toRaw(parents.get(id));\n while (parent) {\n let everySelected = true;\n let noneSelected = true;\n for (const child of children.get(parent)) {\n const cid = toRaw(child);\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 selected.set(parent, everySelected ? 'on' : noneSelected ? 'off' : 'indeterminate');\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()).reduce((arr, [key, value]) => {\n if (value === 'on') arr.push(key);\n return arr;\n }, []);\n if (on.length === 0) return original;\n }\n return selected;\n },\n in: (v, children, parents) => {\n let map = new Map();\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()\n });\n }\n return map;\n },\n out: (v, children) => {\n const arr = [];\n for (const [key, value] of v.entries()) {\n if (value === 'on' && !children.has(key)) arr.push(key);\n }\n return arr;\n }\n };\n return strategy;\n};\nexport const trunkSelectStrategy = mandatory => {\n const parentStrategy = classicSelectStrategy(mandatory);\n const strategy = {\n select: parentStrategy.select,\n in: parentStrategy.in,\n out: (v, children, parents) => {\n const arr = [];\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 return arr;\n }\n };\n return strategy;\n};\nexport const branchSelectStrategy = mandatory => {\n const parentStrategy = classicSelectStrategy(mandatory);\n const strategy = {\n select: parentStrategy.select,\n in: (v, children, parents, disabled) => {\n let map = new Map();\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 return map;\n },\n out: v => {\n const arr = [];\n for (const [key, value] of v.entries()) {\n if (value === 'on' || value === 'indeterminate') {\n arr.push(key);\n }\n }\n return arr;\n }\n };\n return strategy;\n};\n//# sourceMappingURL=selectStrategies.js.map","// Composables\nimport { useProxiedModel } from \"../proxiedModel.js\"; // Utilities\nimport { computed, inject, nextTick, onBeforeMount, onBeforeUnmount, provide, ref, shallowRef, toRaw, toRef, toValue, watch } from 'vue';\nimport { independentActiveStrategy, independentSingleActiveStrategy, leafActiveStrategy, leafSingleActiveStrategy } from \"./activeStrategies.js\";\nimport { listOpenStrategy, multipleOpenStrategy, singleOpenStrategy } from \"./openStrategies.js\";\nimport { branchSelectStrategy, classicSelectStrategy, independentSelectStrategy, independentSingleSelectStrategy, leafSelectStrategy, leafSingleSelectStrategy, trunkSelectStrategy } from \"./selectStrategies.js\";\nimport { consoleError, getCurrentInstance, isFunction, isNullOrUndefined, isObject, isUndefined, propsFactory, throttle } from \"../../util/index.js\"; // Types\nexport const VNestedSymbol = Symbol.for('vuetify:nested');\nexport const emptyNested = {\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};\nexport const makeNestedProps = propsFactory({\n activatable: Boolean,\n selectable: Boolean,\n activeStrategy: [String, Function, Object],\n selectStrategy: [String, Function, Object],\n openStrategy: [String, Object],\n opened: null,\n activated: null,\n selected: null,\n mandatory: Boolean,\n itemsRegistration: {\n type: String,\n default: 'render'\n }\n}, 'nested');\nexport const useNested = (props, {\n items,\n returnObject,\n scrollToActive,\n valueComparator\n}) => {\n let isUnmounted = false;\n const children = shallowRef(new Map());\n const parents = shallowRef(new Map());\n const disabled = shallowRef(new Set());\n const opened = useProxiedModel(props, 'opened', props.opened, v => new Set(Array.isArray(v) ? v.map(i => toRaw(i)) : v), v => [...v.values()]);\n\n // opening multiple nodes in a sync loop cannot wait for the proxied model to catch up\n let batch = null;\n function currentOpened() {\n if (!batch) queueMicrotask(() => {\n batch = null;\n });\n return batch ?? opened.value;\n }\n function setOpened(value) {\n batch = value;\n opened.value = value;\n }\n const activeStrategy = computed(() => {\n if (isFunction(props.activeStrategy)) return props.activeStrategy(props.mandatory);\n if (isObject(props.activeStrategy)) return props.activeStrategy;\n switch (props.activeStrategy) {\n case 'leaf':\n return leafActiveStrategy(props.mandatory);\n case 'single-leaf':\n return leafSingleActiveStrategy(props.mandatory);\n case 'independent':\n return independentActiveStrategy(props.mandatory);\n case 'single-independent':\n default:\n return independentSingleActiveStrategy(props.mandatory);\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 switch (props.selectStrategy) {\n case 'single-leaf':\n return leafSingleSelectStrategy(props.mandatory);\n case 'leaf':\n return leafSelectStrategy(props.mandatory);\n case 'independent':\n return independentSelectStrategy(props.mandatory);\n case 'single-independent':\n return independentSingleSelectStrategy(props.mandatory);\n case 'trunk':\n return trunkSelectStrategy(props.mandatory);\n case 'branch':\n return branchSelectStrategy(props.mandatory);\n case 'classic':\n default:\n return classicSelectStrategy(props.mandatory);\n }\n });\n const openStrategy = computed(() => {\n if (isObject(props.openStrategy)) return props.openStrategy;\n switch (props.openStrategy) {\n case 'list':\n return listOpenStrategy;\n case 'single':\n return singleOpenStrategy;\n case 'multiple':\n default:\n return multipleOpenStrategy;\n }\n });\n const flatItems = computed(() => {\n const flat = [];\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 function resolveValue(value) {\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 const activated = useProxiedModel(props, 'activated', props.activated, v => activeStrategy.value.in(Array.isArray(v) ? v.map(resolveValue) : v, children.value, parents.value), v => activeStrategy.value.out(v, children.value, parents.value));\n const selected = useProxiedModel(props, 'selected', props.selected, v => selectStrategy.value.in(Array.isArray(v) ? v.map(resolveValue) : v, children.value, parents.value, disabled.value), v => selectStrategy.value.out(v, children.value, parents.value));\n onBeforeUnmount(() => {\n isUnmounted = true;\n });\n function getPath(id) {\n const path = [];\n let parent = toRaw(id);\n while (!isUndefined(parent)) {\n path.unshift(parent);\n parent = parents.value.get(parent);\n }\n return path;\n }\n const vm = getCurrentInstance('nested');\n const nodeIds = new Set();\n const itemsUpdatePropagation = throttle(() => {\n nextTick(() => {\n children.value = new Map(children.value);\n parents.value = new Map(parents.value);\n });\n }, 100);\n watch(() => [items.value, toValue(returnObject)], () => {\n if (props.itemsRegistration === 'props') {\n updateInternalMaps();\n }\n }, {\n immediate: true\n });\n function updateInternalMaps() {\n const _parents = new Map();\n const _children = new Map();\n const _disabled = new Set();\n const getValue = toValue(returnObject) ? item => toRaw(item.raw) : item => item.value;\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 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 if (item.props.disabled) {\n _disabled.add(itemValue);\n }\n }\n children.value = _children;\n parents.value = _parents;\n disabled.value = _disabled;\n }\n const nested = {\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 for (const [key, value] of selected.value.entries()) {\n if (value === 'on') arr.push(key);\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 parentId && id !== parentId && parents.value.set(id, parentId);\n isDisabled && disabled.value.add(id);\n isGroup && children.value.set(id, []);\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 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', {\n id,\n value,\n path: getPath(id),\n 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 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', {\n id,\n value,\n path: getPath(id),\n 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 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 vm.emit('click:activate', {\n id,\n value,\n path: getPath(id),\n 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 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 provide(VNestedSymbol, nested);\n return nested.root;\n};\nexport const useNestedItem = (id, isDisabled, isGroup) => {\n const parent = inject(VNestedSymbol, emptyNested);\n const uidSymbol = Symbol('nested item');\n const computedId = computed(() => {\n const idValue = toRaw(toValue(id));\n return !isUndefined(idValue) ? idValue : uidSymbol;\n });\n const item = {\n ...parent,\n id: computedId,\n open: (open, e) => parent.root.open(computedId.value, open, e),\n openOnSelect: (open, e) => 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, e) => 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, e) => 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 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 onBeforeUnmount(() => {\n if (parent.isGroupActivator || parent.root.itemsRegistration.value === 'props') return;\n parent.root.unregister(computedId.value);\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 watch(() => toValue(isDisabled), val => {\n parent.root.updateDisabled(computedId.value, val);\n });\n isGroup && provide(VNestedSymbol, item);\n return item;\n};\nexport const useNestedGroupActivator = () => {\n const parent = inject(VNestedSymbol, emptyNested);\n provide(VNestedSymbol, {\n ...parent,\n isGroupActivator: true\n });\n};\n//# sourceMappingURL=nested.js.map","import { createVNode as _createVNode, vShow as _vShow, createElementVNode as _createElementVNode, withDirectives as _withDirectives, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\";\n// Components\nimport { VExpandTransition } from \"../transitions/index.js\";\nimport { VDefaultsProvider } from \"../VDefaultsProvider/index.js\"; // Composables\nimport { useList } from \"./list.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { IconValue } from \"../../composables/icons.js\";\nimport { useNestedGroupActivator, useNestedItem, VNestedSymbol } from \"../../composables/nested/nested.js\";\nimport { useSsrBoot } from \"../../composables/ssrBoot.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { MaybeTransition } from \"../../composables/transition.js\"; // Utilities\nimport { computed, inject, toRef } from 'vue';\nimport { defineComponent, genericComponent, propsFactory, useRender } from \"../../util/index.js\";\nconst VListGroupActivator = defineComponent({\n name: 'VListGroupActivator',\n setup(_, {\n slots\n }) {\n useNestedGroupActivator();\n return () => slots.default?.();\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 ...makeComponentProps(),\n ...makeTagProps()\n}, 'VListGroup');\nexport const VListGroup = genericComponent()({\n name: 'VListGroup',\n props: makeVListGroupProps(),\n setup(props, {\n slots\n }) {\n const {\n isOpen,\n open,\n id: _id\n } = 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 {\n isBooted\n } = useSsrBoot();\n const parent = inject(VNestedSymbol);\n const renderWhenClosed = toRef(() => parent?.root?.itemsRegistration.value === 'render');\n function onClick(e) {\n if (['INPUT', 'TEXTAREA'].includes(e.target?.tagName)) return;\n open(!isOpen.value, e);\n }\n const activatorProps = computed(() => ({\n onClick,\n class: 'v-list-group__header',\n id: id.value\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 useRender(() => _createVNode(props.tag, {\n \"class\": _normalizeClass(['v-list-group', {\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 }, props.class]),\n \"style\": _normalizeStyle(props.style)\n }, {\n default: () => [slots.activator && _createVNode(VDefaultsProvider, {\n \"defaults\": activatorDefaults.value\n }, {\n default: () => [_createVNode(VListGroupActivator, null, {\n default: () => [slots.activator({\n props: activatorProps.value,\n isOpen: isOpen.value\n })]\n })]\n }), _createVNode(MaybeTransition, {\n \"transition\": {\n component: VExpandTransition\n },\n \"disabled\": !isBooted.value\n }, {\n default: () => [renderWhenClosed.value ? _withDirectives(_createElementVNode(\"div\", {\n \"class\": \"v-list-group__items\",\n \"role\": \"group\",\n \"aria-labelledby\": id.value,\n \"inert\": !isOpen.value\n }, [slots.default?.()]), [[_vShow, isOpen.value]]) : isOpen.value && _createElementVNode(\"div\", {\n \"class\": \"v-list-group__items\",\n \"role\": \"group\",\n \"aria-labelledby\": id.value\n }, [slots.default?.()])]\n })]\n }));\n return {\n isOpen\n };\n }\n});\n//# sourceMappingURL=VListGroup.js.map","import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createVNode as _createVNode } from \"vue\";\n// Composables\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeTagProps } from \"../../composables/tag.js\"; // Utilities\nimport { genericComponent, propsFactory, useRender } from \"../../util/index.js\";\nexport const makeVListItemSubtitleProps = propsFactory({\n opacity: [Number, String],\n ...makeComponentProps(),\n ...makeTagProps()\n}, 'VListItemSubtitle');\nexport const VListItemSubtitle = genericComponent()({\n name: 'VListItemSubtitle',\n props: makeVListItemSubtitleProps(),\n setup(props, {\n slots\n }) {\n useRender(() => _createVNode(props.tag, {\n \"class\": _normalizeClass(['v-list-item-subtitle', props.class]),\n \"style\": _normalizeStyle([{\n '--v-list-item-subtitle-opacity': props.opacity\n }, props.style])\n }, slots));\n return {};\n }\n});\n//# sourceMappingURL=VListItemSubtitle.js.map","// Utilities\nimport { createSimpleFunctional } from \"../../util/index.js\";\nexport const VListItemTitle = createSimpleFunctional('v-list-item-title');\n//# sourceMappingURL=VListItemTitle.js.map","import { Fragment as _Fragment, createVNode as _createVNode, createElementVNode as _createElementVNode, mergeProps as _mergeProps, withDirectives as _withDirectives } from \"vue\";\n/* eslint-disable complexity */\n\n// Styles\nimport \"./VListItem.css\";\n\n// Components\nimport { VListItemSubtitle } from \"./VListItemSubtitle.js\";\nimport { VListItemTitle } from \"./VListItemTitle.js\";\nimport { VAvatar } from \"../VAvatar/index.js\";\nimport { VDefaultsProvider } from \"../VDefaultsProvider/index.js\";\nimport { VIcon } from \"../VIcon/index.js\"; // Composables\nimport { useList } from \"./list.js\";\nimport { makeBorderProps, useBorder } from \"../../composables/border.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeDensityProps, useDensity } from \"../../composables/density.js\";\nimport { makeDimensionProps, useDimension } from \"../../composables/dimensions.js\";\nimport { makeElevationProps, useElevation } from \"../../composables/elevation.js\";\nimport { IconValue } from \"../../composables/icons.js\";\nimport { useNestedItem } from \"../../composables/nested/nested.js\";\nimport { makeRoundedProps, useRounded } from \"../../composables/rounded.js\";\nimport { makeRouterProps, useLink } from \"../../composables/router.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\";\nimport { genOverlays, makeVariantProps, useVariant } from \"../../composables/variant.js\"; // Directives\nimport vRipple from \"../../directives/ripple/index.js\"; // Utilities\nimport { computed, nextTick, onBeforeMount, ref, toDisplayString, toRef, watch } from 'vue';\nimport { convertToUnit, deprecate, EventProp, genericComponent, propsFactory, useRender } from \"../../util/index.js\"; // Types\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],\n link: {\n type: Boolean,\n default: undefined\n },\n nav: Boolean,\n prependAvatar: String,\n prependIcon: IconValue,\n ripple: {\n type: [Boolean, Object],\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 onClick: EventProp(),\n onClickOnce: EventProp(),\n ...makeBorderProps(),\n ...makeComponentProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makeRoundedProps(),\n ...makeRouterProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n ...makeVariantProps({\n variant: 'text'\n })\n}, 'VListItem');\nexport const VListItem = genericComponent()({\n name: 'VListItem',\n directives: {\n vRipple\n },\n props: makeVListItemProps(),\n emits: {\n click: e => true\n },\n setup(props, {\n attrs,\n slots,\n emit\n }) {\n const link = useLink(props, attrs);\n const rootEl = ref();\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(() => props.active !== false && (props.active || link.isActive?.value || (root.activatable.value ? isActivated.value : isSelected.value)));\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(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || isSelectable.value));\n const isTracked = computed(() => list && list.navigationStrategy.value === 'track' && props.index !== undefined && list.trackingIndex.value === props.index);\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 : root.selectable.value ? isSelected.value : isActive.value;\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({\n block: 'nearest',\n behavior: 'instant'\n });\n });\n watch(isTracked, val => {\n if (!val) return;\n rootEl.value?.scrollIntoView({\n block: 'nearest',\n behavior: 'instant'\n });\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 const {\n themeClasses\n } = provideTheme(props);\n const {\n borderClasses\n } = useBorder(props);\n const {\n colorClasses,\n colorStyles,\n variantClasses\n } = useVariant(variantProps);\n const {\n densityClasses\n } = useDensity(props);\n const {\n dimensionStyles\n } = useDimension(props);\n const {\n elevationClasses\n } = useElevation(props);\n const {\n roundedClasses,\n roundedStyles\n } = useRounded(roundedProps);\n const lineClasses = toRef(() => props.lines ? `v-list-item--${props.lines}-line` : undefined);\n const rippleOptions = toRef(() => props.ripple !== undefined && !!props.ripple && list?.filterable ? {\n keys: ['Enter']\n } : props.ripple);\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 }));\n function onClick(e) {\n emit('click', e);\n if (['INPUT', 'TEXTAREA'].includes(e.target?.tagName)) return;\n if (!isClickable.value) return;\n link.navigate.value?.(e);\n if (isGroupActivator) return;\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 function onKeyDown(e) {\n const target = e.target;\n if (['INPUT', 'TEXTAREA'].includes(target.tagName)) return;\n\n // Treeview items own their Enter/Space handling\n if (e.currentTarget?.getAttribute('role') === 'treeitem') return;\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 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 list?.updateHasPrepend(hasPrepend);\n if (props.activeColor) {\n deprecate('active-color', ['color', 'base-color']);\n }\n return _withDirectives(_createVNode(Tag, _mergeProps(link.linkProps, {\n \"ref\": rootEl,\n \"id\": props.index !== undefined && list ? `v-list-item-${list.uid}-${props.index}` : undefined,\n \"class\": ['v-list-item', {\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 }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],\n \"style\": [{\n '--v-list-prepend-gap': convertToUnit(props.prependGap)\n }, colorStyles.value, dimensionStyles.value, roundedStyles.value, props.style],\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 }), {\n default: () => [genOverlays(isClickable.value || isActive.value, 'v-list-item'), hasPrepend && _createElementVNode(\"div\", {\n \"key\": \"prepend\",\n \"class\": \"v-list-item__prepend\"\n }, [!slots.prepend ? _createElementVNode(_Fragment, null, [props.prependAvatar && _createVNode(VAvatar, {\n \"key\": \"prepend-avatar\",\n \"density\": props.density,\n \"image\": props.prependAvatar\n }, null), props.prependIcon && _createVNode(VIcon, {\n \"key\": \"prepend-icon\",\n \"density\": props.density,\n \"icon\": props.prependIcon\n }, null)]) : _createVNode(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 default: () => [slots.prepend?.(slotProps.value)]\n }), _createElementVNode(\"div\", {\n \"class\": \"v-list-item__spacer\"\n }, null)]), _createElementVNode(\"div\", {\n \"class\": \"v-list-item__content\",\n \"data-no-activator\": \"\"\n }, [hasTitle && _createVNode(VListItemTitle, {\n \"key\": \"title\"\n }, {\n default: () => [slots.title?.({\n title: props.title\n }) ?? toDisplayString(props.title)]\n }), hasSubtitle && _createVNode(VListItemSubtitle, {\n \"key\": \"subtitle\"\n }, {\n default: () => [slots.subtitle?.({\n subtitle: props.subtitle\n }) ?? toDisplayString(props.subtitle)]\n }), slots.default?.(slotProps.value)]), hasAppend && _createElementVNode(\"div\", {\n \"key\": \"append\",\n \"class\": \"v-list-item__append\"\n }, [!slots.append ? _createElementVNode(_Fragment, null, [props.appendIcon && _createVNode(VIcon, {\n \"key\": \"append-icon\",\n \"density\": props.density,\n \"icon\": props.appendIcon\n }, null), props.appendAvatar && _createVNode(VAvatar, {\n \"key\": \"append-avatar\",\n \"density\": props.density,\n \"image\": props.appendAvatar\n }, null)]) : _createVNode(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 default: () => [slots.append?.(slotProps.value)]\n }), _createElementVNode(\"div\", {\n \"class\": \"v-list-item__spacer\"\n }, null)])]\n }), [[vRipple, isClickable.value && rippleOptions.value]]);\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//# sourceMappingURL=VListItem.js.map","import { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createVNode as _createVNode } from \"vue\";\n// Composables\nimport { useTextColor } from \"../../composables/color.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeTagProps } from \"../../composables/tag.js\"; // Utilities\nimport { genericComponent, propsFactory, useRender } from \"../../util/index.js\";\nexport const makeVListSubheaderProps = propsFactory({\n color: String,\n inset: Boolean,\n sticky: Boolean,\n title: String,\n ...makeComponentProps(),\n ...makeTagProps()\n}, 'VListSubheader');\nexport const VListSubheader = genericComponent()({\n name: 'VListSubheader',\n props: makeVListSubheaderProps(),\n setup(props, {\n slots\n }) {\n const {\n textColorClasses,\n textColorStyles\n } = useTextColor(() => props.color);\n useRender(() => {\n const hasText = !!(slots.default || props.title);\n return _createVNode(props.tag, {\n \"class\": _normalizeClass(['v-list-subheader', {\n 'v-list-subheader--inset': props.inset,\n 'v-list-subheader--sticky': props.sticky\n }, textColorClasses.value, props.class]),\n \"style\": _normalizeStyle([{\n textColorStyles\n }, props.style])\n }, {\n default: () => [hasText && _createElementVNode(\"div\", {\n \"class\": \"v-list-subheader__text\"\n }, [slots.default?.() ?? props.title])]\n });\n });\n return {};\n }\n});\n//# sourceMappingURL=VListSubheader.js.map","import { createVNode as _createVNode, mergeProps as _mergeProps } from \"vue\";\n// Components\nimport { VListGroup } from \"./VListGroup.js\";\nimport { VListItem } from \"./VListItem.js\";\nimport { VListSubheader } from \"./VListSubheader.js\";\nimport { VDivider } from \"../VDivider/index.js\"; // Utilities\nimport { mergeProps } from 'vue';\nimport { createList } from \"./list.js\";\nimport { genericComponent, propsFactory } from \"../../util/index.js\"; // Types\nexport const makeVListChildrenProps = propsFactory({\n items: Array,\n returnObject: Boolean\n}, 'VListChildren');\nexport const VListChildren = genericComponent()({\n name: 'VListChildren',\n props: makeVListChildrenProps(),\n setup(props, {\n slots\n }) {\n createList();\n return () => slots.default?.() ?? props.items?.map(({\n children,\n props: itemProps,\n type,\n raw: item\n }, index) => {\n if (type === 'divider') {\n return slots.divider?.({\n props: itemProps\n }) ?? _createVNode(VDivider, itemProps, null);\n }\n if (type === 'subheader') {\n return slots.subheader?.({\n props: itemProps\n }) ?? _createVNode(VListSubheader, itemProps, null);\n }\n const slotsWithItem = {\n subtitle: slots.subtitle ? slotProps => slots.subtitle?.({\n ...slotProps,\n item\n }) : undefined,\n prepend: slots.prepend ? slotProps => slots.prepend?.({\n ...slotProps,\n item\n }) : undefined,\n append: slots.append ? slotProps => slots.append?.({\n ...slotProps,\n item\n }) : undefined,\n title: slots.title ? slotProps => slots.title?.({\n ...slotProps,\n item\n }) : undefined\n };\n const listGroupProps = VListGroup.filterProps(itemProps);\n return children ? _createVNode(VListGroup, _mergeProps(listGroupProps, {\n \"value\": props.returnObject ? item : itemProps?.value,\n \"rawId\": itemProps?.value\n }), {\n activator: ({\n props: activatorProps\n }) => {\n const listItemProps = mergeProps(itemProps, activatorProps, {\n value: props.returnObject ? item : itemProps.value\n });\n return slots.header ? slots.header({\n props: listItemProps\n }) : _createVNode(VListItem, _mergeProps(listItemProps, {\n \"index\": index\n }), slotsWithItem);\n },\n default: () => _createVNode(VListChildren, {\n \"items\": children,\n \"returnObject\": props.returnObject\n }, slots)\n }) : slots.item ? slots.item({\n props: {\n ...itemProps,\n index\n }\n }) : _createVNode(VListItem, _mergeProps(itemProps, {\n \"index\": index,\n \"value\": props.returnObject ? item : itemProps.value\n }), slotsWithItem);\n });\n }\n});\n//# sourceMappingURL=VListChildren.js.map","// Utilities\nimport { computed, shallowRef, watchEffect } from 'vue';\nimport { deepEqual, getPropertyFromItem, isNull, isObject, isPrimitive, isString, omit, pick, propsFactory } from \"../util/index.js\"; // Types\n// Composables\nexport const makeItemsProps = propsFactory({\n items: {\n type: Array,\n default: () => []\n },\n itemTitle: {\n type: [String, Array, Function],\n default: 'title'\n },\n itemValue: {\n type: [String, Array, Function],\n default: 'value'\n },\n itemChildren: {\n type: [Boolean, String, Array, Function],\n default: 'children'\n },\n itemProps: {\n type: [Boolean, String, Array, Function],\n default: 'props'\n },\n itemType: {\n type: [Boolean, String, Array, Function],\n default: 'type'\n },\n returnObject: Boolean,\n valueComparator: Function\n}, 'list-items');\nconst itemTypes = new Set(['item', 'divider', 'subheader']);\nexport function transformItem(props, item) {\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 ? isObject(item) ? 'children' in item ? omit(item, ['children']) : item : undefined : getPropertyFromItem(item, props.itemProps);\n let type = getPropertyFromItem(item, props.itemType, 'item');\n if (!itemTypes.has(type)) {\n type = 'item';\n }\n const _props = {\n title,\n value,\n ...itemProps\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}\ntransformItem.neededProps = ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'itemType'];\nexport function transformItems(props, items) {\n // avoid reactive access in the loop\n const _props = pick(props, transformItem.neededProps);\n const array = [];\n for (const item of items) {\n array.push(transformItem(_props, item));\n }\n return array;\n}\nexport function useItems(props) {\n const items = computed(() => transformItems(props, props.items));\n const hasNullItem = computed(() => items.value.some(item => isNull(item.value)));\n const itemsMap = shallowRef(new Map());\n const keylessItems = shallowRef([]);\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 function transformIn(value) {\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 const returnValue = [];\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 returnValue.push(...fastItems);\n }\n return returnValue;\n }\n function transformOut(value) {\n return props.returnObject ? value.map(({\n raw\n }) => raw) : value.map(({\n value\n }) => value);\n }\n return {\n items,\n transformIn,\n transformOut\n };\n}\n//# sourceMappingURL=list-items.js.map","import { createVNode as _createVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\";\n// Styles\nimport \"./VList.css\";\n\n// Components\nimport { VListChildren } from \"./VListChildren.js\"; // Composables\nimport { createList } from \"./list.js\";\nimport { makeBorderProps, useBorder } from \"../../composables/border.js\";\nimport { useBackgroundColor } from \"../../composables/color.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { provideDefaults } from \"../../composables/defaults.js\";\nimport { makeDensityProps, useDensity } from \"../../composables/density.js\";\nimport { makeDimensionProps, useDimension } from \"../../composables/dimensions.js\";\nimport { makeElevationProps, useElevation } from \"../../composables/elevation.js\";\nimport { IconValue } from \"../../composables/icons.js\";\nimport { makeItemsProps } from \"../../composables/list-items.js\";\nimport { makeNestedProps, useNested } from \"../../composables/nested/nested.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\";\nimport { makeRoundedProps, useRounded } from \"../../composables/rounded.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\";\nimport { makeVariantProps } from \"../../composables/variant.js\"; // Utilities\nimport { computed, ref, shallowRef, toRef, useId, watch } from 'vue';\nimport { convertToUnit, EventProp, focusChild, genericComponent, getActiveElement, getPropertyFromItem, isPrimitive, omit, propsFactory, useRender } from \"../../util/index.js\"; // Types\nconst itemTypes = new Set(['item', 'divider', 'subheader']);\nfunction transformItem(props, item) {\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 ? omit(item, ['children']) : getPropertyFromItem(item, props.itemProps);\n let type = getPropertyFromItem(item, props.itemType, 'item');\n if (!itemTypes.has(type)) {\n type = 'item';\n }\n const _props = {\n title,\n value,\n ...itemProps\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}\nfunction transformItems(props, items) {\n const array = [];\n for (const item of items) {\n array.push(transformItem(props, item));\n }\n return array;\n}\nexport function useListItems(props) {\n const items = computed(() => transformItems(props, props.items));\n return {\n 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],\n default: 'one'\n },\n slim: Boolean,\n prependGap: [Number, String],\n indent: [Number, String],\n nav: Boolean,\n navigationStrategy: {\n type: String,\n default: 'focus'\n },\n navigationIndex: Number,\n 'onClick:open': EventProp(),\n 'onClick:select': EventProp(),\n 'onUpdate:opened': EventProp(),\n ...makeNestedProps({\n selectStrategy: 'single-leaf',\n openStrategy: 'list'\n }),\n ...makeBorderProps(),\n ...makeComponentProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makeItemsProps(),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n ...makeVariantProps({\n variant: 'text'\n })\n}, 'VList');\nexport const VList = genericComponent()({\n name: 'VList',\n props: makeVListProps(),\n emits: {\n 'update:selected': value => true,\n 'update:activated': value => true,\n 'update:opened': value => true,\n 'update:navigationIndex': value => true,\n 'click:open': value => true,\n 'click:activate': value => true,\n 'click:select': value => true\n },\n setup(props, {\n attrs,\n slots,\n emit\n }) {\n const {\n items\n } = useListItems(props);\n const {\n themeClasses\n } = provideTheme(props);\n const {\n backgroundColorClasses,\n backgroundColorStyles\n } = useBackgroundColor(() => props.bgColor);\n const {\n borderClasses\n } = useBorder(props);\n const {\n densityClasses\n } = useDensity(props);\n const {\n dimensionStyles\n } = useDimension(props);\n const {\n elevationClasses\n } = useElevation(props);\n const {\n roundedClasses,\n roundedStyles\n } = useRounded(props);\n const {\n children,\n open,\n parents,\n select,\n getPath\n } = useNested(props, {\n items,\n returnObject: toRef(() => props.returnObject),\n scrollToActive: toRef(() => props.navigationStrategy === 'track'),\n valueComparator: toRef(() => props.valueComparator)\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 const navigationIndex = useProxiedModel(props, 'navigationIndex', -1, v => v ?? -1);\n const uid = useId();\n createList({\n filterable: props.filterable,\n trackingIndex: navigationIndex,\n navigationStrategy: toRef(() => props.navigationStrategy),\n uid\n });\n watch(items, () => {\n if (props.navigationStrategy === 'track') {\n navigationIndex.value = -1;\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 const isFocused = shallowRef(false);\n const contentRef = ref();\n function onFocusin(e) {\n isFocused.value = true;\n }\n function onFocusout(e) {\n isFocused.value = false;\n }\n function onFocus(e) {\n if (props.navigationStrategy === 'track') {\n if (!~navigationIndex.value) {\n navigationIndex.value = getNextIndex('first');\n }\n } else if (!isFocused.value && !(e.relatedTarget && contentRef.value?.contains(e.relatedTarget))) focus();\n }\n function onBlur() {\n if (props.navigationStrategy === 'track') {\n navigationIndex.value = -1;\n }\n }\n function getNavigationDirection(key) {\n switch (key) {\n case 'ArrowDown':\n return 'next';\n case 'ArrowUp':\n return 'prev';\n case 'Home':\n return 'first';\n case 'End':\n return 'last';\n default:\n return null;\n }\n }\n function getNextIndex(direction) {\n const itemCount = items.value.length;\n if (itemCount === 0) return -1;\n let nextIndex;\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 if (nextIndex < 0) nextIndex = itemCount - 1;\n if (nextIndex >= itemCount) nextIndex = 0;\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 return -1;\n }\n function onKeydown(e) {\n const target = e.target;\n if (!contentRef.value || target.tagName === 'INPUT' && ['Home', 'End'].includes(e.key) || target.tagName === 'TEXTAREA') {\n return;\n }\n const direction = getNavigationDirection(e.key);\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, {\n preventScroll: true\n });\n const focused = getActiveElement();\n if (focused && contentRef.value?.contains(focused)) {\n focused.scrollIntoView({\n block: 'nearest'\n });\n }\n }\n }\n }\n function onMousedown(e) {\n isFocused.value = true;\n }\n function focus(location, options) {\n if (contentRef.value) {\n return focusChild(contentRef.value, location, options);\n }\n }\n useRender(() => {\n const indent = props.indent ?? (props.prependGap ? Number(props.prependGap) + 24 : undefined);\n const ariaMultiselectable = isSelectable.value ? attrs.ariaMultiselectable ?? !String(props.selectStrategy).startsWith('single-') : undefined;\n return _createVNode(props.tag, {\n \"ref\": contentRef,\n \"class\": _normalizeClass(['v-list', {\n 'v-list--disabled': props.disabled,\n 'v-list--nav': props.nav,\n 'v-list--slim': props.slim\n }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class]),\n \"style\": _normalizeStyle([{\n '--v-list-indent': convertToUnit(indent),\n '--v-list-group-prepend': indent ? '0px' : undefined,\n '--v-list-prepend-gap': convertToUnit(props.prependGap)\n }, backgroundColorStyles.value, dimensionStyles.value, roundedStyles.value, props.style]),\n \"tabindex\": props.disabled || isFocused.value ? -1 : 0,\n \"role\": isSelectable.value ? 'listbox' : 'list',\n \"aria-activedescendant\": props.navigationStrategy === 'track' && navigationIndex.value >= 0 ? `v-list-item-${uid}-${navigationIndex.value}` : undefined,\n \"aria-multiselectable\": ariaMultiselectable,\n \"onFocusin\": onFocusin,\n \"onFocusout\": onFocusout,\n \"onFocus\": onFocus,\n \"onBlur\": onBlur,\n \"onKeydown\": onKeydown,\n \"onMousedown\": onMousedown\n }, {\n default: () => [_createVNode(VListChildren, {\n \"items\": items.value,\n \"returnObject\": props.returnObject\n }, slots)]\n });\n });\n return {\n open,\n select,\n focus,\n children,\n parents,\n getPath,\n navigationIndex\n };\n }\n});\n//# sourceMappingURL=VList.js.map","// Utilities\nimport { createSimpleFunctional } from \"../../util/index.js\";\nexport const VListImg = createSimpleFunctional('v-list-img');\n//# sourceMappingURL=VListImg.js.map","import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createVNode as _createVNode } from \"vue\";\n// Composables\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeTagProps } from \"../../composables/tag.js\"; // Utilities\nimport { genericComponent, propsFactory, useRender } from \"../../util/index.js\";\nexport const makeVListItemActionProps = propsFactory({\n start: Boolean,\n end: Boolean,\n ...makeComponentProps(),\n ...makeTagProps()\n}, 'VListItemAction');\nexport const VListItemAction = genericComponent()({\n name: 'VListItemAction',\n props: makeVListItemActionProps(),\n setup(props, {\n slots\n }) {\n useRender(() => _createVNode(props.tag, {\n \"class\": _normalizeClass(['v-list-item-action', {\n 'v-list-item-action--start': props.start,\n 'v-list-item-action--end': props.end\n }, props.class]),\n \"style\": _normalizeStyle(props.style)\n }, slots));\n return {};\n }\n});\n//# sourceMappingURL=VListItemAction.js.map","import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createVNode as _createVNode } from \"vue\";\n// Composables\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeTagProps } from \"../../composables/tag.js\"; // Utilities\nimport { genericComponent, propsFactory, useRender } from \"../../util/index.js\";\nexport const makeVListItemMediaProps = propsFactory({\n start: Boolean,\n end: Boolean,\n ...makeComponentProps(),\n ...makeTagProps()\n}, 'VListItemMedia');\nexport const VListItemMedia = genericComponent()({\n name: 'VListItemMedia',\n props: makeVListItemMediaProps(),\n setup(props, {\n slots\n }) {\n useRender(() => {\n return _createVNode(props.tag, {\n \"class\": _normalizeClass(['v-list-item-media', {\n 'v-list-item-media--start': props.start,\n 'v-list-item-media--end': props.end\n }, props.class]),\n \"style\": _normalizeStyle(props.style)\n }, slots);\n });\n return {};\n }\n});\n//# sourceMappingURL=VListItemMedia.js.map","// Types\n\nexport const VMenuSymbol = Symbol.for('vuetify:v-menu');\n//# sourceMappingURL=shared.js.map","// Types\n\n/** Convert a point in local space to viewport space */\nexport function elementToViewport(point, offset) {\n return {\n x: point.x + offset.x,\n y: point.y + offset.y\n };\n}\n\n/** Convert a point in viewport space to local space */\nexport function viewportToElement(point, offset) {\n return {\n x: point.x - offset.x,\n y: point.y - offset.y\n };\n}\n\n/** Get the difference between two points */\nexport function getOffset(a, b) {\n return {\n x: a.x - b.x,\n y: a.y - b.y\n };\n}\n\n/** Convert an anchor object to a point in local space */\nexport function anchorToPoint(anchor, box) {\n if (anchor.side === 'top' || anchor.side === 'bottom') {\n const {\n side,\n align\n } = anchor;\n const x = align === 'left' ? 0 : align === 'center' ? box.width / 2 : align === 'right' ? box.width : align;\n const y = side === 'top' ? 0 : side === 'bottom' ? box.height : side;\n return elementToViewport({\n x,\n y\n }, box);\n } else if (anchor.side === 'left' || anchor.side === 'right') {\n const {\n side,\n align\n } = anchor;\n const x = side === 'left' ? 0 : side === 'right' ? box.width : side;\n const y = align === 'top' ? 0 : align === 'center' ? box.height / 2 : align === 'bottom' ? box.height : align;\n return elementToViewport({\n x,\n y\n }, box);\n }\n return elementToViewport({\n x: box.width / 2,\n y: box.height / 2\n }, box);\n}\n//# sourceMappingURL=point.js.map","// Composables\nimport { useToggleScope } from \"../../composables/toggleScope.js\"; // Utilities\nimport { computed, nextTick, onScopeDispose, ref, watch } from 'vue';\nimport { anchorToPoint, getOffset } from \"./util/point.js\";\nimport { CircularBuffer, clamp, consoleError, convertToUnit, deepEqual, destructComputed, flipAlign, flipCorner, flipSide, getAxis, getScrollParents, IN_BROWSER, isFixedPosition, isFunction, isNumber, isString, nullifyTransforms, parseAnchor, propsFactory } from \"../../util/index.js\";\nimport { Box, getElementBox, getOverflow, getTargetBox } from \"../../util/box.js\"; // Types\nconst locationStrategies = {\n static: staticLocationStrategy,\n // specific viewport position, usually centered\n connected: connectedLocationStrategy // connected to a certain element\n};\nexport const makeLocationStrategyProps = propsFactory({\n locationStrategy: {\n type: [String, Function],\n default: 'static',\n validator: val => isFunction(val) || val in locationStrategies\n },\n location: String,\n origin: {\n type: String,\n default: 'auto'\n },\n offset: [Number, String, Array],\n stickToTarget: Boolean,\n viewportMargin: {\n type: [Number, String],\n default: 12\n }\n}, 'VOverlay-location-strategies');\nexport function useLocationStrategies(props, data) {\n const contentStyles = ref({});\n const updateLocation = ref();\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 window.addEventListener('resize', onResize, {\n passive: true\n });\n visualViewport?.addEventListener('resize', onVisualResize, {\n passive: true\n });\n visualViewport?.addEventListener('scroll', onVisualScroll, {\n 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 function onResize(e) {\n updateLocation.value?.(e);\n }\n function onVisualResize(e) {\n updateLocation.value?.(e);\n }\n function onVisualScroll(e) {\n updateLocation.value?.(e);\n }\n return {\n contentStyles,\n updateLocation\n };\n}\nexport function getStaticLocationClasses(location) {\n if (!location) return undefined;\n const normalized = location.includes(' ') ? location : `${location} center`;\n let justify = 'center';\n let align = 'center';\n const inline = {\n left: 'start',\n start: 'start',\n right: 'end',\n end: 'end'\n };\n const block = {\n top: 'start',\n bottom: 'end'\n };\n for (const token of normalized.split(' ')) {\n if (token in inline) justify = inline[token];else if (token in block) align = block[token];\n }\n return {\n [`v-overlay--justify-${justify}`]: true,\n [`v-overlay--align-${align}`]: true\n };\n}\nfunction staticLocationStrategy(data, props, contentStyles) {\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 {\n side,\n align\n } = parseAnchor(props.origin, data.isRtl.value);\n contentStyles.value = {\n transformOrigin: `${side} ${align}`\n };\n } else {\n contentStyles.value = {};\n }\n }\n watch([() => props.origin, data.isRtl], updateStyles, {\n immediate: true\n });\n return {\n updateLocation: () => {}\n };\n}\n\n/** Resolve a CSS length the browser understands (calc(), min(), vw, …) to pixels */\nfunction resolveCssLength(value, container, isWidth) {\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, isRtl) {\n // const scrollables = new Map()\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 const computed = getComputedStyle(el);\n function offset(side) {\n return el.style[side] ? parseFloat(computed[side]) || 0 : 0;\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}\nfunction connectedLocationStrategy(data, props, contentStyles) {\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 const {\n preferredAnchor,\n preferredOrigin\n } = destructComputed(() => {\n const parsedAnchor = parseAnchor(props.location ?? 'bottom', data.isRtl.value);\n const parsedOrigin = props.origin === 'overlap' ? parsedAnchor : props.origin === 'auto' ? flipSide(parsedAnchor) : 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 const [getMinWidth, getMinHeight, getMaxWidth, getMaxHeight] = ['minWidth', 'minHeight', 'maxWidth', 'maxHeight'].map(key => {\n const isWidth = key.endsWith('Width');\n return () => {\n const raw = props[key];\n if (raw == null) return Infinity;\n const container = data.contentEl.value?.parentElement ?? document.documentElement;\n if (isNumber(raw) || /^-?[\\d.]+(?:px)?$/.test(raw.trim())) {\n return parseFloat(raw);\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 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 let observe = false;\n let lastFrame = -1;\n const flipped = new CircularBuffer(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 if (flipped.isFull) {\n const values = flipped.values();\n if (deepEqual(values.at(-1), values.at(-3)) && !deepEqual(values.at(-1), values.at(-2))) {\n // Flipping is causing a container resize loop\n return;\n }\n }\n const result = updateLocation();\n if (result) flipped.push(result.flipped);\n });\n let targetBox = new Box({\n x: 0,\n y: 0,\n width: 0,\n 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 }, {\n immediate: true\n });\n watch(data.contentEl, (newContentEl, oldContentEl) => {\n if (oldContentEl) observer.unobserve(oldContentEl);\n if (newContentEl) observer.observe(newContentEl);\n }, {\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 if (!data.target.value || !data.contentEl.value) return;\n if (Array.isArray(data.target.value) || data.target.value.offsetParent || data.target.value.getClientRects().length) {\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 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 const viewport = scrollParents.reduce((box, el) => {\n const scrollBox = getElementBox(el);\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 if (props.stickToTarget) {\n viewport.x += Math.min(viewportMargin, targetBox.x);\n viewport.y += Math.min(viewportMargin, targetBox.y);\n viewport.width = Math.max(viewport.width - viewportMargin * 2, targetBox.x + targetBox.width - viewportMargin);\n viewport.height = Math.max(viewport.height - viewportMargin * 2, targetBox.y + targetBox.height - viewportMargin);\n } else {\n viewport.x += viewportMargin;\n viewport.y += viewportMargin;\n viewport.width -= viewportMargin * 2;\n viewport.height -= viewportMargin * 2;\n }\n let placement = {\n anchor: preferredAnchor.value,\n origin: preferredOrigin.value\n };\n function checkOverflow(_placement) {\n const box = new Box(contentBox);\n const targetPoint = anchorToPoint(_placement.anchor, targetBox);\n const contentPoint = anchorToPoint(_placement.origin, box);\n let {\n x,\n y\n } = getOffset(targetPoint, contentPoint);\n switch (_placement.anchor.side) {\n case 'top':\n y -= offset.value[0];\n break;\n case 'bottom':\n y += offset.value[0];\n break;\n case 'left':\n x -= offset.value[0];\n break;\n case 'right':\n x += offset.value[0];\n break;\n }\n switch (_placement.anchor.align) {\n case 'top':\n y -= offset.value[1];\n break;\n case 'bottom':\n y += offset.value[1];\n break;\n case 'left':\n x -= offset.value[1];\n break;\n case 'right':\n x += offset.value[1];\n break;\n }\n box.x += x;\n box.y += y;\n box.width = Math.min(box.width, maxWidth);\n box.height = Math.min(box.height, maxHeight);\n const overflows = getOverflow(box, viewport);\n return {\n overflows,\n x,\n y\n };\n }\n let x = 0;\n let y = 0;\n const available = {\n x: 0,\n y: 0\n };\n const flipped = {\n x: false,\n y: false\n };\n let resets = -1;\n while (true) {\n if (resets++ > 10) {\n consoleError('Infinite loop detected in connectedLocationStrategy');\n break;\n }\n const {\n x: _x,\n y: _y,\n overflows\n } = checkOverflow(placement);\n x += _x;\n y += _y;\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 let reset = false;\n ['x', 'y'].forEach(key => {\n if (key === 'x' && hasOverflowX && !flipped.x || key === 'y' && hasOverflowY && !flipped.y) {\n const newPlacement = {\n anchor: {\n ...placement.anchor\n },\n origin: {\n ...placement.origin\n }\n };\n const flip = key === 'x' ? axis === 'y' ? flipAlign : flipSide : axis === 'y' ? flipSide : flipAlign;\n newPlacement.anchor = flip(newPlacement.anchor);\n newPlacement.origin = flip(newPlacement.origin);\n const {\n overflows: newOverflows\n } = checkOverflow(newPlacement);\n if (newOverflows[key].before <= overflows[key].before && newOverflows[key].after <= overflows[key].after || newOverflows[key].before + newOverflows[key].after < (overflows[key].before + overflows[key].after) / 2) {\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 x += overflows.x.before;\n contentBox.x += overflows.x.before;\n y += overflows.y.before;\n contentBox.y += overflows.y.before;\n }\n break;\n }\n const axis = getAxis(placement.anchor);\n const transformOrigin = props.origin !== 'auto' && props.origin !== 'overlap' ? parseAnchor(props.origin, data.isRtl.value) : placement.origin;\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 return {\n available,\n contentBox,\n flipped\n };\n }\n watch(() => [preferredAnchor.value, preferredOrigin.value, props.origin, props.offset, props.minWidth, props.minHeight, props.maxWidth, props.maxHeight], () => updateLocation());\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 {\n available,\n contentBox\n } = result;\n if (contentBox.height > available.y) {\n requestAnimationFrame(() => {\n updateLocation();\n requestAnimationFrame(() => {\n updateLocation();\n });\n });\n }\n });\n return {\n updateLocation\n };\n}\nfunction pixelRound(val) {\n return Math.round(val * devicePixelRatio) / devicePixelRatio;\n}\nfunction pixelCeil(val) {\n return Math.ceil(val * devicePixelRatio) / devicePixelRatio;\n}\n//# sourceMappingURL=locationStrategies.js.map","let clean = true;\nconst frames = [];\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) {\n if (!clean || frames.length) {\n frames.push(cb);\n run();\n } else {\n clean = false;\n cb();\n run();\n }\n}\nlet raf = -1;\nfunction run() {\n cancelAnimationFrame(raf);\n raf = requestAnimationFrame(() => {\n const frame = frames.shift();\n if (frame) frame();\n if (frames.length) run();else clean = true;\n });\n}\n//# sourceMappingURL=requestNewFrame.js.map","// Utilities\nimport { effectScope, onScopeDispose, watchEffect } from 'vue';\nimport { requestNewFrame } from \"./requestNewFrame.js\";\nimport { convertToUnit, getScrollParents, hasScrollbar, IN_BROWSER, isFunction, propsFactory } from \"../../util/index.js\"; // Types\nconst scrollStrategies = {\n none: null,\n close: closeScrollStrategy,\n block: blockScrollStrategy,\n reposition: repositionScrollStrategy\n};\nexport const makeScrollStrategyProps = propsFactory({\n scrollStrategy: {\n type: [String, Function],\n default: 'block',\n validator: val => isFunction(val) || val in scrollStrategies\n }\n}, 'VOverlay-scroll-strategies');\nexport function useScrollStrategies(props, data) {\n if (!IN_BROWSER) return;\n let scope;\n watchEffect(async () => {\n scope?.stop();\n if (!(data.isActive.value && props.scrollStrategy)) return;\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 onScopeDispose(() => {\n scope?.stop();\n });\n}\nfunction closeScrollStrategy(data) {\n function onScroll(e) {\n data.isActive.value = false;\n }\n bindScroll(getTargetEl(data.target.value, data.contentEl.value), onScroll);\n}\nfunction blockScrollStrategy(data, props) {\n const offsetParent = data.root.value?.offsetParent;\n const target = getTargetEl(data.target.value, data.contentEl.value);\n const scrollElements = [...new Set([...getScrollParents(target, props.contained ? offsetParent : undefined), ...getScrollParents(data.contentEl.value, props.contained ? offsetParent : undefined)])].filter(el => !el.classList.contains('v-overlay-scroll-blocked'));\n const scrollbarWidth = window.innerWidth - document.documentElement.offsetWidth;\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 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 if (el !== document.documentElement || getComputedStyle(el).overflowY !== 'scroll') {\n el.style.setProperty('--v-scrollbar-offset', convertToUnit(scrollbarWidth));\n }\n el.classList.add('v-overlay-scroll-blocked');\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 const scrollBehavior = el.style.scrollBehavior;\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 el.scrollLeft = -x;\n el.scrollTop = -y;\n el.style.scrollBehavior = scrollBehavior;\n });\n if (scrollableParent) {\n data.root.value.classList.remove('v-overlay--scroll-blocked');\n }\n });\n}\nfunction repositionScrollStrategy(data, props, scope) {\n let slow = false;\n let raf = -1;\n let ric = -1;\n function update(e) {\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 ric = (typeof requestIdleCallback === 'undefined' ? cb => 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 onScopeDispose(() => {\n typeof cancelIdleCallback !== 'undefined' && cancelIdleCallback(ric);\n cancelAnimationFrame(raf);\n });\n}\nfunction getTargetEl(target, contentEl) {\n return Array.isArray(target) ? document.elementsFromPoint(...target).find(el => !contentEl?.contains(el)) : target ?? contentEl;\n}\nfunction bindScroll(el, onScroll) {\n const scrollElements = [document, ...getScrollParents(el)];\n scrollElements.forEach(el => {\n el.addEventListener('scroll', onScroll, {\n passive: true\n });\n });\n onScopeDispose(() => {\n scrollElements.forEach(el => {\n el.removeEventListener('scroll', onScroll);\n });\n });\n}\n//# sourceMappingURL=scrollStrategies.js.map","// Utilities\nimport { defer, propsFactory } from \"../util/index.js\"; // Types\n// Composables\nexport const makeDelayProps = propsFactory({\n closeDelay: [Number, String],\n openDelay: [Number, String]\n}, 'delay');\nexport function useDelay(props, cb) {\n let clearDelay = () => {};\n function runDelay(isOpening, options) {\n clearDelay?.();\n const delay = isOpening ? props.openDelay : props.closeDelay;\n const normalizedDelay = Math.max(options?.minDelay ?? 0, Number(delay ?? 0));\n return new Promise(resolve => {\n clearDelay = defer(normalizedDelay, () => {\n cb?.(isOpening);\n resolve(isOpening);\n });\n });\n }\n function runOpenDelay() {\n return runDelay(true);\n }\n function runCloseDelay(options) {\n return runDelay(false, options);\n }\n return {\n clearDelay,\n runOpenDelay,\n runCloseDelay\n };\n}\n//# sourceMappingURL=delay.js.map","// Components\nimport { VMenuSymbol } from \"../VMenu/shared.js\"; // Composables\nimport { makeDelayProps, useDelay } from \"../../composables/delay.js\"; // Utilities\nimport { computed, effectScope, inject, mergeProps, nextTick, onScopeDispose, ref, watch, watchEffect } from 'vue';\nimport { bindProps, getActiveElement, getCurrentInstance, IN_BROWSER, isString, matchesSelector, propsFactory, templateRef, unbindProps } from \"../../util/index.js\"; // Types\nexport const makeActivatorProps = propsFactory({\n target: [String, Object],\n activator: [String, Object],\n activatorProps: {\n type: Object,\n default: () => ({})\n },\n openOnClick: {\n type: Boolean,\n default: undefined\n },\n openOnHover: Boolean,\n openOnFocus: {\n type: Boolean,\n default: undefined\n },\n closeOnContentClick: Boolean,\n ...makeDelayProps()\n}, 'VOverlay-activator');\nexport function useActivator(props, {\n isActive,\n isTop,\n contentEl,\n isSubmenu = false\n}) {\n const vm = getCurrentInstance('useActivator');\n const activatorEl = ref();\n const parentMenu = inject(VMenuSymbol, null);\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 const openOnFocus = computed(() => props.openOnFocus || props.openOnFocus == null && props.openOnHover);\n const openOnClick = computed(() => props.openOnClick || props.openOnClick == null && !props.openOnHover && !openOnFocus.value);\n const {\n runOpenDelay,\n runCloseDelay\n } = useDelay(props, value => {\n if (value === (props.openOnHover && isHovered || openOnFocus.value && isFocused) && !(props.openOnHover && isActive.value && !isTop.value)) {\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 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 const cursorTarget = ref();\n const availableEvents = {\n onClick: e => {\n if (reopenLock && !isActive.value) return;\n e.stopPropagation();\n activatorEl.value = e.currentTarget || e.target;\n if (!isActive.value) {\n cursorTarget.value = [e.clientX, e.clientY];\n }\n isActive.value = !isActive.value;\n },\n onMouseenter: e => {\n isHovered = true;\n activatorEl.value = e.currentTarget || e.target;\n if (props.target === 'cursor') {\n cursorTarget.value = [e.clientX, e.clientY];\n }\n runOpenDelay();\n },\n onMousemove: e => {\n cursorTarget.value = [e.clientX, e.clientY];\n },\n onMouseleave: e => {\n isHovered = false;\n if (props.target === 'cursor') isFocused = false;\n if (shouldCloseOnLeave()) runCloseDelay();\n },\n onFocus: e => {\n if (reopenLock) return;\n if (matchesSelector(e.target, ':focus-visible') === false) return;\n isFocused = true;\n e.stopPropagation();\n activatorEl.value = e.currentTarget || e.target;\n runOpenDelay();\n },\n onBlur: e => {\n // Body parks from clicks on empty areas inside content also count as \"still focused\".\n const next = e.relatedTarget;\n if (!next || contentEl.value?.contains(next)) return;\n isFocused = false;\n e.stopPropagation();\n runCloseDelay({\n minDelay: 1\n });\n }\n };\n const activatorEvents = computed(() => {\n const events = {};\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 return events;\n });\n const contentEvents = computed(() => {\n const events = {};\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 if (openOnFocus.value) {\n events.onFocusin = e => {\n if (!e.target.matches(':focus-visible')) return;\n isFocused = true;\n runOpenDelay();\n };\n events.onFocusout = e => {\n const next = e.relatedTarget;\n if (!next || contentEl.value?.contains(next)) return;\n isFocused = false;\n runCloseDelay({\n 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 return events;\n });\n const scrimEvents = computed(() => {\n const events = {};\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 return events;\n });\n watch(isTop, val => {\n if (val && shouldCloseOnLeave() && (props.openOnHover && !isHovered && (!openOnFocus.value || !isFocused) || openOnFocus.value && !isFocused && (!props.openOnHover || !isHovered)) && !contentEl.value?.contains(getActiveElement())) {\n runCloseDelay();\n }\n });\n watch(isActive, val => {\n if (!val) {\n setTimeout(() => {\n cursorTarget.value = undefined;\n });\n }\n }, {\n flush: 'post'\n });\n const activatorRef = templateRef();\n watchEffect(() => {\n if (!activatorRef.value) return;\n nextTick(() => {\n activatorEl.value = activatorRef.el;\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) ? undefined : target.value;\n });\n let scope;\n watch(() => !!props.activator, val => {\n if (val && IN_BROWSER) {\n scope = effectScope();\n scope.run(() => {\n _useActivator(props, vm, {\n activatorEl,\n activatorEvents\n });\n });\n } else if (scope) {\n scope.stop();\n }\n }, {\n flush: 'post',\n immediate: true\n });\n onScopeDispose(() => {\n scope?.stop();\n });\n return {\n activatorEl,\n activatorRef,\n target,\n targetEl,\n targetRef,\n activatorEvents,\n contentEvents,\n scrimEvents,\n openedByHover\n };\n}\nfunction _useActivator(props, vm, {\n activatorEl,\n 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 }, {\n immediate: true\n });\n watch(() => props.activatorProps, () => {\n bindActivatorProps();\n });\n onScopeDispose(() => {\n unbindActivatorProps();\n });\n function bindActivatorProps(el = getActivator(), _props = props.activatorProps) {\n if (!el) return;\n bindProps(el, mergeProps(activatorEvents.value, _props));\n }\n function unbindActivatorProps(el = getActivator(), _props = props.activatorProps) {\n if (!el) return;\n unbindProps(el, mergeProps(activatorEvents.value, _props));\n }\n function getActivator(selector = props.activator) {\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 return activatorEl.value;\n }\n}\nfunction getTarget(selector, vm) {\n if (!selector) return;\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 return target;\n}\n//# sourceMappingURL=useActivator.js.map","// Utilities\nimport { onScopeDispose, toRef, toValue, watch } from 'vue';\nimport { focusableChildren, getActiveElement, IN_BROWSER, propsFactory } from \"../util/index.js\"; // Types\n// Types\n// Composables\nexport const makeFocusTrapProps = propsFactory({\n retainFocus: Boolean,\n captureFocus: Boolean,\n /** @deprecated */\n disableInitialFocus: Boolean\n}, 'focusTrap');\nconst registry = new Map();\nlet subscribers = 0;\nfunction lastActiveTrap() {\n let el;\n for (const {\n isActive,\n contentEl\n } of registry.values()) {\n if (isActive.value && contentEl.value) el = contentEl.value;\n }\n return el;\n}\nfunction onKeydown(e) {\n const activeElement = getActiveElement();\n if (e.key !== 'Tab' || !activeElement) return;\n const parentTraps = Array.from(registry.values()).filter(({\n isActive,\n contentEl\n }) => isActive.value && contentEl.value?.contains(activeElement)).map(x => x.contentEl.value);\n let closestTrap;\n let currentNode = activeElement;\n while (currentNode) {\n if (parentTraps.includes(currentNode)) {\n closestTrap = currentNode;\n break;\n }\n currentNode = currentNode.parentElement;\n }\n if (!closestTrap) {\n const trapEl = lastActiveTrap(); // assuming last registered == topmost panel\n if (!trapEl) return;\n const focusable = focusableChildren(trapEl).filter(x => x.tabIndex >= 0);\n e.preventDefault();\n if (!focusable.length) {\n trapEl.focus({\n preventScroll: true\n });\n } else if (e.shiftKey) {\n focusable[focusable.length - 1].focus();\n } else {\n focusable[0].focus();\n }\n return;\n }\n const focusable = focusableChildren(closestTrap)\n // excluding VListItems with tabindex=\"-2\"\n .filter(x => x.tabIndex >= 0);\n if (!focusable.length) return;\n if (focusable.length === 1 && focusable[0].classList.contains('v-list') && focusable[0].contains(activeElement)) {\n e.preventDefault();\n return;\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 = activeElement === firstElement || activeElement === closestTrap || firstElement.classList.contains('v-list') && firstElement.contains(activeElement);\n const atLast = activeElement === lastElement || lastElement.classList.contains('v-list') && lastElement.contains(activeElement);\n if (e.shiftKey && atFirst) {\n e.preventDefault();\n lastElement.focus();\n }\n if (!e.shiftKey && atLast) {\n e.preventDefault();\n firstElement.focus();\n }\n}\nexport function useFocusTrap(props, {\n isActive,\n localTop,\n contentEl\n}) {\n const trapId = Symbol('trap');\n let focusTrapSuppressed = false;\n let focusTrapSuppressionTimeout = -1;\n async function onPointerdown() {\n focusTrapSuppressed = true;\n focusTrapSuppressionTimeout = window.setTimeout(() => {\n focusTrapSuppressed = false;\n }, 100);\n }\n async function captureOnFocus(e) {\n const before = e.relatedTarget;\n const after = e.target;\n document.removeEventListener('pointerdown', onPointerdown);\n document.removeEventListener('keydown', captureOnKeydown);\n await new Promise(resolve => requestAnimationFrame(resolve));\n if (isActive.value && !focusTrapSuppressed && before !== after && 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 const focusable = focusableChildren(contentEl.value);\n focusable[0]?.focus();\n }\n }\n function captureOnKeydown(e) {\n if (e.key !== 'Tab') return;\n document.removeEventListener('keydown', captureOnKeydown);\n if (isActive.value && contentEl.value && e.target && !contentEl.value.contains(e.target)) {\n const allFocusableElements = focusableChildren(document.documentElement);\n if (e.shiftKey && e.target === allFocusableElements.at(0) || !e.shiftKey && e.target === allFocusableElements.at(-1)) {\n const focusable = focusableChildren(contentEl.value);\n if (focusable.length > 0) {\n e.preventDefault();\n focusable[0].focus();\n }\n }\n }\n }\n const shouldCapture = toRef(() => isActive.value && props.captureFocus && !props.disableInitialFocus);\n if (IN_BROWSER) {\n watch(() => props.retainFocus, val => {\n if (val) {\n registry.set(trapId, {\n isActive,\n contentEl\n });\n } else {\n registry.delete(trapId);\n }\n }, {\n immediate: true\n });\n watch(shouldCapture, val => {\n if (val) {\n document.addEventListener('pointerdown', onPointerdown);\n document.addEventListener('focusin', captureOnFocus, {\n once: true\n });\n document.addEventListener('keydown', captureOnKeydown);\n } else {\n document.removeEventListener('pointerdown', onPointerdown);\n document.removeEventListener('focusin', captureOnFocus);\n document.removeEventListener('keydown', captureOnKeydown);\n }\n }, {\n immediate: true\n });\n if (subscribers++ < 1) {\n document.addEventListener('keydown', onKeydown);\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 if (--subscribers < 1) {\n document.removeEventListener('keydown', onKeydown);\n }\n });\n}\n//# sourceMappingURL=focusTrap.js.map","// Composables\nimport { useDisplay } from \"./display.js\"; // Utilities\nimport { onMounted, shallowRef } from 'vue';\nimport { IN_BROWSER } from \"../util/index.js\";\nexport function useHydration() {\n if (!IN_BROWSER) return shallowRef(false);\n const {\n ssr\n } = useDisplay();\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//# sourceMappingURL=hydration.js.map","// Utilities\nimport { shallowRef, toRef, watch } from 'vue';\nimport { propsFactory } from \"../util/index.js\"; // Types\nexport const makeLazyProps = propsFactory({\n eager: Boolean\n}, 'lazy');\nexport function useLazy(props, active) {\n const isBooted = shallowRef(false);\n const hasContent = toRef(() => isBooted.value || props.eager || active.value);\n watch(active, () => isBooted.value = true);\n function onAfterLeave() {\n if (!props.eager) isBooted.value = false;\n }\n return {\n isBooted,\n hasContent,\n onAfterLeave\n };\n}\n//# sourceMappingURL=lazy.js.map","// Utilities\nimport { getCurrentInstance } from \"../util/index.js\";\nexport function useScopeId() {\n const vm = getCurrentInstance('useScopeId');\n const scopeId = vm.vnode.scopeId;\n return {\n scopeId: scopeId ? {\n [scopeId]: ''\n } : undefined\n };\n}\n//# sourceMappingURL=scopeId.js.map","// Composables\nimport { useToggleScope } from \"./toggleScope.js\"; // Utilities\nimport { inject, onScopeDispose, provide, reactive, readonly, shallowRef, toRaw, toRef, toValue, watchEffect } from 'vue';\nimport { getCurrentInstance } from \"../util/index.js\"; // Types\nconst StackSymbol = Symbol.for('vuetify:stack');\nconst globalStack = reactive([]);\nexport function useStack(isActive, zIndex, disableGlobalStack) {\n const vm = getCurrentInstance('useStack');\n const createStackEntry = !disableGlobalStack;\n const parent = inject(StackSymbol, undefined);\n const stack = reactive({\n activeChildren: new Set()\n });\n provide(StackSymbol, stack);\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 if (createStackEntry) {\n globalStack.push([vm.uid, _zIndex.value]);\n }\n parent?.activeChildren.add(vm.uid);\n onScopeDispose(() => {\n if (createStackEntry) {\n const idx = toRaw(globalStack).findIndex(v => v[0] === vm.uid);\n globalStack.splice(idx, 1);\n }\n parent?.activeChildren.delete(vm.uid);\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 const localTop = toRef(() => !stack.activeChildren.size);\n return {\n globalTop: readonly(globalTop),\n localTop,\n stackStyles: toRef(() => ({\n zIndex: _zIndex.value\n }))\n };\n}\n//# sourceMappingURL=stack.js.map","// Utilities\nimport { computed, warn } from 'vue';\nimport { IN_BROWSER, isString } from \"../util/index.js\";\nexport function useTeleport(target) {\n const teleportTarget = computed(() => {\n const _target = target();\n if (_target === true || !IN_BROWSER) return undefined;\n const targetElement = _target === false ? document.body : isString(_target) ? document.querySelector(_target) : _target;\n if (!targetElement) {\n warn(`Unable to locate target ${_target}`);\n return undefined;\n }\n let container = [...targetElement.children].find(el => el.matches('.v-overlay-container'));\n if (!container) {\n container = document.createElement('div');\n container.className = 'v-overlay-container';\n targetElement.appendChild(container);\n }\n return container;\n });\n return {\n teleportTarget\n };\n}\n//# sourceMappingURL=teleport.js.map","// Utilities\nimport { attachedRoot, isFunction } from \"../../util/index.js\"; // Types\nfunction defaultConditional() {\n return true;\n}\nfunction checkEvent(e, el, binding, ignoreActive = false) {\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 (typeof ShadowRoot !== 'undefined' && root instanceof ShadowRoot && root.host === e.target) 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));\n}\nfunction checkIsActive(e, binding) {\n const value = binding.value;\n const isActive = (isFunction(value) ? undefined : value.closeConditional) || defaultConditional;\n return isActive(e);\n}\nfunction directive(e, el, binding) {\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 el._clickOutside.lastMousedownWasOutside && checkEvent(e, el, binding) && setTimeout(() => {\n checkIsActive(e, binding) && handler && handler(e);\n }, 0);\n}\nfunction handleShadow(el, callback) {\n const root = attachedRoot(el);\n callback(document);\n if (typeof ShadowRoot !== 'undefined' && root instanceof ShadowRoot) {\n callback(root);\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, binding) {\n const onClick = e => directive(e, el, binding);\n const onMousedown = e => {\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, el, binding, true);\n };\n handleShadow(el, app => {\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 el._clickOutside[binding.instance.$.uid] = {\n onClick,\n onMousedown\n };\n },\n beforeUnmount(el, binding) {\n if (!el._clickOutside) return;\n handleShadow(el, app => {\n if (!app || !el._clickOutside?.[binding.instance.$.uid]) return;\n const {\n onClick,\n onMousedown\n } = el._clickOutside[binding.instance.$.uid];\n app.removeEventListener('click', onClick, true);\n app.removeEventListener('mousedown', onMousedown, true);\n });\n delete el._clickOutside[binding.instance.$.uid];\n }\n};\nexport default ClickOutside;\n//# sourceMappingURL=index.js.map","import { mergeProps as _mergeProps, createElementVNode as _createElementVNode, createVNode as _createVNode, Fragment as _Fragment, vShow as _vShow, withDirectives as _withDirectives } from \"vue\";\n// Styles\nimport \"./VOverlay.css\";\n\n// Components\nimport { VMenuSymbol } from \"../VMenu/shared.js\"; // Composables\nimport { getStaticLocationClasses, makeLocationStrategyProps, useLocationStrategies } from \"./locationStrategies.js\";\nimport { makeScrollStrategyProps, useScrollStrategies } from \"./scrollStrategies.js\";\nimport { makeActivatorProps, useActivator } from \"./useActivator.js\";\nimport { useBackgroundColor } from \"../../composables/color.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeDimensionProps, useDimension } from \"../../composables/dimensions.js\";\nimport { makeFocusTrapProps, useFocusTrap } from \"../../composables/focusTrap.js\";\nimport { useHydration } from \"../../composables/hydration.js\";\nimport { makeLazyProps, useLazy } from \"../../composables/lazy.js\";\nimport { useRtl } from \"../../composables/locale.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\";\nimport { useBackButton, useRouter } from \"../../composables/router.js\";\nimport { useScopeId } from \"../../composables/scopeId.js\";\nimport { useStack } from \"../../composables/stack.js\";\nimport { useTeleport } from \"../../composables/teleport.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\";\nimport { useToggleScope } from \"../../composables/toggleScope.js\";\nimport { makeTransitionProps, MaybeTransition } from \"../../composables/transition.js\"; // Directives\nimport vClickOutside from \"../../directives/click-outside/index.js\"; // Utilities\nimport { computed, inject, mergeProps, onBeforeUnmount, provide, ref, Teleport, Transition, watch, watchEffect } from 'vue';\nimport { animate, convertToUnit, focusableChildren, genericComponent, getActiveElement, getCurrentInstance, getScrollParent, IN_BROWSER, isString, omit, propsFactory, standardEasing, useRender } from \"../../util/index.js\"; // Types\nconst overlayActivators = new WeakMap();\nfunction Scrim(props) {\n const {\n modelValue,\n color,\n ...rest\n } = props;\n return _createVNode(Transition, {\n \"name\": \"fade-transition\",\n \"appear\": true\n }, {\n default: () => [props.modelValue && _createElementVNode(\"div\", _mergeProps({\n \"class\": ['v-overlay__scrim', props.color.backgroundColorClasses.value],\n \"style\": props.color.backgroundColorStyles.value\n }, rest), null)]\n });\n}\nexport const makeVOverlayProps = propsFactory({\n absolute: Boolean,\n attach: [Boolean, String, Object],\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 ...makeActivatorProps(),\n ...makeComponentProps(),\n ...makeDimensionProps(),\n ...makeLazyProps(),\n ...makeLocationStrategyProps(),\n ...makeScrollStrategyProps(),\n ...makeFocusTrapProps(),\n ...makeThemeProps(),\n ...makeTransitionProps()\n}, 'VOverlay');\nexport const VOverlay = genericComponent()({\n name: 'VOverlay',\n directives: {\n vClickOutside\n },\n inheritAttrs: false,\n props: {\n _disableGlobalStack: Boolean,\n _submenu: Boolean,\n ...omit(makeVOverlayProps(), ['disableInitialFocus'])\n },\n emits: {\n 'click:outside': e => true,\n 'update:modelValue': value => true,\n keydown: e => true,\n afterEnter: () => true,\n afterLeave: () => true\n },\n setup(props, {\n slots,\n attrs,\n emit\n }) {\n const vm = getCurrentInstance('VOverlay');\n const root = ref();\n const scrimEl = ref();\n const contentEl = ref();\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 {\n themeClasses\n } = provideTheme(props);\n const {\n rtlClasses,\n isRtl\n } = useRtl();\n const {\n hasContent,\n onAfterLeave: _onAfterLeave\n } = useLazy(props, isActive);\n const scrimColor = useBackgroundColor(() => {\n return isString(props.scrim) ? props.scrim : null;\n });\n const {\n globalTop,\n localTop,\n stackStyles\n } = useStack(isActive, () => props.zIndex, props._disableGlobalStack);\n const {\n activatorEl,\n activatorRef,\n target,\n targetEl,\n targetRef,\n activatorEvents,\n contentEvents,\n scrimEvents,\n openedByHover\n } = useActivator(props, {\n isActive,\n isTop: localTop,\n contentEl,\n isSubmenu: props._submenu\n });\n const {\n teleportTarget\n } = 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 {\n dimensionStyles\n } = useDimension(props);\n const isMounted = useHydration();\n const staticLocationClasses = computed(() => {\n return props.locationStrategy === 'static' ? getStaticLocationClasses(props.location) : undefined;\n });\n const {\n scopeId\n } = useScopeId();\n watch(() => props.disabled, v => {\n if (v) isActive.value = false;\n });\n const {\n contentStyles,\n updateLocation\n } = 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 function onClickOutside(e) {\n emit('click:outside', e);\n if (!props.persistent) isActive.value = false;else animateClick();\n if (!props.scrim) menu?.closeParents(e);\n }\n function closeConditional(e) {\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 useFocusTrap(props, {\n isActive,\n localTop,\n contentEl\n });\n let openedWithActivatorFocus = false;\n watchEffect(() => {\n if (!contentEl.value) return;\n if (activatorEl.value) overlayActivators.set(contentEl.value, activatorEl.value);else overlayActivators.delete(contentEl.value);\n });\n function ownsFocus(activeElement) {\n let current = activeElement;\n const visited = new Set();\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 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 if (contentEl.value?._clickOutside?.lastMousedownWasOutside) return;\n const activeEl = getActiveElement();\n const focusWasInOverlay = (!activeEl || activeEl === document.body) && openedWithActivatorFocus || activeEl === el || el.contains(activeEl) || ownsFocus(activeEl);\n if (!focusWasInOverlay) return;\n const parent = el.parentElement;\n const focusableInParent = parent ? focusableChildren(parent) : [];\n let target;\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({\n 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 }, {\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 }, {\n immediate: true\n });\n onBeforeUnmount(() => {\n if (!IN_BROWSER) return;\n window.removeEventListener('keydown', onKeydown);\n });\n function onKeydown(e) {\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) {\n if (e.key === 'Escape' && !globalTop.value) return;\n emit('keydown', e);\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;else animateClick();\n return false;\n }\n return undefined;\n });\n });\n const top = ref();\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 contentEl.value && animate(contentEl.value, [{\n transformOrigin: 'center'\n }, {\n transform: 'scale(1.03)'\n }, {\n transformOrigin: 'center'\n }], {\n duration: 150,\n easing: standardEasing\n });\n }\n function onAfterEnter() {\n emit('afterEnter');\n }\n function onAfterLeave() {\n _onAfterLeave();\n emit('afterLeave');\n }\n useRender(() => _createElementVNode(_Fragment, null, [slots.activator?.({\n isActive: isActive.value,\n targetRef,\n props: mergeProps({\n ref: activatorRef\n }, activatorEvents.value, props.activatorProps)\n }), isMounted.value && hasContent.value && _createVNode(Teleport, {\n \"disabled\": !teleportTarget.value,\n \"to\": teleportTarget.value\n }, {\n default: () => [_createElementVNode(\"div\", _mergeProps({\n \"class\": ['v-overlay', {\n 'v-overlay--absolute': props.absolute || props.contained,\n 'v-overlay--active': isActive.value,\n 'v-overlay--contained': props.contained\n }, staticLocationClasses.value, themeClasses.value, rtlClasses.value, props.class],\n \"style\": [stackStyles.value, {\n '--v-overlay-opacity': props.opacity,\n top: convertToUnit(top.value)\n }, props.style],\n \"ref\": root,\n \"onKeydown\": onKeydownSelf\n }, scopeId, attrs), [_createVNode(Scrim, _mergeProps({\n \"color\": scrimColor,\n \"modelValue\": isActive.value && !!props.scrim,\n \"ref\": scrimEl\n }, scrimEvents.value), null), _createVNode(MaybeTransition, {\n \"appear\": true,\n \"persisted\": true,\n \"transition\": props.transition,\n \"target\": target.value,\n \"onAfterEnter\": onAfterEnter,\n \"onAfterLeave\": onAfterLeave\n }, {\n default: () => [_withDirectives(_createElementVNode(\"div\", _mergeProps({\n \"ref\": contentEl,\n \"class\": ['v-overlay__content', props.contentClass],\n \"style\": [dimensionStyles.value, contentStyles.value]\n }, contentEvents.value, props.contentProps), [slots.default?.({\n isActive\n })]), [[_vShow, isActive.value], [vClickOutside, {\n handler: onClickOutside,\n closeConditional,\n include: () => {\n if (!isActive.value) return [];\n return [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')).filter(ownsFocus)];\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//# sourceMappingURL=VOverlay.js.map","import { createVNode as _createVNode, mergeProps as _mergeProps } from \"vue\";\n// Styles\nimport \"./VMenu.css\";\n\n// Components\nimport { VDialogTransition } from \"../transitions/index.js\";\nimport { VDefaultsProvider } from \"../VDefaultsProvider/index.js\";\nimport { VOverlay } from \"../VOverlay/index.js\";\nimport { makeVOverlayProps } from \"../VOverlay/VOverlay.js\"; // Composables\nimport { forwardRefs } from \"../../composables/forwardRefs.js\";\nimport { useRtl } from \"../../composables/locale.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\";\nimport { useScopeId } from \"../../composables/scopeId.js\"; // Utilities\nimport { computed, inject, mergeProps, onBeforeUnmount, onDeactivated, provide, ref, shallowRef, toRef, useId, watch } from 'vue';\nimport { VMenuSymbol } from \"./shared.js\";\nimport { focusableChildren, focusChild, genericComponent, getActiveElement, getNextElement, omit, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVMenuProps = propsFactory({\n _disableKeys: Boolean,\n id: String,\n submenu: Boolean,\n openOnArrow: {\n type: Boolean,\n default: true\n },\n ...omit(makeVOverlayProps({\n captureFocus: true,\n closeDelay: 250,\n closeOnContentClick: true,\n locationStrategy: 'connected',\n location: undefined,\n openDelay: 300,\n scrim: false,\n scrollStrategy: 'reposition',\n transition: {\n component: VDialogTransition\n }\n }), ['absolute'])\n}, 'VMenu');\nexport const VMenu = genericComponent()({\n name: 'VMenu',\n props: makeVMenuProps(),\n emits: {\n 'update:modelValue': value => true\n },\n setup(props, {\n slots\n }) {\n const isActive = useProxiedModel(props, 'modelValue');\n const {\n scopeId\n } = useScopeId();\n const {\n isRtl\n } = useRtl();\n const uid = useId();\n const id = toRef(() => props.id || `v-menu-${uid}`);\n const overlay = ref();\n const parent = inject(VMenuSymbol, null);\n const openChildren = shallowRef(new Map());\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 setTimeout(() => {\n if (!openChildren.value.size && !props.persistent && clickedOutside) {\n isActive.value = false;\n parent?.closeParents(e);\n }\n }, 40);\n },\n rootOpenedByHover: props.submenu && parent ? parent.rootOpenedByHover : () => overlay.value?.openedByHover ?? false\n });\n onBeforeUnmount(() => parent?.unregister(uid));\n onDeactivated(() => isActive.value = false);\n watch(isActive, val => {\n if (val) {\n parent?.register(uid, () => {\n isActive.value = false;\n });\n } else {\n parent?.unregister(uid);\n\n // close a submenu branch\n for (const [, closeChild] of [...openChildren.value]) closeChild();\n }\n }, {\n immediate: true\n });\n function onKeydown(e) {\n if (props.disabled) return;\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(focusableChildren(overlay.value?.contentEl, false), e.shiftKey ? 'prev' : 'next', el => el.tabIndex >= 0);\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 function setInitialFocus(e) {\n const el = overlay.value?.contentEl;\n if (!el || !isActive.value) return;\n if (!['ArrowUp', 'ArrowDown'].includes(e.key)) return;\n const focusable = focusableChildren(el);\n const focusTarget = e.key === 'ArrowUp' ? focusable.at(-1) : focusable[0];\n const focusTargetRole = focusTarget?.getAttribute('role') ?? '';\n const selectedOption = ['option', 'listbox'].includes(focusTargetRole) && focusable.find(child => child.getAttribute('role') === 'option' && child.getAttribute('aria-selected') === 'true' && child.offsetParent != null);\n if (selectedOption) {\n selectedOption.focus();\n } else {\n focusChild(el, e.key === 'ArrowDown' ? 'next' : 'prev');\n }\n }\n function onActivatorKeydown(e) {\n if (props.disabled || props._disableKeys || e.isComposing) return;\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 (props.submenu ? e.key === (isRtl.value ? 'ArrowLeft' : 'ArrowRight') : props.openOnArrow && ['ArrowDown', 'ArrowUp'].includes(e.key)) {\n isActive.value = true;\n e.preventDefault();\n focusContentWhenReady(e);\n }\n }\n function focusContentWhenReady(e, 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 const activatorProps = computed(() => 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 useRender(() => {\n const overlayProps = VOverlay.filterProps(props);\n return _createVNode(VOverlay, _mergeProps({\n \"ref\": overlay,\n \"id\": id.value,\n \"class\": ['v-menu', props.class],\n \"style\": props.style\n }, overlayProps, {\n \"modelValue\": isActive.value,\n \"onUpdate:modelValue\": $event => isActive.value = $event,\n \"absolute\": true,\n \"_submenu\": props.submenu,\n \"activatorProps\": activatorProps.value,\n \"location\": props.location ?? (props.submenu ? 'end' : 'bottom'),\n \"onKeydown\": onKeydown\n }, scopeId), {\n activator: slots.activator,\n default: (...args) => _createVNode(VDefaultsProvider, {\n \"root\": \"VMenu\"\n }, {\n default: () => [slots.default?.(...args)]\n })\n });\n });\n return forwardRefs({\n id,\n ΨopenChildren: openChildren\n }, overlay);\n }\n});\n//# sourceMappingURL=VMenu.js.map","import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createVNode as _createVNode } from \"vue\";\n// Styles\nimport \"./VSheet.css\";\n\n// Composables\nimport { makeBorderProps, useBorder } from \"../../composables/border.js\";\nimport { useBackgroundColor } from \"../../composables/color.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeDimensionProps, useDimension } from \"../../composables/dimensions.js\";\nimport { makeElevationProps, useElevation } from \"../../composables/elevation.js\";\nimport { makeLocationProps, useLocation } from \"../../composables/location.js\";\nimport { makePositionProps, usePosition } from \"../../composables/position.js\";\nimport { makeRoundedProps, useRounded } from \"../../composables/rounded.js\";\nimport { makeTagProps } from \"../../composables/tag.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\"; // Utilities\nimport { genericComponent, propsFactory, useRender } from \"../../util/index.js\";\nexport const makeVSheetProps = propsFactory({\n color: String,\n ...makeBorderProps(),\n ...makeComponentProps(),\n ...makeDimensionProps(),\n ...makeElevationProps(),\n ...makeLocationProps(),\n ...makePositionProps(),\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps()\n}, 'VSheet');\nexport const VSheet = genericComponent()({\n name: 'VSheet',\n props: makeVSheetProps(),\n setup(props, {\n slots\n }) {\n const {\n themeClasses\n } = provideTheme(props);\n const {\n backgroundColorClasses,\n backgroundColorStyles\n } = useBackgroundColor(() => props.color);\n const {\n borderClasses\n } = useBorder(props);\n const {\n dimensionStyles\n } = useDimension(props);\n const {\n elevationClasses\n } = useElevation(props);\n const {\n locationStyles\n } = useLocation(props);\n const {\n positionClasses\n } = usePosition(props);\n const {\n roundedClasses,\n roundedStyles\n } = useRounded(props);\n useRender(() => _createVNode(props.tag, {\n \"class\": _normalizeClass(['v-sheet', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, props.class]),\n \"style\": _normalizeStyle([backgroundColorStyles.value, dimensionStyles.value, locationStyles.value, roundedStyles.value, props.style])\n }, slots));\n return {};\n }\n});\n//# sourceMappingURL=VSheet.js.map","import { vShow as _vShow, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createVNode as _createVNode } from \"vue\";\n// Styles\nimport \"./VCounter.css\";\n\n// Components\nimport { VSlideYTransition } from \"../transitions/index.js\"; // Composables\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeTransitionProps, MaybeTransition } from \"../../composables/transition.js\"; // Utilities\nimport { shallowRef, toRef, watch } from 'vue';\nimport { genericComponent, propsFactory, useRender } from \"../../util/index.js\"; // Types\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 ...makeComponentProps(),\n ...makeTransitionProps({\n transition: {\n component: VSlideYTransition\n }\n })\n}, 'VCounter');\nexport const VCounter = genericComponent()({\n name: 'VCounter',\n functional: true,\n props: makeVCounterProps(),\n setup(props, {\n slots\n }) {\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 const counter = toRef(() => {\n return max.value ? `${props.value} / ${max.value}` : String(props.value);\n });\n useRender(() => _createVNode(MaybeTransition, {\n \"transition\": props.transition,\n \"appear\": true\n }, {\n default: () => [_withDirectives(_createElementVNode(\"div\", {\n \"class\": _normalizeClass(['v-counter', {\n 'text-error': max.value && !props.disabled && parseFloat(props.value) > parseFloat(max.value)\n }, props.class]),\n \"style\": _normalizeStyle(props.style)\n }, [slots.default ? slots.default({\n counter: counter.value,\n max: max.value,\n value: props.value\n }) : counter.value]), [[_vShow, props.active]])]\n }));\n return {};\n }\n});\n//# sourceMappingURL=VCounter.js.map","import { normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, createVNode as _createVNode } from \"vue\";\n// Components\nimport { VLabel } from \"../VLabel/index.js\"; // Composables\nimport { makeComponentProps } from \"../../composables/component.js\"; // Utilities\nimport { genericComponent, propsFactory, useRender } from \"../../util/index.js\";\nexport const makeVFieldLabelProps = propsFactory({\n floating: Boolean,\n ...makeComponentProps()\n}, 'VFieldLabel');\nexport const VFieldLabel = genericComponent()({\n name: 'VFieldLabel',\n props: makeVFieldLabelProps(),\n setup(props, {\n slots\n }) {\n useRender(() => _createVNode(VLabel, {\n \"class\": _normalizeClass(['v-field-label', {\n 'v-field-label--floating': props.floating\n }, props.class]),\n \"style\": _normalizeStyle(props.style)\n }, slots));\n return {};\n }\n});\n//# sourceMappingURL=VFieldLabel.js.map","import { createElementVNode as _createElementVNode, createVNode as _createVNode, mergeProps as _mergeProps, vShow as _vShow, withDirectives as _withDirectives, Fragment as _Fragment, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\";\n// Styles\nimport \"./VField.css\";\n\n// Components\nimport { VFieldLabel } from \"./VFieldLabel.js\";\nimport { VExpandXTransition } from \"../transitions/index.js\";\nimport { VDefaultsProvider } from \"../VDefaultsProvider/index.js\";\nimport { useInputIcon } from \"../VInput/InputIcon.js\"; // Composables\nimport { useBackgroundColor, useTextColor } from \"../../composables/color.js\";\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeFocusProps, useFocus } from \"../../composables/focus.js\";\nimport { IconValue } from \"../../composables/icons.js\";\nimport { LoaderSlot, makeLoaderProps, useLoader } from \"../../composables/loader.js\";\nimport { useRtl } from \"../../composables/locale.js\";\nimport { makeRoundedProps, useRounded } from \"../../composables/rounded.js\";\nimport { makeThemeProps, provideTheme } from \"../../composables/theme.js\"; // Utilities\nimport { computed, ref, toRef, useId, watch } from 'vue';\nimport { animate, convertToUnit, EventProp, genericComponent, getActiveElement, isString, nullifyTransforms, PREFERS_REDUCED_MOTION, propsFactory, standardEasing, useRender } from \"../../util/index.js\";\nimport { Box } from \"../../util/box.js\"; // Types\nconst allowedVariants = ['underlined', 'outlined', 'filled', 'solo', 'solo-inverted', 'solo-filled', 'plain'];\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,\n default: 'filled',\n validator: v => allowedVariants.includes(v)\n },\n 'onClick:clear': EventProp(),\n 'onClick:appendInner': EventProp(),\n 'onClick:prependInner': EventProp(),\n ...makeComponentProps(),\n ...makeLoaderProps(),\n ...makeRoundedProps(),\n ...makeThemeProps()\n}, 'VField');\nexport const VField = genericComponent()({\n name: 'VField',\n inheritAttrs: false,\n props: {\n id: String,\n details: Boolean,\n labelId: String,\n ...makeFocusProps(),\n ...makeVFieldProps()\n },\n emits: {\n 'update:focused': focused => true,\n 'update:modelValue': value => true\n },\n setup(props, {\n attrs,\n emit,\n slots\n }) {\n const {\n themeClasses\n } = provideTheme(props);\n const {\n loaderClasses\n } = useLoader(props);\n const {\n focusClasses,\n isFocused,\n focus,\n blur\n } = useFocus(props);\n const {\n InputIcon\n } = useInputIcon(props);\n const {\n roundedClasses,\n roundedStyles\n } = useRounded(props);\n const {\n rtlClasses\n } = useRtl();\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 const uid = useId();\n const id = computed(() => props.id || `input-${uid}`);\n const messagesId = toRef(() => !props.details ? undefined : `${id.value}-messages`);\n const labelRef = ref();\n const floatingLabelRef = ref();\n const controlRef = ref();\n const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant));\n const color = computed(() => {\n return props.error || props.disabled ? undefined : isActive.value && isFocused.value ? props.color : 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 return props.iconColor;\n });\n const {\n backgroundColorClasses,\n backgroundColorStyles\n } = useBackgroundColor(() => props.bgColor);\n const {\n textColorClasses,\n textColorStyles\n } = useTextColor(color);\n watch(isActive, val => {\n if (hasFloatingLabel.value && !PREFERS_REDUCED_MOTION()) {\n const el = labelRef.value.$el;\n const targetEl = floatingLabelRef.value.$el;\n requestAnimationFrame(() => {\n const rect = nullifyTransforms(el);\n const targetRect = new Box(targetEl);\n const x = targetRect.x - rect.x;\n const y = targetRect.y - rect.y - (rect.height / 2 - targetRect.height / 2);\n const targetWidth = targetRect.width / 0.75;\n const width = Math.abs(targetWidth - rect.width) > 1 ? {\n maxWidth: convertToUnit(targetWidth)\n } : undefined;\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 el.style.visibility = 'visible';\n targetEl.style.visibility = 'hidden';\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 }, {\n flush: 'post'\n });\n const slotProps = computed(() => ({\n isActive,\n isFocused,\n controlRef,\n iconColor,\n blur,\n focus\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 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 function onClick(e) {\n if (e.target !== getActiveElement()) {\n e.preventDefault();\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 = () => slots.label ? slots.label({\n ...slotProps.value,\n label: props.label,\n props: {\n for: id.value\n }\n }) : props.label;\n return _createElementVNode(\"div\", _mergeProps({\n \"class\": ['v-field', {\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 }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value, rtlClasses.value, props.class],\n \"style\": [backgroundColorStyles.value, roundedStyles.value, props.style],\n \"onClick\": onClick\n }, attrs), [_createElementVNode(\"div\", {\n \"class\": \"v-field__overlay\"\n }, null), _createVNode(LoaderSlot, {\n \"name\": \"v-field\",\n \"active\": !!props.loading,\n \"color\": props.error ? 'error' : isString(props.loading) ? props.loading : props.color\n }, {\n default: slots.loader\n }), hasPrepend && _createElementVNode(\"div\", {\n \"key\": \"prepend\",\n \"class\": \"v-field__prepend-inner\"\n }, [slots['prepend-inner'] ? slots['prepend-inner'](slotProps.value) : props.prependInnerIcon && _createVNode(InputIcon, {\n \"key\": \"prepend-icon\",\n \"name\": \"prependInner\",\n \"color\": iconColor.value\n }, null)]), _createElementVNode(\"div\", {\n \"class\": \"v-field__field\",\n \"data-no-activator\": \"\"\n }, [['filled', 'solo', 'solo-inverted', 'solo-filled'].includes(props.variant) && hasFloatingLabel.value && _createVNode(VFieldLabel, _mergeProps({\n \"key\": \"floating-label\",\n \"ref\": floatingLabelRef,\n \"class\": [textColorClasses.value],\n \"floating\": true\n }, floatingLabelProps.value, {\n \"style\": textColorStyles.value\n }), {\n default: () => [label()]\n }), hasLabel.value && _createVNode(VFieldLabel, _mergeProps({\n \"key\": \"label\",\n \"ref\": labelRef,\n \"id\": props.labelId\n }, mainLabelProps.value), {\n default: () => [label()]\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 }) ?? _createElementVNode(\"div\", {\n \"id\": id.value,\n \"class\": \"v-field__input\",\n \"aria-describedby\": messagesId.value\n }, null)]), hasClear && _createVNode(VExpandXTransition, {\n \"key\": \"clear\"\n }, {\n default: () => [_withDirectives(_createElementVNode(\"div\", {\n \"class\": \"v-field__clearable\",\n \"onMousedown\": e => {\n e.preventDefault();\n e.stopPropagation();\n }\n }, [_createVNode(VDefaultsProvider, {\n \"defaults\": {\n VIcon: {\n icon: props.clearIcon\n }\n }\n }, {\n default: () => [slots.clear ? slots.clear({\n ...slotProps.value,\n props: {\n onFocus: focus,\n onBlur: blur,\n onClick: props['onClick:clear'],\n tabindex: -1\n }\n }) : _createVNode(InputIcon, {\n \"name\": \"clear\",\n \"onFocus\": focus,\n \"onBlur\": blur,\n \"tabindex\": -1\n }, null)]\n })]), [[_vShow, props.dirty]])]\n }), hasAppend && _createElementVNode(\"div\", {\n \"key\": \"append\",\n \"class\": \"v-field__append-inner\"\n }, [slots['append-inner'] ? slots['append-inner'](slotProps.value) : props.appendInnerIcon && _createVNode(InputIcon, {\n \"key\": \"append-icon\",\n \"name\": \"appendInner\",\n \"color\": iconColor.value\n }, null)]), _createElementVNode(\"div\", {\n \"class\": _normalizeClass(['v-field__outline', textColorClasses.value]),\n \"style\": _normalizeStyle(textColorStyles.value)\n }, [isOutlined && _createElementVNode(_Fragment, null, [_createElementVNode(\"div\", {\n \"class\": \"v-field__outline__start\"\n }, null), hasFloatingLabel.value && _createElementVNode(\"div\", {\n \"class\": \"v-field__outline__notch\"\n }, [_createVNode(VFieldLabel, _mergeProps({\n \"ref\": floatingLabelRef,\n \"floating\": true\n }, floatingLabelProps.value), {\n default: () => [label()]\n })]), _createElementVNode(\"div\", {\n \"class\": \"v-field__outline__end\"\n }, null)]), isPlainOrUnderlined.value && hasFloatingLabel.value && _createVNode(VFieldLabel, _mergeProps({\n \"ref\": floatingLabelRef,\n \"floating\": true\n }, floatingLabelProps.value), {\n default: () => [label()]\n })])]);\n });\n return {\n controlRef,\n fieldIconColor: iconColor\n };\n }\n});\n//# sourceMappingURL=VField.js.map","// Utilities\nimport { shallowRef, toRef, useId } from 'vue';\nimport { propsFactory } from \"../util/index.js\"; // Types\n// Types\n// Composables\nexport const makeAutocompleteProps = propsFactory({\n autocomplete: String\n}, 'autocomplete');\nexport function useAutocomplete(props) {\n const uniqueId = useId();\n const reloadTrigger = shallowRef(0);\n const isSuppressing = toRef(() => props.autocomplete === 'suppress');\n const fieldName = toRef(() => {\n if (!props.name) return undefined;\n return isSuppressing.value ? `${props.name}-${uniqueId}-${reloadTrigger.value}` : props.name;\n });\n const fieldAutocomplete = toRef(() => {\n return isSuppressing.value ? 'off' : props.autocomplete;\n });\n return {\n isSuppressing,\n fieldAutocomplete,\n fieldName,\n update: () => reloadTrigger.value = new Date().getTime()\n };\n}\n//# sourceMappingURL=autocomplete.js.map","export function useAutofocus(props) {\n function onIntersect(isIntersecting, entries) {\n if (!props.autofocus || !isIntersecting) return;\n const el = entries[0].target;\n const target = el.matches('input,textarea') ? el : el.querySelector('input,textarea');\n\n // Defer past overlay enter setup (e.g. VDialogTransition visibility:hidden)\n setTimeout(() => target?.focus(), 50);\n }\n return {\n onIntersect\n };\n}\n//# sourceMappingURL=autofocus.js.map","import { mergeProps as _mergeProps, createElementVNode as _createElementVNode, Fragment as _Fragment, normalizeClass as _normalizeClass, createVNode as _createVNode } from \"vue\";\n// Styles\nimport \"./VTextField.css\";\n\n// Components\nimport { VCounter } from \"../VCounter/VCounter.js\";\nimport { makeVFieldProps, VField } from \"../VField/VField.js\";\nimport { makeVInputProps, VInput } from \"../VInput/VInput.js\"; // Composables\nimport { makeAutocompleteProps, useAutocomplete } from \"../../composables/autocomplete.js\";\nimport { useAutofocus } from \"../../composables/autofocus.js\";\nimport { useFocus } from \"../../composables/focus.js\";\nimport { forwardRefs } from \"../../composables/forwardRefs.js\";\nimport { useProxiedModel } from \"../../composables/proxiedModel.js\"; // Directives\nimport vIntersect from \"../../directives/intersect/index.js\"; // Utilities\nimport { cloneVNode, computed, nextTick, ref, watch, withDirectives } from 'vue';\nimport { callEvent, filterInputAttrs, genericComponent, getActiveElement, isFunction, isNumber, isString, omit, propsFactory, useRender } from \"../../util/index.js\"; // Types\nconst activeTypes = ['color', 'file', 'time', 'date', 'datetime-local', 'week', 'month'];\nexport const makeVTextFieldProps = propsFactory({\n autofocus: Boolean,\n counter: {\n type: [Boolean, Number, String],\n default: undefined\n },\n counterValue: [Number, Function],\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,\n ...makeAutocompleteProps(),\n ...omit(makeVInputProps(), ['direction']),\n ...makeVFieldProps()\n}, 'VTextField');\nexport const VTextField = genericComponent()({\n name: 'VTextField',\n directives: {\n vIntersect\n },\n inheritAttrs: false,\n props: makeVTextFieldProps(),\n emits: {\n 'click:control': e => true,\n 'mousedown:control': e => true,\n 'update:focused': focused => true,\n 'update:modelValue': val => true\n },\n setup(props, {\n attrs,\n emit,\n slots\n }) {\n const model = useProxiedModel(props, 'modelValue', undefined, v => {\n if (Object.is(v, -0)) return '-0';\n return v;\n });\n const {\n isFocused,\n focus,\n blur\n } = useFocus(props);\n const {\n onIntersect\n } = useAutofocus(props);\n const counterValue = computed(() => {\n return isFunction(props.counterValue) ? props.counterValue(model.value) : isNumber(props.counterValue) ? props.counterValue : (model.value ?? '').toString().length;\n });\n const max = computed(() => {\n if (attrs.maxlength) return attrs.maxlength;\n if (!props.counter || !isNumber(props.counter) && !isString(props.counter)) return undefined;\n return props.counter;\n });\n const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant));\n const vInputRef = ref();\n const vFieldRef = ref();\n const inputRef = ref();\n\n // hack for Chrome to keep caret/selection\n watch(() => props.type, () => void inputRef.value?.offsetHeight, {\n flush: 'post'\n });\n const autocomplete = useAutocomplete(props);\n const isActive = computed(() => activeTypes.includes(props.type) || props.persistentPlaceholder || isFocused.value || props.active);\n function onFocus() {\n if (autocomplete.isSuppressing.value) {\n autocomplete.update();\n }\n if (!isFocused.value) focus();\n nextTick(() => {\n if (inputRef.value !== getActiveElement()) {\n inputRef.value?.focus();\n }\n });\n }\n function onControlMousedown(e) {\n emit('mousedown:control', e);\n if (e.target === inputRef.value) return;\n onFocus();\n e.preventDefault();\n }\n function onControlClick(e) {\n emit('click:control', e);\n }\n function onClear(e, reset) {\n e.stopPropagation();\n onFocus();\n nextTick(() => {\n reset();\n callEvent(props['onClick:clear'], e);\n });\n }\n function onInput(e) {\n const el = e.target;\n if (!(props.modelModifiers?.trim && ['text', 'search', 'password', 'tel', 'url'].includes(props.type))) {\n model.value = el.value;\n return;\n }\n const value = el.value;\n const start = el.selectionStart;\n const end = el.selectionEnd;\n model.value = value;\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 useRender(() => {\n const hasCounter = !!(slots.counter || props.counter !== undefined);\n const counterActive = props.counter !== false && props.counter !== null && (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 {\n modelValue: _,\n ...inputProps\n } = VInput.filterProps(props);\n const fieldProps = VField.filterProps(props);\n return _createVNode(VInput, _mergeProps({\n \"ref\": vInputRef,\n \"modelValue\": model.value,\n \"onUpdate:modelValue\": $event => model.value = $event,\n \"class\": ['v-text-field', {\n 'v-text-field--prefixed': props.prefix,\n 'v-text-field--suffixed': props.suffix,\n 'v-input--plain-underlined': isPlainOrUnderlined.value\n }, props.class],\n \"style\": props.style\n }, rootAttrs, inputProps, {\n \"centerAffix\": !isPlainOrUnderlined.value,\n \"focused\": isFocused.value,\n \"detailsActive\": detailsActive,\n \"indentDetails\": props.indentDetails ?? !isPlainOrUnderlined.value\n }), {\n ...slots,\n default: ({\n id,\n isDisabled,\n isDirty,\n isReadonly,\n isValid,\n hasDetails,\n reset\n }) => _createVNode(VField, _mergeProps({\n \"ref\": vFieldRef,\n \"onMousedown\": onControlMousedown,\n \"onClick\": onControlClick,\n \"onClick:clear\": e => 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 ...slots,\n default: ({\n props: {\n class: fieldClass,\n ...slotProps\n },\n controlRef\n }) => {\n const inputNode = _createElementVNode(\"input\", _mergeProps({\n \"ref\": val => inputRef.value = controlRef.value = val,\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, inputAttrs), null);\n return _createElementVNode(_Fragment, null, [props.prefix && _createElementVNode(\"span\", {\n \"class\": \"v-text-field__prefix\"\n }, [_createElementVNode(\"span\", {\n \"class\": \"v-text-field__prefix__text\"\n }, [props.prefix])]), withDirectives(slots.default ? _createElementVNode(\"div\", {\n \"class\": _normalizeClass(fieldClass),\n \"data-no-activator\": \"\"\n }, [slots.default({\n id\n }), inputNode]) : cloneVNode(inputNode, {\n class: fieldClass\n }), [[vIntersect, onIntersect, null, {\n once: true\n }]]), props.suffix && _createElementVNode(\"span\", {\n \"class\": \"v-text-field__suffix\"\n }, [_createElementVNode(\"span\", {\n \"class\": \"v-text-field__suffix__text\"\n }, [props.suffix])])]);\n }\n }),\n details: hasDetails ? slotProps => _createElementVNode(_Fragment, null, [slots.details?.(slotProps), hasCounter && _createElementVNode(_Fragment, null, [_createElementVNode(\"span\", null, null), _createVNode(VCounter, {\n \"active\": counterActive,\n \"value\": counterValue.value,\n \"max\": max.value,\n \"disabled\": props.disabled\n }, slots.counter)])]) : undefined\n });\n });\n return forwardRefs({}, vInputRef, vFieldRef, inputRef);\n }\n});\n//# sourceMappingURL=VTextField.js.map","import { Fragment as _Fragment, createElementVNode as _createElementVNode, mergeProps as _mergeProps } from \"vue\";\n// Composables\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { useResizeObserver } from \"../../composables/resizeObserver.js\"; // Utilities\nimport { watch } from 'vue';\nimport { genericComponent, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVVirtualScrollItemProps = propsFactory({\n renderless: Boolean,\n ...makeComponentProps()\n}, 'VVirtualScrollItem');\nexport const VVirtualScrollItem = genericComponent()({\n name: 'VVirtualScrollItem',\n inheritAttrs: false,\n props: makeVVirtualScrollItemProps(),\n emits: {\n 'update:height': height => true\n },\n setup(props, {\n attrs,\n emit,\n slots\n }) {\n const {\n resizeRef,\n contentRect\n } = useResizeObserver(undefined, 'border');\n watch(() => contentRect.value?.height, height => {\n if (height != null) emit('update:height', height);\n });\n useRender(() => props.renderless ? _createElementVNode(_Fragment, null, [slots.default?.({\n itemRef: resizeRef\n })]) : _createElementVNode(\"div\", _mergeProps({\n \"ref\": resizeRef,\n \"class\": ['v-virtual-scroll__item', props.class],\n \"style\": props.style\n }, attrs), [slots.default?.()]));\n }\n});\n//# sourceMappingURL=VVirtualScrollItem.js.map","// Composables\nimport { useDisplay } from \"./display.js\";\nimport { useResizeObserver } from \"./resizeObserver.js\"; // Utilities\nimport { computed, nextTick, onScopeDispose, ref, shallowRef, watch, watchEffect } from 'vue';\nimport { clamp, debounce, getPropertyFromItem, IN_BROWSER, propsFactory } from \"../util/index.js\"; // Types\nconst UP = -1;\nconst DOWN = 1;\n\n/** Determines how large each batch of items should be */\nconst BUFFER_PX = 100;\nexport const makeVirtualProps = propsFactory({\n itemHeight: {\n type: [Number, String],\n default: null\n },\n itemKey: {\n type: [String, Array, Function],\n default: null\n },\n height: [Number, String]\n}, 'virtual');\nexport function useVirtual(props, items) {\n const display = useDisplay();\n const itemHeight = shallowRef(0);\n watchEffect(() => {\n itemHeight.value = parseFloat(props.itemHeight || 0);\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)) || 1);\n const paddingTop = shallowRef(0);\n const paddingBottom = shallowRef(0);\n\n /** The scrollable element */\n const containerRef = ref();\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();\n /** markerRef's offsetTop, lazily evaluated */\n let markerOffset = 0;\n const {\n resizeRef,\n contentRect\n } = useResizeObserver();\n watchEffect(() => {\n resizeRef.value = containerRef.value;\n });\n const viewportHeight = computed(() => {\n return containerRef.value === document.documentElement ? display.height.value : 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 let sizes = Array.from({\n length: items.value.length\n });\n let offsets = Array.from({\n length: items.value.length\n });\n let heights = new Map();\n const updateTime = shallowRef(0);\n let targetScrollIndex = -1;\n let targetScrollPosition = 'start';\n let targetScrollHeight = 0;\n function getSize(index) {\n return sizes[index] || itemHeight.value;\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 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 if (!~targetScrollIndex) return;\n nextTick(() => {\n IN_BROWSER && window.requestAnimationFrame(() => {\n if (~targetScrollIndex) scrollToIndex(targetScrollIndex, targetScrollPosition);\n });\n });\n });\n onScopeDispose(() => {\n updateOffsets.clear();\n });\n function estimateItemHeight() {\n let total = 0;\n for (const count of heights.values()) total += count;\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 function handleItemResize(index, height) {\n const prevHeight = sizes[index];\n const prevItemHeight = itemHeight.value;\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 if (prevHeight !== height || prevItemHeight !== itemHeight.value) {\n sizes[index] = height;\n updateOffsets();\n }\n }\n function calculateOffset(index) {\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 function calculateIndex(scrollTop) {\n return binaryClosest(offsets, scrollTop);\n }\n let lastScrollTop = 0;\n let scrollVelocity = 0;\n let lastScrollTime = 0;\n watch(viewportHeight, (val, oldVal) => {\n calculateVisibleItems();\n if (val < oldVal) {\n requestAnimationFrame(() => {\n scrollVelocity = 0;\n calculateVisibleItems();\n });\n }\n });\n let scrollTimeout = -1;\n function handleScroll() {\n if (!containerRef.value || !markerRef.value) return;\n const scrollTop = containerRef.value.scrollTop;\n const scrollTime = performance.now();\n const scrollDeltaT = scrollTime - lastScrollTime;\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 lastScrollTop = scrollTop;\n lastScrollTime = scrollTime;\n window.clearTimeout(scrollTimeout);\n scrollTimeout = window.setTimeout(handleScrollend, 500);\n calculateVisibleItems();\n }\n function handleScrollend() {\n if (!containerRef.value || !markerRef.value) return;\n scrollVelocity = 0;\n lastScrollTime = 0;\n window.clearTimeout(scrollTimeout);\n calculateVisibleItems();\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 const startPx = Math.max(0, scrollTop - BUFFER_PX);\n const start = clamp(calculateIndex(startPx), 0, items.value.length);\n const endPx = scrollTop + viewportHeight.value + BUFFER_PX;\n const end = clamp(calculateIndex(endPx) + 1, start + 1, items.value.length);\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) && (direction !== DOWN || end > last.value)) {\n const topOverflow = calculateOffset(first.value) - calculateOffset(start);\n const bottomOverflow = calculateOffset(end) - calculateOffset(last.value);\n const bufferOverflow = Math.max(topOverflow, bottomOverflow);\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 paddingTop.value = calculateOffset(first.value);\n paddingBottom.value = calculateOffset(items.value.length) - calculateOffset(last.value);\n }\n function calculateScrollTop(index, position) {\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 function scrollToIndex(index, position = 'start') {\n if (targetScrollIndex !== index) targetScrollHeight = 0;\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 scrollVelocity = 0;\n lastScrollTime = 0;\n targetScrollIndex = index;\n targetScrollPosition = position;\n nextTick(() => {\n const el = containerRef.value;\n // Superseded by a later scrollToIndex\n if (!el || !~targetScrollIndex || targetScrollIndex !== index) return;\n const top = calculateScrollTop(index, position);\n el.scrollTop = top;\n // Resize-driven calculateVisibleItems reads lastScrollTop, not the DOM\n lastScrollTop = el.scrollTop;\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 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 watch(items, () => {\n sizes = Array.from({\n length: items.value.length\n });\n offsets = Array.from({\n length: items.value.length\n });\n heights = new Map();\n updateOffsets.immediate();\n calculateVisibleItems();\n }, {\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, val) {\n let high = arr.length - 1;\n let low = 0;\n let mid = 0;\n let item = null;\n let target = -1;\n if (arr[high] < val) {\n return high;\n }\n while (low <= high) {\n mid = low + high >> 1;\n item = arr[mid];\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 return target;\n}\n//# sourceMappingURL=virtual.js.map","import { createVNode as _createVNode, Fragment as _Fragment, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\";\n// Styles\nimport \"./VVirtualScroll.css\";\n\n// Components\nimport { VVirtualScrollItem } from \"./VVirtualScrollItem.js\"; // Composables\nimport { makeComponentProps } from \"../../composables/component.js\";\nimport { makeDimensionProps, useDimension } from \"../../composables/dimensions.js\";\nimport { useToggleScope } from \"../../composables/toggleScope.js\";\nimport { makeVirtualProps, useVirtual } from \"../../composables/virtual.js\"; // Utilities\nimport { onMounted, onScopeDispose, toRef } from 'vue';\nimport { convertToUnit, genericComponent, getCurrentInstance, getScrollParent, IN_BROWSER, propsFactory, useRender } from \"../../util/index.js\"; // Types\nexport const makeVVirtualScrollProps = propsFactory({\n items: {\n type: Array,\n default: () => []\n },\n renderless: Boolean,\n ...makeVirtualProps(),\n ...makeComponentProps(),\n ...makeDimensionProps()\n}, 'VVirtualScroll');\nexport const VVirtualScroll = genericComponent()({\n name: 'VVirtualScroll',\n props: makeVVirtualScrollProps(),\n setup(props, {\n slots\n }) {\n const vm = getCurrentInstance('VVirtualScroll');\n const {\n dimensionStyles\n } = 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 useToggleScope(() => props.renderless, () => {\n function handleListeners(add = false) {\n const method = add ? 'addEventListener' : 'removeEventListener';\n if (!IN_BROWSER) return;\n if (containerRef.value === document.documentElement) {\n document[method]('scroll', handleScroll, {\n passive: true\n });\n document[method]('scrollend', handleScrollend);\n } else {\n containerRef.value?.[method]('scroll', handleScroll, {\n passive: true\n });\n containerRef.value?.[method]('scrollend', handleScrollend);\n }\n }\n onMounted(() => {\n containerRef.value = getScrollParent(vm.vnode.el, true);\n handleListeners(true);\n });\n onScopeDispose(handleListeners);\n });\n useRender(() => {\n const children = computedItems.value.map(item => _createVNode(VVirtualScrollItem, {\n \"key\": item.key,\n \"renderless\": props.renderless,\n \"onUpdate:height\": height => handleItemResize(item.index, height)\n }, {\n default: slotProps => slots.default?.({\n item: item.raw,\n index: item.index,\n ...slotProps\n })\n }));\n return props.renderless ? _createElementVNode(_Fragment, null, [_createElementVNode(\"div\", {\n \"ref\": markerRef,\n \"class\": \"v-virtual-scroll__spacer\",\n \"style\": {\n paddingTop: convertToUnit(paddingTop.value)\n }\n }, null), children, _createElementVNode(\"div\", {\n \"class\": \"v-virtual-scroll__spacer\",\n \"style\": {\n paddingBottom: convertToUnit(paddingBottom.value)\n }\n }, null)]) : _createElementVNode(\"div\", {\n \"ref\": containerRef,\n \"class\": _normalizeClass(['v-virtual-scroll', props.class]),\n \"onScrollPassive\": handleScroll,\n \"onScrollend\": handleScrollend,\n \"style\": _normalizeStyle([dimensionStyles.value, props.style])\n }, [_createElementVNode(\"div\", {\n \"ref\": markerRef,\n \"class\": \"v-virtual-scroll__container\",\n \"style\": {\n paddingTop: convertToUnit(paddingTop.value),\n paddingBottom: convertToUnit(paddingBottom.value)\n }\n }, [children])]);\n });\n return {\n calculateVisibleItems,\n scrollToIndex\n };\n }\n});\n//# sourceMappingURL=VVirtualScroll.js.map","import { V0Error, isObject, isString, isSymbol, isUndefined } from \"./utilities/index.mjs\";\nimport { inject, provide } from \"vue\";\n//#region src/composables/createContext/index.ts\n/**\n* @module createContext\n*\n* @see https://0.vuetifyjs.com/composables/foundation/create-context\n*\n* @remarks\n* Factory for creating type-safe Vue dependency injection contexts.\n*\n* Provides a wrapper around Vue's provide/inject that throws errors when context is not found,\n* eliminating silent failures and improving developer experience. Supports both app-level and\n* component-level provision.\n*\n* Supports two modes:\n* - **Static key**: `createContext('my-key')` - key is fixed at creation time\n* - **Dynamic key**: `createContext()` or `createContext({ suffix: 'item' })` - key provided at runtime\n*\n* @example\n* ```ts\n* import { createContext } from '@vuetify/v0'\n*\n* const [useTheme, provideTheme] = createContext<{ dark: boolean }>('theme')\n*\n* provideTheme({ dark: true })\n* const theme = useTheme()\n* ```\n*/\n/**\n* Injects a context provided by an ancestor component.\n*\n* @param key The key of the context to inject.\n* @param defaultValue Optional default value if context is not found.\n* @template Z The type of the context.\n* @returns The injected context.\n* @throws An error if the context is not found and no default is provided.\n*\n* @see https://vuejs.org/api/composition-api-dependency-injection.html#inject\n* @see https://0.vuetifyjs.com/composables/foundation/create-context\n*\n* @example\n* ```ts\n* // Without default value\n* const context = useContext('my-context')\n*\n* // With default value\n* const context = useContext('my-context', defaultContext)\n* ```\n*/\nfunction useContext(key, defaultValue) {\n\tconst context = inject(key, defaultValue);\n\tif (/* @__PURE__ */ isUndefined(context)) throw new V0Error(`Context \"${String(key)}\" not found. Ensure it's provided by an ancestor.`, {\n\t\tcode: \"V0_CONTEXT_MISSING\",\n\t\tkey\n\t});\n\treturn context;\n}\n/**\n* Provides a context to all descendant components.\n*\n* @param key The key of the context to provide.\n* @param context The context to provide.\n* @param app Optional Vue app instance to provide the context at app level instead of component level.\n* @template Z The type of the context.\n* @returns The provided context.\n*\n* @remarks\n* When `app` parameter is provided, the context is made available to all components in the app.\n* When omitted, the context is provided at the current component level and available to descendants only.\n*\n* @see https://vuejs.org/api/composition-api-dependency-injection.html#provide\n* @see https://0.vuetifyjs.com/composables/foundation/create-context\n*\n* @example\n* ```ts\n* // Component-level provision\n* provideContext('my-context', context)\n*\n* // App-level provision (typically used in plugins)\n* const app = createApp()\n* provideContext('my-context', context, app)\n* ```\n*/\nfunction provideContext(key, context, app) {\n\tif (app) app.provide(key, context);\n\telse provide(key, context);\n\treturn context;\n}\nfunction createContext(keyOrOptions, defaultValue) {\n\tif (/* @__PURE__ */ isString(keyOrOptions) || /* @__PURE__ */ isSymbol(keyOrOptions)) {\n\t\tif (process.env.NODE_ENV !== \"production\" && /* @__PURE__ */ isString(keyOrOptions) && !keyOrOptions.includes(\":\")) console.warn(`[v0:context] String key \"${keyOrOptions}\" has no namespace separator. Use \"namespace:key\" format (e.g. \"v0:theme\") to prevent collisions.`);\n\t\tconst _key = keyOrOptions;\n\t\tfunction _provideContext(context, app) {\n\t\t\treturn provideContext(_key, context, app);\n\t\t}\n\t\tfunction _useContext() {\n\t\t\treturn useContext(_key, defaultValue);\n\t\t}\n\t\treturn [_useContext, _provideContext];\n\t}\n\tconst suffix = /* @__PURE__ */ isObject(keyOrOptions) ? keyOrOptions.suffix : void 0;\n\tfunction _provideContext(key, context, app) {\n\t\treturn provideContext(suffix ? `${key}:${suffix}` : key, context, app);\n\t}\n\tfunction _useContext(key, defaultValue) {\n\t\treturn useContext(suffix ? `${key}:${suffix}` : key, defaultValue);\n\t}\n\treturn [_useContext, _provideContext];\n}\n//#endregion\n//#region src/composables/createTrinity/index.ts\n/**\n* @module createTrinity\n*\n* @see https://0.vuetifyjs.com/composables/foundation/create-trinity\n*\n* @remarks\n* Factory for creating the trinity pattern tuple used throughout the codebase.\n*\n* The trinity pattern returns a readonly tuple of [useContext, provideContext, defaultContext],\n* enabling flexible dependency injection with sensible defaults. This pattern is fundamental\n* to all registry-based composables.\n*\n* @example\n* ```ts\n* import { createTrinity } from '@vuetify/v0'\n*\n* const [useMyContext, provideMyContext, defaultContext] =\n* createTrinity('my-context', { foo: 'bar' })\n* ```\n*/\nfunction createTrinity(keyOrUseContext, provideContextOrContext, maybeContext) {\n\tif (/* @__PURE__ */ isString(keyOrUseContext)) {\n\t\tconst [useContext, provideContext] = createContext(keyOrUseContext);\n\t\tconst context = provideContextOrContext;\n\t\treturn [\n\t\t\tuseContext,\n\t\t\t(_context = context, app) => provideContext(_context, app),\n\t\t\tcontext\n\t\t];\n\t}\n\tconst provideContext = provideContextOrContext;\n\tconst context = maybeContext;\n\treturn [\n\t\tkeyOrUseContext,\n\t\t(_context = context, app) => provideContext(_context, app),\n\t\tcontext\n\t];\n}\n//#endregion\nexport { useContext as i, createContext as n, provideContext as r, createTrinity as t };\n","import { isNullOrUndefined, isUndefined } from \"./utilities/index.mjs\";\nimport { i as useContext, t as createTrinity } from \"./createTrinity-DJROWgXU.mjs\";\nimport { hasInjectionContext, inject, watch } from \"vue\";\n//#region src/composables/createPlugin/index.ts\n/**\n* @module createPlugin\n*\n* @see https://vuejs.org/guide/reusability/plugins.html\n* @see https://0.vuetifyjs.com/composables/foundation/create-plugin\n*\n* @remarks\n* Factory for creating Vue plugins with proper context provision.\n*\n* Wraps the provide function in app.runWithContext() to ensure proper execution context,\n* allowing plugins to safely provide dependency injection contexts at the application level.\n*\n* Also exports `createPluginContext` — a higher-level factory that generates the standard\n* context/plugin/consumer triple for plugin composables, eliminating boilerplate.\n* Supports `persist()` / `restore()` lifecycle hooks for saving and rehydrating plugin state.\n*\n* @example\n* ```ts\n* import { createPlugin } from '@vuetify/v0'\n*\n* const plugin = createPlugin({\n* namespace: 'v0:my-plugin',\n* provide: app => app.provide('my-key', { greet: () => 'hello' }),\n* })\n* // app.use(plugin)\n* ```\n*/\nconst INSTALLED = Symbol.for(\"v0:installed-plugins\");\nfunction getInstalled(app) {\n\tconst ctx = app._context;\n\treturn ctx[INSTALLED] ??= /* @__PURE__ */ new Set();\n}\n/**\n* Creates a new Vue plugin.\n*\n* @param options The plugin options.\n* @returns A new Vue plugin.\n*\n* @see https://0.vuetifyjs.com/composables/foundation/create-plugin\n*\n* @example\n* ```ts\n* export const [useContext, provideContext] = createContext('my-plugin')\n*\n* const context = {}\n*\n* export const MyPlugin = createPlugin({\n* namespace: 'my-plugin',\n* provide: (app) => {\n* provideContext(context, app)\n* },\n* setup: (app) => {\n* // Optional setup logic\n* },\n* })\n*/\nfunction createPlugin(options) {\n\treturn { install(app) {\n\t\tapp.runWithContext(() => {\n\t\t\tconst installed = getInstalled(app);\n\t\t\tif (installed.has(options.namespace)) return;\n\t\t\tinstalled.add(options.namespace);\n\t\t\toptions.provide(app);\n\t\t\toptions.setup?.(app);\n\t\t});\n\t} };\n}\nfunction deriveKey(namespace) {\n\treturn namespace.startsWith(\"v0:\") ? namespace.slice(3) : namespace;\n}\nfunction getPersistedStorage() {\n\treturn useContext(\"v0:storage\");\n}\n/**\n* Creates the three standard functions for a plugin composable.\n*\n* @param defaultNamespace The default DI namespace string (e.g. `'v0:logger'`).\n* @param factory Function that creates the composable context instance from options.\n* @param config Optional setup callback and fallback factory.\n* @returns A readonly tuple: `[createXContext, createXPlugin, useX]`.\n*\n* @example\n* ```ts\n* // Simple — no setup or fallback\n* export const [createStorageContext, createStoragePlugin, useStorage] =\n* createPluginContext('v0:storage', options => createStorage(options))\n*\n* // With fallback — safe outside component instances\n* export const [createLoggerContext, createLoggerPlugin, useLogger] =\n* createPluginContext('v0:logger', options => createLogger(options), {\n* fallback: ns => createFallbackLogger(ns),\n* setup: (context) => {\n* if (__DEV__ && IN_BROWSER) (window as Window & { __v0Logger__?: typeof context }).__v0Logger__ = context\n* },\n* })\n* ```\n*/\nfunction createPluginContext(defaultNamespace, factory, config) {\n\tfunction createXContext(_options = {}) {\n\t\tconst { namespace = defaultNamespace, persist: _persist, ...options } = _options;\n\t\tconst context = factory(options);\n\t\treturn createTrinity(namespace, context);\n\t}\n\tfunction createXPlugin(_options = {}) {\n\t\tconst { namespace = defaultNamespace, persist: shouldPersist, ...options } = _options;\n\t\tlet context;\n\t\treturn createPlugin({\n\t\t\tnamespace,\n\t\t\tprovide: (app) => {\n\t\t\t\tconst [, provide, ctx] = createXContext({\n\t\t\t\t\t...options,\n\t\t\t\t\tnamespace\n\t\t\t\t});\n\t\t\t\tcontext = ctx;\n\t\t\t\tprovide(context, app);\n\t\t\t\tif (shouldPersist && config?.restore) {\n\t\t\t\t\tconst storage = getPersistedStorage();\n\t\t\t\t\tconst key = deriveKey(namespace);\n\t\t\t\t\tconst saved = storage.get(key);\n\t\t\t\t\tif (!/* @__PURE__ */ isNullOrUndefined(saved.value)) config.restore(context, saved.value);\n\t\t\t\t}\n\t\t\t},\n\t\t\tsetup: config?.setup || shouldPersist ? (app) => {\n\t\t\t\tconst ctx = context;\n\t\t\t\tconfig?.setup?.(ctx, app, options);\n\t\t\t\tif (shouldPersist && config?.persist) {\n\t\t\t\t\tconst storage = getPersistedStorage();\n\t\t\t\t\tconst key = deriveKey(namespace);\n\t\t\t\t\tconst stored = storage.get(key);\n\t\t\t\t\tconst stop = watch(() => config.persist(ctx), (val) => {\n\t\t\t\t\t\tstored.value = val;\n\t\t\t\t\t});\n\t\t\t\t\tapp.onUnmount(stop);\n\t\t\t\t}\n\t\t\t} : void 0\n\t\t});\n\t}\n\tfunction useX(namespace = defaultNamespace) {\n\t\tif (config?.fallback) {\n\t\t\tif (!hasInjectionContext()) return config.fallback(namespace);\n\t\t\tconst provided = inject(namespace, void 0);\n\t\t\tif (!/* @__PURE__ */ isUndefined(provided)) return provided;\n\t\t\treturn config.fallback(namespace);\n\t\t}\n\t\treturn useContext(namespace);\n\t}\n\treturn [\n\t\tcreateXContext,\n\t\tcreateXPlugin,\n\t\tuseX\n\t];\n}\n//#endregion\nexport { createPluginContext as n, createPlugin as t };\n","//#region src/composables/useLogger/adapters/adapter.ts\nvar LoggerAdapter = class {};\n//#endregion\nexport { LoggerAdapter as t };\n","import { t as IN_BROWSER } from \"./globals-Bxw-y98v.mjs\";\nimport { isFunction } from \"./utilities/index.mjs\";\nimport { t as LoggerAdapter } from \"./adapter-B5mEUP5W.mjs\";\n//#region src/composables/useLogger/adapters/v0.ts\n/**\n* V0 logger adapter implementation\n*\n* This adapter provides console-based logging with proper formatting,\n* color coding, timestamps, and log level filtering for development\n* and production environments.\n*/\nvar V0LoggerAdapter = class extends LoggerAdapter {\n\tprefix;\n\tcolors;\n\ttimestamps;\n\tconstructor(options = {}) {\n\t\tsuper();\n\t\tthis.prefix = options.prefix || \"v0\";\n\t\tthis.colors = options.colors !== false;\n\t\tthis.timestamps = options.timestamps !== false;\n\t}\n\tdebug(message, ...args) {\n\t\tthis.log(\"debug\", \"debug\", message, ...args);\n\t}\n\tinfo(message, ...args) {\n\t\tthis.log(\"info\", \"info\", message, ...args);\n\t}\n\twarn(message, ...args) {\n\t\tthis.log(\"warn\", \"warn\", message, ...args);\n\t}\n\terror(message, ...args) {\n\t\tthis.log(\"error\", \"error\", message, ...args);\n\t}\n\ttrace(message, ...args) {\n\t\tthis.log(\"trace\", \"trace\", message, ...args);\n\t}\n\tfatal(message, ...args) {\n\t\tthis.log(\"fatal\", \"error\", message, ...args);\n\t}\n\tformat(level, message, ...args) {\n\t\treturn [[\n\t\t\tthis.timestamps ? this.timestamp() : \"\",\n\t\t\t`[${this.prefix} ${level.toLowerCase()}]`,\n\t\t\tmessage\n\t\t].filter(Boolean).join(\" \"), ...args];\n\t}\n\ttimestamp() {\n\t\tif (!IN_BROWSER) return (/* @__PURE__ */ new Date()).toISOString();\n\t\t/* v8 ignore next -- defensive fallback, toTimeString always returns valid format */\n\t\treturn (/* @__PURE__ */ new Date()).toTimeString().split(\" \")[0] ?? \"\";\n\t}\n\tstyle(level) {\n\t\tif (!this.colors || !IN_BROWSER) return \"\";\n\t\t/* v8 ignore next -- LogLevel union is exhaustive */\n\t\treturn {\n\t\t\ttrace: \"color: #64748b\",\n\t\t\tdebug: \"color: #3b82f6\",\n\t\t\tinfo: \"color: #10b981\",\n\t\t\twarn: \"color: #f59e0b\",\n\t\t\terror: \"color: #ef4444\",\n\t\t\tfatal: \"color: #dc2626; font-weight: bold\",\n\t\t\tsilent: \"\"\n\t\t}[level] || \"\";\n\t}\n\tlog(level, method, message, ...args) {\n\t\tconst [formattedMessage, ...restArgs] = this.format(level, message, ...args);\n\t\tconst style = this.style(level);\n\t\tif (IN_BROWSER && style && /* @__PURE__ */ isFunction(console[method])) console[method](`%c${formattedMessage}`, style, ...restArgs);\n\t\telse if (/* @__PURE__ */ isFunction(console[method])) console[method](formattedMessage, ...restArgs);\n\t}\n};\n//#endregion\nexport { V0LoggerAdapter as t };\n","import { s as __LOGGER_ENABLED__, t as IN_BROWSER } from \"./globals-Bxw-y98v.mjs\";\nimport { isUndefined } from \"./utilities/index.mjs\";\nimport { n as createPluginContext } from \"./createPlugin-YYkwbiUd.mjs\";\nimport { t as V0LoggerAdapter } from \"./v0-CLrKU-7h.mjs\";\n//#region src/composables/useLogger/index.ts\n/**\n* @module useLogger\n*\n* @see https://0.vuetifyjs.com/composables/plugins/use-logger\n*\n* @remarks\n* Logging composable with adapter pattern supporting console, consola, and pino.\n*\n* Key features:\n* - Multiple log levels (trace, debug, info, warn, error, fatal)\n* - Adapter pattern for console/consola/pino integration\n* - Enable/disable logging\n* - Fallback logger for undefined loggers\n* - Context logging support\n*\n* Uses adapter pattern to abstract logging implementation.\n*\n* @example\n* ```ts\n* import { useLogger } from '@vuetify/v0'\n*\n* const logger = useLogger()\n* logger.info('hello')\n* logger.warn('careful')\n* ```\n*/\n/**\n* Creates a new logger instance.\n*\n* @param options The options for the logger instance.\n* @returns A new logger instance.\n*\n* @see https://0.vuetifyjs.com/composables/plugins/use-logger\n*\n* @example\n* ```ts\n* import { createLogger } from '@vuetify/v0'\n*\n* const logger = createLogger({\n* level: 'debug',\n* prefix: '[MyApp]',\n* })\n*\n* logger.info('This is an info message')\n* logger.debug('This is a debug message')\n* logger.error('This is an error message')\n* logger.level('debug')\n* logger.debug('This debug message will now be logged')\n* ```\n*/\nfunction createLogger(options = {}) {\n\tconst { adapter = new V0LoggerAdapter({ prefix: options.prefix }), level: initialLevel = \"info\", enabled: initialEnabled = __LOGGER_ENABLED__ } = options;\n\tlet currentLevel = initialLevel;\n\tlet isEnabled = initialEnabled;\n\tfunction value(level) {\n\t\treturn {\n\t\t\ttrace: 0,\n\t\t\tdebug: 1,\n\t\t\tinfo: 2,\n\t\t\twarn: 3,\n\t\t\terror: 4,\n\t\t\tfatal: 5,\n\t\t\tsilent: 6\n\t\t}[level] ?? 2;\n\t}\n\tfunction can(level) {\n\t\tif (!isEnabled) return false;\n\t\treturn value(level) >= value(currentLevel);\n\t}\n\tfunction format(message) {\n\t\treturn message;\n\t}\n\tfunction debug(message, ...args) {\n\t\tif (can(\"debug\")) adapter.debug(format(message), ...args);\n\t}\n\tfunction info(message, ...args) {\n\t\tif (can(\"info\")) adapter.info(format(message), ...args);\n\t}\n\tfunction warn(message, ...args) {\n\t\tif (can(\"warn\")) adapter.warn(format(message), ...args);\n\t}\n\tfunction error(message, ...args) {\n\t\tif (can(\"error\")) adapter.error(format(message), ...args);\n\t}\n\tfunction trace(message, ...args) {\n\t\tif (can(\"trace\")) adapter.trace?.(format(message), ...args);\n\t}\n\tfunction fatal(message, ...args) {\n\t\tif (can(\"fatal\")) adapter.fatal?.(format(message), ...args);\n\t}\n\tfunction level(newLevel) {\n\t\tcurrentLevel = newLevel;\n\t}\n\tfunction current() {\n\t\treturn currentLevel;\n\t}\n\tfunction enabled() {\n\t\treturn isEnabled;\n\t}\n\tfunction enable() {\n\t\tisEnabled = true;\n\t}\n\tfunction disable() {\n\t\tisEnabled = false;\n\t}\n\treturn {\n\t\tdebug,\n\t\tinfo,\n\t\twarn,\n\t\terror,\n\t\ttrace,\n\t\tfatal,\n\t\tlevel,\n\t\tcurrent,\n\t\tenabled,\n\t\tenable,\n\t\tdisable\n\t};\n}\nconst NAMESPACE = \"v0:logger\";\nfunction createFallbackLogger(namespace = NAMESPACE) {\n\tfunction format(message, type) {\n\t\treturn `[${namespace} ${type}] ${message}`;\n\t}\n\treturn {\n\t\tdebug: (message, ...args) => console.debug(format(message, \"debug\"), ...args),\n\t\tinfo: (message, ...args) => console.info(format(message, \"info\"), ...args),\n\t\twarn: (message, ...args) => console.warn(format(message, \"warn\"), ...args),\n\t\terror: (message, ...args) => console.error(format(message, \"error\"), ...args),\n\t\ttrace: (message, ...args) => console.trace(format(message, \"trace\"), ...args),\n\t\tfatal: (message, ...args) => console.error(format(message, \"fatal\"), ...args),\n\t\tlevel: () => {},\n\t\tcurrent: () => \"info\",\n\t\tenabled: () => true,\n\t\tenable: () => {},\n\t\tdisable: () => {}\n\t};\n}\n/**\n* Creates a new logger context.\n*\n* @param options The options for the logger context.\n* @template E The type of the logger context.\n* @returns A new logger context.\n*\n* @see https://0.vuetifyjs.com/composables/plugins/use-logger\n*\n* @example\n* ```ts\n* import { createLoggerContext } from '@vuetify/v0'\n*\n* export const [useAppLogger, provideAppLogger, appLogger] = createLoggerContext({\n* namespace: 'app:logger',\n* level: 'debug',\n* })\n* ```\n*/\nconst [createLoggerContext, createLoggerPlugin, useLoggerContext] = createPluginContext(NAMESPACE, (options) => createLogger(options), {\n\tfallback: (ns) => createFallbackLogger(ns),\n\tsetup: (context, _app, _options) => {\n\t\tif (typeof (process.env.NODE_ENV !== \"production\") !== \"undefined\" && process.env.NODE_ENV !== \"production\" && IN_BROWSER) window.__v0Logger__ = context;\n\t}\n});\nfunction createScopedLogger(logger, scope) {\n\tconst tag = `[${scope}]`;\n\tfunction wrap(method) {\n\t\treturn (message, ...args) => method(`${tag} ${message}`, ...args);\n\t}\n\treturn {\n\t\t...logger,\n\t\tdebug: wrap(logger.debug),\n\t\tinfo: wrap(logger.info),\n\t\twarn: wrap(logger.warn),\n\t\terror: wrap(logger.error),\n\t\ttrace: wrap(logger.trace),\n\t\tfatal: wrap(logger.fatal)\n\t};\n}\n/**\n* Consumes the application logger provided by `createLoggerPlugin`.\n*\n* Call with no argument to use the configured logger as-is. Pass a scope key to get a\n* logger that prefixes every message with a `[scope]` segment after the plugin prefix —\n* useful for telling apart output from composables that share the app-level logger. A\n* scoped logger shares the underlying logger's level, enabled state, and adapter; only\n* the message prefix differs. A blank scope is treated as no scope.\n*\n* @param scope Optional per-caller scope key prefixed onto every message.\n* @returns The application logger, or a scoped wrapper around it.\n*\n* @see https://0.vuetifyjs.com/composables/plugins/use-logger\n*\n* @example\n* ```ts\n* import { useLogger } from '@vuetify/v0'\n*\n* const logger = useLogger('createKanban')\n*\n* logger.warn('drop rejected')\n* // → [v0 warn] [createKanban] drop rejected\n* ```\n*/\nfunction useLogger(scope) {\n\tconst logger = useLoggerContext();\n\treturn /* @__PURE__ */ isUndefined(scope) || !scope.trim() ? logger : createScopedLogger(logger, scope);\n}\n//#endregion\nexport { useLogger as i, createLoggerContext as n, createLoggerPlugin as r, createLogger as t };\n","import { clamp, isNullOrUndefined, isUndefined, useId as useId$1 } from \"./utilities/index.mjs\";\nimport { i as useContext, t as createTrinity } from \"./createTrinity-DJROWgXU.mjs\";\nimport { i as useLogger } from \"./useLogger-BIAZ6Iyu.mjs\";\nimport { shallowReactive, shallowRef } from \"vue\";\n//#region src/composables/createRegistry/index.ts\n/**\n* @module createRegistry\n*\n* @see https://0.vuetifyjs.com/composables/registration/create-registry\n*\n* @remarks\n* A foundational composable for managing collections of items (tickets) with:\n* - Unique ID-based access\n* - Index-based ordering and reordering via `move()`\n* - Value-based reverse lookup\n* - `unregister()` for individual item removal\n* - Automatic reindexing\n* - Batched event dispatch to prevent N cache invalidations\n* - Performance-optimized caching\n*\n* The registry serves as the base for many other composables in the system,\n* including createSelection, createForm, createTimeline, and more.\n*\n* @example\n* ```ts\n* import { createRegistry } from '@vuetify/v0'\n*\n* const registry = createRegistry()\n* const ticket = registry.register({ value: 'item-1' })\n* console.log(registry.size) // 1\n* registry.unregister(ticket.id)\n* ```\n*/\n/**\n* Creates a new registry instance.\n*\n* @param options The options for the registry instance.\n* @template Z The type of registry ticket that extends RegistryTicket. Use this to add custom properties to tickets.\n* @template E The type of registry context that extends RegistryContext. Use this when extending the registry with additional methods.\n* @returns A new registry instance.\n*\n* @see https://0.vuetifyjs.com/composables/registration/create-registry\n*\n* @example\n* ```ts\n* import { createRegistry } from '@vuetify/v0'\n*\n* const registry = createRegistry()\n*\n* const ticket1 = registry.register({ id: 'user-1', value: { name: 'John' } })\n* const ticket2 = registry.register({ id: 'user-2', value: { name: 'Jane' } })\n*\n* console.log(registry.size) // 2\n* console.log(registry.get('user-1')) // { id: 'user-1', index: 0, value: { name: 'John' }, ... }\n* ```\n*/\nfunction createRegistry(options) {\n\tconst logger = useLogger();\n\tconst events = options?.events ?? false;\n\tconst reactive = options?.reactive ?? false;\n\tconst collection = reactive ? shallowReactive(/* @__PURE__ */ new Map()) : /* @__PURE__ */ new Map();\n\tconst catalog = /* @__PURE__ */ new Map();\n\tconst directory = /* @__PURE__ */ new Map();\n\tconst cache = /* @__PURE__ */ new Map();\n\tconst listeners = /* @__PURE__ */ new Map();\n\tconst minted = /* @__PURE__ */ new WeakSet();\n\tconst order = [];\n\tconst version = shallowRef(0);\n\tlet indexDependentCount = 0;\n\tlet needsReindex = false;\n\tlet minDirtyIndex = Infinity;\n\tlet maxDirtyIndex = -Infinity;\n\tlet isBatching = false;\n\tlet structural = false;\n\tlet batched = [];\n\tfunction dispatch(event, data) {\n\t\tconst cbs = listeners.get(event);\n\t\tif (!cbs) return;\n\t\tfor (const cb of cbs) cb(data);\n\t}\n\tfunction emit(event, data = void 0) {\n\t\tif (!events) return;\n\t\tif (isBatching) {\n\t\t\tbatched.push({\n\t\t\t\tevent,\n\t\t\t\tdata\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tdispatch(event, data);\n\t}\n\tfunction on(event, cb) {\n\t\tif (!events) {\n\t\t\tlogger.warn(`Events are disabled. Initialize with \\`createRegistry({ events: true })\\` to enable.`);\n\t\t\treturn;\n\t\t}\n\t\tif (!listeners.has(event)) listeners.set(event, /* @__PURE__ */ new Set());\n\t\tconst cbs = listeners.get(event);\n\t\tcbs.add(cb);\n\t\tif (process.env.NODE_ENV !== \"production\" && cbs.size === 101) logger.warn(`Event \"${event}\" has ${cbs.size} listeners. Possible memory leak.`);\n\t}\n\tfunction off(event, cb) {\n\t\tif (!events) {\n\t\t\tlogger.warn(`Events are disabled. Initialize with \\`createRegistry({ events: true })\\` to enable.`);\n\t\t\treturn;\n\t\t}\n\t\tlisteners.get(event)?.delete(cb);\n\t}\n\tfunction dispose() {\n\t\tlisteners.clear();\n\t\tclear();\n\t}\n\tfunction get(id) {\n\t\treturn collection.get(id);\n\t}\n\tfunction upsert(id, patch = {}, event) {\n\t\tif (needsReindex) reindex();\n\t\tconst existing = get(id);\n\t\tif (!existing) return register({\n\t\t\t...patch,\n\t\t\tid\n\t\t});\n\t\tconst hasValue = Object.hasOwn(patch, \"value\");\n\t\tlet value = existing.value;\n\t\tlet valueIsIndex = existing.valueIsIndex;\n\t\tif (hasValue) {\n\t\t\tif (/* @__PURE__ */ isUndefined(patch.value)) {\n\t\t\t\tvalue = existing.index;\n\t\t\t\tvalueIsIndex = true;\n\t\t\t} else {\n\t\t\t\tvalue = patch.value;\n\t\t\t\tvalueIsIndex = false;\n\t\t\t}\n\t\t\tif (valueIsIndex !== existing.valueIsIndex) {\n\t\t\t\tif (valueIsIndex) indexDependentCount++;\n\t\t\t\telse indexDependentCount--;\n\t\t\t}\n\t\t\tif (!Object.is(value, existing.value)) {\n\t\t\t\tunassign(existing.value, id);\n\t\t\t\tassign(value, id);\n\t\t\t}\n\t\t}\n\t\tObject.assign(existing, patch, {\n\t\t\tid,\n\t\t\tindex: existing.index,\n\t\t\tvalue,\n\t\t\tvalueIsIndex\n\t\t});\n\t\tcollection.set(id, existing);\n\t\tcache.clear();\n\t\temit(\"update:ticket\", existing);\n\t\tif (event) emit(event, existing);\n\t\treturn existing;\n\t}\n\tfunction browse(value) {\n\t\tif (needsReindex) reindex();\n\t\tconst bucket = catalog.get(value);\n\t\treturn bucket ? bucket.slice() : void 0;\n\t}\n\tfunction lookup(index) {\n\t\tif (needsReindex) reindex();\n\t\treturn directory.get(index);\n\t}\n\tfunction has(id) {\n\t\treturn collection.has(id);\n\t}\n\tfunction assign(value, id) {\n\t\tconst bucket = catalog.get(value);\n\t\tif (bucket) {\n\t\t\tif (!bucket.includes(id)) bucket.push(id);\n\t\t} else catalog.set(value, [id]);\n\t}\n\tfunction unassign(value, id) {\n\t\tconst bucket = catalog.get(value);\n\t\tif (!bucket) return;\n\t\tconst next = bucket.filter((v) => v !== id);\n\t\tif (next.length === 0) catalog.delete(value);\n\t\telse catalog.set(value, next);\n\t}\n\tfunction keys() {\n\t\tif (reactive) version.value;\n\t\tconst cached = cache.get(\"keys\");\n\t\tif (!/* @__PURE__ */ isUndefined(cached)) return cached;\n\t\tconst out = order.map((ticket) => ticket.id);\n\t\tcache.set(\"keys\", out);\n\t\treturn out;\n\t}\n\tfunction values() {\n\t\tif (reactive) version.value;\n\t\tconst cached = cache.get(\"values\");\n\t\tif (!/* @__PURE__ */ isUndefined(cached)) return cached;\n\t\tconst out = order.slice();\n\t\tcache.set(\"values\", out);\n\t\treturn out;\n\t}\n\tfunction entries() {\n\t\tif (reactive) version.value;\n\t\tconst cached = cache.get(\"entries\");\n\t\tif (!/* @__PURE__ */ isUndefined(cached)) return cached;\n\t\tconst out = order.map((ticket) => [ticket.id, ticket]);\n\t\tcache.set(\"entries\", out);\n\t\treturn out;\n\t}\n\tfunction clear() {\n\t\torder.length = 0;\n\t\tcollection.clear();\n\t\tcatalog.clear();\n\t\tdirectory.clear();\n\t\tinvalidate();\n\t\tindexDependentCount = 0;\n\t\tneedsReindex = false;\n\t\tminDirtyIndex = Infinity;\n\t\tmaxDirtyIndex = -Infinity;\n\t\temit(\"clear:registry\");\n\t}\n\tfunction invalidate() {\n\t\tcache.clear();\n\t\tif (isBatching) {\n\t\t\tstructural = true;\n\t\t\treturn;\n\t\t}\n\t\tversion.value++;\n\t}\n\tfunction batch(fn) {\n\t\tif (isBatching) return fn();\n\t\tisBatching = true;\n\t\tstructural = false;\n\t\tbatched = [];\n\t\ttry {\n\t\t\treturn fn();\n\t\t} finally {\n\t\t\tisBatching = false;\n\t\t\tconst queue = batched;\n\t\t\tbatched = [];\n\t\t\tcache.clear();\n\t\t\ttry {\n\t\t\t\tfor (const { event, data } of queue) dispatch(event, data);\n\t\t\t} finally {\n\t\t\t\tif (structural) version.value++;\n\t\t\t}\n\t\t}\n\t}\n\tfunction reindex() {\n\t\tconst size = order.length;\n\t\tconst start = minDirtyIndex === Infinity ? 0 : minDirtyIndex;\n\t\tconst end = maxDirtyIndex === -Infinity ? size - 1 : Math.min(maxDirtyIndex, size - 1);\n\t\tconst full = start === 0 && end === size - 1;\n\t\tinvalidate();\n\t\tif (full) {\n\t\t\tcatalog.clear();\n\t\t\tdirectory.clear();\n\t\t} else for (let i = start; i <= end; i++) {\n\t\t\tconst ticket = order[i];\n\t\t\tdirectory.delete(ticket.index);\n\t\t\tif (ticket.valueIsIndex) unassign(ticket.value, ticket.id);\n\t\t}\n\t\tfor (let i = start; i <= end; i++) {\n\t\t\tconst ticket = order[i];\n\t\t\tif (ticket.valueIsIndex) {\n\t\t\t\tticket.value = i;\n\t\t\t\tassign(ticket.value, ticket.id);\n\t\t\t} else if (full) assign(ticket.value, ticket.id);\n\t\t\tticket.index = i;\n\t\t\tdirectory.set(i, ticket.id);\n\t\t}\n\t\tneedsReindex = false;\n\t\tminDirtyIndex = Infinity;\n\t\tmaxDirtyIndex = -Infinity;\n\t\temit(\"reindex:registry\");\n\t}\n\tfunction register(registration = {}) {\n\t\tif (needsReindex) reindex();\n\t\tconst size = collection.size;\n\t\tconst auto = /* @__PURE__ */ isNullOrUndefined(registration.id);\n\t\tconst id = registration.id ?? /* @__PURE__ */ useId$1();\n\t\tif (has(id)) {\n\t\t\tlogger.warn(`Ticket \"${id}\" already exists. Use \\`upsert()\\` to update or check \\`has()\\` before registering.`);\n\t\t\treturn get(id);\n\t\t}\n\t\tconst valueIsUndefined = /* @__PURE__ */ isUndefined(registration.value);\n\t\tconst index = size;\n\t\tconst value = valueIsUndefined ? index : registration.value;\n\t\tconst valueIsIndex = registration.valueIsIndex ?? valueIsUndefined;\n\t\tif (valueIsIndex) indexDependentCount++;\n\t\tconst input = {\n\t\t\tunregister: () => unregister(id),\n\t\t\t...registration,\n\t\t\tid,\n\t\t\tindex,\n\t\t\tvalue,\n\t\t\tvalueIsIndex\n\t\t};\n\t\tconst ticket = reactive ? shallowReactive(input) : input;\n\t\tif (auto) minted.add(ticket);\n\t\tcollection.set(ticket.id, ticket);\n\t\torder.push(ticket);\n\t\tdirectory.set(ticket.index, ticket.id);\n\t\tassign(ticket.value, ticket.id);\n\t\tinvalidate();\n\t\temit(\"register:ticket\", ticket);\n\t\treturn ticket;\n\t}\n\tfunction unregister(id) {\n\t\tconst ticket = collection.get(id);\n\t\tif (!ticket) return;\n\t\tif (ticket.valueIsIndex) indexDependentCount--;\n\t\tlet orderPos = ticket.index;\n\t\tif (order[orderPos] !== ticket) orderPos = order.indexOf(ticket);\n\t\tif (orderPos !== -1) order.splice(orderPos, 1);\n\t\tcollection.delete(ticket.id);\n\t\tdirectory.delete(ticket.index);\n\t\tunassign(ticket.value, ticket.id);\n\t\tconst willReindex = indexDependentCount > 0 && ticket.index < collection.size;\n\t\tif (!willReindex) invalidate();\n\t\tminDirtyIndex = Math.min(minDirtyIndex, ticket.index);\n\t\tif (willReindex) reindex();\n\t\telse needsReindex = true;\n\t\temit(\"unregister:ticket\", ticket);\n\t}\n\tfunction onboard(registrations) {\n\t\treturn batch(() => registrations.map((registration) => register(registration)));\n\t}\n\tfunction toInput(ticket) {\n\t\tconst input = { ...ticket };\n\t\tdelete input.index;\n\t\tdelete input.valueIsIndex;\n\t\tdelete input.unregister;\n\t\tif (minted.has(ticket)) delete input.id;\n\t\tif (ticket.valueIsIndex) delete input.value;\n\t\treturn input;\n\t}\n\tfunction offboard(ids) {\n\t\tconst removed = [];\n\t\tconst removedIds = /* @__PURE__ */ new Set();\n\t\tfor (const id of ids) {\n\t\t\tif (removedIds.has(id)) continue;\n\t\t\tconst ticket = collection.get(id);\n\t\t\tif (ticket) {\n\t\t\t\tremoved.push(ticket);\n\t\t\t\tremovedIds.add(id);\n\t\t\t}\n\t\t}\n\t\tif (removed.length === 0) return [];\n\t\tbatch(() => {\n\t\t\tlet w = 0;\n\t\t\tfor (const ticket of order) if (!removedIds.has(ticket.id)) order[w++] = ticket;\n\t\t\torder.length = w;\n\t\t\tinvalidate();\n\t\t\tfor (const ticket of removed) {\n\t\t\t\tif (ticket.valueIsIndex) indexDependentCount--;\n\t\t\t\tminDirtyIndex = Math.min(minDirtyIndex, ticket.index);\n\t\t\t\tcollection.delete(ticket.id);\n\t\t\t\tdirectory.delete(ticket.index);\n\t\t\t\tunassign(ticket.value, ticket.id);\n\t\t\t}\n\t\t\tfor (const ticket of removed) emit(\"unregister:ticket\", ticket);\n\t\t\tif (indexDependentCount > 0 && minDirtyIndex < collection.size) reindex();\n\t\t\telse needsReindex = true;\n\t\t});\n\t\treturn removed.map((ticket) => toInput(ticket));\n\t}\n\tfunction move(id, toIndex) {\n\t\tif (needsReindex) reindex();\n\t\tconst ticket = collection.get(id);\n\t\tif (!ticket) return void 0;\n\t\tconst size = collection.size;\n\t\tconst target = /* @__PURE__ */ clamp(toIndex, 0, size - 1);\n\t\tconst from = ticket.index;\n\t\tif (from === target) return ticket;\n\t\treturn batch(() => {\n\t\t\torder.splice(from, 1);\n\t\t\torder.splice(target, 0, ticket);\n\t\t\tminDirtyIndex = Math.min(from, target);\n\t\t\tmaxDirtyIndex = Math.max(from, target);\n\t\t\treindex();\n\t\t\temit(\"update:ticket\", ticket);\n\t\t\treturn ticket;\n\t\t});\n\t}\n\tfunction reorder(ids) {\n\t\tif (needsReindex) reindex();\n\t\tif (ids.length !== collection.size) return;\n\t\tconst seen = /* @__PURE__ */ new Set();\n\t\tconst next = [];\n\t\tfor (const id of ids) {\n\t\t\tif (seen.has(id)) return;\n\t\t\tconst ticket = collection.get(id);\n\t\t\tif (!ticket) return;\n\t\t\tseen.add(id);\n\t\t\tnext.push(ticket);\n\t\t}\n\t\tbatch(() => {\n\t\t\tfor (const [i, ticket] of next.entries()) order[i] = ticket;\n\t\t\tminDirtyIndex = 0;\n\t\t\tmaxDirtyIndex = -Infinity;\n\t\t\treindex();\n\t\t});\n\t}\n\tfunction seek(direction = \"first\", from, predicate) {\n\t\tif (collection.size === 0) return void 0;\n\t\tif (needsReindex) reindex();\n\t\tconst n = order.length;\n\t\tif (!predicate && /* @__PURE__ */ isUndefined(from)) return direction === \"first\" ? order[0] : order.at(-1);\n\t\tconst index = /* @__PURE__ */ isUndefined(from) ? void 0 : /* @__PURE__ */ clamp(from, 0, n - 1);\n\t\tif (direction === \"last\") {\n\t\t\tconst start = /* @__PURE__ */ isUndefined(index) ? n - 1 : index;\n\t\t\tfor (let i = start; i >= 0; i--) {\n\t\t\t\tconst ticket = order[i];\n\t\t\t\tif (!predicate || predicate(ticket)) return ticket;\n\t\t\t}\n\t\t} else {\n\t\t\tconst start = /* @__PURE__ */ isUndefined(index) ? 0 : index;\n\t\t\tfor (let i = start; i < n; i++) {\n\t\t\t\tconst ticket = order[i];\n\t\t\t\tif (!predicate || predicate(ticket)) return ticket;\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tcollection,\n\t\temit,\n\t\ton,\n\t\toff,\n\t\tdispose,\n\t\thas,\n\t\tkeys,\n\t\tclear,\n\t\tbrowse,\n\t\tentries,\n\t\tvalues,\n\t\tlookup,\n\t\tget,\n\t\tupsert,\n\t\tregister,\n\t\tunregister,\n\t\treindex,\n\t\tmove,\n\t\treorder,\n\t\tseek,\n\t\tbatch,\n\t\tonboard,\n\t\toffboard,\n\t\tget size() {\n\t\t\treturn collection.size;\n\t\t}\n\t};\n}\n/**\n* Creates a new registry context.\n*\n* @param options The options for the registry context, including `namespace` (defaults to `'v0:registry'`) and `events`.\n* @template Z The type of registry ticket that extends RegistryTicket. Use this to add custom properties to tickets.\n* @template E The type of registry context that extends RegistryContext. Use this when extending the registry with additional methods.\n* @returns A new registry context.\n*\n* @see https://0.vuetifyjs.com/composables/registration/create-registry\n*\n* @example\n* ```ts\n* import { createRegistryContext } from '@vuetify/v0'\n*\n* // With default namespace 'v0:registry'\n* export const [useItems, provideItems, items] = createRegistryContext()\n*\n* // Or with custom namespace\n* export const [useItems, provideItems, items] = createRegistryContext({ namespace: 'my-items' })\n*\n* // In a parent component:\n* provideItems()\n*\n* // In a child component:\n* const items = useItems()\n* items.register({ id: 'item-1', value: 'Value 1' })\n* ```\n*/\nfunction createRegistryContext(_options = {}) {\n\tconst { namespace = \"v0:registry\", ...options } = _options;\n\tconst context = createRegistry(options);\n\treturn createTrinity(namespace, context);\n}\n/**\n* Uses an existing registry from context.\n*\n* @param namespace The namespace for the registry context. Defaults to `'v0:registry'`.\n* @template Z The type of registry ticket that extends RegistryTicket.\n* @template E The type of registry context that extends RegistryContext.\n* @returns The registry instance.\n*\n* @see https://0.vuetifyjs.com/composables/registration/create-registry\n*\n* @example\n* ```ts\n* import { useRegistry } from '@vuetify/v0'\n*\n* // In a child component (after provideRegistry was called by an ancestor):\n* const registry = useRegistry()\n*\n* registry.register({ id: 'item-1', value: 'Value 1' })\n* ```\n*/\nfunction useRegistry(namespace = \"v0:registry\") {\n\treturn useContext(namespace);\n}\n//#endregion\nexport { createRegistryContext as n, useRegistry as r, createRegistry as t };\n","import { isUndefined, resolveIds, useId as useId$1 } from \"./utilities/index.mjs\";\nimport { i as useContext, t as createTrinity } from \"./createTrinity-DJROWgXU.mjs\";\nimport { t as createRegistry } from \"./createRegistry-COW_AjH1.mjs\";\nimport { computed, isRef, shallowReactive, toRaw, toRef, toValue } from \"vue\";\n//#region src/composables/createModel/index.ts\n/**\n* @module createModel\n*\n* @see https://0.vuetifyjs.com/composables/selection/create-model\n*\n* @remarks\n* Value store layer that extends createRegistry with a reactive Set of\n* selected IDs, disabled guards, and an `apply` bridge for useProxyModel sync.\n*\n* Think of it as a creative way to store a single value — more like\n* `defineModel` than `createSelection`. Selection-specific concepts\n* (mandatory) belong in createSelection. The `multiple` option here\n* controls whether `select()` accumulates or replaces. The `enroll` option\n* auto-selects items on register.\n*\n* Both Selection and Slider extend this layer:\n* - createRegistry → createModel → createSelection → createSingle/createGroup/createStep\n* - createRegistry → createModel → createSlider (values override)\n*\n* @example\n* ```ts\n* import { createModel } from '@vuetify/v0'\n*\n* const model = createModel({ multiple: false })\n* model.register({ value: 'apple' })\n* model.select(model.values()[0]!.id)\n* ```\n*/\n/**\n* Creates a new model instance for storing a single value.\n*\n* @param options The options for the model instance.\n* @template Z The input ticket type. Extend {@link ModelTicketInput} to add custom properties.\n* @template E The output ticket type. Automatically includes `disabled` and `isSelected`.\n* @template R The context type. Defaults to {@link ModelContext}.\n* @returns A new model instance with selection tracking and disabled guards.\n*\n* @remarks\n* Extends createRegistry with value tracking via a reactive Set of selected IDs.\n* Provides the shared model-value concept used by both Selection and Slider.\n*\n* **Enrollment**: Tickets are auto-selected on registration by default (`enroll: true`).\n* With single-value semantics, only the most recently registered ticket is active.\n* Pass `enroll: false` to opt out. `createSelection` overrides this to `false`.\n*\n* **Apply bridge**: `useProxyModel` calls `apply()` to sync a ref with the model.\n* When the active ticket's value is a ref, `apply` writes to it directly. Otherwise,\n* it resolves via `registry.browse()`.\n*\n* @see https://0.vuetifyjs.com/composables/selection/create-model\n*\n* @example\n* ```ts\n* import { shallowRef } from 'vue'\n* import { createModel, useProxyModel } from '@vuetify/v0'\n*\n* const value = shallowRef('Apple')\n* const model = createModel({ events: true })\n*\n* model.register({ id: 'fruit', value })\n* useProxyModel(model, value)\n*\n* // value and model stay in sync bidirectionally\n* ```\n*\n* @example\n* ```ts\n* // Disabled model — all selection operations are no-ops\n* const model = createModel({ disabled: true })\n* model.register({ id: 'a', value: shallowRef('Apple') })\n* model.select('a') // no-op\n* ```\n*/\nfunction createModel(_options = {}) {\n\tconst { disabled = false, enroll = true, multiple = false, ...options } = _options;\n\tconst registry = createRegistry(options);\n\tconst selectedIds = shallowReactive(/* @__PURE__ */ new Set());\n\tconst selectedItems = computed(() => new Set(/* @__PURE__ */ resolveIds(selectedIds, registry.get)));\n\tconst selectedValues = computed(() => {\n\t\tconst out = /* @__PURE__ */ new Set();\n\t\tfor (const item of selectedItems.value) out.add(toValue(item.value));\n\t\treturn out;\n\t});\n\tfunction select(id) {\n\t\tif (toValue(disabled)) return;\n\t\tconst item = registry.get(id);\n\t\tif (!item || toValue(item.disabled)) return;\n\t\tif (!toValue(multiple)) selectedIds.clear();\n\t\tselectedIds.add(id);\n\t}\n\tfunction unselect(id) {\n\t\tif (toValue(disabled)) return;\n\t\tconst item = registry.get(id);\n\t\tif (!item || toValue(item.disabled)) return;\n\t\tselectedIds.delete(id);\n\t}\n\tfunction toggle(id) {\n\t\tif (toValue(disabled)) return;\n\t\tif (selected(id)) unselect(id);\n\t\telse select(id);\n\t}\n\tfunction selected(id) {\n\t\treturn selectedIds.has(id);\n\t}\n\tfunction apply(values, _options) {\n\t\tconst value = values[0];\n\t\tlet written = false;\n\t\tfor (const id of selectedIds) {\n\t\t\tconst item = registry.get(id);\n\t\t\tif (!item || !isRef(item.value)) continue;\n\t\t\tif (!/* @__PURE__ */ isUndefined(value)) item.value.value = value;\n\t\t\twritten = true;\n\t\t}\n\t\tif (written) return;\n\t\tif (!toValue(multiple)) selectedIds.clear();\n\t\tif (/* @__PURE__ */ isUndefined(value)) return;\n\t\tconst id = registry.browse(toRaw(value))?.values().next().value;\n\t\tif (!/* @__PURE__ */ isUndefined(id)) select(id);\n\t}\n\tfunction register(registration = {}) {\n\t\tconst id = registration.id ?? /* @__PURE__ */ useId$1();\n\t\tconst item = {\n\t\t\tdisabled: false,\n\t\t\tunregister: () => unregister(id),\n\t\t\t...registration,\n\t\t\tisSelected: toRef(() => selected(id)),\n\t\t\tid\n\t\t};\n\t\tconst ticket = registry.register(item);\n\t\tif (toValue(enroll) && !toValue(disabled) && !toValue(ticket.disabled)) select(id);\n\t\treturn ticket;\n\t}\n\tfunction unregister(id) {\n\t\tselectedIds.delete(id);\n\t\tregistry.unregister(id);\n\t}\n\tfunction onboard(registrations) {\n\t\treturn registry.batch(() => registrations.map((r) => register(r)));\n\t}\n\tfunction offboard(ids) {\n\t\tfor (const id of ids) selectedIds.delete(id);\n\t\treturn registry.offboard(ids);\n\t}\n\tfunction reset() {\n\t\tselectedIds.clear();\n\t}\n\tfunction clear() {\n\t\treset();\n\t\tregistry.clear();\n\t}\n\tfunction dispose() {\n\t\treset();\n\t\tregistry.dispose();\n\t}\n\treturn {\n\t\t...registry,\n\t\tdisabled,\n\t\tselectedIds,\n\t\tselectedItems,\n\t\tselectedValues,\n\t\tregister,\n\t\tonboard,\n\t\tunregister,\n\t\toffboard,\n\t\tclear,\n\t\tdispose,\n\t\treset,\n\t\tselect,\n\t\tunselect,\n\t\ttoggle,\n\t\tselected,\n\t\tapply,\n\t\tget size() {\n\t\t\treturn registry.size;\n\t\t}\n\t};\n}\n//#endregion\n//#region src/composables/createSelection/index.ts\n/**\n* @module createSelection\n*\n* @see https://0.vuetifyjs.com/composables/selection/create-selection\n*\n* @remarks\n* Selection composable that extends createModel with multi-select,\n* mandatory enforcement, auto-enrollment, and ticket self-methods.\n*\n* Key features:\n* - Set-based selectedIds for O(1) selection checks\n* - Single or multi-select mode\n* - Mandatory selection mode (prevents deselecting last item)\n* - Auto-enrollment option (selects non-disabled items on register)\n* - `MaybeRefOrGetter` support for `mandatory`, `multiple`, and `enroll` options\n* - Disabled item filtering\n* - Computed selectedItems and selectedValues Sets\n* - Ticket self-methods: select(), unselect(), toggle()\n*\n* Extends createModel and serves as the base for createSingle, createGroup, createStep, and useFeatures.\n*\n* @example\n* ```ts\n* import { createSelection } from '@vuetify/v0'\n*\n* const selection = createSelection({ multiple: true })\n* const a = selection.register({ value: 'a' })\n* const b = selection.register({ value: 'b' })\n* selection.select([a.id, b.id])\n* ```\n*/\n/**\n* Creates a new selection instance for managing multiple selected items.\n*\n* Extends `createModel` with multi-select, mandatory enforcement,\n* auto-enrollment, and ticket self-methods.\n* Supports disabled items, mandatory selection enforcement, and auto-enrollment.\n*\n* @param options The options for the selection instance.\n* @template Z The input ticket type - what users provide to register(). Extend SelectionTicketInput to add custom properties.\n* @template E The output ticket type - what users receive from get(). Automatically includes selection methods.\n* @template R The context type. Defaults to SelectionContext.\n* @returns A new selection instance with selection management methods.\n*\n* @remarks\n* **Key Features:**\n* - Multi-selection support (unlike `createSingle` which enforces single selection)\n* - Set-based `selectedIds` tracking for efficient lookups\n* - Computed `selectedItems` and `selectedValues` for reactive access\n* - Each ticket gets `isSelected`, `select()`, `unselect()`, and `toggle()` methods\n* - Disabled items cannot be selected\n* - Mandatory mode prevents deselecting the last item\n* - Force mode auto-selects first non-disabled item on registration\n* - Enroll option auto-selects all non-disabled items on registration\n*\n* **Inheritance Chain:**\n* `createRegistry` → `createModel` → `createSelection` → `createSingle`/`createGroup` → `createStep`\n*\n* @see https://0.vuetifyjs.com/composables/selection/create-selection\n*\n* @example\n* ```ts\n* import { createSelection } from '@vuetify/v0'\n*\n* // Basic usage\n* const selection = createSelection({ mandatory: true })\n*\n* selection.onboard([\n* { id: 'item-1', value: 'Item 1' },\n* { id: 'item-2', value: 'Item 2', disabled: true },\n* { id: 'item-3', value: 'Item 3' },\n* ])\n*\n* selection.select('item-1')\n* selection.select('item-3')\n*\n* console.log(selection.selectedIds) // Set { 'item-1', 'item-3' }\n* console.log(Array.from(selection.selectedValues.value)) // ['Item 1', 'Item 3']\n* ```\n*\n* @example\n* ```ts\n* // With custom ticket type\n* interface MyTicket extends SelectionTicketInput {\n* label: string\n* icon?: string\n* }\n*\n* const tabs = createSelection()\n*\n* tabs.register({ label: 'Home', icon: 'mdi-home' })\n* tabs.register({ label: 'Settings' })\n*\n* const ticket = tabs.get('...')\n* // ticket has: label, icon, isSelected, select(), unselect(), toggle()\n* ```\n*/\nfunction createSelection(_options = {}) {\n\tconst { enroll = false, mandatory = false, multiple = false, ...options } = _options;\n\tconst model = createModel({\n\t\t...options,\n\t\tmultiple,\n\t\tenroll: false\n\t});\n\tfunction seek(direction = \"first\", from) {\n\t\treturn model.seek(direction, from, (ticket) => !toValue(ticket.disabled));\n\t}\n\tfunction mandate() {\n\t\tif (!toValue(mandatory) || model.size === 0 || model.selectedIds.size > 0) return;\n\t\tconst ticket = seek(\"first\");\n\t\tif (ticket) model.select(ticket.id);\n\t}\n\tfunction drain(id) {\n\t\tif (toValue(model.disabled)) return;\n\t\tif (toValue(mandatory) && model.selectedIds.size === 1) return;\n\t\tmodel.selectedIds.delete(id);\n\t}\n\tfunction unselect(id) {\n\t\tif (toValue(model.disabled)) return;\n\t\tconst item = model.get(id);\n\t\tif (!item || toValue(item.disabled)) return;\n\t\tdrain(id);\n\t}\n\tfunction toggle(id) {\n\t\tif (toValue(model.disabled)) return;\n\t\tif (model.selectedIds.has(id)) unselect(id);\n\t\telse model.select(id);\n\t}\n\tfunction apply(values, options) {\n\t\tconst isMultiple = options?.multiple ?? toValue(multiple);\n\t\tconst currentIds = new Set(model.selectedIds);\n\t\tconst targetIds = /* @__PURE__ */ new Set();\n\t\tif (isMultiple) {\n\t\t\tfor (const value of values) {\n\t\t\t\tconst ids = model.browse(toRaw(value));\n\t\t\t\tif (/* @__PURE__ */ isUndefined(ids)) continue;\n\t\t\t\tfor (const id of ids) {\n\t\t\t\t\tconst ticket = model.get(id);\n\t\t\t\t\tif (!ticket || toValue(ticket.disabled)) continue;\n\t\t\t\t\ttargetIds.add(id);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (toValue(mandatory) && targetIds.size === 0) return;\n\t\t\tfor (const id of currentIds) if (!targetIds.has(id)) model.selectedIds.delete(id);\n\t\t\tfor (const id of targetIds) model.selectedIds.add(id);\n\t\t} else {\n\t\t\tfor (const value of values) {\n\t\t\t\tconst ids = model.browse(toRaw(value));\n\t\t\t\tif (/* @__PURE__ */ isUndefined(ids)) continue;\n\t\t\t\tfor (const id of ids) targetIds.add(id);\n\t\t\t}\n\t\t\tconst next = targetIds.values().next().value;\n\t\t\tconst last = currentIds.values().next().value;\n\t\t\tif (!/* @__PURE__ */ isUndefined(last)) drain(last);\n\t\t\tif (!/* @__PURE__ */ isUndefined(next)) model.select(next);\n\t\t}\n\t}\n\tfunction register(registration = {}) {\n\t\tconst id = registration.id ?? /* @__PURE__ */ useId$1();\n\t\tconst decorated = {\n\t\t\tselect: () => model.select(id),\n\t\t\tunselect: () => unselect(id),\n\t\t\ttoggle: () => toggle(id),\n\t\t\t...registration,\n\t\t\tid\n\t\t};\n\t\tconst ticket = model.register(decorated);\n\t\tif (toValue(enroll) && !toValue(model.disabled) && !toValue(ticket.disabled)) model.select(ticket.id);\n\t\tif (toValue(mandatory) === \"force\") mandate();\n\t\treturn ticket;\n\t}\n\tfunction onboard(registrations) {\n\t\tconst tickets = model.batch(() => registrations.map((registration) => register(registration)));\n\t\tif (toValue(mandatory) === \"force\") mandate();\n\t\treturn tickets;\n\t}\n\treturn {\n\t\t...model,\n\t\tmultiple,\n\t\tregister,\n\t\tonboard,\n\t\tunselect,\n\t\ttoggle,\n\t\tapply,\n\t\tmandate,\n\t\tseek,\n\t\tget size() {\n\t\t\treturn model.size;\n\t\t}\n\t};\n}\n/**\n* Creates a new selection context.\n*\n* @param options The options for the selection context.\n* @template Z The input ticket type - what users provide to register().\n* @template E The output ticket type - what users receive from get().\n* @template R The context type. Defaults to SelectionContext.\n* @returns A new selection context.\n*\n* @see https://0.vuetifyjs.com/composables/selection/create-selection\n*\n* @example\n* ```ts\n* import { createSelectionContext } from '@vuetify/v0'\n*\n* // With default namespace 'v0:selection'\n* export const [useCheckboxes, provideCheckboxes, checkboxes] = createSelectionContext()\n*\n* // Or with custom namespace\n* export const [useCheckboxes, provideCheckboxes, checkboxes] = createSelectionContext({ namespace: 'checkboxes' })\n*\n* // In a parent component:\n* provideCheckboxes()\n*\n* // In a child component:\n* const checkboxes = useCheckboxes()\n* checkboxes.select('checkbox-1')\n* ```\n*\n* @example\n* ```ts\n* // With custom ticket type\n* interface TabTicket extends SelectionTicketInput {\n* label: string\n* icon?: string\n* }\n*\n* export const [useTabs, provideTabs, tabs] = createSelectionContext()\n* ```\n*/\nfunction createSelectionContext(_options = {}) {\n\tconst { namespace = \"v0:selection\", ...options } = _options;\n\tconst context = createSelection(options);\n\treturn createTrinity(namespace, context);\n}\n/**\n* Returns the current selection instance.\n*\n* @param namespace The namespace for the selection context. Defaults to `'v0:selection'`.\n* @template Z The input ticket type.\n* @template E The output ticket type.\n* @template R The context type.\n* @returns The current selection instance.\n*\n* @see https://0.vuetifyjs.com/composables/selection/create-selection\n*\n* @example\n* ```vue\n*