{"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/useOptions.ts","../src/composables/usePreventScrolling.ts","../src/composables/useScrollHelper.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/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            if (!isEqual(val1, val2)) 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) => isEqual(val, valueB[index])))\n            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    // eslint-disable-next-line no-useless-escape\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 { isClient } from \"@/utils/ssr\";\nimport { useEventListener } from \"./useEventListener\";\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 { getOption } from \"@/utils/config\";\nimport { isSSR } from \"@/utils/ssr\";\nimport { isDefined } from \"@/utils/helpers\";\nimport { unrefElement } from \"./unrefElement\";\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 call to limit the rate at which it will be invoked.\n * @param func function to debounce\n * @param wait debounce time to wait\n * @param immediate call immediate once\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            if (!ids) return;\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 { 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\";\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 { getCurrentScope, type MaybeRefOrGetter } from \"vue\";\nimport { isDefined } from \"@/utils/helpers\";\nimport { isClient } from \"@/utils/ssr\";\nimport { unrefElement } from \"./unrefElement\";\nimport { useDebounce } from \"./useDebounce\";\nimport { useEventListener, type EventTarget } from \"./useEventListener\";\n\n/** Call a function when the scoll reaches the end or the start of an element.\n * This is useful for infinite scroll lists.\n * @param element - The element to listen for scroll events.\n * @param options - Options for the infinite scroll.\n * @param options.onScroll - Function to call on every scroll event.\n * @param options.onEnd - Function to call when the scroll reaches the end.\n * @param options.onStart - Function to call when the scroll reaches the start.\n * @param options.debounce - Debounce time in milliseconds for the function call on scroll events.\n * @returns A function to call to to manually check the scroll position.\n */\nexport function useScrollEvents(\n    element: MaybeRefOrGetter<EventTarget>,\n    options: {\n        onScroll?: () => void;\n        onScrollEnd?: () => void;\n        onScrollStart?: () => void;\n        debounce?: number;\n    },\n): () => void {\n    if (!getCurrentScope())\n        throw new Error(\n            \"The 'useScrollEvents' composable should be used inside a current EffectScope.\",\n        );\n\n    const debouncedCheckScroll = useDebounce(\n        checkScroll,\n        options.debounce ?? 100,\n    );\n    if (isClient)\n        useEventListener(element, \"scroll\", debouncedCheckScroll, {\n            passive: true,\n        });\n\n    /** Check if the scroll list inside the dropdown reached the top or it's end. */\n    function checkScroll(): void {\n        const el = unrefElement(element);\n        if (!el) return;\n        if (options.onScroll) options.onScroll();\n\n        const trashhold = el.offsetTop;\n        if (el.clientHeight !== el.scrollHeight) {\n            if (\n                Math.ceil(el.scrollTop + el.clientHeight + trashhold) >=\n                el.scrollHeight\n            ) {\n                if (options.onScrollEnd) options.onScrollEnd();\n            } else if (el.scrollTop <= trashhold) {\n                if (options.onScrollStart) options.onScrollStart();\n            }\n        }\n    }\n\n    return debouncedCheckScroll;\n}\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\n/**\n * Check if an element is visible in the browser viewport.\n * @deprecated currently unused - can be deleted\n */\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/**\n * Check if an element is currently scrollable by comparing its clientHeight and scrollHeight.\n * @deprecated currently unused - can be deleted\n */\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 to the child's position.\n */\nexport function scrollElementInView(\n    scrollableParent: MaybeRefOrGetter<HTMLElement>,\n    childElement: MaybeRefOrGetter<HTMLElement>,\n): void {\n    const parent = unrefElement(scrollableParent);\n    const element = unrefElement(childElement);\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 { toValue } from \"vue\";\nimport { getOption } from \"@/utils/config\";\n\n/** Get the root config `teleportTarget`. */\nexport function getTeleportDefault(): HTMLElement | string {\n    const option = getOption(\"teleportTarget\", \"body\");\n    return toValue<HTMLElement | string>(option);\n}\n","import {\n    toValue,\n    type DirectiveHook,\n    type MaybeRefOrGetter,\n    type ObjectDirective,\n} from \"vue\";\n\n/**\n * Returns all focusable elements inside the given element\n */\nexport function findFocusable(\n    element: MaybeRefOrGetter<HTMLElement>,\n): NodeListOf<HTMLElement> {\n    return toValue(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\n/**\n * Creates a vue v-trap-focus directive which sets the focus on the given element when mounted\n * and traps the focus inside the element.\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        tabindex=\"-1\"\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    getTeleportDefault,\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: getTeleportDefault(), 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","<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    useScrollEvents,\n    scrollElementInView,\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\";\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    useScrollEvents(menuRef, {\n        onScrollEnd: () => emits(\"scroll-end\"),\n        onScrollStart: () => 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    scrollElementInView(dropdownMenu, element);\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=\"\n                        !selectable && !inline\n                            ? disabled || !isActive\n                            : undefined\n                    \"\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 } =\n    useInputHandler(inputRef, emits, props);\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 } =\n    useInputHandler(elementRef, emits, props);\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 { getTeleportDefault, 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(getTeleportDefault());\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    getTeleportDefault,\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: getTeleportDefault(), 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 NotificationNotice from \"./NotificationNotice.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 {\n    Notification as ONotification,\n    NotificationNotice as ONotificationNotice,\n    NotificationProgrammatic,\n};\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    current: 1,\n    total: undefined,\n    perPage: () => getDefault(\"pagination.perPage\", 20),\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: [value: number];\n    /**\n     * on next button event click\n     * @param event {Event} native click event\n     * @param value {number} new current value\n     */\n    next: [event: Event, value: number];\n    /**\n     * on previous button event\n     * @param event {Event} native click event\n     * @param value {number} new current value\n     */\n    previous: [event: Event, value: 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 (currentPage.value > 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 = currentPage.value * perPage - perPage + 1;\n    return firstItem >= 0 ? firstItem : 0;\n});\n\n/** Check if this is the first page. */\nconst isFirst = computed(() => currentPage.value <= 1);\n\n/** Check if first page button should be visible. */\nconst hasFirst = computed(() => currentPage.value >= props.rangeBefore + 2);\n\n/** Check if first ellipsis should be visible. */\nconst hasFirstEllipsis = computed(\n    () => currentPage.value >= props.rangeBefore + 4,\n);\n\n/** Check if this is the last page. */\nconst isLast = computed(() => currentPage.value >= pageCount.value);\n\n/** Check if last page button should be visible. */\nconst hasLast = computed(\n    () => currentPage.value <= pageCount.value - (1 + props.rangeAfter),\n);\n\n/** Check if last ellipsis should be visible. */\nconst hasLastEllipsis = computed(\n    () => currentPage.value < 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, currentPage.value - 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(currentPage.value + 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\nconst previousButtonBind = computed(() =>\n    getPage(currentPage.value - 1, props.ariaPreviousLabel, (e, v) =>\n        emits(\"previous\", e, v),\n    ),\n);\n\nconst nextButtonBind = computed(() =>\n    getPage(currentPage.value + 1, props.ariaNextLabel, (e, v) =>\n        emits(\"next\", e, v),\n    ),\n);\n\n/** Get properties for a page */\nfunction getPage(\n    num: number,\n    ariaLabel?: string,\n    onClick?: (event: Event, value: number) => void,\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: currentPage.value === num,\n        onClick: (event: Event): void => {\n            changePage(num, event);\n            if (onClick) onClick(event, num);\n        },\n        ariaLabel:\n            ariaLabel ?? getAriaPageLabel(num, currentPage.value === 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(currentPage.value - 1, event);\n}\n\n/** Next button click listener. */\nfunction next(event: Event): void {\n    changePage(currentPage.value + 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 (currentPage.value === page || page < 1 || page > pageCount.value)\n        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 name=\"previous\" v-bind=\"previousButtonBind\">\n            <o-pagination-button\n                v-bind=\"previousButtonBind\"\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=\"nextButtonBind\">\n            <o-pagination-button\n                v-bind=\"nextButtonBind\"\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 } =\n    useInputHandler(inputRef, emits, props);\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    getTeleportDefault,\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: getTeleportDefault(), 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 } =\n    useInputHandler(inputRef, emits, props);\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 { ClassBind, 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    /** Class for the slot wrapper element */\n    class?: ClassBind | ClassBind[];\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(\n                _props.tag as VNode,\n                { class: _props.class },\n                slot,\n            );\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    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 } 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    checkedRows: () => [],\n    checkableHeader: true,\n    stickyCheckbox: false,\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// 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// recompute table rows visibility on row data change\nwatch(tableRows, () => {\n    // sort rows\n    sortTableRows();\n    // recalculate visible rows by page filter\n    filterTableRows();\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    // @ts-expect-error getPropertyValue arguments does not patch perfect to TableColumn<T> attributes\n    return getPropertyValue(row, column.field, 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 based on `filterDebounce` prop\nwatch(\n    () => props.filterDebounce,\n    (debounce) =>\n        (debouncedFilter = useDebounce(handleFiltersChange, debounce || 0)),\n    { immediate: true },\n);\n\n// react on filter 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// compute table rows visibility on pagination values change and on initial load\nwatch(\n    [tableCurrentPage, () => props.perPage, () => props.paginated],\n    () => filterTableRows(),\n    { immediate: true },\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 hidden (filtered out) 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 * check if a row is filtered out by not matching any active filter expresssions\n * @param {T} row - row element to check\n * @returns {boolean} - true if row is filtered out, false if row is visible\n */\nfunction isRowFiltered(row: T): boolean {\n    // check if any filter is applied\n    if (!Object.values(filters.value).filter(Boolean).length) return false;\n\n    // check each column filter if any filter applies to the row column value\n    return !Object.entries(filters.value).some(([columnKey, filter]) => {\n        if (!filter) return false;\n        // get column for the filter\n        const column = tableColumns.value.find((c) => c.field === columnKey);\n        if (!column) return false;\n\n        // if column has custom search funtion return result\n        if (typeof column.customSearch === \"function\")\n            return column.customSearch(row, filter);\n\n        // get the visible column value for the row\n        const value = getColumnValue(row, column);\n\n        // check if value is defined\n        if (!isDefined(value)) return false;\n\n        // check if value is onything else than string\n        if (typeof value !== \"string\") return value === filter;\n\n        // check if the value matches the filter string by regex comparison\n        const re = new RegExp(escapeRegExpChars(filter), \"i\");\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// calculate default sort on columns change and on initial load\nwatch(tableColumns, defaultSort, { immediate: true });\n\n/** sort column based on the default-sort prop if not already sorted */\nfunction defaultSort(): void {\n    // prevent sort when not columns or already sorted (for example async data)\n    if (!tableColumns.value.length || currentSortColumn.value) return;\n    if (!props.defaultSort) return;\n    let sortField = props.defaultSort;\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        sortTableRows();\n        // recalculate the page filter\n        filterTableRows();\n    }\n}\n\n/** sort rows by mutating the tableRows array */\nfunction sortTableRows(): void {\n    if (!props.backendSorting)\n        // sort rows by mutating the tableRows array\n        sortByColumn(tableRows.value);\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/** reset checkedRows whem page props changes */\nwatch(\n    [tableCurrentPage, () => props.perPage],\n    () => (tableCheckedRows.value = []),\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(isChecked);\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/**\n * Update checked rows list.\n * If all rows are checked, uncheck all.\n * If not all rows are checked, check all visible rows.\n * Emits \"check-all\" event with the updated checked rows list.\n */\nfunction updateCheckedRows(checkAll?: boolean): void {\n    if (checkAll ?? 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            .map((row) => row.value)\n            .filter((value) => props.isRowCheckable(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/** 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// #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 thLabelClasses = defineClasses([\"thLabelClass\", \"o-table__th__label\"]);\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__td--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// #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=\"updateCheckedRows\">\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=\"\n                                        updateCheckedRows(!!$event)\n                                    \" />\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                                    :class=\"thLabelClasses\"\n                                    :props=\"{\n                                        column: column.value,\n                                        index: column.index,\n                                    }\" />\n\n                                <template v-else>\n                                    <span :class=\"thLabelClasses\">\n                                        {{ column.label }}\n                                    </span>\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                                </template>\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=\"updateCheckedRows\">\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=\"\n                                        updateCheckedRows(!!$event)\n                                    \" />\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                                    ...tdBaseClasses,\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                                    ...tdBaseClasses,\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=\"!row.hidden && 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([\"itemClass\", \"o-taginput__item\"]);\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                    :variant=\"variant\"\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 some useful composables\nexport {\n    useTrapFocus,\n    useEventListener,\n    useClickOutside,\n    useDebounce,\n    useScrollEvents,\n    unrefElement,\n    getScrollingParent,\n} from \"./composables\";\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","b","newA","getValueByPath","newB","isEqual","valueA","valueB","keys1","keys2","val1","val2","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","classBind","isRef","oldValue","props","getProps","componentKey","config","globalClass","localClass","suffixProcessor","globalOverride","localOverride","appliedClasses","globalTransformClasses","localTransformClasses","input","cls","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","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","callNow","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","normalizeOptions","uuid","option","isGroupOption","toOptionsGroup","toOptionsList","list","group","filterOptionsItems","filter","idx","checkOptionsEmpty","isOptionViable","findOption","found","usePreventScrolling","clipScroll","scrollClipClasses","scrollKeepClasses","scrollClass","savedScrollTop","onBeforeUnmount","toggleScroll","active","useScrollEvents","debouncedCheckScroll","checkScroll","trashhold","getScrollingParent","isScrollingParent","nextParent","overflow","overflowY","scrollHeight","clientHeight","scrollElementInView","scrollableParent","childElement","offsetHeight","offsetTop","parentOffsetHeight","scrollTop","isAbove","isBelow","getTeleportDefault","findFocusable","useTrapFocus","onKeyDown","applyHandler","focusable","firstFocusable","lastFocusable","__props","__emit","environment","rootStyle","style","iconConfig","iconPrefix","customSizeByPack","computedSize","computedIcon","getEquivalentIconOf","onClick","rootClasses","_createElementBlock","_unref","clickable","_openBlock","_createBlock","_resolveDynamicComponent","pack","customClass","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","icon","OIcon","iconClickable","iconPack","size","type","_mergeProps","id","$event","maxlength","autocomplete","placeholder","disabled","_cache","passwordReveal","clearable","iconRightClickable","counter","_toDisplayString","itemValue","useId","rootRef","providedData","selectItem","isClickable","isSelected","selected","focusItem","tag","_renderSlot","_ctx","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","_Teleport","$attrs","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","inline","triggerTag","selectable","menuId","ariaLabel","_createVNode","PositionWrapper","teleport","_normalizeClass","_withCtx","_Transition","animation","_createElementVNode","_withDirectives","menuTag","multiple","_Fragment","_renderList","groupIndex","ODropdownItem","$slots","_hoisted_1","_vShow","_createTextVNode","slots","useSlots","selectedValue","inputValue","filterItems","isEmpty","empty","dropdownValue","currentOption","setSelected","handleFocus","handleBlur","computedIconRightClickable","itemClasses","itemEmptyClasses","itemGroupClasses","itemHeaderClasses","itemFooterClasses","ODropdown","keepOpen","keepFirst","selectOnClose","desktopModal","mobileModal","maxHeight","expanded","OInput","rounded","statusIcon","itemTag","selectableHeader","optionIndex","_hoisted_2","selectableFooter","index$v","Autocomplete","customStyle","listClasses","_component_OBreadcrumbItem","linkClasses","iconLeft","iconSize","iconRight","hidden","index$u","Breadcrumb","BreadcrumbItem","computedTag","computedNativeType","wrapperClasses","labelClasses","iconClasses","$emit","index$t","Button","activeIndex","total","itemWidth","onDragStart","switchTo","indicatorItems","settings","onRefresh","windowWidth","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","autoplay","iconAutoplayResume","iconAutoplayPause","ariaAutoplayResumeLabel","ariaAutoplayPauseLabel","arrows","iconPrev","ariaPreviousLabel","iconNext","ariaNextLabel","indicators","_withKeys","overlay","itemStyle","index$s","Carousel","CarouselItem","isChecked","name","nativeValue","trueValue","falseValue","required","indeterminate","index$r","Checkbox","isOpen","contentClasses","triggerId","contentId","index$q","Collapse","selectRef","rightIcon","rightIconVariant","emit","leftIconClick","selectClasses","nativeSize","_option","_hoisted_4","_hoisted_5","dropdownRef","nativeInputRef","elementRef","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","dateWithin","cellClasses","tableCellClasses","cellEventsClass","eventClasses","tableRowClasses","tableEventsClasses","_normalizeStyle","_withModifiers","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","ODatepickerTableRow","monthRefs","setMonthRef","eventsInThisYear","monthDates","months","focused","dateMultipleSelected","monthClasses","monthTableClasses","monthCellClasses","monthEventsClasses","pickerRef","focusedDateData","_initialDate","computedMonthNames","listOfMonths","minMonth","maxMonth","computedDayNames","listOfYears","latestYear","earliestYear","showPrev","dateToCheck","prev","showNext","next","isNative","formatNative","parse","parseNative","prevDate","nextDate","boxClasses","boxClassBind","headerClasses","prevButtonClasses","nextButtonClasses","listsClasses","footerClasses","pickerDropdownClasses","OPickerWrapper","maxDate","minDate","OButton","OSelect","ariaSelectMonthLabel","ariaSelectYearLabel","ODatepickerMonth","ODatepickerTable","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","minHours","noMinutesAvailable","minute","isMinuteDisabledForHour","maxHours","minMinutes","maxMinutes","isMinuteDisabled","isSecondDisabled","second","minSeconds","maxSeconds","isMeridienDisabled","meridienString","offset","updateDateSelected","onMeridienChange","onHoursChange","onMinutesChange","onSecondsChange","separatorClasses","selectSelectClasses","selectPlaceholderClasses","selectBind","maxTime","minTime","ariaSelectHoursLabel","ariaSelectMinutesLabel","enableSeconds","ariaSelectSecondsLabel","meridien","_hoisted_3","useDateimepickerMixins","datetimeCreator","datetimeFormatter","datetimeParser","dayPeriods","datetimeGroups","datepickerRef","timepickerProps","datepickerProps","updateVModel","datepickerSize","timepickerSize","timepickerDisabled","onChangeNativePicker","datepickerWrapperClasses","timepickerWrapperClasses","ODatepicker","datepicker","openOnFocus","OTimepicker","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","horizontal","_component_OField","messageId","messageTag","messageClass","index$m","Field","index$l","Icon","index$k","Input","isFullPage","cancel","iconSpin","InstanceRegistry","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","submenuId","_component_OMenuItem","resetMenu","excludedItems","selectedItem","onCollapse","onExpend","onFocusLeave","role","OMenuItem","index$h","Menu","MenuItem","vTrapFocus","showX","isAnimating","onEscapePress","afterEnter","beforeLeave","closeClasses","alert","$props","_toHandlers","closeIcon","closeIconSize","ariaCloseLabel","trapFocus","ModalProgrammatic","Modal","index$g","closeable","notificationRef","parentTop","parentBottom","onBeforeMount","noticeClasses","positionBottomClasses","positionTopClasses","topClasses","bottomClasses","noticeContainerClasses","c","showNotice","setAutoClose","correctParent","shouldQueue","isAlert","isPaused","onMouseOver","ONotification","override","NotificationProgrammatic","NotificationNotice","index$f","Notification","currentPage","pageCount","firstItem","perPage","isFirst","hasFirst","hasFirstEllipsis","isLast","hasLast","hasLastEllipsis","pagesInRange","pages","getPage","previousButtonBind","nextButtonBind","num","changePage","getAriaPageLabel","pageNumber","isCurrent","first","last","page","infoClasses","ellipsisClasses","listItemClasses","buttonCurrentClasses","buttonPrevClasses","buttonNextClasses","_normalizeProps","_guardReactiveProps","OPaginationButton","simple","index$e","Pagination","index$d","Radio","index$c","Select","count","index$b","Skeleton","transitionName","vertical","hideOnMobile","clickedOutside","SidebarProgrammatic","Sidebar","index$a","tooltipId","cancelOptions","onContextMenu","onHover","onClose","arrowClasses","always","dragging","startX","startPosition","newPosition","tooltip","tooltipAlways","indicator","precision","precisions","decimal","computedTooltipVariant","currentPosition","wrapperStyle","formattedValue","onButtonDown","onDragging","onLeftKeyDown","setPosition","onRightKeyDown","onHomeKeyDown","onEndKeyDown","diff","percent","stepLength","thumbWrapperClasses","OTooltip","thumbClasses","modelValue","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","ticks","OSliderTick","tickClass","tickHiddenClass","tickLabelClass","OSliderThumb","index$9","Slider","SliderTick","stepClasses","stepIconClasses","stepLabelClasses","isTransitioning","activate","deactivate","nextAnimation","prevAnimation","oldIndex","panelClasses","visible","activeItem","column","performAction","activateItem","fowardIndex","itemClick","getFirstViableIndex","viableIndex","forward","direction","oldItem","newItem","tablistClasses","dividerClasses","markerClasses","navigationClasses","childItem","OStepItem","hasNavigation","index$8","Steps","StepItem","index$7","Switch","OSlotComponent","_props","mobileSort","showPlaceholder","sortableColumns","isCurrentSort","sort","OField","isHeaderUnselectable","thClasses","tdClasses","pageChanged","newPage","OPagination","isMobileActive","slotsRef","isColumnSorted","tableColumns","columnItem","thAttrsData","tdAttrsData","tdAttrs","columnCount","showDetailRowIcon","ariaColIndexStart","hasSubheadings","isScrollable","tableCurrentPage","tableRows","availableRows","sortTableRows","filterTableRows","tableTotal","rowCount","ariaRowIndexStart","hasSearchableColumns","hasCustomFooterSlot","footer","getColumnValue","row","isRowEqual","sourceRow","targetRow","el1","el2","tableSelectedRow","onArrowPressed","selectRow","filters","debouncedFilter","handleFiltersChange","onFiltersEvent","pageStart","pageEnd","isRowFiltered","columnKey","re","currentSortColumn","hasSortableColumns","defaultSort","sortField","sortDirection","sortByField","sortColumn","updateDirection","sortByColumn","rows","asc","tableCheckedRows","isAllChecked","validVisibleData","isAllUncheckable","r","updateCheckedRows","checkAll","checkRow","removeCheckedRow","addCheckedRow","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","thLabelClasses","thSortIconClasses","trSelectedClasses","trCheckedClasses","trEmptyClasses","trDetailedClasses","tdBaseClasses","tdCheckboxClasses","tdDetailedChevronClasses","mobileSortClasses","paginationWrapperClasses","paginationWrapperRootClasses","rowClasses","selectedClasses","checkedClasses","rowClass","columns","OTableColumn","OTableMobileSort","mobileSortPlaceholder","sortIcon","sortIconSize","paginated","paginationPosition","OTablePagination","paginationRounded","paginationSize","paginationOrder","paginationSimple","paginationRangeBefore","paginationRangeAfter","ariaPageLabel","ariaCurrentLabel","showHeader","checkable","checkboxPosition","checkableHeader","OCheckbox","checkboxVariant","_hoisted_10","_hoisted_11","filtersPlaceholder","filtersIcon","filtersEvent","_hoisted_12","_hoisted_14","_hoisted_15","_hoisted_16","rowIndex","isDetailedVisible","detailIcon","isRowCheckable","_TransitionGroup","detailTransition","customDetailRow","emptyIcon","emptyIconSize","emptyLabel","_hoisted_20","loading","OLoading","loadingIcon","loadingLabel","index$6","Table","TableColumn","tabClasses","tabIconClasses","tabLabelClasses","OTabItem","index$5","Tabs","TabItem","closeIconPack","index$4","Tag","autocompleteRef","isDropdownActive","selectedItems","inputLength","itemsLength","selectedOptions","hasInput","addItem","itemToAdd","removeItem","onSelect","onBackspace","containerClasses","autocompleteRootClasses","autocompleteInputClasses","autocompleteBind","OTag","OAutocomplete","maxitems","index$3","Taginput","index$2","Timepicker","index$1","Tooltip","dragDropFocus","onFileChange","updateDragDropFocus","file","checkType","clearInput","focus","types","draggableClasses","dragDrop","accept","Upload","plugins"],"mappings":"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"}