@ai-matrx/design-system 0.32.0 → 0.35.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 (47) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/dist/content-transfer.cjs +3 -1
  3. package/dist/content-transfer.cjs.map +1 -1
  4. package/dist/content-transfer.js +3 -1
  5. package/dist/content-transfer.js.map +1 -1
  6. package/dist/data-table/copy-helpers.d.cts +1 -1
  7. package/dist/data-table/copy-helpers.d.ts +1 -1
  8. package/dist/data-table/data-row-inspector.cjs +3 -1
  9. package/dist/data-table/data-row-inspector.cjs.map +1 -1
  10. package/dist/data-table/data-row-inspector.js +3 -1
  11. package/dist/data-table/data-row-inspector.js.map +1 -1
  12. package/dist/data-table/data-row-window.cjs +3 -1
  13. package/dist/data-table/data-row-window.cjs.map +1 -1
  14. package/dist/data-table/data-row-window.js +3 -1
  15. package/dist/data-table/data-row-window.js.map +1 -1
  16. package/dist/data-table/filter-engine.d.cts +1 -1
  17. package/dist/data-table/filter-engine.d.ts +1 -1
  18. package/dist/data-table/host.d.cts +1 -1
  19. package/dist/data-table/host.d.ts +1 -1
  20. package/dist/data-table/index.cjs +95 -34
  21. package/dist/data-table/index.cjs.map +1 -1
  22. package/dist/data-table/index.d.cts +2 -2
  23. package/dist/data-table/index.d.ts +2 -2
  24. package/dist/data-table/index.js +95 -34
  25. package/dist/data-table/index.js.map +1 -1
  26. package/dist/data-table/infer-filter.d.cts +1 -1
  27. package/dist/data-table/infer-filter.d.ts +1 -1
  28. package/dist/data-table/layered-filters.d.cts +1 -1
  29. package/dist/data-table/layered-filters.d.ts +1 -1
  30. package/dist/data-table/query-control.d.cts +1 -1
  31. package/dist/data-table/query-control.d.ts +1 -1
  32. package/dist/data-table/types.cjs.map +1 -1
  33. package/dist/data-table/types.d.cts +1 -1
  34. package/dist/data-table/types.d.ts +1 -1
  35. package/dist/data-table/url-state.d.cts +1 -1
  36. package/dist/data-table/url-state.d.ts +1 -1
  37. package/dist/data-table/xlsx.d.cts +1 -1
  38. package/dist/data-table/xlsx.d.ts +1 -1
  39. package/dist/index.cjs +33 -4
  40. package/dist/index.cjs.map +1 -1
  41. package/dist/index.d.cts +28 -0
  42. package/dist/index.d.ts +28 -0
  43. package/dist/index.js +33 -4
  44. package/dist/index.js.map +1 -1
  45. package/dist/{types-CFmCZXVn.d.ts → types-Cxm5XK0L.d.ts} +25 -7
  46. package/dist/{types-CYkwg9jR.d.cts → types-kiV-CAuZ.d.cts} +25 -7
  47. package/package.json +1 -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, d as MatrxDataTableRecordControls, j as ColumnMarker, M as MatrxColumnDef } from '../types-CYkwg9jR.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, u as MatrxDataTableCoverageConfig, c as MatrxDataTableDensity, v as MatrxDataTableDetailConfig, w as MatrxDataTableEditConfig, x as MatrxDataTableEmptyState, y as MatrxDataTableExpandedDetailConfig, z as MatrxDataTableFacetsConfig, D as MatrxDataTableFilterUi, F as MatrxDataTableGroupingConfig, G as MatrxDataTableHierarchyConfig, H as MatrxDataTableHierarchyMove, I as MatrxDataTableMobileCardControls, J as MatrxDataTableQueryControl, e as MatrxDataTableQueryState, K as MatrxDataTableSelectionConfig, N as MatrxDataTableSourceProcessing, O as MatrxDataTableSpreadsheetConfig, P as MatrxDataTableStyleConfig, Q as MatrxDataTableToolbar, R as MatrxDataTableUrlStateConfig, U as MatrxDataTableVirtualizeConfig, V as MatrxDataTableWindowConfig, W as MatrxTablePagination, X as OPS_WITH_VALUE, Y as ROW_TINT_CLASS, Z as STYLE_COLORS, _ as STYLE_COLOR_LABELS, $ as SWATCH_CLASS, a0 as SortDirection, S as SortState, a1 as StyleColor, a2 as StylePath, a3 as StyleTarget, a4 as TABLE_STYLE_METADATA_KEY, a5 as TABLE_STYLE_VERSION, a6 as TableRankedSearchOptions, b as TableSavedViewsProps, T as TableSearchMatchMode, a7 as TableSearchRole, a8 as TableSearchScope, a9 as TableStyle, aa as TableViewQuery, ab as TextFilterMode, ac as ToolbarFacet, ad as applyStylePath, ae as colorForChoice, af as evaluateRule, ag as inferTableSearchRole, ah as isStyleColor, ai as parseTableStyle, aj as rankTableSearchRows, ak as resolveCellColor, al as resolveRowColor, am as resolveTableSearchScopes, an as stylePath, ao as tableStyleFromMetadata, ap as tableStyleIsEmpty } from '../types-CYkwg9jR.cjs';
