@aimerthyr/virtual-table 1.1.0 → 1.1.1
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/CHANGELOG.md +6 -0
- package/README.md +5 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +14 -16
- package/dist/index.js +156 -149
- package/dist/index.js.map +1 -1
- package/dist/virtual-table.css +1 -1
- package/package.json +2 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../node_modules/.pnpm/@tanstack+table-core@8.21.3/node_modules/@tanstack/table-core/build/lib/index.mjs","../../../node_modules/.pnpm/@tanstack+vue-table@8.21.3_vue@3.5.29_typescript@5.9.3_/node_modules/@tanstack/vue-table/build/lib/index.mjs","../../../node_modules/.pnpm/@tanstack+virtual-core@3.13.19/node_modules/@tanstack/virtual-core/dist/esm/utils.js","../../../node_modules/.pnpm/@tanstack+virtual-core@3.13.19/node_modules/@tanstack/virtual-core/dist/esm/index.js","../../../node_modules/.pnpm/@tanstack+vue-virtual@3.13.19_vue@3.5.29_typescript@5.9.3_/node_modules/@tanstack/vue-virtual/dist/esm/index.js","../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/shared/ohash.D__AXeF1.mjs","../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/crypto/js/index.mjs","../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/index.mjs","../src/icons/ExpandIcon.vue","../src/components/BodyCell.vue","../src/icons/SorterIcon.vue","../src/icons/FilterIcon.vue","../../../node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/.pnpm/@floating-ui+core@1.7.4/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../node_modules/.pnpm/@floating-ui+dom@1.7.5/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../../node_modules/.pnpm/@floating-ui+vue@1.1.10_vue@3.5.29_typescript@5.9.3_/node_modules/@floating-ui/vue/dist/floating-ui.vue.mjs","../src/libs/VPopover.vue","../src/components/HeaderFilter.tsx","../src/components/HeaderCell.vue","../src/constant/index.ts","../src/hooks/useTheme.ts","../src/libs/VCheckbox.vue","../src/libs/VLoading/index.vue","../src/libs/VLoading/directive.ts","../src/icons/ArrowIcon.vue","../src/libs/VSelect.vue","../src/libs/VPagination.vue","../src/utils/index.ts","../src/index.vue"],"sourcesContent":["/**\n * table-core\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\n// type Person = {\n// firstName: string\n// lastName: string\n// age: number\n// visits: number\n// status: string\n// progress: number\n// createdAt: Date\n// nested: {\n// foo: [\n// {\n// bar: 'bar'\n// }\n// ]\n// bar: { subBar: boolean }[]\n// baz: {\n// foo: 'foo'\n// bar: {\n// baz: 'baz'\n// }\n// }\n// }\n// }\n\n// const test: DeepKeys<Person> = 'nested.foo.0.bar'\n// const test2: DeepKeys<Person> = 'nested.bar'\n\n// const helper = createColumnHelper<Person>()\n\n// helper.accessor('nested.foo', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.foo.0.bar', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.bar', {\n// cell: info => info.getValue(),\n// })\n\nfunction createColumnHelper() {\n return {\n accessor: (accessor, column) => {\n return typeof accessor === 'function' ? {\n ...column,\n accessorFn: accessor\n } : {\n ...column,\n accessorKey: accessor\n };\n },\n display: column => column,\n group: column => column\n };\n}\n\n// Is this type a tuple?\n\n// If this type is a tuple, what indices are allowed?\n\n///\n\nfunction functionalUpdate(updater, input) {\n return typeof updater === 'function' ? updater(input) : updater;\n}\nfunction noop() {\n //\n}\nfunction makeStateUpdater(key, instance) {\n return updater => {\n instance.setState(old => {\n return {\n ...old,\n [key]: functionalUpdate(updater, old[key])\n };\n });\n };\n}\nfunction isFunction(d) {\n return d instanceof Function;\n}\nfunction isNumberArray(d) {\n return Array.isArray(d) && d.every(val => typeof val === 'number');\n}\nfunction flattenBy(arr, getChildren) {\n const flat = [];\n const recurse = subArr => {\n subArr.forEach(item => {\n flat.push(item);\n const children = getChildren(item);\n if (children != null && children.length) {\n recurse(children);\n }\n });\n };\n recurse(arr);\n return flat;\n}\nfunction memo(getDeps, fn, opts) {\n let deps = [];\n let result;\n return depArgs => {\n let depTime;\n if (opts.key && opts.debug) depTime = Date.now();\n const newDeps = getDeps(depArgs);\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n let resultTime;\n if (opts.key && opts.debug) resultTime = Date.now();\n result = fn(...newDeps);\n opts == null || opts.onChange == null || opts.onChange(result);\n if (opts.key && opts.debug) {\n if (opts != null && opts.debug()) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n const pad = (str, num) => {\n str = String(str);\n while (str.length < num) {\n str = ' ' + str;\n }\n return str;\n };\n console.info(`%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`, `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120))}deg 100% 31%);`, opts == null ? void 0 : opts.key);\n }\n }\n return result;\n };\n}\nfunction getMemoOptions(tableOptions, debugLevel, key, onChange) {\n return {\n debug: () => {\n var _tableOptions$debugAl;\n return (_tableOptions$debugAl = tableOptions == null ? void 0 : tableOptions.debugAll) != null ? _tableOptions$debugAl : tableOptions[debugLevel];\n },\n key: process.env.NODE_ENV === 'development' && key,\n onChange\n };\n}\n\nfunction createCell(table, row, column, columnId) {\n const getRenderValue = () => {\n var _cell$getValue;\n return (_cell$getValue = cell.getValue()) != null ? _cell$getValue : table.options.renderFallbackValue;\n };\n const cell = {\n id: `${row.id}_${column.id}`,\n row,\n column,\n getValue: () => row.getValue(columnId),\n renderValue: getRenderValue,\n getContext: memo(() => [table, column, row, cell], (table, column, row, cell) => ({\n table,\n column,\n row,\n cell: cell,\n getValue: cell.getValue,\n renderValue: cell.renderValue\n }), getMemoOptions(table.options, 'debugCells', 'cell.getContext'))\n };\n table._features.forEach(feature => {\n feature.createCell == null || feature.createCell(cell, column, row, table);\n }, {});\n return cell;\n}\n\nfunction createColumn(table, columnDef, depth, parent) {\n var _ref, _resolvedColumnDef$id;\n const defaultColumn = table._getDefaultColumnDef();\n const resolvedColumnDef = {\n ...defaultColumn,\n ...columnDef\n };\n const accessorKey = resolvedColumnDef.accessorKey;\n let id = (_ref = (_resolvedColumnDef$id = resolvedColumnDef.id) != null ? _resolvedColumnDef$id : accessorKey ? typeof String.prototype.replaceAll === 'function' ? accessorKey.replaceAll('.', '_') : accessorKey.replace(/\\./g, '_') : undefined) != null ? _ref : typeof resolvedColumnDef.header === 'string' ? resolvedColumnDef.header : undefined;\n let accessorFn;\n if (resolvedColumnDef.accessorFn) {\n accessorFn = resolvedColumnDef.accessorFn;\n } else if (accessorKey) {\n // Support deep accessor keys\n if (accessorKey.includes('.')) {\n accessorFn = originalRow => {\n let result = originalRow;\n for (const key of accessorKey.split('.')) {\n var _result;\n result = (_result = result) == null ? void 0 : _result[key];\n if (process.env.NODE_ENV !== 'production' && result === undefined) {\n console.warn(`\"${key}\" in deeply nested key \"${accessorKey}\" returned undefined.`);\n }\n }\n return result;\n };\n } else {\n accessorFn = originalRow => originalRow[resolvedColumnDef.accessorKey];\n }\n }\n if (!id) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(resolvedColumnDef.accessorFn ? `Columns require an id when using an accessorFn` : `Columns require an id when using a non-string header`);\n }\n throw new Error();\n }\n let column = {\n id: `${String(id)}`,\n accessorFn,\n parent: parent,\n depth,\n columnDef: resolvedColumnDef,\n columns: [],\n getFlatColumns: memo(() => [true], () => {\n var _column$columns;\n return [column, ...((_column$columns = column.columns) == null ? void 0 : _column$columns.flatMap(d => d.getFlatColumns()))];\n }, getMemoOptions(table.options, 'debugColumns', 'column.getFlatColumns')),\n getLeafColumns: memo(() => [table._getOrderColumnsFn()], orderColumns => {\n var _column$columns2;\n if ((_column$columns2 = column.columns) != null && _column$columns2.length) {\n let leafColumns = column.columns.flatMap(column => column.getLeafColumns());\n return orderColumns(leafColumns);\n }\n return [column];\n }, getMemoOptions(table.options, 'debugColumns', 'column.getLeafColumns'))\n };\n for (const feature of table._features) {\n feature.createColumn == null || feature.createColumn(column, table);\n }\n\n // Yes, we have to convert table to unknown, because we know more than the compiler here.\n return column;\n}\n\nconst debug = 'debugHeaders';\n//\n\nfunction createHeader(table, column, options) {\n var _options$id;\n const id = (_options$id = options.id) != null ? _options$id : column.id;\n let header = {\n id,\n column,\n index: options.index,\n isPlaceholder: !!options.isPlaceholder,\n placeholderId: options.placeholderId,\n depth: options.depth,\n subHeaders: [],\n colSpan: 0,\n rowSpan: 0,\n headerGroup: null,\n getLeafHeaders: () => {\n const leafHeaders = [];\n const recurseHeader = h => {\n if (h.subHeaders && h.subHeaders.length) {\n h.subHeaders.map(recurseHeader);\n }\n leafHeaders.push(h);\n };\n recurseHeader(header);\n return leafHeaders;\n },\n getContext: () => ({\n table,\n header: header,\n column\n })\n };\n table._features.forEach(feature => {\n feature.createHeader == null || feature.createHeader(header, table);\n });\n return header;\n}\nconst Headers = {\n createTable: table => {\n // Header Groups\n\n table.getHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n var _left$map$filter, _right$map$filter;\n const leftColumns = (_left$map$filter = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter : [];\n const rightColumns = (_right$map$filter = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter : [];\n const centerColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n const headerGroups = buildHeaderGroups(allColumns, [...leftColumns, ...centerColumns, ...rightColumns], table);\n return headerGroups;\n }, getMemoOptions(table.options, debug, 'getHeaderGroups'));\n table.getCenterHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n leafColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n return buildHeaderGroups(allColumns, leafColumns, table, 'center');\n }, getMemoOptions(table.options, debug, 'getCenterHeaderGroups'));\n table.getLeftHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left], (allColumns, leafColumns, left) => {\n var _left$map$filter2;\n const orderedLeafColumns = (_left$map$filter2 = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter2 : [];\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'left');\n }, getMemoOptions(table.options, debug, 'getLeftHeaderGroups'));\n table.getRightHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.right], (allColumns, leafColumns, right) => {\n var _right$map$filter2;\n const orderedLeafColumns = (_right$map$filter2 = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter2 : [];\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'right');\n }, getMemoOptions(table.options, debug, 'getRightHeaderGroups'));\n\n // Footer Groups\n\n table.getFooterGroups = memo(() => [table.getHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getFooterGroups'));\n table.getLeftFooterGroups = memo(() => [table.getLeftHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getLeftFooterGroups'));\n table.getCenterFooterGroups = memo(() => [table.getCenterHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getCenterFooterGroups'));\n table.getRightFooterGroups = memo(() => [table.getRightHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getRightFooterGroups'));\n\n // Flat Headers\n\n table.getFlatHeaders = memo(() => [table.getHeaderGroups()], headerGroups => {\n return headerGroups.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getFlatHeaders'));\n table.getLeftFlatHeaders = memo(() => [table.getLeftHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getLeftFlatHeaders'));\n table.getCenterFlatHeaders = memo(() => [table.getCenterHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getCenterFlatHeaders'));\n table.getRightFlatHeaders = memo(() => [table.getRightHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getRightFlatHeaders'));\n\n // Leaf Headers\n\n table.getCenterLeafHeaders = memo(() => [table.getCenterFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders;\n return !((_header$subHeaders = header.subHeaders) != null && _header$subHeaders.length);\n });\n }, getMemoOptions(table.options, debug, 'getCenterLeafHeaders'));\n table.getLeftLeafHeaders = memo(() => [table.getLeftFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders2;\n return !((_header$subHeaders2 = header.subHeaders) != null && _header$subHeaders2.length);\n });\n }, getMemoOptions(table.options, debug, 'getLeftLeafHeaders'));\n table.getRightLeafHeaders = memo(() => [table.getRightFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders3;\n return !((_header$subHeaders3 = header.subHeaders) != null && _header$subHeaders3.length);\n });\n }, getMemoOptions(table.options, debug, 'getRightLeafHeaders'));\n table.getLeafHeaders = memo(() => [table.getLeftHeaderGroups(), table.getCenterHeaderGroups(), table.getRightHeaderGroups()], (left, center, right) => {\n var _left$0$headers, _left$, _center$0$headers, _center$, _right$0$headers, _right$;\n return [...((_left$0$headers = (_left$ = left[0]) == null ? void 0 : _left$.headers) != null ? _left$0$headers : []), ...((_center$0$headers = (_center$ = center[0]) == null ? void 0 : _center$.headers) != null ? _center$0$headers : []), ...((_right$0$headers = (_right$ = right[0]) == null ? void 0 : _right$.headers) != null ? _right$0$headers : [])].map(header => {\n return header.getLeafHeaders();\n }).flat();\n }, getMemoOptions(table.options, debug, 'getLeafHeaders'));\n }\n};\nfunction buildHeaderGroups(allColumns, columnsToGroup, table, headerFamily) {\n var _headerGroups$0$heade, _headerGroups$;\n // Find the max depth of the columns:\n // build the leaf column row\n // build each buffer row going up\n // placeholder for non-existent level\n // real column for existing level\n\n let maxDepth = 0;\n const findMaxDepth = function (columns, depth) {\n if (depth === void 0) {\n depth = 1;\n }\n maxDepth = Math.max(maxDepth, depth);\n columns.filter(column => column.getIsVisible()).forEach(column => {\n var _column$columns;\n if ((_column$columns = column.columns) != null && _column$columns.length) {\n findMaxDepth(column.columns, depth + 1);\n }\n }, 0);\n };\n findMaxDepth(allColumns);\n let headerGroups = [];\n const createHeaderGroup = (headersToGroup, depth) => {\n // The header group we are creating\n const headerGroup = {\n depth,\n id: [headerFamily, `${depth}`].filter(Boolean).join('_'),\n headers: []\n };\n\n // The parent columns we're going to scan next\n const pendingParentHeaders = [];\n\n // Scan each column for parents\n headersToGroup.forEach(headerToGroup => {\n // What is the latest (last) parent column?\n\n const latestPendingParentHeader = [...pendingParentHeaders].reverse()[0];\n const isLeafHeader = headerToGroup.column.depth === headerGroup.depth;\n let column;\n let isPlaceholder = false;\n if (isLeafHeader && headerToGroup.column.parent) {\n // The parent header is new\n column = headerToGroup.column.parent;\n } else {\n // The parent header is repeated\n column = headerToGroup.column;\n isPlaceholder = true;\n }\n if (latestPendingParentHeader && (latestPendingParentHeader == null ? void 0 : latestPendingParentHeader.column) === column) {\n // This column is repeated. Add it as a sub header to the next batch\n latestPendingParentHeader.subHeaders.push(headerToGroup);\n } else {\n // This is a new header. Let's create it\n const header = createHeader(table, column, {\n id: [headerFamily, depth, column.id, headerToGroup == null ? void 0 : headerToGroup.id].filter(Boolean).join('_'),\n isPlaceholder,\n placeholderId: isPlaceholder ? `${pendingParentHeaders.filter(d => d.column === column).length}` : undefined,\n depth,\n index: pendingParentHeaders.length\n });\n\n // Add the headerToGroup as a subHeader of the new header\n header.subHeaders.push(headerToGroup);\n // Add the new header to the pendingParentHeaders to get grouped\n // in the next batch\n pendingParentHeaders.push(header);\n }\n headerGroup.headers.push(headerToGroup);\n headerToGroup.headerGroup = headerGroup;\n });\n headerGroups.push(headerGroup);\n if (depth > 0) {\n createHeaderGroup(pendingParentHeaders, depth - 1);\n }\n };\n const bottomHeaders = columnsToGroup.map((column, index) => createHeader(table, column, {\n depth: maxDepth,\n index\n }));\n createHeaderGroup(bottomHeaders, maxDepth - 1);\n headerGroups.reverse();\n\n // headerGroups = headerGroups.filter(headerGroup => {\n // return !headerGroup.headers.every(header => header.isPlaceholder)\n // })\n\n const recurseHeadersForSpans = headers => {\n const filteredHeaders = headers.filter(header => header.column.getIsVisible());\n return filteredHeaders.map(header => {\n let colSpan = 0;\n let rowSpan = 0;\n let childRowSpans = [0];\n if (header.subHeaders && header.subHeaders.length) {\n childRowSpans = [];\n recurseHeadersForSpans(header.subHeaders).forEach(_ref => {\n let {\n colSpan: childColSpan,\n rowSpan: childRowSpan\n } = _ref;\n colSpan += childColSpan;\n childRowSpans.push(childRowSpan);\n });\n } else {\n colSpan = 1;\n }\n const minChildRowSpan = Math.min(...childRowSpans);\n rowSpan = rowSpan + minChildRowSpan;\n header.colSpan = colSpan;\n header.rowSpan = rowSpan;\n return {\n colSpan,\n rowSpan\n };\n });\n };\n recurseHeadersForSpans((_headerGroups$0$heade = (_headerGroups$ = headerGroups[0]) == null ? void 0 : _headerGroups$.headers) != null ? _headerGroups$0$heade : []);\n return headerGroups;\n}\n\nconst createRow = (table, id, original, rowIndex, depth, subRows, parentId) => {\n let row = {\n id,\n index: rowIndex,\n original,\n depth,\n parentId,\n _valuesCache: {},\n _uniqueValuesCache: {},\n getValue: columnId => {\n if (row._valuesCache.hasOwnProperty(columnId)) {\n return row._valuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.accessorFn)) {\n return undefined;\n }\n row._valuesCache[columnId] = column.accessorFn(row.original, rowIndex);\n return row._valuesCache[columnId];\n },\n getUniqueValues: columnId => {\n if (row._uniqueValuesCache.hasOwnProperty(columnId)) {\n return row._uniqueValuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.accessorFn)) {\n return undefined;\n }\n if (!column.columnDef.getUniqueValues) {\n row._uniqueValuesCache[columnId] = [row.getValue(columnId)];\n return row._uniqueValuesCache[columnId];\n }\n row._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(row.original, rowIndex);\n return row._uniqueValuesCache[columnId];\n },\n renderValue: columnId => {\n var _row$getValue;\n return (_row$getValue = row.getValue(columnId)) != null ? _row$getValue : table.options.renderFallbackValue;\n },\n subRows: subRows != null ? subRows : [],\n getLeafRows: () => flattenBy(row.subRows, d => d.subRows),\n getParentRow: () => row.parentId ? table.getRow(row.parentId, true) : undefined,\n getParentRows: () => {\n let parentRows = [];\n let currentRow = row;\n while (true) {\n const parentRow = currentRow.getParentRow();\n if (!parentRow) break;\n parentRows.push(parentRow);\n currentRow = parentRow;\n }\n return parentRows.reverse();\n },\n getAllCells: memo(() => [table.getAllLeafColumns()], leafColumns => {\n return leafColumns.map(column => {\n return createCell(table, row, column, column.id);\n });\n }, getMemoOptions(table.options, 'debugRows', 'getAllCells')),\n _getAllCellsByColumnId: memo(() => [row.getAllCells()], allCells => {\n return allCells.reduce((acc, cell) => {\n acc[cell.column.id] = cell;\n return acc;\n }, {});\n }, getMemoOptions(table.options, 'debugRows', 'getAllCellsByColumnId'))\n };\n for (let i = 0; i < table._features.length; i++) {\n const feature = table._features[i];\n feature == null || feature.createRow == null || feature.createRow(row, table);\n }\n return row;\n};\n\n//\n\nconst ColumnFaceting = {\n createColumn: (column, table) => {\n column._getFacetedRowModel = table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, column.id);\n column.getFacetedRowModel = () => {\n if (!column._getFacetedRowModel) {\n return table.getPreFilteredRowModel();\n }\n return column._getFacetedRowModel();\n };\n column._getFacetedUniqueValues = table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, column.id);\n column.getFacetedUniqueValues = () => {\n if (!column._getFacetedUniqueValues) {\n return new Map();\n }\n return column._getFacetedUniqueValues();\n };\n column._getFacetedMinMaxValues = table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, column.id);\n column.getFacetedMinMaxValues = () => {\n if (!column._getFacetedMinMaxValues) {\n return undefined;\n }\n return column._getFacetedMinMaxValues();\n };\n }\n};\n\nconst includesString = (row, columnId, filterValue) => {\n var _filterValue$toString, _row$getValue;\n const search = filterValue == null || (_filterValue$toString = filterValue.toString()) == null ? void 0 : _filterValue$toString.toLowerCase();\n return Boolean((_row$getValue = row.getValue(columnId)) == null || (_row$getValue = _row$getValue.toString()) == null || (_row$getValue = _row$getValue.toLowerCase()) == null ? void 0 : _row$getValue.includes(search));\n};\nincludesString.autoRemove = val => testFalsey(val);\nconst includesStringSensitive = (row, columnId, filterValue) => {\n var _row$getValue2;\n return Boolean((_row$getValue2 = row.getValue(columnId)) == null || (_row$getValue2 = _row$getValue2.toString()) == null ? void 0 : _row$getValue2.includes(filterValue));\n};\nincludesStringSensitive.autoRemove = val => testFalsey(val);\nconst equalsString = (row, columnId, filterValue) => {\n var _row$getValue3;\n return ((_row$getValue3 = row.getValue(columnId)) == null || (_row$getValue3 = _row$getValue3.toString()) == null ? void 0 : _row$getValue3.toLowerCase()) === (filterValue == null ? void 0 : filterValue.toLowerCase());\n};\nequalsString.autoRemove = val => testFalsey(val);\nconst arrIncludes = (row, columnId, filterValue) => {\n var _row$getValue4;\n return (_row$getValue4 = row.getValue(columnId)) == null ? void 0 : _row$getValue4.includes(filterValue);\n};\narrIncludes.autoRemove = val => testFalsey(val);\nconst arrIncludesAll = (row, columnId, filterValue) => {\n return !filterValue.some(val => {\n var _row$getValue5;\n return !((_row$getValue5 = row.getValue(columnId)) != null && _row$getValue5.includes(val));\n });\n};\narrIncludesAll.autoRemove = val => testFalsey(val) || !(val != null && val.length);\nconst arrIncludesSome = (row, columnId, filterValue) => {\n return filterValue.some(val => {\n var _row$getValue6;\n return (_row$getValue6 = row.getValue(columnId)) == null ? void 0 : _row$getValue6.includes(val);\n });\n};\narrIncludesSome.autoRemove = val => testFalsey(val) || !(val != null && val.length);\nconst equals = (row, columnId, filterValue) => {\n return row.getValue(columnId) === filterValue;\n};\nequals.autoRemove = val => testFalsey(val);\nconst weakEquals = (row, columnId, filterValue) => {\n return row.getValue(columnId) == filterValue;\n};\nweakEquals.autoRemove = val => testFalsey(val);\nconst inNumberRange = (row, columnId, filterValue) => {\n let [min, max] = filterValue;\n const rowValue = row.getValue(columnId);\n return rowValue >= min && rowValue <= max;\n};\ninNumberRange.resolveFilterValue = val => {\n let [unsafeMin, unsafeMax] = val;\n let parsedMin = typeof unsafeMin !== 'number' ? parseFloat(unsafeMin) : unsafeMin;\n let parsedMax = typeof unsafeMax !== 'number' ? parseFloat(unsafeMax) : unsafeMax;\n let min = unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin;\n let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax;\n if (min > max) {\n const temp = min;\n min = max;\n max = temp;\n }\n return [min, max];\n};\ninNumberRange.autoRemove = val => testFalsey(val) || testFalsey(val[0]) && testFalsey(val[1]);\n\n// Export\n\nconst filterFns = {\n includesString,\n includesStringSensitive,\n equalsString,\n arrIncludes,\n arrIncludesAll,\n arrIncludesSome,\n equals,\n weakEquals,\n inNumberRange\n};\n// Utils\n\nfunction testFalsey(val) {\n return val === undefined || val === null || val === '';\n}\n\n//\n\nconst ColumnFiltering = {\n getDefaultColumnDef: () => {\n return {\n filterFn: 'auto'\n };\n },\n getInitialState: state => {\n return {\n columnFilters: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnFiltersChange: makeStateUpdater('columnFilters', table),\n filterFromLeafRows: false,\n maxLeafRowFilterDepth: 100\n };\n },\n createColumn: (column, table) => {\n column.getAutoFilterFn = () => {\n const firstRow = table.getCoreRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'string') {\n return filterFns.includesString;\n }\n if (typeof value === 'number') {\n return filterFns.inNumberRange;\n }\n if (typeof value === 'boolean') {\n return filterFns.equals;\n }\n if (value !== null && typeof value === 'object') {\n return filterFns.equals;\n }\n if (Array.isArray(value)) {\n return filterFns.arrIncludes;\n }\n return filterFns.weakEquals;\n };\n column.getFilterFn = () => {\n var _table$options$filter, _table$options$filter2;\n return isFunction(column.columnDef.filterFn) ? column.columnDef.filterFn : column.columnDef.filterFn === 'auto' ? column.getAutoFilterFn() : // @ts-ignore\n (_table$options$filter = (_table$options$filter2 = table.options.filterFns) == null ? void 0 : _table$options$filter2[column.columnDef.filterFn]) != null ? _table$options$filter : filterFns[column.columnDef.filterFn];\n };\n column.getCanFilter = () => {\n var _column$columnDef$ena, _table$options$enable, _table$options$enable2;\n return ((_column$columnDef$ena = column.columnDef.enableColumnFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnFilters) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && !!column.accessorFn;\n };\n column.getIsFiltered = () => column.getFilterIndex() > -1;\n column.getFilterValue = () => {\n var _table$getState$colum;\n return (_table$getState$colum = table.getState().columnFilters) == null || (_table$getState$colum = _table$getState$colum.find(d => d.id === column.id)) == null ? void 0 : _table$getState$colum.value;\n };\n column.getFilterIndex = () => {\n var _table$getState$colum2, _table$getState$colum3;\n return (_table$getState$colum2 = (_table$getState$colum3 = table.getState().columnFilters) == null ? void 0 : _table$getState$colum3.findIndex(d => d.id === column.id)) != null ? _table$getState$colum2 : -1;\n };\n column.setFilterValue = value => {\n table.setColumnFilters(old => {\n const filterFn = column.getFilterFn();\n const previousFilter = old == null ? void 0 : old.find(d => d.id === column.id);\n const newFilter = functionalUpdate(value, previousFilter ? previousFilter.value : undefined);\n\n //\n if (shouldAutoRemoveFilter(filterFn, newFilter, column)) {\n var _old$filter;\n return (_old$filter = old == null ? void 0 : old.filter(d => d.id !== column.id)) != null ? _old$filter : [];\n }\n const newFilterObj = {\n id: column.id,\n value: newFilter\n };\n if (previousFilter) {\n var _old$map;\n return (_old$map = old == null ? void 0 : old.map(d => {\n if (d.id === column.id) {\n return newFilterObj;\n }\n return d;\n })) != null ? _old$map : [];\n }\n if (old != null && old.length) {\n return [...old, newFilterObj];\n }\n return [newFilterObj];\n });\n };\n },\n createRow: (row, _table) => {\n row.columnFilters = {};\n row.columnFiltersMeta = {};\n },\n createTable: table => {\n table.setColumnFilters = updater => {\n const leafColumns = table.getAllLeafColumns();\n const updateFn = old => {\n var _functionalUpdate;\n return (_functionalUpdate = functionalUpdate(updater, old)) == null ? void 0 : _functionalUpdate.filter(filter => {\n const column = leafColumns.find(d => d.id === filter.id);\n if (column) {\n const filterFn = column.getFilterFn();\n if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {\n return false;\n }\n }\n return true;\n });\n };\n table.options.onColumnFiltersChange == null || table.options.onColumnFiltersChange(updateFn);\n };\n table.resetColumnFilters = defaultState => {\n var _table$initialState$c, _table$initialState;\n table.setColumnFilters(defaultState ? [] : (_table$initialState$c = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.columnFilters) != null ? _table$initialState$c : []);\n };\n table.getPreFilteredRowModel = () => table.getCoreRowModel();\n table.getFilteredRowModel = () => {\n if (!table._getFilteredRowModel && table.options.getFilteredRowModel) {\n table._getFilteredRowModel = table.options.getFilteredRowModel(table);\n }\n if (table.options.manualFiltering || !table._getFilteredRowModel) {\n return table.getPreFilteredRowModel();\n }\n return table._getFilteredRowModel();\n };\n }\n};\nfunction shouldAutoRemoveFilter(filterFn, value, column) {\n return (filterFn && filterFn.autoRemove ? filterFn.autoRemove(value, column) : false) || typeof value === 'undefined' || typeof value === 'string' && !value;\n}\n\nconst sum = (columnId, _leafRows, childRows) => {\n // It's faster to just add the aggregations together instead of\n // process leaf nodes individually\n return childRows.reduce((sum, next) => {\n const nextValue = next.getValue(columnId);\n return sum + (typeof nextValue === 'number' ? nextValue : 0);\n }, 0);\n};\nconst min = (columnId, _leafRows, childRows) => {\n let min;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null && (min > value || min === undefined && value >= value)) {\n min = value;\n }\n });\n return min;\n};\nconst max = (columnId, _leafRows, childRows) => {\n let max;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null && (max < value || max === undefined && value >= value)) {\n max = value;\n }\n });\n return max;\n};\nconst extent = (columnId, _leafRows, childRows) => {\n let min;\n let max;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n });\n return [min, max];\n};\nconst mean = (columnId, leafRows) => {\n let count = 0;\n let sum = 0;\n leafRows.forEach(row => {\n let value = row.getValue(columnId);\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n });\n if (count) return sum / count;\n return;\n};\nconst median = (columnId, leafRows) => {\n if (!leafRows.length) {\n return;\n }\n const values = leafRows.map(row => row.getValue(columnId));\n if (!isNumberArray(values)) {\n return;\n }\n if (values.length === 1) {\n return values[0];\n }\n const mid = Math.floor(values.length / 2);\n const nums = values.sort((a, b) => a - b);\n return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;\n};\nconst unique = (columnId, leafRows) => {\n return Array.from(new Set(leafRows.map(d => d.getValue(columnId))).values());\n};\nconst uniqueCount = (columnId, leafRows) => {\n return new Set(leafRows.map(d => d.getValue(columnId))).size;\n};\nconst count = (_columnId, leafRows) => {\n return leafRows.length;\n};\nconst aggregationFns = {\n sum,\n min,\n max,\n extent,\n mean,\n median,\n unique,\n uniqueCount,\n count\n};\n\n//\n\nconst ColumnGrouping = {\n getDefaultColumnDef: () => {\n return {\n aggregatedCell: props => {\n var _toString, _props$getValue;\n return (_toString = (_props$getValue = props.getValue()) == null || _props$getValue.toString == null ? void 0 : _props$getValue.toString()) != null ? _toString : null;\n },\n aggregationFn: 'auto'\n };\n },\n getInitialState: state => {\n return {\n grouping: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onGroupingChange: makeStateUpdater('grouping', table),\n groupedColumnMode: 'reorder'\n };\n },\n createColumn: (column, table) => {\n column.toggleGrouping = () => {\n table.setGrouping(old => {\n // Find any existing grouping for this column\n if (old != null && old.includes(column.id)) {\n return old.filter(d => d !== column.id);\n }\n return [...(old != null ? old : []), column.id];\n });\n };\n column.getCanGroup = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableGrouping) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableGrouping) != null ? _table$options$enable : true) && (!!column.accessorFn || !!column.columnDef.getGroupingValue);\n };\n column.getIsGrouped = () => {\n var _table$getState$group;\n return (_table$getState$group = table.getState().grouping) == null ? void 0 : _table$getState$group.includes(column.id);\n };\n column.getGroupedIndex = () => {\n var _table$getState$group2;\n return (_table$getState$group2 = table.getState().grouping) == null ? void 0 : _table$getState$group2.indexOf(column.id);\n };\n column.getToggleGroupingHandler = () => {\n const canGroup = column.getCanGroup();\n return () => {\n if (!canGroup) return;\n column.toggleGrouping();\n };\n };\n column.getAutoAggregationFn = () => {\n const firstRow = table.getCoreRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'number') {\n return aggregationFns.sum;\n }\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return aggregationFns.extent;\n }\n };\n column.getAggregationFn = () => {\n var _table$options$aggreg, _table$options$aggreg2;\n if (!column) {\n throw new Error();\n }\n return isFunction(column.columnDef.aggregationFn) ? column.columnDef.aggregationFn : column.columnDef.aggregationFn === 'auto' ? column.getAutoAggregationFn() : (_table$options$aggreg = (_table$options$aggreg2 = table.options.aggregationFns) == null ? void 0 : _table$options$aggreg2[column.columnDef.aggregationFn]) != null ? _table$options$aggreg : aggregationFns[column.columnDef.aggregationFn];\n };\n },\n createTable: table => {\n table.setGrouping = updater => table.options.onGroupingChange == null ? void 0 : table.options.onGroupingChange(updater);\n table.resetGrouping = defaultState => {\n var _table$initialState$g, _table$initialState;\n table.setGrouping(defaultState ? [] : (_table$initialState$g = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.grouping) != null ? _table$initialState$g : []);\n };\n table.getPreGroupedRowModel = () => table.getFilteredRowModel();\n table.getGroupedRowModel = () => {\n if (!table._getGroupedRowModel && table.options.getGroupedRowModel) {\n table._getGroupedRowModel = table.options.getGroupedRowModel(table);\n }\n if (table.options.manualGrouping || !table._getGroupedRowModel) {\n return table.getPreGroupedRowModel();\n }\n return table._getGroupedRowModel();\n };\n },\n createRow: (row, table) => {\n row.getIsGrouped = () => !!row.groupingColumnId;\n row.getGroupingValue = columnId => {\n if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n return row._groupingValuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.columnDef.getGroupingValue)) {\n return row.getValue(columnId);\n }\n row._groupingValuesCache[columnId] = column.columnDef.getGroupingValue(row.original);\n return row._groupingValuesCache[columnId];\n };\n row._groupingValuesCache = {};\n },\n createCell: (cell, column, row, table) => {\n cell.getIsGrouped = () => column.getIsGrouped() && column.id === row.groupingColumnId;\n cell.getIsPlaceholder = () => !cell.getIsGrouped() && column.getIsGrouped();\n cell.getIsAggregated = () => {\n var _row$subRows;\n return !cell.getIsGrouped() && !cell.getIsPlaceholder() && !!((_row$subRows = row.subRows) != null && _row$subRows.length);\n };\n }\n};\nfunction orderColumns(leafColumns, grouping, groupedColumnMode) {\n if (!(grouping != null && grouping.length) || !groupedColumnMode) {\n return leafColumns;\n }\n const nonGroupingColumns = leafColumns.filter(col => !grouping.includes(col.id));\n if (groupedColumnMode === 'remove') {\n return nonGroupingColumns;\n }\n const groupingColumns = grouping.map(g => leafColumns.find(col => col.id === g)).filter(Boolean);\n return [...groupingColumns, ...nonGroupingColumns];\n}\n\n//\n\nconst ColumnOrdering = {\n getInitialState: state => {\n return {\n columnOrder: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnOrderChange: makeStateUpdater('columnOrder', table)\n };\n },\n createColumn: (column, table) => {\n column.getIndex = memo(position => [_getVisibleLeafColumns(table, position)], columns => columns.findIndex(d => d.id === column.id), getMemoOptions(table.options, 'debugColumns', 'getIndex'));\n column.getIsFirstColumn = position => {\n var _columns$;\n const columns = _getVisibleLeafColumns(table, position);\n return ((_columns$ = columns[0]) == null ? void 0 : _columns$.id) === column.id;\n };\n column.getIsLastColumn = position => {\n var _columns;\n const columns = _getVisibleLeafColumns(table, position);\n return ((_columns = columns[columns.length - 1]) == null ? void 0 : _columns.id) === column.id;\n };\n },\n createTable: table => {\n table.setColumnOrder = updater => table.options.onColumnOrderChange == null ? void 0 : table.options.onColumnOrderChange(updater);\n table.resetColumnOrder = defaultState => {\n var _table$initialState$c;\n table.setColumnOrder(defaultState ? [] : (_table$initialState$c = table.initialState.columnOrder) != null ? _table$initialState$c : []);\n };\n table._getOrderColumnsFn = memo(() => [table.getState().columnOrder, table.getState().grouping, table.options.groupedColumnMode], (columnOrder, grouping, groupedColumnMode) => columns => {\n // Sort grouped columns to the start of the column list\n // before the headers are built\n let orderedColumns = [];\n\n // If there is no order, return the normal columns\n if (!(columnOrder != null && columnOrder.length)) {\n orderedColumns = columns;\n } else {\n const columnOrderCopy = [...columnOrder];\n\n // If there is an order, make a copy of the columns\n const columnsCopy = [...columns];\n\n // And make a new ordered array of the columns\n\n // Loop over the columns and place them in order into the new array\n while (columnsCopy.length && columnOrderCopy.length) {\n const targetColumnId = columnOrderCopy.shift();\n const foundIndex = columnsCopy.findIndex(d => d.id === targetColumnId);\n if (foundIndex > -1) {\n orderedColumns.push(columnsCopy.splice(foundIndex, 1)[0]);\n }\n }\n\n // If there are any columns left, add them to the end\n orderedColumns = [...orderedColumns, ...columnsCopy];\n }\n return orderColumns(orderedColumns, grouping, groupedColumnMode);\n }, getMemoOptions(table.options, 'debugTable', '_getOrderColumnsFn'));\n }\n};\n\n//\n\nconst getDefaultColumnPinningState = () => ({\n left: [],\n right: []\n});\nconst ColumnPinning = {\n getInitialState: state => {\n return {\n columnPinning: getDefaultColumnPinningState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnPinningChange: makeStateUpdater('columnPinning', table)\n };\n },\n createColumn: (column, table) => {\n column.pin = position => {\n const columnIds = column.getLeafColumns().map(d => d.id).filter(Boolean);\n table.setColumnPinning(old => {\n var _old$left3, _old$right3;\n if (position === 'right') {\n var _old$left, _old$right;\n return {\n left: ((_old$left = old == null ? void 0 : old.left) != null ? _old$left : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n right: [...((_old$right = old == null ? void 0 : old.right) != null ? _old$right : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds]\n };\n }\n if (position === 'left') {\n var _old$left2, _old$right2;\n return {\n left: [...((_old$left2 = old == null ? void 0 : old.left) != null ? _old$left2 : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds],\n right: ((_old$right2 = old == null ? void 0 : old.right) != null ? _old$right2 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n };\n }\n return {\n left: ((_old$left3 = old == null ? void 0 : old.left) != null ? _old$left3 : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n right: ((_old$right3 = old == null ? void 0 : old.right) != null ? _old$right3 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n };\n });\n };\n column.getCanPin = () => {\n const leafColumns = column.getLeafColumns();\n return leafColumns.some(d => {\n var _d$columnDef$enablePi, _ref, _table$options$enable;\n return ((_d$columnDef$enablePi = d.columnDef.enablePinning) != null ? _d$columnDef$enablePi : true) && ((_ref = (_table$options$enable = table.options.enableColumnPinning) != null ? _table$options$enable : table.options.enablePinning) != null ? _ref : true);\n });\n };\n column.getIsPinned = () => {\n const leafColumnIds = column.getLeafColumns().map(d => d.id);\n const {\n left,\n right\n } = table.getState().columnPinning;\n const isLeft = leafColumnIds.some(d => left == null ? void 0 : left.includes(d));\n const isRight = leafColumnIds.some(d => right == null ? void 0 : right.includes(d));\n return isLeft ? 'left' : isRight ? 'right' : false;\n };\n column.getPinnedIndex = () => {\n var _table$getState$colum, _table$getState$colum2;\n const position = column.getIsPinned();\n return position ? (_table$getState$colum = (_table$getState$colum2 = table.getState().columnPinning) == null || (_table$getState$colum2 = _table$getState$colum2[position]) == null ? void 0 : _table$getState$colum2.indexOf(column.id)) != null ? _table$getState$colum : -1 : 0;\n };\n },\n createRow: (row, table) => {\n row.getCenterVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allCells, left, right) => {\n const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n return allCells.filter(d => !leftAndRight.includes(d.column.id));\n }, getMemoOptions(table.options, 'debugRows', 'getCenterVisibleCells'));\n row.getLeftVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left], (allCells, left) => {\n const cells = (left != null ? left : []).map(columnId => allCells.find(cell => cell.column.id === columnId)).filter(Boolean).map(d => ({\n ...d,\n position: 'left'\n }));\n return cells;\n }, getMemoOptions(table.options, 'debugRows', 'getLeftVisibleCells'));\n row.getRightVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.right], (allCells, right) => {\n const cells = (right != null ? right : []).map(columnId => allCells.find(cell => cell.column.id === columnId)).filter(Boolean).map(d => ({\n ...d,\n position: 'right'\n }));\n return cells;\n }, getMemoOptions(table.options, 'debugRows', 'getRightVisibleCells'));\n },\n createTable: table => {\n table.setColumnPinning = updater => table.options.onColumnPinningChange == null ? void 0 : table.options.onColumnPinningChange(updater);\n table.resetColumnPinning = defaultState => {\n var _table$initialState$c, _table$initialState;\n return table.setColumnPinning(defaultState ? getDefaultColumnPinningState() : (_table$initialState$c = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.columnPinning) != null ? _table$initialState$c : getDefaultColumnPinningState());\n };\n table.getIsSomeColumnsPinned = position => {\n var _pinningState$positio;\n const pinningState = table.getState().columnPinning;\n if (!position) {\n var _pinningState$left, _pinningState$right;\n return Boolean(((_pinningState$left = pinningState.left) == null ? void 0 : _pinningState$left.length) || ((_pinningState$right = pinningState.right) == null ? void 0 : _pinningState$right.length));\n }\n return Boolean((_pinningState$positio = pinningState[position]) == null ? void 0 : _pinningState$positio.length);\n };\n table.getLeftLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left], (allColumns, left) => {\n return (left != null ? left : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n }, getMemoOptions(table.options, 'debugColumns', 'getLeftLeafColumns'));\n table.getRightLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.right], (allColumns, right) => {\n return (right != null ? right : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n }, getMemoOptions(table.options, 'debugColumns', 'getRightLeafColumns'));\n table.getCenterLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, left, right) => {\n const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n return allColumns.filter(d => !leftAndRight.includes(d.id));\n }, getMemoOptions(table.options, 'debugColumns', 'getCenterLeafColumns'));\n }\n};\n\nfunction safelyAccessDocument(_document) {\n return _document || (typeof document !== 'undefined' ? document : null);\n}\n\n//\n\n//\n\nconst defaultColumnSizing = {\n size: 150,\n minSize: 20,\n maxSize: Number.MAX_SAFE_INTEGER\n};\nconst getDefaultColumnSizingInfoState = () => ({\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n isResizingColumn: false,\n columnSizingStart: []\n});\nconst ColumnSizing = {\n getDefaultColumnDef: () => {\n return defaultColumnSizing;\n },\n getInitialState: state => {\n return {\n columnSizing: {},\n columnSizingInfo: getDefaultColumnSizingInfoState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n columnResizeMode: 'onEnd',\n columnResizeDirection: 'ltr',\n onColumnSizingChange: makeStateUpdater('columnSizing', table),\n onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', table)\n };\n },\n createColumn: (column, table) => {\n column.getSize = () => {\n var _column$columnDef$min, _ref, _column$columnDef$max;\n const columnSize = table.getState().columnSizing[column.id];\n return Math.min(Math.max((_column$columnDef$min = column.columnDef.minSize) != null ? _column$columnDef$min : defaultColumnSizing.minSize, (_ref = columnSize != null ? columnSize : column.columnDef.size) != null ? _ref : defaultColumnSizing.size), (_column$columnDef$max = column.columnDef.maxSize) != null ? _column$columnDef$max : defaultColumnSizing.maxSize);\n };\n column.getStart = memo(position => [position, _getVisibleLeafColumns(table, position), table.getState().columnSizing], (position, columns) => columns.slice(0, column.getIndex(position)).reduce((sum, column) => sum + column.getSize(), 0), getMemoOptions(table.options, 'debugColumns', 'getStart'));\n column.getAfter = memo(position => [position, _getVisibleLeafColumns(table, position), table.getState().columnSizing], (position, columns) => columns.slice(column.getIndex(position) + 1).reduce((sum, column) => sum + column.getSize(), 0), getMemoOptions(table.options, 'debugColumns', 'getAfter'));\n column.resetSize = () => {\n table.setColumnSizing(_ref2 => {\n let {\n [column.id]: _,\n ...rest\n } = _ref2;\n return rest;\n });\n };\n column.getCanResize = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableResizing) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnResizing) != null ? _table$options$enable : true);\n };\n column.getIsResizing = () => {\n return table.getState().columnSizingInfo.isResizingColumn === column.id;\n };\n },\n createHeader: (header, table) => {\n header.getSize = () => {\n let sum = 0;\n const recurse = header => {\n if (header.subHeaders.length) {\n header.subHeaders.forEach(recurse);\n } else {\n var _header$column$getSiz;\n sum += (_header$column$getSiz = header.column.getSize()) != null ? _header$column$getSiz : 0;\n }\n };\n recurse(header);\n return sum;\n };\n header.getStart = () => {\n if (header.index > 0) {\n const prevSiblingHeader = header.headerGroup.headers[header.index - 1];\n return prevSiblingHeader.getStart() + prevSiblingHeader.getSize();\n }\n return 0;\n };\n header.getResizeHandler = _contextDocument => {\n const column = table.getColumn(header.column.id);\n const canResize = column == null ? void 0 : column.getCanResize();\n return e => {\n if (!column || !canResize) {\n return;\n }\n e.persist == null || e.persist();\n if (isTouchStartEvent(e)) {\n // lets not respond to multiple touches (e.g. 2 or 3 fingers)\n if (e.touches && e.touches.length > 1) {\n return;\n }\n }\n const startSize = header.getSize();\n const columnSizingStart = header ? header.getLeafHeaders().map(d => [d.column.id, d.column.getSize()]) : [[column.id, column.getSize()]];\n const clientX = isTouchStartEvent(e) ? Math.round(e.touches[0].clientX) : e.clientX;\n const newColumnSizing = {};\n const updateOffset = (eventType, clientXPos) => {\n if (typeof clientXPos !== 'number') {\n return;\n }\n table.setColumnSizingInfo(old => {\n var _old$startOffset, _old$startSize;\n const deltaDirection = table.options.columnResizeDirection === 'rtl' ? -1 : 1;\n const deltaOffset = (clientXPos - ((_old$startOffset = old == null ? void 0 : old.startOffset) != null ? _old$startOffset : 0)) * deltaDirection;\n const deltaPercentage = Math.max(deltaOffset / ((_old$startSize = old == null ? void 0 : old.startSize) != null ? _old$startSize : 0), -0.999999);\n old.columnSizingStart.forEach(_ref3 => {\n let [columnId, headerSize] = _ref3;\n newColumnSizing[columnId] = Math.round(Math.max(headerSize + headerSize * deltaPercentage, 0) * 100) / 100;\n });\n return {\n ...old,\n deltaOffset,\n deltaPercentage\n };\n });\n if (table.options.columnResizeMode === 'onChange' || eventType === 'end') {\n table.setColumnSizing(old => ({\n ...old,\n ...newColumnSizing\n }));\n }\n };\n const onMove = clientXPos => updateOffset('move', clientXPos);\n const onEnd = clientXPos => {\n updateOffset('end', clientXPos);\n table.setColumnSizingInfo(old => ({\n ...old,\n isResizingColumn: false,\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n columnSizingStart: []\n }));\n };\n const contextDocument = safelyAccessDocument(_contextDocument);\n const mouseEvents = {\n moveHandler: e => onMove(e.clientX),\n upHandler: e => {\n contextDocument == null || contextDocument.removeEventListener('mousemove', mouseEvents.moveHandler);\n contextDocument == null || contextDocument.removeEventListener('mouseup', mouseEvents.upHandler);\n onEnd(e.clientX);\n }\n };\n const touchEvents = {\n moveHandler: e => {\n if (e.cancelable) {\n e.preventDefault();\n e.stopPropagation();\n }\n onMove(e.touches[0].clientX);\n return false;\n },\n upHandler: e => {\n var _e$touches$;\n contextDocument == null || contextDocument.removeEventListener('touchmove', touchEvents.moveHandler);\n contextDocument == null || contextDocument.removeEventListener('touchend', touchEvents.upHandler);\n if (e.cancelable) {\n e.preventDefault();\n e.stopPropagation();\n }\n onEnd((_e$touches$ = e.touches[0]) == null ? void 0 : _e$touches$.clientX);\n }\n };\n const passiveIfSupported = passiveEventSupported() ? {\n passive: false\n } : false;\n if (isTouchStartEvent(e)) {\n contextDocument == null || contextDocument.addEventListener('touchmove', touchEvents.moveHandler, passiveIfSupported);\n contextDocument == null || contextDocument.addEventListener('touchend', touchEvents.upHandler, passiveIfSupported);\n } else {\n contextDocument == null || contextDocument.addEventListener('mousemove', mouseEvents.moveHandler, passiveIfSupported);\n contextDocument == null || contextDocument.addEventListener('mouseup', mouseEvents.upHandler, passiveIfSupported);\n }\n table.setColumnSizingInfo(old => ({\n ...old,\n startOffset: clientX,\n startSize,\n deltaOffset: 0,\n deltaPercentage: 0,\n columnSizingStart,\n isResizingColumn: column.id\n }));\n };\n };\n },\n createTable: table => {\n table.setColumnSizing = updater => table.options.onColumnSizingChange == null ? void 0 : table.options.onColumnSizingChange(updater);\n table.setColumnSizingInfo = updater => table.options.onColumnSizingInfoChange == null ? void 0 : table.options.onColumnSizingInfoChange(updater);\n table.resetColumnSizing = defaultState => {\n var _table$initialState$c;\n table.setColumnSizing(defaultState ? {} : (_table$initialState$c = table.initialState.columnSizing) != null ? _table$initialState$c : {});\n };\n table.resetHeaderSizeInfo = defaultState => {\n var _table$initialState$c2;\n table.setColumnSizingInfo(defaultState ? getDefaultColumnSizingInfoState() : (_table$initialState$c2 = table.initialState.columnSizingInfo) != null ? _table$initialState$c2 : getDefaultColumnSizingInfoState());\n };\n table.getTotalSize = () => {\n var _table$getHeaderGroup, _table$getHeaderGroup2;\n return (_table$getHeaderGroup = (_table$getHeaderGroup2 = table.getHeaderGroups()[0]) == null ? void 0 : _table$getHeaderGroup2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getHeaderGroup : 0;\n };\n table.getLeftTotalSize = () => {\n var _table$getLeftHeaderG, _table$getLeftHeaderG2;\n return (_table$getLeftHeaderG = (_table$getLeftHeaderG2 = table.getLeftHeaderGroups()[0]) == null ? void 0 : _table$getLeftHeaderG2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getLeftHeaderG : 0;\n };\n table.getCenterTotalSize = () => {\n var _table$getCenterHeade, _table$getCenterHeade2;\n return (_table$getCenterHeade = (_table$getCenterHeade2 = table.getCenterHeaderGroups()[0]) == null ? void 0 : _table$getCenterHeade2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getCenterHeade : 0;\n };\n table.getRightTotalSize = () => {\n var _table$getRightHeader, _table$getRightHeader2;\n return (_table$getRightHeader = (_table$getRightHeader2 = table.getRightHeaderGroups()[0]) == null ? void 0 : _table$getRightHeader2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getRightHeader : 0;\n };\n }\n};\nlet passiveSupported = null;\nfunction passiveEventSupported() {\n if (typeof passiveSupported === 'boolean') return passiveSupported;\n let supported = false;\n try {\n const options = {\n get passive() {\n supported = true;\n return false;\n }\n };\n const noop = () => {};\n window.addEventListener('test', noop, options);\n window.removeEventListener('test', noop);\n } catch (err) {\n supported = false;\n }\n passiveSupported = supported;\n return passiveSupported;\n}\nfunction isTouchStartEvent(e) {\n return e.type === 'touchstart';\n}\n\n//\n\nconst ColumnVisibility = {\n getInitialState: state => {\n return {\n columnVisibility: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnVisibilityChange: makeStateUpdater('columnVisibility', table)\n };\n },\n createColumn: (column, table) => {\n column.toggleVisibility = value => {\n if (column.getCanHide()) {\n table.setColumnVisibility(old => ({\n ...old,\n [column.id]: value != null ? value : !column.getIsVisible()\n }));\n }\n };\n column.getIsVisible = () => {\n var _ref, _table$getState$colum;\n const childColumns = column.columns;\n return (_ref = childColumns.length ? childColumns.some(c => c.getIsVisible()) : (_table$getState$colum = table.getState().columnVisibility) == null ? void 0 : _table$getState$colum[column.id]) != null ? _ref : true;\n };\n column.getCanHide = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableHiding) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableHiding) != null ? _table$options$enable : true);\n };\n column.getToggleVisibilityHandler = () => {\n return e => {\n column.toggleVisibility == null || column.toggleVisibility(e.target.checked);\n };\n };\n },\n createRow: (row, table) => {\n row._getAllVisibleCells = memo(() => [row.getAllCells(), table.getState().columnVisibility], cells => {\n return cells.filter(cell => cell.column.getIsVisible());\n }, getMemoOptions(table.options, 'debugRows', '_getAllVisibleCells'));\n row.getVisibleCells = memo(() => [row.getLeftVisibleCells(), row.getCenterVisibleCells(), row.getRightVisibleCells()], (left, center, right) => [...left, ...center, ...right], getMemoOptions(table.options, 'debugRows', 'getVisibleCells'));\n },\n createTable: table => {\n const makeVisibleColumnsMethod = (key, getColumns) => {\n return memo(() => [getColumns(), getColumns().filter(d => d.getIsVisible()).map(d => d.id).join('_')], columns => {\n return columns.filter(d => d.getIsVisible == null ? void 0 : d.getIsVisible());\n }, getMemoOptions(table.options, 'debugColumns', key));\n };\n table.getVisibleFlatColumns = makeVisibleColumnsMethod('getVisibleFlatColumns', () => table.getAllFlatColumns());\n table.getVisibleLeafColumns = makeVisibleColumnsMethod('getVisibleLeafColumns', () => table.getAllLeafColumns());\n table.getLeftVisibleLeafColumns = makeVisibleColumnsMethod('getLeftVisibleLeafColumns', () => table.getLeftLeafColumns());\n table.getRightVisibleLeafColumns = makeVisibleColumnsMethod('getRightVisibleLeafColumns', () => table.getRightLeafColumns());\n table.getCenterVisibleLeafColumns = makeVisibleColumnsMethod('getCenterVisibleLeafColumns', () => table.getCenterLeafColumns());\n table.setColumnVisibility = updater => table.options.onColumnVisibilityChange == null ? void 0 : table.options.onColumnVisibilityChange(updater);\n table.resetColumnVisibility = defaultState => {\n var _table$initialState$c;\n table.setColumnVisibility(defaultState ? {} : (_table$initialState$c = table.initialState.columnVisibility) != null ? _table$initialState$c : {});\n };\n table.toggleAllColumnsVisible = value => {\n var _value;\n value = (_value = value) != null ? _value : !table.getIsAllColumnsVisible();\n table.setColumnVisibility(table.getAllLeafColumns().reduce((obj, column) => ({\n ...obj,\n [column.id]: !value ? !(column.getCanHide != null && column.getCanHide()) : value\n }), {}));\n };\n table.getIsAllColumnsVisible = () => !table.getAllLeafColumns().some(column => !(column.getIsVisible != null && column.getIsVisible()));\n table.getIsSomeColumnsVisible = () => table.getAllLeafColumns().some(column => column.getIsVisible == null ? void 0 : column.getIsVisible());\n table.getToggleAllColumnsVisibilityHandler = () => {\n return e => {\n var _target;\n table.toggleAllColumnsVisible((_target = e.target) == null ? void 0 : _target.checked);\n };\n };\n }\n};\nfunction _getVisibleLeafColumns(table, position) {\n return !position ? table.getVisibleLeafColumns() : position === 'center' ? table.getCenterVisibleLeafColumns() : position === 'left' ? table.getLeftVisibleLeafColumns() : table.getRightVisibleLeafColumns();\n}\n\n//\n\nconst GlobalFaceting = {\n createTable: table => {\n table._getGlobalFacetedRowModel = table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, '__global__');\n table.getGlobalFacetedRowModel = () => {\n if (table.options.manualFiltering || !table._getGlobalFacetedRowModel) {\n return table.getPreFilteredRowModel();\n }\n return table._getGlobalFacetedRowModel();\n };\n table._getGlobalFacetedUniqueValues = table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, '__global__');\n table.getGlobalFacetedUniqueValues = () => {\n if (!table._getGlobalFacetedUniqueValues) {\n return new Map();\n }\n return table._getGlobalFacetedUniqueValues();\n };\n table._getGlobalFacetedMinMaxValues = table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, '__global__');\n table.getGlobalFacetedMinMaxValues = () => {\n if (!table._getGlobalFacetedMinMaxValues) {\n return;\n }\n return table._getGlobalFacetedMinMaxValues();\n };\n }\n};\n\n//\n\nconst GlobalFiltering = {\n getInitialState: state => {\n return {\n globalFilter: undefined,\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onGlobalFilterChange: makeStateUpdater('globalFilter', table),\n globalFilterFn: 'auto',\n getColumnCanGlobalFilter: column => {\n var _table$getCoreRowMode;\n const value = (_table$getCoreRowMode = table.getCoreRowModel().flatRows[0]) == null || (_table$getCoreRowMode = _table$getCoreRowMode._getAllCellsByColumnId()[column.id]) == null ? void 0 : _table$getCoreRowMode.getValue();\n return typeof value === 'string' || typeof value === 'number';\n }\n };\n },\n createColumn: (column, table) => {\n column.getCanGlobalFilter = () => {\n var _column$columnDef$ena, _table$options$enable, _table$options$enable2, _table$options$getCol;\n return ((_column$columnDef$ena = column.columnDef.enableGlobalFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableGlobalFilter) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && ((_table$options$getCol = table.options.getColumnCanGlobalFilter == null ? void 0 : table.options.getColumnCanGlobalFilter(column)) != null ? _table$options$getCol : true) && !!column.accessorFn;\n };\n },\n createTable: table => {\n table.getGlobalAutoFilterFn = () => {\n return filterFns.includesString;\n };\n table.getGlobalFilterFn = () => {\n var _table$options$filter, _table$options$filter2;\n const {\n globalFilterFn: globalFilterFn\n } = table.options;\n return isFunction(globalFilterFn) ? globalFilterFn : globalFilterFn === 'auto' ? table.getGlobalAutoFilterFn() : (_table$options$filter = (_table$options$filter2 = table.options.filterFns) == null ? void 0 : _table$options$filter2[globalFilterFn]) != null ? _table$options$filter : filterFns[globalFilterFn];\n };\n table.setGlobalFilter = updater => {\n table.options.onGlobalFilterChange == null || table.options.onGlobalFilterChange(updater);\n };\n table.resetGlobalFilter = defaultState => {\n table.setGlobalFilter(defaultState ? undefined : table.initialState.globalFilter);\n };\n }\n};\n\n//\n\nconst RowExpanding = {\n getInitialState: state => {\n return {\n expanded: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onExpandedChange: makeStateUpdater('expanded', table),\n paginateExpandedRows: true\n };\n },\n createTable: table => {\n let registered = false;\n let queued = false;\n table._autoResetExpanded = () => {\n var _ref, _table$options$autoRe;\n if (!registered) {\n table._queue(() => {\n registered = true;\n });\n return;\n }\n if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetExpanded) != null ? _ref : !table.options.manualExpanding) {\n if (queued) return;\n queued = true;\n table._queue(() => {\n table.resetExpanded();\n queued = false;\n });\n }\n };\n table.setExpanded = updater => table.options.onExpandedChange == null ? void 0 : table.options.onExpandedChange(updater);\n table.toggleAllRowsExpanded = expanded => {\n if (expanded != null ? expanded : !table.getIsAllRowsExpanded()) {\n table.setExpanded(true);\n } else {\n table.setExpanded({});\n }\n };\n table.resetExpanded = defaultState => {\n var _table$initialState$e, _table$initialState;\n table.setExpanded(defaultState ? {} : (_table$initialState$e = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.expanded) != null ? _table$initialState$e : {});\n };\n table.getCanSomeRowsExpand = () => {\n return table.getPrePaginationRowModel().flatRows.some(row => row.getCanExpand());\n };\n table.getToggleAllRowsExpandedHandler = () => {\n return e => {\n e.persist == null || e.persist();\n table.toggleAllRowsExpanded();\n };\n };\n table.getIsSomeRowsExpanded = () => {\n const expanded = table.getState().expanded;\n return expanded === true || Object.values(expanded).some(Boolean);\n };\n table.getIsAllRowsExpanded = () => {\n const expanded = table.getState().expanded;\n\n // If expanded is true, save some cycles and return true\n if (typeof expanded === 'boolean') {\n return expanded === true;\n }\n if (!Object.keys(expanded).length) {\n return false;\n }\n\n // If any row is not expanded, return false\n if (table.getRowModel().flatRows.some(row => !row.getIsExpanded())) {\n return false;\n }\n\n // They must all be expanded :shrug:\n return true;\n };\n table.getExpandedDepth = () => {\n let maxDepth = 0;\n const rowIds = table.getState().expanded === true ? Object.keys(table.getRowModel().rowsById) : Object.keys(table.getState().expanded);\n rowIds.forEach(id => {\n const splitId = id.split('.');\n maxDepth = Math.max(maxDepth, splitId.length);\n });\n return maxDepth;\n };\n table.getPreExpandedRowModel = () => table.getSortedRowModel();\n table.getExpandedRowModel = () => {\n if (!table._getExpandedRowModel && table.options.getExpandedRowModel) {\n table._getExpandedRowModel = table.options.getExpandedRowModel(table);\n }\n if (table.options.manualExpanding || !table._getExpandedRowModel) {\n return table.getPreExpandedRowModel();\n }\n return table._getExpandedRowModel();\n };\n },\n createRow: (row, table) => {\n row.toggleExpanded = expanded => {\n table.setExpanded(old => {\n var _expanded;\n const exists = old === true ? true : !!(old != null && old[row.id]);\n let oldExpanded = {};\n if (old === true) {\n Object.keys(table.getRowModel().rowsById).forEach(rowId => {\n oldExpanded[rowId] = true;\n });\n } else {\n oldExpanded = old;\n }\n expanded = (_expanded = expanded) != null ? _expanded : !exists;\n if (!exists && expanded) {\n return {\n ...oldExpanded,\n [row.id]: true\n };\n }\n if (exists && !expanded) {\n const {\n [row.id]: _,\n ...rest\n } = oldExpanded;\n return rest;\n }\n return old;\n });\n };\n row.getIsExpanded = () => {\n var _table$options$getIsR;\n const expanded = table.getState().expanded;\n return !!((_table$options$getIsR = table.options.getIsRowExpanded == null ? void 0 : table.options.getIsRowExpanded(row)) != null ? _table$options$getIsR : expanded === true || (expanded == null ? void 0 : expanded[row.id]));\n };\n row.getCanExpand = () => {\n var _table$options$getRow, _table$options$enable, _row$subRows;\n return (_table$options$getRow = table.options.getRowCanExpand == null ? void 0 : table.options.getRowCanExpand(row)) != null ? _table$options$getRow : ((_table$options$enable = table.options.enableExpanding) != null ? _table$options$enable : true) && !!((_row$subRows = row.subRows) != null && _row$subRows.length);\n };\n row.getIsAllParentsExpanded = () => {\n let isFullyExpanded = true;\n let currentRow = row;\n while (isFullyExpanded && currentRow.parentId) {\n currentRow = table.getRow(currentRow.parentId, true);\n isFullyExpanded = currentRow.getIsExpanded();\n }\n return isFullyExpanded;\n };\n row.getToggleExpandedHandler = () => {\n const canExpand = row.getCanExpand();\n return () => {\n if (!canExpand) return;\n row.toggleExpanded();\n };\n };\n }\n};\n\n//\n\nconst defaultPageIndex = 0;\nconst defaultPageSize = 10;\nconst getDefaultPaginationState = () => ({\n pageIndex: defaultPageIndex,\n pageSize: defaultPageSize\n});\nconst RowPagination = {\n getInitialState: state => {\n return {\n ...state,\n pagination: {\n ...getDefaultPaginationState(),\n ...(state == null ? void 0 : state.pagination)\n }\n };\n },\n getDefaultOptions: table => {\n return {\n onPaginationChange: makeStateUpdater('pagination', table)\n };\n },\n createTable: table => {\n let registered = false;\n let queued = false;\n table._autoResetPageIndex = () => {\n var _ref, _table$options$autoRe;\n if (!registered) {\n table._queue(() => {\n registered = true;\n });\n return;\n }\n if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetPageIndex) != null ? _ref : !table.options.manualPagination) {\n if (queued) return;\n queued = true;\n table._queue(() => {\n table.resetPageIndex();\n queued = false;\n });\n }\n };\n table.setPagination = updater => {\n const safeUpdater = old => {\n let newState = functionalUpdate(updater, old);\n return newState;\n };\n return table.options.onPaginationChange == null ? void 0 : table.options.onPaginationChange(safeUpdater);\n };\n table.resetPagination = defaultState => {\n var _table$initialState$p;\n table.setPagination(defaultState ? getDefaultPaginationState() : (_table$initialState$p = table.initialState.pagination) != null ? _table$initialState$p : getDefaultPaginationState());\n };\n table.setPageIndex = updater => {\n table.setPagination(old => {\n let pageIndex = functionalUpdate(updater, old.pageIndex);\n const maxPageIndex = typeof table.options.pageCount === 'undefined' || table.options.pageCount === -1 ? Number.MAX_SAFE_INTEGER : table.options.pageCount - 1;\n pageIndex = Math.max(0, Math.min(pageIndex, maxPageIndex));\n return {\n ...old,\n pageIndex\n };\n });\n };\n table.resetPageIndex = defaultState => {\n var _table$initialState$p2, _table$initialState;\n table.setPageIndex(defaultState ? defaultPageIndex : (_table$initialState$p2 = (_table$initialState = table.initialState) == null || (_table$initialState = _table$initialState.pagination) == null ? void 0 : _table$initialState.pageIndex) != null ? _table$initialState$p2 : defaultPageIndex);\n };\n table.resetPageSize = defaultState => {\n var _table$initialState$p3, _table$initialState2;\n table.setPageSize(defaultState ? defaultPageSize : (_table$initialState$p3 = (_table$initialState2 = table.initialState) == null || (_table$initialState2 = _table$initialState2.pagination) == null ? void 0 : _table$initialState2.pageSize) != null ? _table$initialState$p3 : defaultPageSize);\n };\n table.setPageSize = updater => {\n table.setPagination(old => {\n const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize));\n const topRowIndex = old.pageSize * old.pageIndex;\n const pageIndex = Math.floor(topRowIndex / pageSize);\n return {\n ...old,\n pageIndex,\n pageSize\n };\n });\n };\n //deprecated\n table.setPageCount = updater => table.setPagination(old => {\n var _table$options$pageCo;\n let newPageCount = functionalUpdate(updater, (_table$options$pageCo = table.options.pageCount) != null ? _table$options$pageCo : -1);\n if (typeof newPageCount === 'number') {\n newPageCount = Math.max(-1, newPageCount);\n }\n return {\n ...old,\n pageCount: newPageCount\n };\n });\n table.getPageOptions = memo(() => [table.getPageCount()], pageCount => {\n let pageOptions = [];\n if (pageCount && pageCount > 0) {\n pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i);\n }\n return pageOptions;\n }, getMemoOptions(table.options, 'debugTable', 'getPageOptions'));\n table.getCanPreviousPage = () => table.getState().pagination.pageIndex > 0;\n table.getCanNextPage = () => {\n const {\n pageIndex\n } = table.getState().pagination;\n const pageCount = table.getPageCount();\n if (pageCount === -1) {\n return true;\n }\n if (pageCount === 0) {\n return false;\n }\n return pageIndex < pageCount - 1;\n };\n table.previousPage = () => {\n return table.setPageIndex(old => old - 1);\n };\n table.nextPage = () => {\n return table.setPageIndex(old => {\n return old + 1;\n });\n };\n table.firstPage = () => {\n return table.setPageIndex(0);\n };\n table.lastPage = () => {\n return table.setPageIndex(table.getPageCount() - 1);\n };\n table.getPrePaginationRowModel = () => table.getExpandedRowModel();\n table.getPaginationRowModel = () => {\n if (!table._getPaginationRowModel && table.options.getPaginationRowModel) {\n table._getPaginationRowModel = table.options.getPaginationRowModel(table);\n }\n if (table.options.manualPagination || !table._getPaginationRowModel) {\n return table.getPrePaginationRowModel();\n }\n return table._getPaginationRowModel();\n };\n table.getPageCount = () => {\n var _table$options$pageCo2;\n return (_table$options$pageCo2 = table.options.pageCount) != null ? _table$options$pageCo2 : Math.ceil(table.getRowCount() / table.getState().pagination.pageSize);\n };\n table.getRowCount = () => {\n var _table$options$rowCou;\n return (_table$options$rowCou = table.options.rowCount) != null ? _table$options$rowCou : table.getPrePaginationRowModel().rows.length;\n };\n }\n};\n\n//\n\nconst getDefaultRowPinningState = () => ({\n top: [],\n bottom: []\n});\nconst RowPinning = {\n getInitialState: state => {\n return {\n rowPinning: getDefaultRowPinningState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onRowPinningChange: makeStateUpdater('rowPinning', table)\n };\n },\n createRow: (row, table) => {\n row.pin = (position, includeLeafRows, includeParentRows) => {\n const leafRowIds = includeLeafRows ? row.getLeafRows().map(_ref => {\n let {\n id\n } = _ref;\n return id;\n }) : [];\n const parentRowIds = includeParentRows ? row.getParentRows().map(_ref2 => {\n let {\n id\n } = _ref2;\n return id;\n }) : [];\n const rowIds = new Set([...parentRowIds, row.id, ...leafRowIds]);\n table.setRowPinning(old => {\n var _old$top3, _old$bottom3;\n if (position === 'bottom') {\n var _old$top, _old$bottom;\n return {\n top: ((_old$top = old == null ? void 0 : old.top) != null ? _old$top : []).filter(d => !(rowIds != null && rowIds.has(d))),\n bottom: [...((_old$bottom = old == null ? void 0 : old.bottom) != null ? _old$bottom : []).filter(d => !(rowIds != null && rowIds.has(d))), ...Array.from(rowIds)]\n };\n }\n if (position === 'top') {\n var _old$top2, _old$bottom2;\n return {\n top: [...((_old$top2 = old == null ? void 0 : old.top) != null ? _old$top2 : []).filter(d => !(rowIds != null && rowIds.has(d))), ...Array.from(rowIds)],\n bottom: ((_old$bottom2 = old == null ? void 0 : old.bottom) != null ? _old$bottom2 : []).filter(d => !(rowIds != null && rowIds.has(d)))\n };\n }\n return {\n top: ((_old$top3 = old == null ? void 0 : old.top) != null ? _old$top3 : []).filter(d => !(rowIds != null && rowIds.has(d))),\n bottom: ((_old$bottom3 = old == null ? void 0 : old.bottom) != null ? _old$bottom3 : []).filter(d => !(rowIds != null && rowIds.has(d)))\n };\n });\n };\n row.getCanPin = () => {\n var _ref3;\n const {\n enableRowPinning,\n enablePinning\n } = table.options;\n if (typeof enableRowPinning === 'function') {\n return enableRowPinning(row);\n }\n return (_ref3 = enableRowPinning != null ? enableRowPinning : enablePinning) != null ? _ref3 : true;\n };\n row.getIsPinned = () => {\n const rowIds = [row.id];\n const {\n top,\n bottom\n } = table.getState().rowPinning;\n const isTop = rowIds.some(d => top == null ? void 0 : top.includes(d));\n const isBottom = rowIds.some(d => bottom == null ? void 0 : bottom.includes(d));\n return isTop ? 'top' : isBottom ? 'bottom' : false;\n };\n row.getPinnedIndex = () => {\n var _ref4, _visiblePinnedRowIds$;\n const position = row.getIsPinned();\n if (!position) return -1;\n const visiblePinnedRowIds = (_ref4 = position === 'top' ? table.getTopRows() : table.getBottomRows()) == null ? void 0 : _ref4.map(_ref5 => {\n let {\n id\n } = _ref5;\n return id;\n });\n return (_visiblePinnedRowIds$ = visiblePinnedRowIds == null ? void 0 : visiblePinnedRowIds.indexOf(row.id)) != null ? _visiblePinnedRowIds$ : -1;\n };\n },\n createTable: table => {\n table.setRowPinning = updater => table.options.onRowPinningChange == null ? void 0 : table.options.onRowPinningChange(updater);\n table.resetRowPinning = defaultState => {\n var _table$initialState$r, _table$initialState;\n return table.setRowPinning(defaultState ? getDefaultRowPinningState() : (_table$initialState$r = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.rowPinning) != null ? _table$initialState$r : getDefaultRowPinningState());\n };\n table.getIsSomeRowsPinned = position => {\n var _pinningState$positio;\n const pinningState = table.getState().rowPinning;\n if (!position) {\n var _pinningState$top, _pinningState$bottom;\n return Boolean(((_pinningState$top = pinningState.top) == null ? void 0 : _pinningState$top.length) || ((_pinningState$bottom = pinningState.bottom) == null ? void 0 : _pinningState$bottom.length));\n }\n return Boolean((_pinningState$positio = pinningState[position]) == null ? void 0 : _pinningState$positio.length);\n };\n table._getPinnedRows = (visibleRows, pinnedRowIds, position) => {\n var _table$options$keepPi;\n const rows = ((_table$options$keepPi = table.options.keepPinnedRows) != null ? _table$options$keepPi : true) ?\n //get all rows that are pinned even if they would not be otherwise visible\n //account for expanded parent rows, but not pagination or filtering\n (pinnedRowIds != null ? pinnedRowIds : []).map(rowId => {\n const row = table.getRow(rowId, true);\n return row.getIsAllParentsExpanded() ? row : null;\n }) :\n //else get only visible rows that are pinned\n (pinnedRowIds != null ? pinnedRowIds : []).map(rowId => visibleRows.find(row => row.id === rowId));\n return rows.filter(Boolean).map(d => ({\n ...d,\n position\n }));\n };\n table.getTopRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.top], (allRows, topPinnedRowIds) => table._getPinnedRows(allRows, topPinnedRowIds, 'top'), getMemoOptions(table.options, 'debugRows', 'getTopRows'));\n table.getBottomRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.bottom], (allRows, bottomPinnedRowIds) => table._getPinnedRows(allRows, bottomPinnedRowIds, 'bottom'), getMemoOptions(table.options, 'debugRows', 'getBottomRows'));\n table.getCenterRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.top, table.getState().rowPinning.bottom], (allRows, top, bottom) => {\n const topAndBottom = new Set([...(top != null ? top : []), ...(bottom != null ? bottom : [])]);\n return allRows.filter(d => !topAndBottom.has(d.id));\n }, getMemoOptions(table.options, 'debugRows', 'getCenterRows'));\n }\n};\n\n//\n\nconst RowSelection = {\n getInitialState: state => {\n return {\n rowSelection: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onRowSelectionChange: makeStateUpdater('rowSelection', table),\n enableRowSelection: true,\n enableMultiRowSelection: true,\n enableSubRowSelection: true\n // enableGroupingRowSelection: false,\n // isAdditiveSelectEvent: (e: unknown) => !!e.metaKey,\n // isInclusiveSelectEvent: (e: unknown) => !!e.shiftKey,\n };\n },\n createTable: table => {\n table.setRowSelection = updater => table.options.onRowSelectionChange == null ? void 0 : table.options.onRowSelectionChange(updater);\n table.resetRowSelection = defaultState => {\n var _table$initialState$r;\n return table.setRowSelection(defaultState ? {} : (_table$initialState$r = table.initialState.rowSelection) != null ? _table$initialState$r : {});\n };\n table.toggleAllRowsSelected = value => {\n table.setRowSelection(old => {\n value = typeof value !== 'undefined' ? value : !table.getIsAllRowsSelected();\n const rowSelection = {\n ...old\n };\n const preGroupedFlatRows = table.getPreGroupedRowModel().flatRows;\n\n // We don't use `mutateRowIsSelected` here for performance reasons.\n // All of the rows are flat already, so it wouldn't be worth it\n if (value) {\n preGroupedFlatRows.forEach(row => {\n if (!row.getCanSelect()) {\n return;\n }\n rowSelection[row.id] = true;\n });\n } else {\n preGroupedFlatRows.forEach(row => {\n delete rowSelection[row.id];\n });\n }\n return rowSelection;\n });\n };\n table.toggleAllPageRowsSelected = value => table.setRowSelection(old => {\n const resolvedValue = typeof value !== 'undefined' ? value : !table.getIsAllPageRowsSelected();\n const rowSelection = {\n ...old\n };\n table.getRowModel().rows.forEach(row => {\n mutateRowIsSelected(rowSelection, row.id, resolvedValue, true, table);\n });\n return rowSelection;\n });\n\n // addRowSelectionRange: rowId => {\n // const {\n // rows,\n // rowsById,\n // options: { selectGroupingRows, selectSubRows },\n // } = table\n\n // const findSelectedRow = (rows: Row[]) => {\n // let found\n // rows.find(d => {\n // if (d.getIsSelected()) {\n // found = d\n // return true\n // }\n // const subFound = findSelectedRow(d.subRows || [])\n // if (subFound) {\n // found = subFound\n // return true\n // }\n // return false\n // })\n // return found\n // }\n\n // const firstRow = findSelectedRow(rows) || rows[0]\n // const lastRow = rowsById[rowId]\n\n // let include = false\n // const selectedRowIds = {}\n\n // const addRow = (row: Row) => {\n // mutateRowIsSelected(selectedRowIds, row.id, true, {\n // rowsById,\n // selectGroupingRows: selectGroupingRows!,\n // selectSubRows: selectSubRows!,\n // })\n // }\n\n // table.rows.forEach(row => {\n // const isFirstRow = row.id === firstRow.id\n // const isLastRow = row.id === lastRow.id\n\n // if (isFirstRow || isLastRow) {\n // if (!include) {\n // include = true\n // } else if (include) {\n // addRow(row)\n // include = false\n // }\n // }\n\n // if (include) {\n // addRow(row)\n // }\n // })\n\n // table.setRowSelection(selectedRowIds)\n // },\n table.getPreSelectedRowModel = () => table.getCoreRowModel();\n table.getSelectedRowModel = memo(() => [table.getState().rowSelection, table.getCoreRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getSelectedRowModel'));\n table.getFilteredSelectedRowModel = memo(() => [table.getState().rowSelection, table.getFilteredRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getFilteredSelectedRowModel'));\n table.getGroupedSelectedRowModel = memo(() => [table.getState().rowSelection, table.getSortedRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getGroupedSelectedRowModel'));\n\n ///\n\n // getGroupingRowCanSelect: rowId => {\n // const row = table.getRow(rowId)\n\n // if (!row) {\n // throw new Error()\n // }\n\n // if (typeof table.options.enableGroupingRowSelection === 'function') {\n // return table.options.enableGroupingRowSelection(row)\n // }\n\n // return table.options.enableGroupingRowSelection ?? false\n // },\n\n table.getIsAllRowsSelected = () => {\n const preGroupedFlatRows = table.getFilteredRowModel().flatRows;\n const {\n rowSelection\n } = table.getState();\n let isAllRowsSelected = Boolean(preGroupedFlatRows.length && Object.keys(rowSelection).length);\n if (isAllRowsSelected) {\n if (preGroupedFlatRows.some(row => row.getCanSelect() && !rowSelection[row.id])) {\n isAllRowsSelected = false;\n }\n }\n return isAllRowsSelected;\n };\n table.getIsAllPageRowsSelected = () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows.filter(row => row.getCanSelect());\n const {\n rowSelection\n } = table.getState();\n let isAllPageRowsSelected = !!paginationFlatRows.length;\n if (isAllPageRowsSelected && paginationFlatRows.some(row => !rowSelection[row.id])) {\n isAllPageRowsSelected = false;\n }\n return isAllPageRowsSelected;\n };\n table.getIsSomeRowsSelected = () => {\n var _table$getState$rowSe;\n const totalSelected = Object.keys((_table$getState$rowSe = table.getState().rowSelection) != null ? _table$getState$rowSe : {}).length;\n return totalSelected > 0 && totalSelected < table.getFilteredRowModel().flatRows.length;\n };\n table.getIsSomePageRowsSelected = () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows;\n return table.getIsAllPageRowsSelected() ? false : paginationFlatRows.filter(row => row.getCanSelect()).some(d => d.getIsSelected() || d.getIsSomeSelected());\n };\n table.getToggleAllRowsSelectedHandler = () => {\n return e => {\n table.toggleAllRowsSelected(e.target.checked);\n };\n };\n table.getToggleAllPageRowsSelectedHandler = () => {\n return e => {\n table.toggleAllPageRowsSelected(e.target.checked);\n };\n };\n },\n createRow: (row, table) => {\n row.toggleSelected = (value, opts) => {\n const isSelected = row.getIsSelected();\n table.setRowSelection(old => {\n var _opts$selectChildren;\n value = typeof value !== 'undefined' ? value : !isSelected;\n if (row.getCanSelect() && isSelected === value) {\n return old;\n }\n const selectedRowIds = {\n ...old\n };\n mutateRowIsSelected(selectedRowIds, row.id, value, (_opts$selectChildren = opts == null ? void 0 : opts.selectChildren) != null ? _opts$selectChildren : true, table);\n return selectedRowIds;\n });\n };\n row.getIsSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isRowSelected(row, rowSelection);\n };\n row.getIsSomeSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isSubRowSelected(row, rowSelection) === 'some';\n };\n row.getIsAllSubRowsSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isSubRowSelected(row, rowSelection) === 'all';\n };\n row.getCanSelect = () => {\n var _table$options$enable;\n if (typeof table.options.enableRowSelection === 'function') {\n return table.options.enableRowSelection(row);\n }\n return (_table$options$enable = table.options.enableRowSelection) != null ? _table$options$enable : true;\n };\n row.getCanSelectSubRows = () => {\n var _table$options$enable2;\n if (typeof table.options.enableSubRowSelection === 'function') {\n return table.options.enableSubRowSelection(row);\n }\n return (_table$options$enable2 = table.options.enableSubRowSelection) != null ? _table$options$enable2 : true;\n };\n row.getCanMultiSelect = () => {\n var _table$options$enable3;\n if (typeof table.options.enableMultiRowSelection === 'function') {\n return table.options.enableMultiRowSelection(row);\n }\n return (_table$options$enable3 = table.options.enableMultiRowSelection) != null ? _table$options$enable3 : true;\n };\n row.getToggleSelectedHandler = () => {\n const canSelect = row.getCanSelect();\n return e => {\n var _target;\n if (!canSelect) return;\n row.toggleSelected((_target = e.target) == null ? void 0 : _target.checked);\n };\n };\n }\n};\nconst mutateRowIsSelected = (selectedRowIds, id, value, includeChildren, table) => {\n var _row$subRows;\n const row = table.getRow(id, true);\n\n // const isGrouped = row.getIsGrouped()\n\n // if ( // TODO: enforce grouping row selection rules\n // !isGrouped ||\n // (isGrouped && table.options.enableGroupingRowSelection)\n // ) {\n if (value) {\n if (!row.getCanMultiSelect()) {\n Object.keys(selectedRowIds).forEach(key => delete selectedRowIds[key]);\n }\n if (row.getCanSelect()) {\n selectedRowIds[id] = true;\n }\n } else {\n delete selectedRowIds[id];\n }\n // }\n\n if (includeChildren && (_row$subRows = row.subRows) != null && _row$subRows.length && row.getCanSelectSubRows()) {\n row.subRows.forEach(row => mutateRowIsSelected(selectedRowIds, row.id, value, includeChildren, table));\n }\n};\nfunction selectRowsFn(table, rowModel) {\n const rowSelection = table.getState().rowSelection;\n const newSelectedFlatRows = [];\n const newSelectedRowsById = {};\n\n // Filters top level and nested rows\n const recurseRows = function (rows, depth) {\n return rows.map(row => {\n var _row$subRows2;\n const isSelected = isRowSelected(row, rowSelection);\n if (isSelected) {\n newSelectedFlatRows.push(row);\n newSelectedRowsById[row.id] = row;\n }\n if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length) {\n row = {\n ...row,\n subRows: recurseRows(row.subRows)\n };\n }\n if (isSelected) {\n return row;\n }\n }).filter(Boolean);\n };\n return {\n rows: recurseRows(rowModel.rows),\n flatRows: newSelectedFlatRows,\n rowsById: newSelectedRowsById\n };\n}\nfunction isRowSelected(row, selection) {\n var _selection$row$id;\n return (_selection$row$id = selection[row.id]) != null ? _selection$row$id : false;\n}\nfunction isSubRowSelected(row, selection, table) {\n var _row$subRows3;\n if (!((_row$subRows3 = row.subRows) != null && _row$subRows3.length)) return false;\n let allChildrenSelected = true;\n let someSelected = false;\n row.subRows.forEach(subRow => {\n // Bail out early if we know both of these\n if (someSelected && !allChildrenSelected) {\n return;\n }\n if (subRow.getCanSelect()) {\n if (isRowSelected(subRow, selection)) {\n someSelected = true;\n } else {\n allChildrenSelected = false;\n }\n }\n\n // Check row selection of nested subrows\n if (subRow.subRows && subRow.subRows.length) {\n const subRowChildrenSelected = isSubRowSelected(subRow, selection);\n if (subRowChildrenSelected === 'all') {\n someSelected = true;\n } else if (subRowChildrenSelected === 'some') {\n someSelected = true;\n allChildrenSelected = false;\n } else {\n allChildrenSelected = false;\n }\n }\n });\n return allChildrenSelected ? 'all' : someSelected ? 'some' : false;\n}\n\nconst reSplitAlphaNumeric = /([0-9]+)/gm;\nconst alphanumeric = (rowA, rowB, columnId) => {\n return compareAlphanumeric(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n};\nconst alphanumericCaseSensitive = (rowA, rowB, columnId) => {\n return compareAlphanumeric(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n};\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst text = (rowA, rowB, columnId) => {\n return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n};\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst textCaseSensitive = (rowA, rowB, columnId) => {\n return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n};\nconst datetime = (rowA, rowB, columnId) => {\n const a = rowA.getValue(columnId);\n const b = rowB.getValue(columnId);\n\n // Can handle nullish values\n // Use > and < because == (and ===) doesn't work with\n // Date objects (would require calling getTime()).\n return a > b ? 1 : a < b ? -1 : 0;\n};\nconst basic = (rowA, rowB, columnId) => {\n return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId));\n};\n\n// Utils\n\nfunction compareBasic(a, b) {\n return a === b ? 0 : a > b ? 1 : -1;\n}\nfunction toString(a) {\n if (typeof a === 'number') {\n if (isNaN(a) || a === Infinity || a === -Infinity) {\n return '';\n }\n return String(a);\n }\n if (typeof a === 'string') {\n return a;\n }\n return '';\n}\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nfunction compareAlphanumeric(aStr, bStr) {\n // Split on number groups, but keep the delimiter\n // Then remove falsey split values\n const a = aStr.split(reSplitAlphaNumeric).filter(Boolean);\n const b = bStr.split(reSplitAlphaNumeric).filter(Boolean);\n\n // While\n while (a.length && b.length) {\n const aa = a.shift();\n const bb = b.shift();\n const an = parseInt(aa, 10);\n const bn = parseInt(bb, 10);\n const combo = [an, bn].sort();\n\n // Both are string\n if (isNaN(combo[0])) {\n if (aa > bb) {\n return 1;\n }\n if (bb > aa) {\n return -1;\n }\n continue;\n }\n\n // One is a string, one is a number\n if (isNaN(combo[1])) {\n return isNaN(an) ? -1 : 1;\n }\n\n // Both are numbers\n if (an > bn) {\n return 1;\n }\n if (bn > an) {\n return -1;\n }\n }\n return a.length - b.length;\n}\n\n// Exports\n\nconst sortingFns = {\n alphanumeric,\n alphanumericCaseSensitive,\n text,\n textCaseSensitive,\n datetime,\n basic\n};\n\n//\n\nconst RowSorting = {\n getInitialState: state => {\n return {\n sorting: [],\n ...state\n };\n },\n getDefaultColumnDef: () => {\n return {\n sortingFn: 'auto',\n sortUndefined: 1\n };\n },\n getDefaultOptions: table => {\n return {\n onSortingChange: makeStateUpdater('sorting', table),\n isMultiSortEvent: e => {\n return e.shiftKey;\n }\n };\n },\n createColumn: (column, table) => {\n column.getAutoSortingFn = () => {\n const firstRows = table.getFilteredRowModel().flatRows.slice(10);\n let isString = false;\n for (const row of firstRows) {\n const value = row == null ? void 0 : row.getValue(column.id);\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return sortingFns.datetime;\n }\n if (typeof value === 'string') {\n isString = true;\n if (value.split(reSplitAlphaNumeric).length > 1) {\n return sortingFns.alphanumeric;\n }\n }\n }\n if (isString) {\n return sortingFns.text;\n }\n return sortingFns.basic;\n };\n column.getAutoSortDir = () => {\n const firstRow = table.getFilteredRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'string') {\n return 'asc';\n }\n return 'desc';\n };\n column.getSortingFn = () => {\n var _table$options$sortin, _table$options$sortin2;\n if (!column) {\n throw new Error();\n }\n return isFunction(column.columnDef.sortingFn) ? column.columnDef.sortingFn : column.columnDef.sortingFn === 'auto' ? column.getAutoSortingFn() : (_table$options$sortin = (_table$options$sortin2 = table.options.sortingFns) == null ? void 0 : _table$options$sortin2[column.columnDef.sortingFn]) != null ? _table$options$sortin : sortingFns[column.columnDef.sortingFn];\n };\n column.toggleSorting = (desc, multi) => {\n // if (column.columns.length) {\n // column.columns.forEach((c, i) => {\n // if (c.id) {\n // table.toggleColumnSorting(c.id, undefined, multi || !!i)\n // }\n // })\n // return\n // }\n\n // this needs to be outside of table.setSorting to be in sync with rerender\n const nextSortingOrder = column.getNextSortingOrder();\n const hasManualValue = typeof desc !== 'undefined' && desc !== null;\n table.setSorting(old => {\n // Find any existing sorting for this column\n const existingSorting = old == null ? void 0 : old.find(d => d.id === column.id);\n const existingIndex = old == null ? void 0 : old.findIndex(d => d.id === column.id);\n let newSorting = [];\n\n // What should we do with this sort action?\n let sortAction;\n let nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc';\n\n // Multi-mode\n if (old != null && old.length && column.getCanMultiSort() && multi) {\n if (existingSorting) {\n sortAction = 'toggle';\n } else {\n sortAction = 'add';\n }\n } else {\n // Normal mode\n if (old != null && old.length && existingIndex !== old.length - 1) {\n sortAction = 'replace';\n } else if (existingSorting) {\n sortAction = 'toggle';\n } else {\n sortAction = 'replace';\n }\n }\n\n // Handle toggle states that will remove the sorting\n if (sortAction === 'toggle') {\n // If we are \"actually\" toggling (not a manual set value), should we remove the sorting?\n if (!hasManualValue) {\n // Is our intention to remove?\n if (!nextSortingOrder) {\n sortAction = 'remove';\n }\n }\n }\n if (sortAction === 'add') {\n var _table$options$maxMul;\n newSorting = [...old, {\n id: column.id,\n desc: nextDesc\n }];\n // Take latest n columns\n newSorting.splice(0, newSorting.length - ((_table$options$maxMul = table.options.maxMultiSortColCount) != null ? _table$options$maxMul : Number.MAX_SAFE_INTEGER));\n } else if (sortAction === 'toggle') {\n // This flips (or sets) the\n newSorting = old.map(d => {\n if (d.id === column.id) {\n return {\n ...d,\n desc: nextDesc\n };\n }\n return d;\n });\n } else if (sortAction === 'remove') {\n newSorting = old.filter(d => d.id !== column.id);\n } else {\n newSorting = [{\n id: column.id,\n desc: nextDesc\n }];\n }\n return newSorting;\n });\n };\n column.getFirstSortDir = () => {\n var _ref, _column$columnDef$sor;\n const sortDescFirst = (_ref = (_column$columnDef$sor = column.columnDef.sortDescFirst) != null ? _column$columnDef$sor : table.options.sortDescFirst) != null ? _ref : column.getAutoSortDir() === 'desc';\n return sortDescFirst ? 'desc' : 'asc';\n };\n column.getNextSortingOrder = multi => {\n var _table$options$enable, _table$options$enable2;\n const firstSortDirection = column.getFirstSortDir();\n const isSorted = column.getIsSorted();\n if (!isSorted) {\n return firstSortDirection;\n }\n if (isSorted !== firstSortDirection && ((_table$options$enable = table.options.enableSortingRemoval) != null ? _table$options$enable : true) && (\n // If enableSortRemove, enable in general\n multi ? (_table$options$enable2 = table.options.enableMultiRemove) != null ? _table$options$enable2 : true : true) // If multi, don't allow if enableMultiRemove))\n ) {\n return false;\n }\n return isSorted === 'desc' ? 'asc' : 'desc';\n };\n column.getCanSort = () => {\n var _column$columnDef$ena, _table$options$enable3;\n return ((_column$columnDef$ena = column.columnDef.enableSorting) != null ? _column$columnDef$ena : true) && ((_table$options$enable3 = table.options.enableSorting) != null ? _table$options$enable3 : true) && !!column.accessorFn;\n };\n column.getCanMultiSort = () => {\n var _ref2, _column$columnDef$ena2;\n return (_ref2 = (_column$columnDef$ena2 = column.columnDef.enableMultiSort) != null ? _column$columnDef$ena2 : table.options.enableMultiSort) != null ? _ref2 : !!column.accessorFn;\n };\n column.getIsSorted = () => {\n var _table$getState$sorti;\n const columnSort = (_table$getState$sorti = table.getState().sorting) == null ? void 0 : _table$getState$sorti.find(d => d.id === column.id);\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc';\n };\n column.getSortIndex = () => {\n var _table$getState$sorti2, _table$getState$sorti3;\n return (_table$getState$sorti2 = (_table$getState$sorti3 = table.getState().sorting) == null ? void 0 : _table$getState$sorti3.findIndex(d => d.id === column.id)) != null ? _table$getState$sorti2 : -1;\n };\n column.clearSorting = () => {\n //clear sorting for just 1 column\n table.setSorting(old => old != null && old.length ? old.filter(d => d.id !== column.id) : []);\n };\n column.getToggleSortingHandler = () => {\n const canSort = column.getCanSort();\n return e => {\n if (!canSort) return;\n e.persist == null || e.persist();\n column.toggleSorting == null || column.toggleSorting(undefined, column.getCanMultiSort() ? table.options.isMultiSortEvent == null ? void 0 : table.options.isMultiSortEvent(e) : false);\n };\n };\n },\n createTable: table => {\n table.setSorting = updater => table.options.onSortingChange == null ? void 0 : table.options.onSortingChange(updater);\n table.resetSorting = defaultState => {\n var _table$initialState$s, _table$initialState;\n table.setSorting(defaultState ? [] : (_table$initialState$s = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.sorting) != null ? _table$initialState$s : []);\n };\n table.getPreSortedRowModel = () => table.getGroupedRowModel();\n table.getSortedRowModel = () => {\n if (!table._getSortedRowModel && table.options.getSortedRowModel) {\n table._getSortedRowModel = table.options.getSortedRowModel(table);\n }\n if (table.options.manualSorting || !table._getSortedRowModel) {\n return table.getPreSortedRowModel();\n }\n return table._getSortedRowModel();\n };\n }\n};\n\nconst builtInFeatures = [Headers, ColumnVisibility, ColumnOrdering, ColumnPinning, ColumnFaceting, ColumnFiltering, GlobalFaceting,\n//depends on ColumnFaceting\nGlobalFiltering,\n//depends on ColumnFiltering\nRowSorting, ColumnGrouping,\n//depends on RowSorting\nRowExpanding, RowPagination, RowPinning, RowSelection, ColumnSizing];\n\n//\n\nfunction createTable(options) {\n var _options$_features, _options$initialState;\n if (process.env.NODE_ENV !== 'production' && (options.debugAll || options.debugTable)) {\n console.info('Creating Table Instance...');\n }\n const _features = [...builtInFeatures, ...((_options$_features = options._features) != null ? _options$_features : [])];\n let table = {\n _features\n };\n const defaultOptions = table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultOptions == null ? void 0 : feature.getDefaultOptions(table));\n }, {});\n const mergeOptions = options => {\n if (table.options.mergeOptions) {\n return table.options.mergeOptions(defaultOptions, options);\n }\n return {\n ...defaultOptions,\n ...options\n };\n };\n const coreInitialState = {};\n let initialState = {\n ...coreInitialState,\n ...((_options$initialState = options.initialState) != null ? _options$initialState : {})\n };\n table._features.forEach(feature => {\n var _feature$getInitialSt;\n initialState = (_feature$getInitialSt = feature.getInitialState == null ? void 0 : feature.getInitialState(initialState)) != null ? _feature$getInitialSt : initialState;\n });\n const queued = [];\n let queuedTimeout = false;\n const coreInstance = {\n _features,\n options: {\n ...defaultOptions,\n ...options\n },\n initialState,\n _queue: cb => {\n queued.push(cb);\n if (!queuedTimeout) {\n queuedTimeout = true;\n\n // Schedule a microtask to run the queued callbacks after\n // the current call stack (render, etc) has finished.\n Promise.resolve().then(() => {\n while (queued.length) {\n queued.shift()();\n }\n queuedTimeout = false;\n }).catch(error => setTimeout(() => {\n throw error;\n }));\n }\n },\n reset: () => {\n table.setState(table.initialState);\n },\n setOptions: updater => {\n const newOptions = functionalUpdate(updater, table.options);\n table.options = mergeOptions(newOptions);\n },\n getState: () => {\n return table.options.state;\n },\n setState: updater => {\n table.options.onStateChange == null || table.options.onStateChange(updater);\n },\n _getRowId: (row, index, parent) => {\n var _table$options$getRow;\n return (_table$options$getRow = table.options.getRowId == null ? void 0 : table.options.getRowId(row, index, parent)) != null ? _table$options$getRow : `${parent ? [parent.id, index].join('.') : index}`;\n },\n getCoreRowModel: () => {\n if (!table._getCoreRowModel) {\n table._getCoreRowModel = table.options.getCoreRowModel(table);\n }\n return table._getCoreRowModel();\n },\n // The final calls start at the bottom of the model,\n // expanded rows, which then work their way up\n\n getRowModel: () => {\n return table.getPaginationRowModel();\n },\n //in next version, we should just pass in the row model as the optional 2nd arg\n getRow: (id, searchAll) => {\n let row = (searchAll ? table.getPrePaginationRowModel() : table.getRowModel()).rowsById[id];\n if (!row) {\n row = table.getCoreRowModel().rowsById[id];\n if (!row) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(`getRow could not find row with ID: ${id}`);\n }\n throw new Error();\n }\n }\n return row;\n },\n _getDefaultColumnDef: memo(() => [table.options.defaultColumn], defaultColumn => {\n var _defaultColumn;\n defaultColumn = (_defaultColumn = defaultColumn) != null ? _defaultColumn : {};\n return {\n header: props => {\n const resolvedColumnDef = props.header.column.columnDef;\n if (resolvedColumnDef.accessorKey) {\n return resolvedColumnDef.accessorKey;\n }\n if (resolvedColumnDef.accessorFn) {\n return resolvedColumnDef.id;\n }\n return null;\n },\n // footer: props => props.header.column.id,\n cell: props => {\n var _props$renderValue$to, _props$renderValue;\n return (_props$renderValue$to = (_props$renderValue = props.renderValue()) == null || _props$renderValue.toString == null ? void 0 : _props$renderValue.toString()) != null ? _props$renderValue$to : null;\n },\n ...table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultColumnDef == null ? void 0 : feature.getDefaultColumnDef());\n }, {}),\n ...defaultColumn\n };\n }, getMemoOptions(options, 'debugColumns', '_getDefaultColumnDef')),\n _getColumnDefs: () => table.options.columns,\n getAllColumns: memo(() => [table._getColumnDefs()], columnDefs => {\n const recurseColumns = function (columnDefs, parent, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n return columnDefs.map(columnDef => {\n const column = createColumn(table, columnDef, depth, parent);\n const groupingColumnDef = columnDef;\n column.columns = groupingColumnDef.columns ? recurseColumns(groupingColumnDef.columns, column, depth + 1) : [];\n return column;\n });\n };\n return recurseColumns(columnDefs);\n }, getMemoOptions(options, 'debugColumns', 'getAllColumns')),\n getAllFlatColumns: memo(() => [table.getAllColumns()], allColumns => {\n return allColumns.flatMap(column => {\n return column.getFlatColumns();\n });\n }, getMemoOptions(options, 'debugColumns', 'getAllFlatColumns')),\n _getAllFlatColumnsById: memo(() => [table.getAllFlatColumns()], flatColumns => {\n return flatColumns.reduce((acc, column) => {\n acc[column.id] = column;\n return acc;\n }, {});\n }, getMemoOptions(options, 'debugColumns', 'getAllFlatColumnsById')),\n getAllLeafColumns: memo(() => [table.getAllColumns(), table._getOrderColumnsFn()], (allColumns, orderColumns) => {\n let leafColumns = allColumns.flatMap(column => column.getLeafColumns());\n return orderColumns(leafColumns);\n }, getMemoOptions(options, 'debugColumns', 'getAllLeafColumns')),\n getColumn: columnId => {\n const column = table._getAllFlatColumnsById()[columnId];\n if (process.env.NODE_ENV !== 'production' && !column) {\n console.error(`[Table] Column with id '${columnId}' does not exist.`);\n }\n return column;\n }\n };\n Object.assign(table, coreInstance);\n for (let index = 0; index < table._features.length; index++) {\n const feature = table._features[index];\n feature == null || feature.createTable == null || feature.createTable(table);\n }\n return table;\n}\n\nfunction getCoreRowModel() {\n return table => memo(() => [table.options.data], data => {\n const rowModel = {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n const accessRows = function (originalRows, depth, parentRow) {\n if (depth === void 0) {\n depth = 0;\n }\n const rows = [];\n for (let i = 0; i < originalRows.length; i++) {\n // This could be an expensive check at scale, so we should move it somewhere else, but where?\n // if (!id) {\n // if (process.env.NODE_ENV !== 'production') {\n // throw new Error(`getRowId expected an ID, but got ${id}`)\n // }\n // }\n\n // Make the row\n const row = createRow(table, table._getRowId(originalRows[i], i, parentRow), originalRows[i], i, depth, undefined, parentRow == null ? void 0 : parentRow.id);\n\n // Keep track of every row in a flat array\n rowModel.flatRows.push(row);\n // Also keep track of every row by its ID\n rowModel.rowsById[row.id] = row;\n // Push table row into parent\n rows.push(row);\n\n // Get the original subrows\n if (table.options.getSubRows) {\n var _row$originalSubRows;\n row.originalSubRows = table.options.getSubRows(originalRows[i], i);\n\n // Then recursively access them\n if ((_row$originalSubRows = row.originalSubRows) != null && _row$originalSubRows.length) {\n row.subRows = accessRows(row.originalSubRows, depth + 1, row);\n }\n }\n }\n return rows;\n };\n rowModel.rows = accessRows(data);\n return rowModel;\n }, getMemoOptions(table.options, 'debugTable', 'getRowModel', () => table._autoResetPageIndex()));\n}\n\nfunction getExpandedRowModel() {\n return table => memo(() => [table.getState().expanded, table.getPreExpandedRowModel(), table.options.paginateExpandedRows], (expanded, rowModel, paginateExpandedRows) => {\n if (!rowModel.rows.length || expanded !== true && !Object.keys(expanded != null ? expanded : {}).length) {\n return rowModel;\n }\n if (!paginateExpandedRows) {\n // Only expand rows at this point if they are being paginated\n return rowModel;\n }\n return expandRows(rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getExpandedRowModel'));\n}\nfunction expandRows(rowModel) {\n const expandedRows = [];\n const handleRow = row => {\n var _row$subRows;\n expandedRows.push(row);\n if ((_row$subRows = row.subRows) != null && _row$subRows.length && row.getIsExpanded()) {\n row.subRows.forEach(handleRow);\n }\n };\n rowModel.rows.forEach(handleRow);\n return {\n rows: expandedRows,\n flatRows: rowModel.flatRows,\n rowsById: rowModel.rowsById\n };\n}\n\nfunction getFacetedMinMaxValues() {\n return (table, columnId) => memo(() => {\n var _table$getColumn;\n return [(_table$getColumn = table.getColumn(columnId)) == null ? void 0 : _table$getColumn.getFacetedRowModel()];\n }, facetedRowModel => {\n if (!facetedRowModel) return undefined;\n const uniqueValues = facetedRowModel.flatRows.flatMap(flatRow => {\n var _flatRow$getUniqueVal;\n return (_flatRow$getUniqueVal = flatRow.getUniqueValues(columnId)) != null ? _flatRow$getUniqueVal : [];\n }).map(Number).filter(value => !Number.isNaN(value));\n if (!uniqueValues.length) return;\n let facetedMinValue = uniqueValues[0];\n let facetedMaxValue = uniqueValues[uniqueValues.length - 1];\n for (const value of uniqueValues) {\n if (value < facetedMinValue) facetedMinValue = value;else if (value > facetedMaxValue) facetedMaxValue = value;\n }\n return [facetedMinValue, facetedMaxValue];\n }, getMemoOptions(table.options, 'debugTable', 'getFacetedMinMaxValues'));\n}\n\nfunction filterRows(rows, filterRowImpl, table) {\n if (table.options.filterFromLeafRows) {\n return filterRowModelFromLeafs(rows, filterRowImpl, table);\n }\n return filterRowModelFromRoot(rows, filterRowImpl, table);\n}\nfunction filterRowModelFromLeafs(rowsToFilter, filterRow, table) {\n var _table$options$maxLea;\n const newFilteredFlatRows = [];\n const newFilteredRowsById = {};\n const maxDepth = (_table$options$maxLea = table.options.maxLeafRowFilterDepth) != null ? _table$options$maxLea : 100;\n const recurseFilterRows = function (rowsToFilter, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n const rows = [];\n\n // Filter from children up first\n for (let i = 0; i < rowsToFilter.length; i++) {\n var _row$subRows;\n let row = rowsToFilter[i];\n const newRow = createRow(table, row.id, row.original, row.index, row.depth, undefined, row.parentId);\n newRow.columnFilters = row.columnFilters;\n if ((_row$subRows = row.subRows) != null && _row$subRows.length && depth < maxDepth) {\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n row = newRow;\n if (filterRow(row) && !newRow.subRows.length) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n continue;\n }\n if (filterRow(row) || newRow.subRows.length) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n continue;\n }\n } else {\n row = newRow;\n if (filterRow(row)) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n }\n }\n }\n return rows;\n };\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById\n };\n}\nfunction filterRowModelFromRoot(rowsToFilter, filterRow, table) {\n var _table$options$maxLea2;\n const newFilteredFlatRows = [];\n const newFilteredRowsById = {};\n const maxDepth = (_table$options$maxLea2 = table.options.maxLeafRowFilterDepth) != null ? _table$options$maxLea2 : 100;\n\n // Filters top level and nested rows\n const recurseFilterRows = function (rowsToFilter, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n // Filter from parents downward first\n\n const rows = [];\n\n // Apply the filter to any subRows\n for (let i = 0; i < rowsToFilter.length; i++) {\n let row = rowsToFilter[i];\n const pass = filterRow(row);\n if (pass) {\n var _row$subRows2;\n if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length && depth < maxDepth) {\n const newRow = createRow(table, row.id, row.original, row.index, row.depth, undefined, row.parentId);\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n row = newRow;\n }\n rows.push(row);\n newFilteredFlatRows.push(row);\n newFilteredRowsById[row.id] = row;\n }\n }\n return rows;\n };\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById\n };\n}\n\nfunction getFacetedRowModel() {\n return (table, columnId) => memo(() => [table.getPreFilteredRowModel(), table.getState().columnFilters, table.getState().globalFilter, table.getFilteredRowModel()], (preRowModel, columnFilters, globalFilter) => {\n if (!preRowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n return preRowModel;\n }\n const filterableIds = [...columnFilters.map(d => d.id).filter(d => d !== columnId), globalFilter ? '__global__' : undefined].filter(Boolean);\n const filterRowsImpl = row => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]] === false) {\n return false;\n }\n }\n return true;\n };\n return filterRows(preRowModel.rows, filterRowsImpl, table);\n }, getMemoOptions(table.options, 'debugTable', 'getFacetedRowModel'));\n}\n\nfunction getFacetedUniqueValues() {\n return (table, columnId) => memo(() => {\n var _table$getColumn;\n return [(_table$getColumn = table.getColumn(columnId)) == null ? void 0 : _table$getColumn.getFacetedRowModel()];\n }, facetedRowModel => {\n if (!facetedRowModel) return new Map();\n let facetedUniqueValues = new Map();\n for (let i = 0; i < facetedRowModel.flatRows.length; i++) {\n const values = facetedRowModel.flatRows[i].getUniqueValues(columnId);\n for (let j = 0; j < values.length; j++) {\n const value = values[j];\n if (facetedUniqueValues.has(value)) {\n var _facetedUniqueValues$;\n facetedUniqueValues.set(value, ((_facetedUniqueValues$ = facetedUniqueValues.get(value)) != null ? _facetedUniqueValues$ : 0) + 1);\n } else {\n facetedUniqueValues.set(value, 1);\n }\n }\n }\n return facetedUniqueValues;\n }, getMemoOptions(table.options, 'debugTable', `getFacetedUniqueValues_${columnId}`));\n}\n\nfunction getFilteredRowModel() {\n return table => memo(() => [table.getPreFilteredRowModel(), table.getState().columnFilters, table.getState().globalFilter], (rowModel, columnFilters, globalFilter) => {\n if (!rowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n for (let i = 0; i < rowModel.flatRows.length; i++) {\n rowModel.flatRows[i].columnFilters = {};\n rowModel.flatRows[i].columnFiltersMeta = {};\n }\n return rowModel;\n }\n const resolvedColumnFilters = [];\n const resolvedGlobalFilters = [];\n (columnFilters != null ? columnFilters : []).forEach(d => {\n var _filterFn$resolveFilt;\n const column = table.getColumn(d.id);\n if (!column) {\n return;\n }\n const filterFn = column.getFilterFn();\n if (!filterFn) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Could not find a valid 'column.filterFn' for column with the ID: ${column.id}.`);\n }\n return;\n }\n resolvedColumnFilters.push({\n id: d.id,\n filterFn,\n resolvedValue: (_filterFn$resolveFilt = filterFn.resolveFilterValue == null ? void 0 : filterFn.resolveFilterValue(d.value)) != null ? _filterFn$resolveFilt : d.value\n });\n });\n const filterableIds = (columnFilters != null ? columnFilters : []).map(d => d.id);\n const globalFilterFn = table.getGlobalFilterFn();\n const globallyFilterableColumns = table.getAllLeafColumns().filter(column => column.getCanGlobalFilter());\n if (globalFilter && globalFilterFn && globallyFilterableColumns.length) {\n filterableIds.push('__global__');\n globallyFilterableColumns.forEach(column => {\n var _globalFilterFn$resol;\n resolvedGlobalFilters.push({\n id: column.id,\n filterFn: globalFilterFn,\n resolvedValue: (_globalFilterFn$resol = globalFilterFn.resolveFilterValue == null ? void 0 : globalFilterFn.resolveFilterValue(globalFilter)) != null ? _globalFilterFn$resol : globalFilter\n });\n });\n }\n let currentColumnFilter;\n let currentGlobalFilter;\n\n // Flag the prefiltered row model with each filter state\n for (let j = 0; j < rowModel.flatRows.length; j++) {\n const row = rowModel.flatRows[j];\n row.columnFilters = {};\n if (resolvedColumnFilters.length) {\n for (let i = 0; i < resolvedColumnFilters.length; i++) {\n currentColumnFilter = resolvedColumnFilters[i];\n const id = currentColumnFilter.id;\n\n // Tag the row with the column filter state\n row.columnFilters[id] = currentColumnFilter.filterFn(row, id, currentColumnFilter.resolvedValue, filterMeta => {\n row.columnFiltersMeta[id] = filterMeta;\n });\n }\n }\n if (resolvedGlobalFilters.length) {\n for (let i = 0; i < resolvedGlobalFilters.length; i++) {\n currentGlobalFilter = resolvedGlobalFilters[i];\n const id = currentGlobalFilter.id;\n // Tag the row with the first truthy global filter state\n if (currentGlobalFilter.filterFn(row, id, currentGlobalFilter.resolvedValue, filterMeta => {\n row.columnFiltersMeta[id] = filterMeta;\n })) {\n row.columnFilters.__global__ = true;\n break;\n }\n }\n if (row.columnFilters.__global__ !== true) {\n row.columnFilters.__global__ = false;\n }\n }\n }\n const filterRowsImpl = row => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]] === false) {\n return false;\n }\n }\n return true;\n };\n\n // Filter final rows using all of the active filters\n return filterRows(rowModel.rows, filterRowsImpl, table);\n }, getMemoOptions(table.options, 'debugTable', 'getFilteredRowModel', () => table._autoResetPageIndex()));\n}\n\nfunction getGroupedRowModel() {\n return table => memo(() => [table.getState().grouping, table.getPreGroupedRowModel()], (grouping, rowModel) => {\n if (!rowModel.rows.length || !grouping.length) {\n rowModel.rows.forEach(row => {\n row.depth = 0;\n row.parentId = undefined;\n });\n return rowModel;\n }\n\n // Filter the grouping list down to columns that exist\n const existingGrouping = grouping.filter(columnId => table.getColumn(columnId));\n const groupedFlatRows = [];\n const groupedRowsById = {};\n // const onlyGroupedFlatRows: Row[] = [];\n // const onlyGroupedRowsById: Record<RowId, Row> = {};\n // const nonGroupedFlatRows: Row[] = [];\n // const nonGroupedRowsById: Record<RowId, Row> = {};\n\n // Recursively group the data\n const groupUpRecursively = function (rows, depth, parentId) {\n if (depth === void 0) {\n depth = 0;\n }\n // Grouping depth has been been met\n // Stop grouping and simply rewrite thd depth and row relationships\n if (depth >= existingGrouping.length) {\n return rows.map(row => {\n row.depth = depth;\n groupedFlatRows.push(row);\n groupedRowsById[row.id] = row;\n if (row.subRows) {\n row.subRows = groupUpRecursively(row.subRows, depth + 1, row.id);\n }\n return row;\n });\n }\n const columnId = existingGrouping[depth];\n\n // Group the rows together for this level\n const rowGroupsMap = groupBy(rows, columnId);\n\n // Perform aggregations for each group\n const aggregatedGroupedRows = Array.from(rowGroupsMap.entries()).map((_ref, index) => {\n let [groupingValue, groupedRows] = _ref;\n let id = `${columnId}:${groupingValue}`;\n id = parentId ? `${parentId}>${id}` : id;\n\n // First, Recurse to group sub rows before aggregation\n const subRows = groupUpRecursively(groupedRows, depth + 1, id);\n subRows.forEach(subRow => {\n subRow.parentId = id;\n });\n\n // Flatten the leaf rows of the rows in this group\n const leafRows = depth ? flattenBy(groupedRows, row => row.subRows) : groupedRows;\n const row = createRow(table, id, leafRows[0].original, index, depth, undefined, parentId);\n Object.assign(row, {\n groupingColumnId: columnId,\n groupingValue,\n subRows,\n leafRows,\n getValue: columnId => {\n // Don't aggregate columns that are in the grouping\n if (existingGrouping.includes(columnId)) {\n if (row._valuesCache.hasOwnProperty(columnId)) {\n return row._valuesCache[columnId];\n }\n if (groupedRows[0]) {\n var _groupedRows$0$getVal;\n row._valuesCache[columnId] = (_groupedRows$0$getVal = groupedRows[0].getValue(columnId)) != null ? _groupedRows$0$getVal : undefined;\n }\n return row._valuesCache[columnId];\n }\n if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n return row._groupingValuesCache[columnId];\n }\n\n // Aggregate the values\n const column = table.getColumn(columnId);\n const aggregateFn = column == null ? void 0 : column.getAggregationFn();\n if (aggregateFn) {\n row._groupingValuesCache[columnId] = aggregateFn(columnId, leafRows, groupedRows);\n return row._groupingValuesCache[columnId];\n }\n }\n });\n subRows.forEach(subRow => {\n groupedFlatRows.push(subRow);\n groupedRowsById[subRow.id] = subRow;\n // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n });\n return row;\n });\n return aggregatedGroupedRows;\n };\n const groupedRows = groupUpRecursively(rowModel.rows, 0);\n groupedRows.forEach(subRow => {\n groupedFlatRows.push(subRow);\n groupedRowsById[subRow.id] = subRow;\n // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n });\n return {\n rows: groupedRows,\n flatRows: groupedFlatRows,\n rowsById: groupedRowsById\n };\n }, getMemoOptions(table.options, 'debugTable', 'getGroupedRowModel', () => {\n table._queue(() => {\n table._autoResetExpanded();\n table._autoResetPageIndex();\n });\n }));\n}\nfunction groupBy(rows, columnId) {\n const groupMap = new Map();\n return rows.reduce((map, row) => {\n const resKey = `${row.getGroupingValue(columnId)}`;\n const previous = map.get(resKey);\n if (!previous) {\n map.set(resKey, [row]);\n } else {\n previous.push(row);\n }\n return map;\n }, groupMap);\n}\n\nfunction getPaginationRowModel(opts) {\n return table => memo(() => [table.getState().pagination, table.getPrePaginationRowModel(), table.options.paginateExpandedRows ? undefined : table.getState().expanded], (pagination, rowModel) => {\n if (!rowModel.rows.length) {\n return rowModel;\n }\n const {\n pageSize,\n pageIndex\n } = pagination;\n let {\n rows,\n flatRows,\n rowsById\n } = rowModel;\n const pageStart = pageSize * pageIndex;\n const pageEnd = pageStart + pageSize;\n rows = rows.slice(pageStart, pageEnd);\n let paginatedRowModel;\n if (!table.options.paginateExpandedRows) {\n paginatedRowModel = expandRows({\n rows,\n flatRows,\n rowsById\n });\n } else {\n paginatedRowModel = {\n rows,\n flatRows,\n rowsById\n };\n }\n paginatedRowModel.flatRows = [];\n const handleRow = row => {\n paginatedRowModel.flatRows.push(row);\n if (row.subRows.length) {\n row.subRows.forEach(handleRow);\n }\n };\n paginatedRowModel.rows.forEach(handleRow);\n return paginatedRowModel;\n }, getMemoOptions(table.options, 'debugTable', 'getPaginationRowModel'));\n}\n\nfunction getSortedRowModel() {\n return table => memo(() => [table.getState().sorting, table.getPreSortedRowModel()], (sorting, rowModel) => {\n if (!rowModel.rows.length || !(sorting != null && sorting.length)) {\n return rowModel;\n }\n const sortingState = table.getState().sorting;\n const sortedFlatRows = [];\n\n // Filter out sortings that correspond to non existing columns\n const availableSorting = sortingState.filter(sort => {\n var _table$getColumn;\n return (_table$getColumn = table.getColumn(sort.id)) == null ? void 0 : _table$getColumn.getCanSort();\n });\n const columnInfoById = {};\n availableSorting.forEach(sortEntry => {\n const column = table.getColumn(sortEntry.id);\n if (!column) return;\n columnInfoById[sortEntry.id] = {\n sortUndefined: column.columnDef.sortUndefined,\n invertSorting: column.columnDef.invertSorting,\n sortingFn: column.getSortingFn()\n };\n });\n const sortData = rows => {\n // This will also perform a stable sorting using the row index\n // if needed.\n const sortedData = rows.map(row => ({\n ...row\n }));\n sortedData.sort((rowA, rowB) => {\n for (let i = 0; i < availableSorting.length; i += 1) {\n var _sortEntry$desc;\n const sortEntry = availableSorting[i];\n const columnInfo = columnInfoById[sortEntry.id];\n const sortUndefined = columnInfo.sortUndefined;\n const isDesc = (_sortEntry$desc = sortEntry == null ? void 0 : sortEntry.desc) != null ? _sortEntry$desc : false;\n let sortInt = 0;\n\n // All sorting ints should always return in ascending order\n if (sortUndefined) {\n const aValue = rowA.getValue(sortEntry.id);\n const bValue = rowB.getValue(sortEntry.id);\n const aUndefined = aValue === undefined;\n const bUndefined = bValue === undefined;\n if (aUndefined || bUndefined) {\n if (sortUndefined === 'first') return aUndefined ? -1 : 1;\n if (sortUndefined === 'last') return aUndefined ? 1 : -1;\n sortInt = aUndefined && bUndefined ? 0 : aUndefined ? sortUndefined : -sortUndefined;\n }\n }\n if (sortInt === 0) {\n sortInt = columnInfo.sortingFn(rowA, rowB, sortEntry.id);\n }\n\n // If sorting is non-zero, take care of desc and inversion\n if (sortInt !== 0) {\n if (isDesc) {\n sortInt *= -1;\n }\n if (columnInfo.invertSorting) {\n sortInt *= -1;\n }\n return sortInt;\n }\n }\n return rowA.index - rowB.index;\n });\n\n // If there are sub-rows, sort them\n sortedData.forEach(row => {\n var _row$subRows;\n sortedFlatRows.push(row);\n if ((_row$subRows = row.subRows) != null && _row$subRows.length) {\n row.subRows = sortData(row.subRows);\n }\n });\n return sortedData;\n };\n return {\n rows: sortData(rowModel.rows),\n flatRows: sortedFlatRows,\n rowsById: rowModel.rowsById\n };\n }, getMemoOptions(table.options, 'debugTable', 'getSortedRowModel', () => table._autoResetPageIndex()));\n}\n\nexport { ColumnFaceting, ColumnFiltering, ColumnGrouping, ColumnOrdering, ColumnPinning, ColumnSizing, ColumnVisibility, GlobalFaceting, GlobalFiltering, Headers, RowExpanding, RowPagination, RowPinning, RowSelection, RowSorting, _getVisibleLeafColumns, aggregationFns, buildHeaderGroups, createCell, createColumn, createColumnHelper, createRow, createTable, defaultColumnSizing, expandRows, filterFns, flattenBy, functionalUpdate, getCoreRowModel, getExpandedRowModel, getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, getFilteredRowModel, getGroupedRowModel, getMemoOptions, getPaginationRowModel, getSortedRowModel, isFunction, isNumberArray, isRowSelected, isSubRowSelected, makeStateUpdater, memo, noop, orderColumns, passiveEventSupported, reSplitAlphaNumeric, selectRowsFn, shouldAutoRemoveFilter, sortingFns };\n//# sourceMappingURL=index.mjs.map\n","/**\n * vue-table\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport { createTable } from '@tanstack/table-core';\nexport * from '@tanstack/table-core';\nimport { defineComponent, h, isRef, shallowRef, watch, ref, watchEffect, unref } from 'vue';\n\nfunction trueFn() {\n return true;\n}\nconst $PROXY = Symbol('merge-proxy');\n\n// https://github.com/solidjs/solid/blob/c20ca4fd8c36bc0522fedb2c7f38a110b7ee2663/packages/solid/src/render/component.ts#L51-L118\nconst propTraps = {\n get(_, property, receiver) {\n if (property === $PROXY) return receiver;\n return _.get(property);\n },\n has(_, property) {\n return _.has(property);\n },\n set: trueFn,\n deleteProperty: trueFn,\n getOwnPropertyDescriptor(_, property) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n return _.get(property);\n },\n set: trueFn,\n deleteProperty: trueFn\n };\n },\n ownKeys(_) {\n return _.keys();\n }\n};\nfunction resolveSource(s) {\n return 'value' in s ? s.value : s;\n}\nfunction mergeProxy() {\n for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n return new Proxy({\n get(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n const v = resolveSource(sources[i])[property];\n if (v !== undefined) return v;\n }\n },\n has(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n if (property in resolveSource(sources[i])) return true;\n }\n return false;\n },\n keys() {\n const keys = [];\n for (let i = 0; i < sources.length; i++) keys.push(...Object.keys(resolveSource(sources[i])));\n return [...Array.from(new Set(keys))];\n }\n }, propTraps);\n}\n\nconst FlexRender = defineComponent({\n props: ['render', 'props'],\n setup: props => {\n return () => {\n if (typeof props.render === 'function' || typeof props.render === 'object') {\n return h(props.render, props.props);\n }\n return props.render;\n };\n }\n});\nfunction getOptionsWithReactiveData(options) {\n return mergeProxy(options, {\n data: unref(options.data)\n });\n}\nfunction useVueTable(initialOptions) {\n const IS_REACTIVE = isRef(initialOptions.data);\n const resolvedOptions = mergeProxy({\n state: {},\n // Dummy state\n onStateChange: () => {},\n // noop\n renderFallbackValue: null,\n mergeOptions(defaultOptions, options) {\n return IS_REACTIVE ? {\n ...defaultOptions,\n ...options\n } : mergeProxy(defaultOptions, options);\n }\n }, IS_REACTIVE ? getOptionsWithReactiveData(initialOptions) : initialOptions);\n const table = createTable(resolvedOptions);\n\n // Add reactivity support\n if (IS_REACTIVE) {\n const dataRef = shallowRef(initialOptions.data);\n watch(dataRef, () => {\n table.setState(prev => ({\n ...prev,\n data: dataRef.value\n }));\n }, {\n immediate: true\n });\n }\n\n // can't use `reactive` because update needs to be immutable\n const state = ref(table.initialState);\n watchEffect(() => {\n table.setOptions(prev => {\n var _initialOptions$state;\n const stateProxy = new Proxy({}, {\n get: (_, prop) => state.value[prop]\n });\n return mergeProxy(prev, IS_REACTIVE ? getOptionsWithReactiveData(initialOptions) : initialOptions, {\n // merge the initialState and `options.state`\n // create a new proxy on each `setOptions` call\n // and get the value from state on each property access\n state: mergeProxy(stateProxy, (_initialOptions$state = initialOptions.state) != null ? _initialOptions$state : {}),\n // Similarly, we'll maintain both our internal state and any user-provided\n // state.\n onStateChange: updater => {\n if (updater instanceof Function) {\n state.value = updater(state.value);\n } else {\n state.value = updater;\n }\n initialOptions.onStateChange == null || initialOptions.onStateChange(updater);\n }\n });\n });\n });\n return table;\n}\n\nexport { FlexRender, useVueTable };\n//# sourceMappingURL=index.mjs.map\n","function memo(getDeps, fn, opts) {\n let deps = opts.initialDeps ?? [];\n let result;\n let isInitial = true;\n function memoizedFunction() {\n var _a, _b, _c;\n let depTime;\n if (opts.key && ((_a = opts.debug) == null ? void 0 : _a.call(opts))) depTime = Date.now();\n const newDeps = getDeps();\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n let resultTime;\n if (opts.key && ((_b = opts.debug) == null ? void 0 : _b.call(opts))) resultTime = Date.now();\n result = fn(...newDeps);\n if (opts.key && ((_c = opts.debug) == null ? void 0 : _c.call(opts))) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n const pad = (str, num) => {\n str = String(str);\n while (str.length < num) {\n str = \" \" + str;\n }\n return str;\n };\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120)\n )}deg 100% 31%);`,\n opts == null ? void 0 : opts.key\n );\n }\n if ((opts == null ? void 0 : opts.onChange) && !(isInitial && opts.skipInitialOnChange)) {\n opts.onChange(result);\n }\n isInitial = false;\n return result;\n }\n memoizedFunction.updateDeps = (newDeps) => {\n deps = newDeps;\n };\n return memoizedFunction;\n}\nfunction notUndefined(value, msg) {\n if (value === void 0) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : \"\"}`);\n } else {\n return value;\n }\n}\nconst approxEqual = (a, b) => Math.abs(a - b) < 1.01;\nconst debounce = (targetWindow, fn, ms) => {\n let timeoutId;\n return function(...args) {\n targetWindow.clearTimeout(timeoutId);\n timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms);\n };\n};\nexport {\n approxEqual,\n debounce,\n memo,\n notUndefined\n};\n//# sourceMappingURL=utils.js.map\n","import { debounce, memo, notUndefined, approxEqual } from \"./utils.js\";\nconst getRect = (element) => {\n const { offsetWidth, offsetHeight } = element;\n return { width: offsetWidth, height: offsetHeight };\n};\nconst defaultKeyExtractor = (index) => index;\nconst defaultRangeExtractor = (range) => {\n const start = Math.max(range.startIndex - range.overscan, 0);\n const end = Math.min(range.endIndex + range.overscan, range.count - 1);\n const arr = [];\n for (let i = start; i <= end; i++) {\n arr.push(i);\n }\n return arr;\n};\nconst observeElementRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n const handler = (rect) => {\n const { width, height } = rect;\n cb({ width: Math.round(width), height: Math.round(height) });\n };\n handler(getRect(element));\n if (!targetWindow.ResizeObserver) {\n return () => {\n };\n }\n const observer = new targetWindow.ResizeObserver((entries) => {\n const run = () => {\n const entry = entries[0];\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize });\n return;\n }\n }\n handler(getRect(element));\n };\n instance.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();\n });\n observer.observe(element, { box: \"border-box\" });\n return () => {\n observer.unobserve(element);\n };\n};\nconst addEventListenerOptions = {\n passive: true\n};\nconst observeWindowRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight });\n };\n handler();\n element.addEventListener(\"resize\", handler, addEventListenerOptions);\n return () => {\n element.removeEventListener(\"resize\", handler);\n };\n};\nconst supportsScrollend = typeof window == \"undefined\" ? true : \"onscrollend\" in window;\nconst observeElementOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n const { horizontal, isRtl } = instance.options;\n offset = horizontal ? element[\"scrollLeft\"] * (isRtl && -1 || 1) : element[\"scrollTop\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n };\n};\nconst observeWindowOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n offset = element[instance.options.horizontal ? \"scrollX\" : \"scrollY\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n };\n};\nconst measureElement = (element, entry, instance) => {\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? \"inlineSize\" : \"blockSize\"]\n );\n return size;\n }\n }\n return element[instance.options.horizontal ? \"offsetWidth\" : \"offsetHeight\"];\n};\nconst windowScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nconst elementScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nclass Virtualizer {\n constructor(opts) {\n this.unsubs = [];\n this.scrollElement = null;\n this.targetWindow = null;\n this.isScrolling = false;\n this.currentScrollToIndex = null;\n this.measurementsCache = [];\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.pendingMeasuredCacheIndexes = [];\n this.prevLanes = void 0;\n this.lanesChangedFlag = false;\n this.lanesSettling = false;\n this.scrollRect = null;\n this.scrollOffset = null;\n this.scrollDirection = null;\n this.scrollAdjustments = 0;\n this.elementsCache = /* @__PURE__ */ new Map();\n this.observer = /* @__PURE__ */ (() => {\n let _ro = null;\n const get = () => {\n if (_ro) {\n return _ro;\n }\n if (!this.targetWindow || !this.targetWindow.ResizeObserver) {\n return null;\n }\n return _ro = new this.targetWindow.ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const run = () => {\n this._measureElement(entry.target, entry);\n };\n this.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();\n });\n });\n };\n return {\n disconnect: () => {\n var _a;\n (_a = get()) == null ? void 0 : _a.disconnect();\n _ro = null;\n },\n observe: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.observe(target, { box: \"border-box\" });\n },\n unobserve: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.unobserve(target);\n }\n };\n })();\n this.range = null;\n this.setOptions = (opts2) => {\n Object.entries(opts2).forEach(([key, value]) => {\n if (typeof value === \"undefined\") delete opts2[key];\n });\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {\n },\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n gap: 0,\n indexAttribute: \"data-index\",\n initialMeasurementsCache: [],\n lanes: 1,\n isScrollingResetDelay: 150,\n enabled: true,\n isRtl: false,\n useScrollendEvent: false,\n useAnimationFrameWithResizeObserver: false,\n ...opts2\n };\n };\n this.notify = (sync) => {\n var _a, _b;\n (_b = (_a = this.options).onChange) == null ? void 0 : _b.call(_a, this, sync);\n };\n this.maybeNotify = memo(\n () => {\n this.calculateRange();\n return [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ];\n },\n (isScrolling) => {\n this.notify(isScrolling);\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"maybeNotify\",\n debug: () => this.options.debug,\n initialDeps: [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ]\n }\n );\n this.cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d());\n this.unsubs = [];\n this.observer.disconnect();\n this.scrollElement = null;\n this.targetWindow = null;\n };\n this._didMount = () => {\n return () => {\n this.cleanup();\n };\n };\n this._willUpdate = () => {\n var _a;\n const scrollElement = this.options.enabled ? this.options.getScrollElement() : null;\n if (this.scrollElement !== scrollElement) {\n this.cleanup();\n if (!scrollElement) {\n this.maybeNotify();\n return;\n }\n this.scrollElement = scrollElement;\n if (this.scrollElement && \"ownerDocument\" in this.scrollElement) {\n this.targetWindow = this.scrollElement.ownerDocument.defaultView;\n } else {\n this.targetWindow = ((_a = this.scrollElement) == null ? void 0 : _a.window) ?? null;\n }\n this.elementsCache.forEach((cached) => {\n this.observer.observe(cached);\n });\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect;\n this.maybeNotify();\n })\n );\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset, isScrolling) => {\n this.scrollAdjustments = 0;\n this.scrollDirection = isScrolling ? this.getScrollOffset() < offset ? \"forward\" : \"backward\" : null;\n this.scrollOffset = offset;\n this.isScrolling = isScrolling;\n this.maybeNotify();\n })\n );\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: void 0,\n behavior: void 0\n });\n }\n };\n this.getSize = () => {\n if (!this.options.enabled) {\n this.scrollRect = null;\n return 0;\n }\n this.scrollRect = this.scrollRect ?? this.options.initialRect;\n return this.scrollRect[this.options.horizontal ? \"width\" : \"height\"];\n };\n this.getScrollOffset = () => {\n if (!this.options.enabled) {\n this.scrollOffset = null;\n return 0;\n }\n this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset === \"function\" ? this.options.initialOffset() : this.options.initialOffset);\n return this.scrollOffset;\n };\n this.getFurthestMeasurement = (measurements, index) => {\n const furthestMeasurementsFound = /* @__PURE__ */ new Map();\n const furthestMeasurements = /* @__PURE__ */ new Map();\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m];\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue;\n }\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane\n );\n if (previousFurthestMeasurement == null || measurement.end > previousFurthestMeasurement.end) {\n furthestMeasurements.set(measurement.lane, measurement);\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true);\n }\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break;\n }\n }\n return furthestMeasurements.size === this.options.lanes ? Array.from(furthestMeasurements.values()).sort((a, b) => {\n if (a.end === b.end) {\n return a.index - b.index;\n }\n return a.end - b.end;\n })[0] : void 0;\n };\n this.getMeasurementOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.options.enabled,\n this.options.lanes\n ],\n (count, paddingStart, scrollMargin, getItemKey, enabled, lanes) => {\n const lanesChanged = this.prevLanes !== void 0 && this.prevLanes !== lanes;\n if (lanesChanged) {\n this.lanesChangedFlag = true;\n }\n this.prevLanes = lanes;\n this.pendingMeasuredCacheIndexes = [];\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n lanes\n };\n },\n {\n key: false\n }\n );\n this.getMeasurements = memo(\n () => [this.getMeasurementOptions(), this.itemSizeCache],\n ({ count, paddingStart, scrollMargin, getItemKey, enabled, lanes }, itemSizeCache) => {\n if (!enabled) {\n this.measurementsCache = [];\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n return [];\n }\n if (this.laneAssignments.size > count) {\n for (const index of this.laneAssignments.keys()) {\n if (index >= count) {\n this.laneAssignments.delete(index);\n }\n }\n }\n if (this.lanesChangedFlag) {\n this.lanesChangedFlag = false;\n this.lanesSettling = true;\n this.measurementsCache = [];\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n this.pendingMeasuredCacheIndexes = [];\n }\n if (this.measurementsCache.length === 0 && !this.lanesSettling) {\n this.measurementsCache = this.options.initialMeasurementsCache;\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size);\n });\n }\n const min = this.lanesSettling ? 0 : this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;\n this.pendingMeasuredCacheIndexes = [];\n if (this.lanesSettling && this.measurementsCache.length === count) {\n this.lanesSettling = false;\n }\n const measurements = this.measurementsCache.slice(0, min);\n const laneLastIndex = new Array(lanes).fill(\n void 0\n );\n for (let m = 0; m < min; m++) {\n const item = measurements[m];\n if (item) {\n laneLastIndex[item.lane] = m;\n }\n }\n for (let i = min; i < count; i++) {\n const key = getItemKey(i);\n const cachedLane = this.laneAssignments.get(i);\n let lane;\n let start;\n if (cachedLane !== void 0 && this.options.lanes > 1) {\n lane = cachedLane;\n const prevIndex = laneLastIndex[lane];\n const prevInLane = prevIndex !== void 0 ? measurements[prevIndex] : void 0;\n start = prevInLane ? prevInLane.end + this.options.gap : paddingStart + scrollMargin;\n } else {\n const furthestMeasurement = this.options.lanes === 1 ? measurements[i - 1] : this.getFurthestMeasurement(measurements, i);\n start = furthestMeasurement ? furthestMeasurement.end + this.options.gap : paddingStart + scrollMargin;\n lane = furthestMeasurement ? furthestMeasurement.lane : i % this.options.lanes;\n if (this.options.lanes > 1) {\n this.laneAssignments.set(i, lane);\n }\n }\n const measuredSize = itemSizeCache.get(key);\n const size = typeof measuredSize === \"number\" ? measuredSize : this.options.estimateSize(i);\n const end = start + size;\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane\n };\n laneLastIndex[lane] = i;\n }\n this.measurementsCache = measurements;\n return measurements;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getMeasurements\",\n debug: () => this.options.debug\n }\n );\n this.calculateRange = memo(\n () => [\n this.getMeasurements(),\n this.getSize(),\n this.getScrollOffset(),\n this.options.lanes\n ],\n (measurements, outerSize, scrollOffset, lanes) => {\n return this.range = measurements.length > 0 && outerSize > 0 ? calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes\n }) : null;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"calculateRange\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualIndexes = memo(\n () => {\n let startIndex = null;\n let endIndex = null;\n const range = this.calculateRange();\n if (range) {\n startIndex = range.startIndex;\n endIndex = range.endIndex;\n }\n this.maybeNotify.updateDeps([this.isScrolling, startIndex, endIndex]);\n return [\n this.options.rangeExtractor,\n this.options.overscan,\n this.options.count,\n startIndex,\n endIndex\n ];\n },\n (rangeExtractor, overscan, count, startIndex, endIndex) => {\n return startIndex === null || endIndex === null ? [] : rangeExtractor({\n startIndex,\n endIndex,\n overscan,\n count\n });\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualIndexes\",\n debug: () => this.options.debug\n }\n );\n this.indexFromElement = (node) => {\n const attributeName = this.options.indexAttribute;\n const indexStr = node.getAttribute(attributeName);\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`\n );\n return -1;\n }\n return parseInt(indexStr, 10);\n };\n this._measureElement = (node, entry) => {\n const index = this.indexFromElement(node);\n const item = this.measurementsCache[index];\n if (!item) {\n return;\n }\n const key = item.key;\n const prevNode = this.elementsCache.get(key);\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode);\n }\n this.observer.observe(node);\n this.elementsCache.set(key, node);\n }\n if (node.isConnected) {\n this.resizeItem(index, this.options.measureElement(node, entry, this));\n }\n };\n this.resizeItem = (index, size) => {\n const item = this.measurementsCache[index];\n if (!item) {\n return;\n }\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size;\n const delta = size - itemSize;\n if (delta !== 0) {\n if (this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(item, delta, this) : item.start < this.getScrollOffset() + this.scrollAdjustments) {\n if (process.env.NODE_ENV !== \"production\" && this.options.debug) {\n console.info(\"correction\", delta);\n }\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: this.scrollAdjustments += delta,\n behavior: void 0\n });\n }\n this.pendingMeasuredCacheIndexes.push(item.index);\n this.itemSizeCache = new Map(this.itemSizeCache.set(item.key, size));\n this.notify(false);\n }\n };\n this.measureElement = (node) => {\n if (!node) {\n this.elementsCache.forEach((cached, key) => {\n if (!cached.isConnected) {\n this.observer.unobserve(cached);\n this.elementsCache.delete(key);\n }\n });\n return;\n }\n this._measureElement(node, void 0);\n };\n this.getVirtualItems = memo(\n () => [this.getVirtualIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems = [];\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k];\n const measurement = measurements[i];\n virtualItems.push(measurement);\n }\n return virtualItems;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualItems\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualItemForOffset = (offset) => {\n const measurements = this.getMeasurements();\n if (measurements.length === 0) {\n return void 0;\n }\n return notUndefined(\n measurements[findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index) => notUndefined(measurements[index]).start,\n offset\n )]\n );\n };\n this.getMaxScrollOffset = () => {\n if (!this.scrollElement) return 0;\n if (\"scrollHeight\" in this.scrollElement) {\n return this.options.horizontal ? this.scrollElement.scrollWidth - this.scrollElement.clientWidth : this.scrollElement.scrollHeight - this.scrollElement.clientHeight;\n } else {\n const doc = this.scrollElement.document.documentElement;\n return this.options.horizontal ? doc.scrollWidth - this.scrollElement.innerWidth : doc.scrollHeight - this.scrollElement.innerHeight;\n }\n };\n this.getOffsetForAlignment = (toOffset, align, itemSize = 0) => {\n if (!this.scrollElement) return 0;\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n if (align === \"auto\") {\n align = toOffset >= scrollOffset + size ? \"end\" : \"start\";\n }\n if (align === \"center\") {\n toOffset += (itemSize - size) / 2;\n } else if (align === \"end\") {\n toOffset -= size;\n }\n const maxOffset = this.getMaxScrollOffset();\n return Math.max(Math.min(maxOffset, toOffset), 0);\n };\n this.getOffsetForIndex = (index, align = \"auto\") => {\n index = Math.max(0, Math.min(index, this.options.count - 1));\n const item = this.measurementsCache[index];\n if (!item) {\n return void 0;\n }\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n if (align === \"auto\") {\n if (item.end >= scrollOffset + size - this.options.scrollPaddingEnd) {\n align = \"end\";\n } else if (item.start <= scrollOffset + this.options.scrollPaddingStart) {\n align = \"start\";\n } else {\n return [scrollOffset, align];\n }\n }\n if (align === \"end\" && index === this.options.count - 1) {\n return [this.getMaxScrollOffset(), align];\n }\n const toOffset = align === \"end\" ? item.end + this.options.scrollPaddingEnd : item.start - this.options.scrollPaddingStart;\n return [\n this.getOffsetForAlignment(toOffset, align, item.size),\n align\n ];\n };\n this.isDynamicMode = () => this.elementsCache.size > 0;\n this.scrollToOffset = (toOffset, { align = \"start\", behavior } = {}) => {\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: void 0,\n behavior\n });\n };\n this.scrollToIndex = (index, { align: initialAlign = \"auto\", behavior } = {}) => {\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n index = Math.max(0, Math.min(index, this.options.count - 1));\n this.currentScrollToIndex = index;\n let attempts = 0;\n const maxAttempts = 10;\n const tryScroll = (currentAlign) => {\n if (!this.targetWindow) return;\n const offsetInfo = this.getOffsetForIndex(index, currentAlign);\n if (!offsetInfo) {\n console.warn(\"Failed to get offset for index:\", index);\n return;\n }\n const [offset, align] = offsetInfo;\n this._scrollToOffset(offset, { adjustments: void 0, behavior });\n this.targetWindow.requestAnimationFrame(() => {\n if (!this.targetWindow) return;\n const verify = () => {\n if (this.currentScrollToIndex !== index) return;\n const currentOffset = this.getScrollOffset();\n const afterInfo = this.getOffsetForIndex(index, align);\n if (!afterInfo) {\n console.warn(\"Failed to get offset for index:\", index);\n return;\n }\n if (!approxEqual(afterInfo[0], currentOffset)) {\n scheduleRetry(align);\n }\n };\n if (this.isDynamicMode()) {\n this.targetWindow.requestAnimationFrame(verify);\n } else {\n verify();\n }\n });\n };\n const scheduleRetry = (align) => {\n if (!this.targetWindow) return;\n if (this.currentScrollToIndex !== index) return;\n attempts++;\n if (attempts < maxAttempts) {\n if (process.env.NODE_ENV !== \"production\" && this.options.debug) {\n console.info(\"Schedule retry\", attempts, maxAttempts);\n }\n this.targetWindow.requestAnimationFrame(() => tryScroll(align));\n } else {\n console.warn(\n `Failed to scroll to index ${index} after ${maxAttempts} attempts.`\n );\n }\n };\n tryScroll(initialAlign);\n };\n this.scrollBy = (delta, { behavior } = {}) => {\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n this._scrollToOffset(this.getScrollOffset() + delta, {\n adjustments: void 0,\n behavior\n });\n };\n this.getTotalSize = () => {\n var _a;\n const measurements = this.getMeasurements();\n let end;\n if (measurements.length === 0) {\n end = this.options.paddingStart;\n } else if (this.options.lanes === 1) {\n end = ((_a = measurements[measurements.length - 1]) == null ? void 0 : _a.end) ?? 0;\n } else {\n const endByLane = Array(this.options.lanes).fill(null);\n let endIndex = measurements.length - 1;\n while (endIndex >= 0 && endByLane.some((val) => val === null)) {\n const item = measurements[endIndex];\n if (endByLane[item.lane] === null) {\n endByLane[item.lane] = item.end;\n }\n endIndex--;\n }\n end = Math.max(...endByLane.filter((val) => val !== null));\n }\n return Math.max(\n end - this.options.scrollMargin + this.options.paddingEnd,\n 0\n );\n };\n this._scrollToOffset = (offset, {\n adjustments,\n behavior\n }) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this);\n };\n this.measure = () => {\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.notify(false);\n };\n this.setOptions(opts);\n }\n}\nconst findNearestBinarySearch = (low, high, getCurrentValue, value) => {\n while (low <= high) {\n const middle = (low + high) / 2 | 0;\n const currentValue = getCurrentValue(middle);\n if (currentValue < value) {\n low = middle + 1;\n } else if (currentValue > value) {\n high = middle - 1;\n } else {\n return middle;\n }\n }\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes\n}) {\n const lastIndex = measurements.length - 1;\n const getOffset = (index) => measurements[index].start;\n if (measurements.length <= lanes) {\n return {\n startIndex: 0,\n endIndex: lastIndex\n };\n }\n let startIndex = findNearestBinarySearch(\n 0,\n lastIndex,\n getOffset,\n scrollOffset\n );\n let endIndex = startIndex;\n if (lanes === 1) {\n while (endIndex < lastIndex && measurements[endIndex].end < scrollOffset + outerSize) {\n endIndex++;\n }\n } else if (lanes > 1) {\n const endPerLane = Array(lanes).fill(0);\n while (endIndex < lastIndex && endPerLane.some((pos) => pos < scrollOffset + outerSize)) {\n const item = measurements[endIndex];\n endPerLane[item.lane] = item.end;\n endIndex++;\n }\n const startPerLane = Array(lanes).fill(scrollOffset + outerSize);\n while (startIndex >= 0 && startPerLane.some((pos) => pos >= scrollOffset)) {\n const item = measurements[startIndex];\n startPerLane[item.lane] = item.start;\n startIndex--;\n }\n startIndex = Math.max(0, startIndex - startIndex % lanes);\n endIndex = Math.min(lastIndex, endIndex + (lanes - 1 - endIndex % lanes));\n }\n return { startIndex, endIndex };\n}\nexport {\n Virtualizer,\n approxEqual,\n debounce,\n defaultKeyExtractor,\n defaultRangeExtractor,\n elementScroll,\n measureElement,\n memo,\n notUndefined,\n observeElementOffset,\n observeElementRect,\n observeWindowOffset,\n observeWindowRect,\n windowScroll\n};\n//# sourceMappingURL=index.js.map\n","import { elementScroll, observeElementOffset, observeElementRect, windowScroll, observeWindowOffset, observeWindowRect, Virtualizer } from \"@tanstack/virtual-core\";\nexport * from \"@tanstack/virtual-core\";\nimport { computed, unref, shallowRef, watch, triggerRef, onScopeDispose } from \"vue\";\nfunction useVirtualizerBase(options) {\n const virtualizer = new Virtualizer(unref(options));\n const state = shallowRef(virtualizer);\n const cleanup = virtualizer._didMount();\n watch(\n () => unref(options).getScrollElement(),\n (el) => {\n if (el) {\n virtualizer._willUpdate();\n }\n },\n {\n immediate: true\n }\n );\n watch(\n () => unref(options),\n (options2) => {\n virtualizer.setOptions({\n ...options2,\n onChange: (instance, sync) => {\n var _a;\n triggerRef(state);\n (_a = options2.onChange) == null ? void 0 : _a.call(options2, instance, sync);\n }\n });\n virtualizer._willUpdate();\n triggerRef(state);\n },\n {\n immediate: true\n }\n );\n onScopeDispose(cleanup);\n return state;\n}\nfunction useVirtualizer(options) {\n return useVirtualizerBase(\n computed(() => ({\n observeElementRect,\n observeElementOffset,\n scrollToFn: elementScroll,\n ...unref(options)\n }))\n );\n}\nfunction useWindowVirtualizer(options) {\n return useVirtualizerBase(\n computed(() => ({\n getScrollElement: () => typeof document !== \"undefined\" ? window : null,\n observeElementRect: observeWindowRect,\n observeElementOffset: observeWindowOffset,\n scrollToFn: windowScroll,\n initialOffset: () => typeof document !== \"undefined\" ? window.scrollY : 0,\n ...unref(options)\n }))\n );\n}\nexport {\n useVirtualizer,\n useWindowVirtualizer\n};\n//# sourceMappingURL=index.js.map\n","function serialize(o){return typeof o==\"string\"?`'${o}'`:new c().serialize(o)}const c=/*@__PURE__*/function(){class o{#t=new Map;compare(t,r){const e=typeof t,n=typeof r;return e===\"string\"&&n===\"string\"?t.localeCompare(r):e===\"number\"&&n===\"number\"?t-r:String.prototype.localeCompare.call(this.serialize(t,true),this.serialize(r,true))}serialize(t,r){if(t===null)return \"null\";switch(typeof t){case \"string\":return r?t:`'${t}'`;case \"bigint\":return `${t}n`;case \"object\":return this.$object(t);case \"function\":return this.$function(t)}return String(t)}serializeObject(t){const r=Object.prototype.toString.call(t);if(r!==\"[object Object]\")return this.serializeBuiltInType(r.length<10?`unknown:${r}`:r.slice(8,-1),t);const e=t.constructor,n=e===Object||e===void 0?\"\":e.name;if(n!==\"\"&&globalThis[n]===e)return this.serializeBuiltInType(n,t);if(typeof t.toJSON==\"function\"){const i=t.toJSON();return n+(i!==null&&typeof i==\"object\"?this.$object(i):`(${this.serialize(i)})`)}return this.serializeObjectEntries(n,Object.entries(t))}serializeBuiltInType(t,r){const e=this[\"$\"+t];if(e)return e.call(this,r);if(typeof r?.entries==\"function\")return this.serializeObjectEntries(t,r.entries());throw new Error(`Cannot serialize ${t}`)}serializeObjectEntries(t,r){const e=Array.from(r).sort((i,a)=>this.compare(i[0],a[0]));let n=`${t}{`;for(let i=0;i<e.length;i++){const[a,l]=e[i];n+=`${this.serialize(a,true)}:${this.serialize(l)}`,i<e.length-1&&(n+=\",\");}return n+\"}\"}$object(t){let r=this.#t.get(t);return r===void 0&&(this.#t.set(t,`#${this.#t.size}`),r=this.serializeObject(t),this.#t.set(t,r)),r}$function(t){const r=Function.prototype.toString.call(t);return r.slice(-15)===\"[native code] }\"?`${t.name||\"\"}()[native]`:`${t.name}(${t.length})${r.replace(/\\s*\\n\\s*/g,\"\")}`}$Array(t){let r=\"[\";for(let e=0;e<t.length;e++)r+=this.serialize(t[e]),e<t.length-1&&(r+=\",\");return r+\"]\"}$Date(t){try{return `Date(${t.toISOString()})`}catch{return \"Date(null)\"}}$ArrayBuffer(t){return `ArrayBuffer[${new Uint8Array(t).join(\",\")}]`}$Set(t){return `Set${this.$Array(Array.from(t).sort((r,e)=>this.compare(r,e)))}`}$Map(t){return this.serializeObjectEntries(\"Map\",t.entries())}}for(const s of [\"Error\",\"RegExp\",\"URL\"])o.prototype[\"$\"+s]=function(t){return `${s}(${t})`};for(const s of [\"Int8Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"Int16Array\",\"Uint16Array\",\"Int32Array\",\"Uint32Array\",\"Float32Array\",\"Float64Array\"])o.prototype[\"$\"+s]=function(t){return `${s}[${t.join(\",\")}]`};for(const s of [\"BigInt64Array\",\"BigUint64Array\"])o.prototype[\"$\"+s]=function(t){return `${s}[${t.join(\"n,\")}${t.length>0?\"n\":\"\"}]`};return o}();\n\nfunction isEqual(object1, object2) {\n if (object1 === object2) {\n return true;\n }\n if (serialize(object1) === serialize(object2)) {\n return true;\n }\n return false;\n}\n\nexport { isEqual as i, serialize as s };\n","const z=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],R=[1116352408,1899447441,-1245643825,-373957723,961987163,1508970993,-1841331548,-1424204075,-670586216,310598401,607225278,1426881987,1925078388,-2132889090,-1680079193,-1046744716,-459576895,-272742522,264347078,604807628,770255983,1249150122,1555081692,1996064986,-1740746414,-1473132947,-1341970488,-1084653625,-958395405,-710438585,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,-2117940946,-1838011259,-1564481375,-1474664885,-1035236496,-949202525,-778901479,-694614492,-200395387,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,-2067236844,-1933114872,-1866530822,-1538233109,-1090935817,-965641998],S=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\",r=[];class k{_data=new l;_hash=new l([...z]);_nDataBytes=0;_minBufferSize=0;finalize(e){e&&this._append(e);const s=this._nDataBytes*8,t=this._data.sigBytes*8;return this._data.words[t>>>5]|=128<<24-t%32,this._data.words[(t+64>>>9<<4)+14]=Math.floor(s/4294967296),this._data.words[(t+64>>>9<<4)+15]=s,this._data.sigBytes=this._data.words.length*4,this._process(),this._hash}_doProcessBlock(e,s){const t=this._hash.words;let i=t[0],o=t[1],a=t[2],c=t[3],h=t[4],g=t[5],f=t[6],y=t[7];for(let n=0;n<64;n++){if(n<16)r[n]=e[s+n]|0;else {const d=r[n-15],j=(d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3,B=r[n-2],x=(B<<15|B>>>17)^(B<<13|B>>>19)^B>>>10;r[n]=j+r[n-7]+x+r[n-16];}const m=h&g^~h&f,p=i&o^i&a^o&a,u=(i<<30|i>>>2)^(i<<19|i>>>13)^(i<<10|i>>>22),b=(h<<26|h>>>6)^(h<<21|h>>>11)^(h<<7|h>>>25),w=y+b+m+R[n]+r[n],M=u+p;y=f,f=g,g=h,h=c+w|0,c=a,a=o,o=i,i=w+M|0;}t[0]=t[0]+i|0,t[1]=t[1]+o|0,t[2]=t[2]+a|0,t[3]=t[3]+c|0,t[4]=t[4]+h|0,t[5]=t[5]+g|0,t[6]=t[6]+f|0,t[7]=t[7]+y|0;}_append(e){typeof e==\"string\"&&(e=l.fromUtf8(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes;}_process(e){let s,t=this._data.sigBytes/64;e?t=Math.ceil(t):t=Math.max((t|0)-this._minBufferSize,0);const i=t*16,o=Math.min(i*4,this._data.sigBytes);if(i){for(let a=0;a<i;a+=16)this._doProcessBlock(this._data.words,a);s=this._data.words.splice(0,i),this._data.sigBytes-=o;}return new l(s,o)}}class l{words;sigBytes;constructor(e,s){e=this.words=e||[],this.sigBytes=s===void 0?e.length*4:s;}static fromUtf8(e){const s=unescape(encodeURIComponent(e)),t=s.length,i=[];for(let o=0;o<t;o++)i[o>>>2]|=(s.charCodeAt(o)&255)<<24-o%4*8;return new l(i,t)}toBase64(){const e=[];for(let s=0;s<this.sigBytes;s+=3){const t=this.words[s>>>2]>>>24-s%4*8&255,i=this.words[s+1>>>2]>>>24-(s+1)%4*8&255,o=this.words[s+2>>>2]>>>24-(s+2)%4*8&255,a=t<<16|i<<8|o;for(let c=0;c<4&&s*8+c*6<this.sigBytes*8;c++)e.push(S.charAt(a>>>6*(3-c)&63));}return e.join(\"\")}concat(e){if(this.words[this.sigBytes>>>2]&=4294967295<<32-this.sigBytes%4*8,this.words.length=Math.ceil(this.sigBytes/4),this.sigBytes%4)for(let s=0;s<e.sigBytes;s++){const t=e.words[s>>>2]>>>24-s%4*8&255;this.words[this.sigBytes+s>>>2]|=t<<24-(this.sigBytes+s)%4*8;}else for(let s=0;s<e.sigBytes;s+=4)this.words[this.sigBytes+s>>>2]=e.words[s>>>2];this.sigBytes+=e.sigBytes;}}function digest(_){return new k().finalize(_).toBase64()}\n\nexport { digest };\n","import { s as serialize } from './shared/ohash.D__AXeF1.mjs';\nexport { i as isEqual } from './shared/ohash.D__AXeF1.mjs';\nimport { digest } from 'ohash/crypto';\nexport { digest } from 'ohash/crypto';\n\nfunction hash(input) {\n return digest(serialize(input));\n}\n\nexport { hash, serialize };\n","<template>\n <button type=\"button\" :class=\"classNames\" @click=\"onClick\" />\n</template>\n\n<script setup lang=\"ts\">\nimport type { VTableExpandIconProps } from '../interface'\n\ndefineOptions({ name: 'ExpandIcon' })\n\nconst props = defineProps<VTableExpandIconProps>()\n\nconst classNames = computed(() => {\n return {\n [`row-expand-icon`]: true,\n [`row-expand-icon-expanded`]: props.expand,\n [`row-expand-icon-collapsed`]: !props.expand,\n }\n})\n\nconst onClick = (e: MouseEvent) => {\n e.stopPropagation()\n if (!props.onExpandChange) return\n props.onExpandChange?.()\n}\n</script>\n\n<style lang=\"less\" scoped>\n// 变量定义\n@line-width: 1px;\n@checkbox-size: 16px;\n@line-type: solid;\n@table-border-color: #f0f0f0;\n@padding-xxs: 4px;\n@border-radius: 2px;\n@motion-duration-slow: 0.3s;\n@table-expand-icon-bg: #fff;\n\n// 计算变量\n@half-inner-size: (@checkbox-size / 2) - @line-width;\n@expand-icon-size: @half-inner-size * 2 + @line-width * 3;\n@table-border: @line-width @line-type @table-border-color;\n@expand-icon-line-offset: @padding-xxs - @line-width;\n@scale-ratio: (unit(@checkbox-size) / unit(@expand-icon-size));\n\n// 展开图标样式\n.row-expand-icon {\n position: relative;\n display: inline-block;\n box-sizing: border-box;\n width: @expand-icon-size;\n height: @expand-icon-size;\n padding: 0;\n color: inherit;\n line-height: @expand-icon-size;\n background: @table-expand-icon-bg;\n border: @table-border;\n border-radius: @border-radius;\n transform: scale(@scale-ratio);\n transition: all @motion-duration-slow;\n cursor: pointer;\n user-select: none;\n\n &:focus,\n &:hover,\n &:active {\n border-color: currentcolor;\n color: var(--v-table-primary-color);\n }\n\n &::before,\n &::after {\n position: absolute;\n background: currentcolor;\n transition: transform @motion-duration-slow ease-out;\n content: '';\n }\n\n // 水平线\n &::before {\n top: @half-inner-size;\n right: @expand-icon-line-offset;\n left: @expand-icon-line-offset;\n height: @line-width;\n }\n\n // 垂直线\n &::after {\n top: @expand-icon-line-offset;\n bottom: @expand-icon-line-offset;\n left: @half-inner-size;\n width: @line-width;\n transform: rotate(90deg);\n }\n}\n\n// 收起状态(显示 + 号)\n.row-expand-icon-collapsed {\n &::before {\n transform: rotate(-180deg);\n }\n\n &::after {\n transform: rotate(0deg);\n }\n}\n\n// 展开状态(显示 - 号)\n.row-expand-icon-expanded {\n &::before {\n transform: rotate(0deg);\n }\n\n &::after {\n transform: rotate(90deg);\n opacity: 0;\n }\n}\n\n// 占位状态(不显示图标,但保持空间)\n.row-expand-icon-spaced {\n &::before,\n &::after {\n display: none;\n content: none;\n }\n\n background: transparent;\n border: 0;\n visibility: hidden;\n}\n</style>\n","<template>\n <div\n v-if=\"props.treeConfig?.enabled && props.cell.column.id === props.columns[0]?.columnKey\"\n class=\"flex h-full items-center gap-[8px]\"\n :style=\"{\n paddingLeft: `${props.row.depth * (props.treeConfig?.indentSize ?? 16)}px`,\n }\"\n >\n <div class=\"flex-shrink-0\" :class=\"[props.row.getCanExpand() ? 'visible' : 'invisible']\">\n <slot\n :expand=\"props.row.getIsExpanded()\"\n :on-expand-change=\"props.row.toggleExpanded\"\n name=\"customExpandIcon\"\n >\n <ExpandIcon :expand=\"props.row.getIsExpanded()\" @expand-change=\"props.row.toggleExpanded\" />\n </slot>\n </div>\n <slot name=\"bodyCell\" v-bind=\"bodyCellSlotProps\">\n <component :is=\"cellRender\" />\n </slot>\n </div>\n\n <slot v-else name=\"bodyCell\" v-bind=\"bodyCellSlotProps\">\n <component :is=\"cellRender\" />\n </slot>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, h } from 'vue'\nimport type { Cell, Row } from '@tanstack/vue-table'\nimport ExpandIcon from '../icons/ExpandIcon.vue'\nimport type { VTableBodyCellProps, VTableColumn, VTableSlots, VTableTreeConfig } from '../interface'\n\ndefineOptions({ name: 'BodyCell' })\n\nconst props = defineProps<{\n cell: Cell<any, any>\n treeConfig: VTableTreeConfig\n columns: VTableColumn[]\n row: Row<any>\n}>()\n\ndefineSlots<VTableSlots>()\n\nconst cellRender = computed(() => {\n const cellDef = props.cell.column.columnDef.cell\n if (typeof cellDef === 'function') {\n const result = cellDef(props.cell.getContext())\n return typeof result === 'string' ? h('span', result) : result\n }\n // 默认显示单元格值\n return h('span', props.cell.getValue() ?? '')\n})\n\nconst bodyCellSlotProps = computed<VTableBodyCellProps>(() => {\n return {\n row: props.cell.row.original,\n column: props.cell.column.columnDef.meta!,\n columnKey: props.cell.column.id,\n rowIndex: props.cell.row.index,\n }\n})\n</script>\n","<template>\n <div class=\"sorter-icon inline-flex flex-col items-center\">\n <svg\n class=\"sorter-up h-[10px] w-[10px]\"\n :class=\"{ active: sort === 'asc' }\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M76.3 632.8l405.1-489.1c16.9-18.9 46.5-18.9 63.4 0l403.1 489.1c24.4 27.4 5 70.8-31.7 70.8H107.9c-36.6 0-56.1-43.4-31.6-70.8z\"\n ></path>\n </svg>\n <svg\n class=\"sorter-down h-[10px] w-[10px]\"\n :class=\"{ active: sort === 'desc' }\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M76.3 392.3l403.1 489.1c16.9 18.9 46.5 18.9 63.4 0l405.1-489.1c24.4-27.4 5-70.8-31.7-70.8H108.1c-36.8 0-56.3 43.4-31.8 70.8z\"\n ></path>\n </svg>\n </div>\n</template>\n\n<script setup lang=\"ts\">\ndefineOptions({\n name: 'SorterIcon',\n})\n\ndefineProps<{\n sort?: 'asc' | 'desc' | null\n}>()\n</script>\n\n<style lang=\"less\" scoped>\n.sorter-icon {\n color: var(--v-table-header-icon-color);\n}\n.sorter-down {\n margin-top: -0.3em;\n}\n.active {\n color: var(--v-table-primary-color);\n}\n</style>\n","<template>\n <svg\n class=\"filter-icon h-[12px] w-[12px]\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n >\n <path\n d=\"M325.714286 884.571429c0 20.228571 16.228571 36.571429 36.342857 36.571428h299.885714c20.114286 0 36.342857-16.342857 36.342857-36.571428V660.571429H325.714286v224z m606.971428-781.714286H91.314286c-28 0-45.485714 30.514286-31.428572 54.857143l252.914286 429.714285h398.628571l252.914286-429.714285c13.828571-24.342857-3.657143-54.857143-31.657143-54.857143z\"\n ></path>\n </svg>\n</template>\n\n<script lang=\"ts\" setup>\ndefineOptions({ name: 'FilterIcon' })\n</script>\n\n<style lang=\"less\" scoped>\n.filter-icon {\n color: var(--v-table-header-icon-color);\n &.active {\n color: var(--v-table-primary-color);\n }\n}\n</style>\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nconst yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);\nfunction getSideAxis(placement) {\n return yAxisSides.has(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const validMiddleware = middleware.filter(Boolean);\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n var _platform$detectOverf;\n const {\n name,\n fn\n } = validMiddleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform: {\n ...platform,\n detectOverflow: (_platform$detectOverf = platform.detectOverflow) != null ? _platform$detectOverf : detectOverflow\n },\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects,\n platform\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = originSides.has(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n platform\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = originSides.has(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nconst invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);\n}\nconst tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);\nfunction isTableElement(element) {\n return tableElements.has(getNodeName(element));\n}\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(element) {\n return topLayerSelectors.some(selector => {\n try {\n return element.matches(selector);\n } catch (_e) {\n return false;\n }\n });\n}\nconst transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];\nconst willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];\nconst containValues = ['paint', 'layout', 'strict', 'content'];\nfunction isContainingBlock(elementOrCss) {\n const webkit = isWebKit();\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nconst lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);\nfunction isLastTraversableNode(node) {\n return lastTraversableNodeNames.has(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n // visual width of the <html> but this is not considered in the size\n // of `html.clientWidth`.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n width -= clippingStableScrollbarWidth;\n }\n } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n // If the <body> scrollbar is on the left, the width needs to be extended\n // by the scrollbar amount so there isn't extra space on the right.\n width += windowScrollbarX;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\nconst absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n resizeObserver.observe(floating);\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { arrow as arrow$1, computePosition } from '@floating-ui/dom';\nexport { autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size } from '@floating-ui/dom';\nimport { isNode, getNodeName } from '@floating-ui/utils/dom';\nimport { unref, computed, ref, shallowRef, watch, getCurrentScope, onScopeDispose, shallowReadonly } from 'vue-demi';\n\nfunction isComponentPublicInstance(target) {\n return target != null && typeof target === 'object' && '$el' in target;\n}\nfunction unwrapElement(target) {\n if (isComponentPublicInstance(target)) {\n const element = target.$el;\n return isNode(element) && getNodeName(element) === '#comment' ? null : element;\n }\n return target;\n}\n\nfunction toValue(source) {\n return typeof source === 'function' ? source() : unref(source);\n}\n\n/**\n * Positions an inner element of the floating element such that it is centered to the reference element.\n * @param options The arrow options.\n * @see https://floating-ui.com/docs/arrow\n */\nfunction arrow(options) {\n return {\n name: 'arrow',\n options,\n fn(args) {\n const element = unwrapElement(toValue(options.element));\n if (element == null) {\n return {};\n }\n return arrow$1({\n element,\n padding: options.padding\n }).fn(args);\n }\n };\n}\n\nfunction getDPR(element) {\n if (typeof window === 'undefined') {\n return 1;\n }\n const win = element.ownerDocument.defaultView || window;\n return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n const dpr = getDPR(element);\n return Math.round(value * dpr) / dpr;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element next to a reference element when it is given a certain CSS positioning strategy.\n * @param reference The reference template ref.\n * @param floating The floating template ref.\n * @param options The floating options.\n * @see https://floating-ui.com/docs/vue\n */\nfunction useFloating(reference, floating, options) {\n if (options === void 0) {\n options = {};\n }\n const whileElementsMountedOption = options.whileElementsMounted;\n const openOption = computed(() => {\n var _toValue;\n return (_toValue = toValue(options.open)) != null ? _toValue : true;\n });\n const middlewareOption = computed(() => toValue(options.middleware));\n const placementOption = computed(() => {\n var _toValue2;\n return (_toValue2 = toValue(options.placement)) != null ? _toValue2 : 'bottom';\n });\n const strategyOption = computed(() => {\n var _toValue3;\n return (_toValue3 = toValue(options.strategy)) != null ? _toValue3 : 'absolute';\n });\n const transformOption = computed(() => {\n var _toValue4;\n return (_toValue4 = toValue(options.transform)) != null ? _toValue4 : true;\n });\n const referenceElement = computed(() => unwrapElement(reference.value));\n const floatingElement = computed(() => unwrapElement(floating.value));\n const x = ref(0);\n const y = ref(0);\n const strategy = ref(strategyOption.value);\n const placement = ref(placementOption.value);\n const middlewareData = shallowRef({});\n const isPositioned = ref(false);\n const floatingStyles = computed(() => {\n const initialStyles = {\n position: strategy.value,\n left: '0',\n top: '0'\n };\n if (!floatingElement.value) {\n return initialStyles;\n }\n const xVal = roundByDPR(floatingElement.value, x.value);\n const yVal = roundByDPR(floatingElement.value, y.value);\n if (transformOption.value) {\n return {\n ...initialStyles,\n transform: \"translate(\" + xVal + \"px, \" + yVal + \"px)\",\n ...(getDPR(floatingElement.value) >= 1.5 && {\n willChange: 'transform'\n })\n };\n }\n return {\n position: strategy.value,\n left: xVal + \"px\",\n top: yVal + \"px\"\n };\n });\n let whileElementsMountedCleanup;\n function update() {\n if (referenceElement.value == null || floatingElement.value == null) {\n return;\n }\n const open = openOption.value;\n computePosition(referenceElement.value, floatingElement.value, {\n middleware: middlewareOption.value,\n placement: placementOption.value,\n strategy: strategyOption.value\n }).then(position => {\n x.value = position.x;\n y.value = position.y;\n strategy.value = position.strategy;\n placement.value = position.placement;\n middlewareData.value = position.middlewareData;\n /**\n * The floating element's position may be recomputed while it's closed\n * but still mounted (such as when transitioning out). To ensure\n * `isPositioned` will be `false` initially on the next open, avoid\n * setting it to `true` when `open === false` (must be specified).\n */\n isPositioned.value = open !== false;\n });\n }\n function cleanup() {\n if (typeof whileElementsMountedCleanup === 'function') {\n whileElementsMountedCleanup();\n whileElementsMountedCleanup = undefined;\n }\n }\n function attach() {\n cleanup();\n if (whileElementsMountedOption === undefined) {\n update();\n return;\n }\n if (referenceElement.value != null && floatingElement.value != null) {\n whileElementsMountedCleanup = whileElementsMountedOption(referenceElement.value, floatingElement.value, update);\n return;\n }\n }\n function reset() {\n if (!openOption.value) {\n isPositioned.value = false;\n }\n }\n watch([middlewareOption, placementOption, strategyOption, openOption], update, {\n flush: 'sync'\n });\n watch([referenceElement, floatingElement], attach, {\n flush: 'sync'\n });\n watch(openOption, reset, {\n flush: 'sync'\n });\n if (getCurrentScope()) {\n onScopeDispose(cleanup);\n }\n return {\n x: shallowReadonly(x),\n y: shallowReadonly(y),\n strategy: shallowReadonly(strategy),\n placement: shallowReadonly(placement),\n middlewareData: shallowReadonly(middlewareData),\n isPositioned: shallowReadonly(isPositioned),\n floatingStyles,\n update\n };\n}\n\nexport { arrow, useFloating };\n","<template>\n <div ref=\"referenceRef\" class=\"popover-trigger\" @click=\"props.onOpenChange(!props.open)\">\n <slot />\n </div>\n\n <Teleport to=\"body\">\n <Transition name=\"popover-fade\">\n <div v-if=\"open\" ref=\"floatingRef\" :style=\"floatingStyles\" class=\"popover-content\">\n <slot name=\"content\" />\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport type { VNode } from 'vue'\nimport { flip, offset, shift, useFloating, type Placement } from '@floating-ui/vue'\n\ndefineOptions({ name: 'VPopover' })\n\ndefineSlots<{\n default: () => VNode\n content: () => VNode\n}>()\n\nconst props = withDefaults(\n defineProps<{ open?: boolean; onOpenChange?: (value: boolean) => void; placement?: Placement }>(),\n {\n open: false,\n placement: 'bottom-end',\n onOpenChange: () => {},\n },\n)\n\nconst referenceRef = ref<HTMLElement | null>(null)\nconst floatingRef = ref<HTMLElement | null>(null)\n\nconst { floatingStyles } = useFloating(referenceRef, floatingRef, {\n placement: computed(() => props.placement),\n middleware: [\n offset(({ placement }) => ({\n mainAxis: 12,\n crossAxis: placement.includes('-start') ? -12 : placement.includes('-end') ? 16 : 0,\n })),\n flip(),\n shift({ padding: 8 }),\n ],\n})\n\nconst handleClickOutside = (e: MouseEvent) => {\n if (!props.open) return\n const target = e.target as Node\n if (\n referenceRef.value &&\n floatingRef.value &&\n !referenceRef.value.contains(target) &&\n !floatingRef.value.contains(target)\n ) {\n props.onOpenChange(false)\n }\n}\n\nonMounted(() => {\n document.addEventListener('click', handleClickOutside)\n})\n\nonUnmounted(() => {\n document.removeEventListener('click', handleClickOutside)\n})\n</script>\n\n<style scoped>\n.popover-trigger {\n display: inline-block;\n}\n\n.popover-content {\n z-index: 1050;\n background: #fff;\n border-radius: 6px;\n box-shadow:\n 0 6px 16px 0 rgba(0, 0, 0, 0.08),\n 0 3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n\n.popover-arrow {\n position: absolute;\n width: 8px;\n height: 8px;\n background: #fff;\n transform: rotate(45deg);\n}\n\n.popover-fade-enter-active {\n transition: opacity 0.15s ease;\n}\n\n.popover-fade-leave-active {\n transition: opacity 0.1s ease;\n}\n\n.popover-fade-enter-from,\n.popover-fade-leave-to {\n opacity: 0;\n}\n</style>\n","import { computed, defineComponent, h, ref, type PropType } from 'vue'\nimport type { Header } from '@tanstack/vue-table'\nimport type { VTableSlots } from '..'\nimport FilterIcon from '../icons/FilterIcon.vue'\nimport VPopover from '../libs/VPopover.vue'\n\nexport default defineComponent({\n name: 'HeaderFilter',\n props: {\n header: {\n type: Object as PropType<Header<any, any>>,\n required: true,\n },\n },\n setup(props) {\n const slots = useSlots() as VTableSlots\n const column = computed(() => props.header.column)\n const columnMeta = computed(() => column.value.columnDef.meta!)\n\n const open = ref(false)\n\n const _filterModelValue = ref<any>()\n const filterModelValue = computed<any>({\n get() {\n return column.value.getFilterValue()\n },\n set(value) {\n _filterModelValue.value = value\n },\n })\n\n const confirm = () => {\n column.value.setFilterValue(_filterModelValue.value)\n open.value = false\n }\n\n const reset = () => {\n _filterModelValue.value = null\n column.value.setFilterValue(_filterModelValue.value)\n open.value = false\n }\n\n const trigger = () => (\n <div class=\"relative h-[22px] cursor-pointer\">\n <div class=\"absolute left-1/2 top-1/2 flex h-[30px] w-[20px] translate-x-[-50%] translate-y-[-50%] items-center justify-center hover:bg-[#0000000f] hover:text-[#00000073]\">\n {slots.customFilterIcon?.({\n columnKey: column.value.id,\n filtered: column.value.getIsFiltered(),\n column: columnMeta.value,\n }) || <FilterIcon class={column.value.getIsFiltered() ? 'active' : ''} />}\n </div>\n </div>\n )\n\n const content = () =>\n slots.customFilterDropdown?.({\n confirm,\n reset,\n setFilterValue: (value) => (filterModelValue.value = value),\n column: columnMeta.value,\n filterModelValue: filterModelValue.value,\n }) || h('div', '我是默认下拉')\n\n return () => {\n const customPopover = slots?.customPopover?.({\n open: open.value,\n onOpenChange: (value) => (open.value = value),\n trigger: trigger,\n content: content,\n })\n\n return (\n customPopover ||\n h(\n VPopover,\n {\n open: open.value,\n onOpenChange: (value) => (open.value = value),\n },\n {\n default: trigger,\n content: content,\n },\n )\n )\n }\n },\n})\n","<template>\n <div class=\"flex h-full w-full items-center\">\n <div\n :class=\"[canSort ? 'cursor-pointer' : '']\"\n class=\"flex min-w-0 flex-1 items-center gap-[4px]\"\n @click=\"handleHeaderClick\"\n >\n <div\n class=\"flex min-w-0 flex-1 items-center\"\n :class=\"\n columnMeta?.columnAlign === 'center'\n ? 'justify-center'\n : columnMeta?.columnAlign === 'right'\n ? 'justify-end'\n : 'justify-start'\n \"\n >\n <slot name=\"headerCell\" :column=\"columnMeta\" :column-key=\"columnId\">\n <component :is=\"headerRender\" />\n </slot>\n </div>\n <div class=\"flex items-center gap-[16px]\">\n <div v-if=\"canSort\">\n <slot name=\"customSorterIcon\" :sort=\"currentSort\">\n <SorterIcon :sort=\"currentSort\" />\n </slot>\n </div>\n\n <HeaderFilter v-if=\"canFilter\" :header=\"props.header\">\n <template v-if=\"$slots.customFilterDropdown\" #customFilterDropdown=\"slotProps\">\n <slot name=\"customFilterDropdown\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.customFilterIcon\" #customFilterIcon=\"slotProps\">\n <slot name=\"customFilterIcon\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.customPopover\" #customPopover=\"slotProps\">\n <slot name=\"customPopover\" v-bind=\"slotProps\" />\n </template>\n </HeaderFilter>\n </div>\n </div>\n <div\n v-if=\"canResize\"\n class=\"resize-handle\"\n :class=\"[column.getIsResizing() ? 'isResizing' : '']\"\n @mousedown=\"handleMouseDown\"\n @touchstart=\"handleTouchStart\"\n @dblclick.stop=\"handleDoubleClick\"\n >\n <div\n class=\"resize-handle-line\"\n :style=\"{\n transform:\n table.options.columnResizeMode === 'onEnd' && header.column.getIsResizing()\n ? `translateX(${table.getState().columnSizingInfo.deltaOffset ?? 0}px)`\n : '',\n }\"\n />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, h } from 'vue'\nimport type { Header, Table } from '@tanstack/vue-table'\nimport SorterIcon from '../icons/SorterIcon.vue'\nimport type { VTableSlots } from '../interface'\nimport HeaderFilter from './HeaderFilter.tsx'\n\ndefineOptions({ name: 'HeaderCell' })\n\ndefineSlots<VTableSlots>()\n\nconst props = defineProps<{\n header: Header<any, any>\n table: Table<any>\n}>()\n\nconst column = computed(() => props.header.column)\nconst columnDef = computed(() => column.value.columnDef)\nconst columnMeta = computed(() => columnDef.value.meta!)\nconst columnId = computed(() => column.value.id)\n\n/** 渲染表头默认值 */\nconst headerRender = computed(() => {\n const headerDef = columnDef.value.header\n if (typeof headerDef === 'function') {\n const result = headerDef(props.header.getContext())\n return typeof result === 'string' ? h('span', result) : result\n }\n // 默认显示 header 字符串或列 ID\n return h('span', String(headerDef ?? columnId.value))\n})\n\n// #region 排序相关\nconst canSort = computed(() => columnDef.value.enableSorting)\nconst currentSort = computed(() => column.value.getIsSorted() || null)\nconst handleHeaderClick = (event: MouseEvent) => {\n if (canSort.value) {\n column.value.getToggleSortingHandler()?.(event)\n }\n}\n// #endregion\n\n// #region 筛选相关\nconst canFilter = computed(() => columnDef.value.enableColumnFilter)\n// #endregion\n\nconst canResize = computed(() => column.value.getCanResize())\nconst handleMouseDown = (event: MouseEvent) => {\n props.header.getResizeHandler()?.(event)\n}\nconst handleTouchStart = (event: TouchEvent) => {\n props.header.getResizeHandler()?.(event)\n}\nconst handleDoubleClick = () => {\n column.value.resetSize()\n}\n</script>\n\n<style lang=\"less\" scoped>\n.resize-handle {\n position: absolute;\n top: 0;\n height: 100% !important;\n bottom: 0;\n left: auto !important;\n right: 0;\n cursor: col-resize;\n touch-action: none;\n user-select: auto;\n width: 8px;\n z-index: 1;\n\n .resize-handle-line {\n display: block;\n width: 1px;\n margin-left: 7px;\n height: 100% !important;\n background-color: var(--v-table-primary-color);\n opacity: 0;\n transition: opacity 0.2s;\n }\n\n &.isResizing .resize-handle-line {\n opacity: 1;\n }\n}\n</style>\n","import type { VTableProps, VTableThemeConfig } from '../interface'\nimport { defineDefaultProps } from '../utils/type'\n\n/** checkbox 选择列 */\nexport const CHECKBOX_COLUMN_KEY = 'CHECKBOX_COLUMN_KEY'\n/** 展开列 */\nexport const EXPAND_COLUMN_KEY = 'EXPAND_COLUMN_KEY'\n/** 是否是展开行 */\nexport const EXPAND_ROW_KEY = '_isExpandRow'\n/** data 中 展开子行的数据属性 */\nexport const EXPAND_ROW_DATA_INDEX = '_expandChildren'\n/** 表格默认 props */\nexport const vTableDefaultProps = defineDefaultProps<VTableProps<any>>({\n columns: () => [],\n data: () => [],\n rowHeight: undefined,\n rowKey: undefined,\n loading: false,\n fixedHeader: true,\n enableSortingRemoval: true,\n bordered: false,\n rowSelectionConfig: () => ({\n enabled: false,\n getRowCheckDisabled: () => false,\n onChange: () => {},\n }),\n loadMoreConfig: () => ({\n showNoMore: false,\n noMoreText: '没有更多了',\n }),\n paginationConfig: () => ({\n enabled: false,\n placement: 'right',\n total: 0,\n mode: 'server',\n }),\n treeConfig: () => ({\n enabled: false,\n childrenKey: 'children',\n indentSize: 16,\n }),\n enableExpandRow: false,\n enableRowHover: true,\n adaptiveColumnWidth: 120,\n defaultExpandAllRows: false,\n columnResizeMode: 'onChange',\n fixedFooter: false,\n themeConfig: () => ({}),\n defaultCheckboxColumnWidth: 40,\n defaultExpandColumnWidth: 42,\n customRowAttributes: () => ({}),\n customHeaderCellAttributes: () => ({}),\n customCellAttributes: () => ({}),\n onTableChange: () => {},\n onScrollToBottom: () => {},\n onExpandedRowsChange: () => {},\n onColumnSizingChange: () => {},\n})\n/** 默认主题配置 */\nexport const defaultThemeConfig: VTableThemeConfig = {\n primaryColor: '#1677ff',\n header: {\n color: 'rgba(0, 0, 0, 0.88)',\n backgroundColor: '#fafafa',\n borderRadius: 8,\n splitColor: '#f0f0f0',\n padding: 12,\n headerIconColor: 'rgba(0, 0, 0, 0.30)',\n },\n body: {\n color: 'rgba(0, 0, 0, 0.88)',\n backgroundColor: '#ffffff',\n padding: 12,\n },\n rowHoverColor: '#fafafa',\n border: {\n borderStyle: 'solid',\n borderColor: '#f0f0f0',\n },\n zIndex: {\n pinnedColumn: 10,\n fixedHeader: 12,\n fixedFooter: 12,\n },\n}\n","import { defaultThemeConfig } from '../constant'\nimport type { VTableThemeConfig } from '../interface'\n\n/** 主题配置 */\nexport function useTheme(config: VTableThemeConfig) {\n // 合并用户配置和默认配置\n const themeConfig = computed<VTableThemeConfig>(() => {\n return {\n primaryColor: config?.primaryColor || defaultThemeConfig.primaryColor,\n header: {\n ...defaultThemeConfig.header,\n ...config?.header,\n },\n body: {\n ...defaultThemeConfig.body,\n ...config?.body,\n },\n rowHoverColor: config?.rowHoverColor || defaultThemeConfig.rowHoverColor,\n border: {\n ...defaultThemeConfig.border,\n ...config?.border,\n },\n zIndex: {\n ...defaultThemeConfig.zIndex,\n ...config?.zIndex,\n },\n }\n })\n\n const cssVariables = computed(() => {\n const config = themeConfig.value\n\n return {\n // 主色\n '--v-table-primary-color': config.primaryColor,\n\n // 表头样式变量\n '--v-table-header-color': config.header?.color,\n '--v-table-header-bg': config.header?.backgroundColor,\n '--v-table-header-border-radius': `${config.header?.borderRadius}px`,\n '--v-table-header-split-color': config.header?.splitColor,\n '--v-table-header-padding': `${config.header?.padding}px`,\n '--v-table-header-icon-color': config.header?.headerIconColor,\n\n // 表体样式变量\n '--v-table-body-color': config.body?.color,\n '--v-table-body-bg': config.body?.backgroundColor,\n '--v-table-body-padding': `${config.body?.padding}px`,\n\n // 行 hover 颜色\n '--v-table-row-hover-color': config.rowHoverColor,\n\n // 边框样式变量\n '--v-table-border-style': config.border?.borderStyle,\n '--v-table-border-color': config.border?.borderColor,\n\n // z-index\n '--v-table-pinned-column': config.zIndex?.pinnedColumn,\n '--v-table-fixed-header': config.zIndex?.fixedHeader,\n '--v-table-fixed-footer': config.zIndex?.fixedFooter,\n }\n })\n\n return {\n cssVariables,\n themeConfig,\n }\n}\n","<template>\n <label :class=\"wrapperClasses\">\n <span :class=\"checkboxClasses\">\n <input\n type=\"checkbox\"\n :checked=\"checked\"\n :disabled=\"disabled\"\n :indeterminate=\"indeterminate\"\n class=\"checkbox-input\"\n @change=\"handleChange\"\n />\n <span class=\"checkbox-inner\" />\n </span>\n <span v-if=\"$slots.default\" class=\"checkbox-label\">\n <slot />\n </span>\n </label>\n</template>\n\n<script setup lang=\"ts\">\nimport type { VTableCheckboxProps } from '../interface'\n\ndefineOptions({ name: 'VCheckbox' })\n\nconst props = withDefaults(defineProps<VTableCheckboxProps>(), {\n checked: false,\n disabled: false,\n indeterminate: false,\n onCheckedChange: () => {},\n})\n\nconst wrapperClasses = computed(() => ({\n 'checkbox-wrapper': true,\n 'checkbox-wrapper-checked': props.checked,\n 'checkbox-wrapper-disabled': props.disabled,\n}))\n\nconst checkboxClasses = computed(() => ({\n checkbox: true,\n 'checkbox-checked': props.checked && !props.indeterminate,\n 'checkbox-disabled': props.disabled,\n 'checkbox-indeterminate': props.indeterminate,\n}))\n\nconst handleChange = (e: Event) => {\n if (props.disabled) return\n props.onCheckedChange?.(e)\n}\n</script>\n\n<style lang=\"less\" scoped>\n@checkbox-size: 16px;\n@checkbox-border-width: 1px;\n@checkbox-border-radius: 2px;\n\n@primary-color: var(--v-table-primary-color);\n@primary-color-hover: var(--v-table-primary-color);\n@primary-color-active: var(--v-table-primary-color);\n@border-color-base: #d9d9d9;\n@disabled-color: rgba(0, 0, 0, 0.25);\n@disabled-bg: #f5f5f5;\n@component-background: #fff;\n@text-color: rgba(0, 0, 0, 0.85);\n\n@animation-duration-slow: 0.3s;\n@animation-duration-base: 0.2s;\n@ease-in-out: cubic-bezier(0.645, 0.045, 0.355, 1);\n\n// ========== Checkbox 容器 ==========\n.checkbox-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n user-select: none;\n vertical-align: middle;\n\n &:hover .checkbox-inner {\n border-color: @primary-color;\n }\n\n &-disabled {\n cursor: not-allowed;\n }\n}\n\n// ========== Checkbox 主体 ==========\n.checkbox {\n position: relative;\n display: inline-block;\n line-height: 1;\n white-space: nowrap;\n vertical-align: middle;\n outline: none;\n cursor: pointer;\n\n // 隐藏原生 input\n &-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n }\n\n // Checkbox 内部方框\n &-inner {\n position: relative;\n display: block;\n width: @checkbox-size;\n height: @checkbox-size;\n background-color: @component-background;\n border: @checkbox-border-width solid @border-color-base;\n border-radius: @checkbox-border-radius;\n border-collapse: separate;\n transition: all @animation-duration-slow @ease-in-out;\n\n // 对勾\n &::after {\n position: absolute;\n top: 50%;\n left: 21.5%;\n display: table;\n width: (@checkbox-size / 14) * 5;\n height: (@checkbox-size / 14) * 8;\n border: 2px solid @component-background;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(0) translate(-50%, -50%);\n opacity: 0;\n transition: all @animation-duration-base @ease-in-out;\n content: ' ';\n }\n }\n\n // ========== 选中状态 ==========\n &-checked {\n .checkbox-inner {\n background-color: @primary-color;\n border-color: @primary-color;\n\n &::after {\n transform: rotate(45deg) scale(1) translate(-50%, -50%);\n opacity: 1;\n transition: all @animation-duration-base @ease-in-out;\n }\n }\n\n &:hover .checkbox-inner {\n background-color: @primary-color-hover;\n border-color: @primary-color-hover;\n }\n\n &:active .checkbox-inner {\n background-color: @primary-color-active;\n border-color: @primary-color-active;\n }\n }\n\n // ========== 半选状态 ==========\n &-indeterminate {\n .checkbox-inner {\n background-color: @component-background;\n border-color: @border-color-base;\n\n &::after {\n top: 50%;\n left: 50%;\n width: (@checkbox-size / 2);\n height: (@checkbox-size / 2);\n background-color: @primary-color;\n border: 0;\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n content: ' ';\n }\n }\n\n &:hover .checkbox-inner {\n background-color: @component-background;\n border-color: @primary-color;\n }\n }\n\n // ========== 禁用状态 ==========\n &-disabled {\n cursor: not-allowed;\n\n .checkbox-input {\n cursor: not-allowed;\n }\n\n .checkbox-inner {\n background-color: @disabled-bg;\n border-color: @border-color-base !important;\n\n &::after {\n border-color: @disabled-color;\n }\n }\n\n &.checkbox-checked .checkbox-inner {\n background-color: @disabled-bg;\n\n &::after {\n border-color: @disabled-color;\n }\n }\n\n &.checkbox-indeterminate .checkbox-inner::after {\n background-color: @disabled-color;\n }\n\n & + .checkbox-label {\n color: @disabled-color;\n cursor: not-allowed;\n }\n }\n}\n\n// ========== 文本标签 ==========\n.checkbox-label {\n padding-right: 8px;\n padding-left: 8px;\n color: @text-color;\n line-height: 1.5715;\n}\n\n// ========== 焦点状态 ==========\n.checkbox-wrapper:not(.checkbox-wrapper-disabled) {\n .checkbox-input:focus-visible + .checkbox-inner {\n border-color: @primary-color;\n box-shadow: 0 0 0 3px rgba(24, 144, 255, 0.08);\n }\n}\n</style>\n","<template>\n <div class=\"flex h-full items-center justify-center bg-[rgba(255,255,255,0.5)]\">\n <slot>\n <div class=\"animate-custom-spin dot-container relative\">\n <div\n v-for=\"i in 4\"\n :key=\"i\"\n class=\"dot-item animate-fade absolute origin-center scale-[0.75] rounded-full opacity-[0.3]\"\n />\n </div>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { LoadingSize } from './directive'\n\ndefineOptions({ name: 'VLoading' })\n\nconst props = withDefaults(\n defineProps<{\n size?: LoadingSize\n }>(),\n {\n size: 'default',\n },\n)\n\nconst sizeOptions = computed<{ containerSize: string; dotSize: string }>(() => {\n const sizeMap: Record<LoadingSize, { containerSize: string; dotSize: string }> = {\n default: {\n containerSize: '20px',\n dotSize: '9px',\n },\n small: {\n containerSize: '14px',\n dotSize: '6px',\n },\n large: {\n containerSize: '32px',\n dotSize: '14px',\n },\n }\n return sizeMap[props.size]\n})\n</script>\n\n<style scoped lang=\"less\">\n@keyframes spin {\n 0% {\n transform: rotate(45deg);\n }\n 100% {\n transform: rotate(405deg);\n }\n}\n\n.animate-custom-spin {\n animation: spin 1.2s linear infinite;\n}\n\n@keyframes fade {\n 100% {\n opacity: 1;\n }\n}\n\n.animate-fade {\n animation: fade 1s linear infinite alternate;\n}\n\n.dot-container {\n width: v-bind('sizeOptions.containerSize');\n height: v-bind('sizeOptions.containerSize');\n}\n\n.dot-item {\n width: v-bind('sizeOptions.dotSize');\n height: v-bind('sizeOptions.dotSize');\n background-color: var(--v-table-primary-color);\n\n &:nth-child(1) {\n top: 0;\n inset-inline-start: 0;\n }\n\n &:nth-child(2) {\n top: 0;\n inset-inline-end: 0;\n animation-delay: 0.4s;\n }\n\n &:nth-child(3) {\n inset-inline-end: 0;\n bottom: 0;\n animation-delay: 0.8s;\n }\n\n &:nth-child(4) {\n bottom: 0;\n inset-inline-start: 0;\n animation-delay: 1.2s;\n }\n}\n</style>\n","import { h, render, type Directive, type VNode } from 'vue'\nimport VLoadingComponent from './index.vue'\n\nexport type LoadingSize = 'small' | 'default' | 'large'\n\nexport type LoadingDirectiveOptions =\n | boolean\n | {\n spinning: boolean\n size?: LoadingSize\n /** 自定义 loading 图标 */\n indicator?: VNode\n bottom?: number\n }\n\ntype LoadingNode = {\n vNode: VNode | null\n element: HTMLElement | null\n}\n\ntype LoadingElement = HTMLElement & {\n _loadingNode?: LoadingNode\n _loadingOptions?: LoadingDirectiveOptions\n}\n\n/** 创建 Loading 模板 */\nconst createLoadingTpl = (el: LoadingElement, options: LoadingDirectiveOptions = true) => {\n // 如果已存在并未变化,直接返回\n if (el._loadingNode && JSON.stringify(el._loadingOptions) === JSON.stringify(options)) return\n\n destroyLoadingTpl(el)\n\n // 创建容器\n const container = document.createElement('div')\n container.style.position = 'absolute'\n container.style.top = '0'\n container.style.left = '0'\n container.style.right = '0'\n container.style.bottom = typeof options === 'boolean' ? '0' : `${options.bottom || 0}px`\n container.style.zIndex = '1000'\n\n // 创建 VNode\n const props = typeof options === 'boolean' ? {} : { size: options.size }\n const indicator = typeof options !== 'boolean' ? options.indicator : undefined\n\n const vNode = indicator\n ? h(VLoadingComponent, props, () => indicator)\n : h(VLoadingComponent, props)\n\n render(vNode, container)\n\n // 确保父元素有定位\n const currentPosition = getComputedStyle(el).position\n if (!['relative', 'absolute', 'fixed'].includes(currentPosition)) {\n el.style.position = 'relative'\n }\n\n el.appendChild(container)\n el._loadingNode = { vNode, element: container }\n el._loadingOptions = options\n}\n\n/** 销毁 Loading 组件 */\nconst destroyLoadingTpl = (el: LoadingElement) => {\n const loadingNode = el._loadingNode\n if (loadingNode) {\n render(null, loadingNode.element!)\n if (el.contains(loadingNode.element!)) {\n el.removeChild(loadingNode.element!)\n }\n delete el._loadingNode\n delete el._loadingOptions\n }\n}\n\n/** 判断是否应该显示 loading */\nconst shouldShowLoading = (value: LoadingDirectiveOptions): boolean => {\n return typeof value === 'boolean' ? value : value.spinning\n}\n\n/** v-loading 指令 */\nconst vLoading: Directive<LoadingElement, LoadingDirectiveOptions> = {\n mounted(el, binding) {\n if (shouldShowLoading(binding.value)) {\n createLoadingTpl(el, binding.value)\n }\n },\n updated(el, binding) {\n if (shouldShowLoading(binding.value)) {\n createLoadingTpl(el, binding.value)\n } else {\n destroyLoadingTpl(el)\n }\n },\n unmounted(el) {\n destroyLoadingTpl(el)\n },\n}\n\nexport default vLoading\n","<template>\n <svg\n viewBox=\"0 0 1024 1024\"\n width=\"1em\"\n height=\"1em\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n v-if=\"direction === 'left'\"\n d=\"M724 218.3V141c0-6.7-7.7-10.4-12.9-6.3L260.3 486.8a31.86 31.86 0 0 0 0 50.3l450.8 352.1c5.3 4.1 12.9.4 12.9-6.3v-77.3c0-4.9-2.3-9.6-6.1-12.6l-360-281 360-281.1c3.8-3 6.1-7.7 6.1-12.6z\"\n ></path>\n <path\n v-else\n d=\"M765.7 486.8L314.9 134.7A7.97 7.97 0 0 0 302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 0 0 0-50.4z\"\n ></path>\n </svg>\n</template>\n\n<script setup lang=\"ts\">\ndefineOptions({ name: 'ArrowIcon' })\n\ndefineProps<{\n direction: 'left' | 'right'\n}>()\n</script>\n","<template>\n <Popover :open=\"open\" placement=\"bottom\" @open-change=\"handleOpenChange\">\n <div ref=\"selectRef\" :class=\"selectClasses\">\n <div class=\"select-selector\">\n <span class=\"select-selection-item\">{{ selectedLabel }}</span>\n <span class=\"select-arrow\">▼</span>\n </div>\n </div>\n\n <template #content>\n <div class=\"select-dropdown\" :style=\"{ width: dropdownWidth }\">\n <div class=\"select-dropdown-inner\">\n <div\n v-for=\"option in props.options\"\n :key=\"option.value\"\n :class=\"['select-item', { 'select-item-selected': option.value === props.value }]\"\n @click=\"handleSelect(option)\"\n >\n {{ option.label }}\n </div>\n </div>\n </div>\n </template>\n </Popover>\n</template>\n\n<script setup lang=\"ts\">\nimport Popover from './VPopover.vue'\n\ndefineOptions({ name: 'VSelect', inheritAttrs: false })\n\nconst props = withDefaults(\n defineProps<{\n value?: string | number\n options?: Array<{ label: string; value: string | number }>\n onSelectChange?: (value: string | number) => void\n }>(),\n {\n value: undefined,\n options: () => [],\n onSelectChange: () => {},\n },\n)\n\nconst open = ref(false)\nconst selectRef = ref<HTMLElement | null>(null)\nconst dropdownWidth = ref('auto')\n\nconst selectClasses = computed(() => ({\n select: true,\n 'select-open': open.value,\n}))\n\nconst selectedLabel = computed(() => {\n const option = props.options.find((opt) => opt.value === props.value)\n return option?.label || ''\n})\n\nconst handleOpenChange = (isOpen: boolean) => {\n open.value = isOpen\n if (isOpen && selectRef.value) {\n dropdownWidth.value = `${selectRef.value.offsetWidth}px`\n }\n}\n\nconst handleSelect = (option: { label: string; value: string | number }) => {\n props.onSelectChange?.(option.value)\n open.value = false\n}\n</script>\n\n<style scoped>\n.select {\n display: inline-block;\n min-width: 80px;\n cursor: pointer;\n}\n\n.select-selector {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 4px 11px;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n transition: all 0.3s;\n}\n\n.select:not(.select-disabled):hover .select-selector {\n border-color: var(--v-table-primary-color);\n}\n\n.select-open .select-selector {\n border-color: var(--v-table-primary-color);\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n\n.select-selection-item {\n flex: 1;\n font-size: 14px;\n color: rgba(0, 0, 0, 0.85);\n line-height: 22px;\n}\n\n.select-arrow {\n margin-left: 8px;\n font-size: 10px;\n color: rgba(0, 0, 0, 0.25);\n transition: transform 0.3s;\n}\n\n.select-open .select-arrow {\n transform: rotate(180deg);\n}\n\n.select-dropdown {\n max-height: 256px;\n overflow: hidden;\n background: #fff;\n border-radius: 6px;\n}\n\n.select-dropdown-inner {\n max-height: 256px;\n padding: 4px;\n overflow-y: auto;\n}\n\n.select-item {\n padding: 5px 12px;\n font-size: 14px;\n color: rgba(0, 0, 0, 0.85);\n line-height: 22px;\n cursor: pointer;\n transition: background 0.3s;\n border-radius: 4px;\n}\n\n.select-item:hover {\n background-color: #f5f5f5;\n}\n\n.select-item-selected {\n font-weight: 600;\n background-color: #e6f7ff;\n}\n</style>\n","<template>\n <div class=\"pagination\">\n <!-- 总数显示 -->\n <span class=\"pagination-total\">共 {{ props.total }} 条</span>\n\n <!-- 页码列表 -->\n <ul class=\"pagination-list\">\n <!-- 上一页 -->\n <li\n :class=\"[\n 'pagination-item',\n 'pagination-prev',\n { 'pagination-disabled': props.pageIndex === 1 },\n ]\"\n @click=\"handlePrev\"\n >\n <ArrowIcon direction=\"left\" />\n </li>\n\n <!-- 页码 -->\n <li\n v-for=\"(page, index) in pageList\"\n :key=\"index\"\n :class=\"[\n 'pagination-item',\n {\n 'pagination-item-active': page === props.pageIndex,\n 'pagination-ellipsis': page === '...',\n },\n ]\"\n @click=\"page !== '...' && handlePageChange(page as number)\"\n >\n {{ page }}\n </li>\n\n <!-- 下一页 -->\n <li\n :class=\"[\n 'pagination-item',\n 'pagination-next',\n { 'pagination-disabled': props.pageIndex === totalPages },\n ]\"\n @click=\"handleNext\"\n >\n <ArrowIcon direction=\"right\" />\n </li>\n </ul>\n\n <!-- 每页条数选择器 -->\n <div class=\"pagination-size-changer\">\n <VSelect\n :value=\"props.pageSize\"\n :options=\"[\n { label: '10', value: 10 },\n { label: '20', value: 20 },\n { label: '50', value: 50 },\n { label: '100', value: 100 },\n ]\"\n @select-change=\"(value) => props.onPageChange?.(1, value as number)\"\n />\n <span class=\"pagination-size-text\">条/页</span>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ArrowIcon from '../icons/ArrowIcon.vue'\nimport type { VTablePaginationProps } from '../interface'\nimport VSelect from './VSelect.vue'\n\ndefineOptions({ name: 'VPagination' })\n\nconst props = withDefaults(defineProps<VTablePaginationProps>(), {\n total: 0,\n pageSize: 10,\n pageIndex: 1,\n onPageChange: () => {},\n})\n\n// 总页数\nconst totalPages = computed(() => Math.ceil(props.total / props.pageSize))\n\n// 生成页码列表(最多显示 7 个页码)\nconst pageList = computed(() => {\n const pages: (number | string)[] = []\n const total = totalPages.value\n const current = props.pageIndex\n\n if (total <= 7) {\n // 总页数小于等于 7,全部显示\n for (let i = 1; i <= total; i++) {\n pages.push(i)\n }\n } else {\n // 总页数大于 7,显示省略号\n if (current <= 4) {\n // 当前页靠前:1 2 3 4 5 ... 10\n for (let i = 1; i <= 5; i++) {\n pages.push(i)\n }\n pages.push('...')\n pages.push(total)\n } else if (current >= total - 3) {\n // 当前页靠后:1 ... 6 7 8 9 10\n pages.push(1)\n pages.push('...')\n for (let i = total - 4; i <= total; i++) {\n pages.push(i)\n }\n } else {\n // 当前页在中间:1 ... 4 5 6 ... 10\n pages.push(1)\n pages.push('...')\n for (let i = current - 1; i <= current + 1; i++) {\n pages.push(i)\n }\n pages.push('...')\n pages.push(total)\n }\n }\n\n return pages\n})\n\n// 上一页\nconst handlePrev = () => {\n if (props.pageIndex > 1) {\n handlePageChange(props.pageIndex - 1)\n }\n}\n\n// 下一页\nconst handleNext = () => {\n if (props.pageIndex < totalPages.value) {\n handlePageChange(props.pageIndex + 1)\n }\n}\n\n// 切换页码\nconst handlePageChange = (page: number) => {\n if (page === props.pageIndex) return\n props.onPageChange?.(page, props.pageSize)\n}\n</script>\n\n<style scoped>\n.pagination {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n}\n\n.pagination-total {\n margin-right: 8px;\n color: rgba(0, 0, 0, 0.85);\n}\n\n.pagination-list {\n display: flex;\n gap: 4px;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.pagination-item {\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 32px;\n height: 32px;\n padding: 0 6px;\n color: rgba(0, 0, 0, 0.85);\n line-height: 30px;\n text-align: center;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n cursor: pointer;\n transition: all 0.3s;\n user-select: none;\n}\n\n.pagination-item:hover:not(.pagination-disabled):not(.pagination-item-active) {\n border-color: var(--v-table-primary-color);\n color: var(--v-table-primary-color);\n}\n\n.pagination-item-active {\n font-weight: 600;\n color: #fff;\n background-color: var(--v-table-primary-color);\n border-color: var(--v-table-primary-color);\n cursor: default;\n}\n\n.pagination-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n\n.pagination-ellipsis {\n border-color: transparent;\n background-color: transparent;\n cursor: default;\n pointer-events: none;\n}\n\n.pagination-ellipsis:hover {\n border-color: transparent;\n background-color: transparent;\n}\n\n.pagination-prev,\n.pagination-next {\n font-size: 12px;\n}\n\n.pagination-size-changer {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: 8px;\n}\n\n.pagination-size-text {\n color: rgba(0, 0, 0, 0.85);\n}\n</style>\n","import type { ColumnDef } from '@tanstack/vue-table'\nimport { EXPAND_ROW_DATA_INDEX, EXPAND_ROW_KEY } from '../constant'\nimport type { VTableColumn, VTableRowKey } from '../interface'\n\nexport function convertToColumnDefList<T>(\n columns: VTableColumn[],\n containerWidth: number = 0,\n): ColumnDef<T>[] {\n return columns.map((col) => ({\n id: col.columnKey,\n accessorKey: col.columnKey,\n // 将百分比转换为像素值\n size: col.columnWidth ? convertSizeToPixels(col.columnWidth, containerWidth) : undefined,\n header: col.columnHeader,\n cell: col.columnCell,\n enableSorting: col.columnEnableSort,\n enableColumnFilter: col.columnEnableFilter,\n sortDescFirst: true,\n enableResizing: col.columnEnableResize ?? false,\n minSize: col.columnMinWidth ?? 50,\n maxSize: col.columnMaxWidth,\n columns: convertToColumnDefList<T>(col.columnChildren || [], containerWidth),\n meta: col,\n }))\n}\n\n/** 给 data 添加组件内部属性(仅当 enableExpandRow 时添加展开行结构) */\nexport function buildData<T>(data: T[], enableExpandRow = false) {\n if (!enableExpandRow) return data\n return data.map((v) => ({\n ...v,\n [EXPAND_ROW_DATA_INDEX]: [{ ...v, [EXPAND_ROW_KEY]: true }],\n }))\n}\n\n/** 获取所有行的 key */\nexport function getAllRowKeys<TData>(\n data: TData[],\n rowKey: VTableRowKey<TData>,\n childrenKey: string = 'children',\n): string[] {\n const keys: string[] = []\n function traverse(items: TData[]) {\n items.forEach((item) => {\n const key = rowKey\n ? typeof rowKey === 'function'\n ? rowKey(item)\n : item[rowKey as keyof TData]\n : (item as any).id\n keys.push(String(key))\n const children = (item as any)[childrenKey]\n if (children?.length) traverse(children)\n })\n }\n traverse(data)\n return keys\n}\n\n/** 将 size 转换为实际像素值 */\nexport function convertSizeToPixels(\n size: number | string | undefined,\n containerWidth: number,\n): number {\n if (!size) return 0\n if (typeof size === 'number') return size\n // 处理百分比:'20%' -> 实际像素\n if (typeof size === 'string' && size.endsWith('%')) {\n const percentage = parseFloat(size)\n return Math.round((containerWidth * percentage) / 100)\n }\n // 处理 px 字符串:'100px' -> 100\n if (typeof size === 'string' && size.endsWith('px')) {\n return Math.round(parseFloat(size))\n }\n return 0\n}\n","<template>\n <div\n v-loading=\"{\n spinning: props.loading,\n indicator: $slots?.customLoadingIcon?.(),\n bottom: paginationRef?.offsetHeight,\n }\"\n class=\"v-table-wrapper\"\n :style=\"cssVariables\"\n >\n <div\n ref=\"tableContainerRef\"\n class=\"min-h-0 flex-1\"\n :class=\"{ 'overflow-y-auto': props.fixedHeader }\"\n >\n <table class=\"v-table\" :class=\"{ 'v-table-bordered': props.bordered }\">\n <colgroup>\n <col\n v-for=\"column in table.getAllLeafColumns()\"\n :key=\"column.id\"\n :style=\"{ width: getColumnWidth(column) }\"\n />\n </colgroup>\n <thead\n ref=\"tableHeaderRef\"\n class=\"v-table-header\"\n :class=\"{ sticky: props.fixedHeader }\"\n :style=\"{ top: 0, zIndex: themeConfig.zIndex?.fixedHeader }\"\n >\n <slot name=\"customHeader\" :columns=\"columns\" :table=\"table\">\n <tr v-for=\"headerGroup in table.getHeaderGroups()\" :key=\"headerGroup.id\">\n <th\n v-for=\"header in headerGroup.headers\"\n :key=\"header.id\"\n :colspan=\"header.colSpan\"\n class=\"relative\"\n :class=\"[\n header.column.id === CHECKBOX_COLUMN_KEY ? 'checkbox-col' : '',\n header.column.id === EXPAND_COLUMN_KEY ? 'expand-col' : '',\n isShadowPinnedColumn(header.column),\n ]\"\n :style=\"getColumnStyle(header.column)\"\n v-bind=\"\n props?.customHeaderCellAttributes?.(\n header.column.columnDef?.meta!,\n header.column.getIndex(),\n )\n \"\n >\n <template v-if=\"!header.isPlaceholder\">\n <FlexRender\n v-if=\"header.id === CHECKBOX_COLUMN_KEY\"\n :render=\"header.column.columnDef.header\"\n :props=\"header.getContext()\"\n />\n <HeaderCell v-else :header=\"header\" :table=\"table\">\n <template v-if=\"$slots.headerCell\" #headerCell=\"slotProps\">\n <slot name=\"headerCell\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.customFilterDropdown\" #customFilterDropdown=\"slotProps\">\n <slot name=\"customFilterDropdown\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.customFilterIcon\" #customFilterIcon=\"slotProps\">\n <slot name=\"customFilterIcon\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.customPopover\" #customPopover=\"slotProps\">\n <slot name=\"customPopover\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.customSorterIcon\" #customSorterIcon=\"slotProps\">\n <slot name=\"customSorterIcon\" v-bind=\"slotProps\" />\n </template>\n </HeaderCell>\n </template>\n </th>\n </tr>\n </slot>\n </thead>\n\n <tbody class=\"v-table-body\">\n <tr v-if=\"paddingTop > 0\" :style=\"{ height: `${paddingTop}px` }\" />\n\n <tr\n v-for=\"vRow in virtualRows\"\n :key=\"renderRowKeys[vRow.index]\"\n :ref=\"(el: any) => measureElement(el, rows[vRow.index]?.original?.[EXPAND_ROW_KEY])\"\n :data-index=\"vRow.index\"\n :style=\"{\n minHeight: `${vRow.size}px`,\n }\"\n :class=\"{ 'v-table-row-hover': props.enableRowHover }\"\n v-bind=\"props?.customRowAttributes?.(rows[vRow.index]!.original, vRow.index)\"\n >\n <template v-if=\"!rows[vRow.index]!.original?.[EXPAND_ROW_KEY]\">\n <template\n v-for=\"(cell, cellIndex) in rows[vRow.index]!.getVisibleCells()\"\n :key=\"cell.id\"\n >\n <td\n v-if=\"\n canRenderCell(\n rows[vRow.index]!.original,\n cell.column.columnDef?.meta!,\n vRow.index,\n cellIndex,\n )\n \"\n :style=\"getColumnStyle(cell.column)\"\n :class=\"[\n cell.column.id === CHECKBOX_COLUMN_KEY ? 'checkbox-col' : '',\n cell.column.id === EXPAND_COLUMN_KEY ? 'expand-col' : '',\n isShadowPinnedColumn(cell.column),\n ]\"\n v-bind=\"\n props.customCellAttributes?.(\n rows[vRow.index]!.original,\n cell.column.columnDef?.meta!,\n vRow.index,\n cellIndex,\n ) ?? {}\n \"\n >\n <FlexRender\n v-if=\"cell.column.id === CHECKBOX_COLUMN_KEY\"\n :render=\"cell.column.columnDef.cell\"\n :props=\"cell.getContext()\"\n />\n <BodyCell\n v-else\n :cell=\"cell\"\n :tree-config=\"props.treeConfig\"\n :columns=\"props.columns\"\n :row=\"rows[vRow.index]!\"\n >\n <template #bodyCell=\"slotProps\">\n <slot name=\"bodyCell\" v-bind=\"slotProps\" />\n </template>\n <template #customExpandIcon=\"slotProps\">\n <slot name=\"customExpandIcon\" v-bind=\"slotProps\" />\n </template>\n </BodyCell>\n </td>\n </template>\n </template>\n <!-- 自定义展开行的模板 -->\n <td v-else class=\"!p-0\" :colspan=\"table.getAllLeafColumns().length\">\n <div\n class=\"overflow-hidden\"\n :style=\"{\n position: hasFixedColumns ? 'sticky' : 'static',\n left: 0,\n width: hasFixedColumns ? `${tableContainerWidth}px` : 'auto',\n }\"\n >\n <slot name=\"expandedRowRender\" :row=\"rows[vRow.index]!.original\" />\n </div>\n </td>\n </tr>\n\n <tr v-if=\"paddingBottom > 0\" :style=\"{ height: `${paddingBottom}px`, border: 'none' }\" />\n <!-- 底部提示模板 (作为最后一行) -->\n <tr v-if=\"showNoMoreTip\" :style=\"{ borderBottom: 'none' }\">\n <td\n :colspan=\"table.getAllLeafColumns().length\"\n class=\"!border-b-0 p-[12px] text-center text-[14px] text-[rgba(0,0,0,0.32)]\"\n >\n <slot name=\"customLoadNoMore\">\n {{ noMoreText }}\n </slot>\n </td>\n </tr>\n </tbody>\n <tfoot\n :class=\"{ sticky: props.fixedFooter }\"\n :style=\"{ bottom: 0, zIndex: themeConfig.zIndex?.fixedFooter }\"\n >\n <tr>\n <td class=\"!p-0\" :colspan=\"table.getAllLeafColumns().length\">\n <div class=\"overflow-hidden\">\n <slot name=\"customFooter\" />\n </div>\n </td>\n </tr>\n </tfoot>\n </table>\n <!-- 空状态 -->\n <div\n v-if=\"!virtualRows.length && !props.loading\"\n :style=\"{ height: `calc(100% - ${tableHeaderRef?.offsetHeight ?? 0}px)` }\"\n class=\"flex items-center justify-center\"\n >\n <slot name=\"customEmpty\"> 当前内容为空 </slot>\n </div>\n </div>\n\n <div\n v-if=\"props.paginationConfig.enabled\"\n ref=\"paginationRef\"\n :class=\"[\n props.paginationConfig.placement === 'left'\n ? 'justify-start'\n : props.paginationConfig.placement === 'center'\n ? 'justify-center'\n : 'justify-end',\n ]\"\n class=\"flex items-center py-[16px]\"\n >\n <component :is=\"PaginationComponent\" />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\" generic=\"TData extends VTableData\">\nimport { type CSSProperties } from 'vue'\nimport {\n FlexRender,\n getCoreRowModel,\n getExpandedRowModel,\n getPaginationRowModel,\n useVueTable,\n type Column,\n type ColumnDef,\n type ColumnFiltersState,\n type ColumnPinningState,\n type ColumnSizingState,\n type ExpandedState,\n type PaginationState,\n type Row,\n type RowSelectionState,\n type SortingState,\n type Table,\n} from '@tanstack/vue-table'\nimport { Virtualizer, useVirtualizer, type VirtualItem } from '@tanstack/vue-virtual'\nimport { hash } from 'ohash'\nimport BodyCell from './components/BodyCell.vue'\nimport HeaderCell from './components/HeaderCell.vue'\nimport {\n CHECKBOX_COLUMN_KEY,\n EXPAND_COLUMN_KEY,\n EXPAND_ROW_DATA_INDEX,\n EXPAND_ROW_KEY,\n vTableDefaultProps,\n} from './constant'\nimport { useTheme } from './hooks/useTheme'\nimport ExpandIcon from './icons/ExpandIcon.vue'\nimport type {\n VTableCheckboxProps,\n VTableColumn,\n VTableData,\n VTableExpandIconProps,\n VTableInstance,\n VTablePaginationProps,\n VTableProps,\n VTableSlots,\n} from './interface'\nimport VCheckbox from './libs/VCheckbox.vue'\nimport vLoading from './libs/VLoading'\nimport VPagination from './libs/VPagination.vue'\nimport { buildData, convertToColumnDefList, getAllRowKeys } from './utils'\n\ndefineOptions({ name: 'VTable' })\n\nconst props = withDefaults(defineProps<VTableProps<TData>>(), vTableDefaultProps)\nconst $slots = defineSlots<VTableSlots<TData>>()\n\n// #region 自适应列宽计算\nconst tableHeaderRef = ref<HTMLDivElement>()\nconst paginationRef = ref<HTMLDivElement>()\nconst tableContainerRef = ref<HTMLDivElement | null>(null)\nconst tableContainerWidth = ref(0)\nlet resizeObserver: ResizeObserver | null = null\nconst initResizeObserver = () => {\n if (!tableContainerRef.value) return\n resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n tableContainerWidth.value = entry.contentRect.width\n }\n })\n resizeObserver.observe(tableContainerRef.value)\n}\n/** 计算自适应列的实际宽度 */\nconst adaptiveColumnWidthMap = computed(() => {\n const allColumns = table.getAllLeafColumns()\n const containerWidth = tableContainerWidth.value || 0\n if (containerWidth === 0) return {}\n // 筛选出自适应列(未设置 size 的列)\n const adaptiveColumns = allColumns.filter((col) => !col.columnDef.size)\n const adaptiveCount = adaptiveColumns.length\n if (adaptiveCount === 0) return {}\n\n // 计算固定列总宽度\n const fixedWidthTotal = allColumns.reduce((sum, col) => {\n // 统计所有设置列宽的列\n if (col.columnDef.size) {\n return sum + Math.round(col.getSize())\n }\n return sum\n }, 0)\n // 计算自适应列的最小总宽度\n const adaptiveMinWidthTotal = adaptiveCount * props.adaptiveColumnWidth\n // 计算剩余可用宽度(避免垂直滚动条导致的计算误差)\n const tolerance = 20\n const remainingWidth = containerWidth - fixedWidthTotal\n // 1. 剩余宽度 >= 自适应列最小总宽度 - 误差,则自适应列均分剩余空间\n if (remainingWidth >= adaptiveMinWidthTotal - tolerance) {\n const avgWidth = Math.floor(remainingWidth / adaptiveCount)\n // 计算余数(因为可能均分之后,不能整除的情况)\n const remainder = remainingWidth % adaptiveCount\n // 将余数分配给前 remainder 列,避免误差\n return adaptiveColumns.reduce(\n (map, col, index) => {\n map[col.id] = avgWidth + (index < remainder ? 1 : 0)\n return map\n },\n {} as Record<string, number>,\n )\n }\n // 2. 剩余宽度 < 自适应列最小总宽度,所有自适应列使用最小宽度\n return adaptiveColumns.reduce(\n (map, col) => {\n map[col.id] = props.adaptiveColumnWidth\n return map\n },\n {} as Record<string, number>,\n )\n})\n/** 获取表格列宽(用于 colgroup) */\nconst getColumnWidth = (column: Column<TData>) => {\n const definedSize = column.columnDef.size\n if (definedSize) {\n // 1. 用户传了固定宽度,使用实际宽度(可能被拖拽调整过)\n return `${column.getSize()}px`\n } else {\n // 2. 用户没传,使用自适应列宽\n const adaptiveWidth = adaptiveColumnWidthMap.value[column.id]\n return adaptiveWidth ? `${adaptiveWidth}px` : `${props.adaptiveColumnWidth}px`\n }\n}\n// #endregion\n\n// #region tanstack-table 核心逻辑\n/** checkbox 列 */\nconst CHECKBOX_COLUMN = computed<ColumnDef<TData>>(() => ({\n id: CHECKBOX_COLUMN_KEY,\n accessorKey: CHECKBOX_COLUMN_KEY,\n size: props.defaultCheckboxColumnWidth,\n header: ({ table }: { table: Table<TData> }) => {\n const selectableRows = table.getRowModel().rows.filter((row) => row.getCanSelect())\n const selectedSelectableRows = selectableRows.filter((row) => row.getIsSelected())\n const checkboxProps: VTableCheckboxProps = {\n indeterminate:\n selectedSelectableRows.length > 0 && selectedSelectableRows.length < selectableRows.length,\n checked: table.getIsAllRowsSelected(),\n onCheckedChange: (e: Event) => {\n table.getToggleAllRowsSelectedHandler()?.(e)\n },\n disabled: false,\n }\n return $slots?.customCheckbox?.(checkboxProps) || h(VCheckbox, checkboxProps)\n },\n cell: ({ row }: { row: Row<TData> }) => {\n const checkboxProps: VTableCheckboxProps = {\n checked: row.getIsSelected(),\n indeterminate: false,\n disabled: !row.getCanSelect(),\n onCheckedChange: (e: Event) => {\n row.getToggleSelectedHandler()?.(e)\n },\n }\n return $slots?.customCheckbox?.(checkboxProps) || h(VCheckbox, checkboxProps)\n },\n}))\n/** expand 列 */\nconst EXPAND_COLUMN: ColumnDef<TData> = {\n id: EXPAND_COLUMN_KEY,\n accessorKey: EXPAND_COLUMN_KEY,\n size: props.defaultExpandColumnWidth,\n header: () => {\n return ''\n },\n cell: ({ row }: { row: Row<TData> }) => {\n const expandProps: VTableExpandIconProps = {\n expand: row.getIsExpanded(),\n onExpandChange: row.toggleExpanded,\n }\n return h(\n 'div',\n {\n class: 'flex items-center justify-center w-full h-full',\n },\n $slots?.customExpandIcon?.(expandProps) || h(ExpandIcon, expandProps),\n )\n },\n}\nconst renderRowKeys = computed(() => {\n return rows.value.map((row) => `${row.id}_${hash(row.original)}`)\n})\nconst columnFilters = defineModel<ColumnFiltersState>('defaultFilter', { default: () => [] })\nconst columnSorts = defineModel<SortingState>('defaultSort', { default: () => [] })\nconst pagination = defineModel<PaginationState>('defaultPagination', {\n default: () => ({ pageIndex: 1, pageSize: 20 }),\n})\nconst expanded = defineModel<ExpandedState>('defaultExpanded', { default: () => ({}) })\nconst selection = defineModel<RowSelectionState>('defaultSelection', { default: () => ({}) })\nconst columnPinning = defineModel<ColumnPinningState>('defaultColumnPinning', {\n default: () => ({}),\n})\nconst columnSizing = defineModel<ColumnSizingState>('defaultColumnSizing', {\n default: () => ({}),\n})\n\nconst handlePageChange = (page: number, pageSize: number) => {\n pagination.value = { pageIndex: page, pageSize }\n triggerTableStateChange()\n}\nconst triggerTableStateChange = () => {\n nextTick(() => {\n props.onTableChange?.({\n pagination: pagination.value,\n sortList: columnSorts.value,\n filterList: columnFilters.value,\n })\n })\n}\nconst hasFixedColumns = computed(() => {\n return columnPinning.value.left?.length || columnPinning.value.right?.length\n})\nconst computedColumns = computed(() => {\n // 传入容器宽度,用于将百分比转换为像素\n const columns = convertToColumnDefList<TData>(props.columns, tableContainerWidth.value)\n if (props.enableExpandRow) {\n columns.unshift(EXPAND_COLUMN)\n }\n if (props.rowSelectionConfig?.enabled) {\n columns.unshift(CHECKBOX_COLUMN.value)\n }\n return columns\n})\nconst tableData = computed(() => buildData(props.data, props.enableExpandRow))\nconst table = useVueTable<TData>({\n state: {\n get columnFilters() {\n return columnFilters.value\n },\n get sorting() {\n return columnSorts.value\n },\n get pagination() {\n return pagination.value\n },\n get rowSelection() {\n return selection.value\n },\n get expanded() {\n return expanded.value\n },\n get columnPinning() {\n // tree 模式开启后,不再支持固定列\n if (props.treeConfig.enabled) {\n return {}\n }\n return columnPinning.value\n },\n get columnSizing() {\n return columnSizing.value\n },\n },\n get data() {\n return tableData.value\n },\n get columns() {\n return computedColumns.value\n },\n getRowId: props.rowKey\n ? (row) => {\n // 如果是可展开行,则让组件内部自己生成\n if (row[EXPAND_ROW_KEY]) {\n return undefined as any\n }\n const id =\n typeof props.rowKey === 'function' ? props.rowKey(row) : row[props.rowKey as keyof TData]\n return String(id)\n }\n : undefined,\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n getPaginationRowModel:\n props.paginationConfig?.mode === 'client' ? getPaginationRowModel() : undefined,\n enableRowSelection: (row) => !props.rowSelectionConfig?.getRowCheckDisabled?.(row.original),\n manualSorting: true, // 手动排序,结合后端\n manualFiltering: true, // 手动筛选,结合后端\n manualPagination: !(props.paginationConfig?.enabled && props.paginationConfig?.mode === 'client'),\n enableColumnPinning: true,\n enableColumnResizing: true,\n columnResizeMode: props.columnResizeMode,\n enableSortingRemoval: props.enableSortingRemoval,\n onSortingChange: (updaterOrValue) => {\n columnSorts.value =\n typeof updaterOrValue === 'function' ? updaterOrValue(columnSorts.value) : updaterOrValue\n triggerTableStateChange()\n },\n onColumnFiltersChange: (updaterOrValue) => {\n columnFilters.value =\n typeof updaterOrValue === 'function' ? updaterOrValue(columnFilters.value) : updaterOrValue\n triggerTableStateChange()\n },\n onPaginationChange: (updaterOrValue) => {\n pagination.value =\n typeof updaterOrValue === 'function' ? updaterOrValue(pagination.value) : updaterOrValue\n triggerTableStateChange()\n },\n onExpandedChange: (updaterOrValue) => {\n expanded.value =\n typeof updaterOrValue === 'function' ? updaterOrValue(expanded.value) : updaterOrValue\n nextTick(() => {\n props.onExpandedRowsChange?.(expanded.value)\n })\n },\n onRowSelectionChange: (updaterOrValue) => {\n selection.value =\n typeof updaterOrValue === 'function' ? updaterOrValue(selection.value) : updaterOrValue\n nextTick(() => {\n props.rowSelectionConfig?.onChange?.(\n table.getSelectedRowModel().rows.map((row) => row.original),\n )\n })\n },\n onColumnSizingChange: (updaterOrValue) => {\n columnSizing.value =\n typeof updaterOrValue === 'function' ? updaterOrValue(columnSizing.value) : updaterOrValue\n nextTick(() => {\n props.onColumnSizingChange?.(columnSizing.value)\n })\n },\n getSubRows: (row) => {\n // 如果开启了自定义可展开行\n if (props.enableExpandRow) {\n return (row as any)[EXPAND_ROW_DATA_INDEX]\n }\n // 反之就是开启了 tree 模式,那直接读取用户提供的字段\n return (row as any)[props.treeConfig!.childrenKey!] as TData[] | undefined\n },\n})\n/** 设置所有行展开 */\nconst setAllRowsExpand = () => {\n expanded.value = getAllRowKeys(props.data, props.rowKey!, props.treeConfig?.childrenKey).reduce(\n (pre: any, cur: string) => {\n pre[cur] = true\n return pre\n },\n {},\n )\n}\nconst PaginationComponent = computed(() => {\n const paginationProps: VTablePaginationProps = {\n pageIndex: pagination.value.pageIndex || 1,\n pageSize: pagination.value.pageSize,\n total:\n props.paginationConfig?.mode === 'client' ? props.data.length : props.paginationConfig.total,\n onPageChange: handlePageChange,\n }\n return () => $slots?.customPagination?.(paginationProps) || h(VPagination, paginationProps)\n})\n// #endregion\n\n// #region 虚拟滚动相关逻辑\nconst rows = computed(() => table.getRowModel().rows)\n// 限制重新渲染的频率 https://github.com/TanStack/virtual/issues/860\nconst virtualRows = ref<VirtualItem[]>([])\nconst rerenderTimer = ref<number | null>(null)\nconst lastRenderTime = ref(0)\nconst rowVirtualizerOptions = computed(() => {\n return {\n count: rows.value.length,\n estimateSize: () => props.rowHeight || 48,\n getScrollElement: () => tableContainerRef.value,\n overscan: 10,\n useScrollendEvent: false,\n useAnimationFrameWithResizeObserver: true,\n onChange: (instance: Virtualizer<HTMLDivElement, HTMLDivElement>) => {\n if (instance.scrollOffset && instance.scrollOffset < 0) return\n if (!instance.isScrolling) {\n virtualRows.value = instance.getVirtualItems()\n return\n }\n // 滚动时 60fps 节流\n const now = performance.now()\n const targetFrameTime = 1000 / 60\n if (now - lastRenderTime.value > targetFrameTime) {\n lastRenderTime.value = now\n if (rerenderTimer.value) {\n cancelAnimationFrame(rerenderTimer.value)\n }\n rerenderTimer.value = requestAnimationFrame(() => {\n virtualRows.value = instance.getVirtualItems()\n rerenderTimer.value = null\n })\n }\n },\n }\n})\nconst rowVirtualizer = useVirtualizer(rowVirtualizerOptions)\n/** 当展开收起时,需要重新计算虚拟滚动的位置 */\nwatch(\n () => rows.value.length,\n () => {\n rowVirtualizer.value.measure()\n },\n { immediate: true },\n)\nfunction measureElement(element?: any, isExpandRow?: boolean) {\n if (!element) return\n if (isExpandRow) {\n rowVirtualizer.value.measureElement(element)\n } else {\n if (props.rowHeight) return\n rowVirtualizer.value.measureElement(element)\n }\n}\nwatchEffect(() => {\n const [lastItem] = [...virtualRows.value].reverse()\n if (!lastItem || !rowVirtualizer.value.isScrolling) {\n return\n }\n // 判断当前最后一项是否是目前总数据长度的最后一项\n if (lastItem.index >= tableData.value?.length - 1 && !props.loading) {\n props.onScrollToBottom?.()\n }\n})\n/** 模拟顶部占位 */\nconst paddingTop = computed(() => (virtualRows.value.length > 0 ? virtualRows.value[0]!.start : 0))\n/** 模拟底部占位 */\nconst paddingBottom = computed(() => {\n if (virtualRows.value.length === 0) return 0\n const lastItem = virtualRows.value[virtualRows.value.length - 1]!\n return rowVirtualizer.value.getTotalSize() - (lastItem.start + lastItem.size)\n})\n// #endregion\n\n// #region 底部提示逻辑\n/** 底部提示行高度 */\nconst showNoMoreTip = computed(() => {\n return tableData.value.length > 0 && !props.loading && props.loadMoreConfig?.showNoMore\n})\nconst noMoreText = computed(() => props.loadMoreConfig?.noMoreText || '没有更多了')\n// #endregion\n\n// #region 表格样式相关逻辑\nconst { cssVariables, themeConfig } = useTheme(props.themeConfig)\n/** 判断单元格是否应该渲染(被合并的单元格返回 false) */\nconst canRenderCell = (\n row: TData,\n column: VTableColumn,\n rowIndex: number,\n colIndex: number,\n): boolean => {\n if (!column) {\n return true\n }\n const attrs = props.customCellAttributes(row, column, rowIndex, colIndex) || {}\n // 当 colspan 或 rowspan 为 0 时,不渲染该单元格\n if (attrs.colspan === 0 || attrs.rowspan === 0) {\n return false\n }\n return true\n}\nconst getColumnStyle = (column: Column<TData>): CSSProperties => {\n const meta = column.columnDef.meta\n const pinPosition = column.getIsPinned()\n const baseStyle: CSSProperties = {\n textAlign: meta?.columnAlign || 'left',\n }\n // 处理固定列逻辑\n if (pinPosition) {\n baseStyle.position = 'sticky'\n if (pinPosition === 'left') {\n baseStyle.left = `${column.getStart('left')}px`\n } else {\n baseStyle.right = `${column.getAfter('right')}px`\n }\n baseStyle.zIndex = themeConfig.value.zIndex?.pinnedColumn\n }\n return baseStyle\n}\n/** 判断是否为固定阴影列 */\nconst isShadowPinnedColumn = (column: Column<TData>): string => {\n const pinPosition = column.getIsPinned()\n if (!pinPosition) return ''\n if (pinPosition === 'left' && column.getIsLastColumn('left')) {\n return 'pinned-left-shadow'\n }\n if (pinPosition === 'right' && column.getIsFirstColumn('right')) {\n return 'pinned-right-shadow'\n }\n return ''\n}\n// #endregion\n\nonMounted(() => {\n initResizeObserver()\n if (props.defaultExpandAllRows) {\n setAllRowsExpand()\n }\n})\n\nonBeforeUnmount(() => {\n if (rerenderTimer.value) {\n cancelAnimationFrame(rerenderTimer.value)\n rerenderTimer.value = null\n }\n if (resizeObserver) {\n resizeObserver.disconnect()\n resizeObserver = null\n }\n})\n\ndefineExpose<VTableInstance<TData>>({\n tanstackTable: table,\n /** 滚动到指定下标 */\n scrollToIndex: async (index: number, behavior: 'auto' | 'smooth' = 'smooth') => {\n nextTick(() => {\n rowVirtualizer.value.scrollToIndex(index, { align: 'start', behavior })\n })\n },\n})\n</script>\n\n<style lang=\"less\" scoped>\n.border-mixin(@position: bottom) {\n border-@{position}: 1px var(--v-table-border-style) var(--v-table-border-color);\n}\n\n.v-table-wrapper {\n display: flex;\n flex-direction: column;\n}\n\n.v-table {\n border-collapse: separate;\n border-spacing: 0;\n table-layout: fixed;\n width: 100%;\n font-size: 14px;\n\n &-header tr {\n &:not(:last-child) th {\n &.checkbox-col,\n &.expand-col {\n border-bottom: none;\n }\n }\n th {\n position: relative;\n font-weight: 600;\n background-color: var(--v-table-header-bg);\n color: var(--v-table-header-color);\n padding: var(--v-table-header-padding);\n .border-mixin(bottom);\n\n &:not(.checkbox-col, .expand-col, :last-child)::before {\n content: '';\n position: absolute;\n top: 50%;\n inset-inline-end: 0;\n width: 1px;\n height: 1.6em;\n background-color: var(--v-table-header-split-color);\n transform: translateY(-50%);\n }\n\n &:first-child {\n border-start-start-radius: var(--v-table-header-border-radius);\n }\n &:last-child {\n border-start-end-radius: var(--v-table-header-border-radius);\n }\n }\n }\n\n &-body tr {\n &.v-table-row-hover:hover td {\n background-color: var(--v-table-row-hover-color);\n }\n\n td {\n background-color: var(--v-table-body-bg);\n .border-mixin(bottom);\n padding: var(--v-table-body-padding);\n color: var(--v-table-body-color);\n }\n }\n\n &.v-table-bordered {\n .v-table-header th {\n &::before {\n display: none;\n }\n .border-mixin(right);\n &:first-child {\n .border-mixin(left);\n }\n }\n .v-table-header tr:first-child > th {\n .border-mixin(top);\n }\n\n .v-table-body td {\n .border-mixin(right);\n &:first-child {\n .border-mixin(left);\n }\n }\n }\n}\n\n// 固定列阴影样式\n.pinned-shadow-base() {\n content: '';\n position: absolute;\n top: 0;\n bottom: -1px;\n width: 30px;\n transition: box-shadow 0.3s;\n pointer-events: none;\n}\n\n.pinned-left-shadow::after {\n .pinned-shadow-base();\n right: 0;\n transform: translateX(100%);\n box-shadow: inset 10px 0 8px -8px rgba(0, 0, 0, 0.15);\n}\n\n.pinned-right-shadow::after {\n .pinned-shadow-base();\n left: 0;\n transform: translateX(-100%);\n box-shadow: inset -10px 0 8px -8px rgba(0, 0, 0, 0.15);\n}\n</style>\n"],"names":["functionalUpdate","updater","input","makeStateUpdater","key","instance","old","isFunction","d","isNumberArray","val","flattenBy","arr","getChildren","flat","recurse","subArr","item","children","memo","getDeps","fn","opts","deps","result","depArgs","depTime","newDeps","dep","index","resultTime","depEndTime","resultEndTime","resultFpsPercentage","pad","str","num","getMemoOptions","tableOptions","debugLevel","onChange","_tableOptions$debugAl","createCell","table","row","column","columnId","getRenderValue","_cell$getValue","cell","feature","createColumn","columnDef","depth","parent","_ref","_resolvedColumnDef$id","resolvedColumnDef","accessorKey","id","accessorFn","originalRow","_result","_column$columns","orderColumns","_column$columns2","leafColumns","debug","createHeader","options","_options$id","header","leafHeaders","recurseHeader","h","Headers","allColumns","left","right","_left$map$filter","_right$map$filter","leftColumns","rightColumns","centerColumns","buildHeaderGroups","_left$map$filter2","orderedLeafColumns","_right$map$filter2","headerGroups","headerGroup","flatHeaders","_header$subHeaders","_header$subHeaders2","_header$subHeaders3","center","_left$0$headers","_left$","_center$0$headers","_center$","_right$0$headers","_right$","columnsToGroup","headerFamily","_headerGroups$0$heade","_headerGroups$","maxDepth","findMaxDepth","columns","createHeaderGroup","headersToGroup","pendingParentHeaders","headerToGroup","latestPendingParentHeader","isLeafHeader","isPlaceholder","bottomHeaders","recurseHeadersForSpans","headers","colSpan","rowSpan","childRowSpans","childColSpan","childRowSpan","minChildRowSpan","createRow","original","rowIndex","subRows","parentId","_row$getValue","parentRows","currentRow","parentRow","allCells","acc","i","ColumnFaceting","includesString","filterValue","_filterValue$toString","search","testFalsey","includesStringSensitive","_row$getValue2","equalsString","_row$getValue3","arrIncludes","_row$getValue4","arrIncludesAll","_row$getValue5","arrIncludesSome","_row$getValue6","equals","weakEquals","inNumberRange","min","max","rowValue","unsafeMin","unsafeMax","parsedMin","parsedMax","temp","filterFns","ColumnFiltering","state","firstRow","value","_table$options$filter","_table$options$filter2","_column$columnDef$ena","_table$options$enable","_table$options$enable2","_table$getState$colum","_table$getState$colum2","_table$getState$colum3","filterFn","previousFilter","newFilter","shouldAutoRemoveFilter","_old$filter","newFilterObj","_old$map","_table","updateFn","_functionalUpdate","filter","defaultState","_table$initialState$c","_table$initialState","sum","_leafRows","childRows","next","nextValue","extent","mean","leafRows","count","median","values","mid","nums","a","b","unique","uniqueCount","_columnId","aggregationFns","ColumnGrouping","props","_toString","_props$getValue","_table$getState$group","_table$getState$group2","canGroup","_table$options$aggreg","_table$options$aggreg2","_table$initialState$g","_row$subRows","grouping","groupedColumnMode","nonGroupingColumns","col","g","ColumnOrdering","position","_getVisibleLeafColumns","_columns$","_columns","columnOrder","orderedColumns","columnOrderCopy","columnsCopy","targetColumnId","foundIndex","getDefaultColumnPinningState","ColumnPinning","columnIds","_old$left3","_old$right3","_old$left","_old$right","_old$left2","_old$right2","_d$columnDef$enablePi","leafColumnIds","isLeft","isRight","leftAndRight","_pinningState$positio","pinningState","_pinningState$left","_pinningState$right","safelyAccessDocument","_document","defaultColumnSizing","getDefaultColumnSizingInfoState","ColumnSizing","_column$columnDef$min","_column$columnDef$max","columnSize","_ref2","_","rest","_header$column$getSiz","prevSiblingHeader","_contextDocument","canResize","e","isTouchStartEvent","startSize","columnSizingStart","clientX","newColumnSizing","updateOffset","eventType","clientXPos","_old$startOffset","_old$startSize","deltaDirection","deltaOffset","deltaPercentage","_ref3","headerSize","onMove","onEnd","contextDocument","mouseEvents","touchEvents","_e$touches$","passiveIfSupported","passiveEventSupported","_table$initialState$c2","_table$getHeaderGroup","_table$getHeaderGroup2","_table$getLeftHeaderG","_table$getLeftHeaderG2","_table$getCenterHeade","_table$getCenterHeade2","_table$getRightHeader","_table$getRightHeader2","passiveSupported","supported","noop","ColumnVisibility","childColumns","c","cells","makeVisibleColumnsMethod","getColumns","_value","obj","_target","GlobalFaceting","GlobalFiltering","_table$getCoreRowMode","_table$options$getCol","globalFilterFn","RowExpanding","registered","queued","_table$options$autoRe","expanded","_table$initialState$e","splitId","_expanded","exists","oldExpanded","rowId","_table$options$getIsR","_table$options$getRow","isFullyExpanded","canExpand","defaultPageIndex","defaultPageSize","getDefaultPaginationState","RowPagination","safeUpdater","_table$initialState$p","pageIndex","maxPageIndex","_table$initialState$p2","_table$initialState$p3","_table$initialState2","pageSize","topRowIndex","_table$options$pageCo","newPageCount","pageCount","pageOptions","_table$options$pageCo2","_table$options$rowCou","getDefaultRowPinningState","RowPinning","includeLeafRows","includeParentRows","leafRowIds","parentRowIds","rowIds","_old$top3","_old$bottom3","_old$top","_old$bottom","_old$top2","_old$bottom2","enableRowPinning","enablePinning","top","bottom","isTop","isBottom","_ref4","_visiblePinnedRowIds$","visiblePinnedRowIds","_ref5","_table$initialState$r","_pinningState$top","_pinningState$bottom","visibleRows","pinnedRowIds","_table$options$keepPi","allRows","topPinnedRowIds","bottomPinnedRowIds","topAndBottom","RowSelection","rowSelection","preGroupedFlatRows","resolvedValue","mutateRowIsSelected","rowModel","selectRowsFn","isAllRowsSelected","paginationFlatRows","isAllPageRowsSelected","_table$getState$rowSe","totalSelected","isSelected","_opts$selectChildren","selectedRowIds","isRowSelected","isSubRowSelected","_table$options$enable3","canSelect","includeChildren","newSelectedFlatRows","newSelectedRowsById","recurseRows","rows","_row$subRows2","selection","_selection$row$id","_row$subRows3","allChildrenSelected","someSelected","subRow","subRowChildrenSelected","reSplitAlphaNumeric","alphanumeric","rowA","rowB","compareAlphanumeric","toString","alphanumericCaseSensitive","text","compareBasic","textCaseSensitive","datetime","basic","aStr","bStr","aa","bb","an","bn","combo","sortingFns","RowSorting","firstRows","isString","_table$options$sortin","_table$options$sortin2","desc","multi","nextSortingOrder","hasManualValue","existingSorting","existingIndex","newSorting","sortAction","nextDesc","_table$options$maxMul","_column$columnDef$sor","firstSortDirection","isSorted","_column$columnDef$ena2","_table$getState$sorti","columnSort","_table$getState$sorti2","_table$getState$sorti3","canSort","_table$initialState$s","builtInFeatures","createTable","_options$_features","_options$initialState","_features","defaultOptions","mergeOptions","initialState","_feature$getInitialSt","queuedTimeout","coreInstance","cb","error","newOptions","searchAll","defaultColumn","_defaultColumn","_props$renderValue$to","_props$renderValue","columnDefs","recurseColumns","groupingColumnDef","flatColumns","getCoreRowModel","data","accessRows","originalRows","_row$originalSubRows","getExpandedRowModel","paginateExpandedRows","expandRows","expandedRows","handleRow","getPaginationRowModel","pagination","flatRows","rowsById","pageStart","pageEnd","paginatedRowModel","trueFn","$PROXY","propTraps","property","receiver","resolveSource","s","mergeProxy","_len","sources","_key","v","keys","FlexRender","defineComponent","getOptionsWithReactiveData","unref","useVueTable","initialOptions","IS_REACTIVE","isRef","resolvedOptions","dataRef","shallowRef","watch","prev","ref","watchEffect","_initialOptions$state","stateProxy","prop","isInitial","memoizedFunction","_a","_b","_c","notUndefined","msg","approxEqual","debounce","targetWindow","ms","timeoutId","args","getRect","element","offsetWidth","offsetHeight","defaultKeyExtractor","defaultRangeExtractor","range","start","end","observeElementRect","handler","rect","width","height","observer","entries","run","entry","box","addEventListenerOptions","supportsScrollend","observeElementOffset","offset","fallback","createHandler","isScrolling","horizontal","isRtl","endHandler","registerScrollendEvent","measureElement","elementScroll","adjustments","behavior","toOffset","Virtualizer","_ro","get","target","opts2","sync","scrollElement","cached","measurements","furthestMeasurementsFound","furthestMeasurements","m","measurement","previousFurthestMeasurement","paddingStart","scrollMargin","getItemKey","enabled","lanes","itemSizeCache","laneLastIndex","cachedLane","lane","prevIndex","prevInLane","furthestMeasurement","measuredSize","size","outerSize","scrollOffset","calculateRange","startIndex","endIndex","rangeExtractor","overscan","node","attributeName","indexStr","prevNode","itemSize","delta","indexes","virtualItems","k","len","findNearestBinarySearch","doc","align","maxOffset","initialAlign","attempts","maxAttempts","tryScroll","currentAlign","offsetInfo","verify","currentOffset","afterInfo","scheduleRetry","endByLane","low","high","getCurrentValue","middle","currentValue","lastIndex","getOffset","endPerLane","pos","startPerLane","useVirtualizerBase","virtualizer","cleanup","el","options2","triggerRef","onScopeDispose","useVirtualizer","computed","serialize","o","#t","r","n","l","z","R","S","t","f","y","j","B","x","p","u","w","M","digest","hash","__props","classNames","onClick","_createElementBlock","_unref","cellRender","cellDef","bodyCellSlotProps","_normalizeStyle","_createElementVNode","_renderSlot","_ctx","_createVNode","ExpandIcon","_normalizeProps","_guardReactiveProps","_openBlock","_createBlock","_resolveDynamicComponent","_mergeProps","_hoisted_1","_normalizeClass","_cache","round","createCoords","oppositeSideMap","oppositeAlignmentMap","clamp","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","yAxisSides","getSideAxis","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","length","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","lrPlacement","rlPlacement","tbPlacement","btPlacement","getSideList","side","isStart","getOppositeAxisPlacements","flipAlignment","direction","list","expandPaddingObject","padding","getPaddingObject","rectToClientRect","computeCoordsFromPlacement","reference","floating","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","detectOverflow","_await$platform$isEle","platform","elements","strategy","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","offsetParent","offsetScale","elementClientRect","computePosition","config","middleware","validMiddleware","statefulPlacement","middlewareData","resetCount","_platform$detectOverf","name","nextX","nextY","reset","flip","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","detectOverflowOptions","initialSideAxis","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","placements","overflow","overflows","overflowsData","sides","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","resetPlacement","_overflowsData$filter2","currentSideAxis","originSides","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","hasWindow","getNodeName","isNode","getWindow","_node$ownerDocument","getDocumentElement","isElement","isHTMLElement","isShadowRoot","invalidOverflowDisplayValues","isOverflowElement","overflowX","overflowY","display","getComputedStyle","tableElements","isTableElement","topLayerSelectors","isTopLayer","selector","transformProperties","willChangeValues","containValues","isContainingBlock","elementOrCss","webkit","isWebKit","css","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","lastTraversableNodeNames","getNodeScroll","getNearestOverflowAncestor","parentNode","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","getFrameElement","getCssDimensions","getComputedStyle$1","hasOffset","shouldFallback","unwrapElement","getScale","domElement","$","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","scale","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","getWindowScrollBarX","leftScroll","getHTMLOffset","documentElement","scroll","htmlRect","convertOffsetParentRelativeRectToViewportRelativeRect","topLayer","offsets","isOffsetParentAnElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","html","body","SCROLLBAR_MAX","getViewportRect","visualViewport","visualViewportBased","windowScrollbarX","bodyStyles","bodyMarginInline","clippingStableScrollbarWidth","absoluteOrFixed","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","cache","cachedResult","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getDimensions","getRectRelativeToOffsetParent","setLeftRTLScrollbarOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","getElementRects","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","offset$1","shift$1","flip$1","mergedOptions","platformWithCache","computePosition$1","isComponentPublicInstance","toValue","source","getDPR","roundByDPR","dpr","useFloating","whileElementsMountedOption","openOption","_toValue","middlewareOption","placementOption","_toValue2","strategyOption","_toValue3","transformOption","_toValue4","referenceElement","floatingElement","isPositioned","floatingStyles","initialStyles","xVal","yVal","whileElementsMountedCleanup","update","open","attach","getCurrentScope","shallowReadonly","referenceRef","floatingRef","handleClickOutside","onMounted","onUnmounted","_Teleport","_Transition","HeaderFilter","type","Object","required","setup","slots","useSlots","columnMeta","meta","_filterModelValue","filterModelValue","getFilterValue","set","confirm","setFilterValue","trigger","customFilterIcon","columnKey","filtered","getIsFiltered","FilterIcon","content","customFilterDropdown","customPopover","onOpenChange","VPopover","default","headerRender","headerDef","currentSort","handleHeaderClick","event","canFilter","handleMouseDown","handleTouchStart","handleDoubleClick","_hoisted_2","_hoisted_3","SorterIcon","$slots","_withCtx","slotProps","CHECKBOX_COLUMN_KEY","EXPAND_COLUMN_KEY","EXPAND_ROW_KEY","EXPAND_ROW_DATA_INDEX","vTableDefaultProps","defaultThemeConfig","useTheme","themeConfig","wrapperClasses","checkboxClasses","handleChange","sizeOptions","_Fragment","_renderList","createLoadingTpl","destroyLoadingTpl","container","indicator","vNode","VLoadingComponent","render","currentPosition","loadingNode","shouldShowLoading","vLoading","binding","selectRef","dropdownWidth","selectClasses","selectedLabel","opt","handleOpenChange","isOpen","handleSelect","option","Popover","$event","_toDisplayString","_hoisted_4","totalPages","pageList","pages","total","current","handlePrev","handlePageChange","handleNext","page","ArrowIcon","_hoisted_5","VSelect","convertToColumnDefList","containerWidth","convertSizeToPixels","buildData","enableExpandRow","getAllRowKeys","rowKey","childrenKey","traverse","items","percentage","_useSlots","tableHeaderRef","paginationRef","tableContainerRef","tableContainerWidth","resizeObserver","initResizeObserver","adaptiveColumnWidthMap","adaptiveColumns","adaptiveCount","fixedWidthTotal","adaptiveMinWidthTotal","tolerance","remainingWidth","avgWidth","remainder","map","getColumnWidth","adaptiveWidth","CHECKBOX_COLUMN","selectableRows","selectedSelectableRows","checkboxProps","VCheckbox","EXPAND_COLUMN","expandProps","renderRowKeys","columnFilters","_useModel","columnSorts","columnPinning","columnSizing","triggerTableStateChange","nextTick","hasFixedColumns","computedColumns","tableData","updaterOrValue","setAllRowsExpand","pre","cur","PaginationComponent","paginationProps","VPagination","virtualRows","rerenderTimer","lastRenderTime","rowVirtualizerOptions","now","targetFrameTime","rowVirtualizer","isExpandRow","lastItem","paddingTop","paddingBottom","showNoMoreTip","noMoreText","cssVariables","canRenderCell","colIndex","attrs","getColumnStyle","pinPosition","baseStyle","isShadowPinnedColumn","onBeforeUnmount","__expose","HeaderCell","vRow","cellIndex","BodyCell","_hoisted_8"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,12,13,14,15,16]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../node_modules/.pnpm/@tanstack+table-core@8.21.3/node_modules/@tanstack/table-core/build/lib/index.mjs","../../../node_modules/.pnpm/@tanstack+vue-table@8.21.3_vue@3.5.29_typescript@5.9.3_/node_modules/@tanstack/vue-table/build/lib/index.mjs","../../../node_modules/.pnpm/@tanstack+virtual-core@3.13.19/node_modules/@tanstack/virtual-core/dist/esm/utils.js","../../../node_modules/.pnpm/@tanstack+virtual-core@3.13.19/node_modules/@tanstack/virtual-core/dist/esm/index.js","../../../node_modules/.pnpm/@tanstack+vue-virtual@3.13.19_vue@3.5.29_typescript@5.9.3_/node_modules/@tanstack/vue-virtual/dist/esm/index.js","../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/shared/ohash.D__AXeF1.mjs","../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/crypto/js/index.mjs","../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/index.mjs","../src/icons/ExpandIcon.vue","../src/components/BodyCell.vue","../src/icons/SorterIcon.vue","../src/icons/FilterIcon.vue","../../../node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/.pnpm/@floating-ui+core@1.7.4/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/.pnpm/@floating-ui+utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../node_modules/.pnpm/@floating-ui+dom@1.7.5/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../../node_modules/.pnpm/@floating-ui+vue@1.1.10_vue@3.5.29_typescript@5.9.3_/node_modules/@floating-ui/vue/dist/floating-ui.vue.mjs","../src/libs/VPopover.vue","../src/components/HeaderFilter.tsx","../src/components/HeaderCell.vue","../src/constant/index.ts","../src/hooks/useTheme.ts","../src/libs/VCheckbox.vue","../src/libs/VLoading/index.vue","../src/libs/VLoading/directive.ts","../src/icons/ArrowIcon.vue","../src/libs/VSelect.vue","../src/libs/VPagination.vue","../src/utils/index.ts","../src/index.vue"],"sourcesContent":["/**\n * table-core\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\n// type Person = {\n// firstName: string\n// lastName: string\n// age: number\n// visits: number\n// status: string\n// progress: number\n// createdAt: Date\n// nested: {\n// foo: [\n// {\n// bar: 'bar'\n// }\n// ]\n// bar: { subBar: boolean }[]\n// baz: {\n// foo: 'foo'\n// bar: {\n// baz: 'baz'\n// }\n// }\n// }\n// }\n\n// const test: DeepKeys<Person> = 'nested.foo.0.bar'\n// const test2: DeepKeys<Person> = 'nested.bar'\n\n// const helper = createColumnHelper<Person>()\n\n// helper.accessor('nested.foo', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.foo.0.bar', {\n// cell: info => info.getValue(),\n// })\n\n// helper.accessor('nested.bar', {\n// cell: info => info.getValue(),\n// })\n\nfunction createColumnHelper() {\n return {\n accessor: (accessor, column) => {\n return typeof accessor === 'function' ? {\n ...column,\n accessorFn: accessor\n } : {\n ...column,\n accessorKey: accessor\n };\n },\n display: column => column,\n group: column => column\n };\n}\n\n// Is this type a tuple?\n\n// If this type is a tuple, what indices are allowed?\n\n///\n\nfunction functionalUpdate(updater, input) {\n return typeof updater === 'function' ? updater(input) : updater;\n}\nfunction noop() {\n //\n}\nfunction makeStateUpdater(key, instance) {\n return updater => {\n instance.setState(old => {\n return {\n ...old,\n [key]: functionalUpdate(updater, old[key])\n };\n });\n };\n}\nfunction isFunction(d) {\n return d instanceof Function;\n}\nfunction isNumberArray(d) {\n return Array.isArray(d) && d.every(val => typeof val === 'number');\n}\nfunction flattenBy(arr, getChildren) {\n const flat = [];\n const recurse = subArr => {\n subArr.forEach(item => {\n flat.push(item);\n const children = getChildren(item);\n if (children != null && children.length) {\n recurse(children);\n }\n });\n };\n recurse(arr);\n return flat;\n}\nfunction memo(getDeps, fn, opts) {\n let deps = [];\n let result;\n return depArgs => {\n let depTime;\n if (opts.key && opts.debug) depTime = Date.now();\n const newDeps = getDeps(depArgs);\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n let resultTime;\n if (opts.key && opts.debug) resultTime = Date.now();\n result = fn(...newDeps);\n opts == null || opts.onChange == null || opts.onChange(result);\n if (opts.key && opts.debug) {\n if (opts != null && opts.debug()) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n const pad = (str, num) => {\n str = String(str);\n while (str.length < num) {\n str = ' ' + str;\n }\n return str;\n };\n console.info(`%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`, `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120))}deg 100% 31%);`, opts == null ? void 0 : opts.key);\n }\n }\n return result;\n };\n}\nfunction getMemoOptions(tableOptions, debugLevel, key, onChange) {\n return {\n debug: () => {\n var _tableOptions$debugAl;\n return (_tableOptions$debugAl = tableOptions == null ? void 0 : tableOptions.debugAll) != null ? _tableOptions$debugAl : tableOptions[debugLevel];\n },\n key: process.env.NODE_ENV === 'development' && key,\n onChange\n };\n}\n\nfunction createCell(table, row, column, columnId) {\n const getRenderValue = () => {\n var _cell$getValue;\n return (_cell$getValue = cell.getValue()) != null ? _cell$getValue : table.options.renderFallbackValue;\n };\n const cell = {\n id: `${row.id}_${column.id}`,\n row,\n column,\n getValue: () => row.getValue(columnId),\n renderValue: getRenderValue,\n getContext: memo(() => [table, column, row, cell], (table, column, row, cell) => ({\n table,\n column,\n row,\n cell: cell,\n getValue: cell.getValue,\n renderValue: cell.renderValue\n }), getMemoOptions(table.options, 'debugCells', 'cell.getContext'))\n };\n table._features.forEach(feature => {\n feature.createCell == null || feature.createCell(cell, column, row, table);\n }, {});\n return cell;\n}\n\nfunction createColumn(table, columnDef, depth, parent) {\n var _ref, _resolvedColumnDef$id;\n const defaultColumn = table._getDefaultColumnDef();\n const resolvedColumnDef = {\n ...defaultColumn,\n ...columnDef\n };\n const accessorKey = resolvedColumnDef.accessorKey;\n let id = (_ref = (_resolvedColumnDef$id = resolvedColumnDef.id) != null ? _resolvedColumnDef$id : accessorKey ? typeof String.prototype.replaceAll === 'function' ? accessorKey.replaceAll('.', '_') : accessorKey.replace(/\\./g, '_') : undefined) != null ? _ref : typeof resolvedColumnDef.header === 'string' ? resolvedColumnDef.header : undefined;\n let accessorFn;\n if (resolvedColumnDef.accessorFn) {\n accessorFn = resolvedColumnDef.accessorFn;\n } else if (accessorKey) {\n // Support deep accessor keys\n if (accessorKey.includes('.')) {\n accessorFn = originalRow => {\n let result = originalRow;\n for (const key of accessorKey.split('.')) {\n var _result;\n result = (_result = result) == null ? void 0 : _result[key];\n if (process.env.NODE_ENV !== 'production' && result === undefined) {\n console.warn(`\"${key}\" in deeply nested key \"${accessorKey}\" returned undefined.`);\n }\n }\n return result;\n };\n } else {\n accessorFn = originalRow => originalRow[resolvedColumnDef.accessorKey];\n }\n }\n if (!id) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(resolvedColumnDef.accessorFn ? `Columns require an id when using an accessorFn` : `Columns require an id when using a non-string header`);\n }\n throw new Error();\n }\n let column = {\n id: `${String(id)}`,\n accessorFn,\n parent: parent,\n depth,\n columnDef: resolvedColumnDef,\n columns: [],\n getFlatColumns: memo(() => [true], () => {\n var _column$columns;\n return [column, ...((_column$columns = column.columns) == null ? void 0 : _column$columns.flatMap(d => d.getFlatColumns()))];\n }, getMemoOptions(table.options, 'debugColumns', 'column.getFlatColumns')),\n getLeafColumns: memo(() => [table._getOrderColumnsFn()], orderColumns => {\n var _column$columns2;\n if ((_column$columns2 = column.columns) != null && _column$columns2.length) {\n let leafColumns = column.columns.flatMap(column => column.getLeafColumns());\n return orderColumns(leafColumns);\n }\n return [column];\n }, getMemoOptions(table.options, 'debugColumns', 'column.getLeafColumns'))\n };\n for (const feature of table._features) {\n feature.createColumn == null || feature.createColumn(column, table);\n }\n\n // Yes, we have to convert table to unknown, because we know more than the compiler here.\n return column;\n}\n\nconst debug = 'debugHeaders';\n//\n\nfunction createHeader(table, column, options) {\n var _options$id;\n const id = (_options$id = options.id) != null ? _options$id : column.id;\n let header = {\n id,\n column,\n index: options.index,\n isPlaceholder: !!options.isPlaceholder,\n placeholderId: options.placeholderId,\n depth: options.depth,\n subHeaders: [],\n colSpan: 0,\n rowSpan: 0,\n headerGroup: null,\n getLeafHeaders: () => {\n const leafHeaders = [];\n const recurseHeader = h => {\n if (h.subHeaders && h.subHeaders.length) {\n h.subHeaders.map(recurseHeader);\n }\n leafHeaders.push(h);\n };\n recurseHeader(header);\n return leafHeaders;\n },\n getContext: () => ({\n table,\n header: header,\n column\n })\n };\n table._features.forEach(feature => {\n feature.createHeader == null || feature.createHeader(header, table);\n });\n return header;\n}\nconst Headers = {\n createTable: table => {\n // Header Groups\n\n table.getHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n var _left$map$filter, _right$map$filter;\n const leftColumns = (_left$map$filter = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter : [];\n const rightColumns = (_right$map$filter = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter : [];\n const centerColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n const headerGroups = buildHeaderGroups(allColumns, [...leftColumns, ...centerColumns, ...rightColumns], table);\n return headerGroups;\n }, getMemoOptions(table.options, debug, 'getHeaderGroups'));\n table.getCenterHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, leafColumns, left, right) => {\n leafColumns = leafColumns.filter(column => !(left != null && left.includes(column.id)) && !(right != null && right.includes(column.id)));\n return buildHeaderGroups(allColumns, leafColumns, table, 'center');\n }, getMemoOptions(table.options, debug, 'getCenterHeaderGroups'));\n table.getLeftHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.left], (allColumns, leafColumns, left) => {\n var _left$map$filter2;\n const orderedLeafColumns = (_left$map$filter2 = left == null ? void 0 : left.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _left$map$filter2 : [];\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'left');\n }, getMemoOptions(table.options, debug, 'getLeftHeaderGroups'));\n table.getRightHeaderGroups = memo(() => [table.getAllColumns(), table.getVisibleLeafColumns(), table.getState().columnPinning.right], (allColumns, leafColumns, right) => {\n var _right$map$filter2;\n const orderedLeafColumns = (_right$map$filter2 = right == null ? void 0 : right.map(columnId => leafColumns.find(d => d.id === columnId)).filter(Boolean)) != null ? _right$map$filter2 : [];\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'right');\n }, getMemoOptions(table.options, debug, 'getRightHeaderGroups'));\n\n // Footer Groups\n\n table.getFooterGroups = memo(() => [table.getHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getFooterGroups'));\n table.getLeftFooterGroups = memo(() => [table.getLeftHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getLeftFooterGroups'));\n table.getCenterFooterGroups = memo(() => [table.getCenterHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getCenterFooterGroups'));\n table.getRightFooterGroups = memo(() => [table.getRightHeaderGroups()], headerGroups => {\n return [...headerGroups].reverse();\n }, getMemoOptions(table.options, debug, 'getRightFooterGroups'));\n\n // Flat Headers\n\n table.getFlatHeaders = memo(() => [table.getHeaderGroups()], headerGroups => {\n return headerGroups.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getFlatHeaders'));\n table.getLeftFlatHeaders = memo(() => [table.getLeftHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getLeftFlatHeaders'));\n table.getCenterFlatHeaders = memo(() => [table.getCenterHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getCenterFlatHeaders'));\n table.getRightFlatHeaders = memo(() => [table.getRightHeaderGroups()], left => {\n return left.map(headerGroup => {\n return headerGroup.headers;\n }).flat();\n }, getMemoOptions(table.options, debug, 'getRightFlatHeaders'));\n\n // Leaf Headers\n\n table.getCenterLeafHeaders = memo(() => [table.getCenterFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders;\n return !((_header$subHeaders = header.subHeaders) != null && _header$subHeaders.length);\n });\n }, getMemoOptions(table.options, debug, 'getCenterLeafHeaders'));\n table.getLeftLeafHeaders = memo(() => [table.getLeftFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders2;\n return !((_header$subHeaders2 = header.subHeaders) != null && _header$subHeaders2.length);\n });\n }, getMemoOptions(table.options, debug, 'getLeftLeafHeaders'));\n table.getRightLeafHeaders = memo(() => [table.getRightFlatHeaders()], flatHeaders => {\n return flatHeaders.filter(header => {\n var _header$subHeaders3;\n return !((_header$subHeaders3 = header.subHeaders) != null && _header$subHeaders3.length);\n });\n }, getMemoOptions(table.options, debug, 'getRightLeafHeaders'));\n table.getLeafHeaders = memo(() => [table.getLeftHeaderGroups(), table.getCenterHeaderGroups(), table.getRightHeaderGroups()], (left, center, right) => {\n var _left$0$headers, _left$, _center$0$headers, _center$, _right$0$headers, _right$;\n return [...((_left$0$headers = (_left$ = left[0]) == null ? void 0 : _left$.headers) != null ? _left$0$headers : []), ...((_center$0$headers = (_center$ = center[0]) == null ? void 0 : _center$.headers) != null ? _center$0$headers : []), ...((_right$0$headers = (_right$ = right[0]) == null ? void 0 : _right$.headers) != null ? _right$0$headers : [])].map(header => {\n return header.getLeafHeaders();\n }).flat();\n }, getMemoOptions(table.options, debug, 'getLeafHeaders'));\n }\n};\nfunction buildHeaderGroups(allColumns, columnsToGroup, table, headerFamily) {\n var _headerGroups$0$heade, _headerGroups$;\n // Find the max depth of the columns:\n // build the leaf column row\n // build each buffer row going up\n // placeholder for non-existent level\n // real column for existing level\n\n let maxDepth = 0;\n const findMaxDepth = function (columns, depth) {\n if (depth === void 0) {\n depth = 1;\n }\n maxDepth = Math.max(maxDepth, depth);\n columns.filter(column => column.getIsVisible()).forEach(column => {\n var _column$columns;\n if ((_column$columns = column.columns) != null && _column$columns.length) {\n findMaxDepth(column.columns, depth + 1);\n }\n }, 0);\n };\n findMaxDepth(allColumns);\n let headerGroups = [];\n const createHeaderGroup = (headersToGroup, depth) => {\n // The header group we are creating\n const headerGroup = {\n depth,\n id: [headerFamily, `${depth}`].filter(Boolean).join('_'),\n headers: []\n };\n\n // The parent columns we're going to scan next\n const pendingParentHeaders = [];\n\n // Scan each column for parents\n headersToGroup.forEach(headerToGroup => {\n // What is the latest (last) parent column?\n\n const latestPendingParentHeader = [...pendingParentHeaders].reverse()[0];\n const isLeafHeader = headerToGroup.column.depth === headerGroup.depth;\n let column;\n let isPlaceholder = false;\n if (isLeafHeader && headerToGroup.column.parent) {\n // The parent header is new\n column = headerToGroup.column.parent;\n } else {\n // The parent header is repeated\n column = headerToGroup.column;\n isPlaceholder = true;\n }\n if (latestPendingParentHeader && (latestPendingParentHeader == null ? void 0 : latestPendingParentHeader.column) === column) {\n // This column is repeated. Add it as a sub header to the next batch\n latestPendingParentHeader.subHeaders.push(headerToGroup);\n } else {\n // This is a new header. Let's create it\n const header = createHeader(table, column, {\n id: [headerFamily, depth, column.id, headerToGroup == null ? void 0 : headerToGroup.id].filter(Boolean).join('_'),\n isPlaceholder,\n placeholderId: isPlaceholder ? `${pendingParentHeaders.filter(d => d.column === column).length}` : undefined,\n depth,\n index: pendingParentHeaders.length\n });\n\n // Add the headerToGroup as a subHeader of the new header\n header.subHeaders.push(headerToGroup);\n // Add the new header to the pendingParentHeaders to get grouped\n // in the next batch\n pendingParentHeaders.push(header);\n }\n headerGroup.headers.push(headerToGroup);\n headerToGroup.headerGroup = headerGroup;\n });\n headerGroups.push(headerGroup);\n if (depth > 0) {\n createHeaderGroup(pendingParentHeaders, depth - 1);\n }\n };\n const bottomHeaders = columnsToGroup.map((column, index) => createHeader(table, column, {\n depth: maxDepth,\n index\n }));\n createHeaderGroup(bottomHeaders, maxDepth - 1);\n headerGroups.reverse();\n\n // headerGroups = headerGroups.filter(headerGroup => {\n // return !headerGroup.headers.every(header => header.isPlaceholder)\n // })\n\n const recurseHeadersForSpans = headers => {\n const filteredHeaders = headers.filter(header => header.column.getIsVisible());\n return filteredHeaders.map(header => {\n let colSpan = 0;\n let rowSpan = 0;\n let childRowSpans = [0];\n if (header.subHeaders && header.subHeaders.length) {\n childRowSpans = [];\n recurseHeadersForSpans(header.subHeaders).forEach(_ref => {\n let {\n colSpan: childColSpan,\n rowSpan: childRowSpan\n } = _ref;\n colSpan += childColSpan;\n childRowSpans.push(childRowSpan);\n });\n } else {\n colSpan = 1;\n }\n const minChildRowSpan = Math.min(...childRowSpans);\n rowSpan = rowSpan + minChildRowSpan;\n header.colSpan = colSpan;\n header.rowSpan = rowSpan;\n return {\n colSpan,\n rowSpan\n };\n });\n };\n recurseHeadersForSpans((_headerGroups$0$heade = (_headerGroups$ = headerGroups[0]) == null ? void 0 : _headerGroups$.headers) != null ? _headerGroups$0$heade : []);\n return headerGroups;\n}\n\nconst createRow = (table, id, original, rowIndex, depth, subRows, parentId) => {\n let row = {\n id,\n index: rowIndex,\n original,\n depth,\n parentId,\n _valuesCache: {},\n _uniqueValuesCache: {},\n getValue: columnId => {\n if (row._valuesCache.hasOwnProperty(columnId)) {\n return row._valuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.accessorFn)) {\n return undefined;\n }\n row._valuesCache[columnId] = column.accessorFn(row.original, rowIndex);\n return row._valuesCache[columnId];\n },\n getUniqueValues: columnId => {\n if (row._uniqueValuesCache.hasOwnProperty(columnId)) {\n return row._uniqueValuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.accessorFn)) {\n return undefined;\n }\n if (!column.columnDef.getUniqueValues) {\n row._uniqueValuesCache[columnId] = [row.getValue(columnId)];\n return row._uniqueValuesCache[columnId];\n }\n row._uniqueValuesCache[columnId] = column.columnDef.getUniqueValues(row.original, rowIndex);\n return row._uniqueValuesCache[columnId];\n },\n renderValue: columnId => {\n var _row$getValue;\n return (_row$getValue = row.getValue(columnId)) != null ? _row$getValue : table.options.renderFallbackValue;\n },\n subRows: subRows != null ? subRows : [],\n getLeafRows: () => flattenBy(row.subRows, d => d.subRows),\n getParentRow: () => row.parentId ? table.getRow(row.parentId, true) : undefined,\n getParentRows: () => {\n let parentRows = [];\n let currentRow = row;\n while (true) {\n const parentRow = currentRow.getParentRow();\n if (!parentRow) break;\n parentRows.push(parentRow);\n currentRow = parentRow;\n }\n return parentRows.reverse();\n },\n getAllCells: memo(() => [table.getAllLeafColumns()], leafColumns => {\n return leafColumns.map(column => {\n return createCell(table, row, column, column.id);\n });\n }, getMemoOptions(table.options, 'debugRows', 'getAllCells')),\n _getAllCellsByColumnId: memo(() => [row.getAllCells()], allCells => {\n return allCells.reduce((acc, cell) => {\n acc[cell.column.id] = cell;\n return acc;\n }, {});\n }, getMemoOptions(table.options, 'debugRows', 'getAllCellsByColumnId'))\n };\n for (let i = 0; i < table._features.length; i++) {\n const feature = table._features[i];\n feature == null || feature.createRow == null || feature.createRow(row, table);\n }\n return row;\n};\n\n//\n\nconst ColumnFaceting = {\n createColumn: (column, table) => {\n column._getFacetedRowModel = table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, column.id);\n column.getFacetedRowModel = () => {\n if (!column._getFacetedRowModel) {\n return table.getPreFilteredRowModel();\n }\n return column._getFacetedRowModel();\n };\n column._getFacetedUniqueValues = table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, column.id);\n column.getFacetedUniqueValues = () => {\n if (!column._getFacetedUniqueValues) {\n return new Map();\n }\n return column._getFacetedUniqueValues();\n };\n column._getFacetedMinMaxValues = table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, column.id);\n column.getFacetedMinMaxValues = () => {\n if (!column._getFacetedMinMaxValues) {\n return undefined;\n }\n return column._getFacetedMinMaxValues();\n };\n }\n};\n\nconst includesString = (row, columnId, filterValue) => {\n var _filterValue$toString, _row$getValue;\n const search = filterValue == null || (_filterValue$toString = filterValue.toString()) == null ? void 0 : _filterValue$toString.toLowerCase();\n return Boolean((_row$getValue = row.getValue(columnId)) == null || (_row$getValue = _row$getValue.toString()) == null || (_row$getValue = _row$getValue.toLowerCase()) == null ? void 0 : _row$getValue.includes(search));\n};\nincludesString.autoRemove = val => testFalsey(val);\nconst includesStringSensitive = (row, columnId, filterValue) => {\n var _row$getValue2;\n return Boolean((_row$getValue2 = row.getValue(columnId)) == null || (_row$getValue2 = _row$getValue2.toString()) == null ? void 0 : _row$getValue2.includes(filterValue));\n};\nincludesStringSensitive.autoRemove = val => testFalsey(val);\nconst equalsString = (row, columnId, filterValue) => {\n var _row$getValue3;\n return ((_row$getValue3 = row.getValue(columnId)) == null || (_row$getValue3 = _row$getValue3.toString()) == null ? void 0 : _row$getValue3.toLowerCase()) === (filterValue == null ? void 0 : filterValue.toLowerCase());\n};\nequalsString.autoRemove = val => testFalsey(val);\nconst arrIncludes = (row, columnId, filterValue) => {\n var _row$getValue4;\n return (_row$getValue4 = row.getValue(columnId)) == null ? void 0 : _row$getValue4.includes(filterValue);\n};\narrIncludes.autoRemove = val => testFalsey(val);\nconst arrIncludesAll = (row, columnId, filterValue) => {\n return !filterValue.some(val => {\n var _row$getValue5;\n return !((_row$getValue5 = row.getValue(columnId)) != null && _row$getValue5.includes(val));\n });\n};\narrIncludesAll.autoRemove = val => testFalsey(val) || !(val != null && val.length);\nconst arrIncludesSome = (row, columnId, filterValue) => {\n return filterValue.some(val => {\n var _row$getValue6;\n return (_row$getValue6 = row.getValue(columnId)) == null ? void 0 : _row$getValue6.includes(val);\n });\n};\narrIncludesSome.autoRemove = val => testFalsey(val) || !(val != null && val.length);\nconst equals = (row, columnId, filterValue) => {\n return row.getValue(columnId) === filterValue;\n};\nequals.autoRemove = val => testFalsey(val);\nconst weakEquals = (row, columnId, filterValue) => {\n return row.getValue(columnId) == filterValue;\n};\nweakEquals.autoRemove = val => testFalsey(val);\nconst inNumberRange = (row, columnId, filterValue) => {\n let [min, max] = filterValue;\n const rowValue = row.getValue(columnId);\n return rowValue >= min && rowValue <= max;\n};\ninNumberRange.resolveFilterValue = val => {\n let [unsafeMin, unsafeMax] = val;\n let parsedMin = typeof unsafeMin !== 'number' ? parseFloat(unsafeMin) : unsafeMin;\n let parsedMax = typeof unsafeMax !== 'number' ? parseFloat(unsafeMax) : unsafeMax;\n let min = unsafeMin === null || Number.isNaN(parsedMin) ? -Infinity : parsedMin;\n let max = unsafeMax === null || Number.isNaN(parsedMax) ? Infinity : parsedMax;\n if (min > max) {\n const temp = min;\n min = max;\n max = temp;\n }\n return [min, max];\n};\ninNumberRange.autoRemove = val => testFalsey(val) || testFalsey(val[0]) && testFalsey(val[1]);\n\n// Export\n\nconst filterFns = {\n includesString,\n includesStringSensitive,\n equalsString,\n arrIncludes,\n arrIncludesAll,\n arrIncludesSome,\n equals,\n weakEquals,\n inNumberRange\n};\n// Utils\n\nfunction testFalsey(val) {\n return val === undefined || val === null || val === '';\n}\n\n//\n\nconst ColumnFiltering = {\n getDefaultColumnDef: () => {\n return {\n filterFn: 'auto'\n };\n },\n getInitialState: state => {\n return {\n columnFilters: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnFiltersChange: makeStateUpdater('columnFilters', table),\n filterFromLeafRows: false,\n maxLeafRowFilterDepth: 100\n };\n },\n createColumn: (column, table) => {\n column.getAutoFilterFn = () => {\n const firstRow = table.getCoreRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'string') {\n return filterFns.includesString;\n }\n if (typeof value === 'number') {\n return filterFns.inNumberRange;\n }\n if (typeof value === 'boolean') {\n return filterFns.equals;\n }\n if (value !== null && typeof value === 'object') {\n return filterFns.equals;\n }\n if (Array.isArray(value)) {\n return filterFns.arrIncludes;\n }\n return filterFns.weakEquals;\n };\n column.getFilterFn = () => {\n var _table$options$filter, _table$options$filter2;\n return isFunction(column.columnDef.filterFn) ? column.columnDef.filterFn : column.columnDef.filterFn === 'auto' ? column.getAutoFilterFn() : // @ts-ignore\n (_table$options$filter = (_table$options$filter2 = table.options.filterFns) == null ? void 0 : _table$options$filter2[column.columnDef.filterFn]) != null ? _table$options$filter : filterFns[column.columnDef.filterFn];\n };\n column.getCanFilter = () => {\n var _column$columnDef$ena, _table$options$enable, _table$options$enable2;\n return ((_column$columnDef$ena = column.columnDef.enableColumnFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnFilters) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && !!column.accessorFn;\n };\n column.getIsFiltered = () => column.getFilterIndex() > -1;\n column.getFilterValue = () => {\n var _table$getState$colum;\n return (_table$getState$colum = table.getState().columnFilters) == null || (_table$getState$colum = _table$getState$colum.find(d => d.id === column.id)) == null ? void 0 : _table$getState$colum.value;\n };\n column.getFilterIndex = () => {\n var _table$getState$colum2, _table$getState$colum3;\n return (_table$getState$colum2 = (_table$getState$colum3 = table.getState().columnFilters) == null ? void 0 : _table$getState$colum3.findIndex(d => d.id === column.id)) != null ? _table$getState$colum2 : -1;\n };\n column.setFilterValue = value => {\n table.setColumnFilters(old => {\n const filterFn = column.getFilterFn();\n const previousFilter = old == null ? void 0 : old.find(d => d.id === column.id);\n const newFilter = functionalUpdate(value, previousFilter ? previousFilter.value : undefined);\n\n //\n if (shouldAutoRemoveFilter(filterFn, newFilter, column)) {\n var _old$filter;\n return (_old$filter = old == null ? void 0 : old.filter(d => d.id !== column.id)) != null ? _old$filter : [];\n }\n const newFilterObj = {\n id: column.id,\n value: newFilter\n };\n if (previousFilter) {\n var _old$map;\n return (_old$map = old == null ? void 0 : old.map(d => {\n if (d.id === column.id) {\n return newFilterObj;\n }\n return d;\n })) != null ? _old$map : [];\n }\n if (old != null && old.length) {\n return [...old, newFilterObj];\n }\n return [newFilterObj];\n });\n };\n },\n createRow: (row, _table) => {\n row.columnFilters = {};\n row.columnFiltersMeta = {};\n },\n createTable: table => {\n table.setColumnFilters = updater => {\n const leafColumns = table.getAllLeafColumns();\n const updateFn = old => {\n var _functionalUpdate;\n return (_functionalUpdate = functionalUpdate(updater, old)) == null ? void 0 : _functionalUpdate.filter(filter => {\n const column = leafColumns.find(d => d.id === filter.id);\n if (column) {\n const filterFn = column.getFilterFn();\n if (shouldAutoRemoveFilter(filterFn, filter.value, column)) {\n return false;\n }\n }\n return true;\n });\n };\n table.options.onColumnFiltersChange == null || table.options.onColumnFiltersChange(updateFn);\n };\n table.resetColumnFilters = defaultState => {\n var _table$initialState$c, _table$initialState;\n table.setColumnFilters(defaultState ? [] : (_table$initialState$c = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.columnFilters) != null ? _table$initialState$c : []);\n };\n table.getPreFilteredRowModel = () => table.getCoreRowModel();\n table.getFilteredRowModel = () => {\n if (!table._getFilteredRowModel && table.options.getFilteredRowModel) {\n table._getFilteredRowModel = table.options.getFilteredRowModel(table);\n }\n if (table.options.manualFiltering || !table._getFilteredRowModel) {\n return table.getPreFilteredRowModel();\n }\n return table._getFilteredRowModel();\n };\n }\n};\nfunction shouldAutoRemoveFilter(filterFn, value, column) {\n return (filterFn && filterFn.autoRemove ? filterFn.autoRemove(value, column) : false) || typeof value === 'undefined' || typeof value === 'string' && !value;\n}\n\nconst sum = (columnId, _leafRows, childRows) => {\n // It's faster to just add the aggregations together instead of\n // process leaf nodes individually\n return childRows.reduce((sum, next) => {\n const nextValue = next.getValue(columnId);\n return sum + (typeof nextValue === 'number' ? nextValue : 0);\n }, 0);\n};\nconst min = (columnId, _leafRows, childRows) => {\n let min;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null && (min > value || min === undefined && value >= value)) {\n min = value;\n }\n });\n return min;\n};\nconst max = (columnId, _leafRows, childRows) => {\n let max;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null && (max < value || max === undefined && value >= value)) {\n max = value;\n }\n });\n return max;\n};\nconst extent = (columnId, _leafRows, childRows) => {\n let min;\n let max;\n childRows.forEach(row => {\n const value = row.getValue(columnId);\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n });\n return [min, max];\n};\nconst mean = (columnId, leafRows) => {\n let count = 0;\n let sum = 0;\n leafRows.forEach(row => {\n let value = row.getValue(columnId);\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n });\n if (count) return sum / count;\n return;\n};\nconst median = (columnId, leafRows) => {\n if (!leafRows.length) {\n return;\n }\n const values = leafRows.map(row => row.getValue(columnId));\n if (!isNumberArray(values)) {\n return;\n }\n if (values.length === 1) {\n return values[0];\n }\n const mid = Math.floor(values.length / 2);\n const nums = values.sort((a, b) => a - b);\n return values.length % 2 !== 0 ? nums[mid] : (nums[mid - 1] + nums[mid]) / 2;\n};\nconst unique = (columnId, leafRows) => {\n return Array.from(new Set(leafRows.map(d => d.getValue(columnId))).values());\n};\nconst uniqueCount = (columnId, leafRows) => {\n return new Set(leafRows.map(d => d.getValue(columnId))).size;\n};\nconst count = (_columnId, leafRows) => {\n return leafRows.length;\n};\nconst aggregationFns = {\n sum,\n min,\n max,\n extent,\n mean,\n median,\n unique,\n uniqueCount,\n count\n};\n\n//\n\nconst ColumnGrouping = {\n getDefaultColumnDef: () => {\n return {\n aggregatedCell: props => {\n var _toString, _props$getValue;\n return (_toString = (_props$getValue = props.getValue()) == null || _props$getValue.toString == null ? void 0 : _props$getValue.toString()) != null ? _toString : null;\n },\n aggregationFn: 'auto'\n };\n },\n getInitialState: state => {\n return {\n grouping: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onGroupingChange: makeStateUpdater('grouping', table),\n groupedColumnMode: 'reorder'\n };\n },\n createColumn: (column, table) => {\n column.toggleGrouping = () => {\n table.setGrouping(old => {\n // Find any existing grouping for this column\n if (old != null && old.includes(column.id)) {\n return old.filter(d => d !== column.id);\n }\n return [...(old != null ? old : []), column.id];\n });\n };\n column.getCanGroup = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableGrouping) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableGrouping) != null ? _table$options$enable : true) && (!!column.accessorFn || !!column.columnDef.getGroupingValue);\n };\n column.getIsGrouped = () => {\n var _table$getState$group;\n return (_table$getState$group = table.getState().grouping) == null ? void 0 : _table$getState$group.includes(column.id);\n };\n column.getGroupedIndex = () => {\n var _table$getState$group2;\n return (_table$getState$group2 = table.getState().grouping) == null ? void 0 : _table$getState$group2.indexOf(column.id);\n };\n column.getToggleGroupingHandler = () => {\n const canGroup = column.getCanGroup();\n return () => {\n if (!canGroup) return;\n column.toggleGrouping();\n };\n };\n column.getAutoAggregationFn = () => {\n const firstRow = table.getCoreRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'number') {\n return aggregationFns.sum;\n }\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return aggregationFns.extent;\n }\n };\n column.getAggregationFn = () => {\n var _table$options$aggreg, _table$options$aggreg2;\n if (!column) {\n throw new Error();\n }\n return isFunction(column.columnDef.aggregationFn) ? column.columnDef.aggregationFn : column.columnDef.aggregationFn === 'auto' ? column.getAutoAggregationFn() : (_table$options$aggreg = (_table$options$aggreg2 = table.options.aggregationFns) == null ? void 0 : _table$options$aggreg2[column.columnDef.aggregationFn]) != null ? _table$options$aggreg : aggregationFns[column.columnDef.aggregationFn];\n };\n },\n createTable: table => {\n table.setGrouping = updater => table.options.onGroupingChange == null ? void 0 : table.options.onGroupingChange(updater);\n table.resetGrouping = defaultState => {\n var _table$initialState$g, _table$initialState;\n table.setGrouping(defaultState ? [] : (_table$initialState$g = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.grouping) != null ? _table$initialState$g : []);\n };\n table.getPreGroupedRowModel = () => table.getFilteredRowModel();\n table.getGroupedRowModel = () => {\n if (!table._getGroupedRowModel && table.options.getGroupedRowModel) {\n table._getGroupedRowModel = table.options.getGroupedRowModel(table);\n }\n if (table.options.manualGrouping || !table._getGroupedRowModel) {\n return table.getPreGroupedRowModel();\n }\n return table._getGroupedRowModel();\n };\n },\n createRow: (row, table) => {\n row.getIsGrouped = () => !!row.groupingColumnId;\n row.getGroupingValue = columnId => {\n if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n return row._groupingValuesCache[columnId];\n }\n const column = table.getColumn(columnId);\n if (!(column != null && column.columnDef.getGroupingValue)) {\n return row.getValue(columnId);\n }\n row._groupingValuesCache[columnId] = column.columnDef.getGroupingValue(row.original);\n return row._groupingValuesCache[columnId];\n };\n row._groupingValuesCache = {};\n },\n createCell: (cell, column, row, table) => {\n cell.getIsGrouped = () => column.getIsGrouped() && column.id === row.groupingColumnId;\n cell.getIsPlaceholder = () => !cell.getIsGrouped() && column.getIsGrouped();\n cell.getIsAggregated = () => {\n var _row$subRows;\n return !cell.getIsGrouped() && !cell.getIsPlaceholder() && !!((_row$subRows = row.subRows) != null && _row$subRows.length);\n };\n }\n};\nfunction orderColumns(leafColumns, grouping, groupedColumnMode) {\n if (!(grouping != null && grouping.length) || !groupedColumnMode) {\n return leafColumns;\n }\n const nonGroupingColumns = leafColumns.filter(col => !grouping.includes(col.id));\n if (groupedColumnMode === 'remove') {\n return nonGroupingColumns;\n }\n const groupingColumns = grouping.map(g => leafColumns.find(col => col.id === g)).filter(Boolean);\n return [...groupingColumns, ...nonGroupingColumns];\n}\n\n//\n\nconst ColumnOrdering = {\n getInitialState: state => {\n return {\n columnOrder: [],\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnOrderChange: makeStateUpdater('columnOrder', table)\n };\n },\n createColumn: (column, table) => {\n column.getIndex = memo(position => [_getVisibleLeafColumns(table, position)], columns => columns.findIndex(d => d.id === column.id), getMemoOptions(table.options, 'debugColumns', 'getIndex'));\n column.getIsFirstColumn = position => {\n var _columns$;\n const columns = _getVisibleLeafColumns(table, position);\n return ((_columns$ = columns[0]) == null ? void 0 : _columns$.id) === column.id;\n };\n column.getIsLastColumn = position => {\n var _columns;\n const columns = _getVisibleLeafColumns(table, position);\n return ((_columns = columns[columns.length - 1]) == null ? void 0 : _columns.id) === column.id;\n };\n },\n createTable: table => {\n table.setColumnOrder = updater => table.options.onColumnOrderChange == null ? void 0 : table.options.onColumnOrderChange(updater);\n table.resetColumnOrder = defaultState => {\n var _table$initialState$c;\n table.setColumnOrder(defaultState ? [] : (_table$initialState$c = table.initialState.columnOrder) != null ? _table$initialState$c : []);\n };\n table._getOrderColumnsFn = memo(() => [table.getState().columnOrder, table.getState().grouping, table.options.groupedColumnMode], (columnOrder, grouping, groupedColumnMode) => columns => {\n // Sort grouped columns to the start of the column list\n // before the headers are built\n let orderedColumns = [];\n\n // If there is no order, return the normal columns\n if (!(columnOrder != null && columnOrder.length)) {\n orderedColumns = columns;\n } else {\n const columnOrderCopy = [...columnOrder];\n\n // If there is an order, make a copy of the columns\n const columnsCopy = [...columns];\n\n // And make a new ordered array of the columns\n\n // Loop over the columns and place them in order into the new array\n while (columnsCopy.length && columnOrderCopy.length) {\n const targetColumnId = columnOrderCopy.shift();\n const foundIndex = columnsCopy.findIndex(d => d.id === targetColumnId);\n if (foundIndex > -1) {\n orderedColumns.push(columnsCopy.splice(foundIndex, 1)[0]);\n }\n }\n\n // If there are any columns left, add them to the end\n orderedColumns = [...orderedColumns, ...columnsCopy];\n }\n return orderColumns(orderedColumns, grouping, groupedColumnMode);\n }, getMemoOptions(table.options, 'debugTable', '_getOrderColumnsFn'));\n }\n};\n\n//\n\nconst getDefaultColumnPinningState = () => ({\n left: [],\n right: []\n});\nconst ColumnPinning = {\n getInitialState: state => {\n return {\n columnPinning: getDefaultColumnPinningState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnPinningChange: makeStateUpdater('columnPinning', table)\n };\n },\n createColumn: (column, table) => {\n column.pin = position => {\n const columnIds = column.getLeafColumns().map(d => d.id).filter(Boolean);\n table.setColumnPinning(old => {\n var _old$left3, _old$right3;\n if (position === 'right') {\n var _old$left, _old$right;\n return {\n left: ((_old$left = old == null ? void 0 : old.left) != null ? _old$left : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n right: [...((_old$right = old == null ? void 0 : old.right) != null ? _old$right : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds]\n };\n }\n if (position === 'left') {\n var _old$left2, _old$right2;\n return {\n left: [...((_old$left2 = old == null ? void 0 : old.left) != null ? _old$left2 : []).filter(d => !(columnIds != null && columnIds.includes(d))), ...columnIds],\n right: ((_old$right2 = old == null ? void 0 : old.right) != null ? _old$right2 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n };\n }\n return {\n left: ((_old$left3 = old == null ? void 0 : old.left) != null ? _old$left3 : []).filter(d => !(columnIds != null && columnIds.includes(d))),\n right: ((_old$right3 = old == null ? void 0 : old.right) != null ? _old$right3 : []).filter(d => !(columnIds != null && columnIds.includes(d)))\n };\n });\n };\n column.getCanPin = () => {\n const leafColumns = column.getLeafColumns();\n return leafColumns.some(d => {\n var _d$columnDef$enablePi, _ref, _table$options$enable;\n return ((_d$columnDef$enablePi = d.columnDef.enablePinning) != null ? _d$columnDef$enablePi : true) && ((_ref = (_table$options$enable = table.options.enableColumnPinning) != null ? _table$options$enable : table.options.enablePinning) != null ? _ref : true);\n });\n };\n column.getIsPinned = () => {\n const leafColumnIds = column.getLeafColumns().map(d => d.id);\n const {\n left,\n right\n } = table.getState().columnPinning;\n const isLeft = leafColumnIds.some(d => left == null ? void 0 : left.includes(d));\n const isRight = leafColumnIds.some(d => right == null ? void 0 : right.includes(d));\n return isLeft ? 'left' : isRight ? 'right' : false;\n };\n column.getPinnedIndex = () => {\n var _table$getState$colum, _table$getState$colum2;\n const position = column.getIsPinned();\n return position ? (_table$getState$colum = (_table$getState$colum2 = table.getState().columnPinning) == null || (_table$getState$colum2 = _table$getState$colum2[position]) == null ? void 0 : _table$getState$colum2.indexOf(column.id)) != null ? _table$getState$colum : -1 : 0;\n };\n },\n createRow: (row, table) => {\n row.getCenterVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allCells, left, right) => {\n const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n return allCells.filter(d => !leftAndRight.includes(d.column.id));\n }, getMemoOptions(table.options, 'debugRows', 'getCenterVisibleCells'));\n row.getLeftVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.left], (allCells, left) => {\n const cells = (left != null ? left : []).map(columnId => allCells.find(cell => cell.column.id === columnId)).filter(Boolean).map(d => ({\n ...d,\n position: 'left'\n }));\n return cells;\n }, getMemoOptions(table.options, 'debugRows', 'getLeftVisibleCells'));\n row.getRightVisibleCells = memo(() => [row._getAllVisibleCells(), table.getState().columnPinning.right], (allCells, right) => {\n const cells = (right != null ? right : []).map(columnId => allCells.find(cell => cell.column.id === columnId)).filter(Boolean).map(d => ({\n ...d,\n position: 'right'\n }));\n return cells;\n }, getMemoOptions(table.options, 'debugRows', 'getRightVisibleCells'));\n },\n createTable: table => {\n table.setColumnPinning = updater => table.options.onColumnPinningChange == null ? void 0 : table.options.onColumnPinningChange(updater);\n table.resetColumnPinning = defaultState => {\n var _table$initialState$c, _table$initialState;\n return table.setColumnPinning(defaultState ? getDefaultColumnPinningState() : (_table$initialState$c = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.columnPinning) != null ? _table$initialState$c : getDefaultColumnPinningState());\n };\n table.getIsSomeColumnsPinned = position => {\n var _pinningState$positio;\n const pinningState = table.getState().columnPinning;\n if (!position) {\n var _pinningState$left, _pinningState$right;\n return Boolean(((_pinningState$left = pinningState.left) == null ? void 0 : _pinningState$left.length) || ((_pinningState$right = pinningState.right) == null ? void 0 : _pinningState$right.length));\n }\n return Boolean((_pinningState$positio = pinningState[position]) == null ? void 0 : _pinningState$positio.length);\n };\n table.getLeftLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left], (allColumns, left) => {\n return (left != null ? left : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n }, getMemoOptions(table.options, 'debugColumns', 'getLeftLeafColumns'));\n table.getRightLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.right], (allColumns, right) => {\n return (right != null ? right : []).map(columnId => allColumns.find(column => column.id === columnId)).filter(Boolean);\n }, getMemoOptions(table.options, 'debugColumns', 'getRightLeafColumns'));\n table.getCenterLeafColumns = memo(() => [table.getAllLeafColumns(), table.getState().columnPinning.left, table.getState().columnPinning.right], (allColumns, left, right) => {\n const leftAndRight = [...(left != null ? left : []), ...(right != null ? right : [])];\n return allColumns.filter(d => !leftAndRight.includes(d.id));\n }, getMemoOptions(table.options, 'debugColumns', 'getCenterLeafColumns'));\n }\n};\n\nfunction safelyAccessDocument(_document) {\n return _document || (typeof document !== 'undefined' ? document : null);\n}\n\n//\n\n//\n\nconst defaultColumnSizing = {\n size: 150,\n minSize: 20,\n maxSize: Number.MAX_SAFE_INTEGER\n};\nconst getDefaultColumnSizingInfoState = () => ({\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n isResizingColumn: false,\n columnSizingStart: []\n});\nconst ColumnSizing = {\n getDefaultColumnDef: () => {\n return defaultColumnSizing;\n },\n getInitialState: state => {\n return {\n columnSizing: {},\n columnSizingInfo: getDefaultColumnSizingInfoState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n columnResizeMode: 'onEnd',\n columnResizeDirection: 'ltr',\n onColumnSizingChange: makeStateUpdater('columnSizing', table),\n onColumnSizingInfoChange: makeStateUpdater('columnSizingInfo', table)\n };\n },\n createColumn: (column, table) => {\n column.getSize = () => {\n var _column$columnDef$min, _ref, _column$columnDef$max;\n const columnSize = table.getState().columnSizing[column.id];\n return Math.min(Math.max((_column$columnDef$min = column.columnDef.minSize) != null ? _column$columnDef$min : defaultColumnSizing.minSize, (_ref = columnSize != null ? columnSize : column.columnDef.size) != null ? _ref : defaultColumnSizing.size), (_column$columnDef$max = column.columnDef.maxSize) != null ? _column$columnDef$max : defaultColumnSizing.maxSize);\n };\n column.getStart = memo(position => [position, _getVisibleLeafColumns(table, position), table.getState().columnSizing], (position, columns) => columns.slice(0, column.getIndex(position)).reduce((sum, column) => sum + column.getSize(), 0), getMemoOptions(table.options, 'debugColumns', 'getStart'));\n column.getAfter = memo(position => [position, _getVisibleLeafColumns(table, position), table.getState().columnSizing], (position, columns) => columns.slice(column.getIndex(position) + 1).reduce((sum, column) => sum + column.getSize(), 0), getMemoOptions(table.options, 'debugColumns', 'getAfter'));\n column.resetSize = () => {\n table.setColumnSizing(_ref2 => {\n let {\n [column.id]: _,\n ...rest\n } = _ref2;\n return rest;\n });\n };\n column.getCanResize = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableResizing) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableColumnResizing) != null ? _table$options$enable : true);\n };\n column.getIsResizing = () => {\n return table.getState().columnSizingInfo.isResizingColumn === column.id;\n };\n },\n createHeader: (header, table) => {\n header.getSize = () => {\n let sum = 0;\n const recurse = header => {\n if (header.subHeaders.length) {\n header.subHeaders.forEach(recurse);\n } else {\n var _header$column$getSiz;\n sum += (_header$column$getSiz = header.column.getSize()) != null ? _header$column$getSiz : 0;\n }\n };\n recurse(header);\n return sum;\n };\n header.getStart = () => {\n if (header.index > 0) {\n const prevSiblingHeader = header.headerGroup.headers[header.index - 1];\n return prevSiblingHeader.getStart() + prevSiblingHeader.getSize();\n }\n return 0;\n };\n header.getResizeHandler = _contextDocument => {\n const column = table.getColumn(header.column.id);\n const canResize = column == null ? void 0 : column.getCanResize();\n return e => {\n if (!column || !canResize) {\n return;\n }\n e.persist == null || e.persist();\n if (isTouchStartEvent(e)) {\n // lets not respond to multiple touches (e.g. 2 or 3 fingers)\n if (e.touches && e.touches.length > 1) {\n return;\n }\n }\n const startSize = header.getSize();\n const columnSizingStart = header ? header.getLeafHeaders().map(d => [d.column.id, d.column.getSize()]) : [[column.id, column.getSize()]];\n const clientX = isTouchStartEvent(e) ? Math.round(e.touches[0].clientX) : e.clientX;\n const newColumnSizing = {};\n const updateOffset = (eventType, clientXPos) => {\n if (typeof clientXPos !== 'number') {\n return;\n }\n table.setColumnSizingInfo(old => {\n var _old$startOffset, _old$startSize;\n const deltaDirection = table.options.columnResizeDirection === 'rtl' ? -1 : 1;\n const deltaOffset = (clientXPos - ((_old$startOffset = old == null ? void 0 : old.startOffset) != null ? _old$startOffset : 0)) * deltaDirection;\n const deltaPercentage = Math.max(deltaOffset / ((_old$startSize = old == null ? void 0 : old.startSize) != null ? _old$startSize : 0), -0.999999);\n old.columnSizingStart.forEach(_ref3 => {\n let [columnId, headerSize] = _ref3;\n newColumnSizing[columnId] = Math.round(Math.max(headerSize + headerSize * deltaPercentage, 0) * 100) / 100;\n });\n return {\n ...old,\n deltaOffset,\n deltaPercentage\n };\n });\n if (table.options.columnResizeMode === 'onChange' || eventType === 'end') {\n table.setColumnSizing(old => ({\n ...old,\n ...newColumnSizing\n }));\n }\n };\n const onMove = clientXPos => updateOffset('move', clientXPos);\n const onEnd = clientXPos => {\n updateOffset('end', clientXPos);\n table.setColumnSizingInfo(old => ({\n ...old,\n isResizingColumn: false,\n startOffset: null,\n startSize: null,\n deltaOffset: null,\n deltaPercentage: null,\n columnSizingStart: []\n }));\n };\n const contextDocument = safelyAccessDocument(_contextDocument);\n const mouseEvents = {\n moveHandler: e => onMove(e.clientX),\n upHandler: e => {\n contextDocument == null || contextDocument.removeEventListener('mousemove', mouseEvents.moveHandler);\n contextDocument == null || contextDocument.removeEventListener('mouseup', mouseEvents.upHandler);\n onEnd(e.clientX);\n }\n };\n const touchEvents = {\n moveHandler: e => {\n if (e.cancelable) {\n e.preventDefault();\n e.stopPropagation();\n }\n onMove(e.touches[0].clientX);\n return false;\n },\n upHandler: e => {\n var _e$touches$;\n contextDocument == null || contextDocument.removeEventListener('touchmove', touchEvents.moveHandler);\n contextDocument == null || contextDocument.removeEventListener('touchend', touchEvents.upHandler);\n if (e.cancelable) {\n e.preventDefault();\n e.stopPropagation();\n }\n onEnd((_e$touches$ = e.touches[0]) == null ? void 0 : _e$touches$.clientX);\n }\n };\n const passiveIfSupported = passiveEventSupported() ? {\n passive: false\n } : false;\n if (isTouchStartEvent(e)) {\n contextDocument == null || contextDocument.addEventListener('touchmove', touchEvents.moveHandler, passiveIfSupported);\n contextDocument == null || contextDocument.addEventListener('touchend', touchEvents.upHandler, passiveIfSupported);\n } else {\n contextDocument == null || contextDocument.addEventListener('mousemove', mouseEvents.moveHandler, passiveIfSupported);\n contextDocument == null || contextDocument.addEventListener('mouseup', mouseEvents.upHandler, passiveIfSupported);\n }\n table.setColumnSizingInfo(old => ({\n ...old,\n startOffset: clientX,\n startSize,\n deltaOffset: 0,\n deltaPercentage: 0,\n columnSizingStart,\n isResizingColumn: column.id\n }));\n };\n };\n },\n createTable: table => {\n table.setColumnSizing = updater => table.options.onColumnSizingChange == null ? void 0 : table.options.onColumnSizingChange(updater);\n table.setColumnSizingInfo = updater => table.options.onColumnSizingInfoChange == null ? void 0 : table.options.onColumnSizingInfoChange(updater);\n table.resetColumnSizing = defaultState => {\n var _table$initialState$c;\n table.setColumnSizing(defaultState ? {} : (_table$initialState$c = table.initialState.columnSizing) != null ? _table$initialState$c : {});\n };\n table.resetHeaderSizeInfo = defaultState => {\n var _table$initialState$c2;\n table.setColumnSizingInfo(defaultState ? getDefaultColumnSizingInfoState() : (_table$initialState$c2 = table.initialState.columnSizingInfo) != null ? _table$initialState$c2 : getDefaultColumnSizingInfoState());\n };\n table.getTotalSize = () => {\n var _table$getHeaderGroup, _table$getHeaderGroup2;\n return (_table$getHeaderGroup = (_table$getHeaderGroup2 = table.getHeaderGroups()[0]) == null ? void 0 : _table$getHeaderGroup2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getHeaderGroup : 0;\n };\n table.getLeftTotalSize = () => {\n var _table$getLeftHeaderG, _table$getLeftHeaderG2;\n return (_table$getLeftHeaderG = (_table$getLeftHeaderG2 = table.getLeftHeaderGroups()[0]) == null ? void 0 : _table$getLeftHeaderG2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getLeftHeaderG : 0;\n };\n table.getCenterTotalSize = () => {\n var _table$getCenterHeade, _table$getCenterHeade2;\n return (_table$getCenterHeade = (_table$getCenterHeade2 = table.getCenterHeaderGroups()[0]) == null ? void 0 : _table$getCenterHeade2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getCenterHeade : 0;\n };\n table.getRightTotalSize = () => {\n var _table$getRightHeader, _table$getRightHeader2;\n return (_table$getRightHeader = (_table$getRightHeader2 = table.getRightHeaderGroups()[0]) == null ? void 0 : _table$getRightHeader2.headers.reduce((sum, header) => {\n return sum + header.getSize();\n }, 0)) != null ? _table$getRightHeader : 0;\n };\n }\n};\nlet passiveSupported = null;\nfunction passiveEventSupported() {\n if (typeof passiveSupported === 'boolean') return passiveSupported;\n let supported = false;\n try {\n const options = {\n get passive() {\n supported = true;\n return false;\n }\n };\n const noop = () => {};\n window.addEventListener('test', noop, options);\n window.removeEventListener('test', noop);\n } catch (err) {\n supported = false;\n }\n passiveSupported = supported;\n return passiveSupported;\n}\nfunction isTouchStartEvent(e) {\n return e.type === 'touchstart';\n}\n\n//\n\nconst ColumnVisibility = {\n getInitialState: state => {\n return {\n columnVisibility: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onColumnVisibilityChange: makeStateUpdater('columnVisibility', table)\n };\n },\n createColumn: (column, table) => {\n column.toggleVisibility = value => {\n if (column.getCanHide()) {\n table.setColumnVisibility(old => ({\n ...old,\n [column.id]: value != null ? value : !column.getIsVisible()\n }));\n }\n };\n column.getIsVisible = () => {\n var _ref, _table$getState$colum;\n const childColumns = column.columns;\n return (_ref = childColumns.length ? childColumns.some(c => c.getIsVisible()) : (_table$getState$colum = table.getState().columnVisibility) == null ? void 0 : _table$getState$colum[column.id]) != null ? _ref : true;\n };\n column.getCanHide = () => {\n var _column$columnDef$ena, _table$options$enable;\n return ((_column$columnDef$ena = column.columnDef.enableHiding) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableHiding) != null ? _table$options$enable : true);\n };\n column.getToggleVisibilityHandler = () => {\n return e => {\n column.toggleVisibility == null || column.toggleVisibility(e.target.checked);\n };\n };\n },\n createRow: (row, table) => {\n row._getAllVisibleCells = memo(() => [row.getAllCells(), table.getState().columnVisibility], cells => {\n return cells.filter(cell => cell.column.getIsVisible());\n }, getMemoOptions(table.options, 'debugRows', '_getAllVisibleCells'));\n row.getVisibleCells = memo(() => [row.getLeftVisibleCells(), row.getCenterVisibleCells(), row.getRightVisibleCells()], (left, center, right) => [...left, ...center, ...right], getMemoOptions(table.options, 'debugRows', 'getVisibleCells'));\n },\n createTable: table => {\n const makeVisibleColumnsMethod = (key, getColumns) => {\n return memo(() => [getColumns(), getColumns().filter(d => d.getIsVisible()).map(d => d.id).join('_')], columns => {\n return columns.filter(d => d.getIsVisible == null ? void 0 : d.getIsVisible());\n }, getMemoOptions(table.options, 'debugColumns', key));\n };\n table.getVisibleFlatColumns = makeVisibleColumnsMethod('getVisibleFlatColumns', () => table.getAllFlatColumns());\n table.getVisibleLeafColumns = makeVisibleColumnsMethod('getVisibleLeafColumns', () => table.getAllLeafColumns());\n table.getLeftVisibleLeafColumns = makeVisibleColumnsMethod('getLeftVisibleLeafColumns', () => table.getLeftLeafColumns());\n table.getRightVisibleLeafColumns = makeVisibleColumnsMethod('getRightVisibleLeafColumns', () => table.getRightLeafColumns());\n table.getCenterVisibleLeafColumns = makeVisibleColumnsMethod('getCenterVisibleLeafColumns', () => table.getCenterLeafColumns());\n table.setColumnVisibility = updater => table.options.onColumnVisibilityChange == null ? void 0 : table.options.onColumnVisibilityChange(updater);\n table.resetColumnVisibility = defaultState => {\n var _table$initialState$c;\n table.setColumnVisibility(defaultState ? {} : (_table$initialState$c = table.initialState.columnVisibility) != null ? _table$initialState$c : {});\n };\n table.toggleAllColumnsVisible = value => {\n var _value;\n value = (_value = value) != null ? _value : !table.getIsAllColumnsVisible();\n table.setColumnVisibility(table.getAllLeafColumns().reduce((obj, column) => ({\n ...obj,\n [column.id]: !value ? !(column.getCanHide != null && column.getCanHide()) : value\n }), {}));\n };\n table.getIsAllColumnsVisible = () => !table.getAllLeafColumns().some(column => !(column.getIsVisible != null && column.getIsVisible()));\n table.getIsSomeColumnsVisible = () => table.getAllLeafColumns().some(column => column.getIsVisible == null ? void 0 : column.getIsVisible());\n table.getToggleAllColumnsVisibilityHandler = () => {\n return e => {\n var _target;\n table.toggleAllColumnsVisible((_target = e.target) == null ? void 0 : _target.checked);\n };\n };\n }\n};\nfunction _getVisibleLeafColumns(table, position) {\n return !position ? table.getVisibleLeafColumns() : position === 'center' ? table.getCenterVisibleLeafColumns() : position === 'left' ? table.getLeftVisibleLeafColumns() : table.getRightVisibleLeafColumns();\n}\n\n//\n\nconst GlobalFaceting = {\n createTable: table => {\n table._getGlobalFacetedRowModel = table.options.getFacetedRowModel && table.options.getFacetedRowModel(table, '__global__');\n table.getGlobalFacetedRowModel = () => {\n if (table.options.manualFiltering || !table._getGlobalFacetedRowModel) {\n return table.getPreFilteredRowModel();\n }\n return table._getGlobalFacetedRowModel();\n };\n table._getGlobalFacetedUniqueValues = table.options.getFacetedUniqueValues && table.options.getFacetedUniqueValues(table, '__global__');\n table.getGlobalFacetedUniqueValues = () => {\n if (!table._getGlobalFacetedUniqueValues) {\n return new Map();\n }\n return table._getGlobalFacetedUniqueValues();\n };\n table._getGlobalFacetedMinMaxValues = table.options.getFacetedMinMaxValues && table.options.getFacetedMinMaxValues(table, '__global__');\n table.getGlobalFacetedMinMaxValues = () => {\n if (!table._getGlobalFacetedMinMaxValues) {\n return;\n }\n return table._getGlobalFacetedMinMaxValues();\n };\n }\n};\n\n//\n\nconst GlobalFiltering = {\n getInitialState: state => {\n return {\n globalFilter: undefined,\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onGlobalFilterChange: makeStateUpdater('globalFilter', table),\n globalFilterFn: 'auto',\n getColumnCanGlobalFilter: column => {\n var _table$getCoreRowMode;\n const value = (_table$getCoreRowMode = table.getCoreRowModel().flatRows[0]) == null || (_table$getCoreRowMode = _table$getCoreRowMode._getAllCellsByColumnId()[column.id]) == null ? void 0 : _table$getCoreRowMode.getValue();\n return typeof value === 'string' || typeof value === 'number';\n }\n };\n },\n createColumn: (column, table) => {\n column.getCanGlobalFilter = () => {\n var _column$columnDef$ena, _table$options$enable, _table$options$enable2, _table$options$getCol;\n return ((_column$columnDef$ena = column.columnDef.enableGlobalFilter) != null ? _column$columnDef$ena : true) && ((_table$options$enable = table.options.enableGlobalFilter) != null ? _table$options$enable : true) && ((_table$options$enable2 = table.options.enableFilters) != null ? _table$options$enable2 : true) && ((_table$options$getCol = table.options.getColumnCanGlobalFilter == null ? void 0 : table.options.getColumnCanGlobalFilter(column)) != null ? _table$options$getCol : true) && !!column.accessorFn;\n };\n },\n createTable: table => {\n table.getGlobalAutoFilterFn = () => {\n return filterFns.includesString;\n };\n table.getGlobalFilterFn = () => {\n var _table$options$filter, _table$options$filter2;\n const {\n globalFilterFn: globalFilterFn\n } = table.options;\n return isFunction(globalFilterFn) ? globalFilterFn : globalFilterFn === 'auto' ? table.getGlobalAutoFilterFn() : (_table$options$filter = (_table$options$filter2 = table.options.filterFns) == null ? void 0 : _table$options$filter2[globalFilterFn]) != null ? _table$options$filter : filterFns[globalFilterFn];\n };\n table.setGlobalFilter = updater => {\n table.options.onGlobalFilterChange == null || table.options.onGlobalFilterChange(updater);\n };\n table.resetGlobalFilter = defaultState => {\n table.setGlobalFilter(defaultState ? undefined : table.initialState.globalFilter);\n };\n }\n};\n\n//\n\nconst RowExpanding = {\n getInitialState: state => {\n return {\n expanded: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onExpandedChange: makeStateUpdater('expanded', table),\n paginateExpandedRows: true\n };\n },\n createTable: table => {\n let registered = false;\n let queued = false;\n table._autoResetExpanded = () => {\n var _ref, _table$options$autoRe;\n if (!registered) {\n table._queue(() => {\n registered = true;\n });\n return;\n }\n if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetExpanded) != null ? _ref : !table.options.manualExpanding) {\n if (queued) return;\n queued = true;\n table._queue(() => {\n table.resetExpanded();\n queued = false;\n });\n }\n };\n table.setExpanded = updater => table.options.onExpandedChange == null ? void 0 : table.options.onExpandedChange(updater);\n table.toggleAllRowsExpanded = expanded => {\n if (expanded != null ? expanded : !table.getIsAllRowsExpanded()) {\n table.setExpanded(true);\n } else {\n table.setExpanded({});\n }\n };\n table.resetExpanded = defaultState => {\n var _table$initialState$e, _table$initialState;\n table.setExpanded(defaultState ? {} : (_table$initialState$e = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.expanded) != null ? _table$initialState$e : {});\n };\n table.getCanSomeRowsExpand = () => {\n return table.getPrePaginationRowModel().flatRows.some(row => row.getCanExpand());\n };\n table.getToggleAllRowsExpandedHandler = () => {\n return e => {\n e.persist == null || e.persist();\n table.toggleAllRowsExpanded();\n };\n };\n table.getIsSomeRowsExpanded = () => {\n const expanded = table.getState().expanded;\n return expanded === true || Object.values(expanded).some(Boolean);\n };\n table.getIsAllRowsExpanded = () => {\n const expanded = table.getState().expanded;\n\n // If expanded is true, save some cycles and return true\n if (typeof expanded === 'boolean') {\n return expanded === true;\n }\n if (!Object.keys(expanded).length) {\n return false;\n }\n\n // If any row is not expanded, return false\n if (table.getRowModel().flatRows.some(row => !row.getIsExpanded())) {\n return false;\n }\n\n // They must all be expanded :shrug:\n return true;\n };\n table.getExpandedDepth = () => {\n let maxDepth = 0;\n const rowIds = table.getState().expanded === true ? Object.keys(table.getRowModel().rowsById) : Object.keys(table.getState().expanded);\n rowIds.forEach(id => {\n const splitId = id.split('.');\n maxDepth = Math.max(maxDepth, splitId.length);\n });\n return maxDepth;\n };\n table.getPreExpandedRowModel = () => table.getSortedRowModel();\n table.getExpandedRowModel = () => {\n if (!table._getExpandedRowModel && table.options.getExpandedRowModel) {\n table._getExpandedRowModel = table.options.getExpandedRowModel(table);\n }\n if (table.options.manualExpanding || !table._getExpandedRowModel) {\n return table.getPreExpandedRowModel();\n }\n return table._getExpandedRowModel();\n };\n },\n createRow: (row, table) => {\n row.toggleExpanded = expanded => {\n table.setExpanded(old => {\n var _expanded;\n const exists = old === true ? true : !!(old != null && old[row.id]);\n let oldExpanded = {};\n if (old === true) {\n Object.keys(table.getRowModel().rowsById).forEach(rowId => {\n oldExpanded[rowId] = true;\n });\n } else {\n oldExpanded = old;\n }\n expanded = (_expanded = expanded) != null ? _expanded : !exists;\n if (!exists && expanded) {\n return {\n ...oldExpanded,\n [row.id]: true\n };\n }\n if (exists && !expanded) {\n const {\n [row.id]: _,\n ...rest\n } = oldExpanded;\n return rest;\n }\n return old;\n });\n };\n row.getIsExpanded = () => {\n var _table$options$getIsR;\n const expanded = table.getState().expanded;\n return !!((_table$options$getIsR = table.options.getIsRowExpanded == null ? void 0 : table.options.getIsRowExpanded(row)) != null ? _table$options$getIsR : expanded === true || (expanded == null ? void 0 : expanded[row.id]));\n };\n row.getCanExpand = () => {\n var _table$options$getRow, _table$options$enable, _row$subRows;\n return (_table$options$getRow = table.options.getRowCanExpand == null ? void 0 : table.options.getRowCanExpand(row)) != null ? _table$options$getRow : ((_table$options$enable = table.options.enableExpanding) != null ? _table$options$enable : true) && !!((_row$subRows = row.subRows) != null && _row$subRows.length);\n };\n row.getIsAllParentsExpanded = () => {\n let isFullyExpanded = true;\n let currentRow = row;\n while (isFullyExpanded && currentRow.parentId) {\n currentRow = table.getRow(currentRow.parentId, true);\n isFullyExpanded = currentRow.getIsExpanded();\n }\n return isFullyExpanded;\n };\n row.getToggleExpandedHandler = () => {\n const canExpand = row.getCanExpand();\n return () => {\n if (!canExpand) return;\n row.toggleExpanded();\n };\n };\n }\n};\n\n//\n\nconst defaultPageIndex = 0;\nconst defaultPageSize = 10;\nconst getDefaultPaginationState = () => ({\n pageIndex: defaultPageIndex,\n pageSize: defaultPageSize\n});\nconst RowPagination = {\n getInitialState: state => {\n return {\n ...state,\n pagination: {\n ...getDefaultPaginationState(),\n ...(state == null ? void 0 : state.pagination)\n }\n };\n },\n getDefaultOptions: table => {\n return {\n onPaginationChange: makeStateUpdater('pagination', table)\n };\n },\n createTable: table => {\n let registered = false;\n let queued = false;\n table._autoResetPageIndex = () => {\n var _ref, _table$options$autoRe;\n if (!registered) {\n table._queue(() => {\n registered = true;\n });\n return;\n }\n if ((_ref = (_table$options$autoRe = table.options.autoResetAll) != null ? _table$options$autoRe : table.options.autoResetPageIndex) != null ? _ref : !table.options.manualPagination) {\n if (queued) return;\n queued = true;\n table._queue(() => {\n table.resetPageIndex();\n queued = false;\n });\n }\n };\n table.setPagination = updater => {\n const safeUpdater = old => {\n let newState = functionalUpdate(updater, old);\n return newState;\n };\n return table.options.onPaginationChange == null ? void 0 : table.options.onPaginationChange(safeUpdater);\n };\n table.resetPagination = defaultState => {\n var _table$initialState$p;\n table.setPagination(defaultState ? getDefaultPaginationState() : (_table$initialState$p = table.initialState.pagination) != null ? _table$initialState$p : getDefaultPaginationState());\n };\n table.setPageIndex = updater => {\n table.setPagination(old => {\n let pageIndex = functionalUpdate(updater, old.pageIndex);\n const maxPageIndex = typeof table.options.pageCount === 'undefined' || table.options.pageCount === -1 ? Number.MAX_SAFE_INTEGER : table.options.pageCount - 1;\n pageIndex = Math.max(0, Math.min(pageIndex, maxPageIndex));\n return {\n ...old,\n pageIndex\n };\n });\n };\n table.resetPageIndex = defaultState => {\n var _table$initialState$p2, _table$initialState;\n table.setPageIndex(defaultState ? defaultPageIndex : (_table$initialState$p2 = (_table$initialState = table.initialState) == null || (_table$initialState = _table$initialState.pagination) == null ? void 0 : _table$initialState.pageIndex) != null ? _table$initialState$p2 : defaultPageIndex);\n };\n table.resetPageSize = defaultState => {\n var _table$initialState$p3, _table$initialState2;\n table.setPageSize(defaultState ? defaultPageSize : (_table$initialState$p3 = (_table$initialState2 = table.initialState) == null || (_table$initialState2 = _table$initialState2.pagination) == null ? void 0 : _table$initialState2.pageSize) != null ? _table$initialState$p3 : defaultPageSize);\n };\n table.setPageSize = updater => {\n table.setPagination(old => {\n const pageSize = Math.max(1, functionalUpdate(updater, old.pageSize));\n const topRowIndex = old.pageSize * old.pageIndex;\n const pageIndex = Math.floor(topRowIndex / pageSize);\n return {\n ...old,\n pageIndex,\n pageSize\n };\n });\n };\n //deprecated\n table.setPageCount = updater => table.setPagination(old => {\n var _table$options$pageCo;\n let newPageCount = functionalUpdate(updater, (_table$options$pageCo = table.options.pageCount) != null ? _table$options$pageCo : -1);\n if (typeof newPageCount === 'number') {\n newPageCount = Math.max(-1, newPageCount);\n }\n return {\n ...old,\n pageCount: newPageCount\n };\n });\n table.getPageOptions = memo(() => [table.getPageCount()], pageCount => {\n let pageOptions = [];\n if (pageCount && pageCount > 0) {\n pageOptions = [...new Array(pageCount)].fill(null).map((_, i) => i);\n }\n return pageOptions;\n }, getMemoOptions(table.options, 'debugTable', 'getPageOptions'));\n table.getCanPreviousPage = () => table.getState().pagination.pageIndex > 0;\n table.getCanNextPage = () => {\n const {\n pageIndex\n } = table.getState().pagination;\n const pageCount = table.getPageCount();\n if (pageCount === -1) {\n return true;\n }\n if (pageCount === 0) {\n return false;\n }\n return pageIndex < pageCount - 1;\n };\n table.previousPage = () => {\n return table.setPageIndex(old => old - 1);\n };\n table.nextPage = () => {\n return table.setPageIndex(old => {\n return old + 1;\n });\n };\n table.firstPage = () => {\n return table.setPageIndex(0);\n };\n table.lastPage = () => {\n return table.setPageIndex(table.getPageCount() - 1);\n };\n table.getPrePaginationRowModel = () => table.getExpandedRowModel();\n table.getPaginationRowModel = () => {\n if (!table._getPaginationRowModel && table.options.getPaginationRowModel) {\n table._getPaginationRowModel = table.options.getPaginationRowModel(table);\n }\n if (table.options.manualPagination || !table._getPaginationRowModel) {\n return table.getPrePaginationRowModel();\n }\n return table._getPaginationRowModel();\n };\n table.getPageCount = () => {\n var _table$options$pageCo2;\n return (_table$options$pageCo2 = table.options.pageCount) != null ? _table$options$pageCo2 : Math.ceil(table.getRowCount() / table.getState().pagination.pageSize);\n };\n table.getRowCount = () => {\n var _table$options$rowCou;\n return (_table$options$rowCou = table.options.rowCount) != null ? _table$options$rowCou : table.getPrePaginationRowModel().rows.length;\n };\n }\n};\n\n//\n\nconst getDefaultRowPinningState = () => ({\n top: [],\n bottom: []\n});\nconst RowPinning = {\n getInitialState: state => {\n return {\n rowPinning: getDefaultRowPinningState(),\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onRowPinningChange: makeStateUpdater('rowPinning', table)\n };\n },\n createRow: (row, table) => {\n row.pin = (position, includeLeafRows, includeParentRows) => {\n const leafRowIds = includeLeafRows ? row.getLeafRows().map(_ref => {\n let {\n id\n } = _ref;\n return id;\n }) : [];\n const parentRowIds = includeParentRows ? row.getParentRows().map(_ref2 => {\n let {\n id\n } = _ref2;\n return id;\n }) : [];\n const rowIds = new Set([...parentRowIds, row.id, ...leafRowIds]);\n table.setRowPinning(old => {\n var _old$top3, _old$bottom3;\n if (position === 'bottom') {\n var _old$top, _old$bottom;\n return {\n top: ((_old$top = old == null ? void 0 : old.top) != null ? _old$top : []).filter(d => !(rowIds != null && rowIds.has(d))),\n bottom: [...((_old$bottom = old == null ? void 0 : old.bottom) != null ? _old$bottom : []).filter(d => !(rowIds != null && rowIds.has(d))), ...Array.from(rowIds)]\n };\n }\n if (position === 'top') {\n var _old$top2, _old$bottom2;\n return {\n top: [...((_old$top2 = old == null ? void 0 : old.top) != null ? _old$top2 : []).filter(d => !(rowIds != null && rowIds.has(d))), ...Array.from(rowIds)],\n bottom: ((_old$bottom2 = old == null ? void 0 : old.bottom) != null ? _old$bottom2 : []).filter(d => !(rowIds != null && rowIds.has(d)))\n };\n }\n return {\n top: ((_old$top3 = old == null ? void 0 : old.top) != null ? _old$top3 : []).filter(d => !(rowIds != null && rowIds.has(d))),\n bottom: ((_old$bottom3 = old == null ? void 0 : old.bottom) != null ? _old$bottom3 : []).filter(d => !(rowIds != null && rowIds.has(d)))\n };\n });\n };\n row.getCanPin = () => {\n var _ref3;\n const {\n enableRowPinning,\n enablePinning\n } = table.options;\n if (typeof enableRowPinning === 'function') {\n return enableRowPinning(row);\n }\n return (_ref3 = enableRowPinning != null ? enableRowPinning : enablePinning) != null ? _ref3 : true;\n };\n row.getIsPinned = () => {\n const rowIds = [row.id];\n const {\n top,\n bottom\n } = table.getState().rowPinning;\n const isTop = rowIds.some(d => top == null ? void 0 : top.includes(d));\n const isBottom = rowIds.some(d => bottom == null ? void 0 : bottom.includes(d));\n return isTop ? 'top' : isBottom ? 'bottom' : false;\n };\n row.getPinnedIndex = () => {\n var _ref4, _visiblePinnedRowIds$;\n const position = row.getIsPinned();\n if (!position) return -1;\n const visiblePinnedRowIds = (_ref4 = position === 'top' ? table.getTopRows() : table.getBottomRows()) == null ? void 0 : _ref4.map(_ref5 => {\n let {\n id\n } = _ref5;\n return id;\n });\n return (_visiblePinnedRowIds$ = visiblePinnedRowIds == null ? void 0 : visiblePinnedRowIds.indexOf(row.id)) != null ? _visiblePinnedRowIds$ : -1;\n };\n },\n createTable: table => {\n table.setRowPinning = updater => table.options.onRowPinningChange == null ? void 0 : table.options.onRowPinningChange(updater);\n table.resetRowPinning = defaultState => {\n var _table$initialState$r, _table$initialState;\n return table.setRowPinning(defaultState ? getDefaultRowPinningState() : (_table$initialState$r = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.rowPinning) != null ? _table$initialState$r : getDefaultRowPinningState());\n };\n table.getIsSomeRowsPinned = position => {\n var _pinningState$positio;\n const pinningState = table.getState().rowPinning;\n if (!position) {\n var _pinningState$top, _pinningState$bottom;\n return Boolean(((_pinningState$top = pinningState.top) == null ? void 0 : _pinningState$top.length) || ((_pinningState$bottom = pinningState.bottom) == null ? void 0 : _pinningState$bottom.length));\n }\n return Boolean((_pinningState$positio = pinningState[position]) == null ? void 0 : _pinningState$positio.length);\n };\n table._getPinnedRows = (visibleRows, pinnedRowIds, position) => {\n var _table$options$keepPi;\n const rows = ((_table$options$keepPi = table.options.keepPinnedRows) != null ? _table$options$keepPi : true) ?\n //get all rows that are pinned even if they would not be otherwise visible\n //account for expanded parent rows, but not pagination or filtering\n (pinnedRowIds != null ? pinnedRowIds : []).map(rowId => {\n const row = table.getRow(rowId, true);\n return row.getIsAllParentsExpanded() ? row : null;\n }) :\n //else get only visible rows that are pinned\n (pinnedRowIds != null ? pinnedRowIds : []).map(rowId => visibleRows.find(row => row.id === rowId));\n return rows.filter(Boolean).map(d => ({\n ...d,\n position\n }));\n };\n table.getTopRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.top], (allRows, topPinnedRowIds) => table._getPinnedRows(allRows, topPinnedRowIds, 'top'), getMemoOptions(table.options, 'debugRows', 'getTopRows'));\n table.getBottomRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.bottom], (allRows, bottomPinnedRowIds) => table._getPinnedRows(allRows, bottomPinnedRowIds, 'bottom'), getMemoOptions(table.options, 'debugRows', 'getBottomRows'));\n table.getCenterRows = memo(() => [table.getRowModel().rows, table.getState().rowPinning.top, table.getState().rowPinning.bottom], (allRows, top, bottom) => {\n const topAndBottom = new Set([...(top != null ? top : []), ...(bottom != null ? bottom : [])]);\n return allRows.filter(d => !topAndBottom.has(d.id));\n }, getMemoOptions(table.options, 'debugRows', 'getCenterRows'));\n }\n};\n\n//\n\nconst RowSelection = {\n getInitialState: state => {\n return {\n rowSelection: {},\n ...state\n };\n },\n getDefaultOptions: table => {\n return {\n onRowSelectionChange: makeStateUpdater('rowSelection', table),\n enableRowSelection: true,\n enableMultiRowSelection: true,\n enableSubRowSelection: true\n // enableGroupingRowSelection: false,\n // isAdditiveSelectEvent: (e: unknown) => !!e.metaKey,\n // isInclusiveSelectEvent: (e: unknown) => !!e.shiftKey,\n };\n },\n createTable: table => {\n table.setRowSelection = updater => table.options.onRowSelectionChange == null ? void 0 : table.options.onRowSelectionChange(updater);\n table.resetRowSelection = defaultState => {\n var _table$initialState$r;\n return table.setRowSelection(defaultState ? {} : (_table$initialState$r = table.initialState.rowSelection) != null ? _table$initialState$r : {});\n };\n table.toggleAllRowsSelected = value => {\n table.setRowSelection(old => {\n value = typeof value !== 'undefined' ? value : !table.getIsAllRowsSelected();\n const rowSelection = {\n ...old\n };\n const preGroupedFlatRows = table.getPreGroupedRowModel().flatRows;\n\n // We don't use `mutateRowIsSelected` here for performance reasons.\n // All of the rows are flat already, so it wouldn't be worth it\n if (value) {\n preGroupedFlatRows.forEach(row => {\n if (!row.getCanSelect()) {\n return;\n }\n rowSelection[row.id] = true;\n });\n } else {\n preGroupedFlatRows.forEach(row => {\n delete rowSelection[row.id];\n });\n }\n return rowSelection;\n });\n };\n table.toggleAllPageRowsSelected = value => table.setRowSelection(old => {\n const resolvedValue = typeof value !== 'undefined' ? value : !table.getIsAllPageRowsSelected();\n const rowSelection = {\n ...old\n };\n table.getRowModel().rows.forEach(row => {\n mutateRowIsSelected(rowSelection, row.id, resolvedValue, true, table);\n });\n return rowSelection;\n });\n\n // addRowSelectionRange: rowId => {\n // const {\n // rows,\n // rowsById,\n // options: { selectGroupingRows, selectSubRows },\n // } = table\n\n // const findSelectedRow = (rows: Row[]) => {\n // let found\n // rows.find(d => {\n // if (d.getIsSelected()) {\n // found = d\n // return true\n // }\n // const subFound = findSelectedRow(d.subRows || [])\n // if (subFound) {\n // found = subFound\n // return true\n // }\n // return false\n // })\n // return found\n // }\n\n // const firstRow = findSelectedRow(rows) || rows[0]\n // const lastRow = rowsById[rowId]\n\n // let include = false\n // const selectedRowIds = {}\n\n // const addRow = (row: Row) => {\n // mutateRowIsSelected(selectedRowIds, row.id, true, {\n // rowsById,\n // selectGroupingRows: selectGroupingRows!,\n // selectSubRows: selectSubRows!,\n // })\n // }\n\n // table.rows.forEach(row => {\n // const isFirstRow = row.id === firstRow.id\n // const isLastRow = row.id === lastRow.id\n\n // if (isFirstRow || isLastRow) {\n // if (!include) {\n // include = true\n // } else if (include) {\n // addRow(row)\n // include = false\n // }\n // }\n\n // if (include) {\n // addRow(row)\n // }\n // })\n\n // table.setRowSelection(selectedRowIds)\n // },\n table.getPreSelectedRowModel = () => table.getCoreRowModel();\n table.getSelectedRowModel = memo(() => [table.getState().rowSelection, table.getCoreRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getSelectedRowModel'));\n table.getFilteredSelectedRowModel = memo(() => [table.getState().rowSelection, table.getFilteredRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getFilteredSelectedRowModel'));\n table.getGroupedSelectedRowModel = memo(() => [table.getState().rowSelection, table.getSortedRowModel()], (rowSelection, rowModel) => {\n if (!Object.keys(rowSelection).length) {\n return {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n }\n return selectRowsFn(table, rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getGroupedSelectedRowModel'));\n\n ///\n\n // getGroupingRowCanSelect: rowId => {\n // const row = table.getRow(rowId)\n\n // if (!row) {\n // throw new Error()\n // }\n\n // if (typeof table.options.enableGroupingRowSelection === 'function') {\n // return table.options.enableGroupingRowSelection(row)\n // }\n\n // return table.options.enableGroupingRowSelection ?? false\n // },\n\n table.getIsAllRowsSelected = () => {\n const preGroupedFlatRows = table.getFilteredRowModel().flatRows;\n const {\n rowSelection\n } = table.getState();\n let isAllRowsSelected = Boolean(preGroupedFlatRows.length && Object.keys(rowSelection).length);\n if (isAllRowsSelected) {\n if (preGroupedFlatRows.some(row => row.getCanSelect() && !rowSelection[row.id])) {\n isAllRowsSelected = false;\n }\n }\n return isAllRowsSelected;\n };\n table.getIsAllPageRowsSelected = () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows.filter(row => row.getCanSelect());\n const {\n rowSelection\n } = table.getState();\n let isAllPageRowsSelected = !!paginationFlatRows.length;\n if (isAllPageRowsSelected && paginationFlatRows.some(row => !rowSelection[row.id])) {\n isAllPageRowsSelected = false;\n }\n return isAllPageRowsSelected;\n };\n table.getIsSomeRowsSelected = () => {\n var _table$getState$rowSe;\n const totalSelected = Object.keys((_table$getState$rowSe = table.getState().rowSelection) != null ? _table$getState$rowSe : {}).length;\n return totalSelected > 0 && totalSelected < table.getFilteredRowModel().flatRows.length;\n };\n table.getIsSomePageRowsSelected = () => {\n const paginationFlatRows = table.getPaginationRowModel().flatRows;\n return table.getIsAllPageRowsSelected() ? false : paginationFlatRows.filter(row => row.getCanSelect()).some(d => d.getIsSelected() || d.getIsSomeSelected());\n };\n table.getToggleAllRowsSelectedHandler = () => {\n return e => {\n table.toggleAllRowsSelected(e.target.checked);\n };\n };\n table.getToggleAllPageRowsSelectedHandler = () => {\n return e => {\n table.toggleAllPageRowsSelected(e.target.checked);\n };\n };\n },\n createRow: (row, table) => {\n row.toggleSelected = (value, opts) => {\n const isSelected = row.getIsSelected();\n table.setRowSelection(old => {\n var _opts$selectChildren;\n value = typeof value !== 'undefined' ? value : !isSelected;\n if (row.getCanSelect() && isSelected === value) {\n return old;\n }\n const selectedRowIds = {\n ...old\n };\n mutateRowIsSelected(selectedRowIds, row.id, value, (_opts$selectChildren = opts == null ? void 0 : opts.selectChildren) != null ? _opts$selectChildren : true, table);\n return selectedRowIds;\n });\n };\n row.getIsSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isRowSelected(row, rowSelection);\n };\n row.getIsSomeSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isSubRowSelected(row, rowSelection) === 'some';\n };\n row.getIsAllSubRowsSelected = () => {\n const {\n rowSelection\n } = table.getState();\n return isSubRowSelected(row, rowSelection) === 'all';\n };\n row.getCanSelect = () => {\n var _table$options$enable;\n if (typeof table.options.enableRowSelection === 'function') {\n return table.options.enableRowSelection(row);\n }\n return (_table$options$enable = table.options.enableRowSelection) != null ? _table$options$enable : true;\n };\n row.getCanSelectSubRows = () => {\n var _table$options$enable2;\n if (typeof table.options.enableSubRowSelection === 'function') {\n return table.options.enableSubRowSelection(row);\n }\n return (_table$options$enable2 = table.options.enableSubRowSelection) != null ? _table$options$enable2 : true;\n };\n row.getCanMultiSelect = () => {\n var _table$options$enable3;\n if (typeof table.options.enableMultiRowSelection === 'function') {\n return table.options.enableMultiRowSelection(row);\n }\n return (_table$options$enable3 = table.options.enableMultiRowSelection) != null ? _table$options$enable3 : true;\n };\n row.getToggleSelectedHandler = () => {\n const canSelect = row.getCanSelect();\n return e => {\n var _target;\n if (!canSelect) return;\n row.toggleSelected((_target = e.target) == null ? void 0 : _target.checked);\n };\n };\n }\n};\nconst mutateRowIsSelected = (selectedRowIds, id, value, includeChildren, table) => {\n var _row$subRows;\n const row = table.getRow(id, true);\n\n // const isGrouped = row.getIsGrouped()\n\n // if ( // TODO: enforce grouping row selection rules\n // !isGrouped ||\n // (isGrouped && table.options.enableGroupingRowSelection)\n // ) {\n if (value) {\n if (!row.getCanMultiSelect()) {\n Object.keys(selectedRowIds).forEach(key => delete selectedRowIds[key]);\n }\n if (row.getCanSelect()) {\n selectedRowIds[id] = true;\n }\n } else {\n delete selectedRowIds[id];\n }\n // }\n\n if (includeChildren && (_row$subRows = row.subRows) != null && _row$subRows.length && row.getCanSelectSubRows()) {\n row.subRows.forEach(row => mutateRowIsSelected(selectedRowIds, row.id, value, includeChildren, table));\n }\n};\nfunction selectRowsFn(table, rowModel) {\n const rowSelection = table.getState().rowSelection;\n const newSelectedFlatRows = [];\n const newSelectedRowsById = {};\n\n // Filters top level and nested rows\n const recurseRows = function (rows, depth) {\n return rows.map(row => {\n var _row$subRows2;\n const isSelected = isRowSelected(row, rowSelection);\n if (isSelected) {\n newSelectedFlatRows.push(row);\n newSelectedRowsById[row.id] = row;\n }\n if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length) {\n row = {\n ...row,\n subRows: recurseRows(row.subRows)\n };\n }\n if (isSelected) {\n return row;\n }\n }).filter(Boolean);\n };\n return {\n rows: recurseRows(rowModel.rows),\n flatRows: newSelectedFlatRows,\n rowsById: newSelectedRowsById\n };\n}\nfunction isRowSelected(row, selection) {\n var _selection$row$id;\n return (_selection$row$id = selection[row.id]) != null ? _selection$row$id : false;\n}\nfunction isSubRowSelected(row, selection, table) {\n var _row$subRows3;\n if (!((_row$subRows3 = row.subRows) != null && _row$subRows3.length)) return false;\n let allChildrenSelected = true;\n let someSelected = false;\n row.subRows.forEach(subRow => {\n // Bail out early if we know both of these\n if (someSelected && !allChildrenSelected) {\n return;\n }\n if (subRow.getCanSelect()) {\n if (isRowSelected(subRow, selection)) {\n someSelected = true;\n } else {\n allChildrenSelected = false;\n }\n }\n\n // Check row selection of nested subrows\n if (subRow.subRows && subRow.subRows.length) {\n const subRowChildrenSelected = isSubRowSelected(subRow, selection);\n if (subRowChildrenSelected === 'all') {\n someSelected = true;\n } else if (subRowChildrenSelected === 'some') {\n someSelected = true;\n allChildrenSelected = false;\n } else {\n allChildrenSelected = false;\n }\n }\n });\n return allChildrenSelected ? 'all' : someSelected ? 'some' : false;\n}\n\nconst reSplitAlphaNumeric = /([0-9]+)/gm;\nconst alphanumeric = (rowA, rowB, columnId) => {\n return compareAlphanumeric(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n};\nconst alphanumericCaseSensitive = (rowA, rowB, columnId) => {\n return compareAlphanumeric(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n};\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst text = (rowA, rowB, columnId) => {\n return compareBasic(toString(rowA.getValue(columnId)).toLowerCase(), toString(rowB.getValue(columnId)).toLowerCase());\n};\n\n// The text filter is more basic (less numeric support)\n// but is much faster\nconst textCaseSensitive = (rowA, rowB, columnId) => {\n return compareBasic(toString(rowA.getValue(columnId)), toString(rowB.getValue(columnId)));\n};\nconst datetime = (rowA, rowB, columnId) => {\n const a = rowA.getValue(columnId);\n const b = rowB.getValue(columnId);\n\n // Can handle nullish values\n // Use > and < because == (and ===) doesn't work with\n // Date objects (would require calling getTime()).\n return a > b ? 1 : a < b ? -1 : 0;\n};\nconst basic = (rowA, rowB, columnId) => {\n return compareBasic(rowA.getValue(columnId), rowB.getValue(columnId));\n};\n\n// Utils\n\nfunction compareBasic(a, b) {\n return a === b ? 0 : a > b ? 1 : -1;\n}\nfunction toString(a) {\n if (typeof a === 'number') {\n if (isNaN(a) || a === Infinity || a === -Infinity) {\n return '';\n }\n return String(a);\n }\n if (typeof a === 'string') {\n return a;\n }\n return '';\n}\n\n// Mixed sorting is slow, but very inclusive of many edge cases.\n// It handles numbers, mixed alphanumeric combinations, and even\n// null, undefined, and Infinity\nfunction compareAlphanumeric(aStr, bStr) {\n // Split on number groups, but keep the delimiter\n // Then remove falsey split values\n const a = aStr.split(reSplitAlphaNumeric).filter(Boolean);\n const b = bStr.split(reSplitAlphaNumeric).filter(Boolean);\n\n // While\n while (a.length && b.length) {\n const aa = a.shift();\n const bb = b.shift();\n const an = parseInt(aa, 10);\n const bn = parseInt(bb, 10);\n const combo = [an, bn].sort();\n\n // Both are string\n if (isNaN(combo[0])) {\n if (aa > bb) {\n return 1;\n }\n if (bb > aa) {\n return -1;\n }\n continue;\n }\n\n // One is a string, one is a number\n if (isNaN(combo[1])) {\n return isNaN(an) ? -1 : 1;\n }\n\n // Both are numbers\n if (an > bn) {\n return 1;\n }\n if (bn > an) {\n return -1;\n }\n }\n return a.length - b.length;\n}\n\n// Exports\n\nconst sortingFns = {\n alphanumeric,\n alphanumericCaseSensitive,\n text,\n textCaseSensitive,\n datetime,\n basic\n};\n\n//\n\nconst RowSorting = {\n getInitialState: state => {\n return {\n sorting: [],\n ...state\n };\n },\n getDefaultColumnDef: () => {\n return {\n sortingFn: 'auto',\n sortUndefined: 1\n };\n },\n getDefaultOptions: table => {\n return {\n onSortingChange: makeStateUpdater('sorting', table),\n isMultiSortEvent: e => {\n return e.shiftKey;\n }\n };\n },\n createColumn: (column, table) => {\n column.getAutoSortingFn = () => {\n const firstRows = table.getFilteredRowModel().flatRows.slice(10);\n let isString = false;\n for (const row of firstRows) {\n const value = row == null ? void 0 : row.getValue(column.id);\n if (Object.prototype.toString.call(value) === '[object Date]') {\n return sortingFns.datetime;\n }\n if (typeof value === 'string') {\n isString = true;\n if (value.split(reSplitAlphaNumeric).length > 1) {\n return sortingFns.alphanumeric;\n }\n }\n }\n if (isString) {\n return sortingFns.text;\n }\n return sortingFns.basic;\n };\n column.getAutoSortDir = () => {\n const firstRow = table.getFilteredRowModel().flatRows[0];\n const value = firstRow == null ? void 0 : firstRow.getValue(column.id);\n if (typeof value === 'string') {\n return 'asc';\n }\n return 'desc';\n };\n column.getSortingFn = () => {\n var _table$options$sortin, _table$options$sortin2;\n if (!column) {\n throw new Error();\n }\n return isFunction(column.columnDef.sortingFn) ? column.columnDef.sortingFn : column.columnDef.sortingFn === 'auto' ? column.getAutoSortingFn() : (_table$options$sortin = (_table$options$sortin2 = table.options.sortingFns) == null ? void 0 : _table$options$sortin2[column.columnDef.sortingFn]) != null ? _table$options$sortin : sortingFns[column.columnDef.sortingFn];\n };\n column.toggleSorting = (desc, multi) => {\n // if (column.columns.length) {\n // column.columns.forEach((c, i) => {\n // if (c.id) {\n // table.toggleColumnSorting(c.id, undefined, multi || !!i)\n // }\n // })\n // return\n // }\n\n // this needs to be outside of table.setSorting to be in sync with rerender\n const nextSortingOrder = column.getNextSortingOrder();\n const hasManualValue = typeof desc !== 'undefined' && desc !== null;\n table.setSorting(old => {\n // Find any existing sorting for this column\n const existingSorting = old == null ? void 0 : old.find(d => d.id === column.id);\n const existingIndex = old == null ? void 0 : old.findIndex(d => d.id === column.id);\n let newSorting = [];\n\n // What should we do with this sort action?\n let sortAction;\n let nextDesc = hasManualValue ? desc : nextSortingOrder === 'desc';\n\n // Multi-mode\n if (old != null && old.length && column.getCanMultiSort() && multi) {\n if (existingSorting) {\n sortAction = 'toggle';\n } else {\n sortAction = 'add';\n }\n } else {\n // Normal mode\n if (old != null && old.length && existingIndex !== old.length - 1) {\n sortAction = 'replace';\n } else if (existingSorting) {\n sortAction = 'toggle';\n } else {\n sortAction = 'replace';\n }\n }\n\n // Handle toggle states that will remove the sorting\n if (sortAction === 'toggle') {\n // If we are \"actually\" toggling (not a manual set value), should we remove the sorting?\n if (!hasManualValue) {\n // Is our intention to remove?\n if (!nextSortingOrder) {\n sortAction = 'remove';\n }\n }\n }\n if (sortAction === 'add') {\n var _table$options$maxMul;\n newSorting = [...old, {\n id: column.id,\n desc: nextDesc\n }];\n // Take latest n columns\n newSorting.splice(0, newSorting.length - ((_table$options$maxMul = table.options.maxMultiSortColCount) != null ? _table$options$maxMul : Number.MAX_SAFE_INTEGER));\n } else if (sortAction === 'toggle') {\n // This flips (or sets) the\n newSorting = old.map(d => {\n if (d.id === column.id) {\n return {\n ...d,\n desc: nextDesc\n };\n }\n return d;\n });\n } else if (sortAction === 'remove') {\n newSorting = old.filter(d => d.id !== column.id);\n } else {\n newSorting = [{\n id: column.id,\n desc: nextDesc\n }];\n }\n return newSorting;\n });\n };\n column.getFirstSortDir = () => {\n var _ref, _column$columnDef$sor;\n const sortDescFirst = (_ref = (_column$columnDef$sor = column.columnDef.sortDescFirst) != null ? _column$columnDef$sor : table.options.sortDescFirst) != null ? _ref : column.getAutoSortDir() === 'desc';\n return sortDescFirst ? 'desc' : 'asc';\n };\n column.getNextSortingOrder = multi => {\n var _table$options$enable, _table$options$enable2;\n const firstSortDirection = column.getFirstSortDir();\n const isSorted = column.getIsSorted();\n if (!isSorted) {\n return firstSortDirection;\n }\n if (isSorted !== firstSortDirection && ((_table$options$enable = table.options.enableSortingRemoval) != null ? _table$options$enable : true) && (\n // If enableSortRemove, enable in general\n multi ? (_table$options$enable2 = table.options.enableMultiRemove) != null ? _table$options$enable2 : true : true) // If multi, don't allow if enableMultiRemove))\n ) {\n return false;\n }\n return isSorted === 'desc' ? 'asc' : 'desc';\n };\n column.getCanSort = () => {\n var _column$columnDef$ena, _table$options$enable3;\n return ((_column$columnDef$ena = column.columnDef.enableSorting) != null ? _column$columnDef$ena : true) && ((_table$options$enable3 = table.options.enableSorting) != null ? _table$options$enable3 : true) && !!column.accessorFn;\n };\n column.getCanMultiSort = () => {\n var _ref2, _column$columnDef$ena2;\n return (_ref2 = (_column$columnDef$ena2 = column.columnDef.enableMultiSort) != null ? _column$columnDef$ena2 : table.options.enableMultiSort) != null ? _ref2 : !!column.accessorFn;\n };\n column.getIsSorted = () => {\n var _table$getState$sorti;\n const columnSort = (_table$getState$sorti = table.getState().sorting) == null ? void 0 : _table$getState$sorti.find(d => d.id === column.id);\n return !columnSort ? false : columnSort.desc ? 'desc' : 'asc';\n };\n column.getSortIndex = () => {\n var _table$getState$sorti2, _table$getState$sorti3;\n return (_table$getState$sorti2 = (_table$getState$sorti3 = table.getState().sorting) == null ? void 0 : _table$getState$sorti3.findIndex(d => d.id === column.id)) != null ? _table$getState$sorti2 : -1;\n };\n column.clearSorting = () => {\n //clear sorting for just 1 column\n table.setSorting(old => old != null && old.length ? old.filter(d => d.id !== column.id) : []);\n };\n column.getToggleSortingHandler = () => {\n const canSort = column.getCanSort();\n return e => {\n if (!canSort) return;\n e.persist == null || e.persist();\n column.toggleSorting == null || column.toggleSorting(undefined, column.getCanMultiSort() ? table.options.isMultiSortEvent == null ? void 0 : table.options.isMultiSortEvent(e) : false);\n };\n };\n },\n createTable: table => {\n table.setSorting = updater => table.options.onSortingChange == null ? void 0 : table.options.onSortingChange(updater);\n table.resetSorting = defaultState => {\n var _table$initialState$s, _table$initialState;\n table.setSorting(defaultState ? [] : (_table$initialState$s = (_table$initialState = table.initialState) == null ? void 0 : _table$initialState.sorting) != null ? _table$initialState$s : []);\n };\n table.getPreSortedRowModel = () => table.getGroupedRowModel();\n table.getSortedRowModel = () => {\n if (!table._getSortedRowModel && table.options.getSortedRowModel) {\n table._getSortedRowModel = table.options.getSortedRowModel(table);\n }\n if (table.options.manualSorting || !table._getSortedRowModel) {\n return table.getPreSortedRowModel();\n }\n return table._getSortedRowModel();\n };\n }\n};\n\nconst builtInFeatures = [Headers, ColumnVisibility, ColumnOrdering, ColumnPinning, ColumnFaceting, ColumnFiltering, GlobalFaceting,\n//depends on ColumnFaceting\nGlobalFiltering,\n//depends on ColumnFiltering\nRowSorting, ColumnGrouping,\n//depends on RowSorting\nRowExpanding, RowPagination, RowPinning, RowSelection, ColumnSizing];\n\n//\n\nfunction createTable(options) {\n var _options$_features, _options$initialState;\n if (process.env.NODE_ENV !== 'production' && (options.debugAll || options.debugTable)) {\n console.info('Creating Table Instance...');\n }\n const _features = [...builtInFeatures, ...((_options$_features = options._features) != null ? _options$_features : [])];\n let table = {\n _features\n };\n const defaultOptions = table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultOptions == null ? void 0 : feature.getDefaultOptions(table));\n }, {});\n const mergeOptions = options => {\n if (table.options.mergeOptions) {\n return table.options.mergeOptions(defaultOptions, options);\n }\n return {\n ...defaultOptions,\n ...options\n };\n };\n const coreInitialState = {};\n let initialState = {\n ...coreInitialState,\n ...((_options$initialState = options.initialState) != null ? _options$initialState : {})\n };\n table._features.forEach(feature => {\n var _feature$getInitialSt;\n initialState = (_feature$getInitialSt = feature.getInitialState == null ? void 0 : feature.getInitialState(initialState)) != null ? _feature$getInitialSt : initialState;\n });\n const queued = [];\n let queuedTimeout = false;\n const coreInstance = {\n _features,\n options: {\n ...defaultOptions,\n ...options\n },\n initialState,\n _queue: cb => {\n queued.push(cb);\n if (!queuedTimeout) {\n queuedTimeout = true;\n\n // Schedule a microtask to run the queued callbacks after\n // the current call stack (render, etc) has finished.\n Promise.resolve().then(() => {\n while (queued.length) {\n queued.shift()();\n }\n queuedTimeout = false;\n }).catch(error => setTimeout(() => {\n throw error;\n }));\n }\n },\n reset: () => {\n table.setState(table.initialState);\n },\n setOptions: updater => {\n const newOptions = functionalUpdate(updater, table.options);\n table.options = mergeOptions(newOptions);\n },\n getState: () => {\n return table.options.state;\n },\n setState: updater => {\n table.options.onStateChange == null || table.options.onStateChange(updater);\n },\n _getRowId: (row, index, parent) => {\n var _table$options$getRow;\n return (_table$options$getRow = table.options.getRowId == null ? void 0 : table.options.getRowId(row, index, parent)) != null ? _table$options$getRow : `${parent ? [parent.id, index].join('.') : index}`;\n },\n getCoreRowModel: () => {\n if (!table._getCoreRowModel) {\n table._getCoreRowModel = table.options.getCoreRowModel(table);\n }\n return table._getCoreRowModel();\n },\n // The final calls start at the bottom of the model,\n // expanded rows, which then work their way up\n\n getRowModel: () => {\n return table.getPaginationRowModel();\n },\n //in next version, we should just pass in the row model as the optional 2nd arg\n getRow: (id, searchAll) => {\n let row = (searchAll ? table.getPrePaginationRowModel() : table.getRowModel()).rowsById[id];\n if (!row) {\n row = table.getCoreRowModel().rowsById[id];\n if (!row) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(`getRow could not find row with ID: ${id}`);\n }\n throw new Error();\n }\n }\n return row;\n },\n _getDefaultColumnDef: memo(() => [table.options.defaultColumn], defaultColumn => {\n var _defaultColumn;\n defaultColumn = (_defaultColumn = defaultColumn) != null ? _defaultColumn : {};\n return {\n header: props => {\n const resolvedColumnDef = props.header.column.columnDef;\n if (resolvedColumnDef.accessorKey) {\n return resolvedColumnDef.accessorKey;\n }\n if (resolvedColumnDef.accessorFn) {\n return resolvedColumnDef.id;\n }\n return null;\n },\n // footer: props => props.header.column.id,\n cell: props => {\n var _props$renderValue$to, _props$renderValue;\n return (_props$renderValue$to = (_props$renderValue = props.renderValue()) == null || _props$renderValue.toString == null ? void 0 : _props$renderValue.toString()) != null ? _props$renderValue$to : null;\n },\n ...table._features.reduce((obj, feature) => {\n return Object.assign(obj, feature.getDefaultColumnDef == null ? void 0 : feature.getDefaultColumnDef());\n }, {}),\n ...defaultColumn\n };\n }, getMemoOptions(options, 'debugColumns', '_getDefaultColumnDef')),\n _getColumnDefs: () => table.options.columns,\n getAllColumns: memo(() => [table._getColumnDefs()], columnDefs => {\n const recurseColumns = function (columnDefs, parent, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n return columnDefs.map(columnDef => {\n const column = createColumn(table, columnDef, depth, parent);\n const groupingColumnDef = columnDef;\n column.columns = groupingColumnDef.columns ? recurseColumns(groupingColumnDef.columns, column, depth + 1) : [];\n return column;\n });\n };\n return recurseColumns(columnDefs);\n }, getMemoOptions(options, 'debugColumns', 'getAllColumns')),\n getAllFlatColumns: memo(() => [table.getAllColumns()], allColumns => {\n return allColumns.flatMap(column => {\n return column.getFlatColumns();\n });\n }, getMemoOptions(options, 'debugColumns', 'getAllFlatColumns')),\n _getAllFlatColumnsById: memo(() => [table.getAllFlatColumns()], flatColumns => {\n return flatColumns.reduce((acc, column) => {\n acc[column.id] = column;\n return acc;\n }, {});\n }, getMemoOptions(options, 'debugColumns', 'getAllFlatColumnsById')),\n getAllLeafColumns: memo(() => [table.getAllColumns(), table._getOrderColumnsFn()], (allColumns, orderColumns) => {\n let leafColumns = allColumns.flatMap(column => column.getLeafColumns());\n return orderColumns(leafColumns);\n }, getMemoOptions(options, 'debugColumns', 'getAllLeafColumns')),\n getColumn: columnId => {\n const column = table._getAllFlatColumnsById()[columnId];\n if (process.env.NODE_ENV !== 'production' && !column) {\n console.error(`[Table] Column with id '${columnId}' does not exist.`);\n }\n return column;\n }\n };\n Object.assign(table, coreInstance);\n for (let index = 0; index < table._features.length; index++) {\n const feature = table._features[index];\n feature == null || feature.createTable == null || feature.createTable(table);\n }\n return table;\n}\n\nfunction getCoreRowModel() {\n return table => memo(() => [table.options.data], data => {\n const rowModel = {\n rows: [],\n flatRows: [],\n rowsById: {}\n };\n const accessRows = function (originalRows, depth, parentRow) {\n if (depth === void 0) {\n depth = 0;\n }\n const rows = [];\n for (let i = 0; i < originalRows.length; i++) {\n // This could be an expensive check at scale, so we should move it somewhere else, but where?\n // if (!id) {\n // if (process.env.NODE_ENV !== 'production') {\n // throw new Error(`getRowId expected an ID, but got ${id}`)\n // }\n // }\n\n // Make the row\n const row = createRow(table, table._getRowId(originalRows[i], i, parentRow), originalRows[i], i, depth, undefined, parentRow == null ? void 0 : parentRow.id);\n\n // Keep track of every row in a flat array\n rowModel.flatRows.push(row);\n // Also keep track of every row by its ID\n rowModel.rowsById[row.id] = row;\n // Push table row into parent\n rows.push(row);\n\n // Get the original subrows\n if (table.options.getSubRows) {\n var _row$originalSubRows;\n row.originalSubRows = table.options.getSubRows(originalRows[i], i);\n\n // Then recursively access them\n if ((_row$originalSubRows = row.originalSubRows) != null && _row$originalSubRows.length) {\n row.subRows = accessRows(row.originalSubRows, depth + 1, row);\n }\n }\n }\n return rows;\n };\n rowModel.rows = accessRows(data);\n return rowModel;\n }, getMemoOptions(table.options, 'debugTable', 'getRowModel', () => table._autoResetPageIndex()));\n}\n\nfunction getExpandedRowModel() {\n return table => memo(() => [table.getState().expanded, table.getPreExpandedRowModel(), table.options.paginateExpandedRows], (expanded, rowModel, paginateExpandedRows) => {\n if (!rowModel.rows.length || expanded !== true && !Object.keys(expanded != null ? expanded : {}).length) {\n return rowModel;\n }\n if (!paginateExpandedRows) {\n // Only expand rows at this point if they are being paginated\n return rowModel;\n }\n return expandRows(rowModel);\n }, getMemoOptions(table.options, 'debugTable', 'getExpandedRowModel'));\n}\nfunction expandRows(rowModel) {\n const expandedRows = [];\n const handleRow = row => {\n var _row$subRows;\n expandedRows.push(row);\n if ((_row$subRows = row.subRows) != null && _row$subRows.length && row.getIsExpanded()) {\n row.subRows.forEach(handleRow);\n }\n };\n rowModel.rows.forEach(handleRow);\n return {\n rows: expandedRows,\n flatRows: rowModel.flatRows,\n rowsById: rowModel.rowsById\n };\n}\n\nfunction getFacetedMinMaxValues() {\n return (table, columnId) => memo(() => {\n var _table$getColumn;\n return [(_table$getColumn = table.getColumn(columnId)) == null ? void 0 : _table$getColumn.getFacetedRowModel()];\n }, facetedRowModel => {\n if (!facetedRowModel) return undefined;\n const uniqueValues = facetedRowModel.flatRows.flatMap(flatRow => {\n var _flatRow$getUniqueVal;\n return (_flatRow$getUniqueVal = flatRow.getUniqueValues(columnId)) != null ? _flatRow$getUniqueVal : [];\n }).map(Number).filter(value => !Number.isNaN(value));\n if (!uniqueValues.length) return;\n let facetedMinValue = uniqueValues[0];\n let facetedMaxValue = uniqueValues[uniqueValues.length - 1];\n for (const value of uniqueValues) {\n if (value < facetedMinValue) facetedMinValue = value;else if (value > facetedMaxValue) facetedMaxValue = value;\n }\n return [facetedMinValue, facetedMaxValue];\n }, getMemoOptions(table.options, 'debugTable', 'getFacetedMinMaxValues'));\n}\n\nfunction filterRows(rows, filterRowImpl, table) {\n if (table.options.filterFromLeafRows) {\n return filterRowModelFromLeafs(rows, filterRowImpl, table);\n }\n return filterRowModelFromRoot(rows, filterRowImpl, table);\n}\nfunction filterRowModelFromLeafs(rowsToFilter, filterRow, table) {\n var _table$options$maxLea;\n const newFilteredFlatRows = [];\n const newFilteredRowsById = {};\n const maxDepth = (_table$options$maxLea = table.options.maxLeafRowFilterDepth) != null ? _table$options$maxLea : 100;\n const recurseFilterRows = function (rowsToFilter, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n const rows = [];\n\n // Filter from children up first\n for (let i = 0; i < rowsToFilter.length; i++) {\n var _row$subRows;\n let row = rowsToFilter[i];\n const newRow = createRow(table, row.id, row.original, row.index, row.depth, undefined, row.parentId);\n newRow.columnFilters = row.columnFilters;\n if ((_row$subRows = row.subRows) != null && _row$subRows.length && depth < maxDepth) {\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n row = newRow;\n if (filterRow(row) && !newRow.subRows.length) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n continue;\n }\n if (filterRow(row) || newRow.subRows.length) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n continue;\n }\n } else {\n row = newRow;\n if (filterRow(row)) {\n rows.push(row);\n newFilteredRowsById[row.id] = row;\n newFilteredFlatRows.push(row);\n }\n }\n }\n return rows;\n };\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById\n };\n}\nfunction filterRowModelFromRoot(rowsToFilter, filterRow, table) {\n var _table$options$maxLea2;\n const newFilteredFlatRows = [];\n const newFilteredRowsById = {};\n const maxDepth = (_table$options$maxLea2 = table.options.maxLeafRowFilterDepth) != null ? _table$options$maxLea2 : 100;\n\n // Filters top level and nested rows\n const recurseFilterRows = function (rowsToFilter, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n // Filter from parents downward first\n\n const rows = [];\n\n // Apply the filter to any subRows\n for (let i = 0; i < rowsToFilter.length; i++) {\n let row = rowsToFilter[i];\n const pass = filterRow(row);\n if (pass) {\n var _row$subRows2;\n if ((_row$subRows2 = row.subRows) != null && _row$subRows2.length && depth < maxDepth) {\n const newRow = createRow(table, row.id, row.original, row.index, row.depth, undefined, row.parentId);\n newRow.subRows = recurseFilterRows(row.subRows, depth + 1);\n row = newRow;\n }\n rows.push(row);\n newFilteredFlatRows.push(row);\n newFilteredRowsById[row.id] = row;\n }\n }\n return rows;\n };\n return {\n rows: recurseFilterRows(rowsToFilter),\n flatRows: newFilteredFlatRows,\n rowsById: newFilteredRowsById\n };\n}\n\nfunction getFacetedRowModel() {\n return (table, columnId) => memo(() => [table.getPreFilteredRowModel(), table.getState().columnFilters, table.getState().globalFilter, table.getFilteredRowModel()], (preRowModel, columnFilters, globalFilter) => {\n if (!preRowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n return preRowModel;\n }\n const filterableIds = [...columnFilters.map(d => d.id).filter(d => d !== columnId), globalFilter ? '__global__' : undefined].filter(Boolean);\n const filterRowsImpl = row => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]] === false) {\n return false;\n }\n }\n return true;\n };\n return filterRows(preRowModel.rows, filterRowsImpl, table);\n }, getMemoOptions(table.options, 'debugTable', 'getFacetedRowModel'));\n}\n\nfunction getFacetedUniqueValues() {\n return (table, columnId) => memo(() => {\n var _table$getColumn;\n return [(_table$getColumn = table.getColumn(columnId)) == null ? void 0 : _table$getColumn.getFacetedRowModel()];\n }, facetedRowModel => {\n if (!facetedRowModel) return new Map();\n let facetedUniqueValues = new Map();\n for (let i = 0; i < facetedRowModel.flatRows.length; i++) {\n const values = facetedRowModel.flatRows[i].getUniqueValues(columnId);\n for (let j = 0; j < values.length; j++) {\n const value = values[j];\n if (facetedUniqueValues.has(value)) {\n var _facetedUniqueValues$;\n facetedUniqueValues.set(value, ((_facetedUniqueValues$ = facetedUniqueValues.get(value)) != null ? _facetedUniqueValues$ : 0) + 1);\n } else {\n facetedUniqueValues.set(value, 1);\n }\n }\n }\n return facetedUniqueValues;\n }, getMemoOptions(table.options, 'debugTable', `getFacetedUniqueValues_${columnId}`));\n}\n\nfunction getFilteredRowModel() {\n return table => memo(() => [table.getPreFilteredRowModel(), table.getState().columnFilters, table.getState().globalFilter], (rowModel, columnFilters, globalFilter) => {\n if (!rowModel.rows.length || !(columnFilters != null && columnFilters.length) && !globalFilter) {\n for (let i = 0; i < rowModel.flatRows.length; i++) {\n rowModel.flatRows[i].columnFilters = {};\n rowModel.flatRows[i].columnFiltersMeta = {};\n }\n return rowModel;\n }\n const resolvedColumnFilters = [];\n const resolvedGlobalFilters = [];\n (columnFilters != null ? columnFilters : []).forEach(d => {\n var _filterFn$resolveFilt;\n const column = table.getColumn(d.id);\n if (!column) {\n return;\n }\n const filterFn = column.getFilterFn();\n if (!filterFn) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`Could not find a valid 'column.filterFn' for column with the ID: ${column.id}.`);\n }\n return;\n }\n resolvedColumnFilters.push({\n id: d.id,\n filterFn,\n resolvedValue: (_filterFn$resolveFilt = filterFn.resolveFilterValue == null ? void 0 : filterFn.resolveFilterValue(d.value)) != null ? _filterFn$resolveFilt : d.value\n });\n });\n const filterableIds = (columnFilters != null ? columnFilters : []).map(d => d.id);\n const globalFilterFn = table.getGlobalFilterFn();\n const globallyFilterableColumns = table.getAllLeafColumns().filter(column => column.getCanGlobalFilter());\n if (globalFilter && globalFilterFn && globallyFilterableColumns.length) {\n filterableIds.push('__global__');\n globallyFilterableColumns.forEach(column => {\n var _globalFilterFn$resol;\n resolvedGlobalFilters.push({\n id: column.id,\n filterFn: globalFilterFn,\n resolvedValue: (_globalFilterFn$resol = globalFilterFn.resolveFilterValue == null ? void 0 : globalFilterFn.resolveFilterValue(globalFilter)) != null ? _globalFilterFn$resol : globalFilter\n });\n });\n }\n let currentColumnFilter;\n let currentGlobalFilter;\n\n // Flag the prefiltered row model with each filter state\n for (let j = 0; j < rowModel.flatRows.length; j++) {\n const row = rowModel.flatRows[j];\n row.columnFilters = {};\n if (resolvedColumnFilters.length) {\n for (let i = 0; i < resolvedColumnFilters.length; i++) {\n currentColumnFilter = resolvedColumnFilters[i];\n const id = currentColumnFilter.id;\n\n // Tag the row with the column filter state\n row.columnFilters[id] = currentColumnFilter.filterFn(row, id, currentColumnFilter.resolvedValue, filterMeta => {\n row.columnFiltersMeta[id] = filterMeta;\n });\n }\n }\n if (resolvedGlobalFilters.length) {\n for (let i = 0; i < resolvedGlobalFilters.length; i++) {\n currentGlobalFilter = resolvedGlobalFilters[i];\n const id = currentGlobalFilter.id;\n // Tag the row with the first truthy global filter state\n if (currentGlobalFilter.filterFn(row, id, currentGlobalFilter.resolvedValue, filterMeta => {\n row.columnFiltersMeta[id] = filterMeta;\n })) {\n row.columnFilters.__global__ = true;\n break;\n }\n }\n if (row.columnFilters.__global__ !== true) {\n row.columnFilters.__global__ = false;\n }\n }\n }\n const filterRowsImpl = row => {\n // Horizontally filter rows through each column\n for (let i = 0; i < filterableIds.length; i++) {\n if (row.columnFilters[filterableIds[i]] === false) {\n return false;\n }\n }\n return true;\n };\n\n // Filter final rows using all of the active filters\n return filterRows(rowModel.rows, filterRowsImpl, table);\n }, getMemoOptions(table.options, 'debugTable', 'getFilteredRowModel', () => table._autoResetPageIndex()));\n}\n\nfunction getGroupedRowModel() {\n return table => memo(() => [table.getState().grouping, table.getPreGroupedRowModel()], (grouping, rowModel) => {\n if (!rowModel.rows.length || !grouping.length) {\n rowModel.rows.forEach(row => {\n row.depth = 0;\n row.parentId = undefined;\n });\n return rowModel;\n }\n\n // Filter the grouping list down to columns that exist\n const existingGrouping = grouping.filter(columnId => table.getColumn(columnId));\n const groupedFlatRows = [];\n const groupedRowsById = {};\n // const onlyGroupedFlatRows: Row[] = [];\n // const onlyGroupedRowsById: Record<RowId, Row> = {};\n // const nonGroupedFlatRows: Row[] = [];\n // const nonGroupedRowsById: Record<RowId, Row> = {};\n\n // Recursively group the data\n const groupUpRecursively = function (rows, depth, parentId) {\n if (depth === void 0) {\n depth = 0;\n }\n // Grouping depth has been been met\n // Stop grouping and simply rewrite thd depth and row relationships\n if (depth >= existingGrouping.length) {\n return rows.map(row => {\n row.depth = depth;\n groupedFlatRows.push(row);\n groupedRowsById[row.id] = row;\n if (row.subRows) {\n row.subRows = groupUpRecursively(row.subRows, depth + 1, row.id);\n }\n return row;\n });\n }\n const columnId = existingGrouping[depth];\n\n // Group the rows together for this level\n const rowGroupsMap = groupBy(rows, columnId);\n\n // Perform aggregations for each group\n const aggregatedGroupedRows = Array.from(rowGroupsMap.entries()).map((_ref, index) => {\n let [groupingValue, groupedRows] = _ref;\n let id = `${columnId}:${groupingValue}`;\n id = parentId ? `${parentId}>${id}` : id;\n\n // First, Recurse to group sub rows before aggregation\n const subRows = groupUpRecursively(groupedRows, depth + 1, id);\n subRows.forEach(subRow => {\n subRow.parentId = id;\n });\n\n // Flatten the leaf rows of the rows in this group\n const leafRows = depth ? flattenBy(groupedRows, row => row.subRows) : groupedRows;\n const row = createRow(table, id, leafRows[0].original, index, depth, undefined, parentId);\n Object.assign(row, {\n groupingColumnId: columnId,\n groupingValue,\n subRows,\n leafRows,\n getValue: columnId => {\n // Don't aggregate columns that are in the grouping\n if (existingGrouping.includes(columnId)) {\n if (row._valuesCache.hasOwnProperty(columnId)) {\n return row._valuesCache[columnId];\n }\n if (groupedRows[0]) {\n var _groupedRows$0$getVal;\n row._valuesCache[columnId] = (_groupedRows$0$getVal = groupedRows[0].getValue(columnId)) != null ? _groupedRows$0$getVal : undefined;\n }\n return row._valuesCache[columnId];\n }\n if (row._groupingValuesCache.hasOwnProperty(columnId)) {\n return row._groupingValuesCache[columnId];\n }\n\n // Aggregate the values\n const column = table.getColumn(columnId);\n const aggregateFn = column == null ? void 0 : column.getAggregationFn();\n if (aggregateFn) {\n row._groupingValuesCache[columnId] = aggregateFn(columnId, leafRows, groupedRows);\n return row._groupingValuesCache[columnId];\n }\n }\n });\n subRows.forEach(subRow => {\n groupedFlatRows.push(subRow);\n groupedRowsById[subRow.id] = subRow;\n // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n });\n return row;\n });\n return aggregatedGroupedRows;\n };\n const groupedRows = groupUpRecursively(rowModel.rows, 0);\n groupedRows.forEach(subRow => {\n groupedFlatRows.push(subRow);\n groupedRowsById[subRow.id] = subRow;\n // if (subRow.getIsGrouped?.()) {\n // onlyGroupedFlatRows.push(subRow);\n // onlyGroupedRowsById[subRow.id] = subRow;\n // } else {\n // nonGroupedFlatRows.push(subRow);\n // nonGroupedRowsById[subRow.id] = subRow;\n // }\n });\n return {\n rows: groupedRows,\n flatRows: groupedFlatRows,\n rowsById: groupedRowsById\n };\n }, getMemoOptions(table.options, 'debugTable', 'getGroupedRowModel', () => {\n table._queue(() => {\n table._autoResetExpanded();\n table._autoResetPageIndex();\n });\n }));\n}\nfunction groupBy(rows, columnId) {\n const groupMap = new Map();\n return rows.reduce((map, row) => {\n const resKey = `${row.getGroupingValue(columnId)}`;\n const previous = map.get(resKey);\n if (!previous) {\n map.set(resKey, [row]);\n } else {\n previous.push(row);\n }\n return map;\n }, groupMap);\n}\n\nfunction getPaginationRowModel(opts) {\n return table => memo(() => [table.getState().pagination, table.getPrePaginationRowModel(), table.options.paginateExpandedRows ? undefined : table.getState().expanded], (pagination, rowModel) => {\n if (!rowModel.rows.length) {\n return rowModel;\n }\n const {\n pageSize,\n pageIndex\n } = pagination;\n let {\n rows,\n flatRows,\n rowsById\n } = rowModel;\n const pageStart = pageSize * pageIndex;\n const pageEnd = pageStart + pageSize;\n rows = rows.slice(pageStart, pageEnd);\n let paginatedRowModel;\n if (!table.options.paginateExpandedRows) {\n paginatedRowModel = expandRows({\n rows,\n flatRows,\n rowsById\n });\n } else {\n paginatedRowModel = {\n rows,\n flatRows,\n rowsById\n };\n }\n paginatedRowModel.flatRows = [];\n const handleRow = row => {\n paginatedRowModel.flatRows.push(row);\n if (row.subRows.length) {\n row.subRows.forEach(handleRow);\n }\n };\n paginatedRowModel.rows.forEach(handleRow);\n return paginatedRowModel;\n }, getMemoOptions(table.options, 'debugTable', 'getPaginationRowModel'));\n}\n\nfunction getSortedRowModel() {\n return table => memo(() => [table.getState().sorting, table.getPreSortedRowModel()], (sorting, rowModel) => {\n if (!rowModel.rows.length || !(sorting != null && sorting.length)) {\n return rowModel;\n }\n const sortingState = table.getState().sorting;\n const sortedFlatRows = [];\n\n // Filter out sortings that correspond to non existing columns\n const availableSorting = sortingState.filter(sort => {\n var _table$getColumn;\n return (_table$getColumn = table.getColumn(sort.id)) == null ? void 0 : _table$getColumn.getCanSort();\n });\n const columnInfoById = {};\n availableSorting.forEach(sortEntry => {\n const column = table.getColumn(sortEntry.id);\n if (!column) return;\n columnInfoById[sortEntry.id] = {\n sortUndefined: column.columnDef.sortUndefined,\n invertSorting: column.columnDef.invertSorting,\n sortingFn: column.getSortingFn()\n };\n });\n const sortData = rows => {\n // This will also perform a stable sorting using the row index\n // if needed.\n const sortedData = rows.map(row => ({\n ...row\n }));\n sortedData.sort((rowA, rowB) => {\n for (let i = 0; i < availableSorting.length; i += 1) {\n var _sortEntry$desc;\n const sortEntry = availableSorting[i];\n const columnInfo = columnInfoById[sortEntry.id];\n const sortUndefined = columnInfo.sortUndefined;\n const isDesc = (_sortEntry$desc = sortEntry == null ? void 0 : sortEntry.desc) != null ? _sortEntry$desc : false;\n let sortInt = 0;\n\n // All sorting ints should always return in ascending order\n if (sortUndefined) {\n const aValue = rowA.getValue(sortEntry.id);\n const bValue = rowB.getValue(sortEntry.id);\n const aUndefined = aValue === undefined;\n const bUndefined = bValue === undefined;\n if (aUndefined || bUndefined) {\n if (sortUndefined === 'first') return aUndefined ? -1 : 1;\n if (sortUndefined === 'last') return aUndefined ? 1 : -1;\n sortInt = aUndefined && bUndefined ? 0 : aUndefined ? sortUndefined : -sortUndefined;\n }\n }\n if (sortInt === 0) {\n sortInt = columnInfo.sortingFn(rowA, rowB, sortEntry.id);\n }\n\n // If sorting is non-zero, take care of desc and inversion\n if (sortInt !== 0) {\n if (isDesc) {\n sortInt *= -1;\n }\n if (columnInfo.invertSorting) {\n sortInt *= -1;\n }\n return sortInt;\n }\n }\n return rowA.index - rowB.index;\n });\n\n // If there are sub-rows, sort them\n sortedData.forEach(row => {\n var _row$subRows;\n sortedFlatRows.push(row);\n if ((_row$subRows = row.subRows) != null && _row$subRows.length) {\n row.subRows = sortData(row.subRows);\n }\n });\n return sortedData;\n };\n return {\n rows: sortData(rowModel.rows),\n flatRows: sortedFlatRows,\n rowsById: rowModel.rowsById\n };\n }, getMemoOptions(table.options, 'debugTable', 'getSortedRowModel', () => table._autoResetPageIndex()));\n}\n\nexport { ColumnFaceting, ColumnFiltering, ColumnGrouping, ColumnOrdering, ColumnPinning, ColumnSizing, ColumnVisibility, GlobalFaceting, GlobalFiltering, Headers, RowExpanding, RowPagination, RowPinning, RowSelection, RowSorting, _getVisibleLeafColumns, aggregationFns, buildHeaderGroups, createCell, createColumn, createColumnHelper, createRow, createTable, defaultColumnSizing, expandRows, filterFns, flattenBy, functionalUpdate, getCoreRowModel, getExpandedRowModel, getFacetedMinMaxValues, getFacetedRowModel, getFacetedUniqueValues, getFilteredRowModel, getGroupedRowModel, getMemoOptions, getPaginationRowModel, getSortedRowModel, isFunction, isNumberArray, isRowSelected, isSubRowSelected, makeStateUpdater, memo, noop, orderColumns, passiveEventSupported, reSplitAlphaNumeric, selectRowsFn, shouldAutoRemoveFilter, sortingFns };\n//# sourceMappingURL=index.mjs.map\n","/**\n * vue-table\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport { createTable } from '@tanstack/table-core';\nexport * from '@tanstack/table-core';\nimport { defineComponent, h, isRef, shallowRef, watch, ref, watchEffect, unref } from 'vue';\n\nfunction trueFn() {\n return true;\n}\nconst $PROXY = Symbol('merge-proxy');\n\n// https://github.com/solidjs/solid/blob/c20ca4fd8c36bc0522fedb2c7f38a110b7ee2663/packages/solid/src/render/component.ts#L51-L118\nconst propTraps = {\n get(_, property, receiver) {\n if (property === $PROXY) return receiver;\n return _.get(property);\n },\n has(_, property) {\n return _.has(property);\n },\n set: trueFn,\n deleteProperty: trueFn,\n getOwnPropertyDescriptor(_, property) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n return _.get(property);\n },\n set: trueFn,\n deleteProperty: trueFn\n };\n },\n ownKeys(_) {\n return _.keys();\n }\n};\nfunction resolveSource(s) {\n return 'value' in s ? s.value : s;\n}\nfunction mergeProxy() {\n for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n return new Proxy({\n get(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n const v = resolveSource(sources[i])[property];\n if (v !== undefined) return v;\n }\n },\n has(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n if (property in resolveSource(sources[i])) return true;\n }\n return false;\n },\n keys() {\n const keys = [];\n for (let i = 0; i < sources.length; i++) keys.push(...Object.keys(resolveSource(sources[i])));\n return [...Array.from(new Set(keys))];\n }\n }, propTraps);\n}\n\nconst FlexRender = defineComponent({\n props: ['render', 'props'],\n setup: props => {\n return () => {\n if (typeof props.render === 'function' || typeof props.render === 'object') {\n return h(props.render, props.props);\n }\n return props.render;\n };\n }\n});\nfunction getOptionsWithReactiveData(options) {\n return mergeProxy(options, {\n data: unref(options.data)\n });\n}\nfunction useVueTable(initialOptions) {\n const IS_REACTIVE = isRef(initialOptions.data);\n const resolvedOptions = mergeProxy({\n state: {},\n // Dummy state\n onStateChange: () => {},\n // noop\n renderFallbackValue: null,\n mergeOptions(defaultOptions, options) {\n return IS_REACTIVE ? {\n ...defaultOptions,\n ...options\n } : mergeProxy(defaultOptions, options);\n }\n }, IS_REACTIVE ? getOptionsWithReactiveData(initialOptions) : initialOptions);\n const table = createTable(resolvedOptions);\n\n // Add reactivity support\n if (IS_REACTIVE) {\n const dataRef = shallowRef(initialOptions.data);\n watch(dataRef, () => {\n table.setState(prev => ({\n ...prev,\n data: dataRef.value\n }));\n }, {\n immediate: true\n });\n }\n\n // can't use `reactive` because update needs to be immutable\n const state = ref(table.initialState);\n watchEffect(() => {\n table.setOptions(prev => {\n var _initialOptions$state;\n const stateProxy = new Proxy({}, {\n get: (_, prop) => state.value[prop]\n });\n return mergeProxy(prev, IS_REACTIVE ? getOptionsWithReactiveData(initialOptions) : initialOptions, {\n // merge the initialState and `options.state`\n // create a new proxy on each `setOptions` call\n // and get the value from state on each property access\n state: mergeProxy(stateProxy, (_initialOptions$state = initialOptions.state) != null ? _initialOptions$state : {}),\n // Similarly, we'll maintain both our internal state and any user-provided\n // state.\n onStateChange: updater => {\n if (updater instanceof Function) {\n state.value = updater(state.value);\n } else {\n state.value = updater;\n }\n initialOptions.onStateChange == null || initialOptions.onStateChange(updater);\n }\n });\n });\n });\n return table;\n}\n\nexport { FlexRender, useVueTable };\n//# sourceMappingURL=index.mjs.map\n","function memo(getDeps, fn, opts) {\n let deps = opts.initialDeps ?? [];\n let result;\n let isInitial = true;\n function memoizedFunction() {\n var _a, _b, _c;\n let depTime;\n if (opts.key && ((_a = opts.debug) == null ? void 0 : _a.call(opts))) depTime = Date.now();\n const newDeps = getDeps();\n const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n let resultTime;\n if (opts.key && ((_b = opts.debug) == null ? void 0 : _b.call(opts))) resultTime = Date.now();\n result = fn(...newDeps);\n if (opts.key && ((_c = opts.debug) == null ? void 0 : _c.call(opts))) {\n const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n const resultFpsPercentage = resultEndTime / 16;\n const pad = (str, num) => {\n str = String(str);\n while (str.length < num) {\n str = \" \" + str;\n }\n return str;\n };\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120)\n )}deg 100% 31%);`,\n opts == null ? void 0 : opts.key\n );\n }\n if ((opts == null ? void 0 : opts.onChange) && !(isInitial && opts.skipInitialOnChange)) {\n opts.onChange(result);\n }\n isInitial = false;\n return result;\n }\n memoizedFunction.updateDeps = (newDeps) => {\n deps = newDeps;\n };\n return memoizedFunction;\n}\nfunction notUndefined(value, msg) {\n if (value === void 0) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : \"\"}`);\n } else {\n return value;\n }\n}\nconst approxEqual = (a, b) => Math.abs(a - b) < 1.01;\nconst debounce = (targetWindow, fn, ms) => {\n let timeoutId;\n return function(...args) {\n targetWindow.clearTimeout(timeoutId);\n timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms);\n };\n};\nexport {\n approxEqual,\n debounce,\n memo,\n notUndefined\n};\n//# sourceMappingURL=utils.js.map\n","import { debounce, memo, notUndefined, approxEqual } from \"./utils.js\";\nconst getRect = (element) => {\n const { offsetWidth, offsetHeight } = element;\n return { width: offsetWidth, height: offsetHeight };\n};\nconst defaultKeyExtractor = (index) => index;\nconst defaultRangeExtractor = (range) => {\n const start = Math.max(range.startIndex - range.overscan, 0);\n const end = Math.min(range.endIndex + range.overscan, range.count - 1);\n const arr = [];\n for (let i = start; i <= end; i++) {\n arr.push(i);\n }\n return arr;\n};\nconst observeElementRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n const handler = (rect) => {\n const { width, height } = rect;\n cb({ width: Math.round(width), height: Math.round(height) });\n };\n handler(getRect(element));\n if (!targetWindow.ResizeObserver) {\n return () => {\n };\n }\n const observer = new targetWindow.ResizeObserver((entries) => {\n const run = () => {\n const entry = entries[0];\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize });\n return;\n }\n }\n handler(getRect(element));\n };\n instance.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();\n });\n observer.observe(element, { box: \"border-box\" });\n return () => {\n observer.unobserve(element);\n };\n};\nconst addEventListenerOptions = {\n passive: true\n};\nconst observeWindowRect = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight });\n };\n handler();\n element.addEventListener(\"resize\", handler, addEventListenerOptions);\n return () => {\n element.removeEventListener(\"resize\", handler);\n };\n};\nconst supportsScrollend = typeof window == \"undefined\" ? true : \"onscrollend\" in window;\nconst observeElementOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n const { horizontal, isRtl } = instance.options;\n offset = horizontal ? element[\"scrollLeft\"] * (isRtl && -1 || 1) : element[\"scrollTop\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n };\n};\nconst observeWindowOffset = (instance, cb) => {\n const element = instance.scrollElement;\n if (!element) {\n return;\n }\n const targetWindow = instance.targetWindow;\n if (!targetWindow) {\n return;\n }\n let offset = 0;\n const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(\n targetWindow,\n () => {\n cb(offset, false);\n },\n instance.options.isScrollingResetDelay\n );\n const createHandler = (isScrolling) => () => {\n offset = element[instance.options.horizontal ? \"scrollX\" : \"scrollY\"];\n fallback();\n cb(offset, isScrolling);\n };\n const handler = createHandler(true);\n const endHandler = createHandler(false);\n element.addEventListener(\"scroll\", handler, addEventListenerOptions);\n const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;\n if (registerScrollendEvent) {\n element.addEventListener(\"scrollend\", endHandler, addEventListenerOptions);\n }\n return () => {\n element.removeEventListener(\"scroll\", handler);\n if (registerScrollendEvent) {\n element.removeEventListener(\"scrollend\", endHandler);\n }\n };\n};\nconst measureElement = (element, entry, instance) => {\n if (entry == null ? void 0 : entry.borderBoxSize) {\n const box = entry.borderBoxSize[0];\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? \"inlineSize\" : \"blockSize\"]\n );\n return size;\n }\n }\n return element[instance.options.horizontal ? \"offsetWidth\" : \"offsetHeight\"];\n};\nconst windowScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nconst elementScroll = (offset, {\n adjustments = 0,\n behavior\n}, instance) => {\n var _a, _b;\n const toOffset = offset + adjustments;\n (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {\n [instance.options.horizontal ? \"left\" : \"top\"]: toOffset,\n behavior\n });\n};\nclass Virtualizer {\n constructor(opts) {\n this.unsubs = [];\n this.scrollElement = null;\n this.targetWindow = null;\n this.isScrolling = false;\n this.currentScrollToIndex = null;\n this.measurementsCache = [];\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.pendingMeasuredCacheIndexes = [];\n this.prevLanes = void 0;\n this.lanesChangedFlag = false;\n this.lanesSettling = false;\n this.scrollRect = null;\n this.scrollOffset = null;\n this.scrollDirection = null;\n this.scrollAdjustments = 0;\n this.elementsCache = /* @__PURE__ */ new Map();\n this.observer = /* @__PURE__ */ (() => {\n let _ro = null;\n const get = () => {\n if (_ro) {\n return _ro;\n }\n if (!this.targetWindow || !this.targetWindow.ResizeObserver) {\n return null;\n }\n return _ro = new this.targetWindow.ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const run = () => {\n this._measureElement(entry.target, entry);\n };\n this.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();\n });\n });\n };\n return {\n disconnect: () => {\n var _a;\n (_a = get()) == null ? void 0 : _a.disconnect();\n _ro = null;\n },\n observe: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.observe(target, { box: \"border-box\" });\n },\n unobserve: (target) => {\n var _a;\n return (_a = get()) == null ? void 0 : _a.unobserve(target);\n }\n };\n })();\n this.range = null;\n this.setOptions = (opts2) => {\n Object.entries(opts2).forEach(([key, value]) => {\n if (typeof value === \"undefined\") delete opts2[key];\n });\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {\n },\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n gap: 0,\n indexAttribute: \"data-index\",\n initialMeasurementsCache: [],\n lanes: 1,\n isScrollingResetDelay: 150,\n enabled: true,\n isRtl: false,\n useScrollendEvent: false,\n useAnimationFrameWithResizeObserver: false,\n ...opts2\n };\n };\n this.notify = (sync) => {\n var _a, _b;\n (_b = (_a = this.options).onChange) == null ? void 0 : _b.call(_a, this, sync);\n };\n this.maybeNotify = memo(\n () => {\n this.calculateRange();\n return [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ];\n },\n (isScrolling) => {\n this.notify(isScrolling);\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"maybeNotify\",\n debug: () => this.options.debug,\n initialDeps: [\n this.isScrolling,\n this.range ? this.range.startIndex : null,\n this.range ? this.range.endIndex : null\n ]\n }\n );\n this.cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d());\n this.unsubs = [];\n this.observer.disconnect();\n this.scrollElement = null;\n this.targetWindow = null;\n };\n this._didMount = () => {\n return () => {\n this.cleanup();\n };\n };\n this._willUpdate = () => {\n var _a;\n const scrollElement = this.options.enabled ? this.options.getScrollElement() : null;\n if (this.scrollElement !== scrollElement) {\n this.cleanup();\n if (!scrollElement) {\n this.maybeNotify();\n return;\n }\n this.scrollElement = scrollElement;\n if (this.scrollElement && \"ownerDocument\" in this.scrollElement) {\n this.targetWindow = this.scrollElement.ownerDocument.defaultView;\n } else {\n this.targetWindow = ((_a = this.scrollElement) == null ? void 0 : _a.window) ?? null;\n }\n this.elementsCache.forEach((cached) => {\n this.observer.observe(cached);\n });\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n this.scrollRect = rect;\n this.maybeNotify();\n })\n );\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset, isScrolling) => {\n this.scrollAdjustments = 0;\n this.scrollDirection = isScrolling ? this.getScrollOffset() < offset ? \"forward\" : \"backward\" : null;\n this.scrollOffset = offset;\n this.isScrolling = isScrolling;\n this.maybeNotify();\n })\n );\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: void 0,\n behavior: void 0\n });\n }\n };\n this.getSize = () => {\n if (!this.options.enabled) {\n this.scrollRect = null;\n return 0;\n }\n this.scrollRect = this.scrollRect ?? this.options.initialRect;\n return this.scrollRect[this.options.horizontal ? \"width\" : \"height\"];\n };\n this.getScrollOffset = () => {\n if (!this.options.enabled) {\n this.scrollOffset = null;\n return 0;\n }\n this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset === \"function\" ? this.options.initialOffset() : this.options.initialOffset);\n return this.scrollOffset;\n };\n this.getFurthestMeasurement = (measurements, index) => {\n const furthestMeasurementsFound = /* @__PURE__ */ new Map();\n const furthestMeasurements = /* @__PURE__ */ new Map();\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m];\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue;\n }\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane\n );\n if (previousFurthestMeasurement == null || measurement.end > previousFurthestMeasurement.end) {\n furthestMeasurements.set(measurement.lane, measurement);\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true);\n }\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break;\n }\n }\n return furthestMeasurements.size === this.options.lanes ? Array.from(furthestMeasurements.values()).sort((a, b) => {\n if (a.end === b.end) {\n return a.index - b.index;\n }\n return a.end - b.end;\n })[0] : void 0;\n };\n this.getMeasurementOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n this.options.enabled,\n this.options.lanes\n ],\n (count, paddingStart, scrollMargin, getItemKey, enabled, lanes) => {\n const lanesChanged = this.prevLanes !== void 0 && this.prevLanes !== lanes;\n if (lanesChanged) {\n this.lanesChangedFlag = true;\n }\n this.prevLanes = lanes;\n this.pendingMeasuredCacheIndexes = [];\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n enabled,\n lanes\n };\n },\n {\n key: false\n }\n );\n this.getMeasurements = memo(\n () => [this.getMeasurementOptions(), this.itemSizeCache],\n ({ count, paddingStart, scrollMargin, getItemKey, enabled, lanes }, itemSizeCache) => {\n if (!enabled) {\n this.measurementsCache = [];\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n return [];\n }\n if (this.laneAssignments.size > count) {\n for (const index of this.laneAssignments.keys()) {\n if (index >= count) {\n this.laneAssignments.delete(index);\n }\n }\n }\n if (this.lanesChangedFlag) {\n this.lanesChangedFlag = false;\n this.lanesSettling = true;\n this.measurementsCache = [];\n this.itemSizeCache.clear();\n this.laneAssignments.clear();\n this.pendingMeasuredCacheIndexes = [];\n }\n if (this.measurementsCache.length === 0 && !this.lanesSettling) {\n this.measurementsCache = this.options.initialMeasurementsCache;\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size);\n });\n }\n const min = this.lanesSettling ? 0 : this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;\n this.pendingMeasuredCacheIndexes = [];\n if (this.lanesSettling && this.measurementsCache.length === count) {\n this.lanesSettling = false;\n }\n const measurements = this.measurementsCache.slice(0, min);\n const laneLastIndex = new Array(lanes).fill(\n void 0\n );\n for (let m = 0; m < min; m++) {\n const item = measurements[m];\n if (item) {\n laneLastIndex[item.lane] = m;\n }\n }\n for (let i = min; i < count; i++) {\n const key = getItemKey(i);\n const cachedLane = this.laneAssignments.get(i);\n let lane;\n let start;\n if (cachedLane !== void 0 && this.options.lanes > 1) {\n lane = cachedLane;\n const prevIndex = laneLastIndex[lane];\n const prevInLane = prevIndex !== void 0 ? measurements[prevIndex] : void 0;\n start = prevInLane ? prevInLane.end + this.options.gap : paddingStart + scrollMargin;\n } else {\n const furthestMeasurement = this.options.lanes === 1 ? measurements[i - 1] : this.getFurthestMeasurement(measurements, i);\n start = furthestMeasurement ? furthestMeasurement.end + this.options.gap : paddingStart + scrollMargin;\n lane = furthestMeasurement ? furthestMeasurement.lane : i % this.options.lanes;\n if (this.options.lanes > 1) {\n this.laneAssignments.set(i, lane);\n }\n }\n const measuredSize = itemSizeCache.get(key);\n const size = typeof measuredSize === \"number\" ? measuredSize : this.options.estimateSize(i);\n const end = start + size;\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane\n };\n laneLastIndex[lane] = i;\n }\n this.measurementsCache = measurements;\n return measurements;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getMeasurements\",\n debug: () => this.options.debug\n }\n );\n this.calculateRange = memo(\n () => [\n this.getMeasurements(),\n this.getSize(),\n this.getScrollOffset(),\n this.options.lanes\n ],\n (measurements, outerSize, scrollOffset, lanes) => {\n return this.range = measurements.length > 0 && outerSize > 0 ? calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes\n }) : null;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"calculateRange\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualIndexes = memo(\n () => {\n let startIndex = null;\n let endIndex = null;\n const range = this.calculateRange();\n if (range) {\n startIndex = range.startIndex;\n endIndex = range.endIndex;\n }\n this.maybeNotify.updateDeps([this.isScrolling, startIndex, endIndex]);\n return [\n this.options.rangeExtractor,\n this.options.overscan,\n this.options.count,\n startIndex,\n endIndex\n ];\n },\n (rangeExtractor, overscan, count, startIndex, endIndex) => {\n return startIndex === null || endIndex === null ? [] : rangeExtractor({\n startIndex,\n endIndex,\n overscan,\n count\n });\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualIndexes\",\n debug: () => this.options.debug\n }\n );\n this.indexFromElement = (node) => {\n const attributeName = this.options.indexAttribute;\n const indexStr = node.getAttribute(attributeName);\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`\n );\n return -1;\n }\n return parseInt(indexStr, 10);\n };\n this._measureElement = (node, entry) => {\n const index = this.indexFromElement(node);\n const item = this.measurementsCache[index];\n if (!item) {\n return;\n }\n const key = item.key;\n const prevNode = this.elementsCache.get(key);\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode);\n }\n this.observer.observe(node);\n this.elementsCache.set(key, node);\n }\n if (node.isConnected) {\n this.resizeItem(index, this.options.measureElement(node, entry, this));\n }\n };\n this.resizeItem = (index, size) => {\n const item = this.measurementsCache[index];\n if (!item) {\n return;\n }\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size;\n const delta = size - itemSize;\n if (delta !== 0) {\n if (this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(item, delta, this) : item.start < this.getScrollOffset() + this.scrollAdjustments) {\n if (process.env.NODE_ENV !== \"production\" && this.options.debug) {\n console.info(\"correction\", delta);\n }\n this._scrollToOffset(this.getScrollOffset(), {\n adjustments: this.scrollAdjustments += delta,\n behavior: void 0\n });\n }\n this.pendingMeasuredCacheIndexes.push(item.index);\n this.itemSizeCache = new Map(this.itemSizeCache.set(item.key, size));\n this.notify(false);\n }\n };\n this.measureElement = (node) => {\n if (!node) {\n this.elementsCache.forEach((cached, key) => {\n if (!cached.isConnected) {\n this.observer.unobserve(cached);\n this.elementsCache.delete(key);\n }\n });\n return;\n }\n this._measureElement(node, void 0);\n };\n this.getVirtualItems = memo(\n () => [this.getVirtualIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems = [];\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k];\n const measurement = measurements[i];\n virtualItems.push(measurement);\n }\n return virtualItems;\n },\n {\n key: process.env.NODE_ENV !== \"production\" && \"getVirtualItems\",\n debug: () => this.options.debug\n }\n );\n this.getVirtualItemForOffset = (offset) => {\n const measurements = this.getMeasurements();\n if (measurements.length === 0) {\n return void 0;\n }\n return notUndefined(\n measurements[findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index) => notUndefined(measurements[index]).start,\n offset\n )]\n );\n };\n this.getMaxScrollOffset = () => {\n if (!this.scrollElement) return 0;\n if (\"scrollHeight\" in this.scrollElement) {\n return this.options.horizontal ? this.scrollElement.scrollWidth - this.scrollElement.clientWidth : this.scrollElement.scrollHeight - this.scrollElement.clientHeight;\n } else {\n const doc = this.scrollElement.document.documentElement;\n return this.options.horizontal ? doc.scrollWidth - this.scrollElement.innerWidth : doc.scrollHeight - this.scrollElement.innerHeight;\n }\n };\n this.getOffsetForAlignment = (toOffset, align, itemSize = 0) => {\n if (!this.scrollElement) return 0;\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n if (align === \"auto\") {\n align = toOffset >= scrollOffset + size ? \"end\" : \"start\";\n }\n if (align === \"center\") {\n toOffset += (itemSize - size) / 2;\n } else if (align === \"end\") {\n toOffset -= size;\n }\n const maxOffset = this.getMaxScrollOffset();\n return Math.max(Math.min(maxOffset, toOffset), 0);\n };\n this.getOffsetForIndex = (index, align = \"auto\") => {\n index = Math.max(0, Math.min(index, this.options.count - 1));\n const item = this.measurementsCache[index];\n if (!item) {\n return void 0;\n }\n const size = this.getSize();\n const scrollOffset = this.getScrollOffset();\n if (align === \"auto\") {\n if (item.end >= scrollOffset + size - this.options.scrollPaddingEnd) {\n align = \"end\";\n } else if (item.start <= scrollOffset + this.options.scrollPaddingStart) {\n align = \"start\";\n } else {\n return [scrollOffset, align];\n }\n }\n if (align === \"end\" && index === this.options.count - 1) {\n return [this.getMaxScrollOffset(), align];\n }\n const toOffset = align === \"end\" ? item.end + this.options.scrollPaddingEnd : item.start - this.options.scrollPaddingStart;\n return [\n this.getOffsetForAlignment(toOffset, align, item.size),\n align\n ];\n };\n this.isDynamicMode = () => this.elementsCache.size > 0;\n this.scrollToOffset = (toOffset, { align = \"start\", behavior } = {}) => {\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: void 0,\n behavior\n });\n };\n this.scrollToIndex = (index, { align: initialAlign = \"auto\", behavior } = {}) => {\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n index = Math.max(0, Math.min(index, this.options.count - 1));\n this.currentScrollToIndex = index;\n let attempts = 0;\n const maxAttempts = 10;\n const tryScroll = (currentAlign) => {\n if (!this.targetWindow) return;\n const offsetInfo = this.getOffsetForIndex(index, currentAlign);\n if (!offsetInfo) {\n console.warn(\"Failed to get offset for index:\", index);\n return;\n }\n const [offset, align] = offsetInfo;\n this._scrollToOffset(offset, { adjustments: void 0, behavior });\n this.targetWindow.requestAnimationFrame(() => {\n if (!this.targetWindow) return;\n const verify = () => {\n if (this.currentScrollToIndex !== index) return;\n const currentOffset = this.getScrollOffset();\n const afterInfo = this.getOffsetForIndex(index, align);\n if (!afterInfo) {\n console.warn(\"Failed to get offset for index:\", index);\n return;\n }\n if (!approxEqual(afterInfo[0], currentOffset)) {\n scheduleRetry(align);\n }\n };\n if (this.isDynamicMode()) {\n this.targetWindow.requestAnimationFrame(verify);\n } else {\n verify();\n }\n });\n };\n const scheduleRetry = (align) => {\n if (!this.targetWindow) return;\n if (this.currentScrollToIndex !== index) return;\n attempts++;\n if (attempts < maxAttempts) {\n if (process.env.NODE_ENV !== \"production\" && this.options.debug) {\n console.info(\"Schedule retry\", attempts, maxAttempts);\n }\n this.targetWindow.requestAnimationFrame(() => tryScroll(align));\n } else {\n console.warn(\n `Failed to scroll to index ${index} after ${maxAttempts} attempts.`\n );\n }\n };\n tryScroll(initialAlign);\n };\n this.scrollBy = (delta, { behavior } = {}) => {\n if (behavior === \"smooth\" && this.isDynamicMode()) {\n console.warn(\n \"The `smooth` scroll behavior is not fully supported with dynamic size.\"\n );\n }\n this._scrollToOffset(this.getScrollOffset() + delta, {\n adjustments: void 0,\n behavior\n });\n };\n this.getTotalSize = () => {\n var _a;\n const measurements = this.getMeasurements();\n let end;\n if (measurements.length === 0) {\n end = this.options.paddingStart;\n } else if (this.options.lanes === 1) {\n end = ((_a = measurements[measurements.length - 1]) == null ? void 0 : _a.end) ?? 0;\n } else {\n const endByLane = Array(this.options.lanes).fill(null);\n let endIndex = measurements.length - 1;\n while (endIndex >= 0 && endByLane.some((val) => val === null)) {\n const item = measurements[endIndex];\n if (endByLane[item.lane] === null) {\n endByLane[item.lane] = item.end;\n }\n endIndex--;\n }\n end = Math.max(...endByLane.filter((val) => val !== null));\n }\n return Math.max(\n end - this.options.scrollMargin + this.options.paddingEnd,\n 0\n );\n };\n this._scrollToOffset = (offset, {\n adjustments,\n behavior\n }) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this);\n };\n this.measure = () => {\n this.itemSizeCache = /* @__PURE__ */ new Map();\n this.laneAssignments = /* @__PURE__ */ new Map();\n this.notify(false);\n };\n this.setOptions(opts);\n }\n}\nconst findNearestBinarySearch = (low, high, getCurrentValue, value) => {\n while (low <= high) {\n const middle = (low + high) / 2 | 0;\n const currentValue = getCurrentValue(middle);\n if (currentValue < value) {\n low = middle + 1;\n } else if (currentValue > value) {\n high = middle - 1;\n } else {\n return middle;\n }\n }\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n lanes\n}) {\n const lastIndex = measurements.length - 1;\n const getOffset = (index) => measurements[index].start;\n if (measurements.length <= lanes) {\n return {\n startIndex: 0,\n endIndex: lastIndex\n };\n }\n let startIndex = findNearestBinarySearch(\n 0,\n lastIndex,\n getOffset,\n scrollOffset\n );\n let endIndex = startIndex;\n if (lanes === 1) {\n while (endIndex < lastIndex && measurements[endIndex].end < scrollOffset + outerSize) {\n endIndex++;\n }\n } else if (lanes > 1) {\n const endPerLane = Array(lanes).fill(0);\n while (endIndex < lastIndex && endPerLane.some((pos) => pos < scrollOffset + outerSize)) {\n const item = measurements[endIndex];\n endPerLane[item.lane] = item.end;\n endIndex++;\n }\n const startPerLane = Array(lanes).fill(scrollOffset + outerSize);\n while (startIndex >= 0 && startPerLane.some((pos) => pos >= scrollOffset)) {\n const item = measurements[startIndex];\n startPerLane[item.lane] = item.start;\n startIndex--;\n }\n startIndex = Math.max(0, startIndex - startIndex % lanes);\n endIndex = Math.min(lastIndex, endIndex + (lanes - 1 - endIndex % lanes));\n }\n return { startIndex, endIndex };\n}\nexport {\n Virtualizer,\n approxEqual,\n debounce,\n defaultKeyExtractor,\n defaultRangeExtractor,\n elementScroll,\n measureElement,\n memo,\n notUndefined,\n observeElementOffset,\n observeElementRect,\n observeWindowOffset,\n observeWindowRect,\n windowScroll\n};\n//# sourceMappingURL=index.js.map\n","import { elementScroll, observeElementOffset, observeElementRect, windowScroll, observeWindowOffset, observeWindowRect, Virtualizer } from \"@tanstack/virtual-core\";\nexport * from \"@tanstack/virtual-core\";\nimport { computed, unref, shallowRef, watch, triggerRef, onScopeDispose } from \"vue\";\nfunction useVirtualizerBase(options) {\n const virtualizer = new Virtualizer(unref(options));\n const state = shallowRef(virtualizer);\n const cleanup = virtualizer._didMount();\n watch(\n () => unref(options).getScrollElement(),\n (el) => {\n if (el) {\n virtualizer._willUpdate();\n }\n },\n {\n immediate: true\n }\n );\n watch(\n () => unref(options),\n (options2) => {\n virtualizer.setOptions({\n ...options2,\n onChange: (instance, sync) => {\n var _a;\n triggerRef(state);\n (_a = options2.onChange) == null ? void 0 : _a.call(options2, instance, sync);\n }\n });\n virtualizer._willUpdate();\n triggerRef(state);\n },\n {\n immediate: true\n }\n );\n onScopeDispose(cleanup);\n return state;\n}\nfunction useVirtualizer(options) {\n return useVirtualizerBase(\n computed(() => ({\n observeElementRect,\n observeElementOffset,\n scrollToFn: elementScroll,\n ...unref(options)\n }))\n );\n}\nfunction useWindowVirtualizer(options) {\n return useVirtualizerBase(\n computed(() => ({\n getScrollElement: () => typeof document !== \"undefined\" ? window : null,\n observeElementRect: observeWindowRect,\n observeElementOffset: observeWindowOffset,\n scrollToFn: windowScroll,\n initialOffset: () => typeof document !== \"undefined\" ? window.scrollY : 0,\n ...unref(options)\n }))\n );\n}\nexport {\n useVirtualizer,\n useWindowVirtualizer\n};\n//# sourceMappingURL=index.js.map\n","function serialize(o){return typeof o==\"string\"?`'${o}'`:new c().serialize(o)}const c=/*@__PURE__*/function(){class o{#t=new Map;compare(t,r){const e=typeof t,n=typeof r;return e===\"string\"&&n===\"string\"?t.localeCompare(r):e===\"number\"&&n===\"number\"?t-r:String.prototype.localeCompare.call(this.serialize(t,true),this.serialize(r,true))}serialize(t,r){if(t===null)return \"null\";switch(typeof t){case \"string\":return r?t:`'${t}'`;case \"bigint\":return `${t}n`;case \"object\":return this.$object(t);case \"function\":return this.$function(t)}return String(t)}serializeObject(t){const r=Object.prototype.toString.call(t);if(r!==\"[object Object]\")return this.serializeBuiltInType(r.length<10?`unknown:${r}`:r.slice(8,-1),t);const e=t.constructor,n=e===Object||e===void 0?\"\":e.name;if(n!==\"\"&&globalThis[n]===e)return this.serializeBuiltInType(n,t);if(typeof t.toJSON==\"function\"){const i=t.toJSON();return n+(i!==null&&typeof i==\"object\"?this.$object(i):`(${this.serialize(i)})`)}return this.serializeObjectEntries(n,Object.entries(t))}serializeBuiltInType(t,r){const e=this[\"$\"+t];if(e)return e.call(this,r);if(typeof r?.entries==\"function\")return this.serializeObjectEntries(t,r.entries());throw new Error(`Cannot serialize ${t}`)}serializeObjectEntries(t,r){const e=Array.from(r).sort((i,a)=>this.compare(i[0],a[0]));let n=`${t}{`;for(let i=0;i<e.length;i++){const[a,l]=e[i];n+=`${this.serialize(a,true)}:${this.serialize(l)}`,i<e.length-1&&(n+=\",\");}return n+\"}\"}$object(t){let r=this.#t.get(t);return r===void 0&&(this.#t.set(t,`#${this.#t.size}`),r=this.serializeObject(t),this.#t.set(t,r)),r}$function(t){const r=Function.prototype.toString.call(t);return r.slice(-15)===\"[native code] }\"?`${t.name||\"\"}()[native]`:`${t.name}(${t.length})${r.replace(/\\s*\\n\\s*/g,\"\")}`}$Array(t){let r=\"[\";for(let e=0;e<t.length;e++)r+=this.serialize(t[e]),e<t.length-1&&(r+=\",\");return r+\"]\"}$Date(t){try{return `Date(${t.toISOString()})`}catch{return \"Date(null)\"}}$ArrayBuffer(t){return `ArrayBuffer[${new Uint8Array(t).join(\",\")}]`}$Set(t){return `Set${this.$Array(Array.from(t).sort((r,e)=>this.compare(r,e)))}`}$Map(t){return this.serializeObjectEntries(\"Map\",t.entries())}}for(const s of [\"Error\",\"RegExp\",\"URL\"])o.prototype[\"$\"+s]=function(t){return `${s}(${t})`};for(const s of [\"Int8Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"Int16Array\",\"Uint16Array\",\"Int32Array\",\"Uint32Array\",\"Float32Array\",\"Float64Array\"])o.prototype[\"$\"+s]=function(t){return `${s}[${t.join(\",\")}]`};for(const s of [\"BigInt64Array\",\"BigUint64Array\"])o.prototype[\"$\"+s]=function(t){return `${s}[${t.join(\"n,\")}${t.length>0?\"n\":\"\"}]`};return o}();\n\nfunction isEqual(object1, object2) {\n if (object1 === object2) {\n return true;\n }\n if (serialize(object1) === serialize(object2)) {\n return true;\n }\n return false;\n}\n\nexport { isEqual as i, serialize as s };\n","const z=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],R=[1116352408,1899447441,-1245643825,-373957723,961987163,1508970993,-1841331548,-1424204075,-670586216,310598401,607225278,1426881987,1925078388,-2132889090,-1680079193,-1046744716,-459576895,-272742522,264347078,604807628,770255983,1249150122,1555081692,1996064986,-1740746414,-1473132947,-1341970488,-1084653625,-958395405,-710438585,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,-2117940946,-1838011259,-1564481375,-1474664885,-1035236496,-949202525,-778901479,-694614492,-200395387,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,-2067236844,-1933114872,-1866530822,-1538233109,-1090935817,-965641998],S=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\",r=[];class k{_data=new l;_hash=new l([...z]);_nDataBytes=0;_minBufferSize=0;finalize(e){e&&this._append(e);const s=this._nDataBytes*8,t=this._data.sigBytes*8;return this._data.words[t>>>5]|=128<<24-t%32,this._data.words[(t+64>>>9<<4)+14]=Math.floor(s/4294967296),this._data.words[(t+64>>>9<<4)+15]=s,this._data.sigBytes=this._data.words.length*4,this._process(),this._hash}_doProcessBlock(e,s){const t=this._hash.words;let i=t[0],o=t[1],a=t[2],c=t[3],h=t[4],g=t[5],f=t[6],y=t[7];for(let n=0;n<64;n++){if(n<16)r[n]=e[s+n]|0;else {const d=r[n-15],j=(d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3,B=r[n-2],x=(B<<15|B>>>17)^(B<<13|B>>>19)^B>>>10;r[n]=j+r[n-7]+x+r[n-16];}const m=h&g^~h&f,p=i&o^i&a^o&a,u=(i<<30|i>>>2)^(i<<19|i>>>13)^(i<<10|i>>>22),b=(h<<26|h>>>6)^(h<<21|h>>>11)^(h<<7|h>>>25),w=y+b+m+R[n]+r[n],M=u+p;y=f,f=g,g=h,h=c+w|0,c=a,a=o,o=i,i=w+M|0;}t[0]=t[0]+i|0,t[1]=t[1]+o|0,t[2]=t[2]+a|0,t[3]=t[3]+c|0,t[4]=t[4]+h|0,t[5]=t[5]+g|0,t[6]=t[6]+f|0,t[7]=t[7]+y|0;}_append(e){typeof e==\"string\"&&(e=l.fromUtf8(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes;}_process(e){let s,t=this._data.sigBytes/64;e?t=Math.ceil(t):t=Math.max((t|0)-this._minBufferSize,0);const i=t*16,o=Math.min(i*4,this._data.sigBytes);if(i){for(let a=0;a<i;a+=16)this._doProcessBlock(this._data.words,a);s=this._data.words.splice(0,i),this._data.sigBytes-=o;}return new l(s,o)}}class l{words;sigBytes;constructor(e,s){e=this.words=e||[],this.sigBytes=s===void 0?e.length*4:s;}static fromUtf8(e){const s=unescape(encodeURIComponent(e)),t=s.length,i=[];for(let o=0;o<t;o++)i[o>>>2]|=(s.charCodeAt(o)&255)<<24-o%4*8;return new l(i,t)}toBase64(){const e=[];for(let s=0;s<this.sigBytes;s+=3){const t=this.words[s>>>2]>>>24-s%4*8&255,i=this.words[s+1>>>2]>>>24-(s+1)%4*8&255,o=this.words[s+2>>>2]>>>24-(s+2)%4*8&255,a=t<<16|i<<8|o;for(let c=0;c<4&&s*8+c*6<this.sigBytes*8;c++)e.push(S.charAt(a>>>6*(3-c)&63));}return e.join(\"\")}concat(e){if(this.words[this.sigBytes>>>2]&=4294967295<<32-this.sigBytes%4*8,this.words.length=Math.ceil(this.sigBytes/4),this.sigBytes%4)for(let s=0;s<e.sigBytes;s++){const t=e.words[s>>>2]>>>24-s%4*8&255;this.words[this.sigBytes+s>>>2]|=t<<24-(this.sigBytes+s)%4*8;}else for(let s=0;s<e.sigBytes;s+=4)this.words[this.sigBytes+s>>>2]=e.words[s>>>2];this.sigBytes+=e.sigBytes;}}function digest(_){return new k().finalize(_).toBase64()}\n\nexport { digest };\n","import { s as serialize } from './shared/ohash.D__AXeF1.mjs';\nexport { i as isEqual } from './shared/ohash.D__AXeF1.mjs';\nimport { digest } from 'ohash/crypto';\nexport { digest } from 'ohash/crypto';\n\nfunction hash(input) {\n return digest(serialize(input));\n}\n\nexport { hash, serialize };\n","<template>\n <button type=\"button\" :class=\"classNames\" @click=\"onClick\" />\n</template>\n\n<script setup lang=\"ts\">\nimport type { VTableExpandIconProps } from '../interface'\n\ndefineOptions({ name: 'ExpandIcon' })\n\nconst props = defineProps<VTableExpandIconProps>()\n\nconst classNames = computed(() => {\n return {\n [`row-expand-icon`]: true,\n [`row-expand-icon-expanded`]: props.expand,\n [`row-expand-icon-collapsed`]: !props.expand,\n }\n})\n\nconst onClick = (e: MouseEvent) => {\n e.stopPropagation()\n if (!props.onExpandChange) return\n props.onExpandChange?.()\n}\n</script>\n\n<style lang=\"less\" scoped>\n// 变量定义\n@line-width: 1px;\n@checkbox-size: 16px;\n@line-type: solid;\n@table-border-color: #f0f0f0;\n@padding-xxs: 4px;\n@border-radius: 2px;\n@motion-duration-slow: 0.3s;\n@table-expand-icon-bg: #fff;\n\n// 计算变量\n@half-inner-size: (@checkbox-size / 2) - @line-width;\n@expand-icon-size: @half-inner-size * 2 + @line-width * 3;\n@table-border: @line-width @line-type @table-border-color;\n@expand-icon-line-offset: @padding-xxs - @line-width;\n@scale-ratio: (unit(@checkbox-size) / unit(@expand-icon-size));\n\n// 展开图标样式\n.row-expand-icon {\n position: relative;\n display: inline-block;\n box-sizing: border-box;\n width: @expand-icon-size;\n height: @expand-icon-size;\n padding: 0;\n color: inherit;\n line-height: @expand-icon-size;\n background: @table-expand-icon-bg;\n border: @table-border;\n border-radius: @border-radius;\n transform: scale(@scale-ratio);\n transition: all @motion-duration-slow;\n cursor: pointer;\n user-select: none;\n\n &:focus,\n &:hover,\n &:active {\n border-color: currentcolor;\n color: var(--v-table-primary-color);\n }\n\n &::before,\n &::after {\n position: absolute;\n background: currentcolor;\n transition: transform @motion-duration-slow ease-out;\n content: '';\n }\n\n // 水平线\n &::before {\n top: @half-inner-size;\n right: @expand-icon-line-offset;\n left: @expand-icon-line-offset;\n height: @line-width;\n }\n\n // 垂直线\n &::after {\n top: @expand-icon-line-offset;\n bottom: @expand-icon-line-offset;\n left: @half-inner-size;\n width: @line-width;\n transform: rotate(90deg);\n }\n}\n\n// 收起状态(显示 + 号)\n.row-expand-icon-collapsed {\n &::before {\n transform: rotate(-180deg);\n }\n\n &::after {\n transform: rotate(0deg);\n }\n}\n\n// 展开状态(显示 - 号)\n.row-expand-icon-expanded {\n &::before {\n transform: rotate(0deg);\n }\n\n &::after {\n transform: rotate(90deg);\n opacity: 0;\n }\n}\n\n// 占位状态(不显示图标,但保持空间)\n.row-expand-icon-spaced {\n &::before,\n &::after {\n display: none;\n content: none;\n }\n\n background: transparent;\n border: 0;\n visibility: hidden;\n}\n</style>\n","<template>\n <div\n v-if=\"props.treeConfig?.enabled && props.cell.column.id === props.columns[0]?.columnKey\"\n class=\"flex h-full items-center gap-[8px]\"\n :style=\"{\n paddingLeft: `${props.row.depth * (props.treeConfig?.indentSize ?? 16)}px`,\n }\"\n >\n <div class=\"flex-shrink-0\" :class=\"[props.row.getCanExpand() ? 'visible' : 'invisible']\">\n <slot\n :expand=\"props.row.getIsExpanded()\"\n :on-expand-change=\"props.row.toggleExpanded\"\n name=\"customExpandIcon\"\n >\n <ExpandIcon :expand=\"props.row.getIsExpanded()\" @expand-change=\"props.row.toggleExpanded\" />\n </slot>\n </div>\n <slot name=\"bodyCell\" v-bind=\"bodyCellSlotProps\">\n <component :is=\"cellRender\" />\n </slot>\n </div>\n\n <slot v-else name=\"bodyCell\" v-bind=\"bodyCellSlotProps\">\n <component :is=\"cellRender\" />\n </slot>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, h } from 'vue'\nimport type { Cell, Row } from '@tanstack/vue-table'\nimport ExpandIcon from '../icons/ExpandIcon.vue'\nimport type { VTableBodyCellProps, VTableColumn, VTableSlots, VTableTreeConfig } from '../interface'\n\ndefineOptions({ name: 'BodyCell' })\n\nconst props = defineProps<{\n cell: Cell<any, any>\n treeConfig: VTableTreeConfig\n columns: VTableColumn[]\n row: Row<any>\n}>()\n\ndefineSlots<VTableSlots>()\n\nconst cellRender = computed(() => {\n const cellDef = props.cell.column.columnDef.cell\n if (typeof cellDef === 'function') {\n const result = cellDef(props.cell.getContext())\n return typeof result === 'string' ? h('span', result) : result\n }\n // 默认显示单元格值\n return h('span', props.cell.getValue() ?? '')\n})\n\nconst bodyCellSlotProps = computed<VTableBodyCellProps>(() => {\n return {\n row: props.cell.row.original,\n column: props.cell.column.columnDef.meta!,\n columnKey: props.cell.column.id,\n rowIndex: props.cell.row.index,\n }\n})\n</script>\n","<template>\n <div class=\"sorter-icon inline-flex flex-col items-center\">\n <svg\n class=\"sorter-up h-[10px] w-[10px]\"\n :class=\"{ active: sort === 'asc' }\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M76.3 632.8l405.1-489.1c16.9-18.9 46.5-18.9 63.4 0l403.1 489.1c24.4 27.4 5 70.8-31.7 70.8H107.9c-36.6 0-56.1-43.4-31.6-70.8z\"\n ></path>\n </svg>\n <svg\n class=\"sorter-down h-[10px] w-[10px]\"\n :class=\"{ active: sort === 'desc' }\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M76.3 392.3l403.1 489.1c16.9 18.9 46.5 18.9 63.4 0l405.1-489.1c24.4-27.4 5-70.8-31.7-70.8H108.1c-36.8 0-56.3 43.4-31.8 70.8z\"\n ></path>\n </svg>\n </div>\n</template>\n\n<script setup lang=\"ts\">\ndefineOptions({\n name: 'SorterIcon',\n})\n\ndefineProps<{\n sort?: 'asc' | 'desc' | null\n}>()\n</script>\n\n<style lang=\"less\" scoped>\n.sorter-icon {\n color: var(--v-table-header-icon-color);\n}\n.sorter-down {\n margin-top: -0.3em;\n}\n.active {\n color: var(--v-table-primary-color);\n}\n</style>\n","<template>\n <svg\n class=\"filter-icon h-[12px] w-[12px]\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n >\n <path\n d=\"M325.714286 884.571429c0 20.228571 16.228571 36.571429 36.342857 36.571428h299.885714c20.114286 0 36.342857-16.342857 36.342857-36.571428V660.571429H325.714286v224z m606.971428-781.714286H91.314286c-28 0-45.485714 30.514286-31.428572 54.857143l252.914286 429.714285h398.628571l252.914286-429.714285c13.828571-24.342857-3.657143-54.857143-31.657143-54.857143z\"\n ></path>\n </svg>\n</template>\n\n<script lang=\"ts\" setup>\ndefineOptions({ name: 'FilterIcon' })\n</script>\n\n<style lang=\"less\" scoped>\n.filter-icon {\n color: var(--v-table-header-icon-color);\n &.active {\n color: var(--v-table-primary-color);\n }\n}\n</style>\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nconst yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);\nfunction getSideAxis(placement) {\n return yAxisSides.has(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const validMiddleware = middleware.filter(Boolean);\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n var _platform$detectOverf;\n const {\n name,\n fn\n } = validMiddleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform: {\n ...platform,\n detectOverflow: (_platform$detectOverf = platform.detectOverflow) != null ? _platform$detectOverf : detectOverflow\n },\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects,\n platform\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = originSides.has(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n platform\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = originSides.has(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nconst invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);\n}\nconst tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);\nfunction isTableElement(element) {\n return tableElements.has(getNodeName(element));\n}\nconst topLayerSelectors = [':popover-open', ':modal'];\nfunction isTopLayer(element) {\n return topLayerSelectors.some(selector => {\n try {\n return element.matches(selector);\n } catch (_e) {\n return false;\n }\n });\n}\nconst transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];\nconst willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];\nconst containValues = ['paint', 'layout', 'strict', 'content'];\nfunction isContainingBlock(elementOrCss) {\n const webkit = isWebKit();\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nconst lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);\nfunction isLastTraversableNode(node) {\n return lastTraversableNodeNames.has(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n // visual width of the <html> but this is not considered in the size\n // of `html.clientWidth`.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n width -= clippingStableScrollbarWidth;\n }\n } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n // If the <body> scrollbar is on the left, the width needs to be extended\n // by the scrollbar amount so there isn't extra space on the right.\n width += windowScrollbarX;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\nconst absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n resizeObserver.observe(floating);\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { arrow as arrow$1, computePosition } from '@floating-ui/dom';\nexport { autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size } from '@floating-ui/dom';\nimport { isNode, getNodeName } from '@floating-ui/utils/dom';\nimport { unref, computed, ref, shallowRef, watch, getCurrentScope, onScopeDispose, shallowReadonly } from 'vue-demi';\n\nfunction isComponentPublicInstance(target) {\n return target != null && typeof target === 'object' && '$el' in target;\n}\nfunction unwrapElement(target) {\n if (isComponentPublicInstance(target)) {\n const element = target.$el;\n return isNode(element) && getNodeName(element) === '#comment' ? null : element;\n }\n return target;\n}\n\nfunction toValue(source) {\n return typeof source === 'function' ? source() : unref(source);\n}\n\n/**\n * Positions an inner element of the floating element such that it is centered to the reference element.\n * @param options The arrow options.\n * @see https://floating-ui.com/docs/arrow\n */\nfunction arrow(options) {\n return {\n name: 'arrow',\n options,\n fn(args) {\n const element = unwrapElement(toValue(options.element));\n if (element == null) {\n return {};\n }\n return arrow$1({\n element,\n padding: options.padding\n }).fn(args);\n }\n };\n}\n\nfunction getDPR(element) {\n if (typeof window === 'undefined') {\n return 1;\n }\n const win = element.ownerDocument.defaultView || window;\n return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n const dpr = getDPR(element);\n return Math.round(value * dpr) / dpr;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element next to a reference element when it is given a certain CSS positioning strategy.\n * @param reference The reference template ref.\n * @param floating The floating template ref.\n * @param options The floating options.\n * @see https://floating-ui.com/docs/vue\n */\nfunction useFloating(reference, floating, options) {\n if (options === void 0) {\n options = {};\n }\n const whileElementsMountedOption = options.whileElementsMounted;\n const openOption = computed(() => {\n var _toValue;\n return (_toValue = toValue(options.open)) != null ? _toValue : true;\n });\n const middlewareOption = computed(() => toValue(options.middleware));\n const placementOption = computed(() => {\n var _toValue2;\n return (_toValue2 = toValue(options.placement)) != null ? _toValue2 : 'bottom';\n });\n const strategyOption = computed(() => {\n var _toValue3;\n return (_toValue3 = toValue(options.strategy)) != null ? _toValue3 : 'absolute';\n });\n const transformOption = computed(() => {\n var _toValue4;\n return (_toValue4 = toValue(options.transform)) != null ? _toValue4 : true;\n });\n const referenceElement = computed(() => unwrapElement(reference.value));\n const floatingElement = computed(() => unwrapElement(floating.value));\n const x = ref(0);\n const y = ref(0);\n const strategy = ref(strategyOption.value);\n const placement = ref(placementOption.value);\n const middlewareData = shallowRef({});\n const isPositioned = ref(false);\n const floatingStyles = computed(() => {\n const initialStyles = {\n position: strategy.value,\n left: '0',\n top: '0'\n };\n if (!floatingElement.value) {\n return initialStyles;\n }\n const xVal = roundByDPR(floatingElement.value, x.value);\n const yVal = roundByDPR(floatingElement.value, y.value);\n if (transformOption.value) {\n return {\n ...initialStyles,\n transform: \"translate(\" + xVal + \"px, \" + yVal + \"px)\",\n ...(getDPR(floatingElement.value) >= 1.5 && {\n willChange: 'transform'\n })\n };\n }\n return {\n position: strategy.value,\n left: xVal + \"px\",\n top: yVal + \"px\"\n };\n });\n let whileElementsMountedCleanup;\n function update() {\n if (referenceElement.value == null || floatingElement.value == null) {\n return;\n }\n const open = openOption.value;\n computePosition(referenceElement.value, floatingElement.value, {\n middleware: middlewareOption.value,\n placement: placementOption.value,\n strategy: strategyOption.value\n }).then(position => {\n x.value = position.x;\n y.value = position.y;\n strategy.value = position.strategy;\n placement.value = position.placement;\n middlewareData.value = position.middlewareData;\n /**\n * The floating element's position may be recomputed while it's closed\n * but still mounted (such as when transitioning out). To ensure\n * `isPositioned` will be `false` initially on the next open, avoid\n * setting it to `true` when `open === false` (must be specified).\n */\n isPositioned.value = open !== false;\n });\n }\n function cleanup() {\n if (typeof whileElementsMountedCleanup === 'function') {\n whileElementsMountedCleanup();\n whileElementsMountedCleanup = undefined;\n }\n }\n function attach() {\n cleanup();\n if (whileElementsMountedOption === undefined) {\n update();\n return;\n }\n if (referenceElement.value != null && floatingElement.value != null) {\n whileElementsMountedCleanup = whileElementsMountedOption(referenceElement.value, floatingElement.value, update);\n return;\n }\n }\n function reset() {\n if (!openOption.value) {\n isPositioned.value = false;\n }\n }\n watch([middlewareOption, placementOption, strategyOption, openOption], update, {\n flush: 'sync'\n });\n watch([referenceElement, floatingElement], attach, {\n flush: 'sync'\n });\n watch(openOption, reset, {\n flush: 'sync'\n });\n if (getCurrentScope()) {\n onScopeDispose(cleanup);\n }\n return {\n x: shallowReadonly(x),\n y: shallowReadonly(y),\n strategy: shallowReadonly(strategy),\n placement: shallowReadonly(placement),\n middlewareData: shallowReadonly(middlewareData),\n isPositioned: shallowReadonly(isPositioned),\n floatingStyles,\n update\n };\n}\n\nexport { arrow, useFloating };\n","<template>\n <div ref=\"referenceRef\" class=\"popover-trigger\" @click=\"props.onOpenChange(!props.open)\">\n <slot />\n </div>\n\n <Teleport to=\"body\">\n <Transition name=\"popover-fade\">\n <div v-if=\"open\" ref=\"floatingRef\" :style=\"floatingStyles\" class=\"popover-content\">\n <slot name=\"content\" />\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport type { VNode } from 'vue'\nimport { flip, offset, shift, useFloating, type Placement } from '@floating-ui/vue'\n\ndefineOptions({ name: 'VPopover' })\n\ndefineSlots<{\n default: () => VNode\n content: () => VNode\n}>()\n\nconst props = withDefaults(\n defineProps<{ open?: boolean; onOpenChange?: (value: boolean) => void; placement?: Placement }>(),\n {\n open: false,\n placement: 'bottom-end',\n onOpenChange: () => {},\n },\n)\n\nconst referenceRef = ref<HTMLElement | null>(null)\nconst floatingRef = ref<HTMLElement | null>(null)\n\nconst { floatingStyles } = useFloating(referenceRef, floatingRef, {\n placement: computed(() => props.placement),\n middleware: [\n offset(({ placement }) => ({\n mainAxis: 12,\n crossAxis: placement.includes('-start') ? -12 : placement.includes('-end') ? 16 : 0,\n })),\n flip(),\n shift({ padding: 8 }),\n ],\n})\n\nconst handleClickOutside = (e: MouseEvent) => {\n if (!props.open) return\n const target = e.target as Node\n if (\n referenceRef.value &&\n floatingRef.value &&\n !referenceRef.value.contains(target) &&\n !floatingRef.value.contains(target)\n ) {\n props.onOpenChange(false)\n }\n}\n\nonMounted(() => {\n document.addEventListener('click', handleClickOutside)\n})\n\nonUnmounted(() => {\n document.removeEventListener('click', handleClickOutside)\n})\n</script>\n\n<style scoped>\n.popover-trigger {\n display: inline-block;\n}\n\n.popover-content {\n z-index: 1050;\n background: #fff;\n border-radius: 6px;\n box-shadow:\n 0 6px 16px 0 rgba(0, 0, 0, 0.08),\n 0 3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n\n.popover-arrow {\n position: absolute;\n width: 8px;\n height: 8px;\n background: #fff;\n transform: rotate(45deg);\n}\n\n.popover-fade-enter-active {\n transition: opacity 0.15s ease;\n}\n\n.popover-fade-leave-active {\n transition: opacity 0.1s ease;\n}\n\n.popover-fade-enter-from,\n.popover-fade-leave-to {\n opacity: 0;\n}\n</style>\n","import { computed, defineComponent, h, ref, type PropType } from 'vue'\nimport type { Header } from '@tanstack/vue-table'\nimport type { VTableSlots } from '..'\nimport FilterIcon from '../icons/FilterIcon.vue'\nimport VPopover from '../libs/VPopover.vue'\n\nexport default defineComponent({\n name: 'HeaderFilter',\n props: {\n header: {\n type: Object as PropType<Header<any, any>>,\n required: true,\n },\n },\n setup(props) {\n const slots = useSlots() as VTableSlots\n const column = computed(() => props.header.column)\n const columnMeta = computed(() => column.value.columnDef.meta!)\n\n const open = ref(false)\n\n const _filterModelValue = ref<any>()\n const filterModelValue = computed<any>({\n get() {\n return column.value.getFilterValue()\n },\n set(value) {\n _filterModelValue.value = value\n },\n })\n\n const confirm = () => {\n column.value.setFilterValue(_filterModelValue.value)\n open.value = false\n }\n\n const reset = () => {\n _filterModelValue.value = null\n column.value.setFilterValue(_filterModelValue.value)\n open.value = false\n }\n\n const trigger = () => (\n <div class=\"relative h-[22px] cursor-pointer\">\n <div class=\"absolute left-1/2 top-1/2 flex h-[30px] w-[20px] translate-x-[-50%] translate-y-[-50%] items-center justify-center hover:bg-[#0000000f] hover:text-[#00000073]\">\n {slots.customFilterIcon?.({\n columnKey: column.value.id,\n filtered: column.value.getIsFiltered(),\n column: columnMeta.value,\n }) || <FilterIcon class={column.value.getIsFiltered() ? 'active' : ''} />}\n </div>\n </div>\n )\n\n const content = () =>\n slots.customFilterDropdown?.({\n confirm,\n reset,\n setFilterValue: (value) => (filterModelValue.value = value),\n column: columnMeta.value,\n filterModelValue: filterModelValue.value,\n }) || h('div', '我是默认下拉')\n\n return () => {\n const customPopover = slots?.customPopover?.({\n open: open.value,\n onOpenChange: (value) => (open.value = value),\n trigger: trigger,\n content: content,\n })\n\n return (\n customPopover ||\n h(\n VPopover,\n {\n open: open.value,\n onOpenChange: (value) => (open.value = value),\n },\n {\n default: trigger,\n content: content,\n },\n )\n )\n }\n },\n})\n","<template>\n <div class=\"flex h-full w-full items-center\">\n <div\n :class=\"[canSort ? 'cursor-pointer' : '']\"\n class=\"flex min-w-0 flex-1 items-center gap-[4px]\"\n @click=\"handleHeaderClick\"\n >\n <div\n class=\"flex min-w-0 flex-1 items-center\"\n :class=\"\n columnMeta?.columnAlign === 'center'\n ? 'justify-center'\n : columnMeta?.columnAlign === 'right'\n ? 'justify-end'\n : 'justify-start'\n \"\n >\n <slot name=\"headerCell\" :column=\"columnMeta\" :column-key=\"columnId\">\n <component :is=\"headerRender\" />\n </slot>\n </div>\n <div class=\"flex items-center gap-[16px]\">\n <div v-if=\"canSort\">\n <slot name=\"customSorterIcon\" :sort=\"currentSort\">\n <SorterIcon :sort=\"currentSort\" />\n </slot>\n </div>\n\n <HeaderFilter v-if=\"canFilter\" :header=\"props.header\">\n <template v-if=\"$slots.customFilterDropdown\" #customFilterDropdown=\"slotProps\">\n <slot name=\"customFilterDropdown\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.customFilterIcon\" #customFilterIcon=\"slotProps\">\n <slot name=\"customFilterIcon\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.customPopover\" #customPopover=\"slotProps\">\n <slot name=\"customPopover\" v-bind=\"slotProps\" />\n </template>\n </HeaderFilter>\n </div>\n </div>\n <div\n v-if=\"canResize\"\n class=\"resize-handle\"\n :class=\"[column.getIsResizing() ? 'isResizing' : '']\"\n @mousedown=\"handleMouseDown\"\n @touchstart=\"handleTouchStart\"\n @dblclick.stop=\"handleDoubleClick\"\n >\n <div\n class=\"resize-handle-line\"\n :style=\"{\n transform:\n table.options.columnResizeMode === 'onEnd' && header.column.getIsResizing()\n ? `translateX(${table.getState().columnSizingInfo.deltaOffset ?? 0}px)`\n : '',\n }\"\n />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, h } from 'vue'\nimport type { Header, Table } from '@tanstack/vue-table'\nimport SorterIcon from '../icons/SorterIcon.vue'\nimport type { VTableSlots } from '../interface'\nimport HeaderFilter from './HeaderFilter.tsx'\n\ndefineOptions({ name: 'HeaderCell' })\n\ndefineSlots<VTableSlots>()\n\nconst props = defineProps<{\n header: Header<any, any>\n table: Table<any>\n}>()\n\nconst column = computed(() => props.header.column)\nconst columnDef = computed(() => column.value.columnDef)\nconst columnMeta = computed(() => columnDef.value.meta!)\nconst columnId = computed(() => column.value.id)\n\n/** 渲染表头默认值 */\nconst headerRender = computed(() => {\n const headerDef = columnDef.value.header\n if (typeof headerDef === 'function') {\n const result = headerDef(props.header.getContext())\n return typeof result === 'string' ? h('span', result) : result\n }\n // 默认显示 header 字符串或列 ID\n return h('span', String(headerDef ?? columnId.value))\n})\n\n// #region 排序相关\nconst canSort = computed(() => columnDef.value.enableSorting)\nconst currentSort = computed(() => column.value.getIsSorted() || null)\nconst handleHeaderClick = (event: MouseEvent) => {\n if (canSort.value) {\n column.value.getToggleSortingHandler()?.(event)\n }\n}\n// #endregion\n\n// #region 筛选相关\nconst canFilter = computed(() => columnDef.value.enableColumnFilter)\n// #endregion\n\nconst canResize = computed(() => column.value.getCanResize())\nconst handleMouseDown = (event: MouseEvent) => {\n props.header.getResizeHandler()?.(event)\n}\nconst handleTouchStart = (event: TouchEvent) => {\n props.header.getResizeHandler()?.(event)\n}\nconst handleDoubleClick = () => {\n column.value.resetSize()\n}\n</script>\n\n<style lang=\"less\" scoped>\n.resize-handle {\n position: absolute;\n top: 0;\n height: 100% !important;\n bottom: 0;\n left: auto !important;\n right: 0;\n cursor: col-resize;\n touch-action: none;\n user-select: auto;\n width: 8px;\n z-index: 1;\n\n .resize-handle-line {\n display: block;\n width: 1px;\n margin-left: 7px;\n height: 100% !important;\n background-color: var(--v-table-primary-color);\n opacity: 0;\n transition: opacity 0.2s;\n }\n\n &.isResizing .resize-handle-line {\n opacity: 1;\n }\n}\n</style>\n","import type { VTableProps, VTableThemeConfig } from '../interface'\nimport { defineDefaultProps } from '../utils/type'\n\n/** checkbox 选择列 */\nexport const CHECKBOX_COLUMN_KEY = 'CHECKBOX_COLUMN_KEY'\n/** 展开列 */\nexport const EXPAND_COLUMN_KEY = 'EXPAND_COLUMN_KEY'\n/** 是否是展开行 */\nexport const EXPAND_ROW_KEY = '_isExpandRow'\n/** data 中 展开子行的数据属性 */\nexport const EXPAND_ROW_DATA_INDEX = '_expandChildren'\n/** 表格默认 props */\nexport const vTableDefaultProps = defineDefaultProps<VTableProps<any>>({\n columns: () => [],\n data: () => [],\n rowHeight: undefined,\n rowKey: undefined,\n loading: false,\n fixedHeader: true,\n enableSortingRemoval: true,\n bordered: false,\n rowSelectionConfig: () => ({\n enabled: false,\n getRowCheckDisabled: () => false,\n onChange: () => {},\n }),\n loadMoreConfig: () => ({\n showNoMore: false,\n noMoreText: '没有更多了',\n }),\n paginationConfig: () => ({\n enabled: false,\n placement: 'right',\n total: 0,\n mode: 'server',\n }),\n treeConfig: () => ({\n enabled: false,\n childrenKey: 'children',\n indentSize: 16,\n }),\n enableExpandRow: false,\n enableRowHover: true,\n adaptiveColumnWidth: 120,\n defaultExpandAllRows: false,\n columnResizeMode: 'onChange',\n fixedFooter: false,\n themeConfig: () => ({}),\n defaultCheckboxColumnWidth: 40,\n defaultExpandColumnWidth: 42,\n customRowAttributes: () => ({}),\n customHeaderCellAttributes: () => ({}),\n customCellAttributes: () => ({}),\n onTableChange: () => {},\n onScrollToBottom: () => {},\n onExpandedRowsChange: () => {},\n onColumnSizingChange: () => {},\n})\n/** 默认主题配置 */\nexport const defaultThemeConfig: VTableThemeConfig = {\n primaryColor: '#1677ff',\n header: {\n color: 'rgba(0, 0, 0, 0.88)',\n backgroundColor: '#fafafa',\n borderRadius: 8,\n splitColor: '#f0f0f0',\n padding: 12,\n headerIconColor: 'rgba(0, 0, 0, 0.30)',\n },\n body: {\n color: 'rgba(0, 0, 0, 0.88)',\n backgroundColor: '#ffffff',\n padding: 12,\n },\n rowHoverColor: '#fafafa',\n border: {\n borderStyle: 'solid',\n borderColor: '#f0f0f0',\n },\n zIndex: {\n pinnedColumn: 10,\n fixedHeader: 12,\n fixedFooter: 12,\n },\n}\n","import { defaultThemeConfig } from '../constant'\nimport type { VTableThemeConfig } from '../interface'\n\n/** 主题配置 */\nexport function useTheme(config: VTableThemeConfig) {\n // 合并用户配置和默认配置\n const themeConfig = computed<VTableThemeConfig>(() => {\n return {\n primaryColor: config?.primaryColor || defaultThemeConfig.primaryColor,\n header: {\n ...defaultThemeConfig.header,\n ...config?.header,\n },\n body: {\n ...defaultThemeConfig.body,\n ...config?.body,\n },\n rowHoverColor: config?.rowHoverColor || defaultThemeConfig.rowHoverColor,\n border: {\n ...defaultThemeConfig.border,\n ...config?.border,\n },\n zIndex: {\n ...defaultThemeConfig.zIndex,\n ...config?.zIndex,\n },\n }\n })\n\n const cssVariables = computed(() => {\n const config = themeConfig.value\n\n return {\n // 主色\n '--v-table-primary-color': config.primaryColor,\n\n // 表头样式变量\n '--v-table-header-color': config.header?.color,\n '--v-table-header-bg': config.header?.backgroundColor,\n '--v-table-header-border-radius': `${config.header?.borderRadius}px`,\n '--v-table-header-split-color': config.header?.splitColor,\n '--v-table-header-padding': `${config.header?.padding}px`,\n '--v-table-header-icon-color': config.header?.headerIconColor,\n\n // 表体样式变量\n '--v-table-body-color': config.body?.color,\n '--v-table-body-bg': config.body?.backgroundColor,\n '--v-table-body-padding': `${config.body?.padding}px`,\n\n // 行 hover 颜色\n '--v-table-row-hover-color': config.rowHoverColor,\n\n // 边框样式变量\n '--v-table-border-style': config.border?.borderStyle,\n '--v-table-border-color': config.border?.borderColor,\n\n // z-index\n '--v-table-pinned-column': config.zIndex?.pinnedColumn,\n '--v-table-fixed-header': config.zIndex?.fixedHeader,\n '--v-table-fixed-footer': config.zIndex?.fixedFooter,\n }\n })\n\n return {\n cssVariables,\n themeConfig,\n }\n}\n","<template>\n <label :class=\"wrapperClasses\">\n <span :class=\"checkboxClasses\">\n <input\n type=\"checkbox\"\n :checked=\"checked\"\n :disabled=\"disabled\"\n :indeterminate=\"indeterminate\"\n class=\"checkbox-input\"\n @change=\"handleChange\"\n />\n <span class=\"checkbox-inner\" />\n </span>\n <span v-if=\"$slots.default\" class=\"checkbox-label\">\n <slot />\n </span>\n </label>\n</template>\n\n<script setup lang=\"ts\">\nimport type { VTableCheckboxProps } from '../interface'\n\ndefineOptions({ name: 'VCheckbox' })\n\nconst props = withDefaults(defineProps<VTableCheckboxProps>(), {\n checked: false,\n disabled: false,\n indeterminate: false,\n onCheckedChange: () => {},\n})\n\nconst wrapperClasses = computed(() => ({\n 'checkbox-wrapper': true,\n 'checkbox-wrapper-checked': props.checked,\n 'checkbox-wrapper-disabled': props.disabled,\n}))\n\nconst checkboxClasses = computed(() => ({\n checkbox: true,\n 'checkbox-checked': props.checked && !props.indeterminate,\n 'checkbox-disabled': props.disabled,\n 'checkbox-indeterminate': props.indeterminate,\n}))\n\nconst handleChange = (e: Event) => {\n if (props.disabled) return\n props.onCheckedChange?.(e)\n}\n</script>\n\n<style lang=\"less\" scoped>\n@checkbox-size: 16px;\n@checkbox-border-width: 1px;\n@checkbox-border-radius: 2px;\n\n@primary-color: var(--v-table-primary-color);\n@primary-color-hover: var(--v-table-primary-color);\n@primary-color-active: var(--v-table-primary-color);\n@border-color-base: #d9d9d9;\n@disabled-color: rgba(0, 0, 0, 0.25);\n@disabled-bg: #f5f5f5;\n@component-background: #fff;\n@text-color: rgba(0, 0, 0, 0.85);\n\n@animation-duration-slow: 0.3s;\n@animation-duration-base: 0.2s;\n@ease-in-out: cubic-bezier(0.645, 0.045, 0.355, 1);\n\n// ========== Checkbox 容器 ==========\n.checkbox-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n user-select: none;\n vertical-align: middle;\n\n &:hover .checkbox-inner {\n border-color: @primary-color;\n }\n\n &-disabled {\n cursor: not-allowed;\n }\n}\n\n// ========== Checkbox 主体 ==========\n.checkbox {\n position: relative;\n display: inline-block;\n line-height: 1;\n white-space: nowrap;\n vertical-align: middle;\n outline: none;\n cursor: pointer;\n\n // 隐藏原生 input\n &-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n }\n\n // Checkbox 内部方框\n &-inner {\n position: relative;\n display: block;\n width: @checkbox-size;\n height: @checkbox-size;\n background-color: @component-background;\n border: @checkbox-border-width solid @border-color-base;\n border-radius: @checkbox-border-radius;\n border-collapse: separate;\n transition: all @animation-duration-slow @ease-in-out;\n\n // 对勾\n &::after {\n position: absolute;\n top: 50%;\n left: 21.5%;\n display: table;\n width: (@checkbox-size / 14) * 5;\n height: (@checkbox-size / 14) * 8;\n border: 2px solid @component-background;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(0) translate(-50%, -50%);\n opacity: 0;\n transition: all @animation-duration-base @ease-in-out;\n content: ' ';\n }\n }\n\n // ========== 选中状态 ==========\n &-checked {\n .checkbox-inner {\n background-color: @primary-color;\n border-color: @primary-color;\n\n &::after {\n transform: rotate(45deg) scale(1) translate(-50%, -50%);\n opacity: 1;\n transition: all @animation-duration-base @ease-in-out;\n }\n }\n\n &:hover .checkbox-inner {\n background-color: @primary-color-hover;\n border-color: @primary-color-hover;\n }\n\n &:active .checkbox-inner {\n background-color: @primary-color-active;\n border-color: @primary-color-active;\n }\n }\n\n // ========== 半选状态 ==========\n &-indeterminate {\n .checkbox-inner {\n background-color: @component-background;\n border-color: @border-color-base;\n\n &::after {\n top: 50%;\n left: 50%;\n width: (@checkbox-size / 2);\n height: (@checkbox-size / 2);\n background-color: @primary-color;\n border: 0;\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n content: ' ';\n }\n }\n\n &:hover .checkbox-inner {\n background-color: @component-background;\n border-color: @primary-color;\n }\n }\n\n // ========== 禁用状态 ==========\n &-disabled {\n cursor: not-allowed;\n\n .checkbox-input {\n cursor: not-allowed;\n }\n\n .checkbox-inner {\n background-color: @disabled-bg;\n border-color: @border-color-base !important;\n\n &::after {\n border-color: @disabled-color;\n }\n }\n\n &.checkbox-checked .checkbox-inner {\n background-color: @disabled-bg;\n\n &::after {\n border-color: @disabled-color;\n }\n }\n\n &.checkbox-indeterminate .checkbox-inner::after {\n background-color: @disabled-color;\n }\n\n & + .checkbox-label {\n color: @disabled-color;\n cursor: not-allowed;\n }\n }\n}\n\n// ========== 文本标签 ==========\n.checkbox-label {\n padding-right: 8px;\n padding-left: 8px;\n color: @text-color;\n line-height: 1.5715;\n}\n\n// ========== 焦点状态 ==========\n.checkbox-wrapper:not(.checkbox-wrapper-disabled) {\n .checkbox-input:focus-visible + .checkbox-inner {\n border-color: @primary-color;\n box-shadow: 0 0 0 3px rgba(24, 144, 255, 0.08);\n }\n}\n</style>\n","<template>\n <div class=\"flex h-full items-center justify-center bg-[rgba(255,255,255,0.5)]\">\n <slot>\n <div class=\"animate-custom-spin dot-container relative\">\n <div\n v-for=\"i in 4\"\n :key=\"i\"\n class=\"dot-item animate-fade absolute origin-center scale-[0.75] rounded-full opacity-[0.3]\"\n />\n </div>\n </slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { LoadingSize } from './directive'\n\ndefineOptions({ name: 'VLoading' })\n\nconst props = withDefaults(\n defineProps<{\n size?: LoadingSize\n }>(),\n {\n size: 'default',\n },\n)\n\nconst sizeOptions = computed<{ containerSize: string; dotSize: string }>(() => {\n const sizeMap: Record<LoadingSize, { containerSize: string; dotSize: string }> = {\n default: {\n containerSize: '20px',\n dotSize: '9px',\n },\n small: {\n containerSize: '14px',\n dotSize: '6px',\n },\n large: {\n containerSize: '32px',\n dotSize: '14px',\n },\n }\n return sizeMap[props.size]\n})\n</script>\n\n<style scoped lang=\"less\">\n@keyframes spin {\n 0% {\n transform: rotate(45deg);\n }\n 100% {\n transform: rotate(405deg);\n }\n}\n\n.animate-custom-spin {\n animation: spin 1.2s linear infinite;\n}\n\n@keyframes fade {\n 100% {\n opacity: 1;\n }\n}\n\n.animate-fade {\n animation: fade 1s linear infinite alternate;\n}\n\n.dot-container {\n width: v-bind('sizeOptions.containerSize');\n height: v-bind('sizeOptions.containerSize');\n}\n\n.dot-item {\n width: v-bind('sizeOptions.dotSize');\n height: v-bind('sizeOptions.dotSize');\n background-color: var(--v-table-primary-color);\n\n &:nth-child(1) {\n top: 0;\n inset-inline-start: 0;\n }\n\n &:nth-child(2) {\n top: 0;\n inset-inline-end: 0;\n animation-delay: 0.4s;\n }\n\n &:nth-child(3) {\n inset-inline-end: 0;\n bottom: 0;\n animation-delay: 0.8s;\n }\n\n &:nth-child(4) {\n bottom: 0;\n inset-inline-start: 0;\n animation-delay: 1.2s;\n }\n}\n</style>\n","import { h, render, type Directive, type VNode } from 'vue'\nimport VLoadingComponent from './index.vue'\n\nexport type LoadingSize = 'small' | 'default' | 'large'\n\nexport type LoadingDirectiveOptions =\n | boolean\n | {\n spinning: boolean\n size?: LoadingSize\n /** 自定义 loading 图标 */\n indicator?: VNode\n bottom?: number\n }\n\ntype LoadingNode = {\n vNode: VNode | null\n element: HTMLElement | null\n}\n\ntype LoadingElement = HTMLElement & {\n _loadingNode?: LoadingNode\n _loadingOptions?: LoadingDirectiveOptions\n}\n\n/** 创建 Loading 模板 */\nconst createLoadingTpl = (el: LoadingElement, options: LoadingDirectiveOptions = true) => {\n // 如果已存在并未变化,直接返回\n if (el._loadingNode && JSON.stringify(el._loadingOptions) === JSON.stringify(options)) return\n\n destroyLoadingTpl(el)\n\n // 创建容器\n const container = document.createElement('div')\n container.style.position = 'absolute'\n container.style.top = '0'\n container.style.left = '0'\n container.style.right = '0'\n container.style.bottom = typeof options === 'boolean' ? '0' : `${options.bottom || 0}px`\n container.style.zIndex = '1000'\n\n // 创建 VNode\n const props = typeof options === 'boolean' ? {} : { size: options.size }\n const indicator = typeof options !== 'boolean' ? options.indicator : undefined\n\n const vNode = indicator\n ? h(VLoadingComponent, props, () => indicator)\n : h(VLoadingComponent, props)\n\n render(vNode, container)\n\n // 确保父元素有定位\n const currentPosition = getComputedStyle(el).position\n if (!['relative', 'absolute', 'fixed'].includes(currentPosition)) {\n el.style.position = 'relative'\n }\n\n el.appendChild(container)\n el._loadingNode = { vNode, element: container }\n el._loadingOptions = options\n}\n\n/** 销毁 Loading 组件 */\nconst destroyLoadingTpl = (el: LoadingElement) => {\n const loadingNode = el._loadingNode\n if (loadingNode) {\n render(null, loadingNode.element!)\n if (el.contains(loadingNode.element!)) {\n el.removeChild(loadingNode.element!)\n }\n delete el._loadingNode\n delete el._loadingOptions\n }\n}\n\n/** 判断是否应该显示 loading */\nconst shouldShowLoading = (value: LoadingDirectiveOptions): boolean => {\n return typeof value === 'boolean' ? value : value.spinning\n}\n\n/** v-loading 指令 */\nconst vLoading: Directive<LoadingElement, LoadingDirectiveOptions> = {\n mounted(el, binding) {\n if (shouldShowLoading(binding.value)) {\n createLoadingTpl(el, binding.value)\n }\n },\n updated(el, binding) {\n if (shouldShowLoading(binding.value)) {\n createLoadingTpl(el, binding.value)\n } else {\n destroyLoadingTpl(el)\n }\n },\n unmounted(el) {\n destroyLoadingTpl(el)\n },\n}\n\nexport default vLoading\n","<template>\n <svg\n viewBox=\"0 0 1024 1024\"\n width=\"1em\"\n height=\"1em\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n v-if=\"direction === 'left'\"\n d=\"M724 218.3V141c0-6.7-7.7-10.4-12.9-6.3L260.3 486.8a31.86 31.86 0 0 0 0 50.3l450.8 352.1c5.3 4.1 12.9.4 12.9-6.3v-77.3c0-4.9-2.3-9.6-6.1-12.6l-360-281 360-281.1c3.8-3 6.1-7.7 6.1-12.6z\"\n ></path>\n <path\n v-else\n d=\"M765.7 486.8L314.9 134.7A7.97 7.97 0 0 0 302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 0 0 0-50.4z\"\n ></path>\n </svg>\n</template>\n\n<script setup lang=\"ts\">\ndefineOptions({ name: 'ArrowIcon' })\n\ndefineProps<{\n direction: 'left' | 'right'\n}>()\n</script>\n","<template>\n <Popover :open=\"open\" placement=\"bottom\" @open-change=\"handleOpenChange\">\n <div ref=\"selectRef\" :class=\"selectClasses\">\n <div class=\"select-selector\">\n <span class=\"select-selection-item\">{{ selectedLabel }}</span>\n <span class=\"select-arrow\">▼</span>\n </div>\n </div>\n\n <template #content>\n <div class=\"select-dropdown\" :style=\"{ width: dropdownWidth }\">\n <div class=\"select-dropdown-inner\">\n <div\n v-for=\"option in props.options\"\n :key=\"option.value\"\n :class=\"['select-item', { 'select-item-selected': option.value === props.value }]\"\n @click=\"handleSelect(option)\"\n >\n {{ option.label }}\n </div>\n </div>\n </div>\n </template>\n </Popover>\n</template>\n\n<script setup lang=\"ts\">\nimport Popover from './VPopover.vue'\n\ndefineOptions({ name: 'VSelect', inheritAttrs: false })\n\nconst props = withDefaults(\n defineProps<{\n value?: string | number\n options?: Array<{ label: string; value: string | number }>\n onSelectChange?: (value: string | number) => void\n }>(),\n {\n value: undefined,\n options: () => [],\n onSelectChange: () => {},\n },\n)\n\nconst open = ref(false)\nconst selectRef = ref<HTMLElement | null>(null)\nconst dropdownWidth = ref('auto')\n\nconst selectClasses = computed(() => ({\n select: true,\n 'select-open': open.value,\n}))\n\nconst selectedLabel = computed(() => {\n const option = props.options.find((opt) => opt.value === props.value)\n return option?.label || ''\n})\n\nconst handleOpenChange = (isOpen: boolean) => {\n open.value = isOpen\n if (isOpen && selectRef.value) {\n dropdownWidth.value = `${selectRef.value.offsetWidth}px`\n }\n}\n\nconst handleSelect = (option: { label: string; value: string | number }) => {\n props.onSelectChange?.(option.value)\n open.value = false\n}\n</script>\n\n<style scoped>\n.select {\n display: inline-block;\n min-width: 80px;\n cursor: pointer;\n}\n\n.select-selector {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 4px 11px;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n transition: all 0.3s;\n}\n\n.select:not(.select-disabled):hover .select-selector {\n border-color: var(--v-table-primary-color);\n}\n\n.select-open .select-selector {\n border-color: var(--v-table-primary-color);\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n\n.select-selection-item {\n flex: 1;\n font-size: 14px;\n color: rgba(0, 0, 0, 0.85);\n line-height: 22px;\n}\n\n.select-arrow {\n margin-left: 8px;\n font-size: 10px;\n color: rgba(0, 0, 0, 0.25);\n transition: transform 0.3s;\n}\n\n.select-open .select-arrow {\n transform: rotate(180deg);\n}\n\n.select-dropdown {\n max-height: 256px;\n overflow: hidden;\n background: #fff;\n border-radius: 6px;\n}\n\n.select-dropdown-inner {\n max-height: 256px;\n padding: 4px;\n overflow-y: auto;\n}\n\n.select-item {\n padding: 5px 12px;\n font-size: 14px;\n color: rgba(0, 0, 0, 0.85);\n line-height: 22px;\n cursor: pointer;\n transition: background 0.3s;\n border-radius: 4px;\n}\n\n.select-item:hover {\n background-color: #f5f5f5;\n}\n\n.select-item-selected {\n font-weight: 600;\n background-color: #e6f7ff;\n}\n</style>\n","<template>\n <div class=\"pagination\">\n <!-- 总数显示 -->\n <span class=\"pagination-total\">共 {{ props.total }} 条</span>\n\n <!-- 页码列表 -->\n <ul class=\"pagination-list\">\n <!-- 上一页 -->\n <li\n :class=\"[\n 'pagination-item',\n 'pagination-prev',\n { 'pagination-disabled': props.pageIndex === 1 },\n ]\"\n @click=\"handlePrev\"\n >\n <ArrowIcon direction=\"left\" />\n </li>\n\n <!-- 页码 -->\n <li\n v-for=\"(page, index) in pageList\"\n :key=\"index\"\n :class=\"[\n 'pagination-item',\n {\n 'pagination-item-active': page === props.pageIndex,\n 'pagination-ellipsis': page === '...',\n },\n ]\"\n @click=\"page !== '...' && handlePageChange(page as number)\"\n >\n {{ page }}\n </li>\n\n <!-- 下一页 -->\n <li\n :class=\"[\n 'pagination-item',\n 'pagination-next',\n { 'pagination-disabled': props.pageIndex === totalPages },\n ]\"\n @click=\"handleNext\"\n >\n <ArrowIcon direction=\"right\" />\n </li>\n </ul>\n\n <!-- 每页条数选择器 -->\n <div class=\"pagination-size-changer\">\n <VSelect\n :value=\"props.pageSize\"\n :options=\"[\n { label: '10', value: 10 },\n { label: '20', value: 20 },\n { label: '50', value: 50 },\n { label: '100', value: 100 },\n ]\"\n @select-change=\"(value) => props.onPageChange?.(1, value as number)\"\n />\n <span class=\"pagination-size-text\">条/页</span>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport ArrowIcon from '../icons/ArrowIcon.vue'\nimport type { VTablePaginationProps } from '../interface'\nimport VSelect from './VSelect.vue'\n\ndefineOptions({ name: 'VPagination' })\n\nconst props = withDefaults(defineProps<VTablePaginationProps>(), {\n total: 0,\n pageSize: 10,\n pageIndex: 1,\n onPageChange: () => {},\n})\n\n// 总页数\nconst totalPages = computed(() => Math.ceil(props.total / props.pageSize))\n\n// 生成页码列表(最多显示 7 个页码)\nconst pageList = computed(() => {\n const pages: (number | string)[] = []\n const total = totalPages.value\n const current = props.pageIndex\n\n if (total <= 7) {\n // 总页数小于等于 7,全部显示\n for (let i = 1; i <= total; i++) {\n pages.push(i)\n }\n } else {\n // 总页数大于 7,显示省略号\n if (current <= 4) {\n // 当前页靠前:1 2 3 4 5 ... 10\n for (let i = 1; i <= 5; i++) {\n pages.push(i)\n }\n pages.push('...')\n pages.push(total)\n } else if (current >= total - 3) {\n // 当前页靠后:1 ... 6 7 8 9 10\n pages.push(1)\n pages.push('...')\n for (let i = total - 4; i <= total; i++) {\n pages.push(i)\n }\n } else {\n // 当前页在中间:1 ... 4 5 6 ... 10\n pages.push(1)\n pages.push('...')\n for (let i = current - 1; i <= current + 1; i++) {\n pages.push(i)\n }\n pages.push('...')\n pages.push(total)\n }\n }\n\n return pages\n})\n\n// 上一页\nconst handlePrev = () => {\n if (props.pageIndex > 1) {\n handlePageChange(props.pageIndex - 1)\n }\n}\n\n// 下一页\nconst handleNext = () => {\n if (props.pageIndex < totalPages.value) {\n handlePageChange(props.pageIndex + 1)\n }\n}\n\n// 切换页码\nconst handlePageChange = (page: number) => {\n if (page === props.pageIndex) return\n props.onPageChange?.(page, props.pageSize)\n}\n</script>\n\n<style scoped>\n.pagination {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n}\n\n.pagination-total {\n margin-right: 8px;\n color: rgba(0, 0, 0, 0.85);\n}\n\n.pagination-list {\n display: flex;\n gap: 4px;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.pagination-item {\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 32px;\n height: 32px;\n padding: 0 6px;\n color: rgba(0, 0, 0, 0.85);\n line-height: 30px;\n text-align: center;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 2px;\n cursor: pointer;\n transition: all 0.3s;\n user-select: none;\n}\n\n.pagination-item:hover:not(.pagination-disabled):not(.pagination-item-active) {\n border-color: var(--v-table-primary-color);\n color: var(--v-table-primary-color);\n}\n\n.pagination-item-active {\n font-weight: 600;\n color: #fff;\n background-color: var(--v-table-primary-color);\n border-color: var(--v-table-primary-color);\n cursor: default;\n}\n\n.pagination-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n\n.pagination-ellipsis {\n border-color: transparent;\n background-color: transparent;\n cursor: default;\n pointer-events: none;\n}\n\n.pagination-ellipsis:hover {\n border-color: transparent;\n background-color: transparent;\n}\n\n.pagination-prev,\n.pagination-next {\n font-size: 12px;\n}\n\n.pagination-size-changer {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: 8px;\n}\n\n.pagination-size-text {\n color: rgba(0, 0, 0, 0.85);\n}\n</style>\n","import type { ColumnDef } from '@tanstack/vue-table'\nimport { EXPAND_ROW_DATA_INDEX, EXPAND_ROW_KEY } from '../constant'\nimport type { VTableColumn, VTableRowKey } from '../interface'\n\nexport function convertToColumnDefList<T>(\n columns: VTableColumn[],\n containerWidth: number = 0,\n): ColumnDef<T>[] {\n return columns.map((col) => ({\n id: col.columnKey,\n accessorKey: col.columnKey,\n // 将百分比转换为像素值\n size: col.columnWidth ? convertSizeToPixels(col.columnWidth, containerWidth) : undefined,\n header: col.columnHeader,\n cell: col.columnCell,\n enableSorting: col.columnEnableSort,\n enableColumnFilter: col.columnEnableFilter,\n sortDescFirst: true,\n enableResizing: col.columnEnableResize ?? false,\n minSize: col.columnMinWidth ?? 50,\n maxSize: col.columnMaxWidth,\n columns: convertToColumnDefList<T>(col.columnChildren || [], containerWidth),\n meta: col,\n }))\n}\n\n/** 给 data 添加组件内部属性(仅当 enableExpandRow 时添加展开行结构) */\nexport function buildData<T>(data: T[], enableExpandRow = false) {\n if (!enableExpandRow) return data\n return data.map((v) => ({\n ...v,\n [EXPAND_ROW_DATA_INDEX]: [{ ...v, [EXPAND_ROW_KEY]: true }],\n }))\n}\n\n/** 获取所有行的 key */\nexport function getAllRowKeys<TData>(\n data: TData[],\n rowKey: VTableRowKey<TData>,\n childrenKey: string = 'children',\n): string[] {\n const keys: string[] = []\n function traverse(items: TData[]) {\n items.forEach((item) => {\n const key = rowKey\n ? typeof rowKey === 'function'\n ? rowKey(item)\n : item[rowKey as keyof TData]\n : (item as any).id\n keys.push(String(key))\n const children = (item as any)[childrenKey]\n if (children?.length) traverse(children)\n })\n }\n traverse(data)\n return keys\n}\n\n/** 将 size 转换为实际像素值 */\nexport function convertSizeToPixels(\n size: number | string | undefined,\n containerWidth: number,\n): number {\n if (!size) return 0\n if (typeof size === 'number') return size\n // 处理百分比:'20%' -> 实际像素\n if (typeof size === 'string' && size.endsWith('%')) {\n const percentage = parseFloat(size)\n return Math.round((containerWidth * percentage) / 100)\n }\n // 处理 px 字符串:'100px' -> 100\n if (typeof size === 'string' && size.endsWith('px')) {\n return Math.round(parseFloat(size))\n }\n return 0\n}\n","<template>\n <div\n v-loading=\"{\n spinning: props.loading,\n indicator: $slots?.customLoadingIcon?.(),\n bottom: paginationRef?.offsetHeight,\n }\"\n class=\"v-table-wrapper\"\n :style=\"cssVariables\"\n >\n <div\n ref=\"tableContainerRef\"\n class=\"min-h-0 flex-1\"\n :class=\"{ 'overflow-y-auto': props.fixedHeader }\"\n >\n <table class=\"v-table\" :class=\"{ 'v-table-bordered': props.bordered }\">\n <colgroup>\n <col\n v-for=\"column in table.getAllLeafColumns()\"\n :key=\"column.id\"\n :style=\"{ width: getColumnWidth(column) }\"\n />\n </colgroup>\n <thead\n ref=\"tableHeaderRef\"\n class=\"v-table-header\"\n :class=\"{ sticky: props.fixedHeader }\"\n :style=\"{ top: 0, zIndex: themeConfig.zIndex?.fixedHeader }\"\n >\n <slot name=\"customHeader\" :columns=\"columns\" :table=\"table\">\n <tr v-for=\"headerGroup in table.getHeaderGroups()\" :key=\"headerGroup.id\">\n <th\n v-for=\"header in headerGroup.headers\"\n :key=\"header.id\"\n :colspan=\"header.colSpan\"\n class=\"relative\"\n :class=\"[\n header.column.id === CHECKBOX_COLUMN_KEY ? 'checkbox-col' : '',\n header.column.id === EXPAND_COLUMN_KEY ? 'expand-col' : '',\n isShadowPinnedColumn(header.column),\n ]\"\n :style=\"getColumnStyle(header.column)\"\n v-bind=\"\n props?.customHeaderCellAttributes?.(\n header.column.columnDef?.meta!,\n header.column.getIndex(),\n )\n \"\n >\n <template v-if=\"!header.isPlaceholder\">\n <FlexRender\n v-if=\"header.id === CHECKBOX_COLUMN_KEY\"\n :render=\"header.column.columnDef.header\"\n :props=\"header.getContext()\"\n />\n <HeaderCell v-else :header=\"header\" :table=\"table\">\n <template v-if=\"$slots.headerCell\" #headerCell=\"slotProps\">\n <slot name=\"headerCell\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.customFilterDropdown\" #customFilterDropdown=\"slotProps\">\n <slot name=\"customFilterDropdown\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.customFilterIcon\" #customFilterIcon=\"slotProps\">\n <slot name=\"customFilterIcon\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.customPopover\" #customPopover=\"slotProps\">\n <slot name=\"customPopover\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.customSorterIcon\" #customSorterIcon=\"slotProps\">\n <slot name=\"customSorterIcon\" v-bind=\"slotProps\" />\n </template>\n </HeaderCell>\n </template>\n </th>\n </tr>\n </slot>\n </thead>\n\n <tbody class=\"v-table-body\">\n <tr v-if=\"paddingTop > 0\" :style=\"{ height: `${paddingTop}px` }\" />\n\n <tr\n v-for=\"vRow in virtualRows\"\n :key=\"renderRowKeys[vRow.index]\"\n :ref=\"(el: any) => measureElement(el, rows[vRow.index]?.original?.[EXPAND_ROW_KEY])\"\n :data-index=\"vRow.index\"\n :style=\"{\n minHeight: `${vRow.size}px`,\n }\"\n :class=\"{ 'v-table-row-hover': props.enableRowHover }\"\n v-bind=\"props?.customRowAttributes?.(rows[vRow.index]!.original, vRow.index)\"\n >\n <template v-if=\"!rows[vRow.index]!.original?.[EXPAND_ROW_KEY]\">\n <template\n v-for=\"(cell, cellIndex) in rows[vRow.index]!.getVisibleCells()\"\n :key=\"cell.id\"\n >\n <td\n v-if=\"\n canRenderCell(\n rows[vRow.index]!.original,\n cell.column.columnDef?.meta!,\n vRow.index,\n cellIndex,\n )\n \"\n :style=\"getColumnStyle(cell.column)\"\n :class=\"[\n cell.column.id === CHECKBOX_COLUMN_KEY ? 'checkbox-col' : '',\n cell.column.id === EXPAND_COLUMN_KEY ? 'expand-col' : '',\n isShadowPinnedColumn(cell.column),\n ]\"\n v-bind=\"\n props.customCellAttributes?.(\n rows[vRow.index]!.original,\n cell.column.columnDef?.meta!,\n vRow.index,\n cellIndex,\n ) ?? {}\n \"\n >\n <FlexRender\n v-if=\"cell.column.id === CHECKBOX_COLUMN_KEY\"\n :render=\"cell.column.columnDef.cell\"\n :props=\"cell.getContext()\"\n />\n <BodyCell\n v-else\n :cell=\"cell\"\n :tree-config=\"props.treeConfig\"\n :columns=\"props.columns\"\n :row=\"rows[vRow.index]!\"\n >\n <template v-if=\"$slots.bodyCell\" #bodyCell=\"slotProps\">\n <slot name=\"bodyCell\" v-bind=\"slotProps\" />\n </template>\n <template v-if=\"$slots.customExpandIcon\" #customExpandIcon=\"slotProps\">\n <slot name=\"customExpandIcon\" v-bind=\"slotProps\" />\n </template>\n </BodyCell>\n </td>\n </template>\n </template>\n <!-- 自定义展开行的模板 -->\n <td v-else class=\"!p-0\" :colspan=\"table.getAllLeafColumns().length\">\n <div\n class=\"overflow-hidden\"\n :style=\"{\n position: hasFixedColumns ? 'sticky' : 'static',\n left: 0,\n width: hasFixedColumns ? `${tableContainerWidth}px` : 'auto',\n }\"\n >\n <slot name=\"expandedRowRender\" :row=\"rows[vRow.index]!.original\" />\n </div>\n </td>\n </tr>\n\n <tr v-if=\"paddingBottom > 0\" :style=\"{ height: `${paddingBottom}px`, border: 'none' }\" />\n <!-- 底部提示模板 (作为最后一行) -->\n <tr v-if=\"showNoMoreTip\" :style=\"{ borderBottom: 'none' }\">\n <td\n :colspan=\"table.getAllLeafColumns().length\"\n class=\"!border-b-0 p-[12px] text-center text-[14px] text-[rgba(0,0,0,0.32)]\"\n >\n <slot name=\"customLoadNoMore\">\n {{ noMoreText }}\n </slot>\n </td>\n </tr>\n </tbody>\n <tfoot\n :class=\"{ sticky: props.fixedFooter }\"\n :style=\"{ bottom: 0, zIndex: themeConfig.zIndex?.fixedFooter }\"\n >\n <tr>\n <td class=\"!p-0\" :colspan=\"table.getAllLeafColumns().length\">\n <div class=\"overflow-hidden\">\n <slot name=\"customFooter\" />\n </div>\n </td>\n </tr>\n </tfoot>\n </table>\n <!-- 空状态 -->\n <div\n v-if=\"!virtualRows.length && !props.loading\"\n :style=\"{ height: `calc(100% - ${tableHeaderRef?.offsetHeight ?? 0}px)` }\"\n class=\"flex items-center justify-center\"\n >\n <slot name=\"customEmpty\"> 当前内容为空 </slot>\n </div>\n </div>\n\n <div\n v-if=\"props.paginationConfig.enabled\"\n ref=\"paginationRef\"\n :class=\"[\n props.paginationConfig.placement === 'left'\n ? 'justify-start'\n : props.paginationConfig.placement === 'center'\n ? 'justify-center'\n : 'justify-end',\n ]\"\n class=\"flex items-center py-[16px]\"\n >\n <component :is=\"PaginationComponent\" />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\" generic=\"TData extends VTableData\">\nimport { type CSSProperties } from 'vue'\nimport {\n FlexRender,\n getCoreRowModel,\n getExpandedRowModel,\n getPaginationRowModel,\n useVueTable,\n type Column,\n type ColumnDef,\n type ColumnFiltersState,\n type ColumnPinningState,\n type ColumnSizingState,\n type ExpandedState,\n type PaginationState,\n type Row,\n type RowSelectionState,\n type SortingState,\n type Table,\n} from '@tanstack/vue-table'\nimport { Virtualizer, useVirtualizer, type VirtualItem } from '@tanstack/vue-virtual'\nimport { hash } from 'ohash'\nimport BodyCell from './components/BodyCell.vue'\nimport HeaderCell from './components/HeaderCell.vue'\nimport {\n CHECKBOX_COLUMN_KEY,\n EXPAND_COLUMN_KEY,\n EXPAND_ROW_DATA_INDEX,\n EXPAND_ROW_KEY,\n vTableDefaultProps,\n} from './constant'\nimport { useTheme } from './hooks/useTheme'\nimport ExpandIcon from './icons/ExpandIcon.vue'\nimport type {\n VTableCheckboxProps,\n VTableColumn,\n VTableData,\n VTableExpandIconProps,\n VTableInstance,\n VTablePaginationProps,\n VTableProps,\n VTableSlots,\n} from './interface'\nimport VCheckbox from './libs/VCheckbox.vue'\nimport vLoading from './libs/VLoading'\nimport VPagination from './libs/VPagination.vue'\nimport { buildData, convertToColumnDefList, getAllRowKeys } from './utils'\n\ndefineOptions({ name: 'VTable' })\n\nconst props = withDefaults(defineProps<VTableProps<TData>>(), vTableDefaultProps)\nconst $slots = defineSlots<VTableSlots<TData>>()\n\n// #region 自适应列宽计算\nconst tableHeaderRef = ref<HTMLDivElement>()\nconst paginationRef = ref<HTMLDivElement>()\nconst tableContainerRef = ref<HTMLDivElement | null>(null)\nconst tableContainerWidth = ref(0)\nlet resizeObserver: ResizeObserver | null = null\nconst initResizeObserver = () => {\n if (!tableContainerRef.value) return\n resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n tableContainerWidth.value = entry.contentRect.width\n }\n })\n resizeObserver.observe(tableContainerRef.value)\n}\n/** 计算自适应列的实际宽度 */\nconst adaptiveColumnWidthMap = computed(() => {\n const allColumns = table.getAllLeafColumns()\n const containerWidth = tableContainerWidth.value || 0\n if (containerWidth === 0) return {}\n // 筛选出自适应列(未设置 size 的列)\n const adaptiveColumns = allColumns.filter((col) => !col.columnDef.size)\n const adaptiveCount = adaptiveColumns.length\n if (adaptiveCount === 0) return {}\n\n // 计算固定列总宽度\n const fixedWidthTotal = allColumns.reduce((sum, col) => {\n // 统计所有设置列宽的列\n if (col.columnDef.size) {\n return sum + Math.round(col.getSize())\n }\n return sum\n }, 0)\n // 计算自适应列的最小总宽度\n const adaptiveMinWidthTotal = adaptiveCount * props.adaptiveColumnWidth\n // 计算剩余可用宽度(避免垂直滚动条导致的计算误差)\n const tolerance = 20\n const remainingWidth = containerWidth - fixedWidthTotal\n // 1. 剩余宽度 >= 自适应列最小总宽度 - 误差,则自适应列均分剩余空间\n if (remainingWidth >= adaptiveMinWidthTotal - tolerance) {\n const avgWidth = Math.floor(remainingWidth / adaptiveCount)\n // 计算余数(因为可能均分之后,不能整除的情况)\n const remainder = remainingWidth % adaptiveCount\n // 将余数分配给前 remainder 列,避免误差\n return adaptiveColumns.reduce(\n (map, col, index) => {\n map[col.id] = avgWidth + (index < remainder ? 1 : 0)\n return map\n },\n {} as Record<string, number>,\n )\n }\n // 2. 剩余宽度 < 自适应列最小总宽度,所有自适应列使用最小宽度\n return adaptiveColumns.reduce(\n (map, col) => {\n map[col.id] = props.adaptiveColumnWidth\n return map\n },\n {} as Record<string, number>,\n )\n})\n/** 获取表格列宽(用于 colgroup) */\nconst getColumnWidth = (column: Column<TData>) => {\n const definedSize = column.columnDef.size\n if (definedSize) {\n // 1. 用户传了固定宽度,使用实际宽度(可能被拖拽调整过)\n return `${column.getSize()}px`\n } else {\n // 2. 用户没传,使用自适应列宽\n const adaptiveWidth = adaptiveColumnWidthMap.value[column.id]\n return adaptiveWidth ? `${adaptiveWidth}px` : `${props.adaptiveColumnWidth}px`\n }\n}\n// #endregion\n\n// #region tanstack-table 核心逻辑\n/** checkbox 列 */\nconst CHECKBOX_COLUMN = computed<ColumnDef<TData>>(() => ({\n id: CHECKBOX_COLUMN_KEY,\n accessorKey: CHECKBOX_COLUMN_KEY,\n size: props.defaultCheckboxColumnWidth,\n header: ({ table }: { table: Table<TData> }) => {\n const selectableRows = table.getRowModel().rows.filter((row) => row.getCanSelect())\n const selectedSelectableRows = selectableRows.filter((row) => row.getIsSelected())\n const checkboxProps: VTableCheckboxProps = {\n indeterminate:\n selectedSelectableRows.length > 0 && selectedSelectableRows.length < selectableRows.length,\n checked: table.getIsAllRowsSelected(),\n onCheckedChange: (e: Event) => {\n table.getToggleAllRowsSelectedHandler()?.(e)\n },\n disabled: false,\n }\n return $slots?.customCheckbox?.(checkboxProps) || h(VCheckbox, checkboxProps)\n },\n cell: ({ row }: { row: Row<TData> }) => {\n const checkboxProps: VTableCheckboxProps = {\n checked: row.getIsSelected(),\n indeterminate: false,\n disabled: !row.getCanSelect(),\n onCheckedChange: (e: Event) => {\n row.getToggleSelectedHandler()?.(e)\n },\n }\n return $slots?.customCheckbox?.(checkboxProps) || h(VCheckbox, checkboxProps)\n },\n}))\n/** expand 列 */\nconst EXPAND_COLUMN: ColumnDef<TData> = {\n id: EXPAND_COLUMN_KEY,\n accessorKey: EXPAND_COLUMN_KEY,\n size: props.defaultExpandColumnWidth,\n header: () => {\n return ''\n },\n cell: ({ row }: { row: Row<TData> }) => {\n const expandProps: VTableExpandIconProps = {\n expand: row.getIsExpanded(),\n onExpandChange: row.toggleExpanded,\n }\n return h(\n 'div',\n {\n class: 'flex items-center justify-center w-full h-full',\n },\n $slots?.customExpandIcon?.(expandProps) || h(ExpandIcon, expandProps),\n )\n },\n}\nconst renderRowKeys = computed(() => {\n return rows.value.map((row) => `${row.id}_${hash(row.original)}`)\n})\nconst columnFilters = defineModel<ColumnFiltersState>('defaultFilter', { default: () => [] })\nconst columnSorts = defineModel<SortingState>('defaultSort', { default: () => [] })\nconst pagination = defineModel<PaginationState>('defaultPagination', {\n default: () => ({ pageIndex: 1, pageSize: 20 }),\n})\nconst expanded = defineModel<ExpandedState>('defaultExpanded', { default: () => ({}) })\nconst selection = defineModel<RowSelectionState>('defaultSelection', { default: () => ({}) })\nconst columnPinning = defineModel<ColumnPinningState>('defaultColumnPinning', {\n default: () => ({}),\n})\nconst columnSizing = defineModel<ColumnSizingState>('defaultColumnSizing', {\n default: () => ({}),\n})\n\nconst handlePageChange = (page: number, pageSize: number) => {\n pagination.value = { pageIndex: page, pageSize }\n triggerTableStateChange()\n}\nconst triggerTableStateChange = () => {\n nextTick(() => {\n props.onTableChange?.({\n pagination: pagination.value,\n sortList: columnSorts.value,\n filterList: columnFilters.value,\n })\n })\n}\nconst hasFixedColumns = computed(() => {\n return columnPinning.value.left?.length || columnPinning.value.right?.length\n})\nconst computedColumns = computed(() => {\n // 传入容器宽度,用于将百分比转换为像素\n const columns = convertToColumnDefList<TData>(props.columns, tableContainerWidth.value)\n if (props.enableExpandRow) {\n columns.unshift(EXPAND_COLUMN)\n }\n if (props.rowSelectionConfig?.enabled) {\n columns.unshift(CHECKBOX_COLUMN.value)\n }\n return columns\n})\nconst tableData = computed(() => buildData(props.data, props.enableExpandRow))\nconst table = useVueTable<TData>({\n state: {\n get columnFilters() {\n return columnFilters.value\n },\n get sorting() {\n return columnSorts.value\n },\n get pagination() {\n return pagination.value\n },\n get rowSelection() {\n return selection.value\n },\n get expanded() {\n return expanded.value\n },\n get columnPinning() {\n // tree 模式开启后,不再支持固定列\n if (props.treeConfig.enabled) {\n return {}\n }\n return columnPinning.value\n },\n get columnSizing() {\n return columnSizing.value\n },\n },\n get data() {\n return tableData.value\n },\n get columns() {\n return computedColumns.value\n },\n getRowId: props.rowKey\n ? (row) => {\n // 如果是可展开行,则让组件内部自己生成\n if (row[EXPAND_ROW_KEY]) {\n return undefined as any\n }\n const id =\n typeof props.rowKey === 'function' ? props.rowKey(row) : row[props.rowKey as keyof TData]\n return String(id)\n }\n : undefined,\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n getPaginationRowModel:\n props.paginationConfig?.mode === 'client' ? getPaginationRowModel() : undefined,\n enableRowSelection: (row) => !props.rowSelectionConfig?.getRowCheckDisabled?.(row.original),\n manualSorting: true, // 手动排序,结合后端\n manualFiltering: true, // 手动筛选,结合后端\n manualPagination: !(props.paginationConfig?.enabled && props.paginationConfig?.mode === 'client'),\n enableColumnPinning: true,\n enableColumnResizing: true,\n columnResizeMode: props.columnResizeMode,\n enableSortingRemoval: props.enableSortingRemoval,\n onSortingChange: (updaterOrValue) => {\n columnSorts.value =\n typeof updaterOrValue === 'function' ? updaterOrValue(columnSorts.value) : updaterOrValue\n triggerTableStateChange()\n },\n onColumnFiltersChange: (updaterOrValue) => {\n columnFilters.value =\n typeof updaterOrValue === 'function' ? updaterOrValue(columnFilters.value) : updaterOrValue\n triggerTableStateChange()\n },\n onPaginationChange: (updaterOrValue) => {\n pagination.value =\n typeof updaterOrValue === 'function' ? updaterOrValue(pagination.value) : updaterOrValue\n triggerTableStateChange()\n },\n onExpandedChange: (updaterOrValue) => {\n expanded.value =\n typeof updaterOrValue === 'function' ? updaterOrValue(expanded.value) : updaterOrValue\n nextTick(() => {\n props.onExpandedRowsChange?.(expanded.value)\n })\n },\n onRowSelectionChange: (updaterOrValue) => {\n selection.value =\n typeof updaterOrValue === 'function' ? updaterOrValue(selection.value) : updaterOrValue\n nextTick(() => {\n props.rowSelectionConfig?.onChange?.(\n table.getSelectedRowModel().rows.map((row) => row.original),\n )\n })\n },\n onColumnSizingChange: (updaterOrValue) => {\n columnSizing.value =\n typeof updaterOrValue === 'function' ? updaterOrValue(columnSizing.value) : updaterOrValue\n nextTick(() => {\n props.onColumnSizingChange?.(columnSizing.value)\n })\n },\n getSubRows: (row) => {\n // 如果开启了自定义可展开行\n if (props.enableExpandRow) {\n return (row as any)[EXPAND_ROW_DATA_INDEX]\n }\n // 反之就是开启了 tree 模式,那直接读取用户提供的字段\n return (row as any)[props.treeConfig!.childrenKey!] as TData[] | undefined\n },\n})\n/** 设置所有行展开 */\nconst setAllRowsExpand = () => {\n expanded.value = getAllRowKeys(props.data, props.rowKey!, props.treeConfig?.childrenKey).reduce(\n (pre: any, cur: string) => {\n pre[cur] = true\n return pre\n },\n {},\n )\n}\nconst PaginationComponent = computed(() => {\n const paginationProps: VTablePaginationProps = {\n pageIndex: pagination.value.pageIndex || 1,\n pageSize: pagination.value.pageSize,\n total:\n props.paginationConfig?.mode === 'client' ? props.data.length : props.paginationConfig.total,\n onPageChange: handlePageChange,\n }\n return () => $slots?.customPagination?.(paginationProps) || h(VPagination, paginationProps)\n})\n// #endregion\n\n// #region 虚拟滚动相关逻辑\nconst rows = computed(() => table.getRowModel().rows)\n// 限制重新渲染的频率 https://github.com/TanStack/virtual/issues/860\nconst virtualRows = ref<VirtualItem[]>([])\nconst rerenderTimer = ref<number | null>(null)\nconst lastRenderTime = ref(0)\nconst rowVirtualizerOptions = computed(() => {\n return {\n count: rows.value.length,\n estimateSize: () => props.rowHeight || 48,\n getScrollElement: () => tableContainerRef.value,\n overscan: 10,\n useScrollendEvent: false,\n useAnimationFrameWithResizeObserver: true,\n onChange: (instance: Virtualizer<HTMLDivElement, HTMLDivElement>) => {\n if (instance.scrollOffset && instance.scrollOffset < 0) return\n if (!instance.isScrolling) {\n virtualRows.value = instance.getVirtualItems()\n return\n }\n // 滚动时 60fps 节流\n const now = performance.now()\n const targetFrameTime = 1000 / 60\n if (now - lastRenderTime.value > targetFrameTime) {\n lastRenderTime.value = now\n if (rerenderTimer.value) {\n cancelAnimationFrame(rerenderTimer.value)\n }\n rerenderTimer.value = requestAnimationFrame(() => {\n virtualRows.value = instance.getVirtualItems()\n rerenderTimer.value = null\n })\n }\n },\n }\n})\nconst rowVirtualizer = useVirtualizer(rowVirtualizerOptions)\n/** 当展开收起时,需要重新计算虚拟滚动的位置 */\nwatch(\n () => rows.value.length,\n () => {\n rowVirtualizer.value.measure()\n },\n { immediate: true },\n)\nfunction measureElement(element?: any, isExpandRow?: boolean) {\n if (!element) return\n if (isExpandRow) {\n rowVirtualizer.value.measureElement(element)\n } else {\n if (props.rowHeight) return\n rowVirtualizer.value.measureElement(element)\n }\n}\nwatchEffect(() => {\n const [lastItem] = [...virtualRows.value].reverse()\n if (!lastItem || !rowVirtualizer.value.isScrolling) {\n return\n }\n // 判断当前最后一项是否是目前总数据长度的最后一项\n if (lastItem.index >= tableData.value?.length - 1 && !props.loading) {\n props.onScrollToBottom?.()\n }\n})\n/** 模拟顶部占位 */\nconst paddingTop = computed(() => (virtualRows.value.length > 0 ? virtualRows.value[0]!.start : 0))\n/** 模拟底部占位 */\nconst paddingBottom = computed(() => {\n if (virtualRows.value.length === 0) return 0\n const lastItem = virtualRows.value[virtualRows.value.length - 1]!\n return rowVirtualizer.value.getTotalSize() - (lastItem.start + lastItem.size)\n})\n// #endregion\n\n// #region 底部提示逻辑\n/** 底部提示行高度 */\nconst showNoMoreTip = computed(() => {\n return tableData.value.length > 0 && !props.loading && props.loadMoreConfig?.showNoMore\n})\nconst noMoreText = computed(() => props.loadMoreConfig?.noMoreText || '没有更多了')\n// #endregion\n\n// #region 表格样式相关逻辑\nconst { cssVariables, themeConfig } = useTheme(props.themeConfig)\n/** 判断单元格是否应该渲染(被合并的单元格返回 false) */\nconst canRenderCell = (\n row: TData,\n column: VTableColumn,\n rowIndex: number,\n colIndex: number,\n): boolean => {\n if (!column) {\n return true\n }\n const attrs = props.customCellAttributes(row, column, rowIndex, colIndex) || {}\n // 当 colspan 或 rowspan 为 0 时,不渲染该单元格\n if (attrs.colspan === 0 || attrs.rowspan === 0) {\n return false\n }\n return true\n}\nconst getColumnStyle = (column: Column<TData>): CSSProperties => {\n const meta = column.columnDef.meta\n const pinPosition = column.getIsPinned()\n const baseStyle: CSSProperties = {\n textAlign: meta?.columnAlign || 'left',\n }\n // 处理固定列逻辑\n if (pinPosition) {\n baseStyle.position = 'sticky'\n if (pinPosition === 'left') {\n baseStyle.left = `${column.getStart('left')}px`\n } else {\n baseStyle.right = `${column.getAfter('right')}px`\n }\n baseStyle.zIndex = themeConfig.value.zIndex?.pinnedColumn\n }\n return baseStyle\n}\n/** 判断是否为固定阴影列 */\nconst isShadowPinnedColumn = (column: Column<TData>): string => {\n const pinPosition = column.getIsPinned()\n if (!pinPosition) return ''\n if (pinPosition === 'left' && column.getIsLastColumn('left')) {\n return 'pinned-left-shadow'\n }\n if (pinPosition === 'right' && column.getIsFirstColumn('right')) {\n return 'pinned-right-shadow'\n }\n return ''\n}\n// #endregion\n\nonMounted(() => {\n initResizeObserver()\n if (props.defaultExpandAllRows) {\n setAllRowsExpand()\n }\n})\n\nonBeforeUnmount(() => {\n if (rerenderTimer.value) {\n cancelAnimationFrame(rerenderTimer.value)\n rerenderTimer.value = null\n }\n if (resizeObserver) {\n resizeObserver.disconnect()\n resizeObserver = null\n }\n})\n\ndefineExpose<VTableInstance<TData>>({\n tanstackTable: table,\n /** 滚动到指定下标 */\n scrollToIndex: async (index: number, behavior: 'auto' | 'smooth' = 'smooth') => {\n nextTick(() => {\n rowVirtualizer.value.scrollToIndex(index, { align: 'start', behavior })\n })\n },\n})\n</script>\n\n<style lang=\"less\" scoped>\n.border-mixin(@position: bottom) {\n border-@{position}: 1px var(--v-table-border-style) var(--v-table-border-color);\n}\n\n.v-table-wrapper {\n display: flex;\n flex-direction: column;\n}\n\n.v-table {\n border-collapse: separate;\n border-spacing: 0;\n table-layout: fixed;\n width: 100%;\n font-size: 14px;\n\n &-header tr {\n &:not(:last-child) th {\n &.checkbox-col,\n &.expand-col {\n border-bottom: none;\n }\n }\n th {\n position: relative;\n font-weight: 600;\n background-color: var(--v-table-header-bg);\n color: var(--v-table-header-color);\n padding: var(--v-table-header-padding);\n .border-mixin(bottom);\n\n &:not(.checkbox-col, .expand-col, :last-child)::before {\n content: '';\n position: absolute;\n top: 50%;\n inset-inline-end: 0;\n width: 1px;\n height: 1.6em;\n background-color: var(--v-table-header-split-color);\n transform: translateY(-50%);\n }\n\n &:first-child {\n border-start-start-radius: var(--v-table-header-border-radius);\n }\n &:last-child {\n border-start-end-radius: var(--v-table-header-border-radius);\n }\n }\n }\n\n &-body tr {\n &.v-table-row-hover:hover td {\n background-color: var(--v-table-row-hover-color);\n }\n\n td {\n background-color: var(--v-table-body-bg);\n .border-mixin(bottom);\n padding: var(--v-table-body-padding);\n color: var(--v-table-body-color);\n }\n }\n\n &.v-table-bordered {\n .v-table-header th {\n &::before {\n display: none;\n }\n .border-mixin(right);\n &:first-child {\n .border-mixin(left);\n }\n }\n .v-table-header tr:first-child > th {\n .border-mixin(top);\n }\n\n .v-table-body td {\n .border-mixin(right);\n &:first-child {\n .border-mixin(left);\n }\n }\n }\n}\n\n// 固定列阴影样式\n.pinned-shadow-base() {\n content: '';\n position: absolute;\n top: 0;\n bottom: -1px;\n width: 30px;\n transition: box-shadow 0.3s;\n pointer-events: none;\n}\n\n.pinned-left-shadow::after {\n .pinned-shadow-base();\n right: 0;\n transform: translateX(100%);\n box-shadow: inset 10px 0 8px -8px rgba(0, 0, 0, 0.15);\n}\n\n.pinned-right-shadow::after {\n .pinned-shadow-base();\n left: 0;\n transform: translateX(-100%);\n box-shadow: inset -10px 0 8px -8px rgba(0, 0, 0, 0.15);\n}\n</style>\n"],"names":["functionalUpdate","updater","input","makeStateUpdater","key","instance","old","isFunction","d","isNumberArray","val","flattenBy","arr","getChildren","flat","recurse","subArr","item","children","memo","getDeps","fn","opts","deps","result","depArgs","depTime","newDeps","dep","index","resultTime","depEndTime","resultEndTime","resultFpsPercentage","pad","str","num","getMemoOptions","tableOptions","debugLevel","onChange","_tableOptions$debugAl","createCell","table","row","column","columnId","getRenderValue","_cell$getValue","cell","feature","createColumn","columnDef","depth","parent","_ref","_resolvedColumnDef$id","resolvedColumnDef","accessorKey","id","accessorFn","originalRow","_result","_column$columns","orderColumns","_column$columns2","leafColumns","debug","createHeader","options","_options$id","header","leafHeaders","recurseHeader","h","Headers","allColumns","left","right","_left$map$filter","_right$map$filter","leftColumns","rightColumns","centerColumns","buildHeaderGroups","_left$map$filter2","orderedLeafColumns","_right$map$filter2","headerGroups","headerGroup","flatHeaders","_header$subHeaders","_header$subHeaders2","_header$subHeaders3","center","_left$0$headers","_left$","_center$0$headers","_center$","_right$0$headers","_right$","columnsToGroup","headerFamily","_headerGroups$0$heade","_headerGroups$","maxDepth","findMaxDepth","columns","createHeaderGroup","headersToGroup","pendingParentHeaders","headerToGroup","latestPendingParentHeader","isLeafHeader","isPlaceholder","bottomHeaders","recurseHeadersForSpans","headers","colSpan","rowSpan","childRowSpans","childColSpan","childRowSpan","minChildRowSpan","createRow","original","rowIndex","subRows","parentId","_row$getValue","parentRows","currentRow","parentRow","allCells","acc","i","ColumnFaceting","includesString","filterValue","_filterValue$toString","search","testFalsey","includesStringSensitive","_row$getValue2","equalsString","_row$getValue3","arrIncludes","_row$getValue4","arrIncludesAll","_row$getValue5","arrIncludesSome","_row$getValue6","equals","weakEquals","inNumberRange","min","max","rowValue","unsafeMin","unsafeMax","parsedMin","parsedMax","temp","filterFns","ColumnFiltering","state","firstRow","value","_table$options$filter","_table$options$filter2","_column$columnDef$ena","_table$options$enable","_table$options$enable2","_table$getState$colum","_table$getState$colum2","_table$getState$colum3","filterFn","previousFilter","newFilter","shouldAutoRemoveFilter","_old$filter","newFilterObj","_old$map","_table","updateFn","_functionalUpdate","filter","defaultState","_table$initialState$c","_table$initialState","sum","_leafRows","childRows","next","nextValue","extent","mean","leafRows","count","median","values","mid","nums","a","b","unique","uniqueCount","_columnId","aggregationFns","ColumnGrouping","props","_toString","_props$getValue","_table$getState$group","_table$getState$group2","canGroup","_table$options$aggreg","_table$options$aggreg2","_table$initialState$g","_row$subRows","grouping","groupedColumnMode","nonGroupingColumns","col","g","ColumnOrdering","position","_getVisibleLeafColumns","_columns$","_columns","columnOrder","orderedColumns","columnOrderCopy","columnsCopy","targetColumnId","foundIndex","getDefaultColumnPinningState","ColumnPinning","columnIds","_old$left3","_old$right3","_old$left","_old$right","_old$left2","_old$right2","_d$columnDef$enablePi","leafColumnIds","isLeft","isRight","leftAndRight","_pinningState$positio","pinningState","_pinningState$left","_pinningState$right","safelyAccessDocument","_document","defaultColumnSizing","getDefaultColumnSizingInfoState","ColumnSizing","_column$columnDef$min","_column$columnDef$max","columnSize","_ref2","_","rest","_header$column$getSiz","prevSiblingHeader","_contextDocument","canResize","e","isTouchStartEvent","startSize","columnSizingStart","clientX","newColumnSizing","updateOffset","eventType","clientXPos","_old$startOffset","_old$startSize","deltaDirection","deltaOffset","deltaPercentage","_ref3","headerSize","onMove","onEnd","contextDocument","mouseEvents","touchEvents","_e$touches$","passiveIfSupported","passiveEventSupported","_table$initialState$c2","_table$getHeaderGroup","_table$getHeaderGroup2","_table$getLeftHeaderG","_table$getLeftHeaderG2","_table$getCenterHeade","_table$getCenterHeade2","_table$getRightHeader","_table$getRightHeader2","passiveSupported","supported","noop","ColumnVisibility","childColumns","c","cells","makeVisibleColumnsMethod","getColumns","_value","obj","_target","GlobalFaceting","GlobalFiltering","_table$getCoreRowMode","_table$options$getCol","globalFilterFn","RowExpanding","registered","queued","_table$options$autoRe","expanded","_table$initialState$e","splitId","_expanded","exists","oldExpanded","rowId","_table$options$getIsR","_table$options$getRow","isFullyExpanded","canExpand","defaultPageIndex","defaultPageSize","getDefaultPaginationState","RowPagination","safeUpdater","_table$initialState$p","pageIndex","maxPageIndex","_table$initialState$p2","_table$initialState$p3","_table$initialState2","pageSize","topRowIndex","_table$options$pageCo","newPageCount","pageCount","pageOptions","_table$options$pageCo2","_table$options$rowCou","getDefaultRowPinningState","RowPinning","includeLeafRows","includeParentRows","leafRowIds","parentRowIds","rowIds","_old$top3","_old$bottom3","_old$top","_old$bottom","_old$top2","_old$bottom2","enableRowPinning","enablePinning","top","bottom","isTop","isBottom","_ref4","_visiblePinnedRowIds$","visiblePinnedRowIds","_ref5","_table$initialState$r","_pinningState$top","_pinningState$bottom","visibleRows","pinnedRowIds","_table$options$keepPi","allRows","topPinnedRowIds","bottomPinnedRowIds","topAndBottom","RowSelection","rowSelection","preGroupedFlatRows","resolvedValue","mutateRowIsSelected","rowModel","selectRowsFn","isAllRowsSelected","paginationFlatRows","isAllPageRowsSelected","_table$getState$rowSe","totalSelected","isSelected","_opts$selectChildren","selectedRowIds","isRowSelected","isSubRowSelected","_table$options$enable3","canSelect","includeChildren","newSelectedFlatRows","newSelectedRowsById","recurseRows","rows","_row$subRows2","selection","_selection$row$id","_row$subRows3","allChildrenSelected","someSelected","subRow","subRowChildrenSelected","reSplitAlphaNumeric","alphanumeric","rowA","rowB","compareAlphanumeric","toString","alphanumericCaseSensitive","text","compareBasic","textCaseSensitive","datetime","basic","aStr","bStr","aa","bb","an","bn","combo","sortingFns","RowSorting","firstRows","isString","_table$options$sortin","_table$options$sortin2","desc","multi","nextSortingOrder","hasManualValue","existingSorting","existingIndex","newSorting","sortAction","nextDesc","_table$options$maxMul","_column$columnDef$sor","firstSortDirection","isSorted","_column$columnDef$ena2","_table$getState$sorti","columnSort","_table$getState$sorti2","_table$getState$sorti3","canSort","_table$initialState$s","builtInFeatures","createTable","_options$_features","_options$initialState","_features","defaultOptions","mergeOptions","initialState","_feature$getInitialSt","queuedTimeout","coreInstance","cb","error","newOptions","searchAll","defaultColumn","_defaultColumn","_props$renderValue$to","_props$renderValue","columnDefs","recurseColumns","groupingColumnDef","flatColumns","getCoreRowModel","data","accessRows","originalRows","_row$originalSubRows","getExpandedRowModel","paginateExpandedRows","expandRows","expandedRows","handleRow","getPaginationRowModel","pagination","flatRows","rowsById","pageStart","pageEnd","paginatedRowModel","trueFn","$PROXY","propTraps","property","receiver","resolveSource","s","mergeProxy","_len","sources","_key","v","keys","FlexRender","defineComponent","getOptionsWithReactiveData","unref","useVueTable","initialOptions","IS_REACTIVE","isRef","resolvedOptions","dataRef","shallowRef","watch","prev","ref","watchEffect","_initialOptions$state","stateProxy","prop","isInitial","memoizedFunction","_a","_b","_c","notUndefined","msg","approxEqual","debounce","targetWindow","ms","timeoutId","args","getRect","element","offsetWidth","offsetHeight","defaultKeyExtractor","defaultRangeExtractor","range","start","end","observeElementRect","handler","rect","width","height","observer","entries","run","entry","box","addEventListenerOptions","supportsScrollend","observeElementOffset","offset","fallback","createHandler","isScrolling","horizontal","isRtl","endHandler","registerScrollendEvent","measureElement","elementScroll","adjustments","behavior","toOffset","Virtualizer","_ro","get","target","opts2","sync","scrollElement","cached","measurements","furthestMeasurementsFound","furthestMeasurements","m","measurement","previousFurthestMeasurement","paddingStart","scrollMargin","getItemKey","enabled","lanes","itemSizeCache","laneLastIndex","cachedLane","lane","prevIndex","prevInLane","furthestMeasurement","measuredSize","size","outerSize","scrollOffset","calculateRange","startIndex","endIndex","rangeExtractor","overscan","node","attributeName","indexStr","prevNode","itemSize","delta","indexes","virtualItems","k","len","findNearestBinarySearch","doc","align","maxOffset","initialAlign","attempts","maxAttempts","tryScroll","currentAlign","offsetInfo","verify","currentOffset","afterInfo","scheduleRetry","endByLane","low","high","getCurrentValue","middle","currentValue","lastIndex","getOffset","endPerLane","pos","startPerLane","useVirtualizerBase","virtualizer","cleanup","el","options2","triggerRef","onScopeDispose","useVirtualizer","computed","serialize","o","#t","r","n","l","z","R","S","t","f","y","j","B","x","p","u","w","M","digest","hash","__props","classNames","onClick","_createElementBlock","_unref","cellRender","cellDef","bodyCellSlotProps","_normalizeStyle","_createElementVNode","_renderSlot","_ctx","_createVNode","ExpandIcon","_normalizeProps","_guardReactiveProps","_openBlock","_createBlock","_resolveDynamicComponent","_mergeProps","_hoisted_1","_normalizeClass","_cache","round","createCoords","oppositeSideMap","oppositeAlignmentMap","clamp","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","yAxisSides","getSideAxis","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","length","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","lrPlacement","rlPlacement","tbPlacement","btPlacement","getSideList","side","isStart","getOppositeAxisPlacements","flipAlignment","direction","list","expandPaddingObject","padding","getPaddingObject","rectToClientRect","computeCoordsFromPlacement","reference","floating","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","detectOverflow","_await$platform$isEle","platform","elements","strategy","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","offsetParent","offsetScale","elementClientRect","computePosition","config","middleware","validMiddleware","statefulPlacement","middlewareData","resetCount","_platform$detectOverf","name","nextX","nextY","reset","flip","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","detectOverflowOptions","initialSideAxis","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","placements","overflow","overflows","overflowsData","sides","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","resetPlacement","_overflowsData$filter2","currentSideAxis","originSides","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","hasWindow","getNodeName","isNode","getWindow","_node$ownerDocument","getDocumentElement","isElement","isHTMLElement","isShadowRoot","invalidOverflowDisplayValues","isOverflowElement","overflowX","overflowY","display","getComputedStyle","tableElements","isTableElement","topLayerSelectors","isTopLayer","selector","transformProperties","willChangeValues","containValues","isContainingBlock","elementOrCss","webkit","isWebKit","css","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","lastTraversableNodeNames","getNodeScroll","getNearestOverflowAncestor","parentNode","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","getFrameElement","getCssDimensions","getComputedStyle$1","hasOffset","shouldFallback","unwrapElement","getScale","domElement","$","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","scale","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","getWindowScrollBarX","leftScroll","getHTMLOffset","documentElement","scroll","htmlRect","convertOffsetParentRelativeRectToViewportRelativeRect","topLayer","offsets","isOffsetParentAnElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","html","body","SCROLLBAR_MAX","getViewportRect","visualViewport","visualViewportBased","windowScrollbarX","bodyStyles","bodyMarginInline","clippingStableScrollbarWidth","absoluteOrFixed","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","cache","cachedResult","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getDimensions","getRectRelativeToOffsetParent","setLeftRTLScrollbarOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","getElementRects","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","offset$1","shift$1","flip$1","mergedOptions","platformWithCache","computePosition$1","isComponentPublicInstance","toValue","source","getDPR","roundByDPR","dpr","useFloating","whileElementsMountedOption","openOption","_toValue","middlewareOption","placementOption","_toValue2","strategyOption","_toValue3","transformOption","_toValue4","referenceElement","floatingElement","isPositioned","floatingStyles","initialStyles","xVal","yVal","whileElementsMountedCleanup","update","open","attach","getCurrentScope","shallowReadonly","referenceRef","floatingRef","handleClickOutside","onMounted","onUnmounted","_Teleport","_Transition","HeaderFilter","type","Object","required","setup","slots","useSlots","columnMeta","meta","_filterModelValue","filterModelValue","getFilterValue","set","confirm","setFilterValue","trigger","customFilterIcon","columnKey","filtered","getIsFiltered","FilterIcon","content","customFilterDropdown","customPopover","onOpenChange","VPopover","default","headerRender","headerDef","currentSort","handleHeaderClick","event","canFilter","handleMouseDown","handleTouchStart","handleDoubleClick","_hoisted_2","_hoisted_3","SorterIcon","$slots","_withCtx","slotProps","CHECKBOX_COLUMN_KEY","EXPAND_COLUMN_KEY","EXPAND_ROW_KEY","EXPAND_ROW_DATA_INDEX","vTableDefaultProps","defaultThemeConfig","useTheme","themeConfig","wrapperClasses","checkboxClasses","handleChange","sizeOptions","_Fragment","_renderList","createLoadingTpl","destroyLoadingTpl","container","indicator","vNode","VLoadingComponent","render","currentPosition","loadingNode","shouldShowLoading","vLoading","binding","selectRef","dropdownWidth","selectClasses","selectedLabel","opt","handleOpenChange","isOpen","handleSelect","option","Popover","$event","_toDisplayString","_hoisted_4","totalPages","pageList","pages","total","current","handlePrev","handlePageChange","handleNext","page","ArrowIcon","_hoisted_5","VSelect","convertToColumnDefList","containerWidth","convertSizeToPixels","buildData","enableExpandRow","getAllRowKeys","rowKey","childrenKey","traverse","items","percentage","_useSlots","tableHeaderRef","paginationRef","tableContainerRef","tableContainerWidth","resizeObserver","initResizeObserver","adaptiveColumnWidthMap","adaptiveColumns","adaptiveCount","fixedWidthTotal","adaptiveMinWidthTotal","tolerance","remainingWidth","avgWidth","remainder","map","getColumnWidth","adaptiveWidth","CHECKBOX_COLUMN","selectableRows","selectedSelectableRows","checkboxProps","VCheckbox","EXPAND_COLUMN","expandProps","renderRowKeys","columnFilters","_useModel","columnSorts","columnPinning","columnSizing","triggerTableStateChange","nextTick","hasFixedColumns","computedColumns","tableData","updaterOrValue","setAllRowsExpand","pre","cur","PaginationComponent","paginationProps","VPagination","virtualRows","rerenderTimer","lastRenderTime","rowVirtualizerOptions","now","targetFrameTime","rowVirtualizer","isExpandRow","lastItem","paddingTop","paddingBottom","showNoMoreTip","noMoreText","cssVariables","canRenderCell","colIndex","attrs","getColumnStyle","pinPosition","baseStyle","isShadowPinnedColumn","onBeforeUnmount","__expose","HeaderCell","vRow","cellIndex","BodyCell","_hoisted_8"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,12,13,14,15,16]}
|