{"version":3,"file":"use-carousel-item.mjs","sources":["../../../../../../packages/components/carousel/src/use-carousel-item.ts"],"sourcesContent":["import {\r\n  getCurrentInstance,\r\n  inject,\r\n  onMounted,\r\n  onUnmounted,\r\n  reactive,\r\n  ref,\r\n  unref,\r\n} from 'vue'\r\nimport { debugWarn, isUndefined } from '@sgui-plus/utils'\r\nimport { CarouselContextKey } from './constants'\r\n\r\nimport type { CarouselItemProps } from './carousel-item'\r\n\r\nexport const useCarouselItem = (\r\n  props: CarouselItemProps,\r\n  componentName: string\r\n) => {\r\n  const carouselContext = inject(CarouselContextKey)!\r\n  // instance\r\n  const instance = getCurrentInstance()!\r\n  if (!carouselContext) {\r\n    debugWarn(\r\n      componentName,\r\n      'usage: <sg-carousel><sg-carousel-item /></sg-carousel>'\r\n    )\r\n  }\r\n\r\n  if (!instance) {\r\n    debugWarn(\r\n      componentName,\r\n      'compositional hook can only be invoked inside setups'\r\n    )\r\n  }\r\n\r\n  const CARD_SCALE = 0.83\r\n\r\n  const carouselItemRef = ref<HTMLElement>()\r\n  const hover = ref(false)\r\n  const translate = ref(0)\r\n  const scale = ref(1)\r\n  const active = ref(false)\r\n  const ready = ref(false)\r\n  const inStage = ref(false)\r\n  const animating = ref(false)\r\n\r\n  // computed\r\n  const { isCardType, isVertical } = carouselContext\r\n\r\n  // methods\r\n\r\n  function processIndex(index: number, activeIndex: number, length: number) {\r\n    const lastItemIndex = length - 1\r\n    const prevItemIndex = activeIndex - 1\r\n    const nextItemIndex = activeIndex + 1\r\n    const halfItemIndex = length / 2\r\n\r\n    if (activeIndex === 0 && index === lastItemIndex) {\r\n      return -1\r\n    } else if (activeIndex === lastItemIndex && index === 0) {\r\n      return length\r\n    } else if (index < prevItemIndex && activeIndex - index >= halfItemIndex) {\r\n      return length + 1\r\n    } else if (index > nextItemIndex && index - activeIndex >= halfItemIndex) {\r\n      return -2\r\n    }\r\n    return index\r\n  }\r\n\r\n  function calcCardTranslate(index: number, activeIndex: number) {\r\n    const parentWidth = unref(isVertical)\r\n      ? carouselContext.root.value?.offsetHeight || 0\r\n      : carouselContext.root.value?.offsetWidth || 0\r\n\r\n    if (inStage.value) {\r\n      return (parentWidth * ((2 - CARD_SCALE) * (index - activeIndex) + 1)) / 4\r\n    } else if (index < activeIndex) {\r\n      return (-(1 + CARD_SCALE) * parentWidth) / 4\r\n    } else {\r\n      return ((3 + CARD_SCALE) * parentWidth) / 4\r\n    }\r\n  }\r\n\r\n  function calcTranslate(\r\n    index: number,\r\n    activeIndex: number,\r\n    isVertical: boolean\r\n  ) {\r\n    const rootEl = carouselContext.root.value\r\n    if (!rootEl) return 0\r\n\r\n    const distance =\r\n      (isVertical ? rootEl.offsetHeight : rootEl.offsetWidth) || 0\r\n    return distance * (index - activeIndex)\r\n  }\r\n\r\n  const translateItem = (\r\n    index: number,\r\n    activeIndex: number,\r\n    oldIndex?: number\r\n  ) => {\r\n    const _isCardType = unref(isCardType)\r\n    const carouselItemLength = carouselContext.items.value.length ?? Number.NaN\r\n\r\n    const isActive = index === activeIndex\r\n    if (!_isCardType && !isUndefined(oldIndex)) {\r\n      animating.value = isActive || index === oldIndex\r\n    }\r\n\r\n    if (!isActive && carouselItemLength > 2 && carouselContext.loop) {\r\n      index = processIndex(index, activeIndex, carouselItemLength)\r\n    }\r\n\r\n    const _isVertical = unref(isVertical)\r\n    active.value = isActive\r\n\r\n    if (_isCardType) {\r\n      inStage.value = Math.round(Math.abs(index - activeIndex)) <= 1\r\n      translate.value = calcCardTranslate(index, activeIndex)\r\n      scale.value = unref(active) ? 1 : CARD_SCALE\r\n    } else {\r\n      translate.value = calcTranslate(index, activeIndex, _isVertical)\r\n    }\r\n\r\n    ready.value = true\r\n\r\n    if (isActive && carouselItemRef.value) {\r\n      carouselContext.setContainerHeight(carouselItemRef.value.offsetHeight)\r\n    }\r\n  }\r\n\r\n  function handleItemClick() {\r\n    if (carouselContext && unref(isCardType)) {\r\n      const index = carouselContext.items.value.findIndex(\r\n        ({ uid }) => uid === instance.uid\r\n      )\r\n      carouselContext.setActiveItem(index)\r\n    }\r\n  }\r\n\r\n  // lifecycle\r\n  onMounted(() => {\r\n    carouselContext.addItem({\r\n      props,\r\n      states: reactive({\r\n        hover,\r\n        translate,\r\n        scale,\r\n        active,\r\n        ready,\r\n        inStage,\r\n        animating,\r\n      }),\r\n      uid: instance.uid,\r\n      translateItem,\r\n    })\r\n  })\r\n\r\n  onUnmounted(() => {\r\n    carouselContext.removeItem(instance.uid)\r\n  })\r\n\r\n  return {\r\n    carouselItemRef,\r\n    active,\r\n    animating,\r\n    hover,\r\n    inStage,\r\n    isVertical,\r\n    translate,\r\n    isCardType,\r\n    scale,\r\n    ready,\r\n    handleItemClick,\r\n  }\r\n}\r\n"],"names":[],"mappings":"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"}