{"version":3,"file":"use-carousel-item.mjs","sources":["../../../../../../../packages/components/carousel/src/use-carousel-item.ts"],"sourcesContent":["import {\n  getCurrentInstance,\n  inject,\n  onBeforeUnmount,\n  reactive,\n  ref,\n  unref,\n} from 'vue'\nimport { debugWarn, isUndefined } from '@hd-front-end/utils'\nimport { CAROUSEL_ITEM_NAME, carouselContextKey } from './constants'\n\nimport type { CarouselItemProps } from './carousel-item'\n\nexport const useCarouselItem = (props: CarouselItemProps) => {\n  const carouselContext = inject(carouselContextKey)!\n  // instance\n  const instance = getCurrentInstance()!\n  if (!carouselContext) {\n    debugWarn(\n      CAROUSEL_ITEM_NAME,\n      'usage: <el-carousel></el-carousel-item></el-carousel>'\n    )\n  }\n\n  if (!instance) {\n    debugWarn(\n      CAROUSEL_ITEM_NAME,\n      'compositional hook can only be invoked inside setups'\n    )\n  }\n\n  const carouselItemRef = ref<HTMLElement>()\n  const hover = ref(false)\n  const translate = ref(0)\n  const scale = ref(1)\n  const active = ref(false)\n  const ready = ref(false)\n  const inStage = ref(false)\n  const animating = ref(false)\n\n  // computed\n  const { isCardType, isVertical, cardScale } = carouselContext\n\n  // methods\n\n  function processIndex(index: number, activeIndex: number, length: number) {\n    const lastItemIndex = length - 1\n    const prevItemIndex = activeIndex - 1\n    const nextItemIndex = activeIndex + 1\n    const halfItemIndex = length / 2\n\n    if (activeIndex === 0 && index === lastItemIndex) {\n      return -1\n    } else if (activeIndex === lastItemIndex && index === 0) {\n      return length\n    } else if (index < prevItemIndex && activeIndex - index >= halfItemIndex) {\n      return length + 1\n    } else if (index > nextItemIndex && index - activeIndex >= halfItemIndex) {\n      return -2\n    }\n    return index\n  }\n\n  function calcCardTranslate(index: number, activeIndex: number) {\n    const parentWidth = unref(isVertical)\n      ? carouselContext.root.value?.offsetHeight || 0\n      : carouselContext.root.value?.offsetWidth || 0\n\n    if (inStage.value) {\n      return (parentWidth * ((2 - cardScale) * (index - activeIndex) + 1)) / 4\n    } else if (index < activeIndex) {\n      return (-(1 + cardScale) * parentWidth) / 4\n    } else {\n      return ((3 + cardScale) * parentWidth) / 4\n    }\n  }\n\n  function calcTranslate(\n    index: number,\n    activeIndex: number,\n    isVertical: boolean\n  ) {\n    const rootEl = carouselContext.root.value\n    if (!rootEl) return 0\n\n    const distance =\n      (isVertical ? rootEl.offsetHeight : rootEl.offsetWidth) || 0\n    return distance * (index - activeIndex)\n  }\n\n  const translateItem = (\n    index: number,\n    activeIndex: number,\n    oldIndex?: number\n  ) => {\n    const _isCardType = unref(isCardType)\n    const carouselItemLength = carouselContext.items.value.length ?? Number.NaN\n\n    const isActive = index === activeIndex\n    if (!_isCardType && !isUndefined(oldIndex)) {\n      animating.value = isActive || index === oldIndex\n    }\n\n    if (!isActive && carouselItemLength > 2 && carouselContext.loop) {\n      index = processIndex(index, activeIndex, carouselItemLength)\n    }\n\n    const _isVertical = unref(isVertical)\n    active.value = isActive\n\n    if (_isCardType) {\n      inStage.value = Math.round(Math.abs(index - activeIndex)) <= 1\n      translate.value = calcCardTranslate(index, activeIndex)\n      scale.value = unref(active) ? 1 : cardScale\n    } else {\n      translate.value = calcTranslate(index, activeIndex, _isVertical)\n    }\n\n    ready.value = true\n\n    if (isActive && carouselItemRef.value) {\n      carouselContext.setContainerHeight(carouselItemRef.value.offsetHeight)\n    }\n  }\n\n  function handleItemClick() {\n    if (carouselContext && unref(isCardType)) {\n      const index = carouselContext.items.value.findIndex(\n        ({ uid }) => uid === instance.uid\n      )\n      carouselContext.setActiveItem(index)\n    }\n  }\n\n  const carouselItemContext = {\n    props,\n    states: reactive({\n      hover,\n      translate,\n      scale,\n      active,\n      ready,\n      inStage,\n      animating,\n    }),\n    uid: instance.uid,\n    getVnode: () => instance.vnode,\n    translateItem,\n  }\n\n  carouselContext.addItem(carouselItemContext)\n\n  onBeforeUnmount(() => {\n    carouselContext.removeItem(carouselItemContext)\n  })\n\n  return {\n    carouselItemRef,\n    active,\n    animating,\n    hover,\n    inStage,\n    isVertical,\n    translate,\n    isCardType,\n    scale,\n    ready,\n    handleItemClick,\n  }\n}\n"],"names":["isVertical"],"mappings":";;;;AAaa,MAAA,eAAA,GAAkB,CAAC,KAA6B,KAAA;AAC3D,EAAM,MAAA,eAAA,GAAkB,OAAO,kBAAkB,CAAA,CAAA;AAEjD,EAAA,MAAM,WAAW,kBAAmB,EAAA,CAAA;AAepC,EAAA,MAAM,kBAAkB,GAAiB,EAAA,CAAA;AACzC,EAAM,MAAA,KAAA,GAAQ,IAAI,KAAK,CAAA,CAAA;AACvB,EAAM,MAAA,SAAA,GAAY,IAAI,CAAC,CAAA,CAAA;AACvB,EAAM,MAAA,KAAA,GAAQ,IAAI,CAAC,CAAA,CAAA;AACnB,EAAM,MAAA,MAAA,GAAS,IAAI,KAAK,CAAA,CAAA;AACxB,EAAM,MAAA,KAAA,GAAQ,IAAI,KAAK,CAAA,CAAA;AACvB,EAAM,MAAA,OAAA,GAAU,IAAI,KAAK,CAAA,CAAA;AACzB,EAAM,MAAA,SAAA,GAAY,IAAI,KAAK,CAAA,CAAA;AAG3B,EAAA,MAAM,EAAE,UAAA,EAAY,UAAY,EAAA,SAAA,EAAc,GAAA,eAAA,CAAA;AAI9C,EAAS,SAAA,YAAA,CAAa,KAAe,EAAA,WAAA,EAAqB,MAAgB,EAAA;AACxE,IAAA,MAAM,gBAAgB,MAAS,GAAA,CAAA,CAAA;AAC/B,IAAA,MAAM,gBAAgB,WAAc,GAAA,CAAA,CAAA;AACpC,IAAA,MAAM,gBAAgB,WAAc,GAAA,CAAA,CAAA;AACpC,IAAA,MAAM,gBAAgB,MAAS,GAAA,CAAA,CAAA;AAE/B,IAAI,IAAA,WAAA,KAAgB,CAAK,IAAA,KAAA,KAAU,aAAe,EAAA;AAChD,MAAO,OAAA,CAAA,CAAA,CAAA;AAAA,KACE,MAAA,IAAA,WAAA,KAAgB,aAAiB,IAAA,KAAA,KAAU,CAAG,EAAA;AACvD,MAAO,OAAA,MAAA,CAAA;AAAA,KACE,MAAA,IAAA,KAAA,GAAQ,aAAiB,IAAA,WAAA,GAAc,SAAS,aAAe,EAAA;AACxE,MAAA,OAAO,MAAS,GAAA,CAAA,CAAA;AAAA,KACP,MAAA,IAAA,KAAA,GAAQ,aAAiB,IAAA,KAAA,GAAQ,eAAe,aAAe,EAAA;AACxE,MAAO,OAAA,CAAA,CAAA,CAAA;AAAA,KACT;AACA,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAS,SAAA,iBAAA,CAAkB,OAAe,WAAqB,EAAA;AA/DjE,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAgEI,IAAA,MAAM,WAAc,GAAA,KAAA,CAAM,UAAU,CAAA,GAAA,CAAA,CAChC,qBAAgB,IAAK,CAAA,KAAA,KAArB,IAA4B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,YAAA,KAAgB,CAC5C,GAAA,CAAA,CAAA,EAAA,GAAA,eAAA,CAAgB,IAAK,CAAA,KAAA,KAArB,mBAA4B,WAAe,KAAA,CAAA,CAAA;AAE/C,IAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,MAAA,OAAQ,WAAgB,IAAA,CAAA,CAAA,GAAI,SAAc,KAAA,KAAA,GAAQ,eAAe,CAAM,CAAA,GAAA,CAAA,CAAA;AAAA,KACzE,MAAA,IAAW,QAAQ,WAAa,EAAA;AAC9B,MAAQ,OAAA,EAAE,CAAI,GAAA,SAAA,CAAA,GAAa,WAAe,GAAA,CAAA,CAAA;AAAA,KACrC,MAAA;AACL,MAAS,OAAA,CAAA,CAAA,GAAI,aAAa,WAAe,GAAA,CAAA,CAAA;AAAA,KAC3C;AAAA,GACF;AAEA,EAAS,SAAA,aAAA,CACP,KACA,EAAA,WAAA,EACAA,WACA,EAAA;AACA,IAAM,MAAA,MAAA,GAAS,gBAAgB,IAAK,CAAA,KAAA,CAAA;AACpC,IAAA,IAAI,CAAC,MAAA;AAAQ,MAAO,OAAA,CAAA,CAAA;AAEpB,IAAA,MAAM,QACHA,GAAAA,CAAAA,WAAAA,GAAa,MAAO,CAAA,YAAA,GAAe,OAAO,WAAgB,KAAA,CAAA,CAAA;AAC7D,IAAA,OAAO,YAAY,KAAQ,GAAA,WAAA,CAAA,CAAA;AAAA,GAC7B;AAEA,EAAA,MAAM,aAAgB,GAAA,CACpB,KACA,EAAA,WAAA,EACA,QACG,KAAA;AA9FP,IAAA,IAAA,EAAA,CAAA;AA+FI,IAAM,MAAA,WAAA,GAAc,MAAM,UAAU,CAAA,CAAA;AACpC,IAAA,MAAM,sBAAqB,EAAgB,GAAA,eAAA,CAAA,KAAA,CAAM,KAAM,CAAA,MAAA,KAA5B,YAAsC,MAAO,CAAA,GAAA,CAAA;AAExE,IAAA,MAAM,WAAW,KAAU,KAAA,WAAA,CAAA;AAC3B,IAAA,IAAI,CAAC,WAAA,IAAe,CAAC,WAAA,CAAY,QAAQ,CAAG,EAAA;AAC1C,MAAU,SAAA,CAAA,KAAA,GAAQ,YAAY,KAAU,KAAA,QAAA,CAAA;AAAA,KAC1C;AAEA,IAAA,IAAI,CAAC,QAAA,IAAY,kBAAqB,GAAA,CAAA,IAAK,gBAAgB,IAAM,EAAA;AAC/D,MAAQ,KAAA,GAAA,YAAA,CAAa,KAAO,EAAA,WAAA,EAAa,kBAAkB,CAAA,CAAA;AAAA,KAC7D;AAEA,IAAM,MAAA,WAAA,GAAc,MAAM,UAAU,CAAA,CAAA;AACpC,IAAA,MAAA,CAAO,KAAQ,GAAA,QAAA,CAAA;AAEf,IAAA,IAAI,WAAa,EAAA;AACf,MAAQ,OAAA,CAAA,KAAA,GAAQ,KAAK,KAAM,CAAA,IAAA,CAAK,IAAI,KAAQ,GAAA,WAAW,CAAC,CAAK,IAAA,CAAA,CAAA;AAC7D,MAAU,SAAA,CAAA,KAAA,GAAQ,iBAAkB,CAAA,KAAA,EAAO,WAAW,CAAA,CAAA;AACtD,MAAA,KAAA,CAAM,KAAQ,GAAA,KAAA,CAAM,MAAM,CAAA,GAAI,CAAI,GAAA,SAAA,CAAA;AAAA,KAC7B,MAAA;AACL,MAAA,SAAA,CAAU,KAAQ,GAAA,aAAA,CAAc,KAAO,EAAA,WAAA,EAAa,WAAW,CAAA,CAAA;AAAA,KACjE;AAEA,IAAA,KAAA,CAAM,KAAQ,GAAA,IAAA,CAAA;AAEd,IAAI,IAAA,QAAA,IAAY,gBAAgB,KAAO,EAAA;AACrC,MAAgB,eAAA,CAAA,kBAAA,CAAmB,eAAgB,CAAA,KAAA,CAAM,YAAY,CAAA,CAAA;AAAA,KACvE;AAAA,GACF,CAAA;AAEA,EAAA,SAAS,eAAkB,GAAA;AACzB,IAAI,IAAA,eAAA,IAAmB,KAAM,CAAA,UAAU,CAAG,EAAA;AACxC,MAAM,MAAA,KAAA,GAAQ,eAAgB,CAAA,KAAA,CAAM,KAAM,CAAA,SAAA;AAAA,QACxC,CAAC,EAAE,GAAI,EAAA,KAAM,QAAQ,QAAS,CAAA,GAAA;AAAA,OAChC,CAAA;AACA,MAAA,eAAA,CAAgB,cAAc,KAAK,CAAA,CAAA;AAAA,KACrC;AAAA,GACF;AAEA,EAAA,MAAM,mBAAsB,GAAA;AAAA,IAC1B,KAAA;AAAA,IACA,QAAQ,QAAS,CAAA;AAAA,MACf,KAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,KACD,CAAA;AAAA,IACD,KAAK,QAAS,CAAA,GAAA;AAAA,IACd,QAAA,EAAU,MAAM,QAAS,CAAA,KAAA;AAAA,IACzB,aAAA;AAAA,GACF,CAAA;AAEA,EAAA,eAAA,CAAgB,QAAQ,mBAAmB,CAAA,CAAA;AAE3C,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,eAAA,CAAgB,WAAW,mBAAmB,CAAA,CAAA;AAAA,GAC/C,CAAA,CAAA;AAED,EAAO,OAAA;AAAA,IACL,eAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,eAAA;AAAA,GACF,CAAA;AACF;;;;"}