{"version":3,"file":"use-carousel.mjs","sources":["../../../../../../packages/components/carousel/src/use-carousel.ts"],"sourcesContent":["import {\r\n  computed,\r\n  getCurrentInstance,\r\n  onBeforeUnmount,\r\n  onMounted,\r\n  provide,\r\n  ref,\r\n  shallowRef,\r\n  unref,\r\n  watch,\r\n} from 'vue'\r\nimport { throttle } from 'lodash'\r\nimport { useResizeObserver } from '@vueuse/core'\r\nimport { debugWarn, isString } from '@sgui-plus/utils'\r\nimport { useOrderedChildren } from '@sgui-plus/hooks'\r\nimport { CarouselContextKey } from './constants'\r\n\r\nimport type { SetupContext } from 'vue'\r\nimport type { CarouselItemContext } from './constants'\r\nimport type { CarouselEmits, CarouselProps } from './carousel'\r\n\r\nconst THROTTLE_TIME = 300\r\n\r\nexport const useCarousel = (\r\n  props: CarouselProps,\r\n  emit: SetupContext<CarouselEmits>['emit'],\r\n  componentName: string\r\n) => {\r\n  const {\r\n    children: items,\r\n    addChild: addItem,\r\n    removeChild: removeItem,\r\n  } = useOrderedChildren<CarouselItemContext>(\r\n    getCurrentInstance()!,\r\n    'SgCarouselItem'\r\n  )\r\n\r\n  // refs\r\n  const activeIndex = ref(-1)\r\n  const timer = ref<ReturnType<typeof setInterval> | null>(null)\r\n  const hover = ref(false)\r\n  const root = ref<HTMLDivElement>()\r\n  const containerHeight = ref<number>(0)\r\n\r\n  // computed\r\n  const arrowDisplay = computed(\r\n    () => props.arrow !== 'never' && !unref(isVertical)\r\n  )\r\n\r\n  const hasLabel = computed(() => {\r\n    return items.value.some((item) => item.props.label.toString().length > 0)\r\n  })\r\n\r\n  const isCardType = computed(() => props.type === 'card')\r\n  const isVertical = computed(() => props.direction === 'vertical')\r\n\r\n  const containerStyle = computed(() => {\r\n    if (props.height !== 'auto') {\r\n      return {\r\n        height: props.height,\r\n      }\r\n    }\r\n    return {\r\n      height: `${containerHeight.value}px`,\r\n      overflow: 'hidden',\r\n    }\r\n  })\r\n\r\n  // methods\r\n  const throttledArrowClick = throttle(\r\n    (index: number) => {\r\n      setActiveItem(index)\r\n    },\r\n    THROTTLE_TIME,\r\n    { trailing: true }\r\n  )\r\n\r\n  const throttledIndicatorHover = throttle((index: number) => {\r\n    handleIndicatorHover(index)\r\n  }, THROTTLE_TIME)\r\n\r\n  function pauseTimer() {\r\n    if (timer.value) {\r\n      clearInterval(timer.value)\r\n      timer.value = null\r\n    }\r\n  }\r\n\r\n  function startTimer() {\r\n    if (props.interval <= 0 || !props.autoplay || timer.value) return\r\n    timer.value = setInterval(() => playSlides(), props.interval)\r\n  }\r\n\r\n  const playSlides = () => {\r\n    if (activeIndex.value < items.value.length - 1) {\r\n      activeIndex.value = activeIndex.value + 1\r\n    } else if (props.loop) {\r\n      activeIndex.value = 0\r\n    }\r\n  }\r\n\r\n  function setActiveItem(index: number | string) {\r\n    if (isString(index)) {\r\n      const filteredItems = items.value.filter(\r\n        (item) => item.props.name === index\r\n      )\r\n      if (filteredItems.length > 0) {\r\n        index = items.value.indexOf(filteredItems[0])\r\n      }\r\n    }\r\n    index = Number(index)\r\n    if (Number.isNaN(index) || index !== Math.floor(index)) {\r\n      debugWarn(componentName, 'index must be integer.')\r\n      return\r\n    }\r\n    const itemCount = items.value.length\r\n    const oldIndex = activeIndex.value\r\n    if (index < 0) {\r\n      activeIndex.value = props.loop ? itemCount - 1 : 0\r\n    } else if (index >= itemCount) {\r\n      activeIndex.value = props.loop ? 0 : itemCount - 1\r\n    } else {\r\n      activeIndex.value = index\r\n    }\r\n    if (oldIndex === activeIndex.value) {\r\n      resetItemPosition(oldIndex)\r\n    }\r\n    resetTimer()\r\n  }\r\n\r\n  function resetItemPosition(oldIndex?: number) {\r\n    items.value.forEach((item, index) => {\r\n      item.translateItem(index, activeIndex.value, oldIndex)\r\n    })\r\n  }\r\n\r\n  function itemInStage(item: CarouselItemContext, index: number) {\r\n    const _items = unref(items)\r\n    const itemCount = _items.length\r\n    if (itemCount === 0 || !item.states.inStage) return false\r\n    const nextItemIndex = index + 1\r\n    const prevItemIndex = index - 1\r\n    const lastItemIndex = itemCount - 1\r\n    const isLastItemActive = _items[lastItemIndex].states.active\r\n    const isFirstItemActive = _items[0].states.active\r\n    const isNextItemActive = _items[nextItemIndex]?.states?.active\r\n    const isPrevItemActive = _items[prevItemIndex]?.states?.active\r\n\r\n    if ((index === lastItemIndex && isFirstItemActive) || isNextItemActive) {\r\n      return 'left'\r\n    } else if ((index === 0 && isLastItemActive) || isPrevItemActive) {\r\n      return 'right'\r\n    }\r\n    return false\r\n  }\r\n\r\n  function handleMouseEnter() {\r\n    hover.value = true\r\n    if (props.pauseOnHover) {\r\n      pauseTimer()\r\n    }\r\n  }\r\n\r\n  function handleMouseLeave() {\r\n    hover.value = false\r\n    startTimer()\r\n  }\r\n\r\n  function handleButtonEnter(arrow: 'left' | 'right') {\r\n    if (unref(isVertical)) return\r\n    items.value.forEach((item, index) => {\r\n      if (arrow === itemInStage(item, index)) {\r\n        item.states.hover = true\r\n      }\r\n    })\r\n  }\r\n\r\n  function handleButtonLeave() {\r\n    if (unref(isVertical)) return\r\n    items.value.forEach((item) => {\r\n      item.states.hover = false\r\n    })\r\n  }\r\n\r\n  function handleIndicatorClick(index: number) {\r\n    activeIndex.value = index\r\n  }\r\n\r\n  function handleIndicatorHover(index: number) {\r\n    if (props.trigger === 'hover' && index !== activeIndex.value) {\r\n      activeIndex.value = index\r\n    }\r\n  }\r\n\r\n  function prev() {\r\n    setActiveItem(activeIndex.value - 1)\r\n  }\r\n\r\n  function next() {\r\n    setActiveItem(activeIndex.value + 1)\r\n  }\r\n\r\n  function resetTimer() {\r\n    pauseTimer()\r\n    startTimer()\r\n  }\r\n\r\n  function setContainerHeight(height: number) {\r\n    if (props.height !== 'auto') return\r\n    containerHeight.value = height\r\n  }\r\n\r\n  // watch\r\n  watch(\r\n    () => activeIndex.value,\r\n    (current, prev) => {\r\n      resetItemPosition(prev)\r\n      if (prev > -1) {\r\n        emit('onChange', current, prev)\r\n      }\r\n    }\r\n  )\r\n  watch(\r\n    () => props.autoplay,\r\n    (autoplay) => {\r\n      autoplay ? startTimer() : pauseTimer()\r\n    }\r\n  )\r\n  watch(\r\n    () => props.loop,\r\n    () => {\r\n      setActiveItem(activeIndex.value)\r\n    }\r\n  )\r\n\r\n  watch(\r\n    () => props.interval,\r\n    () => {\r\n      resetTimer()\r\n    }\r\n  )\r\n\r\n  watch(\r\n    () => items.value,\r\n    () => {\r\n      if (items.value.length > 0) setActiveItem(props.initialIndex)\r\n    }\r\n  )\r\n\r\n  const resizeObserver = shallowRef<ReturnType<typeof useResizeObserver>>()\r\n  // lifecycle\r\n  onMounted(() => {\r\n    resizeObserver.value = useResizeObserver(root.value, () => {\r\n      resetItemPosition()\r\n    })\r\n    startTimer()\r\n  })\r\n\r\n  onBeforeUnmount(() => {\r\n    pauseTimer()\r\n    if (root.value && resizeObserver.value) resizeObserver.value.stop()\r\n  })\r\n\r\n  // provide\r\n  provide(CarouselContextKey, {\r\n    root,\r\n    isCardType,\r\n    isVertical,\r\n    items,\r\n    loop: props.loop,\r\n    addItem,\r\n    removeItem,\r\n    setActiveItem,\r\n    setContainerHeight,\r\n  })\r\n\r\n  return {\r\n    root,\r\n    activeIndex,\r\n    arrowDisplay,\r\n    hasLabel,\r\n    hover,\r\n    isCardType,\r\n    items,\r\n    isVertical,\r\n    containerStyle,\r\n    handleButtonEnter,\r\n    handleButtonLeave,\r\n    handleIndicatorClick,\r\n    handleMouseEnter,\r\n    handleMouseLeave,\r\n    setActiveItem,\r\n    prev,\r\n    next,\r\n    throttledArrowClick,\r\n    throttledIndicatorHover,\r\n  }\r\n}\r\n"],"names":[],"mappings":"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"}