{"version":3,"file":"swipe.mjs","sources":["../../../../../../../packages/components/swipe/src/swipe.tsx"],"sourcesContent":["import {\n  type CSSProperties,\n  type ExtractPropTypes,\n  type InjectionKey,\n  computed,\n  defineComponent,\n  nextTick,\n  onActivated,\n  onBeforeUnmount,\n  onDeactivated,\n  onMounted,\n  reactive,\n  ref,\n  watch,\n} from 'vue'\n\n// Utils\nimport {\n  onPopupReopen,\n  useChildren,\n  useEventListener,\n  useExpose,\n  useNamespace,\n  usePageVisibility,\n  useTouch,\n} from '@xzx-design/hooks'\nimport {\n  clamp,\n  doubleRaf,\n  isHidden,\n  makeNumericProp,\n  numericProp,\n  preventDefault,\n  truthProp,\n  windowHeight,\n  windowWidth,\n} from '@xzx-design/utils'\n\n// Types\nimport type {\n  SwipeExpose,\n  SwipeProvide,\n  SwipeState,\n  SwipeToOptions,\n} from './types'\n\nexport const swipeProps = {\n  loop: truthProp,\n  width: numericProp,\n  height: numericProp,\n  vertical: Boolean,\n  autoplay: makeNumericProp(0),\n  duration: makeNumericProp(500),\n  touchable: truthProp,\n  lazyRender: Boolean,\n  initialSwipe: makeNumericProp(0),\n  indicatorColor: String,\n  showIndicators: truthProp,\n  stopPropagation: truthProp,\n}\n\nexport type SwipeProps = ExtractPropTypes<typeof swipeProps>\n\nconst name = 'XzxSwipe'\n\nexport const SWIPE_KEY: InjectionKey<SwipeProvide> = Symbol(name)\n\nexport default defineComponent({\n  name,\n  __name: name,\n  props: swipeProps,\n  emits: ['change', 'dragStart', 'dragEnd'],\n  setup(props, { emit, slots }) {\n    const { b, bem } = useNamespace('swipe')\n\n    const root = ref<HTMLElement>()\n    const track = ref<HTMLElement>()\n    const state = reactive<SwipeState>({\n      rect: null,\n      width: 0,\n      height: 0,\n      offset: 0,\n      active: 0,\n      swiping: false,\n    })\n\n    // Whether the user is dragging the swipe\n    let dragging = false\n\n    const touch = useTouch()\n    const { children, linkChildren } = useChildren(SWIPE_KEY)\n\n    const count = computed(() => children.length)\n\n    const size = computed(() => state[props.vertical ? 'height' : 'width'])\n\n    const delta = computed(() =>\n      props.vertical ? touch.deltaY.value : touch.deltaX.value\n    )\n\n    const minOffset = computed(() => {\n      if (state.rect) {\n        const base = props.vertical ? state.rect.height : state.rect.width\n        return base - size.value * count.value\n      }\n      return 0\n    })\n\n    const maxCount = computed(() =>\n      size.value\n        ? Math.ceil(Math.abs(minOffset.value) / size.value)\n        : count.value\n    )\n\n    const trackSize = computed(() => count.value * size.value)\n\n    const activeIndicator = computed(\n      () => (state.active + count.value) % count.value\n    )\n\n    const isCorrectDirection = computed(() => {\n      const expect = props.vertical ? 'vertical' : 'horizontal'\n      return touch.direction.value === expect\n    })\n\n    const trackStyle = computed(() => {\n      const style: CSSProperties = {\n        transitionDuration: `${state.swiping ? 0 : props.duration}ms`,\n        transform: `translate${\n          props.vertical ? 'Y' : 'X'\n        }(${+state.offset.toFixed(2)}px)`,\n      }\n\n      if (size.value) {\n        const mainAxis = props.vertical ? 'height' : 'width'\n        const crossAxis = props.vertical ? 'width' : 'height'\n        style[mainAxis] = `${trackSize.value}px`\n        style[crossAxis] = props[crossAxis] ? `${props[crossAxis]}px` : ''\n      }\n\n      return style\n    })\n\n    const getTargetActive = (pace: number) => {\n      const { active } = state\n\n      if (pace) {\n        if (props.loop) {\n          return clamp(active + pace, -1, count.value)\n        }\n        return clamp(active + pace, 0, maxCount.value)\n      }\n      return active\n    }\n\n    const getTargetOffset = (targetActive: number, offset = 0) => {\n      let currentPosition = targetActive * size.value\n      if (!props.loop) {\n        currentPosition = Math.min(currentPosition, -minOffset.value)\n      }\n\n      let targetOffset = offset - currentPosition\n      if (!props.loop) {\n        targetOffset = clamp(targetOffset, minOffset.value, 0)\n      }\n\n      return targetOffset\n    }\n\n    const move = ({\n      pace = 0,\n      offset = 0,\n      emitChange,\n    }: {\n      pace?: number\n      offset?: number\n      emitChange?: boolean\n    }) => {\n      if (count.value <= 1) {\n        return\n      }\n\n      const { active } = state\n      const targetActive = getTargetActive(pace)\n      const targetOffset = getTargetOffset(targetActive, offset)\n\n      // auto move first and last swipe in loop mode\n      if (props.loop) {\n        if (children[0] && targetOffset !== minOffset.value) {\n          const outRightBound = targetOffset < minOffset.value\n          children[0].setOffset(outRightBound ? trackSize.value : 0)\n        }\n\n        if (children[count.value - 1] && targetOffset !== 0) {\n          const outLeftBound = targetOffset > 0\n          children[count.value - 1].setOffset(\n            outLeftBound ? -trackSize.value : 0\n          )\n        }\n      }\n\n      state.active = targetActive\n      state.offset = targetOffset\n\n      if (emitChange && targetActive !== active) {\n        emit('change', activeIndicator.value)\n      }\n    }\n\n    const correctPosition = () => {\n      state.swiping = true\n\n      if (state.active <= -1) {\n        move({ pace: count.value })\n      } else if (state.active >= count.value) {\n        move({ pace: -count.value })\n      }\n    }\n\n    // swipe to prev item\n    const prev = () => {\n      correctPosition()\n      touch.reset()\n\n      doubleRaf(() => {\n        state.swiping = false\n        move({\n          pace: -1,\n          emitChange: true,\n        })\n      })\n    }\n\n    // swipe to next item\n    const next = () => {\n      correctPosition()\n      touch.reset()\n\n      doubleRaf(() => {\n        state.swiping = false\n        move({\n          pace: 1,\n          emitChange: true,\n        })\n      })\n    }\n\n    let autoplayTimer: ReturnType<typeof setTimeout>\n\n    const stopAutoplay = () => clearTimeout(autoplayTimer)\n\n    const autoplay = () => {\n      stopAutoplay()\n      if (+props.autoplay > 0 && count.value > 1) {\n        autoplayTimer = setTimeout(() => {\n          next()\n          autoplay()\n        }, +props.autoplay)\n      }\n    }\n\n    // initialize swipe position\n    const initialize = (active = +props.initialSwipe) => {\n      if (!root.value) {\n        return\n      }\n\n      const cb = () => {\n        if (!isHidden(root)) {\n          const rect = {\n            width: root.value!.offsetWidth,\n            height: root.value!.offsetHeight,\n          }\n          state.rect = rect\n          state.width = +(props.width ?? rect.width)\n          state.height = +(props.height ?? rect.height)\n        }\n\n        if (count.value) {\n          active = Math.min(count.value - 1, active)\n\n          if (active === -1) {\n            active = count.value - 1\n          }\n        }\n\n        state.active = active\n        state.swiping = true\n        state.offset = getTargetOffset(active)\n        children.forEach((swipe) => {\n          swipe.setOffset(0)\n        })\n\n        autoplay()\n      }\n\n      // issue: https://github.com/vant-ui/vant/issues/10052\n      if (isHidden(root)) {\n        nextTick().then(cb)\n      } else {\n        cb()\n      }\n    }\n\n    const resize = () => initialize(state.active)\n\n    let touchStartTime: number\n\n    const onTouchStart = (event: TouchEvent) => {\n      if (\n        !props.touchable ||\n        // avoid resetting position on multi-finger touch\n        event.touches.length > 1\n      )\n        return\n\n      touch.start(event)\n\n      dragging = false\n      touchStartTime = Date.now()\n\n      stopAutoplay()\n      correctPosition()\n    }\n\n    const onTouchMove = (event: TouchEvent) => {\n      if (props.touchable && state.swiping) {\n        touch.move(event)\n\n        if (isCorrectDirection.value) {\n          const isEdgeTouch =\n            !props.loop &&\n            ((state.active === 0 && delta.value > 0) ||\n              (state.active === count.value - 1 && delta.value < 0))\n\n          if (!isEdgeTouch) {\n            preventDefault(event, props.stopPropagation)\n            move({ offset: delta.value })\n\n            if (!dragging) {\n              emit('dragStart', { index: activeIndicator.value })\n              dragging = true\n            }\n          }\n        }\n      }\n    }\n\n    const onTouchEnd = () => {\n      if (!props.touchable || !state.swiping) {\n        return\n      }\n\n      const duration = Date.now() - touchStartTime\n      const speed = delta.value / duration\n      const shouldSwipe =\n        Math.abs(speed) > 0.25 || Math.abs(delta.value) > size.value / 2\n\n      if (shouldSwipe && isCorrectDirection.value) {\n        const offset = props.vertical\n          ? touch.offsetY.value\n          : touch.offsetX.value\n\n        let pace = 0\n\n        if (props.loop) {\n          pace = offset > 0 ? (delta.value > 0 ? -1 : 1) : 0\n        } else {\n          pace = -Math[delta.value > 0 ? 'ceil' : 'floor'](\n            delta.value / size.value\n          )\n        }\n\n        move({\n          pace,\n          emitChange: true,\n        })\n      } else if (delta.value) {\n        move({ pace: 0 })\n      }\n\n      dragging = false\n      state.swiping = false\n\n      emit('dragEnd', { index: activeIndicator.value })\n      autoplay()\n    }\n\n    const swipeTo = (index: number, options: SwipeToOptions = {}) => {\n      correctPosition()\n      touch.reset()\n\n      doubleRaf(() => {\n        let targetIndex\n        if (props.loop && index === count.value) {\n          targetIndex = state.active === 0 ? 0 : index\n        } else {\n          targetIndex = index % count.value\n        }\n\n        if (options.immediate) {\n          doubleRaf(() => {\n            state.swiping = false\n          })\n        } else {\n          state.swiping = false\n        }\n\n        move({\n          pace: targetIndex - state.active,\n          emitChange: true,\n        })\n      })\n    }\n\n    const renderDot = (_: unknown, index: number) => {\n      const active = index === activeIndicator.value\n      const style = active\n        ? {\n            backgroundColor: props.indicatorColor,\n          }\n        : undefined\n\n      return <i style={style} class={bem('indicator', { active })} />\n    }\n\n    const renderIndicator = () => {\n      if (slots.indicator) {\n        return slots.indicator({\n          active: activeIndicator.value,\n          total: count.value,\n        })\n      }\n      if (props.showIndicators && count.value > 1) {\n        return (\n          <div class={bem('indicators', { vertical: props.vertical })}>\n            {Array.from({ length: count.value }).fill('').map(renderDot)}\n          </div>\n        )\n      }\n    }\n\n    useExpose<SwipeExpose>({\n      prev,\n      next,\n      state,\n      resize,\n      swipeTo,\n    })\n\n    linkChildren({\n      size,\n      props,\n      count,\n      activeIndicator,\n    })\n\n    watch(\n      () => props.initialSwipe,\n      (value) => initialize(+value)\n    )\n\n    watch(count, () => initialize(state.active))\n    watch(() => props.autoplay, autoplay)\n    watch(\n      [windowWidth, windowHeight, () => props.width, () => props.height],\n      resize\n    )\n    watch(usePageVisibility(), (visible) => {\n      if (visible === 'visible') {\n        autoplay()\n      } else {\n        stopAutoplay()\n      }\n    })\n\n    onMounted(initialize)\n    onActivated(() => initialize(state.active))\n    onPopupReopen(() => initialize(state.active))\n    onDeactivated(stopAutoplay)\n    onBeforeUnmount(stopAutoplay)\n\n    // useEventListener will set passive to `false` to eliminate the warning of Chrome\n    useEventListener('touchmove', onTouchMove, {\n      target: track,\n    })\n\n    return () => (\n      <div ref={root} class={b()}>\n        <div\n          ref={track}\n          style={trackStyle.value}\n          class={bem('track', { vertical: props.vertical })}\n          onTouchstartPassive={onTouchStart}\n          onTouchend={onTouchEnd}\n          onTouchcancel={onTouchEnd}\n        >\n          {slots.default?.()}\n        </div>\n        {renderIndicator()}\n      </div>\n    )\n  },\n})\n"],"names":["swipeProps","loop","truthProp","width","numericProp","height","vertical","Boolean","autoplay","makeNumericProp","duration","touchable","lazyRender","initialSwipe","indicatorColor","String","showIndicators","stopPropagation","name","SWIPE_KEY","Symbol","defineComponent","__name","props","emits","setup","emit","slots","b","bem","useNamespace","root","ref","track","state","reactive","rect","offset","active","swiping","dragging","touch","useTouch","children","linkChildren","useChildren","count","computed","length","size","delta","deltaY","value","deltaX","minOffset","base","maxCount","Math","ceil","abs","trackSize","activeIndicator","isCorrectDirection","expect","direction","trackStyle","style","transitionDuration","transform","toFixed","mainAxis","crossAxis","getTargetActive","pace","clamp","getTargetOffset","targetActive","currentPosition","min","targetOffset","move","emitChange","outRightBound","setOffset","outLeftBound","correctPosition","prev","reset","doubleRaf","next","autoplayTimer","stopAutoplay","clearTimeout","setTimeout","initialize","cb","isHidden","offsetWidth","offsetHeight","forEach","swipe","nextTick","then","resize","touchStartTime","onTouchStart","event","touches","start","Date","now","onTouchMove","isEdgeTouch","preventDefault","index","onTouchEnd","speed","shouldSwipe","offsetY","offsetX","swipeTo","options","targetIndex","immediate","renderDot","_","backgroundColor","undefined","_createVNode","renderIndicator","indicator","total","Array","from","fill","map","useExpose","watch","windowWidth","windowHeight","usePageVisibility","visible","onMounted","onActivated","onPopupReopen","onDeactivated","onBeforeUnmount","useEventListener","target","default"],"mappings":"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"}