{"version":3,"file":"carousel-item.mjs","sources":["../../../../../../packages/components/carousel/src/carousel-item.vue"],"sourcesContent":["<template>\n  <div\n    v-show=\"ready\"\n    :class=\"[\n      ns.e('item'),\n      ns.is('active', active),\n      ns.is('in-stage', inStage),\n      ns.is('hover', hover),\n      ns.is('animating', animating),\n      { [ns.em('item', 'card')]: isCardType },\n    ]\"\n    :style=\"itemStyle\"\n    data-test-name=\"carousel-item\"\n    data-test-variant=\"\"\n    data-test-state=\"\"\n    @click=\"handleItemClick\"\n  >\n    <div v-if=\"isCardType\" v-show=\"!active\" :class=\"ns.e('mask')\" />\n    <slot />\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n  computed,\n  getCurrentInstance,\n  inject,\n  onMounted,\n  onUnmounted,\n  reactive,\n  ref,\n  unref,\n} from 'vue'\nimport { debugWarn, isUndefined } from '@bigin/utils'\nimport { useNamespace } from '@bigin/hooks'\nimport { carouselContextKey } from '@bigin/tokens'\nimport { carouselItemProps } from './carousel-item'\n\nimport type { CSSProperties } from 'vue'\n\ndefineOptions({\n  name: 'BCarouselItem',\n})\n\nconst props = defineProps(carouselItemProps)\nconst ns = useNamespace('carousel')\nconst COMPONENT_NAME = 'BCarouselItem'\n// inject\nconst carouselContext = inject(carouselContextKey)!\n// instance\nconst instance = getCurrentInstance()!\nif (!carouselContext) {\n  debugWarn(\n    COMPONENT_NAME,\n    'usage: <b-carousel></b-carousel-item></b-carousel>'\n  )\n}\n\nif (!instance) {\n  debugWarn(\n    COMPONENT_NAME,\n    'compositional hook can only be invoked inside setups'\n  )\n}\n\nconst CARD_SCALE = 0.83\n\nconst hover = ref(false)\nconst translate = ref(0)\nconst scale = ref(1)\nconst active = ref(false)\nconst ready = ref(false)\nconst inStage = ref(false)\nconst animating = ref(false)\n\n// computed\nconst { isCardType, isVertical } = carouselContext\n\nconst itemStyle = computed<CSSProperties>(() => {\n  const translateType = `translate${unref(isVertical) ? 'Y' : 'X'}`\n  const _translate = `${translateType}(${unref(translate)}px)`\n  const _scale = `scale(${unref(scale)})`\n  const transform = [_translate, _scale].join(' ')\n\n  return {\n    transform,\n  }\n})\n\n// methods\n\nfunction 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\nfunction calcCardTranslate(index: number, activeIndex: number) {\n  const parentWidth = carouselContext.root.value?.offsetWidth || 0\n  if (inStage.value) {\n    return (parentWidth * ((2 - CARD_SCALE) * (index - activeIndex) + 1)) / 4\n  } else if (index < activeIndex) {\n    return (-(1 + CARD_SCALE) * parentWidth) / 4\n  } else {\n    return ((3 + CARD_SCALE) * parentWidth) / 4\n  }\n}\n\nfunction 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 = (isVertical ? rootEl.offsetHeight : rootEl.offsetWidth) || 0\n  return distance * (index - activeIndex)\n}\n\nconst 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    if (_isVertical) {\n      debugWarn('Carousel', 'vertical direction is not supported for card mode')\n    }\n    inStage.value = Math.round(Math.abs(index - activeIndex)) <= 1\n    translate.value = calcCardTranslate(index, activeIndex)\n    scale.value = unref(active) ? 1 : CARD_SCALE\n  } else {\n    translate.value = calcTranslate(index, activeIndex, _isVertical)\n  }\n\n  ready.value = true\n}\n\nfunction 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// lifecycle\nonMounted(() => {\n  carouselContext.addItem({\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    translateItem,\n  })\n})\n\nonUnmounted(() => {\n  carouselContext.removeItem(instance.uid)\n})\n</script>\n"],"names":["isVertical"],"mappings":"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"}