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