{"version":3,"file":"oruga.mjs","sources":["../src/utils/helpers.ts","../src/utils/programmatic.ts","../src/utils/plugins.ts","../src/utils/ssr.ts","../src/utils/config.ts","../src/utils/icons.ts","../src/composables/unrefElement.ts","../src/composables/defineClasses.ts","../src/composables/useEventListener.ts","../src/composables/useMatchMedia.ts","../src/components/field/fieldInjection.ts","../src/composables/useInputHandler.ts","../src/composables/useDebounce.ts","../src/composables/useSequentialId.ts","../src/composables/useParentProvider.ts","../src/composables/useClickOutside.ts","../src/composables/useScrollingParent.ts","../src/composables/useOptions.ts","../src/composables/usePreventScrolling.ts","../src/composables/useConfig.ts","../src/composables/useTrapFocus.ts","../src/components/icon/Icon.vue","../src/components/input/Input.vue","../src/components/dropdown/DropdownItem.vue","../src/components/utils/PositionWrapper.vue","../src/composables/useScrollHelper.ts","../src/composables/useInfiniteScroll.ts","../src/components/dropdown/Dropdown.vue","../src/components/autocomplete/Autocomplete.vue","../src/components/autocomplete/index.ts","../src/components/breadcrumb/Breadcrumb.vue","../src/components/breadcrumb/BreadcrumbItem.vue","../src/components/breadcrumb/index.ts","../src/components/button/Button.vue","../src/components/button/index.ts","../src/components/carousel/Carousel.vue","../src/components/carousel/CarouselItem.vue","../src/components/carousel/index.ts","../src/components/checkbox/Checkbox.vue","../src/components/checkbox/index.ts","../src/components/collapse/Collapse.vue","../src/components/collapse/index.ts","../src/components/select/Select.vue","../src/components/utils/PickerWrapper.vue","../src/components/datepicker/utils.ts","../src/components/datepicker/useDatepickerMixins.ts","../src/components/datepicker/DatepickerTableRow.vue","../src/components/datepicker/DatepickerTable.vue","../src/components/datepicker/DatepickerMonth.vue","../src/components/datepicker/Datepicker.vue","../src/components/datepicker/index.ts","../src/components/timepicker/useTimepickerMixins.ts","../src/components/timepicker/Timepicker.vue","../src/components/datetimepicker/useDatetimepickerMixin.ts","../src/components/datetimepicker/Datetimepicker.vue","../src/components/datetimepicker/index.ts","../src/components/dropdown/index.ts","../src/components/field/Field.vue","../src/components/field/index.ts","../src/components/icon/index.ts","../src/components/input/index.ts","../src/components/loading/Loading.vue","../src/components/programmatic/InstanceRegistry.ts","../src/components/programmatic/ProgrammaticComponent.ts","../src/components/programmatic/useProgrammatic.ts","../src/components/programmatic/index.ts","../src/components/loading/useLoadingProgrammatic.ts","../src/components/loading/index.ts","../src/components/utils/PlainButton.ts","../src/components/menu/MenuItem.vue","../src/components/menu/Menu.vue","../src/components/menu/index.ts","../src/components/modal/Modal.vue","../src/components/modal/useModalProgrammatic.ts","../src/components/modal/index.ts","../src/components/notification/Notification.vue","../src/components/notification/NotificationNotice.vue","../src/components/notification/useNotificationProgrammatic.ts","../src/components/notification/index.ts","../src/components/pagination/PaginationButton.vue","../src/components/pagination/Pagination.vue","../src/components/pagination/index.ts","../src/components/radio/Radio.vue","../src/components/radio/index.ts","../src/components/select/index.ts","../src/components/skeleton/Skeleton.vue","../src/components/skeleton/index.ts","../src/components/sidebar/Sidebar.vue","../src/components/sidebar/useSidebarProgrammatic.ts","../src/components/sidebar/index.ts","../src/components/tooltip/Tooltip.vue","../src/components/slider/SliderThumb.vue","../src/components/slider/SliderTick.vue","../src/components/slider/Slider.vue","../src/components/slider/index.ts","../src/components/steps/StepItem.vue","../src/components/steps/Steps.vue","../src/components/steps/index.ts","../src/components/switch/Switch.vue","../src/components/switch/index.ts","../src/components/utils/SlotComponent.ts","../src/components/table/TableMobileSort.vue","../src/components/table/TableColumn.vue","../src/components/table/TablePagination.vue","../src/components/table/Table.vue","../src/components/table/index.ts","../src/components/tabs/TabItem.vue","../src/components/tabs/Tabs.vue","../src/components/tabs/index.ts","../src/components/tag/Tag.vue","../src/components/tag/index.ts","../src/components/taginput/Taginput.vue","../src/components/taginput/index.ts","../src/components/timepicker/index.ts","../src/components/tooltip/index.ts","../src/components/upload/Upload.vue","../src/components/upload/index.ts","../src/index.ts"],"sourcesContent":["import { Comment, Fragment, Text } from \"vue\";\nimport type { DeepKeys, DeepType } from \"@/types\";\n\n/**\n * +/- function to native math sign\n */\nfunction signPoly(value: number): number {\n    if (value < 0) return -1;\n    return value > 0 ? 1 : 0;\n}\nexport const sign = Math.sign || signPoly;\n\n/**\n * Native modulo bug with negative numbers\n * @param n\n * @param mod\n * @returns {number}\n */\nexport const mod = (n: number, mod: number): number => ((n % mod) + mod) % mod;\n\n/** add a prefix `0` to a 1 digit number */\nexport const pad = (value: number): string => (value < 10 ? \"0\" : \"\") + value;\n\n/**\n * Asserts a value is beetween min and max\n * @param val\n * @param min\n * @param max\n * @returns {number}\n */\nexport function bound(val: number, min: number, max: number): number {\n    return Math.max(min, Math.min(max, val));\n}\n\n/**\n * checks if the value is of type object\n */\nexport const isObject = (value: unknown): value is object =>\n    !!value && typeof value === \"object\" && !Array.isArray(value);\n\n/**\n * checks if the value is of type date\n */\nexport const isDate = (value: unknown): value is Date =>\n    !!value && value instanceof Date && !isNaN(value.getTime());\n\n/**\n * checks if the value is not null or undefined\n */\nexport const isDefined = <T>(value: T | undefined | null): value is T =>\n    value !== null && typeof value !== \"undefined\";\n\n/**\n * Determines if the value of a prop that is either present (true) or not\n * present (undefined). For example, the prop disabled should disable\n * by just existing, but what if it is set to the string \"false\" — then it\n * should not be disabled.\n *\n * @param value - Value to check for undefined.\n * @returns boolean\n */\nexport const isTrueish = (value: unknown): boolean =>\n    isDefined(value) && value !== \"false\" && value !== false;\n\nexport const blankIfUndefined = (value: string | null | undefined): string =>\n    isDefined(value) ? value : \"\";\n\nexport const defaultIfUndefined = <T>(\n    value: T | undefined,\n    defaultValue: T,\n): T => (isDefined(value) ? value : defaultValue);\n\nexport const toCssDimension = (\n    width: string | number | undefined,\n    dimension: string = \"px\",\n): string | undefined =>\n    !isDefined(width)\n        ? undefined\n        : isNaN(width as number)\n          ? String(width)\n          : String(width) + dimension;\n\n/**\n * Sort an array by key without mutating original data.\n * Call the user sort function if it was passed.\n */\nexport function sortBy<T extends object>(\n    array: T[],\n    key: DeepKeys<T>,\n    fn?: (a: T, b: T, asc: boolean) => number,\n    isAsc: boolean = false,\n    mutate: boolean = false,\n): T[] {\n    // Sorting without mutating original data\n    if (fn && typeof fn === \"function\") {\n        return (mutate ? array : [...array]).sort((a, b) => fn(a, b, isAsc));\n    } else {\n        return (mutate ? array : [...array]).sort((a, b) => {\n            // Get nested values from objects\n            let newA: any = isObject(a) ? getValueByPath(a, key) : a;\n            let newB: any = isObject(b) ? getValueByPath(b, key) : b;\n\n            // sort boolean type\n            if (typeof newA === \"boolean\" && typeof newB === \"boolean\") {\n                return isAsc ? (newA > newB ? 1 : -1) : newA > newB ? -1 : 1;\n            }\n\n            if (!newA && newA !== 0) return 1;\n            if (!newB && newB !== 0) return -1;\n            if (newA === newB) return 0;\n\n            newA = typeof newA === \"string\" ? newA.toUpperCase() : newA;\n            newB = typeof newB === \"string\" ? newB.toUpperCase() : newB;\n\n            return isAsc ? (newA > newB ? 1 : -1) : newA > newB ? -1 : 1;\n        });\n    }\n}\n\n/**\n * Deeply check if two values are equal\n */\nexport function isEqual(valueA: unknown, valueB: unknown): boolean {\n    // Check if only one value is empty.\n    if ((!valueA && !!valueB) || (!!valueA && !valueB)) return false;\n\n    // If both objects are identical, return true.\n    if (valueA === valueB) return true;\n\n    // Check if both values are objecs.\n    if (isObject(valueA) && isObject(valueB)) {\n        // Get the keys of both objects.\n        const keys1 = Object.keys(valueA);\n        const keys2 = Object.keys(valueB);\n\n        // Check if the number of keys is the same.\n        if (keys1.length !== keys2.length) return false;\n\n        // Iterate through the keys and compare their values recursively.\n        for (const key of keys1) {\n            const val1 = valueA[key];\n            const val2 = valueB[key];\n            const areObjects = isObject(val1) && isObject(val2);\n            if (\n                (areObjects && !isEqual(val1, val2)) ||\n                (!areObjects && val1 !== val2)\n            )\n                return false;\n        }\n        // If all checks pass, the objects are deep equal.\n        return true;\n    }\n\n    // Check if both values are arrays.\n    if (Array.isArray(valueA) && Array.isArray(valueB)) {\n        // Check if the number of keys is the same.\n        if (valueA.length !== valueB.length) return false;\n        // Check if each value of the array is the same.\n        if (!valueA.every((val, index) => val === valueB[index])) return false;\n        // If all checks pass, the arrays are deep equal.\n        return true;\n    }\n\n    return false;\n}\n\n/**\n * @deprecated not used\n * Returns true if it is a DOM element\n * @source https://stackoverflow.com/questions/384286/how-do-you-check-if-a-javascript-object-is-a-dom-object\n */\nexport function isElement(el: any): el is Element {\n    return typeof HTMLElement === \"object\"\n        ? el instanceof HTMLElement //DOM2\n        : el &&\n              typeof el === \"object\" &&\n              el !== null &&\n              el.nodeType === 1 &&\n              typeof el.nodeName === \"string\";\n}\n\n/**\n * Merge function to replace Object.assign with deep merging possibility\n */\nexport function merge(target: any, source: any, deep = false): any {\n    if (!isObject(target) || !isObject(source)) return source;\n    if (!deep) return Object.assign(target, source);\n    else return mergeDeep(target, source);\n}\n\n/**\n * Performs a deep merge of `source` into `target`.\n * Mutates `target` only but not its objects and arrays.\n *\n * @author inspired by [jhildenbiddle](https://stackoverflow.com/a/48218209).\n */\nexport function mergeDeep(target: any, source: any): any {\n    if (!isObject(target) || !isObject(source)) return source;\n\n    Object.getOwnPropertyNames(source).forEach((key) => {\n        const targetValue = target[key];\n        const sourceValue = source[key];\n\n        if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n            target[key] = targetValue.concat(sourceValue);\n        } else if (isObject(targetValue) && isObject(sourceValue)) {\n            target[key] = mergeDeep(\n                Object.assign({}, targetValue),\n                sourceValue,\n            );\n        } else {\n            target[key] = sourceValue;\n        }\n    });\n\n    return target;\n}\n\n/**\n * Return display text for an option.\n * If option is an object, get the property from path based on given field, or else just the property.\n * Apply a formatter function to the property if given.\n * Return the display label.\n *\n * @param obj Object to get the label for\n * @param field  Property path of the object to use as display text\n * @param formatter Function to format the property to a string\n */\nexport function getPropertyValue<\n    O,\n    K extends DeepKeys<O>,\n    D extends DeepType<O, K>,\n>(obj: O, field?: K, formatter?: (value: D, option: O) => string): string {\n    if (!obj) return \"\";\n\n    const property = (field ? getValueByPath<O, K, D>(obj, field) : obj) as D;\n\n    const label =\n        typeof formatter === \"function\" ? formatter(property, obj) : property;\n\n    return String(label || \"\");\n}\n\n/**\n * Get a value of an object property/path even if it's nested\n */\nexport function getValueByPath<\n    O,\n    K extends DeepKeys<O>,\n    D extends DeepType<O, K>,\n>(obj: O, path: K | (string & {})): D | undefined;\nexport function getValueByPath<\n    O,\n    K extends DeepKeys<O>,\n    D extends DeepType<O, K>,\n>(obj: O, path: K | (string & {}), defaultValue: D): D;\nexport function getValueByPath<\n    O,\n    K extends DeepKeys<O>,\n    D extends DeepType<O, K>,\n>(obj: O, path: K | (string & {}), defaultValue?: D): D | undefined;\nexport function getValueByPath<\n    O,\n    K extends DeepKeys<O>,\n    D extends DeepType<O, K>,\n>(obj: O, path: K | (string & {}), defaultValue?: D): D | undefined {\n    if (!obj || typeof obj !== \"object\" || typeof path !== \"string\")\n        return defaultValue;\n\n    const value: any = path\n        .split(\".\")\n        .reduce((o, i) => (typeof o !== \"undefined\" ? o[i] : undefined), obj);\n\n    return typeof value !== \"undefined\" ? value : defaultValue;\n}\n\n/**\n * Set a value of an object property/path even if it's nested\n */\nexport function setValueByPath<O, K extends DeepKeys<O>>(\n    obj: O,\n    path: K,\n    value: DeepType<O, K>,\n): void {\n    if (typeof path !== \"string\") return;\n\n    const p = path.split(\".\");\n    if (p.length === 1) {\n        obj[p[0]] = value;\n        return;\n    }\n    const field = p[0];\n    if (typeof obj[field] === \"undefined\") obj[field] = {};\n    return setValueByPath(obj[field], p.slice(1).join(\".\"), value);\n}\n\nexport function removeElement(el: Element): void {\n    if (typeof el.remove !== \"undefined\") {\n        el.remove();\n    } else if (typeof el.parentNode !== \"undefined\" && el.parentNode !== null) {\n        el.parentNode.removeChild(el);\n    }\n}\n\n/**\n * Escape regex characters\n * http://stackoverflow.com/a/6969486\n */\nexport function escapeRegExpChars(value: string): string {\n    if (!value) return value;\n\n    return value.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n}\n\n/**\n * Remove accents/diacritics in a string\n * https://stackoverflow.com/a/37511463\n */\nexport function removeDiacriticsFromString(value: string): string {\n    if (!value) return value;\n    return value.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n}\n\n/** checks if a vue vnode is empty */\nexport function isVNodeEmpty(vnode): boolean {\n    if (!vnode) return true;\n    if (vnode.type === Comment) return true;\n    if (vnode.type === Text && !vnode.children.trim()) return true;\n    if (vnode.type === Fragment && isVNodeEmpty(vnode.children)) return true;\n    return false;\n}\n\n/**\n * Mobile detection\n * https://www.abeautifulsite.net/detecting-mobile-devices-with-javascript\n */\nexport const isMobileAgent = {\n    Android: (): boolean =>\n        typeof window !== \"undefined\" &&\n        !!window.navigator.userAgent.match(/Android/i),\n    BlackBerry: (): boolean =>\n        typeof window !== \"undefined\" &&\n        !!window.navigator.userAgent.match(/BlackBerry/i),\n    iOS: (): boolean =>\n        typeof window !== \"undefined\" &&\n        !!window.navigator.userAgent.match(/iPhone|iPad|iPod/i),\n    Opera: (): boolean =>\n        typeof window !== \"undefined\" &&\n        !!window.navigator.userAgent.match(/Opera Mini/i),\n    Windows: (): boolean =>\n        typeof window !== \"undefined\" &&\n        !!window.navigator.userAgent.match(/IEMobile/i),\n    any: (): boolean =>\n        isMobileAgent.Android() ||\n        isMobileAgent.BlackBerry() ||\n        isMobileAgent.iOS() ||\n        isMobileAgent.Opera() ||\n        isMobileAgent.Windows(),\n};\n","import { ref } from \"vue\";\n\nexport interface OrugaProgrammatic {\n    [key: string]: Record<string, any>;\n}\n\n/** Oruga object for programmatic components */\nconst oruga = ref<OrugaProgrammatic>({} as OrugaProgrammatic);\n\n/** Add components to the oruga object */\nexport function addProgrammatic(property: string, component: object): void {\n    oruga.value[property] = component;\n}\n\n/** Composable for internal and external usage of programmatic components*/\nexport function useOruga(): OrugaProgrammatic {\n    return oruga.value;\n}\n","import type { App, Component, Plugin, defineComponent } from \"vue\";\nimport { useOruga, addProgrammatic } from \"./programmatic\";\n\nexport let VueInstance: App | undefined;\n\n/** set the global vue instance */\nexport const setVueInstance = (Vue: App): void => {\n    VueInstance = Vue;\n};\n\n/** register a plugin to the vue app instance */\nexport const registerPlugin = (app: App, plugin: Plugin): void => {\n    app.use(plugin);\n};\n\n/** register a component to the vue app instance */\nexport const registerComponent = (\n    app: App,\n    component: ReturnType<typeof defineComponent>, // type Component isn't correct since vue 3.5 any more\n): void => {\n    app.component(component.name, component);\n};\n\n/** register a global programmatic component to the oruga object */\nexport const registerComponentProgrammatic = (\n    app: App,\n    property: string,\n    component: Component,\n): void => {\n    // set global vue instance\n    setVueInstance(app);\n    // use composable for unified access to programmatic oruga object\n    const oruga = useOruga();\n    // add component (manipulates the programmatic oruga object)\n    addProgrammatic(property, component);\n\n    // add provide and $oruga (only needed once)\n    if (!(app._context.provides && app._context.provides.oruga))\n        app.provide(\"oruga\", oruga);\n    if (!app.config.globalProperties.$oruga)\n        app.config.globalProperties.$oruga = oruga;\n};\n","// Polyfills for SSR\n\nexport const isClient = typeof window !== \"undefined\";\nexport const isSSR = typeof window === \"undefined\";\n\nexport const HTMLElement = isSSR ? Object : window.HTMLElement;\nexport const HTMLInputElement = isSSR ? Object : window.HTMLInputElement;\nexport const File = isSSR ? Object : window.File;\n","import { ref, toRaw, type App } from \"vue\";\nimport { getValueByPath, merge, setValueByPath } from \"./helpers\";\nimport { setVueInstance } from \"./plugins\";\nimport { isClient } from \"./ssr\";\nimport type { DeepKeys, DeepType, OrugaOptions } from \"@/types\";\n\ndeclare module \"../index\" {\n    interface OrugaProgrammatic {\n        config: typeof ConfigProgrammatic;\n    }\n}\n\nconst globalOptions = ref<OrugaOptions>({\n    iconPack: \"mdi\",\n    useHtml5Validation: true,\n    statusIcon: true,\n    transformClasses: undefined,\n    mobileBreakpoint: \"1023px\",\n    teleportTarget: () => (isClient ? document.body : \"body\"),\n});\n\nexport const setOptions = (options: OrugaOptions): void => {\n    globalOptions.value = options;\n};\n\nexport const getOptions = (): OrugaOptions => {\n    return Object.assign({}, toRaw(globalOptions.value));\n};\n\n/** get an option by option path with an optional default if not set */\nexport function getOption<\n    K extends DeepKeys<OrugaOptions>,\n    D extends DeepType<OrugaOptions, K>,\n>(path: K | (string & {}), defaultValue: D): D;\nexport function getOption<\n    K extends DeepKeys<OrugaOptions>,\n    D extends DeepType<OrugaOptions, K>,\n>(path: K | (string & {}), defaultValue?: D): D | undefined;\nexport function getOption<\n    K extends DeepKeys<OrugaOptions>,\n    D extends DeepType<OrugaOptions, K>,\n>(path: K | (string & {}), defaultValue?: D): D | undefined {\n    return getValueByPath<OrugaOptions, K, D>(\n        globalOptions.value,\n        path,\n        defaultValue,\n    );\n}\n\n/** less type strict version of getOption for component props defaults */\nexport const getDefault = <T>(\n    path: DeepKeys<OrugaOptions>,\n    defaultValue?: T,\n): T => {\n    return getValueByPath(globalOptions.value, path, defaultValue) as T & {};\n};\n\nexport const setOption = <K extends DeepKeys<OrugaOptions>>(\n    path: K,\n    value: DeepType<OrugaOptions, K>,\n): void => {\n    setValueByPath(globalOptions.value, path, value);\n};\n\nexport const ConfigProgrammatic = {\n    getOption,\n    getOptions,\n    setOption,\n    setOptions(options: OrugaOptions): void {\n        setOptions(merge(getOptions(), options, true));\n    },\n};\n\nexport const OrugaConfig = {\n    install(app: App, options?: OrugaOptions): void {\n        // set global vue instance\n        setVueInstance(app);\n        // set options\n        setOptions(merge(getOptions(), options, true));\n    },\n};\n","import { getOption } from \"./config\";\nimport { merge } from \"./helpers\";\n\nexport type IconConfig = {\n    sizes?: { default: string; [key: string]: string };\n    iconPrefix?: string;\n    internalIcons?: Record<string, string>;\n};\n\nconst mdiIcons = {\n    sizes: {\n        default: \"mdi-24px\",\n        small: \"\",\n        medium: \"mdi-36px\",\n        large: \"mdi-48px\",\n    },\n    iconPrefix: \"mdi-\",\n};\n\nconst faIcons = (): IconConfig => {\n    const iconComponent = getOption(\"iconComponent\");\n    const faIconPrefix = iconComponent ? \"\" : \"fa-\";\n    return {\n        sizes: {\n            default: \"\",\n            small: \"sm\",\n            medium: \"lg\",\n            large: \"xl\",\n        },\n        iconPrefix: faIconPrefix,\n        internalIcons: {\n            check: \"check\",\n            information: \"info-circle\",\n            alert: \"exclamation-triangle\",\n            \"alert-circle\": \"exclamation-circle\",\n            \"arrow-up\": \"arrow-up\",\n            \"chevron-right\": \"angle-right\",\n            \"chevron-left\": \"angle-left\",\n            \"chevron-down\": \"angle-down\",\n            \"chevron-up\": \"angle-up\",\n            eye: \"eye\",\n            \"eye-off\": \"eye-slash\",\n            \"caret-down\": \"caret-down\",\n            \"caret-up\": \"caret-up\",\n            \"close-circle\": \"times-circle\",\n            close: \"times\",\n            loading: \"circle-notch\",\n            \"emoticon-sad\": \"frown\",\n        },\n    };\n};\n\nconst getIcons = (): Record<string, IconConfig> => {\n    let icons: Record<string, IconConfig> = {\n        mdi: mdiIcons,\n        fa: faIcons(),\n        fas: faIcons(),\n        far: faIcons(),\n        fad: faIcons(),\n        fab: faIcons(),\n        fal: faIcons(),\n    };\n\n    const customIconPacks = getOption(\"customIconPacks\");\n    if (customIconPacks) icons = merge(icons, customIconPacks, true);\n\n    return icons;\n};\n\nexport default getIcons;\n","import {\n    toValue,\n    type ComponentPublicInstance,\n    type MaybeRefOrGetter,\n    type MaybeRef,\n    type Component,\n} from \"vue\";\n\nexport type MaybeElement =\n    | Element\n    | Document\n    | Window\n    | HTMLElement\n    | SVGElement\n    | Component\n    | ComponentPublicInstance\n    | undefined\n    | null;\n\nexport type UnRefElementReturn<T extends MaybeElement = MaybeElement> =\n    T extends ComponentPublicInstance\n        ? Exclude<MaybeElement, ComponentPublicInstance>\n        : T extends Component\n          ? HTMLElement\n          : T | undefined;\n\n/** Get the dom element of a ref of element or Vue component instance */\nexport function unrefElement<T extends MaybeElement>(\n    elRef: MaybeRefOrGetter<T> | MaybeRef<T>,\n): UnRefElementReturn<T> {\n    const plain = toValue(elRef);\n    return (plain as ComponentPublicInstance)?.$el ?? plain;\n}\n\n/** Resolve an HTML element based on query selector or an explizit dom element */\nexport function resolveElement(\n    target: MaybeRefOrGetter<HTMLElement | string>,\n): HTMLElement | null {\n    const targetQuery = toValue(target);\n    // query element if target is a string\n    if (typeof targetQuery === \"string\")\n        return document.querySelector<HTMLElement>(targetQuery);\n    // else unwrap element\n    else return unrefElement(targetQuery);\n}\n","import {\n    ref,\n    watch,\n    isRef,\n    toValue,\n    getCurrentInstance,\n    effectScope,\n    onScopeDispose,\n    getCurrentScope,\n    type MaybeRefOrGetter,\n    type Ref,\n    type ComponentInternalInstance,\n    type EffectScope,\n} from \"vue\";\n\nimport { getOptions } from \"@/utils/config\";\nimport { isDefined, blankIfUndefined, getValueByPath } from \"@/utils/helpers\";\n\nimport type {\n    ClassBind,\n    ComponentClass,\n    ComponentProps,\n    TransformFunction,\n} from \"@/types\";\n\n// named tuple as prop definition\ntype ComputedClass = readonly [\n    className: string,\n    defaultClass: string,\n    suffix?: MaybeRefOrGetter<string | undefined> | null,\n    apply?: MaybeRefOrGetter<boolean> | null,\n];\n\n/** Helper function to get all active classes from a class binding list */\nexport const getActiveClasses = (\n    classes: MaybeRefOrGetter<ClassBind[]>,\n): string[] => {\n    const values = toValue(classes);\n    if (!values) return [];\n    return values.flatMap((bind) =>\n        Object.keys(bind)\n            .filter((key) => key && bind[key])\n            .flatMap((v) => v.split(\" \")),\n    );\n};\n\ntype DefineClassesOptions = {\n    /**\n     * Pass a custom effect scope.\n     * By default a new effect scope is created.\n     * An error will be thrown if no current scope or a custom scope is given.\n     * @default effectScope()\n     */\n    scope?: EffectScope;\n    /**\n     * Pass a custom props object which will be watched on additionaly to the current component instance props.\n     * this will recompute the class bind property when the class property change.\n     * @default vm.proxy?.$props\n     */\n    props?: Record<string, any>;\n};\n\nexport function defineClasses(\n    ...args: [...ComputedClass[], DefineClassesOptions]\n): Ref<ClassBind[]>;\n\nexport function defineClasses(...args: [...ComputedClass[]]): Ref<ClassBind[]>;\n\n/**\n * Calculate dynamic classes based on class definitions\n */\nexport function defineClasses(\n    ...args: ComputedClass[] | [...ComputedClass[], DefineClassesOptions]\n): Ref<ClassBind[]> {\n    // extract last argument if its the option object\n    const options = Array.isArray(args.at(-1))\n        ? undefined\n        : (args.at(-1) as DefineClassesOptions);\n\n    // get class defintion list based on options are given or not\n    const classDefinitions = (\n        Array.isArray(args.at(-1)) ? args : args.slice(0, -1)\n    ) as ComputedClass[];\n\n    // getting a hold of the internal instance of the component in setup()\n    const vm = getCurrentInstance();\n    if (!vm)\n        throw new Error(\n            \"defineClasses must be called within a component setup function.\",\n        );\n    // check if there is no current active effect scope given\n    if (!getCurrentScope() && !options?.scope)\n        throw new Error(\n            \"defineClasses must be called within a current active effect scope.\",\n        );\n\n    // create an effect scope object to capture reactive effects\n    const scope = options?.scope || effectScope();\n\n    // check if there is a current active effect scope\n    if (getCurrentScope())\n        // Registers a dispose callback on the current active effect scope.\n        // The callback will be invoked when the associated effect scope is stopped.\n        onScopeDispose(() => {\n            // stop all effects when appropriate\n            if (scope) scope.stop();\n        });\n\n    // reactive classes container\n    const classes = ref<ClassBind[]>([]);\n\n    classes.value = classDefinitions.map((defintion, index) => {\n        const className = defintion[0];\n        const defaultClass = defintion[1];\n        const suffix = defintion[2];\n        const apply = defintion[3];\n\n        function getClassBind(): ClassBind {\n            // compute class based on definition parameter\n            const computedClass = computeClass(\n                vm!,\n                className,\n                defaultClass,\n                toValue(suffix) || undefined,\n            );\n\n            // if apply is not defined or true\n            const applied = !isDefined(apply) || toValue(apply);\n\n            // return class bind property\n            return { [computedClass]: applied };\n        }\n\n        // run all watcher and computed properties in an active effect scope\n        scope.run(() => {\n            // recompute the class bind property when the class property change\n            watch(\n                [\n                    () => vm.proxy?.$props[className],\n                    () => (options?.props ? options?.props[className] : null),\n                ],\n                () => {\n                    // recompute the class bind property\n                    const classBind = getClassBind();\n                    // update class binding property by class index\n                    classes.value[index] = classBind;\n                },\n            );\n\n            // if suffix is defined, watch suffix changed and recalculate class\n            if (isDefined(suffix) && isRef(suffix)) {\n                watch(suffix, (value, oldValue) => {\n                    // only recompute when value has really changed\n                    if (value === oldValue) return;\n                    // recompute the class bind property\n                    const classBind = getClassBind();\n                    // update class binding property by class index\n                    classes.value[index] = classBind;\n                });\n            }\n\n            // if apply is defined, watch apply changed and update apply state (no need of recalculation here)\n            if (isDefined(apply) && isRef(apply)) {\n                watch(apply, (applied, oldValue) => {\n                    // only change apply when value has really changed\n                    if (applied === oldValue) return;\n                    // get class binding property by class index\n                    const classBind = classes.value[index];\n                    // update the apply class binding state\n                    Object.keys(classBind).forEach(\n                        (key) => (classBind[key] = applied),\n                    );\n                    // update the class binding property by class index\n                    classes.value[index] = classBind;\n                });\n            }\n        });\n\n        // return computed class based on parameter\n        return getClassBind();\n    });\n\n    // return reactive classes\n    return classes;\n}\n\n/**\n * Compute a class by a field name\n */\nfunction computeClass(\n    vm: ComponentInternalInstance,\n    field: string,\n    defaultValue: string,\n    suffix = \"\",\n): string {\n    // get component props\n    const props = getProps(vm);\n\n    const componentKey: string = vm.proxy?.$options.configField;\n    if (!componentKey)\n        throw new Error(\"component must define the 'configField' option.\");\n\n    // get component instance override property\n    const config = props.override === true ? {} : getOptions();\n\n    // --- Classes Definition ---\n\n    // get component config class definition\n    let globalClass: ComponentClass | undefined =\n        getValueByPath(config, `${componentKey}.${field}.class`) ||\n        getValueByPath(config, `${componentKey}.${field}`);\n\n    // get instance class definition\n    let localClass: ComponentClass | undefined = getValueByPath(props, field);\n\n    // procsess local instance class\n    if (Array.isArray(localClass)) {\n        localClass = localClass.join(\" \");\n    }\n    if (typeof localClass === \"function\") {\n        const props = getProps(vm);\n        localClass = localClass(suffix, props);\n    } else {\n        localClass = suffixProcessor(localClass ?? \"\", suffix);\n    }\n\n    // process global config class\n    if (Array.isArray(globalClass)) {\n        globalClass = globalClass.join(\" \");\n    }\n    if (typeof globalClass === \"function\") {\n        const props = getProps(vm);\n        globalClass = globalClass(suffix, props);\n    } else {\n        globalClass = suffixProcessor(globalClass ?? \"\", suffix);\n    }\n\n    // process component instance default value\n    if (defaultValue.includes(\"{*}\")) {\n        defaultValue = defaultValue.replace(\n            /\\{\\*\\}/g,\n            blankIfUndefined(suffix),\n        );\n    } else {\n        defaultValue = defaultValue + blankIfUndefined(suffix);\n    }\n\n    // --- Override Definition ---\n\n    // get instance or global config override property\n    const globalOverride =\n        props.override || getValueByPath(config, \"override\", false);\n    // get component config override property\n    const localOverride = getValueByPath(\n        config,\n        `${componentKey}.override`,\n        globalOverride,\n    );\n    // get component field config override property\n    const overrideClass = getValueByPath(\n        config,\n        `${componentKey}.${field}.override`,\n        localOverride,\n    );\n\n    // --- Define Applied Classes ---\n\n    // if override is false add default value\n    // add global config classes\n    // add instance classes\n    let appliedClasses = (\n        `${!overrideClass ? defaultValue : \"\"} ` +\n        `${blankIfUndefined(globalClass)} ` +\n        `${blankIfUndefined(localClass)}`\n    )\n        .trim()\n        .replace(/\\s\\s+/g, \" \");\n\n    // --- Tranform Classes ---\n\n    // get global config tranform class\n    const globalTransformClasses: TransformFunction | undefined =\n        getValueByPath(config, \"transformClasses\");\n    // get component config tranform class\n    const localTransformClasses: TransformFunction | undefined = getValueByPath(\n        config,\n        `${componentKey}.transformClasses`,\n    );\n\n    // apply component local transformclass if available\n    if (localTransformClasses) {\n        appliedClasses = localTransformClasses(appliedClasses);\n    }\n    // else apply global transformclass if available\n    else if (globalTransformClasses) {\n        appliedClasses = globalTransformClasses(appliedClasses);\n    }\n\n    return appliedClasses;\n}\n\nfunction suffixProcessor(input: string, suffix: string): string {\n    return blankIfUndefined(input)\n        .split(\" \")\n        .filter((cls) => cls.length > 0)\n        .map((cls) => cls + blankIfUndefined(suffix))\n        .join(\" \");\n}\n\nconst getProps = (vm: ComponentInternalInstance): ComponentProps => {\n    let props = vm.proxy?.$props || {};\n\n    // get all props which ends with \"Props\", these are compressed parent props\n    // append these parent props as root level prop\n    props = Object.keys(props)\n        .filter((key) => key.endsWith(\"Props\"))\n        .map((key) => props[key])\n        .reduce((a, b) => ({ ...a, ...b }), props);\n\n    return props;\n};\n","import {\n    onMounted,\n    watch,\n    getCurrentScope,\n    onScopeDispose,\n    type MaybeRefOrGetter,\n    type Ref,\n    type Component,\n} from \"vue\";\nimport { isObject } from \"@/utils/helpers\";\nimport { unrefElement } from \"./unrefElement\";\n\nexport type EventTarget = Element | Document | Window | Component;\nexport type EventListenerOptions = AddEventListenerOptions & {\n    /** Register event listener immediate or on mounted hook. */\n    immediate?: boolean;\n    /** Trigger when the listener get registered and removed */\n    trigger?: Ref<boolean>;\n};\n\n/**\n * Register DOM events using addEventListener on mounted, and removeEventListener automatically on unmounted.\n * Adaption of {@link  https://vueuse.org/core/useEventListener}\n *\n * @param element DOM element to add the listener to\n * @param event Event name\n * @param handler Event handler function\n * @param options EventListenerOptions\n * @return stop function\n */\nexport function useEventListener(\n    element: MaybeRefOrGetter<EventTarget>,\n    event: string,\n    handler: (evt?: any) => void,\n    options?: EventListenerOptions,\n): () => void {\n    let cleanup: () => void;\n\n    const register = (): void => {\n        if (!element) return;\n\n        const target = unrefElement(element);\n        // create a clone of options, to avoid it being changed reactively on removal\n        const optionsClone = isObject(options) ? { ...options } : options;\n        // register listener with timeout to prevent animation collision\n        setTimeout(() => {\n            target.addEventListener(event, handler, optionsClone);\n            cleanup = (): void => {\n                target.removeEventListener(event, handler, optionsClone);\n            };\n        });\n    };\n\n    let stopWatch: () => void;\n\n    if (typeof options?.trigger !== \"undefined\") {\n        stopWatch = watch(\n            options.trigger,\n            (value) => {\n                // toggle listener\n                if (value) register();\n                else if (typeof cleanup === \"function\") cleanup();\n            },\n            { flush: \"post\" },\n        );\n    }\n\n    if (options?.immediate) register();\n    else if (getCurrentScope()) {\n        // register listener on mount\n        onMounted(() => {\n            if (\n                typeof options?.trigger === \"undefined\" ||\n                options.trigger.value\n            )\n                register();\n        });\n    }\n\n    const stop = (): void => {\n        // remove listener before unmounting\n        if (typeof stopWatch === \"function\") stopWatch();\n        if (typeof cleanup === \"function\") cleanup();\n    };\n\n    if (getCurrentScope()) onScopeDispose(stop);\n\n    return stop;\n}\n","import { getCurrentInstance, ref, type Ref } from \"vue\";\nimport { getOption } from \"@/utils/config\";\nimport { useEventListener } from \"./useEventListener\";\nimport { isClient } from \"@/utils/ssr\";\n\n/**\n * Checks if the match media is mobile.\n * @param mobileBreakpoint px breakpoint\n */\nexport function useMatchMedia(mobileBreakpoint?: string): {\n    isMobile: Ref<boolean>;\n} {\n    const isMobile = ref(false);\n    const mediaQuery = ref<MediaQueryList>();\n\n    // getting a hold of the internal instance in setup()\n    const vm = getCurrentInstance();\n    if (!vm)\n        throw new Error(\n            \"useMatchMedia must be called within a component setup function.\",\n        );\n    // get component props\n    const props = vm.props;\n\n    const componentKey = vm.proxy?.$options.configField;\n    if (!componentKey)\n        throw new Error(\"component must define the 'configField' option.\");\n\n    // get mobileBreakpoint width value\n    let width = props.mobileBreakpoint;\n    if (!width) {\n        const defaultWidth = getOption(`mobileBreakpoint`, mobileBreakpoint);\n        width = getOption(`${componentKey}.mobileBreakpoint`, defaultWidth);\n    }\n    if (!width) return { isMobile };\n\n    // define match media query ref\n    mediaQuery.value = isClient\n        ? window.matchMedia(`(max-width: ${width})`)\n        : undefined;\n\n    if (mediaQuery.value) {\n        isMobile.value = mediaQuery.value.matches;\n        useEventListener(mediaQuery.value, \"change\", onMatchMedia);\n    } else {\n        isMobile.value = false;\n    }\n\n    function onMatchMedia(event: any): void {\n        isMobile.value = event.matches;\n    }\n\n    return { isMobile };\n}\n","import {\n    computed,\n    inject,\n    provide,\n    type ComputedRef,\n    type InjectionKey,\n} from \"vue\";\n\nimport { getOption } from \"@/utils/config\";\nimport type { FieldProps } from \"./props\";\n\nexport type FieldData = {\n    $el: Element | null;\n    props: FieldProps;\n    hasInnerField: boolean;\n    variant?: string;\n    message?: string | string[];\n    labelId: string;\n    inputAttrs: object;\n    addInnerField: () => void;\n    setInputId: (value: string) => void;\n    setFocus: (value: boolean) => void;\n    setFilled: (value: boolean) => void;\n    setVariant: (value?: string) => void;\n    setMessage: (value?: string | string[]) => void;\n};\n\n/** provide/inject type */\ntype ProvidedField = ComputedRef<FieldData | undefined>;\n\n/** provide/inject key */\nconst $FieldKey: InjectionKey<ProvidedField> = Symbol(\"FielData\");\n\n/**\n * Provide field component data via dependency injection.\n * Provided data is a computed ref to ensure reactivity.\n */\nexport function provideField(data: ProvidedField): void {\n    provide($FieldKey, data);\n}\n\n/** Inject parent field component if used inside one. **/\nexport function injectField(): {\n    parentField: ComputedRef<FieldData | undefined>;\n    statusVariantIcon: ComputedRef<string>;\n    statusVariant: ComputedRef<string | undefined>;\n    statusMessage: ComputedRef<string | string[] | undefined>;\n} {\n    const parentField = inject(\n        $FieldKey,\n        computed(() => undefined),\n    );\n\n    /** Get the message prop from parent if it's a Field. */\n    const statusMessage = computed<string | string[] | undefined>(() => {\n        if (\n            (Array.isArray(parentField?.value?.message) &&\n                !parentField?.value?.message.length) ||\n            (!Array.isArray(parentField?.value?.message) &&\n                !parentField?.value?.message)\n        )\n            return undefined;\n        return parentField?.value.message;\n    });\n\n    /** Get the type prop from parent if it's a Field. */\n    const statusVariant = computed<string | undefined>(() => {\n        if (!parentField?.value?.variant) return undefined;\n        if (typeof parentField.value.variant === \"string\")\n            return parentField.value.variant;\n        if (Array.isArray(parentField.value.variant)) {\n            for (const key in parentField.value.variant as any) {\n                if (parentField.value.variant[key]) return key;\n            }\n        }\n        return undefined;\n    });\n\n    const statusVariantIconConfig = getOption(\"statusVariantIcon\", {\n        success: \"check\",\n        danger: \"alert-circle\",\n        info: \"information\",\n        warning: \"alert\",\n    });\n\n    /** Icon name based on the variant. */\n    const statusVariantIcon = computed<string>(() => {\n        if (!statusVariant.value || !statusVariantIconConfig) return \"\";\n        return statusVariantIconConfig[statusVariant.value] || \"\";\n    });\n\n    return {\n        parentField,\n        statusVariant,\n        statusVariantIcon,\n        statusMessage,\n    };\n}\n","import {\n    nextTick,\n    ref,\n    computed,\n    triggerRef,\n    watch,\n    watchEffect,\n    type ExtractPropTypes,\n    type MaybeRefOrGetter,\n    type Component,\n} from \"vue\";\nimport { injectField } from \"@/components/field/fieldInjection\";\nimport { unrefElement } from \"./unrefElement\";\nimport { getOption } from \"@/utils/config\";\nimport { isSSR } from \"@/utils/ssr\";\nimport { isDefined } from \"@/utils/helpers\";\n\n// This should cover all types of HTML elements that have properties related to\n// HTML constraint validation, e.g. .form and .validity.\nconst validatableFormElementTypes = isSSR\n    ? []\n    : [\n          HTMLButtonElement,\n          HTMLFieldSetElement,\n          HTMLInputElement,\n          HTMLObjectElement,\n          HTMLOutputElement,\n          HTMLSelectElement,\n          HTMLTextAreaElement,\n      ];\n\nexport type ValidatableFormElement = InstanceType<\n    (typeof validatableFormElementTypes)[number]\n>;\n\nfunction asValidatableFormElement(el: unknown): ValidatableFormElement | null {\n    return validatableFormElementTypes.some((t) => el instanceof t)\n        ? (el as ValidatableFormElement)\n        : null;\n}\n\nconst constraintValidationAttributes = [\n    \"disabled\",\n    \"required\",\n    \"pattern\",\n    \"maxlength\",\n    \"minlength\",\n    \"max\",\n    \"min\",\n    \"step\",\n];\n\n/**\n * Form input handler functionalities\n */\nexport function useInputHandler<T extends ValidatableFormElement>(\n    /** input ref element - can be a html element or a vue component*/\n    inputRef: Readonly<MaybeRefOrGetter<T | Component>>,\n    /** emitted input events */\n    emits: {\n        /** on input focus event */\n        (e: \"focus\", value: Event): void;\n        /** on input blur event */\n        (e: \"blur\", value: Event): void;\n        /** on input invalid event */\n        (e: \"invalid\", value: Event): void;\n    },\n    /** validation configuration props */\n    props: Readonly<\n        ExtractPropTypes<{\n            modelValue?: unknown;\n            useHtml5Validation?: boolean;\n            customValidity?:\n                | string\n                | ((currentValue: any, v: ValidityState) => string);\n        }>\n    >,\n) {\n    // inject parent field component if used inside one\n    const { parentField } = injectField();\n\n    /// Allows access to the native element in cases where it might be missing,\n    /// e.g. because the component hasn't been mounted yet or has been suspended\n    /// by a <KeepAlive>\n    const maybeElement = computed<T | undefined>(() => {\n        const el = unrefElement<Component | HTMLElement>(inputRef);\n        if (!el) return undefined;\n\n        if (el.getAttribute(\"data-oruga-input\"))\n            // if element is the input element\n            return el as T;\n\n        const inputs = el.querySelector(\"[data-oruga-input]\");\n\n        if (!inputs) {\n            console.warn(\n                \"useInputHandler: Underlaying Oruga input component not found\",\n            );\n            return undefined;\n        }\n        // return underlaying the input element\n        return inputs as T;\n    });\n\n    /// Should be used for most accesses to the native element; we generally\n    /// expect it to be present, especially in event handlers.\n    const element = computed(() => {\n        const el = maybeElement.value;\n        if (!el) console.warn(\"useInputHandler: inputRef contains no element\");\n        return el;\n    });\n\n    // --- Input Focus Feature ---\n\n    const isFocused = ref(false);\n\n    /** Focus the underlaying input element. */\n    function setFocus(): void {\n        nextTick(() => {\n            if (element.value) element.value.focus();\n        });\n    }\n\n    /** Click the underlaying input element. */\n    function doClick(): void {\n        nextTick(() => {\n            if (element.value) element.value.click();\n        });\n    }\n\n    /** Unset focused and emit blur event. */\n    function onBlur(event?: Event): void {\n        isFocused.value = false;\n        if (parentField?.value) parentField.value.setFocus(false);\n        emits(\"blur\", event ? event : new Event(\"blur\"));\n        checkHtml5Validity();\n    }\n\n    /** Set focused and emit focus event. */\n    function onFocus(event?: Event): void {\n        isFocused.value = true;\n        if (parentField?.value) parentField.value.setFocus(true);\n        emits(\"focus\", event ? event : new Event(\"focus\"));\n    }\n\n    // --- Validation Feature ---\n\n    const isValid = ref(true);\n\n    function setFieldValidity(variant, message): void {\n        nextTick(() => {\n            if (parentField?.value) {\n                // Set type only if not defined\n                if (!parentField.value.props.variant)\n                    parentField.value.setVariant(variant);\n\n                // Set message only if not defined\n                if (!parentField.value.props.message)\n                    parentField.value.setMessage(message);\n            }\n        });\n    }\n\n    /**\n     * Check HTML5 validation, set isValid property.\n     * If validation fail, send 'danger' type,\n     * and error message to parent if it's a Field.\n     */\n    function checkHtml5Validity(): void {\n        if (!props.useHtml5Validation) return;\n        if (!element.value) return;\n\n        if (element.value.validity.valid) {\n            setFieldValidity(null, null);\n            isValid.value = true;\n        } else {\n            setInvalid();\n            isValid.value = false;\n        }\n    }\n\n    function setInvalid(): void {\n        const variant = \"danger\";\n        const message = element.value?.validationMessage;\n        setFieldValidity(variant, message);\n    }\n\n    function onInvalid(event: Event): void {\n        checkHtml5Validity();\n        const validatable = asValidatableFormElement(event.target);\n\n        if (validatable && parentField?.value && props.useHtml5Validation) {\n            // We provide our own error message on the field, so we should suppress the browser's default tooltip.\n            // We still want to focus the form's first invalid input, though.\n            event.preventDefault();\n\n            let isFirstInvalid = false;\n\n            if (validatable.form != null) {\n                const formElements = validatable.form.elements;\n                for (let i = 0; i < formElements.length; ++i) {\n                    const element = asValidatableFormElement(\n                        formElements.item(i),\n                    );\n                    if (element?.willValidate && !element.validity.valid) {\n                        isFirstInvalid = validatable === element;\n                        break;\n                    }\n                }\n            }\n\n            if (isFirstInvalid) {\n                const fieldElement = parentField.value.$el;\n                const invalidHandler = getOption(\"invalidHandler\");\n\n                if (invalidHandler instanceof Function) {\n                    invalidHandler(validatable, fieldElement ?? undefined);\n                } else {\n                    // We'll scroll to put the whole field in view, not just the element that triggered the event,\n                    // which should mean that the message will be visible onscreen.\n                    // scrollIntoViewIfNeeded() is a non-standard method (but a very common extension).\n                    // If we can't use it, we'll just fall back to focusing the field.\n                    const canScrollToField =\n                        fieldElement?.scrollIntoView != undefined;\n                    validatable.focus({ preventScroll: canScrollToField });\n                    if (canScrollToField && fieldElement) {\n                        fieldElement.scrollIntoView({ block: \"nearest\" });\n                    }\n                }\n            }\n        }\n        emits(\"invalid\", event);\n    }\n\n    if (!isSSR) {\n        /**\n         * Provides a way to force the watcher on `updateCustomValidationMessage` to re-run\n         *\n         * There are some cases (e.g. changes to the element's validation attributes) that can\n         * force changes to the element's `validityState`, which isn't a reactive property.\n         * Note that just calling the watcher's internal function directly (outside the watcher)\n         * wouldn't be a complete solution; the watcher would then miss any new reactive dependencies\n         * that show up, e.g. because `props.customValidity` starts taking a branch that the watcher\n         * hasn't seen before.\n         */\n        const forceValidationUpdate = ref(null);\n\n        // Propagate any custom constraint validation message to the underlying DOM element.\n        // Note that using watchEffect will implicitly pick up any reactive dependencies used\n        // inside props.customValidity, which should help the computed message stay up to date.\n        watchEffect((): void => {\n            // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n            forceValidationUpdate.value;\n            if (!(props.useHtml5Validation ?? true)) return;\n\n            const element = maybeElement.value;\n            if (!isDefined(element)) return;\n\n            const validity = props.customValidity ?? \"\";\n            if (typeof validity === \"string\") {\n                element.setCustomValidity(validity);\n            } else {\n                // The custom validation message may depend on `element.validity`,\n                // which isn't a reactive property. `element.validity` depends on\n                // the element's current value and the native constraint validation\n                // attributes. We can use `props.modelValue` as a reasonable proxy\n                // for the DOM element's value, and `props.modelValue` _is_ reactive,\n                // so we can read it to help solve that reactivity problem.\n                element.setCustomValidity(\n                    validity(props.modelValue, element.validity),\n                );\n            }\n\n            // Updates the user-visible validation message if necessary\n            if (!isValid.value) checkHtml5Validity();\n        });\n\n        // Clean up validation state if we stop controlling it.\n        watch(\n            [maybeElement, (): boolean => props.useHtml5Validation ?? true],\n            (newItems, oldItems) => {\n                const newElement = newItems[0];\n                const newUseValidation = newItems[1];\n                const oldElement = oldItems[0];\n                const oldUseValidation = oldItems[1];\n                if (newElement !== oldElement) {\n                    // Since we're no longer managing the element, we might\n                    // as well clean up any custom validity we set up.\n                    oldElement?.setCustomValidity(\"\");\n                } else if (oldUseValidation && !newUseValidation) {\n                    newElement?.setCustomValidity(\"\");\n                }\n            },\n        );\n\n        // Respond to attribute changes that could affect validation messages.\n        //\n        // Technically, having the `required` attribute on one element in a radio button\n        // group affects the validity of the entire group.\n        // See https://html.spec.whatwg.org/multipage/input.html#radio-button-group.\n        // We're not checking for that here because it would require more expensive logic.\n        // Because of that, this will only work properly if the `required` attributes of all radio\n        // buttons in the group are synchronized with each other, which is likely anyway.\n        // (We're also expecting the use of radio buttons with our default validation message handling\n        // to be fairly uncommon because the overall visual experience is clunky with such a configuration.)\n        const onAttributeChange = (): void => {\n            triggerRef(forceValidationUpdate);\n        };\n\n        let validationAttributeObserver: MutationObserver | null = null;\n\n        watch(\n            [\n                maybeElement,\n                isValid,\n                (): boolean => props.useHtml5Validation ?? true,\n                ():\n                    | string\n                    | ((s: ValidityState, v: any) => string)\n                    | undefined => props.customValidity,\n            ],\n            (newData, oldData) => {\n                // Not using destructuring assignment because browser support is just a little too weak at the moment\n                const el = newData[0];\n                const valid = newData[1];\n                const useValidation = newData[2];\n                const functionalValidation = newData[3] instanceof Function;\n                const oldEl = oldData[0];\n\n                const needWatcher =\n                    isDefined(el) &&\n                    useValidation &&\n                    // For inputs known to be invalid, changes in constraint validation properties\n                    // may make it so the field is now valid and the message needs to be hidden.\n                    // For browser-implemented constraint validation (e.g. the `required` attribute),\n                    // we just care about the message displayed to the user, which is hidden for valid inputs\n                    // until the next interaction with the control.\n                    (!valid ||\n                        // For inputs with complex custom validation, any changes to validation-related attributes\n                        // may affect the results of `props.customValidity`.\n                        functionalValidation);\n\n                // Clean up previous state.\n                if (\n                    (!needWatcher || el !== oldEl) &&\n                    validationAttributeObserver != null\n                ) {\n                    // Process any pending events.\n                    if (validationAttributeObserver.takeRecords().length > 0)\n                        onAttributeChange();\n                    validationAttributeObserver.disconnect();\n                    validationAttributeObserver = null;\n                }\n\n                // Update the watcher.\n                // Note that this branch is also used for the initial setup of the watcher.\n                // We're assuming that `maybeElement` will start out null when the watcher is created, which will\n                // cause the watcher to be triggered (with `oldEl == undefined`) once the component is mounted.\n                if (\n                    needWatcher &&\n                    isDefined(el) &&\n                    (validationAttributeObserver == null || el !== oldEl)\n                ) {\n                    if (validationAttributeObserver == null) {\n                        validationAttributeObserver = new MutationObserver(\n                            onAttributeChange,\n                        );\n                    }\n                    validationAttributeObserver.observe(el, {\n                        attributeFilter: constraintValidationAttributes,\n                    });\n\n                    // Note that this doesn't react to changes in the list of ancestors.\n                    // Based on testing, Vue seems to rarely, if ever, re-parent DOM nodes;\n                    // it generally prefers to create new ones under the new parent.\n                    // That means this simpler solution is likely good enough for now.\n                    let ancestor: Node | null = el;\n                    while ((ancestor = ancestor.parentNode)) {\n                        // Form controls can be disabled by their ancestor fieldsets.\n                        if (ancestor instanceof HTMLFieldSetElement) {\n                            validationAttributeObserver.observe(ancestor, {\n                                attributeFilter: [\"disabled\"],\n                            });\n                        }\n                    }\n                }\n            },\n        );\n    }\n\n    return {\n        input: element,\n        isFocused,\n        isValid,\n        setFocus,\n        doClick,\n        onFocus,\n        onBlur,\n        onInvalid,\n        checkHtml5Validity,\n    };\n}\n","/**\n * Debounce a function\n * @param func function to debounce\n * @param wait debounce time to wait\n * @param immediate call immediate\n * @returns function to call\n */\nexport function useDebounce<A extends Array<unknown>>(\n    func: (...args: A) => void,\n    wait: number,\n    immediate?: boolean,\n): (...args: A) => void {\n    let timeout: ReturnType<typeof setTimeout> | undefined;\n    return (...args: A) => {\n        const later = (): void => {\n            timeout = undefined;\n            if (!immediate) func.apply(this, args);\n        };\n        const callNow = immediate && !timeout;\n        if (timeout) clearTimeout(timeout);\n        timeout = setTimeout(later, wait);\n        if (callNow) func.apply(this, args);\n    };\n}\n","/** create a unique id sequence */\nexport function useSequentialId(start: number = 0): {\n    nextSequence: () => string;\n    sequence: Readonly<number>;\n} {\n    let sequence = start;\n\n    /** increase the unique id sequence */\n    function nextSequence(): string {\n        return String(sequence++);\n    }\n\n    return {\n        nextSequence,\n        sequence,\n    };\n}\n","import {\n    getCurrentInstance,\n    inject,\n    onUnmounted,\n    provide,\n    ref,\n    watch,\n    type Component,\n    type ComputedRef,\n    type MaybeRefOrGetter,\n    type Ref,\n} from \"vue\";\nimport { unrefElement } from \"./unrefElement\";\nimport { useDebounce } from \"./useDebounce\";\nimport { useSequentialId } from \"./useSequentialId\";\n\nexport type ProviderItem<T = unknown> = {\n    index: number;\n    data?: T;\n    identifier: string;\n};\n\ntype PovidedData<P, I = unknown> = {\n    registerItem: (data?: I) => ProviderItem<I>;\n    unregisterItem: (item: ProviderItem) => void;\n    data?: ComputedRef<P>;\n};\n\ntype ProviderParentOptions<T = unknown> = {\n    /**\n     * Root element of the provider component\n     */\n    rootRef?: MaybeRefOrGetter<HTMLElement | Component | null | undefined>;\n    /**\n     * Override the provide/inject key.\n     * Default is the component configField attribute\n     */\n    key?: string;\n    /**\n     * Additional data provided for the child to the item\n     */\n    data?: ComputedRef<T>;\n};\n\n/**\n * Provide functionalities and data to child components\n * @param options parent provider options\n */\nexport function useProviderParent<ItemData = unknown, ParentData = unknown>(\n    options?: ProviderParentOptions<ParentData>,\n): {\n    childItems: Readonly<Ref<ProviderItem<ItemData>[]>>;\n} {\n    // getting a hold of the internal instance in setup()\n    const vm = getCurrentInstance();\n    if (!vm)\n        throw new Error(\n            \"useProviderChild must be called within a component setup function.\",\n        );\n\n    const configField = vm.proxy?.$options.configField;\n    const key = options?.key || configField;\n\n    const childItems = ref<ProviderItem<ItemData>[]>([]);\n\n    if (options?.rootRef) {\n        // debounced sort function\n        const sortHandler = useDebounce((items: typeof childItems.value) => {\n            const parent = unrefElement(options.rootRef);\n            if (!parent) return;\n\n            // create a list of child item ids\n            const ids = items\n                .map((item) => `[data-id=\"${key}-${item.identifier}\"]`)\n                .join(\",\");\n\n            // query all child items in the order of the DOM appearance\n            const children = parent.querySelectorAll(ids);\n\n            // create a list of ids ordered after the elements in DOM\n            const sortedIds = Array.from(children).map((el) =>\n                el.getAttribute(\"data-id\")?.replace(`${key}-`, \"\"),\n            );\n\n            // update the index attribute of the child items\n            items.forEach(\n                (item) =>\n                    (item.index = sortedIds.indexOf(`${item.identifier}`)),\n            );\n\n            // sort items according to their index position\n            items.sort((a, b) => a.index - b.index);\n        }, 500);\n\n        // when child items are added/removed (no deep change - only list update)\n        // sort them according to their DOM position\n        watch(childItems, sortHandler);\n    }\n\n    const { nextSequence } = useSequentialId(1);\n\n    function registerItem(data?: ItemData): ProviderItem<ItemData> {\n        const index = childItems.value.length;\n        const identifier = nextSequence();\n        const item = { index, data, identifier };\n        // add new item to the child list\n        childItems.value = [\n            ...childItems.value,\n            item,\n        ] as ProviderItem<ItemData>[];\n        return item;\n    }\n\n    function unregisterItem(item: ProviderItem): void {\n        childItems.value = childItems.value.filter((i) => i !== item);\n    }\n\n    /** Provide functionality for child components via dependency injection. */\n    provide<PovidedData<ParentData, ItemData>>(\"$o-\" + key, {\n        registerItem,\n        unregisterItem,\n        data: options?.data,\n    });\n\n    return {\n        childItems: childItems as Ref<ProviderItem<ItemData>[]>,\n    };\n}\n\ntype ProviderChildOptions<T = unknown> = {\n    /**\n     * Override the provide/inject key.\n     * Default is the component configField attribute\n     */\n    key?: string;\n    /**\n     * Does the child need the be below the parent?\n     * @default true\n     */\n    needParent?: boolean;\n    /**\n     * Additional data appended to the item\n     */\n    data?: ComputedRef<T>;\n    /**\n     * Register child on parent\n     * @default true\n     */\n    register?: boolean;\n};\n\nexport function useProviderChild<ParentData, ItemData = unknown>(\n    options: Omit<ProviderChildOptions<ItemData>, \"needParent\"> & {\n        needParent: true;\n    },\n): {\n    parent: Readonly<Ref<ParentData>>;\n    item: Readonly<Ref<ProviderItem<ItemData> | undefined>>;\n};\n\nexport function useProviderChild<ParentData, ItemData = unknown>(\n    options: Omit<ProviderChildOptions<ItemData>, \"needParent\"> & {\n        needParent: false;\n    },\n): {\n    parent: Readonly<Ref<ParentData | undefined>>;\n    item: Readonly<Ref<ProviderItem<ItemData> | undefined>>;\n};\n\nexport function useProviderChild<ParentData, ItemData = unknown>(\n    options: Omit<ProviderChildOptions<ItemData>, \"needParent\"> & {\n        register: false;\n    },\n): {\n    parent: Readonly<Ref<ParentData>>;\n    item: Readonly<Ref<undefined>>;\n};\n\nexport function useProviderChild<ParentData, ItemData = unknown>(\n    options: Omit<ProviderChildOptions<ItemData>, \"needParent\" | \"register\"> & {\n        needParent: true;\n        register: true;\n    },\n): {\n    parent: Readonly<Ref<ParentData>>;\n    item: Readonly<Ref<ProviderItem<ItemData>>>;\n};\n\nexport function useProviderChild<ParentData, ItemData = unknown>(\n    options?: Omit<ProviderChildOptions<ItemData>, \"needParent\" | \"register\">,\n): {\n    parent: Readonly<Ref<ParentData>>;\n    item: Readonly<Ref<ProviderItem<ItemData>>>;\n};\n\n/**\n * Inject functionalities and data from parent components\n * @param options additional options\n */\nexport function useProviderChild<ParentData, ItemData = unknown>(\n    options?: ProviderChildOptions<ItemData>,\n): {\n    parent: Readonly<Ref<ParentData | undefined>>;\n    item: Readonly<Ref<ProviderItem<ItemData> | undefined>>;\n} {\n    options = Object.assign({ needParent: true, register: true }, options);\n\n    // getting a hold of the internal instance in setup()\n    const vm = getCurrentInstance();\n    if (!vm)\n        throw new Error(\n            \"useProviderChild must be called within a component setup function.\",\n        );\n\n    const configField = vm.proxy?.$options.configField;\n    const key = options?.key || configField;\n\n    /** Inject parent component functionality if used inside one **/\n    const parent = inject<\n        PovidedData<ParentData, ComputedRef<ItemData>> | undefined\n    >(\"$o-\" + key, undefined);\n\n    if (options.needParent && !parent)\n        throw new Error(\n            `You should wrap ${vm.proxy?.$options.name} in a ${key} component`,\n        );\n\n    const item = ref<ProviderItem<ItemData>>();\n\n    if (parent && options.register)\n        item.value = parent.registerItem(\n            options?.data,\n        ) as ProviderItem<ItemData>;\n\n    onUnmounted(() => {\n        if (parent && item.value) parent.unregisterItem(item.value);\n    });\n\n    const data = parent?.data || ref();\n\n    return { parent: data, item: item };\n}\n","import { type MaybeRefOrGetter } from \"vue\";\nimport {\n    useEventListener,\n    type EventTarget,\n    type EventListenerOptions,\n} from \"./useEventListener\";\nimport { unrefElement } from \"./unrefElement\";\n\n/**\n * Listen for clicks outside of an element.\n * Adaption of {@link https://vueuse.org/core/onClickOutside}\n *\n * @param elements DOM elements to click outside\n * @param handler Event handler function\n * @param options ClickOutsideOptions\n * @return stop function\n */\nexport function useClickOutside(\n    elements:\n        | MaybeRefOrGetter<EventTarget>\n        | string\n        | (MaybeRefOrGetter<EventTarget> | string)[],\n    handler: (evt: PointerEvent) => void,\n    options?: EventListenerOptions,\n): () => void {\n    if (!window) return () => {};\n\n    // set default options\n    const listenerOptions = Object.assign({ ignore: [] }, options);\n\n    // convert elements to ignore list\n    const ignores = Array.isArray(elements) ? elements : [elements];\n\n    /**\n     * White-listed items that not emit event when clicked.\n     * All children from ignore prop.\n     */\n    const shouldIgnore = (event: PointerEvent): boolean => {\n        return ignores.some((target) => {\n            if (typeof target === \"string\") {\n                return Array.from(\n                    window.document.querySelectorAll(target),\n                ).some(\n                    (el) =>\n                        el === event.target ||\n                        event.composedPath().includes(el),\n                );\n            } else {\n                const el = unrefElement(target);\n                return (\n                    el &&\n                    (event.target === el || event.composedPath().includes(el))\n                );\n            }\n        });\n    };\n\n    function listener(event: PointerEvent): void {\n        if (shouldIgnore(event)) return;\n        handler(event);\n    }\n\n    const stop = useEventListener(window, \"click\", listener, listenerOptions);\n\n    return stop;\n}\n","import { isDefined } from \"@/utils/helpers\";\n\n/**\n * Given an element, returns the element who scrolls it.\n */\nexport function getScrollingParent(target: HTMLElement): HTMLElement | null {\n    if (target.style.position === \"fixed\" || !target)\n        return document.documentElement;\n\n    let isScrollingParent = false;\n    let nextParent = target.parentElement;\n\n    while (!isScrollingParent && isDefined(nextParent)) {\n        if (nextParent === document.documentElement) break;\n\n        const { overflow, overflowY } = getComputedStyle(nextParent);\n        const { scrollHeight, clientHeight } = nextParent; // Both rounded by nature\n\n        isScrollingParent =\n            /(auto|scroll)/.test(`${overflow}${overflowY}`) &&\n            scrollHeight > clientHeight;\n\n        /* ...found it, this one is returned */\n        if (isScrollingParent) break;\n\n        /* ...if not check the next one */\n        nextParent = nextParent.parentElement;\n    }\n\n    return nextParent;\n}\n","import { toValue, type MaybeRefOrGetter } from \"vue\";\nimport { isEqual } from \"@/utils/helpers\";\n\n/**\n * Internal OptionsItem representation object with additional state information.\n *\n * @internal\n */\nexport type OptionsItem<V = unknown> = OptionsPropItem<V> & {\n    /** internal definiton if the element should be hidden */\n    hidden?: boolean;\n    /** internal genereated uniqe option key */\n    key?: string;\n};\n\n/**\n * Options should always be formatted as an array of objects with label and value properties.\n *\n * @public\n */\nexport type OptionsPropItem<V = unknown> = {\n    /** displayed option label */\n    label: string;\n    /** the real option value */\n    value: V;\n    /** additional attributes bound to the option element */\n    attrs?: {\n        disabled?: boolean;\n    } & Record<string, any>;\n    [index: string]: any;\n};\n\nexport type SimpleOptionsProp =\n    | (string | number)[]\n    | Omit<OptionsPropItem<never>, \"value\">[];\n\n/**\n * The types of options that can be passed to the options prop.\n *\n * @public\n */\nexport type OptionsProp<V = string | number | object> =\n    | (string | number)[]\n    | Record<string | number, string>\n    | OptionsPropItem<V>[];\n\n/**\n * Option groups should always be formatted as an array of objects with group and nested options.\n *\n * @internal\n */\nexport type OptionsGroupItem<V = unknown> = {\n    /** displayed option group label */\n    label?: string;\n    /** the real option group value */\n    value?: V;\n    /** list of options */\n    options: OptionsItem<V>[];\n    /** additional attributes bound to the options grouü element */\n    attrs?: Record<string, any>;\n    /** internal definiton if the element should be hidden */\n    hidden?: boolean;\n    /** internal genereated uniqe option key */\n    key?: string;\n};\n\n/**\n * Option groups should always be formatted as an array of objects with group and nested options.\n *\n * @public\n */\nexport type OptionsGroupPropItem<V = unknown> = {\n    /** displayed option group label */\n    label?: string;\n    /** the real option group value */\n    value?: V;\n    /** list of options */\n    options: OptionsProp<V>;\n    /** additional attributes bound to the options grouü element */\n    attrs?: Record<string, any>;\n};\n\n/**\n * An array of option items with a group support — where the `option` of the\n * groups can be any valid OptionsProp type.\n *\n * @public\n */\nexport type OptionsGroupProp<V = string | number | object> =\n    OptionsGroupPropItem<V>[];\n\n/**\n * The types of options that can be passed to the options prop.\n * An array of option items with a group support — where the `option` of the\n * groups can be any valid OptionsProp type.\n *\n * @public\n */\nexport type OptionsPropWithGroups<V = unknown> =\n    | OptionsProp<V>\n    | OptionsGroupProp<V>;\n\n/** Normalized external options prop for internal usage */\ntype NormalizedOptions<\n    V,\n    O extends OptionsPropWithGroups<V> | SimpleOptionsProp | undefined,\n> =\n    O extends OptionsGroupProp<V>\n        ? OptionsGroupItem<V>[]\n        : O extends OptionsProp<V>\n          ? OptionsItem<V>[]\n          : O extends SimpleOptionsProp\n            ? OptionsItem<never>[]\n            : never[];\n\n/**\n * A function to normalize an array of objects, array of strings, or object of\n * key-values to use an array of objects with value and label properties.\n *\n * @param options - An un-normalized {@link OptionsPropWithGroups}.\n *\n * @returns A list of {@link OptionsItem} | {@link OptionsGroupItem}.\n */\nexport function normalizeOptions<\n    V,\n    O extends\n        | SimpleOptionsProp\n        | OptionsPropWithGroups<V> = OptionsPropWithGroups<V>,\n>(options: O | undefined, uuid: () => string): NormalizedOptions<V, O> {\n    if (!options) return [] as NormalizedOptions<V, O>;\n\n    if (Array.isArray(options))\n        return options.map(\n            (option: O[number]): OptionsItem | OptionsGroupItem => {\n                if (typeof option === \"string\" || typeof option === \"number\")\n                    // create options item from primitive\n                    return {\n                        label: String(option),\n                        value: String(option),\n                        key: uuid(),\n                    } as OptionsItem<V>;\n\n                if (typeof option == \"object\") {\n                    if (\"options\" in option) {\n                        // process group options\n                        const options = normalizeOptions(option.options, uuid);\n                        // create options group item\n                        return {\n                            ...option,\n                            options,\n                            key: uuid(),\n                        } as OptionsGroupItem<V>;\n                    } else if (\"value\" in option) {\n                        // create options item\n                        return {\n                            ...option,\n                            key: uuid(),\n                        } as OptionsItem<V>;\n                    }\n                }\n                return option as OptionsItem<V>;\n            },\n        ) as NormalizedOptions<V, O>;\n\n    return Object.keys(options).map(\n        (value: string): OptionsItem<string> => ({\n            // create option from object key/value\n            label: options[value],\n            value,\n            key: uuid(),\n        }),\n    ) as NormalizedOptions<V, O>;\n}\n\n/**\n * A helper to determine if an option is a group or an option.\n * @param option - An option\n *\n * @returns option is OptionsGroupItem\n */\nexport function isGroupOption(\n    option: Partial<OptionsItem | OptionsGroupItem>,\n): option is OptionsGroupItem {\n    return (\n        option && typeof option === \"object\" && Array.isArray(option.options)\n    );\n}\n\nexport function toOptionsGroup<V>(\n    options: OptionsItem<V>[] | OptionsGroupItem<V>[],\n    key: string,\n): OptionsGroupItem<V>[] {\n    if (!Array.isArray(options)) return [];\n\n    const isGroup = options.some((option) => isGroupOption(option));\n\n    // if options are already a list options do nothing\n    if (isGroup) return [...options] as OptionsGroupItem<V>[];\n\n    // create a list with a single group\n    return [{ options, key }] as OptionsGroupItem<V>[];\n}\n\nexport function toOptionsList<V>(\n    options: MaybeRefOrGetter<OptionsGroupItem<V>[]>,\n): OptionsItem<V>[] {\n    if (!Array.isArray(toValue(options))) return [];\n\n    return toValue(options).reduce((list, group) => {\n        list.push(...group.options);\n        return list;\n    }, [] as OptionsItem<V>[]);\n}\n\n/**\n * Applies an filter function for a list of options {@link OptionsItem | OptionsGroupItem}.\n * Options are filtered by setting the hidden attribute.\n * The options reactivity is not triggered by this.\n * @param options - Options to filter\n * @param filter - filter function\n */\nexport function filterOptionsItems<V>(\n    options: MaybeRefOrGetter<OptionsItem<V>[] | OptionsGroupItem<V>[]>,\n    filter: (option: OptionsItem<V>, index: number) => boolean,\n): void {\n    toValue(options).forEach(\n        (option: OptionsItem<V> | OptionsGroupItem<V>, idx: number) => {\n            if (isGroupOption(option)) {\n                filterOptionsItems(option.options, filter);\n                // hide the whole group if every group options is hidden\n                option.hidden = option.options.every((option) => option.hidden);\n            } else {\n                // hide the option if filtered\n                option.hidden = filter(option, idx);\n            }\n        },\n    );\n}\n\n/**\n * Checks if no options are given or every existing options are hidden.\n * @param options - A list of {@link OptionsItem | OptionsGroupItem} to check for a given value\n *\n * @returns boolean\n */\nexport function checkOptionsEmpty(\n    options: MaybeRefOrGetter<OptionsItem[] | OptionsGroupItem[]>,\n): boolean {\n    // check if options are empty\n    if (!Array.isArray(toValue(options))) return true;\n\n    return toValue(options).every((option: OptionsItem | OptionsGroupItem) => {\n        if (isGroupOption(option))\n            // check if every options are hidden\n            return checkOptionsEmpty(option.options);\n        // check if option is hidden\n        else return !isOptionViable(option);\n    });\n}\n\n/**\n * Given an list of {@link OptionsItem | OptionsGroupItem}, find the option item with the given value.\n *\n * @param options - A list of {@link OptionsItem | OptionsGroupItem} to check for a given value\n * @param value - The value to check\n *\n * @returns {@link OptionsItem}\n */\nexport function findOption<V>(\n    options:\n        | MaybeRefOrGetter<OptionsItem<V>[]>\n        | MaybeRefOrGetter<OptionsGroupItem<V>[]>,\n    value: MaybeRefOrGetter<V>,\n): OptionsItem<V> | undefined {\n    if (!Array.isArray(toValue(options))) return undefined;\n\n    for (const option of toValue(options)) {\n        if (typeof option !== \"object\" && option) continue;\n        if (isGroupOption(option)) {\n            // option in group\n            const found = findOption(option.options, value);\n            if (found !== undefined) return found;\n        }\n        // check if option has value\n        else if (isEqual(toValue(value), option.value)) return option;\n    }\n\n    return undefined;\n}\n\n/**\n * Given an options list, find the first value.\n * @param options - An options list (with groups)\n */\nexport function firstViableOption<V>(\n    options:\n        | MaybeRefOrGetter<OptionsItem<V>[]>\n        | MaybeRefOrGetter<OptionsGroupItem<V>[]>,\n): OptionsItem<V> | undefined {\n    if (!Array.isArray(toValue(options))) return undefined;\n\n    for (const option of toValue(options)) {\n        if (typeof option !== \"object\" && option) continue;\n        if (isGroupOption(option)) {\n            // option in group\n            const found = firstViableOption(option.options);\n            if (found !== undefined) return found;\n        }\n        // check if option is viable\n        else if (isOptionViable(option)) return option;\n    }\n\n    return undefined;\n}\n\nexport function isOptionViable(option: MaybeRefOrGetter<OptionsItem>): boolean {\n    return !toValue(option).hidden && !toValue(option).attrs?.disabled;\n}\n","import {\n    computed,\n    onBeforeUnmount,\n    ref,\n    toValue,\n    type MaybeRefOrGetter,\n} from \"vue\";\n\nimport { isClient } from \"@/utils/ssr\";\nimport { defineClasses, getActiveClasses } from \"./defineClasses\";\n\n/**\n * Prevent the background from scrolling if toggled.\n * Adds `clipped` or `keeped` class to the body.\n * True, alias `clip` removes the body scrollbar.\n * False, alias `keep` makes a non scrollable scrollbar to avoid shifting background, but will set body to position fixed, might break some layouts.\n * @param clipScroll clip scrollbar or not\n */\nexport function usePreventScrolling(\n    clipScroll: MaybeRefOrGetter<boolean>,\n): (active: boolean) => void {\n    const scrollClipClasses = defineClasses([\n        \"scrollClipClass\",\n        \"o-scroll-clip\",\n    ]);\n    const scrollKeepClasses = defineClasses([\n        \"scrollKeepClass\",\n        \"o-scroll-keep\",\n    ]);\n\n    const scrollClass = computed(() =>\n        getActiveClasses(\n            toValue(clipScroll)\n                ? scrollClipClasses.value\n                : scrollKeepClasses.value,\n        ),\n    );\n\n    const savedScrollTop = ref<number>();\n\n    // reset scroll\n    onBeforeUnmount(() => toggleScroll(false));\n\n    function toggleScroll(active: boolean): void {\n        if (!isClient) return;\n        if (!scrollClass.value) return;\n\n        savedScrollTop.value = savedScrollTop.value\n            ? savedScrollTop.value\n            : document.documentElement.scrollTop;\n\n        if (active) document.body.classList.add(...scrollClass.value);\n        else document.body.classList.remove(...scrollClass.value);\n\n        if (!toValue(clipScroll)) {\n            if (active) {\n                document.body.style.top = `-${savedScrollTop.value}px`;\n            } else {\n                document.documentElement.scrollTop = savedScrollTop.value;\n                document.body.style.top = \"\";\n                savedScrollTop.value = undefined;\n            }\n        }\n    }\n\n    return toggleScroll;\n}\n","import { toValue } from \"vue\";\nimport { getOption } from \"@/utils/config\";\n\n/** get the root config `teleportTarget` */\nexport function useTeleportDefault(): HTMLElement | string {\n    const option = getOption(\"teleportTarget\", \"body\");\n    return toValue(option) as HTMLElement | string;\n}\n","/*****************************\n * vue v-trap-focus directive\n *****************************/\n\nimport type { DirectiveHook, ObjectDirective } from \"vue\";\n\nfunction findFocusable(element: HTMLElement): NodeListOf<HTMLElement> | null {\n    if (!element) return null;\n    return element.querySelectorAll(`a[href]:not([tabindex=\"-1\"]),\n                                 area[href],\n                                 input:not([disabled]):not([type=\"hidden\"]),\n                                 select:not([disabled]),\n                                 textarea:not([disabled]),\n                                 button:not([disabled]),\n                                 iframe,\n                                 object,\n                                 embed,\n                                 *[tabindex]:not([tabindex=\"-1\"]):not([disabled]),\n                                 *[contenteditable]`);\n}\n\nexport function useTrapFocus(): {\n    /** vue directive - trap focus on the current element */\n    vTrapFocus: ObjectDirective<HTMLElement>;\n} {\n    /** keydown event, which compares event target with trap element */\n    let onKeyDown: ((event: KeyboardEvent) => void) | null = null;\n\n    function applyHandler(el: HTMLElement, value: boolean): void {\n        if (value) {\n            // move focus inside the root element\n            el.focus({ preventScroll: true });\n\n            // set keydown event listener\n            if (typeof onKeyDown === \"function\")\n                el.addEventListener(\"keydown\", onKeyDown);\n        } else {\n            // remove keydown event listener\n            if (typeof onKeyDown === \"function\")\n                el.removeEventListener(\"keydown\", onKeyDown);\n        }\n    }\n\n    const onMounted: DirectiveHook<HTMLElement> = (el, { value }) => {\n        // create onKeyDown event listener\n        onKeyDown = (event: KeyboardEvent): void => {\n            const target = event.target as HTMLElement;\n            if (!target) return;\n\n            // Need to get focusable each time since it can change between key events\n            // ex. changing month in a datepicker\n            const focusable = findFocusable(el);\n            if (!focusable?.length) {\n                event.preventDefault();\n                return;\n            }\n\n            const firstFocusable = focusable[0];\n            const lastFocusable = focusable[focusable.length - 1];\n\n            if (\n                target === firstFocusable &&\n                event.shiftKey &&\n                event.key === \"Tab\"\n            ) {\n                // prevent moving focus outside by setting the focus to last focusable element\n                event.preventDefault();\n                lastFocusable.focus();\n            } else if (\n                target === lastFocusable &&\n                !event.shiftKey &&\n                event.key === \"Tab\"\n            ) {\n                // prevent moving focus outside by setting the focus to first focusable element\n                event.preventDefault();\n                firstFocusable.focus();\n            }\n        };\n\n        // apply handler when binding value is already true\n        if (value) applyHandler(el, value);\n    };\n\n    /** cleanup on beforeUnmount */\n    const onBeforeUnmount: DirectiveHook<HTMLElement> = (el) => {\n        // remove handler\n        applyHandler(el, false);\n        onKeyDown = null;\n    };\n\n    const onUpdate: DirectiveHook<HTMLElement> = (el, { value, oldValue }) => {\n        // check if binding value has changed\n        if (value !== oldValue)\n            // update handler based on binding value\n            applyHandler(el, value);\n    };\n\n    return {\n        vTrapFocus: {\n            mounted: onMounted,\n            beforeUnmount: onBeforeUnmount,\n            updated: onUpdate,\n        },\n    };\n}\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport { getDefault, getOption } from \"@/utils/config\";\nimport getIcons from \"@/utils/icons\";\nimport { defineClasses } from \"@/composables\";\n\nimport type { IconProps } from \"./props\";\n\n/**\n * Icons take an important role of any application.\n * @displayName Icon\n * @style _icon.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OIcon\",\n    configField: \"icon\",\n});\n\nconst props = withDefaults(defineProps<IconProps>(), {\n    override: undefined,\n    icon: undefined,\n    component: () => getDefault(\"iconComponent\"),\n    pack: () => getDefault(\"iconPack\", \"mdi\"),\n    variant: () => getDefault(\"icon.variant\"),\n    size: () => getDefault(\"icon.size\"),\n    customSize: undefined,\n    customClass: undefined,\n    clickable: false,\n    spin: false,\n    rotation: undefined,\n});\n\nconst emits = defineEmits<{\n    /**\n     * on item click event\n     * @param event {event} native event\n     */\n    click: [event: Event];\n}>();\n\nconst environment = getOption(\"environment\");\n\nconst rootStyle = computed(() => {\n    const style = {};\n    if (props.rotation) style[\"transform\"] = `rotate(${props.rotation}deg)`;\n    return style;\n});\n\nconst icons = getIcons();\n\nconst iconConfig = computed(() => icons[props.pack]);\n\nconst iconPrefix = computed(() => iconConfig.value?.iconPrefix ?? \"\");\n\nconst customSizeByPack = computed(() => {\n    if (iconConfig.value?.sizes) {\n        if (props.size && iconConfig.value.sizes[props.size] !== undefined)\n            return iconConfig.value.sizes[props.size];\n        else if (iconConfig.value.sizes.default)\n            return iconConfig.value.sizes.default;\n    }\n    return null;\n});\n\nconst computedSize = computed(() => props.customSize || customSizeByPack.value);\n\n/**\n * Internal icon name based on the pack.\n * If pack is 'fa', gets the equivalent FA icon name of the MDI,\n * internal icons are always MDI.\n */\nconst computedIcon = computed(\n    () => `${iconPrefix.value}${getEquivalentIconOf(props.icon ?? \"\")}`,\n);\n\n/** Equivalent icon name of the MDI. */\nfunction getEquivalentIconOf(value: string): string {\n    // Only transform the class if the env is docs prop is set to true\n    if (environment != \"docs\") return value;\n    if (\n        iconConfig.value?.internalIcons &&\n        iconConfig.value?.internalIcons[value]\n    )\n        return iconConfig.value.internalIcons[value];\n    return value;\n}\n\nfunction onClick(event: Event): void {\n    if (!props.clickable) return;\n    event.preventDefault();\n    emits(\"click\", event);\n}\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-icon\"],\n    [\n        \"clickableClass\",\n        \"o-icon--clickable\",\n        null,\n        computed(() => props.clickable),\n    ],\n    [\"spinClass\", \"o-icon--spin\", null, computed(() => props.spin)],\n    [\n        \"sizeClass\",\n        \"o-icon--\",\n        computed(() => props.size),\n        computed(() => !!props.size),\n    ],\n    [\n        \"variantClass\",\n        \"o-icon--\",\n        computed(() => props.variant),\n        computed(() => !!props.variant),\n    ],\n);\n</script>\n\n<template>\n    <span\n        data-oruga=\"icon\"\n        :class=\"rootClasses\"\n        :style=\"rootStyle\"\n        :tabindex=\"clickable ? 0 : undefined\"\n        :role=\"clickable ? 'button' : undefined\"\n        @click=\"onClick\"\n        @keydown.enter=\"onClick\"\n        @keydown.space=\"onClick\">\n        <!-- custom icon component -->\n        <component\n            :is=\"component\"\n            v-if=\"component\"\n            :icon=\"[pack, computedIcon]\"\n            :size=\"computedSize\"\n            :class=\"[customClass]\" />\n\n        <!-- native css icon -->\n        <i v-else :class=\"[pack, computedIcon, computedSize, customClass]\" />\n    </span>\n</template>\n","<script setup lang=\"ts\" generic=\"IsNumber extends boolean = false\">\nimport {\n    ref,\n    computed,\n    nextTick,\n    watch,\n    onMounted,\n    useAttrs,\n    useId,\n    useTemplateRef,\n    type StyleValue,\n} from \"vue\";\n\nimport OIcon from \"../icon/Icon.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { isDefined, isTrueish } from \"@/utils/helpers\";\nimport { defineClasses, useDebounce, useInputHandler } from \"@/composables\";\n\nimport { injectField } from \"../field/fieldInjection\";\n\nimport type { InputProps } from \"./props\";\n\n/**\n * Get user Input. Use with Field to access all functionalities.\n * @displayName Input\n * @style _input.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OInput\",\n    configField: \"input\",\n    inheritAttrs: false,\n});\n\ntype ModelValue = InputProps<IsNumber>[\"modelValue\"];\n\nconst props = withDefaults(defineProps<InputProps<IsNumber>>(), {\n    override: undefined,\n    modelValue: undefined,\n    // number: false,\n    type: \"text\",\n    size: () => getDefault(\"input.size\"),\n    variant: () => getDefault(\"input.variant\"),\n    placeholder: undefined,\n    expanded: () => getDefault(\"input.expanded\", false),\n    rounded: false,\n    disabled: false,\n    passwordReveal: false,\n    maxlength: undefined,\n    counter: () => getDefault(\"input.counter\", false),\n    autosize: false,\n    iconPack: () => getDefault(\"input.iconPack\"),\n    icon: () => getDefault(\"input.icon\"),\n    iconClickable: false,\n    iconRight: () => getDefault(\"input.iconRight\"),\n    iconRightClickable: false,\n    iconRightVariant: undefined,\n    clearable: () => getDefault(\"input.clearable\", false),\n    clearIcon: () => getDefault(\"input.clearIcon\", \"close-circle\"),\n    statusIcon: () => getDefault(\"statusIcon\", true),\n    debounce: () => getDefault(\"autocomplete.debounce\", 400),\n    autocomplete: () => getDefault(\"input.autocomplete\", \"off\"),\n    id: () => useId(),\n    useHtml5Validation: () => getDefault(\"useHtml5Validation\", true),\n    customValidity: \"\",\n});\n\nconst emits = defineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {string | number} updated modelValue prop\n     */\n    \"update:model-value\": [value: ModelValue];\n    /**\n     * on input change event\n     * @param value {string} input value\n     * @param event {Event} native event\n     */\n    input: [value: string, event: Event];\n    /**\n     * on input focus event\n     * @param event {Event} native event\n     */\n    focus: [event: Event];\n    /**\n     * on input blur event\n     * @param event {Event} native event\n     */\n    blur: [event: Event];\n    /**\n     * on input invalid event\n     * @param event {Event} native event\n     */\n    invalid: [event: Event];\n    /**\n     * on icon click event\n     * @param event {Event} native event\n     */\n    \"icon-click\": [event: Event];\n    /**\n     * on icon right click event\n     * @param event {Event} native event\n     */\n    \"icon-right-click\": [event: Event];\n}>();\n\n// --- Validation Feature ---\n\nconst inputRef = useTemplateRef<HTMLInputElement>(\"inputElement\");\n\n// use form input functionalities\nconst {\n    checkHtml5Validity,\n    onBlur,\n    onFocus,\n    onInvalid,\n    setFocus,\n    isValid,\n    isFocused,\n} = useInputHandler(inputRef, emits, props);\n\n// inject parent field component if used inside one\nconst { parentField, statusVariant, statusVariantIcon } = injectField();\n\nconst vmodel = defineModel<ModelValue, string, string, ModelValue>({\n    // cast incomming value to string\n    get: (value) => (isDefined(value) ? String(value) : \"\"),\n    // cast outgoing value to number if prop number is true\n    set: (value) =>\n        !isDefined(value)\n            ? value\n            : isTrueish(props.number)\n              ? Number(value)\n              : String(value),\n    default: undefined,\n});\n\n// if `id` is given set as `for` property on o-field wrapper\nif (props.id) parentField?.value?.setInputId(props.id);\n\n/** Get value length */\nconst valueLength = computed(() =>\n    typeof vmodel.value === \"string\" || typeof vmodel.value === \"number\"\n        ? String(vmodel.value).length\n        : 0,\n);\n\nonMounted(() => {\n    /**\n     * When v-model is changed:\n     *  1. Set parent field filled state.\n     *  2. Resize textarea input\n     *  3. Check html5 valdiation\n     */\n    watch(\n        () => vmodel.value,\n        (value) => {\n            if (parentField?.value) parentField.value.setFilled(!!value);\n            if (props.autosize) resize();\n            if (!isValid.value) checkHtml5Validity();\n        },\n        { immediate: true, flush: \"post\" },\n    );\n});\n\nconst height = ref(\"auto\");\n\nfunction resize(): void {\n    height.value = \"auto\";\n    nextTick(() => {\n        if (props.type !== \"textarea\" || !inputRef.value) return;\n        const scrollHeight = inputRef.value.scrollHeight;\n        height.value = scrollHeight + \"px\";\n    });\n}\n\n/** Computed inline styles for autoresize */\nconst computedStyles = computed<StyleValue>(() =>\n    props.type === \"textarea\" && props.autosize\n        ? {\n              resize: \"none\",\n              height: height.value,\n              overflow: \"hidden\",\n          }\n        : {},\n);\n\nlet debouncedInput: ReturnType<typeof useDebounce<Parameters<typeof onInput>>>;\n\nwatch(\n    () => props.debounce,\n    (debounce) => (debouncedInput = useDebounce(onInput, debounce || 0)),\n    { immediate: true },\n);\n\nfunction onInput(event: Event): void {\n    emits(\"input\", vmodel.value, event);\n}\n\nconst placeholderVisible = computed(\n    () => !isDefined(vmodel.value) || vmodel.value === \"\",\n);\n\n// --- Icon Feature ---\n\nconst hasIconRight = computed(() => {\n    return !!(\n        props.passwordReveal ||\n        (props.statusIcon && statusVariantIcon.value) ||\n        (props.clearable && vmodel.value && props.clearIcon) ||\n        props.iconRight\n    );\n});\n\nconst computedIconRight = computed(() => {\n    if (props.passwordReveal) return passwordVisibleIcon.value;\n    else if (props.clearable && vmodel.value && props.clearIcon)\n        return props.clearIcon;\n    else if (props.iconRight) return props.iconRight;\n    return statusVariantIcon.value;\n});\n\nconst computedIconRightVariant = computed(() =>\n    props.passwordReveal || props.iconRight\n        ? props.iconRightVariant || props.variant\n        : statusVariant.value,\n);\n\nfunction iconClick(event: Event): void {\n    emits(\"icon-click\", event);\n    nextTick(() => setFocus());\n}\n\nfunction rightIconClick(event: Event): void {\n    if (props.passwordReveal) togglePasswordVisibility();\n    else if (props.clearable)\n        vmodel.value = (isTrueish(props.number) ? 0 : \"\") as ModelValue;\n    if (props.iconRightClickable) {\n        emits(\"icon-right-click\", event);\n        nextTick(() => setFocus());\n    }\n}\n\n// --- Password Visability Feature ---\n\nconst isPasswordVisible = ref(false);\n\nconst inputType = computed(() => {\n    if (props.passwordReveal)\n        return isPasswordVisible.value ? \"text\" : \"password\";\n    else return props.type;\n});\n\n/** Current password-reveal icon name. */\nconst passwordVisibleIcon = computed(() =>\n    !isPasswordVisible.value ? \"eye\" : \"eye-off\",\n);\n\n/**\n * Toggle the visibility of a password-reveal input\n * by changing the type and focus the input right away.\n */\nfunction togglePasswordVisibility(): void {\n    isPasswordVisible.value = !isPasswordVisible.value;\n    nextTick(() => setFocus());\n}\n\n// --- Computed Component Classes ---\n\nconst attrs = useAttrs();\n\nconst inputBind = computed(() => ({\n    ...parentField?.value?.inputAttrs,\n    ...attrs,\n}));\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-input\"],\n    [\n        \"sizeClass\",\n        \"o-input--\",\n        computed(() => props.size),\n        computed(() => !!props.size),\n    ],\n    [\n        \"variantClass\",\n        \"o-input--\",\n        computed(() => statusVariant.value || props.variant),\n        computed(() => !!statusVariant.value || !!props.variant),\n    ],\n    [\n        \"expandedClass\",\n        \"o-input--expanded\",\n        null,\n        computed(() => props.expanded),\n    ],\n    [\n        \"disabledClass\",\n        \"o-input--disabled\",\n        null,\n        computed(() => props.disabled),\n    ],\n    [\"roundedClass\", \"o-input--rounded\", null, computed(() => props.rounded)],\n    [\"hasIconRightClass\", \"o-input--icon-right\", null, hasIconRight],\n    [\n        \"textareaClass\",\n        \"o-input--textarea\",\n        null,\n        computed(() => props.type === \"textarea\"),\n    ],\n);\n\nconst inputClasses = defineClasses(\n    [\"inputClass\", \"o-input__input\"],\n    [\n        \"iconLeftSpaceClass\",\n        \"o-input__input--iconspace-left\",\n        null,\n        computed(() => !!props.icon),\n    ],\n    [\n        \"iconRightSpaceClass\",\n        \"o-input__input--iconspace-right\",\n        null,\n        hasIconRight,\n    ],\n    [\n        \"placeholderClass\",\n        \"o-input__input--placeholder\",\n        null,\n        placeholderVisible,\n    ],\n);\n\nconst iconLeftClasses = defineClasses([\"iconLeftClass\", \"o-input__icon-left\"]);\n\nconst iconRightClasses = defineClasses([\n    \"iconRightClass\",\n    \"o-input__icon-right\",\n]);\n\nconst counterClasses = defineClasses([\"counterClass\", \"o-input__counter\"]);\n\n// --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ checkHtml5Validity, focus: setFocus, value: vmodel });\n</script>\n\n<template>\n    <div data-oruga=\"input\" :class=\"rootClasses\">\n        <o-icon\n            v-if=\"icon\"\n            :class=\"iconLeftClasses\"\n            :clickable=\"iconClickable\"\n            :icon=\"icon\"\n            :pack=\"iconPack\"\n            :size=\"size\"\n            @click=\"iconClick\" />\n\n        <input\n            v-if=\"type !== 'textarea'\"\n            v-bind=\"inputBind\"\n            :id=\"id\"\n            ref=\"inputElement\"\n            v-model=\"vmodel\"\n            :type=\"inputType\"\n            :data-oruga-input=\"inputType\"\n            :class=\"inputClasses\"\n            :maxlength=\"maxlength\"\n            :autocomplete=\"autocomplete\"\n            :placeholder=\"placeholder\"\n            :disabled=\"disabled\"\n            @blur=\"onBlur\"\n            @focus=\"onFocus\"\n            @invalid=\"onInvalid\"\n            @input=\"debouncedInput\" />\n\n        <textarea\n            v-else\n            v-bind=\"inputBind\"\n            :id=\"id\"\n            ref=\"inputElement\"\n            v-model=\"vmodel\"\n            data-oruga-input=\"textarea\"\n            :class=\"inputClasses\"\n            :maxlength=\"maxlength\"\n            :style=\"computedStyles\"\n            :placeholder=\"placeholder\"\n            :disabled=\"disabled\"\n            @blur=\"onBlur\"\n            @focus=\"onFocus\"\n            @invalid=\"onInvalid\"\n            @input=\"debouncedInput\" />\n\n        <o-icon\n            v-if=\"hasIconRight\"\n            :class=\"iconRightClasses\"\n            :icon=\"computedIconRight\"\n            :pack=\"iconPack\"\n            :size=\"size\"\n            :variant=\"computedIconRightVariant\"\n            :clickable=\"passwordReveal || clearable || iconRightClickable\"\n            @click=\"rightIconClick\" />\n\n        <small\n            v-if=\"maxlength && counter && isFocused && type !== 'number'\"\n            :class=\"counterClasses\">\n            {{ valueLength }} / {{ maxlength }}\n        </small>\n    </div>\n</template>\n","<script setup lang=\"ts\" generic=\"T\">\nimport { useId, computed, useTemplateRef } from \"vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { isDefined, isEqual } from \"@/utils/helpers\";\nimport { defineClasses, useProviderChild } from \"@/composables\";\n\nimport type { DropdownComponent, DropdownItemComponent } from \"./types\";\nimport type { DropdownItemProps } from \"./props\";\n\n/**\n * An option item used by the dropdown component.\n * @displayName Dropdown Item\n */\ndefineOptions({\n    isOruga: true,\n    name: \"ODropdownItem\",\n    configField: \"dropdown\",\n});\n\nconst props = withDefaults(defineProps<DropdownItemProps<T>>(), {\n    override: undefined,\n    value: undefined,\n    label: undefined,\n    disabled: false,\n    clickable: true,\n    hidden: false,\n    tag: () => getDefault(\"dropdown.itemTag\", \"div\"),\n});\n\nconst emits = defineEmits<{\n    /**\n     * onclick event\n     * @param value {string | number | object} value prop data\n     * @param event {event} Native Event\n     */\n    click: [value: T, event: Event];\n}>();\n\nconst itemValue = props.value ?? useId();\n\nconst rootRef = useTemplateRef<Element>(\"rootElement\");\n\n// provided data is a computed ref to ensure reactivity\nconst providedData = computed<DropdownItemComponent<T>>(() => ({\n    ...props,\n    $el: rootRef.value,\n    value: itemValue,\n    selectItem,\n}));\n\n/** inject functionalities and data from the parent component */\nconst { parent, item } = useProviderChild<\n    DropdownComponent<T>,\n    DropdownItemComponent<T>\n>({ data: providedData });\n\nconst isClickable = computed(\n    () => !parent.value.disabled && !props.disabled && props.clickable,\n);\n\nconst isSelected = computed(() => {\n    if (!isDefined(parent.value.selected)) return false;\n    if (parent.value.multiple && Array.isArray(parent.value.selected))\n        return parent.value.selected.some((selected: T) =>\n            isEqual(itemValue, selected),\n        );\n    return isEqual(itemValue, parent.value.selected);\n});\n\nconst isFocused = computed(\n    () => item.value.identifier === parent.value.focsuedIdentifier,\n);\n\n/** Click listener, select the item. */\nfunction selectItem(event: Event): void {\n    if (!isClickable.value) return;\n    parent.value.selectItem(item.value, event);\n    emits(\"click\", itemValue as T, event);\n}\n\n/** Hover listener, focus the item. */\nfunction focusItem(): void {\n    parent.value.focusItem(item.value);\n}\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"itemClass\", \"o-dropdown__item\"],\n    [\n        \"itemDisabledClass\",\n        \"o-dropdown__item--disabled\",\n        null,\n        computed(() => parent.value.disabled || props.disabled),\n    ],\n    [\"itemSelectedClass\", \"o-dropdown__item--active\", null, isSelected],\n    [\"itemClickableClass\", \"o-dropdown__item--clickable\", null, isClickable],\n    [\"itemFocusedClass\", \"o-dropdown__item--focused\", null, isFocused],\n);\n</script>\n\n<template>\n    <component\n        :is=\"tag\"\n        :id=\"`${parent.menuId}-${item.identifier}`\"\n        ref=\"rootElement\"\n        data-oruga=\"dropdown-item\"\n        :data-id=\"`dropdown-${item.identifier}`\"\n        :class=\"rootClasses\"\n        :role=\"parent.selectable ? 'option' : 'menuitem'\"\n        :aria-selected=\"parent.selectable ? isSelected : undefined\"\n        :aria-disabled=\"disabled\"\n        @click=\"selectItem\"\n        @mouseenter=\"focusItem\"\n        @keydown.enter=\"selectItem\"\n        @keydown.space=\"selectItem\">\n        <!--\n            @slot Override the label, default is label prop \n        -->\n        <slot>{{ label }}</slot>\n    </component>\n</template>\n","<script setup lang=\"ts\">\nimport {\n    watch,\n    computed,\n    nextTick,\n    onBeforeUnmount,\n    ref,\n    type Component,\n    type PropType,\n} from \"vue\";\nimport { isClient } from \"@/utils/ssr\";\nimport {\n    useTeleportDefault,\n    getScrollingParent,\n    unrefElement,\n} from \"@/composables\";\n\ntype Position = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nconst opposites: Record<Position, Position> = {\n    top: \"bottom\",\n    bottom: \"top\",\n    right: \"left\",\n    left: \"right\",\n};\n\ntype Point = { x: number; y: number };\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = defineProps({\n    teleport: {\n        type: [Boolean, String, Object],\n        required: true,\n    },\n    trigger: {\n        type: Object as PropType<HTMLElement | Component>,\n        default: undefined,\n    },\n    /**\n     * Position of the component relative to the trigger\n     * @values auto, top, bottom, left, right, top-right, top-left, bottom-left, bottom-right\n     */\n    position: {\n        type: String,\n        validator: (value: string) =>\n            [\n                \"auto\",\n                \"top\",\n                \"bottom\",\n                \"left\",\n                \"right\",\n                \"top-right\",\n                \"top-left\",\n                \"bottom-left\",\n                \"bottom-right\",\n            ].includes(value),\n        required: true,\n    },\n    /** Used for calculation position auto */\n    defaultPosition: {\n        type: String as PropType<Position>,\n        validator: (value: string) =>\n            [\"top\", \"bottom\", \"left\", \"right\"].includes(value),\n        default: \"top\",\n    },\n    /** disable the position calculation */\n    disabled: { type: Boolean, default: false },\n    /** update positioning on teleport */\n    disablePositioning: { type: Boolean, default: true },\n});\n\nconst emits = defineEmits<{\n    \"update:position\": [value: string];\n}>();\n\nconst _teleport = computed(() =>\n    typeof props.teleport === \"boolean\"\n        ? { to: useTeleportDefault(), disabled: !props.teleport }\n        : { to: props.teleport, disabled: false },\n);\n\nconst contentRef = ref<HTMLElement | Component>();\n\nfunction setContent<T extends typeof contentRef.value>(el: T): typeof el {\n    contentRef.value = el;\n\n    nextTick(() => {\n        // update positioning\n        updatePositioning();\n        // add handler\n        addHandler();\n    });\n    return el;\n}\n\n// --- Dynamic Positioning Handling Feature ---\n\nconst initialPosition = props.position;\n\nconst scrollingParent = ref<HTMLElement | null>();\nlet resizeObserver: ResizeObserver | undefined;\n\nif (isClient && window.ResizeObserver) {\n    resizeObserver = new window.ResizeObserver(updatePositioning);\n}\n\n// on disable state change update event listener\nwatch(\n    () => props.disabled,\n    () => {\n        if (!props.disabled) addHandler();\n        else removeHandler();\n    },\n    { immediate: true, flush: \"post\" },\n);\n\n// update positioning if props change\nwatch(\n    [\n        () => !!props.trigger,\n        () => props.disablePositioning,\n        () => props.disabled,\n    ],\n    () => updatePositioning(),\n    { immediate: true, flush: \"post\" },\n);\n\n// remove any event listener on unmount\nonBeforeUnmount(() => removeHandler());\n\n/** add event listener */\nfunction addHandler(): void {\n    if (isClient && !scrollingParent.value && contentRef.value) {\n        // get parent container\n        scrollingParent.value = getScrollingParent(unrefElement(contentRef)!);\n        // set event listener\n        if (\n            scrollingParent.value &&\n            scrollingParent.value !== document.documentElement\n        ) {\n            scrollingParent.value.addEventListener(\n                \"scroll\",\n                updatePositioning,\n                { passive: true },\n            );\n            if (window.ResizeObserver && resizeObserver)\n                resizeObserver.observe(scrollingParent.value);\n        } else {\n            document.addEventListener(\"scroll\", updatePositioning, {\n                passive: true,\n            });\n            window.addEventListener(\"resize\", updatePositioning);\n        }\n    }\n}\n\n/** remove event listener */\nfunction removeHandler(): void {\n    if (isClient) {\n        if (window.ResizeObserver && resizeObserver)\n            resizeObserver.disconnect();\n        window.removeEventListener(\"resize\", updatePositioning);\n        document.removeEventListener(\"scroll\", updatePositioning);\n        scrollingParent.value = undefined;\n    }\n}\n\n/** Update the best position set teleport positioning */\nfunction updatePositioning(): void {\n    if (props.disabled) return;\n    let position = props.position;\n    // update position if auto position is enabled\n    if (initialPosition === \"auto\") {\n        // calculate best position\n        position = getAutoPosition();\n        if (position != props.position)\n            // two-way bind updated position\n            emits(\"update:position\", position);\n    }\n    // do not set content position if not teleport enabled\n    if (!props.teleport) return;\n\n    const content = unrefElement(contentRef);\n    const trigger = unrefElement(props.trigger);\n\n    // set content position\n    if (content && trigger) {\n        const rect = trigger.getBoundingClientRect();\n        let top = rect.top + window.scrollY;\n        let left = rect.left + window.scrollX;\n        // define vertical positioning\n        if (position.includes(\"bottom\")) {\n            top += trigger.clientHeight;\n        } else if (position.includes(\"top\")) {\n            top -= content.clientHeight;\n        }\n        // define horizontal positioning\n        if (position === \"left\") {\n            left -= content.clientWidth;\n        } else if (position === \"right\") {\n            left += trigger.clientWidth;\n        } else if (position.includes(\"-right\")) {\n            left += trigger.clientWidth - content.clientWidth;\n        }\n\n        // adjust exact vertical positioning\n        if (position === \"top\" || position === \"bottom\") {\n            left += trigger.clientWidth / 2; //- content.clientWidth / 2;\n        }\n        // adjust exact horizontal positioning\n        if (position === \"left\" || position === \"right\") {\n            top += trigger.clientHeight / 2; // - content.clientHeight / 2;\n        }\n\n        // set style properties\n        if (props.disablePositioning) {\n            content.style.position = \"relative\";\n            content.style.top = `${top}px`;\n            content.style.left = `${left}px`;\n        } else {\n            content.style.position = \"\";\n            content.style.top = \"\";\n            content.style.left = \"\";\n        }\n    }\n}\n\n/** calculate best position if auto */\nfunction getAutoPosition(): string {\n    let bestPosition = props.defaultPosition;\n    if (!props.trigger || !contentRef.value) return bestPosition;\n    if (!scrollingParent.value) return bestPosition;\n\n    // get viewport from container\n    const viewRect = new DOMRect(\n        scrollingParent.value.offsetLeft,\n        scrollingParent.value.offsetTop,\n        scrollingParent.value.clientWidth,\n        scrollingParent.value.clientHeight,\n    );\n\n    const contentRect = unrefElement(contentRef)!.getBoundingClientRect();\n    const triggerRect = unrefElement(props.trigger).getBoundingClientRect();\n\n    // detect auto position\n    const triggerAnchors = anchors(triggerRect);\n    const contentAnchors = anchors(contentRect);\n    const contentRectAtAnchor = (pos: Position) => {\n        const triggerAnchor = triggerAnchors[pos];\n        const contentAnchor = contentAnchors[opposites[pos]];\n        // Translates contentRect so contentAnchor is on top of triggerAnchor\n        // NOTE: this doesn't account for the extra offset that the tooltip arrow provides.\n        // That offset should be small, and it's tricky to get it from the CSS.\n        return new DOMRect(\n            contentRect.x + (triggerAnchor.x - contentAnchor.x),\n            contentRect.y + (triggerAnchor.y - contentAnchor.y),\n            contentRect.width,\n            contentRect.height,\n        );\n    };\n\n    const defaultOpposite = opposites[props.defaultPosition];\n    const crossPosition =\n        props.defaultPosition === \"top\" || props.defaultPosition === \"bottom\"\n            ? \"left\"\n            : \"top\";\n    const crossOpposite = opposites[crossPosition];\n    // In descending order of priority\n    const positions: Position[] = [\n        props.defaultPosition,\n        defaultOpposite,\n        crossPosition,\n        crossOpposite,\n    ];\n    let maxOverlap = 0;\n    for (const position of positions) {\n        const overlap = intersectionArea(\n            viewRect,\n            contentRectAtAnchor(position),\n        );\n        if (overlap > maxOverlap) {\n            maxOverlap = overlap;\n            bestPosition = position;\n        }\n    }\n    return bestPosition;\n}\n\n// --- Helper Functions ---\n\nfunction intersectionArea(a: DOMRect, b: DOMRect): number {\n    const left = Math.max(a.left, b.left);\n    const right = Math.min(a.right, b.right);\n    const top = Math.max(a.top, b.top);\n    const bottom = Math.min(a.bottom, b.bottom);\n    return Math.max(right - left, 0) * Math.max(bottom - top, 0);\n}\n\n/**\n * @param rect the bounding rectangle of the trigger element\n * @return the \"anchor points\" (points where the arrow attaches) for each side of the tooltip\n */\nconst anchors = (rect: DOMRect): Record<Position, Point> => ({\n    top: { x: (rect.left + rect.right) * 0.5, y: rect.top },\n    bottom: { x: (rect.left + rect.right) * 0.5, y: rect.bottom },\n    left: { x: rect.left, y: (rect.top + rect.bottom) * 0.5 },\n    right: { x: rect.right, y: (rect.top + rect.bottom) * 0.5 },\n});\n</script>\n\n<template>\n    <Teleport :to=\"_teleport.to\" :disabled=\"_teleport.disabled\">\n        <template v-if=\"_teleport.disabled\">\n            <slot :set-content=\"setContent\" />\n        </template>\n        <template v-else>\n            <div\n                v-bind=\"$attrs\"\n                :style=\"{ position: 'absolute', left: '0px', top: '0px' }\">\n                <slot :set-content=\"setContent\" />\n            </div>\n        </template>\n    </Teleport>\n</template>\n","import type { MaybeRefOrGetter } from \"vue\";\nimport { unrefElement } from \"./unrefElement\";\n\n/** check if element is visible in browser view port */\nexport function isElementInView(\n    elementRef: MaybeRefOrGetter<HTMLElement>,\n): boolean {\n    const element = unrefElement(elementRef);\n    const bounding = element.getBoundingClientRect();\n\n    return (\n        bounding.top >= 0 &&\n        bounding.left >= 0 &&\n        bounding.bottom <=\n            (window.innerHeight || document.documentElement.clientHeight) &&\n        bounding.right <=\n            (window.innerWidth || document.documentElement.clientWidth)\n    );\n}\n\n/** check if an element is currently scrollable */\nexport function isScrollable(\n    elementRef: MaybeRefOrGetter<HTMLElement>,\n): boolean {\n    const element = unrefElement(elementRef);\n    return element && element.clientHeight < element.scrollHeight;\n}\n\n/**\n * ensure a given child element is within the parent's visible scroll area\n * if the child is not visible, scroll the parent\n */\nexport function maintainScrollVisibility(\n    activeElement: MaybeRefOrGetter<HTMLElement>,\n    scrollParent: MaybeRefOrGetter<HTMLElement>,\n): void {\n    const parent = unrefElement(scrollParent);\n    const element = unrefElement(activeElement);\n\n    const { offsetHeight, offsetTop } = element;\n    const { offsetHeight: parentOffsetHeight, scrollTop } = parent;\n\n    const isAbove = offsetTop < scrollTop;\n    const isBelow = offsetTop + offsetHeight > scrollTop + parentOffsetHeight;\n\n    if (isAbove) {\n        parent.scrollTo(0, offsetTop);\n    } else if (isBelow) {\n        parent.scrollTo(0, offsetTop - parentOffsetHeight + offsetHeight);\n    }\n}\n","import { isClient } from \"@/utils/ssr\";\nimport type { MaybeRefOrGetter } from \"vue\";\nimport { useEventListener, type EventTarget } from \"./useEventListener\";\nimport { unrefElement } from \"./unrefElement\";\n\nexport function useInfiniteScroll(\n    elementRef: MaybeRefOrGetter<EventTarget>,\n    onEnd: () => void,\n    onStart: () => void,\n): { checkScroll: () => void } {\n    if (isClient) useEventListener(elementRef, \"scroll\", checkScroll);\n\n    /** Check if the scroll list inside the dropdown reached the top or it's end. */\n    function checkScroll(): void {\n        const element = unrefElement(elementRef);\n        if (!element) return;\n        const trashhold = element.offsetTop;\n        if (element.clientHeight !== element.scrollHeight) {\n            if (\n                Math.ceil(\n                    element.scrollTop + element.clientHeight + trashhold,\n                ) >= element.scrollHeight\n            ) {\n                onEnd();\n            } else if (element.scrollTop <= trashhold) {\n                onStart();\n            }\n        }\n    }\n\n    return { checkScroll };\n}\n","<script setup lang=\"ts\" generic=\"T, IsMultiple extends boolean = false\">\nimport { computed, nextTick, ref, watch, useId, type Component } from \"vue\";\n\nimport ODropdownItem from \"../dropdown/DropdownItem.vue\";\nimport PositionWrapper from \"../utils/PositionWrapper.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { toCssDimension, isMobileAgent, isTrueish, mod } from \"@/utils/helpers\";\nimport { isClient } from \"@/utils/ssr\";\nimport {\n    unrefElement,\n    defineClasses,\n    toOptionsGroup,\n    normalizeOptions,\n    useProviderParent,\n    useMatchMedia,\n    useClickOutside,\n    usePreventScrolling,\n    useSequentialId,\n    useEventListener,\n    type OptionsGroupItem,\n} from \"@/composables\";\n\nimport type {\n    DropdownChildItem,\n    DropdownComponent,\n    DropdownItemComponent,\n} from \"./types\";\nimport type { DropdownProps } from \"./props\";\nimport { injectField } from \"../field/fieldInjection\";\nimport { maintainScrollVisibility } from \"@/composables/useScrollHelper\";\nimport { useInfiniteScroll } from \"@/composables/useInfiniteScroll\";\n\n/**\n * Dropdowns are very versatile, can used as a quick menu or even like a select for discoverable content.\n * @displayName Dropdown\n * @requires ./DropdownItem.vue\n * @style _dropdown.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"ODropdown\",\n    configField: \"dropdown\",\n});\n\ntype ModelValue = DropdownProps<T, IsMultiple>[\"modelValue\"];\n\nconst props = withDefaults(defineProps<DropdownProps<T, IsMultiple>>(), {\n    override: undefined,\n    modelValue: undefined,\n    // multiple: false,\n    options: undefined,\n    active: false,\n    label: undefined,\n    disabled: false,\n    inline: false,\n    selectable: false,\n    keepOpen: () => getDefault(\"dropdown.keepOpen\", false),\n    keepFirst: () => getDefault(\"dropdown.keepFirst\", false),\n    closeOnOutside: () => getDefault(\"dropdown.closeOnOutside\", true),\n    closeOnScroll: () => getDefault(\"dropdown.closeOnScroll\", false),\n    selectOnFocus: () => getDefault(\"dropdown.selectOnFocus\", false),\n    selectOnClose: () => getDefault(\"dropdown.selectOnClose\", false),\n    expanded: false,\n    position: () => getDefault(\"dropdown.position\", \"bottom-left\"),\n    scrollable: false,\n    maxHeight: () => getDefault(\"dropdown.maxHeight\", 200),\n    checkScroll: () => getDefault(\"dropdown.checkScroll\", false),\n    menuId: () => useId(),\n    menuTag: () => getDefault(\"dropdown.menuTag\", \"div\"),\n    triggerTag: () => getDefault(\"dropdown.triggerTag\", \"div\"),\n    triggers: () => getDefault(\"dropdown.triggers\", [\"click\"]),\n    delay: undefined,\n    desktopModal: () => getDefault(\"dropdown.desktopModal\", false),\n    mobileModal: () => getDefault(\"dropdown.mobileModal\", true),\n    mobileBreakpoint: () => getDefault(\"dropdown.mobileBreakpoint\"),\n    animation: () => getDefault(\"dropdown.animation\", \"fade\"),\n    teleport: () => getDefault(\"dropdown.teleport\", false),\n    clipScroll: () => getDefault(\"dropdown.clipScroll\", false),\n});\n\nconst emits = defineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {T | T[]} updated modelValue prop\n     */\n    \"update:model-value\": [value: ModelValue];\n    /**\n     * active prop two-way binding\n     * @param value {boolean} updated active prop\n     */\n    \"update:active\": [value: boolean];\n    /**\n     * on select event - fired before update:modelValue\n     * @param value {T} selected value\n     */\n    select: [value: T];\n    /**\n     * @deprecated use update:model-value instead\n     * on change event - fired after update:modelValue\n     * @param value {T | T[]} selected value\n     */\n    change: [value: ModelValue];\n    /**\n     * on open event\n     * @param method {string} open method\n     * @param event {Event} native event\n     */\n    open: [method: string, event: Event];\n    /**\n     * on close event\n     * @param method {string} close method\n     * @param event {Event} native event\n     */\n    close: [method: string, event: Event];\n    /** the list inside the dropdown reached the start */\n    \"scroll-start\": [];\n    /** the list inside the dropdown reached it's end */\n    \"scroll-end\": [];\n}>();\n\nconst triggerRef = ref<HTMLElement>();\nconst menuRef = ref<HTMLElement | Component>();\n\n// provided data is a computed ref to ensure reactivity\nconst provideData = computed<DropdownComponent<T>>(() => ({\n    disabled: props.disabled,\n    multiple: isTrueish(props.multiple),\n    selectable: props.selectable,\n    menuId: props.menuId,\n    selected: vmodel.value,\n    focsuedIdentifier: focusedItem.value?.identifier,\n    selectItem,\n    focusItem,\n}));\n\n/** provide functionalities and data to child item components */\nconst { childItems } = useProviderParent<\n    DropdownItemComponent<T>,\n    DropdownComponent<T>\n>({\n    rootRef: menuRef,\n    data: provideData,\n});\n\n// create a unique id sequence\nconst { nextSequence } = useSequentialId();\n\n/** normalized programamtic options */\nconst groupedOptions = computed<OptionsGroupItem<T>[]>(() => {\n    const normalizedOptions = normalizeOptions<T>(props.options, nextSequence);\n    const groupedOptions = toOptionsGroup<T>(normalizedOptions, nextSequence());\n    return groupedOptions;\n});\n\n/** is any option visible */\nconst isNotEmpty = computed(() => childItems.value.some(isItemViable));\n\n// inject parent field component if used inside one\nconst { parentField } = injectField();\n\n// the selected item value, use v-model to make it two-way binding\nconst vmodel = defineModel<ModelValue>({ default: undefined });\n\n// the active state of the dropdown, use v-model:active to make it two-way binding\nconst isActive = defineModel<boolean>(\"active\", { default: false });\n\n// set field labelId or create a unique label id if a label is given\nconst labelId = props.labelledby ?? parentField.value?.labelId;\n\nconst autoPosition = ref(props.position);\n\n/** update autoPosition on prop change */\nwatch(\n    () => props.position,\n    (v) => (autoPosition.value = v),\n);\n\nconst { isMobile } = useMatchMedia(props.mobileBreakpoint);\n\n// check if client is mobile native\nconst isMobileNative = isClient && isMobileAgent.any();\n\n// check if should be shown as modal\nconst isModal = computed(\n    () =>\n        !props.inline &&\n        ((isMobile.value && props.mobileModal) ||\n            (!isMobile.value && props.desktopModal)),\n);\n\nconst menuStyle = computed(() => ({\n    maxHeight: props.scrollable ? toCssDimension(props.maxHeight) : null,\n    overflow: props.scrollable ? \"auto\" : null,\n}));\n\nconst hoverable = computed(() => props.triggers.includes(\"hover\"));\n\nconst toggleScroll = usePreventScrolling(props.clipScroll);\n\n// set infinite scroll handler\nif (isClient && props.scrollable && props.checkScroll)\n    useInfiniteScroll(\n        menuRef,\n        () => emits(\"scroll-end\"),\n        () => emits(\"scroll-start\"),\n    );\n\n// set click outside handler\nif (isClient && props.closeOnOutside)\n    useClickOutside([menuRef, triggerRef], onClickedOutside, {\n        trigger: isActive,\n        passive: true,\n    });\n\n// set scroll page event\nif (isClient && props.closeOnScroll)\n    useEventListener(window, \"scroll\", onPageScroll, { passive: true });\n\nwatch(\n    isActive,\n    (value) => {\n        // on active set event handler if not open as modal\n        if (value) {\n            // keep first option always pre-focused\n            if (!props.inline && props.keepFirst && !focusedItem.value)\n                moveFocus(1);\n        }\n        if (isModal.value) toggleScroll(value);\n    },\n    { flush: \"post\" },\n);\n\nwatch(\n    childItems,\n    () => {\n        // change pre-focused element when items change and keepFirst\n        if (isActive.value && !props.inline && props.keepFirst) {\n            focusedItem.value = undefined;\n            moveFocus(1);\n        }\n    },\n    { deep: true, flush: \"post\" },\n);\n\n// #region --- Trigger Handler ---\n\n/** Close dropdown if clicked outside. */\nfunction onClickedOutside(event: Event): void {\n    if (!isActive.value || props.inline) return;\n    if (!props.closeOnOutside) return;\n    close(\"outside\", event);\n}\n\n/** Close dropdown if page get scrolled. */\nfunction onPageScroll(event: Event): void {\n    if (!isActive.value || props.inline) return;\n    if (!props.closeOnScroll) return;\n    close(\"scroll\", event);\n}\n\nfunction onTriggerClick(event: Event): void {\n    // check if is mobile native and hoverable together\n    if (isMobileNative && hoverable.value) toggle(\"click\", event);\n    // check normal click conditions\n    if (!props.triggers.includes(\"click\")) return;\n    toggle(\"click\", event);\n}\n\nfunction onTriggerContextMenu(event: MouseEvent): void {\n    if (!props.triggers.includes(\"contextmenu\")) return;\n    event.preventDefault();\n    open(\"contextmenu\", event);\n}\n\nfunction onTriggerFocus(event: Event): void {\n    if (!props.triggers.includes(\"focus\")) return;\n    open(\"focus\", event);\n}\n\nfunction onTriggerHover(event: Event): void {\n    if (isMobileNative) return;\n    if (!props.triggers.includes(\"hover\")) return;\n    open(\"hover\", event);\n}\n\nfunction onTriggerHoverLeave(event: Event): void {\n    if (isMobileNative) return;\n    if (!props.triggers.includes(\"hover\")) return;\n    close(\"outside\", event);\n}\n\n/** Toggle dropdown if it's not disabled. */\nfunction toggle(method: string, event: Event): void {\n    if (props.disabled) return;\n    if (!isActive.value) open(method, event);\n    else close(method, event);\n}\n\nlet timer: ReturnType<typeof setTimeout> | undefined;\n\nfunction open(method: string, event: Event): void {\n    if (props.disabled) return;\n    if (isActive.value) return;\n    if (props.delay) {\n        timer = setTimeout(() => {\n            isActive.value = true;\n            emits(\"open\", method, event);\n            timer = undefined;\n        }, props.delay);\n    } else {\n        // if not active, toggle after clickOutside event\n        // this fixes toggling programmatic\n        nextTick(() => (isActive.value = true));\n        emits(\"open\", method, event);\n    }\n}\n\nfunction close(method: string, event: Event): void {\n    if (!isActive.value) return;\n    emits(\"close\", method, event);\n\n    // select item when dropdown closed\n    if (props.selectOnClose && focusedItem.value?.data?.value)\n        selectItem(focusedItem.value);\n\n    isActive.value = false;\n    focusedItem.value = undefined;\n    if (timer) clearTimeout(timer);\n}\n\n// #endregion --- Trigger Handler ---\n\n// #region --- Select Feature ---\n\n/**\n * Click listener from DropdownItem.\n *   1. Set new selected item.\n *   2. Update v-model.\n *   3. Close the dropdown.\n */\nfunction selectItem(item: DropdownChildItem<T>, event?: Event): void {\n    const value = item.data!.value!;\n    emits(\"select\", value);\n\n    if (props.selectable) {\n        // set selected option\n        if (isTrueish(props.multiple)) {\n            if (vmodel.value && Array.isArray(vmodel.value)) {\n                if (!vmodel.value.includes(value)) {\n                    // add a value\n                    vmodel.value = [...vmodel.value, value] as ModelValue;\n                } else {\n                    // remove a value\n                    vmodel.value = vmodel.value.filter(\n                        (val) => val !== value,\n                    ) as ModelValue;\n                }\n            } else {\n                // init new value array\n                vmodel.value = [value] as ModelValue;\n            }\n            // emit change after vmodel has changed\n            nextTick(() => emits(\"change\", vmodel.value));\n        } else {\n            if (vmodel.value !== value) {\n                // update a single value\n                vmodel.value = value as ModelValue;\n                // emit change after vmodel has changed\n                nextTick(() => emits(\"change\", vmodel.value));\n            }\n        }\n    }\n\n    triggerRef.value?.focus();\n    if (props.keepOpen || !isActive.value || !event) return;\n    close(\"content\", event);\n}\n\n// #endregion --- Select Feature ---\n\n// #region --- Focus Feature ---\n\nconst focusedItem = ref<DropdownChildItem<T>>();\n\n/** Hover listener from DropdownItem. */\nfunction focusItem(value: DropdownChildItem<T>): void {\n    focusedItem.value = value;\n}\n\n/** Set focus on a tab item. */\nfunction moveFocus(delta: 1 | -1): void {\n    if (!isNotEmpty.value) return;\n    const item = getFirstViableItem(focusedItem.value?.index || 0, delta);\n    setFocus(item);\n}\n\n/** Set focus on a dropdown item. */\nfunction setFocus(item: DropdownChildItem<T>): void {\n    if (props.selectOnFocus && item.data?.value)\n        selectItem(item, new Event(\"focus\"));\n\n    const dropdownMenu = unrefElement(menuRef);\n    const element = unrefElement(item.data?.$el);\n    if (!dropdownMenu || !element) return;\n\n    // set item as focused\n    focusedItem.value = item;\n\n    // scroll item into view\n    maintainScrollVisibility(element, dropdownMenu);\n}\n\nfunction onUpPressed(event: Event): void {\n    if (!isActive.value) return open(\"keydown\", event);\n    moveFocus(-1);\n}\n\nfunction onDownPressed(event: Event): void {\n    if (!isActive.value) return open(\"keydown\", event);\n    moveFocus(1);\n}\n\nfunction onEnter(event: Event): void {\n    if (!isActive.value) return;\n    if (focusedItem.value) {\n        setFocus(focusedItem.value);\n        focusedItem.value.data?.selectItem(event);\n    }\n}\n\n/** Go to the first viable item */\nfunction onHomePressed(event: Event): void {\n    open(\"keydown\", event);\n    if (!isNotEmpty.value) return;\n    const item = getFirstViableItem(0, 1);\n    setFocus(item);\n}\n\n/** Go to the last viable item */\nfunction onEndPressed(event: Event): void {\n    open(\"keydown\", event);\n    if (!isNotEmpty.value) return;\n    const item = getFirstViableItem(childItems.value.length - 1, -1);\n    setFocus(item);\n}\n\nfunction onEscape(event: Event): void {\n    close(\"escape\", event);\n}\n\n/**\n * Get the first 'viable' child, starting at startingIndex and in the direction specified\n * by the boolean parameter forward. In other words, first try to select the child at index\n * startingIndex, and if it is not visible or it is disabled, then go to the index in the\n * specified direction until either returning to startIndex or finding a viable child item.\n */\nfunction getFirstViableItem(\n    startingIndex: number,\n    delta: 1 | -1,\n): DropdownChildItem<T> {\n    let newIndex = mod(\n        focusedItem.value?.index == startingIndex\n            ? startingIndex + delta\n            : startingIndex,\n        childItems.value.length,\n    );\n    for (\n        ;\n        newIndex !== focusedItem.value?.index;\n        newIndex = mod(newIndex + delta, childItems.value.length)\n    ) {\n        // Break if the item at this index is viable (not disabled)\n        if (isItemViable(childItems.value[newIndex])) break;\n    }\n\n    return childItems.value[newIndex];\n}\n\nfunction isItemViable(item: DropdownChildItem<T>): boolean {\n    return !item.data?.disabled && !item.data?.hidden && !!item.data?.clickable;\n}\n\n// #endregion --- Focus Feature ---\n\n// #region --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-dropdown\"],\n    [\n        \"disabledClass\",\n        \"o-dropdown--disabled\",\n        null,\n        computed(() => props.disabled),\n    ],\n    [\n        \"expandedClass\",\n        \"o-dropdown--expanded\",\n        null,\n        computed(() => props.expanded),\n    ],\n    [\"inlineClass\", \"o-dropdown--inline\", null, computed(() => props.inline)],\n    [\"mobileClass\", \"o-dropdown--mobile\", null, isMobile],\n    [\"modalClass\", \"o-dropdown--modal\", null, isModal],\n    [\"hoverableClass\", \"o-dropdown--hoverable\", null, hoverable],\n    [\n        \"positionClass\",\n        \"o-dropdown--position-\",\n        autoPosition,\n        computed(() => !!autoPosition.value),\n    ],\n    [\n        \"activeClass\",\n        \"o-dropdown--active\",\n        null,\n        computed(() => isActive.value || props.inline),\n    ],\n);\n\nconst triggerClasses = defineClasses([\"triggerClass\", \"o-dropdown__trigger\"]);\n\nconst teleportClasses = defineClasses([\n    \"teleportClass\",\n    \"o-dropdown--teleport\",\n    null,\n    computed(() => !!props.teleport),\n]);\n\nconst overlayClasses = defineClasses([\"overlayClass\", \"o-dropdown__overlay\"]);\n\nconst menuClasses = defineClasses(\n    [\"menuClass\", \"o-dropdown__menu\"],\n    [\n        \"menuPositionClass\",\n        \"o-dropdown__menu--\",\n        autoPosition,\n        computed(() => !!autoPosition.value),\n    ],\n    [\n        \"menuActiveClass\",\n        \"o-dropdown__menu--active\",\n        null,\n        computed(() => isActive.value || props.inline),\n    ],\n);\n\n// #endregion --- Computed Component Classes ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ $trigger: triggerRef, $content: menuRef, value: vmodel });\n</script>\n\n<template>\n    <div\n        data-oruga=\"dropdown\"\n        :class=\"rootClasses\"\n        @mouseleave=\"onTriggerHoverLeave\"\n        @focusout=\"onTriggerHoverLeave\">\n        <component\n            :is=\"triggerTag\"\n            v-if=\"!inline\"\n            ref=\"triggerRef\"\n            :class=\"triggerClasses\"\n            :role=\"selectable ? 'combobox' : undefined\"\n            :tabindex=\"disabled ? -1 : null\"\n            :aria-haspopup=\"selectable ? 'listbox' : 'menu'\"\n            :aria-expanded=\"selectable ? isActive : undefined\"\n            :aria-activedescendant=\"\n                focusedItem ? `${menuId}-${focusedItem.identifier}` : undefined\n            \"\n            :aria-disabled=\"disabled\"\n            :aria-controls=\"menuId\"\n            :aria-labelledby=\"selectable ? labelId : undefined\"\n            :aria-label=\"selectable ? ariaLabel : undefined\"\n            @click=\"onTriggerClick\"\n            @contextmenu=\"onTriggerContextMenu\"\n            @mouseenter=\"onTriggerHover\"\n            @focus.capture=\"onTriggerFocus\"\n            @keydown.tab=\"onEscape\"\n            @keydown.escape=\"onEscape\"\n            @keydown.enter=\"onEnter\"\n            @keydown.space=\"onEnter\"\n            @keydown.up.prevent=\"onUpPressed\"\n            @keydown.down.prevent=\"onDownPressed\"\n            @keydown.home.prevent=\"onHomePressed\"\n            @keydown.end.prevent=\"onEndPressed\">\n            <!--\n                @slot Override the trigger element, default is label prop\n                @binding {boolean} active - dropdown active state\n                @binding {T | T[]} value - the selected value\n                @binding {(): void} toggle - toggle dropdown active state\n            -->\n            <slot\n                name=\"trigger\"\n                :active=\"isActive\"\n                :value=\"modelValue\"\n                :toggle=\"onTriggerClick\">\n                {{ label }}\n            </slot>\n        </component>\n\n        <PositionWrapper\n            v-slot=\"{ setContent }\"\n            v-model:position=\"autoPosition\"\n            :teleport=\"teleport\"\n            :class=\"[...rootClasses, ...teleportClasses]\"\n            :trigger=\"triggerRef\"\n            :disabled=\"!isActive\"\n            default-position=\"bottom\"\n            :disable-positioning=\"!isModal\">\n            <transition v-if=\"isModal\" :name=\"animation\">\n                <div\n                    v-show=\"isActive\"\n                    :class=\"overlayClasses\"\n                    tabindex=\"-1\"\n                    @click=\"onClickedOutside\" />\n            </transition>\n\n            <transition :name=\"animation\">\n                <component\n                    :is=\"menuTag\"\n                    v-show=\"(!disabled && isActive) || inline\"\n                    :id=\"menuId\"\n                    :ref=\"(el) => (menuRef = setContent(el))\"\n                    :tabindex=\"inline ? 0 : -1\"\n                    :class=\"menuClasses\"\n                    :style=\"menuStyle\"\n                    :role=\"selectable ? 'listbox' : 'menu'\"\n                    :aria-labelledby=\"labelId\"\n                    :aria-label=\"ariaLabel\"\n                    :aria-hidden=\"!inline && (disabled || !isActive)\"\n                    :aria-multiselectable=\"\n                        selectable ? isTrueish(multiple) : undefined\n                    \"\n                    @keydown.enter.prevent=\"inline && onEnter($event)\"\n                    @keydown.space.prevent=\"inline && onEnter($event)\"\n                    @keydown.up.prevent=\"inline && onUpPressed($event)\"\n                    @keydown.down.prevent=\"inline && onDownPressed($event)\"\n                    @keydown.home.prevent=\"inline && onHomePressed($event)\"\n                    @keydown.end.prevent=\"inline && onEndPressed($event)\">\n                    <!--\n                        @slot Place dropdown items here\n                        @binding {boolean} active - dropdown active state\n                        @binding {number} focusedIndex - index of the focused element\n                        @binding {(): void} toggle - toggle dropdown active state\n                    -->\n                    <slot\n                        :active=\"isActive\"\n                        :focused-index=\"focusedItem?.index\"\n                        :toggle=\"toggle\">\n                        <!--\n                            @slot Place extra `o-dropdown-item` components here, even if you have some options defined by prop\n                        -->\n                        <slot name=\"before\" />\n\n                        <template v-for=\"(group, groupIndex) in groupedOptions\">\n                            <o-dropdown-item\n                                v-if=\"group.label\"\n                                v-show=\"!group.hidden\"\n                                v-bind=\"group.attrs\"\n                                :key=\"group.key\"\n                                :value=\"group.value\"\n                                :hidden=\"group.hidden\"\n                                role=\"presentation\"\n                                :clickable=\"false\">\n                                <!--\n                                    @slot Override the option group\n                                    @binding {object} group - options group\n                                    @binding {number} index - option index\n                                -->\n                                <slot\n                                    v-if=\"$slots.group\"\n                                    name=\"group\"\n                                    :group=\"group.label\"\n                                    :index=\"groupIndex\" />\n                                <span v-else>\n                                    {{ group.label }}\n                                </span>\n                            </o-dropdown-item>\n\n                            <o-dropdown-item\n                                v-for=\"option in group.options\"\n                                v-show=\"!option.hidden\"\n                                v-bind=\"option.attrs\"\n                                :key=\"option.key\"\n                                :value=\"option.value\"\n                                :hidden=\"option.hidden\">\n                                {{ option.label }}\n                            </o-dropdown-item>\n                        </template>\n\n                        <!--\n                            @slot Place extra `o-dropdown-item` components here, even if you have some options defined by prop\n                        -->\n                        <slot name=\"after\" />\n                    </slot>\n                </component>\n            </transition>\n        </PositionWrapper>\n    </div>\n</template>\n","<script setup lang=\"ts\" generic=\"T\">\nimport {\n    computed,\n    ref,\n    watch,\n    useAttrs,\n    useSlots,\n    useId,\n    triggerRef,\n    watchEffect,\n    useTemplateRef,\n    toValue,\n    type Component,\n    type MaybeRefOrGetter,\n} from \"vue\";\n\nimport OInput from \"../input/Input.vue\";\nimport ODropdown from \"../dropdown/Dropdown.vue\";\nimport ODropdownItem from \"../dropdown/DropdownItem.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport {\n    defineClasses,\n    normalizeOptions,\n    toOptionsGroup,\n    toOptionsList,\n    findOption,\n    checkOptionsEmpty,\n    filterOptionsItems,\n    useInputHandler,\n    useSequentialId,\n} from \"@/composables\";\n\nimport { injectField } from \"../field/fieldInjection\";\n\nimport type { OptionsItem, OptionsGroupItem } from \"@/types\";\nimport type { AutocompleteProps } from \"./props\";\n\nenum SpecialOption {\n    Header,\n    Footer,\n}\n\n/**\n * Extended input that provide suggestions while the user types.\n * @displayName Autocomplete\n * @style _autocomplete.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OAutocomplete\",\n    configField: \"autocomplete\",\n    inheritAttrs: false,\n});\n\ntype ModelValue = AutocompleteProps<T>[\"modelValue\"];\n\nconst props = withDefaults(defineProps<AutocompleteProps<T>>(), {\n    override: undefined,\n    modelValue: undefined,\n    input: \"\",\n    active: false,\n    options: undefined,\n    filter: undefined,\n    backendFiltering: () => getDefault(\"autocomplete.backendFiltering\", false),\n    type: \"text\",\n    menuTag: () => getDefault(\"autocomplete.menuTag\", \"div\"),\n    itemTag: () => getDefault(\"autocomplete.itemTag\", \"div\"),\n    size: () => getDefault(\"autocomplete.size\"),\n    position: () => getDefault(\"autocomplete.position\", \"auto\"),\n    placeholder: undefined,\n    expanded: () => getDefault(\"autocomplete.expanded\", false),\n    rounded: false,\n    disabled: false,\n    maxlength: undefined,\n    checkScroll: () => getDefault(\"autocomplete.checkScroll\", false),\n    debounce: () => getDefault(\"autocomplete.debounce\", 400),\n    keepFirst: () => getDefault(\"autocomplete.keepFirst\", false),\n    clearOnSelect: () => getDefault(\"autocomplete.clearOnSelect\", false),\n    openOnFocus: () => getDefault(\"autocomplete.openOnFocus\", false),\n    keepOpen: () => getDefault(\"autocomplete.keepOpen\", false),\n    maxHeight: () => getDefault(\"autocomplete.maxHeight\"),\n    selectOnClose: false,\n    selectableHeader: false,\n    selectableFooter: false,\n    iconPack: () => getDefault(\"autocomplete.iconPack\"),\n    icon: () => getDefault(\"autocomplete.icon\"),\n    iconClickable: false,\n    iconRight: () => getDefault(\"autocomplete.iconRight\"),\n    iconRightClickable: false,\n    iconRightVariant: undefined,\n    clearable: () => getDefault(\"autocomplete.clearable\", false),\n    clearIcon: () => getDefault(\"autocomplete.clearIcon\", \"close-circle\"),\n    statusIcon: () => getDefault(\"statusIcon\", true),\n    desktopModal: () => getDefault(\"dropdown.desktopModal\", false),\n    mobileModal: () => getDefault(\"autocomplete.mobileModal\", false),\n    animation: () => getDefault(\"autocomplete.animation\", \"fade\"),\n    autocomplete: () => getDefault(\"autocomplete.autocomplete\", \"off\"),\n    useHtml5Validation: () => getDefault(\"useHtml5Validation\", true),\n    customValidity: undefined,\n    teleport: () => getDefault(\"autocomplete.teleport\", false),\n    inputClasses: () => getDefault(\"autocomplete.inputClasses\", {}),\n});\n\nconst emits = defineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {T} updated modelValue prop\n     */\n    \"update:model-value\": [value: ModelValue];\n    /**\n     * input prop two-way binding\n     * @param value {string} updated input prop\n     */\n    \"update:input\": [value: string];\n    /**\n     * active prop two-way binding\n     * @param value {boolean} updated active prop\n     */\n    \"update:active\": [value: boolean];\n    /**\n     * on input change event\n     * @param value {string} input value\n     * @param event {Event} native event\n     */\n    input: [value: string, event: Event];\n    /**\n     * selected element changed event\n     * @param value {T} selected value\n     */\n    select: [value: ModelValue];\n    /**\n     * header is selected\n     */\n    \"select-header\": [];\n    /**\n     * footer is selected\n     */\n    \"select-footer\": [];\n    /**\n     * on input focus event\n     * @param event {Event} native event\n     */\n    focus: [event: Event];\n    /**\n     * on input blur event\n     * @param event {Event} native event\n     */\n    blur: [event: Event];\n    /**\n     * on input invalid event\n     * @param event {Event} native event\n     */\n    invalid: [event: Event];\n    /**\n     * on icon click event\n     * @param event {Event} native event\n     */\n    \"icon-click\": [event: Event];\n    /**\n     * on icon right click event\n     * @param event {Event} native event\n     */\n    \"icon-right-click\": [event: Event];\n    /** the list inside the dropdown reached the start */\n    \"scroll-start\": [];\n    /** the list inside the dropdown reached it's end */\n    \"scroll-end\": [];\n}>();\n\nconst slots = useSlots();\n\n// define as Component to prevent docs memmory overload\nconst inputRef = useTemplateRef<Component>(\"inputComponent\");\n\n// use form input functionalities\nconst { checkHtml5Validity, onInvalid, onFocus, onBlur, isFocused, setFocus } =\n    useInputHandler(inputRef, emits, props);\n\n// inject parent field component if used inside one\nconst { parentField } = injectField();\n\n// the active state of the dropdown, use v-model:active to make it two-way binding\nconst isActive = defineModel<boolean>(\"active\", { default: false });\n\n// the selected value, use v-model to make it two-way binding\nconst selectedValue = defineModel<ModelValue>({ default: undefined });\n\n// the value of the inner input, use v-model:input to make it two-way binding\nconst inputValue = defineModel<string>(\"input\", { default: \"\" });\n\n/** create a unique id for the menu */\nconst menuId = useId();\n\n// create a unique id sequence\nconst { nextSequence } = useSequentialId();\n\n/** normalized programamtic options */\nconst groupedOptions = computed<OptionsGroupItem<T>[]>(() => {\n    const normalizedOptions = normalizeOptions<T>(props.options, nextSequence);\n    const groupedOptions = toOptionsGroup<T>(normalizedOptions, nextSequence());\n    return groupedOptions;\n});\n\n// if not backend filtered\nif (!props.backendFiltering)\n    /**\n     * Applies an reactive filter for the options based on the input value.\n     * Options are filtered by setting the hidden attribute.\n     */\n    watchEffect(() => {\n        // filter options by input value\n        filterOptionsItems<T>(groupedOptions, (o) =>\n            filterItems(o, inputValue),\n        );\n        // trigger reactive update of groupedOptions\n        triggerRef(groupedOptions);\n    });\n\nfunction filterItems(\n    option: OptionsItem<T>,\n    value: MaybeRefOrGetter<string>,\n): boolean {\n    if (typeof props.filter === \"function\")\n        return props.filter(option.value, toValue(value));\n    else\n        return !String(option.label)\n            .toLowerCase()\n            .includes(toValue(value)?.toLowerCase());\n}\n\n/** is no option visible */\nconst isEmpty = computed(() => checkOptionsEmpty(groupedOptions));\n\nwatch(isEmpty, (empty) => {\n    if (isFocused.value) isActive.value = !empty || !!slots.empty;\n});\n\n// --- Select Feature ---\n\nconst dropdownValue = ref();\n\n/**\n * When updating input's value:\n * 1. If value isn't the same as selected, set undefined\n * 2. Close dropdown if value is clear or else open it\n */\nwatch(\n    inputValue,\n    (value) => {\n        // find the option for the current selected value\n        const currentOption = findOption(groupedOptions, selectedValue);\n        // clear selected if option label does not match the selected value\n        if (currentOption && currentOption.label !== value) {\n            // clear selected value\n            selectedValue.value = undefined;\n            dropdownValue.value = undefined;\n        }\n\n        // Close dropdown if data is empty\n        if (isEmpty.value && !slots.empty) {\n            isActive.value = false;\n        }\n    },\n    { flush: \"post\" },\n);\n\n/**\n * When updating selected value:\n * 1. Set selected option label as input value\n * 2. Set the selected option value as dropdown value\n */\nwatch(\n    selectedValue,\n    (value) => {\n        if (!value) return;\n        const option = findOption(groupedOptions, value);\n        if (!option) return;\n\n        // set selected option label as input value\n        inputValue.value = props.clearOnSelect ? \"\" : option.label;\n        checkHtml5Validity();\n\n        // set the selected option value as dropdown value\n        dropdownValue.value = option.value;\n    },\n    // set initial values if selected is given\n    { immediate: true },\n);\n\nfunction setSelected(item: T | SpecialOption | undefined): void {\n    let option: OptionsItem<T> | undefined = undefined;\n\n    /** Check if header or footer was selected. */\n    if (item === SpecialOption.Header) {\n        emits(\"select-header\");\n    } else if (item === SpecialOption.Footer) {\n        emits(\"select-footer\");\n    } else if (item) {\n        // convert grouped options to simple list\n        const options: OptionsItem<T>[] = toOptionsList(groupedOptions);\n\n        // get option or undefined for header, footer or group\n        option = options.find((o) => o.value === item);\n    }\n\n    // set which option is currently selected, update v-model,\n    selectedValue.value = option?.value;\n    emits(\"select\", option?.value);\n\n    if (props.keepOpen) setFocus();\n    else isActive.value = false;\n}\n\n// --- Event Handler ---\n\n/** emit input change event */\nfunction onInput(value: string, event: Event): void {\n    if (isFocused.value) {\n        if (!isActive.value && value && (!isEmpty.value || slots.empty)) {\n            // open dropdown if input has value and options are available\n            isActive.value = true;\n        } else if (isActive.value && !value && !props.keepOpen) {\n            // close dropdown if input has not value and is not keep open\n            isActive.value = false;\n        }\n    }\n    emits(\"input\", value, event);\n    checkHtml5Validity();\n}\n\n/**\n * Focus listener.\n * If value is the same as selected, select all text.\n */\nfunction handleFocus(event: Event): void {\n    // open dropdown if `openOnFocus` and has options\n    if (\n        props.openOnFocus &&\n        (!!props.options?.length || !!slots.header || !!slots.footer)\n    )\n        isActive.value = true;\n    onFocus(event);\n}\n\n/**\n * Blur listener.\n * Close on blur.\n */\nfunction handleBlur(event: Event): void {\n    onBlur(event);\n}\n\n// #endregion --- Event Handler ---\n\n// #region --- Icon Feature ---\n\nconst computedIconRight = computed(() =>\n    props.clearable && inputValue.value && props.clearIcon\n        ? props.clearIcon\n        : props.iconRight,\n);\n\nconst computedIconRightClickable = computed(() =>\n    props.clearable ? true : props.iconRightClickable,\n);\n\nfunction rightIconClick(event: Event): void {\n    if (props.clearable) {\n        inputValue.value = \"\";\n    } else emits(\"icon-right-click\", event);\n}\n\n// #endregion --- Icon Feature ---\n\n// #region --- Computed Component Classes ---\n\nconst attrs = useAttrs();\n\nconst inputBind = computed(() => ({\n    ...parentField?.value?.inputAttrs,\n    ...attrs,\n    ...props.inputClasses,\n}));\n\nconst rootClasses = defineClasses([\"rootClass\", \"o-autocomplete\"]);\n\nconst itemClasses = defineClasses([\"itemClass\", \"o-autocomplete__item\"]);\n\nconst itemEmptyClasses = defineClasses([\n    \"itemEmptyClass\",\n    \"o-autocomplete__item--empty\",\n]);\n\nconst itemGroupClasses = defineClasses([\n    \"itemGroupTitleClass\",\n    \"o-autocomplete__item-group-title\",\n]);\n\nconst itemHeaderClasses = defineClasses([\n    \"itemHeaderClass\",\n    \"o-autocomplete__item-header\",\n]);\n\nconst itemFooterClasses = defineClasses([\n    \"itemFooterClass\",\n    \"o-autocomplete__item-footer\",\n]);\n\n// #endregion --- Computed Component Classes ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ checkHtml5Validity, focus: setFocus, value: inputValue });\n</script>\n\n<template>\n    <o-dropdown\n        v-model=\"dropdownValue\"\n        v-model:active=\"isActive\"\n        data-oruga=\"autocomplete\"\n        :class=\"rootClasses\"\n        :menu-id=\"menuId\"\n        :menu-tag=\"menuTag\"\n        :triggers=\"[]\"\n        scrollable\n        selectable\n        :keep-open=\"keepOpen\"\n        :keep-first=\"keepFirst\"\n        :check-scroll=\"checkScroll\"\n        :select-on-close=\"selectOnClose\"\n        :disabled=\"disabled\"\n        :desktop-modal=\"desktopModal\"\n        :mobile-modal=\"mobileModal\"\n        :max-height=\"maxHeight\"\n        :animation=\"animation\"\n        :position=\"position\"\n        :teleport=\"teleport\"\n        :expanded=\"expanded\"\n        @select=\"setSelected\"\n        @scroll-start=\"emits('scroll-start')\"\n        @scroll-end=\"emits('scroll-end')\">\n        <template #trigger>\n            <o-input\n                ref=\"inputComponent\"\n                v-bind=\"inputBind\"\n                v-model=\"inputValue\"\n                :type=\"type\"\n                :size=\"size\"\n                :rounded=\"rounded\"\n                :icon=\"icon\"\n                :icon-right=\"computedIconRight\"\n                :icon-right-clickable=\"computedIconRightClickable\"\n                :icon-pack=\"iconPack\"\n                :placeholder=\"placeholder\"\n                :maxlength=\"maxlength\"\n                :autocomplete=\"autocomplete\"\n                :expanded=\"expanded\"\n                :disabled=\"disabled\"\n                :status-icon=\"statusIcon\"\n                :debounce=\"debounce\"\n                :aria-autocomplete=\"keepFirst ? 'both' : 'list'\"\n                :aria-controls=\"menuId\"\n                enterkeyhint=\"enter\"\n                :use-html5-validation=\"false\"\n                @input=\"onInput\"\n                @focus=\"handleFocus\"\n                @blur=\"handleBlur\"\n                @invalid=\"onInvalid\"\n                @icon-click=\"emits('icon-click', $event)\"\n                @icon-right-click=\"rightIconClick\" />\n        </template>\n\n        <o-dropdown-item\n            v-if=\"$slots.header\"\n            :tag=\"itemTag\"\n            :value=\"SpecialOption.Header\"\n            :clickable=\"selectableHeader\"\n            :class=\"[...itemClasses, ...itemHeaderClasses]\">\n            <!--\n                @slot Define an additional header\n            -->\n            <slot name=\"header\" />\n        </o-dropdown-item>\n\n        <template v-for=\"(group, groupIndex) in groupedOptions\">\n            <o-dropdown-item\n                v-if=\"group.label\"\n                v-show=\"!group.hidden\"\n                :key=\"group.key\"\n                v-bind=\"group.attrs\"\n                :hidden=\"group.hidden\"\n                :value=\"group.value\"\n                :tag=\"itemTag\"\n                role=\"presentation\"\n                :clickable=\"false\"\n                :class=\"[...itemClasses, ...itemGroupClasses]\">\n                <!--\n                    @slot Override the option group\n                    @binding {object} group - options group\n                    @binding {number} index - option index\n                -->\n                <slot\n                    v-if=\"$slots.group\"\n                    name=\"group\"\n                    :group=\"group.label\"\n                    :index=\"groupIndex\" />\n                <span v-else>\n                    {{ group.label }}\n                </span>\n            </o-dropdown-item>\n\n            <o-dropdown-item\n                v-for=\"(option, optionIndex) in group.options\"\n                v-show=\"!option.hidden\"\n                :key=\"option.key\"\n                v-bind=\"option.attrs\"\n                :value=\"option.value\"\n                :hidden=\"option.hidden\"\n                :tag=\"itemTag\"\n                :class=\"itemClasses\">\n                <!--\n                    @slot Override the select option\n                    @binding {object} option - option object\n                    @binding {number} index - option index\n                    @binding {unknown} value - option value\n                -->\n                <slot\n                    v-if=\"$slots.default\"\n                    :option=\"option\"\n                    :value=\"option.value\"\n                    :index=\"optionIndex\" />\n                <span v-else>\n                    {{ option.label }}\n                </span>\n            </o-dropdown-item>\n        </template>\n\n        <o-dropdown-item\n            v-if=\"isEmpty && $slots.empty\"\n            :tag=\"itemTag\"\n            :class=\"[...itemClasses, ...itemEmptyClasses]\">\n            <!--\n                @slot Define content for empty state\n            -->\n            <slot name=\"empty\" />\n        </o-dropdown-item>\n\n        <o-dropdown-item\n            v-if=\"$slots.footer\"\n            :tag=\"itemTag\"\n            :value=\"SpecialOption.Footer\"\n            :clickable=\"selectableFooter\"\n            :class=\"[...itemClasses, ...itemFooterClasses]\">\n            <!--\n                @slot Define an additional footer\n            -->\n            <slot name=\"footer\" />\n        </o-dropdown-item>\n    </o-dropdown>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Autocomplete from \"./Autocomplete.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export autocomplete plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Autocomplete);\n    },\n} as Plugin;\n\n/** export autocomplete components */\nexport { Autocomplete as OAutocomplete };\n","<script setup lang=\"ts\">\nimport { computed, useTemplateRef } from \"vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport {\n    defineClasses,\n    normalizeOptions,\n    useProviderParent,\n    useSequentialId,\n} from \"@/composables\";\n\nimport type { BreadcrumbProps } from \"./props\";\n\n/**\n * The classic breadcrumb, in different colors, sizes, and states\n * @displayName Breadcrumb\n * @requires ./BreadcrumbItem.vue\n * @style _breadcrumb.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OBreadcrumb\",\n    configField: \"breadcrumb\",\n});\n\nconst props = withDefaults(defineProps<BreadcrumbProps>(), {\n    override: undefined,\n    options: undefined,\n    size: () => getDefault(\"breadcrumb.size\"),\n    variant: () => getDefault(\"breadcrumb.variant\"),\n    position: () => getDefault(\"breadcrumb.position\"),\n    separator: () => getDefault(\"breadcrumb.separator\", \"/\"),\n    ariaLabel: () => getDefault(\"modal.ariaLabel\", \"Breadcrumb\"),\n});\n\nconst rootRef = useTemplateRef(\"rootElement\");\n\n/** provide functionalities and data to child item components */\nuseProviderParent({ rootRef });\n\n// create a unique id sequence\nconst { nextSequence } = useSequentialId();\n\n/** normalized programamtic options */\nconst normalizedOptions = computed(() =>\n    normalizeOptions(props.options, nextSequence),\n);\n\nconst customStyle = computed(() => ({ \"--seperator\": `'${props.separator}'` }));\n\n// #region --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-breadcrumb\"],\n    [\n        \"sizeClass\",\n        \"o-breadcrumb--\",\n        computed(() => props.size),\n        computed(() => !!props.size),\n    ],\n    [\n        \"variantClass\",\n        \"o-breadcrumb--\",\n        computed(() => props.variant),\n        computed(() => !!props.variant),\n    ],\n    [\n        \"positionClass\",\n        \"o-breadcrumb--\",\n        computed(() => props.position),\n        computed(() => !!props.position),\n    ],\n);\n\nconst listClasses = defineClasses([\"listClass\", \"o-breadcrumb__list\"]);\n\n// #endregion --- Computed Component Classes ---\n</script>\n\n<template>\n    <nav\n        ref=\"rootElement\"\n        data-oruga=\"breadcrumb\"\n        :class=\"rootClasses\"\n        :style=\"customStyle\"\n        :aria-label=\"ariaLabel\">\n        <ol :class=\"listClasses\">\n            <!--\n                @slot Place breadcrumb items here \n            -->\n            <slot>\n                <OBreadcrumbItem\n                    v-for=\"option in normalizedOptions\"\n                    :key=\"option.key\"\n                    v-bind=\"option.attrs\"\n                    :value=\"option.value\"\n                    :label=\"option.label\"\n                    :hidden=\"option.hidden\" />\n            </slot>\n        </ol>\n    </nav>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport OIcon from \"../icon/Icon.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { defineClasses, useProviderChild } from \"@/composables\";\n\nimport type { BreadcrumbItemProps } from \"./props\";\n\n/**\n * The classic breadrcumb item, in different colors, sizes, and states\n * @displayName Breadcrumb Item\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OBreadcrumbItem\",\n    configField: \"breadcrumb\",\n    inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<BreadcrumbItemProps>(), {\n    override: undefined,\n    label: undefined,\n    active: false,\n    disabled: false,\n    hidden: false,\n    iconLeft: undefined,\n    iconRight: undefined,\n    iconPack: () => getDefault(\"breadcrumb.iconPack\"),\n    iconSize: () => getDefault(\"breadcrumb.iconSize\"),\n    tag: () => getDefault(\"breadcrumb.tag\", \"a\"),\n});\n\n/** inject functionalities and data from the parent component */\nconst { item } = useProviderChild();\n\n// #region --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"itemClass\", \"o-breadcrumb__item\"],\n    [\n        \"disabledClass\",\n        \"o-breadcrumb__item--disabled\",\n        null,\n        computed(() => props.disabled),\n    ],\n    [\n        \"activeClass\",\n        \"o-breadcrumb__item--active\",\n        null,\n        computed(() => props.active),\n    ],\n);\n\nconst linkClasses = defineClasses([\"linkClass\", \"o-breadcrumb__item__link\"]);\n\nconst iconLeftClasses = defineClasses(\n    [\"iconClass\", \"o-breadcrumb__item__icon\"],\n    [\"iconLeftClass\", \"o-breadcrumb__item__icon--left\"],\n);\n\nconst iconRightClasses = defineClasses(\n    [\"iconClass\", \"o-breadcrumb__item__icon\"],\n    [\"iconRightClass\", \"o-breadcrumb__item__icon--right\"],\n);\n\n// #endregion --- Computed Component Classes ---\n</script>\n\n<template>\n    <li\n        v-show=\"!hidden\"\n        data-oruga=\"breadcrumb-item\"\n        :data-id=\"`breadcrumb-${item.identifier}`\"\n        :class=\"rootClasses\"\n        :aria-current=\"active ? 'page' : undefined\">\n        <!-- \n            @slot Item seperator\n        -->\n        <slot name=\"seperator\"> </slot>\n\n        <component\n            :is=\"tag\"\n            v-bind=\"$attrs\"\n            :class=\"linkClasses\"\n            :disabled=\"disabled\"\n            :active=\"active\"\n            :aria-current=\"active ? 'page' : undefined\">\n            <o-icon\n                v-if=\"iconLeft\"\n                :icon=\"iconLeft\"\n                :pack=\"iconPack\"\n                :size=\"iconSize\"\n                :class=\"iconLeftClasses\" />\n\n            <!-- \n                @slot Override label\n            -->\n            <slot>\n                <span>{{ label }}</span>\n            </slot>\n\n            <o-icon\n                v-if=\"iconRight\"\n                :icon=\"iconRight\"\n                :pack=\"iconPack\"\n                :size=\"iconSize\"\n                :class=\"iconRightClasses\" />\n        </component>\n    </li>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Breadcrumb from \"./Breadcrumb.vue\";\nimport BreadcrumbItem from \"./BreadcrumbItem.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export breadcrumb plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Breadcrumb);\n        registerComponent(app, BreadcrumbItem);\n    },\n} as Plugin;\n\n/** export Breadcrumb components */\nexport { Breadcrumb as OBreadcrumb, BreadcrumbItem as OBreadcrumbItem };\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport OIcon from \"../icon/Icon.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { defineClasses } from \"@/composables\";\n\nimport type { ButtonProps } from \"./props\";\n\n/**\n * The classic button, in different colors, sizes, and states.\n * @displayName Button\n * @style _button.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OButton\",\n    configField: \"button\",\n});\n\nconst props = withDefaults(defineProps<ButtonProps>(), {\n    override: undefined,\n    tag: () => getDefault(\"button.tag\", \"button\"),\n    variant: () => getDefault(\"button.variant\"),\n    size: () => getDefault(\"button.size\"),\n    label: undefined,\n    rounded: () => getDefault(\"button.rounded\", false),\n    expanded: false,\n    disabled: false,\n    outlined: false,\n    loading: false,\n    inverted: false,\n    type: \"button\",\n    iconPack: () => getDefault(\"button.iconPack\"),\n    iconLeft: undefined,\n    iconRight: undefined,\n});\n\ndefineEmits<{\n    /**\n     * button click event\n     * @param event {Event} native event\n     */\n    click: [event: Event];\n}>();\n\nconst computedTag = computed(() =>\n    typeof props.disabled !== \"undefined\" && props.disabled !== false\n        ? \"button\"\n        : props.tag,\n);\n\nconst computedNativeType = computed(() =>\n    props.tag === \"button\" || props.tag === \"input\" ? props.type : null,\n);\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-button\"],\n    [\n        \"sizeClass\",\n        \"o-button--\",\n        computed(() => props.size),\n        computed(() => !!props.size),\n    ],\n    [\n        \"variantClass\",\n        \"o-button--\",\n        computed(() => props.variant),\n        computed(() => !!props.variant && !props.outlined && !props.inverted),\n    ],\n    [\n        \"outlinedClass\",\n        \"o-button--outlined\",\n        null,\n        computed(() => props.outlined && !props.variant),\n    ],\n    [\n        \"invertedClass\",\n        \"o-button--inverted\",\n        null,\n        computed(() => props.inverted && !props.variant),\n    ],\n    [\n        \"outlinedClass\",\n        \"o-button--outlined-\",\n        computed(() => props.variant),\n        computed(() => props.outlined && !!props.variant),\n    ],\n    [\n        \"invertedClass\",\n        \"o-button--inverted-\",\n        computed(() => props.variant),\n        computed(() => props.inverted && !!props.variant),\n    ],\n    [\n        \"expandedClass\",\n        \"o-button--expanded\",\n        null,\n        computed(() => props.expanded),\n    ],\n    [\"loadingClass\", \"o-button--loading\", null, computed(() => props.loading)],\n    [\"roundedClass\", \"o-button--rounded\", null, computed(() => props.rounded)],\n    [\n        \"disabledClass\",\n        \"o-button--disabled\",\n        null,\n        computed(() => props.disabled),\n    ],\n);\n\nconst wrapperClasses = defineClasses([\"wrapperClass\", \"o-button__wrapper\"]);\n\nconst labelClasses = defineClasses([\"labelClass\", \"o-button__label\"]);\n\nconst iconClasses = defineClasses([\"iconClass\", \"o-button__icon\"]);\n\nconst iconLeftClasses = defineClasses([\"iconLeftClass\", \"o-button__icon-left\"]);\n\nconst iconRightClasses = defineClasses([\n    \"iconRightClass\",\n    \"o-button__icon-right\",\n]);\n</script>\n\n<template>\n    <component\n        :is=\"computedTag\"\n        data-oruga=\"button\"\n        :type=\"computedNativeType\"\n        role=\"button\"\n        tabindex=\"0\"\n        :class=\"rootClasses\"\n        :disabled=\"disabled ? true : null\"\n        @click=\"$emit('click', $event)\"\n        @keydown.enter=\"$emit('click', $event)\"\n        @keydown.space=\"$emit('click', $event)\">\n        <span :class=\"wrapperClasses\">\n            <o-icon\n                v-if=\"iconLeft\"\n                :pack=\"iconPack\"\n                :icon=\"iconLeft\"\n                :size=\"size\"\n                :class=\"[...iconClasses, ...iconLeftClasses]\" />\n\n            <span v-if=\"label || $slots.default\" :class=\"labelClasses\">\n                <!--\n                    @slot Override the label, default is label prop \n                -->\n                <slot>{{ label }}</slot>\n            </span>\n\n            <o-icon\n                v-if=\"iconRight\"\n                :pack=\"iconPack\"\n                :icon=\"iconRight\"\n                :size=\"size\"\n                :class=\"[...iconClasses, ...iconRightClasses]\" />\n        </span>\n    </component>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Button from \"./Button.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export button plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Button);\n    },\n} as Plugin;\n\n/** export button components */\nexport { Button as OButton };\n","<script setup lang=\"ts\">\nimport {\n    computed,\n    watch,\n    onBeforeUnmount,\n    onMounted,\n    ref,\n    nextTick,\n    readonly,\n    toRaw,\n    useTemplateRef,\n    triggerRef,\n} from \"vue\";\n\nimport OIcon from \"../icon/Icon.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { sign, mod, bound, isDefined } from \"@/utils/helpers\";\nimport { isClient } from \"@/utils/ssr\";\nimport {\n    defineClasses,\n    useProviderParent,\n    type ProviderItem,\n} from \"@/composables\";\n\nimport type { CarouselComponent } from \"./types\";\nimport type { ClassBind } from \"@/types\";\nimport type { CarouselProps } from \"./props\";\n\n/**\n * A Slideshow for cycling images in confined spaces.\n * @displayName Carousel\n * @requires ./CarouselItem.vue\n * @style _carousel.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OCarousel\",\n    configField: \"carousel\",\n});\n\nconst props = withDefaults(defineProps<CarouselProps>(), {\n    override: undefined,\n    modelValue: 0,\n    dragable: true,\n    autoplay: false,\n    interval: () => getDefault(\"carousel.interval\", 3500),\n    pauseHover: false,\n    repeat: false,\n    overlay: false,\n    indicators: true,\n    indicatorInside: false,\n    indicatorPosition: () => getDefault(\"carousel.indicatorPosition\", \"bottom\"),\n    indicatorStyle: () => getDefault(\"carousel.indicatorStyle\", \"dots\"),\n    itemsToShow: () => getDefault(\"carousel.itemsToShow\", 1),\n    itemsToList: () => getDefault(\"carousel.itemsToList\", 1),\n    arrows: () => getDefault(\"carousel.arrows\", true),\n    arrowsHover: () => getDefault(\"carousel.arrowsHover\", true),\n    iconPack: () => getDefault(\"carousel.iconPack\"),\n    iconSize: () => getDefault(\"carousel.iconSize\"),\n    iconPrev: () => getDefault(\"carousel.iconPrev\", \"chevron-left\"),\n    iconNext: () => getDefault(\"carousel.iconNext\", \"chevron-right\"),\n    iconAutoplayPause: () => getDefault(\"carousel.iconAutoplayPause\", \"pause\"),\n    iconAutoplayResume: () => getDefault(\"carousel.iconAutoplayResume\", \"play\"),\n    breakpoints: () => ({}),\n    ariaAutoplayPauseLabel: () =>\n        getDefault(\n            \"carousel.ariaAutoplayPauseLabel\",\n            \"Stop Automatic Slide Show\",\n        ),\n    ariaAutoplayResumeLabel: () =>\n        getDefault(\n            \"carousel.ariaAutoplayResumeLabel\",\n            \"Start Automatic Slide Show\",\n        ),\n    ariaNextLabel: () => getDefault(\"carousel.ariaNextLabel\", \"Next Slide\"),\n    ariaPreviousLabel: () =>\n        getDefault(\"carousel.ariaPreviousLabel\", \"Previous Slide\"),\n});\n\nconst emits = defineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {number} updated modelValue prop\n     */\n    \"update:model-value\": [value: number];\n    /**\n     * on carousel slide change event\n     * @param value {number} active index\n     */\n    change: [value: number];\n    /**\n     * on item click event\n     * @param event {event} native event\n     */\n    click: [event: Event];\n}>();\n\nconst rootRef = useTemplateRef(\"rootElement\");\n\n// provided data is a computed ref to ensure reactivity\nconst provideData = computed<CarouselComponent>(() => ({\n    activeIndex: activeIndex.value,\n    indicators: props.indicators,\n    total: total.value,\n    itemWidth: itemWidth.value,\n    onDrag: onDragStart,\n    onClick: (event: Event): void => emits(\"click\", event),\n    setActive: (index: number): void => switchTo(index),\n}));\n\n/** provide functionalities and data to child item components */\nconst { childItems } = useProviderParent({ rootRef, data: provideData });\n\n// the real index of the active item, use v-model to make it two-way binding\nconst activeIndex = defineModel<number>({ default: 0 });\n\nconst total = computed(() => childItems.value.length);\n\nconst indicatorItems = computed(() =>\n    childItems.value.filter(\n        (el, i) => mod(i, settings.value.itemsToList) === 0,\n    ),\n);\n\nlet resizeObserver: ResizeObserver | undefined;\nif (isClient && window.ResizeObserver) {\n    resizeObserver = new window.ResizeObserver(onRefresh);\n}\n\n/** watch specific props which need to refresh the component */\nwatch(\n    [\n        () => props.itemsToList,\n        () => props.itemsToShow,\n        () => props.arrowsHover,\n        () => props.repeat,\n    ],\n    () => onRefresh(),\n);\n\nconst windowWidth = ref(0);\n\nfunction onRefresh(): void {\n    activeIndex.value = 0;\n    // set HTML element with\n    windowWidth.value = window.innerWidth;\n    // trigger re creation of settings based on props\n    nextTick(() => triggerRef(settings));\n}\n\nonMounted(() => {\n    if (isClient) {\n        if (window.ResizeObserver && resizeObserver && rootRef.value)\n            resizeObserver.observe(rootRef.value);\n\n        // set HTML element with\n        windowWidth.value = window.innerWidth;\n\n        // a prefers-reduced-motion user setting must always override autoplay\n        const hasReducedMotion = window.matchMedia(\n            \"(prefers-reduced-motion: reduce)\",\n        );\n        if (!hasReducedMotion?.matches) startTimer();\n    }\n});\n\nonBeforeUnmount(() => {\n    if (isClient) {\n        if (window.ResizeObserver && resizeObserver)\n            resizeObserver.disconnect();\n\n        onDragEnd();\n        pauseTimer();\n    }\n});\n\nconst settings = computed<typeof props>(() => {\n    const breakpoints = Object.keys(props.breakpoints)\n        .map(Number)\n        .sort((a, b) => b - a);\n\n    const breakpoint = breakpoints.find(\n        (breakpoint) => windowWidth.value >= breakpoint,\n    );\n\n    const settings = toRaw(\n        breakpoint ? { ...props, ...props.breakpoints[breakpoint] } : props,\n    );\n\n    // prevent empty values\n    if (!settings.itemsToList) settings.itemsToList = 1;\n    if (!settings.itemsToShow) settings.itemsToShow = 1;\n    return readonly(settings);\n});\n\nconst itemWidth = computed(() => {\n    // Ensure component is mounted\n    if (!windowWidth.value || !rootRef.value) return 0;\n\n    const rect = rootRef.value.getBoundingClientRect();\n    return rect.width / settings.value.itemsToShow;\n});\n\n// #region --- Switch Events ---\n\nconst hasArrows = computed(\n    () =>\n        (settings.value.arrowsHover && isHovered.value) ||\n        !settings.value.arrowsHover,\n);\n\nconst hasPrev = computed(() => settings.value.repeat || activeIndex.value > 0);\n\nfunction onPrev(): void {\n    switchTo(activeIndex.value - settings.value.itemsToList);\n}\n\nconst hasNext = computed(\n    () =>\n        settings.value.repeat ||\n        activeIndex.value < total.value - settings.value.itemsToList,\n);\n\nfunction onNext(): void {\n    switchTo(activeIndex.value + settings.value.itemsToList);\n}\n\n/** Go to the first viable item */\nfunction onHomePressed(): void {\n    switchTo(0);\n}\n\n/** Go to the last viable item */\nfunction onEndPressed(): void {\n    switchTo(total.value - settings.value.itemsToList);\n}\n\n/**\n * Show the slide by index\n * @param index the real index of the slide\n */\nfunction switchTo(index: number = 0): void {\n    if (settings.value.repeat) index = mod(index, total.value);\n    index = bound(index, 0, total.value - 1);\n\n    activeIndex.value = index;\n    emits(\"change\", index);\n}\n\n/** Set focus on a tab item. */\nfunction onChange(item: ProviderItem): void {\n    switchTo(item.index);\n}\n\n// #endregion --- Switch Events ---\n\n// #region --- Autoplay Feature ---\n\nconst isHovered = ref(false);\nlet timer: ReturnType<typeof setTimeout> | undefined;\n/** deactive autoplay feature */\nconst isAutoplayPaused = ref(false);\n\nfunction onMouseEnter(): void {\n    isHovered.value = true;\n    if (props.autoplay && props.pauseHover) pauseTimer();\n}\n\nfunction onMouseLeave(): void {\n    isHovered.value = false;\n    if (props.autoplay && props.pauseHover) startTimer();\n}\n\n/** When autoplay is changed, start or pause timer accordingly */\nwatch(\n    () => props.autoplay,\n    (status) => {\n        if (status) startTimer();\n        else pauseTimer();\n    },\n);\n\n/** Since the timer can get paused at the end, if repeat is changed we need to restart it */\nwatch(\n    () => props.repeat,\n    (status) => {\n        if (status) startTimer();\n    },\n);\n\nfunction onToggleAutoplay(): void {\n    if (!isAutoplayPaused.value) {\n        isAutoplayPaused.value = true;\n        pauseTimer();\n    } else {\n        isAutoplayPaused.value = false;\n        startTimer();\n    }\n}\n\nfunction startTimer(): void {\n    if (!props.autoplay || timer) return;\n    if (isAutoplayPaused.value) return;\n    timer = setInterval(() => {\n        if (!props.repeat && !hasNext.value) pauseTimer();\n        else onNext();\n    }, props.interval);\n}\n\nfunction pauseTimer(): void {\n    if (timer) {\n        clearInterval(timer);\n        timer = undefined;\n    }\n}\n\n// #endregion --- Autoplay Feature ---\n\n// #region --- Drag & Drop Feature ---\n\nconst dragX = ref();\nconst delta = ref(0);\n\nconst isDragging = computed(() => isDefined(dragX.value));\n\nconst translation = computed(\n    () =>\n        -bound(\n            delta.value + activeIndex.value * itemWidth.value,\n            0,\n            (childItems.value.length - settings.value.itemsToShow) *\n                itemWidth.value,\n        ),\n);\n\n/** handle drag event */\nfunction onDragStart(event: TouchEvent | MouseEvent): void {\n    if (\n        isDragging.value ||\n        !settings.value.dragable ||\n        ((event as MouseEvent).button !== 0 && event.type !== \"touchstart\")\n    )\n        return;\n\n    delta.value = 0;\n    // get dragging start x value\n    dragX.value = !!(event as TouchEvent).touches\n        ? (event as TouchEvent).touches[0].clientX\n        : (event as MouseEvent).clientX;\n\n    // stop timer when dragging starts\n    pauseTimer();\n}\n\nfunction onDragOver(event: TouchEvent | MouseEvent): void {\n    if (!isDragging.value) return;\n\n    const dragEndX = !!(event as TouchEvent).touches\n        ? (\n              (event as TouchEvent).changedTouches[0] ||\n              (event as TouchEvent).touches[0]\n          ).clientX\n        : (event as MouseEvent).clientX;\n    // calc transition delta value\n    delta.value = dragX.value - dragEndX;\n}\n\nfunction onDragEnd(): void {\n    if (!isDragging.value) return;\n    // switch slide\n    const signCheck = sign(delta.value);\n    const results = Math.round(Math.abs(delta.value / itemWidth.value) + 0.15); // Hack\n    switchTo(activeIndex.value + signCheck * results);\n\n    // cleanup\n    delta.value = 0;\n    dragX.value = undefined;\n\n    // atart timer after dragging ends\n    startTimer();\n}\n\n// #endregion --- Drag & Drop Feature ---\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-carousel\"],\n    [\n        \"overlayClass\",\n        \"o-carousel__overlay\",\n        null,\n        computed(() => props.overlay),\n    ],\n);\n\nconst wrapperClasses = defineClasses([\"wrapperClass\", \"o-carousel__wrapper\"]);\n\nconst itemsClasses = defineClasses(\n    [\"itemsClass\", \"o-carousel__items\"],\n    [\"itemsDraggingClass\", \"o-carousel__items--dragging\", null, isDragging],\n);\n\nconst prevIconClasses = defineClasses(\n    [\"iconClass\", \"o-carousel__icon\"],\n    [\"iconPrevClass\", \"o-carousel__icon-prev\"],\n);\n\nconst nextIconClasses = defineClasses(\n    [\"iconClass\", \"o-carousel__icon\"],\n    [\"iconNextClass\", \"o-carousel__icon-next\"],\n);\n\nconst autoplayIconClasses = defineClasses(\n    [\"iconClass\", \"o-carousel__icon\"],\n    [\"iconAutoplayClass\", \"o-carousel__icon-autoplay\"],\n);\n\nconst indicatorsClasses = defineClasses(\n    [\"indicatorsClass\", \"o-carousel__indicators\"],\n    [\n        \"indicatorsInsideClass\",\n        \"o-carousel__indicators--inside\",\n        null,\n        computed(() => !!props.indicatorInside),\n    ],\n    [\n        \"indicatorsPositionClass\",\n        \"o-carousel__indicators--\",\n        computed(() => props.indicatorPosition),\n        computed(() => !!props.indicatorPosition),\n    ],\n);\n\nconst indicatorClasses = defineClasses([\n    \"indicatorClass\",\n    \"o-carousel__indicator\",\n]);\n\nconst indicatorItemClasses = defineClasses(\n    [\"indicatorItemClass\", \"o-carousel__indicator__item\"],\n    [\n        \"indicatorItemStyleClass\",\n        \"o-carousel__indicator__item--\",\n        computed(() => props.indicatorStyle),\n        computed(() => !!props.indicatorStyle),\n    ],\n);\n\nconst indicatorItemActiveClasses = defineClasses([\n    \"indicatorItemActiveClass\",\n    \"o-carousel__indicator__item--active\",\n]);\n\nfunction indicatorItemAppliedClasses(item: ProviderItem): ClassBind[] {\n    const activeClasses =\n        activeIndex.value === item.index\n            ? indicatorItemActiveClasses.value\n            : [];\n\n    return [...indicatorItemClasses.value, ...activeClasses];\n}\n</script>\n\n<template>\n    <div\n        ref=\"rootElement\"\n        data-oruga=\"carousel\"\n        :class=\"rootClasses\"\n        role=\"region\"\n        aria-roledescription=\"carousel\"\n        @mouseover=\"onMouseEnter\"\n        @mouseleave=\"onMouseLeave\"\n        @focusin=\"onMouseEnter\"\n        @focusout=\"onMouseLeave\"\n        @keydown.left=\"onPrev\"\n        @keydown.right=\"onNext\"\n        @keydown.home.prevent=\"onHomePressed\"\n        @keydown.end.prevent=\"onEndPressed\">\n        <div :class=\"wrapperClasses\">\n            <!--\n                @slot Override the pause/resume button\n                @binding {boolean} autoplay if autoplay is active\n                @binding {(): void} toggle toggle autoplay\n            -->\n            <slot\n                name=\"pause\"\n                :autoplay=\"!isAutoplayPaused\"\n                :toggle=\"onToggleAutoplay\">\n                <template v-if=\"autoplay\">\n                    <o-icon\n                        :class=\"autoplayIconClasses\"\n                        :pack=\"iconPack\"\n                        :icon=\"\n                            !isAutoplayPaused\n                                ? iconAutoplayPause\n                                : iconAutoplayResume\n                        \"\n                        :size=\"iconSize\"\n                        clickable\n                        :aria-label=\"\n                            !isAutoplayPaused\n                                ? ariaAutoplayPauseLabel\n                                : ariaAutoplayResumeLabel\n                        \"\n                        @click=\"onToggleAutoplay\" />\n                </template>\n            </slot>\n\n            <!--\n                @slot Override the arrows\n                @binding {boolean} has-prev has prev arrow button \n                @binding {boolean} has-next has next arrow button \n                @binding {(): void} prev switch to prev item function\n                @binding {(): void} next switch to next item function\n            -->\n            <slot\n                name=\"arrow\"\n                :has-prev=\"hasPrev\"\n                :prev=\"onPrev\"\n                :has-next=\"hasNext\"\n                :next=\"onNext\">\n                <template v-if=\"arrows\">\n                    <o-icon\n                        v-show=\"hasArrows && hasPrev\"\n                        :class=\"prevIconClasses\"\n                        :pack=\"iconPack\"\n                        :icon=\"iconPrev\"\n                        :size=\"iconSize\"\n                        clickable\n                        :aria-label=\"ariaPreviousLabel\"\n                        @click=\"onPrev\" />\n                    <o-icon\n                        v-show=\"hasArrows && hasNext\"\n                        :class=\"nextIconClasses\"\n                        :pack=\"iconPack\"\n                        :icon=\"iconNext\"\n                        :size=\"iconSize\"\n                        clickable\n                        :aria-label=\"ariaNextLabel\"\n                        @click=\"onNext\" />\n                </template>\n            </slot>\n\n            <div\n                :class=\"itemsClasses\"\n                :style=\"'transform:translateX(' + translation + 'px)'\"\n                aria-roledescription=\"carousel-slide\"\n                aria-atomic=\"false\"\n                :aria-live=\"autoplay ? 'off' : 'polite'\"\n                @dragend=\"onDragEnd\"\n                @dragover=\"onDragOver\"\n                @touchmove=\"onDragOver\"\n                @touchend=\"onDragEnd\">\n                <!--\n                    @slot Display carousel item\n                -->\n                <slot />\n            </div>\n        </div>\n\n        <!--\n            @slot Override the indicators\n            @binding {number} active active index \n            @binding {(idx: number): void} switch-to switch to item function\n        -->\n        <slot name=\"indicators\" :active=\"activeIndex\" :switch-to=\"switchTo\">\n            <div\n                v-if=\"indicators\"\n                :class=\"indicatorsClasses\"\n                role=\"tablist\"\n                aria-label=\"Slides\">\n                <div\n                    v-for=\"item in indicatorItems\"\n                    :id=\"`carousel-${item.identifier}`\"\n                    :key=\"item.index\"\n                    :class=\"indicatorClasses\"\n                    role=\"tab\"\n                    :tabindex=\"modelValue === item.index ? '0' : '-1'\"\n                    :aria-label=\"`Slide ${item.identifier}`\"\n                    :aria-controls=\"`carouselpanel-${item.identifier}`\"\n                    :aria-selected=\"modelValue === item.index\"\n                    @click=\"onChange(item)\"\n                    @keydown.enter=\"onChange(item)\"\n                    @keydown.space=\"onChange(item)\">\n                    <!--\n                            @slot Override the indicator elements\n                            @binding {index} index indicator index \n                        -->\n                    <slot :index=\"item.index\" name=\"indicator\">\n                        <span :class=\"indicatorItemAppliedClasses(item)\" />\n                    </slot>\n                </div>\n            </div>\n        </slot>\n\n        <template v-if=\"overlay\">\n            <!-- @slot Overlay element -->\n            <slot name=\"overlay\" />\n        </template>\n    </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport { defineClasses, useProviderChild } from \"@/composables\";\n\nimport type { CarouselComponent } from \"./types\";\nimport type { CarouselItemProps } from \"./props\";\n\n/**\n * A Slideshow item used by the carousel.\n * @displayName Carousel Item\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OCarouselItem\",\n    configField: \"carousel\",\n});\n\nconst props = withDefaults(defineProps<CarouselItemProps>(), {\n    override: undefined,\n    clickable: false,\n});\n\n/** inject functionalities and data from the parent component */\nconst { parent, item } = useProviderChild<CarouselComponent>();\n\nconst isActive = computed(() => parent.value.activeIndex === item.value.index);\n\nconst itemStyle = computed(() => ({ width: `${parent.value.itemWidth}px` }));\n\nfunction onClick(event: Event): void {\n    if (isActive.value) parent.value.onClick(event);\n    if (props.clickable) parent.value.setActive(item.value.index);\n}\n\n// --- Computed Component Classes ---\n\nconst itemClasses = defineClasses(\n    [\"itemClass\", \"o-carousel__item\"],\n    [\"itemActiveClass\", \"o-carousel__item--active\", null, isActive],\n    [\n        \"itemClickableClass\",\n        \"o-carousel__item--clickable\",\n        null,\n        computed(() => props.clickable),\n    ],\n);\n</script>\n\n<template>\n    <div\n        :id=\"`carouselpanel-${item.identifier}`\"\n        data-oruga=\"carousel-item\"\n        :data-id=\"`carousel-${item.identifier}`\"\n        :class=\"itemClasses\"\n        :style=\"itemStyle\"\n        :role=\"parent.indicators ? 'tabpanel' : 'group'\"\n        :aria-labelledby=\"`carousel-${item.identifier}`\"\n        aria-roledescription=\"slide\"\n        :aria-label=\"`${item.index + 1} of ${parent.total}`\"\n        draggable=\"true\"\n        @click=\"onClick\"\n        @keydown.enter=\"onClick\"\n        @keydown.space=\"onClick\"\n        @dragstart=\"parent.onDrag\"\n        @touchstart=\"parent.onDrag\">\n        <!--\n            @slot Default content\n        -->\n        <slot />\n    </div>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Carousel from \"./Carousel.vue\";\nimport CarouselItem from \"./CarouselItem.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export carousel plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Carousel);\n        registerComponent(app, CarouselItem);\n    },\n} as Plugin;\n\n/** export carousel components */\nexport { Carousel as OCarousel, CarouselItem as OCarouselItem };\n","<script setup lang=\"ts\" generic=\"T\">\nimport { computed, useAttrs, useId, useSlots, useTemplateRef } from \"vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { defineClasses, useInputHandler } from \"@/composables\";\n\nimport { injectField } from \"../field/fieldInjection\";\n\nimport type { CheckboxProps } from \"./props\";\n\n/**\n * Select a single or grouped options.\n * @displayName Checkbox\n * @style _checkbox.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OCheckbox\",\n    configField: \"checkbox\",\n    inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<CheckboxProps<T>>(), {\n    override: undefined,\n    modelValue: undefined,\n    id: () => useId(),\n    variant: () => getDefault(\"checkbox.variant\"),\n    size: () => getDefault(\"checkbox.size\"),\n    label: undefined,\n    indeterminate: false,\n    required: false,\n    disabled: false,\n    name: undefined,\n    nativeValue: undefined,\n    trueValue: undefined,\n    falseValue: undefined,\n    autocomplete: () => getDefault(\"checkbox.autocomplete\", \"off\"),\n    useHtml5Validation: () => getDefault(\"useHtml5Validation\", true),\n    customValidity: \"\",\n});\n\nconst emits = defineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {T | T[]} updated modelValue prop\n     */\n    \"update:model-value\": [value: T | T[]];\n    /**\n     * on input change event\n     * @param value {T | T[]} input value\n     * @param event {Event} native event\n     */\n    input: [value: T | T[], event: Event];\n    /**\n     * on input focus event\n     * @param event {Event} native event\n     */\n    focus: [event: Event];\n    /**\n     * on input blur event\n     * @param event {Event} native event\n     */\n    blur: [event: Event];\n    /**\n     * on input invalid event\n     * @param event {Event} native event\n     */\n    invalid: [event: Event];\n}>();\n\nconst inputRef = useTemplateRef(\"inputElement\");\n\n// use form input functionalities\nconst { checkHtml5Validity, onBlur, onFocus, onInvalid, setFocus } = useInputHandler(\n    inputRef,\n    emits,\n    props,\n);\n\n// inject parent field component if used inside one\nconst { parentField } = injectField();\n\n// set field labelId or create a unique label id if a label is given\nconst labelId =\n    !!parentField.value || !!props.label || !!useSlots().default\n        ? parentField.value?.labelId || useId()\n        : undefined;\n\n// if no `label` is given and `id` is given set as `for` property on o-field wrapper\nif (!props.label && props.id) parentField.value?.setInputId(props.id);\n\nconst vmodel = defineModel<T | T[]>({ default: undefined });\n\nconst isChecked = computed(\n    () =>\n        vmodel.value === (props.trueValue ?? true) ||\n        (Array.isArray(vmodel.value) &&\n            vmodel.value.includes(props.nativeValue as T)),\n);\n\nfunction onInput(event: Event): void {\n    emits(\"input\", vmodel.value, event);\n}\n\n// --- Computed Component Classes ---\n\nconst attrs = useAttrs();\n\nconst inputBind = computed(() => ({\n    ...parentField.value?.inputAttrs,\n    ...attrs,\n}));\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-checkbox\"],\n    [\n        \"sizeClass\",\n        \"o-checkbox--\",\n        computed(() => props.size),\n        computed(() => !!props.size),\n    ],\n    [\n        \"variantClass\",\n        \"o-checkbox--\",\n        computed(() => props.variant),\n        computed(() => !!props.variant),\n    ],\n    [\n        \"disabledClass\",\n        \"o-checkbox--disabled\",\n        null,\n        computed(() => props.disabled),\n    ],\n    [\"checkedClass\", \"o-checkbox--checked\", null, isChecked],\n    [\n        \"indeterminateClass\",\n        \"o-checkbox--indeterminate\",\n        null,\n        computed(() => props.indeterminate),\n    ],\n);\n\nconst inputClasses = defineClasses([\"inputClass\", \"o-checkbox__input\"]);\n\nconst labelClasses = defineClasses([\"labelClass\", \"o-checkbox__label\"]);\n\n// --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ checkHtml5Validity, focus: setFocus, value: vmodel });\n</script>\n\n<template>\n    <div data-oruga=\"checkbox\" :class=\"rootClasses\">\n        <input\n            v-bind=\"inputBind\"\n            :id=\"id\"\n            ref=\"inputElement\"\n            v-model=\"vmodel\"\n            type=\"checkbox\"\n            data-oruga-input=\"checkbox\"\n            :class=\"inputClasses\"\n            :name=\"name\"\n            :value=\"nativeValue\"\n            :true-value=\"trueValue ?? true\"\n            :false-value=\"falseValue ?? false\"\n            :required=\"required\"\n            :indeterminate=\"indeterminate\"\n            :disabled=\"disabled\"\n            :autocomplete=\"autocomplete\"\n            :aria-checked=\"indeterminate ? 'mixed' : isChecked\"\n            :aria-labelledby=\"labelId\"\n            @blur=\"onBlur\"\n            @focus=\"onFocus\"\n            @invalid=\"onInvalid\"\n            @change=\"onInput\" />\n\n        <label\n            v-if=\"label || $slots.default\"\n            :id=\"labelId\"\n            :for=\"id\"\n            :class=\"labelClasses\">\n            <!--\n                @slot Content slot, default is label prop\n            -->\n            <slot>{{ label }}</slot>\n        </label>\n    </div>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Checkbox from \"./Checkbox.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export checkbox plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Checkbox);\n    },\n} as Plugin;\n\n/** export table components */\nexport { Checkbox as OCheckbox };\n","<script setup lang=\"ts\">\nimport { computed, useId } from \"vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { defineClasses } from \"@/composables\";\n\nimport type { CollapseProps } from \"./props\";\n\n/**\n * An easy way to toggle what you want.\n * @displayName Collapse\n * @style _collapse.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OCollapse\",\n    configField: \"collapse\",\n});\n\nconst props = withDefaults(defineProps<CollapseProps>(), {\n    override: undefined,\n    open: true,\n    expanded: false,\n    animation: () => getDefault(\"collapse.animation\", \"fade\"),\n    position: () => getDefault(\"collapse.position\", \"top\"),\n    contentId: () => useId(),\n    triggerId: () => useId(),\n});\n\nconst emits = defineEmits<{\n    /**\n     * open prop two-way binding\n     * @param value {boolean} updated open prop\n     */\n    \"update:open\": [value: boolean];\n    /** on collapse opened */\n    open: [];\n    /** on collapse closed */\n    close: [];\n}>();\n\nconst isOpen = defineModel<boolean>(\"open\", { default: true });\n\n/** Toggle and emit events */\nfunction toggle(): void {\n    isOpen.value = !isOpen.value;\n    if (isOpen.value) emits(\"open\");\n    else emits(\"close\");\n}\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-collapse\"],\n    [\n        \"positionClass\",\n        \"o-collapse--\",\n        computed(() => props.position),\n        computed(() => !!props.position),\n    ],\n);\n\nconst triggerClasses = defineClasses(\n    [\"triggerClass\", \"o-collapse__trigger\"],\n    [\n        \"expandedClass\",\n        \"o-collapse__trigger--expanded\",\n        null,\n        computed(() => props.expanded),\n    ],\n);\n\nconst contentClasses = defineClasses([\"contentClass\", \"o-collapse__content\"]);\n</script>\n\n<template>\n    <div data-oruga=\"collapse\" :class=\"rootClasses\">\n        <div\n            :id=\"triggerId\"\n            :class=\"triggerClasses\"\n            role=\"button\"\n            tabindex=\"0\"\n            :aria-controls=\"contentId\"\n            :aria-expanded=\"isOpen\"\n            @click=\"toggle\"\n            @keydown.enter.prevent=\"toggle\"\n            @keydown.space.prevent=\"toggle\">\n            <!--\n                @slot Define the collapse trigger\n                @binding {boolean} open collapse open state \n             -->\n            <slot name=\"trigger\" :open=\"isOpen\" />\n        </div>\n\n        <Transition :name=\"animation\">\n            <div\n                v-show=\"isOpen\"\n                :id=\"contentId\"\n                :class=\"contentClasses\"\n                :aria-labelledby=\"triggerId\">\n                <!--\n                    @slot Default content\n                -->\n                <slot />\n            </div>\n        </Transition>\n    </div>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Collapse from \"./Collapse.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export collapse plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Collapse);\n    },\n} as Plugin;\n\n/** export collapse components */\nexport { Collapse as OCollapse };\n","<script setup lang=\"ts\" generic=\"T, IsMultiple extends boolean = false\">\nimport {\n    computed,\n    watch,\n    nextTick,\n    useAttrs,\n    useId,\n    useTemplateRef,\n} from \"vue\";\n\nimport OIcon from \"../icon/Icon.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { isDefined, isTrueish } from \"@/utils/helpers\";\nimport {\n    defineClasses,\n    isGroupOption,\n    normalizeOptions,\n    useInputHandler,\n    useSequentialId,\n} from \"@/composables\";\n\nimport { injectField } from \"../field/fieldInjection\";\n\nimport type { SelectProps } from \"./props\";\n\n/**\n * Select an item in a list. Use with Field to access all functionalities.\n * @displayName Select\n * @style _select.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OSelect\",\n    configField: \"select\",\n    inheritAttrs: false,\n});\n\ntype ModelValue = SelectProps<T, IsMultiple>[\"modelValue\"];\n\nconst props = withDefaults(defineProps<SelectProps<T, IsMultiple>>(), {\n    override: undefined,\n    modelValue: undefined,\n    // multiple: false,\n    options: undefined,\n    size: () => getDefault(\"select.size\"),\n    variant: () => getDefault(\"select.variant\"),\n    placeholder: undefined,\n    disabled: false,\n    required: false,\n    expanded: () => getDefault(\"select.expanded\", false),\n    rounded: false,\n    nativeSize: undefined,\n    iconPack: () => getDefault(\"select.iconPack\"),\n    icon: () => getDefault(\"select.icon\"),\n    iconClickable: false,\n    iconRight: () => getDefault(\"select.iconRight\"),\n    iconRightClickable: false,\n    iconRightVariant: undefined,\n    id: () => useId(),\n    useHtml5Validation: () => getDefault(\"useHtml5Validation\", true),\n    customValidation: \"\",\n    autocomplete: () => getDefault(\"select.autocomplete\", \"off\"),\n    statusIcon: () => getDefault(\"statusIcon\", true),\n});\n\nconst emits = defineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {T | T[]} updated modelValue prop\n     */\n    \"update:model-value\": [value: ModelValue];\n    /**\n     * on input focus event\n     * @param event {Event} native event\n     */\n    focus: [event: Event];\n    /**\n     * on input blur event\n     * @param event {Event} native event\n     */\n    blur: [event: Event];\n    /**\n     * on input invalid event\n     * @param event {Event} native event\n     */\n    invalid: [event: Event];\n    /**\n     * on icon click event\n     * @param event {Event} native event\n     */\n    \"icon-click\": [event: Event];\n    /**\n     * on icon right click event\n     * @param event {Event} native event\n     */\n    \"icon-right-click\": [event: Event];\n}>();\n\nconst selectRef = useTemplateRef(\"selectElement\");\n\n// use form input functionality\nconst { checkHtml5Validity, onBlur, onFocus, onInvalid, setFocus, isValid } =\n    useInputHandler(selectRef, emits, props);\n\n// inject parent field component if used inside one\nconst { parentField, statusVariant, statusVariantIcon } = injectField();\n\n// if `id` is given set as `for` property on o-field wrapper\nif (props.id) parentField?.value?.setInputId(props.id);\n\nconst vmodel = defineModel<ModelValue>({\n    get: (value) =>\n        typeof value !== \"undefined\"\n            ? value\n            : ((props.multiple ? [] : \"\") as ModelValue),\n    set: (value) =>\n        typeof value !== \"undefined\"\n            ? value\n            : ((props.multiple ? [] : undefined) as ModelValue),\n    default: undefined,\n});\n\n/**\n * When v-model is changed:\n *  1. Set parent field filled state.\n *  2. Check html5 valdiation\n */\nwatch(\n    vmodel,\n    (value) => {\n        if (parentField?.value) parentField.value.setFilled(!!value);\n        if (!isValid.value) checkHtml5Validity();\n    },\n    { immediate: true, flush: \"post\" },\n);\n\n// create a unique id sequence\nconst { nextSequence } = useSequentialId();\n\n/** normalized programamtic options */\nconst normalizedOptions = computed(() =>\n    normalizeOptions<T>(props.options, nextSequence),\n);\n\nconst placeholderVisible = computed(\n    () =>\n        !isTrueish(props.multiple) &&\n        (!isDefined(vmodel.value) || vmodel.value === \"\"),\n);\n\n// --- Icon Feature ---\n\nconst hasIconRight = computed(\n    () =>\n        (!!props.iconRight && !isTrueish(props.multiple)) ||\n        (props.statusIcon && !!statusVariantIcon.value),\n);\n\nconst rightIcon = computed(() =>\n    props.iconRight ? props.iconRight : statusVariantIcon.value,\n);\n\nconst rightIconVariant = computed(() =>\n    props.iconRight\n        ? props.iconRightVariant || props.variant\n        : statusVariant.value,\n);\n\nfunction iconClick(emit, event: Event): void {\n    emits(emit, event);\n    nextTick(() => setFocus());\n}\n\nfunction leftIconClick(event: Event): void {\n    if (props.iconClickable) iconClick(\"icon-click\", event);\n}\n\nfunction rightIconClick(event: Event): void {\n    if (props.iconRightClickable) iconClick(\"icon-right-click\", event);\n}\n\n// --- Computed Component Classes ---\n\nconst attrs = useAttrs();\n\nconst inputBind = computed(() => ({\n    ...parentField?.value?.inputAttrs,\n    ...attrs,\n}));\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-select\"],\n    [\n        \"sizeClass\",\n        \"o-select--\",\n        computed(() => props.size),\n        computed(() => !!props.size),\n    ],\n    [\n        \"variantClass\",\n        \"o-select--\",\n        computed(() => statusVariant.value || props.variant),\n        computed(() => !!statusVariant.value || !!props.variant),\n    ],\n    [\n        \"expandedClass\",\n        \"o-select--expanded\",\n        null,\n        computed(() => props.expanded),\n    ],\n    [\n        \"disabledClass\",\n        \"o-select--disabled\",\n        null,\n        computed(() => isTrueish(props.disabled)),\n    ],\n    [\n        \"roundedClass\",\n        \"o-select--rounded\",\n        null,\n        computed(() => isTrueish(props.rounded)),\n    ],\n    [\"hasIconRightClass\", \"o-select--icon-right\", null, hasIconRight],\n    [\n        \"multipleClass\",\n        \"o-select--multiple\",\n        null,\n        computed(() => isTrueish(props.multiple)),\n    ],\n);\n\nconst selectClasses = defineClasses(\n    [\"selectClass\", \"o-select__input\"],\n    [\n        \"iconLeftSpaceClass\",\n        \"o-select__input--iconspace-left\",\n        null,\n        computed(() => !!props.icon),\n    ],\n    [\n        \"iconRightSpaceClass\",\n        \"o-select__input--iconspace-right\",\n        null,\n        hasIconRight,\n    ],\n    [\n        \"placeholderClass\",\n        \"o-select__input--placeholder\",\n        null,\n        placeholderVisible,\n    ],\n    [\n        \"arrowedClass\",\n        \"o-select__input--arrowed\",\n        null,\n        computed(() => !hasIconRight.value && !isTrueish(props.multiple)),\n    ],\n);\n\nconst iconLeftClasses = defineClasses([\"iconLeftClass\", \"o-select__icon-left\"]);\n\nconst iconRightClasses = defineClasses([\n    \"iconRightClass\",\n    \"o-select__icon-right\",\n]);\n\n// --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ checkHtml5Validity, focus: setFocus, value: vmodel });\n</script>\n\n<template>\n    <div data-oruga=\"select\" :class=\"rootClasses\">\n        <o-icon\n            v-if=\"icon\"\n            :class=\"iconLeftClasses\"\n            :clickable=\"iconClickable\"\n            :icon=\"icon\"\n            :pack=\"iconPack\"\n            :size=\"size\"\n            @click=\"leftIconClick($event)\" />\n\n        <select\n            v-bind=\"inputBind\"\n            :id=\"id\"\n            ref=\"selectElement\"\n            v-model=\"vmodel\"\n            data-oruga-input=\"select\"\n            :class=\"selectClasses\"\n            :autocomplete=\"autocomplete\"\n            :multiple=\"props.multiple\"\n            :size=\"nativeSize\"\n            :disabled=\"disabled\"\n            :required=\"required\"\n            @blur=\"onBlur\"\n            @focus=\"onFocus\"\n            @invalid=\"onInvalid\">\n            <template v-if=\"placeholder || $slots.placeholder\">\n                <option v-if=\"placeholderVisible\" value=\"\" disabled hidden>\n                    <!--\n                        @slot Override the placeholder\n                    -->\n                    <slot name=\"placeholder\">\n                        {{ placeholder }}\n                    </slot>\n                </option>\n            </template>\n\n            <!--\n                @slot Override the options, default is options prop\n            -->\n            <slot>\n                <template v-for=\"option in normalizedOptions\" :key=\"option.key\">\n                    <optgroup\n                        v-if=\"isGroupOption(option)\"\n                        v-show=\"!option.hidden\"\n                        v-bind=\"option.attrs\"\n                        :label=\"option.label\"\n                        :value=\"option.value\">\n                        <option\n                            v-for=\"_option in option.options\"\n                            v-show=\"!_option.hidden\"\n                            v-bind=\"_option.attrs\"\n                            :key=\"_option.key\"\n                            :value=\"_option.value\"\n                            :selected=\"option.value === vmodel\">\n                            {{ _option.label }}\n                        </option>\n                    </optgroup>\n\n                    <option\n                        v-else\n                        v-show=\"!option.hidden\"\n                        v-bind=\"option.attrs\"\n                        :value=\"option.value\"\n                        :selected=\"option.value === vmodel\">\n                        {{ option.label }}\n                    </option>\n                </template>\n            </slot>\n        </select>\n\n        <o-icon\n            v-if=\"hasIconRight\"\n            :class=\"iconRightClasses\"\n            :icon=\"rightIcon\"\n            :pack=\"iconPack\"\n            :size=\"size\"\n            :variant=\"rightIconVariant\"\n            :clickable=\"iconRightClickable\"\n            @click=\"rightIconClick\" />\n    </div>\n</template>\n","<script setup lang=\"ts\">\nimport {\n    computed,\n    useAttrs,\n    ref,\n    watch,\n    nextTick,\n    useTemplateRef,\n    type PropType,\n} from \"vue\";\n\nimport ODropdown from \"../dropdown/Dropdown.vue\";\nimport ODropdownItem from \"../dropdown/DropdownItem.vue\";\nimport OInput from \"../input/Input.vue\";\n\nimport { isDate, isDefined, isMobileAgent, isTrueish } from \"@/utils/helpers\";\nimport { isClient } from \"@/utils/ssr\";\nimport {\n    getActiveClasses,\n    useEventListener,\n    useInputHandler,\n} from \"@/composables\";\n\nimport { injectField } from \"../field/fieldInjection\";\n\nimport type { ClassBind, ComponentClass } from \"@/types\";\n\n/**\n * This is a internal used component.\n * Used by Datepicker and Timepicker.\n */\ndefineOptions({\n    name: \"OPickerWrapper\",\n});\n\nconst props = defineProps({\n    /** the internal input value */\n    value: {\n        type: [Date, Array] as PropType<Date | Date[] | undefined>,\n        default: undefined,\n    },\n    /** the active state of the dropdown */\n    active: { type: Boolean, default: false },\n    /** parent picker component props  */\n    pickerProps: { type: Object, required: true },\n    /** data-oruga attribute value */\n    dataOruga: { type: String, required: true },\n    /** format props value to input value */\n    formatter: {\n        type: Function as PropType<\n            (value: Date | Date[] | undefined, isNative: boolean) => string\n        >,\n        required: true,\n    },\n    /** parse input value to props value */\n    parser: {\n        type: Function as PropType<\n            (value: string, isNative: boolean) => Date | Date[] | undefined\n        >,\n        required: true,\n    },\n    type: { type: String, required: true },\n    step: { type: String, default: undefined },\n    min: { type: Date, default: undefined },\n    max: { type: Date, default: undefined },\n    stayOpen: { type: Boolean, default: false },\n    /** the DateTimeFormat object to watch for to update the parsed input value */\n    dtf: { type: Object, default: undefined },\n    rootClasses: { type: Array as PropType<ClassBind[]>, required: true },\n    dropdownClasses: { type: Array as PropType<ClassBind[]>, required: true },\n    boxClass: { type: Array as PropType<ComponentClass>, required: true },\n});\n\nconst emits = defineEmits<{\n    /**\n     * active prop two-way binding\n     * @param value {Date, Date[]} updated active prop\n     */\n    \"update:value\": [value: Date | Date[] | undefined];\n    /**\n     * active prop two-way binding\n     * @param value {boolean} updated active prop\n     */\n    \"update:active\": [value: boolean];\n    /** on input focus event */\n    focus: [event: Event];\n    /** on input blur event */\n    blur: [event: Event];\n    /** on input invalid event */\n    invalid: [event: Event];\n    /** on icon click event */\n    \"icon-click\": [event: Event];\n    /** on icon right click event */\n    \"icon-right-click\": [event: Event];\n    /** on dropdown left button press event */\n    left: [event: Event];\n    /** on dropdown right button press event */\n    right: [event: Event];\n}>();\n\nconst isMobileNative = computed(\n    () =>\n        !isTrueish(props.pickerProps.inline) &&\n        isTrueish(props.pickerProps.mobileNative) &&\n        isMobileAgent.any(),\n);\n\n// inject parent field component if used inside one\nconst { parentField } = injectField();\n\nconst dropdownRef = useTemplateRef(\"dropdownComponent\");\nconst inputRef = useTemplateRef(\"inputComponent\");\nconst nativeInputRef = useTemplateRef(\"nativeInputComponent\");\n\nconst elementRef = computed(() =>\n    isMobileNative.value ? nativeInputRef.value : inputRef.value,\n);\n\n// use form input functionality for native input\nconst {\n    input,\n    checkHtml5Validity,\n    setFocus,\n    onBlur,\n    onFocus,\n    onInvalid,\n    isValid,\n} = useInputHandler<HTMLInputElement>(elementRef, emits, props.pickerProps);\n\n/**\n * Show input as text for placeholder,\n * when placeholder and no native value is given.\n */\nconst initialNativeType =\n    !isDefined(props.pickerProps.placeholder) || isTrueish(props.value)\n        ? props.type\n        : \"text\";\n\n/** the v-model value of the input */\nconst inputValue = ref(\"\");\n\n/**\n * When v-model is changed:\n *  1. Update internal value.\n *  2. Close picker.\n *  3. If it's invalid, validate again.\n */\nwatch(\n    () => props.value,\n    (value) => {\n        // update internal value\n        inputValue.value = props.formatter(value, isMobileNative.value);\n\n        // toggle picker if not stay open\n        if (!isMobileNative.value && !props.stayOpen) togglePicker(false);\n        // validate if its invalid\n        if (!isValid.value) checkHtml5Validity();\n    },\n    { immediate: true },\n);\n\n// update the parsed input value when the dtf change\nwatch(\n    () => props.dtf,\n    () => setValue(inputValue.value),\n);\n\n/** Set the vmodel value and update the prop value */\nfunction setValue(value: string): void {\n    // parse to date\n    let date = props.parser(value, isMobileNative.value);\n\n    // check min/max dates\n    if (Array.isArray(date)) date = date.map(checkMinMaxDate);\n    else if (isDefined(date)) date = checkMinMaxDate(date);\n\n    nextTick(\n        () =>\n            // reparse to string for internal value\n            (inputValue.value = props.formatter(date, isMobileNative.value)),\n    );\n\n    // update the prop value\n    emits(\"update:value\", date);\n}\n\nfunction checkMinMaxDate(date: Date): Date {\n    if (!isDate(date)) return date;\n    if (props.min && date < props.min) date = props.min;\n    else if (props.max && date > props.max) date = props.max;\n    return date;\n}\n\nconst isActive = defineModel<boolean>(\"active\", { default: false });\n\nwatch(isActive, onActiveChange);\n\nconst triggers = computed(() =>\n    isTrueish(props.pickerProps.openOnFocus) ? [\"click\"] : [],\n);\n\nif (isClient) useEventListener(document, \"keyup\", onKeyPress);\n\n/** Keypress event that is bound to the document. */\nfunction onKeyPress(event: KeyboardEvent): void {\n    if (isActive.value && (event.key === \"Escape\" || event.key === \"Esc\"))\n        togglePicker(false);\n}\n\n// --- PICKER EVENT HANDLER ---\n\n/** Toggle picker */\nfunction togglePicker(active: boolean): void {\n    if (!dropdownRef.value) return;\n    if (active || isTrueish(props.pickerProps.closeOnClick))\n        nextTick(() => (isActive.value = active));\n}\n\n/** Avoid dropdown toggle when is already visible */\nfunction onInputClick(event): void {\n    if (isActive.value) event.stopPropagation();\n}\n\n/** Emit 'blur' event on dropdown is not active (closed) */\nfunction onActiveChange(value: boolean): void {\n    if (value) onFocus(new Event(\"focus\"));\n    else if (!value) onBlur(new Event(\"blur\"));\n}\n\n// --- NATIVE EVENT HANDLER ---\n\nfunction onChange(event: Event): void {\n    setValue((event.target as HTMLInputElement).value);\n}\n\nfunction onNativeClick(event: Event): void {\n    // do nothing if client is not mobile\n    if (!isMobileNative.value || !input.value) return;\n\n    // when input is not editable jet\n    if (input.value.type === \"text\") {\n        event.preventDefault();\n        event.stopPropagation();\n\n        // blur the current state to remove active native keyboards for type 'text'\n        input.value.blur();\n\n        setTimeout(() => {\n            if (!input.value) return;\n            // make the input editable\n            input.value.readOnly = false;\n            input.value.type = props.type;\n\n            // focus the underlaying input element again to open native keyboards for type 'date'\n            setFocus();\n        }, 50);\n    }\n}\n\nfunction onNativeFocus(event: Event): void {\n    // do nothing if client is not mobile\n    if (!isMobileNative.value || !input.value) return;\n\n    // when input is not editable jet\n    if (input.value.type === \"text\") {\n        // prevent focus\n        event.preventDefault();\n        event.stopPropagation();\n    }\n    // only emit focus event if editable\n    else onFocus(event);\n}\n\nfunction onNativeBlur(event: Event): void {\n    // do nothing if client is not mobile\n    if (!isMobileNative.value || !input.value) return;\n\n    // when the input does not have any value\n    if (!input.value.value) {\n        // make the input uneditable\n        input.value.readOnly = true;\n        input.value.type = \"text\";\n    }\n    // emit blur event\n    onBlur(event);\n}\n\nfunction onNativeChange(event: Event): void {\n    const value = (event.target as HTMLInputElement).value\n        ? (event.target as HTMLInputElement).value\n        : \"\";\n\n    // when the input does not have any value\n    if (!value && input.value) {\n        input.value.value = value;\n        input.value.blur();\n    }\n\n    setValue(value);\n}\n\n// --- Computed Component Classes ---\n\nconst attrs = useAttrs();\n\nconst inputBind = computed(() => ({\n    ...parentField?.value?.inputAttrs,\n    ...attrs,\n    inputClass: props.pickerProps.inputClass,\n    ...props.pickerProps.inputClasses,\n}));\n\nconst dropdownBind = computed(() => ({\n    \"root-class\": getActiveClasses(props.dropdownClasses),\n    \"teleport-class\": getActiveClasses(props.rootClasses),\n    ...props.pickerProps.dropdownClasses,\n}));\n\n// --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ checkHtml5Validity, focus: setFocus });\n</script>\n\n<template>\n    <div :data-oruga=\"dataOruga\" :class=\"rootClasses\" @click=\"onNativeClick\">\n        <o-dropdown\n            v-if=\"!isMobileNative\"\n            ref=\"dropdownComponent\"\n            v-bind=\"dropdownBind\"\n            v-model:active=\"isActive\"\n            :triggers=\"triggers\"\n            :position=\"pickerProps.position\"\n            :disabled=\"pickerProps.disabled\"\n            :inline=\"pickerProps.inline\"\n            :mobile-modal=\"pickerProps.mobileModal\"\n            :desktop-modal=\"pickerProps.desktopModal\"\n            :mobile-breakpoint=\"pickerProps.mobileBreakpoint\"\n            :teleport=\"pickerProps.teleport\">\n            <template v-if=\"!pickerProps.inline\" #trigger>\n                <slot name=\"trigger\">\n                    <o-input\n                        ref=\"inputComponent\"\n                        v-bind=\"inputBind\"\n                        v-model=\"inputValue\"\n                        :placeholder=\"pickerProps.placeholder\"\n                        :size=\"pickerProps.size\"\n                        :icon-pack=\"pickerProps.iconPack\"\n                        :icon=\"pickerProps.icon\"\n                        :icon-right=\"pickerProps.iconRight\"\n                        :icon-right-clickable=\"pickerProps.iconRightClickable\"\n                        :expanded=\"pickerProps.expanded\"\n                        :rounded=\"pickerProps.rounded\"\n                        :disabled=\"pickerProps.disabled\"\n                        :readonly=\"pickerProps.readonly\"\n                        autocomplete=\"off\"\n                        :use-html5-validation=\"false\"\n                        @invalid=\"onInvalid\"\n                        @click=\"onInputClick\"\n                        @keyup.enter=\"togglePicker(true)\"\n                        @change=\"onChange\"\n                        @focus=\"onFocus\"\n                        @blur=\"onBlur\"\n                        @icon-click=\"$emit('icon-click', $event)\"\n                        @icon-right-click=\"$emit('icon-right-click', $event)\" />\n                </slot>\n            </template>\n\n            <o-dropdown-item\n                override\n                tag=\"div\"\n                :item-class=\"boxClass\"\n                :disabled=\"pickerProps.disabled\"\n                :clickable=\"false\"\n                @keydown.left=\"$emit('left', $event)\"\n                @keydown.right=\"$emit('right', $event)\">\n                <slot />\n            </o-dropdown-item>\n        </o-dropdown>\n\n        <!-- Native Picker -->\n        <template v-else>\n            <slot name=\"trigger\">\n                <o-input\n                    ref=\"nativeInputComponent\"\n                    v-bind=\"inputBind\"\n                    v-model=\"inputValue\"\n                    :type=\"initialNativeType\"\n                    :min=\"formatter(min, true)\"\n                    :max=\"formatter(max, true)\"\n                    :step=\"step\"\n                    :placeholder=\"pickerProps.placeholder\"\n                    :size=\"pickerProps.size\"\n                    :icon-pack=\"pickerProps.iconPack\"\n                    :icon=\"pickerProps.icon\"\n                    :icon-right=\"pickerProps.iconRight\"\n                    :icon-right-clickable=\"pickerProps.iconRightClickable\"\n                    :rounded=\"pickerProps.rounded\"\n                    :disabled=\"pickerProps.disabled\"\n                    :readonly=\"initialNativeType == 'text'\"\n                    autocomplete=\"off\"\n                    :use-html5-validation=\"false\"\n                    @change=\"onNativeChange\"\n                    @focus=\"onNativeFocus\"\n                    @blur=\"onNativeBlur\"\n                    @invalid=\"onInvalid\"\n                    @icon-click=\"$emit('icon-click', $event)\"\n                    @icon-right-click=\"$emit('icon-right-click', $event)\" />\n            </slot>\n        </template>\n    </div>\n</template>\n","type MonthType =\n    | \"numeric\"\n    | \"2-digit\"\n    | \"long\"\n    | \"short\"\n    | \"narrow\"\n    | undefined;\n\n/**\n * Return month names according to a specified locale\n * @param  {String} locale A bcp47 localerouter. undefined will use the user browser locale\n * @param  {String} format long (ex. March), short (ex. Mar) or narrow (M)\n * @return {Array<String>} An array of month names\n */\nexport function getMonthNames(\n    locale?: string,\n    format: MonthType = \"long\",\n): string[] {\n    const dates: Date[] = [];\n    for (let i = 0; i < 12; i++) {\n        dates.push(new Date(2000, i, 15));\n    }\n    const dtf = new Intl.DateTimeFormat(locale, {\n        month: format,\n    });\n    return dates.map((d) => dtf.format(d));\n}\n\ntype WeekdayType = \"long\" | \"short\" | \"narrow\" | undefined;\n\n/**\n * Return weekday names according to a specified locale\n * @param  {String} locale A bcp47 localerouter. undefined will use the user browser locale\n * @param  {Number} first day of week index\n * @param  {String} format long (ex. Thursday), short (ex. Thu) or narrow (T)\n * @return {Array<String>} An array of weekday names\n */\nexport function getWeekdayNames(\n    locale?: string,\n    firstDayOfWeek: number = 0,\n    format: WeekdayType = \"narrow\",\n): string[] {\n    const dates: Date[] = [];\n    for (let i = 1, j = 0; j < 7; i++) {\n        const d = new Date(2000, 0, i);\n        const day = d.getDay();\n        if (day === firstDayOfWeek || j > 0) {\n            dates.push(d);\n            j++;\n        }\n    }\n    const dtf = new Intl.DateTimeFormat(locale, {\n        weekday: format,\n    });\n    return dates.map((d) => dtf.format(d));\n}\n\n/**\n * Accept a regex with group names and return an object\n * ex. matchWithGroups(/((?!=<year>)\\d+)\\/((?!=<month>)\\d+)\\/((?!=<day>)\\d+)/, '2000/12/25')\n * will return { year: 2000, month: 12, day: 25 }\n * @param  {String} includes injections of (?!={groupname}) for each group\n * @param  {String} the string to run regex\n * @return {Object} an object with a property for each group having the group's match as the value\n */\nexport function matchWithGroups(pattern: string, str: string): any {\n    const matches = str.match(pattern);\n    return (\n        // get the pattern as a string\n        pattern\n            .toString()\n            // suss out the groups\n            .match(/<(.+?)>/g)\n            // remove the braces\n            ?.map((group) => {\n                const groupMatches = group.match(/<(.+)>/);\n                if (!groupMatches || groupMatches.length <= 0) {\n                    return null;\n                }\n                const match = group.match(/<(.+)>/);\n                return match && match?.length > 1 ? match[1] : null;\n            })\n            // create an object with a property for each group having the group's match as the value\n            .reduce((acc, curr, index) => {\n                if (curr === null) return acc;\n                if (matches && matches.length > index) {\n                    acc[curr] = matches[index + 1];\n                } else {\n                    acc[curr] = null;\n                }\n                return acc;\n            }, {} as any)\n    );\n}\n\n/** Return array of all days in the week that the startingDate is within */\nexport function weekBuilder(\n    startingDate: number,\n    month: number,\n    year: number,\n    firstDayOfWeek: number,\n): Date[] {\n    const thisMonth = new Date(year, month);\n\n    const thisWeek: Date[] = [];\n\n    const dayOfWeek = new Date(year, month, startingDate).getDay();\n\n    const end =\n        dayOfWeek >= firstDayOfWeek\n            ? dayOfWeek - firstDayOfWeek\n            : 7 - firstDayOfWeek + dayOfWeek;\n\n    let daysAgo = 1;\n    for (let i = 0; i < end; i++) {\n        thisWeek.unshift(\n            new Date(\n                thisMonth.getFullYear(),\n                thisMonth.getMonth(),\n                startingDate - daysAgo,\n            ),\n        );\n        daysAgo++;\n    }\n\n    thisWeek.push(new Date(year, month, startingDate));\n\n    let daysForward = 1;\n    while (thisWeek.length < 7) {\n        thisWeek.push(new Date(year, month, startingDate + daysForward));\n        daysForward++;\n    }\n\n    return thisWeek;\n}\n\nexport function firstWeekOffset(year, dow, doy): number {\n    // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n    const fwd = 7 + dow - doy;\n    // first-week day local weekday -- which local weekday is fwd\n    const firstJanuary = new Date(year, 0, fwd);\n    const fwdlw = (7 + firstJanuary.getDay() - dow) % 7;\n    return -fwdlw + fwd - 1;\n}\n\n/** Return the number of days in a specific year */\nexport function daysInYear(year): number {\n    return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0 ? 366 : 365;\n}\n\n/** Return the number of weeks in a specific year */\nexport function weeksInYear(year, dow, doy): number {\n    const weekOffset = firstWeekOffset(year, dow, doy);\n    const weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n    return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n}\n","import { computed } from \"vue\";\nimport { matchWithGroups } from \"./utils\";\nimport { isTrueish } from \"@/utils/helpers\";\nimport type { DatepickerProps } from \"./props\";\n\n/** Time Format Feature */\nexport function useDatepickerMixins<R extends boolean, M extends boolean>(\n    props: DatepickerProps<R, M>,\n) {\n    /**\n     * Check that selected date is within earliest/latest params and\n     * is within a given month\n     */\n    function isDateSelectable(date: Date, month: number): boolean {\n        const validity: boolean[] = [];\n\n        if (props.minDate) validity.push(date >= props.minDate);\n        if (props.maxDate) validity.push(date <= props.maxDate);\n\n        if (props.nearbyMonthDays && !props.nearbySelectableMonthDays)\n            validity.push(date.getMonth() === month);\n\n        if (props.selectableDates) {\n            if (typeof props.selectableDates === \"function\") {\n                if (props.selectableDates(date)) return true;\n                else validity.push(false);\n            } else {\n                for (let i = 0; i < props.selectableDates.length; i++) {\n                    const enabledDate = props.selectableDates[i];\n                    if (\n                        date.getDate() === enabledDate.getDate() &&\n                        date.getFullYear() === enabledDate.getFullYear() &&\n                        date.getMonth() === enabledDate.getMonth()\n                    )\n                        return true;\n                    else validity.push(false);\n                }\n            }\n        }\n\n        if (props.unselectableDates) {\n            if (typeof props.unselectableDates === \"function\") {\n                validity.push(!props.unselectableDates(date));\n            } else {\n                for (let i = 0; i < props.unselectableDates.length; i++) {\n                    const disabledDate = props.unselectableDates[i];\n                    validity.push(\n                        date.getDate() !== disabledDate.getDate() ||\n                            date.getFullYear() !== disabledDate.getFullYear() ||\n                            date.getMonth() !== disabledDate.getMonth(),\n                    );\n                }\n            }\n        }\n\n        if (props.unselectableDaysOfWeek) {\n            for (let i = 0; i < props.unselectableDaysOfWeek.length; i++) {\n                const dayOfWeek = props.unselectableDaysOfWeek[i];\n                validity.push(date.getDay() !== dayOfWeek);\n            }\n        }\n\n        return validity.indexOf(false) < 0;\n    }\n\n    const isTypeMonth = computed(() => props.type === \"month\");\n\n    const localeOptions = computed(\n        () =>\n            new Intl.DateTimeFormat(props.locale, {\n                year: \"numeric\",\n                month: \"numeric\",\n            }).resolvedOptions() as Intl.DateTimeFormatOptions,\n    );\n\n    /** DateTime Format */\n    const dtf = computed(\n        () => new Intl.DateTimeFormat(props.locale /*, { timeZone: 'UTC' }*/),\n    );\n\n    /** DateTime Month Format */\n    const dtfMonth = computed(\n        () =>\n            new Intl.DateTimeFormat(props.locale, {\n                year: localeOptions.value.year || \"numeric\",\n                month: localeOptions.value.month || \"2-digit\",\n                // timeZone: 'UTC'\n            }),\n    );\n\n    const sampleTime = computed(() => {\n        const d = dateCreator();\n        d.setHours(10);\n        d.setSeconds(0);\n        d.setMinutes(0);\n        d.setMilliseconds(0);\n        return d;\n    });\n\n    function dateCreator(): Date {\n        return typeof props.creator === \"function\"\n            ? props.creator()\n            : new Date();\n    }\n\n    /** Format date into string */\n    function dateFormatter(date: typeof props.modelValue): string {\n        if (typeof props.formatter === \"function\") return props.formatter(date);\n\n        if (!date) return \"\";\n        const targetDates: Date[] = Array.isArray(date) ? date : [date];\n        if (!targetDates.length) return \"\";\n        const dates = targetDates.map((date) => {\n            const d = new Date(\n                date.getFullYear(),\n                date.getMonth(),\n                date.getDate(),\n                12,\n            );\n            return !isTypeMonth.value\n                ? dtf.value.format(d)\n                : dtfMonth.value.format(d);\n        });\n\n        return !isTrueish(props.multiple) && !isTrueish(props.range)\n            ? dates.join(\" - \")\n            : dates.join(\", \");\n    }\n\n    /** Parse a string into a date */\n    function dateParser(date: string): typeof props.modelValue {\n        if (typeof props.parser === \"function\") return props.parser(date);\n\n        if (!date) return undefined;\n        const isArray = isTrueish(props.multiple) || isTrueish(props.range);\n        const targetDates = !isArray ? [date] : date.split(\", \");\n        const dates = targetDates.map((date) => {\n            if (\n                dtf.value.formatToParts &&\n                typeof dtf.value.formatToParts === \"function\"\n            ) {\n                const formatRegex = (\n                    isTypeMonth.value ? dtfMonth.value : dtf.value\n                )\n                    .formatToParts(sampleTime.value)\n                    .map((part) => {\n                        if (part.type === \"literal\") return part.value;\n                        return `((?!=<${part.type}>)\\\\d+)`;\n                    })\n                    .join(\"\");\n                const dateGroups = matchWithGroups(formatRegex, date);\n\n                // We do a simple validation for the group.\n                // If it is not valid, it will fallback to Date.parse below\n                if (\n                    dateGroups.year &&\n                    dateGroups.year.length === 4 &&\n                    dateGroups.month &&\n                    dateGroups.month <= 12\n                ) {\n                    if (isTypeMonth.value)\n                        return new Date(dateGroups.year, dateGroups.month - 1);\n                    else if (dateGroups.day && dateGroups.day <= 31) {\n                        return new Date(\n                            dateGroups.year,\n                            dateGroups.month - 1,\n                            dateGroups.day,\n                            12,\n                        );\n                    }\n                }\n            }\n            // Fallback if formatToParts is not supported or if we were not able to parse a valid date\n            if (!isTypeMonth.value) return new Date(Date.parse(date));\n            const s = date.split(\"/\");\n            const year = s[0].length === 4 ? s[0] : s[1];\n            const month = s[0].length === 2 ? s[0] : s[1];\n            if (year && month) {\n                return new Date(\n                    parseInt(year, 10),\n                    parseInt(month, 10) - 1,\n                    1,\n                    0,\n                    0,\n                    0,\n                    0,\n                );\n            }\n        });\n        return (isArray ? dates : dates[0]) as typeof props.modelValue;\n    }\n\n    return {\n        dtf,\n        isDateSelectable,\n        dateCreator,\n        dateParser,\n        dateFormatter,\n    };\n}\n","<script\n    setup\n    lang=\"ts\"\n    generic=\"IsRange extends boolean, IsMultiple extends boolean\">\nimport {\n    computed,\n    watch,\n    nextTick,\n    ref,\n    effectScope,\n    onUnmounted,\n    type PropType,\n    type ComponentPublicInstance,\n} from \"vue\";\n\nimport { defineClasses } from \"@/composables\";\nimport { isTrueish } from \"@/utils/helpers\";\n\nimport { useDatepickerMixins } from \"./useDatepickerMixins\";\nimport { weeksInYear, firstWeekOffset } from \"./utils\";\n\nimport type { DatepickerEvent } from \"./types\";\nimport type { DatepickerProps } from \"./props\";\nimport type { ClassBind } from \"@/types\";\n\ndefineOptions({\n    name: \"ODatepickerTableRow\",\n    configField: \"datepicker\",\n});\n\nconst props = defineProps({\n    day: { type: Number, required: true },\n    week: { type: Array as PropType<Date[]>, required: true },\n    month: { type: Number, required: true },\n    selectedDate: {\n        type: [Date, Array] as PropType<Date | Date[]>,\n        default: undefined,\n    },\n    events: { type: Array as PropType<DatepickerEvent[]>, default: undefined },\n    hoveredDateRange: { type: Array as PropType<Date[]>, required: true },\n    pickerProps: {\n        type: Object as PropType<DatepickerProps<IsRange, IsMultiple>>,\n        required: true,\n    },\n});\n\nconst emits = defineEmits<{\n    select: [value: Date];\n    \"hover-enddate\": [value: Date];\n    \"change-focus\": [value: Date];\n    \"week-number-click\": [value: number];\n}>();\n\nconst { isDateSelectable, dateCreator } = useDatepickerMixins(\n    props.pickerProps,\n);\n\nconst hasEvents = computed(() => !!props.events?.length);\n\nconst dayRefs = ref(new Map());\n\nfunction setDayRef(\n    date: Date,\n    el: Element | ComponentPublicInstance | null,\n): void {\n    const refKey = `day-${date.getMonth()}-${date.getDate()}`;\n    if (el) dayRefs.value.set(refKey, el);\n}\n\nwatch(\n    () => props.day,\n    (day) => {\n        // if day is in week\n        if (props.week.map((d) => d.getDate()).includes(day))\n            nextTick(() => {\n                // $nextTick is needed when month is changed\n                const refKey = `day-${props.month}-${day}`;\n                const ref = dayRefs.value.get(refKey);\n                if (ref) ref.focus();\n            });\n    },\n);\n\nwatch(\n    () => props.month,\n    // clear day refs on month change\n    () => (dayRefs.value = new Map()),\n);\n\nfunction clickWeekNumber(week: number): void {\n    if (props.pickerProps.weekNumberClickable) emits(\"week-number-click\", week);\n}\n\nfunction getDayOfYear(input): number {\n    return (\n        Math.round(\n            (input.getTime() - new Date(input.getFullYear(), 0, 1).getTime()) /\n                864e5,\n        ) + 1\n    );\n}\n\nfunction getWeekNumber(mom): number {\n    const dow = props.pickerProps.firstDayOfWeek; // first day of week\n    // Rules for the first week : 1 for the 1st January, 4 for the 4th January\n    const doy = props.pickerProps.rulesForFirstWeek;\n    const weekOffset = firstWeekOffset(mom.getFullYear(), dow, doy);\n    const week = Math.floor((getDayOfYear(mom) - weekOffset - 1) / 7) + 1;\n    let resWeek;\n    let resYear;\n    if (week < 1) {\n        resYear = mom.getFullYear() - 1;\n        resWeek = week + weeksInYear(resYear, dow, doy);\n    } else if (week > weeksInYear(mom.getFullYear(), dow, doy)) {\n        resWeek = week - weeksInYear(mom.getFullYear(), dow, doy);\n        resYear = mom.getFullYear() + 1;\n    } else {\n        resYear = mom.getFullYear();\n        resWeek = week;\n    }\n    return resWeek;\n}\n\nfunction eventsDateMatch(day: Date): DatepickerEvent[] {\n    if (!props.events?.length) return [];\n    return props.events.filter((event) => event.date.getDay() === day.getDay());\n}\n\n// --- Event Handlers ---\n\nfunction onKeydown(event: KeyboardEvent, weekDay: Date): void {\n    let preventDefault = true;\n    switch (event.key) {\n        case \"Tab\": {\n            preventDefault = false;\n            break;\n        }\n        case \" \":\n        case \"Space\":\n        case \"Spacebar\":\n        case \"Enter\": {\n            selectDate(weekDay);\n            break;\n        }\n\n        case \"ArrowLeft\":\n        case \"Left\": {\n            changeFocus(weekDay, -1);\n            break;\n        }\n        case \"ArrowRight\":\n        case \"Right\": {\n            changeFocus(weekDay, 1);\n            break;\n        }\n        case \"ArrowUp\":\n        case \"Up\": {\n            changeFocus(weekDay, -7);\n            break;\n        }\n        case \"ArrowDown\":\n        case \"Down\": {\n            changeFocus(weekDay, 7);\n            break;\n        }\n    }\n    if (preventDefault) event.preventDefault();\n}\n\n/** Emit select event with chosen date as payload */\nfunction selectDate(date: Date): void {\n    if (props.pickerProps.disabled || props.pickerProps.readonly) return;\n    if (isDateSelectable(date, props.month)) emits(\"select\", date);\n}\n\nfunction changeFocus(day, inc): void {\n    const nextDay = new Date(day.getTime());\n    nextDay.setDate(day.getDate() + inc);\n    // if next day is out of range or not selectable, move to next selectable date\n    while (\n        (props.pickerProps.minDate && nextDay < props.pickerProps.minDate) ||\n        (props.pickerProps.maxDate && nextDay > props.pickerProps.maxDate) ||\n        !isDateSelectable(nextDay, nextDay.getMonth())\n    ) {\n        // revert day selection until selectable day is reached\n        nextDay.setDate(nextDay.getDate() - Math.sign(inc));\n    }\n    setRangeHoverEndDate(nextDay);\n    emits(\"change-focus\", nextDay);\n}\n\nfunction setRangeHoverEndDate(day): void {\n    if (isTrueish(props.pickerProps.range)) emits(\"hover-enddate\", day);\n}\n\n// --- Computed Component Classes ---\n\nfunction dateMatch(\n    dateOne: Date,\n    dateTwo?: Date | Date[],\n    multiple = false,\n): boolean {\n    // if either date is null or undefined, return false\n    // if using multiple flag, return false\n    if (!dateOne || !dateTwo || multiple) return false;\n\n    if (Array.isArray(dateTwo))\n        return dateTwo.some(\n            (date) =>\n                dateOne.getDate() === date.getDate() &&\n                dateOne.getFullYear() === date.getFullYear() &&\n                dateOne.getMonth() === date.getMonth(),\n        );\n\n    return (\n        dateOne.getDate() === dateTwo.getDate() &&\n        dateOne.getFullYear() === dateTwo.getFullYear() &&\n        dateOne.getMonth() === dateTwo.getMonth()\n    );\n}\n\nfunction dateWithin(\n    dateOne: Date,\n    dates?: Date | Date[],\n    multiple = false,\n): boolean {\n    if (!Array.isArray(dates) || multiple) return false;\n    return dateOne > dates[0] && dateOne < dates[1];\n}\n\nconst scope = effectScope();\n\n// stop all scope effects\nonUnmounted(() => scope.stop());\n\n/** Build cellClasses for cell using validations */\nfunction cellClasses(day: Date): ClassBind[] {\n    const classes = defineClasses(\n        [\n            \"tableCellSelectedClass\",\n            \"o-datepicker__table__cell--selected\",\n            null,\n            dateMatch(day, props.selectedDate) ||\n                dateWithin(\n                    day,\n                    props.selectedDate,\n                    isTrueish(props.pickerProps.multiple),\n                ),\n        ],\n        [\n            \"tableCellFirstSelectedClass\",\n            \"o-datepicker__table__cell--first-selected\",\n            null,\n            dateMatch(\n                day,\n                Array.isArray(props.selectedDate)\n                    ? props.selectedDate[0]\n                    : undefined,\n                isTrueish(props.pickerProps.multiple),\n            ),\n        ],\n        [\n            \"tableCellWithinSelectedClass\",\n            \"o-datepicker__table__cell--within-selected\",\n            null,\n            dateWithin(\n                day,\n                props.selectedDate,\n                isTrueish(props.pickerProps.multiple),\n            ),\n        ],\n        [\n            \"tableCellLastSelectedClass\",\n            \"o-datepicker__table__cell--last-selected\",\n            null,\n            dateMatch(\n                day,\n                Array.isArray(props.selectedDate)\n                    ? props.selectedDate[1]\n                    : undefined,\n                isTrueish(props.pickerProps.multiple),\n            ),\n        ],\n        [\n            \"tableCellFirstHoveredClass\",\n            \"o-datepicker__table__cell--first-hovered\",\n            null,\n            dateMatch(\n                day,\n                Array.isArray(props.hoveredDateRange)\n                    ? props.hoveredDateRange[0]\n                    : undefined,\n            ),\n        ],\n        [\n            \"tableCellWithinHoveredClass\",\n            \"o-datepicker__table__cell--within-hovered\",\n            null,\n            dateWithin(day, props.hoveredDateRange),\n        ],\n        [\n            \"tableCellLastHoveredClass\",\n            \"o-datepicker__table__cell--last-hovered\",\n            null,\n            dateMatch(\n                day,\n                Array.isArray(props.hoveredDateRange)\n                    ? props.hoveredDateRange[1]\n                    : undefined,\n            ),\n        ],\n        [\n            \"tableCellTodayClass\",\n            \"o-datepicker__table__cell--today\",\n            null,\n            dateMatch(day, dateCreator()),\n        ],\n        [\n            \"tableCellSelectableClass\",\n            \"o-datepicker__table__cell--selectable\",\n            null,\n            isDateSelectable(day, props.month) &&\n                !props.pickerProps.disabled &&\n                !props.pickerProps.readonly,\n        ],\n        [\n            \"tableCellUnselectableClass\",\n            \"o-datepicker__table__cell--unselectable\",\n            null,\n            !isDateSelectable(day, props.month) || props.pickerProps.disabled,\n        ],\n        [\n            \"tableCellInvisibleClass\",\n            \"o-datepicker__table__cell--invisible\",\n            null,\n            !props.pickerProps.nearbyMonthDays &&\n                day.getMonth() !== props.month,\n        ],\n        [\n            \"tableCellNearbyClass\",\n            \"o-datepicker__table__cell--nearby\",\n            null,\n            props.pickerProps.nearbySelectableMonthDays &&\n                day.getMonth() !== props.month,\n        ],\n        // pass effect scope for rectivity binding\n        { scope },\n    );\n\n    return [\n        ...tableCellClasses.value,\n        ...cellEventsClass.value,\n        ...classes.value,\n    ];\n}\n\nfunction eventClasses(event: DatepickerEvent): ClassBind[] {\n    const classes = defineClasses(\n        [\"tableEventClass\", \"o-datepicker__table__event\"],\n        [\n            \"tableEventVariantClass\",\n            \"o-datepicker__table__event--\",\n            event.type,\n            !!event.type,\n        ],\n        [\n            \"tableEventIndicatorClass\",\n            \"o-datepicker__table__event--\",\n            props.pickerProps.indicators,\n            !!props.pickerProps.indicators,\n        ],\n        // pass effect scope for rectivity binding\n        { scope },\n    );\n    return classes.value;\n}\n\nconst tableRowClasses = defineClasses(\n    [\"tableRowClass\", \"o-datepicker__table__row\"],\n    // passing the picker props will add reactivity to property changes\n    { props: props.pickerProps },\n);\n\nconst tableCellClasses = defineClasses(\n    [\"tableCellClass\", \"o-datepicker__table__cell\"],\n    // passing the picker props will add reactivity to property changes\n    { props: props.pickerProps },\n);\n\nconst tableEventsClasses = defineClasses(\n    [\"tableEventsClass\", \"o-datepicker__table__events\"],\n    // passing the picker props will add reactivity to property changes\n    { props: props.pickerProps },\n);\n\nconst cellEventsClass = defineClasses(\n    [\n        \"tableCellEventsClass\",\n        \"o-datepicker__table__cell--events\",\n        null,\n        hasEvents,\n    ],\n    // passing the picker props will add reactivity to property changes\n    { props: props.pickerProps },\n);\n</script>\n\n<template>\n    <div :class=\"tableRowClasses\">\n        <div\n            v-if=\"pickerProps.showWeekNumber\"\n            :class=\"tableCellClasses\"\n            :style=\"{\n                cursor: pickerProps.weekNumberClickable ? 'pointer' : 'auto',\n            }\"\n            :tabindex=\"pickerProps.weekNumberClickable ? 0 : undefined\"\n            role=\"button\"\n            @click.prevent=\"clickWeekNumber(getWeekNumber(week[6]))\"\n            @keydown.enter.prevent=\"clickWeekNumber(getWeekNumber(week[6]))\">\n            <span>{{ getWeekNumber(week[6]) }}</span>\n        </div>\n\n        <template v-for=\"(weekDay, idx) in week\" :key=\"idx\">\n            <div\n                v-if=\"\n                    !pickerProps.disabled &&\n                    !pickerProps.readonly &&\n                    isDateSelectable(weekDay, month)\n                \"\n                :ref=\"(el) => setDayRef(weekDay, el)\"\n                :class=\"cellClasses(weekDay)\"\n                role=\"button\"\n                :tabindex=\"\n                    day === weekDay.getDate() && month === weekDay.getMonth()\n                        ? undefined\n                        : 0\n                \"\n                @click.prevent=\"selectDate(weekDay)\"\n                @mouseenter=\"setRangeHoverEndDate(weekDay)\"\n                @focus=\"setRangeHoverEndDate(weekDay)\"\n                @keydown.enter.prevent=\"onKeydown($event, weekDay)\">\n                <span>{{ weekDay.getDate() }}</span>\n                <div\n                    v-if=\"eventsDateMatch(weekDay).length\"\n                    :class=\"tableEventsClasses\">\n                    <div\n                        v-for=\"(event, index) in eventsDateMatch(weekDay)\"\n                        :key=\"index\"\n                        :class=\"eventClasses(event)\" />\n                </div>\n            </div>\n\n            <div v-else :class=\"cellClasses(weekDay)\">\n                <span>{{ weekDay.getDate() }}</span>\n            </div>\n        </template>\n    </div>\n</template>\n","<script\n    setup\n    lang=\"ts\"\n    generic=\"IsRange extends boolean, IsMultiple extends boolean\">\nimport { computed, ref, type PropType } from \"vue\";\n\nimport ODatepickerTableRow from \"./DatepickerTableRow.vue\";\n\nimport { isTrueish, isDefined } from \"@/utils/helpers\";\nimport { defineClasses } from \"@/composables\";\n\nimport { useDatepickerMixins } from \"./useDatepickerMixins\";\nimport { weekBuilder } from \"./utils\";\n\nimport type { DatepickerEvent, FocusedDate } from \"./types\";\nimport type { DatepickerProps } from \"./props\";\n\ndefineOptions({\n    name: \"ODatepickerTable\",\n    configField: \"datepicker\",\n});\n\nconst props = defineProps({\n    modelValue: {\n        type: [Date, Array] as PropType<Date | Date[]>,\n        default: undefined,\n    },\n    focusedDate: { type: Object as PropType<FocusedDate>, required: true },\n    dayNames: { type: Array as PropType<string[]>, required: true },\n    monthNames: { type: Array as PropType<string[]>, required: true },\n    pickerProps: {\n        type: Object as PropType<DatepickerProps<IsRange, IsMultiple>>,\n        required: true,\n    },\n});\n\nconst emits = defineEmits<{\n    /** modelValue prop two-way binding */\n    \"update:model-value\": [value: Date | Date[]];\n    /** focusedDate prop two-way binding */\n    \"update:focusedDate\": [value: FocusedDate];\n    \"range-start\": [value: Date];\n    \"range-end\": [value: Date];\n    \"week-number-click\": [value: number];\n}>();\n\nconst { isDateSelectable } = useDatepickerMixins(props.pickerProps);\n\nconst focusedDateModel = defineModel<FocusedDate>(\"focusedDate\", {\n    required: true,\n});\n\nconst selectedBeginDate = ref<Date>();\nconst selectedEndDate = ref<Date>();\nconst hoveredEndDate = ref<Date>();\n\nconst visibleDayNames = computed(() => {\n    const visibleDayNames: string[] = [];\n    let index = props.pickerProps.firstDayOfWeek || 0;\n    while (visibleDayNames.length < props.dayNames.length) {\n        const currentDayName = props.dayNames[index % props.dayNames.length];\n        visibleDayNames.push(currentDayName);\n        index++;\n    }\n    if (props.pickerProps.showWeekNumber) visibleDayNames.unshift(\"\");\n    return visibleDayNames;\n});\n\n/** Return array of all events in the specified month */\nconst eventsInThisMonth = computed(() => {\n    if (!props.pickerProps.events) return [];\n    return props.pickerProps.events\n        .map((event) =>\n            !event.date && event instanceof Date ? { date: event } : event,\n        )\n        .filter(\n            (event) =>\n                event.date.getMonth() === focusedDateModel.value.month &&\n                event.date.getFullYear() === focusedDateModel.value.year,\n        );\n});\n\n/** Return array of all weeks in the specified month */\nconst weeksInThisMonth = computed<Date[][]>(() => {\n    validateFocusedDay();\n    const month = focusedDateModel.value.month;\n    const year = focusedDateModel.value.year;\n    const weeksInThisMonth: Date[][] = [];\n\n    let startingDay = 1;\n\n    while (weeksInThisMonth.length < 6) {\n        const newWeek = weekBuilder(\n            startingDay,\n            month,\n            year,\n            props.pickerProps.firstDayOfWeek || 0,\n        );\n        weeksInThisMonth.push(newWeek);\n        startingDay += 7;\n    }\n\n    return weeksInThisMonth;\n});\n\nfunction eventsInThisWeek(week: Date[]): DatepickerEvent[] {\n    if (!props.pickerProps.events) return [];\n    return eventsInThisMonth.value.filter((event) => {\n        const stripped = new Date(event.date);\n        stripped.setHours(0, 0, 0, 0);\n        const timed = stripped.getTime();\n        return week.some((weekDate) => weekDate.getTime() === timed);\n    });\n}\n\nconst hoveredDateRange = computed<Date[]>(() => {\n    if (!isTrueish(props.pickerProps.range) || selectedEndDate.value) return [];\n\n    return (\n        (hoveredEndDate.value || 0) < (selectedBeginDate.value || 0)\n            ? [hoveredEndDate.value, selectedBeginDate.value]\n            : [selectedBeginDate.value, hoveredEndDate.value]\n    ).filter(isDefined);\n});\n\nfunction validateFocusedDay(): void {\n    const currentDate = new Date(\n        focusedDateModel.value.year,\n        focusedDateModel.value.month,\n        focusedDateModel.value.day,\n    );\n    if (isDateSelectable(currentDate, focusedDateModel.value.month)) return;\n\n    let day = 0;\n    // Number of days in the current month\n    const monthDays = new Date(\n        focusedDateModel.value.year,\n        focusedDateModel.value.month + 1,\n        0,\n    ).getDate();\n    let firstFocusable: Date | undefined;\n    while (!firstFocusable && ++day < monthDays) {\n        const date = new Date(\n            focusedDateModel.value.year,\n            focusedDateModel.value.month,\n            day,\n        );\n        if (isDateSelectable(date, focusedDateModel.value.month)) {\n            firstFocusable = currentDate;\n            focusedDateModel.value = {\n                day: date.getDate(),\n                month: date.getMonth(),\n                year: date.getFullYear(),\n            };\n        }\n    }\n}\n\n// --- Event Handlers ---\n\n/** Emit input event with selected date as payload for v-model in parent */\nfunction onSelectedDate(date: Date): void {\n    if (props.pickerProps.disabled) return;\n    else if (isTrueish(props.pickerProps.range)) handleSelectRangeDate(date);\n    else if (isTrueish(props.pickerProps.multiple))\n        handleSelectMultipleDates(date);\n    else emits(\"update:model-value\", date);\n}\n\n/*\n * If both begin and end dates are set, reset the end date and set the begin date.\n * If only begin date is selected, emit an array of the begin date and the new date.\n * If not set, only set the begin date.\n */\nfunction handleSelectRangeDate(date: Date): void {\n    if (selectedBeginDate.value && selectedEndDate.value) {\n        selectedBeginDate.value = date;\n        selectedEndDate.value = undefined;\n        emits(\"range-start\", date);\n    } else if (selectedBeginDate.value && !selectedEndDate.value) {\n        if (selectedBeginDate.value > date) {\n            selectedEndDate.value = selectedBeginDate.value;\n            selectedBeginDate.value = date;\n        } else {\n            selectedEndDate.value = date;\n        }\n        emits(\"range-end\", date);\n        emits(\"update:model-value\", [\n            selectedBeginDate.value,\n            selectedEndDate.value,\n        ]);\n    } else {\n        selectedBeginDate.value = date;\n        emits(\"range-start\", date);\n    }\n}\n\n/*\n * If selected date already exists list of selected dates, remove it from the list\n * Otherwise, add date to list of selected dates\n */\nfunction handleSelectMultipleDates(date: Date): void {\n    let multipleSelectedDates = Array.isArray(props.modelValue)\n        ? props.modelValue\n        : [];\n    const multipleSelect = multipleSelectedDates.filter(\n        (selectedDate) =>\n            selectedDate.getDate() === date.getDate() &&\n            selectedDate.getFullYear() === date.getFullYear() &&\n            selectedDate.getMonth() === date.getMonth(),\n    );\n    if (multipleSelect.length) {\n        multipleSelectedDates = multipleSelectedDates.filter(\n            (selectedDate) =>\n                selectedDate.getDate() !== date.getDate() ||\n                selectedDate.getFullYear() !== date.getFullYear() ||\n                selectedDate.getMonth() !== date.getMonth(),\n        );\n    } else {\n        multipleSelectedDates = [...multipleSelectedDates, date];\n    }\n    emits(\"update:model-value\", multipleSelectedDates);\n}\n\nfunction onRangeHoverEndDate(date: Date): void {\n    hoveredEndDate.value = date;\n}\n\nfunction onChangeFocus(date: Date): void {\n    focusedDateModel.value = {\n        day: date.getDate(),\n        month: date.getMonth(),\n        year: date.getFullYear(),\n    };\n}\n\n// --- Computed Component Classes ---\n\nconst tableClasses = defineClasses(\n    [\"tableClass\", \"o-datepicker__table\"],\n    // passing the picker props will add reactivity to property changes\n    { props: props.pickerProps },\n);\n\nconst tableHeadClasses = defineClasses(\n    [\"tableHeadClass\", \"o-datepicker__table__head\"],\n    // passing the picker props will add reactivity to property changes\n    { props: props.pickerProps },\n);\n\nconst tableCellClasses = defineClasses(\n    [\"tableCellClass\", \"o-datepicker__table__cell\"],\n    // passing the picker props will add reactivity to property changes\n    { props: props.pickerProps },\n);\n\nconst tableHeadCellClasses = defineClasses(\n    [\"tableHeadCellClass\", \"o-datepicker__table__head-cell\"],\n    // passing the picker props will add reactivity to property changes\n    { props: props.pickerProps },\n);\n\nconst tableBodyClasses = defineClasses(\n    [\"tableBodyClass\", \"o-datepicker__table__body\"],\n    // passing the picker props will add reactivity to property changes\n    { props: props.pickerProps },\n);\n</script>\n\n<template>\n    <section :class=\"tableClasses\">\n        <header :class=\"tableHeadClasses\">\n            <div\n                v-for=\"(day, index) in visibleDayNames\"\n                :key=\"index\"\n                :class=\"[...tableCellClasses, ...tableHeadCellClasses]\">\n                <span>{{ day }}</span>\n            </div>\n        </header>\n        <div :class=\"tableBodyClasses\">\n            <o-datepicker-table-row\n                v-for=\"(week, index) in weeksInThisMonth\"\n                :key=\"index\"\n                :selected-date=\"modelValue\"\n                :day=\"focusedDateModel.day\"\n                :week=\"week\"\n                :month=\"focusedDateModel.month\"\n                :events=\"eventsInThisWeek(week)\"\n                :hovered-date-range=\"hoveredDateRange\"\n                :picker-props=\"props.pickerProps\"\n                @select=\"onSelectedDate\"\n                @hover-enddate=\"onRangeHoverEndDate\"\n                @change-focus=\"onChangeFocus\"\n                @week-number-click=\"$emit('week-number-click', $event)\" />\n        </div>\n    </section>\n</template>\n","<script\n    setup\n    lang=\"ts\"\n    generic=\"IsRange extends boolean, IsMultiple extends boolean\">\nimport {\n    computed,\n    ref,\n    nextTick,\n    watch,\n    effectScope,\n    onUnmounted,\n    type PropType,\n    type ComponentPublicInstance,\n} from \"vue\";\n\nimport { isDefined, isTrueish } from \"@/utils/helpers\";\nimport { defineClasses } from \"@/composables\";\n\nimport { useDatepickerMixins } from \"./useDatepickerMixins\";\n\nimport type { DatepickerEvent, FocusedDate } from \"./types\";\nimport type { DatepickerProps } from \"./props\";\nimport type { ClassBind } from \"@/types\";\n\ndefineOptions({\n    name: \"ODatepickerMonth\",\n    configField: \"datepicker\",\n    inheritAttrs: false,\n});\n\nconst props = defineProps({\n    modelValue: {\n        type: [Date, Array] as PropType<Date | Date[]>,\n        default: undefined,\n    },\n    monthNames: { type: Array as PropType<string[]>, required: true },\n    focusedDate: { type: Object as PropType<FocusedDate>, required: true },\n    pickerProps: {\n        type: Object as PropType<DatepickerProps<IsRange, IsMultiple>>,\n        required: true,\n    },\n});\n\nconst emits = defineEmits<{\n    /** modelValue prop two-way binding */\n    \"update:model-value\": [value: Date | Date[]];\n    /** focusedDate prop two-way binding */\n    \"update:focusedDate\": [value: FocusedDate];\n    \"range-start\": [value: Date];\n    \"range-end\": [value: Date];\n}>();\n\nconst { dateCreator } = useDatepickerMixins(props.pickerProps);\n\nconst selectedBeginDate = ref<Date>();\nconst selectedEndDate = ref<Date>();\nconst hoveredEndDate = ref<Date>();\n\nconst hasEvents = computed(() => !!props.pickerProps.events?.length);\n\nconst monthRefs = ref(new Map());\n\nfunction setMonthRef(\n    date: Date,\n    el: Element | ComponentPublicInstance | null,\n): void {\n    const refKey = `month-${date.getMonth()}`;\n    if (el) monthRefs.value.set(refKey, el);\n}\n\nwatch(\n    () => props.focusedDate.month,\n    (month) => {\n        const refKey = `month-${month}`;\n        nextTick(() => {\n            // $nextTick is needed when month is changed\n            const ref = monthRefs.value.get(refKey);\n            if (ref?.length > 0 && ref[0]) {\n                ref[0].focus();\n            }\n        });\n    },\n);\n\n/** Return array of all events in the specified month */\nconst eventsInThisYear = computed(() => {\n    if (!props.pickerProps.events) return [];\n\n    return props.pickerProps.events\n        .map((event) => {\n            if (!event.date && event instanceof Date) event = { date: event };\n            if (!event.type) event.type = \"is-primary\";\n            return event;\n        })\n        .filter((event) => event.date.getFullYear() === props.focusedDate.year);\n});\n\nconst monthDates = computed(() => {\n    const year = props.focusedDate.year;\n    const months: Date[] = [];\n    for (let i = 0; i < 12; i++) {\n        const d = new Date(year, i, 1);\n        d.setHours(0, 0, 0, 0);\n        months.push(d);\n    }\n    return months;\n});\n\nconst hoveredDateRange = computed(() => {\n    if (!isTrueish(props.pickerProps.range) || !selectedEndDate.value)\n        return [];\n\n    return (\n        hoveredEndDate.value &&\n        selectedBeginDate.value &&\n        hoveredEndDate.value < selectedBeginDate.value\n            ? [hoveredEndDate.value, selectedBeginDate.value]\n            : [selectedBeginDate.value, hoveredEndDate.value]\n    ).filter(isDefined);\n});\n\nfunction eventsDateMatch(day): DatepickerEvent[] {\n    if (!eventsInThisYear.value.length) return [];\n    return eventsInThisYear.value.filter(\n        (event) => event.date.getMonth() === day.getMonth(),\n    );\n}\n\nfunction isDateSelectable(date: Date): boolean {\n    const validity: boolean[] = [];\n\n    if (props.pickerProps.minDate)\n        validity.push(date >= props.pickerProps.minDate);\n    if (props.pickerProps.maxDate)\n        validity.push(date <= props.pickerProps.maxDate);\n\n    validity.push(date.getFullYear() === props.focusedDate.year);\n\n    if (props.pickerProps.selectableDates) {\n        if (typeof props.pickerProps.selectableDates === \"function\") {\n            if (props.pickerProps.selectableDates(date)) return true;\n            else validity.push(false);\n        } else {\n            for (let i = 0; i < props.pickerProps.selectableDates.length; i++) {\n                const enabledDate = props.pickerProps.selectableDates[i];\n                if (\n                    date.getFullYear() === enabledDate.getFullYear() &&\n                    date.getMonth() === enabledDate.getMonth()\n                )\n                    return true;\n                else validity.push(false);\n            }\n        }\n    }\n\n    if (props.pickerProps.unselectableDates) {\n        if (typeof props.pickerProps.unselectableDates === \"function\") {\n            validity.push(!props.pickerProps.unselectableDates(date));\n        } else {\n            for (\n                let i = 0;\n                i < props.pickerProps.unselectableDates.length;\n                i++\n            ) {\n                const disabledDate = props.pickerProps.unselectableDates[i];\n                validity.push(\n                    date.getFullYear() !== disabledDate.getFullYear() ||\n                        date.getMonth() !== disabledDate.getMonth(),\n                );\n            }\n        }\n    }\n\n    if (props.pickerProps.unselectableDaysOfWeek) {\n        for (\n            let i = 0;\n            i < props.pickerProps.unselectableDaysOfWeek.length;\n            i++\n        ) {\n            const dayOfWeek = props.pickerProps.unselectableDaysOfWeek[i];\n            validity.push(date.getDay() !== dayOfWeek);\n        }\n    }\n\n    return validity.indexOf(false) < 0;\n}\n\n// --- Event Handlers ---\n\nfunction onKeydown(event: KeyboardEvent, weekDay: Date): void {\n    let preventDefault = true;\n    switch (event.key) {\n        case \"Tab\": {\n            preventDefault = false;\n            break;\n        }\n        case \" \":\n        case \"Space\":\n        case \"Spacebar\":\n        case \"Enter\": {\n            selectDate(weekDay);\n            break;\n        }\n\n        case \"ArrowLeft\":\n        case \"Left\": {\n            changeFocus(weekDay, -1);\n            break;\n        }\n        case \"ArrowRight\":\n        case \"Right\": {\n            changeFocus(weekDay, 1);\n            break;\n        }\n        case \"ArrowUp\":\n        case \"Up\": {\n            changeFocus(weekDay, -7);\n            break;\n        }\n        case \"ArrowDown\":\n        case \"Down\": {\n            changeFocus(weekDay, 7);\n            break;\n        }\n    }\n    if (preventDefault) event.preventDefault();\n}\n\n/*\n * Emit update:modelValue event with selected date as payload for v-model in parent\n */\nfunction selectDate(date: Date): void {\n    if (props.pickerProps.disabled || props.pickerProps.readonly) return;\n    if (!isDateSelectable(date)) return;\n\n    if (isTrueish(props.pickerProps.range)) handleSelectRangeDate(date);\n    else if (isTrueish(props.pickerProps.multiple))\n        handleSelectMultipleDates(date);\n    else emits(\"update:model-value\", date);\n}\n\n/*\n * If both begin and end dates are set, reset the end date and set the begin date.\n * If only begin date is selected, emit an array of the begin date and the new date.\n * If not set, only set the begin date.\n */\nfunction handleSelectRangeDate(date: Date): void {\n    if (selectedBeginDate.value && selectedEndDate.value) {\n        selectedBeginDate.value = date;\n        selectedEndDate.value = undefined;\n        emits(\"range-start\", date);\n    } else if (selectedBeginDate.value && !selectedEndDate.value) {\n        if (selectedBeginDate.value > date) {\n            selectedEndDate.value = selectedBeginDate.value;\n            selectedBeginDate.value = date;\n        } else {\n            selectedEndDate.value = date;\n        }\n        emits(\"range-end\", date);\n        emits(\"update:model-value\", [\n            selectedBeginDate.value,\n            selectedEndDate.value,\n        ]);\n    } else {\n        selectedBeginDate.value = date;\n        emits(\"range-start\", date);\n    }\n}\n\nconst multipleSelectedDates = computed(() =>\n    isTrueish(props.pickerProps.multiple) && props.modelValue\n        ? props.modelValue\n        : [],\n);\n\nfunction handleSelectMultipleDates(date: Date): void {\n    if (!Array.isArray(props.modelValue)) return;\n    let multipleSelectedDates = props.modelValue;\n\n    const multipleSelect = multipleSelectedDates.filter(\n        (selectedDate) =>\n            selectedDate.getDate() === date.getDate() &&\n            selectedDate.getFullYear() === date.getFullYear() &&\n            selectedDate.getMonth() === date.getMonth(),\n    );\n    if (multipleSelect.length) {\n        multipleSelectedDates = multipleSelectedDates.filter(\n            (selectedDate) =>\n                selectedDate.getDate() !== date.getDate() ||\n                selectedDate.getFullYear() !== date.getFullYear() ||\n                selectedDate.getMonth() !== date.getMonth(),\n        );\n    } else {\n        multipleSelectedDates.push(date);\n    }\n    emits(\"update:model-value\", multipleSelectedDates);\n}\n\nfunction changeFocus(month: Date, inc: number): void {\n    month.setMonth(month.getMonth() + inc);\n    const focused = {\n        day: month.getDate(),\n        month: month.getMonth(),\n        year: month.getFullYear(),\n    };\n    emits(\"update:focusedDate\", focused);\n}\n\nfunction onRangeHoverEndDate(day: Date): void {\n    if (isTrueish(props.pickerProps.range)) hoveredEndDate.value = day;\n}\n\n// --- Computed Component Classes ---\n\nfunction dateMatch(dateOne, dateTwo, multiple = false): boolean {\n    // if either date is null or undefined, return false\n    if (!dateOne || !dateTwo || multiple) return false;\n    if (Array.isArray(dateTwo))\n        return dateTwo.some(\n            (date) =>\n                dateOne.getFullYear() === date.getFullYear() &&\n                dateOne.getMonth() === date.getMonth(),\n        );\n    return (\n        dateOne.getFullYear() === dateTwo.getFullYear() &&\n        dateOne.getMonth() === dateTwo.getMonth()\n    );\n}\n\nfunction dateWithin(dateOne, dates, multiple = false): boolean {\n    if (!Array.isArray(dates) || multiple) return false;\n    return dateOne > dates[0] && dateOne < dates[1];\n}\n\nfunction dateMultipleSelected(dateOne, dates, multiple = false): boolean {\n    if (!Array.isArray(dates) || !multiple) return false;\n    return dates.some(\n        (date) =>\n            dateOne.getDate() === date.getDate() &&\n            dateOne.getFullYear() === date.getFullYear() &&\n            dateOne.getMonth() === date.getMonth(),\n    );\n}\n\nconst monthClasses = defineClasses(\n    [\"monthClass\", \"o-datepicker__month\"],\n    // passing the picker props will add reactivity to property changes\n    { props: props.pickerProps },\n);\n\nconst monthTableClasses = defineClasses(\n    [\"monthTableClass\", \"o-datepicker__month__table\"],\n    // passing the picker props will add reactivity to property changes\n    { props: props.pickerProps },\n);\n\nconst monthCellClasses = defineClasses(\n    [\"monthCellClass\", \"o-datepicker__month__cell\"],\n    [\n        \"monthCellEventsClass\",\n        \"o-datepicker__month__cell--events\",\n        null,\n        hasEvents,\n    ],\n    // passing the picker props will add reactivity to property changes\n    { props: props.pickerProps },\n);\n\n// Registers a dispose callback on the current active effect scope.\nconst scope = effectScope();\n\n// stop all scope effects\nonUnmounted(() => scope.stop());\n\n/**\n * Build classes for cell using validations\n */\nfunction cellClasses(day: Date): ClassBind[] {\n    const classes = defineClasses(\n        [\n            \"monthCellSelectedClass\",\n            \"o-datepicker__month__cell--selected\",\n            null,\n            dateMatch(\n                day,\n                props.modelValue,\n                isTrueish(props.pickerProps.multiple),\n            ) ||\n                dateWithin(\n                    day,\n                    props.modelValue,\n                    isTrueish(props.pickerProps.multiple),\n                ) ||\n                dateMultipleSelected(\n                    day,\n                    multipleSelectedDates.value,\n                    isTrueish(props.pickerProps.multiple),\n                ),\n        ],\n        [\n            \"monthCellFirstSelectedClass\",\n            \"o-datepicker__month__cell--first-selected\",\n            null,\n            dateMatch(\n                day,\n                Array.isArray(props.modelValue) && props.modelValue[0],\n                isTrueish(props.pickerProps.multiple),\n            ),\n        ],\n        [\n            \"monthCellWithinSelectedClass\",\n            \"o-datepicker__month__cell--within-selected\",\n            null,\n            dateWithin(\n                day,\n                props.modelValue,\n                isTrueish(props.pickerProps.multiple),\n            ),\n        ],\n        [\n            \"monthCellLastSelectedClass\",\n            \"o-datepicker__month__cell--last-selected\",\n            null,\n            dateMatch(\n                day,\n                Array.isArray(props.modelValue) && props.modelValue[1],\n                isTrueish(props.pickerProps.multiple),\n            ),\n        ],\n        [\n            \"monthCellWithinHoveredRangeClass\",\n            \"o-datepicker__month__cell--within-hovered-range\",\n            null,\n            hoveredDateRange.value &&\n                hoveredDateRange.value.length === 2 &&\n                (dateMatch(day, hoveredDateRange.value) ||\n                    dateWithin(day, hoveredDateRange.value)),\n        ],\n        [\n            \"monthCellFirstHoveredClass\",\n            \"o-datepicker__month__cell--first-hovered\",\n            null,\n            dateMatch(\n                day,\n                Array.isArray(hoveredDateRange.value) &&\n                    hoveredDateRange.value[0],\n            ),\n        ],\n        [\n            \"monthCellWithinHoveredClass\",\n            \"o-datepicker__month__cell--within-hovered\",\n            null,\n            dateWithin(day, hoveredDateRange.value),\n        ],\n        [\n            \"monthCellLastHoveredClass\",\n            \"o-datepicker__month__cell--last-hovered\",\n            null,\n            dateMatch(\n                day,\n                Array.isArray(hoveredDateRange.value) &&\n                    hoveredDateRange.value[1],\n            ),\n        ],\n        [\n            \"monthCellTodayClass\",\n            \"o-datepicker__month__cell--today\",\n            null,\n            dateMatch(day, dateCreator()),\n        ],\n        [\n            \"monthCellSelectableclass\",\n            \"o-datepicker__month__cell--selectable\",\n            null,\n            isDateSelectable(day) &&\n                !props.pickerProps.disabled &&\n                !props.pickerProps.readonly,\n        ],\n        [\n            \"monthCellUnselectableClass\",\n            \"o-datepicker__month__cell--unselectable\",\n            null,\n            !isDateSelectable(day) || props.pickerProps.disabled,\n        ],\n        // pass effect scope for rectivity binding\n        { scope },\n    );\n    return [...monthCellClasses.value, ...classes.value];\n}\n\nconst monthEventsClasses = defineClasses(\n    [\"monthEventsClass\", \"o-datepicker__month__events\"],\n    // passing the picker props will add reactivity to property changes\n    { props: props.pickerProps },\n);\n\n/**\n * Build classes for event\n */\nfunction eventClasses(event: DatepickerEvent): ClassBind[] {\n    const classes = defineClasses(\n        [\"monthEventClass\", \"o-datepicker__month__event\"],\n        [\n            \"monthEventTypeClass\",\n            \"o-datepicker__month__event--\",\n            event.type,\n            !!event.type,\n        ],\n        [\n            \"monthEventIndicatorClass\",\n            \"o-datepicker__month__event--\",\n            props.pickerProps.indicators,\n            !!props.pickerProps.indicators,\n        ],\n        // pass effect scope for rectivity binding\n        { scope },\n    );\n    return classes.value;\n}\n</script>\n\n<template>\n    <section :class=\"monthClasses\">\n        <div :class=\"monthTableClasses\">\n            <template v-for=\"(date, idx) in monthDates\" :key=\"idx\">\n                <div\n                    v-if=\"\n                        !pickerProps.disabled &&\n                        !pickerProps.readonly &&\n                        isDateSelectable(date)\n                    \"\n                    :ref=\"(el) => setMonthRef(date, el)\"\n                    :class=\"cellClasses(date)\"\n                    role=\"button\"\n                    :tabindex=\"\n                        focusedDate.month === date.getMonth() ? undefined : 0\n                    \"\n                    @click.prevent=\"selectDate(date)\"\n                    @mouseenter=\"onRangeHoverEndDate(date)\"\n                    @focus=\"onRangeHoverEndDate(date)\"\n                    @keydown.prevent=\"onKeydown($event, date)\">\n                    {{ monthNames[date.getMonth()] }}\n                    <div\n                        v-if=\"eventsDateMatch(date).length\"\n                        :class=\"monthEventsClasses\">\n                        <div\n                            v-for=\"(event, index) in eventsDateMatch(date)\"\n                            :key=\"index\"\n                            :class=\"eventClasses(event)\" />\n                    </div>\n                </div>\n\n                <div v-else :class=\"cellClasses(date)\">\n                    {{ monthNames[date.getMonth()] }}\n                    <div\n                        v-if=\"eventsDateMatch(date).length\"\n                        :class=\"monthEventsClasses\">\n                        <div\n                            v-for=\"(event, index) in eventsDateMatch(date)\"\n                            :key=\"index\"\n                            :class=\"eventClasses(event)\" />\n                    </div>\n                </div>\n            </template>\n        </div>\n    </section>\n</template>\n","<script\n    setup\n    lang=\"ts\"\n    generic=\"\n        IsRange extends boolean = false,\n        IsMultiple extends boolean = false\n    \">\nimport { computed, ref, watch, useTemplateRef } from \"vue\";\n\nimport OButton from \"../button/Button.vue\";\nimport OSelect from \"../select/Select.vue\";\nimport OPickerWrapper from \"../utils/PickerWrapper.vue\";\nimport ODatepickerTable from \"./DatepickerTable.vue\";\nimport ODatepickerMonth from \"./DatepickerMonth.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { isDate, pad } from \"@/utils/helpers\";\nimport { defineClasses, getActiveClasses, useMatchMedia } from \"@/composables\";\n\nimport { useDatepickerMixins } from \"./useDatepickerMixins\";\nimport { getMonthNames, getWeekdayNames } from \"./utils\";\n\nimport type { OptionsPropItem } from \"@/types\";\nimport type { FocusedDate } from \"./types\";\nimport type { DatepickerProps } from \"./props\";\n\n/**\n * An input with a simple dropdown/modal for selecting a date, uses native datepicker for mobile.\n * @displayName Datepicker\n * @style _datepicker.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"ODatepicker\",\n    configField: \"datepicker\",\n});\n\ntype ModelValue = DatepickerProps<IsRange, IsMultiple>[\"modelValue\"];\n\nconst props = withDefaults(\n    defineProps<DatepickerProps<IsRange, IsMultiple>>(),\n    {\n        override: undefined,\n        modelValue: undefined,\n        // range: false,\n        // multiple: false,\n        active: false,\n        type: \"date\",\n        dayNames: () => getDefault(\"datepicker.dayNames\"),\n        monthNames: () => getDefault(\"datepicker.monthNames\"),\n        size: () => getDefault(\"datepicker.size\"),\n        focusedDate: undefined,\n        events: undefined,\n        indicators: \"dots\",\n        minDate: undefined,\n        maxDate: undefined,\n        expanded: () => getDefault(\"datepicker.expanded\", false),\n        rounded: false,\n        inline: false,\n        placeholder: undefined,\n        readonly: false,\n        disabled: false,\n        openOnFocus: () => getDefault(\"datepicker.openOnFocus\", true),\n        closeOnClick: () => getDefault(\"datepicker.closeOnClick\", true),\n        locale: () => getDefault(\"locale\"),\n        formatter: getDefault(\"datepicker.formatter\"),\n        parser: getDefault(\"datepicker.parser\"),\n        creator: getDefault(\"datepicker.creator\"),\n        selectableDates: undefined,\n        unselectableDates: undefined,\n        unselectableDaysOfWeek: () =>\n            getDefault(\"datepicker.unselectableDaysOfWeek\"),\n        nearbyMonthDays: () => getDefault(\"datepicker.nearbyMonthDays\", true),\n        nearbySelectableMonthDays: () =>\n            getDefault(\"datepicker.nearbySelectableMonthDays\", false),\n        showWeekNumber: () => getDefault(\"datepicker.showWeekNumber\", false),\n        weekNumberClickable: () =>\n            getDefault(\"datepicker.weekNumberClickable\", false),\n        firstDayOfWeek: () => getDefault(\"datepicker.firstDayOfWeek\", 0),\n        rulesForFirstWeek: 4,\n        yearsRange: () => getDefault(\"datepicker.yearsRange\", [-100, 10]),\n        position: undefined,\n        iconPack: () => getDefault(\"datepicker.iconPack\"),\n        icon: () => getDefault(\"datepicker.icon\"),\n        iconRight: () => getDefault(\"datepicker.iconRight\"),\n        iconRightClickable: false,\n        iconPrev: () => getDefault(\"datepicker.iconPrev\", \"chevron-left\"),\n        iconNext: () => getDefault(\"datepicker.iconNext\", \"chevron-right\"),\n        desktopModal: () => getDefault(\"datepicker.desktopModal\", false),\n        mobileModal: () => getDefault(\"datepicker.mobileModal\", true),\n        mobileNative: () => getDefault(\"datepicker.mobileNative\", false),\n        mobileBreakpoint: () => getDefault(\"datepicker.mobileBreakpoint\"),\n        teleport: () => getDefault(\"datepicker.teleport\", false),\n        useHtml5Validation: () => getDefault(\"useHtml5Validation\", true),\n        customValidity: \"\",\n        ariaNextLabel: () =>\n            getDefault(\"datepicker.ariaNextLabel\", \"Next Page\"),\n        ariaPreviousLabel: () =>\n            getDefault(\"datepicker.ariaNextLabel\", \"Previous Page\"),\n        ariaSelectMonthLabel: () =>\n            getDefault(\"datepicker.ariaSelectMonthLabel\", \"Select Month\"),\n        ariaSelectYearLabel: () =>\n            getDefault(\"datepicker.ariaSelectYearLabel\", \"Select Year\"),\n        inputClasses: () => getDefault(\"datepicker.inputClasses\"),\n        dropdownClasses: () => getDefault(\"datepicker.dropdownClasses\"),\n        selectClasses: () => getDefault(\"datepicker.selectClasses\"),\n    },\n);\n\nconst emits = defineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {Date | Date[]} updated modelValue prop\n     */\n    \"update:model-value\": [value: ModelValue];\n    /**\n     * active prop two-way binding\n     * @param value {boolean} updated active prop\n     */\n    \"update:active\": [value: boolean];\n    /**\n     * on range start is selected event\n     * @param value {Date} range start date\n     */\n    \"range-start\": [value: Date];\n    /**\n     * on range end is selected event\n     * @param value {Date} range end date\n     */\n    \"range-end\": [value: Date];\n    /**\n     * on month change event\n     * @param value {number} month number\n     */\n    \"change-month\": [value: number];\n    /**\n     * on year change event\n     * @param value {number} year number\n     */\n    \"change-year\": [value: number];\n    /**\n     * on input focus event\n     * @param event {Event} native event\n     */\n    focus: [event: Event];\n    /**\n     * on input blur event\n     * @param event {Event} native event\n     */\n    blur: [event: Event];\n    /**\n     * on input invalid event\n     * @param event {Event} native event\n     */\n    invalid: [event: Event];\n    /**\n     * on icon click event\n     * @param event {Event} native event\n     */\n    \"icon-click\": [event: Event];\n    /**\n     * on icon right click event\n     * @param event {Event} native event\n     */\n    \"icon-right-click\": [event: Event];\n}>();\n\nconst { dtf, dateCreator, dateFormatter, dateParser } =\n    useDatepickerMixins(props);\n\nconst { isMobile } = useMatchMedia(props.mobileBreakpoint);\n\nconst pickerRef = useTemplateRef(\"pickerComponent\");\n\n// the modelvalue of selected date, use v-model to make it two-way binding\nconst vmodel = defineModel<ModelValue>({ default: undefined });\n\n// the active state of the dropdown, use v-model:active to make it two-way binding\nconst isActive = defineModel<boolean>(\"active\", { default: false });\n\nconst isTypeMonth = computed(() => props.type === \"month\");\n\n/**\n * When v-model is changed:\n *   1. Update internal value.\n */\nwatch(\n    () => props.modelValue,\n    (value: ModelValue) => {\n        const isArray = Array.isArray(value);\n        const currentDate: Date = isArray\n            ? value.length\n                ? value[value.length - 1]\n                : dateCreator()\n            : value\n              ? value\n              : dateCreator();\n        if (\n            !isArray ||\n            (isArray &&\n                Array.isArray(vmodel.value) &&\n                value.length > vmodel.value.length)\n        )\n            // update internal state\n            focusedDateData.value = {\n                day: currentDate.getDate(),\n                month: currentDate.getMonth(),\n                year: currentDate.getFullYear(),\n            };\n    },\n);\n\nwatch(\n    () => props.focusedDate,\n    (value) => {\n        if (value) {\n            focusedDateData.value = {\n                day: value.getDate(),\n                month: value.getMonth(),\n                year: value.getFullYear(),\n            };\n        }\n    },\n);\n\nconst _initialDate: Date =\n    (Array.isArray(props.modelValue)\n        ? props.modelValue[0]\n        : props.modelValue) ||\n    props.focusedDate ||\n    dateCreator();\n\nif (\n    !props.modelValue &&\n    props.maxDate &&\n    props.maxDate.getFullYear() < _initialDate.getFullYear()\n) {\n    _initialDate.setFullYear(props.maxDate.getFullYear());\n}\n\nconst focusedDateData = ref<FocusedDate>({\n    day: _initialDate.getDate(),\n    month: _initialDate.getMonth(),\n    year: _initialDate.getFullYear(),\n});\n\n/*\n * Emit input event on month and/or year change\n */\nwatch(\n    () => focusedDateData.value.month,\n    (value) => emits(\"change-month\", value),\n);\nwatch(\n    () => focusedDateData.value.year,\n    (value) => emits(\"change-year\", value),\n);\n\nconst computedMonthNames = computed(() =>\n    Array.isArray(props.monthNames)\n        ? props.monthNames\n        : getMonthNames(props.locale),\n);\n\nconst listOfMonths = computed<OptionsPropItem<number>[]>(() => {\n    let minMonth = 0;\n    let maxMonth = 12;\n    if (\n        props.minDate &&\n        focusedDateData.value.year === props.minDate.getFullYear()\n    ) {\n        minMonth = props.minDate.getMonth();\n    }\n    if (\n        props.maxDate &&\n        focusedDateData.value.year === props.maxDate.getFullYear()\n    ) {\n        maxMonth = props.maxDate.getMonth();\n    }\n    return computedMonthNames.value.map((name, index) => ({\n        label: name,\n        value: index,\n        attrs: { disabled: index < minMonth || index > maxMonth },\n    }));\n});\n\nconst computedDayNames = computed(() =>\n    Array.isArray(props.dayNames)\n        ? props.dayNames\n        : getWeekdayNames(props.locale),\n);\n\n/*\n * Returns an array of years for the year dropdown. If earliest/latest\n * dates are set by props, range of years will fall within those dates.\n */\nconst listOfYears = computed<OptionsPropItem<number>[]>(() => {\n    let latestYear = _initialDate.getFullYear() + props.yearsRange[1];\n    if (props.maxDate && props.maxDate.getFullYear() < latestYear) {\n        latestYear = Math.max(\n            props.maxDate.getFullYear(),\n            focusedDateData.value.year,\n        );\n    }\n\n    let earliestYear = _initialDate.getFullYear() + props.yearsRange[0];\n    if (props.minDate && props.minDate.getFullYear() > earliestYear) {\n        earliestYear = Math.min(\n            props.minDate.getFullYear(),\n            focusedDateData.value.year,\n        );\n    }\n\n    return Array.from(\n        { length: latestYear - earliestYear + 1 || 1 },\n        (value, index) => earliestYear + index,\n    )\n        .reverse()\n        .map((year) => ({\n            label: String(year),\n            value: year,\n        }));\n});\n\nconst showPrev = computed<boolean>(() => {\n    if (!props.minDate) return true;\n    if (isTypeMonth.value)\n        return focusedDateData.value.year > props.minDate.getFullYear();\n\n    const dateToCheck = new Date(\n        focusedDateData.value.year,\n        focusedDateData.value.month,\n    );\n    const date = new Date(\n        props.minDate.getFullYear(),\n        props.minDate.getMonth(),\n    );\n    return dateToCheck > date;\n});\n\n/**\n * Either decrement month by 1 if not January or decrement year by 1\n * and set month to 11 (December) or decrement year when 'month'\n */\nfunction prev(): void {\n    if (props.disabled) return;\n\n    if (isTypeMonth.value) {\n        focusedDateData.value.year -= 1;\n    } else {\n        if (focusedDateData.value.month > 0) {\n            focusedDateData.value.month -= 1;\n        } else {\n            focusedDateData.value.month = 11;\n            focusedDateData.value.year -= 1;\n        }\n    }\n}\n\nconst showNext = computed<boolean>(() => {\n    if (!props.maxDate) return true;\n    if (isTypeMonth.value)\n        return focusedDateData.value.year < props.maxDate.getFullYear();\n\n    const dateToCheck = new Date(\n        focusedDateData.value.year,\n        focusedDateData.value.month,\n    );\n    const date = new Date(\n        props.maxDate.getFullYear(),\n        props.maxDate.getMonth(),\n    );\n    return dateToCheck < date;\n});\n\n/**\n * Either increment month by 1 if not December or increment year by 1\n * and set month to 0 (January) or increment year when 'month'\n */\nfunction next(): void {\n    if (props.disabled) return;\n    if (isTypeMonth.value) {\n        focusedDateData.value.year += 1;\n    } else {\n        if (focusedDateData.value.month < 11) {\n            focusedDateData.value.month += 1;\n        } else {\n            focusedDateData.value.month = 0;\n            focusedDateData.value.year += 1;\n        }\n    }\n}\n\n// --- Formatter / Parser ---\n\n/** Format date into string */\nfunction format(value: Date | Date[] | undefined, isNative: boolean): string {\n    if (isNative) return formatNative(value);\n\n    // define function prop\n    const date = (Array.isArray(value) ? [...value] : value) as ModelValue;\n\n    return dateFormatter(date);\n}\n\nfunction formatNative(value: Date | Date[] | undefined): string {\n    if (Array.isArray(value)) value = value[0];\n\n    // return empty string if no value is given or value can't parse to proper date\n    if (!value) return \"\";\n    const date = new Date(value);\n    if (!isDate(date)) return \"\";\n\n    if (isTypeMonth.value) {\n        // Format date into string 'YYYY-MM'\n        const year = date.getFullYear();\n        const month = date.getMonth() + 1;\n        return year + \"-\" + pad(month);\n    } else {\n        // Format date into string 'YYYY-MM-DD'\n        const year = date.getFullYear();\n        const month = date.getMonth() + 1;\n        const day = date.getDate();\n        return year + \"-\" + pad(month) + \"-\" + pad(day);\n    }\n}\n\n/** Parse string into date */\nfunction parse(value: string, isNative: boolean): Date | Date[] | undefined {\n    if (isNative) return parseNative(value);\n\n    const date = dateParser(value);\n\n    const isValid =\n        isDate(date) ||\n        (Array.isArray(date) &&\n            date.length === 2 &&\n            isDate(date[0]) &&\n            isDate(date[1]));\n\n    return isValid ? date : undefined;\n}\n\n/** Parse date from string */\nfunction parseNative(value: string): Date | undefined {\n    const s = value ? value.split(\"-\") : [];\n    if (s.length !== 3) return undefined;\n    const year = parseInt(s[0], 10);\n    const month = parseInt(s[1]) - 1;\n    const day = parseInt(s[2]);\n    return new Date(year, month, day);\n}\n\n// --- Event Handler ---\n\n/** move to the previous focused date */\nfunction prevDate(): void {\n    if (props.disabled) return;\n\n    if (isTypeMonth.value) {\n        focusedDateData.value.year -= 1;\n    } else {\n        const date = new Date(\n            focusedDateData.value.year,\n            focusedDateData.value.month,\n            focusedDateData.value.day,\n        );\n        date.setDate(date.getDate() - 1);\n        focusedDateData.value.day = date.getDate();\n        focusedDateData.value.month = date.getMonth();\n        focusedDateData.value.year = date.getFullYear();\n\n        // todo: show selected hovered date\n        // vmodel.value = date as ModelValue;\n    }\n}\n\n/** move to the next focused date */\nfunction nextDate(): void {\n    if (props.disabled) return;\n\n    if (isTypeMonth.value) {\n        focusedDateData.value.year += 1;\n    } else {\n        const date = new Date(\n            focusedDateData.value.year,\n            focusedDateData.value.month,\n            focusedDateData.value.day,\n        );\n        date.setDate(date.getDate() + 1);\n        focusedDateData.value.day = date.getDate();\n        focusedDateData.value.month = date.getMonth();\n        focusedDateData.value.year = date.getFullYear();\n\n        // todo: show selected hovered date\n        // vmodel.value = date as ModelValue;\n    }\n}\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-datepicker\"],\n    [\n        \"sizeClass\",\n        \"o-datepicker--\",\n        computed(() => props.size),\n        computed(() => !!props.size),\n    ],\n    [\"mobileClass\", \"o-datepicker--mobile\", null, isMobile],\n    [\n        \"expandedClass\",\n        \"o-datepicker--expanded\",\n        null,\n        computed(() => props.expanded),\n    ],\n);\n\nconst boxClasses = defineClasses([\"boxClass\", \"o-datepicker__box\"]);\nconst boxClassBind = computed(() => getActiveClasses(boxClasses));\n\nconst headerClasses = defineClasses([\"headerClass\", \"o-datepicker__header\"]);\n\nconst prevButtonClasses = defineClasses([\n    \"prevButtonClass\",\n    \"o-datepicker__header__previous\",\n]);\n\nconst nextButtonClasses = defineClasses([\n    \"nextButtonClass\",\n    \"o-datepicker__header__next\",\n]);\n\nconst listsClasses = defineClasses([\n    \"listsClass\",\n    \"o-datepicker__header__list\",\n]);\n\nconst footerClasses = defineClasses([\"footerClass\", \"o-datepicker__footer\"]);\n\nconst pickerDropdownClasses = defineClasses([\n    \"dropdownClass\",\n    \"o-datepicker__dropdown\",\n]);\n\n// --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ focus: () => pickerRef.value?.focus(), value: vmodel });\n</script>\n\n<template>\n    <OPickerWrapper\n        ref=\"pickerComponent\"\n        v-model:active=\"isActive\"\n        v-model:value=\"vmodel\"\n        data-oruga=\"datepicker\"\n        :picker-props=\"props\"\n        :formatter=\"format\"\n        :parser=\"parse\"\n        :type=\"!isTypeMonth ? 'date' : 'month'\"\n        :max=\"maxDate\"\n        :min=\"minDate\"\n        :stay-open=\"props.multiple\"\n        :root-classes=\"rootClasses\"\n        :dropdown-classes=\"pickerDropdownClasses\"\n        :box-class=\"boxClassBind\"\n        :dtf=\"dtf\"\n        @focus=\"$emit('focus', $event)\"\n        @blur=\"$emit('blur', $event)\"\n        @invalid=\"$emit('invalid', $event)\"\n        @left=\"prevDate\"\n        @right=\"nextDate\"\n        @icon-click=\"$emit('icon-click', $event)\"\n        @icon-right-click=\"$emit('icon-right-click', $event)\">\n        <template v-if=\"$slots.trigger\" #trigger>\n            <!--\n                @slot Override the trigger\n            -->\n            <slot name=\"trigger\" />\n        </template>\n\n        <header :class=\"headerClasses\">\n            <!--\n                @slot Override the header\n            -->\n            <slot name=\"header\">\n                <OButton\n                    v-if=\"!disabled\"\n                    :class=\"prevButtonClasses\"\n                    :disabled=\"!showPrev\"\n                    :icon-pack=\"iconPack\"\n                    :icon-left=\"iconPrev\"\n                    :size=\"size\"\n                    :aria-label=\"ariaPreviousLabel\"\n                    @click.prevent=\"prev\"\n                    @keydown.enter.prevent=\"prev\"\n                    @keydown.space.prevent=\"prev\" />\n\n                <OButton\n                    v-if=\"!disabled\"\n                    :class=\"nextButtonClasses\"\n                    :disabled=\"!showNext\"\n                    :icon-pack=\"iconPack\"\n                    :icon-left=\"iconNext\"\n                    :size=\"size\"\n                    :aria-label=\"ariaNextLabel\"\n                    @click.prevent=\"next\"\n                    @keydown.enter.prevent=\"next\"\n                    @keydown.space.prevent=\"next\" />\n\n                <div :class=\"listsClasses\">\n                    <o-select\n                        v-if=\"!isTypeMonth\"\n                        v-bind=\"selectClasses\"\n                        v-model=\"focusedDateData.month\"\n                        :disabled=\"disabled\"\n                        :size=\"size\"\n                        :options=\"listOfMonths\"\n                        :aria-label=\"ariaSelectMonthLabel\"\n                        :use-html5-validation=\"false\"\n                        @keydown.left.stop.prevent=\"prev\"\n                        @keydown.right.stop.prevent=\"next\" />\n\n                    <o-select\n                        v-bind=\"selectClasses\"\n                        v-model=\"focusedDateData.year\"\n                        :disabled=\"disabled\"\n                        :size=\"size\"\n                        :options=\"listOfYears\"\n                        :aria-label=\"ariaSelectYearLabel\"\n                        :use-html5-validation=\"false\"\n                        @keydown.left.stop.prevent=\"prev\"\n                        @keydown.right.stop.prevent=\"next\"\n                        @keydown.up.stop.prevent=\"focusedDateData.year += 1\"\n                        @keydown.down.stop.prevent=\"\n                            focusedDateData.year -= 1\n                        \" />\n                </div>\n            </slot>\n        </header>\n\n        <!--\n            @slot Override the body\n        -->\n        <slot name=\"body\">\n            <o-datepicker-month\n                v-if=\"isTypeMonth\"\n                v-model=\"vmodel\"\n                v-model:focused-date=\"focusedDateData\"\n                :month-names=\"computedMonthNames\"\n                :picker-props=\"props\"\n                @range-start=\"(date) => $emit('range-start', date)\"\n                @range-end=\"(date) => $emit('range-end', date)\" />\n\n            <o-datepicker-table\n                v-else\n                v-model=\"vmodel\"\n                v-model:focused-date=\"focusedDateData\"\n                :day-names=\"computedDayNames\"\n                :month-names=\"computedMonthNames\"\n                :picker-props=\"props\"\n                @range-start=\"(date) => $emit('range-start', date)\"\n                @range-end=\"(date) => $emit('range-end', date)\" />\n        </slot>\n\n        <footer v-if=\"$slots.footer\" :class=\"footerClasses\">\n            <!--\n                @slot Define an additional footer\n            -->\n            <slot name=\"footer\" />\n        </footer>\n    </OPickerWrapper>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Datepicker from \"./Datepicker.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export datepicker specific types */\nexport type { DatepickerEvent, FocusedDate } from \"./types\";\n\n/** export datepicker plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Datepicker);\n    },\n} as Plugin;\n\n/** export datepicker components */\nexport { Datepicker as ODatepicker };\n","import { computed } from \"vue\";\nimport { matchWithGroups } from \"../datepicker/utils\";\nimport type { TimepickerProps } from \"./props\";\n\nconst AM = \"AM\" as const;\nconst PM = \"PM\" as const;\nconst HOUR_FORMAT_24 = \"24\" as const;\nconst HOUR_FORMAT_12 = \"12\" as const;\n\n/** Time Format Feature */\nexport function useTimepickerMixins(props: TimepickerProps) {\n    const localeOptions = computed(\n        () =>\n            new Intl.DateTimeFormat(props.locale, {\n                hour: \"numeric\",\n                minute: \"numeric\",\n                second: props.enableSeconds ? \"numeric\" : undefined,\n            }).resolvedOptions() as Intl.DateTimeFormatOptions,\n    );\n\n    const isHourFormat24 = computed(\n        () =>\n            (props.hourFormat && props.hourFormat === HOUR_FORMAT_24) ||\n            (!props.hourFormat && !localeOptions.value.hour12),\n    );\n\n    const dtf = computed(\n        () =>\n            new Intl.DateTimeFormat(props.locale, {\n                hour: localeOptions.value.hour || \"numeric\",\n                minute: localeOptions.value.minute || \"numeric\",\n                second: props.enableSeconds\n                    ? localeOptions.value.second || \"numeric\"\n                    : undefined,\n                hourCycle: !isHourFormat24.value ? \"h12\" : \"h23\",\n            }),\n    );\n\n    const sampleTime = computed(() => {\n        const d = timeCreator();\n        d.setHours(10);\n        d.setSeconds(0);\n        d.setMinutes(0);\n        d.setMilliseconds(0);\n        return d;\n    });\n\n    const amString = computed(() => {\n        if (\n            dtf.value.formatToParts &&\n            typeof dtf.value.formatToParts === \"function\"\n        ) {\n            const d = new Date(sampleTime.value);\n            d.setHours(10);\n            const dayPeriod = dtf.value\n                .formatToParts(d)\n                .find((part) => part.type === \"dayPeriod\");\n            if (dayPeriod) return dayPeriod.value;\n        }\n        return AM;\n    });\n\n    const pmString = computed(() => {\n        if (\n            dtf.value.formatToParts &&\n            typeof dtf.value.formatToParts === \"function\"\n        ) {\n            const d = new Date(sampleTime.value);\n            d.setHours(20);\n            const dayPeriod = dtf.value\n                .formatToParts(d)\n                .find((part) => part.type === \"dayPeriod\");\n            if (dayPeriod) {\n                return dayPeriod.value;\n            }\n        }\n        return PM;\n    });\n\n    const meridiens = computed(() => [amString.value, pmString.value]);\n\n    const hourLiteral = computed(() => {\n        if (\n            dtf.value.formatToParts &&\n            typeof dtf.value.formatToParts === \"function\"\n        ) {\n            const d = new Date(sampleTime.value);\n            const parts = dtf.value.formatToParts(d);\n            const literal = parts.find(\n                (part, idx) => idx > 0 && parts[idx - 1].type === \"hour\",\n            );\n            if (literal) return literal.value;\n        }\n        return \":\";\n    });\n\n    const minuteLiteral = computed(() => {\n        if (\n            dtf.value.formatToParts &&\n            typeof dtf.value.formatToParts === \"function\"\n        ) {\n            const d = new Date(sampleTime.value);\n            const parts = dtf.value.formatToParts(d);\n            const literal = parts.find(\n                (part, idx) => idx > 0 && parts[idx - 1].type === \"minute\",\n            );\n            if (literal) return literal.value;\n        }\n        return \":\";\n    });\n\n    const secondLiteral = computed(() => {\n        if (\n            dtf.value.formatToParts &&\n            typeof dtf.value.formatToParts === \"function\"\n        ) {\n            const d = new Date(sampleTime.value);\n            const parts = dtf.value.formatToParts(d);\n            const literal = parts.find(\n                (part, idx) => idx > 0 && parts[idx - 1].type === \"second\",\n            );\n            if (literal) return literal.value;\n        }\n        return undefined;\n    });\n\n    function timeCreator(): Date {\n        return typeof props.creator === \"function\"\n            ? props.creator()\n            : new Date();\n    }\n\n    function timeFormatter(time: typeof props.modelValue): string {\n        if (typeof props.formatter === \"function\") return props.formatter(time);\n\n        if (!time) return \"00:00\";\n        return dtf.value.format(time);\n    }\n\n    function timeParser(time: string): typeof props.modelValue {\n        if (typeof props.parser === \"function\") return props.parser(time);\n\n        if (!time) return undefined;\n\n        if (\n            dtf.value.formatToParts &&\n            typeof dtf.value.formatToParts === \"function\"\n        ) {\n            const formatRegex = dtf.value\n                .formatToParts(sampleTime.value)\n                .map((part) => {\n                    if (part.type === \"literal\") {\n                        return part.value.replace(/ /g, \"\\\\s?\");\n                    } else if (part.type === \"dayPeriod\") {\n                        return `((?!=<${part.type}>)(${amString.value}|${\n                            pmString.value\n                        }|${AM}|${PM}|${AM.toLowerCase()}|${PM.toLowerCase()})?)`;\n                    }\n                    return `((?!=<${part.type}>)\\\\d+)`;\n                })\n                .join(\"\");\n            const timeGroups = matchWithGroups(formatRegex, time);\n\n            // We do a simple validation for the group.\n            // If it is not valid, it will fallback to Date.parse below\n            timeGroups.hour = timeGroups.hour\n                ? parseInt(timeGroups.hour, 10)\n                : null;\n            timeGroups.minute = timeGroups.minute\n                ? parseInt(timeGroups.minute, 10)\n                : null;\n            timeGroups.second = timeGroups.second\n                ? parseInt(timeGroups.second, 10)\n                : null;\n            if (\n                timeGroups.hour &&\n                timeGroups.hour >= 0 &&\n                timeGroups.hour < 24 &&\n                timeGroups.minute &&\n                timeGroups.minute >= 0 &&\n                timeGroups.minute < 59\n            ) {\n                if (\n                    timeGroups.dayPeriod &&\n                    (timeGroups.dayPeriod.toLowerCase() ===\n                        pmString.value.toLowerCase() ||\n                        timeGroups.dayPeriod.toLowerCase() ===\n                            PM.toLowerCase()) &&\n                    timeGroups.hour < 12\n                ) {\n                    timeGroups.hour += 12;\n                }\n                const date = new Date(sampleTime.value);\n                date.setHours(timeGroups.hour);\n                date.setMinutes(timeGroups.minute);\n                date.setSeconds(timeGroups.second || 0);\n                return date;\n            }\n        }\n\n        // Fallback if formatToParts is not supported or if we were not able to parse a valid date\n        let am = false;\n        if (props.hourFormat === HOUR_FORMAT_12) {\n            const dateString12 = time.split(\" \");\n            time = dateString12[0];\n            am = dateString12[1] === amString.value || dateString12[1] === AM;\n        }\n        const timeSplit = time.split(\":\");\n        let hours = parseInt(timeSplit[0], 10);\n        const minutes = parseInt(timeSplit[1], 10);\n        const seconds =\n            props.enableSeconds && timeSplit.length >= 3\n                ? parseInt(timeSplit[2], 10)\n                : 0;\n        if (\n            isNaN(hours) ||\n            hours < 0 ||\n            hours > 23 ||\n            (props.hourFormat === HOUR_FORMAT_12 &&\n                (hours < 1 || hours > 12)) ||\n            isNaN(minutes) ||\n            minutes < 0 ||\n            minutes > 59\n        ) {\n            return undefined;\n        }\n        const date = new Date(sampleTime.value);\n        date.setSeconds(seconds);\n        date.setMinutes(minutes);\n        if (props.hourFormat === HOUR_FORMAT_12) {\n            if (am && hours === 12) {\n                hours = 0;\n            } else if (!am && hours !== 12) {\n                hours += 12;\n            }\n        }\n        date.setHours(hours);\n        return new Date(date.getTime());\n    }\n\n    return {\n        dtf,\n        timeCreator,\n        timeFormatter,\n        timeParser,\n        pmString,\n        amString,\n        meridiens,\n        isHourFormat24,\n        hourLiteral,\n        minuteLiteral,\n        secondLiteral,\n    };\n}\n","<script setup lang=\"ts\">\nimport { computed, ref, useTemplateRef, watch } from \"vue\";\n\nimport OSelect from \"../select/Select.vue\";\nimport OPickerWrapper from \"../utils/PickerWrapper.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { isDate, isDefined, pad } from \"@/utils/helpers\";\nimport { defineClasses, useMatchMedia, getActiveClasses } from \"@/composables\";\n\nimport { useTimepickerMixins } from \"./useTimepickerMixins\";\n\nimport type { OptionsItem } from \"@/types\";\nimport type { TimepickerProps } from \"./props\";\n\n/**\n * An input with a simple dropdown/modal for selecting a time, uses native timepicker for mobile.\n * @displayName Timepicker\n * @style _timepicker.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OTimepicker\",\n    configField: \"timepicker\",\n});\n\ntype ModelValue = TimepickerProps[\"modelValue\"];\n\nconst props = withDefaults(defineProps<TimepickerProps>(), {\n    override: undefined,\n    modelValue: undefined,\n    active: false,\n    minTime: undefined,\n    maxTime: undefined,\n    inline: false,\n    placeholder: undefined,\n    expanded: () => getDefault(\"timepicker.expanded\", false),\n    rounded: false,\n    readonly: false,\n    disabled: false,\n    size: () => getDefault(\"timepicker.size\"),\n    hourFormat: undefined,\n    incrementHours: 1,\n    incrementMinutes: 1,\n    incrementSeconds: 1,\n    openOnFocus: () => getDefault(\"timepicker.openOnFocus\", true),\n    closeOnClick: () => getDefault(\"timepicker.closeOnClick\", true),\n    enableSeconds: false,\n    defaultMinutes: undefined,\n    defaultSeconds: undefined,\n    locale: () => getDefault(\"locale\"),\n    formatter: getDefault(\"timepicker.formatter\"),\n    parser: getDefault(\"timepicker.parser\"),\n    creator: getDefault(\"timepicker.creator\"),\n    unselectableTimes: undefined,\n    resetOnMeridianChange: false,\n    position: undefined,\n    iconPack: () => getDefault(\"timepicker.iconPack\"),\n    icon: () => getDefault(\"timepicker.icon\"),\n    iconRight: () => getDefault(\"timepicker.iconRight\"),\n    iconRightClickable: false,\n    desktopModal: () => getDefault(\"timepicker.desktopModal\", false),\n    mobileModal: () => getDefault(\"timepicker.mobileModal\", true),\n    mobileNative: () => getDefault(\"timepicker.mobileNative\", true),\n    mobileBreakpoint: () => getDefault(\"timepicker.mobileBreakpoint\"),\n    teleport: () => getDefault(\"timepicker.teleport\", false),\n    useHtml5Validation: () => getDefault(\"useHtml5Validation\", true),\n    customValidity: \"\",\n    inputClasses: () => getDefault(\"timepicker.inputClasses\"),\n    dropdownClasses: () => getDefault(\"timepicker.dropdownClasses\"),\n    ariaSelectSecondsLabel: () =>\n        getDefault(\"timepicker.ariaSelectSecondLabel\", \"Select Second\"),\n    ariaSelectMinutesLabel: () =>\n        getDefault(\"timepicker.ariaSelectMinuteLabel\", \"Select Minute\"),\n    ariaSelectHoursLabel: () =>\n        getDefault(\"timepicker.ariaSelectHourLabel\", \"Select Hour\"),\n    selectClasses: () => getDefault(\"timepicker.selectClasses\"),\n});\n\ndefineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {Date} updated modelValue prop\n     */\n    \"update:model-value\": [value: Date];\n    /**\n     * active prop two-way binding\n     * @param value {boolean} updated active prop\n     */\n    \"update:active\": [value: boolean];\n    /**\n     * on input focus event\n     * @param event {Event} native event\n     */\n    focus: [event: Event];\n    /**\n     * on input blur event\n     * @param event {Event} native event\n     */\n    blur: [event: Event];\n    /**\n     * on input invalid event\n     * @param event {Event} native event\n     */\n    invalid: [event: Event];\n    /**\n     * on icon click event\n     * @param event {Event} native event\n     */\n    \"icon-click\": [event: Event];\n    /**\n     * on icon right click event\n     * @param event {Event} native event\n     */\n    \"icon-right-click\": [event: Event];\n}>();\n\nconst { isMobile } = useMatchMedia(props.mobileBreakpoint);\n\nconst {\n    dtf,\n    timeCreator,\n    timeFormatter,\n    timeParser,\n    pmString,\n    amString,\n    meridiens,\n    isHourFormat24,\n    hourLiteral,\n    minuteLiteral,\n    secondLiteral,\n} = useTimepickerMixins(props);\n\nconst pickerRef = useTemplateRef(\"pickerComponent\");\n\n// the modelvalue of selected date, use v-model to make it two-way binding\nconst vmodel = defineModel<ModelValue>({ default: undefined });\n\n// the active state of the dropdown, use v-model:active to make it two-way binding\nconst isActive = defineModel<boolean>(\"active\", { default: false });\n\nconst hoursSelected = ref<number>();\nconst minutesSelected = ref<number>();\nconst secondsSelected = ref<number>();\nconst meridienSelected = ref<string>();\n\nwatch(\n    () => props.modelValue,\n    (value) => updateValue(value),\n    { immediate: true },\n);\n\n/** Update internal value. */\nfunction updateValue(value: Date | Date[] | undefined): void {\n    if (Array.isArray(value)) return updateValue(value[0]);\n    if (vmodel.value !== value) vmodel.value = value;\n    if (value) {\n        // update internal state\n        hoursSelected.value = value.getHours();\n        minutesSelected.value = value.getMinutes();\n        secondsSelected.value = value.getSeconds();\n        meridienSelected.value =\n            value.getHours() >= 12 ? pmString.value : amString.value;\n    } else {\n        // reset internal state\n        hoursSelected.value = undefined;\n        minutesSelected.value = undefined;\n        secondsSelected.value = undefined;\n        meridienSelected.value = amString.value;\n    }\n}\n\nconst step = computed(() => (props.enableSeconds ? \"1\" : undefined));\n\nwatch(\n    () => props.hourFormat,\n    () => {\n        if (isDefined(hoursSelected.value))\n            meridienSelected.value =\n                (hoursSelected.value || 0) >= 12\n                    ? pmString.value\n                    : amString.value;\n    },\n);\n\nwatch(\n    () => props.locale,\n    (value) => {\n        // see updateInternalState default\n        if (!value) meridienSelected.value = amString.value;\n    },\n);\n\nfunction formatNumber(value: number, prependZero: boolean): string {\n    return isHourFormat24.value || prependZero ? pad(value) : String(value);\n}\n\nconst hours = computed<OptionsItem<number>[]>(() => {\n    if (!props.incrementHours || props.incrementHours < 1)\n        throw new Error(\"Hour increment cannot be null or less than 1.\");\n    const hours: OptionsItem<number>[] = [];\n    const numberOfHours = isHourFormat24.value ? 24 : 12;\n    for (let i = 0; i < numberOfHours; i += props.incrementHours) {\n        let value = i;\n        let label = value;\n        if (!isHourFormat24.value) {\n            value = i + 1;\n            label = value;\n            if (meridienSelected.value === amString.value) {\n                if (value === 12) value = 0;\n            } else if (meridienSelected.value === pmString.value) {\n                if (value !== 12) value += 12;\n            }\n        }\n        hours.push({\n            label: formatNumber(label, false),\n            value: value,\n        });\n    }\n    return hours;\n});\n\nconst minutes = computed<OptionsItem<number>[]>(() => {\n    if (!props.incrementMinutes || props.incrementMinutes < 1)\n        throw new Error(\"Minute increment cannot be null or less than 1.\");\n    const minutes: OptionsItem<number>[] = [];\n    for (let i = 0; i < 60; i += props.incrementMinutes) {\n        minutes.push({\n            label: formatNumber(i, true),\n            value: i,\n        });\n    }\n    return minutes;\n});\n\nconst seconds = computed<OptionsItem<number>[]>(() => {\n    if (!props.incrementSeconds || props.incrementSeconds < 1)\n        throw new Error(\"Second increment cannot be null or less than 1.\");\n    const seconds: OptionsItem<number>[] = [];\n    for (let i = 0; i < 60; i += props.incrementSeconds) {\n        seconds.push({\n            label: formatNumber(i, true),\n            value: i,\n        });\n    }\n    return seconds;\n});\n\nfunction isHourDisabled(hour: number): boolean {\n    let disabled = false;\n    if (props.minTime) {\n        const minHours = props.minTime.getHours();\n        const noMinutesAvailable = minutes.value.every((minute) => {\n            return isMinuteDisabledForHour(hour, minute.value);\n        });\n        disabled = hour < minHours || noMinutesAvailable;\n    }\n    if (props.maxTime) {\n        if (!disabled) {\n            const maxHours = props.maxTime.getHours();\n            disabled = hour > maxHours;\n        }\n    }\n\n    if (props.unselectableTimes && !disabled) {\n        if (typeof props.unselectableTimes === \"function\") {\n            const date = new Date();\n            date.setHours(hour);\n            date.setMinutes(minutesSelected.value || 0);\n            date.setSeconds(secondsSelected.value || 0);\n            return props.unselectableTimes(date);\n        } else {\n            const unselectable = props.unselectableTimes.filter((time) => {\n                if (props.enableSeconds && isDefined(secondsSelected.value)) {\n                    return (\n                        time.getHours() === hour &&\n                        time.getMinutes() === minutesSelected.value &&\n                        time.getSeconds() === secondsSelected.value\n                    );\n                } else if (isDefined(minutesSelected.value)) {\n                    return (\n                        time.getHours() === hour &&\n                        time.getMinutes() === minutesSelected.value\n                    );\n                }\n                return false;\n            });\n            if (unselectable.length > 0) {\n                disabled = true;\n            } else {\n                disabled = minutes.value.every((minute) => {\n                    return (\n                        (props.unselectableTimes as Date[]).filter((time) => {\n                            return (\n                                time.getHours() === hour &&\n                                time.getMinutes() === minute.value\n                            );\n                        }).length > 0\n                    );\n                });\n            }\n        }\n    }\n    return disabled;\n}\n\nfunction isMinuteDisabledForHour(hour: number, minute: number): boolean {\n    let disabled = false;\n    if (props.minTime) {\n        const minHours = props.minTime.getHours();\n        const minMinutes = props.minTime.getMinutes();\n        disabled = hour === minHours && minute < minMinutes;\n    }\n    if (props.maxTime) {\n        if (!disabled) {\n            const maxHours = props.maxTime.getHours();\n            const maxMinutes = props.maxTime.getMinutes();\n            disabled = hour === maxHours && minute > maxMinutes;\n        }\n    }\n    return disabled;\n}\n\nfunction isMinuteDisabled(minute: number): boolean {\n    if (hoursSelected.value === undefined) return false;\n\n    let disabled =\n        isHourDisabled(hoursSelected.value) ||\n        isMinuteDisabledForHour(hoursSelected.value, minute);\n\n    if (props.unselectableTimes && !disabled) {\n        if (typeof props.unselectableTimes === \"function\") {\n            const date = new Date();\n            date.setHours(hoursSelected.value);\n            date.setMinutes(minute);\n            date.setSeconds(secondsSelected.value || 0);\n            return props.unselectableTimes(date);\n        } else {\n            const unselectable = props.unselectableTimes.filter((time) => {\n                if (props.enableSeconds && isDefined(secondsSelected.value)) {\n                    return (\n                        time.getHours() === hoursSelected.value &&\n                        time.getMinutes() === minute &&\n                        time.getSeconds() === secondsSelected.value\n                    );\n                } else {\n                    return (\n                        time.getHours() === hoursSelected.value &&\n                        time.getMinutes() === minute\n                    );\n                }\n            });\n            disabled = unselectable.length > 0;\n        }\n    }\n    return disabled;\n}\n\nfunction isSecondDisabled(second: number): boolean {\n    if (!isDefined(minutesSelected.value)) return false;\n    let disabled = false;\n\n    if (isMinuteDisabled(minutesSelected.value)) {\n        disabled = true;\n    } else {\n        if (props.minTime) {\n            const minHours = props.minTime.getHours();\n            const minMinutes = props.minTime.getMinutes();\n            const minSeconds = props.minTime.getSeconds();\n            disabled =\n                hoursSelected.value === minHours &&\n                minutesSelected.value === minMinutes &&\n                second < minSeconds;\n        }\n        if (props.maxTime) {\n            if (!disabled) {\n                const maxHours = props.maxTime.getHours();\n                const maxMinutes = props.maxTime.getMinutes();\n                const maxSeconds = props.maxTime.getSeconds();\n                disabled =\n                    hoursSelected.value === maxHours &&\n                    minutesSelected.value === maxMinutes &&\n                    second > maxSeconds;\n            }\n        }\n    }\n    if (props.unselectableTimes && !disabled) {\n        if (typeof props.unselectableTimes === \"function\") {\n            const date = new Date();\n            date.setHours(hoursSelected.value || 0);\n            date.setMinutes(minutesSelected.value);\n            date.setSeconds(second);\n            return props.unselectableTimes(date);\n        } else {\n            const unselectable = props.unselectableTimes.filter((time) => {\n                return (\n                    time.getHours() === hoursSelected.value &&\n                    time.getMinutes() === minutesSelected.value &&\n                    time.getSeconds() === second\n                );\n            });\n            disabled = unselectable.length > 0;\n        }\n    }\n    return disabled;\n}\n\nfunction isMeridienDisabled(meridienString: string): boolean {\n    const offset = meridienString == \"AM\" ? 0 : 12;\n    for (let i = 0; i < 12; i++) {\n        if (!isHourDisabled(i + offset)) return false;\n    }\n    return true;\n}\n\nfunction updateDateSelected(\n    hours: number,\n    minutes: number,\n    seconds: number,\n    meridiens,\n): void {\n    if (\n        isDefined(hours) &&\n        isDefined(minutes) &&\n        ((!isDefined(isHourFormat24.value) && isDefined(meridiens)) ||\n            isDefined(isHourFormat24.value))\n    ) {\n        let time: Date;\n        if (vmodel.value) {\n            time = new Date(vmodel.value);\n        } else {\n            time = timeCreator();\n            time.setMilliseconds(0);\n        }\n        time.setHours(hours);\n        time.setMinutes(minutes);\n        time.setSeconds(seconds);\n        if (!isNaN(time.getTime())) {\n            vmodel.value = new Date(time.getTime());\n        }\n    }\n}\n\n// --- Formatter / Parser ---\n\n/** Format date into string */\nfunction format(value: Date | Date[] | undefined, isNative: boolean): string {\n    if (Array.isArray(value)) return format(value[0], isNative);\n    if (isNative) return formatNative(value);\n\n    return timeFormatter(value);\n}\n\n/** Format date into string 'HH-MM-SS'*/\nfunction formatNative(value: Date | Date[] | undefined): string {\n    if (Array.isArray(value)) return formatNative(value[0]);\n\n    // return empty string if no value is given or value can't parse to proper date\n    if (!value) return \"\";\n    const date = new Date(value);\n    if (!isDate(date)) return \"\";\n\n    const hours = date.getHours();\n    const minutes = date.getMinutes();\n    const seconds = date.getSeconds();\n    return (\n        formatNumber(hours, true) +\n        \":\" +\n        formatNumber(minutes, true) +\n        \":\" +\n        formatNumber(seconds, true)\n    );\n}\n\n/** Parse string into date */\nfunction parse(value: string, isNative: boolean): Date | undefined {\n    if (isNative) return parseNative(value);\n\n    const date = timeParser(value);\n    return isDate(date) ? date : undefined;\n}\n\n/** Parse time from string */\nfunction parseNative(date: string): Date | undefined {\n    if (!date) return undefined;\n\n    let time: Date;\n    if (vmodel.value) {\n        time = new Date(vmodel.value);\n    } else {\n        time = timeCreator();\n        time.setMilliseconds(0);\n    }\n    const t = date.split(\":\");\n    time.setHours(parseInt(t[0], 10));\n    time.setMinutes(parseInt(t[1], 10));\n    time.setSeconds(t[2] ? parseInt(t[2], 10) : 0);\n    return new Date(time.getTime());\n}\n\n// --- Event Handler ---\n\nfunction onMeridienChange(value: string): void {\n    if (isDefined(hoursSelected.value) && props.resetOnMeridianChange) {\n        hoursSelected.value = undefined;\n        minutesSelected.value = undefined;\n        secondsSelected.value = undefined;\n        vmodel.value = undefined;\n    } else if (isDefined(hoursSelected.value)) {\n        if (value === pmString.value) hoursSelected.value += 12;\n        else if (value === amString.value) hoursSelected.value -= 12;\n    }\n    updateDateSelected(\n        hoursSelected.value || 0,\n        minutesSelected.value || 0,\n        props.enableSeconds ? secondsSelected.value || 0 : 0,\n        value,\n    );\n}\n\nfunction onHoursChange(value: string): void {\n    if (!minutesSelected.value && typeof props.defaultMinutes !== \"undefined\")\n        minutesSelected.value = props.defaultMinutes;\n    if (!secondsSelected.value && typeof props.defaultSeconds !== \"undefined\")\n        secondsSelected.value = props.defaultSeconds;\n\n    updateDateSelected(\n        parseInt(value, 10),\n        minutesSelected.value || 0,\n        props.enableSeconds ? secondsSelected.value || 0 : 0,\n        meridienSelected.value,\n    );\n}\n\nfunction onMinutesChange(value: string): void {\n    if (!secondsSelected.value && props.defaultSeconds)\n        secondsSelected.value = props.defaultSeconds;\n\n    updateDateSelected(\n        hoursSelected.value || 0,\n        parseInt(value, 10),\n        props.enableSeconds ? secondsSelected.value || 0 : 0,\n        meridienSelected.value,\n    );\n}\n\nfunction onSecondsChange(value: string): void {\n    updateDateSelected(\n        hoursSelected.value || 0,\n        minutesSelected.value || 0,\n        parseInt(value, 10),\n        meridienSelected.value,\n    );\n}\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-timepicker\"],\n    [\n        \"sizeClass\",\n        \"o-timepicker--\",\n        computed(() => props.size),\n        computed(() => !!props.size),\n    ],\n    [\"mobileClass\", \"o-timepicker--mobile\", null, isMobile],\n);\n\nconst separatorClasses = defineClasses([\n    \"separatorClass\",\n    \"o-timepicker__separtor\",\n]);\n\nconst footerClasses = defineClasses([\"footerClass\", \"o-timepicker__footer\"]);\n\nconst pickerDropdownClasses = defineClasses([\n    \"dropdownClass\",\n    \"o-timepicker__dropdown\",\n]);\n\nconst boxClasses = defineClasses([\"boxClass\", \"o-timepicker__box\"]);\nconst boxClassBind = computed(() => getActiveClasses(boxClasses));\n\nconst selectSelectClasses = defineClasses([\n    \"selectClasses.selectClass\",\n    \"o-timepicker__select\",\n]);\n\nconst selectPlaceholderClasses = defineClasses([\n    \"selectClasses.placeholderClass\",\n    \"o-timepicker__select-placeholder\",\n]);\n\nconst selectBind = computed(() => ({\n    \"select-class\": getActiveClasses(selectSelectClasses),\n    \"placeholder-class\": getActiveClasses(selectPlaceholderClasses),\n    ...props.selectClasses,\n}));\n\n// --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ focus: () => pickerRef.value?.focus(), value: vmodel });\n</script>\n\n<template>\n    <OPickerWrapper\n        ref=\"pickerComponent\"\n        v-model:active=\"isActive\"\n        :value=\"vmodel\"\n        data-oruga=\"timepicker\"\n        :picker-props=\"props\"\n        :formatter=\"format\"\n        :parser=\"parse\"\n        type=\"time\"\n        :max=\"maxTime\"\n        :min=\"minTime\"\n        :step=\"step\"\n        :root-classes=\"rootClasses\"\n        :dropdown-classes=\"pickerDropdownClasses\"\n        :box-class=\"boxClassBind\"\n        :dtf=\"dtf\"\n        @update:value=\"updateValue\"\n        @focus=\"$emit('focus', $event)\"\n        @blur=\"$emit('blur', $event)\"\n        @invalid=\"$emit('invalid', $event)\"\n        @icon-click=\"$emit('icon-click', $event)\"\n        @icon-right-click=\"$emit('icon-right-click', $event)\">\n        <template v-if=\"$slots.trigger\" #trigger>\n            <!--\n                @slot Override the trigger\n            -->\n            <slot name=\"trigger\" />\n        </template>\n\n        <o-select\n            v-bind=\"selectBind\"\n            v-model=\"hoursSelected\"\n            :options=\"hours\"\n            override\n            :disabled=\"disabled\"\n            placeholder=\"00\"\n            :aria-label=\"ariaSelectHoursLabel\"\n            :use-html5-validation=\"false\"\n            @change=\"onHoursChange($event.target.value)\" />\n\n        <span :class=\"separatorClasses\">{{ hourLiteral }}</span>\n\n        <o-select\n            v-bind=\"selectBind\"\n            v-model=\"minutesSelected\"\n            override\n            :disabled=\"disabled\"\n            placeholder=\"00\"\n            :aria-label=\"ariaSelectMinutesLabel\"\n            :use-html5-validation=\"false\"\n            @change=\"onMinutesChange($event.target.value)\">\n            <option\n                v-for=\"minute in minutes\"\n                :key=\"minute.value\"\n                :value=\"minute.value\"\n                :disabled=\"isMinuteDisabled(minute.value)\">\n                {{ minute.label }}\n            </option>\n        </o-select>\n\n        <template v-if=\"enableSeconds\">\n            <span :class=\"separatorClasses\">{{ minuteLiteral }}</span>\n\n            <o-select\n                v-bind=\"selectBind\"\n                v-model=\"secondsSelected\"\n                override\n                :disabled=\"disabled\"\n                placeholder=\"00\"\n                :aria-label=\"ariaSelectSecondsLabel\"\n                :use-html5-validation=\"false\"\n                @change=\"onSecondsChange($event.target.value)\">\n                <option\n                    v-for=\"second in seconds\"\n                    :key=\"second.value\"\n                    :value=\"second.value\"\n                    :disabled=\"isSecondDisabled(second.value)\">\n                    {{ second.label }}\n                </option>\n            </o-select>\n\n            <span :class=\"separatorClasses\">{{ secondLiteral }}</span>\n        </template>\n\n        <o-select\n            v-if=\"!isHourFormat24\"\n            v-bind=\"selectBind\"\n            v-model=\"meridienSelected\"\n            override\n            :disabled=\"disabled\"\n            :use-html5-validation=\"false\"\n            @change=\"onMeridienChange($event.target.value)\">\n            <option\n                v-for=\"meridien in meridiens\"\n                :key=\"meridien\"\n                :value=\"meridien\"\n                :disabled=\"isMeridienDisabled(meridien)\">\n                {{ meridien }}\n            </option>\n        </o-select>\n\n        <footer v-if=\"$slots.footer\" :class=\"footerClasses\">\n            <!--\n                @slot Define an additional content on footer\n            -->\n            <slot name=\"footer\" />\n        </footer>\n    </OPickerWrapper>\n</template>\n","import { computed } from \"vue\";\nimport { matchWithGroups } from \"../datepicker/utils\";\nimport type { DatetimepickerProps } from \"./props\";\n\nconst AM = \"AM\" as const;\nconst PM = \"PM\" as const;\nconst HOUR_FORMAT_24 = \"24\" as const;\n\n/** Time Format Feature */\nexport function useDateimepickerMixins(props: DatetimepickerProps) {\n    const localeOptions = computed(\n        () =>\n            new Intl.DateTimeFormat(props.locale, {\n                year: \"numeric\",\n                month: \"numeric\",\n                day: \"numeric\",\n                hour: \"numeric\",\n                minute: \"numeric\",\n                second: props.timepicker?.enableSeconds ? \"numeric\" : undefined,\n            }).resolvedOptions() as Intl.DateTimeFormatOptions,\n    );\n\n    const isHourFormat24 = computed(\n        () =>\n            (props.timepicker?.hourFormat &&\n                props.timepicker.hourFormat === HOUR_FORMAT_24) ||\n            (!props.timepicker?.hourFormat && !localeOptions.value.hour12),\n    );\n\n    const dtf = computed(\n        () =>\n            new Intl.DateTimeFormat(props.locale, {\n                year: localeOptions.value.year || \"numeric\",\n                month: localeOptions.value.month || \"numeric\",\n                day: localeOptions.value.day || \"numeric\",\n                hour: localeOptions.value.hour || \"numeric\",\n                minute: localeOptions.value.minute || \"numeric\",\n                second: props.timepicker?.enableSeconds\n                    ? localeOptions.value.second || \"numeric\"\n                    : undefined,\n                hourCycle: !isHourFormat24.value ? \"h12\" : \"h23\",\n            }),\n    );\n\n    const amString = computed(() => {\n        if (\n            dtf.value.formatToParts &&\n            typeof dtf.value.formatToParts === \"function\"\n        ) {\n            const d = datetimeCreator();\n            d.setHours(10);\n            const dayPeriod = dtf.value\n                .formatToParts(d)\n                .find((part) => part.type === \"dayPeriod\");\n            if (dayPeriod) return dayPeriod.value;\n        }\n        return AM;\n    });\n\n    const pmString = computed(() => {\n        if (\n            dtf.value.formatToParts &&\n            typeof dtf.value.formatToParts === \"function\"\n        ) {\n            const d = datetimeCreator();\n            d.setHours(20);\n            const dayPeriod = dtf.value\n                .formatToParts(d)\n                .find((part) => part.type === \"dayPeriod\");\n            if (dayPeriod) return dayPeriod.value;\n        }\n        return PM;\n    });\n\n    function datetimeCreator(): Date {\n        return typeof props.creator === \"function\"\n            ? props.creator()\n            : new Date();\n    }\n\n    function datetimeFormatter(date: Date): string {\n        if (typeof props.formatter === \"function\") return props.formatter(date);\n\n        if (!date) return \"\";\n        return dtf.value.format(date);\n    }\n\n    function datetimeParser(date: string): Date | undefined {\n        if (typeof props.parser === \"function\") return props.parser(date);\n\n        if (!date) return undefined;\n        if (\n            dtf.value.formatToParts &&\n            typeof dtf.value.formatToParts === \"function\"\n        ) {\n            const dayPeriods = [\n                AM,\n                PM,\n                AM.toLowerCase(),\n                PM.toLowerCase(),\n                amString.value,\n                pmString.value,\n            ];\n            const parts = dtf.value.formatToParts(new Date());\n            const formatRegex = parts\n                .map((part, idx) => {\n                    if (part.type === \"literal\") {\n                        if (\n                            idx + 1 < parts.length &&\n                            parts[idx + 1].type === \"hour\"\n                        ) {\n                            return `[^\\\\d]+`;\n                        }\n                        return part.value.replace(/ /g, \"\\\\s?\");\n                    } else if (part.type === \"dayPeriod\") {\n                        return `((?!=<${part.type}>)(${dayPeriods.join(\n                            \"|\",\n                        )})?)`;\n                    }\n                    return `((?!=<${part.type}>)\\\\d+)`;\n                })\n                .join(\"\");\n            const datetimeGroups = matchWithGroups(formatRegex, date);\n\n            // We do a simple validation for the group.\n            // If it is not valid, it will fallback to Date.parse below\n            if (\n                datetimeGroups.year &&\n                datetimeGroups.year.length === 4 &&\n                datetimeGroups.month &&\n                datetimeGroups.month <= 12 &&\n                datetimeGroups.day &&\n                datetimeGroups.day <= 31 &&\n                datetimeGroups.hour &&\n                datetimeGroups.hour >= 0 &&\n                datetimeGroups.hour < 24 &&\n                datetimeGroups.minute &&\n                datetimeGroups.minute >= 0 &&\n                datetimeGroups.minute <= 59\n            ) {\n                return new Date(\n                    datetimeGroups.year,\n                    datetimeGroups.month - 1,\n                    datetimeGroups.day,\n                    datetimeGroups.hour,\n                    datetimeGroups.minute,\n                    datetimeGroups.second || 0,\n                );\n            }\n        }\n\n        // Fallback if formatToParts is not supported or if we were not able to parse a valid date\n        return new Date(Date.parse(date));\n    }\n\n    return {\n        dtf,\n        datetimeCreator,\n        datetimeFormatter,\n        datetimeParser,\n    };\n}\n","<script setup lang=\"ts\">\nimport { computed, ref, useTemplateRef, watch } from \"vue\";\n\nimport ODatepicker from \"../datepicker/Datepicker.vue\";\nimport OTimepicker from \"../timepicker/Timepicker.vue\";\nimport OInput from \"../input/Input.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { isDate, isMobileAgent, pad } from \"@/utils/helpers\";\nimport { defineClasses, useInputHandler } from \"@/composables\";\n\nimport { useDateimepickerMixins } from \"./useDatetimepickerMixin\";\n\nimport type { DatepickerProps } from \"../datepicker/props\";\nimport type { TimepickerProps } from \"../timepicker/props\";\nimport type { DatetimepickerProps } from \"./props\";\n\n/**\n * An input with a simple dropdown/modal for selecting a date and time, uses native datetimepicker for mobile.\n * @displayName Datetimepicker\n * @style _datetimepicker.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"ODatetimepicker\",\n    configField: \"datetimepicker\",\n    inheritAttrs: false,\n});\n\ntype ModelValue = DatetimepickerProps[\"modelValue\"];\n\nconst props = withDefaults(defineProps<DatetimepickerProps>(), {\n    override: undefined,\n    modelValue: undefined,\n    active: false,\n    datepicker: undefined,\n    timepicker: undefined,\n    minDatetime: undefined,\n    maxDatetime: undefined,\n    size: () => getDefault(\"datetimepicker.size\"),\n    expanded: () => getDefault(\"datetimepicker.expanded\", false),\n    rounded: false,\n    placeholder: undefined,\n    readonly: false,\n    disabled: false,\n    inline: false,\n    openOnFocus: () => getDefault(\"datetimepicker.openOnFocus\", true),\n    locale: () => getDefault(\"locale\"),\n    formatter: getDefault(\"datetimepicker.dateFormatter\"),\n    parser: getDefault(\"datetimepicker.dateParser\"),\n    creator: getDefault(\"datetimepicker.datetimeCreator\"),\n    position: undefined,\n    iconPack: () => getDefault(\"datetimepicker.iconPack\"),\n    icon: () => getDefault(\"datetimepicker.icon\"),\n    iconRight: () => getDefault(\"datetimepicker.iconRight\"),\n    iconRightClickable: false,\n    desktopModal: () => getDefault(\"datetimepicker.desktopModal\", false),\n    mobileModal: () => getDefault(\"datetimepicker.mobileModal\", true),\n    mobileNative: () => getDefault(\"datetimepicker.mobileNative\", true),\n    teleport: () => getDefault(\"datetimepicker.teleport\", false),\n    useHtml5Validation: () => getDefault(\"useHtml5Validation\", true),\n    customValidity: \"\",\n});\n\nconst emits = defineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {Date} updated modelValue prop\n     */\n    \"update:model-value\": [value: Date];\n    /**\n     * active prop two-way binding\n     * @param value {boolean} updated active prop\n     */\n    \"update:active\": [value: boolean];\n    /**\n     * on range start is selected event\n     * @param value {Date} range start date\n     */\n    \"range-start\": [value: Date];\n    /**\n     * on range end is selected event\n     * @param value {Date} range end date\n     */\n    \"range-end\": [value: Date];\n    /**\n     * on month change event\n     * @param value {number} month number\n     */\n    \"change-month\": [value: number];\n    /**\n     * on year change event\n     * @param value {number} year number\n     */\n    \"change-year\": [value: number];\n    /**\n     * on input focus event\n     * @param event {Event} native event\n     */\n    focus: [event: Event];\n    /**\n     * on input blur event\n     * @param event {Event} native event\n     */\n    blur: [event: Event];\n    /**\n     * on input invalid event\n     * @param event {Event} native event\n     */\n    invalid: [event: Event];\n    /**\n     * on icon click event\n     * @param event {Event} native event\n     */\n    \"icon-click\": [event: Event];\n    /**\n     * on icon right click event\n     * @param event {Event} native event\n     */\n    \"icon-right-click\": [event: Event];\n}>();\n\nconst datepickerRef = useTemplateRef(\"datepickerComponent\");\nconst nativeInputRef = useTemplateRef(\"nativeInputComponent\");\n\nconst timepickerProps = ref<TimepickerProps | undefined>(props.timepicker);\nwatch(\n    () => props.timepicker,\n    (value) => (timepickerProps.value = value),\n    { deep: true },\n);\nconst datepickerProps = ref<DatepickerProps | undefined>(props.datepicker);\nwatch(\n    () => props.datepicker,\n    (value) => (datepickerProps.value = value),\n    { deep: true },\n);\n\nconst isMobileNative = computed(\n    () => props.mobileNative && isMobileAgent.any(),\n);\n\nconst elementRef = computed(() =>\n    isMobileNative.value ? nativeInputRef.value : datepickerRef.value,\n);\n\n// use form input functionality for native input\nconst { checkHtml5Validity, setFocus, onBlur, onFocus, onInvalid } = useInputHandler(\n    elementRef,\n    emits,\n    props,\n);\n\nconst { datetimeFormatter, datetimeParser } = useDateimepickerMixins(props);\n\n// the active state of the dropdown, use v-model:active to make it two-way binding\nconst isActive = defineModel<boolean>(\"active\", { default: false });\n\n// the modelvalue of selected date, use v-model to make it two-way binding\nconst vmodel = defineModel<ModelValue>({ default: undefined });\n\nfunction updateVModel(value: Date | Date[] | undefined): void {\n    if (Array.isArray(value)) return updateVModel(value[0]);\n    if (!value) {\n        vmodel.value = undefined;\n        return;\n    }\n\n    let date = new Date(value.getTime());\n    if (props.modelValue) {\n        // restore time part\n        if (\n            (value.getDate() !== props.modelValue.getDate() ||\n                value.getMonth() !== props.modelValue.getMonth() ||\n                value.getFullYear() !== props.modelValue.getFullYear()) &&\n            value.getHours() === 0 &&\n            value.getMinutes() === 0 &&\n            value.getSeconds() === 0\n        ) {\n            date.setHours(\n                props.modelValue.getHours(),\n                props.modelValue.getMinutes(),\n                props.modelValue.getSeconds(),\n                0,\n            );\n        }\n    }\n    // check min and max range\n    if (props.minDatetime && date < props.minDatetime) {\n        date = props.minDatetime;\n    } else if (props.maxDatetime && date > props.maxDatetime) {\n        date = props.maxDatetime;\n    }\n    vmodel.value = new Date(date.getTime());\n}\n\nconst minDate = computed(() => {\n    if (!props.minDatetime) return datepickerProps.value?.minDate;\n    return new Date(\n        props.minDatetime.getFullYear(),\n        props.minDatetime.getMonth(),\n        props.minDatetime.getDate(),\n        0,\n        0,\n        0,\n        0,\n    );\n});\n\nconst maxDate = computed(() => {\n    if (!props.maxDatetime) return datepickerProps.value?.maxDate;\n    return new Date(\n        props.maxDatetime.getFullYear(),\n        props.maxDatetime.getMonth(),\n        props.maxDatetime.getDate(),\n        0,\n        0,\n        0,\n        0,\n    );\n});\n\n// Only enable min/max time if local (not necessarily UTC) date portion matches\nconst minTime = computed(() => {\n    if (\n        !props.minDatetime ||\n        vmodel.value === null ||\n        typeof vmodel.value === \"undefined\" ||\n        vmodel.value.getFullYear() != props.minDatetime.getFullYear() ||\n        vmodel.value.getMonth() != props.minDatetime.getMonth() ||\n        vmodel.value.getDate() != props.minDatetime.getDate()\n    ) {\n        return timepickerProps.value?.minTime;\n    }\n    return props.minDatetime;\n});\n\nconst maxTime = computed(() => {\n    if (\n        !props.maxDatetime ||\n        vmodel.value === null ||\n        typeof vmodel.value === \"undefined\" ||\n        vmodel.value.getFullYear() != props.maxDatetime.getFullYear() ||\n        vmodel.value.getMonth() != props.maxDatetime.getMonth() ||\n        vmodel.value.getDate() != props.maxDatetime.getDate()\n    ) {\n        return timepickerProps.value?.maxTime;\n    }\n    return props.maxDatetime;\n});\n\nconst datepickerSize = computed(\n    () => datepickerProps.value?.size || props.size,\n);\n\nconst timepickerSize = computed(\n    () => timepickerProps.value?.size || props.size,\n);\n\nconst timepickerDisabled = computed(\n    () => timepickerProps.value?.disabled || props.disabled,\n);\n\n// --- Formatter / Parser ---\n\n/** Format date into string */\nfunction format(value: Date): string {\n    return datetimeFormatter(value);\n}\n\n/** Parse string into date */\nfunction parse(value: string): Date | undefined {\n    const date = datetimeParser(value);\n\n    return isDate(date) ? date : undefined;\n}\n\nfunction formatNative(value: ModelValue): string {\n    const date = value ? new Date(value) : undefined;\n    if (date && isDate(date)) {\n        const year = date.getFullYear();\n        const month = date.getMonth() + 1;\n        const day = date.getDate();\n        const hours = date.getHours();\n        const minutes = date.getMinutes();\n        const seconds = date.getSeconds();\n        return (\n            year +\n            \"-\" +\n            pad(month) +\n            \"-\" +\n            pad(day) +\n            \"T\" +\n            pad(hours) +\n            \":\" +\n            pad(minutes) +\n            \":\" +\n            pad(seconds)\n        );\n    }\n    return \"\";\n}\n\n// --- Event Handler ---\n\n/** Parse date from string */\nfunction onChangeNativePicker(event: Event): void {\n    const date = (event.target as HTMLInputElement).value;\n    const s = date ? date.split(/\\D/) : [];\n    if (s.length >= 5) {\n        const year = parseInt(s[0], 10);\n        const month = parseInt(s[1], 10) - 1;\n        const day = parseInt(s[2], 10);\n        const hours = parseInt(s[3], 10);\n        const minutes = parseInt(s[4], 10);\n        // Seconds are omitted intentionally; they are unsupported by input\n        // type=datetime-local and cause the control to fail native validation\n        updateVModel(new Date(year, month, day, hours, minutes));\n    } else {\n        updateVModel(undefined);\n    }\n}\n\n// --- Computed Component Classes ---\n\nconst datepickerWrapperClasses = defineClasses([\n    \"datepickerWrapperClass\",\n    \"o-datetimepicker__date\",\n]);\n\nconst timepickerWrapperClasses = defineClasses([\n    \"timepickerWrapperClass\",\n    \"o-datetimepicker__time\",\n]);\n\n// --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ checkHtml5Validity, focus: setFocus, value: vmodel });\n</script>\n\n<template>\n    <o-datepicker\n        v-if=\"!isMobileNative || inline\"\n        ref=\"datepickerComponent\"\n        v-bind=\"{ ...$attrs, ...datepicker }\"\n        v-model:active=\"isActive\"\n        :model-value=\"vmodel\"\n        data-oruga=\"datetimepicker\"\n        :class=\"datepickerWrapperClasses\"\n        :rounded=\"rounded\"\n        :open-on-focus=\"openOnFocus\"\n        :position=\"position\"\n        :inline=\"inline\"\n        :readonly=\"readonly\"\n        :expanded=\"expanded\"\n        :close-on-click=\"false\"\n        :formatter=\"format\"\n        :parser=\"parse\"\n        :min-date=\"minDate\"\n        :max-date=\"maxDate\"\n        :icon=\"icon\"\n        :icon-right=\"iconRight\"\n        :icon-right-clickable=\"iconRightClickable\"\n        :icon-pack=\"iconPack\"\n        :size=\"datepickerSize\"\n        :placeholder=\"placeholder\"\n        :range=\"false\"\n        :multiple=\"false\"\n        :disabled=\"disabled\"\n        :desktop-modal=\"desktopModal\"\n        :mobile-modal=\"mobileModal\"\n        :mobile-native=\"isMobileNative\"\n        :locale=\"locale\"\n        :teleport=\"teleport\"\n        :use-html5-validation=\"false\"\n        @update:model-value=\"updateVModel\"\n        @focus=\"onFocus\"\n        @blur=\"onBlur\"\n        @invalid=\"onInvalid\"\n        @change-month=\"$emit('change-month', $event)\"\n        @change-year=\"$emit('change-year', $event)\"\n        @icon-click=\"$emit('icon-click', $event)\"\n        @icon-right-click=\"$emit('icon-right-click', $event)\">\n        <template #footer>\n            <div :class=\"timepickerWrapperClasses\">\n                <o-timepicker\n                    v-bind=\"timepicker\"\n                    v-model=\"vmodel\"\n                    inline\n                    :readonly=\"readonly\"\n                    :min-time=\"minTime\"\n                    :max-time=\"maxTime\"\n                    :size=\"timepickerSize\"\n                    :disabled=\"timepickerDisabled\"\n                    :mobile-native=\"isMobileNative\"\n                    :locale=\"locale\" />\n            </div>\n\n            <template v-if=\"$slots.footer\">\n                <!--\n                    @slot Define an additional footer\n                -->\n                <slot name=\"footer\" />\n            </template>\n        </template>\n    </o-datepicker>\n\n    <!-- Native Picker -->\n    <o-input\n        v-else\n        v-bind=\"$attrs\"\n        ref=\"nativeInputComponent\"\n        type=\"datetime-local\"\n        autocomplete=\"off\"\n        :value=\"formatNative(vmodel)\"\n        :max=\"formatNative(maxDate)\"\n        :min=\"formatNative(minDate)\"\n        :placeholder=\"placeholder\"\n        :size=\"datepickerSize\"\n        :icon-pack=\"iconPack\"\n        :icon=\"icon\"\n        :rounded=\"rounded\"\n        :disabled=\"disabled\"\n        :readonly=\"false\"\n        :use-html5-validation=\"false\"\n        @change=\"onChangeNativePicker\"\n        @focus=\"onFocus\"\n        @blur=\"onBlur\"\n        @invalid=\"onInvalid\" />\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Datetimepicker from \"./Datetimepicker.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export datetimepicker plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Datetimepicker);\n    },\n} as Plugin;\n\n/** export datetimepicker components */\nexport { Datetimepicker as ODatetimepicker };\n","import type { App, Plugin } from \"vue\";\n\nimport Dropdown from \"./Dropdown.vue\";\nimport DropdownItem from \"./DropdownItem.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export dropdown plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Dropdown);\n        registerComponent(app, DropdownItem);\n    },\n} as Plugin;\n\n/** export dropdown components */\nexport { Dropdown as ODropdown, DropdownItem as ODropdownItem };\n","<script setup lang=\"ts\">\nimport {\n    computed,\n    ref,\n    useSlots,\n    watch,\n    useId,\n    useTemplateRef,\n    type VNodeArrayChildren,\n} from \"vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { isVNodeEmpty } from \"@/utils/helpers\";\nimport { defineClasses, useMatchMedia } from \"@/composables\";\n\nimport { injectField, provideField, type FieldData } from \"./fieldInjection\";\n\nimport type { FieldProps } from \"./props\";\n\n/**\n * Fields are used to add functionality to controls and to attach/group components and elements together.\n * @displayName Field\n * @style _field.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OField\",\n    configField: \"field\",\n});\n\nconst props = withDefaults(defineProps<FieldProps>(), {\n    override: undefined,\n    variant: undefined,\n    label: undefined,\n    labelSize: () => getDefault(\"field.labelsize\"),\n    labelFor: undefined,\n    labelId: () => useId(),\n    message: undefined,\n    messageTag: () => getDefault(\"field.messageTag\", \"p\"),\n    messageId: () => useId(),\n    grouped: false,\n    addons: false,\n    multiline: false,\n    horizontal: false,\n    mobileBreakpoint: () => getDefault(\"field.mobileBreakpoint\"),\n});\n\nconst { isMobile } = useMatchMedia(props.mobileBreakpoint);\n\n/** the unique id for the input to associate the label with */\nconst inputId = ref(props.labelFor);\nwatch(\n    () => props.labelFor,\n    (v) => (inputId.value = v),\n);\n\n/** set internal variant when prop change */\nconst fieldVariant = ref(props.variant);\nwatch(\n    () => props.variant,\n    (v) => (fieldVariant.value = v),\n);\n\n/** set internal message when prop change */\nconst fieldMessage = ref(props.message);\nwatch(\n    () => props.message,\n    (v) => (fieldMessage.value = v),\n);\n\n/** set parent message if we use Field in Field */\nwatch(fieldMessage, (value) => {\n    if (parentField.value && parentField.value.hasInnerField) {\n        if (!parentField.value.variant)\n            parentField.value.setVariant(fieldVariant.value);\n        if (!parentField.value.message) parentField.value.setMessage(value);\n    }\n});\n\n/** this can be set from inputs to update the focus state */\nconst isFocused = ref(false);\n/** this can be set from inputs to update the filled state */\nconst isFilled = ref(false);\n/** this can be set from sub fields to update the has inner field state */\nconst hasInnerField = ref(false);\n\n// inject parent field component if used inside one\nconst { parentField } = injectField();\n// tell parent field it has an inner field\nif (parentField.value) parentField.value.addInnerField();\n\nconst slots = useSlots();\n\nconst hasLabel = computed(() => props.label || !!slots.label);\n\nconst hasMessage = computed(\n    () =>\n        (Array.isArray(fieldMessage.value) && fieldMessage.value.length) ||\n        (!Array.isArray(fieldMessage.value) && !!fieldMessage.value) ||\n        !!slots.message,\n);\n\nconst hasBody = computed(\n    () =>\n        props.grouped ||\n        props.multiline ||\n        hasInnerField.value ||\n        hasAddons.value,\n);\n\nconst hasAddons = computed(\n    () => props.addons && !props.horizontal && !!slots.default,\n);\n\nfunction getInnerContent(vnode): VNodeArrayChildren {\n    const slot = vnode();\n    return slot.length === 1 && Array.isArray(slot[0].children)\n        ? slot[0].children\n        : slot;\n}\n\n// --- Field Dependency Injection Feature ---\n\nconst rootRef = useTemplateRef(\"rootElement\");\n\nfunction addInnerField(): void {\n    hasInnerField.value = true;\n}\nfunction setFocus(value: boolean): void {\n    isFocused.value = value;\n}\nfunction setFilled(value: boolean): void {\n    isFilled.value = value;\n}\nfunction setVariant(value?: string): void {\n    fieldVariant.value = value;\n}\nfunction setMessage(value?: string | string[]): void {\n    fieldMessage.value = value;\n}\nfunction setInputId(value: string): void {\n    inputId.value = value;\n}\n\nconst inputAttrs = computed(() => ({\n    \"aria-labelledby\": props.labelId,\n    ...(fieldVariant.value === \"error\"\n        ? { \"aria-errormessage\": props.messageId }\n        : {}),\n    ...(!!fieldMessage.value ? { \"aria-describedby\": props.messageId } : {}),\n}));\n\n// Provided data is a computed ref to ensure reactivity.\nconst provideData = computed<FieldData>(() => ({\n    $el: rootRef.value,\n    props,\n    hasInnerField: hasInnerField.value,\n    variant: fieldVariant.value,\n    message: fieldMessage.value,\n    labelId: props.labelId,\n    inputAttrs: inputAttrs.value,\n    addInnerField,\n    setInputId,\n    setFocus,\n    setFilled,\n    setVariant,\n    setMessage,\n}));\n\n// Provide field component data via dependency injection.\nprovideField(provideData);\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-field\"],\n    [\n        \"horizontalClass\",\n        \"o-field--horizontal\",\n        null,\n        computed(() => !!props.horizontal),\n    ],\n    [\"mobileClass\", \"o-field--mobile\", null, isMobile],\n    [\"focusedClass\", \"o-field--focused\", null, isFocused],\n    [\"filledClass\", \"o-field--filled\", null, isFilled],\n);\n\nconst labelClasses = defineClasses(\n    [\"labelClass\", \"o-field__label\"],\n    [\n        \"labelSizeClass\",\n        \"o-field__label--\",\n        computed(() => props.labelSize),\n        computed(() => !!props.labelSize),\n    ],\n    [\n        \"labelVariantClass\",\n        \"o-field__label--\",\n        fieldVariant,\n        computed(() => !!fieldVariant.value),\n    ],\n);\n\nconst horizontalLabelClasses = defineClasses([\n    \"horizontalLabelClass\",\n    \"o-field__horizontal-label\",\n]);\n\nconst horizontalBodyClasses = defineClasses([\n    \"horizontalBodyClass\",\n    \"o-field__horizontal-body\",\n]);\n\nconst bodyClasses = defineClasses([\"bodyClass\", \"o-field__body\"]);\n\nconst innerBodyClasses = defineClasses(\n    [\"rootClass\", \"o-field\"],\n    [\"groupedClass\", \"o-field--grouped\", null, computed(() => props.grouped)],\n    [\n        \"addonsClass\",\n        \"o-field--addons\",\n        null,\n        computed(() => !props.grouped && hasAddons.value),\n    ],\n    [\n        \"multilineClass\",\n        \"o-field--multiline\",\n        null,\n        computed(() => props.multiline),\n    ],\n);\n\nconst messageClasses = defineClasses(\n    [\"messageClass\", \"o-field__message\"],\n    [\n        \"messageVariantClass\",\n        \"o-field__message--\",\n        fieldVariant,\n        computed(() => !!fieldVariant.value),\n    ],\n);\n</script>\n\n<template>\n    <div ref=\"rootElement\" data-oruga=\"field\" :class=\"rootClasses\">\n        <div v-if=\"horizontal\" :class=\"horizontalLabelClasses\">\n            <label\n                v-if=\"hasLabel\"\n                :id=\"labelId\"\n                :for=\"inputId\"\n                :class=\"labelClasses\">\n                <!--\n                    @slot Override the label\n                    @binding {string} label - label property \n                -->\n                <slot name=\"label\" :label=\"label\">{{ label }}</slot>\n            </label>\n        </div>\n\n        <template v-else>\n            <label\n                v-if=\"hasLabel\"\n                :id=\"labelId\"\n                :for=\"inputId\"\n                :class=\"labelClasses\">\n                <!--\n                    @slot Override the label\n                    @binding {string} label - label property \n                -->\n                <slot name=\"label\" :label=\"label\">{{ label }}</slot>\n            </label>\n        </template>\n\n        <div v-if=\"horizontal\" :class=\"horizontalBodyClasses\">\n            <template\n                v-for=\"(element, index) in getInnerContent($slots.default)\"\n                :key=\"index\">\n                <component :is=\"element\" v-if=\"isVNodeEmpty(element)\" />\n\n                <OField\n                    v-else\n                    :variant=\"fieldVariant\"\n                    :addons=\"false\"\n                    :label-id=\"labelId\"\n                    :message-id=\"messageId\"\n                    :message-tag=\"messageTag\"\n                    :message-class=\"messageClass\"\n                    :message=\"index === 0 ? fieldMessage : undefined\">\n                    <!-- render inner default slot element -->\n                    <component :is=\"element\" />\n                    <template v-if=\"index === 0 && $slots.message\" #message>\n                        <slot name=\"message\" :message=\"fieldMessage\" />\n                    </template>\n                </OField>\n            </template>\n        </div>\n\n        <div v-else-if=\"hasBody\" :class=\"bodyClasses\">\n            <div :class=\"innerBodyClasses\">\n                <!--\n                   @slot Default content\n                -->\n                <slot />\n            </div>\n        </div>\n\n        <template v-else>\n            <!--\n                @slot Default content\n            -->\n            <slot />\n        </template>\n\n        <component\n            :is=\"messageTag\"\n            v-if=\"hasMessage && !horizontal\"\n            :id=\"messageId\"\n            :class=\"messageClasses\">\n            <!--\n                @slot Override the message\n                @binding {string|string[]} message - field message \n            -->\n            <slot name=\"message\" :message=\"fieldMessage\">\n                <template v-if=\"Array.isArray(fieldMessage)\">\n                    <div v-for=\"message in fieldMessage\" :key=\"message\">\n                        {{ message }}\n                    </div>\n                </template>\n\n                <template v-else>\n                    {{ fieldMessage }}\n                </template>\n            </slot>\n        </component>\n    </div>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Field from \"./Field.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export field plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Field);\n    },\n} as Plugin;\n\n/** export field components */\nexport { Field as OField };\n","import type { App, Plugin } from \"vue\";\n\nimport Icon from \"./Icon.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export icon plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Icon);\n    },\n} as Plugin;\n\n/** export icon components */\nexport { Icon as OIcon };\n","import type { App, Plugin } from \"vue\";\n\nimport Input from \"./Input.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export input specific types */\n// no types to export here\n\n/** export input plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Input);\n    },\n} as Plugin;\n\n/** export input components */\nexport { Input as OInput };\n","<script setup lang=\"ts\">\nimport { useTemplateRef, watch } from \"vue\";\n\nimport OIcon from \"../icon/Icon.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { isClient } from \"@/utils/ssr\";\nimport {\n    defineClasses,\n    useEventListener,\n    usePreventScrolling,\n} from \"@/composables\";\n\nimport type { LoadingProps } from \"./props\";\n\n/**\n * A simple loading overlay.\n * @displayName Loading\n * @style _loading.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OLoading\",\n    configField: \"loading\",\n    inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<LoadingProps>(), {\n    override: undefined,\n    active: false,\n    fullPage: true,\n    label: undefined,\n    animation: () => getDefault(\"loading.animation\", \"fade\"),\n    cancelable: false,\n    icon: () => getDefault(\"loading.icon\", \"loading\"),\n    iconSpin: () => getDefault(\"loading.iconSpin\", true),\n    iconSize: () => getDefault(\"loading.iconSize\", \"medium\"),\n    clipScroll: () => getDefault(\"loading.clipScroll\", false),\n});\n\nconst emits = defineEmits<{\n    /**\n     * active prop two-way binding\n     * @param value {boolean} - updated active prop\n     */\n    \"update:active\": [value: boolean];\n    /**\n     * fullPage prop two-way binding\n     * @param value {boolean} - updated fullPage prop\n     */\n    \"update:fullPage\": [value: boolean];\n    /**\n     * on component close event\n     * @param value {string} - close event method\n     */\n    close: [...args: [] | [string]];\n}>();\n\nconst rootRef = useTemplateRef(\"rootElement\");\n\nconst isFullPage = defineModel<boolean>(\"fullPage\", { default: true });\n\nconst isActive = defineModel<boolean>(\"active\", { default: false });\n\nconst toggleScroll = usePreventScrolling(props.clipScroll);\n\nwatch(isActive, (value) => {\n    if (isFullPage.value) toggleScroll(value);\n});\n\n// --- Events Feature ---\n\nif (isClient) {\n    // register onKeyPress event when is active\n    useEventListener(rootRef, \"keyup\", onKeyPress, { trigger: isActive });\n}\n\n/** Keypress event that is bound to the document. */\nfunction onKeyPress(event: KeyboardEvent): void {\n    if (!isActive.value) return;\n    if (event.key === \"Escape\" || event.key === \"Esc\") cancel(\"escape\");\n}\n\n/**\n * Check if method is cancelable.\n * Call close() with action `cancel`.\n * @param method Cancel method\n */\nfunction cancel(method: string): void {\n    // check if method is cancelable\n    if (\n        !props.cancelable ||\n        (Array.isArray(props.cancelable) && !props.cancelable.includes(method))\n    )\n        return;\n    close(method);\n}\n\n/** set active to false and emit close event */\nfunction close(...args: [] | [string]): void {\n    isActive.value = false;\n    emits(\"close\", ...args);\n}\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-loading\"],\n    [\"fullPageClass\", \"o-loading--fullpage\", null, isFullPage],\n);\n\nconst overlayClasses = defineClasses([\"overlayClass\", \"o-loading__overlay\"]);\n\nconst iconClasses = defineClasses([\"iconClass\", \"o-loading__icon\"]);\n\nconst labelClasses = defineClasses([\"labelClass\", \"o-loading__label\"]);\n\n// --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ close });\n</script>\n\n<template>\n    <transition :name=\"animation\">\n        <div\n            v-if=\"isActive\"\n            ref=\"rootElement\"\n            data-oruga=\"loading\"\n            :class=\"rootClasses\"\n            role=\"status\"\n            aria-live=\"polite\">\n            <div\n                :class=\"overlayClasses\"\n                :tabindex=\"-1\"\n                @click=\"cancel('outside')\" />\n            <!-- \n                @slot Override icon and label\n                @binding {close} close - function to close the component\n            -->\n            <slot :close=\"close\">\n                <o-icon\n                    :icon=\"icon\"\n                    :spin=\"iconSpin\"\n                    :size=\"iconSize\"\n                    :class=\"iconClasses\" />\n                <span v-if=\"label\" :class=\"labelClasses\">\n                    {{ label }}\n                </span>\n            </slot>\n        </div>\n    </transition>\n</template>\n","import type { ComponentInternalInstance } from \"vue\";\n\nexport default class InstanceRegistry<T = ComponentInternalInstance> {\n    entries: Array<T>;\n\n    constructor() {\n        this.entries = [];\n    }\n\n    /** Returns the number of registered active instances. */\n    count(): number {\n        return this.entries.length;\n    }\n\n    /** Returns the first registered active instance. */\n    fist(): T | undefined {\n        return this.entries.at(0);\n    }\n\n    /** Returns the last registered active instance. */\n    last(): T | undefined {\n        return this.entries.at(-1);\n    }\n\n    /** Adds a new instance to the instance stack. */\n    add(entry: T): void {\n        this.entries.push(entry);\n    }\n\n    /** Removes an instance from the instance stack. */\n    remove(entry: T): void {\n        const index = this.entries.indexOf(entry);\n        this.entries.splice(index, 1);\n    }\n\n    /** Call a function for every registered active instance. */\n    walk(callback: (value: T) => boolean | void): void {\n        // Walk a copy of the array so that the callback is allowed to remove the instance\n        this.entries = [...this.entries].filter((e) => {\n            const ret = callback(e);\n            return !(ret === true);\n        });\n    }\n}\n","import {\n    createVNode,\n    defineComponent,\n    getCurrentInstance,\n    onMounted,\n    onUnmounted,\n    type ComponentInternalInstance,\n    type VNode,\n    type VNodeTypes,\n} from \"vue\";\nimport type { ComponentProps } from \"vue-component-type-helpers\";\nimport type InstanceRegistry from \"@/components/programmatic/InstanceRegistry\";\nimport { isClient } from \"@/utils/ssr\";\n\nexport type ProgrammaticComponentProps<C extends VNodeTypes> = {\n    /**\n     * Component to be injected.\n     * Terminate the component by emitting a 'close' event — emits('close')\n     */\n    component: C;\n    /**\n     * Props to be binded to the injected component.\n     * Both attributes and properties can be used in props.\n     * Vue automatically picks the right way to assign it.\n     * `class` and `style` have the same object / array value support like in templates.\n     * Event listeners should be passed as onXxx.\n     * @see https://vuejs.org/api/render-function.html#h\n     */\n    props?: ComponentProps<C> | { container?: HTMLElement };\n    /** Programmatic component registry instance */\n    registry?: InstanceRegistry<ComponentInternalInstance>;\n};\n\nexport type CloseEventArgs<T extends VNodeTypes> =\n    Parameters<ComponentProps<T>[\"onClose\"]> extends never\n        ? unknown[]\n        : Parameters<ComponentProps<T>[\"onClose\"]>;\n\nexport type ProgrammaticComponentEmits<C extends VNodeTypes> = {\n    /**\n     * On component close event.\n     * This get called when the component emits `close` or the exposed `close` function get called.\n     */\n    close?: (...args: CloseEventArgs<C>) => void;\n    /** On component destroy event which get called when the component should be destroyed. */\n    destroy?: () => void;\n};\n\n// there is a bug with functional defineComponent and extracting the exposed type\n// export type ProgrammaticComponentExpose = ComponentExposed<\n//     typeof ProgrammaticComponent\n// >;\n\nexport type ProgrammaticComponentExpose<C extends VNodeTypes> = {\n    /** Call the close event of the component. */\n    close: (...args: CloseEventArgs<C>) => void;\n    /** Promise which get resolved on the close event. */\n    promise: Promise<CloseEventArgs<C>>;\n};\n\nexport const ProgrammaticComponent = defineComponent<\n    ProgrammaticComponentProps<VNodeTypes>,\n    ProgrammaticComponentEmits<VNodeTypes>\n>(\n    <C extends VNodeTypes>(\n        props: ProgrammaticComponentProps<C>,\n        { expose, emit, slots },\n    ) => {\n        // getting a hold of the internal instance in setup()\n        const vm = getCurrentInstance();\n        if (!vm)\n            throw new Error(\"ProgrammaticComponent initialisation failed.\");\n\n        // create response promise\n        let resolve: (args: CloseEventArgs<C>) => void;\n        const promise = new Promise<CloseEventArgs<C>>((p1) => (resolve = p1));\n\n        // add component instance to instance register\n        onMounted(() => props.registry?.add(vm));\n\n        // remove component instance from instance register\n        onUnmounted(() => props.registry?.remove(vm));\n\n        function close(...args: CloseEventArgs<C>): void {\n            // emit `onClose` event\n            emit(\"close\", ...args);\n\n            // call promise resolve\n            resolve(args);\n\n            // emit `destory` event after animation is finished\n            setTimeout(() => {\n                if (isClient)\n                    window.requestAnimationFrame(() => emit(\"destroy\"));\n                else emit(\"destroy\");\n            });\n        }\n\n        /** expose public functionalities for programmatic usage */\n        expose({ close, promise } satisfies ProgrammaticComponentExpose<C>);\n\n        // return render function which renders given component\n        return (): VNode =>\n            createVNode(\n                props.component,\n                { ...props.props, onClose: close },\n                slots[\"default\"],\n            );\n    },\n    {\n        name: \"ProgrammaticApp\",\n        // manual runtime props declaration is currently still needed.\n        props: [\"component\", \"props\", \"registry\"],\n        // manual runtime emits declaration\n        emits: [\"close\", \"destroy\"],\n        // manual runtime slot declaration\n        slots: [\"default\"],\n    },\n);\n","import {\n    createApp,\n    toValue,\n    type App,\n    type ComponentInternalInstance,\n    type EmitsToProps,\n    type MaybeRefOrGetter,\n    type VNode,\n    type VNodeTypes,\n} from \"vue\";\n\nimport InstanceRegistry from \"@/components/programmatic/InstanceRegistry\";\nimport { VueInstance } from \"@/utils/plugins\";\nimport { useTeleportDefault, resolveElement } from \"@/composables\";\n\nimport {\n    ProgrammaticComponent,\n    type ProgrammaticComponentProps,\n    type ProgrammaticComponentEmits,\n    type ProgrammaticComponentExpose,\n} from \"./ProgrammaticComponent\";\n\ndeclare module \"../../index\" {\n    interface OrugaProgrammatic {\n        programmatic: typeof ComponentProgrammatic;\n    }\n}\n\n/** programmatic global instance registry if no custom is defined */\nconst registry = new InstanceRegistry<ComponentInternalInstance>();\n\n/** useProgrammatic composable `open` function options */\nexport type ProgrammaticOptions<C extends VNodeTypes> = {\n    /**\n     * Specify a target the component get rendered into.\n     * @default `document.body`\n     */\n    target?: MaybeRefOrGetter<string | HTMLElement | null>;\n    /**\n     * Specify the template `id` for the programmatic container element.\n     * @default `programmatic-app`\n     */\n    appId?: string;\n} & Omit<ProgrammaticComponentProps<C>, \"component\"> & // component props\n    EmitsToProps<Omit<ProgrammaticComponentEmits<C>, \"destroy\">>; // component emit props\n\n/** public options interface for programmatically called components */\nexport type ProgrammaticComponentOptions<C extends VNodeTypes> = EmitsToProps<\n    Pick<ProgrammaticComponentEmits<C>, \"close\">\n> &\n    // make the type extendable\n    Record<string, any>;\n\n/** useProgrammatic composable `open` function return value */\nexport type ProgrammaticExpose<C extends VNodeTypes = VNode> =\n    ProgrammaticComponentExpose<C>;\n\nexport const ComponentProgrammatic = {\n    /** Returns the number of registered active instances. */\n    count: registry.count,\n    /**\n     * Create a new programmatic component instance.\n     * @param component component to render\n     * @param options render options\n     */\n    open<C extends VNodeTypes>(\n        component: C,\n        options?: ProgrammaticOptions<C>,\n    ): ProgrammaticExpose<C> {\n        options = { registry, ...options };\n\n        const targetQuery = toValue(options.target);\n        // define the target container\n        const target: HTMLElement | null =\n            // either by a given query selector / element\n            (targetQuery && resolveElement(targetQuery)) ||\n            // or by the default teleport target config\n            resolveElement(useTeleportDefault());\n        if (!target)\n            throw new Error(\"ComponentProgrammatic - no target is defined.\");\n\n        // create app container\n        let container: HTMLDivElement | undefined =\n            document.createElement(\"div\");\n        container.id = options.appId || \"programmatic-app\";\n\n        // place the app container into the target element\n        target.appendChild(container);\n\n        // clear instance handler\n        function onDestroy(): void {\n            // destroy app/component\n            if (app) {\n                app.unmount();\n                app = undefined;\n            }\n            // clear container\n            if (container && target) {\n                target.removeChild(container);\n                container = undefined;\n            }\n        }\n\n        // create a new vue app instance with the ProgrammaticComponent as root\n        let app: App | undefined = createApp(ProgrammaticComponent, {\n            registry: options.registry, // programmatic registry instance - can be overriden by given in options\n            component, // the component which should be rendered\n            props: { ...options.props, container: target }, // component props including the target as `container`\n            onClose: options.onClose, // custom onClose handler\n            onDestroy, // node destory cleanup handler\n        });\n\n        // share the current context to the new app instance if running inside a nother app\n        if (VueInstance)\n            app._context = Object.assign(app._context, VueInstance._context);\n\n        // render the new vue instance into the container\n        const instance = app.mount(container);\n\n        // return exposed programmatic functionalities from the mounted component instance\n        return instance as unknown as ProgrammaticExpose<C>;\n    },\n    /** close the last registred instance in the global programmatic instance registry */\n    close(...args: unknown[]): void {\n        registry.last()?.exposed?.close(...args);\n    },\n    /** close all instances in the global programmatic instance registry */\n    closeAll(...args: unknown[]): void {\n        registry.walk((entry) => entry.exposed?.close(...args));\n    },\n};\n\nexport default ComponentProgrammatic;\n","import type { App, Plugin } from \"vue\";\n\nimport ComponentProgrammatic from \"./useProgrammatic\";\n\nimport { registerComponentProgrammatic } from \"@/utils/plugins\";\nimport InstanceRegistry from \"./InstanceRegistry\";\n\n/** export programmatic specific types */\nexport type {\n    ProgrammaticOptions,\n    ProgrammaticExpose,\n    ProgrammaticComponentOptions,\n} from \"./useProgrammatic\";\nexport type { CloseEventArgs } from \"./ProgrammaticComponent\";\nexport { InstanceRegistry };\n\n/** export programmatic plugin */\nexport default {\n    install(app: App) {\n        registerComponentProgrammatic(\n            app,\n            \"programmatic\",\n            ComponentProgrammatic,\n        );\n    },\n} as Plugin;\n\n/** export composables here */\nexport { ComponentProgrammatic } from \"./useProgrammatic\";\n","import { type ComponentInternalInstance, type MaybeRefOrGetter } from \"vue\";\nimport {\n    InstanceRegistry,\n    ComponentProgrammatic,\n    type ProgrammaticComponentOptions,\n    type ProgrammaticExpose,\n} from \"../programmatic\";\n\nimport Loading from \"./Loading.vue\";\n\nimport type { LoadingProps } from \"./props\";\n\ndeclare module \"../../index\" {\n    interface OrugaProgrammatic {\n        loading: typeof LoadingProgrammatic;\n    }\n}\n\n/** loading component programmatic instance registry **/\nconst registry = new InstanceRegistry<ComponentInternalInstance>();\n\n/** useLoadingProgrammatic composable options */\nexport type LoadingProgrammaticOptions = Readonly<LoadingProps> &\n    ProgrammaticComponentOptions<typeof Loading>;\n\nconst LoadingProgrammatic = {\n    /** Returns the number of registered active instances. */\n    count: registry.count,\n    /**\n     * Create a new programmatic loading component instance.\n     * @param options loading label string or loading component props object\n     * @param target specify a target the component get rendered into\n     * @returns ProgrammaticExpose\n     */\n    open(\n        options: string | LoadingProgrammaticOptions,\n        target?: MaybeRefOrGetter<string | HTMLElement | null>,\n    ): ProgrammaticExpose<typeof Loading> {\n        const _options: LoadingProgrammaticOptions =\n            typeof options === \"string\" ? { label: options } : options;\n\n        const componentProps: LoadingProps = {\n            active: true, // set the active default state to true\n            fullPage: false, // set the full page default state to false\n            ...(_options as LoadingProps),\n        };\n\n        // create programmatic component\n        return ComponentProgrammatic.open(Loading, {\n            registry, // custom programmatic instance registry\n            target, // target the component get rendered into\n            props: componentProps, // component specific props\n            onClose: _options.onClose, // on close event handler\n        });\n    },\n    /** Close the last registred instance in the loading programmatic instance registry. */\n    close(...args: unknown[]): void {\n        registry.last()?.exposed?.close(...args);\n    },\n    /** Close all instances in the programmatic loading instance registry. */\n    closeAll(...args: unknown[]): void {\n        registry.walk((entry) => entry.exposed?.close(...args));\n    },\n};\n\nexport default LoadingProgrammatic;\n","import type { App, Plugin } from \"vue\";\n\nimport Loading from \"./Loading.vue\";\nimport LoadingProgrammatic from \"./useLoadingProgrammatic\";\n\nimport {\n    registerComponent,\n    registerComponentProgrammatic,\n} from \"@/utils/plugins\";\n\n/** export loading specific types */\nexport type { LoadingProgrammaticOptions } from \"./useLoadingProgrammatic\";\n\n/** export loading plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Loading);\n        registerComponentProgrammatic(app, \"loading\", LoadingProgrammatic);\n    },\n} as Plugin;\n\n/** export loading components & composables */\nexport { Loading as OLoading, LoadingProgrammatic };\n","import { createVNode, type FunctionalComponent } from \"vue\";\n\n/**\n * Acts much like a regular `<button>` element except that its type defaults to \"button\" even inside forms\n *\n * Useful as a default tag for components that use custom action buttons\n */\nconst PlainButton: FunctionalComponent = (props, { slots, attrs }) =>\n    createVNode(\n        \"button\",\n        {\n            type: \"button\",\n            ...props,\n            ...attrs,\n        },\n        slots.default?.(),\n    );\nexport default PlainButton;\n","<script setup lang=\"ts\" generic=\"T\">\nimport { computed, ref, useId } from \"vue\";\n\nimport OIcon from \"../icon/Icon.vue\";\nimport PlainButton from \"../utils/PlainButton\";\n\nimport { getDefault } from \"@/utils/config\";\nimport {\n    defineClasses,\n    normalizeOptions,\n    useProviderChild,\n    useProviderParent,\n    type ProviderItem,\n} from \"@/composables\";\n\nimport type {\n    MenuComponent,\n    MenuItemComponent,\n    MenuItemProvider,\n} from \"./types\";\nimport type { MenuItemProps } from \"./props\";\n\n/**\n * A menu list item.\n * @displayName Menu Item\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OMenuItem\",\n    configField: \"menu\",\n    inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<MenuItemProps<T>>(), {\n    override: undefined,\n    active: false,\n    options: undefined,\n    label: undefined,\n    expanded: false,\n    disabled: false,\n    hidden: false,\n    submenuId: () => useId(),\n    icon: undefined,\n    iconPack: () => getDefault(\"menu.iconPack\"),\n    iconSize: () => getDefault(\"menu.iconSize\"),\n    animation: () => getDefault(\"menu.animation\", \"slide\"),\n    tag: () => getDefault(\"menu.itemTag\", PlainButton),\n});\n\nconst emits = defineEmits<{\n    /**\n     * active prop two-way binding\n     * @param value {boolean} updated active prop\n     */\n    \"update:active\": [value: boolean];\n    /**\n     * onclick event\n     * @param value {string | number | object} value prop data\n     * @param event {event} Native Event\n     */\n    click: [value: T, event: Event];\n}>();\n\nconst itemValue = props.value ?? useId();\n\n// provided data is a computed ref to ensure reactivity\nconst provideData = computed<MenuItemProvider<T>>(() => ({\n    expanded: isExpanded.value,\n    setExpand,\n    triggerReset,\n}));\n\n/** provide functionalities and data to child item components */\nconst { childItems } = useProviderParent({\n    key: \"menu-item\",\n    data: provideData,\n});\n\n/** inject functionalities and data from the parent menu-item component */\nconst menuItem = useProviderChild<MenuItemProvider<T>>({\n    key: \"menu-item\",\n    needParent: false,\n});\n\n// provided data is a computed ref to ensure reactivity\nconst providedData = computed<MenuItemComponent<T>>(() => ({\n    ...props,\n    value: itemValue,\n    parent: menuItem.parent.value,\n    hasChildren: hasChildren.value,\n    expanded: isExpanded.value,\n    setExpand,\n    reset,\n    selectItem,\n}));\n\n/** inject functionalities and data from the parent menu component */\nconst { parent, item } = useProviderChild<\n    MenuComponent<T>,\n    MenuItemComponent<T>\n>({ data: providedData });\n\nconst nextSequence = parent.value.nextSequence;\n\n/** normalized programamtic options */\nconst normalizedOptions = computed(() =>\n    normalizeOptions<T>(props.options, nextSequence),\n);\n\nconst isActive = defineModel<boolean>(\"active\", { default: false });\n\nconst hasChildren = computed(() => !!childItems.value.length);\n\nconst isFocused = computed(\n    () => item.value.identifier === parent.value.focsuedIdentifier,\n);\n\nfunction selectItem(event: Event): void {\n    if (props.disabled || parent.value.disabled) return;\n    triggerReset();\n    isActive.value = !isActive.value;\n    if (parent.value.accordion) isExpanded.value = isActive.value;\n    parent.value.selectItem(isActive.value ? item.value : undefined);\n    emits(\"click\", itemValue as T, event);\n}\n\nfunction triggerReset(childs?: ProviderItem<MenuItemComponent<T>>[]): void {\n    // The point of this method is to collect references to the clicked item and any parent,\n    // this way we can skip resetting those elements.\n    if (typeof menuItem.parent.value?.triggerReset === \"function\") {\n        menuItem.parent.value.triggerReset(\n            childs ? [item.value, ...childs] : [item.value],\n        );\n    }\n    // else if not a sub item reset parent menu\n    else if (typeof parent.value.resetMenu === \"function\") {\n        parent.value.resetMenu(childs ? [item.value, ...childs] : [item.value]);\n    }\n}\n\nconst isExpanded = ref(props.expanded);\n// always expand if not accordion feature\nif (!parent.value.accordion) isExpanded.value = true;\n\nfunction setExpand(state: boolean): void {\n    if (!parent.value.accordion) return;\n    isExpanded.value = state;\n\n    if (typeof menuItem.parent.value?.setExpand === \"function\")\n        menuItem.parent.value.setExpand(state);\n}\n\nfunction reset(): void {\n    if (parent.value.accordion) isExpanded.value = false;\n    isActive.value = false;\n}\n\n// #region --- Computed Component Classes ---\n\nconst itemClasses = defineClasses(\n    [\"itemClass\", \"o-menu__item\"],\n    [\"itemActiveClass\", \"o-menu__item--active\", null, isActive],\n    [\"itemFocusedClass\", \"o-menu__item--focused\", null, isFocused],\n    [\n        \"itemDisabledClass\",\n        \"o-menu__item--disabled\",\n        null,\n        computed(() => props.disabled || parent.value.disabled),\n    ],\n);\n\nconst buttonClasses = defineClasses(\n    [\"itemButtonClass\", \"o-menu__item__button\"],\n    [\"itemButtonActiveClass\", \"o-menu__item__button--active\", null, isActive],\n    [\n        \"itemButtonFocusedClass\",\n        \"o-menu__item__button--focused\",\n        null,\n        isFocused,\n    ],\n    [\n        \"itemButtonDisabledClass\",\n        \"o-menu__item__button--disabled\",\n        null,\n        computed(() => props.disabled || parent.value.disabled),\n    ],\n    [\n        \"itemButtonIconClass\",\n        \"o-menu__item__button--icon\",\n        null,\n        computed(() => !!props.icon),\n    ],\n);\n\nconst submenuClasses = defineClasses([\n    \"itemSubmenuClass\",\n    \"o-menu__item__submenu\",\n]);\n\n// #endregion --- Computed Component Classes ---\n</script>\n\n<template>\n    <li\n        v-show=\"!hidden\"\n        :id=\"`${parent.menuId}-${item.identifier}`\"\n        data-oruga=\"menu-item\"\n        :data-id=\"`menu-${item.identifier}`\"\n        :class=\"itemClasses\"\n        role=\"none\">\n        <component\n            :is=\"tag\"\n            v-bind=\"$attrs\"\n            :class=\"buttonClasses\"\n            :role=\"parent.role + 'item'\"\n            :disabled=\"disabled || parent.disabled\"\n            tabindex=\"-1\"\n            :aria-selected=\"parent.role == 'tree' ? isActive : undefined\"\n            :aria-disabled=\"disabled || parent.disabled\"\n            :aria-expanded=\"hasChildren ? isExpanded : undefined\"\n            :aria-owns=\"hasChildren ? submenuId : undefined\"\n            @click=\"selectItem\"\n            @keydown.enter=\"selectItem\"\n            @keydown.space=\"selectItem\">\n            <o-icon\n                v-if=\"icon\"\n                :icon=\"icon\"\n                :pack=\"iconPack\"\n                :size=\"iconSize\" />\n            <!-- \n                @slot Override label\n                @binding {boolean} expanded - item expanded state\n                @binding {boolean} active - item active state\n            -->\n            <slot name=\"label\" :expanded=\"isExpanded\" :active=\"isActive\">\n                <span>{{ label }}</span>\n            </slot>\n        </component>\n\n        <!-- sub menu items -->\n        <transition v-if=\"$slots.default || options\" :name=\"animation\">\n            <ul\n                v-show=\"isExpanded\"\n                :id=\"submenuId\"\n                :class=\"submenuClasses\"\n                tabindex=\"-1\"\n                role=\"group\">\n                <!--\n                    @slot Place menu items here \n                -->\n                <slot>\n                    <OMenuItem\n                        v-for=\"option in normalizedOptions\"\n                        :key=\"option.key\"\n                        v-bind=\"option.attrs\"\n                        :value=\"option.value\"\n                        :label=\"option.label\"\n                        :hidden=\"option.hidden\" />\n                </slot>\n            </ul>\n        </transition>\n    </li>\n</template>\n","<script setup lang=\"ts\" generic=\"T\">\nimport { computed, ref, useId, useTemplateRef } from \"vue\";\n\nimport OIcon from \"../icon/Icon.vue\";\nimport OMenuItem from \"../menu/MenuItem.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { mod } from \"@/utils/helpers\";\nimport {\n    defineClasses,\n    isGroupOption,\n    normalizeOptions,\n    useProviderParent,\n    useSequentialId,\n    type ProviderItem,\n} from \"@/composables\";\n\nimport type { MenuChildItem, MenuComponent, MenuItemComponent } from \"./types\";\nimport type { MenuProps } from \"./props\";\n\n/**\n * A simple menu, for any type of vertical navigation.\n * @displayName Menu\n * @requires ./MenuItem.vue\n * @style _menu.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OMenu\",\n    configField: \"menu\",\n});\n\ntype ModelValue = MenuProps<T>[\"modelValue\"];\n\nconst props = withDefaults(defineProps<MenuProps<T>>(), {\n    override: undefined,\n    modelValue: undefined,\n    options: undefined,\n    label: undefined,\n    accordion: true,\n    disabled: false,\n    menuId: () => useId(),\n    labelId: () => useId(),\n    role: () => getDefault(\"menu.role\", \"tree\"),\n    icon: undefined,\n    iconPack: () => getDefault(\"menu.iconPack\"),\n    iconSize: () => getDefault(\"menu.iconSize\"),\n});\n\ndefineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {T} updated modelValue prop\n     */\n    \"update:model-value\": [value: ModelValue];\n}>();\n\nconst rootRef = useTemplateRef(\"rootElement\");\n\n// provided data is a computed ref to ensure reactivity\nconst provideData = computed<MenuComponent<T>>(() => ({\n    focsuedIdentifier: focusedItem.value?.identifier,\n    menuId: props.menuId,\n    accordion: props.accordion,\n    disabled: props.disabled,\n    role: props.role,\n    nextSequence,\n    resetMenu,\n    selectItem,\n}));\n\n/** provide functionalities and data to child item components */\nconst { childItems } = useProviderParent<\n    MenuItemComponent<T>,\n    MenuComponent<T>\n>({ rootRef, data: provideData });\n\n// create a unique id sequence\nconst { nextSequence } = useSequentialId();\n\n/** normalized programamtic options */\nconst normalizedOptions = computed(() =>\n    normalizeOptions<T>(props.options, nextSequence),\n);\n\n/** call reset for every menu item excluding the given one */\nfunction resetMenu(\n    excludedItems: ProviderItem<MenuItemComponent<T>>[] = [],\n): void {\n    childItems.value.forEach((item) => {\n        if (!excludedItems.map((i) => i?.identifier).includes(item.identifier))\n            item.data?.reset();\n    });\n}\n\n// #region --- Select Feature ---\n\n/** The selected item value, use v-model to make it two-way binding */\nconst vmodel = defineModel<ModelValue>({ default: undefined });\n\nconst selectedItem = ref<MenuChildItem<T>>();\n\nfunction selectItem(\n    item: ProviderItem<MenuItemComponent<T>> | undefined,\n): void {\n    const value = item?.data?.value;\n    if (vmodel.value == value) return;\n    vmodel.value = value;\n    selectedItem.value = item;\n}\n\n// #endregion --- Select Feature ---\n\n// #region --- Focus Feature ---\n\nconst focusedItem = ref<MenuChildItem<T>>();\n\n/** is any option visible */\nconst isNotEmpty = computed(() => childItems.value.some(isItemViable));\n\nfunction onCollapse(): void {\n    if (!focusedItem.value) return;\n\n    // collapse the item if already expanded\n    if (focusedItem.value.data?.expanded)\n        focusedItem.value.data?.setExpand(false);\n    // else move focus to the previus item\n    else moveFocus(-1);\n}\n\nfunction onExpend(): void {\n    if (!focusedItem.value) return;\n\n    // expand the item if not already expanded\n    if (\n        focusedItem.value.data?.hasChildren &&\n        !focusedItem.value.data?.expanded\n    )\n        focusedItem.value.data?.setExpand(true);\n    // else move focus to the next item\n    else moveFocus(1);\n}\n\n/** Set focus on a dropdown item. */\nfunction setFocus(item: MenuChildItem<T>): void {\n    focusedItem.value = item;\n}\n\n/** Set focus on a tab item. */\nfunction moveFocus(delta: 1 | -1): void {\n    if (!isNotEmpty.value) return;\n    const item = getFirstViableItem(focusedItem.value?.index || 0, delta);\n    setFocus(item);\n}\n\nfunction onUpPressed(): void {\n    moveFocus(-1);\n}\n\nfunction onDownPressed(): void {\n    moveFocus(1);\n}\n\nfunction onEnter(event: Event): void {\n    if (!focusedItem.value) return;\n    setFocus(focusedItem.value);\n    focusedItem.value.data?.selectItem(event);\n}\n\n/** Go to the first viable item */\nfunction onHomePressed(): void {\n    if (!isNotEmpty.value) return;\n    const item = getFirstViableItem(0, 1);\n    setFocus(item);\n}\n\n/** Go to the last viable item */\nfunction onEndPressed(): void {\n    if (!isNotEmpty.value) return;\n    const item = getFirstViableItem(childItems.value.length - 1, -1);\n    setFocus(item);\n}\n\n/**\n * Get the first 'viable' child, starting at startingIndex and in the direction specified\n * by the boolean parameter forward. In other words, first try to select the child at index\n * startingIndex, and if it is not visible or it is disabled, then go to the index in the\n * specified direction until either returning to startIndex or finding a viable child item.\n */\nfunction getFirstViableItem(\n    startingIndex: number,\n    delta: 1 | -1,\n): MenuChildItem<T> {\n    let newIndex = mod(\n        focusedItem.value?.index == startingIndex\n            ? startingIndex + delta\n            : startingIndex,\n        childItems.value.length,\n    );\n    for (\n        ;\n        newIndex !== focusedItem.value?.index;\n        newIndex = mod(newIndex + delta, childItems.value.length)\n    ) {\n        // Break if the item at this index is viable (not disabled)\n        if (isItemViable(childItems.value[newIndex])) break;\n    }\n\n    return childItems.value[newIndex];\n}\n\nfunction isItemViable(item: MenuChildItem<T>): boolean {\n    return (\n        !item.data?.disabled &&\n        !item.data?.hidden &&\n        (item.data?.parent?.expanded ?? true)\n    );\n}\n\nfunction onFocusLeave(): void {\n    focusedItem.value = undefined;\n}\n\n// #endregion --- Focus Feature ---\n\n// #region --- Computed Component Classes ---\n\nconst rootClasses = defineClasses([\"rootClass\", \"o-menu\"]);\n\nconst listClasses = defineClasses([\"listClass\", \"o-menu__list\"]);\n\nconst labelClasses = defineClasses([\"labelClass\", \"o-menu__label\"]);\n\n// #endregion --- Computed Component Classes ---\n</script>\n\n<template>\n    <nav\n        ref=\"rootElement\"\n        data-oruga=\"menu\"\n        :class=\"rootClasses\"\n        @focusout=\"onFocusLeave\">\n        <div v-if=\"label || $slots.label\" :id=\"labelId\" :class=\"labelClasses\">\n            <!-- \n                @slot Override icon and label\n                @binding {T} focused - the focused item value\n                @binding {number} focusedIndex - index of the focused item\n                @binding {T} selected - the selected item value\n                @binding {number} selectedIndex - index of the selected item\n            -->\n            <slot\n                name=\"label\"\n                :focused=\"focusedItem?.data\"\n                :focused-index=\"focusedItem?.index\"\n                :selected=\"selectedItem?.data\"\n                :selected-index=\"selectedItem?.index\">\n                <o-icon\n                    v-if=\"icon\"\n                    :icon=\"icon\"\n                    :pack=\"iconPack\"\n                    :size=\"iconSize\" />\n                <span>{{ label }}</span>\n            </slot>\n        </div>\n\n        <ul\n            :id=\"menuId\"\n            :class=\"listClasses\"\n            :role=\"role\"\n            :tabindex=\"0\"\n            :aria-labelledby=\"labelId\"\n            @keydown.left=\"onCollapse\"\n            @keydown.right=\"onExpend\"\n            @keydown.enter.prevent=\"onEnter\"\n            @keydown.space.prevent=\"onEnter\"\n            @keydown.up.prevent=\"onUpPressed\"\n            @keydown.down.prevent=\"onDownPressed\"\n            @keydown.home.prevent=\"onHomePressed\"\n            @keydown.end.prevent=\"onEndPressed\">\n            <!--\n                @slot Place menu items here \n                @binding {T} focused - the focused item value\n                @binding {number} focusedIndex - index of the focused item\n                @binding {T} selected - the selected item value\n                @binding {number} selectedIndex - index of the selected item\n            -->\n            <slot\n                :focused=\"focusedItem?.data\"\n                :focused-index=\"focusedItem?.index\"\n                :selected=\"selectedItem?.data\"\n                :selected-index=\"selectedItem?.index\">\n                <template v-for=\"option in normalizedOptions\" :key=\"option.key\">\n                    <OMenuItem\n                        v-if=\"isGroupOption(option)\"\n                        v-bind=\"option.attrs\"\n                        :label=\"option.label\"\n                        :hidden=\"option.hidden\">\n                        <OMenuItem\n                            v-for=\"_option in option.options\"\n                            v-bind=\"_option.attrs\"\n                            :key=\"_option.key\"\n                            :value=\"_option.value\"\n                            :label=\"_option.label\"\n                            :hidden=\"_option.hidden\" />\n                    </OMenuItem>\n\n                    <OMenuItem\n                        v-else\n                        v-bind=\"option.attrs\"\n                        :value=\"option.value\"\n                        :label=\"option.label\"\n                        :hidden=\"option.hidden\" />\n                </template>\n            </slot>\n        </ul>\n    </nav>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Menu from \"./Menu.vue\";\nimport MenuItem from \"./MenuItem.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export menu plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Menu);\n        registerComponent(app, MenuItem);\n    },\n} as Plugin;\n\n/** export menu components */\nexport { Menu as OMenu, MenuItem as OMenuItem };\n","<script setup lang=\"ts\" generic=\"C extends Component\">\nimport {\n    ref,\n    computed,\n    watch,\n    nextTick,\n    onMounted,\n    useTemplateRef,\n    type Component,\n} from \"vue\";\n\nimport OIcon from \"../icon/Icon.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { toCssDimension } from \"@/utils/helpers\";\nimport { isClient } from \"@/utils/ssr\";\nimport {\n    defineClasses,\n    useClickOutside,\n    useMatchMedia,\n    usePreventScrolling,\n    useTeleportDefault,\n    useTrapFocus,\n} from \"@/composables\";\nimport type { CloseEventArgs } from \"../programmatic\";\n\nimport type { ModalProps } from \"./props\";\n\n/**\n * Classic modal overlay to include any content you may need.\n * @displayName Modal\n * @style _modal.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OModal\",\n    configField: \"modal\",\n    inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<ModalProps<C>>(), {\n    override: undefined,\n    active: false,\n    fullScreen: false,\n    content: undefined,\n    width: () => getDefault(\"modal.width\", 960),\n    animation: () => getDefault(\"modal.animation\", \"zoom-out\"),\n    overlay: () => getDefault(\"modal.overlay\", true),\n    cancelable: () =>\n        getDefault(\"modal.cancelable\", [\"escape\", \"x\", \"outside\"]),\n    trapFocus: () => getDefault(\"modal.trapFocus\", true),\n    alert: () => getDefault(\"modal.alert\", false),\n    ariaLabel: () => getDefault(\"modal.ariaLabel\"),\n    autoFocus: () => getDefault(\"modal.autoFocus\", true),\n    closeIcon: () => getDefault(\"modal.closeIcon\", \"close\"),\n    closeIconSize: () => getDefault(\"modal.closeIconSize\", \"medium\"),\n    ariaCloseLabel: () => getDefault(\"modal.ariaCloseLabel\", \"Close\"),\n    mobileBreakpoint: () => getDefault(\"modal.mobileBreakpoint\"),\n    teleport: () => getDefault(\"modal.teleport\", false),\n    clipScroll: () => getDefault(\"modal.clipScroll\", false),\n    component: undefined,\n    props: undefined,\n    events: undefined,\n});\n\nconst emits = defineEmits<{\n    /**\n     * active prop two-way binding\n     * @param value {boolean} - updated active prop\n     */\n    \"update:active\": [value: boolean];\n    /**\n     * on component close event\n     * @param value {string} - close event method\n     */\n    close: [...args: [] | [string] | CloseEventArgs<C>];\n}>();\n\nconst { vTrapFocus } = useTrapFocus();\n\nconst rootRef = useTemplateRef(\"rootElement\");\nconst contentRef = useTemplateRef(\"contentElement\");\n\nconst isActive = defineModel<boolean>(\"active\", { default: false });\n\nconst { isMobile } = useMatchMedia(props.mobileBreakpoint);\n\nconst _teleport = computed(() =>\n    typeof props.teleport === \"boolean\"\n        ? { to: useTeleportDefault(), disabled: !props.teleport }\n        : { to: props.teleport, disabled: false },\n);\n\nconst showX = computed(() =>\n    Array.isArray(props.cancelable)\n        ? props.cancelable.indexOf(\"x\") >= 0\n        : props.cancelable,\n);\n\nconst customStyle = computed(() =>\n    !props.fullScreen ? { maxWidth: toCssDimension(props.width) } : null,\n);\n\nconst toggleScroll = usePreventScrolling(props.clipScroll);\n\nwatch(isActive, (value) => {\n    if (props.overlay) toggleScroll(value);\n    // if autoFocus focus the element\n    if (value && props.autoFocus)\n        nextTick(() => {\n            if (rootRef.value) rootRef.value.focus();\n        });\n});\n\nonMounted(() => {\n    if (isActive.value && props.overlay) toggleScroll(isActive.value);\n});\n\n// --- Events Feature ---\n\nif (isClient)\n    if (!props.overlay)\n        // register outside click event listener when is active\n        useClickOutside(contentRef, onClickedOutside, {\n            trigger: isActive,\n        });\n\n/** Close fixed sidebar if clicked outside. */\nfunction onClickedOutside(event: Event): void {\n    if (!isActive.value || isAnimating.value) return;\n    if (\n        props.overlay ||\n        (contentRef.value && !event.composedPath().includes(contentRef.value))\n    )\n        event.preventDefault();\n    cancel(\"outside\");\n}\n\n/** Escape key press event bound to the component root. */\nfunction onEscapePress(): void {\n    if (!isActive.value) return;\n    cancel(\"escape\");\n}\n\n/**\n * Check if method is cancelable.\n * Call close() with action `cancel`.\n * @param method Cancel method\n */\nfunction cancel(method: string): void {\n    // check if method is cancelable\n    if (\n        (typeof props.cancelable === \"boolean\" && !props.cancelable) ||\n        !props.cancelable ||\n        (Array.isArray(props.cancelable) && !props.cancelable.includes(method))\n    )\n        return;\n    close(method);\n}\n\n/** set active to false and emit close event */\nfunction close(...args: [] | [string] | CloseEventArgs<C>): void {\n    isActive.value = false;\n    emits(\"close\", ...args);\n}\n\n// --- Animation Feature ---\n\nconst isAnimating = ref(!props.active);\n\n/** Transition after-enter hook */\nfunction afterEnter(): void {\n    isAnimating.value = false;\n}\n\n/** Transition before-leave hook */\nfunction beforeLeave(): void {\n    isAnimating.value = true;\n}\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-modal\"],\n    [\"mobileClass\", \"o-modal--mobile\", null, isMobile],\n    [\"activeClass\", \"o-modal--active\", null, isActive],\n);\n\nconst overlayClasses = defineClasses([\"overlayClass\", \"o-modal__overlay\"]);\n\nconst contentClasses = defineClasses(\n    [\"contentClass\", \"o-modal__content\"],\n    [\n        \"fullScreenClass\",\n        \"o-modal__content--full-screen\",\n        null,\n        computed(() => props.fullScreen),\n    ],\n);\n\nconst closeClasses = defineClasses([\"closeClass\", \"o-modal__close\"]);\n\n// --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ close });\n</script>\n\n<template>\n    <Teleport :to=\"_teleport.to\" :disabled=\"_teleport.disabled\">\n        <transition\n            :name=\"animation\"\n            @after-enter=\"afterEnter\"\n            @before-leave=\"beforeLeave\">\n            <div\n                v-show=\"isActive\"\n                ref=\"rootElement\"\n                v-bind=\"$attrs\"\n                v-trap-focus=\"trapFocus && isActive\"\n                data-oruga=\"modal\"\n                :class=\"rootClasses\"\n                :tabindex=\"-1\"\n                :role=\"alert ? 'alertdialog' : 'dialog'\"\n                :aria-label=\"ariaLabel\"\n                :aria-modal=\"isActive\"\n                @keyup.escape=\"onEscapePress\">\n                <div\n                    v-if=\"overlay\"\n                    :class=\"overlayClasses\"\n                    tabindex=\"-1\"\n                    @click=\"onClickedOutside\" />\n\n                <div\n                    ref=\"contentElement\"\n                    :class=\"contentClasses\"\n                    :style=\"customStyle\">\n                    <!-- injected component for programmatic usage -->\n                    <component\n                        :is=\"component\"\n                        v-if=\"component\"\n                        v-bind=\"$props.props\"\n                        v-on=\"$props.events || {}\"\n                        @close=\"close\" />\n                    <!--\n                        @slot Modal default content, default is content prop\n                        @binding {(...args): void} close - function to close the component\n                    -->\n                    <slot v-else :close=\"close\">\n                        <div v-if=\"content\">{{ content }}</div>\n                    </slot>\n\n                    <o-icon\n                        v-if=\"showX\"\n                        v-show=\"!isAnimating\"\n                        :class=\"closeClasses\"\n                        :icon=\"closeIcon\"\n                        :size=\"closeIconSize\"\n                        clickable\n                        :aria-label=\"ariaCloseLabel\"\n                        @click=\"cancel('x')\" />\n                </div>\n            </div>\n        </transition>\n    </Teleport>\n</template>\n","import {\n    type Component,\n    type ComponentInternalInstance,\n    type MaybeRefOrGetter,\n} from \"vue\";\nimport {\n    InstanceRegistry,\n    ComponentProgrammatic,\n    type ProgrammaticComponentOptions,\n    type ProgrammaticExpose,\n} from \"../programmatic\";\n\nimport Modal from \"./Modal.vue\";\n\nimport type { ModalProps } from \"./props\";\n\ndeclare module \"../../index\" {\n    interface OrugaProgrammatic {\n        modal: typeof ModalProgrammatic;\n    }\n}\n\n/** modal component programmatic instance registry **/\nconst registry = new InstanceRegistry<ComponentInternalInstance>();\n\n/** useModalProgrammatic composable options */\nexport type ModalProgrammaticOptions<C extends Component> = Readonly<\n    ModalProps<C>\n> &\n    ProgrammaticComponentOptions<typeof Modal<C>>;\n\nconst ModalProgrammatic = {\n    /** Returns the number of registered active instances. */\n    count: registry.count,\n    /**\n     * Create a new programmatic modal component instance.\n     * @param options modal content string or modal component props object\n     * @param target specify a target the component get rendered into - default is `document.body`\n     * @returns ProgrammaticExpose\n     */\n    open<C extends Component>(\n        options: string | ModalProgrammaticOptions<C>,\n        target?: MaybeRefOrGetter<string | HTMLElement | null>,\n    ): ProgrammaticExpose<typeof Modal<C>> {\n        const _options: ModalProgrammaticOptions<C> =\n            typeof options === \"string\" ? { content: options } : options;\n\n        const componentProps: ModalProps<C> = {\n            active: true, // set the active default state to true\n            ...(_options as ModalProps<C>),\n        };\n\n        // create programmatic component\n        return ComponentProgrammatic.open(Modal, {\n            registry, // custom programmatic instance registry\n            target, // target the component get rendered into\n            props: componentProps, // component specific props\n            onClose: _options.onClose, // on close event handler\n        });\n    },\n    /** Close the last registred instance in the modal programmatic instance registry. */\n    close(...args: unknown[]): void {\n        registry.last()?.exposed?.close(...args);\n    },\n    /** Close all instances in the programmatic modal instance registry. */\n    closeAll(...args: unknown[]): void {\n        registry.walk((entry) => entry.exposed?.close(...args));\n    },\n};\n\nexport default ModalProgrammatic;\n","import type { App, Plugin } from \"vue\";\n\nimport Modal from \"./Modal.vue\";\nimport ModalProgrammatic from \"./useModalProgrammatic\";\n\nimport {\n    registerComponent,\n    registerComponentProgrammatic,\n} from \"@/utils/plugins\";\n\n/** export modal specific types */\nexport type { ModalProgrammaticOptions } from \"./useModalProgrammatic\";\n\n/** export modal plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Modal);\n        registerComponentProgrammatic(app, \"modal\", ModalProgrammatic);\n    },\n} as Plugin;\n\n/** export modal components & composables */\nexport { Modal as OModal, ModalProgrammatic };\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport OIcon from \"../icon/Icon.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { defineClasses } from \"@/composables\";\n\nimport type { NotificationProps } from \"./props\";\n\n/**\n * Bold notification blocks to alert your users of something.\n * @displayName Notification\n * @requires ./NotificationNotice.vue\n * @style _notification.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"ONotification\",\n    configField: \"notification\",\n    inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<NotificationProps>(), {\n    override: undefined,\n    message: undefined,\n    active: true,\n    type: undefined,\n    variant: () => getDefault(\"notification.variant\"),\n    rounded: () => getDefault(\"notification.rounded\"),\n    position: () => getDefault(\"notification.position\", \"top\"),\n    animation: () => getDefault(\"notification.animation\", \"fade\"),\n    icon: undefined,\n    iconPack: () => getDefault(\"notification.iconPack\"),\n    iconSize: () => getDefault(\"notification.iconSize\", \"large\"),\n    closeable: false,\n    closeIcon: () => getDefault(\"notification.closeIcon\", \"close\"),\n    closeIconSize: () => getDefault(\"notification.closeIconSize\"),\n    ariaCloseLabel: () => getDefault(\"notification.ariaCloseLabel\", \"Close\"),\n});\n\nconst emits = defineEmits<{\n    /**\n     * active prop two-way binding\n     * @param value {boolean} - updated active prop\n     */\n    \"update:active\": [value: boolean];\n    /**\n     * on component close event\n     * @param value {string} - close event method\n     */\n    close: [...args: [] | [string]];\n}>();\n\nconst isActive = defineModel<boolean>(\"active\", { default: true });\n\n/** Icon name (MDI) based on type. */\nconst computedIcon = computed(() => {\n    if (props.icon) return props.icon;\n\n    switch (props.type) {\n        case \"info\":\n            return \"information\";\n        case \"success\":\n            return \"check-circle\";\n        case \"warning\":\n            return \"alert\";\n        case \"danger\":\n            return \"alert-circle\";\n        default:\n            return null;\n    }\n});\n\n/** set active to false and emit close event */\nfunction close(...args: [] | [string]): void {\n    isActive.value = false;\n    emits(\"close\", ...args);\n}\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-notification\"],\n    [\n        \"variantClass\",\n        \"o-notification--\",\n        computed(() => props.variant),\n        computed(() => !!props.variant),\n    ],\n    [\n        \"roundedClass\",\n        \"o-notification--rounded\",\n        null,\n        computed(() => props.rounded),\n    ],\n    [\n        \"positionClass\",\n        \"o-notification--\",\n        computed(() => props.position),\n        computed(() => !!props.position),\n    ],\n);\n\nconst wrapperClasses = defineClasses([\n    \"wrapperClass\",\n    \"o-notification__wrapper\",\n]);\n\nconst iconClasses = defineClasses([\"iconClass\", \"o-notification__icon\"]);\n\nconst contentClasses = defineClasses([\n    \"contentClass\",\n    \"o-notification__content\",\n]);\n\nconst closeClasses = defineClasses([\"closeClass\", \"o-notification__close\"]);\n</script>\n\n<template>\n    <transition :name=\"animation\">\n        <article\n            v-show=\"isActive\"\n            v-bind=\"$attrs\"\n            data-oruga=\"notification\"\n            :class=\"rootClasses\">\n            <button\n                v-if=\"closeable\"\n                :class=\"closeClasses\"\n                type=\"button\"\n                :aria-label=\"ariaCloseLabel\"\n                @click=\"close('x')\">\n                <o-icon\n                    :pack=\"iconPack\"\n                    :icon=\"closeIcon\"\n                    :size=\"closeIconSize\" />\n            </button>\n\n            <!--\n                @slot Notification inner content, outside of the message container\n                @binding {(...args): void} close - function to close the notification\n            -->\n            <slot name=\"inner\" :close=\"close\" />\n\n            <div v-if=\"$slots.default || message\" :class=\"wrapperClasses\">\n                <o-icon\n                    v-if=\"computedIcon\"\n                    :icon=\"computedIcon\"\n                    :pack=\"iconPack\"\n                    :class=\"iconClasses\"\n                    :size=\"iconSize\"\n                    aria-hidden=\"true\" />\n                <div :class=\"contentClasses\">\n                    <!--\n                        @slot Notification default content, default is message prop\n                        @binding {(...args): void} close - function to close the notification\n                    -->\n                    <slot :close=\"close\">\n                        <span v-if=\"message\">{{ message }} </span>\n                    </slot>\n                </div>\n            </div>\n        </article>\n    </transition>\n</template>\n","<script setup lang=\"ts\" generic=\"C extends Component\">\nimport {\n    computed,\n    ref,\n    onMounted,\n    onBeforeMount,\n    useTemplateRef,\n    type Component,\n} from \"vue\";\n\nimport ONotification from \"./Notification.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { defineClasses, getActiveClasses } from \"@/composables\";\nimport type { CloseEventArgs } from \"../programmatic\";\n\nimport type { NotificationNoticeProps } from \"./props\";\n\n/**\n * Notification Notice is an extension of the Notification component and is used for the programmatic usage.\n * @displayName Notification Notice\n */\ndefineOptions({\n    isOruga: true,\n    name: \"ONotificationNotice\",\n    configField: \"notification\",\n    inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<NotificationNoticeProps<C>>(), {\n    override: undefined,\n    container: undefined,\n    variant: () => getDefault(\"notification.variant\"),\n    position: () => getDefault(\"notification.position\", \"top\"),\n    duration: () => getDefault(\"notification.duration\", 2000),\n    infinite: false,\n    pauseOnHover: false,\n    queue: () => getDefault(\"notification.queue\"),\n    component: undefined,\n    props: undefined,\n    events: undefined,\n});\n\nconst emits = defineEmits<{\n    /**\n     * on component close event\n     * @param value {string} - close event method\n     */\n    close: [...args: [] | [string] | CloseEventArgs<C>];\n}>();\n\nconst notificationRef = useTemplateRef(\"notificationComponent\");\n\nconst isActive = ref(true);\n\nconst parentTop = ref<Element | null>(null);\nconst parentBottom = ref<Element | null>(null);\n\n/** Create or inject notice dom container elements. */\nonBeforeMount(() => {\n    if (\n        noticeClasses.value &&\n        positionBottomClasses.value &&\n        positionTopClasses.value\n    ) {\n        const rootClasses = getActiveClasses(noticeClasses.value);\n        const topClasses = getActiveClasses(positionTopClasses.value);\n        const bottomClasses = getActiveClasses(positionBottomClasses.value);\n\n        parentTop.value = props.container.querySelector(\n            `.${rootClasses.join(\".\")}.${topClasses.join(\".\")}`,\n        );\n        parentBottom.value = props.container.querySelector(\n            `.${rootClasses.join(\".\")}.${bottomClasses.join(\".\")}`,\n        );\n\n        if (parentTop.value && parentBottom.value) return;\n\n        // create notices top container if not alread there\n        if (!parentTop.value) {\n            parentTop.value = document.createElement(\"div\");\n            parentTop.value.className = `${rootClasses.join(\n                \" \",\n            )} ${topClasses.join(\" \")}`;\n            parentTop.value.role = \"region\";\n            parentTop.value.ariaLive = \"polite\";\n        }\n\n        // create notices bottom container if not alread there\n        if (!parentBottom.value) {\n            parentBottom.value = document.createElement(\"div\");\n            parentBottom.value.className = `${rootClasses.join(\n                \" \",\n            )} ${bottomClasses.join(\" \")}`;\n            parentBottom.value.role = \"region\";\n            parentBottom.value.ariaLive = \"polite\";\n        }\n\n        // append notices top and bottom container to given container\n        props.container.appendChild(parentTop.value);\n        props.container.appendChild(parentBottom.value);\n\n        if (props.container.tagName !== \"BODY\") {\n            const classes = getActiveClasses(noticeContainerClasses.value);\n            if (classes?.length)\n                classes\n                    .filter((c) => !!c)\n                    .forEach((c: string) => {\n                        parentTop.value?.classList.add(c);\n                        parentBottom.value?.classList.add(c);\n                    });\n        }\n    }\n});\n\nonMounted(() => {\n    showNotice();\n    setAutoClose();\n});\n\nconst correctParent = computed(() => {\n    switch (props.position) {\n        case \"top-right\":\n        case \"top\":\n        case \"top-left\":\n            return parentTop.value;\n\n        case \"bottom-right\":\n        case \"bottom\":\n        case \"bottom-left\":\n            return parentBottom.value;\n        default:\n            return null;\n    }\n});\n\nconst shouldQueue = computed(() =>\n    props.queue && parentTop.value && parentBottom.value\n        ? parentTop.value.childElementCount > 0 ||\n          parentBottom.value.childElementCount > 0\n        : false,\n);\n\nconst isAlert = computed(\n    () => props.variant === \"warning\" || props.variant === \"danger\",\n);\n\n/** move the rendered component template into the correct parent container */\nfunction showNotice(): void {\n    if (!correctParent.value) return;\n\n    if (shouldQueue.value) correctParent.value.innerHTML = \"\";\n    correctParent.value.insertAdjacentElement(\n        \"afterbegin\",\n        notificationRef.value?.$el,\n    );\n}\n\n// --- Auto Close Feature  ---\n\nlet timer: ReturnType<typeof setTimeout> | undefined;\n\n/** Set timer to auto close message */\nfunction setAutoClose(): void {\n    if (!props.infinite) {\n        // clear old timer\n        if (timer) clearTimeout(timer);\n        // set new timer\n        timer = setTimeout(() => {\n            if (isActive.value) close(\"timeout\");\n        }, props.duration);\n    }\n}\n\nlet isPaused = false;\n\nfunction onMouseOver(): void {\n    if (props.pauseOnHover && !props.infinite) {\n        isPaused = true;\n        // stop auto close timeout\n        clearInterval(timer);\n    }\n}\n\nfunction onMouseLeave(): void {\n    if (isPaused)\n        // close when mouse leave and is paused before\n        close(\"mouseleave\");\n}\n\n/** set active to false and emit close event */\nfunction close(...args: [] | [string] | CloseEventArgs<C>): void {\n    isActive.value = false;\n    if (timer) clearTimeout(timer);\n    emits(\"close\", ...args);\n}\n\n// --- Computed Component Classes ---\n\nconst noticeClasses = defineClasses([\"noticeClass\", \"o-notices\"]);\n\nconst positionTopClasses = defineClasses([\n    \"noticePositionClass\",\n    \"o-notices--\",\n    \"top\",\n]);\nconst positionBottomClasses = defineClasses([\n    \"noticePositionClass\",\n    \"o-notices--\",\n    \"bottom\",\n]);\n\nconst noticeContainerClasses = defineClasses([\n    \"noticeContainerClass\",\n    \"o-notices__container\",\n]);\n\n// --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ close });\n</script>\n\n<template>\n    <o-notification\n        ref=\"notificationComponent\"\n        v-bind=\"$attrs\"\n        v-model:active=\"isActive\"\n        :override=\"override\"\n        :position=\"position\"\n        :variant=\"variant\"\n        :role=\"isAlert ? 'alert' : 'status'\"\n        :aria-atomic=\"true\"\n        @close=\"close\"\n        @mouseover=\"onMouseOver\"\n        @mouseleave=\"onMouseLeave\">\n        <template #inner=\"{ close }\">\n            <!-- injected component for programmatic usage -->\n            <component\n                v-bind=\"$props.props\"\n                :is=\"component\"\n                v-if=\"component\"\n                v-on=\"$props.events || {}\"\n                @close=\"close\" />\n        </template>\n        <slot />\n    </o-notification>\n</template>\n","import type {\n    Component,\n    ComponentInternalInstance,\n    MaybeRefOrGetter,\n} from \"vue\";\nimport {\n    InstanceRegistry,\n    ComponentProgrammatic,\n    type ProgrammaticComponentOptions,\n    type ProgrammaticExpose,\n} from \"../programmatic\";\nimport { getOption } from \"@/utils/config\";\n\nimport NotificationNotice from \"./NotificationNotice.vue\";\n\nimport type { NotificationProps, NotificationNoticeProps } from \"./props\";\n\ndeclare module \"../../index\" {\n    interface OrugaProgrammatic {\n        notification: typeof NotificationProgrammatic;\n    }\n}\n\n/** notification component programmatic instance registry */\nconst registry = new InstanceRegistry<ComponentInternalInstance>();\n\n/** useNotificationProgrammatic composable options */\nexport type NotificationProgrammaticOptions<C extends Component> = Readonly<\n    Omit<NotificationNoticeProps<C>, \"container\">\n> &\n    Readonly<NotificationProps> &\n    ProgrammaticComponentOptions<typeof NotificationNotice<C>>;\n\nconst NotificationProgrammatic = {\n    /** Returns the number of registered active instances. */\n    count: registry.count,\n    /**\n     * Create a new programmatic notification component instance.\n     * @param options notification message string or notification component props object\n     * @param target specify a target the component get rendered into - default is `document.body`\n     * @returns ProgrammaticExpose\n     */\n    open<C extends Component>(\n        options: string | NotificationProgrammaticOptions<C>,\n        target?: MaybeRefOrGetter<string | HTMLElement | null>,\n    ): ProgrammaticExpose<typeof NotificationNotice<C>> {\n        const _options: NotificationProgrammaticOptions<C> =\n            typeof options === \"string\" ? { message: options } : options;\n\n        const componentProps: NotificationNoticeProps<C> = {\n            position: getOption(\"notification.position\", \"top-right\"),\n            container: document.body,\n            ..._options, // pass all props to the internal notification component\n        };\n\n        // create programmatic component\n        return ComponentProgrammatic.open(NotificationNotice, {\n            registry, // custom programmatic instance registry\n            target, // target the component get rendered into\n            props: componentProps, // component specific props\n            onClose: _options.onClose, // on close event handler\n        });\n    },\n    /** Close the last registred instance in the notification programmatic instance registry. */\n    close(...args: unknown[]): void {\n        registry.last()?.exposed?.close(...args);\n    },\n    /** Close all instances in the programmatic notification instance registry. */\n    closeAll(...args: unknown[]): void {\n        registry.walk((entry) => entry.exposed?.close(...args));\n    },\n};\n\nexport default NotificationProgrammatic;\n","import type { App, Plugin } from \"vue\";\n\nimport Notification from \"./Notification.vue\";\nimport NotificationProgrammatic from \"./useNotificationProgrammatic\";\n\nimport {\n    registerComponent,\n    registerComponentProgrammatic,\n} from \"@/utils/plugins\";\n\n/** export notification specific types */\nexport type { NotificationProgrammaticOptions } from \"./useNotificationProgrammatic\";\n\n/** export notification plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Notification);\n        registerComponentProgrammatic(\n            app,\n            \"notification\",\n            NotificationProgrammatic,\n        );\n    },\n} as Plugin;\n\n/** export notification components & composables */\nexport { Notification as ONotification, NotificationProgrammatic };\n","<script setup lang=\"ts\">\nimport { computed, type PropType } from \"vue\";\n\nimport type { ClassBind, DynamicComponent } from \"@/types\";\n\ndefineOptions({\n    isOruga: true,\n    name: \"OPaginationButton\",\n    configField: \"pagination\",\n});\n\nconst props = defineProps({\n    number: { type: Number, default: undefined },\n    isCurrent: { type: Boolean, default: false },\n    ariaLabel: { type: String, default: undefined },\n    disabled: { type: Boolean, default: false },\n    tag: {\n        type: [String, Object, Function] as PropType<DynamicComponent>,\n        default: \"button\" as DynamicComponent,\n    },\n    rootClass: { type: Array as PropType<ClassBind[]>, default: () => [] },\n    buttonClass: {\n        type: Array as PropType<ClassBind[]>,\n        required: true,\n    },\n    buttonCurrentClass: {\n        type: Array as PropType<ClassBind[]>,\n        required: true,\n    },\n});\n\ndefineEmits<{\n    click: [event: Event];\n}>();\n\n// --- Computed Component Classes ---\n\nconst classes = computed(() => [\n    ...props.rootClass,\n    ...props.buttonClass,\n    ...(props.isCurrent ? props.buttonCurrentClass : []),\n]);\n</script>\n\n<template>\n    <component\n        :is=\"tag\"\n        role=\"button\"\n        :tabindex=\"disabled ? undefined : 0\"\n        :disabled=\"disabled\"\n        :class=\"classes\"\n        :aria-label=\"ariaLabel\"\n        :aria-current=\"isCurrent\"\n        @click.prevent=\"$emit('click', $event)\"\n        @keydown.enter.prevent=\"$emit('click', $event)\">\n        <slot>{{ number }}</slot>\n    </component>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, watch, nextTick } from \"vue\";\n\nimport OPaginationButton from \"./PaginationButton.vue\";\nimport OIcon from \"../icon/Icon.vue\";\nimport PlainButton from \"../utils/PlainButton\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { defineClasses, useMatchMedia } from \"@/composables\";\n\nimport type { PaginationProps } from \"./props\";\nimport type { DynamicComponent } from \"@/types\";\n\n/**\n * A responsive and flexible pagination.\n * @displayName Pagination\n * @style _pagination.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OPagination\",\n    configField: \"pagination\",\n    inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<PaginationProps>(), {\n    override: undefined,\n    total: undefined,\n    perPage: () => getDefault(\"pagination.perPage\", 20),\n    current: 1,\n    rangeBefore: 1,\n    rangeAfter: 1,\n    size: () => getDefault(\"pagination.size\"),\n    simple: () => getDefault(\"pagination.simple\", false),\n    rounded: () => getDefault(\"pagination.rounded\", false),\n    order: () => getDefault(\"pagination.order\", \"right\"),\n    buttonTag: () => getDefault(\"pagination.buttonTag\", PlainButton),\n    iconPack: () => getDefault(\"pagination.iconPack\"),\n    iconPrev: () => getDefault(\"pagination.iconPrev\", \"chevron-left\"),\n    iconNext: () => getDefault(\"pagination.iconNext\", \"chevron-right\"),\n    mobileBreakpoint: () => getDefault(\"pagination.mobileBreakpoint\"),\n    ariaNextLabel: () => getDefault(\"pagination.ariaNextLabel\", \"Next page\"),\n    ariaPreviousLabel: () =>\n        getDefault(\"pagination.ariaPreviousLabel\", \"Previous page\"),\n    ariaPageLabel: () => getDefault(\"pagination.ariaPageLabel\", \"Page\"),\n    ariaCurrentLabel: () =>\n        getDefault(\"pagination.ariaCurrentLabel\", \"Current page\"),\n});\n\nconst emits = defineEmits<{\n    /**\n     * current prop two-way binding\n     * @param value {number} updated current prop\n     */\n    \"update:current\": [value: number];\n    /**\n     * on current change event\n     * @param value {number} current value\n     */\n    change: [event: number];\n}>();\n\nconst { isMobile } = useMatchMedia(props.mobileBreakpoint);\n\nconst currentPage = defineModel<number>(\"current\", { default: 1 });\n\n/** Total page size (count). */\nconst pageCount = computed(() =>\n    Math.ceil((props.total || 0) / Number(props.perPage)),\n);\n\n/** If current page is trying to be greater than page count, set to last. */\nwatch(\n    () => pageCount.value,\n    (value) => {\n        if (props.current > value) last(new Event(\"change\"));\n    },\n);\n\n/** First item of the page (count). */\nconst firstItem = computed(() => {\n    const perPage = Number(props.perPage);\n    const firstItem = props.current * perPage - perPage + 1;\n    return firstItem >= 0 ? firstItem : 0;\n});\n\n/** Check if this is the first page. */\nconst isFirst = computed(() => props.current <= 1);\n\n/** Check if first page button should be visible. */\nconst hasFirst = computed(() => props.current >= props.rangeBefore + 2);\n\n/** Check if first ellipsis should be visible. */\nconst hasFirstEllipsis = computed(() => props.current >= props.rangeBefore + 4);\n\n/** Check if this is the last page. */\nconst isLast = computed(() => props.current >= pageCount.value);\n\n/** Check if last page button should be visible. */\nconst hasLast = computed(\n    () => props.current <= pageCount.value - (1 + props.rangeAfter),\n);\n\n/** Check if last ellipsis should be visible. */\nconst hasLastEllipsis = computed(\n    () => props.current < pageCount.value - (2 + props.rangeAfter),\n);\n\n/**\n * Get near pages, 1 before and 1 after the current.\n * Also add the click event to the array.\n */\nconst pagesInRange = computed<ReturnType<typeof getPage>[]>(() => {\n    if (props.simple) return [];\n\n    let left = Math.max(1, props.current - props.rangeBefore);\n    if (left - 1 === 2) {\n        left--; // Do not show the ellipsis if there is only one to hide\n    }\n    let right = Math.min(props.current + props.rangeAfter, pageCount.value);\n    if (pageCount.value - right === 2) {\n        right++; // Do not show the ellipsis if there is only one to hide\n    }\n\n    const pages: ReturnType<typeof getPage>[] = [];\n    for (let i = left; i <= right; i++) {\n        pages.push(getPage(i));\n    }\n    return pages;\n});\n\n/** Get properties for a page */\nfunction getPage(\n    num: number,\n    ariaLabel?: string,\n): {\n    number: number;\n    isCurrent: boolean;\n    onClick: (event: Event) => void;\n    ariaLabel: string;\n    tag: DynamicComponent;\n} {\n    return {\n        number: num,\n        isCurrent: props.current === num,\n        onClick: (event: Event): void => changePage(num, event),\n        ariaLabel: ariaLabel || getAriaPageLabel(num, props.current === num),\n        tag: props.buttonTag,\n    };\n}\n\n/** Get text for aria-label according to page number. */\nfunction getAriaPageLabel(pageNumber: number, isCurrent: boolean): string {\n    if (props.ariaPageLabel && (!isCurrent || !props.ariaCurrentLabel))\n        return props.ariaPageLabel + \" \" + pageNumber + \".\";\n    else if (props.ariaPageLabel && isCurrent && props.ariaCurrentLabel)\n        return (\n            props.ariaCurrentLabel +\n            \", \" +\n            props.ariaPageLabel +\n            \" \" +\n            pageNumber +\n            \".\"\n        );\n    return \"\";\n}\n\n/** Previous button click listener. */\nfunction prev(event: Event): void {\n    changePage(props.current - 1, event);\n}\n\n/** Next button click listener. */\nfunction next(event: Event): void {\n    changePage(props.current + 1, event);\n}\n\n/** First button click listener. */\nfunction first(event: Event): void {\n    changePage(1, event);\n}\n\n/** Last button click listener. */\nfunction last(event: Event): void {\n    changePage(pageCount.value, event);\n}\n\nfunction changePage(page: number, event: Event): void {\n    if (props.current === page || page < 1 || page > pageCount.value) return;\n    emits(\"change\", page);\n    currentPage.value = page;\n\n    // Set focus on element to keep tab order\n    if (event && event.target)\n        nextTick(() => (event.target as HTMLElement).focus());\n}\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-pagination\"],\n    [\n        \"orderClass\",\n        \"o-pagination--\",\n        computed(() => props.order),\n        computed(() => !!props.order),\n    ],\n    [\n        \"sizeClass\",\n        \"o-pagination--\",\n        computed(() => props.size),\n        computed(() => !!props.size),\n    ],\n    [\"simpleClass\", \"o-pagination--simple\", null, computed(() => props.simple)],\n    [\"mobileClass\", \"o-pagination--mobile\", null, isMobile],\n);\n\nconst infoClasses = defineClasses([\"infoClass\", \"o-pagination__info\"]);\n\nconst ellipsisClasses = defineClasses([\n    \"ellipsisClass\",\n    \"o-pagination__ellipsis\",\n]);\n\nconst listClasses = defineClasses([\"listClass\", \"o-pagination__list\"]);\n\nconst listItemClasses = defineClasses([\"listItemClass\", \"o-pagination__item\"]);\n\nconst buttonClasses = defineClasses(\n    [\"buttonClass\", \"o-pagination__button\"],\n    [\n        \"roundedClass\",\n        \"o-pagination__button--rounded\",\n        null,\n        computed(() => props.rounded),\n    ],\n);\n\nconst buttonCurrentClasses = defineClasses([\n    \"buttonCurrentClass\",\n    \"o-pagination__button--current\",\n]);\n\nconst buttonPrevClasses = defineClasses(\n    [\"buttonPrevClass\", \"o-pagination__button-previous\"],\n    [\"buttonDisabledClass\", \"o-pagination__button--disabled\", null, isFirst],\n);\n\nconst buttonNextClasses = defineClasses(\n    [\"buttonNextClass\", \"o-pagination__button-next\"],\n    [\"buttonDisabledClass\", \"o-pagination__button--disabled\", null, isLast],\n);\n\n// --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ last, first, prev, next });\n</script>\n\n<template>\n    <nav data-oruga=\"pagination\" :class=\"rootClasses\">\n        <!-- \n            @slot Previous button slot\n            @binding {number} number - page number \n            @binding {boolean} isCurrent - if page is current\n            @binding {(event: Event): void} onClick - click handler\n            @binding {string} ariaLabel - aria-label attribute\n        -->\n        <slot\n            name=\"previous\"\n            v-bind=\"getPage(currentPage - 1, ariaPreviousLabel)\">\n            <o-pagination-button\n                v-bind=\"getPage(currentPage - 1, ariaPreviousLabel)\"\n                :disabled=\"isFirst\"\n                :root-class=\"buttonPrevClasses\"\n                :button-class=\"buttonClasses\"\n                :button-current-class=\"buttonCurrentClasses\">\n                <o-icon :icon=\"iconPrev\" :pack=\"iconPack\" aria-hidden=\"true\" />\n            </o-pagination-button>\n        </slot>\n\n        <!-- \n            @slot Next button slot\n            @binding {number} number - page number \n            @binding {boolean} isCurrent - if page is current\n            @binding {(event: Event): void} onClick - click handler\n            @binding {string} ariaLabel - aria-label attribute\n        -->\n        <slot name=\"next\" v-bind=\"getPage(currentPage + 1, ariaNextLabel)\">\n            <o-pagination-button\n                v-bind=\"getPage(currentPage + 1, ariaNextLabel)\"\n                :disabled=\"isLast\"\n                :root-class=\"buttonNextClasses\"\n                :button-class=\"buttonClasses\"\n                :button-current-class=\"buttonCurrentClasses\">\n                <o-icon :icon=\"iconNext\" :pack=\"iconPack\" aria-hidden=\"true\" />\n            </o-pagination-button>\n        </slot>\n\n        <small v-if=\"simple\" :class=\"infoClasses\">\n            <template v-if=\"perPage == 1\">\n                {{ firstItem }} / {{ total }}\n            </template>\n            <template v-else>\n                {{ firstItem }}-{{\n                    Math.min(currentPage * Number(perPage), total)\n                }}\n                /\n                {{ total }}\n            </template>\n        </small>\n\n        <ul v-else :class=\"listClasses\">\n            <!--First-->\n            <li v-if=\"hasFirst\" :class=\"listItemClasses\">\n                <slot v-bind=\"getPage(1)\">\n                    <o-pagination-button\n                        v-bind=\"getPage(1)\"\n                        :button-class=\"buttonClasses\"\n                        :button-current-class=\"buttonCurrentClasses\" />\n                </slot>\n            </li>\n\n            <li v-if=\"hasFirstEllipsis\" :class=\"listItemClasses\">\n                <span :class=\"ellipsisClasses\">&hellip;</span>\n            </li>\n\n            <!--Pages-->\n            <li\n                v-for=\"page in pagesInRange\"\n                :key=\"page.number\"\n                :class=\"listItemClasses\">\n                <slot v-bind=\"page\">\n                    <o-pagination-button\n                        v-bind=\"page\"\n                        :button-class=\"buttonClasses\"\n                        :button-current-class=\"buttonCurrentClasses\" />\n                </slot>\n            </li>\n\n            <!--Last-->\n            <li v-if=\"hasLastEllipsis\" :class=\"listItemClasses\">\n                <span :class=\"ellipsisClasses\">&hellip;</span>\n            </li>\n\n            <li v-if=\"hasLast\" :class=\"listItemClasses\">\n                <!-- \n                    @slot Pagination button slot\n                    @binding {number} number - page number \n                    @binding {boolean} isCurrent - if page is current\n                    @binding {(event: Event): void} onClick - click handler\n                    @binding {string} ariaLabel - aria-label attribute\n                -->\n                <slot v-bind=\"getPage(pageCount)\">\n                    <o-pagination-button\n                        v-bind=\"getPage(pageCount)\"\n                        :button-class=\"buttonClasses\"\n                        :button-current-class=\"buttonCurrentClasses\" />\n                </slot>\n            </li>\n        </ul>\n    </nav>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Pagination from \"./Pagination.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export pagination plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Pagination);\n    },\n} as Plugin;\n\n/** export pagination components */\nexport { Pagination as OPagination };\n","<script setup lang=\"ts\" generic=\"T\">\nimport { computed, useAttrs, useId, useSlots, useTemplateRef } from \"vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { defineClasses, useInputHandler } from \"@/composables\";\n\nimport { injectField } from \"../field/fieldInjection\";\n\nimport type { RadioProps } from \"./props\";\n\n/**\n * Select an option from a set of options.\n * @displayName Radio\n * @style _radio.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"ORadio\",\n    configField: \"radio\",\n    inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<RadioProps<T>>(), {\n    override: undefined,\n    modelValue: undefined,\n    id: () => useId(),\n    label: undefined,\n    name: undefined,\n    variant: () => getDefault(\"radio.variant\"),\n    size: () => getDefault(\"radio.size\"),\n    disabled: false,\n    required: false,\n    nativeValue: undefined,\n    autocomplete: () => getDefault(\"radio.autocomplete\", \"off\"),\n    useHtml5Validation: () => getDefault(\"useHtml5Validation\", true),\n});\n\nconst emits = defineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {T} updated modelValue prop\n     */\n    \"update:model-value\": [value: T];\n    /**\n     * on input change event\n     * @param value {T} input value\n     * @param event {Event} native event\n     */\n    input: [value: T, event: Event];\n    /**\n     * on input focus event\n     * @param event {Event} native event\n     */\n    focus: [event: Event];\n    /**\n     * on input blur event\n     * @param event {Event} native event\n     */\n    blur: [event: Event];\n    /**\n     * on input invalid event\n     * @param event {Event} native event\n     */\n    invalid: [event: Event];\n}>();\n\nconst inputRef = useTemplateRef(\"inputElement\");\n\n// use form input functionalities\nconst { checkHtml5Validity, onBlur, onFocus, onInvalid, setFocus } = useInputHandler(\n    inputRef,\n    emits,\n    props,\n);\n\n// inject parent field component if used inside one\nconst { parentField } = injectField();\n\n// set field labelId or create a unique label id if a label is given\nconst labelId =\n    !!parentField.value || !!props.label || !!useSlots().default\n        ? parentField.value?.labelId || useId()\n        : undefined;\n\n// if no `label` is given and `id` is given set as `for` property on o-field wrapper\nif (!props.label && props.id) parentField.value?.setInputId(props.id);\n\nconst vmodel = defineModel<T>({ default: undefined });\n\nconst isChecked = computed(() => vmodel.value === props.nativeValue);\n\nfunction onInput(event: Event): void {\n    emits(\"input\", vmodel.value, event);\n}\n\n// --- Computed Component Classes ---\n\nconst attrs = useAttrs();\n\nconst inputBind = computed(() => ({\n    ...parentField?.value?.inputAttrs,\n    ...attrs,\n}));\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-radio\"],\n    [\n        \"sizeClass\",\n        \"o-radio--\",\n        computed(() => props.size),\n        computed(() => !!props.size),\n    ],\n    [\n        \"variantClass\",\n        \"o-radio--\",\n        computed(() => props.variant),\n        computed(() => !!props.variant),\n    ],\n    [\n        \"disabledClass\",\n        \"o-radio--disabled\",\n        null,\n        computed(() => props.disabled),\n    ],\n    [\"checkedClass\", \"o-radio--checked\", null, isChecked],\n);\n\nconst inputClasses = defineClasses([\"inputClass\", \"o-radio__input\"]);\n\nconst labelClasses = defineClasses([\"labelClass\", \"o-radio__label\"]);\n\n// --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ checkHtml5Validity, focus: setFocus, value: vmodel });\n</script>\n\n<template>\n    <div data-oruga=\"radio\" :class=\"rootClasses\">\n        <input\n            v-bind=\"inputBind\"\n            :id=\"id\"\n            ref=\"inputElement\"\n            v-model=\"vmodel\"\n            type=\"radio\"\n            data-oruga-input=\"radio\"\n            :class=\"inputClasses\"\n            :name=\"name\"\n            :value=\"nativeValue\"\n            :required=\"required\"\n            :disabled=\"disabled\"\n            :autocomplete=\"autocomplete\"\n            :aria-checked=\"isChecked\"\n            :aria-labelledby=\"labelId\"\n            @blur=\"onBlur\"\n            @focus=\"onFocus\"\n            @invalid=\"onInvalid\"\n            @change=\"onInput\" />\n\n        <label\n            v-if=\"label || $slots.default\"\n            :id=\"labelId\"\n            :for=\"id\"\n            :class=\"labelClasses\">\n            <!--\n                @slot Override the label, default is label prop \n            -->\n            <slot>{{ label }}</slot>\n        </label>\n    </div>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Radio from \"./Radio.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export radio plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Radio);\n    },\n} as Plugin;\n\n/** export radio components */\nexport { Radio as ORadio };\n","import type { App, Plugin } from \"vue\";\n\nimport Select from \"./Select.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export select specific types */\n// no types to export here\n\n/** export select plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Select);\n    },\n} as Plugin;\n\n/** export select components */\nexport { Select as OSelect };\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { toCssDimension } from \"@/utils/helpers\";\nimport { defineClasses } from \"@/composables\";\n\nimport type { SkeletonProps } from \"./props\";\n\n/**\n * A placeholder for content to load.\n * @displayName Skeleton\n * @style _skeleton.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OSkeleton\",\n    configField: \"skeleton\",\n});\n\nconst props = withDefaults(defineProps<SkeletonProps>(), {\n    override: undefined,\n    active: true,\n    animated: () => getDefault(\"skeleton.animated\", true),\n    width: undefined,\n    height: undefined,\n    circle: false,\n    rounded: () => getDefault(\"skeleton.rounded\", true),\n    count: 1,\n    size: undefined,\n    position: \"left\",\n});\n\nconst itemStyle = computed(() => ({\n    height: toCssDimension(props.height),\n    width: toCssDimension(props.width),\n    borderRadius: props.circle ? \"50%\" : undefined,\n}));\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-skeleton\"],\n    [\n        \"positionClass\",\n        \"o-skeleton--\",\n        computed(() => props.position),\n        computed(() => !!props.position),\n    ],\n);\n\nconst itemClasses = defineClasses(\n    [\"itemClass\", \"o-skeleton__item\"],\n    [\n        \"roundedClass\",\n        \"o-skeleton__item--rounded\",\n        null,\n        computed(() => props.rounded),\n    ],\n    [\n        \"animatedClass\",\n        \"o-skeleton__item--animated\",\n        null,\n        computed(() => props.animated),\n    ],\n    [\n        \"sizeClass\",\n        \"o-skeleton__item--\",\n        computed(() => props.size),\n        computed(() => !!props.size),\n    ],\n);\n</script>\n\n<template>\n    <div v-if=\"active\" data-oruga=\"skeleton\" :class=\"rootClasses\">\n        <div\n            v-for=\"i in count\"\n            :key=\"i\"\n            :class=\"itemClasses\"\n            :style=\"itemStyle\" />\n    </div>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Skeleton from \"./Skeleton.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export skeleton plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Skeleton);\n    },\n} as Plugin;\n\n/** export skeleton components */\nexport { Skeleton as OSkeleton };\n","<script setup lang=\"ts\" generic=\"C extends Component\">\nimport {\n    ref,\n    computed,\n    watch,\n    onMounted,\n    useTemplateRef,\n    type Component,\n} from \"vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { isClient } from \"@/utils/ssr\";\nimport {\n    defineClasses,\n    useClickOutside,\n    useEventListener,\n    useMatchMedia,\n    usePreventScrolling,\n    useTrapFocus,\n    useTeleportDefault,\n} from \"@/composables\";\nimport type { CloseEventArgs } from \"../programmatic\";\n\nimport type { SidebarProps } from \"./props\";\n\n/**\n * A sidebar to use as overlay.\n * @displayName Sidebar\n * @style _sidebar.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OSidebar\",\n    configField: \"sidebar\",\n    inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<SidebarProps<C>>(), {\n    override: undefined,\n    active: false,\n    overlay: () => getDefault(\"sidebar.overlay\", false),\n    inline: false,\n    position: () => getDefault(\"sidebar.position\", \"left\"),\n    fullheight: () => getDefault(\"sidebar.fullheight\", false),\n    fullwidth: () => getDefault(\"sidebar.fullwidth\", false),\n    reduce: () => getDefault(\"sidebar.reduce\", false),\n    mobile: () => getDefault(\"sidebar.mobile\"),\n    expandOnHover: () => getDefault(\"sidebar.expandOnHover\", false),\n    animation: () => getDefault(\"sidebar.animation\"),\n    cancelable: () => getDefault(\"sidebar.cancelable\", [\"escape\", \"outside\"]),\n    trapFocus: () => getDefault(\"sidebar.trapFocus\", true),\n    clipScroll: () => getDefault(\"sidebar.clipScroll\", false),\n    mobileBreakpoint: () => getDefault(\"sidebar.mobileBreakpoint\"),\n    teleport: () => getDefault(\"sidebar.teleport\", false),\n    component: undefined,\n    props: undefined,\n    events: undefined,\n});\n\nconst emits = defineEmits<{\n    /**\n     * active prop two-way binding\n     * @param value {boolean} - updated active prop\n     */\n    \"update:active\": [value: boolean];\n    /**\n     * on component close event\n     * @param value {string} - close event method\n     */\n    close: [...args: [] | [string] | CloseEventArgs<C>];\n}>();\n\nconst { vTrapFocus } = useTrapFocus();\n\nconst rootRef = useTemplateRef(\"rootElement\");\nconst contentRef = useTemplateRef(\"contentElement\");\n\nconst isActive = defineModel<boolean>(\"active\", { default: false });\n\nconst { isMobile } = useMatchMedia(props.mobileBreakpoint);\n\nconst _teleport = computed(() =>\n    typeof props.teleport === \"boolean\"\n        ? { to: useTeleportDefault(), disabled: !props.teleport }\n        : { to: props.teleport, disabled: false },\n);\n\nconst transitionName = computed(() => {\n    if (props.animation) return props.animation;\n\n    const vertical = props.position === \"top\" || props.position === \"bottom\";\n    const right = props.position === \"right\";\n    const open = right ? !isActive.value : isActive.value;\n\n    return open\n        ? vertical\n            ? \"slide-down\"\n            : \"slide-next\"\n        : vertical\n          ? \"slide-up\"\n          : \"slide-prev\";\n});\n\nconst hideOnMobile = computed(\n    () => props.mobile === \"hidden\" && isMobile.value,\n);\n\nconst toggleScroll = usePreventScrolling(props.clipScroll);\n\nwatch(\n    isActive,\n    (value) => {\n        if (props.overlay) toggleScroll(value);\n    },\n    { flush: \"post\" },\n);\n\nonMounted(() => {\n    if (isActive.value && props.overlay) toggleScroll(true);\n});\n\n// --- Events Feature ---\n\nif (isClient) {\n    // register onKeyPress event listener when is active\n    useEventListener(rootRef, \"keyup\", onKeyPress, { trigger: isActive });\n\n    if (!props.overlay)\n        // register outside click event listener when is active\n        useClickOutside(contentRef, clickedOutside, { trigger: isActive });\n}\n\n/** Keypress event that is bound to the document. */\nfunction onKeyPress(event: KeyboardEvent): void {\n    if (!isActive.value) return;\n    if (event.key === \"Escape\" || event.key === \"Esc\") cancel(\"escape\");\n}\n\n/** Close fixed sidebar if clicked outside. */\nfunction clickedOutside(event: Event): void {\n    if (props.inline || !isActive.value || isAnimating.value) return;\n    if (\n        props.overlay ||\n        (contentRef.value && !event.composedPath().includes(contentRef.value))\n    )\n        event.preventDefault();\n    cancel(\"outside\");\n}\n\n/**\n * Check if method is cancelable.\n * Call close() with action `cancel`.\n * @param method Cancel method\n */\nfunction cancel(method: string): void {\n    // check if method is cancelable\n    if (\n        (typeof props.cancelable === \"boolean\" && !props.cancelable) ||\n        !props.cancelable ||\n        (Array.isArray(props.cancelable) && !props.cancelable.includes(method))\n    )\n        return;\n    close(method);\n}\n\n/** set active to false and emit close event */\nfunction close(...args: [] | [string] | CloseEventArgs<C>): void {\n    isActive.value = false;\n    emits(\"close\", ...args);\n}\n\n// --- Animation Feature ---\n\nconst isAnimating = ref(!props.active);\n\n/** Transition after-enter hook */\nfunction afterEnter(): void {\n    isAnimating.value = false;\n}\n\n/** Transition before-leave hook */\nfunction beforeLeave(): void {\n    isAnimating.value = true;\n}\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-sidebar\"],\n    [\"mobileClass\", \"o-sidebar--mobile\", null, isMobile],\n    [\"activeClass\", \"o-sidebar--active\", null, isActive],\n    [\n        \"teleportClass\",\n        \"o-sidebar--teleport\",\n        null,\n        computed(() => !!props.teleport),\n    ],\n    [\"inlineClass\", \"o-sidebar--inline\", null, computed(() => props.inline)],\n);\n\nconst overlayClasses = defineClasses([\"overlayClass\", \"o-sidebar__overlay\"]);\n\nconst contentClasses = defineClasses(\n    [\"contentClass\", \"o-sidebar__content\"],\n    [\n        \"positionClass\",\n        \"o-sidebar__content--\",\n        computed(() => props.position),\n        computed(() => !!props.position),\n    ],\n    [\n        \"fullheightClass\",\n        \"o-sidebar__content--fullheight\",\n        null,\n        computed(() => props.fullheight),\n    ],\n    [\n        \"fullwidthClass\",\n        \"o-sidebar__content--fullwidth\",\n        null,\n        computed(\n            () =>\n                props.fullwidth ||\n                (isMobile.value && props.mobile === \"expanded\"),\n        ),\n    ],\n    [\n        \"reduceClass\",\n        \"o-sidebar__content--reduced\",\n        null,\n        computed(\n            () =>\n                props.reduce || (isMobile.value && props.mobile === \"reduced\"),\n        ),\n    ],\n    [\n        \"expandOnHoverClass\",\n        \"o-sidebar__content--hover-expand\",\n        null,\n        computed(\n            () =>\n                props.expandOnHover &&\n                (!isMobile.value || props.mobile !== \"expanded\"),\n        ),\n    ],\n    [\"visibleClass\", \"o-sidebar__content--visible\", null, isActive],\n    [\n        \"hiddenClass\",\n        \"o-sidebar__content--hidden\",\n        null,\n        computed(() => !isActive.value),\n    ],\n);\n// --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ close });\n</script>\n\n<template>\n    <Teleport :to=\"_teleport.to\" :disabled=\"_teleport.disabled\">\n        <div\n            v-show=\"!hideOnMobile\"\n            ref=\"rootElement\"\n            v-bind=\"$attrs\"\n            v-trap-focus=\"trapFocus && isActive && !inline\"\n            data-oruga=\"sidebar\"\n            :class=\"rootClasses\">\n            <div\n                v-if=\"overlay && isActive\"\n                :class=\"overlayClasses\"\n                :tabindex=\"-1\"\n                @click=\"clickedOutside\" />\n\n            <transition\n                :name=\"transitionName\"\n                @after-enter=\"afterEnter\"\n                @before-leave=\"beforeLeave\">\n                <div\n                    v-show=\"isActive\"\n                    ref=\"contentElement\"\n                    :class=\"contentClasses\">\n                    <!--\n                        @slot Sidebar default content, default is component prop\n                        @binding {(...args): void} close - function to close the component\n                    -->\n                    <slot :close=\"close\">\n                        <!-- injected component for programmatic usage -->\n                        <component\n                            :is=\"component\"\n                            v-if=\"component\"\n                            v-bind=\"$props.props\"\n                            v-on=\"$props.events || {}\"\n                            @close=\"close\" />\n                    </slot>\n                </div>\n            </transition>\n        </div>\n    </Teleport>\n</template>\n","import {\n    type Component,\n    type ComponentInternalInstance,\n    type MaybeRefOrGetter,\n} from \"vue\";\nimport {\n    InstanceRegistry,\n    ComponentProgrammatic,\n    type ProgrammaticComponentOptions,\n    type ProgrammaticExpose,\n} from \"../programmatic\";\n\nimport Sidebar from \"./Sidebar.vue\";\n\nimport type { SidebarProps } from \"./props\";\n\ndeclare module \"../../index\" {\n    interface OrugaProgrammatic {\n        sidebar: typeof SidebarProgrammatic;\n    }\n}\n\n/** sidebar component programmatic instance registry */\nconst registry = new InstanceRegistry<ComponentInternalInstance>();\n\n/** useSidebarProgrammatic composable options */\nexport type SidebarProgrammaticOptions<C extends Component> = Readonly<\n    SidebarProps<C>\n> &\n    ProgrammaticComponentOptions<typeof Sidebar<C>>;\n\nconst SidebarProgrammatic = {\n    /** Returns the number of registered active instances. */\n    count: registry.count,\n    /**\n     * Create a new programmatic sidebar component instance.\n     * @param options sidebar component props object\n     * @param target specify a target the component get rendered into - default is `document.body`\n     * @returns ProgrammaticExpose\n     */\n    open<C extends Component>(\n        options: SidebarProgrammaticOptions<C>,\n        target?: MaybeRefOrGetter<string | HTMLElement | null>,\n    ): ProgrammaticExpose<typeof Sidebar<C>> {\n        const componentProps: SidebarProps<C> = {\n            active: true, // set the active default state to true\n            ...options,\n        };\n\n        // create programmatic component\n        return ComponentProgrammatic.open(Sidebar, {\n            registry, // custom programmatic instance registry\n            target, // target the component get rendered into\n            props: componentProps, // component specific props\n            onClose: options.onClose, // on close event handler\n        });\n    },\n    /** Close the last registred instance in the sidebar programmatic instance registry. */\n    close(...args: unknown[]): void {\n        registry.last()?.exposed?.close(...args);\n    },\n    /** Close all instances in the programmatic sidebar instance registry. */\n    closeAll(...args: unknown[]): void {\n        registry.walk((entry) => entry.exposed?.close(...args));\n    },\n};\n\nexport default SidebarProgrammatic;\n","import type { App, Plugin } from \"vue\";\n\nimport Sidebar from \"./Sidebar.vue\";\nimport SidebarProgrammatic from \"./useSidebarProgrammatic\";\n\nimport {\n    registerComponent,\n    registerComponentProgrammatic,\n} from \"@/utils/plugins\";\n\n/** export sidebar specific types */\nexport type { SidebarProgrammaticOptions } from \"./useSidebarProgrammatic\";\n\n/** export sidebar plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Sidebar);\n        registerComponentProgrammatic(app, \"sidebar\", SidebarProgrammatic);\n    },\n} as Plugin;\n\n/** export sidebar components & composables */\nexport { Sidebar as OSidebar, SidebarProgrammatic };\n","<script setup lang=\"ts\">\nimport { ref, computed, watch, nextTick, useId, type Component } from \"vue\";\n\nimport PositionWrapper from \"../utils/PositionWrapper.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { isClient } from \"@/utils/ssr\";\nimport { defineClasses, useClickOutside } from \"@/composables\";\n\nimport type { TooltipProps } from \"./props\";\n\n/**\n * Display a brief helper text to your user.\n * @displayName Tooltip\n * @style _tooltip.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OTooltip\",\n    configField: \"tooltip\",\n});\n\nconst props = withDefaults(defineProps<TooltipProps>(), {\n    override: undefined,\n    active: false,\n    label: undefined,\n    variant: () => getDefault(\"tooltip.variant\"),\n    position: () => getDefault(\"tooltip.position\", \"auto\"),\n    always: false,\n    disabled: false,\n    animation: () => getDefault(\"tooltip.animation\", \"fade\"),\n    multiline: false,\n    triggerTag: () => getDefault(\"tooltip.triggerTag\", \"div\"),\n    triggers: () => getDefault(\"tooltip.triggers\", [\"hover\", \"focus\"]),\n    delay: undefined,\n    closeable: () =>\n        getDefault(\"tooltip.closeable\", [\"escape\", \"outside\", \"content\"]),\n    teleport: () => getDefault(\"dropdown.teleport\", false),\n});\n\nconst emits = defineEmits<{\n    /**\n     * active prop two-way binding\n     * @param value {boolean} - updated active prop\n     */\n    \"update:active\": [value: boolean];\n    /** on active change to false event */\n    close: [];\n    /** on active change to true event */\n    open: [];\n}>();\n\nconst isActive = defineModel<boolean>(\"active\", { default: false });\n\nwatch(isActive, (value) => {\n    if (value) emits(\"open\");\n    else emits(\"close\");\n});\n\nconst tooltipId = useId();\n\nconst timer = ref();\n\nconst autoPosition = ref(props.position);\n\n/** update autoPosition on prop change */\nwatch(\n    () => props.position,\n    (v) => (autoPosition.value = v),\n);\n\n// --- Event Handler ---\n\nconst contentRef = ref<HTMLElement | Component>();\nconst triggerRef = ref<HTMLElement>();\n\nconst cancelOptions = computed<string[]>(() =>\n    typeof props.closeable === \"boolean\"\n        ? props.closeable\n            ? [\"escape\", \"outside\", \"content\"]\n            : []\n        : props.closeable,\n);\n\n// set click outside handler\nif (isClient && cancelOptions.value.includes(\"outside\")) {\n    useClickOutside([contentRef, triggerRef], onClickedOutside, {\n        trigger: isActive,\n        passive: true,\n    });\n}\n\n/** Close tooltip if clicked outside. */\nfunction onClickedOutside(): void {\n    if (!isActive.value || props.always) return;\n    if (!cancelOptions.value.includes(\"outside\")) return;\n    isActive.value = false;\n}\n\n/** Escape keydown event that is bound to the trigger */\nfunction onEscape(): void {\n    if (!isActive.value) return;\n    if (!cancelOptions.value.includes(\"escape\")) return;\n    isActive.value = false;\n}\n\nfunction onClick(): void {\n    if (!props.triggers.includes(\"click\")) return;\n    // if not active, toggle after clickOutside event\n    // this fixes toggling programmatic\n    nextTick(() => setTimeout(() => open()));\n}\n\nfunction onContextMenu(event: Event): void {\n    if (!props.triggers.includes(\"contextmenu\")) return;\n    event.preventDefault();\n    open();\n}\n\nfunction onFocus(): void {\n    if (!props.triggers.includes(\"focus\")) return;\n    open();\n}\n\nfunction onHover(): void {\n    if (!props.triggers.includes(\"hover\")) return;\n    open();\n}\n\nfunction open(): void {\n    if (props.disabled) return;\n    if (props.delay) {\n        timer.value = setTimeout(() => {\n            isActive.value = true;\n            timer.value = null;\n        }, props.delay);\n    } else {\n        isActive.value = true;\n    }\n}\n\nfunction onClose(): void {\n    if (!cancelOptions.value.includes(\"content\")) return;\n    isActive.value = !props.closeable;\n    if (timer.value && props.closeable) clearTimeout(timer.value);\n}\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-tooltip\"],\n    [\n        \"teleportClass\",\n        \"o-tooltip--teleport\",\n        null,\n        computed(() => !!props.teleport),\n    ],\n);\n\nconst triggerClasses = defineClasses([\"triggerClass\", \"o-tooltip__trigger\"]);\n\nconst contentClasses = defineClasses(\n    [\"contentClass\", \"o-tooltip__content\"],\n    [\n        \"positionClass\",\n        \"o-tooltip__content--\",\n        autoPosition,\n        computed(() => !!autoPosition.value),\n    ],\n    [\n        \"variantClass\",\n        \"o-tooltip__content--\",\n        computed(() => props.variant),\n        computed(() => !!props.variant),\n    ],\n    [\n        \"multilineClass\",\n        \"o-tooltip__content--multiline\",\n        null,\n        computed(() => props.multiline),\n    ],\n    [\n        \"alwaysClass\",\n        \"o-tooltip__content--always\",\n        null,\n        computed(() => props.always),\n    ],\n);\n\nconst arrowClasses = defineClasses(\n    [\"arrowClass\", \"o-tooltip__arrow\"],\n    [\n        \"arrowPositionClass\",\n        \"o-tooltip__arrow--\",\n        autoPosition,\n        computed(() => !!autoPosition.value),\n    ],\n    [\n        \"arrowVariantClass\",\n        \"o-tooltip__arrow--\",\n        computed(() => props.variant),\n        computed(() => !!props.variant),\n    ],\n);\n</script>\n\n<template>\n    <div data-oruga=\"tooltip\" :class=\"rootClasses\">\n        <component\n            :is=\"triggerTag\"\n            ref=\"triggerRef\"\n            :class=\"triggerClasses\"\n            aria-haspopup=\"true\"\n            :aria-describedby=\"tooltipId\"\n            @keydown.escape=\"onEscape\"\n            @click=\"onClick\"\n            @contextmenu=\"onContextMenu\"\n            @mouseenter=\"onHover\"\n            @focus.capture=\"onFocus\"\n            @blur.capture=\"onClose\"\n            @mouseleave=\"onClose\">\n            <!--\n                @slot Tooltip trigger slot\n                @binding {boolean} active - tooltip active state\n            -->\n            <slot :active=\"isActive\" />\n        </component>\n\n        <PositionWrapper\n            v-slot=\"{ setContent }\"\n            v-model:position=\"autoPosition\"\n            :teleport=\"teleport\"\n            :class=\"rootClasses\"\n            :trigger=\"triggerRef\"\n            default-position=\"top\"\n            :disabled=\"!isActive\">\n            <transition :name=\"animation\">\n                <div\n                    v-show=\"isActive || (always && !disabled)\"\n                    :id=\"tooltipId\"\n                    :ref=\"(el) => (contentRef = setContent(el as HTMLElement))\"\n                    :class=\"contentClasses\"\n                    role=\"tooltip\">\n                    <span :class=\"arrowClasses\"></span>\n\n                    <!--\n                        @slot Tooltip content, default is label prop\n                    -->\n                    <slot name=\"content\">{{ label }}</slot>\n                </div>\n            </transition>\n        </PositionWrapper>\n    </div>\n</template>\n","<script setup lang=\"ts\" generic=\"IsRange extends boolean = false\">\nimport { computed, ref } from \"vue\";\n\nimport OTooltip from \"../tooltip/Tooltip.vue\";\n\nimport { isClient } from \"@/utils/ssr\";\n\nimport { injectField } from \"../field/fieldInjection\";\n\nimport type { SliderProps } from \"./props\";\nimport type { ClassBind, WithRequired } from \"@/types\";\n\n/**\n * @displayName Slider Thumb\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OSliderThumb\",\n    configField: \"slider\",\n    inheritAttrs: false,\n});\n\nconst props = defineProps<{\n    /** parent slider component props  */\n    sliderProps: WithRequired<SliderProps<IsRange>, \"min\" | \"max\" | \"step\">;\n    modelValue: number;\n    sliderSize: () => number;\n    thumbWrapperClasses: ClassBind[];\n    thumbClasses: ClassBind[];\n}>();\n\nconst emits = defineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {number | number[]} updated modelValue prop\n     */\n    \"update:model-value\": [value: number | number[]];\n    /** on value change event */\n    change: [];\n    /** on drag start event */\n    dragstart: [];\n    /** on drag end event */\n    dragend: [];\n}>();\n\n// inject parent field component if used inside one\nconst { parentField } = injectField();\n\nconst isFocused = ref(false);\nconst dragging = ref(false);\nconst startX = ref(0);\nconst startPosition = ref(0);\nconst newPosition = ref<number>();\nconst oldValue = ref(props.modelValue);\n\nconst tooltip = computed(() => props.sliderProps.tooltip);\nconst tooltipAlways = computed(() => props.sliderProps.tooltipAlways);\nconst disabled = computed(() => props.sliderProps.disabled);\nconst max = computed(() => props.sliderProps.max);\nconst min = computed(() => props.sliderProps.min);\nconst step = computed(() => props.sliderProps.step);\nconst indicator = computed(() => props.sliderProps.indicator);\nconst ariaLabel = computed(() => props.sliderProps.ariaLabel);\n\nconst precision = computed(() => {\n    const precisions = [min.value, max.value, step.value].map((item) => {\n        const decimal = (\"\" + item).split(\".\")[1];\n        return decimal ? decimal.length : 0;\n    });\n    return Math.max(...precisions);\n});\n\nconst computedTooltipVariant = computed(() =>\n    props.sliderProps.tooltipVariant\n        ? props.sliderProps.tooltipVariant\n        : props.sliderProps.variant,\n);\n\nconst currentPosition = computed(\n    () =>\n        `${((props.modelValue - min.value) / (max.value - min.value)) * 100}%`,\n);\n\nconst wrapperStyle = computed(() => ({ left: currentPosition.value }));\n\nconst formattedValue = computed(() => {\n    if (typeof props.sliderProps.formatter !== \"undefined\")\n        return props.sliderProps.formatter(props.modelValue);\n\n    if (props.sliderProps.format === \"percent\")\n        return new Intl.NumberFormat(props.sliderProps.locale, {\n            style: \"percent\",\n        }).format((props.modelValue - min.value) / (max.value - min.value));\n\n    return new Intl.NumberFormat(props.sliderProps.locale).format(\n        props.modelValue,\n    );\n});\n\nfunction onFocus(): void {\n    isFocused.value = true;\n}\n\nfunction onBlur(): void {\n    isFocused.value = false;\n}\n\nfunction onButtonDown(event): void {\n    if (disabled.value) return;\n    event.preventDefault();\n    onDragStart(event);\n\n    if (isClient) {\n        document.addEventListener(\"mousemove\", onDragging);\n        document.addEventListener(\"touchmove\", onDragging);\n        document.addEventListener(\"mouseup\", onDragEnd);\n        document.addEventListener(\"touchend\", onDragEnd);\n        document.addEventListener(\"contextmenu\", onDragEnd);\n    }\n}\n\nfunction onLeftKeyDown(): void {\n    if (disabled.value || props.modelValue === min.value) return;\n    newPosition.value =\n        parseFloat(currentPosition.value) -\n        (step.value / (max.value - min.value)) * 100;\n    setPosition(newPosition.value);\n    emits(\"change\");\n}\n\nfunction onRightKeyDown(): void {\n    if (disabled.value || props.modelValue === max.value) return;\n    newPosition.value =\n        parseFloat(currentPosition.value) +\n        (step.value / (max.value - min.value)) * 100;\n    setPosition(newPosition.value);\n    emits(\"change\");\n}\n\nfunction onHomeKeyDown(): void {\n    if (disabled.value || props.modelValue === min.value) return;\n    newPosition.value = 0;\n    setPosition(newPosition.value);\n    emits(\"change\");\n}\n\nfunction onEndKeyDown(): void {\n    if (disabled.value || props.modelValue === max.value) return;\n    newPosition.value = 100;\n    setPosition(newPosition.value);\n    emits(\"change\");\n}\n\nfunction onDragStart(event): void {\n    dragging.value = true;\n    emits(\"dragstart\");\n    if (event.type === \"touchstart\") event.clientX = event.touches[0].clientX;\n\n    startX.value = event.clientX;\n    startPosition.value = parseFloat(currentPosition.value);\n    newPosition.value = startPosition.value;\n}\n\nfunction onDragging(event): void {\n    if (dragging.value) {\n        if (event.type === \"touchmove\")\n            event.clientX = event.touches[0].clientX;\n\n        const diff =\n            ((event.clientX - startX.value) / props.sliderSize()) * 100;\n        newPosition.value = startPosition.value + diff;\n        setPosition(newPosition.value);\n    }\n}\n\nfunction onDragEnd(): void {\n    dragging.value = false;\n    emits(\"dragend\");\n    if (props.modelValue !== oldValue.value) emits(\"change\");\n\n    setPosition(newPosition.value);\n    if (isClient) {\n        document.removeEventListener(\"mousemove\", onDragging);\n        document.removeEventListener(\"touchmove\", onDragging);\n        document.removeEventListener(\"mouseup\", onDragEnd);\n        document.removeEventListener(\"touchend\", onDragEnd);\n        document.removeEventListener(\"contextmenu\", onDragEnd);\n    }\n}\n\nfunction setPosition(percent: number | undefined): void {\n    if (percent === undefined || isNaN(percent)) return;\n    if (percent < 0) percent = 0;\n    else if (percent > 100) percent = 100;\n\n    const stepLength = 100 / ((max.value - min.value) / step.value);\n    const steps = Math.round(percent / stepLength);\n    let value =\n        ((steps * stepLength) / 100) * (max.value - min.value) + min.value;\n    value = parseFloat(value.toFixed(precision.value));\n    emits(\"update:model-value\", value);\n\n    if (!dragging.value && value !== oldValue.value) oldValue.value = value;\n}\n\ndefineExpose({ setPosition });\n</script>\n\n<template>\n    <div\n        data-oruga=\"slider-thumb\"\n        :class=\"thumbWrapperClasses\"\n        :style=\"wrapperStyle\">\n        <o-tooltip\n            :label=\"formattedValue\"\n            :variant=\"computedTooltipVariant\"\n            :disabled=\"disabled || !tooltip\"\n            :always=\"tooltipAlways || dragging || isFocused\">\n            <div\n                v-bind=\"$attrs\"\n                :class=\"thumbClasses\"\n                :tabindex=\"disabled ? undefined : 0\"\n                role=\"slider\"\n                :aria-label=\"ariaLabel\"\n                :aria-labelledby=\"parentField?.labelId\"\n                :aria-valuenow=\"modelValue\"\n                :aria-valuemin=\"min\"\n                :aria-valuemax=\"max\"\n                :aria-disabled=\"disabled\"\n                aria-orientation=\"horizontal\"\n                @mousedown=\"onButtonDown\"\n                @touchstart.passive=\"onButtonDown\"\n                @focus=\"onFocus\"\n                @blur=\"onBlur\"\n                @keydown.left.prevent=\"onLeftKeyDown\"\n                @keydown.right.prevent=\"onRightKeyDown\"\n                @keydown.down.prevent=\"onLeftKeyDown\"\n                @keydown.up.prevent=\"onRightKeyDown\"\n                @keydown.home.prevent=\"onHomeKeyDown\"\n                @keydown.end.prevent=\"onEndKeyDown\">\n                <span v-if=\"indicator\">{{ formattedValue }}</span>\n            </div>\n        </o-tooltip>\n    </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, type PropType } from \"vue\";\nimport { defineClasses, useProviderChild } from \"@/composables\";\n\nimport type { SliderComponent } from \"./types\";\nimport type { ComponentClass } from \"@/types\";\n\n/**\n * @displayName Slider Tick\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OSliderTick\",\n    configField: \"slider\",\n});\n\nconst props = defineProps({\n    /** Override existing theme classes completely */\n    override: { type: Boolean, default: undefined },\n    /** Value of single tick */\n    value: { type: Number, required: true },\n    /** Tick label */\n    label: { type: [String, Number], default: undefined },\n    tickClass: {\n        type: [String, Function, Array] as PropType<ComponentClass>,\n        default: undefined,\n    },\n    /** Class when slider tick is hidden */\n    tickHiddenClass: {\n        type: [String, Function, Array] as PropType<ComponentClass>,\n        default: undefined,\n    },\n    /** Class of tick label */\n    tickLabelClass: {\n        type: [String, Function, Array] as PropType<ComponentClass>,\n        default: undefined,\n    },\n});\n\n/** inject functionalities and data from the parent component */\nconst { parent } = useProviderChild<SliderComponent>({ register: false });\n\nconst position = computed(() => {\n    const pos =\n        ((props.value - parent.value.min) /\n            (parent.value.max - parent.value.min)) *\n        100;\n    return pos >= 0 && pos <= 100 ? pos : 0;\n});\n\nconst hidden = computed(\n    () => props.value === parent.value.min || props.value === parent.value.max,\n);\n\nconst tickStyle = computed(() => ({ left: position.value + \"%\" }));\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"tickClass\", \"o-slider__tick\"],\n    [\"tickHiddenClass\", \"o-slider__tick--hidden\", null, hidden],\n);\n\nconst tickLabelClasses = defineClasses([\n    \"tickLabelClass\",\n    \"o-slider__tick-label\",\n]);\n</script>\n\n<template>\n    <div data-oruga=\"slider-tick\" :class=\"rootClasses\" :style=\"tickStyle\">\n        <span v-if=\"$slots.default || label\" :class=\"tickLabelClasses\">\n            <!-- \n                @slot Override tick content, default is label prop\n             -->\n            <slot> {{ label }} </slot>\n        </span>\n    </div>\n</template>\n","<script setup lang=\"ts\" generic=\"IsRange extends boolean = false\">\nimport { computed, ref, useTemplateRef, watch } from \"vue\";\n\nimport OSliderThumb from \"./SliderThumb.vue\";\nimport OSliderTick from \"./SliderTick.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { isTrueish } from \"@/utils/helpers\";\nimport { defineClasses, useProviderParent } from \"@/composables\";\n\nimport type { SliderComponent } from \"./types\";\nimport type { SliderProps } from \"./props\";\n\n/**\n * A slider to select a value or range from a given range.\n * @displayName Slider\n * @requires ./SliderTick.vue\n * @style _slider.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OSlider\",\n    configField: \"slider\",\n});\n\ntype ModelValue = SliderProps<IsRange>[\"modelValue\"];\n\nconst props = withDefaults(defineProps<SliderProps<IsRange>>(), {\n    override: undefined,\n    modelValue: undefined,\n    // range: false,\n    min: 0,\n    max: 100,\n    step: 1,\n    variant: () => getDefault(\"slider.variant\"),\n    size: () => getDefault(\"slider.size\"),\n    ticks: false,\n    tooltip: () => getDefault(\"slider.tooltip\", true),\n    tooltipVariant: () => getDefault(\"slider.tooltipVariant\"),\n    tooltipAlways: false,\n    rounded: () => getDefault(\"slider.rounded\", false),\n    disabled: false,\n    lazy: false,\n    formatter: undefined,\n    biggerSliderFocus: false,\n    indicator: false,\n    format: () => getDefault(\"slider.format\", \"raw\"),\n    locale: () => getDefault(\"locale\"),\n    ariaLabel: () => getDefault(\"slider.ariaLabel\"),\n});\n\nconst emits = defineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {number | number[]} updated modelValue prop\n     */\n    \"update:model-value\": [value: ModelValue];\n    /**\n     * on value change event\n     * @param value {number | number[]} updated modelValue prop\n     */\n    change: [value: ModelValue];\n    /**\n     * on dragging event\n     * @param value {number | number[]} updated modelValue prop\n     * */\n    dragging: [value: ModelValue];\n    /** on drag start event */\n    dragstart: [];\n    /** on drag end event */\n    dragend: [];\n}>();\n\nconst sliderRef = useTemplateRef(\"sliderElement\");\nconst thumbStartRef = useTemplateRef(\"thumbStartComponent\");\nconst thumbEndRef = useTemplateRef(\"thumbEndComponent\");\n\n// provided data is a computed ref to ensure reactivity\nconst provideData = computed<SliderComponent>(() => ({\n    max: props.max,\n    min: props.min,\n}));\n\n/** provide functionalities and data to child item components */\nuseProviderParent({ data: provideData });\n\nconst valueStart = ref<number>(0);\nconst valueEnd = ref<number>(0);\nconst dragging = ref(false);\n\nconst isThumbReversed = ref();\nconst isTrackClickDisabled = ref();\n\nconst minValue = computed(() =>\n    Math.min(valueStart.value || props.min, valueEnd.value || props.max),\n);\n\nconst maxValue = computed(() =>\n    Math.max(valueStart.value || props.min, valueEnd.value || props.max),\n);\n\nconst isRange = computed(() => isTrueish(props.range));\n\nconst vmodel = computed<ModelValue>(\n    () =>\n        (isRange.value\n            ? [minValue.value, maxValue.value]\n            : valueStart.value || 0) as ModelValue,\n);\n\n/** update vmodel value on internal value change */\nwatch([valueStart, valueEnd], () => {\n    if (isRange.value)\n        isThumbReversed.value =\n            valueStart.value && valueEnd.value\n                ? valueStart.value > valueEnd.value\n                : false;\n    if (!props.lazy || !dragging.value)\n        emits(\"update:model-value\", vmodel.value); // update external vmodel\n    if (dragging.value) emits(\"dragging\", vmodel.value);\n});\n\n/** When min, max or v-model is changed set the new active step. */\nwatch(\n    [() => props.min, () => props.max, () => props.modelValue],\n    () => setValues(props.modelValue),\n    { immediate: true }, // initialise valueStart and valueEnd\n);\n\nfunction setValues(newValue: number | number[] | undefined): void {\n    if (props.min > props.max) return;\n\n    if (Array.isArray(newValue)) {\n        const smallValue =\n            typeof newValue[0] !== \"number\" || isNaN(newValue[0])\n                ? props.min\n                : Math.min(Math.max(props.min, newValue[0]), props.max);\n        const largeValue =\n            typeof newValue[1] !== \"number\" || isNaN(newValue[1])\n                ? props.max\n                : Math.max(Math.min(props.max, newValue[1]), props.min);\n        valueStart.value = isThumbReversed.value ? largeValue : smallValue;\n        valueEnd.value = isThumbReversed.value ? smallValue : largeValue;\n    } else if (newValue !== undefined) {\n        valueStart.value = isNaN(newValue)\n            ? props.min\n            : Math.min(props.max, Math.max(props.min, newValue));\n        valueEnd.value = 0;\n    } else {\n        valueStart.value = props.min;\n        valueEnd.value = props.min;\n    }\n}\n\nconst tickValues = computed(() => {\n    if (!props.ticks || props.min > props.max || props.step === 0) return [];\n    const result: number[] = [];\n    for (let i = props.min + props.step; i < props.max; i = i + props.step) {\n        result.push(i);\n    }\n    return result;\n});\n\nconst barSize = computed(() =>\n    isRange.value\n        ? `${\n              (100 * (maxValue.value - minValue.value)) /\n              (props.max - props.min)\n          }%`\n        : `${\n              (100 * (valueStart.value - props.min)) / (props.max - props.min)\n          }%`,\n);\n\nconst barStart = computed(() =>\n    isRange.value\n        ? `${(100 * (minValue.value - props.min)) / (props.max - props.min)}%`\n        : \"0%\",\n);\n\nconst barStyle = computed(() => ({\n    width: barSize.value,\n    left: barStart.value,\n}));\n\nfunction getSliderSize(): number {\n    return sliderRef.value?.getBoundingClientRect().width || 0;\n}\n\nfunction onSliderClick(event: MouseEvent): void {\n    if (props.disabled || isTrackClickDisabled.value) return;\n    if (\n        !sliderRef.value ||\n        !thumbStartRef.value ||\n        (isRange.value && !thumbEndRef.value)\n    )\n        return;\n\n    const sliderOffsetLeft = sliderRef.value.getBoundingClientRect().left;\n    const percent =\n        ((event.clientX - sliderOffsetLeft) / getSliderSize()) * 100;\n    const targetValue = props.min + (percent * (props.max - props.min)) / 100;\n    const diffFirst = Math.abs(targetValue - valueStart.value);\n    if (!isRange.value) {\n        if (diffFirst < props.step / 2) return;\n        thumbStartRef.value.setPosition(percent);\n    } else {\n        const diffSecond = Math.abs(targetValue - valueEnd.value);\n        if (diffFirst <= diffSecond) {\n            if (diffFirst < props.step / 2) return;\n            thumbStartRef.value.setPosition(percent);\n        } else {\n            if (diffSecond < props.step / 2) return;\n            if (isRange.value && thumbEndRef.value)\n                thumbEndRef.value.setPosition(percent);\n        }\n    }\n    emits(\"change\", vmodel.value);\n}\n\nfunction onDragStart(): void {\n    dragging.value = true;\n    emits(\"dragstart\");\n}\n\nfunction onDragEnd(): void {\n    isTrackClickDisabled.value = true;\n    // avoid triggering onSliderClick after dragend\n    setTimeout(() => (isTrackClickDisabled.value = false));\n    dragging.value = false;\n    emits(\"dragend\");\n    if (props.lazy) emits(\"update:model-value\", vmodel.value);\n}\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-slider\"],\n    [\n        \"sizeClass\",\n        \"o-slider--\",\n        computed(() => props.size),\n        computed(() => !!props.size),\n    ],\n    [\n        \"disabledClass\",\n        \"o-slider--disabled\",\n        null,\n        computed(() => props.disabled),\n    ],\n);\n\nconst trackClasses = defineClasses([\"trackClass\", \"o-slider__track\"]);\n\nconst fillClasses = defineClasses(\n    [\"fillClass\", \"o-slider__fill\"],\n    [\n        \"variantClass\",\n        \"o-slider__fill--\",\n        computed(() => props.variant),\n        computed(() => !!props.variant),\n    ],\n);\n\nconst thumbWrapperClasses = defineClasses(\n    [\"thumbWrapperClass\", \"o-slider__thumb-wrapper\"],\n    [\n        \"thumbWrapperDraggingClass\",\n        \"o-slider__thumb-wrapper--dragging\",\n        null,\n        dragging,\n    ],\n);\n\nconst thumbClasses = defineClasses(\n    [\"thumbClass\", \"o-slider__thumb\"],\n    [\"thumbDraggingClass\", \"o-slider__thumb--dragging\", null, dragging],\n    [\n        \"thumbRoundedClass\",\n        \"o-slider__thumb--rounded\",\n        null,\n        computed(() => props.rounded),\n    ],\n);\n\n// --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ value: vmodel });\n</script>\n\n<template>\n    <div data-oruga=\"slider\" :class=\"rootClasses\" @click=\"onSliderClick\">\n        <div ref=\"sliderElement\" :class=\"trackClasses\">\n            <div :class=\"fillClasses\" :style=\"barStyle\" />\n\n            <template v-if=\"ticks\">\n                <o-slider-tick\n                    v-for=\"(val, key) in tickValues\"\n                    :key=\"key\"\n                    :value=\"val\"\n                    :tick-class=\"tickClass\"\n                    :tick-hidden-class=\"tickHiddenClass\"\n                    :tick-label-class=\"tickLabelClass\" />\n            </template>\n\n            <!--\n                @slot Define additional slider ticks here\n             -->\n            <slot />\n\n            <o-slider-thumb\n                ref=\"thumbStartComponent\"\n                v-model=\"valueStart\"\n                :slider-props=\"props\"\n                :slider-size=\"getSliderSize\"\n                :thumb-classes=\"thumbClasses\"\n                :thumb-wrapper-classes=\"thumbWrapperClasses\"\n                @change=\"emits('change', vmodel)\"\n                @dragstart=\"onDragStart\"\n                @dragend=\"onDragEnd\" />\n\n            <o-slider-thumb\n                v-if=\"isRange\"\n                ref=\"thumbEndComponent\"\n                v-model=\"valueEnd\"\n                :slider-props=\"props\"\n                :slider-size=\"getSliderSize\"\n                :thumb-classes=\"thumbClasses\"\n                :thumb-wrapper-classes=\"thumbWrapperClasses\"\n                @change=\"emits('change', vmodel)\"\n                @dragstart=\"onDragStart\"\n                @dragend=\"onDragEnd\" />\n        </div>\n    </div>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Slider from \"./Slider.vue\";\nimport SliderTick from \"./SliderTick.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export slider specific types */\nexport type * from \"./types\";\n\n/** export slider plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Slider);\n        registerComponent(app, SliderTick);\n    },\n} as Plugin;\n\n/** export slider components */\nexport { Slider as OSlider, SliderTick as OSliderTick };\n","<script setup lang=\"ts\" generic=\"T, C extends Component\">\nimport { computed, ref, useSlots, useId, type Component } from \"vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { defineClasses, useProviderChild } from \"@/composables\";\n\nimport type { StepsComponent, StepItemComponent } from \"./types\";\nimport type { StepItemProps } from \"./props\";\n\n/**\n * An step item used by the steps component.\n * @displayName Step Item\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OStepItem\",\n    configField: \"steps\",\n    inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<StepItemProps<T, C>>(), {\n    override: undefined,\n    value: undefined,\n    label: undefined,\n    step: undefined,\n    variant: undefined,\n    clickable: undefined,\n    disabled: false,\n    visible: true,\n    icon: () => getDefault(\"steps.icon\"),\n    iconPack: () => getDefault(\"steps.iconPack\"),\n    content: undefined,\n    component: undefined,\n    props: undefined,\n    events: undefined,\n});\n\nconst emits = defineEmits<{\n    /** on step item activate event */\n    activate: [];\n    /** on step item deactivate event */\n    deactivate: [];\n}>();\n\nconst itemValue = props.value ?? useId();\n\nconst slots = useSlots();\n\n// provided data is a computed ref to ensure reactivity\nconst providedData = computed<StepItemComponent<T>>(() => ({\n    ...props,\n    value: itemValue,\n    $slots: slots,\n    stepClasses: stepClasses.value,\n    iconClasses: stepIconClasses.value,\n    labelClasses: stepLabelClasses.value,\n    isClickable: isClickable.value,\n    isTransitioning: isTransitioning.value,\n    activate,\n    deactivate,\n}));\n\n/** inject functionalities and data from the parent component */\nconst { parent, item } = useProviderChild<StepsComponent, StepItemComponent<T>>(\n    { data: providedData },\n);\n\nconst transitionName = ref();\n\nconst isActive = computed(() => item.value.index === parent.value.activeIndex);\n\nconst isTransitioning = ref(false);\n\nconst nextAnimation = computed(() => {\n    const idx =\n        parent.value.vertical && parent.value.animation.length === 4 ? 2 : 0;\n    return parent.value.animation[idx];\n});\n\nconst prevAnimation = computed(() => {\n    const idx =\n        parent.value.vertical && parent.value.animation.length === 4 ? 3 : 1;\n    return parent.value.animation[idx];\n});\n\n/** shows if the step is clickable or not */\nconst isClickable = computed(\n    () => props.clickable || item.value.index < parent.value.activeIndex,\n);\n\n/** Activate element, alter animation name based on the index. */\nfunction activate(oldIndex: number): void {\n    transitionName.value =\n        item.value.index < oldIndex ? nextAnimation.value : prevAnimation.value;\n    // emit event\n    emits(\"activate\");\n}\n\n/** Deactivate element, alter animation name based on the index. */\nfunction deactivate(newIndex: number): void {\n    transitionName.value =\n        newIndex < item.value.index ? nextAnimation.value : prevAnimation.value;\n    // emit event\n    emits(\"deactivate\");\n}\n\n/** Transition after-enter hook */\nfunction afterEnter(): void {\n    isTransitioning.value = true;\n}\n\n/** Transition before-leave hook */\nfunction beforeLeave(): void {\n    isTransitioning.value = true;\n}\n\n// --- Computed Component Classes ---\n\nconst stepClasses = defineClasses(\n    [\"stepClass\", \"o-steps__step\"],\n    [\n        \"stepVariantClass\",\n        \"o-steps__step--\",\n        computed(() => parent.value?.variant || props.variant),\n        computed(() => !!parent.value?.variant || !!props.variant),\n    ],\n    [\"stepActiveClass\", \"o-steps__step--active\", null, isActive],\n    [\"stepClickableClass\", \"o-steps__step--clickable\", null, isClickable],\n    [\n        \"stepDisabledClass\",\n        \"o-steps__step--disabled\",\n        null,\n        computed(() => props.disabled),\n    ],\n    [\n        \"stepPreviousClass\",\n        \"o-steps__step--previous\",\n        null,\n        computed(() => item.value.index < parent.value?.activeIndex),\n    ],\n    [\n        \"stepNextClass\",\n        \"o-steps__step--next\",\n        null,\n        computed(() => item.value.index > parent.value?.activeIndex),\n    ],\n    [\n        \"stepPositionClass\",\n        \"o-steps__step--\",\n        computed(() => parent.value?.labelPosition),\n        computed(() => !!parent.value?.labelPosition),\n    ],\n);\n\nconst stepLabelClasses = defineClasses([\n    \"stepLabelClass\",\n    \"o-steps__step-label\",\n]);\n\nconst stepIconClasses = defineClasses([\"stepIconClass\", \"o-steps__step-icon\"]);\n\nconst panelClasses = defineClasses([\"stepPanelClass\", \"o-steps__panel\"]);\n</script>\n\n<template>\n    <Transition\n        v-if=\"parent\"\n        :css=\"parent.animated\"\n        :name=\"transitionName\"\n        :appear=\"parent.animateInitially\"\n        @after-enter=\"afterEnter\"\n        @before-leave=\"beforeLeave\">\n        <div\n            v-show=\"isActive && visible\"\n            v-bind=\"$attrs\"\n            :id=\"`tabpanel-${item.identifier}`\"\n            data-oruga=\"steps-item\"\n            :data-id=\"`steps-${item.identifier}`\"\n            :class=\"panelClasses\"\n            role=\"tabpanel\"\n            :hidden=\"!isActive\"\n            :aria-labelledby=\"`tab-${item.identifier}`\"\n            aria-roledescription=\"item\">\n            <!-- \n                @slot Step item content\n                @binding {boolean} active - if item is shown \n            -->\n            <slot :active=\"isActive && visible\">\n                <!-- injected component -->\n                <component\n                    :is=\"component\"\n                    v-if=\"component\"\n                    v-bind=\"$props.props\"\n                    v-on=\"$props.events || {}\" />\n\n                <!-- default content prop -->\n                <template v-else>{{ content }}</template>\n            </slot>\n        </div>\n    </Transition>\n</template>\n","<script setup lang=\"ts\" generic=\"T\">\nimport {\n    computed,\n    toValue,\n    nextTick,\n    ref,\n    watch,\n    watchEffect,\n    useTemplateRef,\n} from \"vue\";\n\nimport OStepItem from \"../steps/StepItem.vue\";\nimport OButton from \"../button/Button.vue\";\nimport OIcon from \"../icon/Icon.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { isDefined } from \"@/utils/helpers\";\nimport {\n    defineClasses,\n    normalizeOptions,\n    useProviderParent,\n    useMatchMedia,\n    useSequentialId,\n} from \"@/composables\";\n\nimport type { StepItem, StepItemComponent, StepsComponent } from \"./types\";\nimport type { StepsProps } from \"./props\";\n\n/**\n * Responsive horizontal process steps.\n * @displayName Steps\n * @requires ./StepItem.vue\n * @style _steps.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OSteps\",\n    configField: \"steps\",\n});\n\ntype ModelValue = StepsProps<T>[\"modelValue\"];\n\nconst props = withDefaults(defineProps<StepsProps<T>>(), {\n    override: undefined,\n    modelValue: undefined,\n    options: undefined,\n    variant: () => getDefault(\"steps.variant\"),\n    size: () => getDefault(\"steps.size\"),\n    vertical: false,\n    position: undefined,\n    iconPack: () => getDefault(\"steps.iconPack\"),\n    iconPrev: () => getDefault(\"steps.iconPrev\", \"chevron-left\"),\n    iconNext: () => getDefault(\"steps.iconNext\", \"chevron-right\"),\n    hasNavigation: true,\n    activateOnFocus: false,\n    animated: () => getDefault(\"steps.animated\", true),\n    animation: () =>\n        getDefault(\"steps.animation\", [\n            \"slide-next\",\n            \"slide-prev\",\n            \"slide-down\",\n            \"slide-up\",\n        ]),\n    animateInitially: () => getDefault(\"steps.animateInitially\", false),\n    labelPosition: () => getDefault(\"steps.labelPosition\", \"bottom\"),\n    rounded: true,\n    mobileBreakpoint: () => getDefault(\"steps.mobileBreakpoint\"),\n    ariaLabel: () => getDefault(\"steps.ariaLabel\"),\n    ariaNextLabel: () => getDefault(\"steps.ariaNextLabel\", \"Next\"),\n    ariaPreviousLabel: () => getDefault(\"steps.ariaPreviousLabel\", \"Previous\"),\n});\n\nconst emits = defineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {T} updated modelValue prop\n     */\n    \"update:model-value\": [value: ModelValue];\n    /**\n     * on step change event\n     * @param value {T} new step value\n     * @param value {T} old step value\n     */\n    change: [newValue: ModelValue, oldValue: ModelValue];\n}>();\n\nconst { isMobile } = useMatchMedia(props.mobileBreakpoint);\n\nconst rootRef = useTemplateRef(\"rootElement\");\n\n// provided data is a computed ref to ensure reactivity\nconst provideData = computed<StepsComponent>(() => ({\n    activeIndex: activeItem.value?.index ?? 0,\n    labelPosition: props.labelPosition,\n    vertical: props.vertical,\n    animated: props.animated,\n    animation: props.animation,\n    animateInitially: props.animateInitially,\n    variant: props.variant,\n}));\n\n/** provide functionalities and data to child item components */\nconst { childItems } = useProviderParent<StepItemComponent<T>>({\n    rootRef,\n    data: provideData,\n});\n\nconst items = computed<StepItem<T>[]>(() => {\n    if (!childItems.value) return [];\n    return childItems.value.map((column) => ({\n        index: column.index,\n        identifier: column.identifier,\n        ...toValue(column.data!),\n    }));\n});\n\n// create a unique id sequence\nconst { nextSequence } = useSequentialId();\n\n/** normalized programamtic options */\nconst groupedOptions = computed(() =>\n    normalizeOptions<T>(props.options, nextSequence),\n);\n\n/** The selected item value, use v-model to make it two-way binding */\nconst vmodel = defineModel<ModelValue>({ default: undefined });\n\n/** When v-model is changed set the new active step. */\nwatch(\n    () => props.modelValue,\n    (value) => {\n        if (vmodel.value !== value) performAction(value);\n    },\n);\n\n/** the active item */\nconst activeItem = ref<StepItem<T>>();\n\n// set the active item immediate and every time the vmodel changes\nwatchEffect(() => {\n    activeItem.value = isDefined(vmodel.value)\n        ? items.value.find((item) => item.value === vmodel.value) ||\n          items.value[0]\n        : items.value[0];\n});\n\nconst isTransitioning = computed(() =>\n    items.value.some((item) => item.isTransitioning),\n);\n\n// --- EVENT HANDLER ---\n\n/** Activate the item after or before the current active item. */\nfunction activateItem(fowardIndex: 1 | -1): void {\n    const index = (activeItem.value?.index ?? 0) + fowardIndex;\n    if (index < 0 || index >= items.value.length) return;\n    const item = items.value[index];\n    if (vmodel.value !== item.value) performAction(item.value);\n}\n\n/** Item click listener, emit input event and change active child. */\nfunction itemClick(item: StepItem<T>): void {\n    // determines if the step is clickable or not\n    if (!item.isClickable) return;\n    if (vmodel.value !== item.value) performAction(item.value);\n}\n\n/** Check if previous button is available. */\nconst hasPrev = computed(() =>\n    isDefined(getFirstViableIndex((activeItem.value?.index ?? 0) - 1, false)),\n);\n\n/** Check if next button is available. */\nconst hasNext = computed(() =>\n    isDefined(getFirstViableIndex((activeItem.value?.index ?? 0) + 1, true)),\n);\n\n/** Focus the next item if possible. */\nfunction onNext(index: number): void {\n    const viableIndex = getFirstViableIndex(index + 1, true);\n    if (isDefined(viableIndex)) moveFocus(viableIndex);\n}\n\n/** Focus the previous item if possible. */\nfunction onPrev(index: number): void {\n    const viableIndex = getFirstViableIndex(index - 1, false);\n    if (isDefined(viableIndex)) moveFocus(viableIndex);\n}\n\n/** Focus the first viable item. */\nfunction onHomePressed(): void {\n    const viableIndex = getFirstViableIndex(0, true);\n    if (isDefined(viableIndex)) moveFocus(viableIndex);\n}\n\n/** Focus the last viable item. */\nfunction onEndPressed(): void {\n    const viableIndex = getFirstViableIndex(items.value.length - 1, false);\n    if (isDefined(viableIndex)) moveFocus(viableIndex);\n}\n\n/** Set focus on a step item or click it if `activateOnFocus`. */\nfunction moveFocus(index: number): void {\n    if (index < 0 || index >= items.value.length) return;\n    const item = items.value[index];\n\n    if (props.activateOnFocus) {\n        itemClick(item);\n    } else {\n        const el = rootRef.value?.querySelector<HTMLElement>(\n            `#tab-${item.identifier}`,\n        );\n        el?.focus();\n    }\n}\n\n/**\n * Get the first 'viable' child, starting at startingIndex and in the direction specified\n * by the boolean parameter forward. In other words, first try to select the child at index\n * startingIndex, and if it is not visible or it is disabled, then go to the index in the\n * specified direction until either returning to startIndex or finding a viable child item.\n */\nfunction getFirstViableIndex(\n    startingIndex: number,\n    forward: boolean,\n): number | undefined {\n    const direction = forward ? 1 : -1;\n    let newIndex = startingIndex;\n    for (\n        ;\n        newIndex > 0 && newIndex < items.value.length;\n        newIndex += direction\n    ) {\n        const item = items.value[newIndex];\n        // Break if the item at this index is viable (not disabled and is visible)\n        if (item.visible && !item.disabled) break;\n    }\n\n    if (newIndex < 0 || newIndex >= items.value.length) return undefined;\n    return newIndex;\n}\n\n/** Activate next child and deactivate prev child */\nfunction performAction(newValue: ModelValue): void {\n    const oldValue = activeItem.value?.value;\n    const oldItem = activeItem.value;\n    const newItem =\n        items.value.find((item) => item.value === newValue) || items.value[0];\n\n    if (oldItem && newItem) {\n        oldItem.deactivate(newItem.index);\n        newItem.activate(oldItem.index);\n    }\n\n    nextTick(() => {\n        vmodel.value = newValue;\n        emits(\"change\", newValue, oldValue);\n    });\n}\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-steps\"],\n    [\n        \"sizeClass\",\n        \"o-steps--\",\n        computed(() => props.size),\n        computed(() => !!props.size),\n    ],\n    [\n        \"variantClass\",\n        \"o-steps--\",\n        computed(() => props.variant),\n        computed(() => !!props.variant),\n    ],\n    [\n        \"verticalClass\",\n        \"o-steps--vertical\",\n        null,\n        computed(() => props.vertical),\n    ],\n    [\n        \"positionClass\",\n        \"o-steps--position-\",\n        computed(() => props.position),\n        computed(() => !!props.position && props.vertical),\n    ],\n    [\"mobileClass\", \"o-steps--mobile\", null, isMobile],\n);\n\nconst tablistClasses = defineClasses(\n    [\"listClass\", \"o-steps__list\"],\n    [\n        \"animatedClass\",\n        \"o-steps__list--animated\",\n        null,\n        computed(() => props.animated),\n    ],\n);\n\nconst dividerClasses = defineClasses([\"dividerClass\", \"o-steps__divider\"]);\n\nconst markerClasses = defineClasses(\n    [\"markerClass\", \"o-steps__marker\"],\n    [\n        \"markerRoundedClass\",\n        \"o-steps__marker--rounded\",\n        null,\n        computed(() => props.rounded),\n    ],\n);\n\nconst contentClasses = defineClasses(\n    [\"contentClass\", \"o-steps__content\"],\n    [\n        \"transitioningClass\",\n        \"o-steps__content-transitioning\",\n        null,\n        isTransitioning,\n    ],\n);\n\nconst navigationClasses = defineClasses([\n    \"navigationClass\",\n    \"o-steps__navigation\",\n]);\n</script>\n\n<template>\n    <div ref=\"rootElement\" data-oruga=\"steps\" :class=\"rootClasses\">\n        <ol\n            :class=\"tablistClasses\"\n            role=\"tablist\"\n            :aria-label=\"ariaLabel\"\n            :aria-orientation=\"vertical ? 'vertical' : 'horizontal'\">\n            <li\n                v-for=\"(childItem, index) in items\"\n                v-show=\"childItem.visible\"\n                :id=\"`tab-${childItem.identifier}`\"\n                :key=\"childItem.identifier\"\n                :class=\"childItem.stepClasses\"\n                role=\"tab\"\n                :tabindex=\"childItem.value === activeItem?.value ? 0 : -1\"\n                :aria-current=\"\n                    childItem.value === activeItem?.value ? 'step' : undefined\n                \"\n                :aria-controls=\"`tabpanel-${childItem.identifier}`\"\n                :aria-selected=\"childItem.value === activeItem?.value\"\n                @click=\"itemClick(childItem)\"\n                @keydown.enter.prevent=\"itemClick(childItem)\"\n                @keydown.space.prevent=\"itemClick(childItem)\"\n                @keydown.left.prevent=\"onPrev(childItem.index)\"\n                @keydown.right.prevent=\"onNext(childItem.index)\"\n                @keydown.home.prevent=\"onHomePressed\"\n                @keydown.end.prevent=\"onEndPressed\">\n                <span v-if=\"index > 0\" :class=\"dividerClasses\" />\n\n                <div :class=\"markerClasses\">\n                    <o-icon\n                        v-if=\"childItem.icon\"\n                        :class=\"childItem.iconClasses\"\n                        :icon=\"childItem.icon\"\n                        :pack=\"childItem.iconPack\"\n                        :size=\"size\" />\n                    <span v-else-if=\"childItem.step\">\n                        {{ childItem.step }}\n                    </span>\n                </div>\n\n                <div :class=\"childItem.labelClasses\">\n                    {{ childItem.label }}\n                </div>\n            </li>\n        </ol>\n\n        <section :class=\"contentClasses\">\n            <!--\n                @slot Place step items here\n            -->\n            <slot>\n                <o-step-item\n                    v-for=\"option in groupedOptions\"\n                    v-show=\"!option.hidden\"\n                    v-bind=\"option.attrs\"\n                    :key=\"option.key\"\n                    :value=\"option.value\"\n                    :label=\"option.label\" />\n            </slot>\n        </section>\n\n        <!--\n            @slot Override step navigation\n            @binding {{disabled: boolean, action: (): void }} previous - previous button configs\n            @binding {{disabled: boolean, action: (): void }} next - next button configs\n        -->\n        <slot\n            name=\"navigation\"\n            :previous=\"{ disabled: !hasPrev, action: () => activateItem(-1) }\"\n            :next=\"{ disabled: !hasNext, action: () => activateItem(1) }\">\n            <nav v-if=\"hasNavigation\" :class=\"navigationClasses\">\n                <o-button\n                    role=\"button\"\n                    :icon-left=\"iconPrev\"\n                    :icon-pack=\"iconPack\"\n                    :disabled=\"!hasPrev\"\n                    :aria-label=\"ariaPreviousLabel\"\n                    @click.prevent=\"activateItem(-1)\" />\n\n                <o-button\n                    role=\"button\"\n                    :icon-left=\"iconNext\"\n                    :icon-pack=\"iconPack\"\n                    :disabled=\"!hasNext\"\n                    :aria-label=\"ariaNextLabel\"\n                    @click.prevent=\"activateItem(1)\" />\n            </nav>\n        </slot>\n    </div>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Steps from \"./Steps.vue\";\nimport StepItem from \"./StepItem.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export steps specific types */\nexport type * from \"./types\";\n\n/** export steps plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Steps);\n        registerComponent(app, StepItem);\n    },\n} as Plugin;\n\n/** export steps components */\nexport { Steps as OSteps, StepItem as OStepItem };\n","<script setup lang=\"ts\" generic=\"T\">\nimport { computed, useAttrs, useId, useSlots, useTemplateRef } from \"vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { defineClasses, useInputHandler } from \"@/composables\";\n\nimport { injectField } from \"../field/fieldInjection\";\n\nimport type { SwitchProps } from \"./props\";\n\n/**\n * Switch between two opposing states.\n * @displayName Switch\n * @style _switch.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OSwitch\",\n    configField: \"switch\",\n    inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<SwitchProps<T>>(), {\n    override: undefined,\n    modelValue: undefined,\n    id: () => useId(),\n    label: undefined,\n    variant: () => getDefault(\"switch.variant\"),\n    passiveVariant: () => getDefault(\"switch.passiveVariant\"),\n    size: () => getDefault(\"switch.size\"),\n    position: () => getDefault(\"switch.right\", \"position\"),\n    rounded: () => getDefault(\"switch.rounded\", true),\n    required: false,\n    disabled: false,\n    name: undefined,\n    nativeValue: undefined,\n    trueValue: undefined,\n    falseValue: undefined,\n    autocomplete: () => getDefault(\"switch.autocomplete\", \"off\"),\n    useHtml5Validation: () => getDefault(\"useHtml5Validation\", true),\n});\n\nconst emits = defineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {T} updated modelValue prop\n     */\n    \"update:model-value\": [value: T];\n    /**\n     * on input change event\n     * @param value {T} input value\n     * @param event {Event} native event\n     */\n    input: [value: T, event: Event];\n    /**\n     * on input focus event\n     * @param event {Event} native event\n     */\n    focus: [event: Event];\n    /**\n     * on input blur event\n     * @param event {Event} native event\n     */\n    blur: [event: Event];\n    /**\n     * on input invalid event\n     * @param event {Event} native event\n     */\n    invalid: [event: Event];\n}>();\n\nconst inputRef = useTemplateRef(\"inputElement\");\n\n// use form input functionalities\nconst { checkHtml5Validity, onBlur, onFocus, onInvalid, setFocus } = useInputHandler(\n    inputRef,\n    emits,\n    props,\n);\n\n// inject parent field component if used inside one\nconst { parentField } = injectField();\n\n// set field labelId or create a unique label id if a label is given\nconst labelId =\n    !!parentField.value || !!props.label || !!useSlots().default\n        ? parentField.value?.labelId || useId()\n        : undefined;\n\n// if no `label` is given and `id` is given set as `for` property on o-field wrapper\nif (!props.label && props.id) parentField.value?.setInputId(props.id);\n\nconst vmodel = defineModel<T>({ default: undefined });\n\nconst isChecked = computed(\n    () =>\n        vmodel.value === (props.trueValue ?? true) ||\n        (Array.isArray(vmodel.value) &&\n            vmodel.value.includes(props.nativeValue)),\n);\n\nfunction onInput(event: Event): void {\n    emits(\"input\", vmodel.value, event);\n}\n\n// --- Computed Component Classes ---\n\nconst attrs = useAttrs();\n\nconst inputBind = computed(() => ({\n    ...parentField.value?.inputAttrs,\n    ...attrs,\n}));\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-switch\"],\n    [\n        \"sizeClass\",\n        \"o-switch--\",\n        computed(() => props.size),\n        computed(() => !!props.size),\n    ],\n    [\n        \"variantClass\",\n        \"o-switch--\",\n        computed(() => props.variant),\n        computed(() => !!props.variant),\n    ],\n    [\n        \"passiveVariantClass\",\n        \"o-switch--\",\n        computed(() => props.passiveVariant + \"-passive\"),\n        computed(() => !!props.passiveVariant),\n    ],\n    [\n        \"positionClass\",\n        \"o-switch--\",\n        computed(() => props.position),\n        computed(() => !!props.position),\n    ],\n    [\n        \"disabledClass\",\n        \"o-switch--disabled\",\n        null,\n        computed(() => props.disabled),\n    ],\n    [\"roundedClass\", \"o-switch--rounded\", null, computed(() => props.rounded)],\n    [\"checkedClass\", \"o-switch--checked\", null, isChecked],\n);\n\nconst inputClasses = defineClasses([\"inputClass\", \"o-switch__input\"]);\n\nconst labelClasses = defineClasses([\"labelClass\", \"o-switch__label\"]);\n\n// --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ checkHtml5Validity, focus: setFocus, value: vmodel });\n</script>\n\n<template>\n    <div data-oruga=\"switch\" :class=\"rootClasses\">\n        <input\n            v-bind=\"inputBind\"\n            :id=\"id\"\n            ref=\"inputElement\"\n            v-model=\"vmodel\"\n            type=\"checkbox\"\n            role=\"switch\"\n            data-oruga-input=\"switch\"\n            :class=\"inputClasses\"\n            :name=\"name\"\n            :value=\"nativeValue\"\n            :true-value=\"trueValue ?? true\"\n            :false-value=\"falseValue ?? false\"\n            :required=\"required\"\n            :disabled=\"disabled\"\n            :autocomplete=\"autocomplete\"\n            :aria-checked=\"isChecked\"\n            :aria-labelledby=\"labelId\"\n            @blur=\"onBlur\"\n            @focus=\"onFocus\"\n            @invalid=\"onInvalid\"\n            @change=\"onInput\" />\n\n        <label\n            v-if=\"label || $slots.default\"\n            :id=\"labelId\"\n            :for=\"id\"\n            :class=\"labelClasses\">\n            <!--\n                @slot Override the label, default is label prop \n            -->\n            <slot>{{ label }}</slot>\n        </label>\n    </div>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Switch from \"./Switch.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export switch plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Switch);\n    },\n} as Plugin;\n\n/** export switch components */\nexport { Switch as OSwitch };\n","import {\n    createVNode,\n    defineComponent,\n    type DefineComponent,\n    type VNode,\n    type VNodeChild,\n    type VNodeTypes,\n} from \"vue\";\nimport type { ComponentProps } from \"vue-component-type-helpers\";\nimport type { DynamicComponent } from \"@/types\";\n\ntype SlotComponentProps<C extends VNodeTypes> = {\n    /** Component to be get the slot from */\n    component: C;\n    /** Props to be binded to the injected component. */\n    props?: ComponentProps<C>;\n    /**\n     * Slot name\n     * @default \"default\"\n     */\n    name?: string;\n    /**\n     * Tag name of the slot wrapper element\n     * @default \"div\"\n     */\n    tag?: DynamicComponent;\n};\n\n/** This components renders a specific slot and only the slot of another component */\nexport default defineComponent<SlotComponentProps<any>>(\n    <C extends DefineComponent>(props: SlotComponentProps<C>, { slots }) => {\n        const _props = { tag: \"div\", name: \"default\", ...props };\n\n        return (): VNode => {\n            let slot: VNodeChild | (() => VNodeChild) = (): VNodeChild =>\n                props.component.$slots[_props.name]\n                    ? props.component.$slots[_props.name](props.props)\n                    : slots.default\n                      ? slots.default()\n                      : undefined;\n            if (typeof _props.tag === \"string\") {\n                // Vue prefers components' children to be passed as functions,\n                // but native elements' children can't be passed that way.\n                slot = slot();\n            }\n\n            return createVNode(_props.tag as VNode, {}, slot);\n        };\n    },\n    {\n        name: \"OSlotComponent\",\n        // manual runtime props declaration is currently still needed.\n        props: [\"component\", \"props\", \"name\", \"tag\"],\n    },\n);\n","<script setup lang=\"ts\" generic=\"T\">\nimport { computed, watch, ref, type PropType } from \"vue\";\n\nimport OButton from \"@/components/button/Button.vue\";\nimport OSelect from \"@/components/select/Select.vue\";\nimport OIcon from \"@/components/icon/Icon.vue\";\nimport OField from \"@/components/field/Field.vue\";\n\nimport type { TableColumnItem } from \"./types\";\nimport type { ClassBind } from \"@/types\";\n\ndefineOptions({\n    isOruga: true,\n    name: \"OTableMobileSort\",\n    configField: \"table\",\n});\n\nconst props = defineProps({\n    currentSortColumn: {\n        type: Object as PropType<TableColumnItem<T>>,\n        default: undefined,\n    },\n    columns: {\n        type: Array as PropType<TableColumnItem<T>[]>,\n        default: undefined,\n    },\n    placeholder: { type: String, default: undefined },\n    iconPack: { type: String, default: undefined },\n    sortIcon: { type: String, default: \"arrow-up\" },\n    sortIconSize: { type: String, default: \"small\" },\n    isAsc: { type: Boolean, default: false },\n    mobileSortClasses: { type: Array as PropType<ClassBind[]>, required: true },\n});\n\nconst emits = defineEmits<{\n    sort: [column: TableColumnItem<T>, event: Event];\n}>();\n\nconst mobileSort = ref<string | undefined>(props.currentSortColumn?.identifier);\n\nconst showPlaceholder = computed(\n    () =>\n        !props.columns ||\n        props.columns.every((column) => column.identifier !== mobileSort.value),\n);\n\nconst sortableColumns = computed(() =>\n    props.columns ? props.columns.filter((c) => c.sortable) : [],\n);\n\nconst isCurrentSort = computed(\n    () => props.currentSortColumn?.identifier === mobileSort.value,\n);\n\nwatch(mobileSort, (value) => {\n    if (props.currentSortColumn?.identifier === value) return;\n    sort(new Event(\"sort\"));\n});\n\nwatch(\n    () => props.currentSortColumn,\n    (column) => {\n        mobileSort.value = column?.identifier;\n    },\n);\n\nfunction sort(event: Event): void {\n    const column = sortableColumns.value.find(\n        (column) => column.identifier === mobileSort.value,\n    );\n    if (!column) return;\n    emits(\"sort\", column, event);\n}\n</script>\n\n<template>\n    <div :class=\"mobileSortClasses\">\n        <o-field addons>\n            <o-select v-model=\"mobileSort\" expanded>\n                <template v-if=\"placeholder\">\n                    <option\n                        v-show=\"showPlaceholder\"\n                        :value=\"{}\"\n                        selected\n                        disabled\n                        hidden>\n                        {{ placeholder }}\n                    </option>\n                </template>\n                <option\n                    v-for=\"(column, index) in sortableColumns\"\n                    :key=\"column.field || index\"\n                    :value=\"column.identifier\">\n                    {{ column.label }}\n                </option>\n            </o-select>\n\n            <o-button @click=\"sort($event)\">\n                <o-icon\n                    v-show=\"isCurrentSort\"\n                    :icon=\"sortIcon\"\n                    :pack=\"iconPack\"\n                    :size=\"sortIconSize\"\n                    :rotation=\"!isAsc ? 180 : 0\" />\n            </o-button>\n        </o-field>\n    </div>\n</template>\n","<script setup lang=\"ts\" generic=\"T, K extends string\">\nimport { computed, getCurrentInstance } from \"vue\";\n\nimport { defineClasses, useProviderChild } from \"@/composables\";\nimport { toCssDimension } from \"@/utils/helpers\";\n\nimport type { TableColumnComponent, TableComponent } from \"./types\";\nimport type { TableColumnProps } from \"./props\";\n\n/**\n * Define a column used by the table component.\n * @displayName Table Column\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OTableColumn\",\n    configField: \"table\",\n});\n\nconst props = withDefaults(defineProps<TableColumnProps<T, K>>(), {\n    label: undefined,\n    field: undefined,\n    formatter: undefined,\n    subheading: undefined,\n    width: undefined,\n    numeric: false,\n    position: undefined,\n    searchable: false,\n    sortable: false,\n    hidden: false,\n    sticky: false,\n    headerSelectable: false,\n    customSort: undefined,\n    customSearch: undefined,\n    thAttrs: undefined,\n    tdAttrs: undefined,\n});\n\nconst style = computed(() => ({\n    width: toCssDimension(props.width),\n}));\n\nconst isHeaderUnselectable = computed(\n    () => !props.headerSelectable && props.sortable,\n);\n\nconst vm = getCurrentInstance();\n\n// provided data is a computed ref to ensure reactivity\nconst providedData = computed<TableColumnComponent<T>>(() => ({\n    ...props,\n    $el: vm!.proxy!,\n    $slots: vm!.slots,\n    style: style.value,\n    thClasses: thClasses.value,\n    tdClasses: tdClasses.value,\n}));\n\n/** inject functionalities and data from the parent component */\nconst { parent, item } = useProviderChild<\n    TableComponent,\n    TableColumnComponent<T>\n>({ data: providedData });\n\n// --- Computed Component Classes ---\n\nconst thClasses = defineClasses(\n    [\n        \"thCurrentSortClass\",\n        \"o-table__th-current-sort\",\n        null,\n        computed(() => parent.value?.isColumnSorted(item.value)),\n    ],\n    [\n        \"thSortableClass\",\n        \"o-table__th--sortable\",\n        null,\n        computed(() => props.sortable),\n    ],\n    [\n        \"thUnselectableClass\",\n        \"o-table__th--unselectable\",\n        null,\n        isHeaderUnselectable,\n    ],\n    [\n        \"thPositionClass\",\n        \"o-table__th--\",\n        computed(() => props.position),\n        computed(() => !!props.position),\n    ],\n    [\n        \"thStickyClass\",\n        \"o-table__th--sticky\",\n        null,\n        computed(() => props.sticky),\n    ],\n);\n\nconst tdClasses = defineClasses(\n    [\n        \"tdPositionClass\",\n        \"o-table__td--\",\n        computed(() => props.position),\n        computed(() => !!props.position),\n    ],\n    [\n        \"tdStickyClass\",\n        \"o-table__td--sticky\",\n        null,\n        computed(() => props.sticky),\n    ],\n);\n\n// --- SLOTS TYPED OBJECTS ---\n\n// these properties are just for type addings\n// slot props will be set in Table.vue\nconst row = {} as any;\nconst column = {} as TableColumnProps<T, K>;\nconst index = 0;\nconst toggle = () => {};\nconst filters = {} as Record<string, string>;\n</script>\n\n<template>\n    <span data-oruga=\"table-column\" :data-id=\"`table-${item.identifier}`\">\n        {{ label }}\n\n        <!--\n            Do not render these slots here.\n            These are only for documentation purposes.\n            Slots are defined in table component.\n        -->\n        <template v-if=\"false\">\n            <!--\n                @slot Default Slot\n                @binding {T} row - row data \n                @binding {TableColumn} column - column definition \n                @binding {number} index - row index \n                @binding {number} colindex - column index \n                @binding {(): void} toggle-details - toggle details function \n            -->\n            <slot\n                :row=\"row\"\n                :column=\"column\"\n                :index=\"index\"\n                :colindex=\"index\"\n                :toggle-details=\"toggle\" />\n            <!--\n                @slot Override header label \n                @binding {TableColumn} column - column definition \n                @binding {number} index - column index \n            -->\n            <slot name=\"header\" :column=\"column\" :index=\"index\" />\n            <!--\n                @slot Override subheading label \n                @binding {TableColumn} column - column definition \n                @binding {number} index - column index \n            -->\n            <slot name=\"subheading\" :column=\"column\" :index=\"index\" />\n\n            <!--\n                @slot Override searchable input \n                @binding {TableColumn} column - column definition \n                @binding {number} index - column index \n                @binding {object} filters - active filters object\n            -->\n            <slot\n                name=\"searchable\"\n                :column=\"column\"\n                :index=\"index\"\n                :filters=\"filters\" />\n        </template>\n    </span>\n</template>\n","<script setup lang=\"ts\">\nimport type { PropType } from \"vue\";\n\nimport OPagination from \"@/components/pagination/Pagination.vue\";\n\nimport type { ComponentClass } from \"@/types\";\n\ndefineOptions({\n    isOruga: true,\n    name: \"OTablePagination\",\n    configField: \"table\",\n    inheritAttrs: false,\n});\n\ndefineProps({\n    current: { type: Number, default: undefined },\n    paginated: { type: Boolean, default: false },\n    rootClass: {\n        type: [String, Array, Object] as PropType<ComponentClass>,\n        default: undefined,\n    },\n});\n\nconst emits = defineEmits<{\n    /**\n     * current prop two-way binding\n     * @param value {number} updated current prop\n     */\n    \"update:current\": [value: number];\n    /**\n     * on current change event\n     * @param value {number} current value\n     */\n    change: [event: number];\n}>();\n\nconst currentPage = defineModel<number>(\"current\");\n\n/** paginator change listener */\nfunction pageChanged(page: number): void {\n    const newPage = page > 0 ? page : 1;\n    currentPage.value = newPage;\n    emits(\"change\", newPage);\n}\n</script>\n\n<template>\n    <div :class=\"rootClass\">\n        <div>\n            <slot />\n        </div>\n\n        <div>\n            <o-pagination\n                v-if=\"paginated\"\n                v-bind=\"$attrs\"\n                :current=\"currentPage\"\n                @change=\"pageChanged\" />\n        </div>\n    </div>\n</template>\n","<script setup lang=\"ts\" generic=\"T\">\nimport {\n    computed,\n    ref,\n    watch,\n    onMounted,\n    nextTick,\n    useSlots,\n    toValue,\n    useTemplateRef,\n    toRaw,\n    triggerRef,\n    type MaybeRefOrGetter,\n} from \"vue\";\n\nimport OCheckbox from \"@/components/checkbox/Checkbox.vue\";\nimport OIcon from \"@/components/icon/Icon.vue\";\nimport OInput from \"@/components/input/Input.vue\";\nimport OLoading from \"@/components/loading/Loading.vue\";\nimport OSlotComponent from \"@/components/utils/SlotComponent\";\n\nimport OTableMobileSort from \"./TableMobileSort.vue\";\nimport OTableColumn from \"./TableColumn.vue\";\nimport OTablePagination from \"./TablePagination.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport {\n    getValueByPath,\n    toCssDimension,\n    escapeRegExpChars,\n    removeDiacriticsFromString,\n    sortBy,\n    isDefined,\n    getPropertyValue,\n} from \"@/utils/helpers\";\nimport {\n    defineClasses,\n    getActiveClasses,\n    useProviderParent,\n    useMatchMedia,\n    useDebounce,\n    isOptionViable,\n    filterOptionsItems,\n    useSequentialId,\n} from \"@/composables\";\n\nimport type { ClassBind, DeepKeys } from \"@/types\";\nimport type {\n    TableColumn,\n    TableRow,\n    TableColumnItem,\n    TableColumnComponent,\n    TableComponent,\n} from \"./types\";\nimport type { TableProps } from \"./props\";\n\n/**\n * Tabulated data are sometimes needed, it's even better when it's responsive.\n * @displayName Table\n * @requires ./TableColumn.vue\n * @style _table.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OTable\",\n    configField: \"table\",\n    inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<TableProps<T>>(), {\n    override: undefined,\n    data: undefined,\n    columns: undefined,\n    rowKey: () => getDefault(\"table.rowKey\"),\n    rowClass: getDefault(\"table.rowClass\", () => \"\"),\n    thAttrs: undefined,\n    tdAttrs: undefined,\n    customCompare: undefined,\n    bordered: () => getDefault(\"table.bordered\", false),\n    striped: () => getDefault(\"table.striped\", false),\n    narrowed: () => getDefault(\"table.narrowed\", false),\n    hoverable: () => getDefault(\"table.hoverable\", false),\n    selected: undefined,\n    selectable: () => getDefault(\"table.selectable\", false),\n    isRowSelectable: () => true,\n    showHeader: () => getDefault(\"table.showHeader\", true),\n    draggable: false,\n    draggableColumn: false,\n    scrollable: undefined,\n    stickyHeader: false,\n    height: undefined,\n    checkable: false,\n    stickyCheckbox: false,\n    checkableHeader: true,\n    checkedRows: () => [],\n    checkboxPosition: () => getDefault(\"table.checkboxPosition\", \"left\"),\n    checkboxVariant: () => getDefault(\"table.checkboxVariant\"),\n    isRowChecked: undefined,\n    isRowCheckable: getDefault(\"table.isRowCheckable\", () => true),\n    backendSorting: () => getDefault(\"table.backendSorting\", false),\n    defaultSort: () => getDefault(\"table.defaultSort\"),\n    defaultSortDirection: () => getDefault(\"table.defaultSortDirection\", \"asc\"),\n    sortIcon: () => getDefault(\"table.sortIcon\", \"arrow-up\"),\n    sortIconSize: () => getDefault(\"table.sortIconSize\", \"small\"),\n    iconPack: () => getDefault(\"table.iconPack\"),\n    detailed: false,\n    detailedRows: () => [],\n    isDetailedVisible: getDefault(\"table.isDetailedVisible\", () => true),\n    showDetailIcon: () => getDefault(\"table.showDetailIcon\", true),\n    detailIcon: () => getDefault(\"table.detailIcon\", \"chevron-right\"),\n    customDetailRow: false,\n    detailTransition: () => getDefault(\"table.detailTransition\", \"slide\"),\n    paginated: () => getDefault(\"table.paginated\", false),\n    backendPagination: false,\n    total: 0,\n    currentPage: 1,\n    perPage: () => getDefault(\"table.perPage\", 20),\n    paginationPosition: () => getDefault(\"table.paginationPosition\", \"bottom\"),\n    paginationSize: () => getDefault(\"table.paginationSize\", \"small\"),\n    paginationRounded: () => getDefault(\"table.paginationRounded\", false),\n    paginationSimple: () => getDefault(\"table.paginationSimple\", false),\n    paginationOrder: () => getDefault(\"table.paginationOrder\"),\n    paginationRangeBefore: undefined,\n    paginationRangeAfter: undefined,\n    backendFiltering: () => getDefault(\"table.backendFiltering\", false),\n    filtersIcon: () => getDefault(\"table.filterIcon\"),\n    filtersPlaceholder: () => getDefault(\"table.filterPlaceholder\"),\n    filtersEvent: \"\",\n    filterDebounce: () => getDefault(\"table.filterDebounce\", 300),\n    emptyLabel: () => getDefault(\"table.emptyLabel\"),\n    emptyIcon: () => getDefault(\"table.emptyIcon\"),\n    emptyIconSize: () => getDefault(\"table.emptyIconSize\"),\n    loading: false,\n    loadingIcon: () => getDefault(\"table.loadingIcon\", \"loading\"),\n    loadingLabel: () => getDefault(\"table.loadingLabel\"),\n    mobileBreakpoint: () => getDefault(\"table.mobileBreakpoint\"),\n    mobileCards: () => getDefault(\"table.mobileCards\", true),\n    mobileSortPlaceholder: () => getDefault(\"table.mobileSortPlaceholder\"),\n    ariaNextLabel: () => getDefault(\"table.ariaNextLabel\"),\n    ariaPreviousLabel: () => getDefault(\"table.ariaPreviousLabel\"),\n    ariaPageLabel: () => getDefault(\"table.ariaPageLabel\"),\n    ariaCurrentLabel: () => getDefault(\"table.ariaCurrentLabel\"),\n});\n\nconst emits = defineEmits<{\n    /**\n     * currentPage prop two-way binding\n     * @param value {number} updated currentPage prop\n     */\n    \"update:currentPage\": [value: number];\n    /**\n     * on pagination page change event\n     * @param page {number} updated page\n     */\n    \"page-change\": [page: number];\n    /**\n     * select prop two-way binding\n     * @param value {T} updated select prop\n     */\n    \"update:selected\": [value: T];\n    /**\n     * on row select event\n     * @param newRow {T} new select value\n     * @param oldRow {T} old select value\n     */\n    select: [newRow: T, oldRow: T];\n    /**\n     * on row checked event\n     * @param value {T[]} all checked rows\n     * @param row {T} row data\n     */\n    check: [value: T[], row: T];\n    /**\n     * on all rows checked event\n     * @param value {T[]} all checked rows\n     */\n    \"check-all\": [value: T[]];\n    /**\n     * checkedRows prop two-way binding\n     * @param value {T[]} updated checkedRows prop\n     */\n    \"update:checkedRows\": [value: T[]];\n    /**\n     * on column sort change event\n     * @param column {TableColumn} column data\n     * @param direction {string}  'asc' or 'desc'\n     * @param event {Event} native  event\n     */\n    sort: [column: TableColumn<T>, direction: \"asc\" | \"desc\", event: Event];\n    /**\n     * on filter change event\n     * @param filters {object} filter object\n     */\n    \"filters-change\": [value: Record<string, string>];\n    /**\n     * on native filter event based on props filtersEvent\n     * @param filtersEvent {string} props filtersEvent value\n     * @param filters {object} filter object\n     * @param event {Event} native  event\n     */\n    \"filters-event\": [\n        filtersEvent: string,\n        filters: Record<string, string>,\n        event: Event,\n    ];\n    /**\n     * detailedRows prop two-way binding\n     * @param value {T[]} updated detailedRows prop\n     */\n    \"update:detailedRows\": [value: T[]];\n    /**\n     * on details open event\n     * @param row {T} row data\n     */\n    \"details-open\": [row: T];\n    /**\n     * on details close event\n     * @param row {T} row data\n     */\n    \"details-close\": [row: T];\n    /**\n     * on row click event\n     * @param row {T} row data\n     * @param index {number} index of clicked row\n     * @param event {Event} native click event\n     */\n    click: [row: T, index: number, event: Event];\n    /**\n     * on row double click event\n     * @param row {T} row data\n     * @param index {number} index of clicked row\n     * @param event {Event} native click event\n     */\n    dblclick: [row: T, index: number, event: Event];\n    /**\n     * on row right click event\n     * @param row {T} row data\n     * @param index {number} index of clicked row\n     * @param event {Event} native contextmenu event\n     */\n    contextmenu: [row: T, index: number, event: Event];\n    /**\n     * on row mouseenter event\n     * @param row {T} row data\n     * @param index {number} index of clicked row\n     * @param event {Event} native mouseenter event\n     */\n    mouseenter: [row: T, index: number, event: Event];\n    /**\n     * on row mouseleave event\n     * @param row {T} row data\n     * @param index {number} index of clicked row\n     * @param event {Event} native mouseleave event\n     */\n    mouseleave: [row: T, index: number, event: Event];\n    /**\n     * on cell click event\n     * @param row {T} row data\n     * @param column {TableColumn} column data\n     * @param index {number} row index\n     * @param colindex {number} column index\n     * @param event {Event} native click event\n     */\n    \"cell-click\": [\n        row: T,\n        column: TableColumn<T>,\n        index: number,\n        colindex: number,\n        event: Event,\n    ];\n    /**\n     * on row dragstart event\n     * @param row {T} row data\n     * @param index {number} index of draged row\n     * @param event {DragEvent} native dragstart event\n     */\n    dragstart: [row: T, index: number, event: DragEvent];\n    /**\n     * on row dragend event\n     * @param row {T} row data\n     * @param index {number} index of draged row\n     * @param event {DragEvent} native dragend event\n     */\n    dragend: [row: T, index: number, event: DragEvent];\n    /**\n     * on row drop event\n     * @param row {T} row data\n     * @param index {number} index of draged row\n     * @param event {DragEvent} native drop event\n     */\n    drop: [row: T, index: number, event: DragEvent];\n    /**\n     * on row dragleave event\n     * @param row {T} row data\n     * @param index {number} index of draged row\n     * @param event {DragEvent} native dragleave event\n     */\n    dragleave: [row: T, index: number, event: DragEvent];\n    /**\n     * on row dragover event\n     * @param row {T} row data\n     * @param index {number} index of draged row\n     * @param event {DragEvent} native dragover event\n     */\n    dragover: [row: T, index: number, event: DragEvent];\n    /**\n     * on column columndragstart event\n     * @param column {TableColumn} column data\n     * @param index {number} index of draged column\n     * @param event {DragEvent} native columndragstart event\n     */\n    columndragstart: [column: TableColumn<T>, index: number, event: DragEvent];\n    /**\n     * on column columndragend event\n     * @param column {TableColumn} column data\n     * @param index {number} index of draged column\n     * @param event {DragEvent} native columndragend event\n     */\n    columndragend: [column: TableColumn<T>, index: number, event: DragEvent];\n    /**\n     * on column columndrop event\n     * @param column {TableColumn} column data\n     * @param index {number} index of draged column\n     * @param event {DragEvent} native columndrop event\n     */\n    columndrop: [column: TableColumn<T>, index: number, event: DragEvent];\n    /**\n     * on column columndragleave event\n     * @param column {TableColumn} column data\n     * @param index {number} index of draged column\n     * @param event {DragEvent} native columndragleave event\n     */\n    columndragleave: [column: TableColumn<T>, index: number, event: DragEvent];\n    /**\n     * on column columndragover event\n     * @param column {TableColumn} column data\n     * @param index {number} index of draged column\n     * @param event {DragEvent} native columndragover event\n     */\n    columndragover: [column: TableColumn<T>, index: number, event: DragEvent];\n}>();\n\nconst slots = useSlots();\n\nconst { isMobile } = useMatchMedia(props.mobileBreakpoint);\n\nconst isMobileActive = computed(() => props.mobileCards && isMobile.value);\n\nconst slotsRef = useTemplateRef(\"slotsWrapper\");\n\n// provided data is a computed ref to ensure reactivity\nconst provideData = computed<TableComponent>(() => ({\n    isColumnSorted,\n}));\n\n/** provide functionalities and data to child item components */\nconst { childItems } = useProviderParent<TableColumnComponent<T>>({\n    rootRef: slotsRef,\n    data: provideData,\n});\n\n// #region --- TABLE COLUMNS ---\n\n/** all defined columns */\nconst tableColumns = computed<TableColumnItem<T>[]>(() => {\n    if (!childItems.value.length) return [];\n    return childItems.value.map((columnItem) => {\n        const column = toValue(columnItem.data!);\n\n        // create additional th attrs data\n        let thAttrsData =\n            typeof props.thAttrs === \"function\" ? props.thAttrs(column) : {};\n        thAttrsData = Object.assign(thAttrsData, column.thAttrs);\n\n        // create additional td attrs data\n        const tdAttrsData = (props.data ?? []).map((data) => {\n            const tdAttrs =\n                typeof props.tdAttrs === \"function\"\n                    ? props.tdAttrs(data, column)\n                    : {};\n            return Object.assign(tdAttrs, column.tdAttrs);\n        });\n\n        return {\n            ...column,\n            value: column,\n            index: columnItem.index,\n            identifier: columnItem.identifier,\n            thAttrsData: thAttrsData,\n            tdAttrsData: tdAttrsData,\n        };\n    });\n});\n\n/** total columns count */\nconst columnCount = computed(() => {\n    let i = tableColumns.value.length;\n    if (showDetailRowIcon.value) i++;\n    if (props.checkable) i++;\n    return i;\n});\n\n/** aria-colindex start value for ths */\nconst ariaColIndexStart = computed(() => {\n    let i = 1;\n    if (showDetailRowIcon.value) i++;\n    if (props.checkable && props.checkboxPosition === \"left\") i++;\n    return i;\n});\n\n/** check if table has subheadings  */\nconst hasSubheadings = computed(() => {\n    if (slots.subheading) return true;\n    return tableColumns.value.some((column) => !!column.subheading);\n});\n\n/** check if table is scrollable */\nconst isScrollable = computed(() => {\n    if (props.scrollable) return true;\n    return tableColumns.value.some((column) => column.sticky);\n});\n\n// #endregion --- TABLE COLUMNS ---\n\n// #region --- TABLE ROWS ---\n\nconst tableCurrentPage = defineModel<number>(\"currentPage\", { default: 1 });\n\n// recompute table rows visibility on page change or data change\nwatch(\n    [\n        tableCurrentPage,\n        () => props.perPage,\n        () => props.data,\n        () => props.paginated,\n    ],\n    () => filterTableRows(),\n);\n\n// create a unique id sequence\nconst { nextSequence } = useSequentialId();\n\n/** all defined data elements as normalized options with a unique key*/\nconst tableRows = computed<TableRow<T>[]>(() => {\n    if (!props.data) return [];\n    return props.data.map((value: T, idx: number) => ({\n        label: \"row \" + idx, // row display label\n        value: toValue(value), // normalizes wrapped ref values\n        index: idx, // row index\n        key:\n            // if no key is given and data is object, create unique row id for each row\n            String(getValueByPath(value, props.rowKey) || nextSequence()),\n    }));\n});\n\n/** visible rows which are filtered by viability */\nconst availableRows = computed<TableRow<T>[]>(() =>\n    tableRows.value.filter(isOptionViable),\n);\n\n/** applies visability filter of reactive tableRows */\nfunction filterTableRows(): void {\n    // calculate pagination information\n    const currentPage = tableCurrentPage.value;\n    const perPage = Number(props.perPage);\n    const pageStart = (currentPage - 1) * perPage;\n    const pageEnd = pageStart + perPage;\n\n    // update hidden state for each row\n    filterOptionsItems(tableRows, (row, idx) => {\n        // if paginated not backend paginated, paginate row\n        if (props.paginated && !props.backendPagination) {\n            // if not only one page and not on active page\n            if (\n                tableRows.value.length > perPage &&\n                (idx < pageStart || idx >= pageEnd)\n            )\n                // return row is invisible (filtered out)\n                return true;\n        }\n\n        // if not backend filtered, filter row\n        if (!props.backendFiltering)\n            // return row is visible based on filters\n            return !isRowFiltered(row.value);\n\n        // return row is visible (not filtered out)\n        return false;\n    });\n}\n\n/*\n * Total data count.\n * If backend paginated, use props total else use rows data length as pagination total.\n */\nconst tableTotal = computed(() =>\n    props.backendPagination ? props.total : tableRows.value.length,\n);\n\n/** total rows count  */\nconst rowCount = computed(() => {\n    return tableTotal.value + ariaRowIndexStart.value;\n});\n\n/** aria-rowindex start value for tds based if it's Searchable or has subheadings */\nconst ariaRowIndexStart = computed(() => {\n    let i = 1;\n    if (hasSearchableColumns.value) i++;\n    if (hasSubheadings.value) i++;\n    return i;\n});\n\n/**\n * Check if footer slot has custom content.\n * Must be called during rendering.\n */\nfunction hasCustomFooterSlot(): boolean {\n    if (!slots.footer) return false;\n\n    const footer = slots.footer({\n        columnCount: columnCount.value,\n        rowCount: rowCount.value,\n    });\n    if (footer.length > 1) return true;\n\n    const tag = footer[0][\"type\"];\n    return tag === \"th\" || tag === \"td\";\n}\n\n/** get the formated row value for a column */\nfunction getColumnValue(row: T, column: TableColumn<T>): string {\n    return getPropertyValue(row, column.field as DeepKeys<T>, column.formatter);\n}\n\n/** check if two rows are equal by a custom compare function or the rowKey attribute */\nfunction isRowEqual(\n    sourceRow: MaybeRefOrGetter<T>,\n    targetRow: MaybeRefOrGetter<T>,\n): boolean {\n    const el1 = toRaw(toValue(sourceRow));\n    const el2 = toRaw(toValue(targetRow));\n    if (!isDefined(targetRow)) return false;\n    if (typeof props.customCompare === \"function\")\n        return props.customCompare(el1, el2);\n    if (props.rowKey)\n        return (\n            getPropertyValue(el1, props.rowKey) ==\n            getPropertyValue(el2, props.rowKey)\n        );\n    return el1 == el2;\n}\n\n// #endregion  --- TABLE ROWS ---\n\n// #region --- Select Feature ---\n\nconst tableSelectedRow = defineModel<T>(\"selected\", { default: undefined });\n\n/** table arrow keys listener, change selection */\nfunction onArrowPressed(delta: 1 | -1, event: KeyboardEvent): void {\n    if (!availableRows.value.length) return;\n\n    let index =\n        availableRows.value.findIndex((row) =>\n            isRowEqual(row.value, tableSelectedRow.value),\n        ) + delta;\n\n    // check if index overflow\n    index =\n        index > availableRows.value.length - 1\n            ? availableRows.value.length - 1\n            : index;\n    // check if index underflow\n    index = index < 0 ? 0 : index;\n\n    // get row element\n    const row = availableRows.value[index];\n\n    if (!props.isRowSelectable(row.value)) {\n        let newIndex: number | undefined;\n        if (delta > 0) {\n            for (\n                let i = index;\n                i < availableRows.value.length && newIndex === undefined;\n                i++\n            ) {\n                if (props.isRowSelectable(availableRows.value[i].value))\n                    newIndex = i;\n            }\n        } else {\n            for (let i = index; i >= 0 && newIndex === undefined; i--) {\n                if (props.isRowSelectable(availableRows.value[i].value))\n                    newIndex = i;\n            }\n        }\n        if (newIndex != undefined && newIndex >= 0)\n            selectRow(availableRows.value[newIndex], event);\n    } else {\n        selectRow(row, event);\n    }\n}\n\n/**\n * Row click listener.\n * Emit all necessary events.\n */\nfunction selectRow(row: TableRow<T>, event: Event): void {\n    emits(\"click\", row.value, row.index, event);\n\n    if (!props.selectable) return;\n\n    if (isRowEqual(tableSelectedRow, row.value)) return;\n    if (!props.isRowSelectable(row.value)) return;\n\n    tableSelectedRow.value = row.value;\n    // emit new and old row\n    emits(\"select\", row.value, tableSelectedRow.value);\n}\n\n// #endregion --- Select Feature ---\n\n// #region --- Filter Feature ---\n\n/** search filter record alias { fieldKey: filterValue } */\nconst filters = ref<Record<string, string>>({});\n\n/** check if has any searchable column */\nconst hasSearchableColumns = computed(() =>\n    tableColumns.value.some((column) => column.searchable),\n);\n\nlet debouncedFilter: ReturnType<\n    typeof useDebounce<Parameters<typeof handleFiltersChange>>\n>;\n\n// initialise and update debounces filter function\nwatch(\n    () => props.filterDebounce,\n    (debounce) =>\n        (debouncedFilter = useDebounce(handleFiltersChange, debounce || 0)),\n    { immediate: true },\n);\n\n// react on filters got changed\nwatch(filters, (value) => debouncedFilter(value), { deep: true });\n\nfunction handleFiltersChange(value: Record<string, string>): void {\n    emits(\"filters-change\", value);\n    // if not backend filtered, recompute rows visibility with updated filters\n    if (!props.backendFiltering) {\n        filterTableRows();\n        // force tableRows reactivity to update\n        triggerRef(tableRows);\n    }\n}\n\nfunction onFiltersEvent(event: Event): void {\n    emits(\"filters-event\", props.filtersEvent, filters.value, event);\n}\n\n/**\n * check whether a row is filtered by active filters or not\n * @param row - row element\n *\n * @returns is row filtered in\n * */\nfunction isRowFiltered(row: T): boolean {\n    if (!Object.values(filters.value).filter(Boolean).length) return true;\n    return Object.entries(filters.value).some(([key, filter]) => {\n        if (!filter) return false;\n        // get column for filter\n        const column = tableColumns.value.find((c) => c.field === key);\n        // if column has onSearch return result\n        if (typeof column?.customSearch === \"function\")\n            return column.customSearch(row, filter);\n\n        const value =\n            typeof row === \"object\" && !!row ? getValueByPath(row, key) : row;\n        if (value == null) return false;\n        // if number compare values\n        if (Number.isInteger(value)) return value === Number(filter);\n        const re = new RegExp(escapeRegExpChars(filter), \"i\");\n        if (Array.isArray(value))\n            return value.some(\n                (val) =>\n                    re.test(removeDiacriticsFromString(val)) || re.test(val),\n            );\n        if (typeof value !== \"string\") return !!value;\n        return re.test(removeDiacriticsFromString(value)) || re.test(value);\n    });\n}\n\n// #endregion --- Filter Feature ---\n\n// #region --- Sort Feature ---\n\nconst currentSortColumn = ref<TableColumnItem<T>>();\nconst isAsc = ref(true);\n\n/** check if has any sortable column */\nconst hasSortableColumns = computed(() =>\n    tableColumns.value.some((column) => column.sortable),\n);\n\n/** check if the column is the current sort column */\nfunction isColumnSorted(column: TableColumnItem<T>): boolean {\n    return currentSortColumn.value?.identifier === column.identifier;\n}\n\n// call initSort only first time (for example async data)\n// initSort must be called after async TableColumns got initialised first time\nonMounted(() => nextTick(() => initSort()));\n\n/** initial sorted column based on the default-sort prop */\nfunction initSort(): void {\n    if (!tableColumns.value.length || currentSortColumn.value) return;\n    if (!props.defaultSort) return;\n    let sortField = \"\";\n    let sortDirection = props.defaultSortDirection;\n    if (Array.isArray(props.defaultSort)) {\n        sortField = props.defaultSort[0];\n        if (props.defaultSort[1]) sortDirection = props.defaultSort[1];\n    } else {\n        sortField = props.defaultSort;\n    }\n    sortByField(sortField, sortDirection);\n}\n\nfunction sortByField(field: string, direction: \"asc\" | \"desc\"): void {\n    const sortColumn = tableColumns.value.find(\n        (column) => column.field === field,\n    );\n    if (sortColumn) {\n        isAsc.value = direction.toLowerCase() === \"asc\";\n        sort(sortColumn);\n    }\n}\n\n/**\n * Sort the column.\n * Toggle current direction on column if it's sortable\n * and not just updating the prop.\n */\nfunction sort(\n    column: TableColumnItem<T>,\n    updateDirection = false,\n    event?: Event,\n): void {\n    if (!column?.sortable) return;\n\n    if (updateDirection)\n        isAsc.value = isColumnSorted(column)\n            ? !isAsc.value\n            : props.defaultSortDirection.toLowerCase() === \"asc\";\n\n    // if not first time sort\n    if (currentSortColumn.value)\n        emits(\n            \"sort\",\n            column,\n            isAsc.value ? \"asc\" : \"desc\",\n            event || new Event(\"sort\"),\n        );\n\n    currentSortColumn.value = column;\n\n    // if not backend sorted\n    if (!props.backendSorting) {\n        // sort rows by mutating the tableRows array\n        sortByColumn(tableRows.value);\n\n        // recalculate the page filter\n        filterTableRows();\n    }\n}\n\nfunction sortByColumn(rows: TableRow<T>[]): TableRow<T>[] {\n    const column = currentSortColumn.value;\n    if (!column) return rows;\n    return sortBy<TableRow<T>>(\n        rows,\n        column?.field ? \"value.\" + column.field : \"\",\n        column?.customSort\n            ? (a, b, asc): number => column.customSort!(a.value, b.value, asc)\n            : undefined,\n        isAsc.value,\n        true,\n    );\n}\n\n// #endregion --- Sort Feature ---\n\n// #region --- Checkable Feature ---\n\nconst tableCheckedRows = defineModel<T[]>(\"checkedRows\", {\n    default: [],\n});\n\n/** check if all rows in the page are checked */\nconst isAllChecked = computed(() => {\n    const validVisibleData = availableRows.value.filter((row) =>\n        props.isRowCheckable(row.value),\n    );\n    if (validVisibleData.length === 0) return false;\n    return validVisibleData.every((currentVisibleRow) =>\n        isChecked(currentVisibleRow),\n    );\n});\n\n/** check if all rows in the page are checkable */\nconst isAllUncheckable = computed(\n    () => !availableRows.value.some((row) => props.isRowCheckable(row.value)),\n);\n\n/** check if the row is checked (is added to the array) */\nfunction isChecked(row: TableRow<T>): boolean {\n    if (typeof props.isRowChecked === \"function\")\n        return props.isRowChecked(row.value);\n    else return tableCheckedRows.value.some((r) => isRowEqual(r, row.value));\n}\n\n/** add a checked row to the the array */\nfunction addCheckedRow(row: TableRow<T>): void {\n    tableCheckedRows.value = [...tableCheckedRows.value, row.value];\n}\n\n/** remove a checked row from the array */\nfunction removeCheckedRow(row: TableRow<T>): void {\n    const idx = tableCheckedRows.value.findIndex((r) =>\n        isRowEqual(r, row.value),\n    );\n    if (idx >= 0)\n        tableCheckedRows.value = tableCheckedRows.value.toSpliced(idx, 1);\n}\n\n/**\n * Header checkbox click listener.\n * Add or remove all rows in current page.\n */\nfunction checkAll(): void {\n    if (isAllChecked.value)\n        // if all rows are already checked, check nothing\n        tableCheckedRows.value = [];\n    else {\n        // else set all visible rows as checked\n        tableCheckedRows.value = availableRows.value\n            .filter((row) => props.isRowCheckable(row.value))\n            .map((row) => row.value);\n    }\n\n    // emit event after the reactive checked rows list got updated\n    nextTick(() => emits(\"check-all\", tableCheckedRows.value));\n}\n\n/** row checkbox click listener */\nfunction checkRow(row: TableRow<T>): void {\n    if (!props.isRowCheckable(row.value)) return;\n\n    if (isChecked(row)) removeCheckedRow(row);\n    else addCheckedRow(row);\n\n    // emit event after the reactive checked rows list got updated\n    nextTick(() => emits(\"check\", tableCheckedRows.value, row.value));\n}\n\n// #endregion --- Checkable Feature ---\n\n// #region --- Detail Row Feature ---\n\nconst visibleDetailedRows = defineModel<T[]>(\"detailedRows\", {\n    default: [],\n});\n\n/**\n * Return if detailed row tabled.\n * Will be with chevron column & icon or not.\n */\nconst showDetailRowIcon = computed(\n    () => props.detailed && props.showDetailIcon,\n);\n\n/** toggle to show/hide details slot */\nfunction toggleDetails(row: TableRow<T>): void {\n    if (isDetailRowVisible(row)) {\n        closeDetailRow(row);\n        emits(\"details-close\", row.value);\n    } else {\n        openDetailRow(row);\n        emits(\"details-open\", row.value);\n    }\n}\n\nfunction openDetailRow(row: TableRow<T>): void {\n    visibleDetailedRows.value = [...visibleDetailedRows.value, row.value];\n}\n\nfunction closeDetailRow(row: TableRow<T>): void {\n    const idx = visibleDetailedRows.value.findIndex((r) =>\n        isRowEqual(r, row.value),\n    );\n    if (idx >= 0)\n        visibleDetailedRows.value = visibleDetailedRows.value.toSpliced(idx, 1);\n}\n\nfunction isDetailRowVisible(row: TableRow<T>): boolean {\n    return (\n        props.detailed &&\n        visibleDetailedRows.value.some((r) => isRowEqual(r, row.value))\n    );\n}\n\n// #endregion --- Detail Row Feature ---\n\n// #region --- Drag&Drop Feature ---\n\nconst isDraggingRow = ref(false);\nconst isDraggingColumn = ref(false);\n\nconst canDragRow = computed(() => props.draggable && !isDraggingColumn.value);\n\nconst canDragColumn = computed(\n    () => props.draggableColumn && !isDraggingRow.value,\n);\n\n/** emits drag start event */\nfunction handleDragStart(row: TableRow<T>, event: DragEvent): void {\n    if (!props.draggable) return;\n    emits(\"dragstart\", row.value, row.index, event);\n}\n\n/** emits drag leave event */\nfunction handleDragEnd(row: TableRow<T>, event: DragEvent): void {\n    if (!props.draggable) return;\n    emits(\"dragend\", row.value, row.index, event);\n}\n\n/** emits drop event */\nfunction handleDrop(row: TableRow<T>, event: DragEvent): void {\n    if (!props.draggable) return;\n    emits(\"drop\", row.value, row.index, event);\n}\n\n/** emits drag over event */\nfunction handleDragOver(row: TableRow<T>, event: DragEvent): void {\n    if (!props.draggable) return;\n    emits(\"dragover\", row.value, row.index, event);\n}\n\n/** emits drag leave event */\nfunction handleDragLeave(row: TableRow<T>, event: DragEvent): void {\n    if (!props.draggable) return;\n    emits(\"dragleave\", row.value, row.index, event);\n}\n\n/** emits drag start event (column) */\nfunction handleColumnDragStart(\n    column: TableColumnItem<T>,\n    event: DragEvent,\n): void {\n    if (!canDragColumn.value) return;\n    isDraggingColumn.value = true;\n    emits(\"columndragstart\", column.value, column.index, event);\n}\n\n/** emits drag leave event (column) */\nfunction handleColumnDragEnd(\n    column: TableColumnItem<T>,\n    event: DragEvent,\n): void {\n    if (!canDragColumn.value) return;\n    isDraggingColumn.value = false;\n    emits(\"columndragend\", column.value, column.index, event);\n}\n\n/** emits drop event (column) */\nfunction handleColumnDrop(column: TableColumnItem<T>, event: DragEvent): void {\n    if (!canDragColumn.value) return;\n    emits(\"columndrop\", column.value, column.index, event);\n}\n\n/** emits drag over event (column) */\nfunction handleColumnDragOver(\n    column: TableColumnItem<T>,\n    event: DragEvent,\n): void {\n    if (!canDragColumn.value) return;\n    emits(\"columndragover\", column.value, column.index, event);\n}\n\n/** emits drag leave event (column) */\nfunction handleColumnDragLeave(\n    column: TableColumnItem<T>,\n    event: DragEvent,\n): void {\n    if (!canDragColumn.value) return;\n    emits(\"columndragleave\", column.value, column.index, event);\n}\n\n// #endregion --- Drag&Drop Feature ---\n\n// #region --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-table__root\"],\n    [\"mobileClass\", \"o-table__root--mobile\", null, isMobileActive],\n);\n\nconst tableWrapperClasses = defineClasses(\n    [\"wrapperClass\", \"o-table__wrapper\"],\n    [\n        \"stickyHeaderClass\",\n        \"o-table__wrapper--sticky-header\",\n        null,\n        computed(() => props.stickyHeader),\n    ],\n    [\"scrollableClass\", \"o-table__wrapper--scrollable\", null, isScrollable],\n    [\"mobileClass\", \"o-table__wrapper--mobile\", null, isMobileActive],\n);\n\nconst tableWrapperStyle = computed(() => ({\n    height: toCssDimension(props.height),\n}));\n\nconst tableClasses = defineClasses(\n    [\"tableClass\", \"o-table\"],\n    [\n        \"borderedClass\",\n        \"o-table--bordered\",\n        null,\n        computed(() => props.bordered),\n    ],\n    [\"stripedClass\", \"o-table--striped\", null, computed(() => props.striped)],\n    [\n        \"narrowedClass\",\n        \"o-table--narrowed\",\n        null,\n        computed(() => props.narrowed),\n    ],\n    [\n        \"hoverableClass\",\n        \"o-table--hoverable\",\n        null,\n        computed(\n            () =>\n                (props.hoverable || props.selectable) &&\n                !!availableRows.value.length,\n        ),\n    ],\n    [\n        \"emptyClass\",\n        \"o-table--empty\",\n        null,\n        computed(() => !availableRows.value.length),\n    ],\n);\n\nconst thBaseClasses = defineClasses([\"thClass\", \"o-table__th\"]);\n\nconst thCheckboxClasses = defineClasses(\n    [\"thCheckboxClass\", \"o-table__th-checkbox\"],\n    [\n        \"thStickyClass\",\n        \"o-table__th--sticky\",\n        null,\n        computed(() => props.stickyCheckbox),\n    ],\n);\n\nconst thDetailedClasses = defineClasses([\n    \"thDetailedClass\",\n    \"o-table__th-detailed\",\n]);\n\nconst thSubheadingClasses = defineClasses([\n    \"thSubheadingClass\",\n    \"o-table__th-subheading\",\n]);\n\nconst thSortIconClasses = defineClasses([\n    \"thSortIconClass\",\n    \"o-table__th__sort-icon\",\n]);\n\nconst trSelectedClasses = defineClasses([\n    \"trSelectedClass\",\n    \"o-table__tr--selected\",\n]);\n\nconst trCheckedClasses = defineClasses([\n    \"trCheckedClass\",\n    \"o-table__tr--checked\",\n]);\n\nconst trEmptyClasses = defineClasses([\"trEmptyClass\", \"o-table__tr-empty\"]);\n\nconst trDetailedClasses = defineClasses([\n    \"trDetailedClass\",\n    \"o-table__tr-detail\",\n]);\n\nconst tdBaseClasses = defineClasses([\"tdClass\", \"o-table__td\"]);\n\nconst tdCheckboxClasses = defineClasses(\n    [\"tdCheckboxClass\", \"o-table__td-checkbox\"],\n    [\n        \"thStickyClass\",\n        \"o-table__th--sticky\",\n        null,\n        computed(() => props.stickyCheckbox),\n    ],\n);\n\nconst tdDetailedChevronClasses = defineClasses([\n    \"tdDetailedChevronClass\",\n    \"o-table__td-chevron\",\n]);\n\nconst footerClasses = defineClasses([\"footerClass\", \"o-table__footer\"]);\n\nconst mobileSortClasses = defineClasses([\n    \"mobileSortClass\",\n    \"o-table__mobile-sort\",\n]);\n\nconst paginationWrapperClasses = defineClasses([\n    \"paginationWrapperClass\",\n    \"o-table__pagination\",\n]);\n\nconst paginationWrapperRootClasses = computed(() =>\n    getActiveClasses(paginationWrapperClasses),\n);\n\nfunction rowClasses(row: TableRow<T>): ClassBind[] {\n    const selectedClasses = isRowEqual(row.value, tableSelectedRow.value)\n        ? trSelectedClasses.value\n        : [];\n\n    const checkedClasses = isChecked(row) ? trCheckedClasses.value : [];\n\n    const rowClass =\n        typeof props.rowClass === \"function\"\n            ? props.rowClass(row.value, row.index) || \"\"\n            : \"\";\n\n    return [...selectedClasses, ...checkedClasses, { [rowClass]: true }];\n}\n\n// #endregion --- Computed Component Classes ---\n\n// compute initial row visibility\nfilterTableRows();\n\n// #region --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ rows: tableRows, sort: sortByField });\n\n// #endregion\n</script>\n\n<template>\n    <div data-oruga=\"table\" :class=\"rootClasses\">\n        <div ref=\"slotsWrapper\" style=\"display: none\">\n            <!--\n                @slot Place o-table-column here\n            -->\n            <slot>\n                <!--\n                    @slot Place extra `o-table-column` components here, even if you have some columns defined by prop\n                -->\n                <slot name=\"before\" />\n\n                <template v-if=\"columns?.length\">\n                    <o-table-column\n                        v-for=\"(column, idx) in columns\"\n                        :key=\"column.field || idx\"\n                        v-slot=\"{ row }\"\n                        v-bind=\"column\">\n                        {{ getColumnValue(row, column) }}\n                    </o-table-column>\n                </template>\n\n                <!--\n                    @slot Place extra `o-table-column` components here, even if you have some columns defined by prop\n                -->\n                <slot name=\"after\" />\n            </slot>\n        </div>\n\n        <o-table-mobile-sort\n            v-if=\"isMobileActive && hasSortableColumns\"\n            :current-sort-column=\"currentSortColumn\"\n            :columns=\"tableColumns\"\n            :placeholder=\"mobileSortPlaceholder\"\n            :icon-pack=\"iconPack\"\n            :sort-icon=\"sortIcon\"\n            :sort-icon-size=\"sortIconSize\"\n            :is-asc=\"isAsc\"\n            :mobile-sort-classes=\"mobileSortClasses\"\n            @sort=\"(column, event) => sort(column, true, event)\" />\n\n        <template\n            v-if=\"\n                paginated &&\n                (paginationPosition === 'top' || paginationPosition === 'both')\n            \">\n            <!--\n                @slot Override pagination label\n                @binding {number} current - current page\n                @binding {number} per-page - rows per page\n                @binding {number} total - total rows count\n                @binding {(page: number): void } change - on page change event\n            -->\n            <slot\n                name=\"pagination\"\n                :current=\"tableCurrentPage\"\n                :per-page=\"perPage\"\n                :total=\"tableTotal\"\n                :change=\"(page) => (tableCurrentPage = page)\">\n                <o-table-pagination\n                    v-model:current=\"tableCurrentPage\"\n                    :paginated=\"paginated\"\n                    :per-page=\"perPage\"\n                    :total=\"tableTotal\"\n                    :rounded=\"paginationRounded\"\n                    :size=\"paginationSize\"\n                    :order=\"paginationOrder\"\n                    :simple=\"paginationSimple\"\n                    :range-before=\"paginationRangeBefore\"\n                    :range-after=\"paginationRangeAfter\"\n                    :icon-pack=\"iconPack\"\n                    :aria-next-label=\"ariaNextLabel\"\n                    :aria-previous-label=\"ariaPreviousLabel\"\n                    :aria-page-label=\"ariaPageLabel\"\n                    :aria-current-label=\"ariaCurrentLabel\"\n                    :root-class=\"paginationWrapperRootClasses\"\n                    @change=\"(page) => $emit('page-change', page)\">\n                    <!--\n                        @slot Additional slot if table is paginated\n                    -->\n                    <slot name=\"top-left\" />\n                </o-table-pagination>\n            </slot>\n        </template>\n\n        <div :class=\"tableWrapperClasses\" :style=\"tableWrapperStyle\">\n            <table\n                v-if=\"tableColumns.length\"\n                v-bind=\"$attrs\"\n                :class=\"tableClasses\"\n                :tabindex=\"selectable || isScrollable ? 0 : undefined\"\n                :aria-rowcount=\"rowCount\"\n                :aria-colcount=\"columnCount\"\n                @keydown.prevent.up=\"onArrowPressed(-1, $event)\"\n                @keydown.prevent.down=\"onArrowPressed(1, $event)\"\n                @keydown.prevent.home=\"selectRow(availableRows[0], $event)\"\n                @keydown.prevent.end=\"\n                    selectRow(availableRows[availableRows.length - 1], $event)\n                \">\n                <caption v-if=\"$slots.caption\">\n                    <!--\n                        @slot Define a table caption here\n                    -->\n                    <slot name=\"caption\" />\n                </caption>\n\n                <thead v-if=\"showHeader\">\n                    <!--\n                        @slot Define preheader content here\n                    -->\n                    <slot name=\"preheader\" />\n\n                    <tr :aria-rowindex=\"1\">\n                        <!-- detailed toggle column -->\n                        <th\n                            v-if=\"showDetailRowIcon\"\n                            :class=\"[...thBaseClasses, ...thDetailedClasses]\"\n                            :aria-colindex=\"1\"\n                            aria-hidden=\"true\" />\n\n                        <!-- checkable column left -->\n                        <th\n                            v-if=\"checkable && checkboxPosition === 'left'\"\n                            :class=\"[...thBaseClasses, ...thCheckboxClasses]\"\n                            :aria-colindex=\"showDetailRowIcon ? 2 : 1\">\n                            <!--\n                                @slot Override check all checkbox\n                                @binding {boolean} is-all-checked - if all rows are checked\n                                @binding {boolean} is-all-uncheckable - if check all is uncheckable\n                                @binding {(): void} check-all - check all function\n                            -->\n                            <slot\n                                v-if=\"checkableHeader\"\n                                name=\"check-all\"\n                                :is-all-checked=\"isAllChecked\"\n                                :is-all-uncheckable=\"isAllUncheckable\"\n                                :check-all=\"checkAll\">\n                                <o-checkbox\n                                    :model-value=\"isAllChecked\"\n                                    autocomplete=\"off\"\n                                    name=\"row_check_all\"\n                                    :variant=\"checkboxVariant\"\n                                    :disabled=\"isAllUncheckable\"\n                                    aria-label=\"Check all\"\n                                    @update:model-value=\"checkAll\" />\n                            </slot>\n                        </th>\n\n                        <!-- row data columns -->\n                        <template\n                            v-for=\"column in tableColumns\"\n                            :key=\"column.identifier\">\n                            <th\n                                v-if=\"!column.hidden\"\n                                v-bind=\"column.thAttrsData\"\n                                :class=\"[...thBaseClasses, ...column.thClasses]\"\n                                :style=\"isMobileActive ? {} : column.style\"\n                                :draggable=\"canDragColumn\"\n                                :aria-sort=\"\n                                    isColumnSorted(column)\n                                        ? isAsc\n                                            ? 'ascending'\n                                            : 'descending'\n                                        : undefined\n                                \"\n                                :aria-colindex=\"\n                                    ariaColIndexStart + column.index\n                                \"\n                                @click.stop=\"sort(column, true, $event)\"\n                                @dragstart=\"\n                                    handleColumnDragStart(column, $event)\n                                \"\n                                @dragend=\"handleColumnDragEnd(column, $event)\"\n                                @drop=\"handleColumnDrop(column, $event)\"\n                                @dragover=\"handleColumnDragOver(column, $event)\"\n                                @dragleave=\"\n                                    handleColumnDragLeave(column, $event)\n                                \">\n                                <o-slot-component\n                                    v-if=\"column.$slots?.header\"\n                                    :component=\"column.$el\"\n                                    name=\"header\"\n                                    tag=\"span\"\n                                    :props=\"{\n                                        column: column.value,\n                                        index: column.index,\n                                    }\" />\n\n                                <span v-else>\n                                    {{ column.label }}\n                                    <span\n                                        v-if=\"column.sortable\"\n                                        v-show=\"isColumnSorted(column)\"\n                                        :class=\"thSortIconClasses\"\n                                        :aria-hidden=\"!isColumnSorted(column)\">\n                                        <o-icon\n                                            :icon=\"sortIcon\"\n                                            :pack=\"iconPack\"\n                                            :size=\"sortIconSize\"\n                                            :rotation=\"!isAsc ? 180 : 0\" />\n                                    </span>\n                                </span>\n                            </th>\n                        </template>\n\n                        <!-- checkable column right -->\n                        <th\n                            v-if=\"checkable && checkboxPosition === 'right'\"\n                            :class=\"[...thBaseClasses, ...thCheckboxClasses]\"\n                            :aria-colindex=\"\n                                ariaColIndexStart + tableColumns.length\n                            \">\n                            <!--\n                                @slot Override check all checkbox\n                                @binding {boolean} is-all-checked - if all rows are checked\n                                @binding {boolean} is-all-uncheckable - if check all is uncheckable\n                                @binding {(): void} check-all - check all function\n                            -->\n                            <slot\n                                v-if=\"checkableHeader\"\n                                name=\"check-all\"\n                                :is-all-checked=\"isAllChecked\"\n                                :is-all-uncheckable=\"isAllUncheckable\"\n                                :check-all=\"checkAll\">\n                                <o-checkbox\n                                    :model-value=\"isAllChecked\"\n                                    autocomplete=\"off\"\n                                    name=\"row_check_all\"\n                                    :variant=\"checkboxVariant\"\n                                    :disabled=\"isAllUncheckable\"\n                                    aria-label=\"Check all\"\n                                    @update:model-value=\"checkAll\" />\n                            </slot>\n                        </th>\n                    </tr>\n\n                    <tr v-if=\"hasSearchableColumns\" :aria-rowindex=\"2\">\n                        <!-- detailed toggle column -->\n                        <th\n                            v-if=\"showDetailRowIcon\"\n                            :class=\"[...thBaseClasses, ...thDetailedClasses]\"\n                            aria-hidden=\"true\" />\n\n                        <!-- checkable column left -->\n                        <th v-if=\"checkable && checkboxPosition === 'left'\" />\n\n                        <!-- row data columns -->\n                        <template\n                            v-for=\"column in tableColumns\"\n                            :key=\"column.identifier\">\n                            <th\n                                v-if=\"!column.hidden\"\n                                v-bind=\"column.thAttrsData\"\n                                :class=\"[...thBaseClasses, ...column.thClasses]\"\n                                :style=\"isMobileActive ? {} : column.style\">\n                                <template v-if=\"column.searchable\">\n                                    <template v-if=\"column.$slots?.searchable\">\n                                        <o-slot-component\n                                            :component=\"column.$el\"\n                                            name=\"searchable\"\n                                            tag=\"span\"\n                                            :props=\"{\n                                                column: column.value,\n                                                index: column.index,\n                                                filters,\n                                            }\" />\n                                    </template>\n                                    <o-input\n                                        v-else-if=\"column.field\"\n                                        v-model=\"filters[column.field]\"\n                                        :name=\"`column_${column.field}_filter`\"\n                                        :type=\"\n                                            column.numeric ? 'number' : 'search'\n                                        \"\n                                        :placeholder=\"filtersPlaceholder\"\n                                        :icon=\"filtersIcon\"\n                                        :pack=\"iconPack\"\n                                        size=\"small\"\n                                        :aria-label=\"`${column.label} search`\"\n                                        @[filtersEvent]=\"onFiltersEvent\" />\n                                </template>\n                            </th>\n                        </template>\n\n                        <!-- checkable column right -->\n                        <th v-if=\"checkable && checkboxPosition === 'right'\" />\n                    </tr>\n\n                    <tr\n                        v-if=\"hasSubheadings\"\n                        :aria-rowindex=\"hasSearchableColumns ? 3 : 2\">\n                        <!-- detailed toggle column -->\n                        <th\n                            v-if=\"showDetailRowIcon\"\n                            :class=\"[...thBaseClasses, ...thDetailedClasses]\" />\n\n                        <!-- checkable column left -->\n                        <th v-if=\"checkable && checkboxPosition === 'left'\" />\n\n                        <!-- row data columns -->\n                        <template\n                            v-for=\"column in tableColumns\"\n                            :key=\"column.identifier\">\n                            <th\n                                v-if=\"!column.hidden\"\n                                :style=\"isMobileActive ? {} : column.style\"\n                                :class=\"[\n                                    ...thBaseClasses,\n                                    ...thSubheadingClasses,\n                                ]\">\n                                <o-slot-component\n                                    v-if=\"column.$slots?.subheading\"\n                                    :component=\"column.$el\"\n                                    name=\"subheading\"\n                                    tag=\"span\"\n                                    :props=\"{\n                                        column: column.value,\n                                        index: column.index,\n                                    }\" />\n                                <span v-else>\n                                    <slot name=\"subheading\">\n                                        {{ column.subheading }}\n                                    </slot>\n                                </span>\n                            </th>\n                        </template>\n\n                        <!-- checkable column right -->\n                        <th v-if=\"checkable && checkboxPosition === 'right'\" />\n                    </tr>\n                </thead>\n\n                <tbody>\n                    <!-- table rows -->\n                    <template\n                        v-for=\"(row, rowIndex) in tableRows\"\n                        :key=\"row.key\">\n                        <tr\n                            v-if=\"!row.hidden\"\n                            :class=\"rowClasses(row)\"\n                            :draggable=\"canDragRow\"\n                            :aria-rowindex=\"ariaRowIndexStart + rowIndex + 1\"\n                            @click=\"selectRow(row, $event)\"\n                            @dblclick=\"\n                                $emit('dblclick', row.value, row.index, $event)\n                            \"\n                            @mouseenter=\"\n                                $emit(\n                                    'mouseenter',\n                                    row.value,\n                                    row.index,\n                                    $event,\n                                )\n                            \"\n                            @mouseleave=\"\n                                $emit(\n                                    'mouseleave',\n                                    row.value,\n                                    row.index,\n                                    $event,\n                                )\n                            \"\n                            @contextmenu=\"\n                                $emit(\n                                    'contextmenu',\n                                    row.value,\n                                    row.index,\n                                    $event,\n                                )\n                            \"\n                            @dragstart=\"handleDragStart(row, $event)\"\n                            @dragend=\"handleDragEnd(row, $event)\"\n                            @drop=\"handleDrop(row, $event)\"\n                            @dragover=\"handleDragOver(row, $event)\"\n                            @dragleave=\"handleDragLeave(row, $event)\">\n                            <!-- detailed toggle column -->\n                            <td\n                                v-if=\"showDetailRowIcon\"\n                                :class=\"[\n                                    ...tdBaseClasses,\n                                    ...tdDetailedChevronClasses,\n                                ]\">\n                                <o-icon\n                                    v-if=\"isDetailedVisible(row.value)\"\n                                    :icon=\"detailIcon\"\n                                    :pack=\"iconPack\"\n                                    :rotation=\"isDetailRowVisible(row) ? 90 : 0\"\n                                    clickable\n                                    :aria-label=\"`Open ${row.label} details`\"\n                                    @click.prevent=\"toggleDetails(row)\" />\n                            </td>\n\n                            <!-- checkable column left -->\n                            <td\n                                v-if=\"checkable && checkboxPosition === 'left'\"\n                                :class=\"[\n                                    ...thBaseClasses,\n                                    ...tdCheckboxClasses,\n                                ]\">\n                                <o-checkbox\n                                    :model-value=\"isChecked(row)\"\n                                    autocomplete=\"off\"\n                                    :name=\"`row_${row.index}_check`\"\n                                    :variant=\"checkboxVariant\"\n                                    :disabled=\"!isRowCheckable(row.value)\"\n                                    :aria-label=\"`Check ${row.label}`\"\n                                    @update:model-value=\"checkRow(row)\" />\n                            </td>\n\n                            <!-- row data columns -->\n                            <template\n                                v-for=\"column in tableColumns\"\n                                :key=\"column.identifier\">\n                                <o-slot-component\n                                    v-if=\"!column.hidden\"\n                                    v-bind=\"column.tdAttrsData[row.index]\"\n                                    :component=\"column.$el\"\n                                    name=\"default\"\n                                    tag=\"td\"\n                                    :class=\"[\n                                        ...tdBaseClasses,\n                                        ...column.tdClasses,\n                                    ]\"\n                                    :data-label=\"column.label\"\n                                    :style=\"isMobileActive ? {} : column.style\"\n                                    :props=\"{\n                                        row: row.value,\n                                        index: row.index,\n                                        column: column.value,\n                                        colindex: column.index,\n                                        toggleDetails: () => toggleDetails(row),\n                                    }\"\n                                    @click=\"\n                                        $emit(\n                                            'cell-click',\n                                            row.value,\n                                            column.value,\n                                            row.index,\n                                            column.index,\n                                            $event,\n                                        )\n                                    \">\n                                    {{ getColumnValue(row.value, column) }}\n                                </o-slot-component>\n                            </template>\n\n                            <!-- checkable column right -->\n                            <td\n                                v-if=\"checkable && checkboxPosition === 'right'\"\n                                :class=\"[\n                                    ...thBaseClasses,\n                                    ...tdCheckboxClasses,\n                                ]\">\n                                <o-checkbox\n                                    :model-value=\"isChecked(row)\"\n                                    autocomplete=\"off\"\n                                    :variant=\"checkboxVariant\"\n                                    :disabled=\"!isRowCheckable(row.value)\"\n                                    :aria-label=\"`Check ${row.label}`\"\n                                    @update:model-value=\"checkRow(row)\" />\n                            </td>\n                        </tr>\n\n                        <transition-group\n                            v-if=\"props.detailed\"\n                            :name=\"detailTransition\">\n                            <template v-if=\"isDetailRowVisible(row)\">\n                                <!--\n                                    @slot Place row detail content here\n                                    @binding {T} row - row content\n                                    @binding {number} index - row index\n                                -->\n                                <slot\n                                    v-if=\"customDetailRow\"\n                                    name=\"detail\"\n                                    :row=\"row.value\"\n                                    :index=\"row.index\" />\n                                <tr\n                                    v-else\n                                    :key=\"`${row.key}_detail`\"\n                                    :class=\"trDetailedClasses\">\n                                    <td :colspan=\"columnCount\">\n                                        <!--\n                                            @slot Place row detail content here\n                                            @binding {T} row - row content\n                                            @binding {number} index - row index\n                                        -->\n                                        <slot\n                                            name=\"detail\"\n                                            :row=\"row.value\"\n                                            :index=\"row.index\" />\n                                    </td>\n                                </tr>\n                            </template>\n                        </transition-group>\n                    </template>\n\n                    <tr v-if=\"!availableRows.length\" :class=\"trEmptyClasses\">\n                        <td :colspan=\"columnCount\">\n                            <!--\n                                @slot Define content if table is empty\n                            -->\n                            <slot name=\"empty\">\n                                <o-icon\n                                    v-if=\"emptyIcon\"\n                                    :icon=\"emptyIcon\"\n                                    :size=\"emptyIconSize\"\n                                    :pack=\"iconPack\" />\n                                {{ emptyLabel }}\n                            </slot>\n                        </td>\n                    </tr>\n                </tbody>\n\n                <tfoot v-if=\"$slots.footer\">\n                    <tr :class=\"footerClasses\">\n                        <!--\n                            @slot Define a custom footer\n                            @binding {number} column-count - counts of visible columns\n                            @binding {number} row-count - counts of visible rows\n                        -->\n                        <slot\n                            v-if=\"hasCustomFooterSlot()\"\n                            name=\"footer\"\n                            :column-count=\"columnCount\"\n                            :row-count=\"rowCount\" />\n                        <th v-else :colspan=\"columnCount\">\n                            <!--\n                                @slot Define a custom footer\n                                @binding {number} column-count - counts of visible columns\n                                @binding {number} row-count - counts of visible rows\n                            -->\n                            <slot\n                                name=\"footer\"\n                                :column-count=\"columnCount\"\n                                :row-count=\"rowCount\" />\n                        </th>\n                    </tr>\n                </tfoot>\n            </table>\n\n            <!--\n                @slot Override loading component\n                @binding {boolean} loading - is loading state enabled\n            -->\n            <slot name=\"loading\" :loading=\"loading\">\n                <o-loading\n                    v-bind=\"loadingClasses\"\n                    :full-page=\"false\"\n                    :active=\"loading\"\n                    :icon=\"loadingIcon\"\n                    :label=\"loadingLabel\" />\n            </slot>\n        </div>\n\n        <template\n            v-if=\"\n                (checkable && $slots['bottom-left']) ||\n                (paginated &&\n                    (paginationPosition === 'bottom' ||\n                        paginationPosition === 'both'))\n            \">\n            <!--\n                @slot Override pagination label\n                @binding {number} current - current page\n                @binding {number} per-page - rows per page\n                @binding {number} total - total rows count\n                @binding {(page: number): void } change - on page change event\n            -->\n            <slot\n                name=\"pagination\"\n                :current=\"tableCurrentPage\"\n                :per-page=\"perPage\"\n                :total=\"tableTotal\"\n                :change=\"(page) => (tableCurrentPage = page)\">\n                <o-table-pagination\n                    v-model:current=\"tableCurrentPage\"\n                    :paginated=\"paginated\"\n                    :per-page=\"perPage\"\n                    :total=\"tableTotal\"\n                    :rounded=\"paginationRounded\"\n                    :size=\"paginationSize\"\n                    :order=\"paginationOrder\"\n                    :simple=\"paginationSimple\"\n                    :range-before=\"paginationRangeBefore\"\n                    :range-after=\"paginationRangeAfter\"\n                    :icon-pack=\"iconPack\"\n                    :aria-next-label=\"ariaNextLabel\"\n                    :aria-previous-label=\"ariaPreviousLabel\"\n                    :aria-page-label=\"ariaPageLabel\"\n                    :aria-current-label=\"ariaCurrentLabel\"\n                    :root-class=\"paginationWrapperRootClasses\"\n                    @change=\"(page) => $emit('page-change', page)\">\n                    <!--\n                        @slot Additional slot if table is paginated\n                    -->\n                    <slot name=\"bottom-left\" />\n                </o-table-pagination>\n            </slot>\n        </template>\n    </div>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Table from \"./Table.vue\";\nimport TableColumn from \"./TableColumn.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export table specific types */\nexport type { TableColumn, TableRow } from \"./types\";\n\n/** export table plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Table);\n        registerComponent(app, TableColumn);\n    },\n} as Plugin;\n\n/** export table components */\nexport { Table as OTable, TableColumn as OTableColumn };\n","<script setup lang=\"ts\" generic=\"T, C extends Component\">\nimport { computed, ref, useSlots, useId, type Component } from \"vue\";\n\nimport PlainButton from \"../utils/PlainButton\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { defineClasses, useProviderChild } from \"@/composables\";\n\nimport type { TabsComponent, TabItemComponent } from \"./types\";\nimport type { TabItemProps } from \"./props\";\n\n/**\n * An tab item used by the tabs component.\n * @displayName Tab Item\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OTabItem\",\n    configField: \"tabs\",\n    inheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<TabItemProps<T, C>>(), {\n    override: undefined,\n    value: undefined,\n    label: undefined,\n    disabled: false,\n    visible: true,\n    icon: () => getDefault(\"tabs.icon\"),\n    iconPack: () => getDefault(\"tabs.iconPack\"),\n    tag: () => getDefault(\"tabs.itemTag\", PlainButton),\n    content: undefined,\n    component: undefined,\n    props: undefined,\n    events: undefined,\n});\n\nconst emits = defineEmits<{\n    /** on tab item activate event */\n    activate: [];\n    /** on tab item deactivate event */\n    deactivate: [];\n}>();\n\nconst itemValue = props.value ?? useId();\n\nconst slots = useSlots();\n\n// provided data is a computed ref to ensure reactivity\nconst providedData = computed<TabItemComponent<T>>(() => ({\n    ...props,\n    value: itemValue,\n    $slots: slots,\n    tabClasses: tabClasses.value,\n    iconClasses: tabIconClasses.value,\n    labelClasses: tabLabelClasses.value,\n    isTransitioning: isTransitioning.value,\n    activate,\n    deactivate,\n}));\n\n/** inject functionalities and data from the parent component */\nconst { parent, item } = useProviderChild<TabsComponent, TabItemComponent<T>>({\n    data: providedData,\n});\n\nconst transitionName = ref();\n\nconst isActive = computed(() => item.value.index === parent.value.activeIndex);\n\nconst isTransitioning = ref(false);\n\nconst nextAnimation = computed(() => {\n    const idx =\n        parent.value.vertical && parent.value.animation.length === 4 ? 2 : 0;\n    return parent.value.animation[idx];\n});\n\nconst prevAnimation = computed(() => {\n    const idx =\n        parent.value.vertical && parent.value.animation.length === 4 ? 3 : 1;\n    return parent.value.animation[idx];\n});\n\n/** Activate element, alter animation name based on the index. */\nfunction activate(oldIndex: number): void {\n    transitionName.value =\n        item.value.index < oldIndex ? nextAnimation.value : prevAnimation.value;\n\n    // emit event\n    emits(\"activate\");\n}\n\n/** Deactivate element, alter animation name based on the index. */\nfunction deactivate(newIndex: number): void {\n    transitionName.value =\n        newIndex < item.value.index ? nextAnimation.value : prevAnimation.value;\n\n    // emit event\n    emits(\"deactivate\");\n}\n\n/** Transition after-enter hook */\nfunction afterEnter(): void {\n    isTransitioning.value = true;\n}\n\n/** Transition before-leave hook */\nfunction beforeLeave(): void {\n    isTransitioning.value = true;\n}\n\n// --- Computed Component Classes ---\n\nconst tabClasses = defineClasses(\n    [\"tabClass\", \"o-tabs__tab\"],\n    [\"tabActiveClass\", \"o-tabs__tab--active\", null, isActive],\n    [\n        \"tabDisabledClass\",\n        \"o-tabs__tab--disabled\",\n        null,\n        computed(() => props.disabled),\n    ],\n    [\n        \"tabPreviousClass\",\n        \"o-tabs__tab--previous\",\n        null,\n        computed(() => item.value.index < parent.value?.activeIndex),\n    ],\n    [\n        \"tabNextClass\",\n        \"o-tabs__tab--next\",\n        null,\n        computed(() => item.value.index > parent.value?.activeIndex),\n    ],\n);\n\nconst tabIconClasses = defineClasses([\"tabIconClass\", \"o-tabs__tab-icon\"]);\n\nconst tabLabelClasses = defineClasses([\"tabLabelClass\", \"o-tabs__tab-label\"]);\n\nconst panelClasses = defineClasses([\"tabPanelClass\", \"o-tabs__panel\"]);\n</script>\n\n<template>\n    <Transition\n        v-if=\"parent\"\n        :css=\"parent.animated\"\n        :name=\"transitionName\"\n        :appear=\"parent.animateInitially\"\n        @after-enter=\"afterEnter\"\n        @before-leave=\"beforeLeave\">\n        <div\n            v-show=\"isActive && visible\"\n            v-bind=\"$attrs\"\n            :id=\"`tabpanel-${item.identifier}`\"\n            data-oruga=\"tabs-item\"\n            :data-id=\"`tabs-${item.identifier}`\"\n            :class=\"panelClasses\"\n            role=\"tabpanel\"\n            :hidden=\"!isActive\"\n            :aria-labelledby=\"`tab-${item.identifier}`\"\n            aria-roledescription=\"item\">\n            <!-- \n                @slot Override tab panel content\n                @binding {boolean} active - if item is shown \n            -->\n            <slot :active=\"isActive && visible\">\n                <!-- injected component -->\n                <component\n                    :is=\"component\"\n                    v-if=\"component\"\n                    v-bind=\"$props.props\"\n                    v-on=\"$props.events || {}\" />\n\n                <!-- default content prop -->\n                <template v-else>{{ content }}</template>\n            </slot>\n\n            <!--\n                Do not render these slots here.\n                These are only for documentation purposes.\n                Slots are defined in tabs component.\n            -->\n            <template v-if=\"false\">\n                <!--\n                    @slot Override tab header label\n                    @binding {boolean} active - if item is shown \n                -->\n                <slot name=\"header\" :active=\"isActive && visible\" />\n            </template>\n        </div>\n    </Transition>\n</template>\n","<script setup lang=\"ts\" generic=\"T\">\nimport {\n    computed,\n    ref,\n    watch,\n    watchEffect,\n    toValue,\n    nextTick,\n    onMounted,\n    useTemplateRef,\n} from \"vue\";\n\nimport OTabItem from \"../tabs/TabItem.vue\";\nimport OIcon from \"../icon/Icon.vue\";\nimport OSlotComponent from \"../utils/SlotComponent\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { mod, isDefined } from \"@/utils/helpers\";\nimport {\n    defineClasses,\n    normalizeOptions,\n    useProviderParent,\n    useSequentialId,\n} from \"@/composables\";\n\nimport type { TabsComponent, TabItem, TabItemComponent } from \"./types\";\nimport type { TabsProps } from \"./props\";\n\n/**\n * Responsive horizontal navigation tabs, switch between contents with ease.\n * @displayName Tabs\n * @requires ./TabItem.vue\n * @style _tabs.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OTabs\",\n    configField: \"tabs\",\n});\n\ntype ModelValue = TabsProps<T>[\"modelValue\"];\n\nconst props = withDefaults(defineProps<TabsProps<T>>(), {\n    override: undefined,\n    modelValue: undefined,\n    options: undefined,\n    variant: () => getDefault(\"tabs.variant\"),\n    size: () => getDefault(\"tabs.size\"),\n    vertical: () => getDefault(\"tabs.vertical\", false),\n    position: undefined,\n    type: () => getDefault(\"tabs.type\", \"default\"),\n    tag: () => getDefault(\"tabs.tag\", \"div\"),\n    expanded: false,\n    activateOnFocus: false,\n    animated: () => getDefault(\"tabs.animated\", true),\n    animation: () =>\n        getDefault(\"tabs.animation\", [\n            \"slide-next\",\n            \"slide-prev\",\n            \"slide-down\",\n            \"slide-up\",\n        ]),\n    animateInitially: () => getDefault(\"tabs.animateInitially\", false),\n    multiline: false,\n    ariaLabel: () => getDefault(\"tabs.ariaLabel\"),\n});\n\nconst emits = defineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {T} updated modelValue prop\n     */\n    \"update:model-value\": [value: ModelValue];\n    /**\n     * on tab change event\n     * @param value {T} new tab value\n     * @param value {T} old tab value\n     */\n    change: [newValue: ModelValue, oldValue: ModelValue];\n}>();\n\nconst rootRef = useTemplateRef(\"rootElement\");\n\n// provided data is a computed ref to ensure reactivity\nconst provideData = computed<TabsComponent>(() => ({\n    activeIndex: activeItem.value?.index ?? 0,\n    type: props.type,\n    vertical: props.vertical,\n    animated: props.animated,\n    animation: props.animation,\n    animateInitially: props.animateInitially,\n}));\n\n/** provide functionalities and data to child item components */\nconst { childItems } = useProviderParent<TabItemComponent<T>>({\n    rootRef,\n    data: provideData,\n});\n\nconst items = computed<TabItem<T>[]>(() => {\n    if (!childItems.value) return [];\n    return childItems.value.map((column) => ({\n        index: column.index,\n        identifier: column.identifier,\n        ...toValue(column.data!),\n    }));\n});\n\n// create a unique id sequence\nconst { nextSequence } = useSequentialId();\n\n/** normalized programamtic options */\nconst normalizedOptions = computed(() =>\n    normalizeOptions<T>(props.options, nextSequence),\n);\n\n/** The selected item value, use v-model to make it two-way binding */\nconst vmodel = defineModel<ModelValue>({ default: undefined });\n\n/**  When v-model is changed set the new active tab. */\nwatch(\n    () => props.modelValue,\n    (value) => {\n        if (vmodel.value !== value) performAction(value as T);\n    },\n);\n\n/** the active item */\nconst activeItem = ref<TabItem<T>>();\n\n// set the active item immediate and every time the vmodel changes\nwatchEffect(() => {\n    activeItem.value = isDefined(vmodel.value)\n        ? items.value.find((item) => item.value === vmodel.value) ||\n          items.value[0]\n        : items.value[0];\n});\n\nconst isTransitioning = computed(() =>\n    items.value.some((item) => item.isTransitioning),\n);\n\nonMounted(() => {\n    // set first tab as default if not defined\n    if (!vmodel.value) vmodel.value = items.value[0]?.value;\n});\n\n// --- EVENT HANDLER ---\n\n/** Tab item click listener, emit input event and change active child. */\nfunction itemClick(item: TabItem<T>): void {\n    if (vmodel.value !== item.value) performAction(item.value);\n}\n\n/** Focus the next item or wrap around. */\nfunction onNext(event: KeyboardEvent, index: number): void {\n    if (\n        (props.vertical && event.key == \"ArrowDown\") ||\n        (!props.vertical && event.key == \"ArrowRight\")\n    ) {\n        const newIndex = mod(index + 1, items.value.length);\n        const item = getFirstViableItem(newIndex, true);\n        moveFocus(item);\n    }\n}\n\n/** Focus the previous item or wrap around. */\nfunction onPrev(event: KeyboardEvent, index: number): void {\n    if (\n        (props.vertical && event.key == \"ArrowUp\") ||\n        (!props.vertical && event.key == \"ArrowLeft\")\n    ) {\n        const newIndex = mod(index - 1, items.value.length);\n        const item = getFirstViableItem(newIndex, false);\n        moveFocus(item);\n    }\n}\n\n/** Focus to the first viable item. */\nfunction onHomePressed(): void {\n    if (items.value.length < 1) return;\n    const item = getFirstViableItem(0, true);\n    moveFocus(item);\n}\n\n/** Focus to the last viable item. */\nfunction onEndPressed(): void {\n    if (items.value.length < 1) return;\n    const item = getFirstViableItem(items.value.length - 1, false);\n    moveFocus(item);\n}\n\n/** Set focus on a tab item or click it if `activateOnFocus`. */\nfunction moveFocus(item: TabItem<T>): void {\n    if (props.activateOnFocus) {\n        itemClick(item);\n    } else {\n        const el = rootRef.value?.querySelector<HTMLElement>(\n            `#tab-${item.identifier}`,\n        );\n        el?.focus();\n    }\n}\n\n/**\n * Get the first 'viable' child, starting at startingIndex and in the direction specified\n * by the boolean parameter forward. In other words, first try to select the child at index\n * startingIndex, and if it is not visible or it is disabled, then go to the index in the\n * specified direction until either returning to startIndex or finding a viable child item.\n */\nfunction getFirstViableItem(\n    startingIndex: number,\n    forward: boolean,\n): TabItem<T> {\n    const direction = forward ? 1 : -1;\n    let newIndex = startingIndex;\n    for (\n        ;\n        newIndex !== activeItem.value?.index;\n        newIndex = mod(newIndex + direction, items.value.length)\n    ) {\n        // Break if the item at this index is viable (not disabled and is visible)\n        if (items.value[newIndex].visible && !items.value[newIndex].disabled)\n            break;\n    }\n\n    return items.value[newIndex];\n}\n\n/** Activate next child and deactivate prev child. */\nfunction performAction(newValue: ModelValue): void {\n    const oldValue = vmodel.value;\n    const oldItem = activeItem.value;\n    const newItem =\n        items.value.find((item) => item.value === newValue) || items.value[0];\n\n    if (oldItem && newItem) {\n        oldItem.deactivate(newItem.index);\n        newItem.activate(oldItem.index);\n    }\n\n    nextTick(() => {\n        vmodel.value = newValue;\n        emits(\"change\", newValue, oldValue);\n    });\n}\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-tabs\"],\n    [\n        \"positionClass\",\n        \"o-tabs--\",\n        computed(() => props.position),\n        computed(() => !!props.position),\n    ],\n    [\n        \"sizeClass\",\n        \"o-tabs--\",\n        computed(() => props.size),\n        computed(() => !!props.size),\n    ],\n    [\n        \"typeClass\",\n        \"o-tabs--\",\n        computed(() => props.type),\n        computed(() => !!props.type),\n    ],\n    [\"expandedClass\", \"o-tabs--expanded\", null, computed(() => props.expanded)],\n    [\"verticalClass\", \"o-tabs--vertical\", null, computed(() => props.vertical)],\n    [\n        \"multilineClass\",\n        \"o-tabs--multiline\",\n        null,\n        computed(() => props.multiline),\n    ],\n);\n\nconst tablistClasses = defineClasses([\"listClass\", \"o-tabs__list\"]);\n\nconst contentClasses = defineClasses(\n    [\"contentClass\", \"o-tabs__content\"],\n    [\n        \"transitioningClass\",\n        \"o-tabs__content--transitioning\",\n        null,\n        isTransitioning,\n    ],\n);\n</script>\n\n<template>\n    <div ref=\"rootElement\" data-oruga=\"tabs\" :class=\"rootClasses\">\n        <component\n            :is=\"props.tag\"\n            :class=\"tablistClasses\"\n            role=\"tablist\"\n            :aria-label=\"ariaLabel\"\n            :aria-orientation=\"vertical ? 'vertical' : 'horizontal'\">\n            <!--\n                @slot Additional slot before tabs\n            -->\n            <slot name=\"before\" />\n\n            <o-slot-component\n                v-for=\"childItem in items\"\n                v-show=\"childItem.visible\"\n                :id=\"`tab-${childItem.identifier}`\"\n                :key=\"childItem.identifier\"\n                :component=\"childItem\"\n                :tag=\"childItem.tag\"\n                name=\"header\"\n                :class=\"childItem.tabClasses\"\n                role=\"tab\"\n                :tabindex=\"childItem.value === activeItem?.value ? 0 : -1\"\n                :aria-current=\"\n                    childItem.value === activeItem?.value ? 'true' : undefined\n                \"\n                :aria-controls=\"`tabpanel-${childItem.identifier}`\"\n                :aria-selected=\"childItem.value === activeItem?.value\"\n                @click=\"itemClick(childItem)\"\n                @keydown.enter.prevent=\"itemClick(childItem)\"\n                @keydown.space.prevent=\"itemClick(childItem)\"\n                @keydown.left.prevent=\"onPrev($event, childItem.index)\"\n                @keydown.right.prevent=\"onNext($event, childItem.index)\"\n                @keydown.up.prevent=\"onPrev($event, childItem.index)\"\n                @keydown.down.prevent=\"onNext($event, childItem.index)\"\n                @keydown.home.prevent=\"onHomePressed\"\n                @keydown.end.prevent=\"onEndPressed\">\n                <o-icon\n                    v-if=\"childItem.icon\"\n                    :class=\"childItem.iconClasses\"\n                    :icon=\"childItem.icon\"\n                    :pack=\"childItem.iconPack\"\n                    :size=\"size\" />\n                <span :class=\"childItem.labelClasses\">\n                    {{ childItem.label }}\n                </span>\n            </o-slot-component>\n\n            <!--\n                @slot Additional slot after tabs\n            -->\n            <slot name=\"after\" />\n        </component>\n\n        <section :class=\"contentClasses\">\n            <!--\n                @slot Place tab items here\n            -->\n            <slot>\n                <o-tab-item\n                    v-for=\"option in normalizedOptions\"\n                    v-show=\"!option.hidden\"\n                    v-bind=\"option.attrs\"\n                    :key=\"option.key\"\n                    :value=\"option.value\"\n                    :label=\"option.label\" />\n            </slot>\n        </section>\n    </div>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Tabs from \"./Tabs.vue\";\nimport TabItem from \"./TabItem.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export tabs specific types */\nexport type * from \"./types\";\n\n/** export tabs plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Tabs);\n        registerComponent(app, TabItem);\n    },\n} as Plugin;\n\n/** export tabs components */\nexport { Tabs as OTabs, TabItem as OTabItem };\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nimport OIcon from \"../icon/Icon.vue\";\n\nimport { getDefault } from \"@/utils/config\";\n\nimport type { TagProps } from \"./props\";\nimport { defineClasses } from \"@/composables\";\n\n/**\n * Small tag labels to insert anywhere.\n * @displayName Tag\n * @style _tag.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OTag\",\n    configField: \"tag\",\n});\n\nconst props = withDefaults(defineProps<TagProps>(), {\n    override: undefined,\n    label: undefined,\n    variant: () => getDefault(\"tag.variant\"),\n    size: () => getDefault(\"tag.size\"),\n    rounded: () => getDefault(\"tag.rounded\", false),\n    closeable: false,\n    icon: undefined,\n    iconPack: () => getDefault(\"tag.iconPack\"),\n    closeIcon: () => getDefault(\"tag.closeIcon\", \"close\"),\n    closeIconPack: () => getDefault(\"tag.closeIconPack\"),\n    ariaCloseLabel: () => getDefault(\"tag.ariaCloseLabel\", \"Close\"),\n});\n\nconst emits = defineEmits<{\n    /**\n     * on close icon click event\n     * @param event {Event} native event\n     */\n    close: [event: Event];\n}>();\n\n/*\n * Emit close event when delete button is clicked\n * or delete key is pressed.\n */\nfunction close(event: Event): void {\n    emits(\"close\", event);\n}\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-tag\"],\n    [\n        \"variantClass\",\n        \"o-tag--\",\n        computed(() => props.variant),\n        computed(() => !!props.variant),\n    ],\n    [\n        \"sizeClass\",\n        \"o-tag--\",\n        computed(() => props.size),\n        computed(() => !!props.size),\n    ],\n    [\"roundedClass\", \"o-tag--rounded\", null, computed(() => !!props.rounded)],\n    [\"badgeClass\", \"o-tag--badge\", null, computed(() => !!props.badge)],\n);\n\nconst iconClasses = defineClasses([\"iconClass\", \"o-tag__icon\"]);\n\nconst labelClasses = defineClasses([\"labelClass\", \"o-tag__label\"]);\n\nconst closeClasses = defineClasses([\"closeClass\", \"o-tag__close\"]);\n</script>\n\n<template>\n    <span data-oruga=\"tag\" :class=\"rootClasses\">\n        <o-icon\n            v-if=\"icon\"\n            :class=\"iconClasses\"\n            :pack=\"iconPack\"\n            :icon=\"icon\"\n            :size=\"size\" />\n\n        <span v-if=\"$slots.default || label\" :class=\"labelClasses\">\n            <!--\n                @slot Override the tag label\n            -->\n            <slot>{{ label }}</slot>\n        </span>\n\n        <!--\n            @slot Override the close icon\n            @binding {close()} close - close function\n        -->\n        <slot name=\"close\" :close=\"close\">\n            <o-icon\n                v-if=\"closeable\"\n                :class=\"closeClasses\"\n                :pack=\"closeIconPack\"\n                :icon=\"closeIcon\"\n                :size=\"size\"\n                clickable\n                :aria-label=\"ariaCloseLabel\"\n                @click=\"close\" />\n        </slot>\n    </span>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Tag from \"./Tag.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export tag plugin */\nexport default {\n    install(Vue: App) {\n        registerComponent(Vue, Tag);\n    },\n} as Plugin;\n\n/** export tag components */\nexport { Tag as OTag };\n","<script setup lang=\"ts\" generic=\"T = string\">\nimport {\n    computed,\n    useAttrs,\n    useTemplateRef,\n    useId,\n    watchEffect,\n    ref,\n    type Component,\n} from \"vue\";\n\nimport OAutocomplete from \"../autocomplete/Autocomplete.vue\";\nimport OTag from \"../tag/Tag.vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport {\n    defineClasses,\n    getActiveClasses,\n    normalizeOptions,\n    findOption,\n    useInputHandler,\n    useSequentialId,\n    toOptionsGroup,\n    type OptionsGroupItem,\n} from \"@/composables\";\n\nimport type { TaginputProps } from \"./props\";\n\n/**\n * A simple tag input field that can have autocomplete functionality.\n * @displayName Taginput\n * @style _taginput.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OTaginput\",\n    configField: \"taginput\",\n    inheritAttrs: false,\n});\n\ntype ModelValue = TaginputProps<T>[\"modelValue\"];\n\nconst props = withDefaults(defineProps<TaginputProps<T>>(), {\n    override: undefined,\n    modelValue: undefined,\n    input: \"\",\n    options: undefined,\n    filter: undefined,\n    size: () => getDefault(\"taginput.size\"),\n    variant: () => getDefault(\"taginput.variant\"),\n    maxitems: undefined,\n    maxlength: undefined,\n    counter: () => getDefault(\"taginput.counter\", true),\n    openOnFocus: () => getDefault(\"taginput.openOnFocus\", true),\n    keepOpen: () => getDefault(\"taginput.keepOpen\", false),\n    placeholder: undefined,\n    expanded: false,\n    disabled: false,\n    keepFirst: () => getDefault(\"taginput.keepFirst\", false),\n    allowNew: () => getDefault(\"taginput.allowNew\", false),\n    allowDuplicates: () => getDefault(\"taginput.allowDuplicates\", false),\n    validateItem: () => true,\n    createItem: (item: T | string) => item as T,\n    checkScroll: () => getDefault(\"taginput.checkScroll\", false),\n    closeable: () => getDefault(\"taginput.closeable\", true),\n    iconPack: () => getDefault(\"taginput.iconPack\"),\n    icon: () => getDefault(\"taginput.icon\"),\n    closeIcon: () => getDefault(\"taginput.closeIcon\", \"close\"),\n    ariaCloseLabel: () => getDefault(\"taginput.ariaCloseLabel\", \"Remove\"),\n    autocomplete: () => getDefault(\"taginput.autocomplete\", \"off\"),\n    useHtml5Validation: () => getDefault(\"useHtml5Validation\", true),\n    customValidity: undefined,\n    teleport: () => getDefault(\"taginput.teleport\", false),\n    autocompleteClasses: () => getDefault(\"taginput.autocompleteClasses\", {}),\n});\n\nconst emits = defineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {string[] | number[] | object[]} updated modelValue prop\n     */\n    \"update:model-value\": [value: ModelValue[]];\n    /**\n     * input prop two-way binding\n     * @param value {string} updated input prop\n     */\n    \"update:input\": [value: string];\n    /**\n     * on input change event\n     * @param value {string} input value\n     * @param event {Event} native event\n     */\n    input: [value: string, event: Event];\n    /**\n     * new item got added\n     * @param value {string | number | object} added item\n     */\n    add: [value: T];\n    /**\n     * item got removed\n     * @param value {string | number | object} removed item\n     */\n    remove: [value: T];\n    /**\n     * on input focus event\n     * @param event {Event} native event\n     */\n    focus: [event: Event];\n    /**\n     * on input blur event\n     * @param event {Event} native event\n     */\n    blur: [event: Event];\n    /**\n     * on input invalid event\n     * @param event {Event} native event\n     */\n    invalid: [event: Event];\n    /**\n     * on icon click event\n     * @param event {Event} native event\n     */\n    \"icon-click\": [event: Event];\n    /**\n     * on icon right click event\n     * @param event {Event} native event\n     */\n    \"icon-right-click\": [event: Event];\n    /** the list inside the dropdown reached the start */\n    \"scroll-start\": [];\n    /** the list inside the dropdown reached it's end */\n    \"scroll-end\": [];\n}>();\n\n// define as Component to prevent docs memmory overload\nconst autocompleteRef = useTemplateRef<Component>(\"autocompleteComponent\");\n\n// use form input functionalities\nconst { checkHtml5Validity, setFocus, onFocus, onBlur, onInvalid } =\n    useInputHandler(autocompleteRef, emits, props);\n\nconst isDropdownActive = ref(false);\n\n// the selected items, use v-model to make it two-way binding\nconst selectedItems = defineModel<ModelValue>({ default: undefined });\n\n// the value of the inner input, use v-model:input to make it two-way binding\nconst inputValue = defineModel<string>(\"input\", { default: \"\" });\n\nconst inputLength = computed(() => inputValue.value.trim().length);\nconst itemsLength = computed(() => selectedItems.value?.length || 0);\n\n// create a unique id sequence\nconst { nextSequence } = useSequentialId();\n\n/** normalized programamtic options */\nconst groupedOptions = computed<OptionsGroupItem<T>[]>(() => {\n    const normalizedOptions = normalizeOptions<T>(props.options, nextSequence);\n    const groupedOptions = toOptionsGroup<T>(normalizedOptions, nextSequence());\n    return groupedOptions;\n});\n\n/** map the selected items into option items */\nconst selectedOptions = computed(() => {\n    if (!selectedItems.value) return [];\n    return selectedItems.value.map((value) => {\n        const option = findOption<T>(groupedOptions, value);\n        // return the found option or create a new option object\n        if (option) return option;\n        else return { label: String(value), value, key: useId() };\n    });\n});\n\n/** show the input field if a maxitems hasn't been set or reached */\nconst hasInput = computed(\n    () => props.maxitems == null || itemsLength.value < Number(props.maxitems),\n);\n\nwatchEffect(() => {\n    // blur if input is empty\n    if (!hasInput.value) onBlur(new Event(\"blur\"));\n});\n\nfunction addItem(item?: T | string): void {\n    item = item || inputValue.value.trim();\n\n    if (item) {\n        const itemToAdd = props.createItem(item);\n\n        if (!selectedItems.value?.length) {\n            // Add the item input if not items are set yet\n            if (props.validateItem(item)) {\n                selectedItems.value = [itemToAdd];\n                emits(\"add\", itemToAdd);\n            }\n        } else {\n            // Add the item input if it is not blank\n            // or previously added (if not allowDuplicates).\n            const add = !props.allowDuplicates\n                ? !selectedItems.value.includes(itemToAdd)\n                : true;\n\n            if (add && props.validateItem(item)) {\n                selectedItems.value = [...selectedItems.value, itemToAdd];\n                emits(\"add\", itemToAdd);\n            }\n        }\n    }\n\n    // after autocomplete events\n    requestAnimationFrame(() => {\n        inputValue.value = \"\";\n        emits(\"input\", \"\", new Event(\"input\"));\n    });\n}\n\nfunction removeItem(index: number, event?: Event): void {\n    if (!selectedItems.value?.length) return;\n    const item = selectedItems.value.at(index);\n    if (!item) return;\n    selectedItems.value = selectedItems.value.toSpliced(index, 1);\n    emits(\"remove\", item);\n    if (event) event.stopPropagation();\n    if (props.openOnFocus && autocompleteRef.value) setFocus();\n}\n\n// --- Event Handler ---\n\nfunction onSelect(option: T | undefined): void {\n    if (!option) return;\n    addItem(option);\n}\n\nfunction onInput(value: string, event: Event): void {\n    emits(\"input\", value?.trim(), event);\n}\n\nfunction onBackspace(): void {\n    if (!inputValue.value?.length && itemsLength.value > 0)\n        // remove last item\n        removeItem(itemsLength.value - 1);\n}\n\nfunction onEnter(): void {\n    // Add item if not select only and dropdown selection is closed\n    if (props.allowNew && !isDropdownActive.value) addItem();\n}\n\n// --- Computed Component Classes ---\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-taginput\"],\n    [\n        \"sizeClass\",\n        \"o-taginput--\",\n        computed(() => props.size),\n        computed(() => !!props.size),\n    ],\n    [\n        \"variantClass\",\n        \"o-taginput--\",\n        computed(() => props.variant),\n        computed(() => !!props.variant),\n    ],\n    [\n        \"expandedClass\",\n        \"o-taginput--expanded\",\n        null,\n        computed(() => props.expanded),\n    ],\n    [\n        \"disabledClass\",\n        \"o-taginput--disabled\",\n        null,\n        computed(() => props.disabled),\n    ],\n);\n\nconst containerClasses = defineClasses([\n    \"containerClass\",\n    \"o-taginput__container\",\n]);\n\nconst itemClasses = defineClasses(\n    [\"itemClass\", \"o-taginput__item\"],\n    [\n        \"variantClass\",\n        \"o-taginput__item--\",\n        computed(() => props.variant),\n        computed(() => !!props.variant),\n    ],\n);\n\nconst counterClasses = defineClasses([\"counterClass\", \"o-taginput__counter\"]);\n\nconst autocompleteRootClasses = defineClasses([\n    \"autocompleteClasses.rootClass\",\n    \"o-taginput__autocomplete\",\n]);\n\nconst autocompleteInputClasses = defineClasses([\n    \"autocompleteClasses.inputClasses.inputClass\",\n    \"o-taginput__input\",\n]);\n\nconst attrs = useAttrs();\n\nconst autocompleteBind = computed(() => ({\n    ...attrs,\n    \"root-class\": getActiveClasses(autocompleteRootClasses),\n    \"input-classes\": {\n        \"input-class\": getActiveClasses(autocompleteInputClasses),\n    },\n    ...props.autocompleteClasses,\n}));\n\n// --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ checkHtml5Validity, focus: setFocus, value: selectedItems });\n</script>\n\n<template>\n    <div data-oruga=\"taginput\" :class=\"rootClasses\">\n        <div :class=\"containerClasses\" @focus=\"onFocus\" @blur=\"onBlur\">\n            <!--\n                @slot Override selected items\n                @binding {(string, object)[]} items - selected items\n                @binding {object[]} options - selected options\n                @binding {(index, event): void} removeItem - remove item function\n            -->\n            <slot\n                name=\"selected\"\n                :items=\"selectedItems\"\n                :options=\"selectedOptions\"\n                :remove-item=\"removeItem\">\n                <o-tag\n                    v-for=\"(option, index) in selectedOptions\"\n                    :key=\"option.key\"\n                    :label=\"option.label\"\n                    :class=\"itemClasses\"\n                    :closeable=\"closeable && !disabled\"\n                    :close-icon=\"closeIcon\"\n                    :close-icon-pack=\"iconPack\"\n                    :aria-close-label=\"ariaCloseLabel\"\n                    @close=\"removeItem(index, $event)\" />\n            </slot>\n\n            <o-autocomplete\n                v-show=\"hasInput\"\n                ref=\"autocompleteComponent\"\n                v-model:active=\"isDropdownActive\"\n                v-model:input=\"inputValue\"\n                v-bind=\"autocompleteBind\"\n                :options=\"options\"\n                :filter=\"filter\"\n                :placeholder=\"placeholder\"\n                :icon=\"icon\"\n                :icon-pack=\"iconPack\"\n                :maxlength=\"maxlength\"\n                :size=\"size\"\n                :disabled=\"disabled\"\n                :autocomplete=\"autocomplete\"\n                :open-on-focus=\"openOnFocus\"\n                :keep-first=\"keepFirst\"\n                :keep-open=\"keepOpen\"\n                :check-scroll=\"checkScroll\"\n                :teleport=\"teleport\"\n                :has-counter=\"false\"\n                :use-html5-validation=\"false\"\n                expanded\n                @input=\"onInput\"\n                @focus=\"onFocus\"\n                @blur=\"onBlur\"\n                @invalid=\"onInvalid\"\n                @keydown.enter=\"onEnter\"\n                @keydown.tab=\"onEnter\"\n                @keydown.backspace=\"onBackspace\"\n                @select=\"onSelect\"\n                @scroll-start=\"$emit('scroll-start')\"\n                @scroll-end=\"$emit('scroll-end')\"\n                @icon-click=\"$emit('icon-click', $event)\"\n                @icon-right-click=\"$emit('icon-right-click', $event)\">\n                <template v-if=\"$slots.header\" #header>\n                    <!--\n                        @slot Define an additional header\n                    -->\n                    <slot name=\"header\" />\n                </template>\n\n                <template\n                    v-if=\"$slots.default\"\n                    #default=\"{ option, index, value }\">\n                    <!--\n                        @slot Override the select option\n                        @binding {object} option - option object\n                        @binding {number} index - option index\n                        @binding {unknown} value - option value\n                    -->\n                    <slot :option=\"option\" :index=\"index\" :value=\"value\" />\n                </template>\n\n                <template v-if=\"$slots.empty\" #empty>\n                    <!--\n                        @slot Define content for empty state \n                    -->\n                    <slot name=\"empty\" />\n                </template>\n\n                <template v-if=\"$slots.footer\" #footer>\n                    <!--\n                        @slot Define an additional footer\n                    -->\n                    <slot name=\"footer\" />\n                </template>\n            </o-autocomplete>\n        </div>\n\n        <small\n            v-if=\"counter && (maxitems || maxlength)\"\n            :class=\"counterClasses\">\n            <template v-if=\"maxlength && inputLength > 0\">\n                <!--\n                    @slot Override the counter\n                    @binding {number} items - items count\n                    @binding {number} total - total count\n                -->\n                <slot name=\"counter\" :items=\"inputLength\" :total=\"maxlength\">\n                    {{ inputLength }} / {{ maxlength }}\n                </slot>\n            </template>\n\n            <template v-else-if=\"maxitems\">\n                <!--\n                    @slot Override the counter\n                    @binding {number} items - items count\n                    @binding {number} total - total count\n                -->\n                <slot name=\"counter\" :items=\"itemsLength\" :total=\"maxitems\">\n                    {{ itemsLength }} / {{ maxitems }}\n                </slot>\n            </template>\n        </small>\n    </div>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Taginput from \"./Taginput.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export taginput plugin */\nexport default {\n    install(Vue: App) {\n        registerComponent(Vue, Taginput);\n    },\n} as Plugin;\n\n/** export taginput components */\nexport { Taginput as OTaginput };\n","import type { App, Plugin } from \"vue\";\n\nimport Timepicker from \"./Timepicker.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export timepicker plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Timepicker);\n    },\n} as Plugin;\n\n/** export timepicker components */\nexport { Timepicker as OTimepicker };\n","import type { App, Plugin } from \"vue\";\n\nimport Tooltip from \"./Tooltip.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export tooltip plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Tooltip);\n    },\n} as Plugin;\n\n/** export tooltip components */\nexport { Tooltip as OTooltip };\n","<script\n    setup\n    lang=\"ts\"\n    generic=\"\n        T extends object | typeof File,\n        IsMultiple extends boolean = false\n    \">\nimport { computed, ref, useAttrs, useTemplateRef, watch } from \"vue\";\n\nimport { getDefault } from \"@/utils/config\";\nimport { File } from \"@/utils/ssr\";\nimport { isTrueish } from \"@/utils/helpers\";\nimport { defineClasses, useInputHandler } from \"@/composables\";\n\nimport { injectField } from \"../field/fieldInjection\";\n\nimport type { UploadProps } from \"./props\";\n\n/**\n * Upload one or more files.\n * @displayName Upload\n * @style _upload.scss\n */\ndefineOptions({\n    isOruga: true,\n    name: \"OUpload\",\n    configField: \"upload\",\n    inheritAttrs: false,\n});\n\ntype ModelValue = UploadProps<T, IsMultiple>[\"modelValue\"];\n\nconst props = withDefaults(defineProps<UploadProps<T, IsMultiple>>(), {\n    override: undefined,\n    modelValue: undefined,\n    // multiple: false,\n    variant: () => getDefault(\"upload.variant\"),\n    disabled: false,\n    accept: undefined,\n    dragDrop: false,\n    expanded: () => getDefault(\"upload.expanded\", false),\n    native: true,\n    useHtml5Validation: () => getDefault(\"useHtml5Validation\", true),\n    customValidity: \"\",\n});\n\nconst emits = defineEmits<{\n    /**\n     * modelValue prop two-way binding\n     * @param value {object | object[] | File | File[]} updated modelValue prop\n     */\n    \"update:model-value\": [value: ModelValue];\n    /**\n     * on input focus event\n     * @param event {Event} native event\n     */\n    focus: [event: Event];\n    /**\n     * on input blur event\n     * @param event {Event} native event\n     */\n    blur: [event: Event];\n    /**\n     * on input invalid event\n     * @param event {Event} native event\n     */\n    invalid: [event: Event];\n}>();\n\nconst inputRef = useTemplateRef(\"inputElement\");\n\n// use form input functionality\nconst { checkHtml5Validity, onFocus, onBlur, onInvalid, isValid, setFocus } =\n    useInputHandler(inputRef, emits, props);\n\n// inject parent field component if used inside one\nconst { parentField } = injectField();\n\nconst vmodel = defineModel<ModelValue>({ default: undefined });\n\nconst dragDropFocus = ref(false);\n\n/**\n * When v-model is changed:\n * 1. Reset interna input file value\n * 2. If it's invalid, validate again.\n */\nwatch(vmodel, (value) => {\n    if (!value || (Array.isArray(value) && value.length === 0))\n        if (inputRef.value) inputRef.value.value = \"\";\n    if (!isValid.value && !props.dragDrop) checkHtml5Validity();\n});\n\n/**\n * Listen change event on input type 'file',\n * emit 'input' event and validate\n */\nfunction onFileChange(event: Event | DragEvent): void {\n    if (props.disabled) return;\n    if (props.dragDrop) updateDragDropFocus(false);\n    const value =\n        (event.target as HTMLInputElement).files ||\n        (event as DragEvent).dataTransfer?.files ||\n        [];\n    // no file selected\n    if (value.length === 0) {\n        if (!vmodel.value) return;\n        if (props.native) vmodel.value = undefined;\n    }\n\n    // multiple upload\n    if (isTrueish(props.multiple)) {\n        // always new values if native or undefined local\n        const values =\n            props.native || !vmodel.value || !Array.isArray(vmodel.value)\n                ? []\n                : [...vmodel.value];\n\n        for (let i = 0; i < value.length; i++) {\n            const file = value[i];\n            // add file when type is valid\n            if (checkType(file)) values.push(file);\n        }\n        vmodel.value = values as ModelValue;\n    }\n    // single uplaod\n    else {\n        // only one element in case drag drop mode and isn't multiple\n        if (props.dragDrop && value.length !== 1) return;\n        else {\n            const file = value[0];\n            // add file when type is valid\n            if (checkType(file)) vmodel.value = file as ModelValue;\n            // else clear input\n            else if (vmodel.value) {\n                vmodel.value = undefined;\n                clearInput();\n            } else {\n                // Force input back to empty state and recheck validity\n                clearInput();\n                checkHtml5Validity();\n                return;\n            }\n        }\n    }\n\n    if (!props.dragDrop) checkHtml5Validity();\n}\n\n/** Reset file input value */\nfunction clearInput(): void {\n    if (inputRef.value) inputRef.value.value = \"\";\n}\n\n/** Listen drag-drop to update internal variable */\nfunction updateDragDropFocus(focus: boolean): void {\n    if (!props.disabled) dragDropFocus.value = focus;\n}\n\n/** Check mime type of file s*/\nfunction checkType(file: File): boolean {\n    if (!props.accept) return true;\n    const types = props.accept.split(\",\");\n    if (types.length === 0) return true;\n    for (let i = 0; i < types.length; i++) {\n        const type = types[i].trim();\n        if (type) {\n            if (type.substring(0, 1) === \".\") {\n                const extension = file.name.toLowerCase().slice(-type.length);\n                if (extension === type.toLowerCase()) return true;\n            } else {\n                // check mime type\n                if (file.type.match(type)) return true;\n            }\n        }\n    }\n    return false;\n}\n\nfunction onClick(event: Event): void {\n    if (props.disabled) return;\n\n    // click input if not drag and drop is used\n    if (!props.dragDrop) {\n        event.preventDefault();\n        if (inputRef.value) inputRef.value.click();\n    }\n}\n\n// --- Computed Component Classes ---\n\nconst attrs = useAttrs();\n\nconst inputBind = computed(() => ({\n    ...parentField?.value?.inputAttrs,\n    ...attrs,\n}));\n\nconst rootClasses = defineClasses(\n    [\"rootClass\", \"o-upload\"],\n    [\n        \"expandedClass\",\n        \"o-upload--expanded\",\n        null,\n        computed(() => props.expanded),\n    ],\n    [\n        \"disabledClass\",\n        \"o-upload--disabled\",\n        null,\n        computed(() => props.disabled),\n    ],\n);\n\nconst draggableClasses = defineClasses(\n    [\"draggableClass\", \"o-upload__draggable\"],\n    [\n        \"hoveredClass\",\n        \"o-upload__draggable--hovered\",\n        null,\n        computed(() => !props.variant && dragDropFocus.value),\n    ],\n    [\n        \"variantClass\",\n        \"o-upload__draggable--hovered-\",\n        computed(() => props.variant),\n        computed(() => !!props.variant && dragDropFocus.value),\n    ],\n);\n\n// --- Expose Public Functionalities ---\n\n/** expose functionalities for programmatic usage */\ndefineExpose({ checkHtml5Validity, focus: setFocus, value: vmodel });\n</script>\n\n<template>\n    <label data-oruga=\"upload\" :class=\"rootClasses\">\n        <template v-if=\"!dragDrop\">\n            <!--\n                @slot Default content\n                @binding {(event: Event): void} onclick - click handler, only needed if a button is used\n            -->\n            <slot :onclick=\"onClick\" />\n        </template>\n\n        <div\n            v-else\n            :class=\"draggableClasses\"\n            role=\"button\"\n            tabindex=\"0\"\n            @mouseenter=\"updateDragDropFocus(true)\"\n            @mouseleave=\"updateDragDropFocus(false)\"\n            @dragover.prevent=\"updateDragDropFocus(true)\"\n            @dragleave.prevent=\"updateDragDropFocus(false)\"\n            @dragenter.prevent=\"updateDragDropFocus(true)\"\n            @drop.prevent=\"onFileChange\">\n            <!--\n                @slot Default content\n                @binding {(event: Event): void} onclick - click handler, only needed if a button is used\n            -->\n            <slot :onclick=\"onClick\" />\n        </div>\n\n        <input\n            v-bind=\"inputBind\"\n            ref=\"inputElement\"\n            type=\"file\"\n            data-oruga-input=\"file\"\n            :multiple=\"props.multiple\"\n            :accept=\"accept\"\n            :disabled=\"disabled\"\n            @change=\"onFileChange\"\n            @focus=\"onFocus\"\n            @blur=\"onBlur\"\n            @invalid=\"onInvalid\" />\n    </label>\n</template>\n","import type { App, Plugin } from \"vue\";\n\nimport Upload from \"./Upload.vue\";\n\nimport { registerComponent } from \"@/utils/plugins\";\n\n/** export upload plugin */\nexport default {\n    install(app: App) {\n        registerComponent(app, Upload);\n    },\n} as Plugin;\n\n/** export upload components */\nexport { Upload as OUpload };\n","import type { App, Plugin } from \"vue\";\nimport type { OrugaOptions } from \"./types\";\n\nimport * as plugins from \"./components/plugins\";\n\nimport { ConfigProgrammatic, OrugaConfig } from \"./utils/config\";\nimport { registerPlugin, registerComponentProgrammatic } from \"./utils/plugins\";\n\n// export all types\nexport * from \"./types\";\nexport * from \"./components/types\";\n\n// export all helper functions\nexport * from \"./utils/helpers\";\n\n// export all vue components\nexport * from \"./components\";\n// export all components as vue plugin\nexport * from \"./components/plugins\";\n\n// export programmatic config\nexport { OrugaConfig, ConfigProgrammatic };\n\n// export programmatic composable\nexport { useOruga, type OrugaProgrammatic } from \"./utils/programmatic\";\n\n// main oruga vue plugin\nconst plugin: Plugin = {\n    install(app: App, options: OrugaOptions = {}) {\n        // initialise config with options\n        app.use(OrugaConfig, options);\n\n        // add all components\n        for (const componentKey in plugins) {\n            registerPlugin(app, plugins[componentKey]);\n        }\n\n        // add programmatic config component\n        registerComponentProgrammatic(app, \"config\", ConfigProgrammatic);\n    },\n};\n\n// export default oruga vue plugin\nexport { plugin as Oruga };\nexport default plugin;\n"],"names":["signPoly","value","sign","mod","n","pad","bound","val","min","max","isObject","isDate","isDefined","isTrueish","blankIfUndefined","defaultIfUndefined","defaultValue","toCssDimension","width","dimension","sortBy","array","key","fn","isAsc","mutate","a","newA","getValueByPath","newB","isEqual","valueA","valueB","keys1","keys2","val1","val2","areObjects","index","isElement","el","merge","target","source","deep","mergeDeep","targetValue","sourceValue","getPropertyValue","obj","field","formatter","property","label","path","o","i","setValueByPath","p","removeElement","escapeRegExpChars","removeDiacriticsFromString","isVNodeEmpty","vnode","Comment","Text","Fragment","isMobileAgent","oruga","ref","addProgrammatic","component","useOruga","VueInstance","setVueInstance","Vue","registerPlugin","app","plugin","registerComponent","registerComponentProgrammatic","isClient","isSSR","globalOptions","setOptions","options","getOptions","toRaw","getOption","getDefault","setOption","ConfigProgrammatic","OrugaConfig","mdiIcons","faIcons","faIconPrefix","getIcons","icons","customIconPacks","unrefElement","elRef","plain","toValue","resolveElement","targetQuery","getActiveClasses","classes","values","bind","v","defineClasses","args","classDefinitions","vm","getCurrentInstance","getCurrentScope","scope","effectScope","onScopeDispose","defintion","className","defaultClass","suffix","apply","getClassBind","computedClass","computeClass","applied","watch","_a","classBind","isRef","oldValue","props","getProps","componentKey","config","globalClass","localClass","suffixProcessor","globalOverride","localOverride","appliedClasses","globalTransformClasses","localTransformClasses","input","cls","b","useEventListener","element","event","handler","cleanup","register","optionsClone","stopWatch","onMounted","stop","useMatchMedia","mobileBreakpoint","isMobile","mediaQuery","defaultWidth","onMatchMedia","$FieldKey","provideField","data","provide","injectField","parentField","inject","computed","statusMessage","_b","_c","_d","statusVariant","statusVariantIconConfig","statusVariantIcon","validatableFormElementTypes","asValidatableFormElement","t","constraintValidationAttributes","useInputHandler","inputRef","emits","maybeElement","inputs","isFocused","setFocus","nextTick","doClick","onBlur","checkHtml5Validity","onFocus","isValid","setFieldValidity","variant","message","setInvalid","onInvalid","validatable","isFirstInvalid","formElements","fieldElement","invalidHandler","canScrollToField","forceValidationUpdate","watchEffect","validity","newItems","oldItems","newElement","newUseValidation","oldElement","oldUseValidation","onAttributeChange","triggerRef","validationAttributeObserver","newData","oldData","valid","useValidation","functionalValidation","oldEl","needWatcher","ancestor","useDebounce","func","wait","immediate","timeout","later","useSequentialId","start","sequence","nextSequence","useProviderParent","configField","childItems","sortHandler","items","parent","ids","item","children","sortedIds","registerItem","identifier","unregisterItem","useProviderChild","onUnmounted","useClickOutside","elements","listenerOptions","ignores","shouldIgnore","listener","getScrollingParent","isScrollingParent","nextParent","overflow","overflowY","scrollHeight","clientHeight","normalizeOptions","uuid","option","isGroupOption","toOptionsGroup","toOptionsList","list","group","filterOptionsItems","filter","idx","checkOptionsEmpty","isOptionViable","findOption","found","usePreventScrolling","clipScroll","scrollClipClasses","scrollKeepClasses","scrollClass","savedScrollTop","onBeforeUnmount","toggleScroll","active","useTeleportDefault","findFocusable","useTrapFocus","onKeyDown","applyHandler","focusable","firstFocusable","lastFocusable","__props","__emit","environment","rootStyle","style","iconConfig","iconPrefix","customSizeByPack","computedSize","computedIcon","getEquivalentIconOf","onClick","rootClasses","useTemplateRef","vmodel","_useModel","valueLength","resize","height","computedStyles","debouncedInput","debounce","onInput","placeholderVisible","hasIconRight","computedIconRight","passwordVisibleIcon","computedIconRightVariant","iconClick","rightIconClick","togglePasswordVisibility","isPasswordVisible","inputType","attrs","useAttrs","inputBind","inputClasses","iconLeftClasses","iconRightClasses","counterClasses","__expose","itemValue","useId","rootRef","providedData","selectItem","isClickable","isSelected","selected","focusItem","opposites","_teleport","contentRef","setContent","updatePositioning","addHandler","initialPosition","scrollingParent","resizeObserver","removeHandler","position","getAutoPosition","content","trigger","rect","top","left","bestPosition","viewRect","contentRect","triggerRect","triggerAnchors","anchors","contentAnchors","contentRectAtAnchor","pos","triggerAnchor","contentAnchor","defaultOpposite","crossPosition","crossOpposite","positions","maxOverlap","overlap","intersectionArea","right","bottom","maintainScrollVisibility","activeElement","scrollParent","offsetHeight","offsetTop","parentOffsetHeight","scrollTop","isAbove","isBelow","useInfiniteScroll","elementRef","onEnd","onStart","checkScroll","trashhold","menuRef","provideData","focusedItem","groupedOptions","normalizedOptions","isNotEmpty","isItemViable","isActive","labelId","autoPosition","isMobileNative","isModal","menuStyle","hoverable","onClickedOutside","onPageScroll","moveFocus","close","onTriggerClick","toggle","onTriggerContextMenu","open","onTriggerFocus","onTriggerHover","onTriggerHoverLeave","method","timer","delta","getFirstViableItem","dropdownMenu","onUpPressed","onDownPressed","onEnter","onHomePressed","onEndPressed","onEscape","startingIndex","newIndex","triggerClasses","teleportClasses","overlayClasses","menuClasses","slots","useSlots","selectedValue","inputValue","menuId","filterItems","isEmpty","empty","dropdownValue","currentOption","setSelected","handleFocus","handleBlur","computedIconRightClickable","itemClasses","itemEmptyClasses","itemGroupClasses","itemHeaderClasses","itemFooterClasses","index$v","Autocomplete","customStyle","listClasses","linkClasses","index$u","Breadcrumb","BreadcrumbItem","computedTag","computedNativeType","wrapperClasses","labelClasses","iconClasses","index$t","Button","activeIndex","total","itemWidth","onDragStart","switchTo","indicatorItems","settings","onRefresh","windowWidth","hasReducedMotion","startTimer","onDragEnd","pauseTimer","breakpoint","readonly","hasArrows","isHovered","hasPrev","onPrev","hasNext","onNext","onChange","isAutoplayPaused","onMouseEnter","onMouseLeave","status","onToggleAutoplay","dragX","isDragging","translation","onDragOver","dragEndX","signCheck","results","itemsClasses","prevIconClasses","nextIconClasses","autoplayIconClasses","indicatorsClasses","indicatorClasses","indicatorItemClasses","indicatorItemActiveClasses","indicatorItemAppliedClasses","activeClasses","itemStyle","index$s","Carousel","CarouselItem","isChecked","index$r","Checkbox","isOpen","contentClasses","index$q","Collapse","selectRef","rightIcon","rightIconVariant","emit","leftIconClick","selectClasses","dropdownRef","nativeInputRef","initialNativeType","setValue","date","checkMinMaxDate","onActiveChange","triggers","onKeyPress","togglePicker","onInputClick","onNativeClick","onNativeFocus","onNativeBlur","onNativeChange","dropdownBind","getMonthNames","locale","format","dates","dtf","d","getWeekdayNames","firstDayOfWeek","j","matchWithGroups","pattern","str","matches","groupMatches","match","acc","curr","weekBuilder","startingDate","month","year","thisMonth","thisWeek","dayOfWeek","end","daysAgo","daysForward","firstWeekOffset","dow","doy","fwd","daysInYear","weeksInYear","weekOffset","weekOffsetNext","useDatepickerMixins","isDateSelectable","enabledDate","disabledDate","isTypeMonth","localeOptions","dtfMonth","sampleTime","dateCreator","dateFormatter","targetDates","dateParser","isArray","formatRegex","part","dateGroups","s","hasEvents","dayRefs","setDayRef","refKey","day","clickWeekNumber","week","getDayOfYear","getWeekNumber","mom","resWeek","resYear","eventsDateMatch","onKeydown","weekDay","preventDefault","selectDate","changeFocus","inc","nextDay","setRangeHoverEndDate","dateMatch","dateOne","dateTwo","multiple","dateWithin","cellClasses","tableCellClasses","cellEventsClass","eventClasses","tableRowClasses","tableEventsClasses","focusedDateModel","selectedBeginDate","selectedEndDate","hoveredEndDate","visibleDayNames","currentDayName","eventsInThisMonth","weeksInThisMonth","validateFocusedDay","startingDay","newWeek","eventsInThisWeek","stripped","timed","weekDate","hoveredDateRange","currentDate","monthDays","onSelectedDate","handleSelectMultipleDates","handleSelectRangeDate","multipleSelectedDates","selectedDate","onRangeHoverEndDate","onChangeFocus","tableClasses","tableHeadClasses","tableHeadCellClasses","tableBodyClasses","monthRefs","setMonthRef","eventsInThisYear","monthDates","months","focused","dateMultipleSelected","monthClasses","monthTableClasses","monthCellClasses","monthEventsClasses","pickerRef","focusedDateData","_initialDate","computedMonthNames","listOfMonths","minMonth","maxMonth","name","computedDayNames","listOfYears","latestYear","earliestYear","showPrev","dateToCheck","prev","showNext","next","isNative","formatNative","parse","parseNative","prevDate","nextDate","boxClasses","boxClassBind","headerClasses","prevButtonClasses","nextButtonClasses","listsClasses","footerClasses","pickerDropdownClasses","index$p","Datepicker","AM","PM","HOUR_FORMAT_24","HOUR_FORMAT_12","useTimepickerMixins","isHourFormat24","timeCreator","amString","dayPeriod","pmString","meridiens","hourLiteral","parts","literal","minuteLiteral","secondLiteral","timeFormatter","time","timeParser","timeGroups","am","dateString12","timeSplit","hours","minutes","seconds","hoursSelected","minutesSelected","secondsSelected","meridienSelected","updateValue","step","formatNumber","prependZero","numberOfHours","isHourDisabled","hour","disabled","minHours","noMinutesAvailable","minute","isMinuteDisabledForHour","maxHours","minMinutes","maxMinutes","isMinuteDisabled","isSecondDisabled","second","minSeconds","maxSeconds","isMeridienDisabled","meridienString","offset","updateDateSelected","onMeridienChange","onHoursChange","onMinutesChange","onSecondsChange","separatorClasses","selectSelectClasses","selectPlaceholderClasses","selectBind","useDateimepickerMixins","datetimeCreator","datetimeFormatter","datetimeParser","dayPeriods","datetimeGroups","datepickerRef","timepickerProps","datepickerProps","updateVModel","minDate","maxDate","minTime","maxTime","datepickerSize","timepickerSize","timepickerDisabled","onChangeNativePicker","datepickerWrapperClasses","timepickerWrapperClasses","index$o","Datetimepicker","index$n","Dropdown","DropdownItem","inputId","fieldVariant","fieldMessage","isFilled","hasInnerField","hasLabel","hasMessage","hasBody","hasAddons","getInnerContent","slot","addInnerField","setFilled","setVariant","setMessage","setInputId","inputAttrs","horizontalLabelClasses","horizontalBodyClasses","bodyClasses","innerBodyClasses","messageClasses","index$m","Field","index$l","Icon","index$k","Input","isFullPage","cancel","InstanceRegistry","__publicField","entry","callback","e","ProgrammaticComponent","defineComponent","expose","resolve","promise","p1","createVNode","registry","ComponentProgrammatic","container","onDestroy","createApp","index$j","LoadingProgrammatic","_options","componentProps","Loading","index$i","PlainButton","isExpanded","setExpand","triggerReset","menuItem","hasChildren","reset","childs","state","buttonClasses","submenuClasses","resetMenu","excludedItems","selectedItem","onCollapse","onExpend","onFocusLeave","index$h","Menu","MenuItem","vTrapFocus","showX","isAnimating","onEscapePress","afterEnter","beforeLeave","closeClasses","ModalProgrammatic","Modal","index$g","notificationRef","parentTop","parentBottom","onBeforeMount","noticeClasses","positionBottomClasses","positionTopClasses","topClasses","bottomClasses","noticeContainerClasses","c","showNotice","setAutoClose","correctParent","shouldQueue","isAlert","isPaused","onMouseOver","NotificationProgrammatic","NotificationNotice","index$f","Notification","currentPage","pageCount","firstItem","perPage","isFirst","hasFirst","hasFirstEllipsis","isLast","hasLast","hasLastEllipsis","pagesInRange","pages","getPage","num","ariaLabel","changePage","getAriaPageLabel","pageNumber","isCurrent","first","last","page","infoClasses","ellipsisClasses","listItemClasses","buttonCurrentClasses","buttonPrevClasses","buttonNextClasses","index$e","Pagination","index$d","Radio","index$c","Select","index$b","Skeleton","transitionName","vertical","hideOnMobile","clickedOutside","SidebarProgrammatic","Sidebar","index$a","tooltipId","cancelOptions","onContextMenu","onHover","onClose","arrowClasses","dragging","startX","startPosition","newPosition","tooltip","tooltipAlways","indicator","precision","precisions","decimal","computedTooltipVariant","currentPosition","wrapperStyle","formattedValue","onButtonDown","onDragging","onLeftKeyDown","setPosition","onRightKeyDown","onHomeKeyDown","onEndKeyDown","diff","percent","stepLength","hidden","tickStyle","tickLabelClasses","sliderRef","thumbStartRef","thumbEndRef","valueStart","valueEnd","isThumbReversed","isTrackClickDisabled","minValue","maxValue","isRange","setValues","newValue","smallValue","largeValue","tickValues","result","barSize","barStart","barStyle","getSliderSize","onSliderClick","sliderOffsetLeft","diffFirst","diffSecond","trackClasses","fillClasses","thumbWrapperClasses","thumbClasses","index$9","Slider","SliderTick","stepClasses","stepIconClasses","stepLabelClasses","isTransitioning","activate","deactivate","nextAnimation","prevAnimation","oldIndex","panelClasses","activeItem","column","performAction","activateItem","fowardIndex","itemClick","getFirstViableIndex","viableIndex","forward","direction","oldItem","newItem","tablistClasses","dividerClasses","markerClasses","navigationClasses","index$8","Steps","StepItem","index$7","Switch","OSlotComponent","_props","mobileSort","showPlaceholder","sortableColumns","isCurrentSort","sort","isHeaderUnselectable","thClasses","tdClasses","pageChanged","newPage","isMobileActive","slotsRef","isColumnSorted","tableColumns","columnItem","thAttrsData","tdAttrsData","tdAttrs","columnCount","showDetailRowIcon","ariaColIndexStart","hasSubheadings","isScrollable","tableCurrentPage","filterTableRows","tableRows","availableRows","pageStart","pageEnd","row","isRowFiltered","tableTotal","rowCount","ariaRowIndexStart","hasSearchableColumns","hasCustomFooterSlot","footer","tag","getColumnValue","isRowEqual","sourceRow","targetRow","el1","el2","tableSelectedRow","onArrowPressed","selectRow","filters","debouncedFilter","handleFiltersChange","onFiltersEvent","re","currentSortColumn","hasSortableColumns","initSort","sortField","sortDirection","sortByField","sortColumn","updateDirection","sortByColumn","rows","asc","tableCheckedRows","isAllChecked","validVisibleData","currentVisibleRow","isAllUncheckable","r","addCheckedRow","removeCheckedRow","checkAll","checkRow","visibleDetailedRows","toggleDetails","isDetailRowVisible","closeDetailRow","openDetailRow","isDraggingRow","isDraggingColumn","canDragRow","canDragColumn","handleDragStart","handleDragEnd","handleDrop","handleDragOver","handleDragLeave","handleColumnDragStart","handleColumnDragEnd","handleColumnDrop","handleColumnDragOver","handleColumnDragLeave","tableWrapperClasses","tableWrapperStyle","thBaseClasses","thCheckboxClasses","thDetailedClasses","thSubheadingClasses","thSortIconClasses","trSelectedClasses","trCheckedClasses","trEmptyClasses","trDetailedClasses","tdBaseClasses","tdCheckboxClasses","tdDetailedChevronClasses","mobileSortClasses","paginationWrapperClasses","paginationWrapperRootClasses","rowClasses","selectedClasses","checkedClasses","rowClass","index$6","Table","TableColumn","tabClasses","tabIconClasses","tabLabelClasses","index$5","Tabs","TabItem","index$4","Tag","autocompleteRef","isDropdownActive","selectedItems","inputLength","itemsLength","selectedOptions","hasInput","addItem","itemToAdd","removeItem","onSelect","onBackspace","containerClasses","autocompleteRootClasses","autocompleteInputClasses","autocompleteBind","index$3","Taginput","index$2","Timepicker","index$1","Tooltip","dragDropFocus","onFileChange","updateDragDropFocus","file","checkType","clearInput","focus","types","type","draggableClasses","Upload","plugins"],"mappings":"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"}