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