{"version":3,"file":"tabs.mjs","sources":["../../src/components/tabs/TabItem.vue","../../src/components/tabs/Tabs.vue","../../src/components/tabs/index.ts"],"sourcesContent":["<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"],"names":["_unref","_createBlock","_Transition","_createElementVNode","_mergeProps","_renderSlot","visible","component","_openBlock","_resolveDynamicComponent","$props","_toHandlers","_createElementBlock","_Fragment","content","_vShow","_useModel","index","ariaLabel","vertical","_renderList","_normalizeClass","_withKeys","_withModifiers","OIcon","size","_toDisplayString","_withDirectives","OTabItem","Tabs","TabItem"],"mappings":"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"}