3
+ import { h as MatrxDataTableProps, i as TableViewSnapshot, d as MatrxDataTableRecordControls, j as ColumnMarker, M as MatrxColumnDef } from '../types-kiV-CAuZ.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, u as MatrxDataTableCoverageConfig, c as MatrxDataTableDensity, v as MatrxDataTableDetailConfig, w as MatrxDataTableEditConfig, x as MatrxDataTableEmptyState, y as MatrxDataTableExpandedDetailConfig, z as MatrxDataTableFacetsConfig, D as MatrxDataTableFilterUi, F as MatrxDataTableGroupingConfig, G as MatrxDataTableHierarchyConfig, H as MatrxDataTableHierarchyMove, I as MatrxDataTableMobileCardControls, J as MatrxDataTableMultiExpandedDetailConfig, K as MatrxDataTableQueryControl, e as MatrxDataTableQueryState, N as MatrxDataTableSelectionConfig, O as MatrxDataTableSingleExpandedDetailConfig, P as MatrxDataTableSourceProcessing, Q as MatrxDataTableSpreadsheetConfig, R as MatrxDataTableStyleConfig, U as MatrxDataTableToolbar, V as MatrxDataTableUrlStateConfig, W as MatrxDataTableVirtualizeConfig, X as MatrxDataTableWindowConfig, Y as MatrxTablePagination, Z as OPS_WITH_VALUE, _ as ROW_TINT_CLASS, $ as STYLE_COLORS, a0 as STYLE_COLOR_LABELS, a1 as SWATCH_CLASS, a2 as SortDirection, S as SortState, a3 as StyleColor, a4 as StylePath, a5 as StyleTarget, a6 as TABLE_STYLE_METADATA_KEY, a7 as TABLE_STYLE_VERSION, a8 as TableRankedSearchOptions, b as TableSavedViewsProps, T as TableSearchMatchMode, a9 as TableSearchRole, aa as TableSearchScope, ab as TableStyle, ac as TableViewQuery, ad as TextFilterMode, ae as ToolbarFacet, af as applyStylePath, ag as colorForChoice, ah as evaluateRule, ai as inferTableSearchRole, aj as isStyleColor, ak as parseTableStyle, al as rankTableSearchRows, am as resolveCellColor, an as resolveRowColor, ao as resolveTableSearchScopes, ap as stylePath, aq as tableStyleFromMetadata, ar as tableStyleIsEmpty } from '../types-kiV-CAuZ.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';
@@ -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, d as MatrxDataTableRecordControls, j as ColumnMarker, M as MatrxColumnDef } from '../types-CFmCZXVn.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, u as MatrxDataTableCoverageConfig, c as MatrxDataTableDensity, v as MatrxDataTableDetailConfig, w as MatrxDataTableEditConfig, x as MatrxDataTableEmptyState, y as MatrxDataTableExpandedDetailConfig, z as MatrxDataTableFacetsConfig, D as MatrxDataTableFilterUi, F as MatrxDataTableGroupingConfig, G as MatrxDataTableHierarchyConfig, H as MatrxDataTableHierarchyMove, I as MatrxDataTableMobileCardControls, J as MatrxDataTableQueryControl, e as MatrxDataTableQueryState, K as MatrxDataTableSelectionConfig, N as MatrxDataTableSourceProcessing, O as MatrxDataTableSpreadsheetConfig, P as MatrxDataTableStyleConfig, Q as MatrxDataTableToolbar, R as MatrxDataTableUrlStateConfig, U as MatrxDataTableVirtualizeConfig, V as MatrxDataTableWindowConfig, W as MatrxTablePagination, X as OPS_WITH_VALUE, Y as ROW_TINT_CLASS, Z as STYLE_COLORS, _ as STYLE_COLOR_LABELS, $ as SWATCH_CLASS, a0 as SortDirection, S as SortState, a1 as StyleColor, a2 as StylePath, a3 as StyleTarget, a4 as TABLE_STYLE_METADATA_KEY, a5 as TABLE_STYLE_VERSION, a6 as TableRankedSearchOptions, b as TableSavedViewsProps, T as TableSearchMatchMode, a7 as TableSearchRole, a8 as TableSearchScope, a9 as TableStyle, aa as TableViewQuery, ab as TextFilterMode, ac as ToolbarFacet, ad as applyStylePath, ae as colorForChoice, af as evaluateRule, ag as inferTableSearchRole, ah as isStyleColor, ai as parseTableStyle, aj as rankTableSearchRows, ak as resolveCellColor, al as resolveRowColor, am as resolveTableSearchScopes, an as stylePath, ao as tableStyleFromMetadata, ap as tableStyleIsEmpty } from '../types-CFmCZXVn.js';
3
+ import { h as MatrxDataTableProps, i as TableViewSnapshot, d as MatrxDataTableRecordControls, j as ColumnMarker, M as MatrxColumnDef } from '../types-Cxm5XK0L.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, u as MatrxDataTableCoverageConfig, c as MatrxDataTableDensity, v as MatrxDataTableDetailConfig, w as MatrxDataTableEditConfig, x as MatrxDataTableEmptyState, y as MatrxDataTableExpandedDetailConfig, z as MatrxDataTableFacetsConfig, D as MatrxDataTableFilterUi, F as MatrxDataTableGroupingConfig, G as MatrxDataTableHierarchyConfig, H as MatrxDataTableHierarchyMove, I as MatrxDataTableMobileCardControls, J as MatrxDataTableMultiExpandedDetailConfig, K as MatrxDataTableQueryControl, e as MatrxDataTableQueryState, N as MatrxDataTableSelectionConfig, O as MatrxDataTableSingleExpandedDetailConfig, P as MatrxDataTableSourceProcessing, Q as MatrxDataTableSpreadsheetConfig, R as MatrxDataTableStyleConfig, U as MatrxDataTableToolbar, V as MatrxDataTableUrlStateConfig, W as MatrxDataTableVirtualizeConfig, X as MatrxDataTableWindowConfig, Y as MatrxTablePagination, Z as OPS_WITH_VALUE, _ as ROW_TINT_CLASS, $ as STYLE_COLORS, a0 as STYLE_COLOR_LABELS, a1 as SWATCH_CLASS, a2 as SortDirection, S as SortState, a3 as StyleColor, a4 as StylePath, a5 as StyleTarget, a6 as TABLE_STYLE_METADATA_KEY, a7 as TABLE_STYLE_VERSION, a8 as TableRankedSearchOptions, b as TableSavedViewsProps, T as TableSearchMatchMode, a9 as TableSearchRole, aa as TableSearchScope, ab as TableStyle, ac as TableViewQuery, ad as TextFilterMode, ae as ToolbarFacet, af as applyStylePath, ag as colorForChoice, ah as evaluateRule, ai as inferTableSearchRole, aj as isStyleColor, ak as parseTableStyle, al as rankTableSearchRows, am as resolveCellColor, an as resolveRowColor, ao as resolveTableSearchScopes, ap as stylePath, aq as tableStyleFromMetadata, ar as tableStyleIsEmpty } from '../types-Cxm5XK0L.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';
@@ -2494,6 +2494,7 @@ var PopoverContent = React13.forwardRef(
2494
2494
  sideOffset = 4,
2495
2495
  container,
2496
2496
  animated = true,
2497
+ sizing = "fixed",
2497
2498
  ...props
2498
2499
  }, ref) => {
2499
2500
  const portalContainer = usePortalContainer(container);
@@ -2510,7 +2511,8 @@ var PopoverContent = React13.forwardRef(
2510
2511
  // z, DOM portal order decides, so a dialog opened FROM a popover stacks
2511
2512
  // above it, and a popover opened from a dialog still stacks above the
2512
2513
  // dialog. z-[10001] buried dialogs behind fullscreen popovers.
2513
- "z-[10000] w-72 max-h-[var(--radix-popover-content-available-height)] overflow-y-auto overscroll-contain rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none",
2514
+ "z-[10000] max-h-[var(--radix-popover-content-available-height)] overflow-y-auto overscroll-contain rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none",
2515
+ sizing === "content" ? "w-auto min-w-[min(max(var(--radix-popover-trigger-width),20rem),calc(100vw-2rem))] max-w-[min(28rem,calc(100vw-2rem))]" : "w-72",
2514
2516
  animated && MOTION_POPPER,
2515
2517
  className
2516
2518
  ),
@@ -6218,8 +6220,9 @@ function ColumnHeaderCell({
6218
6220
  const menuContent = /* @__PURE__ */ jsxs22(
6219
6221
  PopoverContent,
6220
6222
  {
6223
+ sizing: "content",
6221
6224
  align: "start",
6222
- className: "w-64 p-2",
6225
+ className: "p-2",
6223
6226
  onClick: (e) => e.stopPropagation(),
6224
6227
  onOpenAutoFocus: (event) => {
6225
6228
  const content = event.currentTarget;
@@ -10015,8 +10018,26 @@ function pixelWidth(width) {
10015
10018
  }
10016
10019
  return void 0;
10017
10020
  }
10018
- var FROZEN_CELL_CLASS = "sm:sticky sm:left-[var(--matrx-frozen-left)] sm:z-20 sm:bg-inherit";
10019
- var FROZEN_HEADER_CLASS = "sm:sticky sm:left-[var(--matrx-frozen-left)] sm:z-30";
10021
+ var FROZEN_CELL_CLASS = "sm:sticky sm:left-[var(--matrx-frozen-left)] sm:z-20 sm:bg-card";
10022
+ var FROZEN_HEADER_CLASS = "sm:sticky sm:left-[var(--matrx-frozen-left)] sm:z-30 sm:bg-muted";
10023
+ var FROZEN_ROW_TINT_CLASS = {
10024
+ slate: "sm:bg-[color-mix(in_oklab,var(--color-slate-100)_70%,var(--color-card))] dark:sm:bg-[color-mix(in_oklab,var(--color-slate-800)_40%,var(--color-card))]",
10025
+ green: "sm:bg-[color-mix(in_oklab,var(--color-green-50)_100%,var(--color-card))] dark:sm:bg-[color-mix(in_oklab,var(--color-green-950)_40%,var(--color-card))]",
10026
+ amber: "sm:bg-[color-mix(in_oklab,var(--color-amber-50)_100%,var(--color-card))] dark:sm:bg-[color-mix(in_oklab,var(--color-amber-950)_40%,var(--color-card))]",
10027
+ red: "sm:bg-[color-mix(in_oklab,var(--color-red-50)_100%,var(--color-card))] dark:sm:bg-[color-mix(in_oklab,var(--color-red-950)_40%,var(--color-card))]",
10028
+ blue: "sm:bg-[color-mix(in_oklab,var(--color-blue-50)_100%,var(--color-card))] dark:sm:bg-[color-mix(in_oklab,var(--color-blue-950)_40%,var(--color-card))]",
10029
+ violet: "sm:bg-[color-mix(in_oklab,var(--color-violet-50)_100%,var(--color-card))] dark:sm:bg-[color-mix(in_oklab,var(--color-violet-950)_40%,var(--color-card))]",
10030
+ teal: "sm:bg-[color-mix(in_oklab,var(--color-teal-50)_100%,var(--color-card))] dark:sm:bg-[color-mix(in_oklab,var(--color-teal-950)_40%,var(--color-card))]"
10031
+ };
10032
+ var FROZEN_CELL_TINT_CLASS = {
10033
+ slate: "sm:bg-[color-mix(in_oklab,var(--color-slate-200)_70%,var(--color-card))] dark:sm:bg-[color-mix(in_oklab,var(--color-slate-700)_50%,var(--color-card))]",
10034
+ green: "sm:bg-[color-mix(in_oklab,var(--color-green-100)_100%,var(--color-card))] dark:sm:bg-[color-mix(in_oklab,var(--color-green-900)_50%,var(--color-card))]",
10035
+ amber: "sm:bg-[color-mix(in_oklab,var(--color-amber-100)_100%,var(--color-card))] dark:sm:bg-[color-mix(in_oklab,var(--color-amber-900)_50%,var(--color-card))]",
10036
+ red: "sm:bg-[color-mix(in_oklab,var(--color-red-100)_100%,var(--color-card))] dark:sm:bg-[color-mix(in_oklab,var(--color-red-900)_50%,var(--color-card))]",
10037
+ blue: "sm:bg-[color-mix(in_oklab,var(--color-blue-100)_100%,var(--color-card))] dark:sm:bg-[color-mix(in_oklab,var(--color-blue-900)_50%,var(--color-card))]",
10038
+ violet: "sm:bg-[color-mix(in_oklab,var(--color-violet-100)_100%,var(--color-card))] dark:sm:bg-[color-mix(in_oklab,var(--color-violet-900)_50%,var(--color-card))]",
10039
+ teal: "sm:bg-[color-mix(in_oklab,var(--color-teal-100)_100%,var(--color-card))] dark:sm:bg-[color-mix(in_oklab,var(--color-teal-900)_50%,var(--color-card))]"
10040
+ };
10020
10041
  var FROZEN_EDGE_CLASS = "sm:shadow-[inset_-1px_0_0_var(--border)]";
10021
10042
 
10022
10043
  // src/field-formats/registry.ts
@@ -10912,8 +10933,9 @@ function EditableTableCell({
10912
10933
  /* @__PURE__ */ jsxs29(
10913
10934
  PopoverContent,
10914
10935
  {
10936
+ sizing: "content",
10915
10937
  align: "start",
10916
- className: "w-56 p-2",
10938
+ className: "p-2",
10917
10939
  onClick: (e) => e.stopPropagation(),
10918
10940
  children: [
10919
10941
  /* @__PURE__ */ jsx39(
@@ -12684,23 +12706,29 @@ function MatrxDataTableCore({
12684
12706
  const styleFieldOf = tableStyle?.fieldOf ?? ((id) => id);
12685
12707
  const styleDocumentOf = tableStyle?.documentOf ?? ((row) => row);
12686
12708
  const noChoiceColor = () => void 0;
12687
- const rowTintClass = (row, id) => {
12688
- if (!tableStyle) return void 0;
12689
- const color = resolveRowColor(
12709
+ const rowTintColor = (row, id) => {
12710
+ if (!tableStyle) return null;
12711
+ return resolveRowColor(
12690
12712
  tableStyle.style,
12691
12713
  { id, data: styleDocumentOf(row) },
12692
12714
  tableStyle.choiceColorFor ?? noChoiceColor
12693
12715
  );
12716
+ };
12717
+ const rowTintClass = (row, id) => {
12718
+ const color = rowTintColor(row, id);
12694
12719
  return color ? ROW_TINT_CLASS[color] : void 0;
12695
12720
  };
12696
- const cellTintClass = (row, id, colId) => {
12697
- if (!tableStyle) return void 0;
12698
- const color = resolveCellColor(
12721
+ const cellTintColor = (row, id, colId) => {
12722
+ if (!tableStyle) return null;
12723
+ return resolveCellColor(
12699
12724
  tableStyle.style,
12700
12725
  { id, data: styleDocumentOf(row) },
12701
12726
  styleFieldOf(colId),
12702
12727
  tableStyle.choiceColorFor ?? noChoiceColor
12703
12728
  );
12729
+ };
12730
+ const cellTintClass = (row, id, colId) => {
12731
+ const color = cellTintColor(row, id, colId);
12704
12732
  return color ? CELL_TINT_CLASS[color] : void 0;
12705
12733
  };
12706
12734
  const declaredVisibleCopyColumns = useMemo8(
@@ -13069,14 +13097,14 @@ function MatrxDataTableCore({
13069
13097
  const coverageResult = useMemo8(() => {
13070
13098
  if (!coverage) return null;
13071
13099
  return describeCoverage({
13072
- loaded: processed.length,
13100
+ loaded: data.length,
13073
13101
  ...coverage.matched === void 0 ? {} : { matched: coverage.matched },
13074
13102
  ...coverage.total === void 0 ? {} : { total: coverage.total },
13075
13103
  ...coverage.cap === void 0 ? {} : { cap: coverage.cap },
13076
13104
  answeredBy: coverage.answeredBy ?? "client",
13077
13105
  ...coverage.noun === void 0 ? {} : { noun: coverage.noun }
13078
13106
  });
13079
- }, [coverage, processed.length]);
13107
+ }, [coverage, data.length]);
13080
13108
  const bodyEntries = useMemo8(() => {
13081
13109
  const from = effectiveRowWindow ? effectiveRowWindow.start : 0;
13082
13110
  const to = effectiveRowWindow ? effectiveRowWindow.end : void 0;
@@ -13297,13 +13325,26 @@ function MatrxDataTableCore({
13297
13325
  setWindowRowSnapshot(null);
13298
13326
  };
13299
13327
  const canExpandRow = (row) => Boolean(expandedDetail && (expandedDetail.canExpand?.(row) ?? true));
13300
- const isRowExpanded = (row) => canExpandRow(row) && expandedDetail?.expandedId === getRowId(row);
13328
+ const isMultiExpandedDetail = (detail2) => "expandedIds" in detail2;
13329
+ const isRowExpanded = (row) => {
13330
+ if (!expandedDetail || !canExpandRow(row)) return false;
13331
+ const id = getRowId(row);
13332
+ return isMultiExpandedDetail(expandedDetail) ? expandedDetail.expandedIds.has(id) : expandedDetail.expandedId === id;
13333
+ };
13301
13334
  const toggleExpanded = (row) => {
13302
13335
  if (!expandedDetail || !canExpandRow(row)) return;
13303
13336
  const id = getRowId(row);
13304
- expandedDetail.onExpandedIdChange(
13305
- expandedDetail.expandedId === id ? null : id
13306
- );
13337
+ if (isMultiExpandedDetail(expandedDetail)) {
13338
+ const nextExpandedIds = new Set(expandedDetail.expandedIds);
13339
+ if (nextExpandedIds.has(id)) {
13340
+ nextExpandedIds.delete(id);
13341
+ } else {
13342
+ nextExpandedIds.add(id);
13343
+ }
13344
+ expandedDetail.onExpandedIdsChange(nextExpandedIds);
13345
+ return;
13346
+ }
13347
+ expandedDetail.onExpandedIdChange(expandedDetail.expandedId === id ? null : id);
13307
13348
  };
13308
13349
  const openRow = (row) => {
13309
13350
  if (canExpandRow(row)) {
@@ -14341,6 +14382,19 @@ function MatrxDataTableCore({
14341
14382
  }
14342
14383
  ),
14343
14384
  /* @__PURE__ */ jsxs32("div", { "data-matrx-table-body-region": true, className: "flex min-h-0 flex-1 flex-col gap-2", children: [
14385
+ coverageResult && coverageResult.notice ? /* @__PURE__ */ jsxs32(
14386
+ "div",
14387
+ {
14388
+ "data-matrx-table-coverage": true,
14389
+ "data-matrx-table-coverage-scope": coverageResult.scope,
14390
+ role: "status",
14391
+ className: "flex shrink-0 items-start gap-2 rounded-md border border-amber-300/70 bg-amber-50 px-3 py-2 text-xs text-amber-900 dark:border-amber-500/40 dark:bg-amber-950/40 dark:text-amber-200",
14392
+ children: [
14393
+ /* @__PURE__ */ jsx42("span", { className: "font-semibold", children: coverageResult.badge }),
14394
+ /* @__PURE__ */ jsx42("span", { children: coverageResult.notice })
14395
+ ]
14396
+ }
14397
+ ) : null,
14344
14398
  /* @__PURE__ */ jsxs32("div", { className: "relative min-h-0 flex-1", children: [
14345
14399
  mobileCards ? /* @__PURE__ */ jsxs32(
14346
14400
  "div",
@@ -14447,19 +14501,6 @@ function MatrxDataTableCore({
14447
14501
  ]
14448
14502
  }
14449
14503
  ) : null,
14450
- coverageResult && coverageResult.notice ? /* @__PURE__ */ jsxs32(
14451
- "div",
14452
- {
14453
- "data-matrx-table-coverage": true,
14454
- "data-matrx-table-coverage-scope": coverageResult.scope,
14455
- role: "status",
14456
- className: "mb-1 flex items-start gap-2 rounded-md border border-amber-300/70 bg-amber-50 px-3 py-2 text-xs text-amber-900 dark:border-amber-500/40 dark:bg-amber-950/40 dark:text-amber-200",
14457
- children: [
14458
- /* @__PURE__ */ jsx42("span", { className: "font-semibold", children: coverageResult.badge }),
14459
- /* @__PURE__ */ jsx42("span", { children: coverageResult.notice })
14460
- ]
14461
- }
14462
- ) : null,
14463
14504
  /* @__PURE__ */ jsxs32(
14464
14505
  "div",
14465
14506
  {
@@ -14546,7 +14587,10 @@ function MatrxDataTableCore({
14546
14587
  "th",
14547
14588
  {
14548
14589
  "data-matrx-table-selection-column": true,
14549
- className: "h-9 w-9 px-2 text-left align-middle",
14590
+ className: cn(
14591
+ "h-9 w-9 px-2 text-left align-middle",
14592
+ frozenColumns.selectionOffset !== null && "sm:sticky sm:left-0 sm:z-30 sm:bg-muted"
14593
+ ),
14550
14594
  style: fixedUtilityWidth(fixedTableGeometry?.selectionWidth),
14551
14595
  children: /* @__PURE__ */ jsx42(
14552
14596
  "div",
@@ -14808,6 +14852,9 @@ function MatrxDataTableCore({
14808
14852
  const displayRow = applyRowEdits(row, rowEdits);
14809
14853
  const controls = buildRecordControls(displayRow);
14810
14854
  const isChecked = selectedIdSet.has(id);
14855
+ const rowTint = rowTintColor(row, id);
14856
+ const canHoverFrozenCell = !rowTint && (detailEnabled || Boolean(onRowOpen) || canExpandRow(row));
14857
+ const frozenRowBackgroundClass = rowTint ? FROZEN_ROW_TINT_CLASS[rowTint] : highlightedIndex === index || isSelected ? "sm:bg-muted" : isChecked ? "sm:bg-[color-mix(in_oklab,var(--color-primary)_5%,var(--color-card))]" : zebra && index % 2 === 1 ? "sm:bg-[color-mix(in_oklab,var(--color-muted)_20%,var(--color-card))]" : "sm:bg-card";
14811
14858
  const rowNode = /* @__PURE__ */ jsxs32(
14812
14859
  "tr",
14813
14860
  {
@@ -14835,7 +14882,7 @@ function MatrxDataTableCore({
14835
14882
  // Keep the mobile row opaque while the complete row scrolls
14836
14883
  // horizontally. The translucent zebra/hover tints remain
14837
14884
  // desktop-only so densely layered mobile content stays crisp.
14838
- "border-b border-border/60 bg-card transition-colors",
14885
+ "group/matrx-row border-b border-border/60 bg-card transition-colors",
14839
14886
  (detailEnabled || Boolean(onRowOpen) || canExpandRow(row)) && "cursor-pointer sm:hover:bg-muted/50",
14840
14887
  isSelected && "bg-muted",
14841
14888
  isChecked && "bg-primary/5",
@@ -14859,7 +14906,11 @@ function MatrxDataTableCore({
14859
14906
  // When a data column is frozen the checkbox
14860
14907
  // column has to freeze with it, or the first
14861
14908
  // frozen column slides over the checkboxes.
14862
- frozenColumns.selectionOffset !== null && "sm:sticky sm:left-0 sm:z-20 sm:bg-inherit"
14909
+ frozenColumns.selectionOffset !== null && cn(
14910
+ "sm:sticky sm:left-0 sm:z-20",
14911
+ frozenRowBackgroundClass,
14912
+ canHoverFrozenCell && "sm:group-hover/matrx-row:bg-[color-mix(in_oklab,var(--color-muted)_50%,var(--color-card))]"
14913
+ )
14863
14914
  ),
14864
14915
  style: fixedUtilityWidth(fixedTableGeometry?.selectionWidth),
14865
14916
  onClick: (e) => e.stopPropagation(),
@@ -14899,6 +14950,12 @@ function MatrxDataTableCore({
14899
14950
  const isColumnDragShadow = columnDragPreview?.draggedId === columnId(col) && columnDragPreview.targetId !== null;
14900
14951
  const sheetCell = spreadsheetEnabled ? sheet.cellProps(id, columnId(col)) : null;
14901
14952
  const carriesFillHandle = sheetCell !== null && sheet.isFillHandleCell(id, columnId(col));
14953
+ const frozen = frozenColumns.offsets[columnId(col)] !== void 0;
14954
+ const frozenCellTint = cellTintColor(
14955
+ row,
14956
+ id,
14957
+ columnId(col)
14958
+ );
14902
14959
  return /* @__PURE__ */ jsxs32(
14903
14960
  "td",
14904
14961
  {
@@ -14929,12 +14986,16 @@ function MatrxDataTableCore({
14929
14986
  isColumnDragShadow && "bg-primary/10 shadow-[inset_2px_0_0_var(--primary),inset_-2px_0_0_var(--primary)]",
14930
14987
  alignForFormat(col) === "center" && "text-center",
14931
14988
  alignForFormat(col) === "right" && "text-right",
14932
- frozenColumns.offsets[columnId(col)] !== void 0 && FROZEN_CELL_CLASS,
14989
+ frozen && FROZEN_CELL_CLASS,
14990
+ frozen && frozenRowBackgroundClass,
14991
+ frozen && sheetCell?.["data-matrx-cell-selected"] && "sm:bg-[color-mix(in_oklab,var(--color-primary)_10%,var(--color-card))]",
14992
+ frozen && canHoverFrozenCell && "sm:group-hover/matrx-row:bg-[color-mix(in_oklab,var(--color-muted)_50%,var(--color-card))]",
14933
14993
  frozenEdgeId === columnId(col) && FROZEN_EDGE_CLASS,
14934
14994
  // A cell tint paints OVER the row tint beneath
14935
14995
  // it, and the consumer's own hook comes last so
14936
14996
  // it can always win.
14937
14997
  cellTintClass(row, id, columnId(col)),
14998
+ frozen && frozenCellTint && FROZEN_CELL_TINT_CLASS[frozenCellTint],
14938
14999
  cellClassName?.(row, columnId(col), index)
14939
15000
  ),
14940
15001
  style: {