{"version":3,"file":"carousel.vue2.cjs","sources":["../../../components/carousel/carousel.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Icon } from '@/components/icon'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, onMounted, provide, reactive, ref, toRef, watch } from 'vue'\n\nimport { emitEvent, useHoverDelay, useIcons, useNameHelper, useProps } from '@vexip-ui/config'\nimport { useHover, useRtl, useSetTimeout } from '@vexip-ui/hooks'\nimport { debounceMinor } from '@vexip-ui/utils'\nimport { carouselProps } from './props'\nimport { CAROUSEL_STATE } from './symbol'\n\nimport type { CarouselSlots, CarouselState, ItemState } from './symbol'\n\ndefineOptions({ name: 'Carousel' })\n\nconst _props = defineProps(carouselProps)\nconst props = useProps('carousel', _props, {\n  active: {\n    default: 0,\n    static: true,\n  },\n  viewSize: {\n    default: 3,\n    validator: value => value > 0,\n  },\n  vertical: false,\n  disabled: false,\n  loop: false,\n  arrow: {\n    default: 'outside',\n    validator: value => ['outside', 'inside', 'none'].includes(value),\n  },\n  arrowTrigger: {\n    default: 'hover',\n    validator: value => ['hover', 'always'].includes(value),\n  },\n  autoplay: {\n    default: false,\n    validator: value => (typeof value === 'number' ? value > 500 : true),\n  },\n  pointer: {\n    default: 'none',\n    validator: value => ['outside', 'inside', 'none'].includes(value),\n  },\n  speed: 300,\n  activeOffset: 0,\n  height: null,\n  ignoreHover: false,\n  slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:active'])\n\ndefineSlots<CarouselSlots>()\n\nconst nh = useNameHelper('carousel')\nconst icons = useIcons()\nconst hoverDelay = useHoverDelay()\nconst { isRtl } = useRtl()\nconst itemStates = ref(new Set<ItemState>())\nconst currentActive = ref(0)\nconst isLocked = ref(false) // 用于控制阻断快速连点\nconst arrowActive = ref(props.arrowTrigger === 'always')\n\nconst listRect = reactive({\n  width: 0,\n  height: 0,\n})\nconst trackRect = reactive({\n  width: 0,\n  height: 0,\n  offset: 0,\n})\nconst itemRect = reactive({\n  width: 0,\n  height: 0,\n})\n\nconst { wrapper, isHover } = useHover()\n\nconst prev = ref<HTMLElement>()\nconst next = ref<HTMLElement>()\n\nconst isDisabled = computed(() => {\n  return props.disabled || itemStates.value.size <= props.viewSize\n})\nconst className = computed(() => {\n  return {\n    [nh.b()]: true,\n    [nh.bs('vars')]: true,\n    [nh.bm('inherit')]: props.inherit,\n    [nh.bm('vertical')]: props.vertical,\n    [nh.bm('disabled')]: isDisabled.value,\n  }\n})\nconst style = computed(() => {\n  return {\n    height:\n      props.vertical && props.height\n        ? `${props.height}${typeof props.height === 'number' ? 'px' : ''}`\n        : undefined,\n  }\n})\nconst listStyle = computed(() => {\n  return {\n    width: listRect.width ? `${listRect.width}px` : undefined,\n    height: listRect.height ? `${listRect.height}px` : undefined,\n  }\n})\nconst trackStyle = computed(() => {\n  return {\n    width: trackRect.width ? `${trackRect.width}px` : undefined,\n    height: trackRect.height ? `${trackRect.height}px` : undefined,\n    transform: trackRect.offset\n      ? `translate${props.vertical ? 'Y' : 'X'}(${\n          isRtl.value && !props.vertical ? `${-trackRect.offset}` : trackRect.offset\n        }px) translateZ(0)`\n      : undefined,\n    transitionDuration: isLocked.value ? '0ms' : `${props.speed}ms`,\n  }\n})\nconst disabledPrev = computed(() => {\n  return isDisabled.value || (!props.loop && currentActive.value <= 0)\n})\nconst disabledNext = computed(() => {\n  return (\n    isDisabled.value ||\n    (!props.loop && currentActive.value >= itemStates.value.size - props.viewSize)\n  )\n})\nconst arrowIcons = computed(() => {\n  return props.vertical\n    ? [icons.value.angleUp, icons.value.angleDown]\n    : isRtl.value\n      ? [icons.value.angleRight, icons.value.angleLeft]\n      : [icons.value.angleLeft, icons.value.angleRight]\n})\n\nwatch(\n  () => props.active,\n  value => {\n    handleWheel(value - props.activeOffset)\n  },\n)\nwatch(isHover, value => {\n  if (props.ignoreHover) return\n\n  if (value) {\n    handleMouseEnter()\n  } else {\n    handleMouseLeave()\n  }\n})\nwatch(() => props.viewSize, refresh)\nwatch(() => props.autoplay, setAutoplay)\n\nconst refreshLabels = debounceMinor(() => {\n  Array.from(itemStates.value).forEach((item, index) => {\n    item.label = index\n  })\n})\nconst updateItemRect = debounceMinor(() => {\n  itemStates.value.forEach(state => {\n    state.width = itemRect.width\n    state.height = itemRect.height\n  })\n})\nconst updateListRect = debounceMinor(() => {\n  trackRect.width = itemRect.width * itemStates.value.size\n  trackRect.height = itemRect.height * itemStates.value.size\n})\n\nprovide<CarouselState>(\n  CAROUSEL_STATE,\n  reactive({\n    vertical: toRef(props, 'vertical'),\n    increaseItem,\n    decreaseItem,\n    isItemActive,\n    handleSelect,\n  }),\n)\n\n// 初始化时不使用过渡效果\nlet inTransition = false\nlet shouldReset = false\n\nisLocked.value = true\n\nonMounted(() => {\n  computeItemRect()\n  handleWheel(props.active - props.activeOffset)\n  handleAfterMove()\n\n  setTimeout(() => {\n    isLocked.value = false\n    inTransition = false\n\n    setAutoplay()\n  }, 0)\n})\n\ndefineExpose({\n  itemStates,\n  currentActive,\n  arrowActive,\n  wrapper,\n  prev,\n  next,\n  refresh,\n})\n\nfunction increaseItem(item: ItemState) {\n  itemStates.value.add(item)\n  refreshLabels()\n  updateItemRect()\n  updateListRect()\n}\n\nfunction decreaseItem(item: ItemState) {\n  itemStates.value.delete(item)\n  refreshLabels()\n  updateListRect()\n}\n\nfunction isItemActive(label: number) {\n  return (currentActive.value + props.activeOffset) % itemStates.value.size === label\n}\n\nfunction computeItemRect() {\n  if (!wrapper.value) return\n\n  let prevFix = 0\n  let nextFix = 0\n\n  if (props.arrow === 'outside') {\n    if (props.vertical) {\n      prevFix = prev.value ? prev.value.offsetHeight : 0\n      nextFix = next.value ? next.value.offsetHeight : 0\n    } else {\n      prevFix = prev.value ? prev.value.offsetWidth : 0\n      nextFix = next.value ? next.value.offsetWidth : 0\n    }\n  }\n\n  if (props.vertical) {\n    listRect.width = 0\n    listRect.height = wrapper.value.offsetHeight - prevFix - nextFix\n\n    itemRect.width = 0\n    itemRect.height = listRect.height / props.viewSize\n  } else {\n    listRect.width = wrapper.value.offsetWidth - prevFix - nextFix\n    listRect.height = 0\n\n    itemRect.width = listRect.width / props.viewSize\n    itemRect.height = 0\n  }\n}\n\nfunction refresh() {\n  computeItemRect()\n  updateItemRect()\n  updateListRect()\n\n  if (trackRect.offset > 0) {\n    handlePrev(0)\n  } else {\n    handleNext(0)\n  }\n\n  setTimeout(() => {\n    isLocked.value = false\n    inTransition = false\n  }, 0)\n}\n\nfunction emitChangeEvent() {\n  const active = (currentActive.value + props.activeOffset) % itemStates.value.size\n\n  emit('update:active', active)\n  emitEvent(props.onChange, active)\n}\n\nfunction handlePrev(amount = 1) {\n  if (isDisabled.value || inTransition) return\n\n  const itemLength = props.vertical ? itemRect.height : itemRect.width\n  const itemList = Array.from(itemStates.value)\n  const itemCount = itemList.length\n  const targetIndex = (currentActive.value - amount + itemCount) % itemCount\n  const prevActive = currentActive.value\n\n  if (targetIndex >= itemCount - props.viewSize) {\n    if (!props.loop) return\n\n    if (trackRect.offset < 0) {\n      if (amount < currentActive.value) {\n        trackRect.offset = -targetIndex * itemLength\n      } else {\n        trackRect.offset = itemLength * (itemCount - targetIndex)\n\n        for (let i = targetIndex; i < itemCount; ++i) {\n          itemList[i].offset = -itemCount * itemLength\n        }\n      }\n    } else {\n      for (let i = 0; i < itemCount; ++i) {\n        itemList[i].offset =\n          i < targetIndex\n            ? 0\n            : (isRtl.value && !props.vertical ? itemCount : -itemCount) * itemLength\n      }\n\n      trackRect.offset = itemLength * (itemCount - targetIndex)\n    }\n\n    currentActive.value = targetIndex\n  } else {\n    currentActive.value = targetIndex\n    trackRect.offset = -currentActive.value * itemLength\n  }\n\n  shouldReset = currentActive.value <= itemCount - props.viewSize\n  inTransition = true\n\n  currentActive.value !== prevActive && emitChangeEvent()\n}\n\nfunction handleNext(amount = 1) {\n  if (isDisabled.value || inTransition) return\n\n  const itemLength = props.vertical ? itemRect.height : itemRect.width\n  const itemList = Array.from(itemStates.value)\n  const itemCount = itemList.length\n  const targetIndex = currentActive.value + amount\n  const prevActive = currentActive.value\n\n  if (targetIndex > itemStates.value.size - props.viewSize) {\n    if (!props.loop) return\n\n    if (trackRect.offset > 0) {\n      trackRect.offset = itemLength * (itemCount - targetIndex)\n    } else {\n      const anchorIndex = targetIndex + props.viewSize - itemCount\n\n      for (let i = 0, len = itemList.length; i < len; ++i) {\n        itemList[i].offset =\n          i < anchorIndex\n            ? (isRtl.value && !props.vertical ? -itemCount : itemCount) * itemLength\n            : 0\n      }\n\n      trackRect.offset = -targetIndex * itemLength\n    }\n\n    currentActive.value = targetIndex % itemCount\n  } else {\n    currentActive.value = targetIndex\n    trackRect.offset = -currentActive.value * itemLength\n  }\n\n  shouldReset = currentActive.value <= itemCount - props.viewSize\n  inTransition = true\n\n  currentActive.value !== prevActive && emitChangeEvent()\n}\n\nfunction handleWheel(active: number) {\n  if (isDisabled.value || inTransition || active === currentActive.value) return\n\n  const itemCount = itemStates.value.size\n\n  active = (active % itemCount) + (active < 0 ? itemCount : 0)\n\n  if (props.loop) {\n    let forward: number\n    let back: number\n\n    if (active > currentActive.value) {\n      forward = active - currentActive.value\n      back = itemCount - active + currentActive.value\n    } else {\n      forward = itemCount - currentActive.value + active\n      back = currentActive.value - active\n    }\n\n    if (forward < back) {\n      handleNext(forward)\n    } else if (forward > back) {\n      handlePrev(back)\n    } else {\n      if (trackRect.offset > 0) {\n        handlePrev(forward)\n      } else {\n        handleNext(forward)\n      }\n    }\n  } else {\n    if (active < currentActive.value) {\n      handlePrev(currentActive.value - active)\n    } else {\n      handleNext(active - currentActive.value)\n    }\n  }\n}\n\nfunction handleAfterMove() {\n  if (!shouldReset) {\n    inTransition = false\n  } else {\n    itemStates.value.forEach(state => {\n      state.offset = 0\n    })\n\n    shouldReset = false\n    isLocked.value = true\n\n    requestAnimationFrame(() => {\n      trackRect.offset = -currentActive.value * (props.vertical ? itemRect.height : itemRect.width)\n\n      requestAnimationFrame(() => {\n        isLocked.value = false\n        inTransition = false\n      })\n    })\n  }\n}\n\nfunction handlePrevClick() {\n  handlePrev(1)\n  emitEvent(props.onPrev, (currentActive.value + props.activeOffset) % itemStates.value.size)\n}\n\nfunction handleNextClick() {\n  handleNext(1)\n  emitEvent(props.onNext, (currentActive.value + props.activeOffset) % itemStates.value.size)\n}\n\nfunction handleSelect(label: number) {\n  emitEvent(props.onSelect, label)\n}\n\nconst { timer } = useSetTimeout()\n\nfunction setAutoplay() {\n  clearInterval(timer.play)\n\n  if (!props.autoplay) return\n\n  let waiting = 4000\n\n  if (typeof props.autoplay === 'number') {\n    waiting = props.autoplay\n  }\n\n  timer.play = window.setInterval(() => {\n    if (!props.loop && disabledNext.value) {\n      handleWheel(0)\n    } else {\n      handleNext()\n    }\n  }, waiting)\n}\n\nfunction handleMouseEnter() {\n  if (props.autoplay) {\n    clearTimeout(timer.hover)\n\n    timer.hover = setTimeout(() => {\n      clearInterval(timer.play)\n    }, hoverDelay.value)\n  }\n\n  if (props.arrowTrigger === 'hover' && props.arrow === 'inside') {\n    arrowActive.value = true\n  }\n}\n\nfunction handleMouseLeave() {\n  if (props.autoplay) {\n    clearTimeout(timer.hover)\n\n    timer.hover = setTimeout(() => {\n      setAutoplay()\n    }, hoverDelay.value)\n  }\n\n  if (props.arrowTrigger === 'hover') {\n    arrowActive.value = false\n  }\n}\n\nfunction isPointerDisabled(index: number) {\n  if (props.loop) return false\n\n  return !(\n    index >= props.activeOffset - 1 && index < itemStates.value.size - props.activeOffset - 1\n  )\n}\n</script>\n\n<template>\n  <div\n    ref=\"wrapper\"\n    :class=\"className\"\n    role=\"list\"\n    :style=\"style\"\n  >\n    <ResizeObserver @resize=\"refresh\">\n      <div\n        :style=\"{\n          position: 'relative',\n          display: 'flex',\n          flexDirection: props.vertical ? 'column' : 'row',\n          width: '100%'\n        }\"\n      >\n        <div\n          v-if=\"props.arrow !== 'none'\"\n          ref=\"prev\"\n          :class=\"[\n            nh.bem('arrow', props.arrow),\n            nh.bem('arrow', 'prev'),\n            arrowActive ? nh.bem('arrow', 'show') : ''\n          ]\"\n        >\n          <div\n            :class=\"{\n              [nh.be('handler')]: true,\n              [nh.bem('handler', 'disabled')]: disabledPrev\n            }\"\n            @click=\"handlePrevClick\"\n          >\n            <slot name=\"prevArrow\" :disabled=\"disabledPrev\">\n              <Renderer :renderer=\"props.slots.prevArrow\" :data=\"{ disabled: disabledPrev }\">\n                <Icon v-bind=\"arrowIcons[0]\" :scale=\"+(arrowIcons[0].scale || 1) * 1.5\"></Icon>\n              </Renderer>\n            </slot>\n          </div>\n        </div>\n        <div :class=\"nh.be('list')\" :style=\"listStyle\">\n          <div :class=\"nh.be('track')\" :style=\"trackStyle\" @transitionend.self=\"handleAfterMove\">\n            <slot> <Renderer :renderer=\"props.slots.default\"></Renderer>> </slot>\n          </div>\n        </div>\n        <div\n          v-if=\"props.arrow !== 'none'\"\n          ref=\"next\"\n          :class=\"[\n            nh.bem('arrow', props.arrow),\n            nh.bem('arrow', 'next'),\n            arrowActive ? nh.bem('arrow', 'show') : ''\n          ]\"\n        >\n          <div\n            :class=\"{\n              [nh.be('handler')]: true,\n              [nh.bem('handler', 'disabled')]: disabledNext\n            }\"\n            @click=\"handleNextClick\"\n          >\n            <slot name=\"nextArrow\" :disabled=\"disabledNext\">\n              <Renderer :renderer=\"props.slots.nextArrow\" :data=\"{ disabled: disabledNext }\">\n                <Icon v-bind=\"arrowIcons[1]\" :scale=\"+(arrowIcons[1].scale || 1) * 1.5\"></Icon>\n              </Renderer>\n            </slot>\n          </div>\n        </div>\n      </div>\n    </ResizeObserver>\n    <div v-if=\"props.pointer !== 'none'\" :class=\"nh.bem('pointers', props.pointer)\">\n      <div\n        v-for=\"index in itemStates.size\"\n        :key=\"index\"\n        :class=\"{\n          [nh.be('pointer')]: true,\n          [nh.bem('pointer', 'active')]:\n            index - 1 === (currentActive + props.activeOffset) % itemStates.size,\n          [nh.bem('pointer', 'disabled')]: isPointerDisabled(index - props.activeOffset - 1)\n        }\"\n        @click=\"handleWheel(index - props.activeOffset - 1)\"\n      >\n        <slot\n          name=\"pointer\"\n          :active=\"index - 1 === (currentActive + props.activeOffset) % itemStates.size\"\n        >\n          <Renderer\n            :renderer=\"props.slots.pointer\"\n            :data=\"{ active: index - 1 === (currentActive + props.activeOffset) % itemStates.size }\"\n          >\n            <span :class=\"nh.be('pointer-inner')\"></span>\n          </Renderer>\n        </slot>\n      </div>\n    </div>\n  </div>\n</template>\n"],"names":["_props","__props","props","useProps","value","emit","__emit","nh","useNameHelper","icons","useIcons","hoverDelay","useHoverDelay","isRtl","useRtl","itemStates","ref","currentActive","isLocked","arrowActive","listRect","reactive","trackRect","itemRect","wrapper","isHover","useHover","prev","next","isDisabled","computed","className","style","listStyle","trackStyle","disabledPrev","disabledNext","arrowIcons","watch","handleWheel","handleMouseEnter","handleMouseLeave","refresh","setAutoplay","refreshLabels","debounceMinor","item","index","updateItemRect","state","updateListRect","provide","CAROUSEL_STATE","toRef","increaseItem","decreaseItem","isItemActive","handleSelect","inTransition","shouldReset","onMounted","computeItemRect","handleAfterMove","__expose","label","prevFix","nextFix","handlePrev","handleNext","emitChangeEvent","active","emitEvent","amount","itemLength","itemList","itemCount","targetIndex","prevActive","i","anchorIndex","len","forward","back","handlePrevClick","handleNextClick","timer","useSetTimeout","waiting","isPointerDisabled","_createElementBlock","_createVNode","_unref","ResizeObserver","_createElementVNode","_normalizeStyle","_normalizeClass","_renderSlot","_ctx","Renderer","Icon","_mergeProps","_openBlock","_Fragment","_renderList"],"mappings":"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"}