{"version":3,"file":"carousel.mjs","sources":["../../src/components/carousel/Carousel.vue","../../src/components/carousel/CarouselItem.vue","../../src/components/carousel/index.ts"],"sourcesContent":["<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"],"names":["index","_useModel","breakpoint","settings","_createElementBlock","_unref","_createElementVNode","_renderSlot","autoplay","_createBlock","OIcon","iconPack","iconAutoplayPause","iconAutoplayResume","iconSize","ariaAutoplayPauseLabel","ariaAutoplayResumeLabel","arrows","_Fragment","_createVNode","iconPrev","ariaPreviousLabel","_vShow","iconNext","ariaNextLabel","indicators","_renderList","_withKeys","_normalizeClass","overlay","Carousel","CarouselItem"],"mappings":"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"}