@tanstack/table-core 9.0.0-beta.37 → 9.0.0-beta.38
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/dist/core/headers/buildHeaderGroups.cjs.map +1 -1
- package/dist/core/headers/buildHeaderGroups.d.cts +1 -1
- package/dist/core/headers/buildHeaderGroups.d.ts +1 -1
- package/dist/core/headers/buildHeaderGroups.js.map +1 -1
- package/dist/core/headers/coreHeadersFeature.utils.cjs +7 -7
- package/dist/core/headers/coreHeadersFeature.utils.cjs.map +1 -1
- package/dist/core/headers/coreHeadersFeature.utils.js +7 -7
- package/dist/core/headers/coreHeadersFeature.utils.js.map +1 -1
- package/dist/features/column-ordering/columnOrderingFeature.types.d.cts +5 -5
- package/dist/features/column-ordering/columnOrderingFeature.types.d.ts +5 -5
- package/dist/features/column-ordering/columnOrderingFeature.utils.cjs +6 -6
- package/dist/features/column-ordering/columnOrderingFeature.utils.cjs.map +1 -1
- package/dist/features/column-ordering/columnOrderingFeature.utils.d.cts +3 -3
- package/dist/features/column-ordering/columnOrderingFeature.utils.d.ts +3 -3
- package/dist/features/column-ordering/columnOrderingFeature.utils.js +6 -6
- package/dist/features/column-ordering/columnOrderingFeature.utils.js.map +1 -1
- package/dist/features/column-pinning/columnPinningFeature.cjs +44 -39
- package/dist/features/column-pinning/columnPinningFeature.cjs.map +1 -1
- package/dist/features/column-pinning/columnPinningFeature.d.cts +6 -1
- package/dist/features/column-pinning/columnPinningFeature.d.ts +6 -1
- package/dist/features/column-pinning/columnPinningFeature.js +45 -40
- package/dist/features/column-pinning/columnPinningFeature.js.map +1 -1
- package/dist/features/column-pinning/columnPinningFeature.types.d.cts +49 -38
- package/dist/features/column-pinning/columnPinningFeature.types.d.ts +49 -38
- package/dist/features/column-pinning/columnPinningFeature.utils.cjs +154 -146
- package/dist/features/column-pinning/columnPinningFeature.utils.cjs.map +1 -1
- package/dist/features/column-pinning/columnPinningFeature.utils.d.cts +81 -73
- package/dist/features/column-pinning/columnPinningFeature.utils.d.ts +81 -73
- package/dist/features/column-pinning/columnPinningFeature.utils.js +141 -133
- package/dist/features/column-pinning/columnPinningFeature.utils.js.map +1 -1
- package/dist/features/column-sizing/columnSizingFeature.cjs +4 -4
- package/dist/features/column-sizing/columnSizingFeature.cjs.map +1 -1
- package/dist/features/column-sizing/columnSizingFeature.js +5 -5
- package/dist/features/column-sizing/columnSizingFeature.js.map +1 -1
- package/dist/features/column-sizing/columnSizingFeature.types.d.cts +18 -12
- package/dist/features/column-sizing/columnSizingFeature.types.d.ts +18 -12
- package/dist/features/column-sizing/columnSizingFeature.utils.cjs +24 -20
- package/dist/features/column-sizing/columnSizingFeature.utils.cjs.map +1 -1
- package/dist/features/column-sizing/columnSizingFeature.utils.d.cts +18 -14
- package/dist/features/column-sizing/columnSizingFeature.utils.d.ts +18 -14
- package/dist/features/column-sizing/columnSizingFeature.utils.js +24 -20
- package/dist/features/column-sizing/columnSizingFeature.utils.js.map +1 -1
- package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs +16 -16
- package/dist/features/column-visibility/columnVisibilityFeature.utils.cjs.map +1 -1
- package/dist/features/column-visibility/columnVisibilityFeature.utils.d.cts +3 -3
- package/dist/features/column-visibility/columnVisibilityFeature.utils.d.ts +3 -3
- package/dist/features/column-visibility/columnVisibilityFeature.utils.js +16 -16
- package/dist/features/column-visibility/columnVisibilityFeature.utils.js.map +1 -1
- package/dist/static-functions.cjs +16 -16
- package/dist/static-functions.d.cts +3 -3
- package/dist/static-functions.d.ts +3 -3
- package/dist/static-functions.js +3 -3
- package/package.json +1 -1
- package/src/core/headers/buildHeaderGroups.ts +1 -1
- package/src/core/headers/coreHeadersFeature.utils.ts +7 -7
- package/src/features/column-ordering/columnOrderingFeature.types.ts +5 -5
- package/src/features/column-ordering/columnOrderingFeature.utils.ts +9 -9
- package/src/features/column-pinning/columnPinningFeature.ts +64 -59
- package/src/features/column-pinning/columnPinningFeature.types.ts +49 -38
- package/src/features/column-pinning/columnPinningFeature.utils.ts +163 -155
- package/src/features/column-sizing/columnSizingFeature.ts +6 -6
- package/src/features/column-sizing/columnSizingFeature.types.ts +18 -12
- package/src/features/column-sizing/columnSizingFeature.utils.ts +31 -27
- package/src/features/column-visibility/columnVisibilityFeature.utils.ts +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"columnPinningFeature.utils.js","names":[],"sources":["../../../src/features/column-pinning/columnPinningFeature.utils.ts"],"sourcesContent":["import {\n column_getIsVisible,\n row_getVisibleCells,\n row_getVisibleCellsByColumnId,\n table_getVisibleLeafColumns,\n} from '../column-visibility/columnVisibilityFeature.utils'\nimport { buildHeaderGroups } from '../../core/headers/buildHeaderGroups'\nimport { callMemoOrStaticFn, cloneState } from '../../utils'\nimport type { Header } from '../../types/Header'\nimport type { HeaderGroup } from '../../types/HeaderGroup'\nimport type { Cell } from '../../types/Cell'\nimport type { Row } from '../../types/Row'\nimport type { CellData, RowData, Updater } from '../../types/type-utils'\nimport type { TableFeatures } from '../../types/TableFeatures'\nimport type { Table_Internal } from '../../types/Table'\nimport type { Column, Column_Internal } from '../../types/Column'\nimport type {\n ColumnPinningPosition,\n ColumnPinningState,\n} from './columnPinningFeature.types'\n\n// State\n\n/**\n * Creates the default column pinning state.\n *\n * Both pinning regions start empty. Reset APIs use this value when\n * `defaultState` is `true`.\n *\n * @example\n * ```ts\n * const pinning = getDefaultColumnPinningState()\n * ```\n */\nexport function getDefaultColumnPinningState(): ColumnPinningState {\n return {\n left: [],\n right: [],\n }\n}\n\n// Column APIs\n\n/**\n * Moves this column's leaf column ids into a pinning region.\n *\n * Pinning a group column pins all of its leaves. The leaf ids are first removed\n * from both regions, then appended to the requested `'left'` or `'right'`\n * region. Passing `false` unpins them back to the center.\n *\n * @example\n * ```ts\n * column_pin(column, 'left')\n * ```\n */\nexport function column_pin<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(\n column: Column_Internal<TFeatures, TData, TValue>,\n position: ColumnPinningPosition,\n) {\n // Single pass: collect non-empty leaf-column ids.\n const leafColumns = column.getLeafColumns()\n const columnIds: Array<string> = []\n for (let i = 0; i < leafColumns.length; i++) {\n const id = leafColumns[i]!.id\n if (id) columnIds.push(id)\n }\n\n table_setColumnPinning(column.table, (old) => {\n if (position === 'right') {\n return {\n left: old.left.filter((d) => !columnIds.includes(d)),\n right: [\n ...old.right.filter((d) => !columnIds.includes(d)),\n ...columnIds,\n ],\n }\n }\n\n if (position === 'left') {\n return {\n left: [...old.left.filter((d) => !columnIds.includes(d)), ...columnIds],\n right: old.right.filter((d) => !columnIds.includes(d)),\n }\n }\n\n return {\n left: old.left.filter((d) => !columnIds.includes(d)),\n right: old.right.filter((d) => !columnIds.includes(d)),\n }\n })\n}\n\n/**\n * Checks whether this column or any of its leaf columns can be pinned.\n *\n * Column-level `enablePinning` and table `enableColumnPinning` both default to\n * `true`; at least one leaf column must allow pinning.\n *\n * @example\n * ```ts\n * const canPin = column_getCanPin(column)\n * ```\n */\nexport function column_getCanPin<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n const leafColumns = column.getLeafColumns() as Array<\n Column_Internal<TFeatures, TData, TValue>\n >\n\n return leafColumns.some(\n (leafColumn) =>\n (leafColumn.columnDef.enablePinning ?? true) &&\n (column.table.options.enableColumnPinning ?? true),\n )\n}\n\n/**\n * Reads this column's current pinning region.\n *\n * Group columns report `'left'` or `'right'` when any leaf column is pinned in\n * that region. Unpinned columns return `false`.\n *\n * @example\n * ```ts\n * const position = column_getIsPinned(column)\n * ```\n */\nexport function column_getIsPinned<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(\n column: Column_Internal<TFeatures, TData, TValue>,\n): ColumnPinningPosition | false {\n const leafColumns = column.getLeafColumns()\n\n const { left, right } =\n column.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n\n for (let i = 0; i < leafColumns.length; i++) {\n if (left.includes(leafColumns[i]!.id)) {\n return 'left'\n }\n }\n for (let i = 0; i < leafColumns.length; i++) {\n if (right.includes(leafColumns[i]!.id)) {\n return 'right'\n }\n }\n return false\n}\n\n/**\n * Finds this column's index within its pinned region.\n *\n * Unpinned columns return `0`; pinned columns return their position in\n * `state.columnPinning.left` or `state.columnPinning.right`.\n *\n * @example\n * ```ts\n * const index = column_getPinnedIndex(column)\n * ```\n */\nexport function column_getPinnedIndex<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n const position = column_getIsPinned(column)\n\n return position\n ? (column.table.atoms.columnPinning?.get()?.[position].indexOf(column.id) ??\n -1)\n : 0\n}\n\n// Row APIs\n\n/**\n * Collects visible cells whose columns are not pinned left or right.\n *\n * The result preserves the row's visible-cell order for center columns.\n *\n * @example\n * ```ts\n * const centerCells = row_getCenterVisibleCells(row)\n * ```\n */\nexport function row_getCenterVisibleCells<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(row: Row<TFeatures, TData>) {\n const allCells = callMemoOrStaticFn(\n row,\n 'getVisibleCells',\n row_getVisibleCells,\n )\n const { left, right } =\n row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n if (!left.length && !right.length) {\n return allCells\n }\n const leftAndRight: Array<string> = [...left, ...right]\n return allCells.filter((d) => !leftAndRight.includes(d.column.id))\n}\n\n/**\n * Collects visible cells for columns pinned to the left region.\n *\n * Cells are returned in `state.columnPinning.left` order and are marked with\n * `cell.position = 'left'`.\n *\n * @example\n * ```ts\n * const leftCells = row_getLeftVisibleCells(row)\n * ```\n */\nexport function row_getLeftVisibleCells<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(row: Row<TFeatures, TData>): Array<Cell<TFeatures, TData, unknown>> {\n const { left } =\n row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n if (!left.length) return []\n const allVisibleCells = callMemoOrStaticFn(\n row,\n 'getVisibleCellsByColumnId',\n row_getVisibleCellsByColumnId,\n )\n const cells: Array<Cell<TFeatures, TData, unknown>> = []\n for (let i = 0; i < left.length; i++) {\n const columnId = left[i]!\n const cell = allVisibleCells[columnId]\n if (cell) {\n // Assign position property directly to preserve prototype chain\n ;(cell as any).position = 'left'\n cells.push(cell)\n }\n }\n return cells\n}\n\n/**\n * Collects visible cells for columns pinned to the right region.\n *\n * Cells are returned in `state.columnPinning.right` order and are marked with\n * `cell.position = 'right'`.\n *\n * @example\n * ```ts\n * const rightCells = row_getRightVisibleCells(row)\n * ```\n */\nexport function row_getRightVisibleCells<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(row: Row<TFeatures, TData>) {\n const { right } =\n row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n if (!right.length) return [] as Array<Cell<TFeatures, TData, unknown>>\n const allVisibleCells = callMemoOrStaticFn(\n row,\n 'getVisibleCellsByColumnId',\n row_getVisibleCellsByColumnId,\n )\n const cells: Array<Cell<TFeatures, TData, unknown>> = []\n for (let i = 0; i < right.length; i++) {\n const columnId = right[i]!\n const cell = allVisibleCells[columnId]\n if (cell) {\n // Assign position property directly to preserve prototype chain\n ;(cell as any).position = 'right'\n cells.push(cell)\n }\n }\n return cells\n}\n\n// Table APIs\n\n/**\n * Routes a column pinning updater through the table's pinning change handler.\n *\n * The updater may be a next `{ left, right }` state or a function of the\n * previous state, matching the instance `table.setColumnPinning` behavior.\n *\n * @example\n * ```ts\n * table_setColumnPinning(table, (old) => ({ ...old, left: ['select'] }))\n * ```\n */\nexport function table_setColumnPinning<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n table: Table_Internal<TFeatures, TData>,\n updater: Updater<ColumnPinningState>,\n) {\n table.options.onColumnPinningChange?.(updater)\n}\n\n/**\n * Resets `columnPinning` to the configured initial state or feature default.\n *\n * With no argument, the reset clones `table.initialState.columnPinning` when it\n * exists. Passing `true` ignores initial state and resets to empty left/right\n * arrays.\n *\n * @example\n * ```ts\n * table_resetColumnPinning(table)\n * table_resetColumnPinning(table, true)\n * ```\n */\nexport function table_resetColumnPinning<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>, defaultState?: boolean) {\n table_setColumnPinning(\n table,\n defaultState\n ? getDefaultColumnPinningState()\n : cloneState(\n table.initialState.columnPinning ?? getDefaultColumnPinningState(),\n ),\n )\n}\n\n/**\n * Checks whether any columns are pinned.\n *\n * Omit `position` to check both sides, or pass `'left'`/`'right'` to inspect a\n * single pinning region.\n *\n * @example\n * ```ts\n * const hasPinnedColumns = table_getIsSomeColumnsPinned(table)\n * ```\n */\nexport function table_getIsSomeColumnsPinned<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>, position?: ColumnPinningPosition) {\n const pinningState = table.atoms.columnPinning?.get()\n\n if (!position) {\n return Boolean(pinningState?.left.length || pinningState?.right.length)\n }\n return Boolean(pinningState?.[position].length)\n}\n\n// header groups\n\n/**\n * Builds header groups for visible columns pinned to the left region.\n *\n * The leaf columns are read in `state.columnPinning.left` order and then passed\n * through the same header-group builder as the unpinned table.\n *\n * @example\n * ```ts\n * const headerGroups = table_getLeftHeaderGroups(table)\n * ```\n */\nexport function table_getLeftHeaderGroups<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const allColumns = table.getAllColumns()\n const leafColumnsById = table.getAllLeafColumnsById()\n const { left } =\n table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n\n const orderedLeafColumns: Array<Column<TFeatures, TData, unknown>> = []\n for (let i = 0; i < left.length; i++) {\n const column = leafColumnsById[left[i]!]\n if (\n column &&\n callMemoOrStaticFn(column, 'getIsVisible', column_getIsVisible)\n ) {\n orderedLeafColumns.push(column)\n }\n }\n\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'left')\n}\n\n/**\n * Builds header groups for visible columns pinned to the right region.\n *\n * The leaf columns are read in `state.columnPinning.right` order and then\n * passed through the same header-group builder as the unpinned table.\n *\n * @example\n * ```ts\n * const headerGroups = table_getRightHeaderGroups(table)\n * ```\n */\nexport function table_getRightHeaderGroups<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const allColumns = table.getAllColumns()\n const leafColumnsById = table.getAllLeafColumnsById()\n const { right } =\n table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n\n const orderedLeafColumns: Array<Column<TFeatures, TData, unknown>> = []\n for (let i = 0; i < right.length; i++) {\n const column = leafColumnsById[right[i]!]\n if (\n column &&\n callMemoOrStaticFn(column, 'getIsVisible', column_getIsVisible)\n ) {\n orderedLeafColumns.push(column)\n }\n }\n\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'right')\n}\n\n/**\n * Builds header groups for visible columns that are not pinned.\n *\n * Left- and right-pinned column ids are removed from the visible leaf column\n * list before header groups are built for the center region.\n *\n * @example\n * ```ts\n * const headerGroups = table_getCenterHeaderGroups(table)\n * ```\n */\nexport function table_getCenterHeaderGroups<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n table: Table_Internal<TFeatures, TData>,\n): Array<HeaderGroup<TFeatures, TData>> {\n const allColumns = table.getAllColumns()\n let leafColumns = callMemoOrStaticFn(\n table,\n 'getVisibleLeafColumns',\n table_getVisibleLeafColumns,\n )\n const { left, right } =\n table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n if (left.length || right.length) {\n const leftAndRight: Array<string> = [...left, ...right]\n leafColumns = leafColumns.filter(\n (column) => !leftAndRight.includes(column.id),\n )\n }\n return buildHeaderGroups(allColumns, leafColumns, table, 'center')\n}\n\n// footer groups\n\n/**\n * Builds footer groups for the left pinned region.\n *\n * Footer groups reuse the left header groups in reverse order.\n *\n * @example\n * ```ts\n * const footerGroups = table_getLeftFooterGroups(table)\n * ```\n */\nexport function table_getLeftFooterGroups<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const headerGroups = callMemoOrStaticFn(\n table,\n 'getLeftHeaderGroups',\n table_getLeftHeaderGroups,\n )\n return [...headerGroups].reverse()\n}\n\n/**\n * Builds footer groups for the right pinned region.\n *\n * Footer groups reuse the right header groups in reverse order.\n *\n * @example\n * ```ts\n * const footerGroups = table_getRightFooterGroups(table)\n * ```\n */\nexport function table_getRightFooterGroups<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const headerGroups = callMemoOrStaticFn(\n table,\n 'getRightHeaderGroups',\n table_getRightHeaderGroups,\n )\n return [...headerGroups].reverse()\n}\n\n/**\n * Builds footer groups for the center, unpinned region.\n *\n * Footer groups reuse the center header groups in reverse order.\n *\n * @example\n * ```ts\n * const footerGroups = table_getCenterFooterGroups(table)\n * ```\n */\nexport function table_getCenterFooterGroups<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const headerGroups = callMemoOrStaticFn(\n table,\n 'getCenterHeaderGroups',\n table_getCenterHeaderGroups,\n )\n return [...headerGroups].reverse()\n}\n\n// flat headers\n\n/**\n * Flattens every header from the left pinned header groups.\n *\n * Parent headers and placeholder headers are included.\n *\n * @example\n * ```ts\n * const headers = table_getLeftFlatHeaders(table)\n * ```\n */\nexport function table_getLeftFlatHeaders<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const leftHeaderGroups = callMemoOrStaticFn(\n table,\n 'getLeftHeaderGroups',\n table_getLeftHeaderGroups,\n )\n const result: Array<Header<TFeatures, TData, unknown>> = []\n for (let i = 0; i < leftHeaderGroups.length; i++) {\n const headers = leftHeaderGroups[i]!.headers\n for (let j = 0; j < headers.length; j++) {\n result.push(headers[j]!)\n }\n }\n return result\n}\n\n/**\n * Flattens every header from the right pinned header groups.\n *\n * Parent headers and placeholder headers are included.\n *\n * @example\n * ```ts\n * const headers = table_getRightFlatHeaders(table)\n * ```\n */\nexport function table_getRightFlatHeaders<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const rightHeaderGroups = callMemoOrStaticFn(\n table,\n 'getRightHeaderGroups',\n table_getRightHeaderGroups,\n )\n const result: Array<Header<TFeatures, TData, unknown>> = []\n for (let i = 0; i < rightHeaderGroups.length; i++) {\n const headers = rightHeaderGroups[i]!.headers\n for (let j = 0; j < headers.length; j++) {\n result.push(headers[j]!)\n }\n }\n return result\n}\n\n/**\n * Flattens every header from the center header groups.\n *\n * Parent headers and placeholder headers are included.\n *\n * @example\n * ```ts\n * const headers = table_getCenterFlatHeaders(table)\n * ```\n */\nexport function table_getCenterFlatHeaders<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const centerHeaderGroups = callMemoOrStaticFn(\n table,\n 'getCenterHeaderGroups',\n table_getCenterHeaderGroups,\n )\n const result: Array<Header<TFeatures, TData, unknown>> = []\n for (let i = 0; i < centerHeaderGroups.length; i++) {\n const headers = centerHeaderGroups[i]!.headers\n for (let j = 0; j < headers.length; j++) {\n result.push(headers[j]!)\n }\n }\n return result\n}\n\n// leaf headers\n\n/**\n * Collects leaf headers for the left pinned region.\n *\n * Parent headers are filtered out from the left flat header list.\n *\n * @example\n * ```ts\n * const headers = table_getLeftLeafHeaders(table)\n * ```\n */\nexport function table_getLeftLeafHeaders<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return callMemoOrStaticFn(\n table,\n 'getLeftFlatHeaders',\n table_getLeftFlatHeaders,\n ).filter((header) => !header.subHeaders.length)\n}\n\n/**\n * Collects leaf headers for the right pinned region.\n *\n * Parent headers are filtered out from the right flat header list.\n *\n * @example\n * ```ts\n * const headers = table_getRightLeafHeaders(table)\n * ```\n */\nexport function table_getRightLeafHeaders<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return callMemoOrStaticFn(\n table,\n 'getRightFlatHeaders',\n table_getRightFlatHeaders,\n ).filter((header) => !header.subHeaders.length)\n}\n\n/**\n * Collects leaf headers for the center, unpinned region.\n *\n * Parent headers are filtered out from the center flat header list.\n *\n * @example\n * ```ts\n * const headers = table_getCenterLeafHeaders(table)\n * ```\n */\nexport function table_getCenterLeafHeaders<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return callMemoOrStaticFn(\n table,\n 'getCenterFlatHeaders',\n table_getCenterFlatHeaders,\n ).filter((header) => !header.subHeaders.length)\n}\n\n// leaf columns\n\n/**\n * Resolves leaf columns pinned to the left region.\n *\n * The result follows `state.columnPinning.left` order and skips stale ids that\n * no longer correspond to a leaf column.\n *\n * @example\n * ```ts\n * const columns = table_getLeftLeafColumns(table)\n * ```\n */\nexport function table_getLeftLeafColumns<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const { left } =\n table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n const leafColumnsById = table.getAllLeafColumnsById()\n const result: Array<Column_Internal<TFeatures, TData, unknown>> = []\n for (let i = 0; i < left.length; i++) {\n const column = leafColumnsById[left[i]!]\n if (column) result.push(column)\n }\n return result\n}\n\n/**\n * Resolves leaf columns pinned to the right region.\n *\n * The result follows `state.columnPinning.right` order and skips stale ids that\n * no longer correspond to a leaf column.\n *\n * @example\n * ```ts\n * const columns = table_getRightLeafColumns(table)\n * ```\n */\nexport function table_getRightLeafColumns<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const { right } =\n table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n const leafColumnsById = table.getAllLeafColumnsById()\n const result: Array<Column_Internal<TFeatures, TData, unknown>> = []\n for (let i = 0; i < right.length; i++) {\n const column = leafColumnsById[right[i]!]\n if (column) result.push(column)\n }\n return result\n}\n\n/**\n * Resolves leaf columns that are not pinned to either side.\n *\n * Left- and right-pinned ids are removed from `table.getAllLeafColumns()`.\n *\n * @example\n * ```ts\n * const columns = table_getCenterLeafColumns(table)\n * ```\n */\nexport function table_getCenterLeafColumns<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const { left, right } =\n table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n if (!left.length && !right.length) {\n return table.getAllLeafColumns()\n }\n const leftAndRight: Array<string> = [...left, ...right]\n return table.getAllLeafColumns().filter((d) => !leftAndRight.includes(d.id))\n}\n\n/**\n * Resolves leaf columns for a requested pinning region.\n *\n * Pass `'left'`, `'center'`, or `'right'` for a partition, or pass `false` to\n * read all leaf columns without partitioning.\n *\n * @example\n * ```ts\n * const columns = table_getPinnedLeafColumns(table, 'center')\n * ```\n */\nexport function table_getPinnedLeafColumns<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n table: Table_Internal<TFeatures, TData>,\n position: ColumnPinningPosition | 'center',\n) {\n return !position\n ? table.getAllLeafColumns()\n : position === 'left'\n ? callMemoOrStaticFn(\n table,\n 'getLeftLeafColumns',\n table_getLeftLeafColumns,\n )\n : position === 'right'\n ? callMemoOrStaticFn(\n table,\n 'getRightLeafColumns',\n table_getRightLeafColumns,\n )\n : callMemoOrStaticFn(\n table,\n 'getCenterLeafColumns',\n table_getCenterLeafColumns,\n )\n}\n\n// visible leaf columns\n\n/**\n * Resolves visible leaf columns pinned to the left region.\n *\n * Hidden pinned columns are filtered out after the left pin order is applied.\n *\n * @example\n * ```ts\n * const columns = table_getLeftVisibleLeafColumns(table)\n * ```\n */\nexport function table_getLeftVisibleLeafColumns<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return callMemoOrStaticFn(\n table,\n 'getLeftLeafColumns',\n table_getLeftLeafColumns,\n ).filter((column) =>\n callMemoOrStaticFn(column, 'getIsVisible', column_getIsVisible),\n )\n}\n\n/**\n * Resolves visible leaf columns pinned to the right region.\n *\n * Hidden pinned columns are filtered out after the right pin order is applied.\n *\n * @example\n * ```ts\n * const columns = table_getRightVisibleLeafColumns(table)\n * ```\n */\nexport function table_getRightVisibleLeafColumns<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return callMemoOrStaticFn(\n table,\n 'getRightLeafColumns',\n table_getRightLeafColumns,\n ).filter((column) =>\n callMemoOrStaticFn(column, 'getIsVisible', column_getIsVisible),\n )\n}\n\n/**\n * Resolves visible leaf columns that are not pinned.\n *\n * This is the center partition used by layouts that render pinned columns\n * separately from the scrollable middle region.\n *\n * @example\n * ```ts\n * const columns = table_getCenterVisibleLeafColumns(table)\n * ```\n */\nexport function table_getCenterVisibleLeafColumns<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return callMemoOrStaticFn(\n table,\n 'getCenterLeafColumns',\n table_getCenterLeafColumns,\n ).filter((column) =>\n callMemoOrStaticFn(column, 'getIsVisible', column_getIsVisible),\n )\n}\n\n/**\n * Resolves visible leaf columns for a requested pinning region.\n *\n * Omit `position` to get all visible leaf columns, or pass `'left'`, `'center'`,\n * or `'right'` to get one partition.\n *\n * @example\n * ```ts\n * const columns = table_getPinnedVisibleLeafColumns(table, 'left')\n * ```\n */\nexport function table_getPinnedVisibleLeafColumns<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n table: Table_Internal<TFeatures, TData>,\n position?: ColumnPinningPosition | 'center',\n) {\n return !position\n ? callMemoOrStaticFn(\n table,\n 'getVisibleLeafColumns',\n table_getVisibleLeafColumns,\n )\n : position === 'left'\n ? callMemoOrStaticFn(\n table,\n 'getLeftVisibleLeafColumns',\n table_getLeftVisibleLeafColumns,\n )\n : position === 'right'\n ? callMemoOrStaticFn(\n table,\n 'getRightVisibleLeafColumns',\n table_getRightVisibleLeafColumns,\n )\n : callMemoOrStaticFn(\n table,\n 'getCenterVisibleLeafColumns',\n table_getCenterVisibleLeafColumns,\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"columnPinningFeature.utils.js","names":[],"sources":["../../../src/features/column-pinning/columnPinningFeature.utils.ts"],"sourcesContent":["import {\n column_getIsVisible,\n row_getVisibleCells,\n row_getVisibleCellsByColumnId,\n table_getVisibleLeafColumns,\n} from '../column-visibility/columnVisibilityFeature.utils'\nimport { buildHeaderGroups } from '../../core/headers/buildHeaderGroups'\nimport { callMemoOrStaticFn, cloneState } from '../../utils'\nimport type { Header } from '../../types/Header'\nimport type { HeaderGroup } from '../../types/HeaderGroup'\nimport type { Cell } from '../../types/Cell'\nimport type { Row } from '../../types/Row'\nimport type { CellData, RowData, Updater } from '../../types/type-utils'\nimport type { TableFeatures } from '../../types/TableFeatures'\nimport type { Table_Internal } from '../../types/Table'\nimport type { Column, Column_Internal } from '../../types/Column'\nimport type {\n ColumnPinningPosition,\n ColumnPinningState,\n} from './columnPinningFeature.types'\n\n// State\n\n/**\n * Creates the default column pinning state.\n *\n * Both pinning regions start empty. Reset APIs use this value when\n * `defaultState` is `true`.\n *\n * @example\n * ```ts\n * const pinning = getDefaultColumnPinningState()\n * ```\n */\nexport function getDefaultColumnPinningState(): ColumnPinningState {\n return {\n start: [],\n end: [],\n }\n}\n\n// Column APIs\n\n/**\n * Moves this column's leaf column ids into a pinning region.\n *\n * Pinning a group column pins all of its leaves. The leaf ids are first removed\n * from both regions, then appended to the requested `'start'` or `'end'`\n * region. Passing `false` unpins them back to the center.\n *\n * `start` and `end` are logical positions. In LTR languages/layouts, `start`\n * usually corresponds to left and `end` to right. In RTL languages/layouts,\n * `start` usually corresponds to right and `end` to left.\n *\n * @example\n * ```ts\n * column_pin(column, 'start')\n * ```\n */\nexport function column_pin<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(\n column: Column_Internal<TFeatures, TData, TValue>,\n position: ColumnPinningPosition,\n) {\n // Single pass: collect non-empty leaf-column ids.\n const leafColumns = column.getLeafColumns()\n const columnIds: Array<string> = []\n for (let i = 0; i < leafColumns.length; i++) {\n const id = leafColumns[i]!.id\n if (id) columnIds.push(id)\n }\n\n table_setColumnPinning(column.table, (old) => {\n if (position === 'end') {\n return {\n start: old.start.filter((d) => !columnIds.includes(d)),\n end: [...old.end.filter((d) => !columnIds.includes(d)), ...columnIds],\n }\n }\n\n if (position === 'start') {\n return {\n start: [\n ...old.start.filter((d) => !columnIds.includes(d)),\n ...columnIds,\n ],\n end: old.end.filter((d) => !columnIds.includes(d)),\n }\n }\n\n return {\n start: old.start.filter((d) => !columnIds.includes(d)),\n end: old.end.filter((d) => !columnIds.includes(d)),\n }\n })\n}\n\n/**\n * Checks whether this column or any of its leaf columns can be pinned.\n *\n * Column-level `enablePinning` and table `enableColumnPinning` both default to\n * `true`; at least one leaf column must allow pinning.\n *\n * @example\n * ```ts\n * const canPin = column_getCanPin(column)\n * ```\n */\nexport function column_getCanPin<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n const leafColumns = column.getLeafColumns() as Array<\n Column_Internal<TFeatures, TData, TValue>\n >\n\n return leafColumns.some(\n (leafColumn) =>\n (leafColumn.columnDef.enablePinning ?? true) &&\n (column.table.options.enableColumnPinning ?? true),\n )\n}\n\n/**\n * Reads this column's current pinning region.\n *\n * Group columns report `'start'` or `'end'` when any leaf column is pinned in\n * that region. Unpinned columns return `false`.\n *\n * `start` and `end` are logical positions. In LTR languages/layouts, `start`\n * usually corresponds to left and `end` to right. In RTL languages/layouts,\n * `start` usually corresponds to right and `end` to left.\n *\n * @example\n * ```ts\n * const position = column_getIsPinned(column)\n * ```\n */\nexport function column_getIsPinned<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(\n column: Column_Internal<TFeatures, TData, TValue>,\n): ColumnPinningPosition | false {\n const leafColumns = column.getLeafColumns()\n\n const { start, end } =\n column.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n\n for (let i = 0; i < leafColumns.length; i++) {\n if (start.includes(leafColumns[i]!.id)) {\n return 'start'\n }\n }\n for (let i = 0; i < leafColumns.length; i++) {\n if (end.includes(leafColumns[i]!.id)) {\n return 'end'\n }\n }\n return false\n}\n\n/**\n * Finds this column's index within its pinned region.\n *\n * Unpinned columns return `0`; pinned columns return their position in\n * `state.columnPinning.start` or `state.columnPinning.end`.\n *\n * @example\n * ```ts\n * const index = column_getPinnedIndex(column)\n * ```\n */\nexport function column_getPinnedIndex<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n const position = column_getIsPinned(column)\n\n return position\n ? (column.table.atoms.columnPinning?.get()?.[position].indexOf(column.id) ??\n -1)\n : 0\n}\n\n// Row APIs\n\n/**\n * Collects visible cells whose columns are not pinned start or end.\n *\n * The result preserves the row's visible-cell order for center columns.\n *\n * @example\n * ```ts\n * const centerCells = row_getCenterVisibleCells(row)\n * ```\n */\nexport function row_getCenterVisibleCells<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(row: Row<TFeatures, TData>) {\n const allCells = callMemoOrStaticFn(\n row,\n 'getVisibleCells',\n row_getVisibleCells,\n )\n const { start, end } =\n row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n if (!start.length && !end.length) {\n return allCells\n }\n const startAndEnd: Array<string> = [...start, ...end]\n return allCells.filter((d) => !startAndEnd.includes(d.column.id))\n}\n\n/**\n * Collects visible cells for columns pinned to the start region.\n *\n * Cells are returned in `state.columnPinning.start` order and are marked with\n * `cell.position = 'start'`.\n *\n * @example\n * ```ts\n * const startCells = row_getStartVisibleCells(row)\n * ```\n */\nexport function row_getStartVisibleCells<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(row: Row<TFeatures, TData>): Array<Cell<TFeatures, TData, unknown>> {\n const { start } =\n row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n if (!start.length) return []\n const allVisibleCells = callMemoOrStaticFn(\n row,\n 'getVisibleCellsByColumnId',\n row_getVisibleCellsByColumnId,\n )\n const cells: Array<Cell<TFeatures, TData, unknown>> = []\n for (let i = 0; i < start.length; i++) {\n const columnId = start[i]!\n const cell = allVisibleCells[columnId]\n if (cell) {\n // Assign position property directly to preserve prototype chain\n ;(cell as any).position = 'start'\n cells.push(cell)\n }\n }\n return cells\n}\n\n/**\n * Collects visible cells for columns pinned to the end region.\n *\n * Cells are returned in `state.columnPinning.end` order and are marked with\n * `cell.position = 'end'`.\n *\n * @example\n * ```ts\n * const endCells = row_getEndVisibleCells(row)\n * ```\n */\nexport function row_getEndVisibleCells<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(row: Row<TFeatures, TData>) {\n const { end } =\n row.table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n if (!end.length) return [] as Array<Cell<TFeatures, TData, unknown>>\n const allVisibleCells = callMemoOrStaticFn(\n row,\n 'getVisibleCellsByColumnId',\n row_getVisibleCellsByColumnId,\n )\n const cells: Array<Cell<TFeatures, TData, unknown>> = []\n for (let i = 0; i < end.length; i++) {\n const columnId = end[i]!\n const cell = allVisibleCells[columnId]\n if (cell) {\n // Assign position property directly to preserve prototype chain\n ;(cell as any).position = 'end'\n cells.push(cell)\n }\n }\n return cells\n}\n\n// Table APIs\n\n/**\n * Routes a column pinning updater through the table's pinning change handler.\n *\n * The updater may be a next `{ start, end }` state or a function of the\n * previous state, matching the instance `table.setColumnPinning` behavior.\n *\n * @example\n * ```ts\n * table_setColumnPinning(table, (old) => ({ ...old, start: ['select'] }))\n * ```\n */\nexport function table_setColumnPinning<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n table: Table_Internal<TFeatures, TData>,\n updater: Updater<ColumnPinningState>,\n) {\n table.options.onColumnPinningChange?.(updater)\n}\n\n/**\n * Resets `columnPinning` to the configured initial state or feature default.\n *\n * With no argument, the reset clones `table.initialState.columnPinning` when it\n * exists. Passing `true` ignores initial state and resets to empty start/end\n * arrays.\n *\n * @example\n * ```ts\n * table_resetColumnPinning(table)\n * table_resetColumnPinning(table, true)\n * ```\n */\nexport function table_resetColumnPinning<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>, defaultState?: boolean) {\n table_setColumnPinning(\n table,\n defaultState\n ? getDefaultColumnPinningState()\n : cloneState(\n table.initialState.columnPinning ?? getDefaultColumnPinningState(),\n ),\n )\n}\n\n/**\n * Checks whether any columns are pinned.\n *\n * Omit `position` to check both sides, or pass `'start'`/`'end'` to inspect a\n * single pinning region.\n *\n * @example\n * ```ts\n * const hasPinnedColumns = table_getIsSomeColumnsPinned(table)\n * ```\n */\nexport function table_getIsSomeColumnsPinned<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>, position?: ColumnPinningPosition) {\n const pinningState = table.atoms.columnPinning?.get()\n\n if (!position) {\n return Boolean(pinningState?.start.length || pinningState?.end.length)\n }\n return Boolean(pinningState?.[position].length)\n}\n\n// header groups\n\n/**\n * Builds header groups for visible columns pinned to the start region.\n *\n * The leaf columns are read in `state.columnPinning.start` order and then passed\n * through the same header-group builder as the unpinned table.\n *\n * @example\n * ```ts\n * const headerGroups = table_getStartHeaderGroups(table)\n * ```\n */\nexport function table_getStartHeaderGroups<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const allColumns = table.getAllColumns()\n const leafColumnsById = table.getAllLeafColumnsById()\n const { start } =\n table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n\n const orderedLeafColumns: Array<Column<TFeatures, TData, unknown>> = []\n for (let i = 0; i < start.length; i++) {\n const column = leafColumnsById[start[i]!]\n if (\n column &&\n callMemoOrStaticFn(column, 'getIsVisible', column_getIsVisible)\n ) {\n orderedLeafColumns.push(column)\n }\n }\n\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'start')\n}\n\n/**\n * Builds header groups for visible columns pinned to the end region.\n *\n * The leaf columns are read in `state.columnPinning.end` order and then\n * passed through the same header-group builder as the unpinned table.\n *\n * @example\n * ```ts\n * const headerGroups = table_getEndHeaderGroups(table)\n * ```\n */\nexport function table_getEndHeaderGroups<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const allColumns = table.getAllColumns()\n const leafColumnsById = table.getAllLeafColumnsById()\n const { end } =\n table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n\n const orderedLeafColumns: Array<Column<TFeatures, TData, unknown>> = []\n for (let i = 0; i < end.length; i++) {\n const column = leafColumnsById[end[i]!]\n if (\n column &&\n callMemoOrStaticFn(column, 'getIsVisible', column_getIsVisible)\n ) {\n orderedLeafColumns.push(column)\n }\n }\n\n return buildHeaderGroups(allColumns, orderedLeafColumns, table, 'end')\n}\n\n/**\n * Builds header groups for visible columns that are not pinned.\n *\n * Start- and end-pinned column ids are removed from the visible leaf column\n * list before header groups are built for the center region.\n *\n * @example\n * ```ts\n * const headerGroups = table_getCenterHeaderGroups(table)\n * ```\n */\nexport function table_getCenterHeaderGroups<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n table: Table_Internal<TFeatures, TData>,\n): Array<HeaderGroup<TFeatures, TData>> {\n const allColumns = table.getAllColumns()\n let leafColumns = callMemoOrStaticFn(\n table,\n 'getVisibleLeafColumns',\n table_getVisibleLeafColumns,\n )\n const { start, end } =\n table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n if (start.length || end.length) {\n const startAndEnd: Array<string> = [...start, ...end]\n leafColumns = leafColumns.filter(\n (column) => !startAndEnd.includes(column.id),\n )\n }\n return buildHeaderGroups(allColumns, leafColumns, table, 'center')\n}\n\n// footer groups\n\n/**\n * Builds footer groups for the start pinned region.\n *\n * Footer groups reuse the start header groups in reverse order.\n *\n * @example\n * ```ts\n * const footerGroups = table_getStartFooterGroups(table)\n * ```\n */\nexport function table_getStartFooterGroups<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const headerGroups = callMemoOrStaticFn(\n table,\n 'getStartHeaderGroups',\n table_getStartHeaderGroups,\n )\n return [...headerGroups].reverse()\n}\n\n/**\n * Builds footer groups for the end pinned region.\n *\n * Footer groups reuse the end header groups in reverse order.\n *\n * @example\n * ```ts\n * const footerGroups = table_getEndFooterGroups(table)\n * ```\n */\nexport function table_getEndFooterGroups<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const headerGroups = callMemoOrStaticFn(\n table,\n 'getEndHeaderGroups',\n table_getEndHeaderGroups,\n )\n return [...headerGroups].reverse()\n}\n\n/**\n * Builds footer groups for the center, unpinned region.\n *\n * Footer groups reuse the center header groups in reverse order.\n *\n * @example\n * ```ts\n * const footerGroups = table_getCenterFooterGroups(table)\n * ```\n */\nexport function table_getCenterFooterGroups<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const headerGroups = callMemoOrStaticFn(\n table,\n 'getCenterHeaderGroups',\n table_getCenterHeaderGroups,\n )\n return [...headerGroups].reverse()\n}\n\n// flat headers\n\n/**\n * Flattens every header from the start pinned header groups.\n *\n * Parent headers and placeholder headers are included.\n *\n * @example\n * ```ts\n * const headers = table_getStartFlatHeaders(table)\n * ```\n */\nexport function table_getStartFlatHeaders<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const leftHeaderGroups = callMemoOrStaticFn(\n table,\n 'getStartHeaderGroups',\n table_getStartHeaderGroups,\n )\n const result: Array<Header<TFeatures, TData, unknown>> = []\n for (let i = 0; i < leftHeaderGroups.length; i++) {\n const headers = leftHeaderGroups[i]!.headers\n for (let j = 0; j < headers.length; j++) {\n result.push(headers[j]!)\n }\n }\n return result\n}\n\n/**\n * Flattens every header from the end pinned header groups.\n *\n * Parent headers and placeholder headers are included.\n *\n * @example\n * ```ts\n * const headers = table_getEndFlatHeaders(table)\n * ```\n */\nexport function table_getEndFlatHeaders<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const rightHeaderGroups = callMemoOrStaticFn(\n table,\n 'getEndHeaderGroups',\n table_getEndHeaderGroups,\n )\n const result: Array<Header<TFeatures, TData, unknown>> = []\n for (let i = 0; i < rightHeaderGroups.length; i++) {\n const headers = rightHeaderGroups[i]!.headers\n for (let j = 0; j < headers.length; j++) {\n result.push(headers[j]!)\n }\n }\n return result\n}\n\n/**\n * Flattens every header from the center header groups.\n *\n * Parent headers and placeholder headers are included.\n *\n * @example\n * ```ts\n * const headers = table_getCenterFlatHeaders(table)\n * ```\n */\nexport function table_getCenterFlatHeaders<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const centerHeaderGroups = callMemoOrStaticFn(\n table,\n 'getCenterHeaderGroups',\n table_getCenterHeaderGroups,\n )\n const result: Array<Header<TFeatures, TData, unknown>> = []\n for (let i = 0; i < centerHeaderGroups.length; i++) {\n const headers = centerHeaderGroups[i]!.headers\n for (let j = 0; j < headers.length; j++) {\n result.push(headers[j]!)\n }\n }\n return result\n}\n\n// leaf headers\n\n/**\n * Collects leaf headers for the start pinned region.\n *\n * Parent headers are filtered out from the start flat header list.\n *\n * @example\n * ```ts\n * const headers = table_getStartLeafHeaders(table)\n * ```\n */\nexport function table_getStartLeafHeaders<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return callMemoOrStaticFn(\n table,\n 'getStartFlatHeaders',\n table_getStartFlatHeaders,\n ).filter((header) => !header.subHeaders.length)\n}\n\n/**\n * Collects leaf headers for the end pinned region.\n *\n * Parent headers are filtered out from the end flat header list.\n *\n * @example\n * ```ts\n * const headers = table_getEndLeafHeaders(table)\n * ```\n */\nexport function table_getEndLeafHeaders<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return callMemoOrStaticFn(\n table,\n 'getEndFlatHeaders',\n table_getEndFlatHeaders,\n ).filter((header) => !header.subHeaders.length)\n}\n\n/**\n * Collects leaf headers for the center, unpinned region.\n *\n * Parent headers are filtered out from the center flat header list.\n *\n * @example\n * ```ts\n * const headers = table_getCenterLeafHeaders(table)\n * ```\n */\nexport function table_getCenterLeafHeaders<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return callMemoOrStaticFn(\n table,\n 'getCenterFlatHeaders',\n table_getCenterFlatHeaders,\n ).filter((header) => !header.subHeaders.length)\n}\n\n// leaf columns\n\n/**\n * Resolves leaf columns pinned to the start region.\n *\n * The result follows `state.columnPinning.start` order and skips stale ids that\n * no longer correspond to a leaf column.\n *\n * @example\n * ```ts\n * const columns = table_getStartLeafColumns(table)\n * ```\n */\nexport function table_getStartLeafColumns<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const { start } =\n table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n const leafColumnsById = table.getAllLeafColumnsById()\n const result: Array<Column_Internal<TFeatures, TData, unknown>> = []\n for (let i = 0; i < start.length; i++) {\n const column = leafColumnsById[start[i]!]\n if (column) result.push(column)\n }\n return result\n}\n\n/**\n * Resolves leaf columns pinned to the end region.\n *\n * The result follows `state.columnPinning.end` order and skips stale ids that\n * no longer correspond to a leaf column.\n *\n * @example\n * ```ts\n * const columns = table_getEndLeafColumns(table)\n * ```\n */\nexport function table_getEndLeafColumns<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const { end } =\n table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n const leafColumnsById = table.getAllLeafColumnsById()\n const result: Array<Column_Internal<TFeatures, TData, unknown>> = []\n for (let i = 0; i < end.length; i++) {\n const column = leafColumnsById[end[i]!]\n if (column) result.push(column)\n }\n return result\n}\n\n/**\n * Resolves leaf columns that are not pinned to either logical side.\n *\n * Start- and end-pinned ids are removed from `table.getAllLeafColumns()`.\n *\n * @example\n * ```ts\n * const columns = table_getCenterLeafColumns(table)\n * ```\n */\nexport function table_getCenterLeafColumns<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n const { start, end } =\n table.atoms.columnPinning?.get() ?? getDefaultColumnPinningState()\n if (!start.length && !end.length) {\n return table.getAllLeafColumns()\n }\n const startAndEnd: Array<string> = [...start, ...end]\n return table.getAllLeafColumns().filter((d) => !startAndEnd.includes(d.id))\n}\n\n/**\n * Resolves leaf columns for a requested pinning region.\n *\n * Pass `'start'`, `'center'`, or `'end'` for a partition, or pass `false` to\n * read all leaf columns without partitioning.\n *\n * @example\n * ```ts\n * const columns = table_getPinnedLeafColumns(table, 'center')\n * ```\n */\nexport function table_getPinnedLeafColumns<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n table: Table_Internal<TFeatures, TData>,\n position: ColumnPinningPosition | 'center',\n) {\n return !position\n ? table.getAllLeafColumns()\n : position === 'start'\n ? callMemoOrStaticFn(\n table,\n 'getStartLeafColumns',\n table_getStartLeafColumns,\n )\n : position === 'end'\n ? callMemoOrStaticFn(\n table,\n 'getEndLeafColumns',\n table_getEndLeafColumns,\n )\n : callMemoOrStaticFn(\n table,\n 'getCenterLeafColumns',\n table_getCenterLeafColumns,\n )\n}\n\n// visible leaf columns\n\n/**\n * Resolves visible leaf columns pinned to the start region.\n *\n * Hidden pinned columns are filtered out after the start pin order is applied.\n *\n * @example\n * ```ts\n * const columns = table_getStartVisibleLeafColumns(table)\n * ```\n */\nexport function table_getStartVisibleLeafColumns<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return callMemoOrStaticFn(\n table,\n 'getStartLeafColumns',\n table_getStartLeafColumns,\n ).filter((column) =>\n callMemoOrStaticFn(column, 'getIsVisible', column_getIsVisible),\n )\n}\n\n/**\n * Resolves visible leaf columns pinned to the end region.\n *\n * Hidden pinned columns are filtered out after the end pin order is applied.\n *\n * @example\n * ```ts\n * const columns = table_getEndVisibleLeafColumns(table)\n * ```\n */\nexport function table_getEndVisibleLeafColumns<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return callMemoOrStaticFn(\n table,\n 'getEndLeafColumns',\n table_getEndLeafColumns,\n ).filter((column) =>\n callMemoOrStaticFn(column, 'getIsVisible', column_getIsVisible),\n )\n}\n\n/**\n * Resolves visible leaf columns that are not pinned.\n *\n * This is the center partition used by layouts that render pinned columns\n * separately from the scrollable middle region.\n *\n * @example\n * ```ts\n * const columns = table_getCenterVisibleLeafColumns(table)\n * ```\n */\nexport function table_getCenterVisibleLeafColumns<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return callMemoOrStaticFn(\n table,\n 'getCenterLeafColumns',\n table_getCenterLeafColumns,\n ).filter((column) =>\n callMemoOrStaticFn(column, 'getIsVisible', column_getIsVisible),\n )\n}\n\n/**\n * Resolves visible leaf columns for a requested pinning region.\n *\n * Omit `position` to get all visible leaf columns, or pass `'start'`, `'center'`,\n * or `'end'` to get one partition.\n *\n * @example\n * ```ts\n * const columns = table_getPinnedVisibleLeafColumns(table, 'start')\n * ```\n */\nexport function table_getPinnedVisibleLeafColumns<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n table: Table_Internal<TFeatures, TData>,\n position?: ColumnPinningPosition | 'center',\n) {\n return !position\n ? callMemoOrStaticFn(\n table,\n 'getVisibleLeafColumns',\n table_getVisibleLeafColumns,\n )\n : position === 'start'\n ? callMemoOrStaticFn(\n table,\n 'getStartVisibleLeafColumns',\n table_getStartVisibleLeafColumns,\n )\n : position === 'end'\n ? callMemoOrStaticFn(\n table,\n 'getEndVisibleLeafColumns',\n table_getEndVisibleLeafColumns,\n )\n : callMemoOrStaticFn(\n table,\n 'getCenterVisibleLeafColumns',\n table_getCenterVisibleLeafColumns,\n )\n}\n"],"mappings":"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"}
|
|
@@ -69,16 +69,16 @@ const columnSizingFeature = {
|
|
|
69
69
|
fn: () => require_columnSizingFeature_utils.table_getTotalSize(table),
|
|
70
70
|
memoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]
|
|
71
71
|
},
|
|
72
|
-
|
|
73
|
-
fn: () => require_columnSizingFeature_utils.
|
|
72
|
+
table_getStartTotalSize: {
|
|
73
|
+
fn: () => require_columnSizingFeature_utils.table_getStartTotalSize(table),
|
|
74
74
|
memoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]
|
|
75
75
|
},
|
|
76
76
|
table_getCenterTotalSize: {
|
|
77
77
|
fn: () => require_columnSizingFeature_utils.table_getCenterTotalSize(table),
|
|
78
78
|
memoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]
|
|
79
79
|
},
|
|
80
|
-
|
|
81
|
-
fn: () => require_columnSizingFeature_utils.
|
|
80
|
+
table_getEndTotalSize: {
|
|
81
|
+
fn: () => require_columnSizingFeature_utils.table_getEndTotalSize(table),
|
|
82
82
|
memoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]
|
|
83
83
|
}
|
|
84
84
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"columnSizingFeature.cjs","names":["getDefaultColumnSizingState","getDefaultColumnSizingColumnDef","makeStateUpdater","column_getSize","column_getStart","column_getAfter","column_resetSize","header_getSize","header_getStart","table_getColumnOffsets","table_setColumnSizing","table_resetColumnSizing","table_getTotalSize","
|
|
1
|
+
{"version":3,"file":"columnSizingFeature.cjs","names":["getDefaultColumnSizingState","getDefaultColumnSizingColumnDef","makeStateUpdater","column_getSize","column_getStart","column_getAfter","column_resetSize","header_getSize","header_getStart","table_getColumnOffsets","table_setColumnSizing","table_resetColumnSizing","table_getTotalSize","table_getStartTotalSize","table_getCenterTotalSize","table_getEndTotalSize"],"sources":["../../../src/features/column-sizing/columnSizingFeature.ts"],"sourcesContent":["import {\n assignPrototypeAPIs,\n assignTableAPIs,\n makeStateUpdater,\n} from '../../utils'\nimport {\n column_getAfter,\n column_getSize,\n column_getStart,\n column_resetSize,\n getDefaultColumnSizingColumnDef,\n getDefaultColumnSizingState,\n header_getSize,\n header_getStart,\n table_getCenterTotalSize,\n table_getColumnOffsets,\n table_getEndTotalSize,\n table_getStartTotalSize,\n table_getTotalSize,\n table_resetColumnSizing,\n table_setColumnSizing,\n} from './columnSizingFeature.utils'\nimport type { TableFeature } from '../../types/TableFeatures'\n\n/**\n * Feature that adds column sizing state, defaults, and size measurement APIs.\n */\nexport const columnSizingFeature: TableFeature = {\n getInitialState: (initialState) => {\n return {\n columnSizing: getDefaultColumnSizingState(),\n ...initialState,\n }\n },\n\n getDefaultColumnDef: () => {\n return getDefaultColumnSizingColumnDef()\n },\n\n getDefaultTableOptions: (table) => {\n return {\n onColumnSizingChange: makeStateUpdater('columnSizing', table),\n }\n },\n\n assignColumnPrototype: (prototype, table) => {\n assignPrototypeAPIs('columnSizingFeature', prototype, table, {\n column_getSize: {\n fn: (column) => column_getSize(column),\n memoDeps: (column) => [\n table.options.columns,\n table.atoms.columnSizing?.get()?.[column.id], // just this column's size state\n ],\n },\n // O(1) lookups into the memoized table-level offsets, so no per-column\n // memos here\n column_getStart: {\n fn: (column, position) => column_getStart(column, position),\n },\n column_getAfter: {\n fn: (column, position) => column_getAfter(column, position),\n },\n column_resetSize: {\n fn: (column) => column_resetSize(column),\n },\n })\n },\n\n assignHeaderPrototype: (prototype, table) => {\n assignPrototypeAPIs('columnSizingFeature', prototype, table, {\n header_getSize: {\n fn: (header) => header_getSize(header),\n memoDeps: (header) => [\n table.options.columns,\n header.column.columns.length > 0\n ? table.atoms.columnSizing?.get() // must be all columns (sum child columns)\n : table.atoms.columnSizing?.get()?.[header.column.id], // can just check it's associated column size state\n ],\n },\n header_getStart: {\n fn: (header) => header_getStart(header),\n memoDeps: () => [\n table.options.columns,\n table.atoms.columnSizing?.get(),\n table.atoms.columnOrder?.get(),\n table.atoms.columnPinning?.get(),\n table.atoms.columnVisibility?.get(),\n table.atoms.grouping?.get(),\n table.options.groupedColumnMode,\n ],\n },\n })\n },\n\n constructTableAPIs: (table) => {\n assignTableAPIs('columnSizingFeature', table, {\n table_getColumnOffsets: {\n fn: () => table_getColumnOffsets(table),\n memoDeps: () => [\n table.options.columns,\n table.atoms.columnSizing?.get(),\n table.atoms.columnOrder?.get(),\n table.atoms.columnPinning?.get(),\n table.atoms.columnVisibility?.get(),\n table.atoms.grouping?.get(),\n table.options.groupedColumnMode,\n ],\n },\n table_setColumnSizing: {\n fn: (updater) => table_setColumnSizing(table, updater),\n },\n table_resetColumnSizing: {\n fn: (defaultState) => table_resetColumnSizing(table, defaultState),\n },\n table_getTotalSize: {\n fn: () => table_getTotalSize(table),\n memoDeps: () => [\n table.atoms.columnSizing?.get(),\n table.getHeaderGroups(),\n ],\n },\n table_getStartTotalSize: {\n fn: () => table_getStartTotalSize(table),\n memoDeps: () => [\n table.atoms.columnSizing?.get(),\n table.getHeaderGroups(),\n ],\n },\n table_getCenterTotalSize: {\n fn: () => table_getCenterTotalSize(table),\n memoDeps: () => [\n table.atoms.columnSizing?.get(),\n table.getHeaderGroups(),\n ],\n },\n table_getEndTotalSize: {\n fn: () => table_getEndTotalSize(table),\n memoDeps: () => [\n table.atoms.columnSizing?.get(),\n table.getHeaderGroups(),\n ],\n },\n })\n },\n}\n"],"mappings":";;;;;;;AA2BA,MAAa,sBAAoC;CAC/C,kBAAkB,iBAAiB;EACjC,OAAO;GACL,cAAcA,8DAA4B;GAC1C,GAAG;EACL;CACF;CAEA,2BAA2B;EACzB,OAAOC,kEAAgC;CACzC;CAEA,yBAAyB,UAAU;EACjC,OAAO,EACL,sBAAsBC,+BAAiB,gBAAgB,KAAK,EAC9D;CACF;CAEA,wBAAwB,WAAW,UAAU;EAC3C,kCAAoB,uBAAuB,WAAW,OAAO;GAC3D,gBAAgB;IACd,KAAK,WAAWC,iDAAe,MAAM;IACrC,WAAW,WAAW,CACpB,MAAM,QAAQ,SACd,MAAM,MAAM,cAAc,IAAI,CAAC,GAAG,OAAO,GAC3C;GACF;GAGA,iBAAiB,EACf,KAAK,QAAQ,aAAaC,kDAAgB,QAAQ,QAAQ,EAC5D;GACA,iBAAiB,EACf,KAAK,QAAQ,aAAaC,kDAAgB,QAAQ,QAAQ,EAC5D;GACA,kBAAkB,EAChB,KAAK,WAAWC,mDAAiB,MAAM,EACzC;EACF,CAAC;CACH;CAEA,wBAAwB,WAAW,UAAU;EAC3C,kCAAoB,uBAAuB,WAAW,OAAO;GAC3D,gBAAgB;IACd,KAAK,WAAWC,iDAAe,MAAM;IACrC,WAAW,WAAW,CACpB,MAAM,QAAQ,SACd,OAAO,OAAO,QAAQ,SAAS,IAC3B,MAAM,MAAM,cAAc,IAAI,IAC9B,MAAM,MAAM,cAAc,IAAI,CAAC,GAAG,OAAO,OAAO,GACtD;GACF;GACA,iBAAiB;IACf,KAAK,WAAWC,kDAAgB,MAAM;IACtC,gBAAgB;KACd,MAAM,QAAQ;KACd,MAAM,MAAM,cAAc,IAAI;KAC9B,MAAM,MAAM,aAAa,IAAI;KAC7B,MAAM,MAAM,eAAe,IAAI;KAC/B,MAAM,MAAM,kBAAkB,IAAI;KAClC,MAAM,MAAM,UAAU,IAAI;KAC1B,MAAM,QAAQ;IAChB;GACF;EACF,CAAC;CACH;CAEA,qBAAqB,UAAU;EAC7B,8BAAgB,uBAAuB,OAAO;GAC5C,wBAAwB;IACtB,UAAUC,yDAAuB,KAAK;IACtC,gBAAgB;KACd,MAAM,QAAQ;KACd,MAAM,MAAM,cAAc,IAAI;KAC9B,MAAM,MAAM,aAAa,IAAI;KAC7B,MAAM,MAAM,eAAe,IAAI;KAC/B,MAAM,MAAM,kBAAkB,IAAI;KAClC,MAAM,MAAM,UAAU,IAAI;KAC1B,MAAM,QAAQ;IAChB;GACF;GACA,uBAAuB,EACrB,KAAK,YAAYC,wDAAsB,OAAO,OAAO,EACvD;GACA,yBAAyB,EACvB,KAAK,iBAAiBC,0DAAwB,OAAO,YAAY,EACnE;GACA,oBAAoB;IAClB,UAAUC,qDAAmB,KAAK;IAClC,gBAAgB,CACd,MAAM,MAAM,cAAc,IAAI,GAC9B,MAAM,gBAAgB,CACxB;GACF;GACA,yBAAyB;IACvB,UAAUC,0DAAwB,KAAK;IACvC,gBAAgB,CACd,MAAM,MAAM,cAAc,IAAI,GAC9B,MAAM,gBAAgB,CACxB;GACF;GACA,0BAA0B;IACxB,UAAUC,2DAAyB,KAAK;IACxC,gBAAgB,CACd,MAAM,MAAM,cAAc,IAAI,GAC9B,MAAM,gBAAgB,CACxB;GACF;GACA,uBAAuB;IACrB,UAAUC,wDAAsB,KAAK;IACrC,gBAAgB,CACd,MAAM,MAAM,cAAc,IAAI,GAC9B,MAAM,gBAAgB,CACxB;GACF;EACF,CAAC;CACH;AACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { assignPrototypeAPIs, assignTableAPIs, makeStateUpdater } from "../../utils.js";
|
|
2
|
-
import { column_getAfter, column_getSize, column_getStart, column_resetSize, getDefaultColumnSizingColumnDef, getDefaultColumnSizingState, header_getSize, header_getStart, table_getCenterTotalSize, table_getColumnOffsets,
|
|
2
|
+
import { column_getAfter, column_getSize, column_getStart, column_resetSize, getDefaultColumnSizingColumnDef, getDefaultColumnSizingState, header_getSize, header_getStart, table_getCenterTotalSize, table_getColumnOffsets, table_getEndTotalSize, table_getStartTotalSize, table_getTotalSize, table_resetColumnSizing, table_setColumnSizing } from "./columnSizingFeature.utils.js";
|
|
3
3
|
|
|
4
4
|
//#region src/features/column-sizing/columnSizingFeature.ts
|
|
5
5
|
/**
|
|
@@ -69,16 +69,16 @@ const columnSizingFeature = {
|
|
|
69
69
|
fn: () => table_getTotalSize(table),
|
|
70
70
|
memoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]
|
|
71
71
|
},
|
|
72
|
-
|
|
73
|
-
fn: () =>
|
|
72
|
+
table_getStartTotalSize: {
|
|
73
|
+
fn: () => table_getStartTotalSize(table),
|
|
74
74
|
memoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]
|
|
75
75
|
},
|
|
76
76
|
table_getCenterTotalSize: {
|
|
77
77
|
fn: () => table_getCenterTotalSize(table),
|
|
78
78
|
memoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]
|
|
79
79
|
},
|
|
80
|
-
|
|
81
|
-
fn: () =>
|
|
80
|
+
table_getEndTotalSize: {
|
|
81
|
+
fn: () => table_getEndTotalSize(table),
|
|
82
82
|
memoDeps: () => [table.atoms.columnSizing?.get(), table.getHeaderGroups()]
|
|
83
83
|
}
|
|
84
84
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"columnSizingFeature.js","names":[],"sources":["../../../src/features/column-sizing/columnSizingFeature.ts"],"sourcesContent":["import {\n assignPrototypeAPIs,\n assignTableAPIs,\n makeStateUpdater,\n} from '../../utils'\nimport {\n column_getAfter,\n column_getSize,\n column_getStart,\n column_resetSize,\n getDefaultColumnSizingColumnDef,\n getDefaultColumnSizingState,\n header_getSize,\n header_getStart,\n table_getCenterTotalSize,\n table_getColumnOffsets,\n
|
|
1
|
+
{"version":3,"file":"columnSizingFeature.js","names":[],"sources":["../../../src/features/column-sizing/columnSizingFeature.ts"],"sourcesContent":["import {\n assignPrototypeAPIs,\n assignTableAPIs,\n makeStateUpdater,\n} from '../../utils'\nimport {\n column_getAfter,\n column_getSize,\n column_getStart,\n column_resetSize,\n getDefaultColumnSizingColumnDef,\n getDefaultColumnSizingState,\n header_getSize,\n header_getStart,\n table_getCenterTotalSize,\n table_getColumnOffsets,\n table_getEndTotalSize,\n table_getStartTotalSize,\n table_getTotalSize,\n table_resetColumnSizing,\n table_setColumnSizing,\n} from './columnSizingFeature.utils'\nimport type { TableFeature } from '../../types/TableFeatures'\n\n/**\n * Feature that adds column sizing state, defaults, and size measurement APIs.\n */\nexport const columnSizingFeature: TableFeature = {\n getInitialState: (initialState) => {\n return {\n columnSizing: getDefaultColumnSizingState(),\n ...initialState,\n }\n },\n\n getDefaultColumnDef: () => {\n return getDefaultColumnSizingColumnDef()\n },\n\n getDefaultTableOptions: (table) => {\n return {\n onColumnSizingChange: makeStateUpdater('columnSizing', table),\n }\n },\n\n assignColumnPrototype: (prototype, table) => {\n assignPrototypeAPIs('columnSizingFeature', prototype, table, {\n column_getSize: {\n fn: (column) => column_getSize(column),\n memoDeps: (column) => [\n table.options.columns,\n table.atoms.columnSizing?.get()?.[column.id], // just this column's size state\n ],\n },\n // O(1) lookups into the memoized table-level offsets, so no per-column\n // memos here\n column_getStart: {\n fn: (column, position) => column_getStart(column, position),\n },\n column_getAfter: {\n fn: (column, position) => column_getAfter(column, position),\n },\n column_resetSize: {\n fn: (column) => column_resetSize(column),\n },\n })\n },\n\n assignHeaderPrototype: (prototype, table) => {\n assignPrototypeAPIs('columnSizingFeature', prototype, table, {\n header_getSize: {\n fn: (header) => header_getSize(header),\n memoDeps: (header) => [\n table.options.columns,\n header.column.columns.length > 0\n ? table.atoms.columnSizing?.get() // must be all columns (sum child columns)\n : table.atoms.columnSizing?.get()?.[header.column.id], // can just check it's associated column size state\n ],\n },\n header_getStart: {\n fn: (header) => header_getStart(header),\n memoDeps: () => [\n table.options.columns,\n table.atoms.columnSizing?.get(),\n table.atoms.columnOrder?.get(),\n table.atoms.columnPinning?.get(),\n table.atoms.columnVisibility?.get(),\n table.atoms.grouping?.get(),\n table.options.groupedColumnMode,\n ],\n },\n })\n },\n\n constructTableAPIs: (table) => {\n assignTableAPIs('columnSizingFeature', table, {\n table_getColumnOffsets: {\n fn: () => table_getColumnOffsets(table),\n memoDeps: () => [\n table.options.columns,\n table.atoms.columnSizing?.get(),\n table.atoms.columnOrder?.get(),\n table.atoms.columnPinning?.get(),\n table.atoms.columnVisibility?.get(),\n table.atoms.grouping?.get(),\n table.options.groupedColumnMode,\n ],\n },\n table_setColumnSizing: {\n fn: (updater) => table_setColumnSizing(table, updater),\n },\n table_resetColumnSizing: {\n fn: (defaultState) => table_resetColumnSizing(table, defaultState),\n },\n table_getTotalSize: {\n fn: () => table_getTotalSize(table),\n memoDeps: () => [\n table.atoms.columnSizing?.get(),\n table.getHeaderGroups(),\n ],\n },\n table_getStartTotalSize: {\n fn: () => table_getStartTotalSize(table),\n memoDeps: () => [\n table.atoms.columnSizing?.get(),\n table.getHeaderGroups(),\n ],\n },\n table_getCenterTotalSize: {\n fn: () => table_getCenterTotalSize(table),\n memoDeps: () => [\n table.atoms.columnSizing?.get(),\n table.getHeaderGroups(),\n ],\n },\n table_getEndTotalSize: {\n fn: () => table_getEndTotalSize(table),\n memoDeps: () => [\n table.atoms.columnSizing?.get(),\n table.getHeaderGroups(),\n ],\n },\n })\n },\n}\n"],"mappings":";;;;;;;AA2BA,MAAa,sBAAoC;CAC/C,kBAAkB,iBAAiB;EACjC,OAAO;GACL,cAAc,4BAA4B;GAC1C,GAAG;EACL;CACF;CAEA,2BAA2B;EACzB,OAAO,gCAAgC;CACzC;CAEA,yBAAyB,UAAU;EACjC,OAAO,EACL,sBAAsB,iBAAiB,gBAAgB,KAAK,EAC9D;CACF;CAEA,wBAAwB,WAAW,UAAU;EAC3C,oBAAoB,uBAAuB,WAAW,OAAO;GAC3D,gBAAgB;IACd,KAAK,WAAW,eAAe,MAAM;IACrC,WAAW,WAAW,CACpB,MAAM,QAAQ,SACd,MAAM,MAAM,cAAc,IAAI,CAAC,GAAG,OAAO,GAC3C;GACF;GAGA,iBAAiB,EACf,KAAK,QAAQ,aAAa,gBAAgB,QAAQ,QAAQ,EAC5D;GACA,iBAAiB,EACf,KAAK,QAAQ,aAAa,gBAAgB,QAAQ,QAAQ,EAC5D;GACA,kBAAkB,EAChB,KAAK,WAAW,iBAAiB,MAAM,EACzC;EACF,CAAC;CACH;CAEA,wBAAwB,WAAW,UAAU;EAC3C,oBAAoB,uBAAuB,WAAW,OAAO;GAC3D,gBAAgB;IACd,KAAK,WAAW,eAAe,MAAM;IACrC,WAAW,WAAW,CACpB,MAAM,QAAQ,SACd,OAAO,OAAO,QAAQ,SAAS,IAC3B,MAAM,MAAM,cAAc,IAAI,IAC9B,MAAM,MAAM,cAAc,IAAI,CAAC,GAAG,OAAO,OAAO,GACtD;GACF;GACA,iBAAiB;IACf,KAAK,WAAW,gBAAgB,MAAM;IACtC,gBAAgB;KACd,MAAM,QAAQ;KACd,MAAM,MAAM,cAAc,IAAI;KAC9B,MAAM,MAAM,aAAa,IAAI;KAC7B,MAAM,MAAM,eAAe,IAAI;KAC/B,MAAM,MAAM,kBAAkB,IAAI;KAClC,MAAM,MAAM,UAAU,IAAI;KAC1B,MAAM,QAAQ;IAChB;GACF;EACF,CAAC;CACH;CAEA,qBAAqB,UAAU;EAC7B,gBAAgB,uBAAuB,OAAO;GAC5C,wBAAwB;IACtB,UAAU,uBAAuB,KAAK;IACtC,gBAAgB;KACd,MAAM,QAAQ;KACd,MAAM,MAAM,cAAc,IAAI;KAC9B,MAAM,MAAM,aAAa,IAAI;KAC7B,MAAM,MAAM,eAAe,IAAI;KAC/B,MAAM,MAAM,kBAAkB,IAAI;KAClC,MAAM,MAAM,UAAU,IAAI;KAC1B,MAAM,QAAQ;IAChB;GACF;GACA,uBAAuB,EACrB,KAAK,YAAY,sBAAsB,OAAO,OAAO,EACvD;GACA,yBAAyB,EACvB,KAAK,iBAAiB,wBAAwB,OAAO,YAAY,EACnE;GACA,oBAAoB;IAClB,UAAU,mBAAmB,KAAK;IAClC,gBAAgB,CACd,MAAM,MAAM,cAAc,IAAI,GAC9B,MAAM,gBAAgB,CACxB;GACF;GACA,yBAAyB;IACvB,UAAU,wBAAwB,KAAK;IACvC,gBAAgB,CACd,MAAM,MAAM,cAAc,IAAI,GAC9B,MAAM,gBAAgB,CACxB;GACF;GACA,0BAA0B;IACxB,UAAU,yBAAyB,KAAK;IACxC,gBAAgB,CACd,MAAM,MAAM,cAAc,IAAI,GAC9B,MAAM,gBAAgB,CACxB;GACF;GACA,uBAAuB;IACrB,UAAU,sBAAsB,KAAK;IACrC,gBAAgB,CACd,MAAM,MAAM,cAAc,IAAI,GAC9B,MAAM,gBAAgB,CACxB;GACF;EACF,CAAC;CACH;AACF"}
|
|
@@ -28,13 +28,19 @@ interface ColumnOffsetsByPosition {
|
|
|
28
28
|
*/
|
|
29
29
|
center: ColumnOffsets;
|
|
30
30
|
/**
|
|
31
|
-
* Offsets within the
|
|
31
|
+
* Offsets within the logical start pinned region.
|
|
32
|
+
*
|
|
33
|
+
* In LTR languages/layouts, start usually corresponds to left. In RTL
|
|
34
|
+
* languages/layouts, start usually corresponds to right.
|
|
32
35
|
*/
|
|
33
|
-
|
|
36
|
+
start: ColumnOffsets;
|
|
34
37
|
/**
|
|
35
|
-
* Offsets within the
|
|
38
|
+
* Offsets within the logical end pinned region.
|
|
39
|
+
*
|
|
40
|
+
* In LTR languages/layouts, end usually corresponds to right. In RTL
|
|
41
|
+
* languages/layouts, end usually corresponds to left.
|
|
36
42
|
*/
|
|
37
|
-
|
|
43
|
+
end: ColumnOffsets;
|
|
38
44
|
}
|
|
39
45
|
interface TableOptions_ColumnSizing {
|
|
40
46
|
/**
|
|
@@ -58,13 +64,13 @@ interface Table_ColumnSizing {
|
|
|
58
64
|
*/
|
|
59
65
|
getColumnOffsets: () => ColumnOffsetsByPosition;
|
|
60
66
|
/**
|
|
61
|
-
* Sums the current sizes of visible
|
|
67
|
+
* Sums the current sizes of visible logical start-pinned leaf columns.
|
|
62
68
|
*/
|
|
63
|
-
|
|
69
|
+
getStartTotalSize: () => number;
|
|
64
70
|
/**
|
|
65
|
-
* Sums the current sizes of visible
|
|
71
|
+
* Sums the current sizes of visible logical end-pinned leaf columns.
|
|
66
72
|
*/
|
|
67
|
-
|
|
73
|
+
getEndTotalSize: () => number;
|
|
68
74
|
/**
|
|
69
75
|
* Sums the current sizes of all visible leaf columns.
|
|
70
76
|
*/
|
|
@@ -97,8 +103,8 @@ interface Column_ColumnSizing {
|
|
|
97
103
|
/**
|
|
98
104
|
* Measures the offset from this column's end edge to the end of its region.
|
|
99
105
|
*
|
|
100
|
-
* Pass a pinned region to measure within that region. The value is
|
|
101
|
-
* of visible leaf column sizes after this column.
|
|
106
|
+
* Pass a pinned region to measure within that logical region. The value is
|
|
107
|
+
* the sum of visible leaf column sizes after this column.
|
|
102
108
|
*/
|
|
103
109
|
getAfter: (position?: ColumnPinningPosition | 'center') => number;
|
|
104
110
|
/**
|
|
@@ -109,8 +115,8 @@ interface Column_ColumnSizing {
|
|
|
109
115
|
* Measures the offset from the start of this column's region to its start
|
|
110
116
|
* edge.
|
|
111
117
|
*
|
|
112
|
-
* Pass a pinned region to measure within that region. The value is
|
|
113
|
-
* of visible leaf column sizes before this column.
|
|
118
|
+
* Pass a pinned region to measure within that logical region. The value is
|
|
119
|
+
* the sum of visible leaf column sizes before this column.
|
|
114
120
|
*/
|
|
115
121
|
getStart: (position?: ColumnPinningPosition | 'center') => number;
|
|
116
122
|
/**
|
|
@@ -28,13 +28,19 @@ interface ColumnOffsetsByPosition {
|
|
|
28
28
|
*/
|
|
29
29
|
center: ColumnOffsets;
|
|
30
30
|
/**
|
|
31
|
-
* Offsets within the
|
|
31
|
+
* Offsets within the logical start pinned region.
|
|
32
|
+
*
|
|
33
|
+
* In LTR languages/layouts, start usually corresponds to left. In RTL
|
|
34
|
+
* languages/layouts, start usually corresponds to right.
|
|
32
35
|
*/
|
|
33
|
-
|
|
36
|
+
start: ColumnOffsets;
|
|
34
37
|
/**
|
|
35
|
-
* Offsets within the
|
|
38
|
+
* Offsets within the logical end pinned region.
|
|
39
|
+
*
|
|
40
|
+
* In LTR languages/layouts, end usually corresponds to right. In RTL
|
|
41
|
+
* languages/layouts, end usually corresponds to left.
|
|
36
42
|
*/
|
|
37
|
-
|
|
43
|
+
end: ColumnOffsets;
|
|
38
44
|
}
|
|
39
45
|
interface TableOptions_ColumnSizing {
|
|
40
46
|
/**
|
|
@@ -58,13 +64,13 @@ interface Table_ColumnSizing {
|
|
|
58
64
|
*/
|
|
59
65
|
getColumnOffsets: () => ColumnOffsetsByPosition;
|
|
60
66
|
/**
|
|
61
|
-
* Sums the current sizes of visible
|
|
67
|
+
* Sums the current sizes of visible logical start-pinned leaf columns.
|
|
62
68
|
*/
|
|
63
|
-
|
|
69
|
+
getStartTotalSize: () => number;
|
|
64
70
|
/**
|
|
65
|
-
* Sums the current sizes of visible
|
|
71
|
+
* Sums the current sizes of visible logical end-pinned leaf columns.
|
|
66
72
|
*/
|
|
67
|
-
|
|
73
|
+
getEndTotalSize: () => number;
|
|
68
74
|
/**
|
|
69
75
|
* Sums the current sizes of all visible leaf columns.
|
|
70
76
|
*/
|
|
@@ -97,8 +103,8 @@ interface Column_ColumnSizing {
|
|
|
97
103
|
/**
|
|
98
104
|
* Measures the offset from this column's end edge to the end of its region.
|
|
99
105
|
*
|
|
100
|
-
* Pass a pinned region to measure within that region. The value is
|
|
101
|
-
* of visible leaf column sizes after this column.
|
|
106
|
+
* Pass a pinned region to measure within that logical region. The value is
|
|
107
|
+
* the sum of visible leaf column sizes after this column.
|
|
102
108
|
*/
|
|
103
109
|
getAfter: (position?: ColumnPinningPosition | 'center') => number;
|
|
104
110
|
/**
|
|
@@ -109,8 +115,8 @@ interface Column_ColumnSizing {
|
|
|
109
115
|
* Measures the offset from the start of this column's region to its start
|
|
110
116
|
* edge.
|
|
111
117
|
*
|
|
112
|
-
* Pass a pinned region to measure within that region. The value is
|
|
113
|
-
* of visible leaf column sizes before this column.
|
|
118
|
+
* Pass a pinned region to measure within that logical region. The value is
|
|
119
|
+
* the sum of visible leaf column sizes before this column.
|
|
114
120
|
*/
|
|
115
121
|
getStart: (position?: ColumnPinningPosition | 'center') => number;
|
|
116
122
|
/**
|
|
@@ -84,29 +84,33 @@ function buildColumnOffsets(columns) {
|
|
|
84
84
|
* @example
|
|
85
85
|
* ```ts
|
|
86
86
|
* const offsets = table_getColumnOffsets(table)
|
|
87
|
-
* const
|
|
87
|
+
* const startOffset = offsets.start.starts[column.id]
|
|
88
88
|
* ```
|
|
89
89
|
*/
|
|
90
90
|
function table_getColumnOffsets(table) {
|
|
91
91
|
return {
|
|
92
92
|
all: buildColumnOffsets(require_columnPinningFeature_utils.table_getPinnedVisibleLeafColumns(table)),
|
|
93
93
|
center: buildColumnOffsets(require_columnPinningFeature_utils.table_getPinnedVisibleLeafColumns(table, "center")),
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
start: buildColumnOffsets(require_columnPinningFeature_utils.table_getPinnedVisibleLeafColumns(table, "start")),
|
|
95
|
+
end: buildColumnOffsets(require_columnPinningFeature_utils.table_getPinnedVisibleLeafColumns(table, "end"))
|
|
96
96
|
};
|
|
97
97
|
}
|
|
98
98
|
function toOffsetsKey(position) {
|
|
99
|
-
return position === "
|
|
99
|
+
return position === "start" ? "start" : position === "end" ? "end" : position === "center" ? "center" : "all";
|
|
100
100
|
}
|
|
101
101
|
/**
|
|
102
102
|
* Computes the offset from the start edge of a pinning region to this column.
|
|
103
103
|
*
|
|
104
104
|
* The value is the sum of all previous visible leaf column sizes in the
|
|
105
|
-
* requested `'
|
|
105
|
+
* requested `'start'`, `'center'`, or `'end'` region.
|
|
106
|
+
*
|
|
107
|
+
* `start` and `end` are logical positions. In LTR languages/layouts, `start`
|
|
108
|
+
* usually corresponds to left and `end` to right. In RTL languages/layouts,
|
|
109
|
+
* `start` usually corresponds to right and `end` to left.
|
|
106
110
|
*
|
|
107
111
|
* @example
|
|
108
112
|
* ```ts
|
|
109
|
-
* const
|
|
113
|
+
* const startOffset = column_getStart(column, 'start')
|
|
110
114
|
* ```
|
|
111
115
|
*/
|
|
112
116
|
function column_getStart(column, position) {
|
|
@@ -120,7 +124,7 @@ function column_getStart(column, position) {
|
|
|
120
124
|
*
|
|
121
125
|
* @example
|
|
122
126
|
* ```ts
|
|
123
|
-
* const
|
|
127
|
+
* const endOffset = column_getAfter(column, 'end')
|
|
124
128
|
* ```
|
|
125
129
|
*/
|
|
126
130
|
function column_getAfter(column, position) {
|
|
@@ -218,7 +222,7 @@ function table_resetColumnSizing(table, defaultState) {
|
|
|
218
222
|
/**
|
|
219
223
|
* Sums the rendered size of the full table header row.
|
|
220
224
|
*
|
|
221
|
-
* This includes
|
|
225
|
+
* This includes start, center, and end columns in the main header group.
|
|
222
226
|
*
|
|
223
227
|
* @example
|
|
224
228
|
* ```ts
|
|
@@ -231,17 +235,17 @@ function table_getTotalSize(table) {
|
|
|
231
235
|
}, 0) ?? 0;
|
|
232
236
|
}
|
|
233
237
|
/**
|
|
234
|
-
* Sums the rendered size of the
|
|
238
|
+
* Sums the rendered size of the logical start pinned header region.
|
|
235
239
|
*
|
|
236
|
-
* An empty
|
|
240
|
+
* An empty start pinning region returns `0`.
|
|
237
241
|
*
|
|
238
242
|
* @example
|
|
239
243
|
* ```ts
|
|
240
|
-
* const width =
|
|
244
|
+
* const width = table_getStartTotalSize(table)
|
|
241
245
|
* ```
|
|
242
246
|
*/
|
|
243
|
-
function
|
|
244
|
-
return require_utils.callMemoOrStaticFn(table, "
|
|
247
|
+
function table_getStartTotalSize(table) {
|
|
248
|
+
return require_utils.callMemoOrStaticFn(table, "getStartHeaderGroups", require_columnPinningFeature_utils.table_getStartHeaderGroups)[0]?.headers.reduce((sum, header) => {
|
|
245
249
|
return sum + header_getSize(header);
|
|
246
250
|
}, 0) ?? 0;
|
|
247
251
|
}
|
|
@@ -261,17 +265,17 @@ function table_getCenterTotalSize(table) {
|
|
|
261
265
|
}, 0) ?? 0;
|
|
262
266
|
}
|
|
263
267
|
/**
|
|
264
|
-
* Sums the rendered size of the
|
|
268
|
+
* Sums the rendered size of the logical end pinned header region.
|
|
265
269
|
*
|
|
266
|
-
* An empty
|
|
270
|
+
* An empty end pinning region returns `0`.
|
|
267
271
|
*
|
|
268
272
|
* @example
|
|
269
273
|
* ```ts
|
|
270
|
-
* const width =
|
|
274
|
+
* const width = table_getEndTotalSize(table)
|
|
271
275
|
* ```
|
|
272
276
|
*/
|
|
273
|
-
function
|
|
274
|
-
return require_utils.callMemoOrStaticFn(table, "
|
|
277
|
+
function table_getEndTotalSize(table) {
|
|
278
|
+
return require_utils.callMemoOrStaticFn(table, "getEndHeaderGroups", require_columnPinningFeature_utils.table_getEndHeaderGroups)[0]?.headers.reduce((sum, header) => {
|
|
275
279
|
return sum + header_getSize(header);
|
|
276
280
|
}, 0) ?? 0;
|
|
277
281
|
}
|
|
@@ -287,8 +291,8 @@ exports.header_getSize = header_getSize;
|
|
|
287
291
|
exports.header_getStart = header_getStart;
|
|
288
292
|
exports.table_getCenterTotalSize = table_getCenterTotalSize;
|
|
289
293
|
exports.table_getColumnOffsets = table_getColumnOffsets;
|
|
290
|
-
exports.
|
|
291
|
-
exports.
|
|
294
|
+
exports.table_getEndTotalSize = table_getEndTotalSize;
|
|
295
|
+
exports.table_getStartTotalSize = table_getStartTotalSize;
|
|
292
296
|
exports.table_getTotalSize = table_getTotalSize;
|
|
293
297
|
exports.table_resetColumnSizing = table_resetColumnSizing;
|
|
294
298
|
exports.table_setColumnSizing = table_setColumnSizing;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"columnSizingFeature.utils.cjs","names":["makeObjectMap","hasOwn","callMemoOrStaticFn","table_getPinnedVisibleLeafColumns","cloneState","table_getLeftHeaderGroups","table_getCenterHeaderGroups","table_getRightHeaderGroups"],"sources":["../../../src/features/column-sizing/columnSizingFeature.utils.ts"],"sourcesContent":["import {\n table_getCenterHeaderGroups,\n table_getLeftHeaderGroups,\n table_getPinnedVisibleLeafColumns,\n table_getRightHeaderGroups,\n} from '../column-pinning/columnPinningFeature.utils'\nimport {\n callMemoOrStaticFn,\n cloneState,\n hasOwn,\n makeObjectMap,\n} from '../../utils'\nimport type { ColumnPinningPosition } from '../column-pinning/columnPinningFeature.types'\nimport type { CellData, RowData, Updater } from '../../types/type-utils'\nimport type { TableFeatures } from '../../types/TableFeatures'\nimport type { Table_Internal } from '../../types/Table'\nimport type { Header } from '../../types/Header'\nimport type { Column_Internal } from '../../types/Column'\nimport type {\n ColumnOffsets,\n ColumnOffsetsByPosition,\n ColumnSizingState,\n} from './columnSizingFeature.types'\n\n/**\n * Creates the default committed column sizing state.\n *\n * The feature default is an empty map, so columns fall back to their column def\n * size or the built-in sizing defaults.\n *\n * @example\n * ```ts\n * const sizing = getDefaultColumnSizingState()\n * ```\n */\nexport function getDefaultColumnSizingState(): ColumnSizingState {\n return makeObjectMap()\n}\n\n/**\n * Creates the built-in sizing defaults for column definitions.\n *\n * Columns default to `size: 150`, `minSize: 20`, and\n * `maxSize: Number.MAX_SAFE_INTEGER` unless overridden by column definitions or\n * table defaults.\n *\n * @example\n * ```ts\n * const defaults = getDefaultColumnSizingColumnDef()\n * ```\n */\nexport function getDefaultColumnSizingColumnDef() {\n return {\n size: 150,\n minSize: 20,\n maxSize: Number.MAX_SAFE_INTEGER,\n }\n}\n\n/**\n * Resolves a column's current pixel size.\n *\n * Committed `state.columnSizing[column.id]` wins over `columnDef.size`, then the\n * built-in default size. The result is clamped between min and max size.\n *\n * @example\n * ```ts\n * const width = column_getSize(column)\n * ```\n */\nexport function column_getSize<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): number {\n const defaultSizes = getDefaultColumnSizingColumnDef()\n const columnSizing = column.table.atoms.columnSizing?.get()\n const columnSize =\n columnSizing && hasOwn(columnSizing, column.id)\n ? columnSizing[column.id]\n : undefined\n\n return Math.min(\n Math.max(\n column.columnDef.minSize ?? defaultSizes.minSize,\n columnSize ?? column.columnDef.size ?? defaultSizes.size,\n ),\n column.columnDef.maxSize ?? defaultSizes.maxSize,\n )\n}\n\nfunction buildColumnOffsets<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(columns: Array<Column_Internal<TFeatures, TData, unknown>>): ColumnOffsets {\n const starts = makeObjectMap<number>()\n const afters = makeObjectMap<number>()\n const sizes = new Array<number>(columns.length)\n\n let start = 0\n for (let i = 0; i < columns.length; i++) {\n const column = columns[i]!\n const size = callMemoOrStaticFn(column, 'getSize', column_getSize)\n sizes[i] = size\n starts[column.id] = start\n start += size\n }\n\n let after = 0\n for (let i = columns.length - 1; i >= 0; i--) {\n afters[columns[i]!.id] = after\n after += sizes[i]!\n }\n\n return { starts, afters }\n}\n\n/**\n * Builds start and after offset maps for every visible leaf column, computed\n * once per pinning region plus the full visible list.\n *\n * A single table-level memo of this result backs all `column.getStart()` and\n * `column.getAfter()` calls with O(1) lookups.\n *\n * @example\n * ```ts\n * const offsets = table_getColumnOffsets(table)\n * const leftOffset = offsets.left.starts[column.id]\n * ```\n */\nexport function table_getColumnOffsets<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>): ColumnOffsetsByPosition {\n return {\n all: buildColumnOffsets(\n table_getPinnedVisibleLeafColumns(table) as Array<\n Column_Internal<TFeatures, TData, unknown>\n >,\n ),\n center: buildColumnOffsets(\n table_getPinnedVisibleLeafColumns(table, 'center') as Array<\n Column_Internal<TFeatures, TData, unknown>\n >,\n ),\n left: buildColumnOffsets(\n table_getPinnedVisibleLeafColumns(table, 'left') as Array<\n Column_Internal<TFeatures, TData, unknown>\n >,\n ),\n right: buildColumnOffsets(\n table_getPinnedVisibleLeafColumns(table, 'right') as Array<\n Column_Internal<TFeatures, TData, unknown>\n >,\n ),\n }\n}\n\nfunction toOffsetsKey(\n position: ColumnPinningPosition | 'center' | undefined,\n): keyof ColumnOffsetsByPosition {\n return position === 'left'\n ? 'left'\n : position === 'right'\n ? 'right'\n : position === 'center'\n ? 'center'\n : 'all' // undefined | false use the full visible list\n}\n\n/**\n * Computes the offset from the start edge of a pinning region to this column.\n *\n * The value is the sum of all previous visible leaf column sizes in the\n * requested `'left'`, `'center'`, or `'right'` region.\n *\n * @example\n * ```ts\n * const leftOffset = column_getStart(column, 'left')\n * ```\n */\nexport function column_getStart<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(\n column: Column_Internal<TFeatures, TData, TValue>,\n position?: ColumnPinningPosition | 'center',\n): number {\n const offsets = callMemoOrStaticFn(\n column.table,\n 'getColumnOffsets',\n table_getColumnOffsets,\n )\n return offsets[toOffsetsKey(position)].starts[column.id] ?? 0\n}\n\n/**\n * Computes the offset from the end edge of a pinning region after this column.\n *\n * The value is the sum of all following visible leaf column sizes in the\n * requested region.\n *\n * @example\n * ```ts\n * const rightOffset = column_getAfter(column, 'right')\n * ```\n */\nexport function column_getAfter<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(\n column: Column_Internal<TFeatures, TData, TValue>,\n position?: ColumnPinningPosition | 'center',\n): number {\n const offsets = callMemoOrStaticFn(\n column.table,\n 'getColumnOffsets',\n table_getColumnOffsets,\n )\n return offsets[toOffsetsKey(position)].afters[column.id] ?? 0\n}\n\n/**\n * Removes this column's committed size override.\n *\n * After reset, the column resolves size from `columnDef.size` or built-in\n * defaults again.\n *\n * @example\n * ```ts\n * column_resetSize(column)\n * ```\n */\nexport function column_resetSize<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n table_setColumnSizing(column.table, (old) => {\n const rest = makeObjectMap<number>()\n const columnIds = Object.keys(old)\n for (let i = 0; i < columnIds.length; i++) {\n const columnId = columnIds[i]!\n if (columnId !== column.id) {\n rest[columnId] = old[columnId]!\n }\n }\n return rest\n })\n}\n\n/**\n * Computes a header's rendered size from its leaf headers.\n *\n * Group headers sum the sizes of all descendant leaf columns. Leaf headers use\n * their column's current size.\n *\n * @example\n * ```ts\n * const width = header_getSize(header)\n * ```\n */\nexport function header_getSize<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(header: Header<TFeatures, TData, TValue>) {\n let sum = 0\n\n const recurse = (h: Header<TFeatures, TData, TValue>) => {\n if (h.subHeaders.length) {\n h.subHeaders.forEach(recurse)\n } else {\n sum += column_getSize(h.column)\n }\n }\n\n recurse(header)\n\n return sum\n}\n\n/**\n * Computes a header's offset from the start of its header group.\n *\n * The offset is the previous sibling header's start plus size, or `0` for the\n * first header in the group.\n *\n * @example\n * ```ts\n * const offset = header_getStart(header)\n * ```\n */\nexport function header_getStart<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(header: Header<TFeatures, TData, TValue>): number {\n if (header.index > 0) {\n const prevSiblingHeader = header.headerGroup?.headers[header.index - 1]\n if (prevSiblingHeader) {\n return (\n callMemoOrStaticFn(prevSiblingHeader, 'getStart', header_getStart) +\n callMemoOrStaticFn(prevSiblingHeader, 'getSize', header_getSize)\n )\n }\n }\n\n return 0\n}\n\n// Table APIs\n\n/**\n * Routes a committed column sizing updater through the table's sizing handler.\n *\n * The updater may be a next size map or a function of the previous map,\n * matching the instance `table.setColumnSizing` behavior.\n *\n * @example\n * ```ts\n * table_setColumnSizing(table, (old) => ({ ...old, age: 96 }))\n * ```\n */\nexport function table_setColumnSizing<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n table: Table_Internal<TFeatures, TData>,\n updater: Updater<ColumnSizingState>,\n) {\n table.options.onColumnSizingChange?.(updater)\n}\n\n/**\n * Resets `columnSizing` to the configured initial state or feature default.\n *\n * With no argument, the reset clones `table.initialState.columnSizing` when it\n * exists. Passing `true` ignores initial state and resets to `{}`.\n *\n * @example\n * ```ts\n * table_resetColumnSizing(table)\n * table_resetColumnSizing(table, true)\n * ```\n */\nexport function table_resetColumnSizing<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>, defaultState?: boolean) {\n table_setColumnSizing(\n table,\n defaultState\n ? makeObjectMap()\n : Object.assign(\n makeObjectMap<number>(),\n cloneState(table.initialState.columnSizing ?? {}),\n ),\n )\n}\n\n/**\n * Sums the rendered size of the full table header row.\n *\n * This includes left, center, and right columns in the main header group.\n *\n * @example\n * ```ts\n * const width = table_getTotalSize(table)\n * ```\n */\nexport function table_getTotalSize<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return (\n table.getHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header_getSize(header)\n }, 0) ?? 0\n )\n}\n\n/**\n * Sums the rendered size of the left pinned header region.\n *\n * An empty left pinning region returns `0`.\n *\n * @example\n * ```ts\n * const width = table_getLeftTotalSize(table)\n * ```\n */\nexport function table_getLeftTotalSize<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return (\n callMemoOrStaticFn(\n table,\n 'getLeftHeaderGroups',\n table_getLeftHeaderGroups,\n )[0]?.headers.reduce((sum: number, header: Header<TFeatures, TData>) => {\n return sum + header_getSize(header)\n }, 0) ?? 0\n )\n}\n\n/**\n * Sums the rendered size of the center, unpinned header region.\n *\n * An empty center region returns `0`.\n *\n * @example\n * ```ts\n * const width = table_getCenterTotalSize(table)\n * ```\n */\nexport function table_getCenterTotalSize<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return (\n callMemoOrStaticFn(\n table,\n 'getCenterHeaderGroups',\n table_getCenterHeaderGroups,\n )[0]?.headers.reduce((sum: number, header: Header<TFeatures, TData>) => {\n return sum + header_getSize(header)\n }, 0) ?? 0\n )\n}\n\n/**\n * Sums the rendered size of the right pinned header region.\n *\n * An empty right pinning region returns `0`.\n *\n * @example\n * ```ts\n * const width = table_getRightTotalSize(table)\n * ```\n */\nexport function table_getRightTotalSize<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return (\n callMemoOrStaticFn(\n table,\n 'getRightHeaderGroups',\n table_getRightHeaderGroups,\n )[0]?.headers.reduce((sum: number, header: Header<TFeatures, TData>) => {\n return sum + header_getSize(header)\n }, 0) ?? 0\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;AAmCA,SAAgB,8BAAiD;CAC/D,OAAOA,4BAAc;AACvB;;;;;;;;;;;;;AAcA,SAAgB,kCAAkC;CAChD,OAAO;EACL,MAAM;EACN,SAAS;EACT,SAAS,OAAO;CAClB;AACF;;;;;;;;;;;;AAaA,SAAgB,eAId,QAA2D;CAC3D,MAAM,eAAe,gCAAgC;CACrD,MAAM,eAAe,OAAO,MAAM,MAAM,cAAc,IAAI;CAC1D,MAAM,aACJ,gBAAgBC,qBAAO,cAAc,OAAO,EAAE,IAC1C,aAAa,OAAO,MACpB;CAEN,OAAO,KAAK,IACV,KAAK,IACH,OAAO,UAAU,WAAW,aAAa,SACzC,cAAc,OAAO,UAAU,QAAQ,aAAa,IACtD,GACA,OAAO,UAAU,WAAW,aAAa,OAC3C;AACF;AAEA,SAAS,mBAGP,SAA2E;CAC3E,MAAM,SAASD,4BAAsB;CACrC,MAAM,SAASA,4BAAsB;CACrC,MAAM,QAAQ,IAAI,MAAc,QAAQ,MAAM;CAE9C,IAAI,QAAQ;CACZ,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;EACvC,MAAM,SAAS,QAAQ;EACvB,MAAM,OAAOE,iCAAmB,QAAQ,WAAW,cAAc;EACjE,MAAM,KAAK;EACX,OAAO,OAAO,MAAM;EACpB,SAAS;CACX;CAEA,IAAI,QAAQ;CACZ,KAAK,IAAI,IAAI,QAAQ,SAAS,GAAG,KAAK,GAAG,KAAK;EAC5C,OAAO,QAAQ,EAAE,CAAE,MAAM;EACzB,SAAS,MAAM;CACjB;CAEA,OAAO;EAAE;EAAQ;CAAO;AAC1B;;;;;;;;;;;;;;AAeA,SAAgB,uBAGd,OAAkE;CAClE,OAAO;EACL,KAAK,mBACHC,qEAAkC,KAAK,CAGzC;EACA,QAAQ,mBACNA,qEAAkC,OAAO,QAAQ,CAGnD;EACA,MAAM,mBACJA,qEAAkC,OAAO,MAAM,CAGjD;EACA,OAAO,mBACLA,qEAAkC,OAAO,OAAO,CAGlD;CACF;AACF;AAEA,SAAS,aACP,UAC+B;CAC/B,OAAO,aAAa,SAChB,SACA,aAAa,UACX,UACA,aAAa,WACX,WACA;AACV;;;;;;;;;;;;AAaA,SAAgB,gBAKd,QACA,UACQ;CAMR,OALgBD,iCACd,OAAO,OACP,oBACA,sBAEW,CAAC,CAAC,aAAa,QAAQ,EAAE,CAAC,OAAO,OAAO,OAAO;AAC9D;;;;;;;;;;;;AAaA,SAAgB,gBAKd,QACA,UACQ;CAMR,OALgBA,iCACd,OAAO,OACP,oBACA,sBAEW,CAAC,CAAC,aAAa,QAAQ,EAAE,CAAC,OAAO,OAAO,OAAO;AAC9D;;;;;;;;;;;;AAaA,SAAgB,iBAId,QAAmD;CACnD,sBAAsB,OAAO,QAAQ,QAAQ;EAC3C,MAAM,OAAOF,4BAAsB;EACnC,MAAM,YAAY,OAAO,KAAK,GAAG;EACjC,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;GACzC,MAAM,WAAW,UAAU;GAC3B,IAAI,aAAa,OAAO,IACtB,KAAK,YAAY,IAAI;EAEzB;EACA,OAAO;CACT,CAAC;AACH;;;;;;;;;;;;AAaA,SAAgB,eAId,QAA0C;CAC1C,IAAI,MAAM;CAEV,MAAM,WAAW,MAAwC;EACvD,IAAI,EAAE,WAAW,QACf,EAAE,WAAW,QAAQ,OAAO;OAE5B,OAAO,eAAe,EAAE,MAAM;CAElC;CAEA,QAAQ,MAAM;CAEd,OAAO;AACT;;;;;;;;;;;;AAaA,SAAgB,gBAId,QAAkD;CAClD,IAAI,OAAO,QAAQ,GAAG;EACpB,MAAM,oBAAoB,OAAO,aAAa,QAAQ,OAAO,QAAQ;EACrE,IAAI,mBACF,OACEE,iCAAmB,mBAAmB,YAAY,eAAe,IACjEA,iCAAmB,mBAAmB,WAAW,cAAc;CAGrE;CAEA,OAAO;AACT;;;;;;;;;;;;AAeA,SAAgB,sBAId,OACA,SACA;CACA,MAAM,QAAQ,uBAAuB,OAAO;AAC9C;;;;;;;;;;;;;AAcA,SAAgB,wBAGd,OAAyC,cAAwB;CACjE,sBACE,OACA,eACIF,4BAAc,IACd,OAAO,OACLA,4BAAsB,GACtBI,yBAAW,MAAM,aAAa,gBAAgB,CAAC,CAAC,CAClD,CACN;AACF;;;;;;;;;;;AAYA,SAAgB,mBAGd,OAAyC;CACzC,OACE,MAAM,gBAAgB,CAAC,CAAC,EAAE,EAAE,QAAQ,QAAQ,KAAK,WAAW;EAC1D,OAAO,MAAM,eAAe,MAAM;CACpC,GAAG,CAAC,KAAK;AAEb;;;;;;;;;;;AAYA,SAAgB,uBAGd,OAAyC;CACzC,OACEF,iCACE,OACA,uBACAG,4DACF,CAAC,CAAC,EAAE,EAAE,QAAQ,QAAQ,KAAa,WAAqC;EACtE,OAAO,MAAM,eAAe,MAAM;CACpC,GAAG,CAAC,KAAK;AAEb;;;;;;;;;;;AAYA,SAAgB,yBAGd,OAAyC;CACzC,OACEH,iCACE,OACA,yBACAI,8DACF,CAAC,CAAC,EAAE,EAAE,QAAQ,QAAQ,KAAa,WAAqC;EACtE,OAAO,MAAM,eAAe,MAAM;CACpC,GAAG,CAAC,KAAK;AAEb;;;;;;;;;;;AAYA,SAAgB,wBAGd,OAAyC;CACzC,OACEJ,iCACE,OACA,wBACAK,6DACF,CAAC,CAAC,EAAE,EAAE,QAAQ,QAAQ,KAAa,WAAqC;EACtE,OAAO,MAAM,eAAe,MAAM;CACpC,GAAG,CAAC,KAAK;AAEb"}
|
|
1
|
+
{"version":3,"file":"columnSizingFeature.utils.cjs","names":["makeObjectMap","hasOwn","callMemoOrStaticFn","table_getPinnedVisibleLeafColumns","cloneState","table_getStartHeaderGroups","table_getCenterHeaderGroups","table_getEndHeaderGroups"],"sources":["../../../src/features/column-sizing/columnSizingFeature.utils.ts"],"sourcesContent":["import {\n table_getCenterHeaderGroups,\n table_getEndHeaderGroups,\n table_getPinnedVisibleLeafColumns,\n table_getStartHeaderGroups,\n} from '../column-pinning/columnPinningFeature.utils'\nimport {\n callMemoOrStaticFn,\n cloneState,\n hasOwn,\n makeObjectMap,\n} from '../../utils'\nimport type { ColumnPinningPosition } from '../column-pinning/columnPinningFeature.types'\nimport type { CellData, RowData, Updater } from '../../types/type-utils'\nimport type { TableFeatures } from '../../types/TableFeatures'\nimport type { Table_Internal } from '../../types/Table'\nimport type { Header } from '../../types/Header'\nimport type { Column_Internal } from '../../types/Column'\nimport type {\n ColumnOffsets,\n ColumnOffsetsByPosition,\n ColumnSizingState,\n} from './columnSizingFeature.types'\n\n/**\n * Creates the default committed column sizing state.\n *\n * The feature default is an empty map, so columns fall back to their column def\n * size or the built-in sizing defaults.\n *\n * @example\n * ```ts\n * const sizing = getDefaultColumnSizingState()\n * ```\n */\nexport function getDefaultColumnSizingState(): ColumnSizingState {\n return makeObjectMap()\n}\n\n/**\n * Creates the built-in sizing defaults for column definitions.\n *\n * Columns default to `size: 150`, `minSize: 20`, and\n * `maxSize: Number.MAX_SAFE_INTEGER` unless overridden by column definitions or\n * table defaults.\n *\n * @example\n * ```ts\n * const defaults = getDefaultColumnSizingColumnDef()\n * ```\n */\nexport function getDefaultColumnSizingColumnDef() {\n return {\n size: 150,\n minSize: 20,\n maxSize: Number.MAX_SAFE_INTEGER,\n }\n}\n\n/**\n * Resolves a column's current pixel size.\n *\n * Committed `state.columnSizing[column.id]` wins over `columnDef.size`, then the\n * built-in default size. The result is clamped between min and max size.\n *\n * @example\n * ```ts\n * const width = column_getSize(column)\n * ```\n */\nexport function column_getSize<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>): number {\n const defaultSizes = getDefaultColumnSizingColumnDef()\n const columnSizing = column.table.atoms.columnSizing?.get()\n const columnSize =\n columnSizing && hasOwn(columnSizing, column.id)\n ? columnSizing[column.id]\n : undefined\n\n return Math.min(\n Math.max(\n column.columnDef.minSize ?? defaultSizes.minSize,\n columnSize ?? column.columnDef.size ?? defaultSizes.size,\n ),\n column.columnDef.maxSize ?? defaultSizes.maxSize,\n )\n}\n\nfunction buildColumnOffsets<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(columns: Array<Column_Internal<TFeatures, TData, unknown>>): ColumnOffsets {\n const starts = makeObjectMap<number>()\n const afters = makeObjectMap<number>()\n const sizes = new Array<number>(columns.length)\n\n let start = 0\n for (let i = 0; i < columns.length; i++) {\n const column = columns[i]!\n const size = callMemoOrStaticFn(column, 'getSize', column_getSize)\n sizes[i] = size\n starts[column.id] = start\n start += size\n }\n\n let after = 0\n for (let i = columns.length - 1; i >= 0; i--) {\n afters[columns[i]!.id] = after\n after += sizes[i]!\n }\n\n return { starts, afters }\n}\n\n/**\n * Builds start and after offset maps for every visible leaf column, computed\n * once per pinning region plus the full visible list.\n *\n * A single table-level memo of this result backs all `column.getStart()` and\n * `column.getAfter()` calls with O(1) lookups.\n *\n * @example\n * ```ts\n * const offsets = table_getColumnOffsets(table)\n * const startOffset = offsets.start.starts[column.id]\n * ```\n */\nexport function table_getColumnOffsets<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>): ColumnOffsetsByPosition {\n return {\n all: buildColumnOffsets(\n table_getPinnedVisibleLeafColumns(table) as Array<\n Column_Internal<TFeatures, TData, unknown>\n >,\n ),\n center: buildColumnOffsets(\n table_getPinnedVisibleLeafColumns(table, 'center') as Array<\n Column_Internal<TFeatures, TData, unknown>\n >,\n ),\n start: buildColumnOffsets(\n table_getPinnedVisibleLeafColumns(table, 'start') as Array<\n Column_Internal<TFeatures, TData, unknown>\n >,\n ),\n end: buildColumnOffsets(\n table_getPinnedVisibleLeafColumns(table, 'end') as Array<\n Column_Internal<TFeatures, TData, unknown>\n >,\n ),\n }\n}\n\nfunction toOffsetsKey(\n position: ColumnPinningPosition | 'center' | undefined,\n): keyof ColumnOffsetsByPosition {\n return position === 'start'\n ? 'start'\n : position === 'end'\n ? 'end'\n : position === 'center'\n ? 'center'\n : 'all' // undefined | false use the full visible list\n}\n\n/**\n * Computes the offset from the start edge of a pinning region to this column.\n *\n * The value is the sum of all previous visible leaf column sizes in the\n * requested `'start'`, `'center'`, or `'end'` region.\n *\n * `start` and `end` are logical positions. In LTR languages/layouts, `start`\n * usually corresponds to left and `end` to right. In RTL languages/layouts,\n * `start` usually corresponds to right and `end` to left.\n *\n * @example\n * ```ts\n * const startOffset = column_getStart(column, 'start')\n * ```\n */\nexport function column_getStart<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(\n column: Column_Internal<TFeatures, TData, TValue>,\n position?: ColumnPinningPosition | 'center',\n): number {\n const offsets = callMemoOrStaticFn(\n column.table,\n 'getColumnOffsets',\n table_getColumnOffsets,\n )\n return offsets[toOffsetsKey(position)].starts[column.id] ?? 0\n}\n\n/**\n * Computes the offset from the end edge of a pinning region after this column.\n *\n * The value is the sum of all following visible leaf column sizes in the\n * requested region.\n *\n * @example\n * ```ts\n * const endOffset = column_getAfter(column, 'end')\n * ```\n */\nexport function column_getAfter<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(\n column: Column_Internal<TFeatures, TData, TValue>,\n position?: ColumnPinningPosition | 'center',\n): number {\n const offsets = callMemoOrStaticFn(\n column.table,\n 'getColumnOffsets',\n table_getColumnOffsets,\n )\n return offsets[toOffsetsKey(position)].afters[column.id] ?? 0\n}\n\n/**\n * Removes this column's committed size override.\n *\n * After reset, the column resolves size from `columnDef.size` or built-in\n * defaults again.\n *\n * @example\n * ```ts\n * column_resetSize(column)\n * ```\n */\nexport function column_resetSize<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(column: Column_Internal<TFeatures, TData, TValue>) {\n table_setColumnSizing(column.table, (old) => {\n const rest = makeObjectMap<number>()\n const columnIds = Object.keys(old)\n for (let i = 0; i < columnIds.length; i++) {\n const columnId = columnIds[i]!\n if (columnId !== column.id) {\n rest[columnId] = old[columnId]!\n }\n }\n return rest\n })\n}\n\n/**\n * Computes a header's rendered size from its leaf headers.\n *\n * Group headers sum the sizes of all descendant leaf columns. Leaf headers use\n * their column's current size.\n *\n * @example\n * ```ts\n * const width = header_getSize(header)\n * ```\n */\nexport function header_getSize<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(header: Header<TFeatures, TData, TValue>) {\n let sum = 0\n\n const recurse = (h: Header<TFeatures, TData, TValue>) => {\n if (h.subHeaders.length) {\n h.subHeaders.forEach(recurse)\n } else {\n sum += column_getSize(h.column)\n }\n }\n\n recurse(header)\n\n return sum\n}\n\n/**\n * Computes a header's offset from the start of its header group.\n *\n * The offset is the previous sibling header's start plus size, or `0` for the\n * first header in the group.\n *\n * @example\n * ```ts\n * const offset = header_getStart(header)\n * ```\n */\nexport function header_getStart<\n TFeatures extends TableFeatures,\n TData extends RowData,\n TValue extends CellData = CellData,\n>(header: Header<TFeatures, TData, TValue>): number {\n if (header.index > 0) {\n const prevSiblingHeader = header.headerGroup?.headers[header.index - 1]\n if (prevSiblingHeader) {\n return (\n callMemoOrStaticFn(prevSiblingHeader, 'getStart', header_getStart) +\n callMemoOrStaticFn(prevSiblingHeader, 'getSize', header_getSize)\n )\n }\n }\n\n return 0\n}\n\n// Table APIs\n\n/**\n * Routes a committed column sizing updater through the table's sizing handler.\n *\n * The updater may be a next size map or a function of the previous map,\n * matching the instance `table.setColumnSizing` behavior.\n *\n * @example\n * ```ts\n * table_setColumnSizing(table, (old) => ({ ...old, age: 96 }))\n * ```\n */\nexport function table_setColumnSizing<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(\n table: Table_Internal<TFeatures, TData>,\n updater: Updater<ColumnSizingState>,\n) {\n table.options.onColumnSizingChange?.(updater)\n}\n\n/**\n * Resets `columnSizing` to the configured initial state or feature default.\n *\n * With no argument, the reset clones `table.initialState.columnSizing` when it\n * exists. Passing `true` ignores initial state and resets to `{}`.\n *\n * @example\n * ```ts\n * table_resetColumnSizing(table)\n * table_resetColumnSizing(table, true)\n * ```\n */\nexport function table_resetColumnSizing<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>, defaultState?: boolean) {\n table_setColumnSizing(\n table,\n defaultState\n ? makeObjectMap()\n : Object.assign(\n makeObjectMap<number>(),\n cloneState(table.initialState.columnSizing ?? {}),\n ),\n )\n}\n\n/**\n * Sums the rendered size of the full table header row.\n *\n * This includes start, center, and end columns in the main header group.\n *\n * @example\n * ```ts\n * const width = table_getTotalSize(table)\n * ```\n */\nexport function table_getTotalSize<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return (\n table.getHeaderGroups()[0]?.headers.reduce((sum, header) => {\n return sum + header_getSize(header)\n }, 0) ?? 0\n )\n}\n\n/**\n * Sums the rendered size of the logical start pinned header region.\n *\n * An empty start pinning region returns `0`.\n *\n * @example\n * ```ts\n * const width = table_getStartTotalSize(table)\n * ```\n */\nexport function table_getStartTotalSize<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return (\n callMemoOrStaticFn(\n table,\n 'getStartHeaderGroups',\n table_getStartHeaderGroups,\n )[0]?.headers.reduce((sum: number, header: Header<TFeatures, TData>) => {\n return sum + header_getSize(header)\n }, 0) ?? 0\n )\n}\n\n/**\n * Sums the rendered size of the center, unpinned header region.\n *\n * An empty center region returns `0`.\n *\n * @example\n * ```ts\n * const width = table_getCenterTotalSize(table)\n * ```\n */\nexport function table_getCenterTotalSize<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return (\n callMemoOrStaticFn(\n table,\n 'getCenterHeaderGroups',\n table_getCenterHeaderGroups,\n )[0]?.headers.reduce((sum: number, header: Header<TFeatures, TData>) => {\n return sum + header_getSize(header)\n }, 0) ?? 0\n )\n}\n\n/**\n * Sums the rendered size of the logical end pinned header region.\n *\n * An empty end pinning region returns `0`.\n *\n * @example\n * ```ts\n * const width = table_getEndTotalSize(table)\n * ```\n */\nexport function table_getEndTotalSize<\n TFeatures extends TableFeatures,\n TData extends RowData,\n>(table: Table_Internal<TFeatures, TData>) {\n return (\n callMemoOrStaticFn(\n table,\n 'getEndHeaderGroups',\n table_getEndHeaderGroups,\n )[0]?.headers.reduce((sum: number, header: Header<TFeatures, TData>) => {\n return sum + header_getSize(header)\n }, 0) ?? 0\n )\n}\n"],"mappings":"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"}
|