@ai-matrx/design-system 0.21.14 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/data-table/copy-helpers.d.cts +2 -1
  3. package/dist/data-table/copy-helpers.d.ts +2 -1
  4. package/dist/data-table/filter-engine.d.cts +2 -1
  5. package/dist/data-table/filter-engine.d.ts +2 -1
  6. package/dist/data-table/host.d.cts +2 -1
  7. package/dist/data-table/host.d.ts +2 -1
  8. package/dist/data-table/index.cjs +1525 -398
  9. package/dist/data-table/index.cjs.map +1 -1
  10. package/dist/data-table/index.d.cts +91 -3
  11. package/dist/data-table/index.d.ts +91 -3
  12. package/dist/data-table/index.js +1526 -395
  13. package/dist/data-table/index.js.map +1 -1
  14. package/dist/data-table/infer-filter.d.cts +2 -1
  15. package/dist/data-table/infer-filter.d.ts +2 -1
  16. package/dist/data-table/layered-filters.d.cts +2 -1
  17. package/dist/data-table/layered-filters.d.ts +2 -1
  18. package/dist/data-table/query-control.d.cts +2 -1
  19. package/dist/data-table/query-control.d.ts +2 -1
  20. package/dist/data-table/types.cjs.map +1 -1
  21. package/dist/data-table/types.d.cts +2 -1
  22. package/dist/data-table/types.d.ts +2 -1
  23. package/dist/data-table/url-state.d.cts +2 -1
  24. package/dist/data-table/url-state.d.ts +2 -1
  25. package/dist/data-table/xlsx.d.cts +2 -1
  26. package/dist/data-table/xlsx.d.ts +2 -1
  27. package/dist/field-formats/index.cjs +741 -0
  28. package/dist/field-formats/index.cjs.map +1 -0
  29. package/dist/field-formats/index.d.cts +45 -0
  30. package/dist/field-formats/index.d.ts +45 -0
  31. package/dist/field-formats/index.js +723 -0
  32. package/dist/field-formats/index.js.map +1 -0
  33. package/dist/types-BdbvlF9-.d.cts +204 -0
  34. package/dist/types-BdbvlF9-.d.ts +204 -0
  35. package/dist/{types-emLxze_m.d.ts → types-D-flTpK0.d.ts} +230 -1
  36. package/dist/{types-BgqIKbhq.d.cts → types-Sn249eoy.d.cts} +230 -1
  37. package/package.json +11 -1
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { ReactNode } from 'react';
3
- import { h as MatrxDataTableProps, i as TableViewSnapshot, c as MatrxDataTableRecordControls, j as ColumnMarker, M as MatrxColumnDef } from '../types-BgqIKbhq.cjs';
4
- export { A as AnyOfColumnSearch, k as CellEditType, l as CellEditsMap, f as ColumnFilterKind, a as ColumnFilterValue, C as ColumnFiltersState, m as MatrxDataTableContextMenuConfig, g as MatrxDataTableCopyConfig, d as MatrxDataTableDensity, n as MatrxDataTableDetailConfig, o as MatrxDataTableEditConfig, p as MatrxDataTableEmptyState, q as MatrxDataTableExpandedDetailConfig, r as MatrxDataTableFilterUi, s as MatrxDataTableHierarchyConfig, t as MatrxDataTableHierarchyMove, u as MatrxDataTableMobileCardControls, v as MatrxDataTableQueryControl, e as MatrxDataTableQueryState, w as MatrxDataTableSelectionConfig, x as MatrxDataTableSourceProcessing, y as MatrxDataTableToolbar, z as MatrxDataTableUrlStateConfig, B as MatrxDataTableWindowConfig, D as MatrxTablePagination, E as SortDirection, S as SortState, F as TableRankedSearchOptions, b as TableSavedViewsProps, T as TableSearchMatchMode, G as TableSearchRole, H as TableSearchScope, I as TableViewQuery, J as TextFilterMode, K as ToolbarFacet, N as inferTableSearchRole, O as rankTableSearchRows, P as resolveTableSearchScopes } from '../types-BgqIKbhq.cjs';
3
+ import { h as MatrxDataTableProps, i as TableViewSnapshot, c as MatrxDataTableRecordControls, j as ColumnMarker, M as MatrxColumnDef } from '../types-Sn249eoy.cjs';
4
+ export { A as AnyOfColumnSearch, B as BOOLEAN_TRUE_COLOR, k as CELL_TINT_CLASS, l as COLOR_RULE_OPS, m as COLOR_RULE_OP_LABELS, n as CellEditType, o as CellEditsMap, p as ChoiceColorLookup, q as ColorBy, r as ColorRule, s as ColorRuleOp, f as ColumnFilterKind, a as ColumnFilterValue, C as ColumnFiltersState, E as EMPTY_TABLE_STYLE, t as MatrxDataTableContextMenuConfig, g as MatrxDataTableCopyConfig, d as MatrxDataTableDensity, u as MatrxDataTableDetailConfig, v as MatrxDataTableEditConfig, w as MatrxDataTableEmptyState, x as MatrxDataTableExpandedDetailConfig, y as MatrxDataTableFilterUi, z as MatrxDataTableHierarchyConfig, D as MatrxDataTableHierarchyMove, F as MatrxDataTableMobileCardControls, G as MatrxDataTableQueryControl, e as MatrxDataTableQueryState, H as MatrxDataTableSelectionConfig, I as MatrxDataTableSourceProcessing, J as MatrxDataTableStyleConfig, K as MatrxDataTableToolbar, N as MatrxDataTableUrlStateConfig, O as MatrxDataTableWindowConfig, P as MatrxTablePagination, Q as OPS_WITH_VALUE, R as ROW_TINT_CLASS, U as STYLE_COLORS, V as STYLE_COLOR_LABELS, W as SWATCH_CLASS, X as SortDirection, S as SortState, Y as StyleColor, Z as StylePath, _ as StyleTarget, $ as TABLE_STYLE_METADATA_KEY, a0 as TABLE_STYLE_VERSION, a1 as TableRankedSearchOptions, b as TableSavedViewsProps, T as TableSearchMatchMode, a2 as TableSearchRole, a3 as TableSearchScope, a4 as TableStyle, a5 as TableViewQuery, a6 as TextFilterMode, a7 as ToolbarFacet, a8 as applyStylePath, a9 as colorForChoice, aa as evaluateRule, ab as inferTableSearchRole, ac as isStyleColor, ad as parseTableStyle, ae as rankTableSearchRows, af as resolveCellColor, ag as resolveRowColor, ah as resolveTableSearchScopes, ai as stylePath, aj as tableStyleFromMetadata, ak as tableStyleIsEmpty } from '../types-Sn249eoy.cjs';
5
5
  export { MatrxDataTableHost, MatrxDataTableProvider, MatrxTableRowAlchemy, TableDoors, TableEntityRefProps, TableLinkProps, TablePeekProps, TableSidePanelProps, TableToolbarActionProps, TableWindowPanelProps, useMatrxDataTableHost, useMatrxTableRowAlchemy } from './host.cjs';
