@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,4 +1,4 @@
1
- import { M as MatrxColumnDef, C as ColumnFiltersState, S as SortState, L as LayeredFilterRule, T as TableSearchMatchMode, a as ColumnFilterValue } from '../types-CYkwg9jR.cjs';
1
+ import { M as MatrxColumnDef, C as ColumnFiltersState, S as SortState, L as LayeredFilterRule, T as TableSearchMatchMode, a as ColumnFilterValue } from '../types-kiV-CAuZ.cjs';
2
2
  import '../content-transfer.cjs';
3
3
  import 'react';
4
4
  import '@ai-matrx/kit/content-transfer';
@@ -1,4 +1,4 @@
1
- import { M as MatrxColumnDef, C as ColumnFiltersState, S as SortState, L as LayeredFilterRule, T as TableSearchMatchMode, a as ColumnFilterValue } from '../types-CFmCZXVn.js';
1
+ import { M as MatrxColumnDef, C as ColumnFiltersState, S as SortState, L as LayeredFilterRule, T as TableSearchMatchMode, a as ColumnFilterValue } from '../types-Cxm5XK0L.js';
2
2
  import '../content-transfer.js';
3
3
  import 'react';
4
4
  import '@ai-matrx/kit/content-transfer';
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import { ComponentType, ReactNode, MouseEventHandler } from 'react';
3
3
  import { CopyControlProps } from './copy-types.cjs';
4
4
  export { AgentPayloadInput, AiCustomSource, AiVariant, CopyExportConfig } from './copy-types.cjs';
5
- import { b as TableSavedViewsProps, c as MatrxDataTableDensity, d as MatrxDataTableRecordControls } from '../types-CYkwg9jR.cjs';
5
+ import { b as TableSavedViewsProps, c as MatrxDataTableDensity, d as MatrxDataTableRecordControls } from '../types-kiV-CAuZ.cjs';
6
6
  import { MatrxTableMenuTarget, MatrxTableMenuPayload } from './menu-targets.cjs';
7
7
  import '../content-transfer.cjs';
8
8
  import '@ai-matrx/kit/content-transfer';
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import { ComponentType, ReactNode, MouseEventHandler } from 'react';
3
3
  import { CopyControlProps } from './copy-types.js';
4
4
  export { AgentPayloadInput, AiCustomSource, AiVariant, CopyExportConfig } from './copy-types.js';
5
- import { b as TableSavedViewsProps, c as MatrxDataTableDensity, d as MatrxDataTableRecordControls } from '../types-CFmCZXVn.js';
5
+ import { b as TableSavedViewsProps, c as MatrxDataTableDensity, d as MatrxDataTableRecordControls } from '../types-Cxm5XK0L.js';
6
6
  import { MatrxTableMenuTarget, MatrxTableMenuPayload } from './menu-targets.js';
7
7
  import '../content-transfer.js';
8
8
  import '@ai-matrx/kit/content-transfer';
@@ -2594,6 +2594,7 @@ var PopoverContent = React13.forwardRef(
2594
2594
  sideOffset = 4,
2595
2595
  container,
2596
2596
  animated = true,
2597
+ sizing = "fixed",
2597
2598
  ...props
2598
2599
  }, ref) => {
2599
2600
  const portalContainer = usePortalContainer(container);
@@ -2610,7 +2611,8 @@ var PopoverContent = React13.forwardRef(
2610
2611
  // z, DOM portal order decides, so a dialog opened FROM a popover stacks
2611
2612
  // above it, and a popover opened from a dialog still stacks above the
2612
2613
  // dialog. z-[10001] buried dialogs behind fullscreen popovers.
2613
- "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",
2614
+ "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",
2615
+ 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",
2614
2616
  animated && MOTION_POPPER,
2615
2617
  className
2616
2618
  ),
@@ -6296,8 +6298,9 @@ function ColumnHeaderCell({
6296
6298
  const menuContent = /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
6297
6299
  PopoverContent,
6298
6300
  {
6301
+ sizing: "content",
6299
6302
  align: "start",
6300
- className: "w-64 p-2",
6303
+ className: "p-2",
6301
6304
  onClick: (e) => e.stopPropagation(),
6302
6305
  onOpenAutoFocus: (event) => {
6303
6306
  const content = event.currentTarget;
@@ -10084,8 +10087,26 @@ function pixelWidth(width) {
10084
10087
  }
10085
10088
  return void 0;
10086
10089
  }
10087
- var FROZEN_CELL_CLASS = "sm:sticky sm:left-[var(--matrx-frozen-left)] sm:z-20 sm:bg-inherit";
10088
- var FROZEN_HEADER_CLASS = "sm:sticky sm:left-[var(--matrx-frozen-left)] sm:z-30";
10090
+ var FROZEN_CELL_CLASS = "sm:sticky sm:left-[var(--matrx-frozen-left)] sm:z-20 sm:bg-card";
10091
+ var FROZEN_HEADER_CLASS = "sm:sticky sm:left-[var(--matrx-frozen-left)] sm:z-30 sm:bg-muted";
10092
+ var FROZEN_ROW_TINT_CLASS = {
10093
+ 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))]",
10094
+ 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))]",
10095
+ 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))]",
10096
+ 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))]",
10097
+ 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))]",
10098
+ 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))]",
10099
+ 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))]"
10100
+ };
10101
+ var FROZEN_CELL_TINT_CLASS = {
10102
+ 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))]",
10103
+ 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))]",
10104
+ 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))]",
10105
+ 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))]",
10106
+ 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))]",
10107
+ 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))]",
10108
+ 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))]"
10109
+ };
10089
10110
  var FROZEN_EDGE_CLASS = "sm:shadow-[inset_-1px_0_0_var(--border)]";
