{"version":3,"file":"build-grid.mjs","sources":["../../../../../../../packages/components/virtual-list/src/builders/build-grid.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\nimport { getScrollBarWidth } from '@sgui-plus/utils/scrollbar-width'\r\n\r\nimport Scrollbar from '../components/scrollbar'\r\nimport { useGridWheel } from '../hooks/use-grid-wheel'\r\nimport { useCache } from '../hooks/use-cache'\r\nimport { virtualizedGridProps } from '../props'\r\nimport { getScrollDir, getRTLOffsetType, isRTL } from '../utils'\r\nimport {\r\n  AUTO_ALIGNMENT,\r\n  BACKWARD,\r\n  FORWARD,\r\n  RTL,\r\n  ITEM_RENDER_EVT,\r\n  SCROLL_EVT,\r\n  RTL_OFFSET_NAG,\r\n  RTL_OFFSET_POS_DESC,\r\n  RTL_OFFSET_POS_ASC,\r\n} from '../defaults'\r\n\r\nimport type { CSSProperties, VNode, VNodeChild } from 'vue'\r\nimport type { StyleValue } from '@sgui-plus/utils/types'\r\nimport type { GridConstructorProps, Alignment, ScrollbarExpose } from '../types'\r\nimport type { VirtualizedGridProps } from '../props'\r\n\r\nconst createGrid = ({\r\n  name,\r\n  clearCache,\r\n  getColumnPosition,\r\n  getColumnStartIndexForOffset,\r\n  getColumnStopIndexForStartIndex,\r\n  getEstimatedTotalHeight,\r\n  getEstimatedTotalWidth,\r\n  getColumnOffset,\r\n  getRowOffset,\r\n  getRowPosition,\r\n  getRowStartIndexForOffset,\r\n  getRowStopIndexForStartIndex,\r\n\r\n  initCache,\r\n  validateProps,\r\n}: GridConstructorProps<VirtualizedGridProps>) => {\r\n  return defineComponent({\r\n    name: name ?? 'SgVirtualList',\r\n    props: virtualizedGridProps,\r\n    emits: [ITEM_RENDER_EVT, SCROLL_EVT],\r\n    setup(props, { emit, expose, slots }) {\r\n      validateProps(props)\r\n      const instance = getCurrentInstance()!\r\n      const cache = ref(initCache(props, instance))\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 hScrollbar = ref<ScrollbarExpose>()\r\n      const vScrollbar = ref<ScrollbarExpose>()\r\n      // innerRef is the actual container element which contains all the elements\r\n      const innerRef = ref(null)\r\n      const states = ref({\r\n        isScrolling: false,\r\n        scrollLeft: isNumber(props.initScrollLeft) ? props.initScrollLeft : 0,\r\n        scrollTop: isNumber(props.initScrollTop) ? props.initScrollTop : 0,\r\n        updateRequested: false,\r\n        xAxisScrollDir: FORWARD,\r\n        yAxisScrollDir: FORWARD,\r\n      })\r\n\r\n      const getItemStyleCache = useCache()\r\n\r\n      // computed\r\n      const parsedHeight = computed(() => parseInt(`${props.height}`, 10))\r\n      const parsedWidth = computed(() => parseInt(`${props.width}`, 10))\r\n      const columnsToRender = computed(() => {\r\n        const { totalColumn, totalRow, columnCache } = props\r\n        const { isScrolling, xAxisScrollDir, scrollLeft } = unref(states)\r\n\r\n        if (totalColumn === 0 || totalRow === 0) {\r\n          return [0, 0, 0, 0]\r\n        }\r\n\r\n        const startIndex = getColumnStartIndexForOffset(\r\n          props,\r\n          scrollLeft,\r\n          unref(cache)\r\n        )\r\n        const stopIndex = getColumnStopIndexForStartIndex(\r\n          props,\r\n          startIndex,\r\n          scrollLeft,\r\n          unref(cache)\r\n        )\r\n\r\n        const cacheBackward =\r\n          !isScrolling || xAxisScrollDir === BACKWARD\r\n            ? Math.max(1, columnCache)\r\n            : 1\r\n        const cacheForward =\r\n          !isScrolling || xAxisScrollDir === FORWARD\r\n            ? Math.max(1, columnCache)\r\n            : 1\r\n\r\n        return [\r\n          Math.max(0, startIndex - cacheBackward),\r\n          Math.max(0, Math.min(totalColumn! - 1, stopIndex + cacheForward)),\r\n          startIndex,\r\n          stopIndex,\r\n        ]\r\n      })\r\n\r\n      const rowsToRender = computed(() => {\r\n        const { totalColumn, totalRow, rowCache } = props\r\n        const { isScrolling, yAxisScrollDir, scrollTop } = unref(states)\r\n\r\n        if (totalColumn === 0 || totalRow === 0) {\r\n          return [0, 0, 0, 0]\r\n        }\r\n\r\n        const startIndex = getRowStartIndexForOffset(\r\n          props,\r\n          scrollTop,\r\n          unref(cache)\r\n        )\r\n        const stopIndex = getRowStopIndexForStartIndex(\r\n          props,\r\n          startIndex,\r\n          scrollTop,\r\n          unref(cache)\r\n        )\r\n\r\n        const cacheBackward =\r\n          !isScrolling || yAxisScrollDir === BACKWARD\r\n            ? Math.max(1, rowCache)\r\n            : 1\r\n        const cacheForward =\r\n          !isScrolling || yAxisScrollDir === FORWARD ? Math.max(1, rowCache) : 1\r\n\r\n        return [\r\n          Math.max(0, startIndex - cacheBackward),\r\n          Math.max(0, Math.min(totalRow! - 1, stopIndex + cacheForward)),\r\n          startIndex,\r\n          stopIndex,\r\n        ]\r\n      })\r\n\r\n      const estimatedTotalHeight = computed(() =>\r\n        getEstimatedTotalHeight(props, unref(cache))\r\n      )\r\n      const estimatedTotalWidth = computed(() =>\r\n        getEstimatedTotalWidth(props, unref(cache))\r\n      )\r\n\r\n      const windowStyle = computed<StyleValue>(() => [\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 width = `${unref(estimatedTotalWidth)}px`\r\n        const height = `${unref(estimatedTotalHeight)}px`\r\n\r\n        return {\r\n          height,\r\n          pointerEvents: unref(states).isScrolling ? 'none' : undefined,\r\n          width,\r\n        }\r\n      })\r\n\r\n      // methods\r\n      const emitEvents = () => {\r\n        const { totalColumn, totalRow } = props\r\n\r\n        if (totalColumn! > 0 && totalRow! > 0) {\r\n          const [\r\n            columnCacheStart,\r\n            columnCacheEnd,\r\n            columnVisibleStart,\r\n            columnVisibleEnd,\r\n          ] = unref(columnsToRender)\r\n          const [rowCacheStart, rowCacheEnd, rowVisibleStart, rowVisibleEnd] =\r\n            unref(rowsToRender)\r\n          // emit the render item event with\r\n          // [xAxisInvisibleStart, xAxisInvisibleEnd, xAxisVisibleStart, xAxisVisibleEnd]\r\n          // [yAxisInvisibleStart, yAxisInvisibleEnd, yAxisVisibleStart, yAxisVisibleEnd]\r\n          emit(\r\n            ITEM_RENDER_EVT,\r\n            columnCacheStart,\r\n            columnCacheEnd,\r\n            rowCacheStart,\r\n            rowCacheEnd,\r\n            columnVisibleStart,\r\n            columnVisibleEnd,\r\n            rowVisibleStart,\r\n            rowVisibleEnd\r\n          )\r\n        }\r\n\r\n        const {\r\n          scrollLeft,\r\n          scrollTop,\r\n          updateRequested,\r\n          xAxisScrollDir,\r\n          yAxisScrollDir,\r\n        } = unref(states)\r\n        emit(\r\n          SCROLL_EVT,\r\n          xAxisScrollDir,\r\n          scrollLeft,\r\n          yAxisScrollDir,\r\n          scrollTop,\r\n          updateRequested\r\n        )\r\n      }\r\n\r\n      const onScroll = (e: Event) => {\r\n        const {\r\n          clientHeight,\r\n          clientWidth,\r\n          scrollHeight,\r\n          scrollLeft,\r\n          scrollTop,\r\n          scrollWidth,\r\n        } = e.currentTarget as HTMLElement\r\n\r\n        const _states = unref(states)\r\n        if (\r\n          _states.scrollTop === scrollTop &&\r\n          _states.scrollLeft === scrollLeft\r\n        ) {\r\n          return\r\n        }\r\n\r\n        let _scrollLeft = scrollLeft\r\n\r\n        if (isRTL(props.direction)) {\r\n          switch (getRTLOffsetType()) {\r\n            case RTL_OFFSET_NAG:\r\n              _scrollLeft = -scrollLeft\r\n              break\r\n            case RTL_OFFSET_POS_DESC:\r\n              _scrollLeft = scrollWidth - clientWidth - scrollLeft\r\n              break\r\n          }\r\n        }\r\n\r\n        states.value = {\r\n          ..._states,\r\n          isScrolling: true,\r\n          scrollLeft: _scrollLeft,\r\n          scrollTop: Math.max(\r\n            0,\r\n            Math.min(scrollTop, scrollHeight - clientHeight)\r\n          ),\r\n          updateRequested: false,\r\n          xAxisScrollDir: getScrollDir(_states.scrollLeft, _scrollLeft),\r\n          yAxisScrollDir: getScrollDir(_states.scrollTop, scrollTop),\r\n        }\r\n\r\n        nextTick(resetIsScrolling)\r\n\r\n        emitEvents()\r\n      }\r\n\r\n      const onVerticalScroll = (distance: number, totalSteps: number) => {\r\n        const height = unref(parsedHeight)\r\n        const offset =\r\n          ((estimatedTotalHeight.value - height) / totalSteps) * distance\r\n        scrollTo({\r\n          scrollTop: Math.min(estimatedTotalHeight.value - height, offset),\r\n        })\r\n      }\r\n\r\n      const onHorizontalScroll = (distance: number, totalSteps: number) => {\r\n        const width = unref(parsedWidth)\r\n        const offset =\r\n          ((estimatedTotalWidth.value - width) / totalSteps) * distance\r\n        scrollTo({\r\n          scrollLeft: Math.min(estimatedTotalWidth.value - width, offset),\r\n        })\r\n      }\r\n\r\n      const { onWheel } = useGridWheel(\r\n        {\r\n          atXStartEdge: computed(() => states.value.scrollLeft <= 0),\r\n          atXEndEdge: computed(\r\n            () => states.value.scrollLeft >= estimatedTotalWidth.value\r\n          ),\r\n          atYStartEdge: computed(() => states.value.scrollTop <= 0),\r\n          atYEndEdge: computed(\r\n            () => states.value.scrollTop >= estimatedTotalHeight.value\r\n          ),\r\n        },\r\n        (x: number, y: number) => {\r\n          hScrollbar.value?.onMouseUp?.()\r\n          hScrollbar.value?.onMouseUp?.()\r\n          const width = unref(parsedWidth)\r\n          const height = unref(parsedHeight)\r\n          scrollTo({\r\n            scrollLeft: Math.min(\r\n              states.value.scrollLeft + x,\r\n              estimatedTotalWidth.value - width\r\n            ),\r\n            scrollTop: Math.min(\r\n              states.value.scrollTop + y,\r\n              estimatedTotalHeight.value - height\r\n            ),\r\n          })\r\n        }\r\n      )\r\n\r\n      const scrollTo = ({\r\n        scrollLeft = states.value.scrollLeft,\r\n        scrollTop = states.value.scrollTop,\r\n      }) => {\r\n        scrollLeft = Math.max(scrollLeft, 0)\r\n        scrollTop = Math.max(scrollTop, 0)\r\n        const _states = unref(states)\r\n        if (\r\n          scrollTop === _states.scrollTop &&\r\n          scrollLeft === _states.scrollLeft\r\n        ) {\r\n          return\r\n        }\r\n\r\n        states.value = {\r\n          ..._states,\r\n          xAxisScrollDir: getScrollDir(_states.scrollLeft, scrollLeft),\r\n          yAxisScrollDir: getScrollDir(_states.scrollTop, scrollTop),\r\n          scrollLeft,\r\n          scrollTop,\r\n          updateRequested: true,\r\n        }\r\n\r\n        nextTick(resetIsScrolling)\r\n      }\r\n\r\n      const scrollToItem = (\r\n        rowIndex = 0,\r\n        columnIdx = 0,\r\n        alignment: Alignment = AUTO_ALIGNMENT\r\n      ) => {\r\n        const _states = unref(states)\r\n        columnIdx = Math.max(0, Math.min(columnIdx, props.totalColumn! - 1))\r\n        rowIndex = Math.max(0, Math.min(rowIndex, props.totalRow! - 1))\r\n        const scrollBarWidth = getScrollBarWidth()\r\n\r\n        const _cache = unref(cache)\r\n        const estimatedHeight = getEstimatedTotalHeight(props, _cache)\r\n        const estimatedWidth = getEstimatedTotalWidth(props, _cache)\r\n\r\n        scrollTo({\r\n          scrollLeft: getColumnOffset(\r\n            props,\r\n            columnIdx,\r\n            alignment,\r\n            _states.scrollLeft,\r\n            _cache,\r\n            estimatedWidth > props.width! ? scrollBarWidth : 0\r\n          ),\r\n          scrollTop: getRowOffset(\r\n            props,\r\n            rowIndex,\r\n            alignment,\r\n            _states.scrollTop,\r\n            _cache,\r\n            estimatedHeight > props.height! ? scrollBarWidth : 0\r\n          ),\r\n        })\r\n      }\r\n\r\n      const getItemStyle = (\r\n        rowIndex: number,\r\n        columnIndex: number\r\n      ): CSSProperties => {\r\n        const { columnWidth, direction, rowHeight } = props\r\n\r\n        const itemStyleCache = getItemStyleCache.value(\r\n          clearCache && columnWidth,\r\n          clearCache && rowHeight,\r\n          clearCache && direction\r\n        )\r\n        // since there was no need to introduce an nested array into cache object\r\n        // we use row,column to construct the key for indexing the map.\r\n        const key = `${rowIndex},${columnIndex}`\r\n\r\n        if (hasOwn(itemStyleCache, key)) {\r\n          return itemStyleCache[key]\r\n        } else {\r\n          const [, left] = getColumnPosition(props, columnIndex, unref(cache))\r\n          const _cache = unref(cache)\r\n\r\n          const rtl = isRTL(direction)\r\n          const [height, top] = getRowPosition(props, rowIndex, _cache)\r\n          const [width] = getColumnPosition(props, columnIndex, _cache)\r\n\r\n          itemStyleCache[key] = {\r\n            position: 'absolute',\r\n            left: rtl ? undefined : `${left}px`,\r\n            right: rtl ? `${left}px` : undefined,\r\n            top: `${top}px`,\r\n            height: `${height}px`,\r\n            width: `${width}px`,\r\n          }\r\n\r\n          return itemStyleCache[key]\r\n        }\r\n      }\r\n\r\n      // TODO: debounce setting is scrolling.\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      // life cycles\r\n      onMounted(() => {\r\n        // for SSR\r\n        if (!isClient) return\r\n        const { initScrollLeft, initScrollTop } = props\r\n        const windowElement = unref(windowRef)\r\n        if (windowElement) {\r\n          if (isNumber(initScrollLeft)) {\r\n            windowElement.scrollLeft = initScrollLeft\r\n          }\r\n          if (isNumber(initScrollTop)) {\r\n            windowElement.scrollTop = initScrollTop\r\n          }\r\n        }\r\n        emitEvents()\r\n      })\r\n\r\n      onUpdated(() => {\r\n        const { direction } = props\r\n        const { scrollLeft, scrollTop, updateRequested } = unref(states)\r\n\r\n        const windowElement = unref(windowRef)\r\n\r\n        if (updateRequested && windowElement) {\r\n          if (direction === RTL) {\r\n            switch (getRTLOffsetType()) {\r\n              case RTL_OFFSET_NAG: {\r\n                windowElement.scrollLeft = -scrollLeft\r\n                break\r\n              }\r\n              case RTL_OFFSET_POS_ASC: {\r\n                windowElement.scrollLeft = scrollLeft\r\n                break\r\n              }\r\n              default: {\r\n                const { clientWidth, scrollWidth } = windowElement\r\n                windowElement.scrollLeft =\r\n                  scrollWidth - clientWidth - scrollLeft\r\n                break\r\n              }\r\n            }\r\n          } else {\r\n            windowElement.scrollLeft = Math.max(0, scrollLeft)\r\n          }\r\n\r\n          windowElement.scrollTop = Math.max(0, scrollTop)\r\n        }\r\n      })\r\n\r\n      expose({\r\n        windowRef,\r\n        innerRef,\r\n        getItemStyleCache,\r\n        scrollTo,\r\n        scrollToItem,\r\n        states,\r\n      })\r\n\r\n      // rendering part\r\n\r\n      const renderScrollbars = () => {\r\n        const { totalColumn, totalRow } = props\r\n\r\n        const width = unref(parsedWidth)\r\n        const height = unref(parsedHeight)\r\n        const estimatedWidth = unref(estimatedTotalWidth)\r\n        const estimatedHeight = unref(estimatedTotalHeight)\r\n        const { scrollLeft, scrollTop } = unref(states)\r\n        const horizontalScrollbar = h(Scrollbar, {\r\n          ref: hScrollbar,\r\n          clientSize: width,\r\n          layout: 'horizontal',\r\n          onScroll: onHorizontalScroll,\r\n          ratio: (width * 100) / estimatedWidth,\r\n          scrollFrom: scrollLeft / (estimatedWidth - width),\r\n          total: totalRow,\r\n          visible: true,\r\n        })\r\n\r\n        const verticalScrollbar = h(Scrollbar, {\r\n          ref: vScrollbar,\r\n          clientSize: height,\r\n          layout: 'vertical',\r\n          onScroll: onVerticalScroll,\r\n          ratio: (height * 100) / estimatedHeight,\r\n          scrollFrom: scrollTop / (estimatedHeight - height),\r\n          total: totalColumn,\r\n          visible: true,\r\n        })\r\n\r\n        return {\r\n          horizontalScrollbar,\r\n          verticalScrollbar,\r\n        }\r\n      }\r\n\r\n      const renderItems = () => {\r\n        const [columnStart, columnEnd] = unref(columnsToRender)\r\n        const [rowStart, rowEnd] = unref(rowsToRender)\r\n        const { data, totalColumn, totalRow, useIsScrolling } = props\r\n        const children: VNodeChild[] = []\r\n        if (totalRow > 0 && totalColumn > 0) {\r\n          for (let row = rowStart; row <= rowEnd; row++) {\r\n            for (let column = columnStart; column <= columnEnd; column++) {\r\n              children.push(\r\n                slots.default?.({\r\n                  columnIndex: column,\r\n                  data,\r\n                  key: column,\r\n                  isScrolling: useIsScrolling\r\n                    ? unref(states).isScrolling\r\n                    : undefined,\r\n                  style: getItemStyle(row, column),\r\n                  rowIndex: row,\r\n                })\r\n              )\r\n            }\r\n          }\r\n        }\r\n        return children\r\n      }\r\n\r\n      const renderInner = () => {\r\n        const Inner = resolveDynamicComponent(props.innerElement) as VNode\r\n        const children = renderItems()\r\n        return [\r\n          h(\r\n            Inner,\r\n            {\r\n              style: unref(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\r\n      const renderWindow = () => {\r\n        const Container = resolveDynamicComponent(\r\n          props.containerElement\r\n        ) as VNode\r\n        const { horizontalScrollbar, verticalScrollbar } = renderScrollbars()\r\n        const Inner = renderInner()\r\n\r\n        return h(\r\n          'div',\r\n          {\r\n            key: 0,\r\n            class: 'el-vg__wrapper',\r\n          },\r\n          [\r\n            h(\r\n              Container,\r\n              {\r\n                class: props.className,\r\n                style: unref(windowStyle),\r\n                onScroll,\r\n                onWheel,\r\n                ref: windowRef,\r\n              },\r\n              !isString(Container) ? { default: () => Inner } : Inner\r\n            ),\r\n            horizontalScrollbar,\r\n            verticalScrollbar,\r\n          ]\r\n        )\r\n      }\r\n\r\n      return renderWindow\r\n    },\r\n  })\r\n}\r\nexport default createGrid\r\n"],"names":["Scrollbar"],"mappings":"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"}