@are-visual/virtual-table 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -95,28 +95,28 @@ function App() {
95
95
 
96
96
  #### Table Props
97
97
 
98
- | Prop Name | 说明 | 类型 | 默认值 | 版本 |
99
- | -------------------- | ------------------------------------------------------- | --------------------------------------- | ----------------------------- | ------ |
100
- | ref | 设置最外层 div ref | Ref\<HTMLDivElement\> | | |
101
- | tableBodyRef | 设置 body 部分 table ref | Ref\<HTMLTableElement\> | | |
102
- | className | 样式类名 | string | | |
103
- | style | 样式 | CSSProperties | | |
104
- | tableBodyClassName | body 样式类名 | string | | |
105
- | tableBodyStyle | body 样式 | CSSProperties | | |
106
- | columns | 表格列配置 | ColumnType[] | | |
107
- | dataSource | 表格数据源 | object[] | | |
108
- | rowKey | 表格行 key 的取值 | string | `key` | |
109
- | estimatedRowHeight | 预计每行高度 | number | 46 | |
110
- | estimatedColumnWidth | 预计每列宽度<br />设置后将会开启横向虚拟化 | number | | |
111
- | overscanRows | 额外在首尾渲染数据条数 | number | 5 | |
112
- | overscanColumns | 横向虚拟化时,在头和尾额外渲染多少列 | number | 3 | |
113
- | stickyHeader | 表头吸顶<br />为 true 时 top 为 0,为 number 则是偏移量 | number \| boolean | | |
114
- | defaultColumnWidth | 缺失宽度设置时的默认值(与虚拟化无关) | number | 100 | >=0.2 |
115
- | pipeline | 插件实例 | TablePipeline | | |
116
- | rowClassName | 表格行样式类名 | (*record*, *index*) => string | | |
117
- | onRow | 设置行属性 | (*record*, *index*) => TdHTMLAttributes | | |
118
- | getOffsetTop | 计算顶部偏移量 | () => number | 使用最外层 div 计算 offsetTop | |
119
- | virtualHeader | 表头虚拟化 | boolean | `true` | >0.1.0 |
98
+ | Prop Name | 说明 | 类型 | 默认值 | 版本 |
99
+ | -------------------- | ------------------------------------------------------- | --------------------------------------- | ----------------------------- | ------- |
100
+ | ref | 设置最外层 div ref | Ref\<HTMLDivElement\> | | |
101
+ | tableBodyRef | 设置 body 部分 table ref | Ref\<HTMLTableElement\> | | |
102
+ | className | 样式类名 | string | | |
103
+ | style | 样式 | CSSProperties | | |
104
+ | tableBodyClassName | body 样式类名 | string | | |
105
+ | tableBodyStyle | body 样式 | CSSProperties | | |
106
+ | columns | 表格列配置 | ColumnType[] | | |
107
+ | dataSource | 表格数据源 | object[] | | |
108
+ | rowKey | 表格行 key 的取值 | string \| `(data) => React.Key` | `key` | >=0.5.0 |
109
+ | estimatedRowHeight | 预计每行高度 | number | 46 | |
110
+ | estimatedColumnWidth | 预计每列宽度<br />设置后将会开启横向虚拟化 | number | | |
111
+ | overscanRows | 额外在首尾渲染数据条数 | number | 5 | |
112
+ | overscanColumns | 横向虚拟化时,在头和尾额外渲染多少列 | number | 3 | |
113
+ | stickyHeader | 表头吸顶<br />为 true 时 top 为 0,为 number 则是偏移量 | number \| boolean | | |
114
+ | defaultColumnWidth | 缺失宽度设置时的默认值(与虚拟化无关) | number | 100 | >=0.2 |
115
+ | pipeline | 插件实例 | TablePipeline | | |
116
+ | rowClassName | 表格行样式类名 | (*record*, *index*) => string | | |
117
+ | onRow | 设置行属性 | (*record*, *index*) => TdHTMLAttributes | | |
118
+ | getOffsetTop | 计算顶部偏移量 | () => number | 使用最外层 div 计算 offsetTop | |
119
+ | virtualHeader | 表头虚拟化 | boolean | `true` | >0.1.0 |
120
120
 
121
121
  #### getOffsetTop
122
122
 
@@ -272,7 +272,8 @@ const mergedPipeline = useTablePipeline({
272
272
  | renderHeaderCell | 表头单元格自定义渲染 | MiddlewareRenderHeaderCell| |
273
273
  | renderBodyWrapper | | MiddlewareRenderBodyWrapper| |
274
274
  | renderBodyRoot | | MiddlewareRenderBodyRoot| |
275
- | renderBody | 表格 body 自定义渲染 | MiddlewareRenderBody| |
275
+ | renderBody | 自定义 tbody 渲染 | MiddlewareRenderBody| |
276
+ | renderBodyContent | 表格 body 内容自定义 | MiddlewareRenderBodyContent | >=0.4.0 |
276
277
  | renderRow | 表格行自定义渲染 | MiddlewareRenderRow| |
277
278
  | renderCell | 单元格自定义渲染 | MiddlewareRenderCell| |
278
279
 
package/index.d.ts CHANGED
@@ -59,7 +59,7 @@ interface InnerColumnDescriptor<T> {
59
59
  interface NecessaryProps<T> {
60
60
  dataSource: T[];
61
61
  columns: ColumnType<T>[];
62
- rowKey: keyof T | (string & {});
62
+ rowKey: (keyof T | (string & {})) | ((rowData: T) => Key);
63
63
  }
64
64
 
65
65
  type Prettify<T> = {
@@ -325,6 +325,7 @@ interface VirtualTableCoreProps<T> extends NecessaryProps<T>, Pick<TableBodyProp
325
325
  declare const _default: <T>(props: VirtualTableCoreProps<T> & RefAttributes<HTMLDivElement>) => ReactElement;
326
326
 
327
327
  declare function getKey<T>(column: ColumnType<T>): Key;
328
+ declare function getRowKey<T>(rowData: T, rowKey: NecessaryProps<T>['rowKey']): Key;
328
329
 
329
330
  interface ResizeRect {
330
331
  width: number;
@@ -338,4 +339,4 @@ type PossibleRef<T> = Ref<T> | undefined;
338
339
  declare function mergeRefs<T>(...refs: PossibleRef<T>[]): (node: T | null) => void;
339
340
  declare function useMergedRef<T>(...refs: PossibleRef<T>[]): (node: T | null) => void;
340
341
 
341
- export { type AlignType, type AnyObject, _default$2 as Colgroup, type ColumnDescriptor, type ColumnExtra, type ColumnType, type ContainerSizeState, type FixedType, type HorizontalScrollContextState, type MergedMiddlewareRender, type Middleware, type MiddlewareContext, type MiddlewareRender, type MiddlewareRenderBody, type MiddlewareRenderBodyContent, type MiddlewareRenderBodyRoot, type MiddlewareRenderBodyWrapper, type MiddlewareRenderCell, type MiddlewareRenderContent, type MiddlewareRenderHeader, type MiddlewareRenderHeaderCell, type MiddlewareRenderHeaderRoot, type MiddlewareRenderHeaderRow, type MiddlewareRenderHeaderWrapper, type MiddlewareRenderRoot, type MiddlewareRenderRow, type MiddlewareRenders, type MiddlewareResult, type OnRowType, type PipelineRender, type PipelineRenderOptions, type ScrollElement, type StickyContextState, type TableColumnsContextType, TablePipeline, type TableRowManagerContextType, type UseTablePipelineOptions, _default as VirtualTable, _default$3 as VirtualTableCell, type CellProps as VirtualTableCellProps, type VirtualTableCoreProps as VirtualTableProps, _default$1 as VirtualTableRow, type RowProps as VirtualTableRowProps, createMiddleware, findLastIndex, getKey, getScrollElement, getScrollParent, getScrollTop, isDocument, isRoot, isValidFixed, isValidFixedLeft, isValidFixedRight, isWindow, mergeRefs, onResize, useColumnSizes, useContainerSize, useHorizontalScrollContext, useMergedRef, useShallowMemo, useStableFn, useTablePipeline, useTableRowManager, useTableSticky };
342
+ export { type AlignType, type AnyObject, _default$2 as Colgroup, type ColumnDescriptor, type ColumnExtra, type ColumnType, type ContainerSizeState, type FixedType, type HorizontalScrollContextState, type MergedMiddlewareRender, type Middleware, type MiddlewareContext, type MiddlewareRender, type MiddlewareRenderBody, type MiddlewareRenderBodyContent, type MiddlewareRenderBodyRoot, type MiddlewareRenderBodyWrapper, type MiddlewareRenderCell, type MiddlewareRenderContent, type MiddlewareRenderHeader, type MiddlewareRenderHeaderCell, type MiddlewareRenderHeaderRoot, type MiddlewareRenderHeaderRow, type MiddlewareRenderHeaderWrapper, type MiddlewareRenderRoot, type MiddlewareRenderRow, type MiddlewareRenders, type MiddlewareResult, type OnRowType, type PipelineRender, type PipelineRenderOptions, type ScrollElement, type StickyContextState, type TableColumnsContextType, TablePipeline, type TableRowManagerContextType, type UseTablePipelineOptions, _default as VirtualTable, _default$3 as VirtualTableCell, type CellProps as VirtualTableCellProps, type VirtualTableCoreProps as VirtualTableProps, _default$1 as VirtualTableRow, type RowProps as VirtualTableRowProps, createMiddleware, findLastIndex, getKey, getRowKey, getScrollElement, getScrollParent, getScrollTop, isDocument, isRoot, isValidFixed, isValidFixedLeft, isValidFixedRight, isWindow, mergeRefs, onResize, useColumnSizes, useContainerSize, useHorizontalScrollContext, useMergedRef, useShallowMemo, useStableFn, useTablePipeline, useTableRowManager, useTableSticky };
package/index.esm.js CHANGED
@@ -120,6 +120,12 @@ function useShallowMemo(pickData) {
120
120
  function getKey(column) {
121
121
  return 'key' in column ? column.key : column.dataIndex;
122
122
  }
123
+ function getRowKey(rowData, rowKey) {
124
+ if (typeof rowKey === 'function') {
125
+ return rowKey(rowData);
126
+ }
127
+ return rowData[rowKey];
128
+ }
123
129
 
124
130
  function isValidFixedLeft(fixed) {
125
131
  return fixed === 'left';
@@ -1123,7 +1129,7 @@ function TableBody(props) {
1123
1129
  rowHeights.current.clear();
1124
1130
  });
1125
1131
  var bodyContent = pipelineRender(dataSource.map(function (e, rowIndex) {
1126
- var _rowKey = e[rowKey];
1132
+ var key = getRowKey(e, rowKey);
1127
1133
  return jsx(Row$1, {
1128
1134
  className: clsx(rowClassName == null ? undefined : rowClassName(e, rowIndex)),
1129
1135
  rowIndex: rowIndex + startIndex,
@@ -1132,7 +1138,7 @@ function TableBody(props) {
1132
1138
  onRow: onRow,
1133
1139
  renderRow: renderRow,
1134
1140
  renderCell: renderCell
1135
- }, _rowKey);
1141
+ }, key);
1136
1142
  }), renderBodyContent, {
1137
1143
  columns: columns,
1138
1144
  columnDescriptor: descriptor,
@@ -1828,5 +1834,5 @@ if (process.env.NODE_ENV === 'development') {
1828
1834
  }
1829
1835
  var table = /*#__PURE__*/memo(/*#__PURE__*/forwardRef(VirtualTableCore));
1830
1836
 
1831
- export { Colgroup$1 as Colgroup, table as VirtualTable, Cell$1 as VirtualTableCell, Row$1 as VirtualTableRow, createMiddleware, findLastIndex, getKey, getScrollElement, getScrollParent, getScrollTop, isDocument, isRoot, isValidFixed, isValidFixedLeft, isValidFixedRight, isWindow, mergeRefs, onResize, useColumnSizes, useContainerSize, useHorizontalScrollContext, useMergedRef, useShallowMemo, useStableFn, useTablePipeline, useTableRowManager, useTableSticky };
1837
+ export { Colgroup$1 as Colgroup, table as VirtualTable, Cell$1 as VirtualTableCell, Row$1 as VirtualTableRow, createMiddleware, findLastIndex, getKey, getRowKey, getScrollElement, getScrollParent, getScrollTop, isDocument, isRoot, isValidFixed, isValidFixedLeft, isValidFixedRight, isWindow, mergeRefs, onResize, useColumnSizes, useContainerSize, useHorizontalScrollContext, useMergedRef, useShallowMemo, useStableFn, useTablePipeline, useTableRowManager, useTableSticky };
1832
1838
  //# sourceMappingURL=index.esm.js.map
package/index.esm.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../../packages/virtual-table/src/utils/equal.ts","../../packages/virtual-table/src/core/hooks/useShallowMemo.ts","../../packages/virtual-table/src/core/utils/get-key.ts","../../packages/virtual-table/src/core/utils/verification.ts","../../packages/virtual-table/src/core/context/column-sizes.tsx","../../packages/virtual-table/src/core/context/sticky.tsx","../../packages/virtual-table/src/core/pipeline/render-pipeline.ts","../../packages/virtual-table/src/core/cell.tsx","../../packages/virtual-table/src/core/colgroup.tsx","../../packages/virtual-table/src/utils/dom.ts","../../packages/virtual-table/src/core/hooks/useCalcSize.ts","../../packages/virtual-table/src/core/context/container-size.tsx","../../packages/virtual-table/src/core/context/horizontal-scroll.tsx","../../packages/virtual-table/src/core/context/row-manager.tsx","../../packages/virtual-table/src/core/hooks/useStableFn.ts","../../packages/virtual-table/src/core/pipeline/create-middleware.ts","../../packages/virtual-table/src/core/pipeline/table-pipeline.ts","../../packages/virtual-table/src/core/pipeline/useTablePipeline.ts","../../packages/virtual-table/src/utils/find-last-index.ts","../../packages/virtual-table/src/core/row.tsx","../../packages/virtual-table/src/utils/ref.ts","../../packages/virtual-table/src/core/utils/on-resize.ts","../../packages/virtual-table/src/core/hooks/useRowVirtualize.ts","../../packages/virtual-table/src/core/body.tsx","../../packages/virtual-table/src/core/header.tsx","../../packages/virtual-table/src/core/hooks/useColumnVirtualize.ts","../../packages/virtual-table/src/core/root.tsx","../../packages/virtual-table/src/core/table.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nexport type validObjectValue = Record<string, any> | null | undefined\nexport type validArrayValue = any[] | null | undefined\n\nexport function shallowEqualObjects(\n objA: validObjectValue,\n objB: validObjectValue,\n): boolean {\n if (objA === objB) {\n return true\n }\n\n if (!objA || !objB) {\n return false\n }\n\n const aKeys = Object.keys(objA)\n const bKeys = Object.keys(objB)\n const len = aKeys.length\n\n if (bKeys.length !== len) {\n return false\n }\n\n for (let i = 0; i < len; i += 1) {\n const key = aKeys[i]\n\n if (objA[key] !== objB[key] || !Object.prototype.hasOwnProperty.call(objB, key)) {\n return false\n }\n }\n\n return true\n}\n\nexport function shallowEqualArrays(\n arrA: validArrayValue,\n arrB: validArrayValue,\n): boolean {\n if (arrA === arrB) {\n return true\n }\n\n if (!arrA || !arrB) {\n return false\n }\n\n const len = arrA.length\n\n if (arrB.length !== len) {\n return false\n }\n\n for (let i = 0; i < len; i += 1) {\n if (arrA[i] !== arrB[i]) {\n return false\n }\n }\n\n return true\n}\n\nexport function isShallowEqual(value: unknown, oldValue: unknown) {\n if (Object.is(value, oldValue)) {\n return true\n }\n if (Array.isArray(value) && Array.isArray(oldValue)) {\n if (shallowEqualArrays(value, oldValue)) {\n return true\n }\n if (value.length === oldValue.length) {\n const hasObject = value.findIndex((x) => typeof x === 'object' && x != null) > -1\n if (hasObject) {\n return value.every((state, index) => {\n if (Array.isArray(state)) {\n return shallowEqualArrays(state, oldValue[index] as unknown[])\n }\n if (typeof state === 'object' && state != null) {\n return shallowEqualObjects(\n state as Record<string, unknown>,\n oldValue[index] as Record<string, unknown>,\n )\n }\n return Object.is(state, oldValue[index])\n })\n }\n }\n return false\n }\n if (value instanceof Map && oldValue instanceof Map) {\n const keys = Array.from(value.keys())\n const oldKeys = Array.from(oldValue.keys())\n if (isShallowEqual(keys, oldKeys)) {\n const values = Array.from(value.values())\n const oldValues = Array.from(oldValue.values())\n if (isShallowEqual(values, oldValues)) {\n return true\n }\n }\n return false\n }\n if (typeof value === 'object' && value != null) {\n return shallowEqualObjects(value, oldValue as Record<string, unknown>)\n }\n return false\n}\n","/* eslint-disable react-compiler/react-compiler */\nimport { useRef } from 'react'\n\nimport { isShallowEqual } from '../../utils/equal'\n\n/**\n * 缓存数据(浅比较,如果是数组则对第一层进行浅比较)\n */\nexport function useShallowMemo<T>(pickData: () => T) {\n const nextState = pickData()\n const value = useRef<T>(nextState)\n\n if (!isShallowEqual(nextState, value.current)) {\n value.current = nextState\n }\n\n return value.current\n}\n","import type { Key } from 'react'\nimport type { ColumnType } from '../types'\n\nexport function getKey<T>(column: ColumnType<T>) {\n return 'key' in column ? (column.key as Key) : column.dataIndex as string\n}\n","export type FixedType = 'left' | 'right'\n\nexport function isValidFixedLeft(fixed: unknown) {\n return fixed === 'left'\n}\n\nexport function isValidFixedRight(fixed: unknown) {\n return fixed === 'right'\n}\n\nexport function isValidFixed(fixed: unknown) {\n return isValidFixedLeft(fixed) || isValidFixedRight(fixed)\n}\n","import type { Key } from 'react'\nimport { createContext, useContext } from 'react'\n\nexport interface TableColumnsContextType {\n widthList: Map<Key, number>\n setWidthList: (value: Map<Key, number>) => void\n}\n\nexport const ColumnSizes = createContext<TableColumnsContextType | null>(null)\n\nif (__DEV__) {\n ColumnSizes.displayName = 'VirtualTable.ColumnSizes'\n}\n\nexport function useColumnSizes() {\n const context = useContext(ColumnSizes)\n if (context == null) {\n throw new Error('useColumnSizes provider not found')\n }\n return context\n}\n","import type { Key, PropsWithChildren } from 'react'\nimport type { ColumnType, FixedType } from '../types'\nimport { createContext, useContext, useMemo } from 'react'\nimport { useShallowMemo } from '../hooks/useShallowMemo'\nimport { getKey } from '../utils/get-key'\nimport { isValidFixedLeft, isValidFixedRight } from '../utils/verification'\nimport { useColumnSizes } from './column-sizes'\n\nexport interface StickyContextState {\n size: Map<Key, number>\n /** 每一列设置的 fixed 值 */\n fixed: { key: Key, fixed: FixedType | undefined }[]\n}\n\nexport const Sticky = createContext<StickyContextState | null>(null)\n\nif (__DEV__) {\n Sticky.displayName = 'VirtualTable.Sticky'\n}\n\nexport function StickyContext(\n props: PropsWithChildren<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns: ColumnType<any>[]\n }>,\n) {\n const { columns, children } = props\n const { widthList } = useColumnSizes()\n\n const columnsFixedRecord = useMemo(() => {\n return columns.map((column) => {\n const key = getKey(column)\n return { key, fixed: column.fixed }\n })\n }, [columns])\n\n const stickySizes = useMemo(() => {\n let left = 0\n const leftOffset = columnsFixedRecord.reduce<number[]>((res, item, index) => {\n const { fixed, key } = item\n if (isValidFixedLeft(fixed)) {\n res[index] = left\n // eslint-disable-next-line react-compiler/react-compiler\n left += widthList.get(key) ?? 0\n }\n return res\n }, [])\n\n let right = 0\n const rightOffset = columnsFixedRecord.reduceRight((res, item, index) => {\n const { fixed, key } = item\n if (isValidFixedRight(fixed)) {\n res[index] = right\n right += widthList.get(key) ?? 0\n }\n return res\n }, [] as number[])\n\n return columnsFixedRecord.reduce((result, item, index) => {\n const { key, fixed } = item\n if (isValidFixedLeft(fixed)) {\n result.set(key, leftOffset[index])\n return result\n }\n if (isValidFixedRight(fixed)) {\n result.set(key, rightOffset[index])\n return result\n }\n return result\n }, new Map<Key, number>())\n }, [columnsFixedRecord, widthList])\n\n const shallowMemoFixedRecord = useShallowMemo(() => columnsFixedRecord)\n const shallowMemoStickySizes = useShallowMemo(() => stickySizes)\n\n const stickyState = useMemo((): StickyContextState => {\n return { size: shallowMemoStickySizes, fixed: shallowMemoFixedRecord }\n }, [shallowMemoFixedRecord, shallowMemoStickySizes])\n\n return (\n <Sticky.Provider value={stickyState}>\n {children}\n </Sticky.Provider>\n )\n}\n\nexport function useTableSticky() {\n const context = useContext(Sticky)\n if (context == null) {\n throw new Error('useTableSticky provider not found')\n }\n return context\n}\n","import type { ReactNode } from 'react'\nimport type { MergedMiddlewareRender } from './types'\n\ntype RenderOptions<T> = T extends ((children: ReactNode, options: infer Opt) => ReactNode) ? Opt : object\n\nexport function pipelineRender<T extends MergedMiddlewareRender>(\n node: ReactNode,\n render: T | undefined,\n options: RenderOptions<T>,\n): ReactNode {\n if (typeof render === 'function') {\n // @ts-expect-error: There is no way to declare the type correctly, but it works at runtime.\n return render(node, options)\n }\n return node\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { DetailedHTMLProps, HTMLAttributes, ReactElement } from 'react'\nimport type { MiddlewareRenderCell } from './pipeline/types'\nimport type { AnyObject, ColumnType } from './types'\nimport clsx from 'clsx'\nimport { memo } from 'react'\nimport { useTableSticky } from './context/sticky'\nimport { pipelineRender } from './pipeline/render-pipeline'\nimport { getKey } from './utils/get-key'\nimport { isValidFixed, isValidFixedLeft, isValidFixedRight } from './utils/verification'\n\ntype NativeProps = DetailedHTMLProps<\n HTMLAttributes<HTMLTableCellElement>,\n HTMLTableCellElement\n>\n\nexport interface CellProps<T> extends Omit<NativeProps, 'children'> {\n column: ColumnType<T>\n rowIndex: number\n rowData: T\n renderCell?: MiddlewareRenderCell\n}\n\nfunction getTableCellContent<T extends AnyObject>(\n index: number,\n data: T,\n column: ColumnType<any>,\n): any {\n const { render } = column\n const rowData = data as AnyObject\n if ('dataIndex' in column) {\n const dataIndex = column.dataIndex as string\n if (typeof render !== 'function') {\n return rowData[dataIndex]\n }\n return render(rowData[dataIndex], data, index)\n }\n return render?.(data, data, index) ?? null\n}\n\nfunction Cell<T>(props: CellProps<T>) {\n const {\n className,\n style,\n column,\n rowData,\n rowIndex,\n renderCell,\n ...restProps\n } = props\n\n const { align, fixed, onCell } = column\n const key = getKey(column)\n const { size: stickySizes } = useTableSticky()\n\n const {\n className: extraClassName,\n style: extraStyle,\n colSpan,\n rowSpan,\n ...extraProps\n } = onCell?.(rowData, rowIndex) ?? {}\n\n if (colSpan === 0 || rowSpan === 0) {\n return null\n }\n\n return pipelineRender(\n <td\n {...restProps}\n {...extraProps}\n colSpan={colSpan}\n rowSpan={rowSpan}\n className={clsx(\n 'virtual-table-cell',\n align != null && `virtual-table-align-${align}`,\n isValidFixed(fixed) && 'virtual-table-sticky-cell',\n className,\n column.className,\n extraClassName,\n )}\n style={{\n ...style,\n ...extraStyle,\n left: isValidFixedLeft(fixed) ? stickySizes.get(key) : undefined,\n right: isValidFixedRight(fixed) ? stickySizes.get(key) : undefined,\n }}\n >\n {getTableCellContent(rowIndex, rowData as AnyObject, column)}\n </td>,\n renderCell,\n { column },\n )\n}\n\nexport default memo(Cell) as <T>(props: CellProps<T>) => ReactElement\n","import type { FC, Key } from 'react'\nimport type { ColumnDescriptor } from './types'\nimport { memo, useRef } from 'react'\nimport { isShallowEqual } from '../utils/equal'\n\nexport interface ColgroupProps {\n columns: ColumnDescriptor[]\n onColumnSizesMeasure?: (columnSizes: Map<Key, number>) => void\n}\n\nconst Colgroup: FC<ColgroupProps> = (props) => {\n const { columns, onColumnSizesMeasure } = props\n\n const enableMeasure = onColumnSizesMeasure != null\n const columnSizes = new Map<Key, number>()\n const prevColumnSizes = useRef(new Map<Key, number>())\n\n return (\n <colgroup\n ref={() => {\n if (!enableMeasure) return\n if (!isShallowEqual(columnSizes, prevColumnSizes.current)) {\n onColumnSizesMeasure(columnSizes)\n prevColumnSizes.current = columnSizes\n }\n }}\n >\n {columns.map((item) => {\n const { key } = item\n if (item.type === 'blank') {\n return <col key={key} className=\"blank\" style={{ width: item.width }} />\n }\n\n const { column } = item\n\n return (\n <col\n key={key}\n ref={(node) => {\n if (node == null || !enableMeasure) return\n columnSizes.set(key, node.offsetWidth)\n }}\n style={{\n width: column.width,\n minWidth: column.minWidth,\n }}\n />\n )\n })}\n </colgroup>\n )\n}\n\nexport default memo(Colgroup)\n","export type ScrollElement = HTMLElement | Window\n\nconst overflowStylePatterns = /auto|scroll|overlay|hidden/\n\nfunction isElement(node: unknown): node is Node {\n if (!(node instanceof Node)) {\n return false\n }\n const ELEMENT_NODE_TYPE = 1\n return node.nodeType === ELEMENT_NODE_TYPE\n}\n\nexport function getScrollParent(\n el: Element,\n root: ScrollElement | null | undefined = window,\n): ScrollElement {\n let node = el\n\n while (node !== root && isElement(node)) {\n if (node === document.body) {\n return root as HTMLElement\n }\n const { overflow, overflowY, overflowX } = window.getComputedStyle(node)\n if (overflowStylePatterns.test(overflow + overflowY + overflowX)) {\n return node as HTMLElement\n }\n node = node.parentNode as Element\n }\n return el.ownerDocument.defaultView ?? window\n}\n\nexport function isWindow(arg: unknown): arg is Window {\n return Object.prototype.toString.call(arg) === '[object Window]'\n}\n\nexport function isDocument(arg: unknown): arg is Document {\n return Object.prototype.toString.call(arg) === '[object HTMLDocument]'\n}\n\nexport function isRoot(arg: unknown): arg is HTMLElement {\n return Object.prototype.toString.call(arg) === '[object HTMLHtmlElement]'\n}\n\nexport function getScrollElement(el: unknown): Element {\n if (isDocument(el)) {\n return el.scrollingElement!\n }\n if (isElement(el)) {\n return el as Element\n }\n return document.scrollingElement!\n}\n\nexport function getScrollTop(node: ScrollElement) {\n let result = 0\n if (isWindow(node) || isRoot(node)) {\n result = window.scrollY\n } else {\n const element = getScrollElement(node)\n result = element.scrollTop\n }\n return result\n}\n","import type { RefObject } from 'react'\nimport type { ScrollElement } from '../../utils/dom'\nimport { useLayoutEffect, useRef, useState } from 'react'\nimport { isWindow } from '../../utils/dom'\n\nexport interface CalcSizeOptions {\n getScroller: () => ScrollElement | undefined\n root: RefObject<HTMLDivElement>\n}\n\nexport function useCalcSize(options: CalcSizeOptions) {\n const { getScroller, root } = options\n\n const [scrollContainerWidth, setScrollContainerWidth] = useState(0)\n const [scrollContainerHeight, setScrollContainerHeight] = useState(0)\n\n const [tableWidth, setTableWidth] = useState(0)\n const [tableHeight, setTableHeight] = useState(0)\n\n const scrollerContainerRef = useRef<HTMLElement | null>(null)\n\n useLayoutEffect(() => {\n const scrollerContainer = getScroller()\n if (scrollerContainer == null) return\n let scroller: HTMLElement\n if (isWindow(scrollerContainer)) {\n scroller = document.scrollingElement as HTMLElement\n } else {\n scroller = scrollerContainer\n }\n scrollerContainerRef.current = scroller\n const observer = new ResizeObserver((entries) => {\n const { width, height } = entries[0].contentRect\n setScrollContainerWidth(width)\n setScrollContainerHeight(height)\n })\n observer.observe(scroller)\n return () => {\n observer.disconnect()\n }\n }, [getScroller])\n\n useLayoutEffect(() => {\n const node = root.current\n if (node == null) return\n const observer = new ResizeObserver((entries) => {\n const { width, height } = entries[0].contentRect\n setTableWidth(width)\n setTableHeight(height)\n })\n observer.observe(node)\n return () => {\n observer.disconnect()\n }\n }, [root])\n\n return {\n scrollContainerWidth,\n scrollContainerHeight,\n tableWidth,\n tableHeight,\n }\n}\n","import type { PropsWithChildren } from 'react'\nimport type { CalcSizeOptions } from '../hooks/useCalcSize'\nimport { createContext, useContext, useMemo } from 'react'\nimport { useCalcSize } from '../hooks/useCalcSize'\n\nexport interface ContainerSizeState {\n scrollContainerWidth: number\n scrollContainerHeight: number\n tableWidth: number\n tableHeight: number\n}\n\nconst ContainerSize = createContext<ContainerSizeState | null>(null)\n\nexport function ContainerSizeContext(props: PropsWithChildren<CalcSizeOptions>) {\n const { getScroller, root, children } = props\n\n const {\n scrollContainerHeight,\n scrollContainerWidth,\n tableHeight,\n tableWidth,\n } = useCalcSize({ getScroller, root })\n\n const state = useMemo((): ContainerSizeState => {\n return {\n scrollContainerWidth,\n scrollContainerHeight,\n tableWidth,\n tableHeight,\n }\n }, [scrollContainerWidth, scrollContainerHeight, tableWidth, tableHeight])\n\n return (\n <ContainerSize.Provider value={state}>\n {children}\n </ContainerSize.Provider>\n )\n}\n\nexport function useContainerSize() {\n const context = useContext(ContainerSize)\n if (context == null) {\n throw new Error('useContainerSize provider not found')\n }\n return context\n}\n","import type { PropsWithChildren } from 'react'\nimport { createContext, useContext, useMemo, useRef } from 'react'\n\ntype Listener = (scrollLeft: number, node: HTMLElement) => void\n\nexport interface HorizontalScrollContextState {\n listen: (key: string, listener: Listener) => () => void\n notify: (key: string, options: { scrollLeft: () => number, node: HTMLElement }) => void\n}\n\nconst HorizontalScroll = createContext<HorizontalScrollContextState | null>(null)\n\nif (__DEV__) {\n HorizontalScroll.displayName = 'VirtualTable.HorizontalScroll'\n}\n\nexport function HorizontalScrollContext(props: PropsWithChildren) {\n const { children } = props\n\n const listenerMap = useRef(new Map<string, Listener>())\n const context = useMemo((): HorizontalScrollContextState => {\n const skipEvent = new Set<string>()\n return {\n listen(key, listener) {\n listenerMap.current.set(key, (scrollLeft, node) => {\n listener(scrollLeft, node)\n })\n return () => {\n listenerMap.current.delete(key)\n }\n },\n notify(key, options) {\n if (skipEvent.has(key)) {\n skipEvent.delete(key)\n return\n }\n const { scrollLeft, node } = options\n let rAF = window.requestAnimationFrame as ((fn: () => void) => void) | undefined\n if (rAF == null) {\n rAF = (fn: () => void) => {\n fn()\n }\n }\n listenerMap.current.forEach((listener, itemKey) => {\n if (key === itemKey) return\n skipEvent.add(itemKey)\n rAF(() => {\n listener(scrollLeft(), node)\n })\n })\n },\n }\n }, [])\n\n return <HorizontalScroll.Provider value={context}>{children}</HorizontalScroll.Provider>\n}\n\nexport function useHorizontalScrollContext() {\n const context = useContext(HorizontalScroll)\n\n if (context == null) {\n throw new Error('useHorizontalScrollContext provider not found')\n }\n\n return context\n}\n","import type { Key } from 'react'\nimport { createContext, useContext } from 'react'\n\nexport interface TableRowManagerContextType {\n getRowHeightList: () => number[]\n /**\n * @param index rowIndex\n * @param key 唯一的 key,用于去重\n * @param height 行高\n */\n updateRowHeight: (index: number, key: Key, height: number) => void\n}\n\nexport const TableRowManager = createContext<TableRowManagerContextType | null>(null)\n\nif (__DEV__) {\n TableRowManager.displayName = 'VirtualTable.RowManager'\n}\n\nexport function useTableRowManager() {\n const context = useContext(TableRowManager)\n if (context == null) {\n throw new Error('useTableRowManager provider not found')\n }\n return context\n}\n","import { useCallback, useLayoutEffect, useRef } from 'react'\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport function useStableFn<T extends Function>(callback: T): T {\n const fn = useRef<T | null>(null)\n useLayoutEffect(() => {\n fn.current = callback\n })\n\n const stableFn = useCallback((...args: unknown[]) => {\n return fn.current?.(...args) as unknown\n }, []) as unknown as T\n\n return stableFn\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Middleware, MiddlewareContext, MiddlewareResult } from './types'\nimport { isShallowEqual } from '../../utils/equal'\n\n/**\n * 创建中间件,内部会浅比较 options,只有 options 改变才会返回新的函数。\n */\nfunction createMiddleware<T, Args extends any[]>(\n hook: (ctx: MiddlewareContext<T>, ...args: Args) => MiddlewareResult<T>,\n): (...args: Args) => Middleware<T> {\n const cache = {\n current: null as Middleware<T> | null,\n options: null as Args | null | undefined,\n }\n\n return (...options: Args): Middleware<T> => {\n const useMiddleware: Middleware<T> = (ctx) => hook(ctx, ...options)\n\n if (isShallowEqual(options, cache.options)) {\n return cache.current ?? useMiddleware\n }\n\n cache.options = options\n cache.current = useMiddleware\n\n return useMiddleware\n }\n}\n\nexport type { MiddlewareResult }\nexport { createMiddleware }\n","import type { ReactNode } from 'react'\nimport type { OnRowType } from '../types'\nimport type { Middleware, MiddlewareContext, MiddlewareRenders, MiddlewareResult } from './types'\nimport clsx from 'clsx'\n\nexport interface Hook<T> { priority: number, hook: Middleware<T> }\nexport type UnsafeHook<T> = Middleware<T> | undefined | null | Hook<T>\n\ntype RenderFunctions<T> = {\n [K in keyof T]: (T[K])[]\n}\n\nexport function shakeUnsafeHooks<T>(hooks: UnsafeHook<T>[]): Hook<T>[] {\n if (Array.isArray(hooks)) {\n return hooks.filter((x) => {\n return x != null && (typeof x === 'function' || typeof x.hook === 'function')\n }).map((hook): Hook<T> => {\n if (typeof hook === 'function') {\n return { priority: 100, hook }\n }\n return hook!\n })\n }\n return []\n}\n\nexport class TablePipeline<T> {\n constructor() {\n this.use = this.use.bind(this)\n }\n\n hooks: Hook<T>[] = []\n\n setHooks(value: Hook<T>[]) {\n this.hooks = value\n }\n\n use(options: MiddlewareContext<T>): MiddlewareResult<T> {\n if (this.hooks.length === 0) {\n return options\n }\n\n const context: { current: MiddlewareResult<T> } = { current: options }\n\n const renderFunctionMap: RenderFunctions<Required<MiddlewareRenders>> = {\n render: [],\n renderRoot: [],\n renderContent: [],\n renderHeaderWrapper: [],\n renderHeaderRoot: [],\n renderHeader: [],\n renderHeaderRow: [],\n renderHeaderCell: [],\n renderBodyWrapper: [],\n renderBodyRoot: [],\n renderBody: [],\n renderBodyContent: [],\n renderRow: [],\n renderCell: [],\n }\n\n const rowClassNameFunctions: ((record: T, index: number) => string)[] = []\n const onRowFunctions: OnRowType<T>[] = []\n\n const hooks = this.hooks.slice()\n hooks.sort((a, b) => a.priority - b.priority)\n\n hooks.map((x) => x.hook).forEach((hook) => {\n const nextCtx = hook(context.current)\n const {\n render: _render,\n renderRoot: _renderRoot,\n renderContent: _renderContent,\n renderHeaderWrapper: _renderHeaderWrapper,\n renderHeaderRoot: _renderHeaderRoot,\n renderHeader: _renderHeader,\n renderHeaderRow: _renderHeaderRow,\n renderHeaderCell: _renderHeaderCell,\n renderBodyWrapper: _renderBodyWrapper,\n renderBodyRoot: _renderBodyRoot,\n renderBody: _renderBody,\n renderBodyContent: _renderBodyContent,\n renderRow: _renderRow,\n renderCell: _renderCell,\n\n rowClassName,\n onRow,\n ...rest\n } = nextCtx\n\n Object.entries(renderFunctionMap).forEach(([key, value]) => {\n const target = nextCtx[key as keyof MiddlewareRenders]\n if (typeof target === 'function') {\n // @ts-expect-error: There is no way to declare the type correctly, but it works at runtime.\n value.push(target)\n }\n })\n\n if (typeof rowClassName === 'function') {\n rowClassNameFunctions.push(rowClassName)\n }\n if (typeof onRow === 'function') {\n onRowFunctions.push(onRow)\n }\n context.current = rest\n })\n\n Object.entries(renderFunctionMap).forEach(([key, renders]) => {\n if (renders.length > 0) {\n context.current[key as keyof MiddlewareRenders] = (children, args) => {\n // reduce 把 [render1, render2] 转为 render2(render1(children))\n return renders.reduce<ReactNode>((node, render) => {\n // @ts-expect-error: There is no way to declare the type correctly, but it works at runtime.\n return render(node, args)\n }, children)\n }\n }\n })\n\n if (rowClassNameFunctions.length > 0) {\n context.current.rowClassName = (record, index) => {\n return clsx(...rowClassNameFunctions.map((fn) => fn(record, index)))\n }\n }\n\n if (onRowFunctions.length > 0) {\n context.current.onRow = (record, index) => {\n return onRowFunctions.reduce((result, item) => {\n return { ...result, ...item(record, index) }\n }, {})\n }\n }\n\n return context.current\n }\n\n static defaultPipeline = new TablePipeline()\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Hook } from './table-pipeline'\nimport type { Middleware } from './types'\nimport { useMemo } from 'react'\nimport { shallowEqualArrays } from '../../utils/equal'\nimport { shakeUnsafeHooks, TablePipeline } from './table-pipeline'\n\nexport interface UseTablePipelineOptions<T = any> {\n pipeline?: TablePipeline<T>\n use?: (Middleware<T> | Hook<T>)[]\n}\n\nexport { TablePipeline }\nexport type { Hook }\n\nexport function useTablePipeline<T = any>(options: UseTablePipelineOptions<T>) {\n const { use, pipeline: extraPipeline } = options\n\n const cached = useMemo(() => ({ current: new TablePipeline<T>() }), [])\n\n if (use != null) {\n const nextHooks = shakeUnsafeHooks([...use, ...(extraPipeline?.hooks ?? [])])\n\n if (!shallowEqualArrays(cached.current.hooks, nextHooks)) {\n const pipeline = new TablePipeline<T>()\n pipeline.setHooks(nextHooks)\n cached.current = pipeline\n return pipeline\n }\n }\n\n return cached.current\n}\n","export function findLastIndex<T>(\n arr: T[],\n predicate: (value: T, index: number) => boolean,\n) {\n let result = -1\n for (let i = 0; i < arr.length; i += 1) {\n if (predicate(arr[i], i)) {\n result = i\n }\n }\n return result\n}\n","import type { DetailedHTMLProps, HTMLAttributes, ReactElement } from 'react'\nimport type { MiddlewareRenderCell, MiddlewareRenderRow } from './pipeline/types'\nimport type { InnerColumnDescriptor, OnRowType } from './types'\nimport clsx from 'clsx'\nimport { memo } from 'react'\nimport { findLastIndex } from '../utils/find-last-index'\nimport Cell from './cell'\nimport { useTableRowManager } from './context/row-manager'\nimport { pipelineRender } from './pipeline/render-pipeline'\nimport { isValidFixedLeft, isValidFixedRight } from './utils/verification'\n\ntype NativeProps = DetailedHTMLProps<\n HTMLAttributes<HTMLTableRowElement>,\n HTMLTableRowElement\n>\n\nexport interface RowProps<T> extends Omit<NativeProps, 'children'> {\n rowIndex: number\n rowData: T\n columns: InnerColumnDescriptor<T>\n onRow?: OnRowType<T>\n renderRow?: MiddlewareRenderRow\n renderCell?: MiddlewareRenderCell\n}\n\nfunction Row<T>(props: RowProps<T>) {\n const {\n className,\n rowIndex,\n rowData,\n columns: columnDescriptor,\n onRow,\n renderRow,\n renderCell,\n ...rest\n } = props\n\n const { updateRowHeight } = useTableRowManager()\n\n const { columns, descriptor } = columnDescriptor\n\n const lastFixedLeftColumnIndex = findLastIndex(descriptor, (x) => {\n if (x.type === 'blank') {\n return false\n }\n return isValidFixedLeft(x.column.fixed)\n })\n const firstFixedRightColumnIndex = descriptor.findIndex((x) => {\n if (x.type === 'blank') {\n return false\n }\n return isValidFixedRight(x.column.fixed)\n })\n\n const { className: extraClassName, ...extraProps } = onRow?.(rowData, rowIndex) ?? {}\n\n return pipelineRender(\n <tr\n {...rest}\n {...extraProps}\n className={clsx('virtual-table-row', className, extraClassName)}\n ref={(node) => {\n if (node == null) return\n // 小心陷阱:当 table 父元素为 display: none 时,依然会触发 updateRowHeight 函数,并设置高度为 0\n updateRowHeight(rowIndex, rowIndex, node.offsetHeight)\n }}\n >\n {descriptor.map((item, index) => {\n const { key } = item\n if (item.type === 'blank') {\n return <td key={key} />\n }\n const { column } = item\n return (\n <Cell\n key={key}\n className={clsx(\n lastFixedLeftColumnIndex === index && 'virtual-table-cell-fix-left-last',\n firstFixedRightColumnIndex === index\n && 'virtual-table-cell-fix-right-first',\n )}\n column={column}\n rowIndex={rowIndex}\n rowData={rowData}\n renderCell={renderCell}\n />\n )\n })}\n </tr>,\n renderRow,\n { columns, rowIndex, rowData, columnDescriptor: descriptor },\n )\n}\n\nexport default memo(Row) as <T>(props: RowProps<T>) => ReactElement\n","import type { MutableRefObject, Ref } from 'react'\nimport { useCallback } from 'react'\n\ntype PossibleRef<T> = Ref<T> | undefined\n\nexport function assignRef<T>(ref: PossibleRef<T>, value: T) {\n if (typeof ref === 'function') {\n ref(value)\n } else if (typeof ref === 'object' && ref !== null && 'current' in ref) {\n (ref as MutableRefObject<T>).current = value\n }\n}\n\nexport function mergeRefs<T>(...refs: PossibleRef<T>[]) {\n return (node: T | null) => {\n refs.forEach((ref) => assignRef(ref, node))\n }\n}\n\nexport function useMergedRef<T>(...refs: PossibleRef<T>[]) {\n // eslint-disable-next-line react-compiler/react-compiler\n return useCallback(mergeRefs(...refs), refs)\n}\n","import { isWindow } from '../../utils/dom'\n\ninterface ResizeRect {\n width: number\n height: number\n}\n\nexport function onResize(target: Window | HTMLElement, callback: (rect: ResizeRect) => void) {\n if (isWindow(target)) {\n const listener = () => {\n callback({\n width: window.innerWidth,\n height: window.innerHeight,\n })\n }\n listener()\n window.addEventListener('resize', listener)\n return () => {\n window.removeEventListener('resize', listener)\n }\n } else {\n const observer = new ResizeObserver((entries) => {\n const rect = entries[0].contentRect\n callback({ width: rect.width, height: rect.height })\n })\n observer.observe(target)\n return () => {\n observer.disconnect()\n }\n }\n}\n","/* eslint-disable react-compiler/react-compiler */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ScrollElement } from '../../utils/dom'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { getScrollElement, isRoot, isWindow } from '../../utils/dom'\nimport { onResize } from '../utils/on-resize'\n\nexport interface RowRect {\n index: number\n height: number\n top: number\n bottom: number\n}\n\ninterface UseRowVirtualizeOptions<T = any> {\n getOffsetTop: () => number\n dataSource: T[]\n getScroller: () => ScrollElement | undefined\n estimateSize: number\n overscan: number\n}\n\nfunction anchorQuery(rects: RowRect[], scrollTop: number) {\n let left = 0\n let right = rects.length - 1\n let index = -1\n\n while (left <= right) {\n const mid = Math.floor((left + right) / 2)\n\n if (rects[mid].bottom > scrollTop) {\n index = mid\n right = mid - 1\n } else {\n left = mid + 1\n }\n }\n\n if (index === -1) {\n return undefined\n }\n\n return rects[index]\n}\n\nexport function useRowVirtualize<T = any>(options: UseRowVirtualizeOptions<T>) {\n const {\n getOffsetTop,\n dataSource: rawData,\n getScroller,\n estimateSize,\n overscan,\n } = options\n\n const [startIndex, setStartIndex] = useState(0)\n const [endIndex, setEndIndex] = useState(0)\n\n const dataSlice = useMemo(() => {\n return rawData.slice(startIndex, endIndex)\n }, [rawData, startIndex, endIndex])\n\n // 行高信息(先填充预估高度,DOM渲染后再更新成实际高度)\n const rowHeights = useRef<number[]>([])\n const fillRowHeights = () => {\n const len = rawData.length\n for (let i = 0; i < len; i++) {\n const target = rowHeights.current[i] as number | undefined\n // 由于 fillRowHeights 是在渲染阶段调用,防止重复渲染时 estimateSize 覆盖了真实 DOM 的高度\n if (target == null) {\n rowHeights.current[i] = estimateSize\n }\n }\n rowHeights.current = rowHeights.current.slice(0, len)\n }\n fillRowHeights()\n\n // 布局信息(也就是锚点元素需要的信息,top,bottom,height,index)\n const rowRects = useRef<RowRect[]>([])\n const updateRowRectList = (shouldSkip = false) => {\n if (shouldSkip && rowRects.current.length > 0) {\n return\n }\n const { rects } = rowHeights.current.reduce((result, height, index) => {\n const nextTop = result.top + height\n result.rects.push({\n index,\n top: result.top,\n height,\n bottom: nextTop,\n })\n result.top = nextTop\n return result\n }, { top: 0, rects: [] as RowRect[] })\n rowRects.current = rects\n }\n\n const setRowHeight = (index: number, height: number) => {\n rowHeights.current[index] = height\n }\n\n // 锚点元素,当前虚拟列表中,最接近滚动容器顶部的元素\n const anchorRef = useRef<RowRect>({\n index: 0,\n height: estimateSize,\n top: 0,\n bottom: estimateSize,\n })\n\n // 用来判断滚动方向\n const scrollTopRef = useRef(0)\n const initial = useRef(false)\n useEffect(() => {\n const container = getScroller()\n if (container == null) return\n\n let count = 0\n\n const getScrollTop = () => {\n const offsetTop = getOffsetTop()\n let result = 0\n if (isWindow(container) || isRoot(container)) {\n result = window.scrollY\n } else {\n const element = getScrollElement(container)\n result = element.scrollTop\n }\n return Math.max(result - offsetTop, 0)\n }\n\n const calcCount = (scrollerContainerHeight: number) => {\n const prevCount = count\n count = Math.ceil(scrollerContainerHeight / estimateSize)\n return { prevCount }\n }\n\n const updateBoundary = (scrollTop: number) => {\n const anchor = anchorQuery(rowRects.current, scrollTop)\n if (anchor != null) {\n anchorRef.current = anchor\n setStartIndex(Math.max(0, anchor.index - overscan))\n setEndIndex(anchor.index + count + overscan)\n }\n }\n\n const onScroll = (e: Event) => {\n const offsetTop = getOffsetTop()\n const scrollElement = getScrollElement(e.target)\n const scrollTop = Math.max(0, scrollElement.scrollTop - offsetTop)\n\n // 是否为向下滚动\n const isScrollDown = scrollTop > scrollTopRef.current\n\n if (isScrollDown) {\n // 如果滚动距离比较小,没有超出锚点元素的边界,就不需要计算 startIndex、endIndex 了\n if (scrollTop > anchorRef.current.bottom) {\n updateBoundary(scrollTop)\n }\n } else {\n if (scrollTop < anchorRef.current.top) {\n updateBoundary(scrollTop)\n }\n }\n\n scrollTopRef.current = scrollTop\n }\n\n let prevHeight = 0\n const stopListen = onResize(container, (rect) => {\n // 处理父元素 display:none 容器高度丢失,导致显示 row 不准确\n if (rect.height === prevHeight || rect.height === 0) {\n return\n }\n prevHeight = rect.height\n calcCount(rect.height)\n const scrollTop = getScrollTop()\n if (!initial.current) {\n initial.current = true\n let nextStartIndex = 0\n // 判断一下当前滚动位置,计算 startIndex(场景:SPA 页面切换且渲染非异步数据)\n if (scrollTop >= estimateSize) {\n nextStartIndex = Math.max(Math.floor(scrollTop / estimateSize) - 1 - overscan, 0)\n }\n const nextEndIndex = nextStartIndex + count + overscan\n setStartIndex(nextStartIndex)\n setEndIndex(nextEndIndex)\n } else {\n updateBoundary(scrollTop)\n }\n })\n\n container.addEventListener('scroll', onScroll)\n return () => {\n stopListen()\n container.removeEventListener('scroll', onScroll)\n }\n }, [estimateSize, getOffsetTop, getScroller, overscan])\n\n const sum = (startIndex: number, endIndex?: number) => {\n return rowHeights.current.slice(startIndex, endIndex).reduce((a, b) => a + b, 0)\n }\n // TODO: React Compiler 测试 topBlank 和 bottomBlank\n const topBlank = sum(0, startIndex)\n const bottomBlank = sum(endIndex)\n\n return {\n startIndex,\n endIndex,\n\n rowHeightList: rowHeights,\n updateRowRectList,\n setRowHeight,\n\n topBlank,\n bottomBlank,\n\n dataSlice,\n }\n}\n","import type { CSSProperties, Key, Ref } from 'react'\nimport type { ScrollElement } from '../utils/dom'\nimport type { TableRowManagerContextType } from './context/row-manager'\nimport type { NecessaryProps } from './internal'\nimport type {\n MiddlewareRenderBody,\n MiddlewareRenderBodyContent,\n MiddlewareRenderBodyRoot,\n MiddlewareRenderBodyWrapper,\n} from './pipeline/types'\nimport type { RowProps } from './row'\nimport type { AnyObject, InnerColumnDescriptor } from './types'\nimport clsx from 'clsx'\nimport { useCallback, useEffect, useMemo, useRef } from 'react'\nimport { useMergedRef } from '../utils/ref'\nimport Colgroup from './colgroup'\nimport { useColumnSizes } from './context/column-sizes'\nimport { useHorizontalScrollContext } from './context/horizontal-scroll'\nimport { TableRowManager } from './context/row-manager'\nimport { useRowVirtualize } from './hooks/useRowVirtualize'\nimport { pipelineRender } from './pipeline/render-pipeline'\nimport Row from './row'\n\nexport interface TableBodyProps<T>\n extends Omit<NecessaryProps<T>, 'columns'>,\n Pick<RowProps<T>, 'onRow' | 'renderRow' | 'renderCell'> {\n className?: string\n style?: CSSProperties\n columns: InnerColumnDescriptor<T>\n bodyWrapperRef?: Ref<HTMLDivElement>\n bodyRootRef?: Ref<HTMLTableElement>\n bodyRef?: Ref<HTMLTableSectionElement>\n overscan: number\n estimateSize: number\n getOffsetTop: () => number\n getScroller: () => ScrollElement | undefined\n rowClassName?: (record: T, index: number) => string\n renderBodyWrapper?: MiddlewareRenderBodyWrapper\n renderBodyRoot?: MiddlewareRenderBodyRoot\n renderBody?: MiddlewareRenderBody\n renderBodyContent?: MiddlewareRenderBodyContent\n}\n\nfunction TableBody<T>(props: TableBodyProps<T>) {\n const {\n bodyWrapperRef,\n bodyRootRef,\n bodyRef,\n className,\n style,\n dataSource: rawData,\n columns: columnDescriptor,\n rowKey,\n\n overscan,\n estimateSize,\n\n getScroller,\n getOffsetTop,\n\n rowClassName,\n onRow,\n renderBodyWrapper,\n renderBodyRoot,\n renderBody,\n renderBodyContent,\n renderRow,\n renderCell,\n } = props\n\n const {\n startIndex,\n dataSlice: dataSource,\n setRowHeight,\n updateRowRectList,\n rowHeightList,\n topBlank,\n bottomBlank,\n } = useRowVirtualize({\n getOffsetTop,\n dataSource: rawData,\n getScroller,\n estimateSize,\n overscan,\n })\n\n // Record<rowIndex, Map(rowHeight)>\n // 一个 Row 可能有多个行高。例如:默认情况下,只有一个行高,展开后,展开面板的高度也被认为是同一个 Row 的\n // 所以可展开时,行高有多个,所有行高之和,则为 Row 的高度\n // 行高之间使用唯一的 key 作为区分\n const rowHeights = useRef(new Map<number, Map<Key, number>>())\n\n // 更新行高。一般会在 body 渲染后、展开面板中调用\n const updateRowHeight = useCallback((index: number, key: Key, height: number) => {\n const target = rowHeights.current.get(index) ?? new Map<Key, number>()\n target.set(key, height)\n rowHeights.current.set(index, target)\n }, [])\n\n const rowManageState = useMemo<TableRowManagerContextType>(() => {\n return { updateRowHeight, getRowHeightList: () => rowHeightList.current }\n }, [rowHeightList, updateRowHeight])\n\n const { columns, descriptor } = columnDescriptor\n const tbodyRef = useMergedRef(bodyRef, (elm) => {\n if (elm == null) return\n\n const bodyHeight = elm.offsetHeight\n if (bodyHeight === 0) return\n\n // body 的 ref 回调函数中,说明 body 渲染完成,也就意味着所有的 tr 也已经渲染完成,\n // 现在可以获取 tr 的高度,记录准确行高\n const heights = rowHeights.current\n heights.forEach((row, rowIndex) => {\n const height = Array.from(row.values()).reduce((res, x) => res + x, 0)\n setRowHeight(rowIndex, height)\n })\n updateRowRectList()\n rowHeights.current.clear()\n })\n\n const bodyContent = pipelineRender(dataSource.map((e, rowIndex) => {\n const _rowKey = (e as AnyObject)[rowKey as string]\n return (\n <Row\n key={_rowKey}\n className={clsx(rowClassName?.(e, rowIndex))}\n rowIndex={rowIndex + startIndex}\n rowData={e}\n columns={columnDescriptor}\n onRow={onRow}\n renderRow={renderRow}\n renderCell={renderCell}\n />\n )\n }), renderBodyContent, { columns, columnDescriptor: descriptor, startRowIndex: startIndex })\n\n const bodyNode = pipelineRender(\n <tbody ref={tbodyRef}>{bodyContent}</tbody>,\n renderBody,\n { columns, columnDescriptor: descriptor, startRowIndex: startIndex },\n )\n\n const { setWidthList } = useColumnSizes()\n\n const tableNode = pipelineRender(\n <table\n className={clsx(className, 'virtual-table-body')}\n style={{ ...style, paddingBottom: bottomBlank, paddingTop: topBlank }}\n ref={bodyRootRef}\n >\n <Colgroup\n columns={descriptor}\n onColumnSizesMeasure={setWidthList}\n />\n {bodyNode}\n </table>,\n renderBodyRoot,\n { columns, columnDescriptor: descriptor, startRowIndex: startIndex },\n )\n\n const { listen, notify } = useHorizontalScrollContext()\n const wrapperRef = useRef<HTMLDivElement>(null)\n useEffect(() => {\n const node = wrapperRef.current\n if (node == null) return\n\n const key = 'virtual-table-body'\n const onScroll = () => {\n notify(key, { scrollLeft: () => node.scrollLeft, node })\n }\n const dispose = listen(key, (scrollLeft) => {\n node.scrollLeft = scrollLeft\n })\n node.addEventListener('scroll', onScroll)\n return () => {\n node.removeEventListener('scroll', onScroll)\n dispose()\n }\n }, [listen, notify])\n\n const mergedRef = useMergedRef(wrapperRef, bodyWrapperRef)\n\n return (\n <TableRowManager.Provider value={rowManageState}>\n {pipelineRender(\n <div\n ref={mergedRef}\n className=\"virtual-table-body-wrapper\"\n >\n {tableNode}\n </div>,\n renderBodyWrapper,\n { columns, columnDescriptor: descriptor, startRowIndex: startIndex },\n )}\n </TableRowManager.Provider>\n )\n}\n\nexport default TableBody\n","import type { CSSProperties, FC, RefObject } from 'react'\nimport type {\n MiddlewareRenderHeader,\n MiddlewareRenderHeaderCell,\n MiddlewareRenderHeaderRoot,\n MiddlewareRenderHeaderRow,\n MiddlewareRenderHeaderWrapper,\n} from './pipeline/types'\nimport type { InnerColumnDescriptor } from './types'\nimport clsx from 'clsx'\nimport { createElement, Fragment, useEffect, useRef } from 'react'\nimport { findLastIndex } from '../utils/find-last-index'\nimport { useMergedRef } from '../utils/ref'\nimport Colgroup from './colgroup'\nimport { useColumnSizes } from './context/column-sizes'\nimport { useHorizontalScrollContext } from './context/horizontal-scroll'\nimport { useTableSticky } from './context/sticky'\nimport { pipelineRender } from './pipeline/render-pipeline'\nimport { getKey } from './utils/get-key'\nimport { isValidFixed, isValidFixedLeft, isValidFixedRight } from './utils/verification'\n\nexport interface TableHeaderProps {\n className?: string\n style?: CSSProperties\n\n wrapperRef?: RefObject<HTMLDivElement>\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns: InnerColumnDescriptor<any>\n\n /** 开启表头 sticky,设置为 true 则默认 top 为 0,为 number 则是偏移量 */\n stickyHeader?: number | boolean\n\n renderHeaderWrapper?: MiddlewareRenderHeaderWrapper\n renderHeaderRoot?: MiddlewareRenderHeaderRoot\n renderHeader?: MiddlewareRenderHeader\n renderHeaderRow?: MiddlewareRenderHeaderRow\n renderHeaderCell?: MiddlewareRenderHeaderCell\n}\n\nconst TableHeader: FC<TableHeaderProps> = (props) => {\n const {\n className,\n style,\n wrapperRef,\n columns: columnDescriptor,\n stickyHeader,\n renderHeaderWrapper,\n renderHeaderRoot,\n renderHeader,\n renderHeaderRow,\n renderHeaderCell,\n } = props\n\n const { columns, descriptor } = columnDescriptor\n const lastColumn = columns[columns.length - 1]\n\n const { widthList } = useColumnSizes()\n const { size: stickySizes } = useTableSticky()\n\n const lastFixedLeftColumnIndex = findLastIndex(descriptor, (x) => {\n if (x.type === 'blank') {\n return false\n }\n return isValidFixedLeft(x.column.fixed)\n })\n const firstFixedRightColumnIndex = descriptor.findIndex((x) => {\n if (x.type === 'blank') {\n return false\n }\n return isValidFixedRight(x.column.fixed)\n })\n const { listen, notify } = useHorizontalScrollContext()\n\n const headerWrapperRef = useRef<HTMLDivElement>(null)\n useEffect(() => {\n const node = headerWrapperRef.current\n if (node == null) return\n const key = 'virtual-table-header'\n const onScroll = () => {\n notify(key, { scrollLeft: () => node.scrollLeft, node })\n }\n const dispose = listen(key, (scrollLeft) => {\n node.scrollLeft = scrollLeft\n })\n node.addEventListener('scroll', onScroll)\n return () => {\n node.removeEventListener('scroll', onScroll)\n dispose()\n }\n }, [listen, notify])\n\n const row = pipelineRender(\n <tr>\n {descriptor.map((item, index) => {\n const { key } = item\n if (item.type === 'blank') {\n return <th key={key} data-blank />\n }\n\n const { column } = item\n\n if (column.colSpan === 0) {\n return null\n }\n\n const isLast = getKey(lastColumn) === key\n const {\n className: thClassName,\n style: thStyle,\n ...rest\n } = column.onHeaderCell?.(column, index) ?? {}\n\n return (\n <Fragment key={key}>\n {pipelineRender(\n createElement(\n 'th',\n {\n scope: 'col',\n ...rest,\n colSpan: column.colSpan,\n className: clsx(\n 'virtual-table-header-cell',\n isLast && 'no-split',\n column.align != null && `virtual-table-align-${column.align}`,\n isValidFixed(column.fixed) && 'virtual-table-sticky-cell',\n lastFixedLeftColumnIndex === index && 'virtual-table-cell-fix-left-last',\n firstFixedRightColumnIndex === index && 'virtual-table-cell-fix-right-first',\n column.className,\n thClassName,\n ),\n style: {\n ...thStyle,\n left: isValidFixedLeft(column.fixed) ? stickySizes.get(key) : undefined,\n right: isValidFixedRight(column.fixed)\n ? stickySizes.get(key)\n : undefined,\n },\n },\n column.title,\n ),\n renderHeaderCell,\n { column, columns, columnWidths: widthList, columnDescriptor: descriptor },\n )}\n </Fragment>\n )\n })}\n </tr>,\n renderHeaderRow,\n { columns, columnDescriptor: descriptor },\n )\n\n const theadNode = pipelineRender(\n <thead className=\"virtual-table-thead\">{row}</thead>,\n renderHeader,\n { columns, columnDescriptor: descriptor },\n )\n\n const tableNode = pipelineRender(\n <table\n style={style}\n >\n <Colgroup columns={descriptor} />\n {theadNode}\n </table>,\n renderHeaderRoot,\n { columns, columnDescriptor: descriptor },\n )\n\n const mergedRef = useMergedRef(wrapperRef, headerWrapperRef)\n\n return pipelineRender(\n <div\n ref={mergedRef}\n className={clsx('virtual-table-header', className, {\n 'virtual-table-header-sticky': stickyHeader,\n })}\n style={{\n top: Number.isFinite(stickyHeader) ? (stickyHeader as number) : undefined,\n }}\n >\n {tableNode}\n </div>,\n renderHeaderWrapper,\n { columns, columnDescriptor: descriptor },\n )\n}\n\nexport default TableHeader\n","import type { Key, RefObject } from 'react'\nimport type { ColumnDescriptor, ColumnType } from '../types'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { findLastIndex } from '../../utils/find-last-index'\nimport { getKey } from '../utils/get-key'\nimport { onResize } from '../utils/on-resize'\nimport { isValidFixedLeft, isValidFixedRight } from '../utils/verification'\nimport { useStableFn } from './useStableFn'\n\ninterface UseColumnVirtualizeOptions<T> {\n estimateSize: number\n defaultColumnWidth: number\n overscan: number\n columns: ColumnType<T>[]\n bodyWrapper: RefObject<HTMLDivElement>\n columnWidths: Map<Key, number>\n disabled?: boolean\n}\n\ninterface Rect {\n index: number\n width: number\n left: number\n right: number\n}\n\nfunction anchorQuery(rects: Rect[], scrollLeft: number) {\n let left = 0\n let right = rects.length - 1\n let index = -1\n\n while (left <= right) {\n const mid = Math.floor((left + right) / 2)\n\n if (rects[mid].right > scrollLeft) {\n index = mid\n right = mid - 1\n } else {\n left = mid + 1\n }\n }\n\n if (index === -1) {\n return undefined\n }\n\n return rects[index]\n}\n\nfunction findFirstFixedRightIndex<T>(columns: ColumnType<T>[]) {\n let index = -1\n for (let i = columns.length - 1; i >= 0; i--) {\n const column = columns[i]\n if (isValidFixedRight(column.fixed)) {\n index = i\n } else {\n break\n }\n }\n return index\n}\n\nfunction findLastFixedLeftIndex<T>(columns: ColumnType<T>[]) {\n return findLastIndex(columns, (x) => isValidFixedLeft(x.fixed))\n}\n\nexport function useColumnVirtualize<T>(options: UseColumnVirtualizeOptions<T>) {\n const {\n estimateSize,\n defaultColumnWidth,\n overscan,\n columns: rawColumns,\n bodyWrapper,\n columnWidths,\n disabled = false,\n } = options\n\n const lastFixedLeftIndex = findLastFixedLeftIndex(rawColumns)\n const firstFixedRightIndex = findFirstFixedRightIndex(rawColumns)\n\n const leftKey = lastFixedLeftIndex > -1 ? getKey(rawColumns[lastFixedLeftIndex]) : null\n const rightKey = firstFixedRightIndex > -1 ? getKey(rawColumns[firstFixedRightIndex]) : null\n\n const [startIndex, setStartIndex] = useState(0)\n const [endIndex, setEndIndex] = useState(0)\n\n const rects = useMemo(() => {\n if (disabled) {\n return []\n }\n let left = 0\n return rawColumns.map((column, index): Rect => {\n const key = getKey(column)\n const width = columnWidths.get(key) ?? estimateSize\n const right = left + width\n const rect: Rect = {\n index,\n width,\n left,\n right,\n }\n\n left = right\n return rect\n })\n }, [rawColumns, columnWidths, estimateSize, disabled])\n\n // 锚点元素\n const anchorRef = useRef<Rect>({\n index: 0,\n width: estimateSize,\n left: 0,\n right: estimateSize,\n })\n\n const findAnchorRef = useStableFn((scrollLeft: number) => {\n return anchorQuery(rects, scrollLeft)\n })\n\n const updateBoundary = useStableFn((scrollLeft: number, count: number) => {\n const anchor = findAnchorRef(scrollLeft)\n if (anchor != null) {\n anchorRef.current = anchor\n setStartIndex(Math.max(0, anchor.index - overscan))\n setEndIndex(anchor.index + count + overscan)\n }\n })\n\n // 用来判断滚动方向\n const scrollLeftRef = useRef(0)\n useEffect(() => {\n if (disabled) return\n\n const scrollContainer = bodyWrapper.current\n if (scrollContainer == null) return\n\n const containerWidth = scrollContainer.offsetWidth\n let count = Math.ceil(containerWidth / estimateSize)\n\n const onScroll = () => {\n const scrollLeft = scrollContainer.scrollLeft\n // 滚动条向右移动(界面向左运动)\n const isScrollRight = scrollLeft > scrollLeftRef.current\n if (isScrollRight) {\n if (scrollLeft > anchorRef.current.right) {\n updateBoundary(scrollLeft, count)\n }\n } else {\n if (scrollLeft < anchorRef.current.left) {\n updateBoundary(scrollLeft, count)\n }\n }\n\n scrollLeftRef.current = scrollLeft\n }\n\n scrollContainer.addEventListener('scroll', onScroll)\n\n let prevWidth = 0\n const stop = onResize(scrollContainer, ({ width }) => {\n if (width === prevWidth || width === 0) {\n return\n }\n prevWidth = width\n const scrollLeft = scrollContainer.scrollLeft\n count = Math.ceil(width / estimateSize)\n updateBoundary(scrollLeft, count)\n })\n return () => {\n scrollContainer.removeEventListener('scroll', onScroll)\n stop()\n }\n }, [bodyWrapper, estimateSize, updateBoundary, overscan, findAnchorRef, disabled])\n\n const sum = (startIndex: number, endIndex?: number) => {\n return rects.slice(startIndex, endIndex).reduce((a, b) => a + b.width, 0)\n }\n\n const fixedLeftWidth = lastFixedLeftIndex > -1 ? sum(0, lastFixedLeftIndex + 1) : 0\n const fixedRightWidth = firstFixedRightIndex > -1 ? sum(firstFixedRightIndex) : 0\n\n // 设置 column.fixed 时,对应列将不会虚拟化,所以 blank 需要去除这些列的宽度\n const leftBlank = Math.max(0, sum(0, startIndex) - fixedLeftWidth)\n const rightBlank = Math.max(0, sum(endIndex) - fixedRightWidth)\n\n const columnSlice = useMemo(() => {\n if (disabled) {\n return rawColumns\n }\n const result = [\n ...rawColumns.slice(0, lastFixedLeftIndex + 1),\n ...rawColumns.slice(startIndex, endIndex),\n ...rawColumns.slice(firstFixedRightIndex),\n ]\n const unionKey = new Set<Key>()\n return result.filter((column) => {\n const key = getKey(column)\n if (unionKey.has(key)) {\n return false\n }\n unionKey.add(key)\n return true\n })\n }, [disabled, rawColumns, startIndex, endIndex, lastFixedLeftIndex, firstFixedRightIndex])\n\n const descriptor = useMemo(() => {\n return columnSlice.reduce<ColumnDescriptor<T>[]>((result, rawColumn, index) => {\n const key = getKey(rawColumn)\n let column = rawColumn\n if (column.width == null && column.minWidth == null) {\n column = { ...column, width: defaultColumnWidth }\n }\n if (key === leftKey) {\n result.push({ type: 'normal', key, column })\n result.push({ type: 'blank', key: '_blank_left', width: leftBlank })\n } else if (leftKey == null && index === 0) {\n result.push({ type: 'blank', key: '_blank_left', width: leftBlank })\n result.push({ type: 'normal', key, column })\n } else if (key === rightKey) {\n result.push({ type: 'blank', key: '_blank_right', width: rightBlank })\n result.push({ type: 'normal', key, column })\n } else if (rightKey == null && index === columnSlice.length - 1) {\n result.push({ type: 'normal', key, column })\n result.push({ type: 'blank', key: '_blank_right', width: rightBlank })\n } else {\n result.push({ type: 'normal', key, column })\n }\n return result\n }, [])\n }, [columnSlice, leftKey, rightKey, leftBlank, rightBlank, defaultColumnWidth])\n\n const columns = useMemo(() => {\n return { columns: columnSlice, descriptor }\n }, [columnSlice, descriptor])\n\n return { columns, columnSlice, lastFixedLeftIndex, firstFixedRightIndex }\n}\n","import type { CSSProperties, ForwardedRef, ReactNode, RefObject } from 'react'\nimport type { PipelineRender } from './pipeline/types'\nimport clsx from 'clsx'\nimport { forwardRef, useEffect, useRef, useState } from 'react'\nimport { useMergedRef } from '../utils/ref'\nimport { useHorizontalScrollContext } from './context/horizontal-scroll'\nimport { pipelineRender } from './pipeline/render-pipeline'\n\nexport interface TableRootProps {\n className?: string\n style?: CSSProperties\n children?: ReactNode\n hasFixedLeftColumn?: boolean\n hasFixedRightColumn?: boolean\n bodyScrollContainer: RefObject<HTMLElement>\n renderRoot?: PipelineRender\n}\n\nfunction TableRoot(props: TableRootProps, ref: ForwardedRef<HTMLDivElement>) {\n const {\n className,\n style,\n children,\n hasFixedLeftColumn,\n hasFixedRightColumn,\n renderRoot,\n bodyScrollContainer,\n } = props\n\n const rootNode = useRef<HTMLDivElement>(null)\n\n const [hasFixedLeft, setHasFixedLeft] = useState(false)\n const [hasFixedRight, setHasFixedRight] = useState(false)\n\n const { listen } = useHorizontalScrollContext()\n useEffect(() => {\n if (!hasFixedLeftColumn && !hasFixedRightColumn) {\n return\n }\n const onCheckHasFixedEdge = (node: HTMLElement) => {\n const { scrollLeft, clientWidth, scrollWidth } = node\n if (hasFixedLeftColumn) {\n setHasFixedLeft(scrollLeft !== 0)\n }\n if (hasFixedRightColumn) {\n setHasFixedRight(!(scrollLeft + clientWidth >= scrollWidth))\n }\n }\n const node = bodyScrollContainer.current\n if (node != null) {\n onCheckHasFixedEdge(node)\n }\n return listen('__root', (_scrollLeft, node) => {\n onCheckHasFixedEdge(node)\n })\n }, [bodyScrollContainer, hasFixedLeftColumn, hasFixedRightColumn, listen])\n\n const mergedRef = useMergedRef(ref, rootNode)\n return pipelineRender(\n <div\n ref={mergedRef}\n className={clsx(\n 'virtual-table',\n hasFixedLeft && 'virtual-table-has-fix-left',\n hasFixedRight && 'virtual-table-has-fix-right',\n className,\n )}\n style={style}\n >\n {children}\n </div>,\n renderRoot,\n {},\n )\n}\n\nexport default forwardRef(TableRoot)\n","import type { CSSProperties, ForwardedRef, Key, ReactElement, Ref, RefAttributes } from 'react'\nimport type { TableBodyProps } from './body'\nimport type { TableColumnsContextType } from './context/column-sizes'\nimport type { NecessaryProps } from './internal'\nimport type { ColumnDescriptor, OnRowType } from './types'\nimport clsx from 'clsx'\nimport {\n forwardRef,\n memo,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { getScrollParent, isRoot, isWindow } from '../utils/dom'\nimport { useMergedRef } from '../utils/ref'\nimport TableBody from './body'\nimport { ColumnSizes } from './context/column-sizes'\nimport { ContainerSizeContext } from './context/container-size'\nimport { HorizontalScrollContext } from './context/horizontal-scroll'\nimport { StickyContext } from './context/sticky'\nimport TableHeader from './header'\nimport { useColumnVirtualize } from './hooks/useColumnVirtualize'\nimport { pipelineRender } from './pipeline/render-pipeline'\nimport { TablePipeline } from './pipeline/useTablePipeline'\nimport TableRoot from './root'\nimport { getKey } from './utils/get-key'\nimport { isValidFixedLeft, isValidFixedRight } from './utils/verification'\n\nexport interface VirtualTableCoreProps<T>\n extends NecessaryProps<T>,\n Pick<TableBodyProps<T>, 'rowClassName' | 'onRow'> {\n bodyRootRef?: Ref<HTMLTableElement>\n\n className?: string\n style?: CSSProperties\n\n tableBodyClassName?: string\n tableBodyStyle?: CSSProperties\n\n /** 开启表头 sticky,设置为 true 则默认 top 为 0,为 number 则是偏移量 */\n stickyHeader?: number | boolean\n\n /** 预计每列宽度,需要横向虚拟化时,设置它 */\n estimatedColumnWidth?: number\n /** 预计每行高度 @default 46 */\n estimatedRowHeight?: number\n /** 在头和尾额外渲染多少行 @default 5 */\n overscanRows?: number\n /** 横向虚拟化时,在头和尾额外渲染多少列 @default 3 */\n overscanColumns?: number\n\n /** 开启表头虚拟滚动 @default true */\n virtualHeader?: boolean\n\n /**\n * 缺失宽度设置时的默认值(与虚拟化无关)\n * @default 100\n */\n defaultColumnWidth?: number\n\n pipeline?: TablePipeline<T>\n\n getOffsetTop?: () => number\n}\n\nfunction VirtualTableCore<T>(\n props: VirtualTableCoreProps<T>,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const {\n bodyRootRef,\n className,\n style,\n tableBodyClassName,\n tableBodyStyle,\n columns: rawColumns,\n dataSource: rawData,\n rowKey: rawRowKey = 'key',\n estimatedRowHeight = 46,\n estimatedColumnWidth,\n overscanRows = 5,\n overscanColumns = 3,\n stickyHeader,\n defaultColumnWidth = 100,\n pipeline = (TablePipeline.defaultPipeline as TablePipeline<T>),\n rowClassName: rawRowClassName,\n onRow,\n getOffsetTop: getOffsetTopImpl,\n virtualHeader = true,\n } = props\n\n const rootNode = useRef<HTMLDivElement>(null)\n\n const headerWrapperRef = useRef<HTMLDivElement>(null)\n const bodyWrapperRef = useRef<HTMLDivElement>(null)\n const bodyRoot = useRef<HTMLTableElement>(null)\n const mergedBodyRootRef = useMergedRef(bodyRoot, bodyRootRef)\n const bodyRef = useRef<HTMLTableSectionElement>(null)\n\n const getScroller = useCallback(() => {\n const root = rootNode.current\n if (root == null) return\n return getScrollParent(root)\n }, [])\n\n const getOffsetTop = useCallback(() => {\n if (typeof getOffsetTopImpl === 'function') {\n return getOffsetTopImpl()\n }\n const scrollContainer = getScroller()\n if (scrollContainer === rootNode.current) {\n return 0\n }\n if (isWindow(scrollContainer) || isRoot(scrollContainer)) {\n const top = rootNode.current?.getBoundingClientRect().top ?? 0\n return window.scrollY + top\n }\n return rootNode.current?.offsetTop ?? 0\n }, [getOffsetTopImpl, getScroller])\n\n const {\n dataSource,\n columns: pipelineColumns,\n rowKey,\n rowClassName,\n\n render,\n renderRoot,\n renderContent,\n renderHeaderWrapper,\n renderHeaderRoot,\n renderHeader,\n renderHeaderRow,\n renderHeaderCell,\n renderBodyWrapper,\n renderBodyRoot,\n renderBody,\n renderBodyContent,\n renderRow,\n renderCell,\n\n onRow: onPipelineRow,\n } = pipeline.use({\n dataSource: rawData,\n rowKey: rawRowKey,\n columns: rawColumns,\n estimatedRowHeight,\n headerWrapperRef,\n bodyWrapperRef,\n bodyRootRef: bodyRoot,\n bodyRef,\n rootRef: rootNode,\n getOffsetTop,\n getScroller,\n })\n\n const [columnWidths, setColumnWidths] = useState(() => new Map<Key, number>())\n const columnWidthsRef = useRef(columnWidths)\n const updateColumnWidths = useCallback((value: Map<Key, number>) => {\n columnWidthsRef.current = value\n setColumnWidths(value)\n }, [])\n\n const tableColumnsContext = useMemo<TableColumnsContextType>(() => {\n return {\n widthList: columnWidths,\n setWidthList: updateColumnWidths,\n }\n }, [columnWidths, updateColumnWidths])\n\n const { columns } = useColumnVirtualize<T>({\n estimateSize: estimatedColumnWidth ?? defaultColumnWidth,\n defaultColumnWidth,\n overscan: overscanColumns,\n columns: pipelineColumns,\n bodyWrapper: bodyWrapperRef,\n columnWidths,\n disabled: estimatedColumnWidth == null,\n })\n\n const onRowClassName = useCallback((record: T, index: number) => {\n return clsx(rawRowClassName?.(record, index), rowClassName?.(record, index))\n }, [rawRowClassName, rowClassName])\n\n const onRowProps: OnRowType<T> = useCallback((record, index) => {\n return { ...onRow?.(record, index), ...onPipelineRow?.(record, index) }\n }, [onPipelineRow, onRow])\n\n const hasFixedLeftColumn = pipelineColumns.some((x) => isValidFixedLeft(x.fixed))\n const hasFixedRightColumn = pipelineColumns.some((x) => isValidFixedRight(x.fixed))\n\n const fullHeaderColumns = useMemo(() => {\n return {\n columns: pipelineColumns,\n descriptor: pipelineColumns.map((column): ColumnDescriptor => {\n const key = getKey(column)\n return {\n key,\n type: 'normal',\n column,\n }\n }),\n }\n }, [pipelineColumns])\n\n const headerColumns = useMemo(() => {\n if (virtualHeader) {\n return columns\n }\n return fullHeaderColumns\n }, [virtualHeader, fullHeaderColumns, columns])\n\n const contentNode = pipelineRender(\n <>\n <TableHeader\n wrapperRef={headerWrapperRef}\n columns={headerColumns}\n stickyHeader={stickyHeader}\n renderHeaderWrapper={renderHeaderWrapper}\n renderHeaderRoot={renderHeaderRoot}\n renderHeader={renderHeader}\n renderHeaderRow={renderHeaderRow}\n renderHeaderCell={renderHeaderCell}\n />\n <TableBody\n bodyWrapperRef={bodyWrapperRef}\n bodyRootRef={mergedBodyRootRef}\n bodyRef={bodyRef}\n className={tableBodyClassName}\n style={tableBodyStyle}\n columns={columns}\n rowKey={rowKey}\n dataSource={dataSource}\n overscan={overscanRows}\n estimateSize={estimatedRowHeight}\n getScroller={getScroller}\n getOffsetTop={getOffsetTop}\n rowClassName={onRowClassName}\n onRow={onRowProps}\n renderBodyWrapper={renderBodyWrapper}\n renderBodyRoot={renderBodyRoot}\n renderBody={renderBody}\n renderBodyContent={renderBodyContent}\n renderRow={renderRow}\n renderCell={renderCell}\n />\n </>,\n renderContent,\n { columns: columns.columns, columnDescriptor: columns.descriptor },\n )\n\n const rootMergedRef = useMergedRef(rootNode, ref)\n const table = pipelineRender(\n <TableRoot\n ref={rootMergedRef}\n className={className}\n style={style}\n hasFixedLeftColumn={hasFixedLeftColumn}\n hasFixedRightColumn={hasFixedRightColumn}\n renderRoot={renderRoot}\n bodyScrollContainer={bodyWrapperRef}\n >\n {contentNode}\n </TableRoot>,\n render,\n { columns: columns.columns, columnDescriptor: columns.descriptor },\n )\n\n return (\n <ColumnSizes.Provider value={tableColumnsContext}>\n <StickyContext columns={pipelineColumns}>\n <ContainerSizeContext getScroller={getScroller} root={rootNode}>\n <HorizontalScrollContext>{table}</HorizontalScrollContext>\n </ContainerSizeContext>\n </StickyContext>\n </ColumnSizes.Provider>\n )\n}\n\nif (__DEV__) {\n VirtualTableCore.displayName = 'VirtualTable.Core'\n}\n\nexport default memo(forwardRef(VirtualTableCore)) as <T>(\n props: VirtualTableCoreProps<T> & RefAttributes<HTMLDivElement>,\n) => ReactElement\n"],"names":["shallowEqualObjects","objA","objB","aKeys","Object","keys","bKeys","len","length","i","key","prototype","hasOwnProperty","call","shallowEqualArrays","arrA","arrB","isShallowEqual","value","oldValue","is","Array","isArray","hasObject","findIndex","x","every","state","index","Map","from","oldKeys","values","oldValues","useShallowMemo","pickData","nextState","useRef","current","getKey","column","dataIndex","isValidFixedLeft","fixed","isValidFixedRight","isValidFixed","ColumnSizes","createContext","__DEV__","displayName","useColumnSizes","context","useContext","Error","Sticky","StickyContext","props","columns","children","_useColumnSizes","widthList","columnsFixedRecord","useMemo","map","stickySizes","left","leftOffset","reduce","res","item","_widthList$get","get","right","rightOffset","reduceRight","_widthList$get2","result","set","shallowMemoFixedRecord","shallowMemoStickySizes","stickyState","size","_jsx","Provider","useTableSticky","pipelineRender","node","render","options","getTableCellContent","data","_render","rowData","Cell","_onCell","className","style","rowIndex","renderCell","restProps","_objectWithoutPropertiesLoose","_excluded","align","onCell","_useTableSticky","_ref","extraClassName","extraStyle","colSpan","rowSpan","extraProps","_excluded2","_extends","clsx","undefined","memo","Colgroup","onColumnSizesMeasure","enableMeasure","columnSizes","prevColumnSizes","ref","type","width","offsetWidth","minWidth","overflowStylePatterns","isElement","Node","ELEMENT_NODE_TYPE","nodeType","getScrollParent","el","root","_el$ownerDocument$def","window","document","body","_window$getComputedSt","getComputedStyle","overflow","overflowY","overflowX","test","parentNode","ownerDocument","defaultView","isWindow","arg","toString","isDocument","isRoot","getScrollElement","scrollingElement","getScrollTop","scrollY","element","scrollTop","useCalcSize","getScroller","_useState","useState","scrollContainerWidth","setScrollContainerWidth","_useState2","scrollContainerHeight","setScrollContainerHeight","_useState3","tableWidth","setTableWidth","_useState4","tableHeight","setTableHeight","scrollerContainerRef","useLayoutEffect","scrollerContainer","scroller","observer","ResizeObserver","entries","_entries$0$contentRec","contentRect","height","observe","disconnect","_entries$0$contentRec2","ContainerSize","ContainerSizeContext","_useCalcSize","useContainerSize","HorizontalScroll","HorizontalScrollContext","listenerMap","skipEvent","Set","listen","listener","scrollLeft","notify","has","rAF","requestAnimationFrame","fn","forEach","itemKey","add","useHorizontalScrollContext","TableRowManager","useTableRowManager","useStableFn","callback","stableFn","useCallback","_len","arguments","args","_key","apply","createMiddleware","hook","cache","useMiddleware","ctx","concat","_cache$current","shakeUnsafeHooks","hooks","filter","priority","TablePipeline","defineProperty","use","bind","_proto","setHooks","renderFunctionMap","renderRoot","renderContent","renderHeaderWrapper","renderHeaderRoot","renderHeader","renderHeaderRow","renderHeaderCell","renderBodyWrapper","renderBodyRoot","renderBody","renderBodyContent","renderRow","rowClassNameFunctions","onRowFunctions","slice","sort","a","b","nextCtx","rowClassName","onRow","rest","target","push","_ref2","renders","record","useTablePipeline","extraPipeline","pipeline","cached","_extraPipeline$hooks","nextHooks","findLastIndex","arr","predicate","Row","_onRow","columnDescriptor","_useTableRowManager","updateRowHeight","descriptor","lastFixedLeftColumnIndex","firstFixedRightColumnIndex","offsetHeight","assignRef","mergeRefs","refs","useMergedRef","_len2","_key2","onResize","innerWidth","innerHeight","addEventListener","removeEventListener","rect","anchorQuery","rects","mid","Math","floor","bottom","useRowVirtualize","getOffsetTop","rawData","dataSource","estimateSize","overscan","startIndex","setStartIndex","endIndex","setEndIndex","dataSlice","rowHeights","fillRowHeights","rowRects","updateRowRectList","shouldSkip","_rowHeights$current$r","nextTop","top","setRowHeight","anchorRef","scrollTopRef","initial","useEffect","container","count","offsetTop","max","calcCount","scrollerContainerHeight","prevCount","ceil","updateBoundary","anchor","onScroll","e","scrollElement","isScrollDown","prevHeight","stopListen","nextStartIndex","nextEndIndex","sum","topBlank","bottomBlank","rowHeightList","TableBody","bodyWrapperRef","bodyRootRef","bodyRef","rowKey","_useRowVirtualize","_rowHeights$current$g","rowManageState","getRowHeightList","tbodyRef","elm","bodyHeight","heights","row","clear","bodyContent","_rowKey","startRowIndex","bodyNode","setWidthList","tableNode","_jsxs","paddingBottom","paddingTop","_useHorizontalScrollC","wrapperRef","dispose","mergedRef","TableHeader","stickyHeader","lastColumn","headerWrapperRef","_column$onHeaderCell","isLast","onHeaderCell","thClassName","thStyle","Fragment","createElement","scope","title","columnWidths","theadNode","Number","isFinite","findFirstFixedRightIndex","findLastFixedLeftIndex","useColumnVirtualize","defaultColumnWidth","rawColumns","bodyWrapper","_options$disabled","disabled","lastFixedLeftIndex","firstFixedRightIndex","leftKey","rightKey","_columnWidths$get","findAnchorRef","scrollLeftRef","scrollContainer","containerWidth","isScrollRight","prevWidth","stop","fixedLeftWidth","fixedRightWidth","leftBlank","rightBlank","columnSlice","unionKey","rawColumn","TableRoot","hasFixedLeftColumn","hasFixedRightColumn","bodyScrollContainer","rootNode","hasFixedLeft","setHasFixedLeft","hasFixedRight","setHasFixedRight","onCheckHasFixedEdge","clientWidth","scrollWidth","_scrollLeft","forwardRef","VirtualTableCore","tableBodyClassName","tableBodyStyle","_props$rowKey","rawRowKey","_props$estimatedRowHe","estimatedRowHeight","estimatedColumnWidth","_props$overscanRows","overscanRows","_props$overscanColumn","overscanColumns","_props$defaultColumnW","_props$pipeline","defaultPipeline","rawRowClassName","getOffsetTopImpl","_props$virtualHeader","virtualHeader","bodyRoot","mergedBodyRootRef","_rootNode$current$off","_rootNode$current2","_rootNode$current$get","_rootNode$current","getBoundingClientRect","_pipeline$use","rootRef","pipelineColumns","onPipelineRow","setColumnWidths","columnWidthsRef","updateColumnWidths","tableColumnsContext","_useColumnVirtualize","onRowClassName","onRowProps","some","fullHeaderColumns","headerColumns","contentNode","rootMergedRef","table"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../../packages/virtual-table/src/utils/equal.ts","../../packages/virtual-table/src/core/hooks/useShallowMemo.ts","../../packages/virtual-table/src/core/utils/get-key.ts","../../packages/virtual-table/src/core/utils/verification.ts","../../packages/virtual-table/src/core/context/column-sizes.tsx","../../packages/virtual-table/src/core/context/sticky.tsx","../../packages/virtual-table/src/core/pipeline/render-pipeline.ts","../../packages/virtual-table/src/core/cell.tsx","../../packages/virtual-table/src/core/colgroup.tsx","../../packages/virtual-table/src/utils/dom.ts","../../packages/virtual-table/src/core/hooks/useCalcSize.ts","../../packages/virtual-table/src/core/context/container-size.tsx","../../packages/virtual-table/src/core/context/horizontal-scroll.tsx","../../packages/virtual-table/src/core/context/row-manager.tsx","../../packages/virtual-table/src/core/hooks/useStableFn.ts","../../packages/virtual-table/src/core/pipeline/create-middleware.ts","../../packages/virtual-table/src/core/pipeline/table-pipeline.ts","../../packages/virtual-table/src/core/pipeline/useTablePipeline.ts","../../packages/virtual-table/src/utils/find-last-index.ts","../../packages/virtual-table/src/core/row.tsx","../../packages/virtual-table/src/utils/ref.ts","../../packages/virtual-table/src/core/utils/on-resize.ts","../../packages/virtual-table/src/core/hooks/useRowVirtualize.ts","../../packages/virtual-table/src/core/body.tsx","../../packages/virtual-table/src/core/header.tsx","../../packages/virtual-table/src/core/hooks/useColumnVirtualize.ts","../../packages/virtual-table/src/core/root.tsx","../../packages/virtual-table/src/core/table.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nexport type validObjectValue = Record<string, any> | null | undefined\nexport type validArrayValue = any[] | null | undefined\n\nexport function shallowEqualObjects(\n objA: validObjectValue,\n objB: validObjectValue,\n): boolean {\n if (objA === objB) {\n return true\n }\n\n if (!objA || !objB) {\n return false\n }\n\n const aKeys = Object.keys(objA)\n const bKeys = Object.keys(objB)\n const len = aKeys.length\n\n if (bKeys.length !== len) {\n return false\n }\n\n for (let i = 0; i < len; i += 1) {\n const key = aKeys[i]\n\n if (objA[key] !== objB[key] || !Object.prototype.hasOwnProperty.call(objB, key)) {\n return false\n }\n }\n\n return true\n}\n\nexport function shallowEqualArrays(\n arrA: validArrayValue,\n arrB: validArrayValue,\n): boolean {\n if (arrA === arrB) {\n return true\n }\n\n if (!arrA || !arrB) {\n return false\n }\n\n const len = arrA.length\n\n if (arrB.length !== len) {\n return false\n }\n\n for (let i = 0; i < len; i += 1) {\n if (arrA[i] !== arrB[i]) {\n return false\n }\n }\n\n return true\n}\n\nexport function isShallowEqual(value: unknown, oldValue: unknown) {\n if (Object.is(value, oldValue)) {\n return true\n }\n if (Array.isArray(value) && Array.isArray(oldValue)) {\n if (shallowEqualArrays(value, oldValue)) {\n return true\n }\n if (value.length === oldValue.length) {\n const hasObject = value.findIndex((x) => typeof x === 'object' && x != null) > -1\n if (hasObject) {\n return value.every((state, index) => {\n if (Array.isArray(state)) {\n return shallowEqualArrays(state, oldValue[index] as unknown[])\n }\n if (typeof state === 'object' && state != null) {\n return shallowEqualObjects(\n state as Record<string, unknown>,\n oldValue[index] as Record<string, unknown>,\n )\n }\n return Object.is(state, oldValue[index])\n })\n }\n }\n return false\n }\n if (value instanceof Map && oldValue instanceof Map) {\n const keys = Array.from(value.keys())\n const oldKeys = Array.from(oldValue.keys())\n if (isShallowEqual(keys, oldKeys)) {\n const values = Array.from(value.values())\n const oldValues = Array.from(oldValue.values())\n if (isShallowEqual(values, oldValues)) {\n return true\n }\n }\n return false\n }\n if (typeof value === 'object' && value != null) {\n return shallowEqualObjects(value, oldValue as Record<string, unknown>)\n }\n return false\n}\n","/* eslint-disable react-compiler/react-compiler */\nimport { useRef } from 'react'\n\nimport { isShallowEqual } from '../../utils/equal'\n\n/**\n * 缓存数据(浅比较,如果是数组则对第一层进行浅比较)\n */\nexport function useShallowMemo<T>(pickData: () => T) {\n const nextState = pickData()\n const value = useRef<T>(nextState)\n\n if (!isShallowEqual(nextState, value.current)) {\n value.current = nextState\n }\n\n return value.current\n}\n","import type { Key } from 'react'\nimport type { NecessaryProps } from '../internal'\nimport type { AnyObject, ColumnType } from '../types'\n\nexport function getKey<T>(column: ColumnType<T>) {\n return 'key' in column ? (column.key as Key) : column.dataIndex as string\n}\n\nexport function getRowKey<T>(rowData: T, rowKey: NecessaryProps<T>['rowKey']): Key {\n if (typeof rowKey === 'function') {\n return rowKey(rowData)\n }\n return (rowData as AnyObject)[rowKey as string] as Key\n}\n","export type FixedType = 'left' | 'right'\n\nexport function isValidFixedLeft(fixed: unknown) {\n return fixed === 'left'\n}\n\nexport function isValidFixedRight(fixed: unknown) {\n return fixed === 'right'\n}\n\nexport function isValidFixed(fixed: unknown) {\n return isValidFixedLeft(fixed) || isValidFixedRight(fixed)\n}\n","import type { Key } from 'react'\nimport { createContext, useContext } from 'react'\n\nexport interface TableColumnsContextType {\n widthList: Map<Key, number>\n setWidthList: (value: Map<Key, number>) => void\n}\n\nexport const ColumnSizes = createContext<TableColumnsContextType | null>(null)\n\nif (__DEV__) {\n ColumnSizes.displayName = 'VirtualTable.ColumnSizes'\n}\n\nexport function useColumnSizes() {\n const context = useContext(ColumnSizes)\n if (context == null) {\n throw new Error('useColumnSizes provider not found')\n }\n return context\n}\n","import type { Key, PropsWithChildren } from 'react'\nimport type { ColumnType, FixedType } from '../types'\nimport { createContext, useContext, useMemo } from 'react'\nimport { useShallowMemo } from '../hooks/useShallowMemo'\nimport { getKey } from '../utils/get-key'\nimport { isValidFixedLeft, isValidFixedRight } from '../utils/verification'\nimport { useColumnSizes } from './column-sizes'\n\nexport interface StickyContextState {\n size: Map<Key, number>\n /** 每一列设置的 fixed 值 */\n fixed: { key: Key, fixed: FixedType | undefined }[]\n}\n\nexport const Sticky = createContext<StickyContextState | null>(null)\n\nif (__DEV__) {\n Sticky.displayName = 'VirtualTable.Sticky'\n}\n\nexport function StickyContext(\n props: PropsWithChildren<{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns: ColumnType<any>[]\n }>,\n) {\n const { columns, children } = props\n const { widthList } = useColumnSizes()\n\n const columnsFixedRecord = useMemo(() => {\n return columns.map((column) => {\n const key = getKey(column)\n return { key, fixed: column.fixed }\n })\n }, [columns])\n\n const stickySizes = useMemo(() => {\n let left = 0\n const leftOffset = columnsFixedRecord.reduce<number[]>((res, item, index) => {\n const { fixed, key } = item\n if (isValidFixedLeft(fixed)) {\n res[index] = left\n // eslint-disable-next-line react-compiler/react-compiler\n left += widthList.get(key) ?? 0\n }\n return res\n }, [])\n\n let right = 0\n const rightOffset = columnsFixedRecord.reduceRight((res, item, index) => {\n const { fixed, key } = item\n if (isValidFixedRight(fixed)) {\n res[index] = right\n right += widthList.get(key) ?? 0\n }\n return res\n }, [] as number[])\n\n return columnsFixedRecord.reduce((result, item, index) => {\n const { key, fixed } = item\n if (isValidFixedLeft(fixed)) {\n result.set(key, leftOffset[index])\n return result\n }\n if (isValidFixedRight(fixed)) {\n result.set(key, rightOffset[index])\n return result\n }\n return result\n }, new Map<Key, number>())\n }, [columnsFixedRecord, widthList])\n\n const shallowMemoFixedRecord = useShallowMemo(() => columnsFixedRecord)\n const shallowMemoStickySizes = useShallowMemo(() => stickySizes)\n\n const stickyState = useMemo((): StickyContextState => {\n return { size: shallowMemoStickySizes, fixed: shallowMemoFixedRecord }\n }, [shallowMemoFixedRecord, shallowMemoStickySizes])\n\n return (\n <Sticky.Provider value={stickyState}>\n {children}\n </Sticky.Provider>\n )\n}\n\nexport function useTableSticky() {\n const context = useContext(Sticky)\n if (context == null) {\n throw new Error('useTableSticky provider not found')\n }\n return context\n}\n","import type { ReactNode } from 'react'\nimport type { MergedMiddlewareRender } from './types'\n\ntype RenderOptions<T> = T extends ((children: ReactNode, options: infer Opt) => ReactNode) ? Opt : object\n\nexport function pipelineRender<T extends MergedMiddlewareRender>(\n node: ReactNode,\n render: T | undefined,\n options: RenderOptions<T>,\n): ReactNode {\n if (typeof render === 'function') {\n // @ts-expect-error: There is no way to declare the type correctly, but it works at runtime.\n return render(node, options)\n }\n return node\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { DetailedHTMLProps, HTMLAttributes, ReactElement } from 'react'\nimport type { MiddlewareRenderCell } from './pipeline/types'\nimport type { AnyObject, ColumnType } from './types'\nimport clsx from 'clsx'\nimport { memo } from 'react'\nimport { useTableSticky } from './context/sticky'\nimport { pipelineRender } from './pipeline/render-pipeline'\nimport { getKey } from './utils/get-key'\nimport { isValidFixed, isValidFixedLeft, isValidFixedRight } from './utils/verification'\n\ntype NativeProps = DetailedHTMLProps<\n HTMLAttributes<HTMLTableCellElement>,\n HTMLTableCellElement\n>\n\nexport interface CellProps<T> extends Omit<NativeProps, 'children'> {\n column: ColumnType<T>\n rowIndex: number\n rowData: T\n renderCell?: MiddlewareRenderCell\n}\n\nfunction getTableCellContent<T extends AnyObject>(\n index: number,\n data: T,\n column: ColumnType<any>,\n): any {\n const { render } = column\n const rowData = data as AnyObject\n if ('dataIndex' in column) {\n const dataIndex = column.dataIndex as string\n if (typeof render !== 'function') {\n return rowData[dataIndex]\n }\n return render(rowData[dataIndex], data, index)\n }\n return render?.(data, data, index) ?? null\n}\n\nfunction Cell<T>(props: CellProps<T>) {\n const {\n className,\n style,\n column,\n rowData,\n rowIndex,\n renderCell,\n ...restProps\n } = props\n\n const { align, fixed, onCell } = column\n const key = getKey(column)\n const { size: stickySizes } = useTableSticky()\n\n const {\n className: extraClassName,\n style: extraStyle,\n colSpan,\n rowSpan,\n ...extraProps\n } = onCell?.(rowData, rowIndex) ?? {}\n\n if (colSpan === 0 || rowSpan === 0) {\n return null\n }\n\n return pipelineRender(\n <td\n {...restProps}\n {...extraProps}\n colSpan={colSpan}\n rowSpan={rowSpan}\n className={clsx(\n 'virtual-table-cell',\n align != null && `virtual-table-align-${align}`,\n isValidFixed(fixed) && 'virtual-table-sticky-cell',\n className,\n column.className,\n extraClassName,\n )}\n style={{\n ...style,\n ...extraStyle,\n left: isValidFixedLeft(fixed) ? stickySizes.get(key) : undefined,\n right: isValidFixedRight(fixed) ? stickySizes.get(key) : undefined,\n }}\n >\n {getTableCellContent(rowIndex, rowData as AnyObject, column)}\n </td>,\n renderCell,\n { column },\n )\n}\n\nexport default memo(Cell) as <T>(props: CellProps<T>) => ReactElement\n","import type { FC, Key } from 'react'\nimport type { ColumnDescriptor } from './types'\nimport { memo, useRef } from 'react'\nimport { isShallowEqual } from '../utils/equal'\n\nexport interface ColgroupProps {\n columns: ColumnDescriptor[]\n onColumnSizesMeasure?: (columnSizes: Map<Key, number>) => void\n}\n\nconst Colgroup: FC<ColgroupProps> = (props) => {\n const { columns, onColumnSizesMeasure } = props\n\n const enableMeasure = onColumnSizesMeasure != null\n const columnSizes = new Map<Key, number>()\n const prevColumnSizes = useRef(new Map<Key, number>())\n\n return (\n <colgroup\n ref={() => {\n if (!enableMeasure) return\n if (!isShallowEqual(columnSizes, prevColumnSizes.current)) {\n onColumnSizesMeasure(columnSizes)\n prevColumnSizes.current = columnSizes\n }\n }}\n >\n {columns.map((item) => {\n const { key } = item\n if (item.type === 'blank') {\n return <col key={key} className=\"blank\" style={{ width: item.width }} />\n }\n\n const { column } = item\n\n return (\n <col\n key={key}\n ref={(node) => {\n if (node == null || !enableMeasure) return\n columnSizes.set(key, node.offsetWidth)\n }}\n style={{\n width: column.width,\n minWidth: column.minWidth,\n }}\n />\n )\n })}\n </colgroup>\n )\n}\n\nexport default memo(Colgroup)\n","export type ScrollElement = HTMLElement | Window\n\nconst overflowStylePatterns = /auto|scroll|overlay|hidden/\n\nfunction isElement(node: unknown): node is Node {\n if (!(node instanceof Node)) {\n return false\n }\n const ELEMENT_NODE_TYPE = 1\n return node.nodeType === ELEMENT_NODE_TYPE\n}\n\nexport function getScrollParent(\n el: Element,\n root: ScrollElement | null | undefined = window,\n): ScrollElement {\n let node = el\n\n while (node !== root && isElement(node)) {\n if (node === document.body) {\n return root as HTMLElement\n }\n const { overflow, overflowY, overflowX } = window.getComputedStyle(node)\n if (overflowStylePatterns.test(overflow + overflowY + overflowX)) {\n return node as HTMLElement\n }\n node = node.parentNode as Element\n }\n return el.ownerDocument.defaultView ?? window\n}\n\nexport function isWindow(arg: unknown): arg is Window {\n return Object.prototype.toString.call(arg) === '[object Window]'\n}\n\nexport function isDocument(arg: unknown): arg is Document {\n return Object.prototype.toString.call(arg) === '[object HTMLDocument]'\n}\n\nexport function isRoot(arg: unknown): arg is HTMLElement {\n return Object.prototype.toString.call(arg) === '[object HTMLHtmlElement]'\n}\n\nexport function getScrollElement(el: unknown): Element {\n if (isDocument(el)) {\n return el.scrollingElement!\n }\n if (isElement(el)) {\n return el as Element\n }\n return document.scrollingElement!\n}\n\nexport function getScrollTop(node: ScrollElement) {\n let result = 0\n if (isWindow(node) || isRoot(node)) {\n result = window.scrollY\n } else {\n const element = getScrollElement(node)\n result = element.scrollTop\n }\n return result\n}\n","import type { RefObject } from 'react'\nimport type { ScrollElement } from '../../utils/dom'\nimport { useLayoutEffect, useRef, useState } from 'react'\nimport { isWindow } from '../../utils/dom'\n\nexport interface CalcSizeOptions {\n getScroller: () => ScrollElement | undefined\n root: RefObject<HTMLDivElement>\n}\n\nexport function useCalcSize(options: CalcSizeOptions) {\n const { getScroller, root } = options\n\n const [scrollContainerWidth, setScrollContainerWidth] = useState(0)\n const [scrollContainerHeight, setScrollContainerHeight] = useState(0)\n\n const [tableWidth, setTableWidth] = useState(0)\n const [tableHeight, setTableHeight] = useState(0)\n\n const scrollerContainerRef = useRef<HTMLElement | null>(null)\n\n useLayoutEffect(() => {\n const scrollerContainer = getScroller()\n if (scrollerContainer == null) return\n let scroller: HTMLElement\n if (isWindow(scrollerContainer)) {\n scroller = document.scrollingElement as HTMLElement\n } else {\n scroller = scrollerContainer\n }\n scrollerContainerRef.current = scroller\n const observer = new ResizeObserver((entries) => {\n const { width, height } = entries[0].contentRect\n setScrollContainerWidth(width)\n setScrollContainerHeight(height)\n })\n observer.observe(scroller)\n return () => {\n observer.disconnect()\n }\n }, [getScroller])\n\n useLayoutEffect(() => {\n const node = root.current\n if (node == null) return\n const observer = new ResizeObserver((entries) => {\n const { width, height } = entries[0].contentRect\n setTableWidth(width)\n setTableHeight(height)\n })\n observer.observe(node)\n return () => {\n observer.disconnect()\n }\n }, [root])\n\n return {\n scrollContainerWidth,\n scrollContainerHeight,\n tableWidth,\n tableHeight,\n }\n}\n","import type { PropsWithChildren } from 'react'\nimport type { CalcSizeOptions } from '../hooks/useCalcSize'\nimport { createContext, useContext, useMemo } from 'react'\nimport { useCalcSize } from '../hooks/useCalcSize'\n\nexport interface ContainerSizeState {\n scrollContainerWidth: number\n scrollContainerHeight: number\n tableWidth: number\n tableHeight: number\n}\n\nconst ContainerSize = createContext<ContainerSizeState | null>(null)\n\nexport function ContainerSizeContext(props: PropsWithChildren<CalcSizeOptions>) {\n const { getScroller, root, children } = props\n\n const {\n scrollContainerHeight,\n scrollContainerWidth,\n tableHeight,\n tableWidth,\n } = useCalcSize({ getScroller, root })\n\n const state = useMemo((): ContainerSizeState => {\n return {\n scrollContainerWidth,\n scrollContainerHeight,\n tableWidth,\n tableHeight,\n }\n }, [scrollContainerWidth, scrollContainerHeight, tableWidth, tableHeight])\n\n return (\n <ContainerSize.Provider value={state}>\n {children}\n </ContainerSize.Provider>\n )\n}\n\nexport function useContainerSize() {\n const context = useContext(ContainerSize)\n if (context == null) {\n throw new Error('useContainerSize provider not found')\n }\n return context\n}\n","import type { PropsWithChildren } from 'react'\nimport { createContext, useContext, useMemo, useRef } from 'react'\n\ntype Listener = (scrollLeft: number, node: HTMLElement) => void\n\nexport interface HorizontalScrollContextState {\n listen: (key: string, listener: Listener) => () => void\n notify: (key: string, options: { scrollLeft: () => number, node: HTMLElement }) => void\n}\n\nconst HorizontalScroll = createContext<HorizontalScrollContextState | null>(null)\n\nif (__DEV__) {\n HorizontalScroll.displayName = 'VirtualTable.HorizontalScroll'\n}\n\nexport function HorizontalScrollContext(props: PropsWithChildren) {\n const { children } = props\n\n const listenerMap = useRef(new Map<string, Listener>())\n const context = useMemo((): HorizontalScrollContextState => {\n const skipEvent = new Set<string>()\n return {\n listen(key, listener) {\n listenerMap.current.set(key, (scrollLeft, node) => {\n listener(scrollLeft, node)\n })\n return () => {\n listenerMap.current.delete(key)\n }\n },\n notify(key, options) {\n if (skipEvent.has(key)) {\n skipEvent.delete(key)\n return\n }\n const { scrollLeft, node } = options\n let rAF = window.requestAnimationFrame as ((fn: () => void) => void) | undefined\n if (rAF == null) {\n rAF = (fn: () => void) => {\n fn()\n }\n }\n listenerMap.current.forEach((listener, itemKey) => {\n if (key === itemKey) return\n skipEvent.add(itemKey)\n rAF(() => {\n listener(scrollLeft(), node)\n })\n })\n },\n }\n }, [])\n\n return <HorizontalScroll.Provider value={context}>{children}</HorizontalScroll.Provider>\n}\n\nexport function useHorizontalScrollContext() {\n const context = useContext(HorizontalScroll)\n\n if (context == null) {\n throw new Error('useHorizontalScrollContext provider not found')\n }\n\n return context\n}\n","import type { Key } from 'react'\nimport { createContext, useContext } from 'react'\n\nexport interface TableRowManagerContextType {\n getRowHeightList: () => number[]\n /**\n * @param index rowIndex\n * @param key 唯一的 key,用于去重\n * @param height 行高\n */\n updateRowHeight: (index: number, key: Key, height: number) => void\n}\n\nexport const TableRowManager = createContext<TableRowManagerContextType | null>(null)\n\nif (__DEV__) {\n TableRowManager.displayName = 'VirtualTable.RowManager'\n}\n\nexport function useTableRowManager() {\n const context = useContext(TableRowManager)\n if (context == null) {\n throw new Error('useTableRowManager provider not found')\n }\n return context\n}\n","import { useCallback, useLayoutEffect, useRef } from 'react'\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport function useStableFn<T extends Function>(callback: T): T {\n const fn = useRef<T | null>(null)\n useLayoutEffect(() => {\n fn.current = callback\n })\n\n const stableFn = useCallback((...args: unknown[]) => {\n return fn.current?.(...args) as unknown\n }, []) as unknown as T\n\n return stableFn\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Middleware, MiddlewareContext, MiddlewareResult } from './types'\nimport { isShallowEqual } from '../../utils/equal'\n\n/**\n * 创建中间件,内部会浅比较 options,只有 options 改变才会返回新的函数。\n */\nfunction createMiddleware<T, Args extends any[]>(\n hook: (ctx: MiddlewareContext<T>, ...args: Args) => MiddlewareResult<T>,\n): (...args: Args) => Middleware<T> {\n const cache = {\n current: null as Middleware<T> | null,\n options: null as Args | null | undefined,\n }\n\n return (...options: Args): Middleware<T> => {\n const useMiddleware: Middleware<T> = (ctx) => hook(ctx, ...options)\n\n if (isShallowEqual(options, cache.options)) {\n return cache.current ?? useMiddleware\n }\n\n cache.options = options\n cache.current = useMiddleware\n\n return useMiddleware\n }\n}\n\nexport type { MiddlewareResult }\nexport { createMiddleware }\n","import type { ReactNode } from 'react'\nimport type { OnRowType } from '../types'\nimport type { Middleware, MiddlewareContext, MiddlewareRenders, MiddlewareResult } from './types'\nimport clsx from 'clsx'\n\nexport interface Hook<T> { priority: number, hook: Middleware<T> }\nexport type UnsafeHook<T> = Middleware<T> | undefined | null | Hook<T>\n\ntype RenderFunctions<T> = {\n [K in keyof T]: (T[K])[]\n}\n\nexport function shakeUnsafeHooks<T>(hooks: UnsafeHook<T>[]): Hook<T>[] {\n if (Array.isArray(hooks)) {\n return hooks.filter((x) => {\n return x != null && (typeof x === 'function' || typeof x.hook === 'function')\n }).map((hook): Hook<T> => {\n if (typeof hook === 'function') {\n return { priority: 100, hook }\n }\n return hook!\n })\n }\n return []\n}\n\nexport class TablePipeline<T> {\n constructor() {\n this.use = this.use.bind(this)\n }\n\n hooks: Hook<T>[] = []\n\n setHooks(value: Hook<T>[]) {\n this.hooks = value\n }\n\n use(options: MiddlewareContext<T>): MiddlewareResult<T> {\n if (this.hooks.length === 0) {\n return options\n }\n\n const context: { current: MiddlewareResult<T> } = { current: options }\n\n const renderFunctionMap: RenderFunctions<Required<MiddlewareRenders>> = {\n render: [],\n renderRoot: [],\n renderContent: [],\n renderHeaderWrapper: [],\n renderHeaderRoot: [],\n renderHeader: [],\n renderHeaderRow: [],\n renderHeaderCell: [],\n renderBodyWrapper: [],\n renderBodyRoot: [],\n renderBody: [],\n renderBodyContent: [],\n renderRow: [],\n renderCell: [],\n }\n\n const rowClassNameFunctions: ((record: T, index: number) => string)[] = []\n const onRowFunctions: OnRowType<T>[] = []\n\n const hooks = this.hooks.slice()\n hooks.sort((a, b) => a.priority - b.priority)\n\n hooks.map((x) => x.hook).forEach((hook) => {\n const nextCtx = hook(context.current)\n const {\n render: _render,\n renderRoot: _renderRoot,\n renderContent: _renderContent,\n renderHeaderWrapper: _renderHeaderWrapper,\n renderHeaderRoot: _renderHeaderRoot,\n renderHeader: _renderHeader,\n renderHeaderRow: _renderHeaderRow,\n renderHeaderCell: _renderHeaderCell,\n renderBodyWrapper: _renderBodyWrapper,\n renderBodyRoot: _renderBodyRoot,\n renderBody: _renderBody,\n renderBodyContent: _renderBodyContent,\n renderRow: _renderRow,\n renderCell: _renderCell,\n\n rowClassName,\n onRow,\n ...rest\n } = nextCtx\n\n Object.entries(renderFunctionMap).forEach(([key, value]) => {\n const target = nextCtx[key as keyof MiddlewareRenders]\n if (typeof target === 'function') {\n // @ts-expect-error: There is no way to declare the type correctly, but it works at runtime.\n value.push(target)\n }\n })\n\n if (typeof rowClassName === 'function') {\n rowClassNameFunctions.push(rowClassName)\n }\n if (typeof onRow === 'function') {\n onRowFunctions.push(onRow)\n }\n context.current = rest\n })\n\n Object.entries(renderFunctionMap).forEach(([key, renders]) => {\n if (renders.length > 0) {\n context.current[key as keyof MiddlewareRenders] = (children, args) => {\n // reduce 把 [render1, render2] 转为 render2(render1(children))\n return renders.reduce<ReactNode>((node, render) => {\n // @ts-expect-error: There is no way to declare the type correctly, but it works at runtime.\n return render(node, args)\n }, children)\n }\n }\n })\n\n if (rowClassNameFunctions.length > 0) {\n context.current.rowClassName = (record, index) => {\n return clsx(...rowClassNameFunctions.map((fn) => fn(record, index)))\n }\n }\n\n if (onRowFunctions.length > 0) {\n context.current.onRow = (record, index) => {\n return onRowFunctions.reduce((result, item) => {\n return { ...result, ...item(record, index) }\n }, {})\n }\n }\n\n return context.current\n }\n\n static defaultPipeline = new TablePipeline()\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Hook } from './table-pipeline'\nimport type { Middleware } from './types'\nimport { useMemo } from 'react'\nimport { shallowEqualArrays } from '../../utils/equal'\nimport { shakeUnsafeHooks, TablePipeline } from './table-pipeline'\n\nexport interface UseTablePipelineOptions<T = any> {\n pipeline?: TablePipeline<T>\n use?: (Middleware<T> | Hook<T>)[]\n}\n\nexport { TablePipeline }\nexport type { Hook }\n\nexport function useTablePipeline<T = any>(options: UseTablePipelineOptions<T>) {\n const { use, pipeline: extraPipeline } = options\n\n const cached = useMemo(() => ({ current: new TablePipeline<T>() }), [])\n\n if (use != null) {\n const nextHooks = shakeUnsafeHooks([...use, ...(extraPipeline?.hooks ?? [])])\n\n if (!shallowEqualArrays(cached.current.hooks, nextHooks)) {\n const pipeline = new TablePipeline<T>()\n pipeline.setHooks(nextHooks)\n cached.current = pipeline\n return pipeline\n }\n }\n\n return cached.current\n}\n","export function findLastIndex<T>(\n arr: T[],\n predicate: (value: T, index: number) => boolean,\n) {\n let result = -1\n for (let i = 0; i < arr.length; i += 1) {\n if (predicate(arr[i], i)) {\n result = i\n }\n }\n return result\n}\n","import type { DetailedHTMLProps, HTMLAttributes, ReactElement } from 'react'\nimport type { MiddlewareRenderCell, MiddlewareRenderRow } from './pipeline/types'\nimport type { InnerColumnDescriptor, OnRowType } from './types'\nimport clsx from 'clsx'\nimport { memo } from 'react'\nimport { findLastIndex } from '../utils/find-last-index'\nimport Cell from './cell'\nimport { useTableRowManager } from './context/row-manager'\nimport { pipelineRender } from './pipeline/render-pipeline'\nimport { isValidFixedLeft, isValidFixedRight } from './utils/verification'\n\ntype NativeProps = DetailedHTMLProps<\n HTMLAttributes<HTMLTableRowElement>,\n HTMLTableRowElement\n>\n\nexport interface RowProps<T> extends Omit<NativeProps, 'children'> {\n rowIndex: number\n rowData: T\n columns: InnerColumnDescriptor<T>\n onRow?: OnRowType<T>\n renderRow?: MiddlewareRenderRow\n renderCell?: MiddlewareRenderCell\n}\n\nfunction Row<T>(props: RowProps<T>) {\n const {\n className,\n rowIndex,\n rowData,\n columns: columnDescriptor,\n onRow,\n renderRow,\n renderCell,\n ...rest\n } = props\n\n const { updateRowHeight } = useTableRowManager()\n\n const { columns, descriptor } = columnDescriptor\n\n const lastFixedLeftColumnIndex = findLastIndex(descriptor, (x) => {\n if (x.type === 'blank') {\n return false\n }\n return isValidFixedLeft(x.column.fixed)\n })\n const firstFixedRightColumnIndex = descriptor.findIndex((x) => {\n if (x.type === 'blank') {\n return false\n }\n return isValidFixedRight(x.column.fixed)\n })\n\n const { className: extraClassName, ...extraProps } = onRow?.(rowData, rowIndex) ?? {}\n\n return pipelineRender(\n <tr\n {...rest}\n {...extraProps}\n className={clsx('virtual-table-row', className, extraClassName)}\n ref={(node) => {\n if (node == null) return\n // 小心陷阱:当 table 父元素为 display: none 时,依然会触发 updateRowHeight 函数,并设置高度为 0\n updateRowHeight(rowIndex, rowIndex, node.offsetHeight)\n }}\n >\n {descriptor.map((item, index) => {\n const { key } = item\n if (item.type === 'blank') {\n return <td key={key} />\n }\n const { column } = item\n return (\n <Cell\n key={key}\n className={clsx(\n lastFixedLeftColumnIndex === index && 'virtual-table-cell-fix-left-last',\n firstFixedRightColumnIndex === index\n && 'virtual-table-cell-fix-right-first',\n )}\n column={column}\n rowIndex={rowIndex}\n rowData={rowData}\n renderCell={renderCell}\n />\n )\n })}\n </tr>,\n renderRow,\n { columns, rowIndex, rowData, columnDescriptor: descriptor },\n )\n}\n\nexport default memo(Row) as <T>(props: RowProps<T>) => ReactElement\n","import type { MutableRefObject, Ref } from 'react'\nimport { useCallback } from 'react'\n\ntype PossibleRef<T> = Ref<T> | undefined\n\nexport function assignRef<T>(ref: PossibleRef<T>, value: T) {\n if (typeof ref === 'function') {\n ref(value)\n } else if (typeof ref === 'object' && ref !== null && 'current' in ref) {\n (ref as MutableRefObject<T>).current = value\n }\n}\n\nexport function mergeRefs<T>(...refs: PossibleRef<T>[]) {\n return (node: T | null) => {\n refs.forEach((ref) => assignRef(ref, node))\n }\n}\n\nexport function useMergedRef<T>(...refs: PossibleRef<T>[]) {\n // eslint-disable-next-line react-compiler/react-compiler\n return useCallback(mergeRefs(...refs), refs)\n}\n","import { isWindow } from '../../utils/dom'\n\ninterface ResizeRect {\n width: number\n height: number\n}\n\nexport function onResize(target: Window | HTMLElement, callback: (rect: ResizeRect) => void) {\n if (isWindow(target)) {\n const listener = () => {\n callback({\n width: window.innerWidth,\n height: window.innerHeight,\n })\n }\n listener()\n window.addEventListener('resize', listener)\n return () => {\n window.removeEventListener('resize', listener)\n }\n } else {\n const observer = new ResizeObserver((entries) => {\n const rect = entries[0].contentRect\n callback({ width: rect.width, height: rect.height })\n })\n observer.observe(target)\n return () => {\n observer.disconnect()\n }\n }\n}\n","/* eslint-disable react-compiler/react-compiler */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ScrollElement } from '../../utils/dom'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { getScrollElement, isRoot, isWindow } from '../../utils/dom'\nimport { onResize } from '../utils/on-resize'\n\nexport interface RowRect {\n index: number\n height: number\n top: number\n bottom: number\n}\n\ninterface UseRowVirtualizeOptions<T = any> {\n getOffsetTop: () => number\n dataSource: T[]\n getScroller: () => ScrollElement | undefined\n estimateSize: number\n overscan: number\n}\n\nfunction anchorQuery(rects: RowRect[], scrollTop: number) {\n let left = 0\n let right = rects.length - 1\n let index = -1\n\n while (left <= right) {\n const mid = Math.floor((left + right) / 2)\n\n if (rects[mid].bottom > scrollTop) {\n index = mid\n right = mid - 1\n } else {\n left = mid + 1\n }\n }\n\n if (index === -1) {\n return undefined\n }\n\n return rects[index]\n}\n\nexport function useRowVirtualize<T = any>(options: UseRowVirtualizeOptions<T>) {\n const {\n getOffsetTop,\n dataSource: rawData,\n getScroller,\n estimateSize,\n overscan,\n } = options\n\n const [startIndex, setStartIndex] = useState(0)\n const [endIndex, setEndIndex] = useState(0)\n\n const dataSlice = useMemo(() => {\n return rawData.slice(startIndex, endIndex)\n }, [rawData, startIndex, endIndex])\n\n // 行高信息(先填充预估高度,DOM渲染后再更新成实际高度)\n const rowHeights = useRef<number[]>([])\n const fillRowHeights = () => {\n const len = rawData.length\n for (let i = 0; i < len; i++) {\n const target = rowHeights.current[i] as number | undefined\n // 由于 fillRowHeights 是在渲染阶段调用,防止重复渲染时 estimateSize 覆盖了真实 DOM 的高度\n if (target == null) {\n rowHeights.current[i] = estimateSize\n }\n }\n rowHeights.current = rowHeights.current.slice(0, len)\n }\n fillRowHeights()\n\n // 布局信息(也就是锚点元素需要的信息,top,bottom,height,index)\n const rowRects = useRef<RowRect[]>([])\n const updateRowRectList = (shouldSkip = false) => {\n if (shouldSkip && rowRects.current.length > 0) {\n return\n }\n const { rects } = rowHeights.current.reduce((result, height, index) => {\n const nextTop = result.top + height\n result.rects.push({\n index,\n top: result.top,\n height,\n bottom: nextTop,\n })\n result.top = nextTop\n return result\n }, { top: 0, rects: [] as RowRect[] })\n rowRects.current = rects\n }\n\n const setRowHeight = (index: number, height: number) => {\n rowHeights.current[index] = height\n }\n\n // 锚点元素,当前虚拟列表中,最接近滚动容器顶部的元素\n const anchorRef = useRef<RowRect>({\n index: 0,\n height: estimateSize,\n top: 0,\n bottom: estimateSize,\n })\n\n // 用来判断滚动方向\n const scrollTopRef = useRef(0)\n const initial = useRef(false)\n useEffect(() => {\n const container = getScroller()\n if (container == null) return\n\n let count = 0\n\n const getScrollTop = () => {\n const offsetTop = getOffsetTop()\n let result = 0\n if (isWindow(container) || isRoot(container)) {\n result = window.scrollY\n } else {\n const element = getScrollElement(container)\n result = element.scrollTop\n }\n return Math.max(result - offsetTop, 0)\n }\n\n const calcCount = (scrollerContainerHeight: number) => {\n const prevCount = count\n count = Math.ceil(scrollerContainerHeight / estimateSize)\n return { prevCount }\n }\n\n const updateBoundary = (scrollTop: number) => {\n const anchor = anchorQuery(rowRects.current, scrollTop)\n if (anchor != null) {\n anchorRef.current = anchor\n setStartIndex(Math.max(0, anchor.index - overscan))\n setEndIndex(anchor.index + count + overscan)\n }\n }\n\n const onScroll = (e: Event) => {\n const offsetTop = getOffsetTop()\n const scrollElement = getScrollElement(e.target)\n const scrollTop = Math.max(0, scrollElement.scrollTop - offsetTop)\n\n // 是否为向下滚动\n const isScrollDown = scrollTop > scrollTopRef.current\n\n if (isScrollDown) {\n // 如果滚动距离比较小,没有超出锚点元素的边界,就不需要计算 startIndex、endIndex 了\n if (scrollTop > anchorRef.current.bottom) {\n updateBoundary(scrollTop)\n }\n } else {\n if (scrollTop < anchorRef.current.top) {\n updateBoundary(scrollTop)\n }\n }\n\n scrollTopRef.current = scrollTop\n }\n\n let prevHeight = 0\n const stopListen = onResize(container, (rect) => {\n // 处理父元素 display:none 容器高度丢失,导致显示 row 不准确\n if (rect.height === prevHeight || rect.height === 0) {\n return\n }\n prevHeight = rect.height\n calcCount(rect.height)\n const scrollTop = getScrollTop()\n if (!initial.current) {\n initial.current = true\n let nextStartIndex = 0\n // 判断一下当前滚动位置,计算 startIndex(场景:SPA 页面切换且渲染非异步数据)\n if (scrollTop >= estimateSize) {\n nextStartIndex = Math.max(Math.floor(scrollTop / estimateSize) - 1 - overscan, 0)\n }\n const nextEndIndex = nextStartIndex + count + overscan\n setStartIndex(nextStartIndex)\n setEndIndex(nextEndIndex)\n } else {\n updateBoundary(scrollTop)\n }\n })\n\n container.addEventListener('scroll', onScroll)\n return () => {\n stopListen()\n container.removeEventListener('scroll', onScroll)\n }\n }, [estimateSize, getOffsetTop, getScroller, overscan])\n\n const sum = (startIndex: number, endIndex?: number) => {\n return rowHeights.current.slice(startIndex, endIndex).reduce((a, b) => a + b, 0)\n }\n // TODO: React Compiler 测试 topBlank 和 bottomBlank\n const topBlank = sum(0, startIndex)\n const bottomBlank = sum(endIndex)\n\n return {\n startIndex,\n endIndex,\n\n rowHeightList: rowHeights,\n updateRowRectList,\n setRowHeight,\n\n topBlank,\n bottomBlank,\n\n dataSlice,\n }\n}\n","import type { CSSProperties, Key, Ref } from 'react'\nimport type { ScrollElement } from '../utils/dom'\nimport type { TableRowManagerContextType } from './context/row-manager'\nimport type { NecessaryProps } from './internal'\nimport type {\n MiddlewareRenderBody,\n MiddlewareRenderBodyContent,\n MiddlewareRenderBodyRoot,\n MiddlewareRenderBodyWrapper,\n} from './pipeline/types'\nimport type { RowProps } from './row'\nimport type { InnerColumnDescriptor } from './types'\nimport clsx from 'clsx'\nimport { useCallback, useEffect, useMemo, useRef } from 'react'\nimport { useMergedRef } from '../utils/ref'\nimport Colgroup from './colgroup'\nimport { useColumnSizes } from './context/column-sizes'\nimport { useHorizontalScrollContext } from './context/horizontal-scroll'\nimport { TableRowManager } from './context/row-manager'\nimport { useRowVirtualize } from './hooks/useRowVirtualize'\nimport { pipelineRender } from './pipeline/render-pipeline'\nimport Row from './row'\nimport { getRowKey } from './utils/get-key'\n\nexport interface TableBodyProps<T>\n extends Omit<NecessaryProps<T>, 'columns'>,\n Pick<RowProps<T>, 'onRow' | 'renderRow' | 'renderCell'> {\n className?: string\n style?: CSSProperties\n columns: InnerColumnDescriptor<T>\n bodyWrapperRef?: Ref<HTMLDivElement>\n bodyRootRef?: Ref<HTMLTableElement>\n bodyRef?: Ref<HTMLTableSectionElement>\n overscan: number\n estimateSize: number\n getOffsetTop: () => number\n getScroller: () => ScrollElement | undefined\n rowClassName?: (record: T, index: number) => string\n renderBodyWrapper?: MiddlewareRenderBodyWrapper\n renderBodyRoot?: MiddlewareRenderBodyRoot\n renderBody?: MiddlewareRenderBody\n renderBodyContent?: MiddlewareRenderBodyContent\n}\n\nfunction TableBody<T>(props: TableBodyProps<T>) {\n const {\n bodyWrapperRef,\n bodyRootRef,\n bodyRef,\n className,\n style,\n dataSource: rawData,\n columns: columnDescriptor,\n rowKey,\n\n overscan,\n estimateSize,\n\n getScroller,\n getOffsetTop,\n\n rowClassName,\n onRow,\n renderBodyWrapper,\n renderBodyRoot,\n renderBody,\n renderBodyContent,\n renderRow,\n renderCell,\n } = props\n\n const {\n startIndex,\n dataSlice: dataSource,\n setRowHeight,\n updateRowRectList,\n rowHeightList,\n topBlank,\n bottomBlank,\n } = useRowVirtualize({\n getOffsetTop,\n dataSource: rawData,\n getScroller,\n estimateSize,\n overscan,\n })\n\n // Record<rowIndex, Map(rowHeight)>\n // 一个 Row 可能有多个行高。例如:默认情况下,只有一个行高,展开后,展开面板的高度也被认为是同一个 Row 的\n // 所以可展开时,行高有多个,所有行高之和,则为 Row 的高度\n // 行高之间使用唯一的 key 作为区分\n const rowHeights = useRef(new Map<number, Map<Key, number>>())\n\n // 更新行高。一般会在 body 渲染后、展开面板中调用\n const updateRowHeight = useCallback((index: number, key: Key, height: number) => {\n const target = rowHeights.current.get(index) ?? new Map<Key, number>()\n target.set(key, height)\n rowHeights.current.set(index, target)\n }, [])\n\n const rowManageState = useMemo<TableRowManagerContextType>(() => {\n return { updateRowHeight, getRowHeightList: () => rowHeightList.current }\n }, [rowHeightList, updateRowHeight])\n\n const { columns, descriptor } = columnDescriptor\n const tbodyRef = useMergedRef(bodyRef, (elm) => {\n if (elm == null) return\n\n const bodyHeight = elm.offsetHeight\n if (bodyHeight === 0) return\n\n // body 的 ref 回调函数中,说明 body 渲染完成,也就意味着所有的 tr 也已经渲染完成,\n // 现在可以获取 tr 的高度,记录准确行高\n const heights = rowHeights.current\n heights.forEach((row, rowIndex) => {\n const height = Array.from(row.values()).reduce((res, x) => res + x, 0)\n setRowHeight(rowIndex, height)\n })\n updateRowRectList()\n rowHeights.current.clear()\n })\n\n const bodyContent = pipelineRender(dataSource.map((e, rowIndex) => {\n const key = getRowKey(e, rowKey)\n return (\n <Row\n key={key}\n className={clsx(rowClassName?.(e, rowIndex))}\n rowIndex={rowIndex + startIndex}\n rowData={e}\n columns={columnDescriptor}\n onRow={onRow}\n renderRow={renderRow}\n renderCell={renderCell}\n />\n )\n }), renderBodyContent, { columns, columnDescriptor: descriptor, startRowIndex: startIndex })\n\n const bodyNode = pipelineRender(\n <tbody ref={tbodyRef}>{bodyContent}</tbody>,\n renderBody,\n { columns, columnDescriptor: descriptor, startRowIndex: startIndex },\n )\n\n const { setWidthList } = useColumnSizes()\n\n const tableNode = pipelineRender(\n <table\n className={clsx(className, 'virtual-table-body')}\n style={{ ...style, paddingBottom: bottomBlank, paddingTop: topBlank }}\n ref={bodyRootRef}\n >\n <Colgroup\n columns={descriptor}\n onColumnSizesMeasure={setWidthList}\n />\n {bodyNode}\n </table>,\n renderBodyRoot,\n { columns, columnDescriptor: descriptor, startRowIndex: startIndex },\n )\n\n const { listen, notify } = useHorizontalScrollContext()\n const wrapperRef = useRef<HTMLDivElement>(null)\n useEffect(() => {\n const node = wrapperRef.current\n if (node == null) return\n\n const key = 'virtual-table-body'\n const onScroll = () => {\n notify(key, { scrollLeft: () => node.scrollLeft, node })\n }\n const dispose = listen(key, (scrollLeft) => {\n node.scrollLeft = scrollLeft\n })\n node.addEventListener('scroll', onScroll)\n return () => {\n node.removeEventListener('scroll', onScroll)\n dispose()\n }\n }, [listen, notify])\n\n const mergedRef = useMergedRef(wrapperRef, bodyWrapperRef)\n\n return (\n <TableRowManager.Provider value={rowManageState}>\n {pipelineRender(\n <div\n ref={mergedRef}\n className=\"virtual-table-body-wrapper\"\n >\n {tableNode}\n </div>,\n renderBodyWrapper,\n { columns, columnDescriptor: descriptor, startRowIndex: startIndex },\n )}\n </TableRowManager.Provider>\n )\n}\n\nexport default TableBody\n","import type { CSSProperties, FC, RefObject } from 'react'\nimport type {\n MiddlewareRenderHeader,\n MiddlewareRenderHeaderCell,\n MiddlewareRenderHeaderRoot,\n MiddlewareRenderHeaderRow,\n MiddlewareRenderHeaderWrapper,\n} from './pipeline/types'\nimport type { InnerColumnDescriptor } from './types'\nimport clsx from 'clsx'\nimport { createElement, Fragment, useEffect, useRef } from 'react'\nimport { findLastIndex } from '../utils/find-last-index'\nimport { useMergedRef } from '../utils/ref'\nimport Colgroup from './colgroup'\nimport { useColumnSizes } from './context/column-sizes'\nimport { useHorizontalScrollContext } from './context/horizontal-scroll'\nimport { useTableSticky } from './context/sticky'\nimport { pipelineRender } from './pipeline/render-pipeline'\nimport { getKey } from './utils/get-key'\nimport { isValidFixed, isValidFixedLeft, isValidFixedRight } from './utils/verification'\n\nexport interface TableHeaderProps {\n className?: string\n style?: CSSProperties\n\n wrapperRef?: RefObject<HTMLDivElement>\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n columns: InnerColumnDescriptor<any>\n\n /** 开启表头 sticky,设置为 true 则默认 top 为 0,为 number 则是偏移量 */\n stickyHeader?: number | boolean\n\n renderHeaderWrapper?: MiddlewareRenderHeaderWrapper\n renderHeaderRoot?: MiddlewareRenderHeaderRoot\n renderHeader?: MiddlewareRenderHeader\n renderHeaderRow?: MiddlewareRenderHeaderRow\n renderHeaderCell?: MiddlewareRenderHeaderCell\n}\n\nconst TableHeader: FC<TableHeaderProps> = (props) => {\n const {\n className,\n style,\n wrapperRef,\n columns: columnDescriptor,\n stickyHeader,\n renderHeaderWrapper,\n renderHeaderRoot,\n renderHeader,\n renderHeaderRow,\n renderHeaderCell,\n } = props\n\n const { columns, descriptor } = columnDescriptor\n const lastColumn = columns[columns.length - 1]\n\n const { widthList } = useColumnSizes()\n const { size: stickySizes } = useTableSticky()\n\n const lastFixedLeftColumnIndex = findLastIndex(descriptor, (x) => {\n if (x.type === 'blank') {\n return false\n }\n return isValidFixedLeft(x.column.fixed)\n })\n const firstFixedRightColumnIndex = descriptor.findIndex((x) => {\n if (x.type === 'blank') {\n return false\n }\n return isValidFixedRight(x.column.fixed)\n })\n const { listen, notify } = useHorizontalScrollContext()\n\n const headerWrapperRef = useRef<HTMLDivElement>(null)\n useEffect(() => {\n const node = headerWrapperRef.current\n if (node == null) return\n const key = 'virtual-table-header'\n const onScroll = () => {\n notify(key, { scrollLeft: () => node.scrollLeft, node })\n }\n const dispose = listen(key, (scrollLeft) => {\n node.scrollLeft = scrollLeft\n })\n node.addEventListener('scroll', onScroll)\n return () => {\n node.removeEventListener('scroll', onScroll)\n dispose()\n }\n }, [listen, notify])\n\n const row = pipelineRender(\n <tr>\n {descriptor.map((item, index) => {\n const { key } = item\n if (item.type === 'blank') {\n return <th key={key} data-blank />\n }\n\n const { column } = item\n\n if (column.colSpan === 0) {\n return null\n }\n\n const isLast = getKey(lastColumn) === key\n const {\n className: thClassName,\n style: thStyle,\n ...rest\n } = column.onHeaderCell?.(column, index) ?? {}\n\n return (\n <Fragment key={key}>\n {pipelineRender(\n createElement(\n 'th',\n {\n scope: 'col',\n ...rest,\n colSpan: column.colSpan,\n className: clsx(\n 'virtual-table-header-cell',\n isLast && 'no-split',\n column.align != null && `virtual-table-align-${column.align}`,\n isValidFixed(column.fixed) && 'virtual-table-sticky-cell',\n lastFixedLeftColumnIndex === index && 'virtual-table-cell-fix-left-last',\n firstFixedRightColumnIndex === index && 'virtual-table-cell-fix-right-first',\n column.className,\n thClassName,\n ),\n style: {\n ...thStyle,\n left: isValidFixedLeft(column.fixed) ? stickySizes.get(key) : undefined,\n right: isValidFixedRight(column.fixed)\n ? stickySizes.get(key)\n : undefined,\n },\n },\n column.title,\n ),\n renderHeaderCell,\n { column, columns, columnWidths: widthList, columnDescriptor: descriptor },\n )}\n </Fragment>\n )\n })}\n </tr>,\n renderHeaderRow,\n { columns, columnDescriptor: descriptor },\n )\n\n const theadNode = pipelineRender(\n <thead className=\"virtual-table-thead\">{row}</thead>,\n renderHeader,\n { columns, columnDescriptor: descriptor },\n )\n\n const tableNode = pipelineRender(\n <table\n style={style}\n >\n <Colgroup columns={descriptor} />\n {theadNode}\n </table>,\n renderHeaderRoot,\n { columns, columnDescriptor: descriptor },\n )\n\n const mergedRef = useMergedRef(wrapperRef, headerWrapperRef)\n\n return pipelineRender(\n <div\n ref={mergedRef}\n className={clsx('virtual-table-header', className, {\n 'virtual-table-header-sticky': stickyHeader,\n })}\n style={{\n top: Number.isFinite(stickyHeader) ? (stickyHeader as number) : undefined,\n }}\n >\n {tableNode}\n </div>,\n renderHeaderWrapper,\n { columns, columnDescriptor: descriptor },\n )\n}\n\nexport default TableHeader\n","import type { Key, RefObject } from 'react'\nimport type { ColumnDescriptor, ColumnType } from '../types'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { findLastIndex } from '../../utils/find-last-index'\nimport { getKey } from '../utils/get-key'\nimport { onResize } from '../utils/on-resize'\nimport { isValidFixedLeft, isValidFixedRight } from '../utils/verification'\nimport { useStableFn } from './useStableFn'\n\ninterface UseColumnVirtualizeOptions<T> {\n estimateSize: number\n defaultColumnWidth: number\n overscan: number\n columns: ColumnType<T>[]\n bodyWrapper: RefObject<HTMLDivElement>\n columnWidths: Map<Key, number>\n disabled?: boolean\n}\n\ninterface Rect {\n index: number\n width: number\n left: number\n right: number\n}\n\nfunction anchorQuery(rects: Rect[], scrollLeft: number) {\n let left = 0\n let right = rects.length - 1\n let index = -1\n\n while (left <= right) {\n const mid = Math.floor((left + right) / 2)\n\n if (rects[mid].right > scrollLeft) {\n index = mid\n right = mid - 1\n } else {\n left = mid + 1\n }\n }\n\n if (index === -1) {\n return undefined\n }\n\n return rects[index]\n}\n\nfunction findFirstFixedRightIndex<T>(columns: ColumnType<T>[]) {\n let index = -1\n for (let i = columns.length - 1; i >= 0; i--) {\n const column = columns[i]\n if (isValidFixedRight(column.fixed)) {\n index = i\n } else {\n break\n }\n }\n return index\n}\n\nfunction findLastFixedLeftIndex<T>(columns: ColumnType<T>[]) {\n return findLastIndex(columns, (x) => isValidFixedLeft(x.fixed))\n}\n\nexport function useColumnVirtualize<T>(options: UseColumnVirtualizeOptions<T>) {\n const {\n estimateSize,\n defaultColumnWidth,\n overscan,\n columns: rawColumns,\n bodyWrapper,\n columnWidths,\n disabled = false,\n } = options\n\n const lastFixedLeftIndex = findLastFixedLeftIndex(rawColumns)\n const firstFixedRightIndex = findFirstFixedRightIndex(rawColumns)\n\n const leftKey = lastFixedLeftIndex > -1 ? getKey(rawColumns[lastFixedLeftIndex]) : null\n const rightKey = firstFixedRightIndex > -1 ? getKey(rawColumns[firstFixedRightIndex]) : null\n\n const [startIndex, setStartIndex] = useState(0)\n const [endIndex, setEndIndex] = useState(0)\n\n const rects = useMemo(() => {\n if (disabled) {\n return []\n }\n let left = 0\n return rawColumns.map((column, index): Rect => {\n const key = getKey(column)\n const width = columnWidths.get(key) ?? estimateSize\n const right = left + width\n const rect: Rect = {\n index,\n width,\n left,\n right,\n }\n\n left = right\n return rect\n })\n }, [rawColumns, columnWidths, estimateSize, disabled])\n\n // 锚点元素\n const anchorRef = useRef<Rect>({\n index: 0,\n width: estimateSize,\n left: 0,\n right: estimateSize,\n })\n\n const findAnchorRef = useStableFn((scrollLeft: number) => {\n return anchorQuery(rects, scrollLeft)\n })\n\n const updateBoundary = useStableFn((scrollLeft: number, count: number) => {\n const anchor = findAnchorRef(scrollLeft)\n if (anchor != null) {\n anchorRef.current = anchor\n setStartIndex(Math.max(0, anchor.index - overscan))\n setEndIndex(anchor.index + count + overscan)\n }\n })\n\n // 用来判断滚动方向\n const scrollLeftRef = useRef(0)\n useEffect(() => {\n if (disabled) return\n\n const scrollContainer = bodyWrapper.current\n if (scrollContainer == null) return\n\n const containerWidth = scrollContainer.offsetWidth\n let count = Math.ceil(containerWidth / estimateSize)\n\n const onScroll = () => {\n const scrollLeft = scrollContainer.scrollLeft\n // 滚动条向右移动(界面向左运动)\n const isScrollRight = scrollLeft > scrollLeftRef.current\n if (isScrollRight) {\n if (scrollLeft > anchorRef.current.right) {\n updateBoundary(scrollLeft, count)\n }\n } else {\n if (scrollLeft < anchorRef.current.left) {\n updateBoundary(scrollLeft, count)\n }\n }\n\n scrollLeftRef.current = scrollLeft\n }\n\n scrollContainer.addEventListener('scroll', onScroll)\n\n let prevWidth = 0\n const stop = onResize(scrollContainer, ({ width }) => {\n if (width === prevWidth || width === 0) {\n return\n }\n prevWidth = width\n const scrollLeft = scrollContainer.scrollLeft\n count = Math.ceil(width / estimateSize)\n updateBoundary(scrollLeft, count)\n })\n return () => {\n scrollContainer.removeEventListener('scroll', onScroll)\n stop()\n }\n }, [bodyWrapper, estimateSize, updateBoundary, overscan, findAnchorRef, disabled])\n\n const sum = (startIndex: number, endIndex?: number) => {\n return rects.slice(startIndex, endIndex).reduce((a, b) => a + b.width, 0)\n }\n\n const fixedLeftWidth = lastFixedLeftIndex > -1 ? sum(0, lastFixedLeftIndex + 1) : 0\n const fixedRightWidth = firstFixedRightIndex > -1 ? sum(firstFixedRightIndex) : 0\n\n // 设置 column.fixed 时,对应列将不会虚拟化,所以 blank 需要去除这些列的宽度\n const leftBlank = Math.max(0, sum(0, startIndex) - fixedLeftWidth)\n const rightBlank = Math.max(0, sum(endIndex) - fixedRightWidth)\n\n const columnSlice = useMemo(() => {\n if (disabled) {\n return rawColumns\n }\n const result = [\n ...rawColumns.slice(0, lastFixedLeftIndex + 1),\n ...rawColumns.slice(startIndex, endIndex),\n ...rawColumns.slice(firstFixedRightIndex),\n ]\n const unionKey = new Set<Key>()\n return result.filter((column) => {\n const key = getKey(column)\n if (unionKey.has(key)) {\n return false\n }\n unionKey.add(key)\n return true\n })\n }, [disabled, rawColumns, startIndex, endIndex, lastFixedLeftIndex, firstFixedRightIndex])\n\n const descriptor = useMemo(() => {\n return columnSlice.reduce<ColumnDescriptor<T>[]>((result, rawColumn, index) => {\n const key = getKey(rawColumn)\n let column = rawColumn\n if (column.width == null && column.minWidth == null) {\n column = { ...column, width: defaultColumnWidth }\n }\n if (key === leftKey) {\n result.push({ type: 'normal', key, column })\n result.push({ type: 'blank', key: '_blank_left', width: leftBlank })\n } else if (leftKey == null && index === 0) {\n result.push({ type: 'blank', key: '_blank_left', width: leftBlank })\n result.push({ type: 'normal', key, column })\n } else if (key === rightKey) {\n result.push({ type: 'blank', key: '_blank_right', width: rightBlank })\n result.push({ type: 'normal', key, column })\n } else if (rightKey == null && index === columnSlice.length - 1) {\n result.push({ type: 'normal', key, column })\n result.push({ type: 'blank', key: '_blank_right', width: rightBlank })\n } else {\n result.push({ type: 'normal', key, column })\n }\n return result\n }, [])\n }, [columnSlice, leftKey, rightKey, leftBlank, rightBlank, defaultColumnWidth])\n\n const columns = useMemo(() => {\n return { columns: columnSlice, descriptor }\n }, [columnSlice, descriptor])\n\n return { columns, columnSlice, lastFixedLeftIndex, firstFixedRightIndex }\n}\n","import type { CSSProperties, ForwardedRef, ReactNode, RefObject } from 'react'\nimport type { PipelineRender } from './pipeline/types'\nimport clsx from 'clsx'\nimport { forwardRef, useEffect, useRef, useState } from 'react'\nimport { useMergedRef } from '../utils/ref'\nimport { useHorizontalScrollContext } from './context/horizontal-scroll'\nimport { pipelineRender } from './pipeline/render-pipeline'\n\nexport interface TableRootProps {\n className?: string\n style?: CSSProperties\n children?: ReactNode\n hasFixedLeftColumn?: boolean\n hasFixedRightColumn?: boolean\n bodyScrollContainer: RefObject<HTMLElement>\n renderRoot?: PipelineRender\n}\n\nfunction TableRoot(props: TableRootProps, ref: ForwardedRef<HTMLDivElement>) {\n const {\n className,\n style,\n children,\n hasFixedLeftColumn,\n hasFixedRightColumn,\n renderRoot,\n bodyScrollContainer,\n } = props\n\n const rootNode = useRef<HTMLDivElement>(null)\n\n const [hasFixedLeft, setHasFixedLeft] = useState(false)\n const [hasFixedRight, setHasFixedRight] = useState(false)\n\n const { listen } = useHorizontalScrollContext()\n useEffect(() => {\n if (!hasFixedLeftColumn && !hasFixedRightColumn) {\n return\n }\n const onCheckHasFixedEdge = (node: HTMLElement) => {\n const { scrollLeft, clientWidth, scrollWidth } = node\n if (hasFixedLeftColumn) {\n setHasFixedLeft(scrollLeft !== 0)\n }\n if (hasFixedRightColumn) {\n setHasFixedRight(!(scrollLeft + clientWidth >= scrollWidth))\n }\n }\n const node = bodyScrollContainer.current\n if (node != null) {\n onCheckHasFixedEdge(node)\n }\n return listen('__root', (_scrollLeft, node) => {\n onCheckHasFixedEdge(node)\n })\n }, [bodyScrollContainer, hasFixedLeftColumn, hasFixedRightColumn, listen])\n\n const mergedRef = useMergedRef(ref, rootNode)\n return pipelineRender(\n <div\n ref={mergedRef}\n className={clsx(\n 'virtual-table',\n hasFixedLeft && 'virtual-table-has-fix-left',\n hasFixedRight && 'virtual-table-has-fix-right',\n className,\n )}\n style={style}\n >\n {children}\n </div>,\n renderRoot,\n {},\n )\n}\n\nexport default forwardRef(TableRoot)\n","import type { CSSProperties, ForwardedRef, Key, ReactElement, Ref, RefAttributes } from 'react'\nimport type { TableBodyProps } from './body'\nimport type { TableColumnsContextType } from './context/column-sizes'\nimport type { NecessaryProps } from './internal'\nimport type { ColumnDescriptor, OnRowType } from './types'\nimport clsx from 'clsx'\nimport {\n forwardRef,\n memo,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { getScrollParent, isRoot, isWindow } from '../utils/dom'\nimport { useMergedRef } from '../utils/ref'\nimport TableBody from './body'\nimport { ColumnSizes } from './context/column-sizes'\nimport { ContainerSizeContext } from './context/container-size'\nimport { HorizontalScrollContext } from './context/horizontal-scroll'\nimport { StickyContext } from './context/sticky'\nimport TableHeader from './header'\nimport { useColumnVirtualize } from './hooks/useColumnVirtualize'\nimport { pipelineRender } from './pipeline/render-pipeline'\nimport { TablePipeline } from './pipeline/useTablePipeline'\nimport TableRoot from './root'\nimport { getKey } from './utils/get-key'\nimport { isValidFixedLeft, isValidFixedRight } from './utils/verification'\n\nexport interface VirtualTableCoreProps<T>\n extends NecessaryProps<T>,\n Pick<TableBodyProps<T>, 'rowClassName' | 'onRow'> {\n bodyRootRef?: Ref<HTMLTableElement>\n\n className?: string\n style?: CSSProperties\n\n tableBodyClassName?: string\n tableBodyStyle?: CSSProperties\n\n /** 开启表头 sticky,设置为 true 则默认 top 为 0,为 number 则是偏移量 */\n stickyHeader?: number | boolean\n\n /** 预计每列宽度,需要横向虚拟化时,设置它 */\n estimatedColumnWidth?: number\n /** 预计每行高度 @default 46 */\n estimatedRowHeight?: number\n /** 在头和尾额外渲染多少行 @default 5 */\n overscanRows?: number\n /** 横向虚拟化时,在头和尾额外渲染多少列 @default 3 */\n overscanColumns?: number\n\n /** 开启表头虚拟滚动 @default true */\n virtualHeader?: boolean\n\n /**\n * 缺失宽度设置时的默认值(与虚拟化无关)\n * @default 100\n */\n defaultColumnWidth?: number\n\n pipeline?: TablePipeline<T>\n\n getOffsetTop?: () => number\n}\n\nfunction VirtualTableCore<T>(\n props: VirtualTableCoreProps<T>,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const {\n bodyRootRef,\n className,\n style,\n tableBodyClassName,\n tableBodyStyle,\n columns: rawColumns,\n dataSource: rawData,\n rowKey: rawRowKey = 'key',\n estimatedRowHeight = 46,\n estimatedColumnWidth,\n overscanRows = 5,\n overscanColumns = 3,\n stickyHeader,\n defaultColumnWidth = 100,\n pipeline = (TablePipeline.defaultPipeline as TablePipeline<T>),\n rowClassName: rawRowClassName,\n onRow,\n getOffsetTop: getOffsetTopImpl,\n virtualHeader = true,\n } = props\n\n const rootNode = useRef<HTMLDivElement>(null)\n\n const headerWrapperRef = useRef<HTMLDivElement>(null)\n const bodyWrapperRef = useRef<HTMLDivElement>(null)\n const bodyRoot = useRef<HTMLTableElement>(null)\n const mergedBodyRootRef = useMergedRef(bodyRoot, bodyRootRef)\n const bodyRef = useRef<HTMLTableSectionElement>(null)\n\n const getScroller = useCallback(() => {\n const root = rootNode.current\n if (root == null) return\n return getScrollParent(root)\n }, [])\n\n const getOffsetTop = useCallback(() => {\n if (typeof getOffsetTopImpl === 'function') {\n return getOffsetTopImpl()\n }\n const scrollContainer = getScroller()\n if (scrollContainer === rootNode.current) {\n return 0\n }\n if (isWindow(scrollContainer) || isRoot(scrollContainer)) {\n const top = rootNode.current?.getBoundingClientRect().top ?? 0\n return window.scrollY + top\n }\n return rootNode.current?.offsetTop ?? 0\n }, [getOffsetTopImpl, getScroller])\n\n const {\n dataSource,\n columns: pipelineColumns,\n rowKey,\n rowClassName,\n\n render,\n renderRoot,\n renderContent,\n renderHeaderWrapper,\n renderHeaderRoot,\n renderHeader,\n renderHeaderRow,\n renderHeaderCell,\n renderBodyWrapper,\n renderBodyRoot,\n renderBody,\n renderBodyContent,\n renderRow,\n renderCell,\n\n onRow: onPipelineRow,\n } = pipeline.use({\n dataSource: rawData,\n rowKey: rawRowKey,\n columns: rawColumns,\n estimatedRowHeight,\n headerWrapperRef,\n bodyWrapperRef,\n bodyRootRef: bodyRoot,\n bodyRef,\n rootRef: rootNode,\n getOffsetTop,\n getScroller,\n })\n\n const [columnWidths, setColumnWidths] = useState(() => new Map<Key, number>())\n const columnWidthsRef = useRef(columnWidths)\n const updateColumnWidths = useCallback((value: Map<Key, number>) => {\n columnWidthsRef.current = value\n setColumnWidths(value)\n }, [])\n\n const tableColumnsContext = useMemo<TableColumnsContextType>(() => {\n return {\n widthList: columnWidths,\n setWidthList: updateColumnWidths,\n }\n }, [columnWidths, updateColumnWidths])\n\n const { columns } = useColumnVirtualize<T>({\n estimateSize: estimatedColumnWidth ?? defaultColumnWidth,\n defaultColumnWidth,\n overscan: overscanColumns,\n columns: pipelineColumns,\n bodyWrapper: bodyWrapperRef,\n columnWidths,\n disabled: estimatedColumnWidth == null,\n })\n\n const onRowClassName = useCallback((record: T, index: number) => {\n return clsx(rawRowClassName?.(record, index), rowClassName?.(record, index))\n }, [rawRowClassName, rowClassName])\n\n const onRowProps: OnRowType<T> = useCallback((record, index) => {\n return { ...onRow?.(record, index), ...onPipelineRow?.(record, index) }\n }, [onPipelineRow, onRow])\n\n const hasFixedLeftColumn = pipelineColumns.some((x) => isValidFixedLeft(x.fixed))\n const hasFixedRightColumn = pipelineColumns.some((x) => isValidFixedRight(x.fixed))\n\n const fullHeaderColumns = useMemo(() => {\n return {\n columns: pipelineColumns,\n descriptor: pipelineColumns.map((column): ColumnDescriptor => {\n const key = getKey(column)\n return {\n key,\n type: 'normal',\n column,\n }\n }),\n }\n }, [pipelineColumns])\n\n const headerColumns = useMemo(() => {\n if (virtualHeader) {\n return columns\n }\n return fullHeaderColumns\n }, [virtualHeader, fullHeaderColumns, columns])\n\n const contentNode = pipelineRender(\n <>\n <TableHeader\n wrapperRef={headerWrapperRef}\n columns={headerColumns}\n stickyHeader={stickyHeader}\n renderHeaderWrapper={renderHeaderWrapper}\n renderHeaderRoot={renderHeaderRoot}\n renderHeader={renderHeader}\n renderHeaderRow={renderHeaderRow}\n renderHeaderCell={renderHeaderCell}\n />\n <TableBody\n bodyWrapperRef={bodyWrapperRef}\n bodyRootRef={mergedBodyRootRef}\n bodyRef={bodyRef}\n className={tableBodyClassName}\n style={tableBodyStyle}\n columns={columns}\n rowKey={rowKey}\n dataSource={dataSource}\n overscan={overscanRows}\n estimateSize={estimatedRowHeight}\n getScroller={getScroller}\n getOffsetTop={getOffsetTop}\n rowClassName={onRowClassName}\n onRow={onRowProps}\n renderBodyWrapper={renderBodyWrapper}\n renderBodyRoot={renderBodyRoot}\n renderBody={renderBody}\n renderBodyContent={renderBodyContent}\n renderRow={renderRow}\n renderCell={renderCell}\n />\n </>,\n renderContent,\n { columns: columns.columns, columnDescriptor: columns.descriptor },\n )\n\n const rootMergedRef = useMergedRef(rootNode, ref)\n const table = pipelineRender(\n <TableRoot\n ref={rootMergedRef}\n className={className}\n style={style}\n hasFixedLeftColumn={hasFixedLeftColumn}\n hasFixedRightColumn={hasFixedRightColumn}\n renderRoot={renderRoot}\n bodyScrollContainer={bodyWrapperRef}\n >\n {contentNode}\n </TableRoot>,\n render,\n { columns: columns.columns, columnDescriptor: columns.descriptor },\n )\n\n return (\n <ColumnSizes.Provider value={tableColumnsContext}>\n <StickyContext columns={pipelineColumns}>\n <ContainerSizeContext getScroller={getScroller} root={rootNode}>\n <HorizontalScrollContext>{table}</HorizontalScrollContext>\n </ContainerSizeContext>\n </StickyContext>\n </ColumnSizes.Provider>\n )\n}\n\nif (__DEV__) {\n VirtualTableCore.displayName = 'VirtualTable.Core'\n}\n\nexport default memo(forwardRef(VirtualTableCore)) as <T>(\n props: VirtualTableCoreProps<T> & RefAttributes<HTMLDivElement>,\n) => ReactElement\n"],"names":["shallowEqualObjects","objA","objB","aKeys","Object","keys","bKeys","len","length","i","key","prototype","hasOwnProperty","call","shallowEqualArrays","arrA","arrB","isShallowEqual","value","oldValue","is","Array","isArray","hasObject","findIndex","x","every","state","index","Map","from","oldKeys","values","oldValues","useShallowMemo","pickData","nextState","useRef","current","getKey","column","dataIndex","getRowKey","rowData","rowKey","isValidFixedLeft","fixed","isValidFixedRight","isValidFixed","ColumnSizes","createContext","__DEV__","displayName","useColumnSizes","context","useContext","Error","Sticky","StickyContext","props","columns","children","_useColumnSizes","widthList","columnsFixedRecord","useMemo","map","stickySizes","left","leftOffset","reduce","res","item","_widthList$get","get","right","rightOffset","reduceRight","_widthList$get2","result","set","shallowMemoFixedRecord","shallowMemoStickySizes","stickyState","size","_jsx","Provider","useTableSticky","pipelineRender","node","render","options","getTableCellContent","data","_render","Cell","_onCell","className","style","rowIndex","renderCell","restProps","_objectWithoutPropertiesLoose","_excluded","align","onCell","_useTableSticky","_ref","extraClassName","extraStyle","colSpan","rowSpan","extraProps","_excluded2","_extends","clsx","undefined","memo","Colgroup","onColumnSizesMeasure","enableMeasure","columnSizes","prevColumnSizes","ref","type","width","offsetWidth","minWidth","overflowStylePatterns","isElement","Node","ELEMENT_NODE_TYPE","nodeType","getScrollParent","el","root","_el$ownerDocument$def","window","document","body","_window$getComputedSt","getComputedStyle","overflow","overflowY","overflowX","test","parentNode","ownerDocument","defaultView","isWindow","arg","toString","isDocument","isRoot","getScrollElement","scrollingElement","getScrollTop","scrollY","element","scrollTop","useCalcSize","getScroller","_useState","useState","scrollContainerWidth","setScrollContainerWidth","_useState2","scrollContainerHeight","setScrollContainerHeight","_useState3","tableWidth","setTableWidth","_useState4","tableHeight","setTableHeight","scrollerContainerRef","useLayoutEffect","scrollerContainer","scroller","observer","ResizeObserver","entries","_entries$0$contentRec","contentRect","height","observe","disconnect","_entries$0$contentRec2","ContainerSize","ContainerSizeContext","_useCalcSize","useContainerSize","HorizontalScroll","HorizontalScrollContext","listenerMap","skipEvent","Set","listen","listener","scrollLeft","notify","has","rAF","requestAnimationFrame","fn","forEach","itemKey","add","useHorizontalScrollContext","TableRowManager","useTableRowManager","useStableFn","callback","stableFn","useCallback","_len","arguments","args","_key","apply","createMiddleware","hook","cache","useMiddleware","ctx","concat","_cache$current","shakeUnsafeHooks","hooks","filter","priority","TablePipeline","defineProperty","use","bind","_proto","setHooks","renderFunctionMap","renderRoot","renderContent","renderHeaderWrapper","renderHeaderRoot","renderHeader","renderHeaderRow","renderHeaderCell","renderBodyWrapper","renderBodyRoot","renderBody","renderBodyContent","renderRow","rowClassNameFunctions","onRowFunctions","slice","sort","a","b","nextCtx","rowClassName","onRow","rest","target","push","_ref2","renders","record","useTablePipeline","extraPipeline","pipeline","cached","_extraPipeline$hooks","nextHooks","findLastIndex","arr","predicate","Row","_onRow","columnDescriptor","_useTableRowManager","updateRowHeight","descriptor","lastFixedLeftColumnIndex","firstFixedRightColumnIndex","offsetHeight","assignRef","mergeRefs","refs","useMergedRef","_len2","_key2","onResize","innerWidth","innerHeight","addEventListener","removeEventListener","rect","anchorQuery","rects","mid","Math","floor","bottom","useRowVirtualize","getOffsetTop","rawData","dataSource","estimateSize","overscan","startIndex","setStartIndex","endIndex","setEndIndex","dataSlice","rowHeights","fillRowHeights","rowRects","updateRowRectList","shouldSkip","_rowHeights$current$r","nextTop","top","setRowHeight","anchorRef","scrollTopRef","initial","useEffect","container","count","offsetTop","max","calcCount","scrollerContainerHeight","prevCount","ceil","updateBoundary","anchor","onScroll","e","scrollElement","isScrollDown","prevHeight","stopListen","nextStartIndex","nextEndIndex","sum","topBlank","bottomBlank","rowHeightList","TableBody","bodyWrapperRef","bodyRootRef","bodyRef","_useRowVirtualize","_rowHeights$current$g","rowManageState","getRowHeightList","tbodyRef","elm","bodyHeight","heights","row","clear","bodyContent","startRowIndex","bodyNode","setWidthList","tableNode","_jsxs","paddingBottom","paddingTop","_useHorizontalScrollC","wrapperRef","dispose","mergedRef","TableHeader","stickyHeader","lastColumn","headerWrapperRef","_column$onHeaderCell","isLast","onHeaderCell","thClassName","thStyle","Fragment","createElement","scope","title","columnWidths","theadNode","Number","isFinite","findFirstFixedRightIndex","findLastFixedLeftIndex","useColumnVirtualize","defaultColumnWidth","rawColumns","bodyWrapper","_options$disabled","disabled","lastFixedLeftIndex","firstFixedRightIndex","leftKey","rightKey","_columnWidths$get","findAnchorRef","scrollLeftRef","scrollContainer","containerWidth","isScrollRight","prevWidth","stop","fixedLeftWidth","fixedRightWidth","leftBlank","rightBlank","columnSlice","unionKey","rawColumn","TableRoot","hasFixedLeftColumn","hasFixedRightColumn","bodyScrollContainer","rootNode","hasFixedLeft","setHasFixedLeft","hasFixedRight","setHasFixedRight","onCheckHasFixedEdge","clientWidth","scrollWidth","_scrollLeft","forwardRef","VirtualTableCore","tableBodyClassName","tableBodyStyle","_props$rowKey","rawRowKey","_props$estimatedRowHe","estimatedRowHeight","estimatedColumnWidth","_props$overscanRows","overscanRows","_props$overscanColumn","overscanColumns","_props$defaultColumnW","_props$pipeline","defaultPipeline","rawRowClassName","getOffsetTopImpl","_props$virtualHeader","virtualHeader","bodyRoot","mergedBodyRootRef","_rootNode$current$off","_rootNode$current2","_rootNode$current$get","_rootNode$current","getBoundingClientRect","_pipeline$use","rootRef","pipelineColumns","onPipelineRow","setColumnWidths","columnWidthsRef","updateColumnWidths","tableColumnsContext","_useColumnVirtualize","onRowClassName","onRowProps","some","fullHeaderColumns","headerColumns","contentNode","rootMergedRef","table"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAIgB,SAAAA,mBAAmBA,CACjCC,IAAsB,EACtBC,IAAsB,EAAA;EAEtB,IAAID,IAAI,KAAKC,IAAI,EAAE;AACjB,IAAA,OAAO,IAAI;AACb;AAEA,EAAA,IAAI,CAACD,IAAI,IAAI,CAACC,IAAI,EAAE;AAClB,IAAA,OAAO,KAAK;AACd;AAEA,EAAA,IAAMC,KAAK,GAAGC,MAAM,CAACC,IAAI,CAACJ,IAAI,CAAC;AAC/B,EAAA,IAAMK,KAAK,GAAGF,MAAM,CAACC,IAAI,CAACH,IAAI,CAAC;AAC/B,EAAA,IAAMK,GAAG,GAAGJ,KAAK,CAACK,MAAM;AAExB,EAAA,IAAIF,KAAK,CAACE,MAAM,KAAKD,GAAG,EAAE;AACxB,IAAA,OAAO,KAAK;AACd;AAEA,EAAA,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,GAAG,EAAEE,CAAC,IAAI,CAAC,EAAE;AAC/B,IAAA,IAAMC,GAAG,GAAGP,KAAK,CAACM,CAAC,CAAC;IAEpB,IAAIR,IAAI,CAACS,GAAG,CAAC,KAAKR,IAAI,CAACQ,GAAG,CAAC,IAAI,CAACN,MAAM,CAACO,SAAS,CAACC,cAAc,CAACC,IAAI,CAACX,IAAI,EAAEQ,GAAG,CAAC,EAAE;AAC/E,MAAA,OAAO,KAAK;AACd;AACF;AAEA,EAAA,OAAO,IAAI;AACb;AAEgB,SAAAI,kBAAkBA,CAChCC,IAAqB,EACrBC,IAAqB,EAAA;EAErB,IAAID,IAAI,KAAKC,IAAI,EAAE;AACjB,IAAA,OAAO,IAAI;AACb;AAEA,EAAA,IAAI,CAACD,IAAI,IAAI,CAACC,IAAI,EAAE;AAClB,IAAA,OAAO,KAAK;AACd;AAEA,EAAA,IAAMT,GAAG,GAAGQ,IAAI,CAACP,MAAM;AAEvB,EAAA,IAAIQ,IAAI,CAACR,MAAM,KAAKD,GAAG,EAAE;AACvB,IAAA,OAAO,KAAK;AACd;AAEA,EAAA,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,GAAG,EAAEE,CAAC,IAAI,CAAC,EAAE;IAC/B,IAAIM,IAAI,CAACN,CAAC,CAAC,KAAKO,IAAI,CAACP,CAAC,CAAC,EAAE;AACvB,MAAA,OAAO,KAAK;AACd;AACF;AAEA,EAAA,OAAO,IAAI;AACb;AAEgB,SAAAQ,cAAcA,CAACC,KAAc,EAAEC,QAAiB,EAAA;EAC9D,IAAIf,MAAM,CAACgB,EAAE,CAACF,KAAK,EAAEC,QAAQ,CAAC,EAAE;AAC9B,IAAA,OAAO,IAAI;AACb;AACA,EAAA,IAAIE,KAAK,CAACC,OAAO,CAACJ,KAAK,CAAC,IAAIG,KAAK,CAACC,OAAO,CAACH,QAAQ,CAAC,EAAE;AACnD,IAAA,IAAIL,kBAAkB,CAACI,KAAK,EAAEC,QAAQ,CAAC,EAAE;AACvC,MAAA,OAAO,IAAI;AACb;AACA,IAAA,IAAID,KAAK,CAACV,MAAM,KAAKW,QAAQ,CAACX,MAAM,EAAE;AACpC,MAAA,IAAMe,SAAS,GAAGL,KAAK,CAACM,SAAS,CAAC,UAACC,CAAC,EAAA;AAAA,QAAA,OAAK,OAAOA,CAAC,KAAK,QAAQ,IAAIA,CAAC,IAAI,IAAI;OAAC,CAAA,GAAG,EAAE;AACjF,MAAA,IAAIF,SAAS,EAAE;QACb,OAAOL,KAAK,CAACQ,KAAK,CAAC,UAACC,KAAK,EAAEC,KAAK,EAAI;AAClC,UAAA,IAAIP,KAAK,CAACC,OAAO,CAACK,KAAK,CAAC,EAAE;YACxB,OAAOb,kBAAkB,CAACa,KAAK,EAAER,QAAQ,CAACS,KAAK,CAAc,CAAC;AAChE;UACA,IAAI,OAAOD,KAAK,KAAK,QAAQ,IAAIA,KAAK,IAAI,IAAI,EAAE;YAC9C,OAAO3B,mBAAmB,CACxB2B,KAAgC,EAChCR,QAAQ,CAACS,KAAK,CAA4B,CAC3C;AACH;UACA,OAAOxB,MAAM,CAACgB,EAAE,CAACO,KAAK,EAAER,QAAQ,CAACS,KAAK,CAAC,CAAC;AAC1C,SAAC,CAAC;AACJ;AACF;AACA,IAAA,OAAO,KAAK;AACd;AACA,EAAA,IAAIV,KAAK,YAAYW,GAAG,IAAIV,QAAQ,YAAYU,GAAG,EAAE;IACnD,IAAMxB,IAAI,GAAGgB,KAAK,CAACS,IAAI,CAACZ,KAAK,CAACb,IAAI,EAAE,CAAC;IACrC,IAAM0B,OAAO,GAAGV,KAAK,CAACS,IAAI,CAACX,QAAQ,CAACd,IAAI,EAAE,CAAC;AAC3C,IAAA,IAAIY,cAAc,CAACZ,IAAI,EAAE0B,OAAO,CAAC,EAAE;MACjC,IAAMC,MAAM,GAAGX,KAAK,CAACS,IAAI,CAACZ,KAAK,CAACc,MAAM,EAAE,CAAC;MACzC,IAAMC,SAAS,GAAGZ,KAAK,CAACS,IAAI,CAACX,QAAQ,CAACa,MAAM,EAAE,CAAC;AAC/C,MAAA,IAAIf,cAAc,CAACe,MAAM,EAAEC,SAAS,CAAC,EAAE;AACrC,QAAA,OAAO,IAAI;AACb;AACF;AACA,IAAA,OAAO,KAAK;AACd;EACA,IAAI,OAAOf,KAAK,KAAK,QAAQ,IAAIA,KAAK,IAAI,IAAI,EAAE;AAC9C,IAAA,OAAOlB,mBAAmB,CAACkB,KAAK,EAAEC,QAAmC,CAAC;AACxE;AACA,EAAA,OAAO,KAAK;AACd;;ACzGA;AAKA;;AAEG;AACG,SAAUe,cAAcA,CAAIC,QAAiB,EAAA;AACjD,EAAA,IAAMC,SAAS,GAAGD,QAAQ,EAAE;AAC5B,EAAA,IAAMjB,KAAK,GAAGmB,MAAM,CAAID,SAAS,CAAC;EAElC,IAAI,CAACnB,cAAc,CAACmB,SAAS,EAAElB,KAAK,CAACoB,OAAO,CAAC,EAAE;IAC7CpB,KAAK,CAACoB,OAAO,GAAGF,SAAS;AAC3B;EAEA,OAAOlB,KAAK,CAACoB,OAAO;AACtB;;ACbM,SAAUC,MAAMA,CAAIC,MAAqB,EAAA;EAC7C,OAAO,KAAK,IAAIA,MAAM,GAAIA,MAAM,CAAC9B,GAAW,GAAG8B,MAAM,CAACC,SAAmB;AAC3E;AAEgB,SAAAC,SAASA,CAAIC,OAAU,EAAEC,MAAmC,EAAA;AAC1E,EAAA,IAAI,OAAOA,MAAM,KAAK,UAAU,EAAE;IAChC,OAAOA,MAAM,CAACD,OAAO,CAAC;AACxB;EACA,OAAQA,OAAqB,CAACC,MAAgB,CAAQ;AACxD;;ACXM,SAAUC,gBAAgBA,CAACC,KAAc,EAAA;EAC7C,OAAOA,KAAK,KAAK,MAAM;AACzB;AAEM,SAAUC,iBAAiBA,CAACD,KAAc,EAAA;EAC9C,OAAOA,KAAK,KAAK,OAAO;AAC1B;AAEM,SAAUE,YAAYA,CAACF,KAAc,EAAA;EACzC,OAAOD,gBAAgB,CAACC,KAAK,CAAC,IAAIC,iBAAiB,CAACD,KAAK,CAAC;AAC5D;;ACJO,IAAMG,WAAW,gBAAGC,aAAa,CAAiC,IAAI,CAAC;AAE9E,IAAIC,OAAAA,CAAAA,GAAAA,CAAAA,QAAAA,KAAAA,aAAO,EAAE;EACXF,WAAW,CAACG,WAAW,GAAG,0BAA0B;AACtD;SAEgBC,cAAcA,GAAA;AAC5B,EAAA,IAAMC,OAAO,GAAGC,UAAU,CAACN,WAAW,CAAC;EACvC,IAAIK,OAAO,IAAI,IAAI,EAAE;AACnB,IAAA,MAAM,IAAIE,KAAK,CAAC,mCAAmC,CAAC;AACtD;AACA,EAAA,OAAOF,OAAO;AAChB;;ACNO,IAAMG,MAAM,gBAAGP,aAAa,CAA4B,IAAI,CAAC;AAEpE,IAAIC,OAAAA,CAAAA,GAAAA,CAAAA,QAAAA,KAAAA,aAAO,EAAE;EACXM,MAAM,CAACL,WAAW,GAAG,qBAAqB;AAC5C;AAEM,SAAUM,aAAaA,CAC3BC,KAGE,EAAA;AAEF,EAAA,IAAQC,OAAO,GAAeD,KAAK,CAA3BC,OAAO;IAAEC,QAAQ,GAAKF,KAAK,CAAlBE,QAAQ;AACzB,EAAA,IAAAC,eAAA,GAAsBT,cAAc,EAAE;IAA9BU,SAAS,GAAAD,eAAA,CAATC,SAAS;AAEjB,EAAA,IAAMC,kBAAkB,GAAGC,OAAO,CAAC,YAAK;AACtC,IAAA,OAAOL,OAAO,CAACM,GAAG,CAAC,UAAC1B,MAAM,EAAI;AAC5B,MAAA,IAAM9B,GAAG,GAAG6B,MAAM,CAACC,MAAM,CAAC;MAC1B,OAAO;AAAE9B,QAAAA,GAAG,EAAHA,GAAG;QAAEoC,KAAK,EAAEN,MAAM,CAACM;OAAO;AACrC,KAAC,CAAC;AACJ,GAAC,EAAE,CAACc,OAAO,CAAC,CAAC;AAEb,EAAA,IAAMO,WAAW,GAAGF,OAAO,CAAC,YAAK;IAC/B,IAAIG,IAAI,GAAG,CAAC;AACZ,IAAA,IAAMC,UAAU,GAAGL,kBAAkB,CAACM,MAAM,CAAW,UAACC,GAAG,EAAEC,IAAI,EAAE5C,KAAK,EAAI;AAC1E,MAAA,IAAQkB,KAAK,GAAU0B,IAAI,CAAnB1B,KAAK;QAAEpC,GAAG,GAAK8D,IAAI,CAAZ9D,GAAG;AAClB,MAAA,IAAImC,gBAAgB,CAACC,KAAK,CAAC,EAAE;AAAA,QAAA,IAAA2B,cAAA;AAC3BF,QAAAA,GAAG,CAAC3C,KAAK,CAAC,GAAGwC,IAAI;AACjB;AACAA,QAAAA,IAAI,IAAAK,CAAAA,cAAA,GAAIV,SAAS,CAACW,GAAG,CAAChE,GAAG,CAAC,KAAA,IAAA,GAAA+D,cAAA,GAAI,CAAC;AACjC;AACA,MAAA,OAAOF,GAAG;KACX,EAAE,EAAE,CAAC;IAEN,IAAII,KAAK,GAAG,CAAC;AACb,IAAA,IAAMC,WAAW,GAAGZ,kBAAkB,CAACa,WAAW,CAAC,UAACN,GAAG,EAAEC,IAAI,EAAE5C,KAAK,EAAI;AACtE,MAAA,IAAQkB,KAAK,GAAU0B,IAAI,CAAnB1B,KAAK;QAAEpC,GAAG,GAAK8D,IAAI,CAAZ9D,GAAG;AAClB,MAAA,IAAIqC,iBAAiB,CAACD,KAAK,CAAC,EAAE;AAAA,QAAA,IAAAgC,eAAA;AAC5BP,QAAAA,GAAG,CAAC3C,KAAK,CAAC,GAAG+C,KAAK;AAClBA,QAAAA,KAAK,IAAAG,CAAAA,eAAA,GAAIf,SAAS,CAACW,GAAG,CAAChE,GAAG,CAAC,KAAA,IAAA,GAAAoE,eAAA,GAAI,CAAC;AAClC;AACA,MAAA,OAAOP,GAAG;KACX,EAAE,EAAc,CAAC;IAElB,OAAOP,kBAAkB,CAACM,MAAM,CAAC,UAACS,MAAM,EAAEP,IAAI,EAAE5C,KAAK,EAAI;AACvD,MAAA,IAAQlB,GAAG,GAAY8D,IAAI,CAAnB9D,GAAG;QAAEoC,KAAK,GAAK0B,IAAI,CAAd1B,KAAK;AAClB,MAAA,IAAID,gBAAgB,CAACC,KAAK,CAAC,EAAE;QAC3BiC,MAAM,CAACC,GAAG,CAACtE,GAAG,EAAE2D,UAAU,CAACzC,KAAK,CAAC,CAAC;AAClC,QAAA,OAAOmD,MAAM;AACf;AACA,MAAA,IAAIhC,iBAAiB,CAACD,KAAK,CAAC,EAAE;QAC5BiC,MAAM,CAACC,GAAG,CAACtE,GAAG,EAAEkE,WAAW,CAAChD,KAAK,CAAC,CAAC;AACnC,QAAA,OAAOmD,MAAM;AACf;AACA,MAAA,OAAOA,MAAM;AACf,KAAC,EAAE,IAAIlD,GAAG,EAAe,CAAC;AAC5B,GAAC,EAAE,CAACmC,kBAAkB,EAAED,SAAS,CAAC,CAAC;EAEnC,IAAMkB,sBAAsB,GAAG/C,cAAc,CAAC,YAAA;AAAA,IAAA,OAAM8B,kBAAkB;GAAC,CAAA;EACvE,IAAMkB,sBAAsB,GAAGhD,cAAc,CAAC,YAAA;AAAA,IAAA,OAAMiC,WAAW;GAAC,CAAA;AAEhE,EAAA,IAAMgB,WAAW,GAAGlB,OAAO,CAAC,YAAyB;IACnD,OAAO;AAAEmB,MAAAA,IAAI,EAAEF,sBAAsB;AAAEpC,MAAAA,KAAK,EAAEmC;KAAwB;AACxE,GAAC,EAAE,CAACA,sBAAsB,EAAEC,sBAAsB,CAAC,CAAC;AAEpD,EAAA,OACEG,GAAA,CAAC5B,MAAM,CAAC6B,QAAQ,EAAA;AAACpE,IAAAA,KAAK,EAAEiE,WAAW;AAAAtB,IAAAA,QAAA,EAChCA;AAAQ,GAAA,CACO;AAEtB;SAEgB0B,cAAcA,GAAA;AAC5B,EAAA,IAAMjC,OAAO,GAAGC,UAAU,CAACE,MAAM,CAAC;EAClC,IAAIH,OAAO,IAAI,IAAI,EAAE;AACnB,IAAA,MAAM,IAAIE,KAAK,CAAC,mCAAmC,CAAC;AACtD;AACA,EAAA,OAAOF,OAAO;AAChB;;SCvFgBkC,cAAcA,CAC5BC,IAAe,EACfC,MAAqB,EACrBC,OAAyB,EAAA;AAEzB,EAAA,IAAI,OAAOD,MAAM,KAAK,UAAU,EAAE;AAChC;AACA,IAAA,OAAOA,MAAM,CAACD,IAAI,EAAEE,OAAO,CAAC;AAC9B;AACA,EAAA,OAAOF,IAAI;AACb;;;;ACQA,SAASG,mBAAmBA,CAC1BhE,KAAa,EACbiE,IAAO,EACPrD,MAAuB,EAAA;AAAA,EAAA,IAAAsD,OAAA;AAEvB,EAAA,IAAQJ,MAAM,GAAKlD,MAAM,CAAjBkD,MAAM;EACd,IAAM/C,OAAO,GAAGkD,IAAiB;EACjC,IAAI,WAAW,IAAIrD,MAAM,EAAE;AACzB,IAAA,IAAMC,SAAS,GAAGD,MAAM,CAACC,SAAmB;AAC5C,IAAA,IAAI,OAAOiD,MAAM,KAAK,UAAU,EAAE;MAChC,OAAO/C,OAAO,CAACF,SAAS,CAAC;AAC3B;IACA,OAAOiD,MAAM,CAAC/C,OAAO,CAACF,SAAS,CAAC,EAAEoD,IAAI,EAAEjE,KAAK,CAAC;AAChD;AACA,EAAA,OAAA,CAAAkE,OAAA,GAAOJ,MAAM,IAAA,IAAA,GAAA,SAAA,GAANA,MAAM,CAAGG,IAAI,EAAEA,IAAI,EAAEjE,KAAK,CAAC,KAAAkE,IAAAA,GAAAA,OAAA,GAAI,IAAI;AAC5C;AAEA,SAASC,IAAIA,CAAIpC,KAAmB,EAAA;AAAA,EAAA,IAAAqC,OAAA;AAClC,EAAA,IACEC,SAAS,GAOPtC,KAAK,CAPPsC,SAAS;IACTC,KAAK,GAMHvC,KAAK,CANPuC,KAAK;IACL1D,MAAM,GAKJmB,KAAK,CALPnB,MAAM;IACNG,OAAO,GAILgB,KAAK,CAJPhB,OAAO;IACPwD,QAAQ,GAGNxC,KAAK,CAHPwC,QAAQ;IACRC,UAAU,GAERzC,KAAK,CAFPyC,UAAU;AACPC,IAAAA,SAAS,GAAAC,6BAAA,CACV3C,KAAK,EAAA4C,WAAA,CAAA;AAET,EAAA,IAAQC,KAAK,GAAoBhE,MAAM,CAA/BgE,KAAK;IAAE1D,KAAK,GAAaN,MAAM,CAAxBM,KAAK;IAAE2D,MAAM,GAAKjE,MAAM,CAAjBiE,MAAM;AAC5B,EAAA,IAAM/F,GAAG,GAAG6B,MAAM,CAACC,MAAM,CAAC;AAC1B,EAAA,IAAAkE,eAAA,GAA8BnB,cAAc,EAAE;IAAhCpB,WAAW,GAAAuC,eAAA,CAAjBtB,IAAI;AAEZ,EAAA,IAAAuB,IAAA,GAAAX,CAAAA,OAAA,GAMIS,MAAM,uBAANA,MAAM,CAAG9D,OAAO,EAAEwD,QAAQ,CAAC,KAAA,IAAA,GAAAH,OAAA,GAAI,EAAE;IALxBY,cAAc,GAAAD,IAAA,CAAzBV,SAAS;IACFY,UAAU,GAAAF,IAAA,CAAjBT,KAAK;IACLY,OAAO,GAAAH,IAAA,CAAPG,OAAO;IACPC,OAAO,GAAAJ,IAAA,CAAPI,OAAO;AACJC,IAAAA,UAAU,GAAAV,6BAAA,CAAAK,IAAA,EAAAM,YAAA,CAAA;AAGf,EAAA,IAAIH,OAAO,KAAK,CAAC,IAAIC,OAAO,KAAK,CAAC,EAAE;AAClC,IAAA,OAAO,IAAI;AACb;EAEA,OAAOvB,cAAc,CACnBH,GACM,CAAA,IAAA,EAAA6B,QAAA,CAAA,EAAA,EAAAb,SAAS,EACTW,UAAU,EAAA;AACdF,IAAAA,OAAO,EAAEA,OAAO;AAChBC,IAAAA,OAAO,EAAEA,OAAO;IAChBd,SAAS,EAAEkB,IAAI,CACb,oBAAoB,EACpBX,KAAK,IAAI,IAAI,IAA2BA,sBAAAA,GAAAA,KAAO,EAC/CxD,YAAY,CAACF,KAAK,CAAC,IAAI,2BAA2B,EAClDmD,SAAS,EACTzD,MAAM,CAACyD,SAAS,EAChBW,cAAc,CACf;AACDV,IAAAA,KAAK,EAAAgB,QAAA,CACAhB,EAAAA,EAAAA,KAAK,EACLW,UAAU,EAAA;AACbzC,MAAAA,IAAI,EAAEvB,gBAAgB,CAACC,KAAK,CAAC,GAAGqB,WAAW,CAACO,GAAG,CAAChE,GAAG,CAAC,GAAG0G,SAAS;AAChEzC,MAAAA,KAAK,EAAE5B,iBAAiB,CAACD,KAAK,CAAC,GAAGqB,WAAW,CAACO,GAAG,CAAChE,GAAG,CAAC,GAAG0G;KAC1D,CAAA;AAAAvD,IAAAA,QAAA,EAEA+B,mBAAmB,CAACO,QAAQ,EAAExD,OAAoB,EAAEH,MAAM;GACxD,CAAA,CAAA,EACL4D,UAAU,EACV;AAAE5D,IAAAA,MAAM,EAANA;AAAM,GAAE,CACX;AACH;AAEA,aAAe6E,aAAAA,IAAI,CAACtB,IAAI,CAA6C;;ACrFrE,IAAMuB,QAAQ,GAAsB,SAA9BA,QAAQA,CAAuB3D,KAAK,EAAI;AAC5C,EAAA,IAAQC,OAAO,GAA2BD,KAAK,CAAvCC,OAAO;IAAE2D,oBAAoB,GAAK5D,KAAK,CAA9B4D,oBAAoB;AAErC,EAAA,IAAMC,aAAa,GAAGD,oBAAoB,IAAI,IAAI;AAClD,EAAA,IAAME,WAAW,GAAG,IAAI5F,GAAG,EAAe;EAC1C,IAAM6F,eAAe,GAAGrF,MAAM,CAAC,IAAIR,GAAG,EAAe,CAAC;EAEtD,OACEwD,GAAA,CAAA,UAAA,EAAA;AACEsC,IAAAA,GAAG,EAAE,SAALA,GAAGA,GAAO;MACR,IAAI,CAACH,aAAa,EAAE;MACpB,IAAI,CAACvG,cAAc,CAACwG,WAAW,EAAEC,eAAe,CAACpF,OAAO,CAAC,EAAE;QACzDiF,oBAAoB,CAACE,WAAW,CAAC;QACjCC,eAAe,CAACpF,OAAO,GAAGmF,WAAW;AACvC;KACD;AAAA5D,IAAAA,QAAA,EAEAD,OAAO,CAACM,GAAG,CAAC,UAACM,IAAI,EAAI;AACpB,MAAA,IAAQ9D,GAAG,GAAK8D,IAAI,CAAZ9D,GAAG;AACX,MAAA,IAAI8D,IAAI,CAACoD,IAAI,KAAK,OAAO,EAAE;QACzB,OAAOvC;AAAeY,UAAAA,SAAS,EAAC,OAAO;AAACC,UAAAA,KAAK,EAAE;YAAE2B,KAAK,EAAErD,IAAI,CAACqD;;SAA5C,EAAAnH,GAAG,CAAoD;AAC1E;AAEA,MAAA,IAAQ8B,MAAM,GAAKgC,IAAI,CAAfhC,MAAM;MAEd,OACE6C,GAEE,CAAA,KAAA,EAAA;AAAAsC,QAAAA,GAAG,EAAE,SAALA,GAAGA,CAAGlC,IAAI,EAAI;AACZ,UAAA,IAAIA,IAAI,IAAI,IAAI,IAAI,CAAC+B,aAAa,EAAE;UACpCC,WAAW,CAACzC,GAAG,CAACtE,GAAG,EAAE+E,IAAI,CAACqC,WAAW,CAAC;SACvC;AACD5B,QAAAA,KAAK,EAAE;UACL2B,KAAK,EAAErF,MAAM,CAACqF,KAAK;UACnBE,QAAQ,EAAEvF,MAAM,CAACuF;;OAPd,EAAArH,GAAG,CASR;KAEL;AACQ,GAAA,CAAA;AAEf,CAAC;AAED,iBAAe2G,aAAAA,IAAI,CAACC,QAAQ,CAAC;;ACnD7B,IAAMU,qBAAqB,GAAG,4BAA4B;AAE1D,SAASC,SAASA,CAACxC,IAAa,EAAA;AAC9B,EAAA,IAAI,EAAEA,IAAI,YAAYyC,IAAI,CAAC,EAAE;AAC3B,IAAA,OAAO,KAAK;AACd;EACA,IAAMC,iBAAiB,GAAG,CAAC;AAC3B,EAAA,OAAO1C,IAAI,CAAC2C,QAAQ,KAAKD,iBAAiB;AAC5C;SAEgBE,eAAeA,CAC7BC,EAAW,EACXC,MAA+C;AAAA,EAAA,IAAAC,qBAAA;AAAA,EAAA,IAA/CD;AAAAA,IAAAA,OAAyCE,MAAM;AAAA;EAE/C,IAAIhD,IAAI,GAAG6C,EAAE;EAEb,OAAO7C,IAAI,KAAK8C,IAAI,IAAIN,SAAS,CAACxC,IAAI,CAAC,EAAE;AACvC,IAAA,IAAIA,IAAI,KAAKiD,QAAQ,CAACC,IAAI,EAAE;AAC1B,MAAA,OAAOJ,IAAmB;AAC5B;AACA,IAAA,IAAAK,qBAAA,GAA2CH,MAAM,CAACI,gBAAgB,CAACpD,IAAI,CAAC;MAAhEqD,QAAQ,GAAAF,qBAAA,CAARE,QAAQ;MAAEC,SAAS,GAAAH,qBAAA,CAATG,SAAS;MAAEC,SAAS,GAAAJ,qBAAA,CAATI,SAAS;IACtC,IAAIhB,qBAAqB,CAACiB,IAAI,CAACH,QAAQ,GAAGC,SAAS,GAAGC,SAAS,CAAC,EAAE;AAChE,MAAA,OAAOvD,IAAmB;AAC5B;IACAA,IAAI,GAAGA,IAAI,CAACyD,UAAqB;AACnC;EACA,OAAAV,CAAAA,qBAAA,GAAOF,EAAE,CAACa,aAAa,CAACC,WAAW,KAAA,IAAA,GAAAZ,qBAAA,GAAIC,MAAM;AAC/C;AAEM,SAAUY,QAAQA,CAACC,GAAY,EAAA;EACnC,OAAOlJ,MAAM,CAACO,SAAS,CAAC4I,QAAQ,CAAC1I,IAAI,CAACyI,GAAG,CAAC,KAAK,iBAAiB;AAClE;AAEM,SAAUE,UAAUA,CAACF,GAAY,EAAA;EACrC,OAAOlJ,MAAM,CAACO,SAAS,CAAC4I,QAAQ,CAAC1I,IAAI,CAACyI,GAAG,CAAC,KAAK,uBAAuB;AACxE;AAEM,SAAUG,MAAMA,CAACH,GAAY,EAAA;EACjC,OAAOlJ,MAAM,CAACO,SAAS,CAAC4I,QAAQ,CAAC1I,IAAI,CAACyI,GAAG,CAAC,KAAK,0BAA0B;AAC3E;AAEM,SAAUI,gBAAgBA,CAACpB,EAAW,EAAA;AAC1C,EAAA,IAAIkB,UAAU,CAAClB,EAAE,CAAC,EAAE;IAClB,OAAOA,EAAE,CAACqB,gBAAiB;AAC7B;AACA,EAAA,IAAI1B,SAAS,CAACK,EAAE,CAAC,EAAE;AACjB,IAAA,OAAOA,EAAa;AACtB;EACA,OAAOI,QAAQ,CAACiB,gBAAiB;AACnC;AAEM,SAAUC,YAAYA,CAACnE,IAAmB,EAAA;EAC9C,IAAIV,MAAM,GAAG,CAAC;EACd,IAAIsE,QAAQ,CAAC5D,IAAI,CAAC,IAAIgE,MAAM,CAAChE,IAAI,CAAC,EAAE;IAClCV,MAAM,GAAG0D,MAAM,CAACoB,OAAO;AACzB,GAAC,MAAM;AACL,IAAA,IAAMC,OAAO,GAAGJ,gBAAgB,CAACjE,IAAI,CAAC;IACtCV,MAAM,GAAG+E,OAAO,CAACC,SAAS;AAC5B;AACA,EAAA,OAAOhF,MAAM;AACf;;ACpDM,SAAUiF,WAAWA,CAACrE,OAAwB,EAAA;AAClD,EAAA,IAAQsE,WAAW,GAAWtE,OAAO,CAA7BsE,WAAW;IAAE1B,IAAI,GAAK5C,OAAO,CAAhB4C,IAAI;AAEzB,EAAA,IAAA2B,SAAA,GAAwDC,QAAQ,CAAC,CAAC,CAAC;AAA5DC,IAAAA,oBAAoB,GAAAF,SAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,uBAAuB,GAAAH,SAAA,CAAA,CAAA,CAAA;AACpD,EAAA,IAAAI,UAAA,GAA0DH,QAAQ,CAAC,CAAC,CAAC;AAA9DI,IAAAA,qBAAqB,GAAAD,UAAA,CAAA,CAAA,CAAA;AAAEE,IAAAA,wBAAwB,GAAAF,UAAA,CAAA,CAAA,CAAA;AAEtD,EAAA,IAAAG,UAAA,GAAoCN,QAAQ,CAAC,CAAC,CAAC;AAAxCO,IAAAA,UAAU,GAAAD,UAAA,CAAA,CAAA,CAAA;AAAEE,IAAAA,aAAa,GAAAF,UAAA,CAAA,CAAA,CAAA;AAChC,EAAA,IAAAG,UAAA,GAAsCT,QAAQ,CAAC,CAAC,CAAC;AAA1CU,IAAAA,WAAW,GAAAD,UAAA,CAAA,CAAA,CAAA;AAAEE,IAAAA,cAAc,GAAAF,UAAA,CAAA,CAAA,CAAA;AAElC,EAAA,IAAMG,oBAAoB,GAAG1I,MAAM,CAAqB,IAAI,CAAC;AAE7D2I,EAAAA,eAAe,CAAC,YAAK;AACnB,IAAA,IAAMC,iBAAiB,GAAGhB,WAAW,EAAE;IACvC,IAAIgB,iBAAiB,IAAI,IAAI,EAAE;AAC/B,IAAA,IAAIC,QAAqB;AACzB,IAAA,IAAI7B,QAAQ,CAAC4B,iBAAiB,CAAC,EAAE;MAC/BC,QAAQ,GAAGxC,QAAQ,CAACiB,gBAA+B;AACrD,KAAC,MAAM;AACLuB,MAAAA,QAAQ,GAAGD,iBAAiB;AAC9B;IACAF,oBAAoB,CAACzI,OAAO,GAAG4I,QAAQ;AACvC,IAAA,IAAMC,QAAQ,GAAG,IAAIC,cAAc,CAAC,UAACC,OAAO,EAAI;AAC9C,MAAA,IAAAC,qBAAA,GAA0BD,OAAO,CAAC,CAAC,CAAC,CAACE,WAAW;QAAxC1D,KAAK,GAAAyD,qBAAA,CAALzD,KAAK;QAAE2D,MAAM,GAAAF,qBAAA,CAANE,MAAM;MACrBnB,uBAAuB,CAACxC,KAAK,CAAC;MAC9B2C,wBAAwB,CAACgB,MAAM,CAAC;AAClC,KAAC,CAAC;AACFL,IAAAA,QAAQ,CAACM,OAAO,CAACP,QAAQ,CAAC;AAC1B,IAAA,OAAO,YAAK;MACVC,QAAQ,CAACO,UAAU,EAAE;KACtB;AACH,GAAC,EAAE,CAACzB,WAAW,CAAC,CAAC;AAEjBe,EAAAA,eAAe,CAAC,YAAK;AACnB,IAAA,IAAMvF,IAAI,GAAG8C,IAAI,CAACjG,OAAO;IACzB,IAAImD,IAAI,IAAI,IAAI,EAAE;AAClB,IAAA,IAAM0F,QAAQ,GAAG,IAAIC,cAAc,CAAC,UAACC,OAAO,EAAI;AAC9C,MAAA,IAAAM,sBAAA,GAA0BN,OAAO,CAAC,CAAC,CAAC,CAACE,WAAW;QAAxC1D,KAAK,GAAA8D,sBAAA,CAAL9D,KAAK;QAAE2D,MAAM,GAAAG,sBAAA,CAANH,MAAM;MACrBb,aAAa,CAAC9C,KAAK,CAAC;MACpBiD,cAAc,CAACU,MAAM,CAAC;AACxB,KAAC,CAAC;AACFL,IAAAA,QAAQ,CAACM,OAAO,CAAChG,IAAI,CAAC;AACtB,IAAA,OAAO,YAAK;MACV0F,QAAQ,CAACO,UAAU,EAAE;KACtB;AACH,GAAC,EAAE,CAACnD,IAAI,CAAC,CAAC;EAEV,OAAO;AACL6B,IAAAA,oBAAoB,EAApBA,oBAAoB;AACpBG,IAAAA,qBAAqB,EAArBA,qBAAqB;AACrBG,IAAAA,UAAU,EAAVA,UAAU;AACVG,IAAAA,WAAW,EAAXA;GACD;AACH;;AClDA,IAAMe,aAAa,gBAAG1I,aAAa,CAA4B,IAAI,CAAC;AAE9D,SAAU2I,oBAAoBA,CAAClI,KAAyC,EAAA;AAC5E,EAAA,IAAQsG,WAAW,GAAqBtG,KAAK,CAArCsG,WAAW;IAAE1B,IAAI,GAAe5E,KAAK,CAAxB4E,IAAI;IAAE1E,QAAQ,GAAKF,KAAK,CAAlBE,QAAQ;EAEnC,IAAAiI,YAAA,GAKI9B,WAAW,CAAC;AAAEC,MAAAA,WAAW,EAAXA,WAAW;AAAE1B,MAAAA,IAAI,EAAJA;AAAI,KAAE,CAAC;IAJpCgC,qBAAqB,GAAAuB,YAAA,CAArBvB,qBAAqB;IACrBH,oBAAoB,GAAA0B,YAAA,CAApB1B,oBAAoB;IACpBS,WAAW,GAAAiB,YAAA,CAAXjB,WAAW;IACXH,UAAU,GAAAoB,YAAA,CAAVpB,UAAU;AAGZ,EAAA,IAAM/I,KAAK,GAAGsC,OAAO,CAAC,YAAyB;IAC7C,OAAO;AACLmG,MAAAA,oBAAoB,EAApBA,oBAAoB;AACpBG,MAAAA,qBAAqB,EAArBA,qBAAqB;AACrBG,MAAAA,UAAU,EAAVA,UAAU;AACVG,MAAAA,WAAW,EAAXA;KACD;GACF,EAAE,CAACT,oBAAoB,EAAEG,qBAAqB,EAAEG,UAAU,EAAEG,WAAW,CAAC,CAAC;AAE1E,EAAA,OACExF,GAAA,CAACuG,aAAa,CAACtG,QAAQ,EAAA;AAACpE,IAAAA,KAAK,EAAES,KAAK;AAAAkC,IAAAA,QAAA,EACjCA;AAAQ,GAAA,CACc;AAE7B;SAEgBkI,gBAAgBA,GAAA;AAC9B,EAAA,IAAMzI,OAAO,GAAGC,UAAU,CAACqI,aAAa,CAAC;EACzC,IAAItI,OAAO,IAAI,IAAI,EAAE;AACnB,IAAA,MAAM,IAAIE,KAAK,CAAC,qCAAqC,CAAC;AACxD;AACA,EAAA,OAAOF,OAAO;AAChB;;ACpCA,IAAM0I,gBAAgB,gBAAG9I,aAAa,CAAsC,IAAI,CAAC;AAEjF,IAAIC,OAAAA,CAAAA,GAAAA,CAAAA,QAAAA,KAAAA,aAAO,EAAE;EACX6I,gBAAgB,CAAC5I,WAAW,GAAG,+BAA+B;AAChE;AAEM,SAAU6I,uBAAuBA,CAACtI,KAAwB,EAAA;AAC9D,EAAA,IAAQE,QAAQ,GAAKF,KAAK,CAAlBE,QAAQ;EAEhB,IAAMqI,WAAW,GAAG7J,MAAM,CAAC,IAAIR,GAAG,EAAoB,CAAC;AACvD,EAAA,IAAMyB,OAAO,GAAGW,OAAO,CAAC,YAAmC;AACzD,IAAA,IAAMkI,SAAS,GAAG,IAAIC,GAAG,EAAU;IACnC,OAAO;AACLC,MAAAA,MAAM,WAANA,MAAMA,CAAC3L,GAAG,EAAE4L,QAAQ,EAAA;QAClBJ,WAAW,CAAC5J,OAAO,CAAC0C,GAAG,CAACtE,GAAG,EAAE,UAAC6L,UAAU,EAAE9G,IAAI,EAAI;AAChD6G,UAAAA,QAAQ,CAACC,UAAU,EAAE9G,IAAI,CAAC;AAC5B,SAAC,CAAC;AACF,QAAA,OAAO,YAAK;AACVyG,UAAAA,WAAW,CAAC5J,OAAO,CAAO,QAAA,CAAA,CAAC5B,GAAG,CAAC;SAChC;OACF;AACD8L,MAAAA,MAAM,WAANA,MAAMA,CAAC9L,GAAG,EAAEiF,OAAO,EAAA;AACjB,QAAA,IAAIwG,SAAS,CAACM,GAAG,CAAC/L,GAAG,CAAC,EAAE;UACtByL,SAAS,CAAA,QAAA,CAAO,CAACzL,GAAG,CAAC;AACrB,UAAA;AACF;AACA,QAAA,IAAQ6L,UAAU,GAAW5G,OAAO,CAA5B4G,UAAU;UAAE9G,IAAI,GAAKE,OAAO,CAAhBF,IAAI;AACxB,QAAA,IAAIiH,GAAG,GAAGjE,MAAM,CAACkE,qBAA+D;QAChF,IAAID,GAAG,IAAI,IAAI,EAAE;AACfA,UAAAA,GAAG,GAAG,SAANA,GAAGA,CAAIE,EAAc,EAAI;AACvBA,YAAAA,EAAE,EAAE;WACL;AACH;QACAV,WAAW,CAAC5J,OAAO,CAACuK,OAAO,CAAC,UAACP,QAAQ,EAAEQ,OAAO,EAAI;UAChD,IAAIpM,GAAG,KAAKoM,OAAO,EAAE;AACrBX,UAAAA,SAAS,CAACY,GAAG,CAACD,OAAO,CAAC;AACtBJ,UAAAA,GAAG,CAAC,YAAK;AACPJ,YAAAA,QAAQ,CAACC,UAAU,EAAE,EAAE9G,IAAI,CAAC;AAC9B,WAAC,CAAC;AACJ,SAAC,CAAC;AACJ;KACD;GACF,EAAE,EAAE,CAAC;AAEN,EAAA,OAAOJ,GAAA,CAAC2G,gBAAgB,CAAC1G,QAAQ,EAAA;AAACpE,IAAAA,KAAK,EAAEoC,OAAO;AAAAO,IAAAA,QAAA,EAAGA;AAAQ,GAAA,CAA6B;AAC1F;SAEgBmJ,0BAA0BA,GAAA;AACxC,EAAA,IAAM1J,OAAO,GAAGC,UAAU,CAACyI,gBAAgB,CAAC;EAE5C,IAAI1I,OAAO,IAAI,IAAI,EAAE;AACnB,IAAA,MAAM,IAAIE,KAAK,CAAC,+CAA+C,CAAC;AAClE;AAEA,EAAA,OAAOF,OAAO;AAChB;;ACpDO,IAAM2J,eAAe,gBAAG/J,aAAa,CAAoC,IAAI,CAAC;AAErF,IAAIC,OAAAA,CAAAA,GAAAA,CAAAA,QAAAA,KAAAA,aAAO,EAAE;EACX8J,eAAe,CAAC7J,WAAW,GAAG,yBAAyB;AACzD;SAEgB8J,kBAAkBA,GAAA;AAChC,EAAA,IAAM5J,OAAO,GAAGC,UAAU,CAAC0J,eAAe,CAAC;EAC3C,IAAI3J,OAAO,IAAI,IAAI,EAAE;AACnB,IAAA,MAAM,IAAIE,KAAK,CAAC,uCAAuC,CAAC;AAC1D;AACA,EAAA,OAAOF,OAAO;AAChB;;ACvBA;AACM,SAAU6J,WAAWA,CAAqBC,QAAW,EAAA;AACzD,EAAA,IAAMR,EAAE,GAAGvK,MAAM,CAAW,IAAI,CAAC;AACjC2I,EAAAA,eAAe,CAAC,YAAK;IACnB4B,EAAE,CAACtK,OAAO,GAAG8K,QAAQ;AACvB,GAAC,CAAC;AAEF,EAAA,IAAMC,QAAQ,GAAGC,WAAW,CAAC,YAAuB;AAAA,IAAA,KAAA,IAAAC,IAAA,GAAAC,SAAA,CAAAhN,MAAA,EAAnBiN,IAAe,GAAApM,IAAAA,KAAA,CAAAkM,IAAA,GAAAG,IAAA,GAAA,CAAA,EAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA,EAAA,EAAA;AAAfD,MAAAA,IAAe,CAAAC,IAAA,CAAAF,GAAAA,SAAA,CAAAE,IAAA,CAAA;AAAA;AAC9C,IAAA,OAAOd,EAAE,CAACtK,OAAO,IAAA,IAAA,GAAA,SAAA,GAAVsK,EAAE,CAACtK,OAAO,CAAAqL,KAAA,CAAVf,EAAE,EAAca,IAAI,CAAY;GACxC,EAAE,EAAE,CAAiB;AAEtB,EAAA,OAAOJ,QAAQ;AACjB;;ACVA;;AAEG;AACH,SAASO,gBAAgBA,CACvBC,IAAuE,EAAA;AAEvE,EAAA,IAAMC,KAAK,GAAG;AACZxL,IAAAA,OAAO,EAAE,IAA4B;AACrCqD,IAAAA,OAAO,EAAE;GACV;AAED,EAAA,OAAO,YAAoC;AAAA,IAAA,KAAA,IAAA4H,IAAA,GAAAC,SAAA,CAAAhN,MAAA,EAAhCmF,OAAa,GAAAtE,IAAAA,KAAA,CAAAkM,IAAA,GAAAG,IAAA,GAAA,CAAA,EAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA,EAAA,EAAA;AAAb/H,MAAAA,OAAa,CAAA+H,IAAA,CAAAF,GAAAA,SAAA,CAAAE,IAAA,CAAA;AAAA;AACtB,IAAA,IAAMK,aAAa,GAAkB,SAA/BA,aAAaA,CAAmBC,GAAG,EAAA;MAAA,OAAKH,IAAI,CAAAF,KAAA,CAAA,SAAA,EAAA,CAACK,GAAG,CAAAC,CAAAA,MAAA,CAAKtI,OAAO,CAAC,CAAA;AAAA,KAAA;IAEnE,IAAI1E,cAAc,CAAC0E,OAAO,EAAEmI,KAAK,CAACnI,OAAO,CAAC,EAAE;AAAA,MAAA,IAAAuI,cAAA;MAC1C,OAAAA,CAAAA,cAAA,GAAOJ,KAAK,CAACxL,OAAO,KAAA4L,IAAAA,GAAAA,cAAA,GAAIH,aAAa;AACvC;IAEAD,KAAK,CAACnI,OAAO,GAAGA,OAAO;IACvBmI,KAAK,CAACxL,OAAO,GAAGyL,aAAa;AAE7B,IAAA,OAAOA,aAAa;GACrB;AACH;;;ACfM,SAAUI,gBAAgBA,CAAIC,KAAsB,EAAA;AACxD,EAAA,IAAI/M,KAAK,CAACC,OAAO,CAAC8M,KAAK,CAAC,EAAE;AACxB,IAAA,OAAOA,KAAK,CAACC,MAAM,CAAC,UAAC5M,CAAC,EAAI;AACxB,MAAA,OAAOA,CAAC,IAAI,IAAI,KAAK,OAAOA,CAAC,KAAK,UAAU,IAAI,OAAOA,CAAC,CAACoM,IAAI,KAAK,UAAU,CAAC;AAC/E,KAAC,CAAC,CAAC3J,GAAG,CAAC,UAAC2J,IAAI,EAAa;AACvB,MAAA,IAAI,OAAOA,IAAI,KAAK,UAAU,EAAE;QAC9B,OAAO;AAAES,UAAAA,QAAQ,EAAE,GAAG;AAAET,UAAAA,IAAI,EAAJA;SAAM;AAChC;AACA,MAAA,OAAOA,IAAK;AACd,KAAC,CAAC;AACJ;AACA,EAAA,OAAO,EAAE;AACX;AAEA,IAAaU,aAAa,gBAAA,YAAA;AACxB,EAAA,SAAAA,gBAAA;AAIAnO,IAAAA,MAAA,CAAAoO,cAAA,CAAA,IAAA,EAAA,OAAA,EAAA;;;;aAAmB;AAAE,KAAA,CAAA;IAHnB,IAAI,CAACC,GAAG,GAAG,IAAI,CAACA,GAAG,CAACC,IAAI,CAAC,IAAI,CAAC;AAChC;AAAC,EAAA,IAAAC,MAAA,GAAAJ,aAAA,CAAA5N,SAAA;AAAAgO,EAAAA,MAAA,CAIDC,QAAQ,GAAR,SAAAA,QAAQA,CAAC1N,KAAgB,EAAA;IACvB,IAAI,CAACkN,KAAK,GAAGlN,KAAK;GACnB;AAAAyN,EAAAA,MAAA,CAEDF,GAAG,GAAH,SAAAA,GAAGA,CAAC9I,OAA6B,EAAA;AAC/B,IAAA,IAAI,IAAI,CAACyI,KAAK,CAAC5N,MAAM,KAAK,CAAC,EAAE;AAC3B,MAAA,OAAOmF,OAAO;AAChB;AAEA,IAAA,IAAMrC,OAAO,GAAqC;AAAEhB,MAAAA,OAAO,EAAEqD;KAAS;AAEtE,IAAA,IAAMkJ,iBAAiB,GAAiD;AACtEnJ,MAAAA,MAAM,EAAE,EAAE;AACVoJ,MAAAA,UAAU,EAAE,EAAE;AACdC,MAAAA,aAAa,EAAE,EAAE;AACjBC,MAAAA,mBAAmB,EAAE,EAAE;AACvBC,MAAAA,gBAAgB,EAAE,EAAE;AACpBC,MAAAA,YAAY,EAAE,EAAE;AAChBC,MAAAA,eAAe,EAAE,EAAE;AACnBC,MAAAA,gBAAgB,EAAE,EAAE;AACpBC,MAAAA,iBAAiB,EAAE,EAAE;AACrBC,MAAAA,cAAc,EAAE,EAAE;AAClBC,MAAAA,UAAU,EAAE,EAAE;AACdC,MAAAA,iBAAiB,EAAE,EAAE;AACrBC,MAAAA,SAAS,EAAE,EAAE;AACbrJ,MAAAA,UAAU,EAAE;KACb;IAED,IAAMsJ,qBAAqB,GAA6C,EAAE;IAC1E,IAAMC,cAAc,GAAmB,EAAE;IAEzC,IAAMvB,KAAK,GAAG,IAAI,CAACA,KAAK,CAACwB,KAAK,EAAE;AAChCxB,IAAAA,KAAK,CAACyB,IAAI,CAAC,UAACC,CAAC,EAAEC,CAAC,EAAA;AAAA,MAAA,OAAKD,CAAC,CAACxB,QAAQ,GAAGyB,CAAC,CAACzB,QAAQ;KAAC,CAAA;AAE7CF,IAAAA,KAAK,CAAClK,GAAG,CAAC,UAACzC,CAAC,EAAA;MAAA,OAAKA,CAAC,CAACoM,IAAI;AAAA,KAAA,CAAC,CAAChB,OAAO,CAAC,UAACgB,IAAI,EAAI;AACxC,MAAA,IAAMmC,OAAO,GAAGnC,IAAI,CAACvK,OAAO,CAAChB,OAAO,CAAC;AACrC,MAmBI0N,OAAO,CAlBTtK,MAAM;QAkBJsK,OAAO,CAjBTlB,UAAU;QAiBRkB,OAAO,CAhBTjB,aAAa;QAgBXiB,OAAO,CAfThB,mBAAmB;QAejBgB,OAAO,CAdTf,gBAAgB;QAcde,OAAO,CAbTd,YAAY;QAaVc,OAAO,CAZTb,eAAe;QAYba,OAAO,CAXTZ,gBAAgB;QAWdY,OAAO,CAVTX,iBAAiB;QAUfW,OAAO,CATTV,cAAc;QASZU,OAAO,CARTT,UAAU;QAQRS,OAAO,CAPTR,iBAAiB;QAOfQ,OAAO,CANTP,SAAS;QAMPO,OAAO,CALT5J,UAAU;YAEV6J,YAAY,GAGVD,OAAO,CAHTC,YAAY;QACZC,KAAK,GAEHF,OAAO,CAFTE,KAAK;AACFC,QAAAA,IAAI,GAAA7J,6BAAA,CACL0J,OAAO,EAAAzJ,WAAA;MAEXnG,MAAM,CAACiL,OAAO,CAACwD,iBAAiB,CAAC,CAAChC,OAAO,CAAC,UAAAlG,IAAA,EAAiB;QAAA,IAAfjG,GAAG,GAAAiG,IAAA,CAAA,CAAA,CAAA;AAAEzF,UAAAA,KAAK,GAAAyF,IAAA,CAAA,CAAA,CAAA;AACpD,QAAA,IAAMyJ,MAAM,GAAGJ,OAAO,CAACtP,GAA8B,CAAC;AACtD,QAAA,IAAI,OAAO0P,MAAM,KAAK,UAAU,EAAE;AAChC;AACAlP,UAAAA,KAAK,CAACmP,IAAI,CAACD,MAAM,CAAC;AACpB;AACF,OAAC,CAAC;AAEF,MAAA,IAAI,OAAOH,YAAY,KAAK,UAAU,EAAE;AACtCP,QAAAA,qBAAqB,CAACW,IAAI,CAACJ,YAAY,CAAC;AAC1C;AACA,MAAA,IAAI,OAAOC,KAAK,KAAK,UAAU,EAAE;AAC/BP,QAAAA,cAAc,CAACU,IAAI,CAACH,KAAK,CAAC;AAC5B;MACA5M,OAAO,CAAChB,OAAO,GAAG6N,IAAI;AACxB,KAAC,CAAC;IAEF/P,MAAM,CAACiL,OAAO,CAACwD,iBAAiB,CAAC,CAAChC,OAAO,CAAC,UAAAyD,KAAA,EAAmB;MAAA,IAAjB5P,GAAG,GAAA4P,KAAA,CAAA,CAAA,CAAA;AAAEC,QAAAA,OAAO,GAAAD,KAAA,CAAA,CAAA,CAAA;AACtD,MAAA,IAAIC,OAAO,CAAC/P,MAAM,GAAG,CAAC,EAAE;QACtB8C,OAAO,CAAChB,OAAO,CAAC5B,GAA8B,CAAC,GAAG,UAACmD,QAAQ,EAAE4J,IAAI,EAAI;AACnE;UACA,OAAO8C,OAAO,CAACjM,MAAM,CAAY,UAACmB,IAAI,EAAEC,MAAM,EAAI;AAChD;AACA,YAAA,OAAOA,MAAM,CAACD,IAAI,EAAEgI,IAAI,CAAC;WAC1B,EAAE5J,QAAQ,CAAC;SACb;AACH;AACF,KAAC,CAAC;AAEF,IAAA,IAAI6L,qBAAqB,CAAClP,MAAM,GAAG,CAAC,EAAE;MACpC8C,OAAO,CAAChB,OAAO,CAAC2N,YAAY,GAAG,UAACO,MAAM,EAAE5O,KAAK,EAAI;QAC/C,OAAOuF,IAAI,CAAAwG,KAAA,CAAA,SAAA,EAAI+B,qBAAqB,CAACxL,GAAG,CAAC,UAAC0I,EAAE,EAAA;AAAA,UAAA,OAAKA,EAAE,CAAC4D,MAAM,EAAE5O,KAAK,CAAC;AAAA,SAAA,CAAC,CAAC;OACrE;AACH;AAEA,IAAA,IAAI+N,cAAc,CAACnP,MAAM,GAAG,CAAC,EAAE;MAC7B8C,OAAO,CAAChB,OAAO,CAAC4N,KAAK,GAAG,UAACM,MAAM,EAAE5O,KAAK,EAAI;QACxC,OAAO+N,cAAc,CAACrL,MAAM,CAAC,UAACS,MAAM,EAAEP,IAAI,EAAI;UAC5C,OAAA0C,QAAA,KAAYnC,MAAM,EAAKP,IAAI,CAACgM,MAAM,EAAE5O,KAAK,CAAC,CAAA;SAC3C,EAAE,EAAE,CAAC;OACP;AACH;IAEA,OAAO0B,OAAO,CAAChB,OAAO;GACvB;AAAA,EAAA,OAAAiM,aAAA;AAAA,CAAA,EAAA;AAEMnO,MAAA,CAAAoO,cAAA,CAAAD,aAAA,EAAA,iBAAA,EAAA;;;;EAAkBrN,KAAA,EAAA,IAAIqN,aAAa;EAApB;;ACzHlB,SAAUkC,gBAAgBA,CAAU9K,OAAmC,EAAA;AAC3E,EAAA,IAAQ8I,GAAG,GAA8B9I,OAAO,CAAxC8I,GAAG;IAAYiC,aAAa,GAAK/K,OAAO,CAAnCgL,QAAQ;EAErB,IAAMC,MAAM,GAAG3M,OAAO,CAAC,YAAA;IAAA,OAAO;MAAE3B,OAAO,EAAE,IAAIiM,aAAa;KAAO;GAAC,EAAE,EAAE,CAAC;EAEvE,IAAIE,GAAG,IAAI,IAAI,EAAE;AAAA,IAAA,IAAAoC,oBAAA;IACf,IAAMC,SAAS,GAAG3C,gBAAgB,CAAA,EAAA,CAAAF,MAAA,CAAKQ,GAAG,GAAAoC,oBAAA,GAAMH,aAAa,IAAbA,IAAAA,GAAAA,SAAAA,GAAAA,aAAa,CAAEtC,KAAK,KAAA,IAAA,GAAAyC,oBAAA,GAAI,EAAE,CAAE,CAAC;IAE7E,IAAI,CAAC/P,kBAAkB,CAAC8P,MAAM,CAACtO,OAAO,CAAC8L,KAAK,EAAE0C,SAAS,CAAC,EAAE;AACxD,MAAA,IAAMH,QAAQ,GAAG,IAAIpC,aAAa,EAAK;AACvCoC,MAAAA,QAAQ,CAAC/B,QAAQ,CAACkC,SAAS,CAAC;MAC5BF,MAAM,CAACtO,OAAO,GAAGqO,QAAQ;AACzB,MAAA,OAAOA,QAAQ;AACjB;AACF;EAEA,OAAOC,MAAM,CAACtO,OAAO;AACvB;;AChCgB,SAAAyO,aAAaA,CAC3BC,GAAQ,EACRC,SAA+C,EAAA;EAE/C,IAAIlM,MAAM,GAAG,EAAE;AACf,EAAA,KAAK,IAAItE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGuQ,GAAG,CAACxQ,MAAM,EAAEC,CAAC,IAAI,CAAC,EAAE;IACtC,IAAIwQ,SAAS,CAACD,GAAG,CAACvQ,CAAC,CAAC,EAAEA,CAAC,CAAC,EAAE;AACxBsE,MAAAA,MAAM,GAAGtE,CAAC;AACZ;AACF;AACA,EAAA,OAAOsE,MAAM;AACf;;;;ACcA,SAASmM,GAAGA,CAAIvN,KAAkB,EAAA;AAAA,EAAA,IAAAwN,MAAA;AAChC,EAAA,IACElL,SAAS,GAQPtC,KAAK,CARPsC,SAAS;IACTE,QAAQ,GAONxC,KAAK,CAPPwC,QAAQ;IACRxD,OAAO,GAMLgB,KAAK,CANPhB,OAAO;IACEyO,gBAAgB,GAKvBzN,KAAK,CALPC,OAAO;IACPsM,KAAK,GAIHvM,KAAK,CAJPuM,KAAK;IACLT,SAAS,GAGP9L,KAAK,CAHP8L,SAAS;IACTrJ,UAAU,GAERzC,KAAK,CAFPyC,UAAU;AACP+J,IAAAA,IAAI,GAAA7J,6BAAA,CACL3C,KAAK,EAAA4C,WAAA,CAAA;AAET,EAAA,IAAA8K,mBAAA,GAA4BnE,kBAAkB,EAAE;IAAxCoE,eAAe,GAAAD,mBAAA,CAAfC,eAAe;AAEvB,EAAA,IAAQ1N,OAAO,GAAiBwN,gBAAgB,CAAxCxN,OAAO;IAAE2N,UAAU,GAAKH,gBAAgB,CAA/BG,UAAU;EAE3B,IAAMC,wBAAwB,GAAGT,aAAa,CAACQ,UAAU,EAAE,UAAC9P,CAAC,EAAI;AAC/D,IAAA,IAAIA,CAAC,CAACmG,IAAI,KAAK,OAAO,EAAE;AACtB,MAAA,OAAO,KAAK;AACd;AACA,IAAA,OAAO/E,gBAAgB,CAACpB,CAAC,CAACe,MAAM,CAACM,KAAK,CAAC;AACzC,GAAC,CAAC;EACF,IAAM2O,0BAA0B,GAAGF,UAAU,CAAC/P,SAAS,CAAC,UAACC,CAAC,EAAI;AAC5D,IAAA,IAAIA,CAAC,CAACmG,IAAI,KAAK,OAAO,EAAE;AACtB,MAAA,OAAO,KAAK;AACd;AACA,IAAA,OAAO7E,iBAAiB,CAACtB,CAAC,CAACe,MAAM,CAACM,KAAK,CAAC;AAC1C,GAAC,CAAC;AAEF,EAAA,IAAA6D,IAAA,GAAAwK,CAAAA,MAAA,GAAqDjB,KAAK,uBAALA,KAAK,CAAGvN,OAAO,EAAEwD,QAAQ,CAAC,KAAA,IAAA,GAAAgL,MAAA,GAAI,EAAE;IAAlEvK,cAAc,GAAAD,IAAA,CAAzBV,SAAS;AAAqBe,IAAAA,UAAU,GAAAV,6BAAA,CAAAK,IAAA,EAAAM,UAAA,CAAA;EAEhD,OAAOzB,cAAc,CACnBH,GACM,CAAA,IAAA,EAAA6B,QAAA,CAAA,EAAA,EAAAiJ,IAAI,EACJnJ,UAAU,EAAA;IACdf,SAAS,EAAEkB,IAAI,CAAC,mBAAmB,EAAElB,SAAS,EAAEW,cAAc,CAAC;AAC/De,IAAAA,GAAG,EAAE,SAALA,GAAGA,CAAGlC,IAAI,EAAI;MACZ,IAAIA,IAAI,IAAI,IAAI,EAAE;AAClB;MACA6L,eAAe,CAACnL,QAAQ,EAAEA,QAAQ,EAAEV,IAAI,CAACiM,YAAY,CAAC;KACvD;IAAA7N,QAAA,EAEA0N,UAAU,CAACrN,GAAG,CAAC,UAACM,IAAI,EAAE5C,KAAK,EAAI;AAC9B,MAAA,IAAQlB,GAAG,GAAK8D,IAAI,CAAZ9D,GAAG;AACX,MAAA,IAAI8D,IAAI,CAACoD,IAAI,KAAK,OAAO,EAAE;QACzB,OAAOvC,GAAA,CAAA,IAAA,EAAA,EAAA,EAAS3E,GAAG,CAAI;AACzB;AACA,MAAA,IAAQ8B,MAAM,GAAKgC,IAAI,CAAfhC,MAAM;MACd,OACE6C,GAAC,CAAAU,MAAI,EAEH;AAAAE,QAAAA,SAAS,EAAEkB,IAAI,CACbqK,wBAAwB,KAAK5P,KAAK,IAAI,kCAAkC,EACxE6P,0BAA0B,KAAK7P,KAAK,IACjC,oCAAoC,CACxC;AACDY,QAAAA,MAAM,EAAEA,MAAM;AACd2D,QAAAA,QAAQ,EAAEA,QAAQ;AAClBxD,QAAAA,OAAO,EAAEA,OAAO;AAChByD,QAAAA,UAAU,EAAEA;OATP,EAAA1F,GAAG,CAUR;KAEL;GACE,CAAA,CAAA,EACL+O,SAAS,EACT;AAAE7L,IAAAA,OAAO,EAAPA,OAAO;AAAEuC,IAAAA,QAAQ,EAARA,QAAQ;AAAExD,IAAAA,OAAO,EAAPA,OAAO;AAAEyO,IAAAA,gBAAgB,EAAEG;AAAU,GAAE,CAC7D;AACH;AAEA,YAAelK,aAAAA,IAAI,CAAC6J,GAAG,CAA4C;;ACzFnD,SAAAS,SAASA,CAAIhK,GAAmB,EAAEzG,KAAQ,EAAA;AACxD,EAAA,IAAI,OAAOyG,GAAG,KAAK,UAAU,EAAE;IAC7BA,GAAG,CAACzG,KAAK,CAAC;AACZ,GAAC,MAAM,IAAI,OAAOyG,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,IAAI,IAAI,SAAS,IAAIA,GAAG,EAAE;IACrEA,GAA2B,CAACrF,OAAO,GAAGpB,KAAK;AAC9C;AACF;AAEgB,SAAA0Q,SAASA,GAA6B;AAAA,EAAA,KAAA,IAAArE,IAAA,GAAAC,SAAA,CAAAhN,MAAA,EAAtBqR,IAAsB,GAAAxQ,IAAAA,KAAA,CAAAkM,IAAA,GAAAG,IAAA,GAAA,CAAA,EAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA,EAAA,EAAA;AAAtBmE,IAAAA,IAAsB,CAAAnE,IAAA,CAAAF,GAAAA,SAAA,CAAAE,IAAA,CAAA;AAAA;EACpD,OAAO,UAACjI,IAAc,EAAI;AACxBoM,IAAAA,IAAI,CAAChF,OAAO,CAAC,UAAClF,GAAG,EAAA;AAAA,MAAA,OAAKgK,SAAS,CAAChK,GAAG,EAAElC,IAAI,CAAC;KAAC,CAAA;GAC5C;AACH;AAEgB,SAAAqM,YAAYA,GAA6B;AAAA,EAAA,KAAA,IAAAC,KAAA,GAAAvE,SAAA,CAAAhN,MAAA,EAAtBqR,IAAsB,GAAAxQ,IAAAA,KAAA,CAAA0Q,KAAA,GAAAC,KAAA,GAAA,CAAA,EAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA,EAAA,EAAA;AAAtBH,IAAAA,IAAsB,CAAAG,KAAA,CAAAxE,GAAAA,SAAA,CAAAwE,KAAA,CAAA;AAAA;AACvD;EACA,OAAO1E,WAAW,CAACsE,SAAS,CAAAjE,KAAA,YAAIkE,IAAI,CAAC,EAAEA,IAAI,CAAC;AAC9C;;ACfgB,SAAAI,QAAQA,CAAC7B,MAA4B,EAAEhD,QAAoC,EAAA;AACzF,EAAA,IAAI/D,QAAQ,CAAC+G,MAAM,CAAC,EAAE;AACpB,IAAA,IAAM9D,QAAQ,GAAG,SAAXA,QAAQA,GAAQ;AACpBc,MAAAA,QAAQ,CAAC;QACPvF,KAAK,EAAEY,MAAM,CAACyJ,UAAU;QACxB1G,MAAM,EAAE/C,MAAM,CAAC0J;AAChB,OAAA,CAAC;KACH;AACD7F,IAAAA,QAAQ,EAAE;AACV7D,IAAAA,MAAM,CAAC2J,gBAAgB,CAAC,QAAQ,EAAE9F,QAAQ,CAAC;AAC3C,IAAA,OAAO,YAAK;AACV7D,MAAAA,MAAM,CAAC4J,mBAAmB,CAAC,QAAQ,EAAE/F,QAAQ,CAAC;KAC/C;AACH,GAAC,MAAM;AACL,IAAA,IAAMnB,QAAQ,GAAG,IAAIC,cAAc,CAAC,UAACC,OAAO,EAAI;AAC9C,MAAA,IAAMiH,IAAI,GAAGjH,OAAO,CAAC,CAAC,CAAC,CAACE,WAAW;AACnC6B,MAAAA,QAAQ,CAAC;QAAEvF,KAAK,EAAEyK,IAAI,CAACzK,KAAK;QAAE2D,MAAM,EAAE8G,IAAI,CAAC9G;AAAM,OAAE,CAAC;AACtD,KAAC,CAAC;AACFL,IAAAA,QAAQ,CAACM,OAAO,CAAC2E,MAAM,CAAC;AACxB,IAAA,OAAO,YAAK;MACVjF,QAAQ,CAACO,UAAU,EAAE;KACtB;AACH;AACF;;ACRA,SAAS6G,aAAWA,CAACC,KAAgB,EAAEzI,SAAiB,EAAA;EACtD,IAAI3F,IAAI,GAAG,CAAC;AACZ,EAAA,IAAIO,KAAK,GAAG6N,KAAK,CAAChS,MAAM,GAAG,CAAC;EAC5B,IAAIoB,KAAK,GAAG,EAAE;EAEd,OAAOwC,IAAI,IAAIO,KAAK,EAAE;AACpB,IAAA,IAAM8N,GAAG,GAAGC,IAAI,CAACC,KAAK,CAAC,CAACvO,IAAI,GAAGO,KAAK,IAAI,CAAC,CAAC;IAE1C,IAAI6N,KAAK,CAACC,GAAG,CAAC,CAACG,MAAM,GAAG7I,SAAS,EAAE;AACjCnI,MAAAA,KAAK,GAAG6Q,GAAG;MACX9N,KAAK,GAAG8N,GAAG,GAAG,CAAC;AACjB,KAAC,MAAM;MACLrO,IAAI,GAAGqO,GAAG,GAAG,CAAC;AAChB;AACF;AAEA,EAAA,IAAI7Q,KAAK,KAAK,EAAE,EAAE;AAChB,IAAA,OAAOwF,SAAS;AAClB;EAEA,OAAOoL,KAAK,CAAC5Q,KAAK,CAAC;AACrB;AAEM,SAAUiR,gBAAgBA,CAAUlN,OAAmC,EAAA;AAC3E,EAAA,IACEmN,YAAY,GAKVnN,OAAO,CALTmN,YAAY;IACAC,OAAO,GAIjBpN,OAAO,CAJTqN,UAAU;IACV/I,WAAW,GAGTtE,OAAO,CAHTsE,WAAW;IACXgJ,YAAY,GAEVtN,OAAO,CAFTsN,YAAY;IACZC,QAAQ,GACNvN,OAAO,CADTuN,QAAQ;AAGV,EAAA,IAAAhJ,SAAA,GAAoCC,QAAQ,CAAC,CAAC,CAAC;AAAxCgJ,IAAAA,UAAU,GAAAjJ,SAAA,CAAA,CAAA,CAAA;AAAEkJ,IAAAA,aAAa,GAAAlJ,SAAA,CAAA,CAAA,CAAA;AAChC,EAAA,IAAAI,UAAA,GAAgCH,QAAQ,CAAC,CAAC,CAAC;AAApCkJ,IAAAA,QAAQ,GAAA/I,UAAA,CAAA,CAAA,CAAA;AAAEgJ,IAAAA,WAAW,GAAAhJ,UAAA,CAAA,CAAA,CAAA;AAE5B,EAAA,IAAMiJ,SAAS,GAAGtP,OAAO,CAAC,YAAK;AAC7B,IAAA,OAAO8O,OAAO,CAACnD,KAAK,CAACuD,UAAU,EAAEE,QAAQ,CAAC;GAC3C,EAAE,CAACN,OAAO,EAAEI,UAAU,EAAEE,QAAQ,CAAC,CAAC;AAEnC;AACA,EAAA,IAAMG,UAAU,GAAGnR,MAAM,CAAW,EAAE,CAAC;AACvC,EAAA,IAAMoR,cAAc,GAAG,SAAjBA,cAAcA,GAAQ;AAC1B,IAAA,IAAMlT,GAAG,GAAGwS,OAAO,CAACvS,MAAM;IAC1B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,GAAG,EAAEE,CAAC,EAAE,EAAE;AAC5B,MAAA,IAAM2P,MAAM,GAAGoD,UAAU,CAAClR,OAAO,CAAC7B,CAAC,CAAuB;AAC1D;MACA,IAAI2P,MAAM,IAAI,IAAI,EAAE;AAClBoD,QAAAA,UAAU,CAAClR,OAAO,CAAC7B,CAAC,CAAC,GAAGwS,YAAY;AACtC;AACF;AACAO,IAAAA,UAAU,CAAClR,OAAO,GAAGkR,UAAU,CAAClR,OAAO,CAACsN,KAAK,CAAC,CAAC,EAAErP,GAAG,CAAC;GACtD;AACDkT,EAAAA,cAAc,EAAE;AAEhB;AACA,EAAA,IAAMC,QAAQ,GAAGrR,MAAM,CAAY,EAAE,CAAC;AACtC,EAAA,IAAMsR,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIC,UAAU,EAAY;AAAA,IAAA,IAAtBA,UAAU,KAAA,SAAA,EAAA;AAAVA,MAAAA,UAAU,GAAG,KAAK;AAAA;IAC3C,IAAIA,UAAU,IAAIF,QAAQ,CAACpR,OAAO,CAAC9B,MAAM,GAAG,CAAC,EAAE;AAC7C,MAAA;AACF;AACA,IAAA,IAAAqT,qBAAA,GAAkBL,UAAU,CAAClR,OAAO,CAACgC,MAAM,CAAC,UAACS,MAAM,EAAEyG,MAAM,EAAE5J,KAAK,EAAI;AACpE,QAAA,IAAMkS,OAAO,GAAG/O,MAAM,CAACgP,GAAG,GAAGvI,MAAM;AACnCzG,QAAAA,MAAM,CAACyN,KAAK,CAACnC,IAAI,CAAC;AAChBzO,UAAAA,KAAK,EAALA,KAAK;UACLmS,GAAG,EAAEhP,MAAM,CAACgP,GAAG;AACfvI,UAAAA,MAAM,EAANA,MAAM;AACNoH,UAAAA,MAAM,EAAEkB;AACT,SAAA,CAAC;QACF/O,MAAM,CAACgP,GAAG,GAAGD,OAAO;AACpB,QAAA,OAAO/O,MAAM;AACf,OAAC,EAAE;AAAEgP,QAAAA,GAAG,EAAE,CAAC;AAAEvB,QAAAA,KAAK,EAAE;AAAiB,OAAA,CAAC;MAV9BA,KAAK,GAAAqB,qBAAA,CAALrB,KAAK;IAWbkB,QAAQ,CAACpR,OAAO,GAAGkQ,KAAK;GACzB;EAED,IAAMwB,YAAY,GAAG,SAAfA,YAAYA,CAAIpS,KAAa,EAAE4J,MAAc,EAAI;AACrDgI,IAAAA,UAAU,CAAClR,OAAO,CAACV,KAAK,CAAC,GAAG4J,MAAM;GACnC;AAED;EACA,IAAMyI,SAAS,GAAG5R,MAAM,CAAU;AAChCT,IAAAA,KAAK,EAAE,CAAC;AACR4J,IAAAA,MAAM,EAAEyH,YAAY;AACpBc,IAAAA,GAAG,EAAE,CAAC;AACNnB,IAAAA,MAAM,EAAEK;AACT,GAAA,CAAC;AAEF;AACA,EAAA,IAAMiB,YAAY,GAAG7R,MAAM,CAAC,CAAC,CAAC;AAC9B,EAAA,IAAM8R,OAAO,GAAG9R,MAAM,CAAC,KAAK,CAAC;AAC7B+R,EAAAA,SAAS,CAAC,YAAK;AACb,IAAA,IAAMC,SAAS,GAAGpK,WAAW,EAAE;IAC/B,IAAIoK,SAAS,IAAI,IAAI,EAAE;IAEvB,IAAIC,KAAK,GAAG,CAAC;AAEb,IAAA,IAAM1K,YAAY,GAAG,SAAfA,YAAYA,GAAQ;AACxB,MAAA,IAAM2K,SAAS,GAAGzB,YAAY,EAAE;MAChC,IAAI/N,MAAM,GAAG,CAAC;MACd,IAAIsE,QAAQ,CAACgL,SAAS,CAAC,IAAI5K,MAAM,CAAC4K,SAAS,CAAC,EAAE;QAC5CtP,MAAM,GAAG0D,MAAM,CAACoB,OAAO;AACzB,OAAC,MAAM;AACL,QAAA,IAAMC,OAAO,GAAGJ,gBAAgB,CAAC2K,SAAS,CAAC;QAC3CtP,MAAM,GAAG+E,OAAO,CAACC,SAAS;AAC5B;MACA,OAAO2I,IAAI,CAAC8B,GAAG,CAACzP,MAAM,GAAGwP,SAAS,EAAE,CAAC,CAAC;KACvC;AAED,IAAA,IAAME,SAAS,GAAG,SAAZA,SAASA,CAAIC,uBAA+B,EAAI;MACpD,IAAMC,SAAS,GAAGL,KAAK;MACvBA,KAAK,GAAG5B,IAAI,CAACkC,IAAI,CAACF,uBAAuB,GAAGzB,YAAY,CAAC;MACzD,OAAO;AAAE0B,QAAAA,SAAS,EAATA;OAAW;KACrB;AAED,IAAA,IAAME,cAAc,GAAG,SAAjBA,cAAcA,CAAI9K,SAAiB,EAAI;MAC3C,IAAM+K,MAAM,GAAGvC,aAAW,CAACmB,QAAQ,CAACpR,OAAO,EAAEyH,SAAS,CAAC;MACvD,IAAI+K,MAAM,IAAI,IAAI,EAAE;QAClBb,SAAS,CAAC3R,OAAO,GAAGwS,MAAM;AAC1B1B,QAAAA,aAAa,CAACV,IAAI,CAAC8B,GAAG,CAAC,CAAC,EAAEM,MAAM,CAAClT,KAAK,GAAGsR,QAAQ,CAAC,CAAC;QACnDI,WAAW,CAACwB,MAAM,CAAClT,KAAK,GAAG0S,KAAK,GAAGpB,QAAQ,CAAC;AAC9C;KACD;AAED,IAAA,IAAM6B,QAAQ,GAAG,SAAXA,QAAQA,CAAIC,CAAQ,EAAI;AAC5B,MAAA,IAAMT,SAAS,GAAGzB,YAAY,EAAE;AAChC,MAAA,IAAMmC,aAAa,GAAGvL,gBAAgB,CAACsL,CAAC,CAAC5E,MAAM,CAAC;AAChD,MAAA,IAAMrG,SAAS,GAAG2I,IAAI,CAAC8B,GAAG,CAAC,CAAC,EAAES,aAAa,CAAClL,SAAS,GAAGwK,SAAS,CAAC;AAElE;AACA,MAAA,IAAMW,YAAY,GAAGnL,SAAS,GAAGmK,YAAY,CAAC5R,OAAO;AAErD,MAAA,IAAI4S,YAAY,EAAE;AAChB;AACA,QAAA,IAAInL,SAAS,GAAGkK,SAAS,CAAC3R,OAAO,CAACsQ,MAAM,EAAE;UACxCiC,cAAc,CAAC9K,SAAS,CAAC;AAC3B;AACF,OAAC,MAAM;AACL,QAAA,IAAIA,SAAS,GAAGkK,SAAS,CAAC3R,OAAO,CAACyR,GAAG,EAAE;UACrCc,cAAc,CAAC9K,SAAS,CAAC;AAC3B;AACF;MAEAmK,YAAY,CAAC5R,OAAO,GAAGyH,SAAS;KACjC;IAED,IAAIoL,UAAU,GAAG,CAAC;IAClB,IAAMC,UAAU,GAAGnD,QAAQ,CAACoC,SAAS,EAAE,UAAC/B,IAAI,EAAI;AAC9C;MACA,IAAIA,IAAI,CAAC9G,MAAM,KAAK2J,UAAU,IAAI7C,IAAI,CAAC9G,MAAM,KAAK,CAAC,EAAE;AACnD,QAAA;AACF;MACA2J,UAAU,GAAG7C,IAAI,CAAC9G,MAAM;AACxBiJ,MAAAA,SAAS,CAACnC,IAAI,CAAC9G,MAAM,CAAC;AACtB,MAAA,IAAMzB,SAAS,GAAGH,YAAY,EAAE;AAChC,MAAA,IAAI,CAACuK,OAAO,CAAC7R,OAAO,EAAE;QACpB6R,OAAO,CAAC7R,OAAO,GAAG,IAAI;QACtB,IAAI+S,cAAc,GAAG,CAAC;AACtB;QACA,IAAItL,SAAS,IAAIkJ,YAAY,EAAE;AAC7BoC,UAAAA,cAAc,GAAG3C,IAAI,CAAC8B,GAAG,CAAC9B,IAAI,CAACC,KAAK,CAAC5I,SAAS,GAAGkJ,YAAY,CAAC,GAAG,CAAC,GAAGC,QAAQ,EAAE,CAAC,CAAC;AACnF;AACA,QAAA,IAAMoC,YAAY,GAAGD,cAAc,GAAGf,KAAK,GAAGpB,QAAQ;QACtDE,aAAa,CAACiC,cAAc,CAAC;QAC7B/B,WAAW,CAACgC,YAAY,CAAC;AAC3B,OAAC,MAAM;QACLT,cAAc,CAAC9K,SAAS,CAAC;AAC3B;AACF,KAAC,CAAC;AAEFsK,IAAAA,SAAS,CAACjC,gBAAgB,CAAC,QAAQ,EAAE2C,QAAQ,CAAC;AAC9C,IAAA,OAAO,YAAK;AACVK,MAAAA,UAAU,EAAE;AACZf,MAAAA,SAAS,CAAChC,mBAAmB,CAAC,QAAQ,EAAE0C,QAAQ,CAAC;KAClD;GACF,EAAE,CAAC9B,YAAY,EAAEH,YAAY,EAAE7I,WAAW,EAAEiJ,QAAQ,CAAC,CAAC;EAEvD,IAAMqC,GAAG,GAAG,SAANA,GAAGA,CAAIpC,UAAkB,EAAEE,QAAiB,EAAI;AACpD,IAAA,OAAOG,UAAU,CAAClR,OAAO,CAACsN,KAAK,CAACuD,UAAU,EAAEE,QAAQ,CAAC,CAAC/O,MAAM,CAAC,UAACwL,CAAC,EAAEC,CAAC,EAAA;MAAA,OAAKD,CAAC,GAAGC,CAAC;AAAA,KAAA,EAAE,CAAC,CAAC;GACjF;AACD;AACA,EAAA,IAAMyF,QAAQ,GAAGD,GAAG,CAAC,CAAC,EAAEpC,UAAU,CAAC;AACnC,EAAA,IAAMsC,WAAW,GAAGF,GAAG,CAAClC,QAAQ,CAAC;EAEjC,OAAO;AACLF,IAAAA,UAAU,EAAVA,UAAU;AACVE,IAAAA,QAAQ,EAARA,QAAQ;AAERqC,IAAAA,aAAa,EAAElC,UAAU;AACzBG,IAAAA,iBAAiB,EAAjBA,iBAAiB;AACjBK,IAAAA,YAAY,EAAZA,YAAY;AAEZwB,IAAAA,QAAQ,EAARA,QAAQ;AACRC,IAAAA,WAAW,EAAXA,WAAW;AAEXlC,IAAAA,SAAS,EAATA;GACD;AACH;;AC7KA,SAASoC,SAASA,CAAIhS,KAAwB,EAAA;AAC5C,EAAA,IACEiS,cAAc,GAuBZjS,KAAK,CAvBPiS,cAAc;IACdC,WAAW,GAsBTlS,KAAK,CAtBPkS,WAAW;IACXC,OAAO,GAqBLnS,KAAK,CArBPmS,OAAO;IACP7P,SAAS,GAoBPtC,KAAK,CApBPsC,SAAS;IACTC,KAAK,GAmBHvC,KAAK,CAnBPuC,KAAK;IACO6M,OAAO,GAkBjBpP,KAAK,CAlBPqP,UAAU;IACD5B,gBAAgB,GAiBvBzN,KAAK,CAjBPC,OAAO;IACPhB,MAAM,GAgBJe,KAAK,CAhBPf,MAAM;IAENsQ,QAAQ,GAcNvP,KAAK,CAdPuP,QAAQ;IACRD,YAAY,GAaVtP,KAAK,CAbPsP,YAAY;IAEZhJ,WAAW,GAWTtG,KAAK,CAXPsG,WAAW;IACX6I,YAAY,GAUVnP,KAAK,CAVPmP,YAAY;IAEZ7C,YAAY,GAQVtM,KAAK,CARPsM,YAAY;IACZC,KAAK,GAOHvM,KAAK,CAPPuM,KAAK;IACLb,iBAAiB,GAMf1L,KAAK,CANP0L,iBAAiB;IACjBC,cAAc,GAKZ3L,KAAK,CALP2L,cAAc;IACdC,UAAU,GAIR5L,KAAK,CAJP4L,UAAU;IACVC,iBAAiB,GAGf7L,KAAK,CAHP6L,iBAAiB;IACjBC,SAAS,GAEP9L,KAAK,CAFP8L,SAAS;IACTrJ,UAAU,GACRzC,KAAK,CADPyC,UAAU;EAGZ,IAAA2P,iBAAA,GAQIlD,gBAAgB,CAAC;AACnBC,MAAAA,YAAY,EAAZA,YAAY;AACZE,MAAAA,UAAU,EAAED,OAAO;AACnB9I,MAAAA,WAAW,EAAXA,WAAW;AACXgJ,MAAAA,YAAY,EAAZA,YAAY;AACZC,MAAAA,QAAQ,EAARA;AACD,KAAA,CAAC;IAbAC,UAAU,GAAA4C,iBAAA,CAAV5C,UAAU;IACCH,UAAU,GAAA+C,iBAAA,CAArBxC,SAAS;IACTS,YAAY,GAAA+B,iBAAA,CAAZ/B,YAAY;IACZL,iBAAiB,GAAAoC,iBAAA,CAAjBpC,iBAAiB;IACjB+B,aAAa,GAAAK,iBAAA,CAAbL,aAAa;IACbF,QAAQ,GAAAO,iBAAA,CAARP,QAAQ;IACRC,WAAW,GAAAM,iBAAA,CAAXN,WAAW;AASb;AACA;AACA;AACA;EACA,IAAMjC,UAAU,GAAGnR,MAAM,CAAC,IAAIR,GAAG,EAA4B,CAAC;AAE9D;EACA,IAAMyP,eAAe,GAAGhE,WAAW,CAAC,UAAC1L,KAAa,EAAElB,GAAQ,EAAE8K,MAAc,EAAI;AAAA,IAAA,IAAAwK,qBAAA;AAC9E,IAAA,IAAM5F,MAAM,GAAA4F,CAAAA,qBAAA,GAAGxC,UAAU,CAAClR,OAAO,CAACoC,GAAG,CAAC9C,KAAK,CAAC,KAAAoU,IAAAA,GAAAA,qBAAA,GAAI,IAAInU,GAAG,EAAe;AACtEuO,IAAAA,MAAM,CAACpL,GAAG,CAACtE,GAAG,EAAE8K,MAAM,CAAC;IACvBgI,UAAU,CAAClR,OAAO,CAAC0C,GAAG,CAACpD,KAAK,EAAEwO,MAAM,CAAC;GACtC,EAAE,EAAE,CAAC;AAEN,EAAA,IAAM6F,cAAc,GAAGhS,OAAO,CAA6B,YAAK;IAC9D,OAAO;AAAEqN,MAAAA,eAAe,EAAfA,eAAe;MAAE4E,gBAAgB,EAAE,SAAlBA,gBAAgBA,GAAA;QAAA,OAAQR,aAAa,CAACpT,OAAO;AAAA;KAAE;AAC3E,GAAC,EAAE,CAACoT,aAAa,EAAEpE,eAAe,CAAC,CAAC;AAEpC,EAAA,IAAQ1N,OAAO,GAAiBwN,gBAAgB,CAAxCxN,OAAO;IAAE2N,UAAU,GAAKH,gBAAgB,CAA/BG,UAAU;EAC3B,IAAM4E,QAAQ,GAAGrE,YAAY,CAACgE,OAAO,EAAE,UAACM,GAAG,EAAI;IAC7C,IAAIA,GAAG,IAAI,IAAI,EAAE;AAEjB,IAAA,IAAMC,UAAU,GAAGD,GAAG,CAAC1E,YAAY;IACnC,IAAI2E,UAAU,KAAK,CAAC,EAAE;AAEtB;AACA;AACA,IAAA,IAAMC,OAAO,GAAG9C,UAAU,CAAClR,OAAO;AAClCgU,IAAAA,OAAO,CAACzJ,OAAO,CAAC,UAAC0J,GAAG,EAAEpQ,QAAQ,EAAI;AAChC,MAAA,IAAMqF,MAAM,GAAGnK,KAAK,CAACS,IAAI,CAACyU,GAAG,CAACvU,MAAM,EAAE,CAAC,CAACsC,MAAM,CAAC,UAACC,GAAG,EAAE9C,CAAC,EAAA;QAAA,OAAK8C,GAAG,GAAG9C,CAAC;AAAA,OAAA,EAAE,CAAC,CAAC;AACtEuS,MAAAA,YAAY,CAAC7N,QAAQ,EAAEqF,MAAM,CAAC;AAChC,KAAC,CAAC;AACFmI,IAAAA,iBAAiB,EAAE;AACnBH,IAAAA,UAAU,CAAClR,OAAO,CAACkU,KAAK,EAAE;AAC5B,GAAC,CAAC;AAEF,EAAA,IAAMC,WAAW,GAAGjR,cAAc,CAACwN,UAAU,CAAC9O,GAAG,CAAC,UAAC8Q,CAAC,EAAE7O,QAAQ,EAAI;AAChE,IAAA,IAAMzF,GAAG,GAAGgC,SAAS,CAACsS,CAAC,EAAEpS,MAAM,CAAC;IAChC,OACEyC,IAAC6L,KAAG,EAAA;MAEFjL,SAAS,EAAEkB,IAAI,CAAC8I,YAAY,IAAA,IAAA,GAAA,SAAA,GAAZA,YAAY,CAAG+E,CAAC,EAAE7O,QAAQ,CAAC,CAAC;MAC5CA,QAAQ,EAAEA,QAAQ,GAAGgN,UAAU;AAC/BxQ,MAAAA,OAAO,EAAEqS,CAAC;AACVpR,MAAAA,OAAO,EAAEwN,gBAAgB;AACzBlB,MAAAA,KAAK,EAAEA,KAAK;AACZT,MAAAA,SAAS,EAAEA,SAAS;AACpBrJ,MAAAA,UAAU,EAAEA;KAPP,EAAA1F,GAAG,CAQR;GAEL,CAAC,EAAE8O,iBAAiB,EAAE;AAAE5L,IAAAA,OAAO,EAAPA,OAAO;AAAEwN,IAAAA,gBAAgB,EAAEG,UAAU;AAAEmF,IAAAA,aAAa,EAAEvD;AAAU,GAAE,CAAC;AAE5F,EAAA,IAAMwD,QAAQ,GAAGnR,cAAc,CAC7BH,GAAA,CAAA,OAAA,EAAA;AAAOsC,IAAAA,GAAG,EAAEwO,QAAQ;AAAAtS,IAAAA,QAAA,EAAG4S;GAAW,CAAS,EAC3ClH,UAAU,EACV;AAAE3L,IAAAA,OAAO,EAAPA,OAAO;AAAEwN,IAAAA,gBAAgB,EAAEG,UAAU;AAAEmF,IAAAA,aAAa,EAAEvD;AAAY,GAAA,CACrE;AAED,EAAA,IAAArP,eAAA,GAAyBT,cAAc,EAAE;IAAjCuT,YAAY,GAAA9S,eAAA,CAAZ8S,YAAY;AAEpB,EAAA,IAAMC,SAAS,GAAGrR,cAAc,CAC9BsR,IACE,CAAA,OAAA,EAAA;AAAA7Q,IAAAA,SAAS,EAAEkB,IAAI,CAAClB,SAAS,EAAE,oBAAoB,CAAC;IAChDC,KAAK,EAAAgB,QAAA,CAAA,EAAA,EAAOhB,KAAK,EAAA;AAAE6Q,MAAAA,aAAa,EAAEtB,WAAW;AAAEuB,MAAAA,UAAU,EAAExB;KAAU,CAAA;AACrE7N,IAAAA,GAAG,EAAEkO,WAAW;AAAAhS,IAAAA,QAAA,EAAA,CAEhBwB,GAAC,CAAAiC,UAAQ,EACP;AAAA1D,MAAAA,OAAO,EAAE2N,UAAU;AACnBhK,MAAAA,oBAAoB,EAAEqP;KACtB,CAAA,EACDD,QAAQ;GAAA,CACH,EACRrH,cAAc,EACd;AAAE1L,IAAAA,OAAO,EAAPA,OAAO;AAAEwN,IAAAA,gBAAgB,EAAEG,UAAU;AAAEmF,IAAAA,aAAa,EAAEvD;AAAU,GAAE,CACrE;AAED,EAAA,IAAA8D,qBAAA,GAA2BjK,0BAA0B,EAAE;IAA/CX,MAAM,GAAA4K,qBAAA,CAAN5K,MAAM;IAAEG,MAAM,GAAAyK,qBAAA,CAANzK,MAAM;AACtB,EAAA,IAAM0K,UAAU,GAAG7U,MAAM,CAAiB,IAAI,CAAC;AAC/C+R,EAAAA,SAAS,CAAC,YAAK;AACb,IAAA,IAAM3O,IAAI,GAAGyR,UAAU,CAAC5U,OAAO;IAC/B,IAAImD,IAAI,IAAI,IAAI,EAAE;IAElB,IAAM/E,GAAG,GAAG,oBAAoB;AAChC,IAAA,IAAMqU,QAAQ,GAAG,SAAXA,QAAQA,GAAQ;MACpBvI,MAAM,CAAC9L,GAAG,EAAE;QAAE6L,UAAU,EAAE,SAAZA,UAAUA,GAAA;UAAA,OAAQ9G,IAAI,CAAC8G,UAAU;AAAA,SAAA;AAAE9G,QAAAA,IAAI,EAAJA;AAAI,OAAE,CAAC;KACzD;IACD,IAAM0R,OAAO,GAAG9K,MAAM,CAAC3L,GAAG,EAAE,UAAC6L,UAAU,EAAI;MACzC9G,IAAI,CAAC8G,UAAU,GAAGA,UAAU;AAC9B,KAAC,CAAC;AACF9G,IAAAA,IAAI,CAAC2M,gBAAgB,CAAC,QAAQ,EAAE2C,QAAQ,CAAC;AACzC,IAAA,OAAO,YAAK;AACVtP,MAAAA,IAAI,CAAC4M,mBAAmB,CAAC,QAAQ,EAAE0C,QAAQ,CAAC;AAC5CoC,MAAAA,OAAO,EAAE;KACV;AACH,GAAC,EAAE,CAAC9K,MAAM,EAAEG,MAAM,CAAC,CAAC;AAEpB,EAAA,IAAM4K,SAAS,GAAGtF,YAAY,CAACoF,UAAU,EAAEtB,cAAc,CAAC;AAE1D,EAAA,OACEvQ,GAAC,CAAA4H,eAAe,CAAC3H,QAAQ,EAAA;AAACpE,IAAAA,KAAK,EAAE+U,cAAc;AAC5CpS,IAAAA,QAAA,EAAA2B,cAAc,CACbH,GACE,CAAA,KAAA,EAAA;AAAAsC,MAAAA,GAAG,EAAEyP,SAAS;AACdnR,MAAAA,SAAS,EAAC,4BAA4B;AAErCpC,MAAAA,QAAA,EAAAgT;MACG,EACNxH,iBAAiB,EACjB;AAAEzL,MAAAA,OAAO,EAAPA,OAAO;AAAEwN,MAAAA,gBAAgB,EAAEG,UAAU;AAAEmF,MAAAA,aAAa,EAAEvD;KAAY;AACrE,GAAA,CACwB;AAE/B;;;AC9JA,IAAMkE,WAAW,GAAyB,SAApCA,WAAWA,CAA0B1T,KAAK,EAAI;AAClD,EAAA,IACEsC,SAAS,GAUPtC,KAAK,CAVPsC,SAAS;IACTC,KAAK,GASHvC,KAAK,CATPuC,KAAK;IACLgR,UAAU,GAQRvT,KAAK,CARPuT,UAAU;IACD9F,gBAAgB,GAOvBzN,KAAK,CAPPC,OAAO;IACP0T,YAAY,GAMV3T,KAAK,CANP2T,YAAY;IACZtI,mBAAmB,GAKjBrL,KAAK,CALPqL,mBAAmB;IACnBC,gBAAgB,GAIdtL,KAAK,CAJPsL,gBAAgB;IAChBC,YAAY,GAGVvL,KAAK,CAHPuL,YAAY;IACZC,eAAe,GAEbxL,KAAK,CAFPwL,eAAe;IACfC,gBAAgB,GACdzL,KAAK,CADPyL,gBAAgB;AAGlB,EAAA,IAAQxL,OAAO,GAAiBwN,gBAAgB,CAAxCxN,OAAO;IAAE2N,UAAU,GAAKH,gBAAgB,CAA/BG,UAAU;EAC3B,IAAMgG,UAAU,GAAG3T,OAAO,CAACA,OAAO,CAACpD,MAAM,GAAG,CAAC,CAAC;AAE9C,EAAA,IAAAsD,eAAA,GAAsBT,cAAc,EAAE;IAA9BU,SAAS,GAAAD,eAAA,CAATC,SAAS;AACjB,EAAA,IAAA2C,eAAA,GAA8BnB,cAAc,EAAE;IAAhCpB,WAAW,GAAAuC,eAAA,CAAjBtB,IAAI;EAEZ,IAAMoM,wBAAwB,GAAGT,aAAa,CAACQ,UAAU,EAAE,UAAC9P,CAAC,EAAI;AAC/D,IAAA,IAAIA,CAAC,CAACmG,IAAI,KAAK,OAAO,EAAE;AACtB,MAAA,OAAO,KAAK;AACd;AACA,IAAA,OAAO/E,gBAAgB,CAACpB,CAAC,CAACe,MAAM,CAACM,KAAK,CAAC;AACzC,GAAC,CAAC;EACF,IAAM2O,0BAA0B,GAAGF,UAAU,CAAC/P,SAAS,CAAC,UAACC,CAAC,EAAI;AAC5D,IAAA,IAAIA,CAAC,CAACmG,IAAI,KAAK,OAAO,EAAE;AACtB,MAAA,OAAO,KAAK;AACd;AACA,IAAA,OAAO7E,iBAAiB,CAACtB,CAAC,CAACe,MAAM,CAACM,KAAK,CAAC;AAC1C,GAAC,CAAC;AACF,EAAA,IAAAmU,qBAAA,GAA2BjK,0BAA0B,EAAE;IAA/CX,MAAM,GAAA4K,qBAAA,CAAN5K,MAAM;IAAEG,MAAM,GAAAyK,qBAAA,CAANzK,MAAM;AAEtB,EAAA,IAAMgL,gBAAgB,GAAGnV,MAAM,CAAiB,IAAI,CAAC;AACrD+R,EAAAA,SAAS,CAAC,YAAK;AACb,IAAA,IAAM3O,IAAI,GAAG+R,gBAAgB,CAAClV,OAAO;IACrC,IAAImD,IAAI,IAAI,IAAI,EAAE;IAClB,IAAM/E,GAAG,GAAG,sBAAsB;AAClC,IAAA,IAAMqU,QAAQ,GAAG,SAAXA,QAAQA,GAAQ;MACpBvI,MAAM,CAAC9L,GAAG,EAAE;QAAE6L,UAAU,EAAE,SAAZA,UAAUA,GAAA;UAAA,OAAQ9G,IAAI,CAAC8G,UAAU;AAAA,SAAA;AAAE9G,QAAAA,IAAI,EAAJA;AAAI,OAAE,CAAC;KACzD;IACD,IAAM0R,OAAO,GAAG9K,MAAM,CAAC3L,GAAG,EAAE,UAAC6L,UAAU,EAAI;MACzC9G,IAAI,CAAC8G,UAAU,GAAGA,UAAU;AAC9B,KAAC,CAAC;AACF9G,IAAAA,IAAI,CAAC2M,gBAAgB,CAAC,QAAQ,EAAE2C,QAAQ,CAAC;AACzC,IAAA,OAAO,YAAK;AACVtP,MAAAA,IAAI,CAAC4M,mBAAmB,CAAC,QAAQ,EAAE0C,QAAQ,CAAC;AAC5CoC,MAAAA,OAAO,EAAE;KACV;AACH,GAAC,EAAE,CAAC9K,MAAM,EAAEG,MAAM,CAAC,CAAC;AAEpB,EAAA,IAAM+J,GAAG,GAAG/Q,cAAc,CACxBH;cACGkM,UAAU,CAACrN,GAAG,CAAC,UAACM,IAAI,EAAE5C,KAAK,EAAI;AAAA,MAAA,IAAA6V,oBAAA;AAC9B,MAAA,IAAQ/W,GAAG,GAAK8D,IAAI,CAAZ9D,GAAG;AACX,MAAA,IAAI8D,IAAI,CAACoD,IAAI,KAAK,OAAO,EAAE;QACzB,OAAOvC,GAAA,CAAA,IAAA,EAAA;AAAA,UAAA,YAAA,EAAA;SAAA,EAAS3E,GAAG,CAAe;AACpC;AAEA,MAAA,IAAQ8B,MAAM,GAAKgC,IAAI,CAAfhC,MAAM;AAEd,MAAA,IAAIA,MAAM,CAACsE,OAAO,KAAK,CAAC,EAAE;AACxB,QAAA,OAAO,IAAI;AACb;AAEA,MAAA,IAAM4Q,MAAM,GAAGnV,MAAM,CAACgV,UAAU,CAAC,KAAK7W,GAAG;MACzC,IAAAiG,IAAA,IAAA8Q,oBAAA,GAIIjV,MAAM,CAACmV,YAAY,uBAAnBnV,MAAM,CAACmV,YAAY,CAAGnV,MAAM,EAAEZ,KAAK,CAAC,YAAA6V,oBAAA,GAAI,EAAE;QAHjCG,WAAW,GAAAjR,IAAA,CAAtBV,SAAS;QACF4R,OAAO,GAAAlR,IAAA,CAAdT,KAAK;AACFiK,QAAAA,IAAI,GAAA7J,6BAAA,CAAAK,IAAA,EAAAJ,SAAA,CAAA;MAGT,OACElB,IAACyS,QAAQ,EAAA;AAAAjU,QAAAA,QAAA,EACN2B,cAAc,cACbuS,aAAa,CACX,IAAI,EAAA7Q,QAAA,CAAA;AAEF8Q,UAAAA,KAAK,EAAE;AAAK,SAAA,EACT7H,IAAI,EAAA;UACPrJ,OAAO,EAAEtE,MAAM,CAACsE,OAAO;UACvBb,SAAS,EAAEkB,IAAI,CACb,2BAA2B,EAC3BuQ,MAAM,IAAI,UAAU,EACpBlV,MAAM,CAACgE,KAAK,IAAI,IAAI,IAA2BhE,sBAAAA,GAAAA,MAAM,CAACgE,KAAO,EAC7DxD,YAAY,CAACR,MAAM,CAACM,KAAK,CAAC,IAAI,2BAA2B,EACzD0O,wBAAwB,KAAK5P,KAAK,IAAI,kCAAkC,EACxE6P,0BAA0B,KAAK7P,KAAK,IAAI,oCAAoC,EAC5EY,MAAM,CAACyD,SAAS,EAChB2R,WAAW,CACZ;UACD1R,KAAK,EAAAgB,QAAA,CAAA,EAAA,EACA2Q,OAAO,EAAA;AACVzT,YAAAA,IAAI,EAAEvB,gBAAgB,CAACL,MAAM,CAACM,KAAK,CAAC,GAAGqB,WAAW,CAACO,GAAG,CAAChE,GAAG,CAAC,GAAG0G,SAAS;AACvEzC,YAAAA,KAAK,EAAE5B,iBAAiB,CAACP,MAAM,CAACM,KAAK,CAAC,GAClCqB,WAAW,CAACO,GAAG,CAAChE,GAAG,CAAC,GACpB0G;AAAS,WAAA;AACd,SAAA,CAAA,EAEH5E,MAAM,CAACyV,KAAK,CACb,EACD7I,gBAAgB,EAChB;AAAE5M,UAAAA,MAAM,EAANA,MAAM;AAAEoB,UAAAA,OAAO,EAAPA,OAAO;AAAEsU,UAAAA,YAAY,EAAEnU,SAAS;AAAEqN,UAAAA,gBAAgB,EAAEG;SAAY;OA7B/D,EAAA7Q,GAAG,CA+BP;KAEd;GAAC,CACC,EACLyO,eAAe,EACf;AAAEvL,IAAAA,OAAO,EAAPA,OAAO;AAAEwN,IAAAA,gBAAgB,EAAEG;AAAU,GAAE,CAC1C;AAED,EAAA,IAAM4G,SAAS,GAAG3S,cAAc,CAC9BH;AAAOY,IAAAA,SAAS,EAAC,qBAAqB;AAAApC,IAAAA,QAAA,EAAE0S;GAAG,CAAS,EACpDrH,YAAY,EACZ;AAAEtL,IAAAA,OAAO,EAAPA,OAAO;AAAEwN,IAAAA,gBAAgB,EAAEG;AAAY,GAAA,CAC1C;AAED,EAAA,IAAMsF,SAAS,GAAGrR,cAAc,CAC9BsR,IACE,CAAA,OAAA,EAAA;AAAA5Q,IAAAA,KAAK,EAAEA,KAAK;AAEZrC,IAAAA,QAAA,EAAA,CAAAwB,GAAA,CAACiC,UAAQ,EAAA;AAAC1D,MAAAA,OAAO,EAAE2N;KAAc,CAAA,EAChC4G,SAAS;GAAA,CACJ,EACRlJ,gBAAgB,EAChB;AAAErL,IAAAA,OAAO,EAAPA,OAAO;AAAEwN,IAAAA,gBAAgB,EAAEG;AAAU,GAAE,CAC1C;AAED,EAAA,IAAM6F,SAAS,GAAGtF,YAAY,CAACoF,UAAU,EAAEM,gBAAgB,CAAC;AAE5D,EAAA,OAAOhS,cAAc,CACnBH,GACE,CAAA,KAAA,EAAA;AAAAsC,IAAAA,GAAG,EAAEyP,SAAS;AACdnR,IAAAA,SAAS,EAAEkB,IAAI,CAAC,sBAAsB,EAAElB,SAAS,EAAE;AACjD,MAAA,6BAA6B,EAAEqR;KAChC,CAAC;AACFpR,IAAAA,KAAK,EAAE;MACL6N,GAAG,EAAEqE,MAAM,CAACC,QAAQ,CAACf,YAAY,CAAC,GAAIA,YAAuB,GAAGlQ;KACjE;AAAAvD,IAAAA,QAAA,EAEAgT;GAAS,CACN,EACN7H,mBAAmB,EACnB;AAAEpL,IAAAA,OAAO,EAAPA,OAAO;AAAEwN,IAAAA,gBAAgB,EAAEG;AAAU,GAAE,CAC1C;AACH,CAAC;;ACjKD,SAASgB,WAAWA,CAACC,KAAa,EAAEjG,UAAkB,EAAA;EACpD,IAAInI,IAAI,GAAG,CAAC;AACZ,EAAA,IAAIO,KAAK,GAAG6N,KAAK,CAAChS,MAAM,GAAG,CAAC;EAC5B,IAAIoB,KAAK,GAAG,EAAE;EAEd,OAAOwC,IAAI,IAAIO,KAAK,EAAE;AACpB,IAAA,IAAM8N,GAAG,GAAGC,IAAI,CAACC,KAAK,CAAC,CAACvO,IAAI,GAAGO,KAAK,IAAI,CAAC,CAAC;IAE1C,IAAI6N,KAAK,CAACC,GAAG,CAAC,CAAC9N,KAAK,GAAG4H,UAAU,EAAE;AACjC3K,MAAAA,KAAK,GAAG6Q,GAAG;MACX9N,KAAK,GAAG8N,GAAG,GAAG,CAAC;AACjB,KAAC,MAAM;MACLrO,IAAI,GAAGqO,GAAG,GAAG,CAAC;AAChB;AACF;AAEA,EAAA,IAAI7Q,KAAK,KAAK,EAAE,EAAE;AAChB,IAAA,OAAOwF,SAAS;AAClB;EAEA,OAAOoL,KAAK,CAAC5Q,KAAK,CAAC;AACrB;AAEA,SAAS0W,wBAAwBA,CAAI1U,OAAwB,EAAA;EAC3D,IAAIhC,KAAK,GAAG,EAAE;AACd,EAAA,KAAK,IAAInB,CAAC,GAAGmD,OAAO,CAACpD,MAAM,GAAG,CAAC,EAAEC,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;AAC5C,IAAA,IAAM+B,MAAM,GAAGoB,OAAO,CAACnD,CAAC,CAAC;AACzB,IAAA,IAAIsC,iBAAiB,CAACP,MAAM,CAACM,KAAK,CAAC,EAAE;AACnClB,MAAAA,KAAK,GAAGnB,CAAC;AACX,KAAC,MAAM;AACL,MAAA;AACF;AACF;AACA,EAAA,OAAOmB,KAAK;AACd;AAEA,SAAS2W,sBAAsBA,CAAI3U,OAAwB,EAAA;AACzD,EAAA,OAAOmN,aAAa,CAACnN,OAAO,EAAE,UAACnC,CAAC,EAAA;AAAA,IAAA,OAAKoB,gBAAgB,CAACpB,CAAC,CAACqB,KAAK,CAAC;GAAC,CAAA;AACjE;AAEM,SAAU0V,mBAAmBA,CAAI7S,OAAsC,EAAA;AAC3E,EAAA,IACEsN,YAAY,GAOVtN,OAAO,CAPTsN,YAAY;IACZwF,kBAAkB,GAMhB9S,OAAO,CANT8S,kBAAkB;IAClBvF,QAAQ,GAKNvN,OAAO,CALTuN,QAAQ;IACCwF,UAAU,GAIjB/S,OAAO,CAJT/B,OAAO;IACP+U,WAAW,GAGThT,OAAO,CAHTgT,WAAW;IACXT,YAAY,GAEVvS,OAAO,CAFTuS,YAAY;IAAAU,iBAAA,GAEVjT,OAAO,CADTkT,QAAQ;AAARA,IAAAA,QAAQ,GAAAD,iBAAA,KAAG,SAAA,GAAA,KAAK,GAAAA,iBAAA;AAGlB,EAAA,IAAME,kBAAkB,GAAGP,sBAAsB,CAACG,UAAU,CAAC;AAC7D,EAAA,IAAMK,oBAAoB,GAAGT,wBAAwB,CAACI,UAAU,CAAC;AAEjE,EAAA,IAAMM,OAAO,GAAGF,kBAAkB,GAAG,EAAE,GAAGvW,MAAM,CAACmW,UAAU,CAACI,kBAAkB,CAAC,CAAC,GAAG,IAAI;AACvF,EAAA,IAAMG,QAAQ,GAAGF,oBAAoB,GAAG,EAAE,GAAGxW,MAAM,CAACmW,UAAU,CAACK,oBAAoB,CAAC,CAAC,GAAG,IAAI;AAE5F,EAAA,IAAA7O,SAAA,GAAoCC,QAAQ,CAAC,CAAC,CAAC;AAAxCgJ,IAAAA,UAAU,GAAAjJ,SAAA,CAAA,CAAA,CAAA;AAAEkJ,IAAAA,aAAa,GAAAlJ,SAAA,CAAA,CAAA,CAAA;AAChC,EAAA,IAAAI,UAAA,GAAgCH,QAAQ,CAAC,CAAC,CAAC;AAApCkJ,IAAAA,QAAQ,GAAA/I,UAAA,CAAA,CAAA,CAAA;AAAEgJ,IAAAA,WAAW,GAAAhJ,UAAA,CAAA,CAAA,CAAA;AAE5B,EAAA,IAAMkI,KAAK,GAAGvO,OAAO,CAAC,YAAK;AACzB,IAAA,IAAI4U,QAAQ,EAAE;AACZ,MAAA,OAAO,EAAE;AACX;IACA,IAAIzU,IAAI,GAAG,CAAC;IACZ,OAAOsU,UAAU,CAACxU,GAAG,CAAC,UAAC1B,MAAM,EAAEZ,KAAK,EAAU;AAAA,MAAA,IAAAsX,iBAAA;AAC5C,MAAA,IAAMxY,GAAG,GAAG6B,MAAM,CAACC,MAAM,CAAC;AAC1B,MAAA,IAAMqF,KAAK,GAAA,CAAAqR,iBAAA,GAAGhB,YAAY,CAACxT,GAAG,CAAChE,GAAG,CAAC,KAAAwY,IAAAA,GAAAA,iBAAA,GAAIjG,YAAY;AACnD,MAAA,IAAMtO,KAAK,GAAGP,IAAI,GAAGyD,KAAK;AAC1B,MAAA,IAAMyK,IAAI,GAAS;AACjB1Q,QAAAA,KAAK,EAALA,KAAK;AACLiG,QAAAA,KAAK,EAALA,KAAK;AACLzD,QAAAA,IAAI,EAAJA,IAAI;AACJO,QAAAA,KAAK,EAALA;OACD;AAEDP,MAAAA,IAAI,GAAGO,KAAK;AACZ,MAAA,OAAO2N,IAAI;AACb,KAAC,CAAC;GACH,EAAE,CAACoG,UAAU,EAAER,YAAY,EAAEjF,YAAY,EAAE4F,QAAQ,CAAC,CAAC;AAEtD;EACA,IAAM5E,SAAS,GAAG5R,MAAM,CAAO;AAC7BT,IAAAA,KAAK,EAAE,CAAC;AACRiG,IAAAA,KAAK,EAAEoL,YAAY;AACnB7O,IAAAA,IAAI,EAAE,CAAC;AACPO,IAAAA,KAAK,EAAEsO;AACR,GAAA,CAAC;AAEF,EAAA,IAAMkG,aAAa,GAAGhM,WAAW,CAAC,UAACZ,UAAkB,EAAI;AACvD,IAAA,OAAOgG,WAAW,CAACC,KAAK,EAAEjG,UAAU,CAAC;AACvC,GAAC,CAAC;EAEF,IAAMsI,cAAc,GAAG1H,WAAW,CAAC,UAACZ,UAAkB,EAAE+H,KAAa,EAAI;AACvE,IAAA,IAAMQ,MAAM,GAAGqE,aAAa,CAAC5M,UAAU,CAAC;IACxC,IAAIuI,MAAM,IAAI,IAAI,EAAE;MAClBb,SAAS,CAAC3R,OAAO,GAAGwS,MAAM;AAC1B1B,MAAAA,aAAa,CAACV,IAAI,CAAC8B,GAAG,CAAC,CAAC,EAAEM,MAAM,CAAClT,KAAK,GAAGsR,QAAQ,CAAC,CAAC;MACnDI,WAAW,CAACwB,MAAM,CAAClT,KAAK,GAAG0S,KAAK,GAAGpB,QAAQ,CAAC;AAC9C;AACF,GAAC,CAAC;AAEF;AACA,EAAA,IAAMkG,aAAa,GAAG/W,MAAM,CAAC,CAAC,CAAC;AAC/B+R,EAAAA,SAAS,CAAC,YAAK;AACb,IAAA,IAAIyE,QAAQ,EAAE;AAEd,IAAA,IAAMQ,eAAe,GAAGV,WAAW,CAACrW,OAAO;IAC3C,IAAI+W,eAAe,IAAI,IAAI,EAAE;AAE7B,IAAA,IAAMC,cAAc,GAAGD,eAAe,CAACvR,WAAW;IAClD,IAAIwM,KAAK,GAAG5B,IAAI,CAACkC,IAAI,CAAC0E,cAAc,GAAGrG,YAAY,CAAC;AAEpD,IAAA,IAAM8B,QAAQ,GAAG,SAAXA,QAAQA,GAAQ;AACpB,MAAA,IAAMxI,UAAU,GAAG8M,eAAe,CAAC9M,UAAU;AAC7C;AACA,MAAA,IAAMgN,aAAa,GAAGhN,UAAU,GAAG6M,aAAa,CAAC9W,OAAO;AACxD,MAAA,IAAIiX,aAAa,EAAE;AACjB,QAAA,IAAIhN,UAAU,GAAG0H,SAAS,CAAC3R,OAAO,CAACqC,KAAK,EAAE;AACxCkQ,UAAAA,cAAc,CAACtI,UAAU,EAAE+H,KAAK,CAAC;AACnC;AACF,OAAC,MAAM;AACL,QAAA,IAAI/H,UAAU,GAAG0H,SAAS,CAAC3R,OAAO,CAAC8B,IAAI,EAAE;AACvCyQ,UAAAA,cAAc,CAACtI,UAAU,EAAE+H,KAAK,CAAC;AACnC;AACF;MAEA8E,aAAa,CAAC9W,OAAO,GAAGiK,UAAU;KACnC;AAED8M,IAAAA,eAAe,CAACjH,gBAAgB,CAAC,QAAQ,EAAE2C,QAAQ,CAAC;IAEpD,IAAIyE,SAAS,GAAG,CAAC;IACjB,IAAMC,IAAI,GAAGxH,QAAQ,CAACoH,eAAe,EAAE,UAAA1S,IAAA,EAAc;AAAA,MAAA,IAAXkB,KAAK,GAAAlB,IAAA,CAALkB,KAAK;AAC7C,MAAA,IAAIA,KAAK,KAAK2R,SAAS,IAAI3R,KAAK,KAAK,CAAC,EAAE;AACtC,QAAA;AACF;AACA2R,MAAAA,SAAS,GAAG3R,KAAK;AACjB,MAAA,IAAM0E,UAAU,GAAG8M,eAAe,CAAC9M,UAAU;MAC7C+H,KAAK,GAAG5B,IAAI,CAACkC,IAAI,CAAC/M,KAAK,GAAGoL,YAAY,CAAC;AACvC4B,MAAAA,cAAc,CAACtI,UAAU,EAAE+H,KAAK,CAAC;AACnC,KAAC,CAAC;AACF,IAAA,OAAO,YAAK;AACV+E,MAAAA,eAAe,CAAChH,mBAAmB,CAAC,QAAQ,EAAE0C,QAAQ,CAAC;AACvD0E,MAAAA,IAAI,EAAE;KACP;AACH,GAAC,EAAE,CAACd,WAAW,EAAE1F,YAAY,EAAE4B,cAAc,EAAE3B,QAAQ,EAAEiG,aAAa,EAAEN,QAAQ,CAAC,CAAC;EAElF,IAAMtD,GAAG,GAAG,SAANA,GAAGA,CAAIpC,UAAkB,EAAEE,QAAiB,EAAI;AACpD,IAAA,OAAOb,KAAK,CAAC5C,KAAK,CAACuD,UAAU,EAAEE,QAAQ,CAAC,CAAC/O,MAAM,CAAC,UAACwL,CAAC,EAAEC,CAAC,EAAA;AAAA,MAAA,OAAKD,CAAC,GAAGC,CAAC,CAAClI,KAAK;AAAA,KAAA,EAAE,CAAC,CAAC;GAC1E;AAED,EAAA,IAAM6R,cAAc,GAAGZ,kBAAkB,GAAG,EAAE,GAAGvD,GAAG,CAAC,CAAC,EAAEuD,kBAAkB,GAAG,CAAC,CAAC,GAAG,CAAC;AACnF,EAAA,IAAMa,eAAe,GAAGZ,oBAAoB,GAAG,EAAE,GAAGxD,GAAG,CAACwD,oBAAoB,CAAC,GAAG,CAAC;AAEjF;AACA,EAAA,IAAMa,SAAS,GAAGlH,IAAI,CAAC8B,GAAG,CAAC,CAAC,EAAEe,GAAG,CAAC,CAAC,EAAEpC,UAAU,CAAC,GAAGuG,cAAc,CAAC;AAClE,EAAA,IAAMG,UAAU,GAAGnH,IAAI,CAAC8B,GAAG,CAAC,CAAC,EAAEe,GAAG,CAAClC,QAAQ,CAAC,GAAGsG,eAAe,CAAC;AAE/D,EAAA,IAAMG,WAAW,GAAG7V,OAAO,CAAC,YAAK;AAC/B,IAAA,IAAI4U,QAAQ,EAAE;AACZ,MAAA,OAAOH,UAAU;AACnB;AACA,IAAA,IAAM3T,MAAM,GAAA,EAAA,CAAAkJ,MAAA,CACPyK,UAAU,CAAC9I,KAAK,CAAC,CAAC,EAAEkJ,kBAAkB,GAAG,CAAC,CAAC,EAC3CJ,UAAU,CAAC9I,KAAK,CAACuD,UAAU,EAAEE,QAAQ,CAAC,EACtCqF,UAAU,CAAC9I,KAAK,CAACmJ,oBAAoB,CAAC,CAC1C;AACD,IAAA,IAAMgB,QAAQ,GAAG,IAAI3N,GAAG,EAAO;AAC/B,IAAA,OAAOrH,MAAM,CAACsJ,MAAM,CAAC,UAAC7L,MAAM,EAAI;AAC9B,MAAA,IAAM9B,GAAG,GAAG6B,MAAM,CAACC,MAAM,CAAC;AAC1B,MAAA,IAAIuX,QAAQ,CAACtN,GAAG,CAAC/L,GAAG,CAAC,EAAE;AACrB,QAAA,OAAO,KAAK;AACd;AACAqZ,MAAAA,QAAQ,CAAChN,GAAG,CAACrM,GAAG,CAAC;AACjB,MAAA,OAAO,IAAI;AACb,KAAC,CAAC;AACJ,GAAC,EAAE,CAACmY,QAAQ,EAAEH,UAAU,EAAEvF,UAAU,EAAEE,QAAQ,EAAEyF,kBAAkB,EAAEC,oBAAoB,CAAC,CAAC;AAE1F,EAAA,IAAMxH,UAAU,GAAGtN,OAAO,CAAC,YAAK;IAC9B,OAAO6V,WAAW,CAACxV,MAAM,CAAwB,UAACS,MAAM,EAAEiV,SAAS,EAAEpY,KAAK,EAAI;AAC5E,MAAA,IAAMlB,GAAG,GAAG6B,MAAM,CAACyX,SAAS,CAAC;MAC7B,IAAIxX,MAAM,GAAGwX,SAAS;MACtB,IAAIxX,MAAM,CAACqF,KAAK,IAAI,IAAI,IAAIrF,MAAM,CAACuF,QAAQ,IAAI,IAAI,EAAE;QACnDvF,MAAM,GAAA0E,QAAA,CAAA,EAAA,EAAQ1E,MAAM,EAAA;AAAEqF,UAAAA,KAAK,EAAE4Q;SAAoB,CAAA;AACnD;MACA,IAAI/X,GAAG,KAAKsY,OAAO,EAAE;QACnBjU,MAAM,CAACsL,IAAI,CAAC;AAAEzI,UAAAA,IAAI,EAAE,QAAQ;AAAElH,UAAAA,GAAG,EAAHA,GAAG;AAAE8B,UAAAA,MAAM,EAANA;AAAM,SAAE,CAAC;QAC5CuC,MAAM,CAACsL,IAAI,CAAC;AAAEzI,UAAAA,IAAI,EAAE,OAAO;AAAElH,UAAAA,GAAG,EAAE,aAAa;AAAEmH,UAAAA,KAAK,EAAE+R;AAAS,SAAE,CAAC;OACrE,MAAM,IAAIZ,OAAO,IAAI,IAAI,IAAIpX,KAAK,KAAK,CAAC,EAAE;QACzCmD,MAAM,CAACsL,IAAI,CAAC;AAAEzI,UAAAA,IAAI,EAAE,OAAO;AAAElH,UAAAA,GAAG,EAAE,aAAa;AAAEmH,UAAAA,KAAK,EAAE+R;AAAS,SAAE,CAAC;QACpE7U,MAAM,CAACsL,IAAI,CAAC;AAAEzI,UAAAA,IAAI,EAAE,QAAQ;AAAElH,UAAAA,GAAG,EAAHA,GAAG;AAAE8B,UAAAA,MAAM,EAANA;AAAM,SAAE,CAAC;AAC9C,OAAC,MAAM,IAAI9B,GAAG,KAAKuY,QAAQ,EAAE;QAC3BlU,MAAM,CAACsL,IAAI,CAAC;AAAEzI,UAAAA,IAAI,EAAE,OAAO;AAAElH,UAAAA,GAAG,EAAE,cAAc;AAAEmH,UAAAA,KAAK,EAAEgS;AAAU,SAAE,CAAC;QACtE9U,MAAM,CAACsL,IAAI,CAAC;AAAEzI,UAAAA,IAAI,EAAE,QAAQ;AAAElH,UAAAA,GAAG,EAAHA,GAAG;AAAE8B,UAAAA,MAAM,EAANA;AAAM,SAAE,CAAC;AAC9C,OAAC,MAAM,IAAIyW,QAAQ,IAAI,IAAI,IAAIrX,KAAK,KAAKkY,WAAW,CAACtZ,MAAM,GAAG,CAAC,EAAE;QAC/DuE,MAAM,CAACsL,IAAI,CAAC;AAAEzI,UAAAA,IAAI,EAAE,QAAQ;AAAElH,UAAAA,GAAG,EAAHA,GAAG;AAAE8B,UAAAA,MAAM,EAANA;AAAM,SAAE,CAAC;QAC5CuC,MAAM,CAACsL,IAAI,CAAC;AAAEzI,UAAAA,IAAI,EAAE,OAAO;AAAElH,UAAAA,GAAG,EAAE,cAAc;AAAEmH,UAAAA,KAAK,EAAEgS;AAAU,SAAE,CAAC;AACxE,OAAC,MAAM;QACL9U,MAAM,CAACsL,IAAI,CAAC;AAAEzI,UAAAA,IAAI,EAAE,QAAQ;AAAElH,UAAAA,GAAG,EAAHA,GAAG;AAAE8B,UAAAA,MAAM,EAANA;AAAM,SAAE,CAAC;AAC9C;AACA,MAAA,OAAOuC,MAAM;KACd,EAAE,EAAE,CAAC;AACR,GAAC,EAAE,CAAC+U,WAAW,EAAEd,OAAO,EAAEC,QAAQ,EAAEW,SAAS,EAAEC,UAAU,EAAEpB,kBAAkB,CAAC,CAAC;AAE/E,EAAA,IAAM7U,OAAO,GAAGK,OAAO,CAAC,YAAK;IAC3B,OAAO;AAAEL,MAAAA,OAAO,EAAEkW,WAAW;AAAEvI,MAAAA,UAAU,EAAVA;KAAY;AAC7C,GAAC,EAAE,CAACuI,WAAW,EAAEvI,UAAU,CAAC,CAAC;EAE7B,OAAO;AAAE3N,IAAAA,OAAO,EAAPA,OAAO;AAAEkW,IAAAA,WAAW,EAAXA,WAAW;AAAEhB,IAAAA,kBAAkB,EAAlBA,kBAAkB;AAAEC,IAAAA,oBAAoB,EAApBA;GAAsB;AAC3E;;AC1NA,SAASkB,SAASA,CAACtW,KAAqB,EAAEgE,GAAiC,EAAA;AACzE,EAAA,IACE1B,SAAS,GAOPtC,KAAK,CAPPsC,SAAS;IACTC,KAAK,GAMHvC,KAAK,CANPuC,KAAK;IACLrC,QAAQ,GAKNF,KAAK,CALPE,QAAQ;IACRqW,kBAAkB,GAIhBvW,KAAK,CAJPuW,kBAAkB;IAClBC,mBAAmB,GAGjBxW,KAAK,CAHPwW,mBAAmB;IACnBrL,UAAU,GAERnL,KAAK,CAFPmL,UAAU;IACVsL,mBAAmB,GACjBzW,KAAK,CADPyW,mBAAmB;AAGrB,EAAA,IAAMC,QAAQ,GAAGhY,MAAM,CAAiB,IAAI,CAAC;AAE7C,EAAA,IAAA6H,SAAA,GAAwCC,QAAQ,CAAC,KAAK,CAAC;AAAhDmQ,IAAAA,YAAY,GAAApQ,SAAA,CAAA,CAAA,CAAA;AAAEqQ,IAAAA,eAAe,GAAArQ,SAAA,CAAA,CAAA,CAAA;AACpC,EAAA,IAAAI,UAAA,GAA0CH,QAAQ,CAAC,KAAK,CAAC;AAAlDqQ,IAAAA,aAAa,GAAAlQ,UAAA,CAAA,CAAA,CAAA;AAAEmQ,IAAAA,gBAAgB,GAAAnQ,UAAA,CAAA,CAAA,CAAA;AAEtC,EAAA,IAAA2M,qBAAA,GAAmBjK,0BAA0B,EAAE;IAAvCX,MAAM,GAAA4K,qBAAA,CAAN5K,MAAM;AACd+H,EAAAA,SAAS,CAAC,YAAK;AACb,IAAA,IAAI,CAAC8F,kBAAkB,IAAI,CAACC,mBAAmB,EAAE;AAC/C,MAAA;AACF;AACA,IAAA,IAAMO,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAIjV,IAAiB,EAAI;AAChD,MAAA,IAAQ8G,UAAU,GAA+B9G,IAAI,CAA7C8G,UAAU;QAAEoO,WAAW,GAAkBlV,IAAI,CAAjCkV,WAAW;QAAEC,WAAW,GAAKnV,IAAI,CAApBmV,WAAW;AAC5C,MAAA,IAAIV,kBAAkB,EAAE;AACtBK,QAAAA,eAAe,CAAChO,UAAU,KAAK,CAAC,CAAC;AACnC;AACA,MAAA,IAAI4N,mBAAmB,EAAE;QACvBM,gBAAgB,CAAC,EAAElO,UAAU,GAAGoO,WAAW,IAAIC,WAAW,CAAC,CAAC;AAC9D;KACD;AACD,IAAA,IAAMnV,IAAI,GAAG2U,mBAAmB,CAAC9X,OAAO;IACxC,IAAImD,IAAI,IAAI,IAAI,EAAE;MAChBiV,mBAAmB,CAACjV,IAAI,CAAC;AAC3B;IACA,OAAO4G,MAAM,CAAC,QAAQ,EAAE,UAACwO,WAAW,EAAEpV,IAAI,EAAI;MAC5CiV,mBAAmB,CAACjV,IAAI,CAAC;AAC3B,KAAC,CAAC;GACH,EAAE,CAAC2U,mBAAmB,EAAEF,kBAAkB,EAAEC,mBAAmB,EAAE9N,MAAM,CAAC,CAAC;AAE1E,EAAA,IAAM+K,SAAS,GAAGtF,YAAY,CAACnK,GAAG,EAAE0S,QAAQ,CAAC;AAC7C,EAAA,OAAO7U,cAAc,CACnBH,GACE,CAAA,KAAA,EAAA;AAAAsC,IAAAA,GAAG,EAAEyP,SAAS;AACdnR,IAAAA,SAAS,EAAEkB,IAAI,CACb,eAAe,EACfmT,YAAY,IAAI,4BAA4B,EAC5CE,aAAa,IAAI,6BAA6B,EAC9CvU,SAAS,CACV;AACDC,IAAAA,KAAK,EAAEA,KAAK;AAEXrC,IAAAA,QAAA,EAAAA;IACG,EACNiL,UAAU,EACV,EAAE,CACH;AACH;AAEA,kBAAegM,aAAAA,UAAU,CAACb,SAAS,CAAC;;ACVpC,SAASc,gBAAgBA,CACvBpX,KAA+B,EAC/BgE,GAAiC,EAAA;AAEjC,EAAA,IACEkO,WAAW,GAmBTlS,KAAK,CAnBPkS,WAAW;IACX5P,SAAS,GAkBPtC,KAAK,CAlBPsC,SAAS;IACTC,KAAK,GAiBHvC,KAAK,CAjBPuC,KAAK;IACL8U,kBAAkB,GAgBhBrX,KAAK,CAhBPqX,kBAAkB;IAClBC,cAAc,GAeZtX,KAAK,CAfPsX,cAAc;IACLvC,UAAU,GAcjB/U,KAAK,CAdPC,OAAO;IACKmP,OAAO,GAajBpP,KAAK,CAbPqP,UAAU;IAAAkI,aAAA,GAaRvX,KAAK,CAZPf,MAAM;AAAEuY,IAAAA,SAAS,GAAAD,aAAA,KAAG,SAAA,GAAA,KAAK,GAAAA,aAAA;IAAAE,qBAAA,GAYvBzX,KAAK,CAXP0X,kBAAkB;AAAlBA,IAAAA,kBAAkB,GAAAD,qBAAA,KAAG,SAAA,GAAA,EAAE,GAAAA,qBAAA;IACvBE,oBAAoB,GAUlB3X,KAAK,CAVP2X,oBAAoB;IAAAC,mBAAA,GAUlB5X,KAAK,CATP6X,YAAY;AAAZA,IAAAA,YAAY,GAAAD,mBAAA,KAAG,SAAA,GAAA,CAAC,GAAAA,mBAAA;IAAAE,qBAAA,GASd9X,KAAK,CARP+X,eAAe;AAAfA,IAAAA,eAAe,GAAAD,qBAAA,KAAG,SAAA,GAAA,CAAC,GAAAA,qBAAA;IACnBnE,YAAY,GAOV3T,KAAK,CAPP2T,YAAY;IAAAqE,qBAAA,GAOVhY,KAAK,CANP8U,kBAAkB;AAAlBA,IAAAA,kBAAkB,GAAAkD,qBAAA,KAAG,SAAA,GAAA,GAAG,GAAAA,qBAAA;IAAAC,eAAA,GAMtBjY,KAAK,CALPgN,QAAQ;AAARA,IAAAA,QAAQ,GAAAiL,eAAA,KAAA,SAAA,GAAIrN,aAAa,CAACsN,eAAoC,GAAAD,eAAA;IAChDE,eAAe,GAI3BnY,KAAK,CAJPsM,YAAY;IACZC,KAAK,GAGHvM,KAAK,CAHPuM,KAAK;IACS6L,gBAAgB,GAE5BpY,KAAK,CAFPmP,YAAY;IAAAkJ,oBAAA,GAEVrY,KAAK,CADPsY,aAAa;AAAbA,IAAAA,aAAa,GAAAD,oBAAA,KAAG,SAAA,GAAA,IAAI,GAAAA,oBAAA;AAGtB,EAAA,IAAM3B,QAAQ,GAAGhY,MAAM,CAAiB,IAAI,CAAC;AAE7C,EAAA,IAAMmV,gBAAgB,GAAGnV,MAAM,CAAiB,IAAI,CAAC;AACrD,EAAA,IAAMuT,cAAc,GAAGvT,MAAM,CAAiB,IAAI,CAAC;AACnD,EAAA,IAAM6Z,QAAQ,GAAG7Z,MAAM,CAAmB,IAAI,CAAC;AAC/C,EAAA,IAAM8Z,iBAAiB,GAAGrK,YAAY,CAACoK,QAAQ,EAAErG,WAAW,CAAC;AAC7D,EAAA,IAAMC,OAAO,GAAGzT,MAAM,CAA0B,IAAI,CAAC;AAErD,EAAA,IAAM4H,WAAW,GAAGqD,WAAW,CAAC,YAAK;AACnC,IAAA,IAAM/E,IAAI,GAAG8R,QAAQ,CAAC/X,OAAO;IAC7B,IAAIiG,IAAI,IAAI,IAAI,EAAE;IAClB,OAAOF,eAAe,CAACE,IAAI,CAAC;GAC7B,EAAE,EAAE,CAAC;AAEN,EAAA,IAAMuK,YAAY,GAAGxF,WAAW,CAAC,YAAK;IAAA,IAAA8O,qBAAA,EAAAC,kBAAA;AACpC,IAAA,IAAI,OAAON,gBAAgB,KAAK,UAAU,EAAE;MAC1C,OAAOA,gBAAgB,EAAE;AAC3B;AACA,IAAA,IAAM1C,eAAe,GAAGpP,WAAW,EAAE;AACrC,IAAA,IAAIoP,eAAe,KAAKgB,QAAQ,CAAC/X,OAAO,EAAE;AACxC,MAAA,OAAO,CAAC;AACV;IACA,IAAI+G,QAAQ,CAACgQ,eAAe,CAAC,IAAI5P,MAAM,CAAC4P,eAAe,CAAC,EAAE;MAAA,IAAAiD,qBAAA,EAAAC,iBAAA;MACxD,IAAMxI,GAAG,IAAAuI,qBAAA,GAAA,CAAAC,iBAAA,GAAGlC,QAAQ,CAAC/X,OAAO,KAAA,IAAA,GAAA,SAAA,GAAhBia,iBAAA,CAAkBC,qBAAqB,EAAE,CAACzI,GAAG,KAAAuI,IAAAA,GAAAA,qBAAA,GAAI,CAAC;AAC9D,MAAA,OAAO7T,MAAM,CAACoB,OAAO,GAAGkK,GAAG;AAC7B;AACA,IAAA,OAAA,CAAAqI,qBAAA,GAAA,CAAAC,kBAAA,GAAOhC,QAAQ,CAAC/X,OAAO,KAAhB+Z,IAAAA,GAAAA,SAAAA,GAAAA,kBAAA,CAAkB9H,SAAS,KAAA6H,IAAAA,GAAAA,qBAAA,GAAI,CAAC;AACzC,GAAC,EAAE,CAACL,gBAAgB,EAAE9R,WAAW,CAAC,CAAC;AAEnC,EAAA,IAAAwS,aAAA,GAsBI9L,QAAQ,CAAClC,GAAG,CAAC;AACfuE,MAAAA,UAAU,EAAED,OAAO;AACnBnQ,MAAAA,MAAM,EAAEuY,SAAS;AACjBvX,MAAAA,OAAO,EAAE8U,UAAU;AACnB2C,MAAAA,kBAAkB,EAAlBA,kBAAkB;AAClB7D,MAAAA,gBAAgB,EAAhBA,gBAAgB;AAChB5B,MAAAA,cAAc,EAAdA,cAAc;AACdC,MAAAA,WAAW,EAAEqG,QAAQ;AACrBpG,MAAAA,OAAO,EAAPA,OAAO;AACP4G,MAAAA,OAAO,EAAErC,QAAQ;AACjBvH,MAAAA,YAAY,EAAZA,YAAY;AACZ7I,MAAAA,WAAW,EAAXA;AACD,KAAA,CAAC;IAjCA+I,UAAU,GAAAyJ,aAAA,CAAVzJ,UAAU;IACD2J,eAAe,GAAAF,aAAA,CAAxB7Y,OAAO;IACPhB,MAAM,GAAA6Z,aAAA,CAAN7Z,MAAM;IACNqN,YAAY,GAAAwM,aAAA,CAAZxM,YAAY;IAEZvK,MAAM,GAAA+W,aAAA,CAAN/W,MAAM;IACNoJ,UAAU,GAAA2N,aAAA,CAAV3N,UAAU;IACVC,aAAa,GAAA0N,aAAA,CAAb1N,aAAa;IACbC,mBAAmB,GAAAyN,aAAA,CAAnBzN,mBAAmB;IACnBC,gBAAgB,GAAAwN,aAAA,CAAhBxN,gBAAgB;IAChBC,YAAY,GAAAuN,aAAA,CAAZvN,YAAY;IACZC,eAAe,GAAAsN,aAAA,CAAftN,eAAe;IACfC,gBAAgB,GAAAqN,aAAA,CAAhBrN,gBAAgB;IAChBC,iBAAiB,GAAAoN,aAAA,CAAjBpN,iBAAiB;IACjBC,cAAc,GAAAmN,aAAA,CAAdnN,cAAc;IACdC,UAAU,GAAAkN,aAAA,CAAVlN,UAAU;IACVC,iBAAiB,GAAAiN,aAAA,CAAjBjN,iBAAiB;IACjBC,SAAS,GAAAgN,aAAA,CAAThN,SAAS;IACTrJ,UAAU,GAAAqW,aAAA,CAAVrW,UAAU;IAEHwW,aAAa,GAAAH,aAAA,CAApBvM,KAAK;EAeP,IAAAhG,SAAA,GAAwCC,QAAQ,CAAC,YAAA;MAAA,OAAM,IAAItI,GAAG,EAAe;KAAC,CAAA;AAAvEqW,IAAAA,YAAY,GAAAhO,SAAA,CAAA,CAAA,CAAA;AAAE2S,IAAAA,eAAe,GAAA3S,SAAA,CAAA,CAAA,CAAA;AACpC,EAAA,IAAM4S,eAAe,GAAGza,MAAM,CAAC6V,YAAY,CAAC;AAC5C,EAAA,IAAM6E,kBAAkB,GAAGzP,WAAW,CAAC,UAACpM,KAAuB,EAAI;IACjE4b,eAAe,CAACxa,OAAO,GAAGpB,KAAK;IAC/B2b,eAAe,CAAC3b,KAAK,CAAC;GACvB,EAAE,EAAE,CAAC;AAEN,EAAA,IAAM8b,mBAAmB,GAAG/Y,OAAO,CAA0B,YAAK;IAChE,OAAO;AACLF,MAAAA,SAAS,EAAEmU,YAAY;AACvBtB,MAAAA,YAAY,EAAEmG;KACf;AACH,GAAC,EAAE,CAAC7E,YAAY,EAAE6E,kBAAkB,CAAC,CAAC;EAEtC,IAAAE,oBAAA,GAAoBzE,mBAAmB,CAAI;AACzCvF,MAAAA,YAAY,EAAEqI,oBAAoB,IAApBA,IAAAA,GAAAA,oBAAoB,GAAI7C,kBAAkB;AACxDA,MAAAA,kBAAkB,EAAlBA,kBAAkB;AAClBvF,MAAAA,QAAQ,EAAEwI,eAAe;AACzB9X,MAAAA,OAAO,EAAE+Y,eAAe;AACxBhE,MAAAA,WAAW,EAAE/C,cAAc;AAC3BsC,MAAAA,YAAY,EAAZA,YAAY;MACZW,QAAQ,EAAEyC,oBAAoB,IAAI;AACnC,KAAA,CAAC;IARM1X,OAAO,GAAAqZ,oBAAA,CAAPrZ,OAAO;EAUf,IAAMsZ,cAAc,GAAG5P,WAAW,CAAC,UAACkD,MAAS,EAAE5O,KAAa,EAAI;AAC9D,IAAA,OAAOuF,IAAI,CAAC2U,eAAe,uBAAfA,eAAe,CAAGtL,MAAM,EAAE5O,KAAK,CAAC,EAAEqO,YAAY,uBAAZA,YAAY,CAAGO,MAAM,EAAE5O,KAAK,CAAC,CAAC;AAC9E,GAAC,EAAE,CAACka,eAAe,EAAE7L,YAAY,CAAC,CAAC;EAEnC,IAAMkN,UAAU,GAAiB7P,WAAW,CAAC,UAACkD,MAAM,EAAE5O,KAAK,EAAI;AAC7D,IAAA,OAAAsF,QAAA,CAAYgJ,EAAAA,EAAAA,KAAK,uBAALA,KAAK,CAAGM,MAAM,EAAE5O,KAAK,CAAC,EAAKgb,aAAa,IAAbA,IAAAA,GAAAA,SAAAA,GAAAA,aAAa,CAAGpM,MAAM,EAAE5O,KAAK,CAAC,CAAA;AACvE,GAAC,EAAE,CAACgb,aAAa,EAAE1M,KAAK,CAAC,CAAC;AAE1B,EAAA,IAAMgK,kBAAkB,GAAGyC,eAAe,CAACS,IAAI,CAAC,UAAC3b,CAAC,EAAA;AAAA,IAAA,OAAKoB,gBAAgB,CAACpB,CAAC,CAACqB,KAAK,CAAC;GAAC,CAAA;AACjF,EAAA,IAAMqX,mBAAmB,GAAGwC,eAAe,CAACS,IAAI,CAAC,UAAC3b,CAAC,EAAA;AAAA,IAAA,OAAKsB,iBAAiB,CAACtB,CAAC,CAACqB,KAAK,CAAC;GAAC,CAAA;AAEnF,EAAA,IAAMua,iBAAiB,GAAGpZ,OAAO,CAAC,YAAK;IACrC,OAAO;AACLL,MAAAA,OAAO,EAAE+Y,eAAe;AACxBpL,MAAAA,UAAU,EAAEoL,eAAe,CAACzY,GAAG,CAAC,UAAC1B,MAAM,EAAsB;AAC3D,QAAA,IAAM9B,GAAG,GAAG6B,MAAM,CAACC,MAAM,CAAC;QAC1B,OAAO;AACL9B,UAAAA,GAAG,EAAHA,GAAG;AACHkH,UAAAA,IAAI,EAAE,QAAQ;AACdpF,UAAAA,MAAM,EAANA;SACD;OACF;KACF;AACH,GAAC,EAAE,CAACma,eAAe,CAAC,CAAC;AAErB,EAAA,IAAMW,aAAa,GAAGrZ,OAAO,CAAC,YAAK;AACjC,IAAA,IAAIgY,aAAa,EAAE;AACjB,MAAA,OAAOrY,OAAO;AAChB;AACA,IAAA,OAAOyZ,iBAAiB;GACzB,EAAE,CAACpB,aAAa,EAAEoB,iBAAiB,EAAEzZ,OAAO,CAAC,CAAC;AAE/C,EAAA,IAAM2Z,WAAW,GAAG/X,cAAc,CAChCsR;eACEzR,GAAC,CAAAgS,WAAW,EACV;AAAAH,MAAAA,UAAU,EAAEM,gBAAgB;AAC5B5T,MAAAA,OAAO,EAAE0Z,aAAa;AACtBhG,MAAAA,YAAY,EAAEA,YAAY;AAC1BtI,MAAAA,mBAAmB,EAAEA,mBAAmB;AACxCC,MAAAA,gBAAgB,EAAEA,gBAAgB;AAClCC,MAAAA,YAAY,EAAEA,YAAY;AAC1BC,MAAAA,eAAe,EAAEA,eAAe;AAChCC,MAAAA,gBAAgB,EAAEA;AAAgB,KAAA,CAClC,EACF/J,GAAC,CAAAsQ,SAAS,EACR;AAAAC,MAAAA,cAAc,EAAEA,cAAc;AAC9BC,MAAAA,WAAW,EAAEsG,iBAAiB;AAC9BrG,MAAAA,OAAO,EAAEA,OAAO;AAChB7P,MAAAA,SAAS,EAAE+U,kBAAkB;AAC7B9U,MAAAA,KAAK,EAAE+U,cAAc;AACrBrX,MAAAA,OAAO,EAAEA,OAAO;AAChBhB,MAAAA,MAAM,EAAEA,MAAM;AACdoQ,MAAAA,UAAU,EAAEA,UAAU;AACtBE,MAAAA,QAAQ,EAAEsI,YAAY;AACtBvI,MAAAA,YAAY,EAAEoI,kBAAkB;AAChCpR,MAAAA,WAAW,EAAEA,WAAW;AACxB6I,MAAAA,YAAY,EAAEA,YAAY;AAC1B7C,MAAAA,YAAY,EAAEiN,cAAc;AAC5BhN,MAAAA,KAAK,EAAEiN,UAAU;AACjB9N,MAAAA,iBAAiB,EAAEA,iBAAiB;AACpCC,MAAAA,cAAc,EAAEA,cAAc;AAC9BC,MAAAA,UAAU,EAAEA,UAAU;AACtBC,MAAAA,iBAAiB,EAAEA,iBAAiB;AACpCC,MAAAA,SAAS,EAAEA,SAAS;AACpBrJ,MAAAA,UAAU,EAAEA;AACZ,KAAA,CAAA;GAAA,CACD,EACH2I,aAAa,EACb;IAAEnL,OAAO,EAAEA,OAAO,CAACA,OAAO;IAAEwN,gBAAgB,EAAExN,OAAO,CAAC2N;AAAU,GAAE,CACnE;AAED,EAAA,IAAMiM,aAAa,GAAG1L,YAAY,CAACuI,QAAQ,EAAE1S,GAAG,CAAC;AACjD,EAAA,IAAM8V,KAAK,GAAGjY,cAAc,CAC1BH,GAAA,CAAC4U,WAAS,EACR;AAAAtS,IAAAA,GAAG,EAAE6V,aAAa;AAClBvX,IAAAA,SAAS,EAAEA,SAAS;AACpBC,IAAAA,KAAK,EAAEA,KAAK;AACZgU,IAAAA,kBAAkB,EAAEA,kBAAkB;AACtCC,IAAAA,mBAAmB,EAAEA,mBAAmB;AACxCrL,IAAAA,UAAU,EAAEA,UAAU;AACtBsL,IAAAA,mBAAmB,EAAExE,cAAc;cAElC2H;GAAW,CACF,EACZ7X,MAAM,EACN;IAAE9B,OAAO,EAAEA,OAAO,CAACA,OAAO;IAAEwN,gBAAgB,EAAExN,OAAO,CAAC2N;AAAY,GAAA,CACnE;AAED,EAAA,OACElM,GAAC,CAAApC,WAAW,CAACqC,QAAQ;AAACpE,IAAAA,KAAK,EAAE8b,mBAAmB;AAAAnZ,IAAAA,QAAA,EAC9CwB,IAAC3B,aAAa,EAAA;AAACE,MAAAA,OAAO,EAAE+Y,eAAe;AACrC9Y,MAAAA,QAAA,EAAAwB,GAAA,CAACwG,oBAAoB,EAAA;AAAC5B,QAAAA,WAAW,EAAEA,WAAW;AAAE1B,QAAAA,IAAI,EAAE8R,QAAQ;AAAAxW,QAAAA,QAAA,EAC5DwB,GAAC,CAAA4G,uBAAuB;oBAAEwR;SAAK;;KAEnB;AAAA,GAAA,CACK;AAE3B;AAEA,IAAIta,OAAAA,CAAAA,GAAAA,CAAAA,QAAAA,KAAAA,aAAO,EAAE;EACX4X,gBAAgB,CAAC3X,WAAW,GAAG,mBAAmB;AACpD;AAEA,YAAA,aAAeiE,IAAI,cAACyT,UAAU,CAACC,gBAAgB,CAAC,CAE/B;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import { useTableRowManager, useContainerSize, createMiddleware, useShallowMemo, useStableFn, isValidFixed } from '@are-visual/virtual-table';
2
+ import { useTableRowManager, useContainerSize, createMiddleware, useShallowMemo, useStableFn, getRowKey, isValidFixed } from '@are-visual/virtual-table';
3
3
  import { useControllableValue } from '@are-visual/virtual-table/middleware/utils/useControllableValue';
4
4
  import clsx from 'clsx';
5
5
  import { useMemo, useRef, useCallback } from 'react';
@@ -47,9 +47,6 @@ const EXPANSION_COLUMN_KEY = 'VirtualTable.EXPANSION_COLUMN';
47
47
  function isExpansionColumn(column) {
48
48
  return column.key === EXPANSION_COLUMN_KEY;
49
49
  }
50
- function getRowKey(rowData, rowKey) {
51
- return rowData[rowKey];
52
- }
53
50
  function useTableExpandable(ctx, options) {
54
51
  const disablePlugin = options == null;
55
52
  const {
@@ -171,7 +168,7 @@ function useTableExpandable(ctx, options) {
171
168
  width: columnWidth,
172
169
  fixed,
173
170
  render(_value, record, index) {
174
- const key = record[rowKey];
171
+ const key = getRowKey(record, rowKey);
175
172
  const expandable = rowExpandableRecord[index] ?? false;
176
173
  const expanded = expansion.includes(key);
177
174
  if (typeof expandIcon === 'function') {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../packages/virtual-table/src/middleware/expandable/expand-row.tsx","../../../../packages/virtual-table/src/middleware/expandable/index.tsx"],"sourcesContent":["import type { CSSProperties, FC, ReactNode } from 'react'\nimport { useContainerSize, useTableRowManager } from '@are-visual/virtual-table'\nimport clsx from 'clsx'\n\nexport interface ExpandRowProps {\n className?: string\n style?: CSSProperties\n rowIndex: number\n isExpanded?: boolean\n colSpan?: number\n children?: ReactNode\n fixed?: boolean\n}\n\nconst ExpandRow: FC<ExpandRowProps> = (props) => {\n const {\n className,\n style,\n rowIndex,\n isExpanded,\n colSpan,\n children,\n fixed,\n } = props\n\n const { updateRowHeight } = useTableRowManager()\n const { tableWidth } = useContainerSize()\n\n return (\n <tr\n className={clsx('virtual-table-expanded-row', className)}\n style={{ ...style, display: isExpanded ? undefined : 'none' }}\n ref={(node) => {\n if (node == null) return\n updateRowHeight(rowIndex, `row(${rowIndex})-expandable`, node.offsetHeight)\n }}\n >\n <td colSpan={colSpan}>\n <div\n className={clsx(\n 'virtual-table-cell',\n fixed && 'virtual-table-expanded-row-fixed',\n )}\n style={{ width: tableWidth <= 0 ? undefined : tableWidth }}\n >\n {children}\n </div>\n </td>\n </tr>\n )\n}\n\nexport default ExpandRow\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n AnyObject,\n ColumnExtra,\n ColumnType,\n FixedType,\n MiddlewareContext,\n MiddlewareRenderRow,\n MiddlewareResult,\n OnRowType,\n} from '@are-visual/virtual-table'\nimport type { Key, MouseEvent, ReactNode } from 'react'\nimport { createMiddleware, isValidFixed, useShallowMemo, useStableFn } from '@are-visual/virtual-table'\nimport { useControllableValue } from '@are-visual/virtual-table/middleware/utils/useControllableValue'\nimport clsx from 'clsx'\nimport { useCallback, useMemo, useRef } from 'react'\nimport ExpandRow from './expand-row'\n\ntype TriggerEventHandler<T> = (record: T, event: MouseEvent<HTMLElement>) => void\nexport interface RenderExpandIconProps<T> {\n prefixCls: string\n expanded: boolean\n record: T\n expandable: boolean\n onExpand: TriggerEventHandler<T>\n}\nexport type RowClassName<T> = (record: T, index: number, indent: number) => string\nexport type RenderExpandIcon<T> = (props: RenderExpandIconProps<T>) => ReactNode\nexport type ExpandedRowRender<T> = (record: T, index: number, indent: number, expanded: boolean) => ReactNode\n\nexport interface ExpandableConfig<T> {\n expandedRowKeys?: readonly Key[]\n defaultExpandedRowKeys?: readonly Key[]\n expandedRowRender?: ExpandedRowRender<T>\n columnTitle?: ReactNode\n expandRowByClick?: boolean\n expandIcon?: RenderExpandIcon<T>\n onExpand?: (expanded: boolean, record: T) => void\n onExpandedRowsChange?: (expandedKeys: readonly Key[]) => void\n defaultExpandAllRows?: boolean\n showExpandColumn?: boolean\n expandedRowClassName?: string | RowClassName<T>\n rowExpandable?: (record: T) => boolean\n columnWidth?: number | string\n fixed?: FixedType\n extraColumnProps?: ColumnExtra\n}\n\nexport const EXPANSION_COLUMN_KEY = 'VirtualTable.EXPANSION_COLUMN'\n\nexport function isExpansionColumn<T = any>(column: ColumnType<T>) {\n return column.key === EXPANSION_COLUMN_KEY\n}\n\nfunction getRowKey<T>(rowData: T, rowKey: (string & {}) | keyof T) {\n return (rowData as AnyObject)[rowKey as string] as Key\n}\n\nfunction useTableExpandable<T = any>(\n ctx: MiddlewareContext<T>,\n options?: ExpandableConfig<T>,\n): MiddlewareResult<T> {\n const disablePlugin = options == null\n\n const { rowKey, columns: rawColumns, dataSource } = ctx\n const {\n // expandedRowKeys,\n // onExpandedRowsChange,\n defaultExpandedRowKeys,\n expandedRowRender,\n columnTitle,\n expandRowByClick = false,\n expandIcon,\n onExpand,\n\n defaultExpandAllRows = false,\n\n // TODO: 未实现\n // indentSize: _indentSize,\n\n showExpandColumn = true,\n expandedRowClassName,\n\n rowExpandable,\n columnWidth = 50,\n fixed,\n extraColumnProps,\n } = options ?? {}\n\n const _rowExpandableValue = useMemo(() => {\n return dataSource.map((row) => {\n if (!rowExpandable) return false\n return rowExpandable(row)\n })\n }, [dataSource, rowExpandable])\n\n // useShallowMemo 每一次渲染时候都会重新求值,这对于某些开销较大的计算不太友好,\n // 所以使用 useMemo 求值再通过 useShallowMemo 浅比较\n // useMemo 标记 deps 后,若 deps 不变也就不需要重新求值\n // 使用 useShallowMemo 主要是为了防止重新求值后结果不变但地址指针变化,导致不必要的渲染\n const rowExpandableRecord = useShallowMemo(() => _rowExpandableValue)\n\n // 即使 defaultExpandAllRows 变更之后,此插件也不要响应变化,只使用初始值,所以存储一下\n const defaultExpandAll = useRef(\n // options 中有 expandedRowKeys 则表示受控模式,那么 defaultExpandAllRows 不生效\n 'expandedRowKeys' in (options ?? {}) || 'defaultExpandedRowKeys' in (options ?? {})\n ? false\n : defaultExpandAllRows,\n )\n const defaultExpandKey = useShallowMemo((): readonly Key[] => {\n if (defaultExpandAll.current) {\n const expandKeys = dataSource.map((record, index): Key | null => {\n if (rowExpandableRecord[index]) {\n const key = (record as AnyObject)[rowKey as string] as string | number\n return key\n }\n return null\n })\n return expandKeys.filter((x) => x != null)\n }\n return []\n })\n\n const expansionKeys = useRef(new Set<Key>(defaultExpandedRowKeys ?? defaultExpandKey))\n const [expansion, setExpansion] = useControllableValue<readonly Key[]>(\n options ?? {},\n {\n trigger: 'onExpandedRowsChange',\n valuePropName: 'expandedRowKeys',\n defaultValue: defaultExpandedRowKeys ?? defaultExpandKey,\n },\n )\n\n const onUpdateExpansion = useStableFn((rowData: T, shouldExpand?: boolean) => {\n const key = getRowKey(rowData, rowKey)\n expansionKeys.current.add(key)\n if (shouldExpand == null) {\n if (expansion.includes(key)) {\n setExpansion(expansion.filter((x) => x !== key))\n onExpand?.(false, rowData)\n } else {\n setExpansion([...expansion, key])\n onExpand?.(true, rowData)\n }\n } else if (shouldExpand) {\n setExpansion([...expansion, key])\n onExpand?.(true, rowData)\n } else {\n setExpansion(expansion.filter((x) => x !== key))\n onExpand?.(false, rowData)\n }\n })\n\n const isFixed = isValidFixed(fixed)\n\n const renderRow: MiddlewareRenderRow = useCallback((children, args) => {\n const { rowData, rowIndex, columnDescriptor } = args\n\n const isExpandable = rowExpandableRecord[rowIndex]\n if (isExpandable) {\n const key = getRowKey(rowData as T, rowKey)\n const isExpanded: boolean | undefined = expansion.includes(key)\n const isRendered = expansionKeys.current.has(key)\n\n let className = ''\n if (typeof expandedRowClassName === 'string') {\n className = expandedRowClassName\n } else if (typeof expandedRowClassName === 'function') {\n className = expandedRowClassName(rowData as T, rowIndex, 0)\n }\n\n return (\n <>\n {children}\n {isRendered && (\n <ExpandRow\n className={className}\n rowIndex={rowIndex}\n isExpanded={isExpanded}\n colSpan={columnDescriptor.length}\n fixed={isFixed}\n >\n {expandedRowRender?.(rowData as T, rowIndex, 0, isExpanded)}\n </ExpandRow>\n )}\n </>\n )\n }\n return children\n }, [\n isFixed,\n rowExpandableRecord,\n rowKey,\n expansion,\n expandedRowClassName,\n expandedRowRender,\n ])\n\n const columns = useMemo((): ColumnType<T>[] => {\n if (!showExpandColumn) {\n return rawColumns\n }\n\n return [\n {\n ...extraColumnProps,\n key: EXPANSION_COLUMN_KEY,\n title: columnTitle,\n width: columnWidth,\n fixed,\n render(_value, record, index) {\n const key = (record as AnyObject)[rowKey as string] as string | number\n\n const expandable = rowExpandableRecord[index] ?? false\n const expanded = expansion.includes(key)\n\n if (typeof expandIcon === 'function') {\n return expandIcon({\n expandable,\n expanded,\n record,\n prefixCls: 'virtual-table',\n onExpand: (rowData: T, _e) => {\n onUpdateExpansion(rowData)\n },\n })\n }\n\n if (!expandable) {\n return null\n }\n\n return (\n <button\n className={clsx(\n 'virtual-table-row-expand-icon',\n expanded\n ? 'virtual-table-row-expand-icon-expanded'\n : 'virtual-table-row-expand-icon-collapsed',\n )}\n type=\"button\"\n aria-label={expanded ? '关闭行' : '展开行'}\n aria-expanded={expanded}\n onClick={() => {\n onUpdateExpansion(record, !expanded)\n }}\n />\n )\n },\n onHeaderCell() {\n return { className: 'virtual-table-expand-column' }\n },\n },\n ...rawColumns,\n ]\n }, [\n showExpandColumn,\n columnTitle,\n columnWidth,\n fixed,\n rawColumns,\n rowKey,\n rowExpandableRecord,\n expansion,\n expandIcon,\n onUpdateExpansion,\n extraColumnProps,\n ])\n\n const onRow: OnRowType<T> = useCallback((record, index) => {\n if (rowExpandableRecord[index]) {\n return {\n onClick: (e) => {\n e.stopPropagation()\n onUpdateExpansion(record)\n },\n }\n }\n return {}\n }, [rowExpandableRecord, onUpdateExpansion])\n\n if (disablePlugin) {\n return ctx\n }\n\n return {\n ...ctx,\n columns,\n renderRow,\n onRow: !expandRowByClick ? undefined : onRow,\n }\n}\n\n/* eslint max-len: [\"error\", { \"code\": 120 }] */\nexport const tableExpandable = createMiddleware(useTableExpandable)\n"],"names":["ExpandRow","props","className","style","rowIndex","isExpanded","colSpan","children","fixed","updateRowHeight","useTableRowManager","tableWidth","useContainerSize","_jsx","clsx","display","undefined","ref","node","offsetHeight","width","EXPANSION_COLUMN_KEY","isExpansionColumn","column","key","getRowKey","rowData","rowKey","useTableExpandable","ctx","options","disablePlugin","columns","rawColumns","dataSource","defaultExpandedRowKeys","expandedRowRender","columnTitle","expandRowByClick","expandIcon","onExpand","defaultExpandAllRows","showExpandColumn","expandedRowClassName","rowExpandable","columnWidth","extraColumnProps","_rowExpandableValue","useMemo","map","row","rowExpandableRecord","useShallowMemo","defaultExpandAll","useRef","defaultExpandKey","current","expandKeys","record","index","filter","x","expansionKeys","Set","expansion","setExpansion","useControllableValue","trigger","valuePropName","defaultValue","onUpdateExpansion","useStableFn","shouldExpand","add","includes","isFixed","isValidFixed","renderRow","useCallback","args","columnDescriptor","isExpandable","isRendered","has","_jsxs","length","title","render","_value","expandable","expanded","prefixCls","_e","type","onClick","onHeaderCell","onRow","e","stopPropagation","tableExpandable","createMiddleware"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../packages/virtual-table/src/middleware/expandable/expand-row.tsx","../../../../packages/virtual-table/src/middleware/expandable/index.tsx"],"sourcesContent":["import type { CSSProperties, FC, ReactNode } from 'react'\nimport { useContainerSize, useTableRowManager } from '@are-visual/virtual-table'\nimport clsx from 'clsx'\n\nexport interface ExpandRowProps {\n className?: string\n style?: CSSProperties\n rowIndex: number\n isExpanded?: boolean\n colSpan?: number\n children?: ReactNode\n fixed?: boolean\n}\n\nconst ExpandRow: FC<ExpandRowProps> = (props) => {\n const {\n className,\n style,\n rowIndex,\n isExpanded,\n colSpan,\n children,\n fixed,\n } = props\n\n const { updateRowHeight } = useTableRowManager()\n const { tableWidth } = useContainerSize()\n\n return (\n <tr\n className={clsx('virtual-table-expanded-row', className)}\n style={{ ...style, display: isExpanded ? undefined : 'none' }}\n ref={(node) => {\n if (node == null) return\n updateRowHeight(rowIndex, `row(${rowIndex})-expandable`, node.offsetHeight)\n }}\n >\n <td colSpan={colSpan}>\n <div\n className={clsx(\n 'virtual-table-cell',\n fixed && 'virtual-table-expanded-row-fixed',\n )}\n style={{ width: tableWidth <= 0 ? undefined : tableWidth }}\n >\n {children}\n </div>\n </td>\n </tr>\n )\n}\n\nexport default ExpandRow\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n AnyObject,\n ColumnExtra,\n ColumnType,\n FixedType,\n MiddlewareContext,\n MiddlewareRenderRow,\n MiddlewareResult,\n OnRowType,\n} from '@are-visual/virtual-table'\nimport type { Key, MouseEvent, ReactNode } from 'react'\nimport { createMiddleware, getRowKey, isValidFixed, useShallowMemo, useStableFn } from '@are-visual/virtual-table'\nimport { useControllableValue } from '@are-visual/virtual-table/middleware/utils/useControllableValue'\nimport clsx from 'clsx'\nimport { useCallback, useMemo, useRef } from 'react'\nimport ExpandRow from './expand-row'\n\ntype TriggerEventHandler<T> = (record: T, event: MouseEvent<HTMLElement>) => void\nexport interface RenderExpandIconProps<T> {\n prefixCls: string\n expanded: boolean\n record: T\n expandable: boolean\n onExpand: TriggerEventHandler<T>\n}\nexport type RowClassName<T> = (record: T, index: number, indent: number) => string\nexport type RenderExpandIcon<T> = (props: RenderExpandIconProps<T>) => ReactNode\nexport type ExpandedRowRender<T> = (record: T, index: number, indent: number, expanded: boolean) => ReactNode\n\nexport interface ExpandableConfig<T> {\n expandedRowKeys?: readonly Key[]\n defaultExpandedRowKeys?: readonly Key[]\n expandedRowRender?: ExpandedRowRender<T>\n columnTitle?: ReactNode\n expandRowByClick?: boolean\n expandIcon?: RenderExpandIcon<T>\n onExpand?: (expanded: boolean, record: T) => void\n onExpandedRowsChange?: (expandedKeys: readonly Key[]) => void\n defaultExpandAllRows?: boolean\n showExpandColumn?: boolean\n expandedRowClassName?: string | RowClassName<T>\n rowExpandable?: (record: T) => boolean\n columnWidth?: number | string\n fixed?: FixedType\n extraColumnProps?: ColumnExtra\n}\n\nexport const EXPANSION_COLUMN_KEY = 'VirtualTable.EXPANSION_COLUMN'\n\nexport function isExpansionColumn<T = any>(column: ColumnType<T>) {\n return column.key === EXPANSION_COLUMN_KEY\n}\n\nfunction useTableExpandable<T = any>(\n ctx: MiddlewareContext<T>,\n options?: ExpandableConfig<T>,\n): MiddlewareResult<T> {\n const disablePlugin = options == null\n\n const { rowKey, columns: rawColumns, dataSource } = ctx\n const {\n // expandedRowKeys,\n // onExpandedRowsChange,\n defaultExpandedRowKeys,\n expandedRowRender,\n columnTitle,\n expandRowByClick = false,\n expandIcon,\n onExpand,\n\n defaultExpandAllRows = false,\n\n // TODO: 未实现\n // indentSize: _indentSize,\n\n showExpandColumn = true,\n expandedRowClassName,\n\n rowExpandable,\n columnWidth = 50,\n fixed,\n extraColumnProps,\n } = options ?? {}\n\n const _rowExpandableValue = useMemo(() => {\n return dataSource.map((row) => {\n if (!rowExpandable) return false\n return rowExpandable(row)\n })\n }, [dataSource, rowExpandable])\n\n // useShallowMemo 每一次渲染时候都会重新求值,这对于某些开销较大的计算不太友好,\n // 所以使用 useMemo 求值再通过 useShallowMemo 浅比较\n // useMemo 标记 deps 后,若 deps 不变也就不需要重新求值\n // 使用 useShallowMemo 主要是为了防止重新求值后结果不变但地址指针变化,导致不必要的渲染\n const rowExpandableRecord = useShallowMemo(() => _rowExpandableValue)\n\n // 即使 defaultExpandAllRows 变更之后,此插件也不要响应变化,只使用初始值,所以存储一下\n const defaultExpandAll = useRef(\n // options 中有 expandedRowKeys 则表示受控模式,那么 defaultExpandAllRows 不生效\n 'expandedRowKeys' in (options ?? {}) || 'defaultExpandedRowKeys' in (options ?? {})\n ? false\n : defaultExpandAllRows,\n )\n const defaultExpandKey = useShallowMemo((): readonly Key[] => {\n if (defaultExpandAll.current) {\n const expandKeys = dataSource.map((record, index): Key | null => {\n if (rowExpandableRecord[index]) {\n const key = (record as AnyObject)[rowKey as string] as string | number\n return key\n }\n return null\n })\n return expandKeys.filter((x) => x != null)\n }\n return []\n })\n\n const expansionKeys = useRef(new Set<Key>(defaultExpandedRowKeys ?? defaultExpandKey))\n const [expansion, setExpansion] = useControllableValue<readonly Key[]>(\n options ?? {},\n {\n trigger: 'onExpandedRowsChange',\n valuePropName: 'expandedRowKeys',\n defaultValue: defaultExpandedRowKeys ?? defaultExpandKey,\n },\n )\n\n const onUpdateExpansion = useStableFn((rowData: T, shouldExpand?: boolean) => {\n const key = getRowKey(rowData, rowKey)\n expansionKeys.current.add(key)\n if (shouldExpand == null) {\n if (expansion.includes(key)) {\n setExpansion(expansion.filter((x) => x !== key))\n onExpand?.(false, rowData)\n } else {\n setExpansion([...expansion, key])\n onExpand?.(true, rowData)\n }\n } else if (shouldExpand) {\n setExpansion([...expansion, key])\n onExpand?.(true, rowData)\n } else {\n setExpansion(expansion.filter((x) => x !== key))\n onExpand?.(false, rowData)\n }\n })\n\n const isFixed = isValidFixed(fixed)\n\n const renderRow: MiddlewareRenderRow = useCallback((children, args) => {\n const { rowData, rowIndex, columnDescriptor } = args\n\n const isExpandable = rowExpandableRecord[rowIndex]\n if (isExpandable) {\n const key = getRowKey(rowData as T, rowKey)\n const isExpanded: boolean | undefined = expansion.includes(key)\n const isRendered = expansionKeys.current.has(key)\n\n let className = ''\n if (typeof expandedRowClassName === 'string') {\n className = expandedRowClassName\n } else if (typeof expandedRowClassName === 'function') {\n className = expandedRowClassName(rowData as T, rowIndex, 0)\n }\n\n return (\n <>\n {children}\n {isRendered && (\n <ExpandRow\n className={className}\n rowIndex={rowIndex}\n isExpanded={isExpanded}\n colSpan={columnDescriptor.length}\n fixed={isFixed}\n >\n {expandedRowRender?.(rowData as T, rowIndex, 0, isExpanded)}\n </ExpandRow>\n )}\n </>\n )\n }\n return children\n }, [\n isFixed,\n rowExpandableRecord,\n rowKey,\n expansion,\n expandedRowClassName,\n expandedRowRender,\n ])\n\n const columns = useMemo((): ColumnType<T>[] => {\n if (!showExpandColumn) {\n return rawColumns\n }\n\n return [\n {\n ...extraColumnProps,\n key: EXPANSION_COLUMN_KEY,\n title: columnTitle,\n width: columnWidth,\n fixed,\n render(_value, record, index) {\n const key = getRowKey(record, rowKey)\n\n const expandable = rowExpandableRecord[index] ?? false\n const expanded = expansion.includes(key)\n\n if (typeof expandIcon === 'function') {\n return expandIcon({\n expandable,\n expanded,\n record,\n prefixCls: 'virtual-table',\n onExpand: (rowData: T, _e) => {\n onUpdateExpansion(rowData)\n },\n })\n }\n\n if (!expandable) {\n return null\n }\n\n return (\n <button\n className={clsx(\n 'virtual-table-row-expand-icon',\n expanded\n ? 'virtual-table-row-expand-icon-expanded'\n : 'virtual-table-row-expand-icon-collapsed',\n )}\n type=\"button\"\n aria-label={expanded ? '关闭行' : '展开行'}\n aria-expanded={expanded}\n onClick={() => {\n onUpdateExpansion(record, !expanded)\n }}\n />\n )\n },\n onHeaderCell() {\n return { className: 'virtual-table-expand-column' }\n },\n },\n ...rawColumns,\n ]\n }, [\n showExpandColumn,\n columnTitle,\n columnWidth,\n fixed,\n rawColumns,\n rowKey,\n rowExpandableRecord,\n expansion,\n expandIcon,\n onUpdateExpansion,\n extraColumnProps,\n ])\n\n const onRow: OnRowType<T> = useCallback((record, index) => {\n if (rowExpandableRecord[index]) {\n return {\n onClick: (e) => {\n e.stopPropagation()\n onUpdateExpansion(record)\n },\n }\n }\n return {}\n }, [rowExpandableRecord, onUpdateExpansion])\n\n if (disablePlugin) {\n return ctx\n }\n\n return {\n ...ctx,\n columns,\n renderRow,\n onRow: !expandRowByClick ? undefined : onRow,\n }\n}\n\n/* eslint max-len: [\"error\", { \"code\": 120 }] */\nexport const tableExpandable = createMiddleware(useTableExpandable)\n"],"names":["ExpandRow","props","className","style","rowIndex","isExpanded","colSpan","children","fixed","updateRowHeight","useTableRowManager","tableWidth","useContainerSize","_jsx","clsx","display","undefined","ref","node","offsetHeight","width","EXPANSION_COLUMN_KEY","isExpansionColumn","column","key","useTableExpandable","ctx","options","disablePlugin","rowKey","columns","rawColumns","dataSource","defaultExpandedRowKeys","expandedRowRender","columnTitle","expandRowByClick","expandIcon","onExpand","defaultExpandAllRows","showExpandColumn","expandedRowClassName","rowExpandable","columnWidth","extraColumnProps","_rowExpandableValue","useMemo","map","row","rowExpandableRecord","useShallowMemo","defaultExpandAll","useRef","defaultExpandKey","current","expandKeys","record","index","filter","x","expansionKeys","Set","expansion","setExpansion","useControllableValue","trigger","valuePropName","defaultValue","onUpdateExpansion","useStableFn","rowData","shouldExpand","getRowKey","add","includes","isFixed","isValidFixed","renderRow","useCallback","args","columnDescriptor","isExpandable","isRendered","has","_jsxs","length","title","render","_value","expandable","expanded","prefixCls","_e","type","onClick","onHeaderCell","onRow","e","stopPropagation","tableExpandable","createMiddleware"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { useMergedRef, createMiddleware, useShallowMemo, useStableFn } from '@are-visual/virtual-table';
2
+ import { useMergedRef, createMiddleware, getRowKey, useShallowMemo, useStableFn } from '@are-visual/virtual-table';
3
3
  import { useControllableValue } from '@are-visual/virtual-table/middleware/utils/useControllableValue';
4
4
  import { forwardRef, useRef, useEffect, createElement, useCallback, useMemo, isValidElement } from 'react';
5
5
  import clsx from 'clsx';
@@ -44,9 +44,9 @@ const EMPTY_ARR = [];
44
44
  function useSelection(ctx, options) {
45
45
  const disablePlugin = options == null;
46
46
  const {
47
- columns: rawColumns
47
+ columns: rawColumns,
48
+ rowKey
48
49
  } = ctx;
49
- const rowKey = ctx.rowKey;
50
50
  const dataSource = disablePlugin ? EMPTY_ARR : ctx.dataSource;
51
51
  const {
52
52
  defaultSelectedRowKeys,
@@ -74,7 +74,7 @@ function useSelection(ctx, options) {
74
74
  trigger: 'onChange'
75
75
  });
76
76
  const rowClassName = useCallback(record => {
77
- const key = record[rowKey];
77
+ const key = getRowKey(record, rowKey);
78
78
  const checked = selectedRowKeys.includes(key);
79
79
  return checked ? 'virtual-table-row-selected' : '';
80
80
  }, [rowKey, selectedRowKeys]);
@@ -86,7 +86,7 @@ function useSelection(ctx, options) {
86
86
  });
87
87
  // 当有某一行数据 Checkbox disabled 时,过滤它
88
88
  const allKeys = useShallowMemo(() => {
89
- return dataSource.filter((_data, index) => !selectionPropsList[index].disabled).map(x => x[rowKey]);
89
+ return dataSource.filter((_data, index) => !selectionPropsList[index].disabled).map(x => getRowKey(x, rowKey));
90
90
  });
91
91
  // preserveSelectedRowKeys=true 时,勾选过的数据,都会在这里存一份
92
92
  const cache = useRef(new Map());
@@ -94,7 +94,7 @@ function useSelection(ctx, options) {
94
94
  const getRowsByKeys = useStableFn(keys => {
95
95
  const result = [];
96
96
  keys.forEach(key => {
97
- let value = dataSource.find(row => row[rowKey] === key);
97
+ let value = dataSource.find(row => getRowKey(row, rowKey) === key);
98
98
  // 在 cache 中还是找不到对应的数据,就放弃寻找,填入一个 undefined(与 antd 默认表现一致)
99
99
  // 场景: selectedRowKeys 中有一个在 dataSource 中不存在的 key,用这个 key 是找不到数据的
100
100
  if (value == null && preserveSelectedRowKeys) {
@@ -213,7 +213,7 @@ function useSelection(ctx, options) {
213
213
  fixed: fixed ? 'left' : undefined,
214
214
  key: SELECTION_COLUMN_KEY,
215
215
  render(_value, record, index) {
216
- const key = record[rowKey];
216
+ const key = getRowKey(record, rowKey);
217
217
  const checked = selectedRowKeys.includes(key);
218
218
  const extraProps = selectionPropsList[index];
219
219
  const updateCache = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../packages/virtual-table/src/middleware/selection/selection.tsx","../../../../packages/virtual-table/src/middleware/selection/table-selection.tsx"],"sourcesContent":["import type { ComponentType, DetailedHTMLProps, ForwardedRef, InputHTMLAttributes } from 'react'\nimport type { SelectionProps as BaseProps } from './types'\nimport { useMergedRef } from '@are-visual/virtual-table'\nimport clsx from 'clsx'\nimport { createElement, forwardRef, useEffect, useRef } from 'react'\n\ntype InputProps = DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>\nexport interface SelectionProps extends BaseProps,\n Omit<InputProps, 'type' | 'onChange' | 'checked' | 'value' | 'defaultChecked' | 'defaultValue' | 'disabled'> {\n component?: ComponentType<BaseProps>\n}\n\nfunction Selection(props: SelectionProps, ref: ForwardedRef<HTMLInputElement>) {\n const {\n className,\n multiple,\n indeterminate,\n value = false,\n onChange,\n component,\n ...rest\n } = props\n\n const isCustomComponent = component != null\n\n const inputNode = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n if (isCustomComponent) return\n const input = inputNode.current\n if (input == null) return\n input.indeterminate = !!indeterminate\n }, [isCustomComponent, indeterminate])\n\n const mergedRef = useMergedRef(inputNode, ref)\n\n if (isCustomComponent) {\n return createElement(component, props)\n }\n\n return (\n <input\n {...rest}\n ref={mergedRef}\n className={clsx('virtual-table-selection', className)}\n type={multiple ? 'checkbox' : 'radio'}\n checked={value}\n onChange={(e) => {\n onChange?.(e.target.checked, e.nativeEvent)\n }}\n />\n )\n}\n\nexport default forwardRef(Selection)\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { AnyObject, ColumnType, MiddlewareContext, MiddlewareResult } from '@are-visual/virtual-table'\nimport type { Key, ReactNode } from 'react'\nimport type { SelectionColumnTitleProps, TableRowSelection } from './types'\n\nimport { createMiddleware, useShallowMemo, useStableFn } from '@are-visual/virtual-table'\nimport { useControllableValue } from '@are-visual/virtual-table/middleware/utils/useControllableValue'\nimport { isValidElement, useCallback, useMemo, useRef } from 'react'\nimport Selection from './selection'\n\nexport const SELECTION_COLUMN_KEY = 'VirtualTable.SELECTION_COLUMN'\n\nconst EMPTY_ARR: AnyObject[] = []\n\nexport function isSelectionColumn<T = any>(column: ColumnType<T>) {\n return column.key === SELECTION_COLUMN_KEY\n}\n\nfunction useSelection<T = any>(\n ctx: MiddlewareContext<T>,\n options?: TableRowSelection<T>,\n): MiddlewareResult<T> {\n const disablePlugin = options == null\n\n const { columns: rawColumns } = ctx\n const rowKey = ctx.rowKey as string\n const dataSource = disablePlugin ? EMPTY_ARR : (ctx.dataSource as AnyObject[])\n\n const {\n defaultSelectedRowKeys,\n\n component,\n preserveSelectedRowKeys,\n multiple = true,\n getSelectionProps,\n onSelect,\n hideSelectAll = false,\n fixed,\n columnWidth,\n columnTitle,\n\n extraColumnProps,\n\n // checkStrictly 属性使用场景:\n // const dataSource = [{ key: 1, name: \"张三\", children: [{ key: 1.1, name: \"李四\" }] }]\n // dataSource 中含有 children 属性,antd Table 组件会显示为“树形”结构,Table 左侧会新增一个展开按钮,点击后会显示“李四”的数据\n // 勾选“张三”的时候,会把对应 children 全部选中。如果 checkStrictly=false 则不选中。\n // checkStrictly: _checkStrictly,\n\n renderCell,\n onCell,\n } = options ?? {}\n\n const [selectedRowKeys = [], setSelectedRowKeys] = useControllableValue<Key[]>(\n options ?? {},\n {\n defaultValue: defaultSelectedRowKeys,\n valuePropName: 'selectedRowKeys',\n trigger: 'onChange',\n },\n )\n\n const rowClassName = useCallback((record: T) => {\n const key = (record as AnyObject)[rowKey] as Key\n const checked = selectedRowKeys.includes(key)\n return checked ? 'virtual-table-row-selected' : ''\n }, [rowKey, selectedRowKeys])\n\n const selectionPropsList = useShallowMemo(() => {\n return dataSource.map((row) => {\n if (!getSelectionProps) return {}\n return getSelectionProps(row as T)\n })\n })\n\n // 当有某一行数据 Checkbox disabled 时,过滤它\n const allKeys: Key[] = useShallowMemo(() => {\n return dataSource\n .filter((_data, index) => !selectionPropsList[index].disabled)\n .map((x) => x[rowKey] as Key)\n })\n\n // preserveSelectedRowKeys=true 时,勾选过的数据,都会在这里存一份\n const cache = useRef(new Map<Key, T>())\n\n const allDisabled = !selectionPropsList.some((item) => !item.disabled)\n\n const getRowsByKeys = useStableFn((keys: Key[]) => {\n const result: (T | undefined)[] = []\n keys.forEach((key) => {\n let value = dataSource.find((row) => row[rowKey] === key) as T | undefined\n\n // 在 cache 中还是找不到对应的数据,就放弃寻找,填入一个 undefined(与 antd 默认表现一致)\n // 场景: selectedRowKeys 中有一个在 dataSource 中不存在的 key,用这个 key 是找不到数据的\n if (value == null && preserveSelectedRowKeys) {\n value = cache.current.get(key)\n }\n\n if (value == null && !preserveSelectedRowKeys) return\n\n result.push(value)\n })\n return result\n })\n\n const prevSelectedIndex = useRef<number | null>(null)\n\n const mergeColumns = useMemo(() => {\n if (disablePlugin) {\n return rawColumns\n }\n\n const isSelected = selectedRowKeys.length > 0\n const indeterminate = isSelected && allKeys.length > selectedRowKeys.length\n const isSelectedAll = isSelected\n ? allKeys.length > 0 && allKeys.every((key) => selectedRowKeys.includes(key))\n : false\n\n const shakeDeadKeys = (keys: Key[]) => {\n const unionKeys = new Set(keys)\n if (!preserveSelectedRowKeys) {\n return Array.from(unionKeys).filter((key) => {\n return allKeys.includes(key)\n })\n }\n return Array.from(unionKeys)\n }\n\n const multipleSelect = (currentIndex: number, nextChecked: boolean) => {\n const index = prevSelectedIndex.current ?? currentIndex\n const startIndex = Math.min(index, currentIndex)\n const endIndex = Math.max(index, currentIndex)\n const rangeKeys = allKeys.slice(startIndex, endIndex + 1)\n const shouldSelected = rangeKeys.some((rangeKey) => !selectedRowKeys.includes(rangeKey))\n prevSelectedIndex.current = shouldSelected ? endIndex : null\n const keys = nextChecked\n ? shakeDeadKeys([...selectedRowKeys, ...rangeKeys])\n : shakeDeadKeys(selectedRowKeys.filter((x) => !rangeKeys.includes(x)))\n const rows = getRowsByKeys(keys)\n setSelectedRowKeys(keys, rows, { type: 'multiple' })\n }\n\n const onSelectAll = () => {\n const keys = shakeDeadKeys([...selectedRowKeys, ...allKeys])\n const rows = getRowsByKeys(keys)\n setSelectedRowKeys(keys, rows, { type: 'all' })\n }\n\n const onSelectInvert = () => {\n const keys = allKeys.filter((key) => !selectedRowKeys.includes(key))\n const rows = getRowsByKeys(keys)\n setSelectedRowKeys(keys, rows, { type: 'invert' })\n }\n\n const onClearAll = () => {\n setSelectedRowKeys([], [], { type: 'none' })\n }\n\n const columnTitleProps: SelectionColumnTitleProps = {\n indeterminate,\n value: isSelectedAll,\n disabled: allDisabled,\n multiple,\n onChange: (checked) => {\n if (checked) {\n onSelectAll()\n } else {\n onClearAll()\n }\n },\n onClear: onClearAll,\n onSelectAll,\n onSelectInvert,\n allKeys,\n }\n\n const onCreateTitle = () => {\n if (!multiple) {\n if (isValidElement(columnTitle)) {\n return columnTitle\n }\n if (typeof columnTitle === 'function') {\n return columnTitle(undefined, columnTitleProps)\n }\n return null\n }\n\n let title: ReactNode = (\n <div className=\"virtual-table-selection\">\n <Selection\n component={component}\n multiple={multiple}\n value={isSelectedAll}\n indeterminate={indeterminate}\n disabled={allDisabled}\n onChange={(checked) => {\n if (checked) {\n onSelectAll()\n } else {\n onClearAll()\n }\n }}\n />\n </div>\n )\n if (isValidElement(columnTitle)) {\n title = columnTitle\n } else if (typeof columnTitle === 'function') {\n title = columnTitle(title, columnTitleProps)\n }\n return title\n }\n\n const column: ColumnType<T> = {\n ...extraColumnProps,\n title: hideSelectAll ? undefined : onCreateTitle(),\n width: columnWidth ?? 32,\n align: 'center',\n fixed: fixed ? 'left' : undefined,\n key: SELECTION_COLUMN_KEY,\n render(_value, record, index) {\n const key = (record as AnyObject)[rowKey] as Key\n const checked = selectedRowKeys.includes(key)\n const extraProps = selectionPropsList[index]\n\n const updateCache = () => {\n if (preserveSelectedRowKeys) {\n cache.current.set(key, record)\n }\n }\n\n const node = (\n <Selection\n {...extraProps}\n component={component}\n value={checked}\n multiple={multiple}\n onChange={(nextChecked, e) => {\n updateCache()\n if (multiple && (e as PointerEvent).shiftKey) {\n multipleSelect(index, nextChecked)\n return\n }\n if (nextChecked) {\n prevSelectedIndex.current = index\n } else {\n prevSelectedIndex.current = null\n }\n let keys: Key[] = [key]\n if (multiple) {\n keys = nextChecked ? shakeDeadKeys([...selectedRowKeys, key]) : shakeDeadKeys(selectedRowKeys.filter((x) => x !== key))\n }\n const rows = getRowsByKeys(keys)\n // @ts-expect-error rows 并不是安全的 T[] 类型,因为有 preserveSelectedRowKeys 功能存在,在此处只能忽略类型错误\n onSelect?.(record, nextChecked, rows, e)\n setSelectedRowKeys(keys, rows, { type: 'single' })\n }}\n />\n )\n\n if (typeof renderCell === 'function') {\n return renderCell(checked, record, index, node)\n }\n\n return node\n },\n onCell,\n onHeaderCell() {\n return { className: 'virtual-table-selection-column' }\n },\n }\n\n return [column, ...rawColumns]\n }, [\n disablePlugin,\n extraColumnProps,\n allDisabled,\n allKeys,\n columnTitle,\n columnWidth,\n fixed,\n getRowsByKeys,\n hideSelectAll,\n onCell,\n onSelect,\n preserveSelectedRowKeys,\n rawColumns,\n renderCell,\n rowKey,\n selectedRowKeys,\n selectionPropsList,\n setSelectedRowKeys,\n multiple,\n component,\n ])\n\n if (disablePlugin) {\n return ctx\n }\n\n return {\n ...ctx,\n rowClassName,\n columns: mergeColumns,\n }\n}\n\n/**\n * 为 Table 实现多选、单选功能,不传入 options 则是禁用插件\n */\nexport const tableSelection = createMiddleware(useSelection)\n"],"names":["Selection","props","ref","className","multiple","indeterminate","value","onChange","component","rest","isCustomComponent","inputNode","useRef","useEffect","input","current","mergedRef","useMergedRef","createElement","_jsx","clsx","type","checked","e","target","nativeEvent","forwardRef","SELECTION_COLUMN_KEY","EMPTY_ARR","useSelection","ctx","options","disablePlugin","columns","rawColumns","rowKey","dataSource","defaultSelectedRowKeys","preserveSelectedRowKeys","getSelectionProps","onSelect","hideSelectAll","fixed","columnWidth","columnTitle","extraColumnProps","renderCell","onCell","selectedRowKeys","setSelectedRowKeys","useControllableValue","defaultValue","valuePropName","trigger","rowClassName","useCallback","record","key","includes","selectionPropsList","useShallowMemo","map","row","allKeys","filter","_data","index","disabled","x","cache","Map","allDisabled","some","item","getRowsByKeys","useStableFn","keys","result","forEach","find","get","push","prevSelectedIndex","mergeColumns","useMemo","isSelected","length","isSelectedAll","every","shakeDeadKeys","unionKeys","Set","Array","from","multipleSelect","currentIndex","nextChecked","startIndex","Math","min","endIndex","max","rangeKeys","slice","shouldSelected","rangeKey","rows","onSelectAll","onSelectInvert","onClearAll","columnTitleProps","onClear","onCreateTitle","isValidElement","undefined","title","children","column","width","align","render","_value","extraProps","updateCache","set","node","shiftKey","onHeaderCell","tableSelection","createMiddleware"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../packages/virtual-table/src/middleware/selection/selection.tsx","../../../../packages/virtual-table/src/middleware/selection/table-selection.tsx"],"sourcesContent":["import type { ComponentType, DetailedHTMLProps, ForwardedRef, InputHTMLAttributes } from 'react'\nimport type { SelectionProps as BaseProps } from './types'\nimport { useMergedRef } from '@are-visual/virtual-table'\nimport clsx from 'clsx'\nimport { createElement, forwardRef, useEffect, useRef } from 'react'\n\ntype InputProps = DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>\nexport interface SelectionProps extends BaseProps,\n Omit<InputProps, 'type' | 'onChange' | 'checked' | 'value' | 'defaultChecked' | 'defaultValue' | 'disabled'> {\n component?: ComponentType<BaseProps>\n}\n\nfunction Selection(props: SelectionProps, ref: ForwardedRef<HTMLInputElement>) {\n const {\n className,\n multiple,\n indeterminate,\n value = false,\n onChange,\n component,\n ...rest\n } = props\n\n const isCustomComponent = component != null\n\n const inputNode = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n if (isCustomComponent) return\n const input = inputNode.current\n if (input == null) return\n input.indeterminate = !!indeterminate\n }, [isCustomComponent, indeterminate])\n\n const mergedRef = useMergedRef(inputNode, ref)\n\n if (isCustomComponent) {\n return createElement(component, props)\n }\n\n return (\n <input\n {...rest}\n ref={mergedRef}\n className={clsx('virtual-table-selection', className)}\n type={multiple ? 'checkbox' : 'radio'}\n checked={value}\n onChange={(e) => {\n onChange?.(e.target.checked, e.nativeEvent)\n }}\n />\n )\n}\n\nexport default forwardRef(Selection)\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { AnyObject, ColumnType, MiddlewareContext, MiddlewareResult } from '@are-visual/virtual-table'\nimport type { Key, ReactNode } from 'react'\nimport type { SelectionColumnTitleProps, TableRowSelection } from './types'\n\nimport { createMiddleware, getRowKey, useShallowMemo, useStableFn } from '@are-visual/virtual-table'\nimport { useControllableValue } from '@are-visual/virtual-table/middleware/utils/useControllableValue'\nimport { isValidElement, useCallback, useMemo, useRef } from 'react'\nimport Selection from './selection'\n\nexport const SELECTION_COLUMN_KEY = 'VirtualTable.SELECTION_COLUMN'\n\nconst EMPTY_ARR: AnyObject[] = []\n\nexport function isSelectionColumn<T = any>(column: ColumnType<T>) {\n return column.key === SELECTION_COLUMN_KEY\n}\n\nfunction useSelection<T = any>(\n ctx: MiddlewareContext<T>,\n options?: TableRowSelection<T>,\n): MiddlewareResult<T> {\n const disablePlugin = options == null\n\n const { columns: rawColumns, rowKey } = ctx\n const dataSource = disablePlugin ? EMPTY_ARR as T[] : ctx.dataSource\n\n const {\n defaultSelectedRowKeys,\n\n component,\n preserveSelectedRowKeys,\n multiple = true,\n getSelectionProps,\n onSelect,\n hideSelectAll = false,\n fixed,\n columnWidth,\n columnTitle,\n\n extraColumnProps,\n\n // checkStrictly 属性使用场景:\n // const dataSource = [{ key: 1, name: \"张三\", children: [{ key: 1.1, name: \"李四\" }] }]\n // dataSource 中含有 children 属性,antd Table 组件会显示为“树形”结构,Table 左侧会新增一个展开按钮,点击后会显示“李四”的数据\n // 勾选“张三”的时候,会把对应 children 全部选中。如果 checkStrictly=false 则不选中。\n // checkStrictly: _checkStrictly,\n\n renderCell,\n onCell,\n } = options ?? {}\n\n const [selectedRowKeys = [], setSelectedRowKeys] = useControllableValue<Key[]>(\n options ?? {},\n {\n defaultValue: defaultSelectedRowKeys,\n valuePropName: 'selectedRowKeys',\n trigger: 'onChange',\n },\n )\n\n const rowClassName = useCallback((record: T) => {\n const key = getRowKey(record, rowKey)\n const checked = selectedRowKeys.includes(key)\n return checked ? 'virtual-table-row-selected' : ''\n }, [rowKey, selectedRowKeys])\n\n const selectionPropsList = useShallowMemo(() => {\n return dataSource.map((row) => {\n if (!getSelectionProps) return {}\n return getSelectionProps(row)\n })\n })\n\n // 当有某一行数据 Checkbox disabled 时,过滤它\n const allKeys: Key[] = useShallowMemo(() => {\n return dataSource\n .filter((_data, index) => !selectionPropsList[index].disabled)\n .map((x) => getRowKey(x, rowKey))\n })\n\n // preserveSelectedRowKeys=true 时,勾选过的数据,都会在这里存一份\n const cache = useRef(new Map<Key, T>())\n\n const allDisabled = !selectionPropsList.some((item) => !item.disabled)\n\n const getRowsByKeys = useStableFn((keys: Key[]) => {\n const result: (T | undefined)[] = []\n keys.forEach((key) => {\n let value = dataSource.find((row) => getRowKey(row, rowKey) === key)\n\n // 在 cache 中还是找不到对应的数据,就放弃寻找,填入一个 undefined(与 antd 默认表现一致)\n // 场景: selectedRowKeys 中有一个在 dataSource 中不存在的 key,用这个 key 是找不到数据的\n if (value == null && preserveSelectedRowKeys) {\n value = cache.current.get(key)\n }\n\n if (value == null && !preserveSelectedRowKeys) return\n\n result.push(value)\n })\n return result\n })\n\n const prevSelectedIndex = useRef<number | null>(null)\n\n const mergeColumns = useMemo(() => {\n if (disablePlugin) {\n return rawColumns\n }\n\n const isSelected = selectedRowKeys.length > 0\n const indeterminate = isSelected && allKeys.length > selectedRowKeys.length\n const isSelectedAll = isSelected\n ? allKeys.length > 0 && allKeys.every((key) => selectedRowKeys.includes(key))\n : false\n\n const shakeDeadKeys = (keys: Key[]) => {\n const unionKeys = new Set(keys)\n if (!preserveSelectedRowKeys) {\n return Array.from(unionKeys).filter((key) => {\n return allKeys.includes(key)\n })\n }\n return Array.from(unionKeys)\n }\n\n const multipleSelect = (currentIndex: number, nextChecked: boolean) => {\n const index = prevSelectedIndex.current ?? currentIndex\n const startIndex = Math.min(index, currentIndex)\n const endIndex = Math.max(index, currentIndex)\n const rangeKeys = allKeys.slice(startIndex, endIndex + 1)\n const shouldSelected = rangeKeys.some((rangeKey) => !selectedRowKeys.includes(rangeKey))\n prevSelectedIndex.current = shouldSelected ? endIndex : null\n const keys = nextChecked\n ? shakeDeadKeys([...selectedRowKeys, ...rangeKeys])\n : shakeDeadKeys(selectedRowKeys.filter((x) => !rangeKeys.includes(x)))\n const rows = getRowsByKeys(keys)\n setSelectedRowKeys(keys, rows, { type: 'multiple' })\n }\n\n const onSelectAll = () => {\n const keys = shakeDeadKeys([...selectedRowKeys, ...allKeys])\n const rows = getRowsByKeys(keys)\n setSelectedRowKeys(keys, rows, { type: 'all' })\n }\n\n const onSelectInvert = () => {\n const keys = allKeys.filter((key) => !selectedRowKeys.includes(key))\n const rows = getRowsByKeys(keys)\n setSelectedRowKeys(keys, rows, { type: 'invert' })\n }\n\n const onClearAll = () => {\n setSelectedRowKeys([], [], { type: 'none' })\n }\n\n const columnTitleProps: SelectionColumnTitleProps = {\n indeterminate,\n value: isSelectedAll,\n disabled: allDisabled,\n multiple,\n onChange: (checked) => {\n if (checked) {\n onSelectAll()\n } else {\n onClearAll()\n }\n },\n onClear: onClearAll,\n onSelectAll,\n onSelectInvert,\n allKeys,\n }\n\n const onCreateTitle = () => {\n if (!multiple) {\n if (isValidElement(columnTitle)) {\n return columnTitle\n }\n if (typeof columnTitle === 'function') {\n return columnTitle(undefined, columnTitleProps)\n }\n return null\n }\n\n let title: ReactNode = (\n <div className=\"virtual-table-selection\">\n <Selection\n component={component}\n multiple={multiple}\n value={isSelectedAll}\n indeterminate={indeterminate}\n disabled={allDisabled}\n onChange={(checked) => {\n if (checked) {\n onSelectAll()\n } else {\n onClearAll()\n }\n }}\n />\n </div>\n )\n if (isValidElement(columnTitle)) {\n title = columnTitle\n } else if (typeof columnTitle === 'function') {\n title = columnTitle(title, columnTitleProps)\n }\n return title\n }\n\n const column: ColumnType<T> = {\n ...extraColumnProps,\n title: hideSelectAll ? undefined : onCreateTitle(),\n width: columnWidth ?? 32,\n align: 'center',\n fixed: fixed ? 'left' : undefined,\n key: SELECTION_COLUMN_KEY,\n render(_value, record, index) {\n const key = getRowKey(record, rowKey)\n const checked = selectedRowKeys.includes(key)\n const extraProps = selectionPropsList[index]\n\n const updateCache = () => {\n if (preserveSelectedRowKeys) {\n cache.current.set(key, record)\n }\n }\n\n const node = (\n <Selection\n {...extraProps}\n component={component}\n value={checked}\n multiple={multiple}\n onChange={(nextChecked, e) => {\n updateCache()\n if (multiple && (e as PointerEvent).shiftKey) {\n multipleSelect(index, nextChecked)\n return\n }\n if (nextChecked) {\n prevSelectedIndex.current = index\n } else {\n prevSelectedIndex.current = null\n }\n let keys: Key[] = [key]\n if (multiple) {\n keys = nextChecked ? shakeDeadKeys([...selectedRowKeys, key]) : shakeDeadKeys(selectedRowKeys.filter((x) => x !== key))\n }\n const rows = getRowsByKeys(keys)\n // @ts-expect-error rows 并不是安全的 T[] 类型,因为有 preserveSelectedRowKeys 功能存在,在此处只能忽略类型错误\n onSelect?.(record, nextChecked, rows, e)\n setSelectedRowKeys(keys, rows, { type: 'single' })\n }}\n />\n )\n\n if (typeof renderCell === 'function') {\n return renderCell(checked, record, index, node)\n }\n\n return node\n },\n onCell,\n onHeaderCell() {\n return { className: 'virtual-table-selection-column' }\n },\n }\n\n return [column, ...rawColumns]\n }, [\n disablePlugin,\n extraColumnProps,\n allDisabled,\n allKeys,\n columnTitle,\n columnWidth,\n fixed,\n getRowsByKeys,\n hideSelectAll,\n onCell,\n onSelect,\n preserveSelectedRowKeys,\n rawColumns,\n renderCell,\n rowKey,\n selectedRowKeys,\n selectionPropsList,\n setSelectedRowKeys,\n multiple,\n component,\n ])\n\n if (disablePlugin) {\n return ctx\n }\n\n return {\n ...ctx,\n rowClassName,\n columns: mergeColumns,\n }\n}\n\n/**\n * 为 Table 实现多选、单选功能,不传入 options 则是禁用插件\n */\nexport const tableSelection = createMiddleware(useSelection)\n"],"names":["Selection","props","ref","className","multiple","indeterminate","value","onChange","component","rest","isCustomComponent","inputNode","useRef","useEffect","input","current","mergedRef","useMergedRef","createElement","_jsx","clsx","type","checked","e","target","nativeEvent","forwardRef","SELECTION_COLUMN_KEY","EMPTY_ARR","useSelection","ctx","options","disablePlugin","columns","rawColumns","rowKey","dataSource","defaultSelectedRowKeys","preserveSelectedRowKeys","getSelectionProps","onSelect","hideSelectAll","fixed","columnWidth","columnTitle","extraColumnProps","renderCell","onCell","selectedRowKeys","setSelectedRowKeys","useControllableValue","defaultValue","valuePropName","trigger","rowClassName","useCallback","record","key","getRowKey","includes","selectionPropsList","useShallowMemo","map","row","allKeys","filter","_data","index","disabled","x","cache","Map","allDisabled","some","item","getRowsByKeys","useStableFn","keys","result","forEach","find","get","push","prevSelectedIndex","mergeColumns","useMemo","isSelected","length","isSelectedAll","every","shakeDeadKeys","unionKeys","Set","Array","from","multipleSelect","currentIndex","nextChecked","startIndex","Math","min","endIndex","max","rangeKeys","slice","shouldSelected","rangeKey","rows","onSelectAll","onSelectInvert","onClearAll","columnTitleProps","onClear","onCreateTitle","isValidElement","undefined","title","children","column","width","align","render","_value","extraProps","updateCache","set","node","shiftKey","onHeaderCell","tableSelection","createMiddleware"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@are-visual/virtual-table",
3
- "version": "0.4.1",
3
+ "version": "0.5.0",
4
4
  "main": "./index.esm.js",
5
5
  "types": "./index.d.ts",
6
6
  "sideEffects": false,