10090
10111
 
10091
10112
  // src/field-formats/registry.ts
@@ -10977,8 +10998,9 @@ function EditableTableCell({
10977
10998
  /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
10978
10999
  PopoverContent,
10979
11000
  {
11001
+ sizing: "content",
10980
11002
  align: "start",
10981
- className: "w-56 p-2",
11003
+ className: "p-2",
10982
11004
  onClick: (e) => e.stopPropagation(),
10983
11005
  children: [
10984
11006
  /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
@@ -12749,23 +12771,29 @@ function MatrxDataTableCore({
12749
12771
  const styleFieldOf = tableStyle?.fieldOf ?? ((id) => id);
12750
12772
  const styleDocumentOf = tableStyle?.documentOf ?? ((row) => row);
12751
12773
  const noChoiceColor = () => void 0;
12752
- const rowTintClass = (row, id) => {
12753
- if (!tableStyle) return void 0;
12754
- const color = resolveRowColor(
12774
+ const rowTintColor = (row, id) => {
12775
+ if (!tableStyle) return null;
12776
+ return resolveRowColor(
12755
12777
  tableStyle.style,
12756
12778
  { id, data: styleDocumentOf(row) },
12757
12779
  tableStyle.choiceColorFor ?? noChoiceColor
12758
12780
  );
12781
+ };
12782
+ const rowTintClass = (row, id) => {
12783
+ const color = rowTintColor(row, id);
12759
12784
  return color ? ROW_TINT_CLASS[color] : void 0;
12760
12785
  };
12761
- const cellTintClass = (row, id, colId) => {
12762
- if (!tableStyle) return void 0;
12763
- const color = resolveCellColor(
12786
+ const cellTintColor = (row, id, colId) => {
12787
+ if (!tableStyle) return null;
12788
+ return resolveCellColor(
12764
12789
  tableStyle.style,
12765
12790
  { id, data: styleDocumentOf(row) },
12766
12791
  styleFieldOf(colId),
12767
12792
  tableStyle.choiceColorFor ?? noChoiceColor
12768
12793
  );
12794
+ };
12795
+ const cellTintClass = (row, id, colId) => {
12796
+ const color = cellTintColor(row, id, colId);
12769
12797
  return color ? CELL_TINT_CLASS[color] : void 0;
12770
12798
  };
12771
12799
  const declaredVisibleCopyColumns = (0, import_react21.useMemo)(
@@ -13134,14 +13162,14 @@ function MatrxDataTableCore({
13134
13162
  const coverageResult = (0, import_react21.useMemo)(() => {
13135
13163
  if (!coverage) return null;
13136
13164
  return describeCoverage({
13137
- loaded: processed.length,
13165
+ loaded: data.length,
13138
13166
  ...coverage.matched === void 0 ? {} : { matched: coverage.matched },
13139
13167
  ...coverage.total === void 0 ? {} : { total: coverage.total },
13140
13168
  ...coverage.cap === void 0 ? {} : { cap: coverage.cap },
13141
13169
  answeredBy: coverage.answeredBy ?? "client",
13142
13170
  ...coverage.noun === void 0 ? {} : { noun: coverage.noun }
13143
13171
  });
13144
- }, [coverage, processed.length]);
13172
+ }, [coverage, data.length]);
13145
13173
  const bodyEntries = (0, import_react21.useMemo)(() => {
13146
13174
  const from = effectiveRowWindow ? effectiveRowWindow.start : 0;
13147
13175
  const to = effectiveRowWindow ? effectiveRowWindow.end : void 0;
@@ -13362,13 +13390,26 @@ function MatrxDataTableCore({
13362
13390
  setWindowRowSnapshot(null);
13363
13391
  };
13364
13392
  const canExpandRow = (row) => Boolean(expandedDetail && (expandedDetail.canExpand?.(row) ?? true));
13365
- const isRowExpanded = (row) => canExpandRow(row) && expandedDetail?.expandedId === getRowId(row);
13393
+ const isMultiExpandedDetail = (detail2) => "expandedIds" in detail2;
13394
+ const isRowExpanded = (row) => {
13395
+ if (!expandedDetail || !canExpandRow(row)) return false;
13396
+ const id = getRowId(row);
13397
+ return isMultiExpandedDetail(expandedDetail) ? expandedDetail.expandedIds.has(id) : expandedDetail.expandedId === id;
13398
+ };
13366
13399
  const toggleExpanded = (row) => {
13367
13400
  if (!expandedDetail || !canExpandRow(row)) return;
13368
13401
  const id = getRowId(row);
13369
- expandedDetail.onExpandedIdChange(
13370
- expandedDetail.expandedId === id ? null : id
13371
- );
13402
+ if (isMultiExpandedDetail(expandedDetail)) {
13403
+ const nextExpandedIds = new Set(expandedDetail.expandedIds);
13404
+ if (nextExpandedIds.has(id)) {
13405
+ nextExpandedIds.delete(id);
13406
+ } else {
13407
+ nextExpandedIds.add(id);
13408
+ }
13409
+ expandedDetail.onExpandedIdsChange(nextExpandedIds);
13410
+ return;
13411
+ }
13412
+ expandedDetail.onExpandedIdChange(expandedDetail.expandedId === id ? null : id);
13372
13413
  };
13373
13414
  const openRow = (row) => {
13374
13415
  if (canExpandRow(row)) {
@@ -14406,6 +14447,19 @@ function MatrxDataTableCore({
14406
14447
  }
14407
14448
  ),
14408
14449
  /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { "data-matrx-table-body-region": true, className: "flex min-h-0 flex-1 flex-col gap-2", children: [
14450
+ coverageResult && coverageResult.notice ? /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
14451
+ "div",
14452
+ {
14453
+ "data-matrx-table-coverage": true,
14454
+ "data-matrx-table-coverage-scope": coverageResult.scope,
14455
+ role: "status",
14456
+ 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",
14457
+ children: [
14458
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "font-semibold", children: coverageResult.badge }),
14459
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { children: coverageResult.notice })
14460
+ ]
14461
+ }
14462
+ ) : null,
14409
14463
  /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "relative min-h-0 flex-1", children: [
14410
14464
  mobileCards ? /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
14411
14465
  "div",
@@ -14512,19 +14566,6 @@ function MatrxDataTableCore({
14512
14566
  ]
14513
14567
  }
14514
14568
  ) : null,
14515
- coverageResult && coverageResult.notice ? /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
14516
- "div",
14517
- {
14518
- "data-matrx-table-coverage": true,
14519
- "data-matrx-table-coverage-scope": coverageResult.scope,
14520
- role: "status",
14521
- 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",
14522
- children: [
14523
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "font-semibold", children: coverageResult.badge }),
14524
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { children: coverageResult.notice })
14525
- ]
14526
- }
14527
- ) : null,
14528
14569
  /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
14529
14570
  "div",
14530
14571
  {
@@ -14611,7 +14652,10 @@ function MatrxDataTableCore({
14611
14652
  "th",
14612
14653
  {
14613
14654
  "data-matrx-table-selection-column": true,
14614
- className: "h-9 w-9 px-2 text-left align-middle",
14655
+ className: cn(
14656
+ "h-9 w-9 px-2 text-left align-middle",
14657
+ frozenColumns.selectionOffset !== null && "sm:sticky sm:left-0 sm:z-30 sm:bg-muted"
14658
+ ),
14615
14659
  style: fixedUtilityWidth(fixedTableGeometry?.selectionWidth),
14616
14660
  children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
14617
14661
  "div",
@@ -14873,6 +14917,9 @@ function MatrxDataTableCore({
14873
14917
  const displayRow = applyRowEdits(row, rowEdits);
14874
14918
  const controls = buildRecordControls(displayRow);
14875
14919
  const isChecked = selectedIdSet.has(id);
14920
+ const rowTint = rowTintColor(row, id);
14921
+ const canHoverFrozenCell = !rowTint && (detailEnabled || Boolean(onRowOpen) || canExpandRow(row));
14922
+ 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";
14876
14923
  const rowNode = /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
14877
14924
  "tr",
14878
14925
  {
@@ -14900,7 +14947,7 @@ function MatrxDataTableCore({
14900
14947
  // Keep the mobile row opaque while the complete row scrolls
14901
14948
  // horizontally. The translucent zebra/hover tints remain
14902
14949
  // desktop-only so densely layered mobile content stays crisp.
14903
- "border-b border-border/60 bg-card transition-colors",
14950
+ "group/matrx-row border-b border-border/60 bg-card transition-colors",
14904
14951
  (detailEnabled || Boolean(onRowOpen) || canExpandRow(row)) && "cursor-pointer sm:hover:bg-muted/50",
14905
14952
  isSelected && "bg-muted",
14906
14953
  isChecked && "bg-primary/5",
@@ -14924,7 +14971,11 @@ function MatrxDataTableCore({
14924
14971
  // When a data column is frozen the checkbox
14925
14972
  // column has to freeze with it, or the first
14926
14973
  // frozen column slides over the checkboxes.
14927
- frozenColumns.selectionOffset !== null && "sm:sticky sm:left-0 sm:z-20 sm:bg-inherit"
14974
+ frozenColumns.selectionOffset !== null && cn(
14975
+ "sm:sticky sm:left-0 sm:z-20",
14976
+ frozenRowBackgroundClass,
14977
+ canHoverFrozenCell && "sm:group-hover/matrx-row:bg-[color-mix(in_oklab,var(--color-muted)_50%,var(--color-card))]"
14978
+ )
14928
14979
  ),
14929
14980
  style: fixedUtilityWidth(fixedTableGeometry?.selectionWidth),
14930
14981
  onClick: (e) => e.stopPropagation(),
@@ -14964,6 +15015,12 @@ function MatrxDataTableCore({
14964
15015
  const isColumnDragShadow = columnDragPreview?.draggedId === columnId(col) && columnDragPreview.targetId !== null;
14965
15016
  const sheetCell = spreadsheetEnabled ? sheet.cellProps(id, columnId(col)) : null;
14966
15017
  const carriesFillHandle = sheetCell !== null && sheet.isFillHandleCell(id, columnId(col));
15018
+ const frozen = frozenColumns.offsets[columnId(col)] !== void 0;
15019
+ const frozenCellTint = cellTintColor(
15020
+ row,
15021
+ id,
15022
+ columnId(col)
15023
+ );
14967
15024
  return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
14968
15025
  "td",
14969
15026
  {
@@ -14994,12 +15051,16 @@ function MatrxDataTableCore({
14994
15051
  isColumnDragShadow && "bg-primary/10 shadow-[inset_2px_0_0_var(--primary),inset_-2px_0_0_var(--primary)]",
14995
15052
  alignForFormat(col) === "center" && "text-center",
14996
15053
  alignForFormat(col) === "right" && "text-right",
14997
- frozenColumns.offsets[columnId(col)] !== void 0 && FROZEN_CELL_CLASS,
15054
+ frozen && FROZEN_CELL_CLASS,
15055
+ frozen && frozenRowBackgroundClass,
15056
+ frozen && sheetCell?.["data-matrx-cell-selected"] && "sm:bg-[color-mix(in_oklab,var(--color-primary)_10%,var(--color-card))]",
15057
+ frozen && canHoverFrozenCell && "sm:group-hover/matrx-row:bg-[color-mix(in_oklab,var(--color-muted)_50%,var(--color-card))]",
14998
15058
  frozenEdgeId === columnId(col) && FROZEN_EDGE_CLASS,
14999
15059
  // A cell tint paints OVER the row tint beneath
15000
15060
  // it, and the consumer's own hook comes last so
15001
15061
  // it can always win.
15002
15062
  cellTintClass(row, id, columnId(col)),
15063
+ frozen && frozenCellTint && FROZEN_CELL_TINT_CLASS[frozenCellTint],
15003
15064
  cellClassName?.(row, columnId(col), index)
15004
15065
  ),
15005
15066
  style: {