{"version":3,"file":"native-scroll.mjs","sources":["../../../components/native-scroll/native-scroll.tsx"],"sourcesContent":["import { Scrollbar } from '@/components/scrollbar'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport {\n  computed,\n  defineComponent,\n  nextTick,\n  onBeforeUnmount,\n  ref,\n  renderSlot,\n  shallowReadonly,\n  toRef,\n  watch\n} from 'vue'\n\nimport { emitEvent, useNameHelper, useProps } from '@vexip-ui/config'\nimport { createSlotRender, flatVNodes, useRtl } from '@vexip-ui/hooks'\nimport { USE_TOUCH, createEventEmitter, isClient, isElement, isTrue } from '@vexip-ui/utils'\nimport { nativeScrollProps } from './props'\nimport { useScrollWrapper } from './hooks'\n\nimport type { EventHandler } from '@vexip-ui/utils'\nimport type { NativeScrollMode } from './symbol'\n\nconst scrollModes = Object.freeze<NativeScrollMode[]>(['horizontal', 'vertical', 'both'])\n\nconst MOVE_EVENT = 'mousemove'\nconst UP_EVENT = 'mouseup'\n\nexport default defineComponent({\n  name: 'NativeScroll',\n  inheritAttrs: false,\n  props: nativeScrollProps,\n  emits: [],\n  setup(_props, { attrs, slots, expose }) {\n    const props = useProps('nativeScroll', _props, {\n      scrollClass: null,\n      scrollStyle: null,\n      scrollAttrs: null,\n      mode: {\n        default: 'vertical',\n        validator: value => scrollModes.includes(value)\n      },\n      width: '',\n      height: '',\n      disabled: false,\n      pointer: false,\n      scrollX: {\n        default: 0,\n        static: true\n      },\n      scrollY: {\n        default: 0,\n        static: true\n      },\n      useXBar: false,\n      useYBar: false,\n      barFade: 1500,\n      barClass: null,\n      autoplay: false,\n      playWaiting: 500,\n      appear: false,\n      barDuration: null,\n      useBarTrack: false,\n      scrollTag: 'div',\n      observeDeep: false,\n      scrollOnly: false\n    })\n\n    const emitter = createEventEmitter()\n\n    const nh = useNameHelper('native-scroll')\n    const { isRtl } = useRtl()\n    const usingBar = ref(false)\n    const scrolling = ref(false)\n\n    const wrapper = ref<HTMLElement>()\n    const xBar = ref<InstanceType<typeof Scrollbar>>()\n    const yBar = ref<InstanceType<typeof Scrollbar>>()\n\n    let initialized = false\n\n    const {\n      contentEl,\n\n      syncing,\n      content,\n      x,\n      y,\n      percentX,\n      percentY,\n      xScrollLimit,\n      yScrollLimit,\n      enableXScroll,\n      enableYScroll,\n      xBarLength,\n      yBarLength,\n\n      handleResize,\n      setScrollX,\n      setScrollY,\n      computePercent,\n      refresh,\n      scrollTo,\n      scrollBy,\n      scrollToElement,\n      triggerUpdate\n    } = useScrollWrapper({\n      mode: toRef(props, 'mode'),\n      disabled: toRef(props, 'disabled'),\n      appear: toRef(props, 'appear'),\n      // width: toRef(props, 'width'),\n      // height: toRef(props, 'height'),\n      scrollX: toRef(props, 'scrollX'),\n      scrollY: toRef(props, 'scrollY'),\n      onResize: entry => {\n        emitEvent(props.onResize, entry)\n      },\n      // onBeforeRefresh: stopAutoplay,\n      onAfterRefresh: () => {\n        syncBarScroll()\n\n        if (!initialized) {\n          initialized = true\n          startAutoplay()\n        }\n      }\n    })\n\n    const slotParams = shallowReadonly({\n      getState,\n      refresh,\n      scrollTo,\n      scrollBy,\n      scrollToElement,\n      ensureInView\n    })\n\n    /* autoplay */\n    const canPlay = ref(false)\n\n    const canAutoplay = computed(() => {\n      return (\n        props.mode !== 'both' &&\n        (isTrue(props.autoplay) || +props.autoplay > 1000) &&\n        ((props.mode === 'horizontal' && enableXScroll.value) ||\n          (props.mode === 'vertical' && enableYScroll.value))\n      )\n    })\n\n    watch([() => props.autoplay, () => props.playWaiting, contentEl], () => {\n      stopAutoplay()\n      nextTick(startAutoplay)\n    })\n\n    let playTimer: ReturnType<typeof setTimeout>\n    let startTimer: ReturnType<typeof setTimeout>\n    let endTimer: ReturnType<typeof setTimeout>\n\n    onBeforeUnmount(stopAutoplay)\n\n    function startAutoplay() {\n      stopAutoplay()\n\n      if (!canAutoplay.value || !contentEl.value) return\n\n      const mode = props.mode\n      const distance = mode === 'horizontal' ? 'offsetWidth' : 'offsetHeight'\n      const limit = mode === 'horizontal' ? xScrollLimit : yScrollLimit\n      const prop = mode === 'horizontal' ? x : y\n      const waiting = props.playWaiting < 20 ? 20 : props.playWaiting\n      const setScroll = mode === 'horizontal' ? setScrollX : setScrollY\n\n      let playSpeed = 0.5\n\n      if (typeof props.autoplay === 'number') {\n        playSpeed = (contentEl.value[distance] / props.autoplay) * 16\n      }\n\n      const scroll = () => {\n        setScroll(prop.value + playSpeed)\n\n        if (prop.value >= limit.value) {\n          setScroll(limit.value)\n          canPlay.value = false\n\n          computePercent()\n          triggerUpdate()\n          syncBarScroll()\n\n          endTimer = setTimeout(() => {\n            scrollTo(0, 0, 500)\n\n            startTimer = setTimeout(() => {\n              canPlay.value = true\n              scroll()\n            }, 500 + waiting)\n          }, waiting)\n        } else {\n          computePercent()\n          triggerUpdate()\n          syncBarScroll()\n\n          if (canPlay.value) {\n            requestAnimationFrame(scroll)\n          }\n        }\n      }\n\n      playTimer = setTimeout(() => {\n        canPlay.value = true\n        scroll()\n      }, waiting)\n    }\n\n    function stopAutoplay() {\n      canPlay.value = false\n\n      clearTimeout(playTimer)\n      clearTimeout(startTimer)\n      clearTimeout(endTimer)\n    }\n    /* autoplay */\n\n    const className = computed(() => {\n      return [\n        nh.b(),\n        nh.bm(props.mode),\n        {\n          [nh.bm('inherit')]: props.inherit,\n          [nh.bm('scrolling')]: scrolling.value,\n          [nh.bm('using-bar')]: usingBar.value\n        }\n      ]\n    })\n    const style = computed(() => {\n      const { width, height } = props\n\n      return {\n        width: width\n          ? typeof width === 'string'\n            ? Number.isNaN(Number(width))\n              ? width\n              : `${Number(width)}px`\n            : `${width}px`\n          : undefined,\n        height: height\n          ? typeof height === 'string'\n            ? Number.isNaN(Number(height))\n              ? height\n              : `${Number(height)}px`\n            : `${height}px`\n          : undefined\n      }\n    })\n    const wrapperClass = computed(() => {\n      return [props.scrollAttrs?.class, props.scrollClass, nh.be('wrapper')]\n    })\n    const barFade = computed(() => (canAutoplay.value ? 0 : props.barFade))\n\n    const willMutate = ref(false)\n\n    function handleMutate() {\n      willMutate.value = true\n      nextTick(refresh)\n      requestAnimationFrame(() => {\n        willMutate.value = false\n      })\n    }\n\n    let observer: MutationObserver | undefined\n\n    function createMutation() {\n      if (!isClient || !contentEl.value) return\n\n      observer = new MutationObserver(handleMutate)\n      observer.observe(contentEl.value, {\n        childList: true\n      })\n    }\n\n    function clearMutation() {\n      observer?.disconnect()\n      observer = undefined\n    }\n\n    watch(\n      contentEl,\n      () => {\n        clearMutation()\n        createMutation()\n      },\n      { immediate: true }\n    )\n    watch(enableXScroll, value => {\n      emitEvent(props.onXEnabledChange, value)\n    })\n    watch(enableYScroll, value => {\n      emitEvent(props.onYEnabledChange, value)\n    })\n\n    expose({\n      x,\n      y,\n      percentX,\n      percentY,\n      xScrollLimit,\n      yScrollLimit,\n\n      xBarLength,\n      yBarLength,\n      enableXScroll,\n      enableYScroll,\n\n      wrapper,\n      content: contentEl,\n      xBar,\n      yBar,\n\n      refresh,\n      scrollTo,\n      scrollBy,\n      scrollToElement,\n      ensureInView,\n      getXScrollLimit,\n      getYScrollLimit,\n      addScrollListener,\n      removeScrollListener\n    })\n\n    function getCommonPayload() {\n      return {\n        clientX: (isRtl.value ? -1 : 1) * x.value,\n        clientY: y.value,\n        percentX: percentX.value,\n        percentY: percentY.value\n      }\n    }\n\n    function syncBarScroll() {\n      xBar.value?.handleScroll(percentX.value)\n      yBar.value?.handleScroll(percentY.value)\n    }\n\n    function handleMouseDown(event: MouseEvent) {\n      if (!props.pointer || event.button !== 0 || USE_TOUCH) {\n        return false\n      }\n\n      handlePointerDown(event)\n    }\n\n    // 记录滚动开始位置\n    let xScrollStartAt = 0\n    let yScrollStartAt = 0\n\n    // 记录滚动开始鼠标位置\n    let cursorXPosition = 0\n    let cursorYPosition = 0\n\n    function handlePointerDown(event: MouseEvent) {\n      if (!enableXScroll.value && !enableYScroll.value) {\n        return false\n      }\n\n      prepareScroll()\n\n      xScrollStartAt = x.value\n      yScrollStartAt = y.value\n      cursorXPosition = event.clientX\n      cursorYPosition = event.clientY\n\n      document.addEventListener(MOVE_EVENT, handlePointerMove)\n      document.addEventListener(UP_EVENT, handlePointerUp)\n\n      emitEvent(props.onScrollStart, getCommonPayload())\n    }\n\n    function handlePointerMove(event: MouseEvent) {\n      event.stopPropagation()\n      event.preventDefault()\n\n      scrolling.value = true\n\n      if (enableXScroll.value) {\n        setScrollX(xScrollStartAt - (event.clientX - cursorXPosition))\n      }\n\n      if (enableYScroll.value) {\n        setScrollY(yScrollStartAt - (event.clientY - cursorYPosition))\n      }\n\n      computePercent()\n      triggerUpdate()\n      syncBarScroll()\n      emitScrollEvent(props.mode)\n    }\n\n    function handlePointerUp() {\n      document.removeEventListener(MOVE_EVENT, handlePointerMove)\n      document.removeEventListener(UP_EVENT, handlePointerUp)\n\n      emitEvent(props.onScrollEnd, getCommonPayload())\n      startAutoplay()\n    }\n\n    function handleWheel(event: WheelEvent, type: 'vertical' | 'horizontal') {\n      const isVerticalScroll = enableYScroll.value && type === 'vertical'\n      const isHorizontalScroll = enableXScroll.value && type === 'horizontal'\n      const sign = event.deltaY > 0 ? 1 : -1\n\n      emitEvent(props.onWheel, event, type)\n\n      if (isVerticalScroll || isHorizontalScroll) {\n        const maxLimit = isVerticalScroll ? yScrollLimit.value : xScrollLimit.value\n        const scroll = isVerticalScroll ? y.value : x.value\n\n        if (sign > 0 ? scroll < maxLimit : scroll > 0) {\n          event.stopPropagation()\n\n          return false\n        }\n      }\n    }\n\n    function handleScroll(event: UIEvent) {\n      if (!contentEl.value || syncing.value) return\n\n      event.stopPropagation()\n\n      const type = contentEl.value?.scrollLeft !== x.value ? 'horizontal' : 'vertical'\n\n      y.value = contentEl.value.scrollTop\n      x.value = contentEl.value.scrollLeft\n\n      computePercent()\n      triggerUpdate()\n      syncBarScroll()\n      emitScrollEvent(type)\n    }\n\n    function prepareScroll() {\n      stopAutoplay()\n    }\n\n    function handleBarScrollStart(type: 'vertical' | 'horizontal') {\n      usingBar.value = true\n      prepareScroll()\n      emitEvent(props.onBarScrollStart, {\n        ...getCommonPayload(),\n        type\n      })\n    }\n\n    function handleBarScrollEnd(type: 'vertical' | 'horizontal') {\n      usingBar.value = false\n      startAutoplay()\n      emitEvent(props.onBarScrollEnd, {\n        ...getCommonPayload(),\n        type\n      })\n    }\n\n    function handleXBarScroll(percent: number) {\n      percentX.value = percent\n      setScrollX((percent * xScrollLimit.value) / 100)\n      triggerUpdate()\n      emitEvent(props.onBarScroll, {\n        ...getCommonPayload(),\n        type: 'horizontal'\n      })\n      emitScrollEvent('horizontal')\n    }\n\n    function handleYBarScroll(percent: number) {\n      percentY.value = percent\n      setScrollY((percent * yScrollLimit.value) / 100)\n      triggerUpdate()\n      emitEvent(props.onBarScroll, {\n        ...getCommonPayload(),\n        type: 'vertical'\n      })\n      emitScrollEvent('vertical')\n    }\n\n    function emitScrollEvent(type: NativeScrollMode) {\n      emitEvent(props.onScroll, {\n        ...getCommonPayload(),\n        type\n      })\n      emitter.emit('scroll', {\n        ...getCommonPayload(),\n        type\n      })\n    }\n\n    function getState() {\n      const { clientX: scrollX, clientY: scrollY, percentX, percentY } = getCommonPayload()\n\n      return {\n        scrollX,\n        scrollY,\n        percentX,\n        percentY,\n        enableXScroll: enableXScroll.value,\n        enableYScroll: enableYScroll.value\n      }\n    }\n\n    function getXScrollLimit() {\n      return [0, xScrollLimit.value]\n    }\n\n    function getYScrollLimit() {\n      return [0, yScrollLimit.value]\n    }\n\n    function ensureInView(el: string | Element, duration?: number, offset = 0) {\n      if (!wrapper.value) return Promise.resolve()\n\n      if (typeof el === 'string') {\n        el = wrapper.value.querySelector(el)!\n      }\n\n      if (!isElement(el)) return Promise.resolve()\n\n      const wrapperRect = wrapper.value.getBoundingClientRect()\n      const elRect = el.getBoundingClientRect()\n\n      let clientX = 0\n      let clientY = 0\n\n      if (props.mode !== 'vertical') {\n        if (elRect.left < wrapperRect.left + offset) {\n          clientX = elRect.left - wrapperRect.left - offset\n        } else if (elRect.right > wrapperRect.right - offset) {\n          clientX = elRect.right - wrapperRect.right + offset\n        }\n      }\n\n      if (props.mode !== 'horizontal') {\n        if (elRect.top < wrapperRect.top + offset) {\n          clientY = elRect.top - wrapperRect.top - offset\n        } else if (elRect.bottom > wrapperRect.bottom - offset) {\n          clientY = elRect.bottom - wrapperRect.bottom + offset\n        }\n      }\n\n      return scrollBy(clientX, clientY, duration)\n    }\n\n    function addScrollListener(listener: EventHandler) {\n      emitter.on('scroll', listener)\n    }\n\n    function removeScrollListener(listener: EventHandler) {\n      emitter.off('scroll', listener)\n    }\n\n    function renderContent() {\n      const Content = (props.scrollTag || 'div') as any\n      const children =\n        props.observeDeep && slots.default ? renderSlot(slots, 'default', slotParams).children : []\n\n      return (\n        <Content\n          {...props.scrollAttrs}\n          {...(props.scrollOnly ? attrs : {})}\n          ref={contentEl}\n          class={wrapperClass.value}\n          style={[props.scrollAttrs?.style, props.scrollStyle, props.scrollOnly && style.value]}\n          onMousedown={handleMouseDown}\n          onWheelPassive={(event: WheelEvent) =>\n            handleWheel(event, event.shiftKey ? 'horizontal' : 'vertical')}\n          onScroll={handleScroll}\n        >\n          {slots.extra && (\n            <div\n              class={nh.be('extra')}\n              style={{\n                width: willMutate.value ? undefined : `${content.scrollWidth}px`,\n                height: willMutate.value ? undefined : `${content.scrollHeight}px`\n              }}\n            >\n              <div\n                class={nh.be('extra-inner')}\n                style={{\n                  width: `${content.offsetWidth}px`,\n                  height: `${content.offsetHeight}px`\n                }}\n              >\n                {renderSlot(slots, 'extra', slotParams)}\n              </div>\n            </div>\n          )}\n          {slots.default &&\n            (props.observeDeep\n              ? flatVNodes(children).map((vnode, index) => {\n                return (\n                  <ResizeObserver key={vnode.key ?? index} on-resize={handleResize}>\n                    {() => vnode}\n                  </ResizeObserver>\n                )\n              })\n              : renderSlot(slots, 'default', slotParams))}\n        </Content>\n      )\n    }\n\n    return () => {\n      if (props.scrollOnly) {\n        return <ResizeObserver on-resize={handleResize}>{renderContent()}</ResizeObserver>\n      }\n\n      return (\n        <div\n          {...attrs}\n          ref={wrapper}\n          class={[className.value, attrs.class]}\n          style={[style.value, attrs.style as any]}\n        >\n          {createSlotRender(slots, ['prefix-trap', 'prefixTrap'])?.()}\n          <ResizeObserver on-resize={handleResize}>{renderContent()}</ResizeObserver>\n          {props.useXBar && (\n            <Scrollbar\n              ref={xBar}\n              inherit\n              placement={'bottom'}\n              class={[nh.bem('bar', 'horizontal'), props.barClass]}\n              fade={barFade.value}\n              bar-length={xBarLength.value}\n              disabled={!enableXScroll.value}\n              appear={props.appear}\n              duration={props.barDuration}\n              use-track={props.useBarTrack}\n              onScrollStart={() => handleBarScrollStart('horizontal')}\n              onScroll={handleXBarScroll}\n              onScrollEnd={() => handleBarScrollEnd('horizontal')}\n            ></Scrollbar>\n          )}\n          {props.useYBar && (\n            <Scrollbar\n              ref={yBar}\n              inherit\n              placement={'right'}\n              class={[nh.bem('bar', 'vertical'), props.barClass]}\n              fade={barFade.value}\n              bar-length={yBarLength.value}\n              disabled={!enableYScroll.value}\n              appear={props.appear}\n              duration={props.barDuration}\n              use-track={props.useBarTrack}\n              onScrollStart={() => handleBarScrollStart('vertical')}\n              onScroll={handleYBarScroll}\n              onScrollEnd={() => handleBarScrollEnd('vertical')}\n            ></Scrollbar>\n          )}\n          {createSlotRender(slots, ['suffix-trap', 'suffixTrap'])?.()}\n        </div>\n      )\n    }\n  }\n})\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","scrollModes","freeze","MOVE_EVENT","UP_EVENT","defineComponent","name","inheritAttrs","props","nativeScrollProps","emits","setup","_props","attrs","slots","expose","useProps","scrollClass","scrollStyle","scrollAttrs","mode","default","validator","value","includes","width","height","disabled","pointer","scrollX","static","scrollY","useXBar","useYBar","barFade","barClass","autoplay","playWaiting","appear","barDuration","useBarTrack","scrollTag","observeDeep","scrollOnly","emitter","createEventEmitter","nh","useNameHelper","isRtl","useRtl","usingBar","ref","scrolling","wrapper","xBar","yBar","initialized","contentEl","syncing","content","x","y","percentX","percentY","xScrollLimit","yScrollLimit","enableXScroll","enableYScroll","xBarLength","yBarLength","handleResize","setScrollX","setScrollY","computePercent","refresh","scrollTo","scrollBy","scrollToElement","triggerUpdate","useScrollWrapper","toRef","onResize","entry","emitEvent","onAfterRefresh","syncBarScroll","startAutoplay","slotParams","shallowReadonly","getState","ensureInView","canPlay","canAutoplay","computed","isTrue","watch","stopAutoplay","nextTick","playTimer","startTimer","endTimer","onBeforeUnmount","distance","limit","prop","waiting","setScroll","playSpeed","scroll","setTimeout","requestAnimationFrame","clearTimeout","className","b","bm","inherit","style","Number","isNaN","undefined","wrapperClass","class","be","willMutate","handleMutate","observer","createMutation","isClient","MutationObserver","observe","childList","clearMutation","disconnect","immediate","onXEnabledChange","onYEnabledChange","getXScrollLimit","getYScrollLimit","addScrollListener","removeScrollListener","getCommonPayload","clientX","clientY","handleScroll","handleMouseDown","event","button","USE_TOUCH","handlePointerDown","xScrollStartAt","yScrollStartAt","cursorXPosition","cursorYPosition","prepareScroll","document","addEventListener","handlePointerMove","handlePointerUp","onScrollStart","stopPropagation","preventDefault","emitScrollEvent","removeEventListener","onScrollEnd","handleWheel","type","isVerticalScroll","isHorizontalScroll","sign","deltaY","onWheel","maxLimit","scrollLeft","scrollTop","handleBarScrollStart","onBarScrollStart","handleBarScrollEnd","onBarScrollEnd","handleXBarScroll","percent","onBarScroll","handleYBarScroll","onScroll","emit","el","duration","offset","querySelector","isElement","Promise","resolve","wrapperRect","getBoundingClientRect","elRect","left","right","top","bottom","listener","on","off","renderContent","Content","children","renderSlot","_createVNode","_mergeProps","shiftKey","extra","scrollWidth","scrollHeight","offsetWidth","offsetHeight","flatVNodes","map","vnode","index","ResizeObserver","key","_slot2","_slot","createSlotRender","Scrollbar","bem"],"mappings":"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"}