{"version":3,"file":"build-grid.mjs","sources":["../../../../../../../packages/components/virtual-list/src/builders/build-grid.ts"],"sourcesContent":["import {\n  computed,\n  defineComponent,\n  getCurrentInstance,\n  ref,\n  nextTick,\n  onMounted,\n  onUpdated,\n  resolveDynamicComponent,\n  h,\n  unref,\n} from 'vue'\nimport { hasOwn } from '@vue/shared'\n\nimport { isNumber, isString } from '@element-plus/utils/util'\nimport isServer from '@element-plus/utils/isServer'\nimport getScrollBarWidth from '@element-plus/utils/scrollbar-width'\n\nimport Scrollbar from '../components/scrollbar'\nimport { useGridWheel } from '../hooks/use-grid-wheel'\nimport { useCache } from '../hooks/use-cache'\nimport { virtualizedGridProps } from '../props'\nimport { getScrollDir, getRTLOffsetType, isRTL } from '../utils'\nimport {\n  AUTO_ALIGNMENT,\n  BACKWARD,\n  FORWARD,\n  RTL,\n  ITEM_RENDER_EVT,\n  SCROLL_EVT,\n  RTL_OFFSET_NAG,\n  RTL_OFFSET_POS_DESC,\n  RTL_OFFSET_POS_ASC,\n} from '../defaults'\n\nimport type { CSSProperties, VNode, VNodeChild } from 'vue'\nimport type { StyleValue } from '@element-plus/utils/types'\nimport type { GridConstructorProps, Alignment, ScrollbarExpose } 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  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      validateProps(props)\n      const instance = getCurrentInstance()!\n      const cache = ref(initCache(props, instance))\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(() => parseInt(`${props.height}`, 10))\n      const parsedWidth = computed(() => 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(\n            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(\n          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        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: false,\n          xAxisScrollDir: getScrollDir(_states.scrollLeft, _scrollLeft),\n          yAxisScrollDir: getScrollDir(_states.scrollTop, scrollTop),\n        }\n\n        nextTick(resetIsScrolling)\n\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      }) => {\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\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\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 (isServer) 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      onUpdated(() => {\n        const { direction } = props\n        const { scrollLeft, scrollTop, updateRequested } = unref(states)\n\n        const windowElement = unref(windowRef)\n\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      expose({\n        windowRef,\n        innerRef,\n        getItemStyleCache,\n        scrollTo,\n        scrollToItem,\n        states,\n      })\n\n      // rendering part\n\n      const renderScrollbars = () => {\n        const { totalColumn, totalRow } = 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          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          clientSize: height,\n          layout: 'vertical',\n          onScroll: onVerticalScroll,\n          ratio: (height * 100) / estimatedHeight,\n          scrollFrom: scrollTop / (estimatedHeight - height),\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 } = 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: column,\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: 'el-vg__wrapper',\n          },\n          [\n            h(\n              Container,\n              {\n                class: props.className,\n                style: unref(windowStyle),\n                onScroll,\n                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}\nexport default createGrid\n"],"names":["getScrollBarWidth","Scrollbar"],"mappings":"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"}