{"version":3,"file":"build-grid.mjs","names":["isClient","Scrollbar"],"sources":["../../../../../../../packages/components/virtual-list/src/builders/build-grid.ts"],"sourcesContent":["import {\n  Fragment,\n  computed,\n  defineComponent,\n  getCurrentInstance,\n  h,\n  mergeProps,\n  nextTick,\n  onMounted,\n  ref,\n  resolveDynamicComponent,\n  unref,\n} from 'vue'\nimport { useEventListener } from '@vueuse/core'\nimport {\n  getScrollBarWidth,\n  hasOwn,\n  isClient,\n  isNumber,\n  isString,\n} from '@element-plus/utils'\nimport { useNamespace } from '@element-plus/hooks'\nimport Scrollbar from '../components/scrollbar'\nimport { useGridWheel } from '../hooks/use-grid-wheel'\nimport { useCache } from '../hooks/use-cache'\nimport { useGridTouch } from '../hooks/use-grid-touch'\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'\n\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  GridStates,\n  ScrollbarExpose,\n} from '../types'\nimport type { VirtualizedGridProps } from '../props'\nimport type { DynamicSizeGridInstance } from '../components/dynamic-size-grid.ts'\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<HTMLElement>()\n      const states = ref<GridStates>({\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          // fix scrolling issues in Firefox.\n          margin: 0,\n          boxSizing: 'border-box',\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            () =>\n              states.value.scrollLeft >=\n              estimatedTotalWidth.value - unref(parsedWidth)\n          ),\n          atYStartEdge: computed(() => states.value.scrollTop <= 0),\n          atYEndEdge: computed(\n            () =>\n              states.value.scrollTop >=\n              estimatedTotalHeight.value - unref(parsedHeight)\n          ),\n        },\n        (x: number, y: number) => {\n          hScrollbar.value?.onMouseUp?.()\n          vScrollbar.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      useEventListener(windowRef, 'wheel', onWheel, {\n        passive: false,\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 { touchStartX, touchStartY, handleTouchStart, handleTouchMove } =\n        useGridTouch(\n          windowRef,\n          states,\n          scrollTo,\n          estimatedTotalWidth,\n          estimatedTotalHeight,\n          parsedWidth,\n          parsedHeight\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(ns.namespace.value)\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 as number) ? scrollBarWidth : 0\n          ),\n          scrollTop: getRowOffset(\n            props,\n            rowIndex,\n            alignment,\n            _states.scrollTop,\n            _cache,\n            estimatedHeight > (props.height as number) ? scrollBarWidth : 0\n          ),\n        })\n      }\n\n      const getItemStyle = (rowIndex: number, columnIndex: number) => {\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] as CSSProperties\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] as CSSProperties\n        }\n      }\n\n      // TODO: debounce setting is scrolling.\n\n      const resetIsScrolling = () => {\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 DynamicSizeGridInstance\n\n      expose({\n        windowRef,\n        innerRef,\n        getItemStyleCache,\n        touchStartX,\n        touchStartY,\n        handleTouchStart,\n        handleTouchMove,\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              const key = itemKey({ columnIndex: column, data, rowIndex: row })\n              children.push(\n                h(\n                  Fragment,\n                  { key },\n                  slots.default?.({\n                    columnIndex: column,\n                    data,\n                    isScrolling: useIsScrolling\n                      ? unref(states).isScrolling\n                      : undefined,\n                    style: getItemStyle(row, column),\n                    rowIndex: row,\n                  })\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            mergeProps(props.innerProps, {\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            role: props.role,\n          },\n          [\n            h(\n              Container,\n              {\n                class: props.className,\n                style: unref(windowStyle),\n                onScroll,\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\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<GridStates>\n  }>\n"],"mappings":";;;;;;;;;;;;;;;;AA0DA,MAAM,cAAc,EAClB,MACA,YACA,mBACA,8BACA,iCACA,yBACA,wBACA,iBACA,cACA,gBACA,2BACA,8BAEA,WACA,kBACA,oBACgD;AAChD,QAAO,gBAAgB;EACrB,MAAM,QAAQ;EACd,OAAO;EACP,OAAO,CAAC,iBAAiB,WAAW;EACpC,MAAM,OAAO,EAAE,MAAM,QAAQ,SAAS;GACpC,MAAM,KAAK,aAAa,KAAK;AAE7B,iBAAc,MAAM;GACpB,MAAM,WAAW,oBAAoB;GACrC,MAAM,QAAQ,IAAI,UAAU,OAAO,SAAS,CAAC;AAC7C,sBAAmB,UAAU,MAAM;GAKnC,MAAM,YAAY,KAAkB;GACpC,MAAM,aAAa,KAAsB;GACzC,MAAM,aAAa,KAAsB;GAEzC,MAAM,WAAW,KAAkB;GACnC,MAAM,SAAS,IAAgB;IAC7B,aAAa;IACb,YAAY,SAAS,MAAM,eAAe,GAAG,MAAM,iBAAiB;IACpE,WAAW,SAAS,MAAM,cAAc,GAAG,MAAM,gBAAgB;IACjE,iBAAiB;IACjB,gBAAgB;IAChB,gBAAgB;IACjB,CAAC;GAEF,MAAM,oBAAoB,UAAU;GAGpC,MAAM,eAAe,eACnB,OAAO,SAAS,GAAG,MAAM,UAAU,GAAG,CACvC;GACD,MAAM,cAAc,eAAe,OAAO,SAAS,GAAG,MAAM,SAAS,GAAG,CAAC;GACzE,MAAM,kBAAkB,eAAe;IACrC,MAAM,EAAE,aAAa,UAAU,gBAAgB;IAC/C,MAAM,EAAE,aAAa,gBAAgB,eAAe,MAAM,OAAO;AAEjE,QAAI,gBAAgB,KAAK,aAAa,EACpC,QAAO;KAAC;KAAG;KAAG;KAAG;KAAE;IAGrB,MAAM,aAAa,6BACjB,OACA,YACA,MAAM,MAAM,CACb;IACD,MAAM,YAAY,gCAChB,OACA,YACA,YACA,MAAM,MAAM,CACb;IAED,MAAM,gBACJ,CAAC,eAAe,mBAAmB,WAC/B,KAAK,IAAI,GAAG,YAAY,GACxB;IACN,MAAM,eACJ,CAAC,eAAe,mBAAmB,UAC/B,KAAK,IAAI,GAAG,YAAY,GACxB;AAEN,WAAO;KACL,KAAK,IAAI,GAAG,aAAa,cAAc;KACvC,KAAK,IAAI,GAAG,KAAK,IAAI,cAAe,GAAG,YAAY,aAAa,CAAC;KACjE;KACA;KACD;KACD;GAEF,MAAM,eAAe,eAAe;IAClC,MAAM,EAAE,aAAa,UAAU,aAAa;IAC5C,MAAM,EAAE,aAAa,gBAAgB,cAAc,MAAM,OAAO;AAEhE,QAAI,gBAAgB,KAAK,aAAa,EACpC,QAAO;KAAC;KAAG;KAAG;KAAG;KAAE;IAGrB,MAAM,aAAa,0BACjB,OACA,WACA,MAAM,MAAM,CACb;IACD,MAAM,YAAY,6BAChB,OACA,YACA,WACA,MAAM,MAAM,CACb;IAED,MAAM,gBACJ,CAAC,eAAe,mBAAmB,WAC/B,KAAK,IAAI,GAAG,SAAS,GACrB;IACN,MAAM,eACJ,CAAC,eAAe,mBAAmB,UAAU,KAAK,IAAI,GAAG,SAAS,GAAG;AAEvE,WAAO;KACL,KAAK,IAAI,GAAG,aAAa,cAAc;KACvC,KAAK,IAAI,GAAG,KAAK,IAAI,WAAY,GAAG,YAAY,aAAa,CAAC;KAC9D;KACA;KACD;KACD;GAEF,MAAM,uBAAuB,eAC3B,wBAAwB,OAAO,MAAM,MAAM,CAAC,CAC7C;GACD,MAAM,sBAAsB,eAC1B,uBAAuB,OAAO,MAAM,MAAM,CAAC,CAC5C;GAED,MAAM,cAAc,eAA2B;IAC7C;KACE,UAAU;KACV,UAAU;KACV,yBAAyB;KACzB,YAAY;KACb;IACD;KACE,WAAW,MAAM;KACjB,QAAQ,SAAS,MAAM,OAAO,GAAG,GAAG,MAAM,OAAO,MAAM,MAAM;KAC7D,OAAO,SAAS,MAAM,MAAM,GAAG,GAAG,MAAM,MAAM,MAAM,MAAM;KAC3D;IACD,MAAM,SAAS,EAAE;IAClB,CAAC;GAEF,MAAM,aAAa,eAAe;IAChC,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC;AAG5C,WAAO;KACL,QAHa,GAAG,MAAM,qBAAqB,CAAC;KAI5C,eAAe,MAAM,OAAO,CAAC,cAAc,SAAS;KACpD;KAGA,QAAQ;KACR,WAAW;KACZ;KACD;GAGF,MAAM,mBAAmB;IACvB,MAAM,EAAE,aAAa,aAAa;AAElC,QAAI,cAAe,KAAK,WAAY,GAAG;KACrC,MAAM,CACJ,kBACA,gBACA,oBACA,oBACE,MAAM,gBAAgB;KAC1B,MAAM,CAAC,eAAe,aAAa,iBAAiB,iBAClD,MAAM,aAAa;AAIrB,UAAK,iBAAiB;MACpB;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACD,CAAC;;IAGJ,MAAM,EACJ,YACA,WACA,iBACA,gBACA,mBACE,MAAM,OAAO;AACjB,SAAK,YAAY;KACf;KACA;KACA;KACA;KACA;KACD,CAAC;;GAGJ,MAAM,YAAY,MAAa;IAC7B,MAAM,EACJ,cACA,aACA,cACA,YACA,WACA,gBACE,EAAE;IAEN,MAAM,UAAU,MAAM,OAAO;AAE7B,QACE,QAAQ,cAAc,aACtB,QAAQ,eAAe,WAEvB;IAGF,IAAI,cAAc;AAElB,QAAI,MAAM,MAAM,UAAU,CACxB,SAAQ,kBAAkB,EAA1B;KACE,KAAK;AACH,oBAAc,CAAC;AACf;KACF,KAAK;AACH,oBAAc,cAAc,cAAc;AAC1C;;AAIN,WAAO,QAAQ;KACb,GAAG;KACH,aAAa;KACb,YAAY;KACZ,WAAW,KAAK,IACd,GACA,KAAK,IAAI,WAAW,eAAe,aAAa,CACjD;KACD,iBAAiB;KACjB,gBAAgB,aAAa,QAAQ,YAAY,YAAY;KAC7D,gBAAgB,aAAa,QAAQ,WAAW,UAAU;KAC3D;AAED,mBAAe,kBAAkB,CAAC;AAElC,eAAW;AACX,gBAAY;;GAGd,MAAM,oBAAoB,UAAkB,eAAuB;IACjE,MAAM,SAAS,MAAM,aAAa;IAClC,MAAM,UACF,qBAAqB,QAAQ,UAAU,aAAc;AACzD,aAAS,EACP,WAAW,KAAK,IAAI,qBAAqB,QAAQ,QAAQ,OAAO,EACjE,CAAC;;GAGJ,MAAM,sBAAsB,UAAkB,eAAuB;IACnE,MAAM,QAAQ,MAAM,YAAY;IAChC,MAAM,UACF,oBAAoB,QAAQ,SAAS,aAAc;AACvD,aAAS,EACP,YAAY,KAAK,IAAI,oBAAoB,QAAQ,OAAO,OAAO,EAChE,CAAC;;GAGJ,MAAM,EAAE,YAAY,aAClB;IACE,cAAc,eAAe,OAAO,MAAM,cAAc,EAAE;IAC1D,YAAY,eAER,OAAO,MAAM,cACb,oBAAoB,QAAQ,MAAM,YAAY,CACjD;IACD,cAAc,eAAe,OAAO,MAAM,aAAa,EAAE;IACzD,YAAY,eAER,OAAO,MAAM,aACb,qBAAqB,QAAQ,MAAM,aAAa,CACnD;IACF,GACA,GAAW,MAAc;AACxB,eAAW,OAAO,aAAa;AAC/B,eAAW,OAAO,aAAa;IAC/B,MAAM,QAAQ,MAAM,YAAY;IAChC,MAAM,SAAS,MAAM,aAAa;AAClC,aAAS;KACP,YAAY,KAAK,IACf,OAAO,MAAM,aAAa,GAC1B,oBAAoB,QAAQ,MAC7B;KACD,WAAW,KAAK,IACd,OAAO,MAAM,YAAY,GACzB,qBAAqB,QAAQ,OAC9B;KACF,CAAC;KAEL;AAED,oBAAiB,WAAW,SAAS,SAAS,EAC5C,SAAS,OACV,CAAC;GAEF,MAAM,YAAY,EAChB,aAAa,OAAO,MAAM,YAC1B,YAAY,OAAO,MAAM,gBACF;AACvB,iBAAa,KAAK,IAAI,YAAY,EAAE;AACpC,gBAAY,KAAK,IAAI,WAAW,EAAE;IAClC,MAAM,UAAU,MAAM,OAAO;AAC7B,QACE,cAAc,QAAQ,aACtB,eAAe,QAAQ,WAEvB;AAGF,WAAO,QAAQ;KACb,GAAG;KACH,gBAAgB,aAAa,QAAQ,YAAY,WAAW;KAC5D,gBAAgB,aAAa,QAAQ,WAAW,UAAU;KAC1D;KACA;KACA,iBAAiB;KAClB;AAED,mBAAe,kBAAkB,CAAC;AAElC,eAAW;AACX,gBAAY;;GAGd,MAAM,EAAE,aAAa,aAAa,kBAAkB,oBAClD,aACE,WACA,QACA,UACA,qBACA,sBACA,aACA,aACD;GAEH,MAAM,gBACJ,WAAW,GACX,YAAY,GACZ,YAAuB,mBACpB;IACH,MAAM,UAAU,MAAM,OAAO;AAC7B,gBAAY,KAAK,IAAI,GAAG,KAAK,IAAI,WAAW,MAAM,cAAe,EAAE,CAAC;AACpE,eAAW,KAAK,IAAI,GAAG,KAAK,IAAI,UAAU,MAAM,WAAY,EAAE,CAAC;IAC/D,MAAM,iBAAiB,kBAAkB,GAAG,UAAU,MAAM;IAE5D,MAAM,SAAS,MAAM,MAAM;IAC3B,MAAM,kBAAkB,wBAAwB,OAAO,OAAO;IAC9D,MAAM,iBAAiB,uBAAuB,OAAO,OAAO;AAE5D,aAAS;KACP,YAAY,gBACV,OACA,WACA,WACA,QAAQ,YACR,QACA,iBAAkB,MAAM,QAAmB,iBAAiB,EAC7D;KACD,WAAW,aACT,OACA,UACA,WACA,QAAQ,WACR,QACA,kBAAmB,MAAM,SAAoB,iBAAiB,EAC/D;KACF,CAAC;;GAGJ,MAAM,gBAAgB,UAAkB,gBAAwB;IAC9D,MAAM,EAAE,aAAa,WAAW,cAAc;IAC9C,MAAM,iBAAiB,kBAAkB,MACvC,cAAc,aACd,cAAc,WACd,cAAc,UACf;IAGD,MAAM,MAAM,GAAG,SAAS,GAAG;AAE3B,QAAI,OAAO,gBAAgB,IAAI,CAC7B,QAAO,eAAe;SACjB;KACL,MAAM,GAAG,QAAQ,kBAAkB,OAAO,aAAa,MAAM,MAAM,CAAC;KACpE,MAAM,SAAS,MAAM,MAAM;KAE3B,MAAM,MAAM,MAAM,UAAU;KAC5B,MAAM,CAAC,QAAQ,OAAO,eAAe,OAAO,UAAU,OAAO;KAC7D,MAAM,CAAC,SAAS,kBAAkB,OAAO,aAAa,OAAO;AAE7D,oBAAe,OAAO;MACpB,UAAU;MACV,MAAM,MAAM,SAAY,GAAG,KAAK;MAChC,OAAO,MAAM,GAAG,KAAK,MAAM;MAC3B,KAAK,GAAG,IAAI;MACZ,QAAQ,GAAG,OAAO;MAClB,OAAO,GAAG,MAAM;MACjB;AAED,YAAO,eAAe;;;GAM1B,MAAM,yBAAyB;AAC7B,WAAO,MAAM,cAAc;AAC3B,mBAAe;AACb,uBAAkB,MAAM,IAAI,MAAM,KAAK;MACvC;;AAIJ,mBAAgB;AAEd,QAAI,CAACA,WAAU;IACf,MAAM,EAAE,gBAAgB,kBAAkB;IAC1C,MAAM,gBAAgB,MAAM,UAAU;AACtC,QAAI,eAAe;AACjB,SAAI,SAAS,eAAe,CAC1B,eAAc,aAAa;AAE7B,SAAI,SAAS,cAAc,CACzB,eAAc,YAAY;;AAG9B,gBAAY;KACZ;GAEF,MAAM,kBAAkB;IACtB,MAAM,EAAE,cAAc;IACtB,MAAM,EAAE,YAAY,WAAW,oBAAoB,MAAM,OAAO;IAEhE,MAAM,gBAAgB,MAAM,UAAU;AACtC,QAAI,mBAAmB,eAAe;AACpC,SAAI,cAAc,IAChB,SAAQ,kBAAkB,EAA1B;MACE,KAAK;AACH,qBAAc,aAAa,CAAC;AAC5B;MAEF,KAAK;AACH,qBAAc,aAAa;AAC3B;MAEF,SAAS;OACP,MAAM,EAAE,aAAa,gBAAgB;AACrC,qBAAc,aACZ,cAAc,cAAc;AAC9B;;;SAIJ,eAAc,aAAa,KAAK,IAAI,GAAG,WAAW;AAGpD,mBAAc,YAAY,KAAK,IAAI,GAAG,UAAU;;;GAIpD,MAAM,EAAE,uBAAuB,oBAAoB,eACjD,SAAS;AAEX,UAAO;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACD,CAAC;GAIF,MAAM,yBAAyB;IAC7B,MAAM,EACJ,mBACA,mBACA,iBACA,aACA,aACE;IAEJ,MAAM,QAAQ,MAAM,YAAY;IAChC,MAAM,SAAS,MAAM,aAAa;IAClC,MAAM,iBAAiB,MAAM,oBAAoB;IACjD,MAAM,kBAAkB,MAAM,qBAAqB;IACnD,MAAM,EAAE,YAAY,cAAc,MAAM,OAAO;AAgC/C,WAAO;KACL,qBAhC0B,EAAEC,WAAW;MACvC,KAAK;MACL,UAAU;MACV,UAAU;MACV,QAAQ;MACR,OAAO,GAAG,EAAE,aAAa;MACzB,YAAY;MACZ,QAAQ;MACR,UAAU;MACV,OAAQ,QAAQ,MAAO;MACvB,YAAY,cAAc,iBAAiB;MAC3C,OAAO;MACP,SAAS;MACV,CAAC;KAoBA,mBAlBwB,EAAEA,WAAW;MACrC,KAAK;MACL,UAAU;MACV,UAAU;MACV,QAAQ;MACR,OAAO,GAAG,EAAE,WAAW;MACvB,YAAY;MACZ,QAAQ;MACR,UAAU;MACV,OAAQ,SAAS,MAAO;MACxB,YAAY,aAAa,kBAAkB;MAE3C,OAAO;MACP,SAAS;MACV,CAAC;KAKD;;GAGH,MAAM,oBAAoB;IACxB,MAAM,CAAC,aAAa,aAAa,MAAM,gBAAgB;IACvD,MAAM,CAAC,UAAU,UAAU,MAAM,aAAa;IAC9C,MAAM,EAAE,MAAM,aAAa,UAAU,gBAAgB,YAAY;IACjE,MAAM,WAAyB,EAAE;AACjC,QAAI,WAAW,KAAK,cAAc,EAChC,MAAK,IAAI,MAAM,UAAU,OAAO,QAAQ,MACtC,MAAK,IAAI,SAAS,aAAa,UAAU,WAAW,UAAU;KAC5D,MAAM,MAAM,QAAQ;MAAE,aAAa;MAAQ;MAAM,UAAU;MAAK,CAAC;AACjE,cAAS,KACP,EACE,UACA,EAAE,KAAK,EACP,MAAM,UAAU;MACd,aAAa;MACb;MACA,aAAa,iBACT,MAAM,OAAO,CAAC,cACd;MACJ,OAAO,aAAa,KAAK,OAAO;MAChC,UAAU;MACX,CAAC,CACH,CACF;;AAIP,WAAO;;GAGT,MAAM,oBAAoB;IACxB,MAAM,QAAQ,wBAAwB,MAAM,aAAa;IACzD,MAAM,WAAW,aAAa;AAC9B,WAAO,CACL,EACE,OACA,WAAW,MAAM,YAAY;KAC3B,OAAO,MAAM,WAAW;KACxB,KAAK;KACN,CAAC,EACF,CAAC,SAAS,MAAM,GACZ,EACE,eAAe,UAChB,GACD,SACL,CACF;;GAGH,MAAM,qBAAqB;IACzB,MAAM,YAAY,wBAChB,MAAM,iBACP;IACD,MAAM,EAAE,qBAAqB,sBAAsB,kBAAkB;IACrE,MAAM,QAAQ,aAAa;AAE3B,WAAO,EACL,OACA;KACE,KAAK;KACL,OAAO,GAAG,EAAE,UAAU;KACtB,MAAM,MAAM;KACb,EACD;KACE,EACE,WACA;MACE,OAAO,MAAM;MACb,OAAO,MAAM,YAAY;MACzB;MACA,KAAK;MACN,EACD,CAAC,SAAS,UAAU,GAAG,EAAE,eAAe,OAAO,GAAG,MACnD;KACD;KACA;KACD,CACF;;AAGH,UAAO;;EAEV,CAAC"}