{"version":3,"file":"build-list.mjs","sources":["../../../../../../../packages/components/virtual-list/src/builders/build-list.ts"],"sourcesContent":["import {\r\n  computed,\r\n  defineComponent,\r\n  getCurrentInstance,\r\n  ref,\r\n  nextTick,\r\n  onMounted,\r\n  onUpdated,\r\n  resolveDynamicComponent,\r\n  h,\r\n  unref,\r\n} from 'vue'\r\nimport { hasOwn } from '@vue/shared'\r\n\r\nimport { isClient } from '@vueuse/core'\r\nimport { isNumber, isString } from '@sgui-plus/utils/util'\r\n\r\nimport { useCache } from '../hooks/use-cache'\r\nimport useWheel from '../hooks/use-wheel'\r\nimport Scrollbar from '../components/scrollbar'\r\nimport { getScrollDir, isHorizontal, getRTLOffsetType } from '../utils'\r\nimport { virtualizedListProps } from '../props'\r\nimport {\r\n  AUTO_ALIGNMENT,\r\n  BACKWARD,\r\n  FORWARD,\r\n  RTL,\r\n  HORIZONTAL,\r\n  ITEM_RENDER_EVT,\r\n  SCROLL_EVT,\r\n  RTL_OFFSET_NAG,\r\n  RTL_OFFSET_POS_DESC,\r\n} from '../defaults'\r\n\r\nimport type { VNode, CSSProperties, Slot, VNodeChild } from 'vue'\r\nimport type { ListConstructorProps, Alignment } from '../types'\r\nimport type { VirtualizedListProps } from '../props'\r\n\r\nconst createList = ({\r\n  name,\r\n  getOffset,\r\n  getItemSize,\r\n  getItemOffset,\r\n  getEstimatedTotalSize,\r\n  getStartIndexForOffset,\r\n  getStopIndexForStartIndex,\r\n  initCache,\r\n  clearCache,\r\n  validateProps,\r\n}: ListConstructorProps<VirtualizedListProps>) => {\r\n  return defineComponent({\r\n    name: name ?? 'SgVirtualList',\r\n    props: virtualizedListProps,\r\n    emits: [ITEM_RENDER_EVT, SCROLL_EVT],\r\n    setup(props, { emit, expose }) {\r\n      validateProps(props)\r\n      const instance = getCurrentInstance()!\r\n      const dynamicSizeCache = ref(initCache(props, instance))\r\n\r\n      const getItemStyleCache = useCache()\r\n      // refs\r\n      // here windowRef and innerRef can be type of HTMLElement\r\n      // or user defined component type, depends on the type passed\r\n      // by user\r\n      const windowRef = ref<HTMLElement>()\r\n      const innerRef = ref<HTMLElement>()\r\n      const scrollbarRef = ref()\r\n      const states = ref({\r\n        isScrolling: false,\r\n        scrollDir: 'forward',\r\n        scrollOffset: isNumber(props.initScrollOffset)\r\n          ? props.initScrollOffset\r\n          : 0,\r\n        updateRequested: false,\r\n        isScrollbarDragging: false,\r\n        scrollbarAlwaysOn: props.scrollbarAlwaysOn,\r\n      })\r\n\r\n      // computed\r\n      const itemsToRender = computed(() => {\r\n        const { total, cache } = props\r\n        const { isScrolling, scrollDir, scrollOffset } = unref(states)\r\n\r\n        if (total === 0) {\r\n          return [0, 0, 0, 0]\r\n        }\r\n\r\n        const startIndex = getStartIndexForOffset(\r\n          props,\r\n          scrollOffset,\r\n          unref(dynamicSizeCache)\r\n        )\r\n        const stopIndex = getStopIndexForStartIndex(\r\n          props,\r\n          startIndex,\r\n          scrollOffset,\r\n          unref(dynamicSizeCache)\r\n        )\r\n\r\n        const cacheBackward =\r\n          !isScrolling || scrollDir === BACKWARD ? Math.max(1, cache) : 1\r\n        const cacheForward =\r\n          !isScrolling || scrollDir === FORWARD ? Math.max(1, cache) : 1\r\n\r\n        return [\r\n          Math.max(0, startIndex - cacheBackward),\r\n          Math.max(0, Math.min(total! - 1, stopIndex + cacheForward)),\r\n          startIndex,\r\n          stopIndex,\r\n        ]\r\n      })\r\n\r\n      const estimatedTotalSize = computed(() =>\r\n        getEstimatedTotalSize(props, unref(dynamicSizeCache))\r\n      )\r\n\r\n      const _isHorizontal = computed(() => isHorizontal(props.layout))\r\n\r\n      const windowStyle = computed(() => [\r\n        {\r\n          position: 'relative',\r\n          overflow: 'hidden',\r\n          WebkitOverflowScrolling: 'touch',\r\n          willChange: 'transform',\r\n        },\r\n        {\r\n          direction: props.direction,\r\n          height: isNumber(props.height) ? `${props.height}px` : props.height,\r\n          width: isNumber(props.width) ? `${props.width}px` : props.width,\r\n        },\r\n        props.style,\r\n      ])\r\n\r\n      const innerStyle = computed(() => {\r\n        const size = unref(estimatedTotalSize)\r\n        const horizontal = unref(_isHorizontal)\r\n        return {\r\n          height: horizontal ? '100%' : `${size}px`,\r\n          pointerEvents: unref(states).isScrolling ? 'none' : undefined,\r\n          width: horizontal ? `${size}px` : '100%',\r\n        }\r\n      })\r\n\r\n      const clientSize = computed(() =>\r\n        _isHorizontal.value ? props.width : props.height\r\n      )\r\n\r\n      // methods\r\n      const { onWheel } = useWheel(\r\n        {\r\n          atStartEdge: computed(() => states.value.scrollOffset <= 0),\r\n          atEndEdge: computed(\r\n            () => states.value.scrollOffset >= estimatedTotalSize.value\r\n          ),\r\n          layout: computed(() => props.layout),\r\n        },\r\n        (offset) => {\r\n          ;(\r\n            scrollbarRef.value as any as {\r\n              onMouseUp: () => void\r\n            }\r\n          ).onMouseUp?.()\r\n          scrollTo(\r\n            Math.min(\r\n              states.value.scrollOffset + offset,\r\n              estimatedTotalSize.value - (clientSize.value as number)\r\n            )\r\n          )\r\n        }\r\n      )\r\n\r\n      const emitEvents = () => {\r\n        const { total } = props\r\n\r\n        if (total! > 0) {\r\n          const [cacheStart, cacheEnd, visibleStart, visibleEnd] =\r\n            unref(itemsToRender)\r\n          emit(ITEM_RENDER_EVT, cacheStart, cacheEnd, visibleStart, visibleEnd)\r\n        }\r\n\r\n        const { scrollDir, scrollOffset, updateRequested } = unref(states)\r\n        emit(SCROLL_EVT, scrollDir, scrollOffset, updateRequested)\r\n      }\r\n\r\n      const scrollVertically = (e: Event) => {\r\n        const { clientHeight, scrollHeight, scrollTop } =\r\n          e.currentTarget as HTMLElement\r\n        const _states = unref(states)\r\n        if (_states.scrollOffset === scrollTop) {\r\n          return\r\n        }\r\n\r\n        const scrollOffset = Math.max(\r\n          0,\r\n          Math.min(scrollTop, scrollHeight - clientHeight)\r\n        )\r\n\r\n        states.value = {\r\n          ..._states,\r\n          isScrolling: true,\r\n          scrollDir: getScrollDir(_states.scrollOffset, scrollOffset),\r\n          scrollOffset,\r\n          updateRequested: false,\r\n        }\r\n\r\n        nextTick(resetIsScrolling)\r\n      }\r\n\r\n      const scrollHorizontally = (e: Event) => {\r\n        const { clientWidth, scrollLeft, scrollWidth } =\r\n          e.currentTarget as HTMLElement\r\n        const _states = unref(states)\r\n\r\n        if (_states.scrollOffset === scrollLeft) {\r\n          return\r\n        }\r\n\r\n        const { direction } = props\r\n\r\n        let scrollOffset = scrollLeft\r\n\r\n        if (direction === RTL) {\r\n          // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\r\n          // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\r\n          // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\r\n          // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\r\n          switch (getRTLOffsetType()) {\r\n            case RTL_OFFSET_NAG: {\r\n              scrollOffset = -scrollLeft\r\n              break\r\n            }\r\n            case RTL_OFFSET_POS_DESC: {\r\n              scrollOffset = scrollWidth - clientWidth - scrollLeft\r\n              break\r\n            }\r\n          }\r\n        }\r\n\r\n        scrollOffset = Math.max(\r\n          0,\r\n          Math.min(scrollOffset, scrollWidth - clientWidth)\r\n        )\r\n\r\n        states.value = {\r\n          ..._states,\r\n          isScrolling: true,\r\n          scrollDir: getScrollDir(_states.scrollOffset, scrollOffset),\r\n          scrollOffset,\r\n          updateRequested: false,\r\n        }\r\n\r\n        nextTick(resetIsScrolling)\r\n      }\r\n\r\n      const onScroll = (e: Event) => {\r\n        unref(_isHorizontal) ? scrollHorizontally(e) : scrollVertically(e)\r\n        emitEvents()\r\n      }\r\n\r\n      const onScrollbarScroll = (distanceToGo: number, totalSteps: number) => {\r\n        const offset =\r\n          ((estimatedTotalSize.value - (clientSize.value as number)) /\r\n            totalSteps) *\r\n          distanceToGo\r\n        scrollTo(\r\n          Math.min(\r\n            estimatedTotalSize.value - (clientSize.value as number),\r\n            offset\r\n          )\r\n        )\r\n      }\r\n\r\n      const scrollTo = (offset: number) => {\r\n        offset = Math.max(offset, 0)\r\n\r\n        if (offset === unref(states).scrollOffset) {\r\n          return\r\n        }\r\n\r\n        states.value = {\r\n          ...unref(states),\r\n          scrollOffset: offset,\r\n          scrollDir: getScrollDir(unref(states).scrollOffset, offset),\r\n          updateRequested: true,\r\n        }\r\n\r\n        nextTick(resetIsScrolling)\r\n      }\r\n\r\n      const scrollToItem = (\r\n        idx: number,\r\n        alignment: Alignment = AUTO_ALIGNMENT\r\n      ) => {\r\n        const { scrollOffset } = unref(states)\r\n\r\n        idx = Math.max(0, Math.min(idx, props.total! - 1))\r\n        scrollTo(\r\n          getOffset(\r\n            props,\r\n            idx,\r\n            alignment,\r\n            scrollOffset,\r\n            unref(dynamicSizeCache)\r\n          )\r\n        )\r\n      }\r\n\r\n      const getItemStyle = (idx: number) => {\r\n        const { direction, itemSize, layout } = props\r\n\r\n        const itemStyleCache = getItemStyleCache.value(\r\n          clearCache && itemSize,\r\n          clearCache && layout,\r\n          clearCache && direction\r\n        )\r\n\r\n        let style: CSSProperties\r\n        if (hasOwn(itemStyleCache, String(idx))) {\r\n          style = itemStyleCache[idx]\r\n        } else {\r\n          const offset = getItemOffset(props, idx, unref(dynamicSizeCache))\r\n          const size = getItemSize(props, idx, unref(dynamicSizeCache))\r\n          const horizontal = unref(_isHorizontal)\r\n\r\n          const isRtl = direction === RTL\r\n          const offsetHorizontal = horizontal ? offset : 0\r\n          itemStyleCache[idx] = style = {\r\n            position: 'absolute',\r\n            left: isRtl ? undefined : `${offsetHorizontal}px`,\r\n            right: isRtl ? `${offsetHorizontal}px` : undefined,\r\n            top: !horizontal ? `${offset}px` : 0,\r\n            height: !horizontal ? `${size}px` : '100%',\r\n            width: horizontal ? `${size}px` : '100%',\r\n          }\r\n        }\r\n\r\n        return style\r\n      }\r\n\r\n      // TODO:\r\n      // perf optimization here, reset isScrolling with debounce.\r\n\r\n      const resetIsScrolling = () => {\r\n        // timer = null\r\n\r\n        states.value.isScrolling = false\r\n        nextTick(() => {\r\n          getItemStyleCache.value(-1, null, null)\r\n        })\r\n      }\r\n\r\n      const resetScrollTop = () => {\r\n        const window = windowRef.value\r\n        if (window) {\r\n          window.scrollTop = 0\r\n        }\r\n      }\r\n\r\n      // life cycles\r\n      onMounted(() => {\r\n        if (!isClient) return\r\n        const { initScrollOffset } = props\r\n        const windowElement = unref(windowRef)\r\n        if (isNumber(initScrollOffset) && windowElement) {\r\n          if (unref(_isHorizontal)) {\r\n            windowElement.scrollLeft = initScrollOffset\r\n          } else {\r\n            windowElement.scrollTop = initScrollOffset\r\n          }\r\n        }\r\n\r\n        emitEvents()\r\n      })\r\n\r\n      onUpdated(() => {\r\n        const { direction, layout } = props\r\n        const { scrollOffset, updateRequested } = unref(states)\r\n        const windowElement = unref(windowRef)\r\n\r\n        if (updateRequested && windowElement) {\r\n          if (layout === HORIZONTAL) {\r\n            if (direction === RTL) {\r\n              // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\r\n              // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\r\n              // So we need to determine which browser behavior we're dealing with, and mimic it.\r\n              switch (getRTLOffsetType()) {\r\n                case 'negative': {\r\n                  windowElement.scrollLeft = -scrollOffset\r\n                  break\r\n                }\r\n                case 'positive-ascending': {\r\n                  windowElement.scrollLeft = scrollOffset\r\n                  break\r\n                }\r\n                default: {\r\n                  const { clientWidth, scrollWidth } = windowElement\r\n                  windowElement.scrollLeft =\r\n                    scrollWidth - clientWidth - scrollOffset\r\n                  break\r\n                }\r\n              }\r\n            } else {\r\n              windowElement.scrollLeft = scrollOffset\r\n            }\r\n          } else {\r\n            windowElement.scrollTop = scrollOffset\r\n          }\r\n        }\r\n      })\r\n\r\n      const api = {\r\n        clientSize,\r\n        estimatedTotalSize,\r\n        windowStyle,\r\n        windowRef,\r\n        innerRef,\r\n        innerStyle,\r\n        itemsToRender,\r\n        scrollbarRef,\r\n        states,\r\n        getItemStyle,\r\n        onScroll,\r\n        onScrollbarScroll,\r\n        onWheel,\r\n        scrollTo,\r\n        scrollToItem,\r\n        resetScrollTop,\r\n      }\r\n\r\n      expose({\r\n        windowRef,\r\n        innerRef,\r\n        getItemStyleCache,\r\n        scrollTo,\r\n        scrollToItem,\r\n        resetScrollTop,\r\n        states,\r\n      })\r\n\r\n      return api\r\n    },\r\n\r\n    render(ctx: any) {\r\n      const {\r\n        $slots,\r\n        className,\r\n        clientSize,\r\n        containerElement,\r\n        data,\r\n        getItemStyle,\r\n        innerElement,\r\n        itemsToRender,\r\n        innerStyle,\r\n        layout,\r\n        total,\r\n        onScroll,\r\n        onScrollbarScroll,\r\n        onWheel,\r\n        states,\r\n        useIsScrolling,\r\n        windowStyle,\r\n      } = ctx\r\n\r\n      const [start, end] = itemsToRender\r\n\r\n      const Container = resolveDynamicComponent(containerElement)\r\n      const Inner = resolveDynamicComponent(innerElement)\r\n\r\n      const children = [] as VNodeChild[]\r\n\r\n      if (total > 0) {\r\n        for (let i = start; i <= end; i++) {\r\n          children.push(\r\n            ($slots.default as Slot)?.({\r\n              data,\r\n              key: i,\r\n              index: i,\r\n              isScrolling: useIsScrolling ? states.isScrolling : undefined,\r\n              style: getItemStyle(i),\r\n            })\r\n          )\r\n        }\r\n      }\r\n\r\n      const InnerNode = [\r\n        h(\r\n          Inner as VNode,\r\n          {\r\n            style: innerStyle,\r\n            ref: 'innerRef',\r\n          },\r\n          !isString(Inner)\r\n            ? {\r\n                default: () => children,\r\n              }\r\n            : children\r\n        ),\r\n      ]\r\n\r\n      const scrollbar = h(Scrollbar, {\r\n        ref: 'scrollbarRef',\r\n        clientSize,\r\n        layout,\r\n        onScroll: onScrollbarScroll,\r\n        ratio: (clientSize * 100) / this.estimatedTotalSize,\r\n        scrollFrom:\r\n          states.scrollOffset / (this.estimatedTotalSize - clientSize),\r\n        total,\r\n      })\r\n\r\n      const listContainer = h(\r\n        Container as VNode,\r\n        {\r\n          class: className,\r\n          style: windowStyle,\r\n          onScroll,\r\n          onWheel,\r\n          ref: 'windowRef',\r\n          key: 0,\r\n        },\r\n        !isString(Container) ? { default: () => [InnerNode] } : [InnerNode]\r\n      )\r\n\r\n      return h(\r\n        'div',\r\n        {\r\n          key: 0,\r\n          class: [\r\n            'sg-vl__wrapper',\r\n            states.scrollbarAlwaysOn ? 'always-on' : '',\r\n          ],\r\n        },\r\n        [listContainer, scrollbar]\r\n      )\r\n    },\r\n  })\r\n}\r\n\r\nexport default createList\r\n"],"names":["Scrollbar"],"mappings":"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"}