6
6
  import { CopyControlProps } from './copy-types.cjs';
7
7
  export { AgentPayloadInput } from './copy-types.cjs';
@@ -14,6 +14,7 @@ export { downloadTableAsXlsx } from './xlsx.cjs';
14
14
  export { ResolvedFilterKind, collectSelectOptions, filterKindLabel, resolveFilterKind } from './infer-filter.cjs';
15
15
  export { ScrollPaginationContainer, UseScrollPaginationOptions, UseScrollPaginationResult, useScrollPagination } from './scroll-pagination.cjs';
16
16
  export { tableUrlParamPrefix, useTableUrlState } from './url-state.cjs';
17
+ import { c as FormatResult } from '../types-BdbvlF9-.cjs';
17
18
  import '../content-transfer.cjs';
18
19
  import '@ai-matrx/kit/content-transfer';
19
20
  import '../content-transfer/icon.cjs';
@@ -103,4 +104,91 @@ interface TableViewTabsProps {
103
104
  /** One shared tab strip; hosts may own URL state without copying its UI. */
104
105
  declare function TableViewTabs({ tabs, activeId, onSelect, onAdd, onClose, onRename, related }: TableViewTabsProps): React.JSX.Element;
105
106
 
106
- export { ColumnMarker, MatrxColumnDef, MatrxDataTable, MatrxDataTableProps, MatrxDataTableRecordControls, MatrxTableRowAlchemyProvider, type ResolvedColumnMarker, SavedViewsControl, type SavedViewsControlProps, TableTitleRow, type TableTitleRowProps, TableViewSnapshot, type TableViewTab, TableViewTabs, type TableViewTabsProps, parseTableViewSnapshot, resolveColumnMarker };
107
+ /**
108
+ * `MatrxColumnDef.format` — the column's declared reading, rendered.
109
+ *
110
+ * ONE FORMATTER, NOT A SECOND ONE. The vocabulary is the platform registry in
111
+ * `../field-formats`; this file only decides what a TABLE CELL does with the
112
+ * registry's answer. A consumer with its own `cell` renderer calls
113
+ * `formatColumnValue(col, value)` and gets exactly the same text the table
114
+ * would have drawn, so an editable grid and a read-only grid never disagree
115
+ * about what `1234.5` means.
116
+ *
117
+ * THE FALLBACK LAW, on screen. `formatFieldValue` never throws and never
118
+ * blanks: when the stored value does not fit the declared format it returns
119
+ * `ok: false` with the BASE-TYPE rendering and a reason. The cell then prints
120
+ * that base rendering in amber with the reason on hover — the person SEES that
121
+ * something does not fit, instead of an empty cell that says nothing, and the
122
+ * value they typed is still legible and still theirs.
123
+ */
124
+
125
+ /**
126
+ * The text a declared format gives this value, plus whether it fit.
127
+ * Returns `null` when the column declares no format — the caller keeps its own
128
+ * default rendering rather than being handed an empty string that looks real.
129
+ */
130
+ declare function formatColumnValue<T>(col: Pick<MatrxColumnDef<T>, "format">, value: unknown): FormatResult | null;
131
+ /**
132
+ * Which way a formatted column reads. Numbers and dates are right-aligned
133
+ * because a column of money a person has to compare is unreadable ragged-right
134
+ * — the alignment is part of the format, not a second decision the caller has
135
+ * to remember to make. An explicit `align` on the column always wins.
136
+ */
137
+ declare function alignForFormat<T>(col: Pick<MatrxColumnDef<T>, "format" | "align">): "left" | "center" | "right" | undefined;
138
+ /** The amber a value that does not fit its declared format wears. ONE amber. */
139
+ declare const FORMAT_MISMATCH_CLASS = "text-amber-600 underline decoration-dotted underline-offset-2 dark:text-amber-400";
140
+ declare function FormattedCell({ result }: {
141
+ result: FormatResult;
142
+ }): ReactNode;
143
+
144
+ /**
145
+ * Frozen (pinned) columns — the identity column that stays while the rest of a
146
+ * wide table scrolls sideways.
147
+ *
148
+ * 🚨 DESKTOP ONLY, AND THAT IS A RULE, NOT A DEFAULT. A phone table is already a
149
+ * horizontal scroller and pinning over it buries the data behind the pin; the
150
+ * package regression-tests that no `max-sm:sticky` is ever emitted
151
+ * (`MatrxDataTable.controlled.test.tsx`, "never freezes a column over mobile
152
+ * table data"). Freezing is therefore expressed as `sm:sticky` and the phone
153
+ * answer stays `MatrxColumnDef.mobileHidden`.
154
+ *
155
+ * ONLY THE LEADING RUN. `frozen` on a column in the middle of the table would
156
+ * have to slide over its own left neighbour, which is a lie about where the row
157
+ * is. So the frozen set is the run of `frozen: true` columns starting at the
158
+ * first visible column; a `frozen` column with a non-frozen column before it is
159
+ * ignored, deliberately and silently — the person asked for something the shape
160
+ * of a table cannot honour.
161
+ *
162
+ * A HALF-STUCK COLUMN IS A LYING SCREEN. Each frozen column sits at a left
163
+ * offset that is the sum of everything frozen to its left, so those widths must
164
+ * be KNOWN numbers. The last frozen column's own width is never needed (nothing
165
+ * is offset past it). If any width this arithmetic needs is missing, freezing is
166
+ * OFF for the whole table and every column renders in its ordinary place —
167
+ * never a column pinned at a guessed offset, drifting over its neighbour.
168
+ */
169
+ type FrozenColumns = {
170
+ /** Left offset in px for each column id that is actually frozen. */
171
+ readonly offsets: Readonly<Record<string, number>>;
172
+ /** True when at least one column is frozen. */
173
+ readonly active: boolean;
174
+ /**
175
+ * Left offset for the leading selection column, present only when freezing is
176
+ * active AND the table draws that column — it has to stick too, or the first
177
+ * frozen data column slides over the checkboxes.
178
+ */
179
+ readonly selectionOffset: number | null;
180
+ };
181
+ declare const NO_FROZEN_COLUMNS: FrozenColumns;
182
+ /**
183
+ * @param ids visible column ids, in render order
184
+ * @param isFrozen did this column ask to be frozen
185
+ * @param widthOf resolved pixel width, or undefined when unknown
186
+ * @param leadingWidth width of the selection column when the table draws one,
187
+ * `null` when it draws none. `undefined` means "it draws
188
+ * one and nobody has measured it yet" — freezing waits.
189
+ */
190
+ declare function resolveFrozenColumns(ids: readonly string[], isFrozen: (id: string) => boolean, widthOf: (id: string) => number | undefined, leadingWidth: number | null | undefined): FrozenColumns;
191
+ /** The numeric pixel width of a declared column width, when there is one. */
192
+ declare function pixelWidth(width: string | number | undefined): number | undefined;
193
+
194
+ export { ColumnMarker, FORMAT_MISMATCH_CLASS, FormattedCell, type FrozenColumns, MatrxColumnDef, MatrxDataTable, MatrxDataTableProps, MatrxDataTableRecordControls, MatrxTableRowAlchemyProvider, NO_FROZEN_COLUMNS, type ResolvedColumnMarker, SavedViewsControl, type SavedViewsControlProps, TableTitleRow, type TableTitleRowProps, TableViewSnapshot, type TableViewTab, TableViewTabs, type TableViewTabsProps, alignForFormat, formatColumnValue, parseTableViewSnapshot, pixelWidth, resolveColumnMarker, resolveFrozenColumns };
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { ReactNode } from 'react';
3
- import { h as MatrxDataTableProps, i as TableViewSnapshot, c as MatrxDataTableRecordControls, j as ColumnMarker, M as MatrxColumnDef } from '../types-emLxze_m.js';
4
- export { A as AnyOfColumnSearch, k as CellEditType, l as CellEditsMap, f as ColumnFilterKind, a as ColumnFilterValue, C as ColumnFiltersState, m as MatrxDataTableContextMenuConfig, g as MatrxDataTableCopyConfig, d as MatrxDataTableDensity, n as MatrxDataTableDetailConfig, o as MatrxDataTableEditConfig, p as MatrxDataTableEmptyState, q as MatrxDataTableExpandedDetailConfig, r as MatrxDataTableFilterUi, s as MatrxDataTableHierarchyConfig, t as MatrxDataTableHierarchyMove, u as MatrxDataTableMobileCardControls, v as MatrxDataTableQueryControl, e as MatrxDataTableQueryState, w as MatrxDataTableSelectionConfig, x as MatrxDataTableSourceProcessing, y as MatrxDataTableToolbar, z as MatrxDataTableUrlStateConfig, B as MatrxDataTableWindowConfig, D as MatrxTablePagination, E as SortDirection, S as SortState, F as TableRankedSearchOptions, b as TableSavedViewsProps, T as TableSearchMatchMode, G as TableSearchRole, H as TableSearchScope, I as TableViewQuery, J as TextFilterMode, K as ToolbarFacet, N as inferTableSearchRole, O as rankTableSearchRows, P as resolveTableSearchScopes } from '../types-emLxze_m.js';
3
+ import { h as MatrxDataTableProps, i as TableViewSnapshot, c as MatrxDataTableRecordControls, j as ColumnMarker, M as MatrxColumnDef } from '../types-D-flTpK0.js';
4
+ export { A as AnyOfColumnSearch, B as BOOLEAN_TRUE_COLOR, k as CELL_TINT_CLASS, l as COLOR_RULE_OPS, m as COLOR_RULE_OP_LABELS, n as CellEditType, o as CellEditsMap, p as ChoiceColorLookup, q as ColorBy, r as ColorRule, s as ColorRuleOp, f as ColumnFilterKind, a as ColumnFilterValue, C as ColumnFiltersState, E as EMPTY_TABLE_STYLE, t as MatrxDataTableContextMenuConfig, g as MatrxDataTableCopyConfig, d as MatrxDataTableDensity, u as MatrxDataTableDetailConfig, v as MatrxDataTableEditConfig, w as MatrxDataTableEmptyState, x as MatrxDataTableExpandedDetailConfig, y as MatrxDataTableFilterUi, z as MatrxDataTableHierarchyConfig, D as MatrxDataTableHierarchyMove, F as MatrxDataTableMobileCardControls, G as MatrxDataTableQueryControl, e as MatrxDataTableQueryState, H as MatrxDataTableSelectionConfig, I as MatrxDataTableSourceProcessing, J as MatrxDataTableStyleConfig, K as MatrxDataTableToolbar, N as MatrxDataTableUrlStateConfig, O as MatrxDataTableWindowConfig, P as MatrxTablePagination, Q as OPS_WITH_VALUE, R as ROW_TINT_CLASS, U as STYLE_COLORS, V as STYLE_COLOR_LABELS, W as SWATCH_CLASS, X as SortDirection, S as SortState, Y as StyleColor, Z as StylePath, _ as StyleTarget, $ as TABLE_STYLE_METADATA_KEY, a0 as TABLE_STYLE_VERSION, a1 as TableRankedSearchOptions, b as TableSavedViewsProps, T as TableSearchMatchMode, a2 as TableSearchRole, a3 as TableSearchScope, a4 as TableStyle, a5 as TableViewQuery, a6 as TextFilterMode, a7 as ToolbarFacet, a8 as applyStylePath, a9 as colorForChoice, aa as evaluateRule, ab as inferTableSearchRole, ac as isStyleColor, ad as parseTableStyle, ae as rankTableSearchRows, af as resolveCellColor, ag as resolveRowColor, ah as resolveTableSearchScopes, ai as stylePath, aj as tableStyleFromMetadata, ak as tableStyleIsEmpty } from '../types-D-flTpK0.js';
5
5
  export { MatrxDataTableHost, MatrxDataTableProvider, MatrxTableRowAlchemy, TableDoors, TableEntityRefProps, TableLinkProps, TablePeekProps, TableSidePanelProps, TableToolbarActionProps, TableWindowPanelProps, useMatrxDataTableHost, useMatrxTableRowAlchemy } from './host.js';
6
6
  import { CopyControlProps } from './copy-types.js';
7
7
  export { AgentPayloadInput } from './copy-types.js';
@@ -14,6 +14,7 @@ export { downloadTableAsXlsx } from './xlsx.js';
14
14
  export { ResolvedFilterKind, collectSelectOptions, filterKindLabel, resolveFilterKind } from './infer-filter.js';
15
15
  export { ScrollPaginationContainer, UseScrollPaginationOptions, UseScrollPaginationResult, useScrollPagination } from './scroll-pagination.js';
16
16
  export { tableUrlParamPrefix, useTableUrlState } from './url-state.js';
17
+ import { c as FormatResult } from '../types-BdbvlF9-.js';
17
18
  import '../content-transfer.js';
18
19
  import '@ai-matrx/kit/content-transfer';
19
20
  import '../content-transfer/icon.js';
@@ -103,4 +104,91 @@ interface TableViewTabsProps {
103
104
  /** One shared tab strip; hosts may own URL state without copying its UI. */
104
105
  declare function TableViewTabs({ tabs, activeId, onSelect, onAdd, onClose, onRename, related }: TableViewTabsProps): React.JSX.Element;
105
106
 
106
- export { ColumnMarker, MatrxColumnDef, MatrxDataTable, MatrxDataTableProps, MatrxDataTableRecordControls, MatrxTableRowAlchemyProvider, type ResolvedColumnMarker, SavedViewsControl, type SavedViewsControlProps, TableTitleRow, type TableTitleRowProps, TableViewSnapshot, type TableViewTab, TableViewTabs, type TableViewTabsProps, parseTableViewSnapshot, resolveColumnMarker };
107
+ /**
108
+ * `MatrxColumnDef.format` — the column's declared reading, rendered.
109
+ *
110
+ * ONE FORMATTER, NOT A SECOND ONE. The vocabulary is the platform registry in
111
+ * `../field-formats`; this file only decides what a TABLE CELL does with the
112
+ * registry's answer. A consumer with its own `cell` renderer calls
113
+ * `formatColumnValue(col, value)` and gets exactly the same text the table
114
+ * would have drawn, so an editable grid and a read-only grid never disagree
115
+ * about what `1234.5` means.
116
+ *
117
+ * THE FALLBACK LAW, on screen. `formatFieldValue` never throws and never
118
+ * blanks: when the stored value does not fit the declared format it returns
119
+ * `ok: false` with the BASE-TYPE rendering and a reason. The cell then prints
120
+ * that base rendering in amber with the reason on hover — the person SEES that
121
+ * something does not fit, instead of an empty cell that says nothing, and the
122
+ * value they typed is still legible and still theirs.
123
+ */
124
+
125
+ /**
126
+ * The text a declared format gives this value, plus whether it fit.
127
+ * Returns `null` when the column declares no format — the caller keeps its own
128
+ * default rendering rather than being handed an empty string that looks real.
129
+ */
130
+ declare function formatColumnValue<T>(col: Pick<MatrxColumnDef<T>, "format">, value: unknown): FormatResult | null;
131
+ /**
132
+ * Which way a formatted column reads. Numbers and dates are right-aligned
133
+ * because a column of money a person has to compare is unreadable ragged-right
134
+ * — the alignment is part of the format, not a second decision the caller has
135
+ * to remember to make. An explicit `align` on the column always wins.
136
+ */
137
+ declare function alignForFormat<T>(col: Pick<MatrxColumnDef<T>, "format" | "align">): "left" | "center" | "right" | undefined;
138
+ /** The amber a value that does not fit its declared format wears. ONE amber. */
139
+ declare const FORMAT_MISMATCH_CLASS = "text-amber-600 underline decoration-dotted underline-offset-2 dark:text-amber-400";
140
+ declare function FormattedCell({ result }: {
141
+ result: FormatResult;
142
+ }): ReactNode;
143
+
144
+ /**
145
+ * Frozen (pinned) columns — the identity column that stays while the rest of a
146
+ * wide table scrolls sideways.
147
+ *
148
+ * 🚨 DESKTOP ONLY, AND THAT IS A RULE, NOT A DEFAULT. A phone table is already a
149
+ * horizontal scroller and pinning over it buries the data behind the pin; the
150
+ * package regression-tests that no `max-sm:sticky` is ever emitted
151
+ * (`MatrxDataTable.controlled.test.tsx`, "never freezes a column over mobile
152
+ * table data"). Freezing is therefore expressed as `sm:sticky` and the phone
153
+ * answer stays `MatrxColumnDef.mobileHidden`.
154
+ *
155
+ * ONLY THE LEADING RUN. `frozen` on a column in the middle of the table would
156
+ * have to slide over its own left neighbour, which is a lie about where the row
157
+ * is. So the frozen set is the run of `frozen: true` columns starting at the
158
+ * first visible column; a `frozen` column with a non-frozen column before it is
159
+ * ignored, deliberately and silently — the person asked for something the shape
160
+ * of a table cannot honour.
161
+ *
162
+ * A HALF-STUCK COLUMN IS A LYING SCREEN. Each frozen column sits at a left
163
+ * offset that is the sum of everything frozen to its left, so those widths must
164
+ * be KNOWN numbers. The last frozen column's own width is never needed (nothing
165
+ * is offset past it). If any width this arithmetic needs is missing, freezing is
166
+ * OFF for the whole table and every column renders in its ordinary place —
167
+ * never a column pinned at a guessed offset, drifting over its neighbour.
168
+ */
169
+ type FrozenColumns = {
170
+ /** Left offset in px for each column id that is actually frozen. */
171
+ readonly offsets: Readonly<Record<string, number>>;
172
+ /** True when at least one column is frozen. */
173
+ readonly active: boolean;
174
+ /**
175
+ * Left offset for the leading selection column, present only when freezing is
176
+ * active AND the table draws that column — it has to stick too, or the first
177
+ * frozen data column slides over the checkboxes.
178
+ */
179
+ readonly selectionOffset: number | null;
180
+ };
181
+ declare const NO_FROZEN_COLUMNS: FrozenColumns;
182
+ /**
183
+ * @param ids visible column ids, in render order
184
+ * @param isFrozen did this column ask to be frozen
185
+ * @param widthOf resolved pixel width, or undefined when unknown
186
+ * @param leadingWidth width of the selection column when the table draws one,
187
+ * `null` when it draws none. `undefined` means "it draws
188
+ * one and nobody has measured it yet" — freezing waits.
189
+ */
190
+ declare function resolveFrozenColumns(ids: readonly string[], isFrozen: (id: string) => boolean, widthOf: (id: string) => number | undefined, leadingWidth: number | null | undefined): FrozenColumns;
191
+ /** The numeric pixel width of a declared column width, when there is one. */
192
+ declare function pixelWidth(width: string | number | undefined): number | undefined;
193
+
194
+ export { ColumnMarker, FORMAT_MISMATCH_CLASS, FormattedCell, type FrozenColumns, MatrxColumnDef, MatrxDataTable, MatrxDataTableProps, MatrxDataTableRecordControls, MatrxTableRowAlchemyProvider, NO_FROZEN_COLUMNS, type ResolvedColumnMarker, SavedViewsControl, type SavedViewsControlProps, TableTitleRow, type TableTitleRowProps, TableViewSnapshot, type TableViewTab, TableViewTabs, type TableViewTabsProps, alignForFormat, formatColumnValue, parseTableViewSnapshot, pixelWidth, resolveColumnMarker, resolveFrozenColumns };