{"version":3,"file":"select-column.mjs","sources":["../../../../../../../packages/components/select/src/select-column.tsx"],"sourcesContent":["import {\n  type InjectionKey,\n  type PropType,\n  computed,\n  defineComponent,\n  ref,\n  watchEffect,\n} from 'vue'\nimport {\n  type Numeric,\n  clamp,\n  createNamespace,\n  makeArrayProp,\n  makeRequiredProp,\n  numericProp,\n  preventDefault,\n} from '@xzx-design/utils'\nimport {\n  useEventListener,\n  useExpose,\n  useParent,\n  useTouch,\n} from '@xzx-design/hooks'\nimport { findIndexOfEnabledOption, getElementTranslateY } from './utils'\n\n// Types\nimport type {\n  SelectColumnProvide,\n  SelectFieldNames,\n  SelectOption,\n} from './types'\n\nconst DEFAULT_DURATION = 200\n\n// 惯性滑动思路:\n// 在手指离开屏幕时，如果和上一次 move 时的间隔小于 `MOMENTUM_TIME` 且 move\n// 距离大于 `MOMENTUM_DISTANCE` 时，执行惯性滑动\nconst MOMENTUM_TIME = 300\nconst MOMENTUM_DISTANCE = 15\n\nconst [name, bem] = createNamespace('select-column')\n\nexport const PICKER_KEY: InjectionKey<SelectColumnProvide> = Symbol(name)\n\nexport default defineComponent({\n  name,\n  __name: name,\n  props: {\n    value: numericProp,\n    fields: makeRequiredProp(Object as PropType<Required<SelectFieldNames>>),\n    options: makeArrayProp<SelectOption>(),\n    readonly: Boolean,\n    allowHtml: Boolean,\n    optionHeight: makeRequiredProp(Number),\n    swipeDuration: makeRequiredProp(numericProp),\n    visibleOptionNum: makeRequiredProp(numericProp),\n  },\n\n  emits: ['change', 'clickOption', 'scrollInto'],\n\n  setup(props, { emit, slots }) {\n    let moving: boolean\n    let startOffset: number\n    let touchStartTime: number\n    let momentumOffset: number\n    let transitionEndTrigger: null | (() => void)\n\n    const root = ref<HTMLElement>()\n    const wrapper = ref<HTMLElement>()\n    const currentOffset = ref(0)\n    const currentDuration = ref(0)\n    const touch = useTouch()\n\n    const count = () => props.options.length\n\n    const baseOffset = () =>\n      (props.optionHeight * (+props.visibleOptionNum - 1)) / 2\n\n    const updateValueByIndex = (index: number) => {\n      let enabledIndex = findIndexOfEnabledOption(props.options, index)\n      const offset = -enabledIndex * props.optionHeight\n\n      const trigger = () => {\n        if (enabledIndex > count() - 1) {\n          enabledIndex = findIndexOfEnabledOption(props.options, index)\n        }\n\n        const value = props.options[enabledIndex][props.fields.value]\n        if (value !== props.value) {\n          emit('change', value)\n        }\n      }\n\n      // trigger the change event after transitionend when moving\n      if (moving && offset !== currentOffset.value) {\n        transitionEndTrigger = trigger\n      } else {\n        trigger()\n      }\n\n      currentOffset.value = offset\n    }\n\n    const isReadonly = () => props.readonly || !props.options.length\n\n    const onClickOption = (index: number) => {\n      if (moving || isReadonly()) {\n        return\n      }\n\n      transitionEndTrigger = null\n      currentDuration.value = DEFAULT_DURATION\n      updateValueByIndex(index)\n      emit('clickOption', props.options[index])\n    }\n\n    const getIndexByOffset = (offset: number) =>\n      clamp(Math.round(-offset / props.optionHeight), 0, count() - 1)\n\n    const currentIndex = computed(() => getIndexByOffset(currentOffset.value))\n\n    const momentum = (distance: number, duration: number) => {\n      const speed = Math.abs(distance / duration)\n\n      distance = currentOffset.value + (speed / 0.003) * (distance < 0 ? -1 : 1)\n\n      const index = getIndexByOffset(distance)\n\n      currentDuration.value = +props.swipeDuration\n      updateValueByIndex(index)\n    }\n\n    const stopMomentum = () => {\n      moving = false\n      currentDuration.value = 0\n\n      if (transitionEndTrigger) {\n        transitionEndTrigger()\n        transitionEndTrigger = null\n      }\n    }\n\n    const onTouchStart = (event: TouchEvent) => {\n      if (isReadonly()) {\n        return\n      }\n\n      touch.start(event)\n\n      if (moving) {\n        const translateY = getElementTranslateY(wrapper.value!)\n        currentOffset.value = Math.min(0, translateY - baseOffset())\n      }\n\n      currentDuration.value = 0\n      startOffset = currentOffset.value\n      touchStartTime = Date.now()\n      momentumOffset = startOffset\n      transitionEndTrigger = null\n    }\n\n    const onTouchMove = (event: TouchEvent) => {\n      if (isReadonly()) {\n        return\n      }\n\n      touch.move(event)\n\n      if (touch.isVertical()) {\n        moving = true\n        preventDefault(event, true)\n      }\n\n      const newOffset = clamp(\n        startOffset + touch.deltaY.value,\n        -(count() * props.optionHeight),\n        props.optionHeight\n      )\n\n      const newIndex = getIndexByOffset(newOffset)\n      if (newIndex !== currentIndex.value) {\n        emit('scrollInto', props.options[newIndex])\n      }\n\n      currentOffset.value = newOffset\n\n      const now = Date.now()\n      if (now - touchStartTime > MOMENTUM_TIME) {\n        touchStartTime = now\n        momentumOffset = newOffset\n      }\n    }\n\n    const onTouchEnd = () => {\n      if (isReadonly()) {\n        return\n      }\n\n      const distance = currentOffset.value - momentumOffset\n      const duration = Date.now() - touchStartTime\n      const startMomentum =\n        duration < MOMENTUM_TIME && Math.abs(distance) > MOMENTUM_DISTANCE\n\n      if (startMomentum) {\n        momentum(distance, duration)\n        return\n      }\n\n      const index = getIndexByOffset(currentOffset.value)\n      currentDuration.value = DEFAULT_DURATION\n      updateValueByIndex(index)\n\n      // compatible with desktop scenario\n      // use setTimeout to skip the click event emitted after touchstart\n      setTimeout(() => {\n        moving = false\n      }, 0)\n    }\n\n    const renderOptions = () => {\n      const optionStyle = {\n        height: `${props.optionHeight}px`,\n      }\n\n      return props.options.map((option, index) => {\n        const text = option[props.fields.text]\n        const { disabled } = option\n        const value: Numeric = option[props.fields.value]\n        const data = {\n          role: 'button',\n          style: optionStyle,\n          tabindex: disabled ? -1 : 0,\n          class: [\n            bem('item', {\n              disabled,\n              selected: value === props.value,\n            }),\n            option.className,\n          ],\n          onClick: () => onClickOption(index),\n        }\n\n        const childData = {\n          class: 'xzx-ellipsis',\n          [props.allowHtml ? 'innerHTML' : 'textContent']: text,\n        }\n\n        return (\n          <li {...data}>\n            {slots.option ? (\n              slots.option(option, index)\n            ) : (\n              <div {...childData} />\n            )}\n          </li>\n        )\n      })\n    }\n\n    useParent(PICKER_KEY)\n    useExpose({ stopMomentum })\n\n    watchEffect(() => {\n      const index = moving\n        ? Math.floor(-currentOffset.value / props.optionHeight)\n        : props.options.findIndex(\n            (option) => option[props.fields.value] === props.value\n          )\n      const enabledIndex = findIndexOfEnabledOption(props.options, index)\n      const offset = -enabledIndex * props.optionHeight\n      if (moving && enabledIndex < index) stopMomentum()\n      currentOffset.value = offset\n    })\n\n    // useEventListener will set passive to `false` to eliminate the warning of Chrome\n    useEventListener('touchmove', onTouchMove, {\n      target: root,\n    })\n\n    return () => (\n      <div\n        ref={root}\n        class={bem()}\n        onTouchstartPassive={onTouchStart}\n        onTouchend={onTouchEnd}\n        onTouchcancel={onTouchEnd}\n      >\n        <ul\n          ref={wrapper}\n          style={{\n            transform: `translate3d(0, ${\n              currentOffset.value + baseOffset()\n            }px, 0)`,\n            transitionDuration: `${currentDuration.value}ms`,\n            transitionProperty: currentDuration.value ? 'all' : 'none',\n          }}\n          class={bem('wrapper')}\n          onTransitionend={stopMomentum}\n        >\n          {renderOptions()}\n        </ul>\n      </div>\n    )\n  },\n})\n"],"names":["DEFAULT_DURATION","MOMENTUM_TIME","MOMENTUM_DISTANCE","name","bem","createNamespace","PICKER_KEY","Symbol","defineComponent","__name","props","value","numericProp","fields","makeRequiredProp","Object","options","makeArrayProp","readonly","Boolean","allowHtml","optionHeight","Number","swipeDuration","visibleOptionNum","emits","setup","emit","slots","moving","startOffset","touchStartTime","momentumOffset","transitionEndTrigger","root","ref","wrapper","currentOffset","currentDuration","touch","useTouch","count","length","baseOffset","updateValueByIndex","index","enabledIndex","findIndexOfEnabledOption","offset","trigger","isReadonly","onClickOption","getIndexByOffset","clamp","Math","round","currentIndex","computed","momentum","distance","duration","speed","abs","stopMomentum","onTouchStart","event","start","translateY","getElementTranslateY","min","Date","now","onTouchMove","move","isVertical","preventDefault","newOffset","deltaY","newIndex","onTouchEnd","startMomentum","setTimeout","renderOptions","optionStyle","height","map","option","text","disabled","data","role","style","tabindex","class","selected","className","onClick","childData","_createVNode","useParent","useExpose","watchEffect","floor","findIndex","useEventListener","target","transform","transitionDuration","transitionProperty"],"mappings":"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"}