@ai-matrx/design-system 0.86.361 → 0.86.363

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 (79) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/carousel.js +5 -5
  3. package/dist/{chunk-ZU2ZODDD.js → chunk-2QFA6CK4.js} +4 -4
  4. package/dist/{chunk-UCEKAKHP.js → chunk-3YTF4MH2.js} +2 -2
  5. package/dist/{chunk-T57DLONB.js → chunk-AKSKVT2M.js} +17 -9
  6. package/dist/chunk-AKSKVT2M.js.map +1 -0
  7. package/dist/{chunk-LU75R6YX.js → chunk-KOUHF4JC.js} +2 -2
  8. package/dist/{chunk-HISATFYI.js → chunk-LS3C7IUV.js} +2 -2
  9. package/dist/{chunk-QK7GPIEA.js → chunk-QJ6SQNXD.js} +4 -4
  10. package/dist/{chunk-TSETPQWU.js → chunk-RO5CRIOL.js} +2 -2
  11. package/dist/{chunk-WHERV3VC.js → chunk-SOCDBDFS.js} +4 -4
  12. package/dist/{chunk-C5HYUXR2.js → chunk-UGUVTE77.js} +2 -2
  13. package/dist/{chunk-FF524V6P.js → chunk-VOLSYNJY.js} +3 -3
  14. package/dist/{chunk-WOA6WHV2.js → chunk-WLKHQGX5.js} +2 -2
  15. package/dist/{chunk-42GFQMLA.js → chunk-WUI5OFCH.js} +2 -2
  16. package/dist/clipboard-fallback-dialog.js +2 -2
  17. package/dist/controls.cjs +16 -8
  18. package/dist/controls.cjs.map +1 -1
  19. package/dist/controls.js +5 -5
  20. package/dist/data-table/data-row-inspector.js +5 -5
  21. package/dist/data-table/data-row-window.js +6 -6
  22. package/dist/data-table/index.cjs +859 -772
  23. package/dist/data-table/index.cjs.map +1 -1
  24. package/dist/data-table/index.js +542 -461
  25. package/dist/data-table/index.js.map +1 -1
  26. package/dist/data-table/pagination.cjs +16 -8
  27. package/dist/data-table/pagination.cjs.map +1 -1
  28. package/dist/data-table/pagination.js +3 -3
  29. package/dist/data-table/uuid-cell.js +3 -3
  30. package/dist/desktop.cjs +16 -8
  31. package/dist/desktop.cjs.map +1 -1
  32. package/dist/desktop.js +5 -5
  33. package/dist/index.cjs +386 -317
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.cts +34 -2
  36. package/dist/index.d.ts +34 -2
  37. package/dist/index.js +242 -193
  38. package/dist/index.js.map +1 -1
  39. package/dist/intro-stage.cjs +24 -3
  40. package/dist/intro-stage.cjs.map +1 -1
  41. package/dist/intro-stage.d.cts +9 -3
  42. package/dist/intro-stage.d.ts +9 -3
  43. package/dist/intro-stage.js +24 -3
  44. package/dist/intro-stage.js.map +1 -1
  45. package/dist/item.cjs +16 -8
  46. package/dist/item.cjs.map +1 -1
  47. package/dist/item.js +4 -4
  48. package/dist/lite-table.js +2 -2
  49. package/dist/menu-look.cjs +16 -8
  50. package/dist/menu-look.cjs.map +1 -1
  51. package/dist/menu-look.js +2 -2
  52. package/dist/record-list.cjs +16 -8
  53. package/dist/record-list.cjs.map +1 -1
  54. package/dist/record-list.js +4 -4
  55. package/dist/settings.js +3 -3
  56. package/dist/styles.css +31 -0
  57. package/dist/thumbnail-grid.cjs +27 -1
  58. package/dist/thumbnail-grid.cjs.map +1 -1
  59. package/dist/thumbnail-grid.d.cts +16 -2
  60. package/dist/thumbnail-grid.d.ts +16 -2
  61. package/dist/thumbnail-grid.js +27 -1
  62. package/dist/thumbnail-grid.js.map +1 -1
  63. package/dist/writing-field.cjs +3 -2
  64. package/dist/writing-field.cjs.map +1 -1
  65. package/dist/writing-field.js +6 -5
  66. package/dist/writing-field.js.map +1 -1
  67. package/package.json +2 -2
  68. package/dist/chunk-T57DLONB.js.map +0 -1
  69. /package/dist/{chunk-ZU2ZODDD.js.map → chunk-2QFA6CK4.js.map} +0 -0
  70. /package/dist/{chunk-UCEKAKHP.js.map → chunk-3YTF4MH2.js.map} +0 -0
  71. /package/dist/{chunk-LU75R6YX.js.map → chunk-KOUHF4JC.js.map} +0 -0
  72. /package/dist/{chunk-HISATFYI.js.map → chunk-LS3C7IUV.js.map} +0 -0
  73. /package/dist/{chunk-QK7GPIEA.js.map → chunk-QJ6SQNXD.js.map} +0 -0
  74. /package/dist/{chunk-TSETPQWU.js.map → chunk-RO5CRIOL.js.map} +0 -0
  75. /package/dist/{chunk-WHERV3VC.js.map → chunk-SOCDBDFS.js.map} +0 -0
  76. /package/dist/{chunk-C5HYUXR2.js.map → chunk-UGUVTE77.js.map} +0 -0
  77. /package/dist/{chunk-FF524V6P.js.map → chunk-VOLSYNJY.js.map} +0 -0
  78. /package/dist/{chunk-WOA6WHV2.js.map → chunk-WLKHQGX5.js.map} +0 -0
  79. /package/dist/{chunk-42GFQMLA.js.map → chunk-WUI5OFCH.js.map} +0 -0
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  DEFAULT_TABLE_PAGE_SIZES,
7
7
  GenericTablePagination
8
- } from "../chunk-HISATFYI.js";
8
+ } from "../chunk-LS3C7IUV.js";
9
9
  import {
10
10
  useScrollPagination
11
11
  } from "../chunk-VOFK23MG.js";
@@ -145,7 +145,7 @@ import {
145
145
  ConfirmDialog,
146
146
  EmptyState,
147
147
  Tile
148
- } from "../chunk-WOA6WHV2.js";
148
+ } from "../chunk-WLKHQGX5.js";
149
149
  import "../chunk-K4XCB576.js";
150
150
  import {
151
151
  ErrorBox
@@ -171,7 +171,7 @@ import {
171
171
  MacLookLayer,
172
172
  useMacLookAttributes,
173
173
  withMacLookDefaults
174
- } from "../chunk-C5HYUXR2.js";
174
+ } from "../chunk-UGUVTE77.js";
175
175
  import "../chunk-YC5GAO35.js";
176
176
  import {
177
177
  Checkbox
@@ -215,7 +215,7 @@ import {
215
215
  searchValueVariants,
216
216
  stringifyCellValue,
217
217
  tokenFromColumnName
218
- } from "../chunk-ZU2ZODDD.js";
218
+ } from "../chunk-2QFA6CK4.js";
219
219
  import {
220
220
  TIME_RANGE_PRESETS,
221
221
  TIME_RANGE_PRESET_VALUES,
@@ -239,7 +239,7 @@ import {
239
239
  } from "../chunk-FXT7PZAF.js";
240
240
  import {
241
241
  PropertyRow
242
- } from "../chunk-UCEKAKHP.js";
242
+ } from "../chunk-3YTF4MH2.js";
243
243
  import "../chunk-WFBPCMPF.js";
244
244
  import "../chunk-KGW373MK.js";
245
245
  import {
@@ -257,7 +257,7 @@ import {
257
257
  RecordId,
258
258
  shortUuid,
259
259
  useTableNotice
260
- } from "../chunk-TSETPQWU.js";
260
+ } from "../chunk-RO5CRIOL.js";
261
261
  import {
262
262
  Badge,
263
263
  Button as Button2,
@@ -266,7 +266,7 @@ import {
266
266
  SegmentedControl,
267
267
  Select as Select2,
268
268
  Tabs
269
- } from "../chunk-LU75R6YX.js";
269
+ } from "../chunk-KOUHF4JC.js";
270
270
  import "../chunk-BD77DHUO.js";
271
271
  import "../chunk-BKCJUFD3.js";
272
272
  import {
@@ -289,7 +289,7 @@ import {
289
289
  DropdownMenuSubContent,
290
290
  DropdownMenuSubTrigger,
291
291
  DropdownMenuTrigger
292
- } from "../chunk-T57DLONB.js";
292
+ } from "../chunk-AKSKVT2M.js";
293
293
  import "../chunk-BNXNIN2S.js";
294
294
  import {
295
295
  peopleErrorSentence
@@ -632,11 +632,11 @@ import {
632
632
  isValidElement,
633
633
  memo,
634
634
  useCallback as useCallback4,
635
- useEffect as useEffect14,
635
+ useEffect as useEffect15,
636
636
  useId as useId2,
637
637
  useLayoutEffect as useLayoutEffect2,
638
638
  useMemo as useMemo8,
639
- useRef as useRef14,
639
+ useRef as useRef15,
640
640
  useState as useState17,
641
641
  useContext as useContext5,
642
642
  createContext as createContext4
@@ -8203,7 +8203,86 @@ function hiddenWithColumnDefaults(order, hidden, columns) {
8203
8203
 
8204
8204
  // src/data-table/MatrxDataTable.tsx
8205
8205
  import { openOutbound as openOutbound2 } from "@ai-matrx/kit/outbound";
8206
- import { Fragment as Fragment15, jsx as jsx23, jsxs as jsxs22 } from "react/jsx-runtime";
8206
+
8207
+ // src/data-table/MultilineRowMarker.tsx
8208
+ import { useRef as useRef14 } from "react";
8209
+
8210
+ // src/data-table/multiline-rows.ts
8211
+ import { useEffect as useEffect14 } from "react";
8212
+ var MULTI = "multi";
8213
+ function cellTextIsMultiline(cell) {
8214
+ const lineHeight = Number.parseFloat(getComputedStyle(cell).lineHeight);
8215
+ const minStep = Number.isFinite(lineHeight) ? lineHeight * 0.75 : 10;
8216
+ const walker = cell.ownerDocument.createTreeWalker(cell, NodeFilter.SHOW_TEXT);
8217
+ const range = cell.ownerDocument.createRange();
8218
+ if (typeof range.getClientRects !== "function") return false;
8219
+ let firstTop = null;
8220
+ for (let node = walker.nextNode(); node; node = walker.nextNode()) {
8221
+ if (!node.textContent?.trim()) continue;
8222
+ range.selectNodeContents(node);
8223
+ for (const rect of Array.from(range.getClientRects())) {
8224
+ if (rect.width === 0 || rect.height === 0) continue;
8225
+ if (firstTop === null) firstTop = rect.top;
8226
+ else if (Math.abs(rect.top - firstTop) >= minStep) return true;
8227
+ }
8228
+ }
8229
+ return false;
8230
+ }
8231
+ function markRows(root) {
8232
+ for (const row of Array.from(root.querySelectorAll("tbody > tr[data-row-id]"))) {
8233
+ let multi = false;
8234
+ for (const cell of Array.from(row.querySelectorAll("[data-matrx-cell-content]"))) {
8235
+ if (cellTextIsMultiline(cell)) {
8236
+ multi = true;
8237
+ break;
8238
+ }
8239
+ }
8240
+ if (multi) {
8241
+ if (row.getAttribute("data-matrx-row-lines") !== MULTI) row.setAttribute("data-matrx-row-lines", MULTI);
8242
+ } else if (row.hasAttribute("data-matrx-row-lines")) {
8243
+ row.removeAttribute("data-matrx-row-lines");
8244
+ }
8245
+ }
8246
+ }
8247
+ function useMultilineRowMarker(anchorRef) {
8248
+ useEffect14(() => {
8249
+ const root = anchorRef.current?.closest("[data-matrx-table]");
8250
+ if (!root || typeof ResizeObserver === "undefined" || typeof MutationObserver === "undefined") return;
8251
+ let pending = false;
8252
+ const run = () => {
8253
+ pending = false;
8254
+ if (root.isConnected) markRows(root);
8255
+ };
8256
+ const schedule = () => {
8257
+ if (pending) return;
8258
+ pending = true;
8259
+ setTimeout(run, 0);
8260
+ };
8261
+ schedule();
8262
+ const mutations = new MutationObserver(schedule);
8263
+ mutations.observe(root, { childList: true, subtree: true, characterData: true });
8264
+ const sizes = new ResizeObserver(schedule);
8265
+ sizes.observe(root);
8266
+ document.addEventListener("visibilitychange", schedule);
8267
+ return () => {
8268
+ pending = true;
8269
+ mutations.disconnect();
8270
+ sizes.disconnect();
8271
+ document.removeEventListener("visibilitychange", schedule);
8272
+ };
8273
+ }, [anchorRef]);
8274
+ }
8275
+
8276
+ // src/data-table/MultilineRowMarker.tsx
8277
+ import { jsx as jsx23 } from "react/jsx-runtime";
8278
+ function MultilineRowMarker() {
8279
+ const anchorRef = useRef14(null);
8280
+ useMultilineRowMarker(anchorRef);
8281
+ return /* @__PURE__ */ jsx23("span", { ref: anchorRef, hidden: true, "aria-hidden": true, "data-matrx-multiline-row-marker": "" });
8282
+ }
8283
+
8284
+ // src/data-table/MatrxDataTable.tsx
8285
+ import { Fragment as Fragment15, jsx as jsx24, jsxs as jsxs22 } from "react/jsx-runtime";
8207
8286
  var EMPTY_TABLE_ROWS = [];
8208
8287
  function TableToolbarAction({
8209
8288
  HostAction,
@@ -8216,7 +8295,7 @@ function TableToolbarAction({
8216
8295
  }) {
8217
8296
  const listed = useToolbarListed();
8218
8297
  if (listed) {
8219
- return /* @__PURE__ */ jsx23("span", { "data-matrx-table-toolbar-action": true, className: "inline-flex", children: /* @__PURE__ */ jsxs22(
8298
+ return /* @__PURE__ */ jsx24("span", { "data-matrx-table-toolbar-action": true, className: "inline-flex", children: /* @__PURE__ */ jsxs22(
8220
8299
  Button,
8221
8300
  {
8222
8301
  type: "button",
@@ -8230,16 +8309,16 @@ function TableToolbarAction({
8230
8309
  onClick,
8231
8310
  children: [
8232
8311
  isValidElement(children) ? cloneElement(children, { className: cn("h-4 w-4", children.props.className) }) : children,
8233
- /* @__PURE__ */ jsx23("span", { children: ariaLabel })
8312
+ /* @__PURE__ */ jsx24("span", { children: ariaLabel })
8234
8313
  ]
8235
8314
  }
8236
8315
  ) });
8237
8316
  }
8238
8317
  if (HostAction) {
8239
- return /* @__PURE__ */ jsx23("span", { "data-matrx-table-toolbar-action": true, children: /* @__PURE__ */ jsx23(HostAction, { ariaLabel, tooltip, disabled, busy, onClick, children }) });
8318
+ return /* @__PURE__ */ jsx24("span", { "data-matrx-table-toolbar-action": true, children: /* @__PURE__ */ jsx24(HostAction, { ariaLabel, tooltip, disabled, busy, onClick, children }) });
8240
8319
  }
8241
8320
  return /* @__PURE__ */ jsxs22(Tooltip, { children: [
8242
- /* @__PURE__ */ jsx23(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx23("span", { "data-matrx-table-toolbar-action": true, className: "inline-flex", children: /* @__PURE__ */ jsx23(
8321
+ /* @__PURE__ */ jsx24(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx24("span", { "data-matrx-table-toolbar-action": true, className: "inline-flex", children: /* @__PURE__ */ jsx24(
8243
8322
  Button2,
8244
8323
  {
8245
8324
  variant: "quiet",
@@ -8251,7 +8330,7 @@ function TableToolbarAction({
8251
8330
  icon: children
8252
8331
  }
8253
8332
  ) }) }),
8254
- /* @__PURE__ */ jsx23(TooltipContent, { children: tooltip ?? ariaLabel })
8333
+ /* @__PURE__ */ jsx24(TooltipContent, { children: tooltip ?? ariaLabel })
8255
8334
  ] });
8256
8335
  }
8257
8336
  function customActionsHeaderNeed(header) {
@@ -8276,7 +8355,7 @@ function TableRowCopyControl({
8276
8355
  sourceId,
8277
8356
  defaultColumns
8278
8357
  }) {
8279
- return /* @__PURE__ */ jsx23(DeferredCopyButtons, { size, ...tableRowCopyProps(copy, row, sourceId, defaultColumns) });
8358
+ return /* @__PURE__ */ jsx24(DeferredCopyButtons, { size, ...tableRowCopyProps(copy, row, sourceId, defaultColumns) });
8280
8359
  }
8281
8360
  function tableRowCopyProps(copy, row, sourceId, defaultColumns) {
8282
8361
  const aiVariants = copy.rowAiVariants?.(row);
@@ -8486,7 +8565,7 @@ function MatrxDataTable(suppliedProps) {
8486
8565
  resolvedUrlState?.auto ? resolvedUrlState.config.id : null,
8487
8566
  Boolean(resolvedUrlState?.auto)
8488
8567
  );
8489
- return /* @__PURE__ */ jsx23(MacLookContext.Provider, { value: props.look === "mac" ? props.density ?? lookHost.defaultDensity ?? "normal" : null, children: /* @__PURE__ */ jsx23(MacLookLayer, { density: props.look === "mac" ? props.density ?? lookHost.defaultDensity ?? "normal" : null, children: /* @__PURE__ */ jsx23(InsideMatrxDataTableContext.Provider, { value: true, children: /* @__PURE__ */ jsx23(MatrxTableCardContext.Provider, { value: null, children: /* @__PURE__ */ jsx23(TableCardOwnerContext.Provider, { value: card, children: resolvedUrlState ? /* @__PURE__ */ jsx23(
8568
+ return /* @__PURE__ */ jsx24(MacLookContext.Provider, { value: props.look === "mac" ? props.density ?? lookHost.defaultDensity ?? "normal" : null, children: /* @__PURE__ */ jsx24(MacLookLayer, { density: props.look === "mac" ? props.density ?? lookHost.defaultDensity ?? "normal" : null, children: /* @__PURE__ */ jsx24(InsideMatrxDataTableContext.Provider, { value: true, children: /* @__PURE__ */ jsx24(MatrxTableCardContext.Provider, { value: null, children: /* @__PURE__ */ jsx24(TableCardOwnerContext.Provider, { value: card, children: resolvedUrlState ? /* @__PURE__ */ jsx24(
8490
8569
  MatrxDataTableWithUrlState,
8491
8570
  {
8492
8571
  ...presentedProps,
@@ -8494,7 +8573,7 @@ function MatrxDataTable(suppliedProps) {
8494
8573
  autoUrlState: resolvedUrlState.auto
8495
8574
  },
8496
8575
  resolvedUrlState.auto ? defaultUrlId ?? resolvedUrlState.config.id : resolvedUrlState.config.id
8497
- ) : /* @__PURE__ */ jsx23(MatrxDataTableCore, { ...presentedProps, urlState: false }) }) }) }) }) });
8576
+ ) : /* @__PURE__ */ jsx24(MatrxDataTableCore, { ...presentedProps, urlState: false }) }) }) }) }) });
8498
8577
  }
8499
8578
  var NO_CUSTOM_FIELD_COLUMNS = [];
8500
8579
  function noCustomFieldColumns() {
@@ -8550,7 +8629,7 @@ function listPresentationProps(props) {
8550
8629
  ...props.focusRowId === void 0 && props.activeRowId ? { focusRowId: props.activeRowId } : {},
8551
8630
  mobileCardsBreakpoint: "always",
8552
8631
  cardsLayout: "list",
8553
- mobileCards: props.mobileCards ?? ((row, _index, controls) => /* @__PURE__ */ jsx23(
8632
+ mobileCards: props.mobileCards ?? ((row, _index, controls) => /* @__PURE__ */ jsx24(
8554
8633
  TableListItem,
8555
8634
  {
8556
8635
  title: titleOf(row),
@@ -8589,7 +8668,7 @@ function MatrxDataTableWithUrlState({
8589
8668
  const seedFilters = props.initialColumnFilters;
8590
8669
  const hasSeedFilters = Boolean(seedFilters && Object.keys(seedFilters).length > 0);
8591
8670
  const [seeded, setSeeded] = useState17(!seedSearch && !hasSeedFilters);
8592
- useEffect14(() => {
8671
+ useEffect15(() => {
8593
8672
  if (seeded) return;
8594
8673
  const params = new URLSearchParams(window.location.search);
8595
8674
  const patch = {};
@@ -8610,7 +8689,7 @@ function MatrxDataTableWithUrlState({
8610
8689
  },
8611
8690
  [seeded, table.state, seedSearch, seedFilters, hasSeedFilters]
8612
8691
  );
8613
- useEffect14(() => {
8692
+ useEffect15(() => {
8614
8693
  const id = urlState.id;
8615
8694
  if (!autoUrlState) {
8616
8695
  if (urlTableIdHeld(id)) {
@@ -8662,7 +8741,7 @@ function MatrxDataTableWithUrlState({
8662
8741
  } : props.selection;
8663
8742
  const viewSearch = useUrlSearchParams2().toString();
8664
8743
  const carryView = useCallback4((href) => carryTableViewParams(href, viewSearch, urlState.id), [viewSearch, urlState.id]);
8665
- return /* @__PURE__ */ jsx23(TableViewHrefContext.Provider, { value: carryView, children: /* @__PURE__ */ jsx23(
8744
+ return /* @__PURE__ */ jsx24(TableViewHrefContext.Provider, { value: carryView, children: /* @__PURE__ */ jsx24(
8666
8745
  MatrxDataTableCore,
8667
8746
  {
8668
8747
  ...props,
@@ -8726,7 +8805,7 @@ function opensRowHref(event) {
8726
8805
  return event.metaKey || event.ctrlKey || event.shiftKey || event.button === 1;
8727
8806
  }
8728
8807
  function TableContextPassthrough({ children }) {
8729
- return /* @__PURE__ */ jsx23(Fragment15, { children });
8808
+ return /* @__PURE__ */ jsx24(Fragment15, { children });
8730
8809
  }
8731
8810
  function sameWindow(a, b) {
8732
8811
  if (a === null || b === null) return a === b;
@@ -8742,7 +8821,7 @@ var DND_MEASURING = { droppable: { strategy: MeasuringStrategy.Always } };
8742
8821
  var NO_LAYERED_FILTERS = [];
8743
8822
  var NO_GROUPING_VALUE = "__matrx_no_grouping__";
8744
8823
  function useRenderEpoch(values) {
8745
- const held = useRef14(null);
8824
+ const held = useRef15(null);
8746
8825
  const previous = held.current;
8747
8826
  if (previous !== null && previous.values.length === values.length && previous.values.every((value, i) => Object.is(value, values[i]))) {
8748
8827
  return previous.epoch;
@@ -8786,13 +8865,13 @@ function sameBodyRow(a, b) {
8786
8865
  }
8787
8866
  var MatrxTableBodyRow = memo(function MatrxTableBodyRow2(props) {
8788
8867
  const { rowId, row, index, draw } = props;
8789
- const last = useRef14(null);
8868
+ const last = useRef15(null);
8790
8869
  const fresh = last.current === null || !sameBodyRow({ ...last.current, probe: props.probe }, props);
8791
8870
  last.current = props;
8792
8871
  return draw(rowId, row, index, fresh);
8793
8872
  }, sameBodyRow);
8794
8873
  var MatrxTableChrome = memo(function MatrxTableChrome2({ render }) {
8795
- return /* @__PURE__ */ jsx23(Fragment15, { children: render() });
8874
+ return /* @__PURE__ */ jsx24(Fragment15, { children: render() });
8796
8875
  }, (a, b) => a.part === b.part && a.epoch === b.epoch);
8797
8876
  function columnsSignature(columns) {
8798
8877
  const out = [];
@@ -8911,7 +8990,7 @@ function MatrxDataTableCore(coreProps) {
8911
8990
  appearance = "standalone"
8912
8991
  } = coreProps;
8913
8992
  const macPortalAttrs = useMacLookAttributes();
8914
- const wearMacLook = (node) => macPortalAttrs["data-matrx-table-look"] ? /* @__PURE__ */ jsx23("div", { className: "contents", ...macPortalAttrs, children: node }) : node;
8993
+ const wearMacLook = (node) => macPortalAttrs["data-matrx-table-look"] ? /* @__PURE__ */ jsx24("div", { className: "contents", ...macPortalAttrs, children: node }) : node;
8915
8994
  const urlState = suppliedUrlState || void 0;
8916
8995
  const drill = isAnsweredDrillConfig(suppliedDrill) ? suppliedDrill : void 0;
8917
8996
  const labelForField = useCallback4(
@@ -8951,7 +9030,7 @@ function MatrxDataTableCore(coreProps) {
8951
9030
  const selectionConfig = suppliedSelectionConfig === false ? void 0 : suppliedSelectionConfig;
8952
9031
  const appendQuery = query?.mode === "controlled-append" ? query : null;
8953
9032
  const appendQueryKey = appendQuery?.pagination.queryKey ?? null;
8954
- const committedAppendQueryKey = useRef14(appendQueryKey);
9033
+ const committedAppendQueryKey = useRef15(appendQueryKey);
8955
9034
  const appendSourceChanged = appendQuery !== null && committedAppendQueryKey.current !== appendQueryKey;
8956
9035
  const data = (appendQuery ? appendQuery.pagination.rows : suppliedData) ?? EMPTY_TABLE_ROWS;
8957
9036
  const appendFirstPagePending = appendQuery !== null && data.length === 0 && appendQuery.pagination.hasNextPage && !appendQuery.pagination.error;
@@ -8960,14 +9039,14 @@ function MatrxDataTableCore(coreProps) {
8960
9039
  const frameHeight = isLoading && loadingRows === "fill" ? "fill" : askedFrameHeight;
8961
9040
  const skeletonRowCount = loadingRows === "fill" ? 40 : Math.max(1, Math.min(100, Math.round(loadingRows ?? (defaultPageSize > 0 ? defaultPageSize : 6))));
8962
9041
  const isFetching = appendQuery ? appendQuery.pagination.isFetchingNextPage : suppliedFetching;
8963
- const everLoadingRef = useRef14(false);
9042
+ const everLoadingRef = useRef15(false);
8964
9043
  if (isLoading) everLoadingRef.current = true;
8965
9044
  const everLoading = everLoadingRef.current;
8966
9045
  const host = useMatrxDataTableHost();
8967
9046
  const carryTableView = useContext5(TableViewHrefContext);
8968
9047
  const ReadFailureView = host.ReadFailure ?? DefaultTableReadFailure;
8969
9048
  const StaleNoticeView = host.StaleNotice ?? DefaultTableStaleNotice;
8970
- const readFailure = readView.failure ? /* @__PURE__ */ jsx23(ReadFailureView, { error: read?.error ?? true, what: readView.what, onRetry: read?.onRetry }) : null;
9049
+ const readFailure = readView.failure ? /* @__PURE__ */ jsx24(ReadFailureView, { error: read?.error ?? true, what: readView.what, onRetry: read?.onRetry }) : null;
8971
9050
  const ContextMenuBoundary = host.ContextMenuBoundary ?? TableContextPassthrough;
8972
9051
  const resolvedDensity = density ?? host.defaultDensity ?? "normal";
8973
9052
  const explicitRowHeight = askedRowHeight ?? (look === "mac" ? MAC_ROW_HEIGHT_BY_DENSITY[resolvedDensity] : void 0);
@@ -8980,7 +9059,7 @@ function MatrxDataTableCore(coreProps) {
8980
9059
  const [savedViewError, setSavedViewError] = useState17(null);
8981
9060
  const [toolbarActionError, setToolbarActionError] = useState17(null);
8982
9061
  const [toolbarActionPending, setToolbarActionPending] = useState17({ refresh: false, add: false });
8983
- const toolbarActionPendingRef = useRef14({ refresh: false, add: false });
9062
+ const toolbarActionPendingRef = useRef15({ refresh: false, add: false });
8984
9063
  const CHECKBOX_TAP_AREA = "h-4 w-4 touch-manipulation";
8985
9064
  const mobileCardsClass = mobileCardsBreakpoint === "always" ? "" : mobileCardsBreakpoint === "lg" ? "lg:hidden" : mobileCardsBreakpoint === "md" ? "md:hidden" : "sm:hidden";
8986
9065
  const tableWithCardsClass = mobileCardsBreakpoint === "always" ? "hidden" : mobileCardsBreakpoint === "lg" ? "max-lg:hidden" : mobileCardsBreakpoint === "md" ? "max-md:hidden" : "max-sm:hidden";
@@ -8996,7 +9075,7 @@ function MatrxDataTableCore(coreProps) {
8996
9075
  return () => media.removeEventListener?.("change", read2);
8997
9076
  }, []);
8998
9077
  const canonicalSelectionWidth = touchSelection ? 44 : SELECTION_COLUMN_PX;
8999
- useEffect14(() => {
9078
+ useEffect15(() => {
9000
9079
  if (!mobileCards || typeof window === "undefined" || !window.matchMedia) return;
9001
9080
  const mql = window.matchMedia(cardsQuery);
9002
9081
  const read2 = () => setCardsActive(mql.matches);
@@ -9151,9 +9230,9 @@ function MatrxDataTableCore(coreProps) {
9151
9230
  const [windowRowSnapshot, setWindowRowSnapshot] = useState17(null);
9152
9231
  const editScopeKey = appendQueryKey === null ? "\0local" : `append:${appendQueryKey}`;
9153
9232
  const [editsByScope, setEditsByScope] = useState17({});
9154
- const editRevisionRef = useRef14({});
9233
+ const editRevisionRef = useRef15({});
9155
9234
  const [savingByScope, setSavingByScope] = useState17({});
9156
- const savingScopesRef = useRef14(/* @__PURE__ */ new Set());
9235
+ const savingScopesRef = useRef15(/* @__PURE__ */ new Set());
9157
9236
  const [editRequest, setEditRequest] = useState17(null);
9158
9237
  const [confirmForeignDraftDiscard, setConfirmForeignDraftDiscard] = useState17(false);
9159
9238
  const edits = editsByScope[editScopeKey]?.values ?? {};
@@ -9225,10 +9304,10 @@ function MatrxDataTableCore(coreProps) {
9225
9304
  selectionConfig?.scopeKey === void 0 ? "receipt" : "membership",
9226
9305
  selectionConfig?.scopeKey ?? appendQueryKey
9227
9306
  ]);
9228
- const committedSelectionSourceKey = useRef14(selectionSourceKey);
9307
+ const committedSelectionSourceKey = useRef15(selectionSourceKey);
9229
9308
  const selectionSourceChanged = selectionSourceKey !== null && committedSelectionSourceKey.current !== null && committedSelectionSourceKey.current !== selectionSourceKey;
9230
9309
  const selection = selectionSourceChanged && selectionConfig ? { ...selectionConfig, selectedIds: [] } : selectionConfig;
9231
- useEffect14(() => {
9310
+ useEffect15(() => {
9232
9311
  const previous = committedAppendQueryKey.current;
9233
9312
  committedAppendQueryKey.current = appendQueryKey;
9234
9313
  if (previous === null || appendQueryKey === null || previous === appendQueryKey) {
@@ -9245,21 +9324,21 @@ function MatrxDataTableCore(coreProps) {
9245
9324
  onWindowRowIdChange
9246
9325
  ]);
9247
9326
  const onSelectionSourceChange = selectionConfig?.onSelectedIdsChange;
9248
- useEffect14(() => {
9327
+ useEffect15(() => {
9249
9328
  const previous = committedSelectionSourceKey.current;
9250
9329
  committedSelectionSourceKey.current = selectionSourceKey;
9251
9330
  if (previous !== null && selectionSourceKey !== null && previous !== selectionSourceKey) {
9252
9331
  onSelectionSourceChange?.([]);
9253
9332
  }
9254
9333
  }, [selectionSourceKey, onSelectionSourceChange]);
9255
- const scrollRef = useRef14(null);
9256
- const tableRef = useRef14(null);
9257
- const tableHeaderRef = useRef14(null);
9258
- const cardsScrollRef = useRef14(null);
9334
+ const scrollRef = useRef15(null);
9335
+ const tableRef = useRef15(null);
9336
+ const tableHeaderRef = useRef15(null);
9337
+ const cardsScrollRef = useRef15(null);
9259
9338
  const scrollContainers = useMemo8(() => [scrollRef, cardsScrollRef], []);
9260
9339
  const [documentStickyHeader, setDocumentStickyHeader] = useState17(false);
9261
- const documentStickyHeaderRef = useRef14(false);
9262
- const previousAppendKeyForScrollReset = useRef14(appendQueryKey);
9340
+ const documentStickyHeaderRef = useRef15(false);
9341
+ const previousAppendKeyForScrollReset = useRef15(appendQueryKey);
9263
9342
  useLayoutEffect2(() => {
9264
9343
  const previous = previousAppendKeyForScrollReset.current;
9265
9344
  previousAppendKeyForScrollReset.current = appendQueryKey;
@@ -9286,7 +9365,7 @@ function MatrxDataTableCore(coreProps) {
9286
9365
  ...appendScrollPolicy?.mode === "scroll" && appendScrollPolicy.thresholdPx !== void 0 ? { thresholdPx: appendScrollPolicy.thresholdPx } : {},
9287
9366
  ...appendScrollPolicy?.mode === "scroll" && appendScrollPolicy.intentTimeoutMs !== void 0 ? { intentTimeoutMs: appendScrollPolicy.intentTimeoutMs } : {}
9288
9367
  });
9289
- const rootRef = useRef14(null);
9368
+ const rootRef = useRef15(null);
9290
9369
  useClippedContentGuard(rootRef, {
9291
9370
  label: typeof copy === "object" && copy.listLabel ? `Table: ${copy.listLabel}` : "MatrxDataTable"
9292
9371
  });
@@ -9294,7 +9373,7 @@ function MatrxDataTableCore(coreProps) {
9294
9373
  const [scrollHintLeft, setScrollHintLeft] = useState17(false);
9295
9374
  const [scrollHintRightInset, setScrollHintRightInset] = useState17(6);
9296
9375
  const [scrollHintTop, setScrollHintTop] = useState17(null);
9297
- const hintScrollLeft = useRef14(0);
9376
+ const hintScrollLeft = useRef15(0);
9298
9377
  const updateScrollHint = useCallback4(() => {
9299
9378
  const el = scrollRef.current;
9300
9379
  if (!el) return;
@@ -9341,7 +9420,7 @@ function MatrxDataTableCore(coreProps) {
9341
9420
  behavior: "smooth"
9342
9421
  });
9343
9422
  };
9344
- useEffect14(() => {
9423
+ useEffect15(() => {
9345
9424
  window.addEventListener("resize", updateScrollHint);
9346
9425
  const el = scrollRef.current;
9347
9426
  const observer = el && typeof ResizeObserver !== "undefined" ? new ResizeObserver(updateScrollHint) : null;
@@ -9441,18 +9520,18 @@ function MatrxDataTableCore(coreProps) {
9441
9520
  () => normalizeColumnWidthsForColumns(columnState?.widths, columns)
9442
9521
  );
9443
9522
  const [fixedTableGeometry, setFixedTableGeometry] = useState17(null);
9444
- const knownColumnIds = useRef14(new Set(columns.map(columnId)));
9445
- const draggedColumnId = useRef14(null);
9446
- const columnDragActive = useRef14(false);
9447
- const columnDragRaf = useRef14(null);
9448
- const columnDragScrollDirection = useRef14(0);
9523
+ const knownColumnIds = useRef15(new Set(columns.map(columnId)));
9524
+ const draggedColumnId = useRef15(null);
9525
+ const columnDragActive = useRef15(false);
9526
+ const columnDragRaf = useRef15(null);
9527
+ const columnDragScrollDirection = useRef15(0);
9449
9528
  const [columnDragPreview, setColumnDragPreview] = useState17(null);
9450
9529
  const stopColumnDragScroll = useCallback4(() => {
9451
9530
  if (columnDragRaf.current !== null) cancelAnimationFrame(columnDragRaf.current);
9452
9531
  columnDragRaf.current = null;
9453
9532
  columnDragScrollDirection.current = 0;
9454
9533
  }, []);
9455
- useEffect14(() => () => {
9534
+ useEffect15(() => () => {
9456
9535
  columnDragActive.current = false;
9457
9536
  stopColumnDragScroll();
9458
9537
  }, [stopColumnDragScroll]);
@@ -9533,7 +9612,7 @@ function MatrxDataTableCore(coreProps) {
9533
9612
  }, columns),
9534
9613
  [columns, persistedColumnWidths, autoResizeSnapshot]
9535
9614
  );
9536
- const resizeGestureSnapshotRef = useRef14(null);
9615
+ const resizeGestureSnapshotRef = useRef15(null);
9537
9616
  const measureVisibleColumnWidths = useCallback4(() => {
9538
9617
  const measured = {};
9539
9618
  const headers = tableRef.current ? Array.from(tableRef.current.querySelectorAll(
@@ -9621,7 +9700,7 @@ function MatrxDataTableCore(coreProps) {
9621
9700
  const { [id]: _dropped, ...rest } = effectiveColumnWidths;
9622
9701
  commitColumnWidths(rest);
9623
9702
  }, [commitColumnWidths, effectiveColumnWidths]);
9624
- useEffect14(() => {
9703
+ useEffect15(() => {
9625
9704
  const ids = columns.map(columnId);
9626
9705
  if (columnState) return;
9627
9706
  const previousIds = knownColumnIds.current;
@@ -9690,8 +9769,8 @@ function MatrxDataTableCore(coreProps) {
9690
9769
  const freezeWanted = visibleColumns.some((column) => column.frozen);
9691
9770
  const selectionColumnWidth = selection ? canonicalSelectionWidth : void 0;
9692
9771
  const [fitSpace, setFitSpace] = useState17(null);
9693
- const fitReadRef = useRef14(null);
9694
- const fitSettlePasses = useRef14(0);
9772
+ const fitReadRef = useRef15(null);
9773
+ const fitSettlePasses = useRef15(0);
9695
9774
  useLayoutEffect2(() => {
9696
9775
  if (!fitSpace || fitSettlePasses.current >= 4) return;
9697
9776
  fitSettlePasses.current += 1;
@@ -9873,7 +9952,7 @@ function MatrxDataTableCore(coreProps) {
9873
9952
  const tableContextMenuInstanceId = useId2();
9874
9953
  const tableDndContextId = useId2();
9875
9954
  const defaultCopyTitle = toolbar?.title || "Table";
9876
- const copyColumnsLatest = useRef14(declaredVisibleCopyColumns);
9955
+ const copyColumnsLatest = useRef15(declaredVisibleCopyColumns);
9877
9956
  copyColumnsLatest.current = declaredVisibleCopyColumns;
9878
9957
  const readDeclaredCopyColumns = lazyCallback(() => copyColumnsLatest.current);
9879
9958
  const defaultCopy = useMemo8(() => ({
@@ -9894,7 +9973,7 @@ function MatrxDataTableCore(coreProps) {
9894
9973
  const visibleDataColumns = useMemo8(() => visibleColumns.filter((column) => !column.customActions), [visibleColumns]);
9895
9974
  const effectiveCopyColumns = copy === void 0 ? declaredVisibleCopyColumns : visibleDataColumns;
9896
9975
  const copySubsetVariant2 = useCopySubsetVariant();
9897
- const chromeLatest = useRef14({
9976
+ const chromeLatest = useRef15({
9898
9977
  processed: [],
9899
9978
  data: [],
9900
9979
  toggleAllOnPage: () => void 0,
@@ -9938,7 +10017,7 @@ function MatrxDataTableCore(coreProps) {
9938
10017
  }),
9939
10018
  [columns, data, toolbar?.intelligentSearch?.roles, toolbar?.intelligentSearch?.scopes]
9940
10019
  );
9941
- const getRowIdForSearch = useRef14(getRowId);
10020
+ const getRowIdForSearch = useRef15(getRowId);
9942
10021
  getRowIdForSearch.current = getRowId;
9943
10022
  const rowIdForSearch = useCallback4((row) => getRowIdForSearch.current(row), []);
9944
10023
  const searchTextWithId = useCallback4(
@@ -10028,11 +10107,11 @@ function MatrxDataTableCore(coreProps) {
10028
10107
  sort
10029
10108
  };
10030
10109
  const viewQueryKey = onViewChange ? JSON.stringify(viewQuery) : "";
10031
- const viewQueryRef = useRef14(viewQuery);
10110
+ const viewQueryRef = useRef15(viewQuery);
10032
10111
  viewQueryRef.current = viewQuery;
10033
- const lastNotifiedViewRows = useRef14(null);
10034
- const lastNotifiedViewQueryKey = useRef14(null);
10035
- useEffect14(() => {
10112
+ const lastNotifiedViewRows = useRef15(null);
10113
+ const lastNotifiedViewQueryKey = useRef15(null);
10114
+ useEffect15(() => {
10036
10115
  if (!onViewChange) {
10037
10116
  lastNotifiedViewRows.current = null;
10038
10117
  lastNotifiedViewQueryKey.current = null;
@@ -10043,7 +10122,7 @@ function MatrxDataTableCore(coreProps) {
10043
10122
  lastNotifiedViewQueryKey.current = viewQueryKey;
10044
10123
  if (changed) onViewChange(processed, viewQueryRef.current);
10045
10124
  }, [processed, viewQueryKey, onViewChange]);
10046
- useEffect14(() => {
10125
+ useEffect15(() => {
10047
10126
  if (controlledQuery) return;
10048
10127
  setInternalPage(1);
10049
10128
  }, [
@@ -10143,9 +10222,9 @@ function MatrxDataTableCore(coreProps) {
10143
10222
  const pageOffset = remoteQuery || hidePagination || localProgressiveEnabled || pageSize === 0 ? 0 : (safePage - 1) * effectivePageSize;
10144
10223
  const focusIndex = focusRowId ? orderedRows.findIndex((r) => getRowId(r) === focusRowId) : -1;
10145
10224
  const focusedRowId = focusIndex >= 0 ? focusRowId ?? null : null;
10146
- const focusPagedFor = useRef14(null);
10225
+ const focusPagedFor = useRef15(null);
10147
10226
  const focusPageable = !remoteQuery && !hidePagination && !localProgressiveEnabled && pageSize !== 0;
10148
- useEffect14(() => {
10227
+ useEffect15(() => {
10149
10228
  if (!focusedRowId) {
10150
10229
  focusPagedFor.current = null;
10151
10230
  return;
@@ -10155,7 +10234,7 @@ function MatrxDataTableCore(coreProps) {
10155
10234
  if (focusPageable) setPage(Math.floor(focusIndex / effectivePageSize) + 1);
10156
10235
  }, [focusedRowId]);
10157
10236
  const focusShownPage = focusedRowId !== null && (!focusPageable || safePage === Math.floor(focusIndex / effectivePageSize) + 1);
10158
- useEffect14(() => {
10237
+ useEffect15(() => {
10159
10238
  if (!focusedRowId || !focusShownPage) return;
10160
10239
  const row = rootRef.current?.querySelector(`tr[data-row-id="${CSS.escape(focusedRowId)}"]`);
10161
10240
  row?.scrollIntoView?.({ block: "center" });
@@ -10204,7 +10283,7 @@ function MatrxDataTableCore(coreProps) {
10204
10283
  const columnVirtualizeActive = virtualizeConfig !== null && virtualizeConfig.enabled !== false && virtualizeConfig.columns === true && visibleColumns.length - frozenRunLength > 30 && !hierarchy && mobileCards === void 0;
10205
10284
  const [rowWindow, setRowWindow] = useState17(null);
10206
10285
  const [columnWindow, setColumnWindow] = useState17(null);
10207
- const windowInputs = useRef14({
10286
+ const windowInputs = useRef15({
10208
10287
  virtualizeActive: false,
10209
10288
  bodyEntryCount: 0,
10210
10289
  virtualRowHeight: 40,
@@ -10276,7 +10355,7 @@ function MatrxDataTableCore(coreProps) {
10276
10355
  frozenRunLength
10277
10356
  ]);
10278
10357
  const metricsWanted = virtualizeActive || columnVirtualizeActive;
10279
- useEffect14(() => {
10358
+ useEffect15(() => {
10280
10359
  recomputeWindows();
10281
10360
  }, [
10282
10361
  recomputeWindows,
@@ -10288,7 +10367,7 @@ function MatrxDataTableCore(coreProps) {
10288
10367
  columnWindowWidth,
10289
10368
  frozenRunLength
10290
10369
  ]);
10291
- useEffect14(() => {
10370
+ useEffect15(() => {
10292
10371
  if (!metricsWanted) return;
10293
10372
  const el = scrollRef.current;
10294
10373
  if (!el) return;
@@ -10313,9 +10392,9 @@ function MatrxDataTableCore(coreProps) {
10313
10392
  const cardsGridWindowed = cardsLayout === "grid" && groupedRenderRows === null;
10314
10393
  const cardsVirtualActive = cardsMounted && virtualizeActive && (cardsLayout !== "grid" || cardsGridWindowed);
10315
10394
  const cardEstimate = resolvedDensity === "condensed" ? 72 : resolvedDensity === "spacious" ? 104 : 88;
10316
- const measuredCardSize = useRef14(0);
10395
+ const measuredCardSize = useRef15(0);
10317
10396
  const [cardWindow, setCardWindow] = useState17(null);
10318
- const cardWindowInputs = useRef14({ active: false, grid: false, count: 0, size: 88, overscan: 8 });
10397
+ const cardWindowInputs = useRef15({ active: false, grid: false, count: 0, size: 88, overscan: 8 });
10319
10398
  cardWindowInputs.current = {
10320
10399
  active: cardsVirtualActive,
10321
10400
  grid: cardsGridWindowed,
@@ -10342,10 +10421,10 @@ function MatrxDataTableCore(coreProps) {
10342
10421
  setCardWindow((prev) => sameWindow(prev, next) ? prev : next);
10343
10422
  }, [computeCardWindow]);
10344
10423
  const effectiveCardWindow = cardsVirtualActive ? cardWindow && cardWindow.end <= bodyEntryCount ? cardWindow : computeCardWindow() : null;
10345
- useEffect14(() => {
10424
+ useEffect15(() => {
10346
10425
  recomputeCardWindow();
10347
10426
  }, [recomputeCardWindow, cardsVirtualActive, bodyEntryCount, cardEstimate]);
10348
- useEffect14(() => {
10427
+ useEffect15(() => {
10349
10428
  if (!cardsVirtualActive) return;
10350
10429
  const el = cardsScrollRef.current;
10351
10430
  if (!el) return;
@@ -10435,7 +10514,7 @@ function MatrxDataTableCore(coreProps) {
10435
10514
  windowed.push({ kind: "spacer", height: effectiveRowWindow.padEnd, place: "end" });
10436
10515
  return windowed;
10437
10516
  }, [groupedRenderRows, collapsedGroups, paginated, effectiveRowWindow]);
10438
- const getRowIdRef = useRef14(getRowId);
10517
+ const getRowIdRef = useRef15(getRowId);
10439
10518
  getRowIdRef.current = getRowId;
10440
10519
  const spreadsheetRowIds = useMemo8(
10441
10520
  () => paginated.map((row) => getRowIdRef.current(row)),
@@ -10456,7 +10535,7 @@ function MatrxDataTableCore(coreProps) {
10456
10535
  return map;
10457
10536
  }, [visibleColumns]);
10458
10537
  const spreadsheetEnabled = Boolean(spreadsheet && spreadsheet.enabled !== false);
10459
- const openRowRef = useRef14(() => void 0);
10538
+ const openRowRef = useRef15(() => void 0);
10460
10539
  const sheet = useSpreadsheetGrid(
10461
10540
  spreadsheetEnabled && spreadsheet ? {
10462
10541
  rowIds: spreadsheetRowIds,
@@ -10498,12 +10577,12 @@ function MatrxDataTableCore(coreProps) {
10498
10577
  } : null
10499
10578
  );
10500
10579
  if (spreadsheet?.controllerRef) spreadsheet.controllerRef.current = spreadsheetEnabled ? sheet.controller : null;
10501
- const sheetRef = useRef14(sheet);
10580
+ const sheetRef = useRef15(sheet);
10502
10581
  sheetRef.current = sheet;
10503
- const onSheetSelectionRef = useRef14(spreadsheet?.onSelectionChange);
10582
+ const onSheetSelectionRef = useRef15(spreadsheet?.onSelectionChange);
10504
10583
  onSheetSelectionRef.current = spreadsheet?.onSelectionChange;
10505
10584
  const sheetSelectionKey = sheet.range ? `${sheet.range.anchor.rowId}\0${sheet.range.anchor.fieldName}\0${sheet.range.focus.rowId}\0${sheet.range.focus.fieldName}\0${sheet.bounds ? `${sheet.bounds.r0}:${sheet.bounds.r1}:${sheet.bounds.c0}:${sheet.bounds.c1}` : ""}` : "";
10506
- useEffect14(() => {
10585
+ useEffect15(() => {
10507
10586
  const tell = onSheetSelectionRef.current;
10508
10587
  if (!tell) return;
10509
10588
  const current = sheetRef.current;
@@ -10520,7 +10599,7 @@ function MatrxDataTableCore(coreProps) {
10520
10599
  tsv: current.selectionTsv()
10521
10600
  });
10522
10601
  }, [sheetSelectionKey]);
10523
- const searchValueRef = useRef14(searchValue);
10602
+ const searchValueRef = useRef15(searchValue);
10524
10603
  searchValueRef.current = searchValue;
10525
10604
  const facetsEnabled = Boolean(facets && facets.enabled !== false);
10526
10605
  const coreSuggestionsEnabled = facets?.enabled !== false;
@@ -10535,10 +10614,10 @@ function MatrxDataTableCore(coreProps) {
10535
10614
  );
10536
10615
  const coreFacetTotal = remoteQuery?.mode === "controlled" ? remoteQuery.totalItems : appendQuery?.pagination.sourceRecords?.total ?? coverage?.matched ?? coverage?.total;
10537
10616
  const coreFacetLoaded = appendQuery?.pagination.sourceRecords?.loaded;
10538
- const facetInputsRef = useRef14({ data, facets, facetReadCell, coreFacetTotal, coreFacetLoaded });
10617
+ const facetInputsRef = useRef15({ data, facets, facetReadCell, coreFacetTotal, coreFacetLoaded });
10539
10618
  facetInputsRef.current = { data, facets, facetReadCell, coreFacetTotal, coreFacetLoaded };
10540
- const facetRequestRef = useRef14(/* @__PURE__ */ new Map());
10541
- const requestedFacetColumns = useRef14(/* @__PURE__ */ new Set());
10619
+ const facetRequestRef = useRef15(/* @__PURE__ */ new Map());
10620
+ const requestedFacetColumns = useRef15(/* @__PURE__ */ new Set());
10542
10621
  const requestFacets = useCallback4((colId) => {
10543
10622
  requestedFacetColumns.current.add(colId);
10544
10623
  const { data: rows, facets: config, facetReadCell: readCell, coreFacetTotal: total, coreFacetLoaded: loaded } = facetInputsRef.current;
@@ -10622,7 +10701,7 @@ function MatrxDataTableCore(coreProps) {
10622
10701
  }));
10623
10702
  });
10624
10703
  }, []);
10625
- useEffect14(() => {
10704
+ useEffect15(() => {
10626
10705
  setFacetState((current) => Object.keys(current).length === 0 ? current : {});
10627
10706
  for (const [colId, ticket] of facetRequestRef.current) {
10628
10707
  facetRequestRef.current.set(colId, ticket + 1);
@@ -10632,7 +10711,7 @@ function MatrxDataTableCore(coreProps) {
10632
10711
  }
10633
10712
  }, [facetsEnabled, coreSuggestionsEnabled, data, searchValue, coreFacetTotal, coreFacetLoaded, requestFacets]);
10634
10713
  const totalIsKnown = !isLoading && !readView.failure;
10635
- useEffect14(() => {
10714
+ useEffect15(() => {
10636
10715
  if (!controlledQuery || !totalIsKnown || controlledQuery.state.page === safePage) return;
10637
10716
  emitControlledQueryChange({ page: safePage });
10638
10717
  }, [controlledQuery, emitControlledQueryChange, safePage, totalIsKnown]);
@@ -10673,13 +10752,13 @@ function MatrxDataTableCore(coreProps) {
10673
10752
  const reportCardTotal = embedded ? tableCard?.reportTotal : void 0;
10674
10753
  const cardTotal = appendQuery ? appendQuery.pagination.totalItems : remoteQuery?.mode === "controlled" ? isLoading ? void 0 : remoteQuery.totalItems : isLoading ? void 0 : sourceProcessing ? sourceTotal : data.length;
10675
10754
  const embeddedControlledPage = embedded && remoteQuery?.mode === "controlled" ? remoteQuery.state.page : 1;
10676
- useEffect14(() => {
10755
+ useEffect15(() => {
10677
10756
  if (embeddedControlledPage !== 1) emitControlledQueryChange({ page: 1 });
10678
10757
  }, [embeddedControlledPage]);
10679
- useEffect14(() => {
10758
+ useEffect15(() => {
10680
10759
  reportCardTotal?.(cardTotal);
10681
10760
  }, [reportCardTotal, cardTotal]);
10682
- useEffect14(() => () => reportCardTotal?.(void 0), [reportCardTotal]);
10761
+ useEffect15(() => () => reportCardTotal?.(void 0), [reportCardTotal]);
10683
10762
  const [pinnedEl, setPinnedEl] = useState17(null);
10684
10763
  const pinnedRowActive = Boolean(
10685
10764
  toolbar?.singleRow && toolbar.overflow && toolbar.overflow.mode !== "sheet" && (toolbar.overflow.pinned || toolbar.overflow.mode === "menu")
@@ -10721,7 +10800,7 @@ function MatrxDataTableCore(coreProps) {
10721
10800
  ] });
10722
10801
  }
10723
10802
  const folded = pinnedFolded;
10724
- toolbarEnd.node = /* @__PURE__ */ jsx23(
10803
+ toolbarEnd.node = /* @__PURE__ */ jsx24(
10725
10804
  "span",
10726
10805
  {
10727
10806
  ref: setPinnedEl,
@@ -10731,7 +10810,7 @@ function MatrxDataTableCore(coreProps) {
10731
10810
  children: folded ? /* @__PURE__ */ jsxs22(Fragment15, { children: [
10732
10811
  primary,
10733
10812
  /* @__PURE__ */ jsxs22(ToolbarOverflowMenu, { children: [
10734
- toolbarSearch.node ? /* @__PURE__ */ jsx23("div", { "data-matrx-table-toolbar-folded-search": "", "data-matrx-table-tools-keep-open": "", children: toolbarSearch.node }) : null,
10813
+ toolbarSearch.node ? /* @__PURE__ */ jsx24("div", { "data-matrx-table-toolbar-folded-search": "", "data-matrx-table-tools-keep-open": "", children: toolbarSearch.node }) : null,
10735
10814
  controls,
10736
10815
  overflow?.pinned,
10737
10816
  overflow?.sheetExtras,
@@ -10764,10 +10843,10 @@ function MatrxDataTableCore(coreProps) {
10764
10843
  return actionSlots;
10765
10844
  };
10766
10845
  const renderRowActions = (row, controls) => {
10767
- const actions = rowActions ? /* @__PURE__ */ jsx23(TableIconActions, { actions: rowActions(row, controls), inline: rowActionsInline, slots: pageActionSlots() }) : null;
10768
- const scopedActions = /* @__PURE__ */ jsx23(MatrxTableRowControlsScope, { value: controls, children: actions });
10846
+ const actions = rowActions ? /* @__PURE__ */ jsx24(TableIconActions, { actions: rowActions(row, controls), inline: rowActionsInline, slots: pageActionSlots() }) : null;
10847
+ const scopedActions = /* @__PURE__ */ jsx24(MatrxTableRowControlsScope, { value: controls, children: actions });
10769
10848
  if (!effectiveCopy || !showRowCopy) return scopedActions;
10770
- return /* @__PURE__ */ jsx23(
10849
+ return /* @__PURE__ */ jsx24(
10771
10850
  MatrxTableRowAlchemyProvider,
10772
10851
  {
10773
10852
  copy: tableRowCopyProps(effectiveCopy, row, `${tableCopySourceNamespace}:row:${getRowId(row)}`, copy === void 0 ? readDeclaredCopyColumns : void 0),
@@ -10825,7 +10904,7 @@ function MatrxDataTableCore(coreProps) {
10825
10904
  if (value === null) return "\u2014";
10826
10905
  const formatted = kpi.op === "count" ? null : formatColumnValue(col, value);
10827
10906
  const text = formatted?.text ?? value.toLocaleString(void 0, { maximumFractionDigits: 2 });
10828
- return tone ? /* @__PURE__ */ jsx23("span", { className: COLUMN_TONE_CLASS[tone], children: text }) : text;
10907
+ return tone ? /* @__PURE__ */ jsx24("span", { className: COLUMN_TONE_CLASS[tone], children: text }) : text;
10829
10908
  }
10830
10909
  }))
10831
10910
  );
@@ -10893,7 +10972,7 @@ function MatrxDataTableCore(coreProps) {
10893
10972
  }
10894
10973
  expandedDetail.onExpandedIdChange(expandedDetail.expandedId === id ? null : id);
10895
10974
  };
10896
- const warnedRowWithoutPage = useRef14(false);
10975
+ const warnedRowWithoutPage = useRef15(false);
10897
10976
  const openRow = (row) => {
10898
10977
  if (canExpandRow(row)) {
10899
10978
  toggleExpanded(row);
@@ -10958,7 +11037,7 @@ function MatrxDataTableCore(coreProps) {
10958
11037
  };
10959
11038
  const renderedEmptyState = (remoteQuery === null || remoteQueryUsesLocalProcessing) && data.length > 0 && hasActiveFilters ? {
10960
11039
  title: "No matching rows",
10961
- action: /* @__PURE__ */ jsx23(Button, { type: "button", variant: "outline", size: "sm", onClick: clearAllFilters, children: "Clear filters" }),
11040
+ action: /* @__PURE__ */ jsx24(Button, { type: "button", variant: "outline", size: "sm", onClick: clearAllFilters, children: "Clear filters" }),
10962
11041
  icon: void 0
10963
11042
  } : emptyState;
10964
11043
  const commitCell = (rowId, field, next) => {
@@ -11046,7 +11125,7 @@ function MatrxDataTableCore(coreProps) {
11046
11125
  }));
11047
11126
  return true;
11048
11127
  };
11049
- const requestCellEditRef = useRef14(requestCellEdit);
11128
+ const requestCellEditRef = useRef15(requestCellEdit);
11050
11129
  requestCellEditRef.current = requestCellEdit;
11051
11130
  const buildRecordControls = (row) => {
11052
11131
  const rowId = getRowId(row);
@@ -11388,16 +11467,16 @@ function MatrxDataTableCore(coreProps) {
11388
11467
  return [];
11389
11468
  }
11390
11469
  };
11391
- const menuSectionsForRef = useRef14(menuSectionsFor);
11470
+ const menuSectionsForRef = useRef15(menuSectionsFor);
11392
11471
  menuSectionsForRef.current = menuSectionsFor;
11393
11472
  const hasMenuSections = Boolean(contextMenu?.sections);
11394
11473
  const boundarySections = useCallback4(
11395
11474
  (target) => menuSectionsForRef.current(target),
11396
11475
  []
11397
11476
  );
11398
- const resolveMenuLevelRef = useRef14(resolveMenuLevel);
11477
+ const resolveMenuLevelRef = useRef15(resolveMenuLevel);
11399
11478
  resolveMenuLevelRef.current = resolveMenuLevel;
11400
- useEffect14(() => {
11479
+ useEffect15(() => {
11401
11480
  if (!host.rowContextRegistry) return;
11402
11481
  return host.rowContextRegistry.register(
11403
11482
  tableContextMenuInstanceId,
@@ -11406,20 +11485,20 @@ function MatrxDataTableCore(coreProps) {
11406
11485
  }, [host.rowContextRegistry, tableContextMenuInstanceId]);
11407
11486
  const showActionsCol = actionsColumn !== "none" && declaredActionsColumn === void 0 && (windowEnabled || Boolean(rowActions) || showInlineRowCopy);
11408
11487
  const actionsHeaderCount = visibleColumns.filter((column) => typeof column.header === "string" && column.header.trim().toLowerCase() === "actions").length + (showActionsCol ? 1 : 0);
11409
- useEffect14(() => {
11488
+ useEffect15(() => {
11410
11489
  if (actionsHeaderCount > 1) {
11411
11490
  console.error(
11412
11491
  `[matrx-table] ${actionsHeaderCount} "Actions" columns in one table \u2014 a table has ONE actions column. Declare one customActions column headed "Actions"; the table folds copy, row actions and open-in-window into it.`
11413
11492
  );
11414
11493
  }
11415
11494
  }, [actionsHeaderCount]);
11416
- const renderWindowOpen = (row) => windowEnabled ? /* @__PURE__ */ jsx23(
11495
+ const renderWindowOpen = (row) => windowEnabled ? /* @__PURE__ */ jsx24(
11417
11496
  TapTargetButtonTransparent,
11418
11497
  {
11419
11498
  "data-matrx-table-icon-action": "",
11420
11499
  tone: "muted",
11421
11500
  ariaLabel: windowConfig?.openOnRowClick === true ? "Open in side panel" : "Open in window",
11422
- icon: opensWindowOnRowClick ? /* @__PURE__ */ jsx23(PanelRightIcon, { "aria-hidden": true }) : /* @__PURE__ */ jsx23(PanelRightIcon, { "aria-hidden": true }),
11501
+ icon: opensWindowOnRowClick ? /* @__PURE__ */ jsx24(PanelRightIcon, { "aria-hidden": true }) : /* @__PURE__ */ jsx24(PanelRightIcon, { "aria-hidden": true }),
11423
11502
  onClick: (e) => {
11424
11503
  e?.stopPropagation();
11425
11504
  if (windowConfig?.openOnRowClick === true) rowLatest.current.openDetail(row);
@@ -11466,8 +11545,8 @@ function MatrxDataTableCore(coreProps) {
11466
11545
  });
11467
11546
  }, [data, getSelectionId, selectedIdSet]);
11468
11547
  const selectedCopyRows = useSelectedCopyRows(data, selectedIdSet, getSelectionId, savedViewsId, selection?.scopeKey);
11469
- const lastToggledIndex = useRef14(null);
11470
- useEffect14(() => {
11548
+ const lastToggledIndex = useRef15(null);
11549
+ useEffect15(() => {
11471
11550
  lastToggledIndex.current = null;
11472
11551
  }, [savedViewsId, selection?.scopeKey]);
11473
11552
  const setSelectedIds = (next) => {
@@ -11544,7 +11623,7 @@ function MatrxDataTableCore(coreProps) {
11544
11623
  };
11545
11624
  const drawsOnlyShutSections = paginated.length === 0 && !readFailure && groupedRenderRows !== null && groupedRenderRows.length > 0;
11546
11625
  const messageOutsideTable = slackId === void 0 && !fixedLayoutActive && !fitActive && !isLoading && !drillGrouped && (Boolean(readFailure) || paginated.length === 0 && !drawsOnlyShutSections);
11547
- const tableMessage = /* @__PURE__ */ jsx23(
11626
+ const tableMessage = /* @__PURE__ */ jsx24(
11548
11627
  "div",
11549
11628
  {
11550
11629
  "data-matrx-table-empty-state": readFailure ? void 0 : "",
@@ -11552,8 +11631,8 @@ function MatrxDataTableCore(coreProps) {
11552
11631
  style: { width: "100cqw", maxWidth: "100%" },
11553
11632
  children: readFailure ?? /* @__PURE__ */ jsxs22(Fragment15, { children: [
11554
11633
  renderedEmptyState?.icon,
11555
- /* @__PURE__ */ jsx23("p", { className: "text-sm font-medium text-foreground", children: renderedEmptyState?.title ?? "No rows" }),
11556
- renderedEmptyState?.description ? /* @__PURE__ */ jsx23("p", { className: "text-xs text-muted-foreground", children: renderedEmptyState.description }) : null,
11634
+ /* @__PURE__ */ jsx24("p", { className: "text-sm font-medium text-foreground", children: renderedEmptyState?.title ?? "No rows" }),
11635
+ renderedEmptyState?.description ? /* @__PURE__ */ jsx24("p", { className: "text-xs text-muted-foreground", children: renderedEmptyState.description }) : null,
11557
11636
  renderedEmptyState?.action
11558
11637
  ] })
11559
11638
  }
@@ -11569,7 +11648,7 @@ function MatrxDataTableCore(coreProps) {
11569
11648
  }
11570
11649
  } : facet
11571
11650
  ) : toolbar?.facets;
11572
- const rowLatest = useRef14(null);
11651
+ const rowLatest = useRef15(null);
11573
11652
  const renderRecordCell = (row, col, index, suppliedControls) => {
11574
11653
  const id = getRowId(row);
11575
11654
  const field = col.accessorKey ? String(col.accessorKey) : columnId(col);
@@ -11577,10 +11656,10 @@ function MatrxDataTableCore(coreProps) {
11577
11656
  const displayRow = applyRowEdits(row, rowEdits);
11578
11657
  if (col.customActions) {
11579
11658
  const controls = suppliedControls ?? liveRecordControls(displayRow);
11580
- const content = /* @__PURE__ */ jsx23(MatrxTableRowControlsScope, { value: controls, children: col.customActions(displayRow, controls) });
11659
+ const content = /* @__PURE__ */ jsx24(MatrxTableRowControlsScope, { value: controls, children: col.customActions(displayRow, controls) });
11581
11660
  const copyHere = rowCopyInCustomColumn && effectiveCopy && menuActionsColumn !== void 0 && columnId(col) === columnId(menuActionsColumn);
11582
11661
  return /* @__PURE__ */ jsxs22("div", { "data-matrx-table-custom-actions": true, "data-matrx-cell-control": true, className: cn("inline-flex items-center justify-end gap-0", compactRows && "[&_button]:h-6 [&_button]:min-h-6"), onClick: (event) => event.stopPropagation(), children: [
11583
- copyHere && effectiveCopy ? /* @__PURE__ */ jsx23(
11662
+ copyHere && effectiveCopy ? /* @__PURE__ */ jsx24(
11584
11663
  TableRowCopyControl,
11585
11664
  {
11586
11665
  size: "toolbar",
@@ -11590,7 +11669,7 @@ function MatrxDataTableCore(coreProps) {
11590
11669
  ...copy === void 0 ? { defaultColumns: readDeclaredCopyColumns } : {}
11591
11670
  }
11592
11671
  ) : null,
11593
- effectiveCopy && showRowCopy ? /* @__PURE__ */ jsx23(
11672
+ effectiveCopy && showRowCopy ? /* @__PURE__ */ jsx24(
11594
11673
  MatrxTableRowAlchemyProvider,
11595
11674
  {
11596
11675
  copy: tableRowCopyProps(effectiveCopy, displayRow, `${tableCopySourceNamespace}:row:${getRowId(displayRow)}`, copy === void 0 ? readDeclaredCopyColumns : void 0),
@@ -11608,7 +11687,7 @@ function MatrxDataTableCore(coreProps) {
11608
11687
  const display = renderCell(displayRow, col, index);
11609
11688
  const href = col.href?.(row) ?? void 0;
11610
11689
  if (editEnabled && col.editable && (col.editableIf?.(row) ?? true)) {
11611
- return /* @__PURE__ */ jsx23(
11690
+ return /* @__PURE__ */ jsx24(
11612
11691
  EditableTableCell,
11613
11692
  {
11614
11693
  value: rowEdits && field in rowEdits ? rowEdits[field] : getCellValue(row, col),
@@ -11635,7 +11714,7 @@ function MatrxDataTableCore(coreProps) {
11635
11714
  }
11636
11715
  );
11637
11716
  }
11638
- return href ? /* @__PURE__ */ jsx23(Link, { href, onClick: (event) => event.stopPropagation(), className: "block w-full min-w-0 rounded outline-none focus-visible:ring-2 focus-visible:ring-ring", children: display }) : display;
11717
+ return href ? /* @__PURE__ */ jsx24(Link, { href, onClick: (event) => event.stopPropagation(), className: "block w-full min-w-0 rounded outline-none focus-visible:ring-2 focus-visible:ring-ring", children: display }) : display;
11639
11718
  };
11640
11719
  const recordFieldColumns = columns.filter((col) => !col.customActions);
11641
11720
  const recordFieldLabel = (col) => col.label ?? (typeof col.header === "string" ? col.header : displayLabel(void 0, columnId(col)));
@@ -11651,7 +11730,7 @@ function MatrxDataTableCore(coreProps) {
11651
11730
  ...col.accessorKey !== void 0 || col.accessorFn !== void 0 ? { value: getCellValue(displayRow, col) } : {},
11652
11731
  render: () => {
11653
11732
  const display = renderCell(displayRow, col, 0);
11654
- return href ? /* @__PURE__ */ jsx23(Link, { href, className: "min-w-0 rounded outline-none focus-visible:ring-2 focus-visible:ring-ring", children: display }) : display;
11733
+ return href ? /* @__PURE__ */ jsx24(Link, { href, className: "min-w-0 rounded outline-none focus-visible:ring-2 focus-visible:ring-ring", children: display }) : display;
11655
11734
  }
11656
11735
  };
11657
11736
  });
@@ -11667,7 +11746,7 @@ function MatrxDataTableCore(coreProps) {
11667
11746
  if (!rowHref) return null;
11668
11747
  const href = carryTableView(rowHref);
11669
11748
  return /* @__PURE__ */ jsxs22(Tooltip, { children: [
11670
- /* @__PURE__ */ jsx23(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx23(
11749
+ /* @__PURE__ */ jsx24(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx24(
11671
11750
  Link,
11672
11751
  {
11673
11752
  href,
@@ -11675,10 +11754,10 @@ function MatrxDataTableCore(coreProps) {
11675
11754
  "data-matrx-record-page-door": true,
11676
11755
  "aria-label": "Open full page",
11677
11756
  className: "inline-flex h-7 w-7 items-center justify-center rounded-md text-muted-foreground outline-none hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",
11678
- children: /* @__PURE__ */ jsx23(Maximize2Icon, { className: "h-4 w-4" })
11757
+ children: /* @__PURE__ */ jsx24(Maximize2Icon, { className: "h-4 w-4" })
11679
11758
  }
11680
11759
  ) }),
11681
- /* @__PURE__ */ jsx23(TooltipContent, { children: "Open full page" })
11760
+ /* @__PURE__ */ jsx24(TooltipContent, { children: "Open full page" })
11682
11761
  ] });
11683
11762
  };
11684
11763
  const currentViewSnapshot = useMemo8(
@@ -11917,7 +11996,7 @@ function MatrxDataTableCore(coreProps) {
11917
11996
  ];
11918
11997
  const rowEpoch = useRenderEpoch(rowShape.filter((value) => typeof value !== "function" && (typeof value !== "object" || value === null)));
11919
11998
  const rowProbe = useRenderEpoch(rowShape.filter((value) => typeof value === "function" || typeof value === "object" && value !== null));
11920
- const rowDrawings = useRef14(null);
11999
+ const rowDrawings = useRef15(null);
11921
12000
  rowDrawings.current ??= new RowDrawings();
11922
12001
  const drawBodyRow = (rowId, row, index, fresh) => rowDrawings.current.draw(rowId, renderRecordRow(row, index), fresh);
11923
12002
  chromeLatest.current = { processed, data, toggleAllOnPage, showMore: progressiveRows.showMore, applySavedView };
@@ -12130,7 +12209,7 @@ function MatrxDataTableCore(coreProps) {
12130
12209
  background.row
12131
12210
  ),
12132
12211
  children: [
12133
- selection ? /* @__PURE__ */ jsx23(
12212
+ selection ? /* @__PURE__ */ jsx24(
12134
12213
  "td",
12135
12214
  {
12136
12215
  className: cn(
@@ -12148,7 +12227,7 @@ function MatrxDataTableCore(coreProps) {
12148
12227
  ),
12149
12228
  style: fixedUtilityWidth(selectionColumnWidth),
12150
12229
  onClick: (e) => e.stopPropagation(),
12151
- children: selection.isRowSelectable?.(row) ?? true ? /* @__PURE__ */ jsx23(
12230
+ children: selection.isRowSelectable?.(row) ?? true ? /* @__PURE__ */ jsx24(
12152
12231
  "div",
12153
12232
  {
12154
12233
  "data-matrx-table-selection-target": true,
@@ -12157,7 +12236,7 @@ function MatrxDataTableCore(coreProps) {
12157
12236
  event.currentTarget.querySelector('[role="checkbox"]')?.click();
12158
12237
  }
12159
12238
  },
12160
- children: /* @__PURE__ */ jsx23(
12239
+ children: /* @__PURE__ */ jsx24(
12161
12240
  Checkbox,
12162
12241
  {
12163
12242
  className: CHECKBOX_TAP_AREA,
@@ -12170,7 +12249,7 @@ function MatrxDataTableCore(coreProps) {
12170
12249
  ) : null
12171
12250
  }
12172
12251
  ) : null,
12173
- columnSpacers && columnSpacers.start > 0 ? /* @__PURE__ */ jsx23(
12252
+ columnSpacers && columnSpacers.start > 0 ? /* @__PURE__ */ jsx24(
12174
12253
  "td",
12175
12254
  {
12176
12255
  "aria-hidden": "true",
@@ -12274,7 +12353,7 @@ function MatrxDataTableCore(coreProps) {
12274
12353
  colIdx === 0 && (hierarchy || canExpandRow(row)) && "flex min-w-0 items-center"
12275
12354
  ),
12276
12355
  children: [
12277
- colIdx === 0 && hierarchy ? /* @__PURE__ */ jsx23(
12356
+ colIdx === 0 && hierarchy ? /* @__PURE__ */ jsx24(
12278
12357
  HierarchyDragHandle,
12279
12358
  {
12280
12359
  id,
@@ -12283,7 +12362,7 @@ function MatrxDataTableCore(coreProps) {
12283
12362
  }
12284
12363
  ) : null,
12285
12364
  colIdx === 0 && canExpandRow(row) ? /* @__PURE__ */ jsxs22(Tooltip, { children: [
12286
- /* @__PURE__ */ jsx23(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx23(
12365
+ /* @__PURE__ */ jsx24(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx24(
12287
12366
  Button,
12288
12367
  {
12289
12368
  type: "button",
@@ -12303,7 +12382,7 @@ function MatrxDataTableCore(coreProps) {
12303
12382
  event.stopPropagation();
12304
12383
  rowLatest.current.toggleExpanded(row);
12305
12384
  },
12306
- children: /* @__PURE__ */ jsx23(
12385
+ children: /* @__PURE__ */ jsx24(
12307
12386
  ChevronRightIcon,
12308
12387
  {
12309
12388
  className: cn(
@@ -12314,9 +12393,9 @@ function MatrxDataTableCore(coreProps) {
12314
12393
  )
12315
12394
  }
12316
12395
  ) }),
12317
- /* @__PURE__ */ jsx23(TooltipContent, { children: isRowExpanded(row) ? "Collapse details" : "Expand details" })
12396
+ /* @__PURE__ */ jsx24(TooltipContent, { children: isRowExpanded(row) ? "Collapse details" : "Expand details" })
12318
12397
  ] }) : null,
12319
- /* @__PURE__ */ jsx23(
12398
+ /* @__PURE__ */ jsx24(
12320
12399
  "div",
12321
12400
  {
12322
12401
  "data-matrx-cell-content": true,
@@ -12328,7 +12407,7 @@ function MatrxDataTableCore(coreProps) {
12328
12407
  ]
12329
12408
  }
12330
12409
  ),
12331
- carriesFillHandle ? /* @__PURE__ */ jsx23(
12410
+ carriesFillHandle ? /* @__PURE__ */ jsx24(
12332
12411
  "button",
12333
12412
  {
12334
12413
  type: "button",
@@ -12343,7 +12422,7 @@ function MatrxDataTableCore(coreProps) {
12343
12422
  columnId(col)
12344
12423
  );
12345
12424
  }),
12346
- columnSpacers && columnSpacers.end > 0 ? /* @__PURE__ */ jsx23(
12425
+ columnSpacers && columnSpacers.end > 0 ? /* @__PURE__ */ jsx24(
12347
12426
  "td",
12348
12427
  {
12349
12428
  "aria-hidden": "true",
@@ -12353,7 +12432,7 @@ function MatrxDataTableCore(coreProps) {
12353
12432
  },
12354
12433
  "matrx-column-spacer-end"
12355
12434
  ) : null,
12356
- showActionsCol && /* @__PURE__ */ jsx23(
12435
+ showActionsCol && /* @__PURE__ */ jsx24(
12357
12436
  "td",
12358
12437
  {
12359
12438
  "data-matrx-table-row-action-cell": true,
@@ -12380,7 +12459,7 @@ function MatrxDataTableCore(coreProps) {
12380
12459
  ),
12381
12460
  onClick: (e) => e.stopPropagation(),
12382
12461
  children: [
12383
- showInlineRowCopy && effectiveCopy ? /* @__PURE__ */ jsx23(
12462
+ showInlineRowCopy && effectiveCopy ? /* @__PURE__ */ jsx24(
12384
12463
  TableRowCopyControl,
12385
12464
  {
12386
12465
  size: "toolbar",
@@ -12402,12 +12481,12 @@ function MatrxDataTableCore(coreProps) {
12402
12481
  id
12403
12482
  );
12404
12483
  const wrappedRow = rowWrapper ? rowWrapper(row, rowNode) : rowNode;
12405
- const inlineDetail = expandedDetail && isRowExpanded(row) ? /* @__PURE__ */ jsx23(
12484
+ const inlineDetail = expandedDetail && isRowExpanded(row) ? /* @__PURE__ */ jsx24(
12406
12485
  "tr",
12407
12486
  {
12408
12487
  "data-matrx-table-expanded-detail": id,
12409
12488
  className: cn("bg-muted/20", expandedDetail.className),
12410
- children: /* @__PURE__ */ jsx23(
12489
+ children: /* @__PURE__ */ jsx24(
12411
12490
  "td",
12412
12491
  {
12413
12492
  colSpan: renderedColSpan,
@@ -12419,7 +12498,7 @@ function MatrxDataTableCore(coreProps) {
12419
12498
  `${id}:expanded-detail`
12420
12499
  ) : null;
12421
12500
  return hierarchy ? /* @__PURE__ */ jsxs22(Fragment14, { children: [
12422
- /* @__PURE__ */ jsx23(
12501
+ /* @__PURE__ */ jsx24(
12423
12502
  HierarchyDroppableRow,
12424
12503
  {
12425
12504
  id,
@@ -12433,7 +12512,7 @@ function MatrxDataTableCore(coreProps) {
12433
12512
  inlineDetail
12434
12513
  ] }, id);
12435
12514
  };
12436
- return /* @__PURE__ */ jsx23(TooltipProvider, { children: /* @__PURE__ */ jsx23(
12515
+ return /* @__PURE__ */ jsx24(TooltipProvider, { children: /* @__PURE__ */ jsx24(
12437
12516
  ContextMenuBoundary,
12438
12517
  {
12439
12518
  label: tableId ?? "Data table",
@@ -12528,7 +12607,7 @@ function MatrxDataTableCore(coreProps) {
12528
12607
  commitColumnState(order, effectiveHiddenColumnIds);
12529
12608
  },
12530
12609
  children: [
12531
- /* @__PURE__ */ jsx23(DragCursorMonitor, {}),
12610
+ /* @__PURE__ */ jsx24(DragCursorMonitor, {}),
12532
12611
  /* @__PURE__ */ jsxs22(
12533
12612
  "div",
12534
12613
  {
@@ -12542,16 +12621,18 @@ function MatrxDataTableCore(coreProps) {
12542
12621
  "data-url-state-table": urlState?.id,
12543
12622
  "data-matrx-table-appearance": appearance,
12544
12623
  "data-matrx-table-embedded": embedded || void 0,
12624
+ style: { "--matrx-table-row-height": `${explicitRowHeight ?? densityRowHeight}px` },
12545
12625
  className: cn(
12546
12626
  "flex h-full min-h-0 flex-col gap-2 px-0 pt-2 pb-0",
12547
12627
  embedded && "h-auto gap-0 pt-0",
12548
12628
  className
12549
12629
  ),
12550
12630
  children: [
12631
+ /* @__PURE__ */ jsx24(MultilineRowMarker, {}),
12551
12632
  notice,
12552
- savedViewError ? /* @__PURE__ */ jsx23(ErrorBox, { className: "shrink-0 text-xs text-destructive-ink", message: savedViewError, operation: "Save or apply a saved view", origin: "design-system/MatrxDataTable" }) : null,
12553
- toolbarActionError ? /* @__PURE__ */ jsx23(ErrorBox, { className: "shrink-0 text-xs text-destructive-ink", message: toolbarActionError, operation: "Run a table toolbar action", origin: "design-system/MatrxDataTable" }) : null,
12554
- summaryMetrics.length > 0 ? /* @__PURE__ */ jsx23(
12633
+ savedViewError ? /* @__PURE__ */ jsx24(ErrorBox, { className: "shrink-0 text-xs text-destructive-ink", message: savedViewError, operation: "Save or apply a saved view", origin: "design-system/MatrxDataTable" }) : null,
12634
+ toolbarActionError ? /* @__PURE__ */ jsx24(ErrorBox, { className: "shrink-0 text-xs text-destructive-ink", message: toolbarActionError, operation: "Run a table toolbar action", origin: "design-system/MatrxDataTable" }) : null,
12635
+ summaryMetrics.length > 0 ? /* @__PURE__ */ jsx24(
12555
12636
  "section",
12556
12637
  {
12557
12638
  "data-matrx-table-summary": true,
@@ -12564,23 +12645,23 @@ function MatrxDataTableCore(coreProps) {
12564
12645
  summary?.variant === "large" ? "grid grid-cols-[repeat(auto-fit,minmax(10rem,1fr))] gap-3" : "flex flex-nowrap items-stretch gap-3 overflow-x-auto overscroll-x-contain"
12565
12646
  ),
12566
12647
  children: summaryMetrics.map((metric) => /* @__PURE__ */ jsxs22("div", { "data-matrx-table-summary-card": true, title: metric.description || void 0, className: cn("min-w-0 whitespace-nowrap rounded-md border border-border bg-card shadow-xs", summary?.variant === "large" ? "px-4 py-3" : "shrink-0 min-w-24 px-3.5 py-2.5"), children: [
12567
- /* @__PURE__ */ jsx23("div", { className: "truncate text-sm font-medium text-muted-foreground", children: metric.label }),
12648
+ /* @__PURE__ */ jsx24("div", { className: "truncate text-sm font-medium text-muted-foreground", children: metric.label }),
12568
12649
  /* @__PURE__ */ jsxs22("div", { className: cn("truncate font-semibold tabular-nums text-foreground", summary?.variant === "large" ? "mt-1 text-xl" : "mt-0.5 text-sm"), children: [
12569
12650
  metric.value,
12570
- metric.unavailable ? /* @__PURE__ */ jsx23(ErrorBox, { as: "span", className: "sr-only", message: `${metric.label} is unavailable`, operation: "Summarize this table", origin: "design-system/MatrxDataTable" }) : null
12651
+ metric.unavailable ? /* @__PURE__ */ jsx24(ErrorBox, { as: "span", className: "sr-only", message: `${metric.label} is unavailable`, operation: "Summarize this table", origin: "design-system/MatrxDataTable" }) : null
12571
12652
  ] }),
12572
- summary?.hints === "shown" && metric.description ? /* @__PURE__ */ jsx23("div", { "data-matrx-table-summary-description": true, className: "mt-1 truncate text-xs font-normal text-muted-foreground", children: metric.description }) : null
12653
+ summary?.hints === "shown" && metric.description ? /* @__PURE__ */ jsx24("div", { "data-matrx-table-summary-description": true, className: "mt-1 truncate text-xs font-normal text-muted-foreground", children: metric.description }) : null
12573
12654
  ] }, metric.id))
12574
12655
  }
12575
12656
  ) : null,
12576
- scopeBar ? /* @__PURE__ */ jsx23(TableScopeBar, { ...scopeBar }) : null,
12577
- /* @__PURE__ */ jsx23(MatrxTableChrome, { part: "toolbar", epoch: toolbarEpoch, render: () => {
12578
- const tabsNode = viewTabs && viewTabsStore ? /* @__PURE__ */ jsx23(TableViewWorkspace, { snapshot: currentViewSnapshot, onApply: applyLatestSavedView, related: relatedTableActions, ...viewTabsStore ? { store: viewTabsStore } : {} }, savedViewsId ?? "table") : viewTabs && savedViewsId && SavedViews ? /* @__PURE__ */ jsx23(SavedViews, { tableId: savedViewsId, snapshot: currentViewSnapshot, defaultSnapshot: declaredDefaultViewSnapshot, onApply: applyLatestSavedView, presentation: "tabs", related: relatedTableActions }) : void 0;
12657
+ scopeBar ? /* @__PURE__ */ jsx24(TableScopeBar, { ...scopeBar }) : null,
12658
+ /* @__PURE__ */ jsx24(MatrxTableChrome, { part: "toolbar", epoch: toolbarEpoch, render: () => {
12659
+ const tabsNode = viewTabs && viewTabsStore ? /* @__PURE__ */ jsx24(TableViewWorkspace, { snapshot: currentViewSnapshot, onApply: applyLatestSavedView, related: relatedTableActions, ...viewTabsStore ? { store: viewTabsStore } : {} }, savedViewsId ?? "table") : viewTabs && savedViewsId && SavedViews ? /* @__PURE__ */ jsx24(SavedViews, { tableId: savedViewsId, snapshot: currentViewSnapshot, defaultSnapshot: declaredDefaultViewSnapshot, onApply: applyLatestSavedView, presentation: "tabs", related: relatedTableActions }) : void 0;
12579
12660
  const tabsPlaced = Boolean(toolbar && "tabsPortalInto" in toolbar);
12580
12661
  const tabsTarget = toolbar && "tabsPortalInto" in toolbar ? toolbar.tabsPortalInto : null;
12581
12662
  return /* @__PURE__ */ jsxs22(Fragment15, { children: [
12582
12663
  tabsPlaced && tabsTarget && tabsNode && !hideToolbar ? createPortal2(
12583
- /* @__PURE__ */ jsx23("div", { ...macPortalAttrs, "data-matrx-table-toolbar-tabs": "", "data-matrx-table-tabs-placed": "", className: "flex min-w-0 max-w-full [&_[data-matrx-table-tabs]]:min-w-0 [&_[data-matrx-table-tabs]]:shrink [&_[data-matrx-table-tabs]]:border-b-0", children: tabsNode }),
12664
+ /* @__PURE__ */ jsx24("div", { ...macPortalAttrs, "data-matrx-table-toolbar-tabs": "", "data-matrx-table-tabs-placed": "", className: "flex min-w-0 max-w-full [&_[data-matrx-table-tabs]]:min-w-0 [&_[data-matrx-table-tabs]]:shrink [&_[data-matrx-table-tabs]]:border-b-0", children: tabsNode }),
12584
12665
  tabsTarget
12585
12666
  ) : null,
12586
12667
  placeToolbar(!hideToolbar && (showViewTabs || toolbar?.title || toolbar?.titleCount || showSearch || toolbar?.customSearch || toolbar?.anyOf || toolbar?.layeredFilters || toolbar?.facets && toolbar.facets.length > 0 || toolbar?.leading || toolbar?.actions || toolbar?.refresh || toolbar?.add || savedViewsId && SavedViews || hasActiveFilters || showToolbarCopy || columns.length > 0) && /* @__PURE__ */ jsxs22(
@@ -12590,7 +12671,7 @@ function MatrxDataTableCore(coreProps) {
12590
12671
  tabs: tabsPlaced ? void 0 : tabsNode,
12591
12672
  ...toolbar?.title === void 0 ? {} : { title: toolbar.title },
12592
12673
  ...toolbar?.titleCount === void 0 ? {} : { count: toolbar.titleCount },
12593
- context: savedViewsId && SavedViews && !viewTabs ? /* @__PURE__ */ jsx23("span", { "data-matrx-table-view-control": true, children: /* @__PURE__ */ jsx23(
12674
+ context: savedViewsId && SavedViews && !viewTabs ? /* @__PURE__ */ jsx24("span", { "data-matrx-table-view-control": true, children: /* @__PURE__ */ jsx24(
12594
12675
  SavedViews,
12595
12676
  {
12596
12677
  tableId: savedViewsId,
@@ -12599,7 +12680,7 @@ function MatrxDataTableCore(coreProps) {
12599
12680
  onApply: applyLatestSavedView
12600
12681
  }
12601
12682
  ) }) : void 0,
12602
- search: (toolbarSearch.node = toolbar?.customSearch ?? (showSearch ? intelligentSearchEnabled ? /* @__PURE__ */ jsx23(
12683
+ search: (toolbarSearch.node = toolbar?.customSearch ?? (showSearch ? intelligentSearchEnabled ? /* @__PURE__ */ jsx24(
12603
12684
  TableSearch,
12604
12685
  {
12605
12686
  value: searchValue,
@@ -12618,7 +12699,7 @@ function MatrxDataTableCore(coreProps) {
12618
12699
  toolbar?.searchMatch ? "sm:max-w-md" : "sm:max-w-xs"
12619
12700
  ),
12620
12701
  children: [
12621
- /* @__PURE__ */ jsx23(
12702
+ /* @__PURE__ */ jsx24(
12622
12703
  SearchField,
12623
12704
  {
12624
12705
  value: searchValue,
@@ -12626,15 +12707,15 @@ function MatrxDataTableCore(coreProps) {
12626
12707
  placeholder: toolbar?.searchPlaceholder ?? "Search\u2026",
12627
12708
  "aria-label": (toolbar?.searchPlaceholder ?? "Search").replace(/[….]+$/, "") || "Search table",
12628
12709
  className: "min-w-0 flex-1",
12629
- end: searchValue ? /* @__PURE__ */ jsx23("button", { type: "button", "aria-label": "Clear search", title: "Clear search", onClick: () => setSearchValue(""), children: /* @__PURE__ */ jsx23(XIcon, { "aria-hidden": "true" }) }) : void 0
12710
+ end: searchValue ? /* @__PURE__ */ jsx24("button", { type: "button", "aria-label": "Clear search", title: "Clear search", onClick: () => setSearchValue(""), children: /* @__PURE__ */ jsx24(XIcon, { "aria-hidden": "true" }) }) : void 0
12630
12711
  }
12631
12712
  ),
12632
12713
  toolbar?.searchMatch ? /* @__PURE__ */ jsxs22(Tooltip, { children: [
12633
- /* @__PURE__ */ jsx23(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx23(
12714
+ /* @__PURE__ */ jsx24(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx24(
12634
12715
  Button2,
12635
12716
  {
12636
12717
  variant: searchMatchMode === "whole_words" ? "primary" : "outline",
12637
- icon: /* @__PURE__ */ jsx23(WholeWord, { "aria-hidden": "true" }),
12718
+ icon: /* @__PURE__ */ jsx24(WholeWord, { "aria-hidden": "true" }),
12638
12719
  "aria-pressed": searchMatchMode === "whole_words",
12639
12720
  "aria-label": `Search match: ${searchMatchMode === "whole_words" ? "whole words" : "contains text"}`,
12640
12721
  onClick: () => setSearchMatchMode(
@@ -12643,13 +12724,13 @@ function MatrxDataTableCore(coreProps) {
12643
12724
  children: searchMatchMode === "whole_words" ? "Whole words" : "Contains"
12644
12725
  }
12645
12726
  ) }),
12646
- /* @__PURE__ */ jsx23(TooltipContent, { children: searchMatchMode === "whole_words" ? "Whole words \u2014 click to match text anywhere" : "Contains text \u2014 click to require whole words" })
12727
+ /* @__PURE__ */ jsx24(TooltipContent, { children: searchMatchMode === "whole_words" ? "Whole words \u2014 click to match text anywhere" : "Contains text \u2014 click to require whole words" })
12647
12728
  ] }) : null
12648
12729
  ]
12649
12730
  }
12650
12731
  ) : null), pinnedFolded && pinnedRowActive ? void 0 : toolbarSearch.node),
12651
12732
  children: [
12652
- toolbar?.layeredFilters ? /* @__PURE__ */ jsx23(
12733
+ toolbar?.layeredFilters ? /* @__PURE__ */ jsx24(
12653
12734
  LayeredFilterBuilder,
12654
12735
  {
12655
12736
  fields: toolbar.layeredFilters.fields,
@@ -12660,8 +12741,8 @@ function MatrxDataTableCore(coreProps) {
12660
12741
  }
12661
12742
  ) : null,
12662
12743
  toolbar?.anyOf ? /* @__PURE__ */ jsxs22("div", { className: "relative w-full max-w-xs", children: [
12663
- /* @__PURE__ */ jsx23(SearchIcon, { className: "absolute left-2 top-1/2 h-5 w-5 -translate-y-1/2 text-muted-foreground" }),
12664
- /* @__PURE__ */ jsx23(
12744
+ /* @__PURE__ */ jsx24(SearchIcon, { className: "absolute left-2 top-1/2 h-5 w-5 -translate-y-1/2 text-muted-foreground" }),
12745
+ /* @__PURE__ */ jsx24(
12665
12746
  Input,
12666
12747
  {
12667
12748
  value: anyOfValue,
@@ -12672,21 +12753,21 @@ function MatrxDataTableCore(coreProps) {
12672
12753
  }
12673
12754
  ),
12674
12755
  anyOfValue ? /* @__PURE__ */ jsxs22(Tooltip, { children: [
12675
- /* @__PURE__ */ jsx23(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx23(
12756
+ /* @__PURE__ */ jsx24(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx24(
12676
12757
  "button",
12677
12758
  {
12678
12759
  type: "button",
12679
12760
  "aria-label": "Clear match-any search",
12680
12761
  className: "absolute right-1.5 top-1/2 -translate-y-1/2 rounded p-0.5 text-muted-foreground hover:text-foreground",
12681
12762
  onClick: () => setAnyOfValue(""),
12682
- children: /* @__PURE__ */ jsx23(XIcon, { className: "h-5 w-5" })
12763
+ children: /* @__PURE__ */ jsx24(XIcon, { className: "h-5 w-5" })
12683
12764
  }
12684
12765
  ) }),
12685
- /* @__PURE__ */ jsx23(TooltipContent, { children: "Clear match-any search" })
12766
+ /* @__PURE__ */ jsx24(TooltipContent, { children: "Clear match-any search" })
12686
12767
  ] }) : null
12687
12768
  ] }) : null,
12688
- renderedFacets ? /* @__PURE__ */ jsx23(ToolbarFacets, { facets: renderedFacets }) : null,
12689
- toolbar?.leading ? /* @__PURE__ */ jsx23(
12769
+ renderedFacets ? /* @__PURE__ */ jsx24(ToolbarFacets, { facets: renderedFacets }) : null,
12770
+ toolbar?.leading ? /* @__PURE__ */ jsx24(
12690
12771
  "div",
12691
12772
  {
12692
12773
  "data-matrx-table-toolbar-extras": true,
@@ -12694,7 +12775,7 @@ function MatrxDataTableCore(coreProps) {
12694
12775
  children: toolbar.leading
12695
12776
  }
12696
12777
  ) : null,
12697
- drill && !drillOwnRow && (drill.question.where.length > 0 || drillIsPeriodWindow(drill.question.window) || (drill.base?.length ?? 0) > 0) ? /* @__PURE__ */ jsx23(
12778
+ drill && !drillOwnRow && (drill.question.where.length > 0 || drillIsPeriodWindow(drill.question.window) || (drill.base?.length ?? 0) > 0) ? /* @__PURE__ */ jsx24(
12698
12779
  MatrxDrillTrail,
12699
12780
  {
12700
12781
  base: drill.base,
@@ -12721,7 +12802,7 @@ function MatrxDataTableCore(coreProps) {
12721
12802
  ),
12722
12803
  children: [
12723
12804
  toolbar?.singleRow && coverageResult && coverageResult.notice ? /* @__PURE__ */ jsxs22(Tooltip, { children: [
12724
- /* @__PURE__ */ jsx23(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxs22(
12805
+ /* @__PURE__ */ jsx24(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxs22(
12725
12806
  "span",
12726
12807
  {
12727
12808
  "data-matrx-table-coverage": true,
@@ -12738,21 +12819,21 @@ function MatrxDataTableCore(coreProps) {
12738
12819
  ]
12739
12820
  }
12740
12821
  ) }),
12741
- /* @__PURE__ */ jsx23(TooltipContent, { className: "max-w-xs", children: coverageResult.notice })
12822
+ /* @__PURE__ */ jsx24(TooltipContent, { className: "max-w-xs", children: coverageResult.notice })
12742
12823
  ] }) : null,
12743
12824
  renderToolbarControls(/* @__PURE__ */ jsxs22(Fragment15, { children: [
12744
- hasActiveFilters ? /* @__PURE__ */ jsx23(
12825
+ hasActiveFilters ? /* @__PURE__ */ jsx24(
12745
12826
  TableToolbarAction,
12746
12827
  {
12747
12828
  HostAction: host.ToolbarAction,
12748
12829
  ariaLabel: "Clear all filters",
12749
12830
  tooltip: "Clear search and filters; keep columns and sort",
12750
12831
  onClick: clearAllFilters,
12751
- children: /* @__PURE__ */ jsx23(Eraser, {})
12832
+ children: /* @__PURE__ */ jsx24(Eraser, {})
12752
12833
  }
12753
12834
  ) : null,
12754
12835
  drill ? drillOwnRow ? null : /* @__PURE__ */ jsxs22(Fragment15, { children: [
12755
- drill.windowDimension ? /* @__PURE__ */ jsx23(
12836
+ drill.windowDimension ? /* @__PURE__ */ jsx24(
12756
12837
  MatrxDrillWindowMenu,
12757
12838
  {
12758
12839
  question: drill.question,
@@ -12760,7 +12841,7 @@ function MatrxDataTableCore(coreProps) {
12760
12841
  dimensionLabel: drill.dimensions.find((d) => d.key === drill.windowDimension)?.label ?? drill.windowDimension
12761
12842
  }
12762
12843
  ) : null,
12763
- drillGrouped ? /* @__PURE__ */ jsx23(
12844
+ drillGrouped ? /* @__PURE__ */ jsx24(
12764
12845
  MatrxDrillMeasurePicker,
12765
12846
  {
12766
12847
  measures: drill.measures,
@@ -12768,7 +12849,7 @@ function MatrxDataTableCore(coreProps) {
12768
12849
  onQuestionChange: drill.onQuestionChange
12769
12850
  }
12770
12851
  ) : null,
12771
- /* @__PURE__ */ jsx23(
12852
+ /* @__PURE__ */ jsx24(
12772
12853
  MatrxDrillGroupByMenu,
12773
12854
  {
12774
12855
  dimensions: drill.dimensions,
@@ -12780,7 +12861,7 @@ function MatrxDataTableCore(coreProps) {
12780
12861
  // The shared Select (playground review A): the same 28px capsule as every
12781
12862
  // other control in the row, never a second select with its own padding.
12782
12863
  /* @__PURE__ */ jsxs22("span", { "data-matrx-table-group-by": "", className: "inline-flex", children: [
12783
- /* @__PURE__ */ jsx23(
12864
+ /* @__PURE__ */ jsx24(
12784
12865
  Select2,
12785
12866
  {
12786
12867
  "aria-label": "Group rows by a column",
@@ -12800,7 +12881,7 @@ function MatrxDataTableCore(coreProps) {
12800
12881
  const chosen = grouping.thenColumnIds ?? [];
12801
12882
  if (at2 > chosen.length) return null;
12802
12883
  const taken = /* @__PURE__ */ new Set([groupingColumnId, ...chosen.filter((_, i) => i !== at2)]);
12803
- return /* @__PURE__ */ jsx23(
12884
+ return /* @__PURE__ */ jsx24(
12804
12885
  Select2,
12805
12886
  {
12806
12887
  "aria-label": `Then group rows by a column (level ${at2 + 2})`,
@@ -12825,17 +12906,17 @@ function MatrxDataTableCore(coreProps) {
12825
12906
  }) : null
12826
12907
  ] })
12827
12908
  ) : null,
12828
- columns.length > 0 && toolbar?.columns !== false ? /* @__PURE__ */ jsx23(
12909
+ columns.length > 0 && toolbar?.columns !== false ? /* @__PURE__ */ jsx24(
12829
12910
  TableToolbarAction,
12830
12911
  {
12831
12912
  HostAction: host.ToolbarAction,
12832
12913
  ariaLabel: "Columns",
12833
12914
  tooltip: "Show, hide, or reorder columns",
12834
12915
  onClick: () => setColumnManagerOpen(true),
12835
- children: /* @__PURE__ */ jsx23(SlidersHorizontal, {})
12916
+ children: /* @__PURE__ */ jsx24(SlidersHorizontal, {})
12836
12917
  }
12837
12918
  ) : null,
12838
- toolbar?.refresh ? /* @__PURE__ */ jsx23(
12919
+ toolbar?.refresh ? /* @__PURE__ */ jsx24(
12839
12920
  TableToolbarAction,
12840
12921
  {
12841
12922
  HostAction: host.ToolbarAction,
@@ -12857,10 +12938,10 @@ function MatrxDataTableCore(coreProps) {
12857
12938
  setToolbarActionPending((current) => ({ ...current, refresh: false }));
12858
12939
  });
12859
12940
  },
12860
- children: /* @__PURE__ */ jsx23(RefreshControlIcon, { spinning: isFetching || toolbarActionPending.refresh })
12941
+ children: /* @__PURE__ */ jsx24(RefreshControlIcon, { spinning: isFetching || toolbarActionPending.refresh })
12861
12942
  }
12862
12943
  ) : null,
12863
- toolbar?.add ? /* @__PURE__ */ jsx23(
12944
+ toolbar?.add ? /* @__PURE__ */ jsx24(
12864
12945
  TableToolbarAction,
12865
12946
  {
12866
12947
  HostAction: host.ToolbarAction,
@@ -12882,11 +12963,11 @@ function MatrxDataTableCore(coreProps) {
12882
12963
  setToolbarActionPending((current) => ({ ...current, add: false }));
12883
12964
  });
12884
12965
  },
12885
- children: /* @__PURE__ */ jsx23(PlusIcon, {})
12966
+ children: /* @__PURE__ */ jsx24(PlusIcon, {})
12886
12967
  }
12887
12968
  ) : null,
12888
12969
  toolbar?.actions
12889
- ] }), showToolbarCopy && effectiveCopy ? /* @__PURE__ */ jsx23(ToolbarListedLabel, { label: "Copy or export", children: /* @__PURE__ */ jsx23(
12970
+ ] }), showToolbarCopy && effectiveCopy ? /* @__PURE__ */ jsx24(ToolbarListedLabel, { label: "Copy or export", children: /* @__PURE__ */ jsx24(
12890
12971
  CopyButtons,
12891
12972
  {
12892
12973
  size: "toolbar",
@@ -12948,7 +13029,7 @@ function MatrxDataTableCore(coreProps) {
12948
13029
  ] });
12949
13030
  } }),
12950
13031
  /* @__PURE__ */ jsxs22("div", { "data-matrx-table-body-region": true, className: "flex min-h-0 flex-1 flex-col gap-2", children: [
12951
- drill && drillOwnRow ? /* @__PURE__ */ jsx23(MatrxDrillBar, { drill, answers: drillAnswers, rowNoun: grouping?.rowNoun }) : null,
13032
+ drill && drillOwnRow ? /* @__PURE__ */ jsx24(MatrxDrillBar, { drill, answers: drillAnswers, rowNoun: grouping?.rowNoun }) : null,
12952
13033
  coverageResult && coverageResult.notice && !toolbar?.singleRow ? /* @__PURE__ */ jsxs22(
12953
13034
  "div",
12954
13035
  {
@@ -12957,12 +13038,12 @@ function MatrxDataTableCore(coreProps) {
12957
13038
  role: "status",
12958
13039
  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",
12959
13040
  children: [
12960
- /* @__PURE__ */ jsx23("span", { className: "shrink-0 whitespace-nowrap font-semibold", children: coverageResult.badge }),
12961
- /* @__PURE__ */ jsx23("span", { className: "min-w-0", children: coverageResult.notice })
13041
+ /* @__PURE__ */ jsx24("span", { className: "shrink-0 whitespace-nowrap font-semibold", children: coverageResult.badge }),
13042
+ /* @__PURE__ */ jsx24("span", { className: "min-w-0", children: coverageResult.notice })
12962
13043
  ]
12963
13044
  }
12964
13045
  ) : null,
12965
- readView.stale ? /* @__PURE__ */ jsx23(StaleNoticeView, { error: read?.error ?? true, what: readView.what, onRetry: read?.onRetry }) : null,
13046
+ readView.stale ? /* @__PURE__ */ jsx24(StaleNoticeView, { error: read?.error ?? true, what: readView.what, onRetry: read?.onRetry }) : null,
12966
13047
  /* @__PURE__ */ jsxs22("div", { "data-matrx-table-scroll-frame": "", className: cn("relative min-h-0", frameHeight === "content" ? "flex flex-initial flex-col" : "flex-1"), children: [
12967
13048
  mobileCards && cardsMounted ? /* @__PURE__ */ jsxs22(
12968
13049
  "div",
@@ -12988,30 +13069,30 @@ function MatrxDataTableCore(coreProps) {
12988
13069
  role: "status",
12989
13070
  className: "pointer-events-none absolute inset-x-0 top-0 z-20 h-0.5 overflow-hidden bg-primary/15",
12990
13071
  children: [
12991
- /* @__PURE__ */ jsx23("div", { className: "h-full w-full animate-pulse bg-primary" }),
12992
- /* @__PURE__ */ jsx23("span", { className: "sr-only", children: "Refreshing table data" })
13072
+ /* @__PURE__ */ jsx24("div", { className: "h-full w-full animate-pulse bg-primary" }),
13073
+ /* @__PURE__ */ jsx24("span", { className: "sr-only", children: "Refreshing table data" })
12993
13074
  ]
12994
13075
  }
12995
13076
  ) : null,
12996
- isLoading ? Array.from({ length: 4 }).map((_, index) => /* @__PURE__ */ jsx23(
13077
+ isLoading ? Array.from({ length: 4 }).map((_, index) => /* @__PURE__ */ jsx24(
12997
13078
  Skeleton,
12998
13079
  {
12999
13080
  className: "col-span-full h-52 w-full shrink-0 rounded-lg"
13000
13081
  },
13001
13082
  `mobile-card-sk-${index}`
13002
- )) : readFailure ? /* @__PURE__ */ jsx23("div", { className: "col-span-full flex min-h-48 flex-1 items-center justify-center px-4 py-12 text-center", children: readFailure }) : paginated.length === 0 && !drawsOnlyShutSections ? /* @__PURE__ */ jsx23("div", { className: "col-span-full flex min-h-48 flex-1 items-center justify-center px-4 py-12 text-center", children: /* @__PURE__ */ jsxs22("div", { className: "flex max-w-sm flex-col items-center gap-2", children: [
13083
+ )) : readFailure ? /* @__PURE__ */ jsx24("div", { className: "col-span-full flex min-h-48 flex-1 items-center justify-center px-4 py-12 text-center", children: readFailure }) : paginated.length === 0 && !drawsOnlyShutSections ? /* @__PURE__ */ jsx24("div", { className: "col-span-full flex min-h-48 flex-1 items-center justify-center px-4 py-12 text-center", children: /* @__PURE__ */ jsxs22("div", { className: "flex max-w-sm flex-col items-center gap-2", children: [
13003
13084
  renderedEmptyState?.icon,
13004
- /* @__PURE__ */ jsx23("p", { className: "text-sm font-medium text-foreground", children: renderedEmptyState?.title ?? "No rows" }),
13005
- renderedEmptyState?.description ? /* @__PURE__ */ jsx23("p", { className: "text-xs text-muted-foreground", children: renderedEmptyState.description }) : null,
13085
+ /* @__PURE__ */ jsx24("p", { className: "text-sm font-medium text-foreground", children: renderedEmptyState?.title ?? "No rows" }),
13086
+ renderedEmptyState?.description ? /* @__PURE__ */ jsx24("p", { className: "text-xs text-muted-foreground", children: renderedEmptyState.description }) : null,
13006
13087
  renderedEmptyState?.action
13007
13088
  ] }) }) : /* @__PURE__ */ jsxs22(Fragment15, { children: [
13008
- effectiveCardWindow ? /* @__PURE__ */ jsx23("div", { "data-matrx-cards-pad": "start", "aria-hidden": "true", className: "col-span-full shrink-0", style: { height: effectiveCardWindow.padStart } }) : null,
13089
+ effectiveCardWindow ? /* @__PURE__ */ jsx24("div", { "data-matrx-cards-pad": "start", "aria-hidden": "true", className: "col-span-full shrink-0", style: { height: effectiveCardWindow.padStart } }) : null,
13009
13090
  ((rows) => effectiveCardWindow ? rows.slice(effectiveCardWindow.start, effectiveCardWindow.end) : rows)(
13010
13091
  groupedRenderRows ?? paginated.map((row, dataIndex) => ({ kind: "row", row, dataIndex }))
13011
13092
  ).map((entry) => {
13012
13093
  if (entry.kind === "group") {
13013
13094
  const count = entry.group.rows.length;
13014
- return /* @__PURE__ */ jsx23(
13095
+ return /* @__PURE__ */ jsx24(
13015
13096
  MatrxTableGroupCardHeader,
13016
13097
  {
13017
13098
  groupKey: entry.group.key,
@@ -13032,7 +13113,7 @@ function MatrxDataTableCore(coreProps) {
13032
13113
  const displayRow = applyRowEdits(row, edits[id]);
13033
13114
  const controls = buildRecordControls(displayRow);
13034
13115
  const selectable = selection?.isRowSelectable?.(row) ?? Boolean(selection);
13035
- return /* @__PURE__ */ jsx23("div", { "data-row-id": id, "data-matrx-row-tint": rowTintColor(row, id) ?? void 0, className: "contents", children: mobileCards(displayRow, index, {
13116
+ return /* @__PURE__ */ jsx24("div", { "data-row-id": id, "data-matrx-row-tint": rowTintColor(row, id) ?? void 0, className: "contents", children: mobileCards(displayRow, index, {
13036
13117
  renderCell: (columnKey) => {
13037
13118
  const column = columns.find((candidate) => columnId(candidate) === columnKey);
13038
13119
  return column ? renderRecordCell(row, column, index, controls) : null;
@@ -13056,7 +13137,7 @@ function MatrxDataTableCore(coreProps) {
13056
13137
  className: "inline-flex items-center justify-end gap-0",
13057
13138
  onClick: (event) => event.stopPropagation(),
13058
13139
  children: [
13059
- showInlineRowCopy && effectiveCopy ? /* @__PURE__ */ jsx23(
13140
+ showInlineRowCopy && effectiveCopy ? /* @__PURE__ */ jsx24(
13060
13141
  TableRowCopyControl,
13061
13142
  {
13062
13143
  size: "toolbar",
@@ -13067,7 +13148,7 @@ function MatrxDataTableCore(coreProps) {
13067
13148
  }
13068
13149
  ) : null,
13069
13150
  renderRowActions(displayRow, controls),
13070
- visibleColumns.filter((column) => column.customActions).map((column) => /* @__PURE__ */ jsx23(Fragment14, { children: renderRecordCell(row, column, index, controls) }, columnId(column)))
13151
+ visibleColumns.filter((column) => column.customActions).map((column) => /* @__PURE__ */ jsx24(Fragment14, { children: renderRecordCell(row, column, index, controls) }, columnId(column)))
13071
13152
  ]
13072
13153
  }
13073
13154
  ) : null,
@@ -13079,7 +13160,7 @@ function MatrxDataTableCore(coreProps) {
13079
13160
  expandedDetail: expandedDetail && isRowExpanded(row) ? expandedDetail.render(displayRow, controls) : null
13080
13161
  }) }, id);
13081
13162
  }),
13082
- effectiveCardWindow ? /* @__PURE__ */ jsx23("div", { "data-matrx-cards-pad": "end", "aria-hidden": "true", className: "col-span-full shrink-0", style: { height: effectiveCardWindow.padEnd } }) : null
13163
+ effectiveCardWindow ? /* @__PURE__ */ jsx24("div", { "data-matrx-cards-pad": "end", "aria-hidden": "true", className: "col-span-full shrink-0", style: { height: effectiveCardWindow.padEnd } }) : null
13083
13164
  ] }),
13084
13165
  appendQuery !== null && isFetching && !isLoading ? /* @__PURE__ */ jsxs22(
13085
13166
  "div",
@@ -13089,7 +13170,7 @@ function MatrxDataTableCore(coreProps) {
13089
13170
  "aria-live": "polite",
13090
13171
  className: "sticky bottom-0 z-20 col-span-full flex h-16 w-full max-w-[100cqw] shrink-0 items-center justify-center gap-2 rounded-md border border-border bg-card/95 px-3 text-sm font-medium text-foreground shadow-sm backdrop-blur-sm",
13091
13172
  children: [
13092
- /* @__PURE__ */ jsx23(
13173
+ /* @__PURE__ */ jsx24(
13093
13174
  Loader2Icon,
13094
13175
  {
13095
13176
  "aria-hidden": "true",
@@ -13147,15 +13228,15 @@ function MatrxDataTableCore(coreProps) {
13147
13228
  tableClassName
13148
13229
  ),
13149
13230
  children: [
13150
- spreadsheetEnabled ? /* @__PURE__ */ jsx23("textarea", { ...sheet.typeCatcherProps }) : null,
13151
- hierarchy && draggedRow ? /* @__PURE__ */ jsx23(
13231
+ spreadsheetEnabled ? /* @__PURE__ */ jsx24("textarea", { ...sheet.typeCatcherProps }) : null,
13232
+ hierarchy && draggedRow ? /* @__PURE__ */ jsx24(
13152
13233
  HierarchyRootDropTarget,
13153
13234
  {
13154
13235
  label: hierarchy.rootDropLabel ?? "Drop here to move to the top level",
13155
13236
  draggedLabel: hierarchy.itemLabel?.(draggedRow) ?? "Moving row"
13156
13237
  }
13157
13238
  ) : null,
13158
- hierarchy && draggedRowId ? /* @__PURE__ */ jsx23(
13239
+ hierarchy && draggedRowId ? /* @__PURE__ */ jsx24(
13159
13240
  HierarchyDragIndicatorLayer,
13160
13241
  {
13161
13242
  scrollRef,
@@ -13169,12 +13250,12 @@ function MatrxDataTableCore(coreProps) {
13169
13250
  "data-matrx-table-refreshing": "",
13170
13251
  className: "pointer-events-none sticky inset-x-0 top-0 z-40 -mb-0.5 block h-0.5 overflow-hidden bg-primary/15",
13171
13252
  children: [
13172
- /* @__PURE__ */ jsx23("div", { className: "h-full w-full animate-pulse bg-primary" }),
13173
- /* @__PURE__ */ jsx23("span", { className: "sr-only", children: "Refreshing table data" })
13253
+ /* @__PURE__ */ jsx24("div", { className: "h-full w-full animate-pulse bg-primary" }),
13254
+ /* @__PURE__ */ jsx24("span", { className: "sr-only", children: "Refreshing table data" })
13174
13255
  ]
13175
13256
  }
13176
13257
  ) : null,
13177
- drillGrouped && drill ? /* @__PURE__ */ jsx23(
13258
+ drillGrouped && drill ? /* @__PURE__ */ jsx24(
13178
13259
  MatrxDrillAnswerTable,
13179
13260
  {
13180
13261
  dimensions: drill.dimensions,
@@ -13217,7 +13298,7 @@ function MatrxDataTableCore(coreProps) {
13217
13298
  "data-matrx-table-fit": fitActive ? "" : void 0,
13218
13299
  "data-matrx-table-fit-grow": fitActive && fitTableWidth !== void 0 ? "" : void 0,
13219
13300
  children: [
13220
- /* @__PURE__ */ jsx23(MatrxTableChrome, { part: "header", epoch: headerEpoch, render: () => /* @__PURE__ */ jsx23(
13301
+ /* @__PURE__ */ jsx24(MatrxTableChrome, { part: "header", epoch: headerEpoch, render: () => /* @__PURE__ */ jsx24(
13221
13302
  "thead",
13222
13303
  {
13223
13304
  ref: tableHeaderRef,
@@ -13236,7 +13317,7 @@ function MatrxDataTableCore(coreProps) {
13236
13317
  stickyHeader && (documentStickyHeader ? "relative translate-y-[var(--matrx-document-sticky-offset)]" : "sticky top-0")
13237
13318
  ),
13238
13319
  children: /* @__PURE__ */ jsxs22("tr", { children: [
13239
- selection ? /* @__PURE__ */ jsx23(
13320
+ selection ? /* @__PURE__ */ jsx24(
13240
13321
  "th",
13241
13322
  {
13242
13323
  "data-matrx-table-selection-column": true,
@@ -13246,7 +13327,7 @@ function MatrxDataTableCore(coreProps) {
13246
13327
  embedded && "sm:bg-card max-sm:bg-card"
13247
13328
  ),
13248
13329
  style: fixedUtilityWidth(selectionColumnWidth),
13249
- children: /* @__PURE__ */ jsx23(
13330
+ children: /* @__PURE__ */ jsx24(
13250
13331
  "div",
13251
13332
  {
13252
13333
  "data-matrx-table-selection-target": true,
@@ -13255,7 +13336,7 @@ function MatrxDataTableCore(coreProps) {
13255
13336
  event.currentTarget.querySelector('[role="checkbox"]')?.click();
13256
13337
  }
13257
13338
  },
13258
- children: /* @__PURE__ */ jsx23(
13339
+ children: /* @__PURE__ */ jsx24(
13259
13340
  Checkbox,
13260
13341
  {
13261
13342
  className: CHECKBOX_TAP_AREA,
@@ -13269,7 +13350,7 @@ function MatrxDataTableCore(coreProps) {
13269
13350
  )
13270
13351
  }
13271
13352
  ) : null,
13272
- columnSpacers && columnSpacers.start > 0 ? /* @__PURE__ */ jsx23(
13353
+ columnSpacers && columnSpacers.start > 0 ? /* @__PURE__ */ jsx24(
13273
13354
  "th",
13274
13355
  {
13275
13356
  "aria-hidden": "true",
@@ -13349,7 +13430,7 @@ function MatrxDataTableCore(coreProps) {
13349
13430
  ...frozenStyle(id)
13350
13431
  },
13351
13432
  children: [
13352
- /* @__PURE__ */ jsx23(ColumnHeaderDropZone, { id, enabled: reorderableColumns && col.reorderable !== false, children: /* @__PURE__ */ jsx23(
13433
+ /* @__PURE__ */ jsx24(ColumnHeaderDropZone, { id, enabled: reorderableColumns && col.reorderable !== false, children: /* @__PURE__ */ jsx24(
13353
13434
  ColumnHeaderCell,
13354
13435
  {
13355
13436
  label: col.header,
@@ -13408,7 +13489,7 @@ function MatrxDataTableCore(coreProps) {
13408
13489
  MenuIcon: host.MenuIcon
13409
13490
  }
13410
13491
  ) }),
13411
- columnResizable ? /* @__PURE__ */ jsx23(
13492
+ columnResizable ? /* @__PURE__ */ jsx24(
13412
13493
  ColumnResizeHandle,
13413
13494
  {
13414
13495
  columnId: id,
@@ -13427,7 +13508,7 @@ function MatrxDataTableCore(coreProps) {
13427
13508
  id
13428
13509
  );
13429
13510
  }),
13430
- columnSpacers && columnSpacers.end > 0 ? /* @__PURE__ */ jsx23(
13511
+ columnSpacers && columnSpacers.end > 0 ? /* @__PURE__ */ jsx24(
13431
13512
  "th",
13432
13513
  {
13433
13514
  "aria-hidden": "true",
@@ -13437,7 +13518,7 @@ function MatrxDataTableCore(coreProps) {
13437
13518
  },
13438
13519
  "matrx-column-spacer-end"
13439
13520
  ) : null,
13440
- showActionsCol && /* @__PURE__ */ jsx23(
13521
+ showActionsCol && /* @__PURE__ */ jsx24(
13441
13522
  "th",
13442
13523
  {
13443
13524
  "data-matrx-table-actions-column": true,
@@ -13449,14 +13530,14 @@ function MatrxDataTableCore(coreProps) {
13449
13530
  embedded && "sm:bg-card"
13450
13531
  ),
13451
13532
  style: fixedUtilityWidth(actionsColumnWidth),
13452
- children: compact && !(toolbar && "portalInto" in toolbar) && !(tableCard && embedded) ? /* @__PURE__ */ jsx23(
13533
+ children: compact && !(toolbar && "portalInto" in toolbar) && !(tableCard && embedded) ? /* @__PURE__ */ jsx24(
13453
13534
  "span",
13454
13535
  {
13455
13536
  ref: setCompactToolbarSlot,
13456
13537
  "data-matrx-table-compact-controls": "",
13457
13538
  className: "inline-flex items-center justify-center normal-case tracking-normal"
13458
13539
  }
13459
- ) : /* @__PURE__ */ jsx23("span", { "data-matrx-table-actions-label": true, className: "inline-block whitespace-nowrap", children: "Actions" })
13540
+ ) : /* @__PURE__ */ jsx24("span", { "data-matrx-table-actions-label": true, className: "inline-block whitespace-nowrap", children: "Actions" })
13460
13541
  }
13461
13542
  )
13462
13543
  ] })
@@ -13474,15 +13555,15 @@ function MatrxDataTableCore(coreProps) {
13474
13555
  "data-matrx-table-skeleton-row": "",
13475
13556
  style: explicitRowHeight !== void 0 ? { height: `${explicitRowHeight}px` } : loadingRowHeight !== void 0 ? { height: `${loadingRowHeight}px` } : void 0,
13476
13557
  children: [
13477
- selection ? /* @__PURE__ */ jsx23(
13558
+ selection ? /* @__PURE__ */ jsx24(
13478
13559
  "td",
13479
13560
  {
13480
13561
  className: cn("px-2 py-1.5 align-middle lg:py-0.5", compactRows && "py-0 lg:py-0"),
13481
13562
  style: fixedUtilityWidth(selectionColumnWidth),
13482
- children: /* @__PURE__ */ jsx23(Skeleton, { className: "h-3.5 w-3.5" })
13563
+ children: /* @__PURE__ */ jsx24(Skeleton, { className: "h-3.5 w-3.5" })
13483
13564
  }
13484
13565
  ) : null,
13485
- columnSpacers && columnSpacers.start > 0 ? /* @__PURE__ */ jsx23(
13566
+ columnSpacers && columnSpacers.start > 0 ? /* @__PURE__ */ jsx24(
13486
13567
  "td",
13487
13568
  {
13488
13569
  "aria-hidden": "true",
@@ -13492,7 +13573,7 @@ function MatrxDataTableCore(coreProps) {
13492
13573
  },
13493
13574
  "matrx-column-spacer-start"
13494
13575
  ) : null,
13495
- renderedColumns.map((col) => /* @__PURE__ */ jsx23(
13576
+ renderedColumns.map((col) => /* @__PURE__ */ jsx24(
13496
13577
  "td",
13497
13578
  {
13498
13579
  ...col.customActions && col.customActionsGhostRow !== void 0 ? { "data-matrx-table-column-id": columnId(col) } : {},
@@ -13506,20 +13587,20 @@ function MatrxDataTableCore(coreProps) {
13506
13587
  col.customActions && col.customActionsGhostRow !== void 0 && "w-px whitespace-nowrap"
13507
13588
  ),
13508
13589
  style: phoneColumnMinStyle(col),
13509
- children: col.customActions && col.customActionsGhostRow !== void 0 ? /* @__PURE__ */ jsx23("div", { "aria-hidden": "true", inert: true, className: "invisible", children: renderRecordCell(col.customActionsGhostRow, col, 0) }) : /* @__PURE__ */ jsx23(Skeleton, { className: cn("w-full", compactRows ? "h-4" : "h-6") })
13590
+ children: col.customActions && col.customActionsGhostRow !== void 0 ? /* @__PURE__ */ jsx24("div", { "aria-hidden": "true", inert: true, className: "invisible", children: renderRecordCell(col.customActionsGhostRow, col, 0) }) : /* @__PURE__ */ jsx24(Skeleton, { className: cn("w-full", compactRows ? "h-4" : "h-6") })
13510
13591
  },
13511
13592
  columnId(col)
13512
13593
  )),
13513
- showActionsCol && /* @__PURE__ */ jsx23(
13594
+ showActionsCol && /* @__PURE__ */ jsx24(
13514
13595
  "td",
13515
13596
  {
13516
13597
  "data-matrx-table-skeleton-actions": "",
13517
13598
  className: cn("px-2 py-1.5 text-right align-middle lg:py-0.5", compactRows && "py-0 lg:py-0"),
13518
13599
  style: fixedUtilityWidth(actionsColumnWidth),
13519
- children: /* @__PURE__ */ jsx23(Skeleton, { className: cn("ml-auto w-10", compactRows ? "h-6" : "h-8") })
13600
+ children: /* @__PURE__ */ jsx24(Skeleton, { className: cn("ml-auto w-10", compactRows ? "h-6" : "h-8") })
13520
13601
  }
13521
13602
  ),
13522
- columnSpacers && columnSpacers.end > 0 ? /* @__PURE__ */ jsx23(
13603
+ columnSpacers && columnSpacers.end > 0 ? /* @__PURE__ */ jsx24(
13523
13604
  "td",
13524
13605
  {
13525
13606
  "aria-hidden": "true",
@@ -13532,15 +13613,15 @@ function MatrxDataTableCore(coreProps) {
13532
13613
  ]
13533
13614
  },
13534
13615
  `sk-${i}`
13535
- )) : readFailure || paginated.length === 0 && !drawsOnlyShutSections ? messageOutsideTable ? null : /* @__PURE__ */ jsx23("tr", { children: /* @__PURE__ */ jsx23("td", { colSpan: renderedColSpan, "data-matrx-table-message-cell": true, className: "overflow-visible! px-0 py-12 text-center", children: tableMessage }) }) : bodyEntries.map((entry) => {
13616
+ )) : readFailure || paginated.length === 0 && !drawsOnlyShutSections ? messageOutsideTable ? null : /* @__PURE__ */ jsx24("tr", { children: /* @__PURE__ */ jsx24("td", { colSpan: renderedColSpan, "data-matrx-table-message-cell": true, className: "overflow-visible! px-0 py-12 text-center", children: tableMessage }) }) : bodyEntries.map((entry) => {
13536
13617
  if (entry.kind === "spacer") {
13537
- return /* @__PURE__ */ jsx23(
13618
+ return /* @__PURE__ */ jsx24(
13538
13619
  "tr",
13539
13620
  {
13540
13621
  "aria-hidden": "true",
13541
13622
  "data-matrx-table-virtual-spacer": entry.place,
13542
13623
  style: { height: `${entry.height}px` },
13543
- children: /* @__PURE__ */ jsx23(
13624
+ children: /* @__PURE__ */ jsx24(
13544
13625
  "td",
13545
13626
  {
13546
13627
  className: "border-0 p-0",
@@ -13552,7 +13633,7 @@ function MatrxDataTableCore(coreProps) {
13552
13633
  );
13553
13634
  }
13554
13635
  if (entry.kind === "group") {
13555
- return /* @__PURE__ */ jsx23(
13636
+ return /* @__PURE__ */ jsx24(
13556
13637
  TableGroupHeaderRow,
13557
13638
  {
13558
13639
  group: entry.group,
@@ -13576,7 +13657,7 @@ function MatrxDataTableCore(coreProps) {
13576
13657
  const row = entry.row;
13577
13658
  const index = entry.index;
13578
13659
  const id = getRowId(row);
13579
- return /* @__PURE__ */ jsx23(
13660
+ return /* @__PURE__ */ jsx24(
13580
13661
  MatrxTableBodyRow,
13581
13662
  {
13582
13663
  rowId: id,
@@ -13597,9 +13678,9 @@ function MatrxDataTableCore(coreProps) {
13597
13678
  "aria-label": entryRow.label ?? "New row",
13598
13679
  className: "border-b border-border/60 bg-card",
13599
13680
  children: [
13600
- selection ? /* @__PURE__ */ jsx23("td", { className: "px-2 py-1.5" }) : null,
13601
- columnSpacers && columnSpacers.start > 0 ? /* @__PURE__ */ jsx23("td", { "aria-hidden": "true", className: "border-0 p-0", style: { width: `${columnSpacers.start}px`, minWidth: `${columnSpacers.start}px` } }) : null,
13602
- renderedColumns.map((column) => /* @__PURE__ */ jsx23(
13681
+ selection ? /* @__PURE__ */ jsx24("td", { className: "px-2 py-1.5" }) : null,
13682
+ columnSpacers && columnSpacers.start > 0 ? /* @__PURE__ */ jsx24("td", { "aria-hidden": "true", className: "border-0 p-0", style: { width: `${columnSpacers.start}px`, minWidth: `${columnSpacers.start}px` } }) : null,
13683
+ renderedColumns.map((column) => /* @__PURE__ */ jsx24(
13603
13684
  "td",
13604
13685
  {
13605
13686
  "data-matrx-table-entry-cell": columnId(column),
@@ -13612,13 +13693,13 @@ function MatrxDataTableCore(coreProps) {
13612
13693
  },
13613
13694
  columnId(column)
13614
13695
  )),
13615
- columnSpacers && columnSpacers.end > 0 ? /* @__PURE__ */ jsx23("td", { "aria-hidden": "true", className: "border-0 p-0", style: { width: `${columnSpacers.end}px`, minWidth: `${columnSpacers.end}px` } }) : null,
13616
- showActionsCol ? /* @__PURE__ */ jsx23("td", { className: "px-2 py-1.5", children: entryRow.actions ?? null }) : null
13696
+ columnSpacers && columnSpacers.end > 0 ? /* @__PURE__ */ jsx24("td", { "aria-hidden": "true", className: "border-0 p-0", style: { width: `${columnSpacers.end}px`, minWidth: `${columnSpacers.end}px` } }) : null,
13697
+ showActionsCol ? /* @__PURE__ */ jsx24("td", { className: "px-2 py-1.5", children: entryRow.actions ?? null }) : null
13617
13698
  ]
13618
13699
  }
13619
13700
  ) : null,
13620
- entryRow?.below ? /* @__PURE__ */ jsx23("tr", { "data-matrx-table-entry-below": "", className: "bg-card", children: /* @__PURE__ */ jsx23("td", { colSpan: renderedColSpan, className: "px-2 py-1.5", children: entryRow.below }) }) : null,
13621
- appendQuery !== null && isFetching && !isLoading ? /* @__PURE__ */ jsx23("tr", { "data-matrx-table-append-loading-row": true, children: /* @__PURE__ */ jsx23(
13701
+ entryRow?.below ? /* @__PURE__ */ jsx24("tr", { "data-matrx-table-entry-below": "", className: "bg-card", children: /* @__PURE__ */ jsx24("td", { colSpan: renderedColSpan, className: "px-2 py-1.5", children: entryRow.below }) }) : null,
13702
+ appendQuery !== null && isFetching && !isLoading ? /* @__PURE__ */ jsx24("tr", { "data-matrx-table-append-loading-row": true, children: /* @__PURE__ */ jsx24(
13622
13703
  "td",
13623
13704
  {
13624
13705
  colSpan: renderedColSpan,
@@ -13630,7 +13711,7 @@ function MatrxDataTableCore(coreProps) {
13630
13711
  "aria-live": "polite",
13631
13712
  className: "sticky left-0 flex h-16 w-fit max-w-[100cqw] items-center justify-center gap-2 px-3 text-sm font-medium text-foreground",
13632
13713
  children: [
13633
- /* @__PURE__ */ jsx23(
13714
+ /* @__PURE__ */ jsx24(
13634
13715
  Loader2Icon,
13635
13716
  {
13636
13717
  "aria-hidden": "true",
@@ -13646,16 +13727,16 @@ function MatrxDataTableCore(coreProps) {
13646
13727
  ]
13647
13728
  }
13648
13729
  ),
13649
- /* @__PURE__ */ jsx23(MatrxTableChrome, { part: "footer", epoch: footerEpoch, render: () => footerRows.length > 0 || hasSummaryTotals ? /* @__PURE__ */ jsxs22("tfoot", { className: cn(
13730
+ /* @__PURE__ */ jsx24(MatrxTableChrome, { part: "footer", epoch: footerEpoch, render: () => footerRows.length > 0 || hasSummaryTotals ? /* @__PURE__ */ jsxs22("tfoot", { className: cn(
13650
13731
  "border-t-2 border-border bg-muted/50 font-semibold",
13651
13732
  // Frozen body cells sit at z-20. The sticky totals band is
13652
13733
  // a separate stacking context and must sit above them, or a
13653
13734
  // frozen first cell covers the totals label at the footer.
13654
13735
  hasSummaryTotals && "sticky bottom-0 z-30 bg-muted/95 backdrop-blur-sm"
13655
13736
  ), children: [
13656
- hasSummaryTotals ? /* @__PURE__ */ jsx23(Fragment15, { children: /* @__PURE__ */ jsxs22("tr", { "data-matrx-table-summary-totals": true, "data-matrx-table-summary-scope": summaryUsesSource ? "source" : summaryCoverage, children: [
13657
- selection ? /* @__PURE__ */ jsx23("td", { className: "px-2 py-2" }) : null,
13658
- columnSpacers && columnSpacers.start > 0 ? /* @__PURE__ */ jsx23(
13737
+ hasSummaryTotals ? /* @__PURE__ */ jsx24(Fragment15, { children: /* @__PURE__ */ jsxs22("tr", { "data-matrx-table-summary-totals": true, "data-matrx-table-summary-scope": summaryUsesSource ? "source" : summaryCoverage, children: [
13738
+ selection ? /* @__PURE__ */ jsx24("td", { className: "px-2 py-2" }) : null,
13739
+ columnSpacers && columnSpacers.start > 0 ? /* @__PURE__ */ jsx24(
13659
13740
  "td",
13660
13741
  {
13661
13742
  "aria-hidden": "true",
@@ -13688,17 +13769,17 @@ function MatrxDataTableCore(coreProps) {
13688
13769
  children: [
13689
13770
  columnIndex === 0 ? /* @__PURE__ */ jsxs22("span", { "data-matrx-table-summary-total-label": true, className: "text-sm font-semibold text-foreground", children: [
13690
13771
  summaryCaption,
13691
- readView.stale ? /* @__PURE__ */ jsx23("span", { className: "ml-1 text-xs text-amber-700 dark:text-amber-300", children: "Retained rows may be out of date." }) : null
13772
+ readView.stale ? /* @__PURE__ */ jsx24("span", { className: "ml-1 text-xs text-amber-700 dark:text-amber-300", children: "Retained rows may be out of date." }) : null
13692
13773
  ] }) : null,
13693
- columnIndex === 0 && total?.value != null ? /* @__PURE__ */ jsx23("span", { className: "ml-2", children: total.value }) : null,
13774
+ columnIndex === 0 && total?.value != null ? /* @__PURE__ */ jsx24("span", { className: "ml-2", children: total.value }) : null,
13694
13775
  columnIndex !== 0 ? total?.value : null,
13695
- total?.unavailable ? /* @__PURE__ */ jsx23(ErrorBox, { as: "span", className: "sr-only", message: `${columnId(column)} total is unavailable`, operation: "Total this column", origin: "design-system/MatrxDataTable" }) : null
13776
+ total?.unavailable ? /* @__PURE__ */ jsx24(ErrorBox, { as: "span", className: "sr-only", message: `${columnId(column)} total is unavailable`, operation: "Total this column", origin: "design-system/MatrxDataTable" }) : null
13696
13777
  ]
13697
13778
  },
13698
13779
  columnId(column)
13699
13780
  );
13700
13781
  }),
13701
- columnSpacers && columnSpacers.end > 0 ? /* @__PURE__ */ jsx23(
13782
+ columnSpacers && columnSpacers.end > 0 ? /* @__PURE__ */ jsx24(
13702
13783
  "td",
13703
13784
  {
13704
13785
  "aria-hidden": "true",
@@ -13708,11 +13789,11 @@ function MatrxDataTableCore(coreProps) {
13708
13789
  },
13709
13790
  "matrx-summary-column-spacer-end"
13710
13791
  ) : null,
13711
- showActionsCol ? /* @__PURE__ */ jsx23("td", {}) : null
13792
+ showActionsCol ? /* @__PURE__ */ jsx24("td", {}) : null
13712
13793
  ] }) }) : null,
13713
13794
  footerRows.map((row, index) => /* @__PURE__ */ jsxs22("tr", { children: [
13714
- selection ? /* @__PURE__ */ jsx23("td", { className: "px-2 py-2" }) : null,
13715
- columnSpacers && columnSpacers.start > 0 ? /* @__PURE__ */ jsx23(
13795
+ selection ? /* @__PURE__ */ jsx24("td", { className: "px-2 py-2" }) : null,
13796
+ columnSpacers && columnSpacers.start > 0 ? /* @__PURE__ */ jsx24(
13716
13797
  "td",
13717
13798
  {
13718
13799
  "aria-hidden": "true",
@@ -13722,7 +13803,7 @@ function MatrxDataTableCore(coreProps) {
13722
13803
  },
13723
13804
  "matrx-column-spacer-start"
13724
13805
  ) : null,
13725
- renderedColumns.map((column) => /* @__PURE__ */ jsx23(
13806
+ renderedColumns.map((column) => /* @__PURE__ */ jsx24(
13726
13807
  "td",
13727
13808
  {
13728
13809
  className: cn(
@@ -13742,7 +13823,7 @@ function MatrxDataTableCore(coreProps) {
13742
13823
  },
13743
13824
  columnId(column)
13744
13825
  )),
13745
- columnSpacers && columnSpacers.end > 0 ? /* @__PURE__ */ jsx23(
13826
+ columnSpacers && columnSpacers.end > 0 ? /* @__PURE__ */ jsx24(
13746
13827
  "td",
13747
13828
  {
13748
13829
  "aria-hidden": "true",
@@ -13752,18 +13833,18 @@ function MatrxDataTableCore(coreProps) {
13752
13833
  },
13753
13834
  "matrx-column-spacer-end"
13754
13835
  ) : null,
13755
- showActionsCol ? /* @__PURE__ */ jsx23("td", {}) : null
13836
+ showActionsCol ? /* @__PURE__ */ jsx24("td", {}) : null
13756
13837
  ] }, `footer-${index}`))
13757
13838
  ] }) : null })
13758
13839
  ]
13759
13840
  }
13760
13841
  ),
13761
- messageOutsideTable ? /* @__PURE__ */ jsx23("div", { "data-matrx-table-message-outside": true, className: "py-12 text-center", children: tableMessage }) : null
13842
+ messageOutsideTable ? /* @__PURE__ */ jsx24("div", { "data-matrx-table-message-outside": true, className: "py-12 text-center", children: tableMessage }) : null
13762
13843
  ]
13763
13844
  }
13764
13845
  ),
13765
13846
  scrollHintLeft ? /* @__PURE__ */ jsxs22(Tooltip, { children: [
13766
- /* @__PURE__ */ jsx23(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx23(
13847
+ /* @__PURE__ */ jsx24(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx24(
13767
13848
  Button,
13768
13849
  {
13769
13850
  type: "button",
@@ -13775,13 +13856,13 @@ function MatrxDataTableCore(coreProps) {
13775
13856
  ...scrollHintTop === null ? {} : { style: { top: scrollHintTop } },
13776
13857
  className: cn(scrollHintTop === null ? "top-1/2 h-11 w-11" : "h-7 w-7", "absolute left-1.5 z-30 hidden -translate-y-1/2 rounded-full border border-glass-edge bg-glass p-0 text-foreground shadow-glass backdrop-blur-glass backdrop-saturate-glass hover:bg-glass-hover active:bg-glass-active sm:inline-flex"),
13777
13858
  onClick: () => scrollTableHorizontally("left"),
13778
- children: /* @__PURE__ */ jsx23(ChevronLeftIcon, { className: "h-5 w-5" })
13859
+ children: /* @__PURE__ */ jsx24(ChevronLeftIcon, { className: "h-5 w-5" })
13779
13860
  }
13780
13861
  ) }),
13781
- /* @__PURE__ */ jsx23(TooltipContent, { children: "More columns to the left" })
13862
+ /* @__PURE__ */ jsx24(TooltipContent, { children: "More columns to the left" })
13782
13863
  ] }) : null,
13783
13864
  scrollHintRight ? /* @__PURE__ */ jsxs22(Tooltip, { children: [
13784
- /* @__PURE__ */ jsx23(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx23(
13865
+ /* @__PURE__ */ jsx24(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx24(
13785
13866
  Button,
13786
13867
  {
13787
13868
  type: "button",
@@ -13793,10 +13874,10 @@ function MatrxDataTableCore(coreProps) {
13793
13874
  style: scrollHintTop === null ? { right: scrollHintRightInset } : { right: scrollHintRightInset, top: scrollHintTop },
13794
13875
  className: cn(scrollHintTop === null ? "top-1/2 h-11 w-11" : "h-7 w-7", "transition-[background-color,box-shadow,opacity] absolute z-30 hidden -translate-y-1/2 rounded-full border border-glass-edge bg-glass p-0 text-foreground shadow-glass backdrop-blur-glass backdrop-saturate-glass hover:bg-glass-hover active:bg-glass-active sm:inline-flex"),
13795
13876
  onClick: () => scrollTableHorizontally("right"),
13796
- children: /* @__PURE__ */ jsx23(ChevronRightIcon, { className: "h-5 w-5" })
13877
+ children: /* @__PURE__ */ jsx24(ChevronRightIcon, { className: "h-5 w-5" })
13797
13878
  }
13798
13879
  ) }),
13799
- /* @__PURE__ */ jsx23(TooltipContent, { children: "More columns to the right" })
13880
+ /* @__PURE__ */ jsx24(TooltipContent, { children: "More columns to the right" })
13800
13881
  ] }) : null
13801
13882
  ] }),
13802
13883
  appendQuery ? /* @__PURE__ */ jsxs22(
@@ -13812,7 +13893,7 @@ function MatrxDataTableCore(coreProps) {
13812
13893
  ...isFetching && !isLoading ? {} : { role: "status", "aria-live": "polite" },
13813
13894
  className: "flex w-full min-w-0 items-center gap-2 text-xs text-muted-foreground sm:w-auto sm:flex-1",
13814
13895
  children: [
13815
- isLoading ? /* @__PURE__ */ jsx23(
13896
+ isLoading ? /* @__PURE__ */ jsx24(
13816
13897
  Loader2Icon,
13817
13898
  {
13818
13899
  "data-matrx-table-append-loader": true,
@@ -13821,19 +13902,19 @@ function MatrxDataTableCore(coreProps) {
13821
13902
  }
13822
13903
  ) : null,
13823
13904
  /* @__PURE__ */ jsxs22("div", { className: "flex min-w-0 flex-1 flex-wrap items-center gap-x-2", children: [
13824
- /* @__PURE__ */ jsx23("p", { className: "min-w-0 break-words font-medium text-foreground", children: isLoading ? "Loading rows\u2026" : readView.failure ? "Nothing loaded \u2014 the read failed" : appendQuery.pagination.sourceRecords ? `${formatCount10(processed.length)} ${appendQuery.pagination.sourceRecords.rowLabel}${appendQuery.pagination.sourceRecords.matchedRecords === void 0 ? "" : ` (${formatCount10(appendQuery.pagination.sourceRecords.matchedRecords)} matching ${appendQuery.pagination.sourceRecords.label})`} \xB7 ${formatCount10(appendQuery.pagination.sourceRecords.loaded)}${appendQuery.pagination.sourceRecords.total === void 0 ? "" : ` / ${formatCount10(appendQuery.pagination.sourceRecords.total)}`} ${appendQuery.pagination.sourceRecords.label} loaded` : `${processed.length === data.length ? "" : `${formatCount10(processed.length)} matching loaded ${processed.length === 1 ? "row" : "rows"} \xB7 `}${formatCount10(data.length)} loaded${appendQuery.pagination.totalItems === void 0 ? "" : ` of ${formatCount10(appendQuery.pagination.totalItems)}`}` }),
13905
+ /* @__PURE__ */ jsx24("p", { className: "min-w-0 break-words font-medium text-foreground", children: isLoading ? "Loading rows\u2026" : readView.failure ? "Nothing loaded \u2014 the read failed" : appendQuery.pagination.sourceRecords ? `${formatCount10(processed.length)} ${appendQuery.pagination.sourceRecords.rowLabel}${appendQuery.pagination.sourceRecords.matchedRecords === void 0 ? "" : ` (${formatCount10(appendQuery.pagination.sourceRecords.matchedRecords)} matching ${appendQuery.pagination.sourceRecords.label})`} \xB7 ${formatCount10(appendQuery.pagination.sourceRecords.loaded)}${appendQuery.pagination.sourceRecords.total === void 0 ? "" : ` / ${formatCount10(appendQuery.pagination.sourceRecords.total)}`} ${appendQuery.pagination.sourceRecords.label} loaded` : `${processed.length === data.length ? "" : `${formatCount10(processed.length)} matching loaded ${processed.length === 1 ? "row" : "rows"} \xB7 `}${formatCount10(data.length)} loaded${appendQuery.pagination.totalItems === void 0 ? "" : ` of ${formatCount10(appendQuery.pagination.totalItems)}`}` }),
13825
13906
  appendQuery.pagination.sourceUntil || appendUsesLocalProcessing ? /* @__PURE__ */ jsxs22(Tooltip, { children: [
13826
- /* @__PURE__ */ jsx23(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx23("button", { type: "button", "aria-label": "Source coverage", className: "shrink-0 text-xs text-muted-foreground underline decoration-dotted underline-offset-4", children: "Source info" }) }),
13907
+ /* @__PURE__ */ jsx24(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx24("button", { type: "button", "aria-label": "Source coverage", className: "shrink-0 text-xs text-muted-foreground underline decoration-dotted underline-offset-4", children: "Source info" }) }),
13827
13908
  /* @__PURE__ */ jsxs22(TooltipContent, { children: [
13828
13909
  appendQuery.pagination.sourceUntil ? /* @__PURE__ */ jsxs22("p", { children: [
13829
13910
  "Source fixed through ",
13830
13911
  new Date(appendQuery.pagination.sourceUntil).toLocaleString(),
13831
13912
  "."
13832
13913
  ] }) : null,
13833
- /* @__PURE__ */ jsx23("p", { children: !isLoading && !isFetching && !appendQuery.pagination.loadAll?.isLoading && !scrollPagination.error && !appendQuery.pagination.hasNextPage && appendQuery.pagination.totalItems !== void 0 && data.length === appendQuery.pagination.totalItems ? "All source rows are loaded." : appendUsesLocalProcessing ? sourceOwnsColumnFilters ? "Local processing covers loaded rows; source-owned column filters are applied by the source." : "Local search and filters cover loaded rows." : "Source paging is active." })
13914
+ /* @__PURE__ */ jsx24("p", { children: !isLoading && !isFetching && !appendQuery.pagination.loadAll?.isLoading && !scrollPagination.error && !appendQuery.pagination.hasNextPage && appendQuery.pagination.totalItems !== void 0 && data.length === appendQuery.pagination.totalItems ? "All source rows are loaded." : appendUsesLocalProcessing ? sourceOwnsColumnFilters ? "Local processing covers loaded rows; source-owned column filters are applied by the source." : "Local search and filters cover loaded rows." : "Source paging is active." })
13834
13915
  ] })
13835
13916
  ] }) : null,
13836
- scrollPagination.error ? /* @__PURE__ */ jsx23(
13917
+ scrollPagination.error ? /* @__PURE__ */ jsx24(
13837
13918
  ErrorBox,
13838
13919
  {
13839
13920
  className: "text-destructive-ink",
@@ -13857,21 +13938,21 @@ function MatrxDataTableCore(coreProps) {
13857
13938
  value: String(appendQuery.pagination.sourcePageSize.value),
13858
13939
  onValueChange: (value) => appendQuery.pagination.sourcePageSize?.onChange(Number(value)),
13859
13940
  children: [
13860
- /* @__PURE__ */ jsx23(
13941
+ /* @__PURE__ */ jsx24(
13861
13942
  SelectTrigger,
13862
13943
  {
13863
13944
  "aria-label": "Rows per load",
13864
13945
  className: "h-8 min-w-20 shrink-0 rounded-md border border-border bg-card px-3 text-sm [&_svg]:size-5",
13865
13946
  disabled: isLoading || isFetching || appendQuery.pagination.loadAll?.isLoading,
13866
- children: /* @__PURE__ */ jsx23(SelectValue, {})
13947
+ children: /* @__PURE__ */ jsx24(SelectValue, {})
13867
13948
  }
13868
13949
  ),
13869
- /* @__PURE__ */ jsx23(SelectContent, { children: appendQuery.pagination.sourcePageSize.options.map((size) => /* @__PURE__ */ jsx23(SelectItem, { value: String(size), children: size }, size)) })
13950
+ /* @__PURE__ */ jsx24(SelectContent, { children: appendQuery.pagination.sourcePageSize.options.map((size) => /* @__PURE__ */ jsx24(SelectItem, { value: String(size), children: size }, size)) })
13870
13951
  ]
13871
13952
  }
13872
13953
  ) : null,
13873
13954
  /* @__PURE__ */ jsxs22("div", { className: "flex min-w-0 max-w-full flex-wrap gap-0", children: [
13874
- /* @__PURE__ */ jsx23(
13955
+ /* @__PURE__ */ jsx24(
13875
13956
  Button,
13876
13957
  {
13877
13958
  type: "button",
@@ -13882,7 +13963,7 @@ function MatrxDataTableCore(coreProps) {
13882
13963
  children: "Load more"
13883
13964
  }
13884
13965
  ),
13885
- appendQuery.pagination.loadAll ? /* @__PURE__ */ jsx23(
13966
+ appendQuery.pagination.loadAll ? /* @__PURE__ */ jsx24(
13886
13967
  Button,
13887
13968
  {
13888
13969
  type: "button",
@@ -13894,7 +13975,7 @@ function MatrxDataTableCore(coreProps) {
13894
13975
  }
13895
13976
  ) : null
13896
13977
  ] }),
13897
- appendQuery.pagination.loadAll?.isLoading ? /* @__PURE__ */ jsx23(
13978
+ appendQuery.pagination.loadAll?.isLoading ? /* @__PURE__ */ jsx24(
13898
13979
  Button,
13899
13980
  {
13900
13981
  type: "button",
@@ -13903,7 +13984,7 @@ function MatrxDataTableCore(coreProps) {
13903
13984
  onClick: appendQuery.pagination.loadAll.stop,
13904
13985
  children: "Stop loading"
13905
13986
  }
13906
- ) : scrollPagination.error ? /* @__PURE__ */ jsx23(
13987
+ ) : scrollPagination.error ? /* @__PURE__ */ jsx24(
13907
13988
  Button,
13908
13989
  {
13909
13990
  type: "button",
@@ -13912,7 +13993,7 @@ function MatrxDataTableCore(coreProps) {
13912
13993
  onClick: appendQuery.pagination.retrySource ?? (appendQuery.pagination.hasNextPage ? appendQuery.pagination.loadNextPage : appendQuery.pagination.refresh),
13913
13994
  children: appendQuery.pagination.retrySource ? "Retry source" : appendQuery.pagination.hasNextPage ? "Retry" : "Reload rows"
13914
13995
  }
13915
- ) : !isLoading && appendQuery.pagination.totalItems !== void 0 && data.length === appendQuery.pagination.totalItems ? /* @__PURE__ */ jsx23("span", { className: "min-w-0 max-w-full break-words whitespace-normal px-3 text-xs text-muted-foreground sm:text-sm", children: "All rows loaded" }) : null
13996
+ ) : !isLoading && appendQuery.pagination.totalItems !== void 0 && data.length === appendQuery.pagination.totalItems ? /* @__PURE__ */ jsx24("span", { className: "min-w-0 max-w-full break-words whitespace-normal px-3 text-xs text-muted-foreground sm:text-sm", children: "All rows loaded" }) : null
13916
13997
  ]
13917
13998
  }
13918
13999
  ) : embedded && !hidePagination && !drillGrouped && (localProgressiveEnabled || pageCount <= 1 || remoteQuery?.mode === "controlled") ? (
@@ -13920,7 +14001,7 @@ function MatrxDataTableCore(coreProps) {
13920
14001
  // rows than the card's first batch, ONE quiet "Show more" with its honest count, drawn
13921
14002
  // in the card's footer row beside "+ Add" when the card has one. Rows held locally are
13922
14003
  // revealed; a server-paged source is asked for a bigger first page (a real fetch).
13923
- localProgressiveEnabled && progressiveRows.hasMore ? /* @__PURE__ */ jsx23(
14004
+ localProgressiveEnabled && progressiveRows.hasMore ? /* @__PURE__ */ jsx24(
13924
14005
  MatrxTableCardShowMore,
13925
14006
  {
13926
14007
  card: tableCard,
@@ -13928,7 +14009,7 @@ function MatrxDataTableCore(coreProps) {
13928
14009
  total: totalItems,
13929
14010
  onShowMore: () => void chromeLatest.current.showMore()
13930
14011
  }
13931
- ) : remoteQuery?.mode === "controlled" && !isLoading && totalItems > data.length ? /* @__PURE__ */ jsx23(
14012
+ ) : remoteQuery?.mode === "controlled" && !isLoading && totalItems > data.length ? /* @__PURE__ */ jsx24(
13932
14013
  MatrxTableCardShowMore,
13933
14014
  {
13934
14015
  card: tableCard,
@@ -13942,7 +14023,7 @@ function MatrxDataTableCore(coreProps) {
13942
14023
  // Keep the footer and disabled page controls in place for an empty table,
13943
14024
  // including an unfiltered empty source. The empty-state copy explains why
13944
14025
  // there are no records; the stable footer preserves the table controls.
13945
- /* @__PURE__ */ jsx23(MatrxTableChrome, { part: "pagination", epoch: paginationEpoch, render: () => /* @__PURE__ */ jsx23("div", { className: "shrink-0", children: /* @__PURE__ */ jsx23(
14026
+ /* @__PURE__ */ jsx24(MatrxTableChrome, { part: "pagination", epoch: paginationEpoch, render: () => /* @__PURE__ */ jsx24("div", { className: "shrink-0", children: /* @__PURE__ */ jsx24(
13946
14027
  GenericTablePagination,
13947
14028
  {
13948
14029
  totalItems,
@@ -13994,7 +14075,7 @@ function MatrxDataTableCore(coreProps) {
13994
14075
  ]
13995
14076
  }
13996
14077
  ),
13997
- offerSelectAllMatching && selectionMatchingTotal !== void 0 ? /* @__PURE__ */ jsx23(
14078
+ offerSelectAllMatching && selectionMatchingTotal !== void 0 ? /* @__PURE__ */ jsx24(
13998
14079
  Button2,
13999
14080
  {
14000
14081
  type: "button",
@@ -14004,12 +14085,12 @@ function MatrxDataTableCore(coreProps) {
14004
14085
  children: `Select all ${formatCount10(selectionMatchingTotal)}`
14005
14086
  }
14006
14087
  ) : null,
14007
- /* @__PURE__ */ jsx23(
14088
+ /* @__PURE__ */ jsx24(
14008
14089
  Button2,
14009
14090
  {
14010
14091
  type: "button",
14011
14092
  variant: "quiet",
14012
- icon: /* @__PURE__ */ jsx23(XIcon, { "aria-hidden": "true" }),
14093
+ icon: /* @__PURE__ */ jsx24(XIcon, { "aria-hidden": "true" }),
14013
14094
  onClick: () => {
14014
14095
  lastToggledIndex.current = null;
14015
14096
  if (allMatching) setAllMatching(false);
@@ -14024,7 +14105,7 @@ function MatrxDataTableCore(coreProps) {
14024
14105
  "data-matrx-table-bulk-actions": true,
14025
14106
  className: "flex min-w-0 flex-1 flex-nowrap items-center justify-start gap-0 overflow-x-auto sm:justify-end [&>*]:shrink-0",
14026
14107
  children: [
14027
- effectiveCopy ? /* @__PURE__ */ jsx23(
14108
+ effectiveCopy ? /* @__PURE__ */ jsx24(
14028
14109
  CopyButtons,
14029
14110
  {
14030
14111
  size: "icon",
@@ -14063,7 +14144,7 @@ function MatrxDataTableCore(coreProps) {
14063
14144
  }
14064
14145
  ) : null
14065
14146
  ] }),
14066
- /* @__PURE__ */ jsx23(
14147
+ /* @__PURE__ */ jsx24(
14067
14148
  ColumnManager,
14068
14149
  {
14069
14150
  open: columnManagerOpen,
@@ -14075,7 +14156,7 @@ function MatrxDataTableCore(coreProps) {
14075
14156
  defaults: columnManagerDefaults
14076
14157
  }
14077
14158
  ),
14078
- detailEnabled && selectedRow ? /* @__PURE__ */ jsx23(
14159
+ detailEnabled && selectedRow ? /* @__PURE__ */ jsx24(
14079
14160
  SidePanelSurface,
14080
14161
  {
14081
14162
  title: resolveStringTitle(
@@ -14088,7 +14169,7 @@ function MatrxDataTableCore(coreProps) {
14088
14169
  openRequest,
14089
14170
  defaultWidth: detail?.defaultWidth ?? 480,
14090
14171
  headerActions: /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-1", children: [
14091
- effectiveCopy && showRowCopy ? /* @__PURE__ */ jsx23(
14172
+ effectiveCopy && showRowCopy ? /* @__PURE__ */ jsx24(
14092
14173
  TableRowCopyControl,
14093
14174
  {
14094
14175
  size: "icon",
@@ -14102,7 +14183,7 @@ function MatrxDataTableCore(coreProps) {
14102
14183
  detail?.headerActions?.(selectedRow),
14103
14184
  renderRecordPageDoor(selectedRow),
14104
14185
  windowEnabled ? /* @__PURE__ */ jsxs22(Tooltip, { children: [
14105
- /* @__PURE__ */ jsx23(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx23(
14186
+ /* @__PURE__ */ jsx24(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx24(
14106
14187
  Button,
14107
14188
  {
14108
14189
  type: "button",
@@ -14112,10 +14193,10 @@ function MatrxDataTableCore(coreProps) {
14112
14193
  className: "h-7 w-7",
14113
14194
  "aria-label": "Open in window",
14114
14195
  onClick: () => openWindow(selectedRow),
14115
- children: /* @__PURE__ */ jsx23(PanelRightIcon, { className: "h-5 w-5" })
14196
+ children: /* @__PURE__ */ jsx24(PanelRightIcon, { className: "h-5 w-5" })
14116
14197
  }
14117
14198
  ) }),
14118
- /* @__PURE__ */ jsx23(TooltipContent, { children: "Open in window" })
14199
+ /* @__PURE__ */ jsx24(TooltipContent, { children: "Open in window" })
14119
14200
  ] }) : null
14120
14201
  ] }),
14121
14202
  children: detail?.render ? (
@@ -14126,7 +14207,7 @@ function MatrxDataTableCore(coreProps) {
14126
14207
  // fixes the whole class at once — a custom body that already
14127
14208
  // scrolls (`h-full` + `overflow-y-auto` root) still resolves to
14128
14209
  // this container's height, so no second scrollbar appears.
14129
- /* @__PURE__ */ jsx23("div", { className: "h-full min-h-0 overflow-y-auto", children: detail.render(selectedRow, {
14210
+ /* @__PURE__ */ jsx24("div", { className: "h-full min-h-0 overflow-y-auto", children: detail.render(selectedRow, {
14130
14211
  closeDetail: () => setSelectedId(null),
14131
14212
  openDetail: () => openDetail(selectedRow),
14132
14213
  openWindow: () => openWindow(selectedRow),
@@ -14134,7 +14215,7 @@ function MatrxDataTableCore(coreProps) {
14134
14215
  hasPendingEdits: Boolean(edits[getRowId(selectedRow)]),
14135
14216
  discardPendingEdits: () => discardRowEdits(getRowId(selectedRow))
14136
14217
  }) })
14137
- ) : /* @__PURE__ */ jsx23(
14218
+ ) : /* @__PURE__ */ jsx24(
14138
14219
  DataRowInspector,
14139
14220
  {
14140
14221
  row: selectedRow,
@@ -14148,7 +14229,7 @@ function MatrxDataTableCore(coreProps) {
14148
14229
  )
14149
14230
  }
14150
14231
  ) : null,
14151
- windowRow ? /* @__PURE__ */ jsx23(
14232
+ windowRow ? /* @__PURE__ */ jsx24(
14152
14233
  DataRowWindow,
14153
14234
  {
14154
14235
  isOpen: true,
@@ -14162,7 +14243,7 @@ function MatrxDataTableCore(coreProps) {
14162
14243
  headerActions: /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-1", children: [
14163
14244
  renderRecordPageDoor(windowRow),
14164
14245
  windowConfig?.openOnRowClick === true && detail?.enabled === true ? /* @__PURE__ */ jsxs22(Tooltip, { children: [
14165
- /* @__PURE__ */ jsx23(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx23(
14246
+ /* @__PURE__ */ jsx24(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx24(
14166
14247
  Button,
14167
14248
  {
14168
14249
  type: "button",
@@ -14175,12 +14256,12 @@ function MatrxDataTableCore(coreProps) {
14175
14256
  closeWindow();
14176
14257
  openDetail(windowRow);
14177
14258
  },
14178
- children: /* @__PURE__ */ jsx23(PanelRightIcon, { className: "h-5 w-5" })
14259
+ children: /* @__PURE__ */ jsx24(PanelRightIcon, { className: "h-5 w-5" })
14179
14260
  }
14180
14261
  ) }),
14181
- /* @__PURE__ */ jsx23(TooltipContent, { children: "Open in side panel" })
14262
+ /* @__PURE__ */ jsx24(TooltipContent, { children: "Open in side panel" })
14182
14263
  ] }) : null,
14183
- effectiveCopy && showRowCopy ? /* @__PURE__ */ jsx23(
14264
+ effectiveCopy && showRowCopy ? /* @__PURE__ */ jsx24(
14184
14265
  TableRowCopyControl,
14185
14266
  {
14186
14267
  size: "icon",
@@ -14199,7 +14280,7 @@ function MatrxDataTableCore(coreProps) {
14199
14280
  closeWindow,
14200
14281
  hasPendingEdits: Boolean(edits[getRowId(windowRow)]),
14201
14282
  discardPendingEdits: () => discardRowEdits(getRowId(windowRow))
14202
- }) ?? /* @__PURE__ */ jsx23(
14283
+ }) ?? /* @__PURE__ */ jsx24(
14203
14284
  DataRowInspector,
14204
14285
  {
14205
14286
  row: windowRow,
@@ -14228,7 +14309,7 @@ function MatrxDataTableCore(coreProps) {
14228
14309
  discardPendingEdits: () => discardRowEdits(getRowId(windowRow))
14229
14310
  }) : editableFieldColumns(windowRow).length > 0 ? (
14230
14311
  // THE DEFAULT EDIT TAB: the editable columns with the grid's own editors.
14231
- /* @__PURE__ */ jsx23(
14312
+ /* @__PURE__ */ jsx24(
14232
14313
  DataRowInspector,
14233
14314
  {
14234
14315
  row: windowRow,
@@ -14248,7 +14329,7 @@ function MatrxDataTableCore(coreProps) {
14248
14329
  })
14249
14330
  }
14250
14331
  ) : null,
14251
- missingWindowRowId ? /* @__PURE__ */ jsx23(
14332
+ missingWindowRowId ? /* @__PURE__ */ jsx24(
14252
14333
  DataRowWindow,
14253
14334
  {
14254
14335
  isOpen: true,
@@ -14257,7 +14338,7 @@ function MatrxDataTableCore(coreProps) {
14257
14338
  width: 520,
14258
14339
  height: 360,
14259
14340
  windowId: `matrx-data-row-${urlState?.id ?? "local"}-missing-${missingWindowRowId}`,
14260
- viewContent: /* @__PURE__ */ jsx23(
14341
+ viewContent: /* @__PURE__ */ jsx24(
14261
14342
  MissingRowNotice,
14262
14343
  {
14263
14344
  id: missingWindowRowId,
@@ -14275,8 +14356,8 @@ function MatrxDataTableCore(coreProps) {
14275
14356
  "data-matrx-foreign-drafts": true,
14276
14357
  className: "fixed inset-x-3 bottom-20 z-50 flex flex-wrap items-center justify-center gap-2 rounded-lg border border-amber-500/40 bg-card px-3 py-2 text-xs shadow-lg sm:inset-x-auto sm:left-1/2 sm:-translate-x-1/2 sm:flex-nowrap",
14277
14358
  children: [
14278
- /* @__PURE__ */ jsx23("span", { children: "Unsaved edits from previous results" }),
14279
- /* @__PURE__ */ jsx23(
14359
+ /* @__PURE__ */ jsx24("span", { children: "Unsaved edits from previous results" }),
14360
+ /* @__PURE__ */ jsx24(
14280
14361
  CopyButtons,
14281
14362
  {
14282
14363
  size: "xs",
@@ -14285,11 +14366,11 @@ function MatrxDataTableCore(coreProps) {
14285
14366
  json: () => foreignDraftPayload
14286
14367
  }
14287
14368
  ),
14288
- /* @__PURE__ */ jsx23(Button, { type: "button", size: "sm", variant: "ghost", className: "h-7 text-xs text-destructive-ink", onClick: () => setConfirmForeignDraftDiscard(true), children: "Discard drafts" })
14369
+ /* @__PURE__ */ jsx24(Button, { type: "button", size: "sm", variant: "ghost", className: "h-7 text-xs text-destructive-ink", onClick: () => setConfirmForeignDraftDiscard(true), children: "Discard drafts" })
14289
14370
  ]
14290
14371
  }
14291
14372
  ) : null,
14292
- /* @__PURE__ */ jsx23(
14373
+ /* @__PURE__ */ jsx24(
14293
14374
  ConfirmDialog,
14294
14375
  {
14295
14376
  open: confirmForeignDraftDiscard,
@@ -14309,7 +14390,7 @@ function MatrxDataTableCore(coreProps) {
14309
14390
  }
14310
14391
  }
14311
14392
  ),
14312
- /* @__PURE__ */ jsx23(
14393
+ /* @__PURE__ */ jsx24(
14313
14394
  DirtySavePill,
14314
14395
  {
14315
14396
  changeCount,
@@ -14322,11 +14403,11 @@ function MatrxDataTableCore(coreProps) {
14322
14403
  ]
14323
14404
  }
14324
14405
  ),
14325
- /* @__PURE__ */ jsx23(DragOverlay, { children: draggedRow ? (
14406
+ /* @__PURE__ */ jsx24(DragOverlay, { children: draggedRow ? (
14326
14407
  // w-max: the overlay inherits the ACTIVE node's size, and the active
14327
14408
  // node is the 16px grip handle — without it the label wraps to one
14328
14409
  // character per line.
14329
- /* @__PURE__ */ jsx23("div", { className: "w-max max-w-xs truncate rounded border border-border bg-card px-2.5 py-1.5 text-sm font-medium text-foreground shadow-md", children: hierarchy?.itemLabel?.(draggedRow) ?? "Moving row" })
14410
+ /* @__PURE__ */ jsx24("div", { className: "w-max max-w-xs truncate rounded border border-border bg-card px-2.5 py-1.5 text-sm font-medium text-foreground shadow-md", children: hierarchy?.itemLabel?.(draggedRow) ?? "Moving row" })
14330
14411
  ) : null })
14331
14412
  ]
14332
14413
  }
@@ -14343,7 +14424,7 @@ function HierarchyDragHandle({
14343
14424
  id,
14344
14425
  disabled
14345
14426
  });
14346
- return /* @__PURE__ */ jsx23(
14427
+ return /* @__PURE__ */ jsx24(
14347
14428
  "button",
14348
14429
  {
14349
14430
  ref: setNodeRef,
@@ -14355,7 +14436,7 @@ function HierarchyDragHandle({
14355
14436
  onClick: (event) => event.stopPropagation(),
14356
14437
  ...attributes,
14357
14438
  ...listeners,
14358
- children: /* @__PURE__ */ jsx23(GripVerticalIcon, { className: "h-3.5 w-3.5" })
14439
+ children: /* @__PURE__ */ jsx24(GripVerticalIcon, { className: "h-3.5 w-3.5" })
14359
14440
  }
14360
14441
  );
14361
14442
  }
@@ -14374,8 +14455,8 @@ function HierarchyRootDropTarget({
14374
14455
  isOver && "border-solid bg-primary/20 shadow-md shadow-primary/25"
14375
14456
  ),
14376
14457
  children: [
14377
- /* @__PURE__ */ jsx23("span", { className: "truncate", children: draggedLabel }),
14378
- /* @__PURE__ */ jsx23("span", { className: "text-primary-ink/75", children: label })
14458
+ /* @__PURE__ */ jsx24("span", { className: "truncate", children: draggedLabel }),
14459
+ /* @__PURE__ */ jsx24("span", { className: "text-primary-ink/75", children: label })
14379
14460
  ]
14380
14461
  }
14381
14462
  );
@@ -14424,7 +14505,7 @@ function HierarchyDragIndicatorLayer({
14424
14505
  const { preview } = indicator;
14425
14506
  const indent = indicator.left + 10 + preview.depth * 12;
14426
14507
  if (preview.position === "inside") {
14427
- return /* @__PURE__ */ jsx23(
14508
+ return /* @__PURE__ */ jsx24(
14428
14509
  "div",
14429
14510
  {
14430
14511
  "aria-hidden": "true",
@@ -14451,7 +14532,7 @@ function HierarchyDragIndicatorLayer({
14451
14532
  );
14452
14533
  }
14453
14534
  const lineTop = preview.position === "before" ? indicator.top - 1 : indicator.top + indicator.height - 1;
14454
- return /* @__PURE__ */ jsx23(
14535
+ return /* @__PURE__ */ jsx24(
14455
14536
  "div",
14456
14537
  {
14457
14538
  "aria-hidden": "true",
@@ -14463,7 +14544,7 @@ function HierarchyDragIndicatorLayer({
14463
14544
  width: Math.max(0, indicator.left + indicator.width - indent - 8)
14464
14545
  },
14465
14546
  children: /* @__PURE__ */ jsxs22("div", { className: "relative h-0.5 rounded-full bg-primary", children: [
14466
- /* @__PURE__ */ jsx23("span", { className: "absolute -left-1 top-1/2 h-2 w-2 -translate-y-1/2 rounded-full border-2 border-primary bg-card" }),
14547
+ /* @__PURE__ */ jsx24("span", { className: "absolute -left-1 top-1/2 h-2 w-2 -translate-y-1/2 rounded-full border-2 border-primary bg-card" }),
14467
14548
  /* @__PURE__ */ jsxs22(
14468
14549
  "span",
14469
14550
  {
@@ -14505,7 +14586,7 @@ function ColumnHeaderDropZone({
14505
14586
  disabled: !enabled,
14506
14587
  data: { matrxDragKind: "column-header", columnId: id }
14507
14588
  });
14508
- return /* @__PURE__ */ jsx23("div", { ref: setNodeRef, className: "flex min-w-0 items-center", children });
14589
+ return /* @__PURE__ */ jsx24("div", { ref: setNodeRef, className: "flex min-w-0 items-center", children });
14509
14590
  }
14510
14591
  function fixedUtilityWidth(width) {
14511
14592
  return width === void 0 ? void 0 : { width: `${width}px`, minWidth: `${width}px`, maxWidth: `${width}px` };
@@ -14554,7 +14635,7 @@ function TableGroupHeaderRow({
14554
14635
  const qualifier = sourceCount !== null || scope === "all" ? "" : scope === "page" ? " on this page" : " loaded";
14555
14636
  const summary = `${formatCount10(count)} ${noun}${qualifier}`;
14556
14637
  const [first, ...rest] = columns;
14557
- return /* @__PURE__ */ jsx23(
14638
+ return /* @__PURE__ */ jsx24(
14558
14639
  MatrxTableGroupHeaderRow,
14559
14640
  {
14560
14641
  groupKey: group.key,
@@ -14611,7 +14692,7 @@ function DefaultJsonCell({ value }) {
14611
14692
  const summary = Array.isArray(value) ? `${value.length} items` : Object.keys(value).slice(0, 3).join(", ") || "Empty object";
14612
14693
  return /* @__PURE__ */ jsxs22(Fragment15, { children: [
14613
14694
  /* @__PURE__ */ jsxs22(Tooltip, { children: [
14614
- /* @__PURE__ */ jsx23(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxs22("button", { type: "button", className: "block max-w-full truncate text-left", onClick: (event) => {
14695
+ /* @__PURE__ */ jsx24(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxs22("button", { type: "button", className: "block max-w-full truncate text-left", onClick: (event) => {
14615
14696
  event.stopPropagation();
14616
14697
  setOpen(true);
14617
14698
  }, style: { display: "-webkit-box", WebkitLineClamp: 2, WebkitBoxOrient: "vertical", overflow: "hidden", whiteSpace: "normal", overflowWrap: "anywhere" }, "aria-label": "Open JSON value", children: [
@@ -14619,9 +14700,9 @@ function DefaultJsonCell({ value }) {
14619
14700
  " ",
14620
14701
  summary
14621
14702
  ] }) }),
14622
- /* @__PURE__ */ jsx23(TooltipContent, { className: "max-w-md max-h-80 overflow-auto whitespace-pre-wrap break-words", children: text })
14703
+ /* @__PURE__ */ jsx24(TooltipContent, { className: "max-w-md max-h-80 overflow-auto whitespace-pre-wrap break-words", children: text })
14623
14704
  ] }),
14624
- /* @__PURE__ */ jsx23(DataRowWindow, { isOpen: open, onClose: () => setOpen(false), title: "JSON value", row: value, viewContent: Viewer ? /* @__PURE__ */ jsx23(Viewer, { data: value }) : /* @__PURE__ */ jsx23("pre", { className: "overflow-auto whitespace-pre-wrap p-3 text-xs", children: text }) })
14705
+ /* @__PURE__ */ jsx24(DataRowWindow, { isOpen: open, onClose: () => setOpen(false), title: "JSON value", row: value, viewContent: Viewer ? /* @__PURE__ */ jsx24(Viewer, { data: value }) : /* @__PURE__ */ jsx24("pre", { className: "overflow-auto whitespace-pre-wrap p-3 text-xs", children: text }) })
14625
14706
  ] });
14626
14707
  }
14627
14708
  function DefaultMarkerCell({
@@ -14631,7 +14712,7 @@ function DefaultMarkerCell({
14631
14712
  const label = marker === "favorite" ? value ? "Favorite" : "Not favorite" : value ? "Pinned" : "Not pinned";
14632
14713
  const Icon = marker === "favorite" ? StarIcon : PinIcon;
14633
14714
  return /* @__PURE__ */ jsxs22(Tooltip, { children: [
14634
- /* @__PURE__ */ jsx23(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx23(
14715
+ /* @__PURE__ */ jsx24(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx24(
14635
14716
  "span",
14636
14717
  {
14637
14718
  role: "img",
@@ -14640,10 +14721,10 @@ function DefaultMarkerCell({
14640
14721
  "inline-flex size-5 items-center justify-center",
14641
14722
  value ? "text-amber-500" : "text-muted-foreground/45"
14642
14723
  ),
14643
- children: /* @__PURE__ */ jsx23(Icon, { className: "size-4", ...value ? { fill: "currentColor" } : {} })
14724
+ children: /* @__PURE__ */ jsx24(Icon, { className: "size-4", ...value ? { fill: "currentColor" } : {} })
14644
14725
  }
14645
14726
  ) }),
14646
- /* @__PURE__ */ jsx23(TooltipContent, { children: label })
14727
+ /* @__PURE__ */ jsx24(TooltipContent, { children: label })
14647
14728
  ] });
14648
14729
  }
14649
14730
  function renderFooterCell(row, col, index) {
@@ -14653,7 +14734,7 @@ function renderFooterCell(row, col, index) {
14653
14734
  function renderCell(row, col, index) {
14654
14735
  if (col.loading?.(row)) {
14655
14736
  const align = alignForFormat(col);
14656
- return /* @__PURE__ */ jsx23(
14737
+ return /* @__PURE__ */ jsx24(
14657
14738
  Skeleton,
14658
14739
  {
14659
14740
  "data-matrx-table-cell-loading": "",
@@ -14664,13 +14745,13 @@ function renderCell(row, col, index) {
14664
14745
  if (col.cell) return col.cell(row, index);
14665
14746
  const raw = getCellValue(row, col);
14666
14747
  const formattedByDeclaration = formatColumnValue(col, raw);
14667
- if (formattedByDeclaration) return /* @__PURE__ */ jsx23(FormattedCell, { result: formattedByDeclaration });
14748
+ if (formattedByDeclaration) return /* @__PURE__ */ jsx24(FormattedCell, { result: formattedByDeclaration });
14668
14749
  const kind = col.cellKind ?? "auto";
14669
14750
  const asUuid = kind === "uuid" || kind === "fk" || kind === "auto" && isUuidValue(raw);
14670
14751
  if (asUuid && typeof raw === "string") {
14671
14752
  const forbidden = typeof col.fk?.forbidden === "function" ? col.fk.forbidden(raw, row) : Boolean(col.fk?.forbidden);
14672
14753
  const declaredToken = typeof col.fk?.token === "function" ? col.fk.token(row) : col.fk?.token;
14673
- return /* @__PURE__ */ jsx23(
14754
+ return /* @__PURE__ */ jsx24(
14674
14755
  RecordId,
14675
14756
  {
14676
14757
  value: raw,
@@ -14682,14 +14763,14 @@ function renderCell(row, col, index) {
14682
14763
  }
14683
14764
  );
14684
14765
  }
14685
- if (raw !== null && typeof raw === "object" && !(raw instanceof Date)) return /* @__PURE__ */ jsx23(DefaultJsonCell, { value: raw });
14766
+ if (raw !== null && typeof raw === "object" && !(raw instanceof Date)) return /* @__PURE__ */ jsx24(DefaultJsonCell, { value: raw });
14686
14767
  if (typeof raw === "boolean") {
14687
14768
  const marker = resolveColumnMarker(col);
14688
- if (marker) return /* @__PURE__ */ jsx23(DefaultMarkerCell, { marker, value: raw });
14689
- return /* @__PURE__ */ jsx23("span", { className: raw ? "rounded bg-emerald-500/10 px-1.5 py-0.5 text-xs text-emerald-600" : "rounded bg-slate-500/10 px-1.5 py-0.5 text-xs text-muted-foreground", children: raw ? "Yes" : "No" });
14769
+ if (marker) return /* @__PURE__ */ jsx24(DefaultMarkerCell, { marker, value: raw });
14770
+ return /* @__PURE__ */ jsx24("span", { className: raw ? "rounded bg-emerald-500/10 px-1.5 py-0.5 text-xs text-emerald-600" : "rounded bg-slate-500/10 px-1.5 py-0.5 text-xs text-muted-foreground", children: raw ? "Yes" : "No" });
14690
14771
  }
14691
14772
  const formatted = formatTableDisplayValue(raw);
14692
- return /* @__PURE__ */ jsx23("span", { className: "block", title: formatted, style: { display: "-webkit-box", WebkitLineClamp: 2, WebkitBoxOrient: "vertical", overflow: "hidden", overflowWrap: "anywhere" }, children: formatted });
14773
+ return /* @__PURE__ */ jsx24("span", { className: "block", title: formatted, style: { display: "-webkit-box", WebkitLineClamp: 2, WebkitBoxOrient: "vertical", overflow: "hidden", overflowWrap: "anywhere" }, children: formatted });
14693
14774
  }
14694
14775
  function resolveStringTitle(title, fallback) {
14695
14776
  if (typeof title === "string" && title.trim()) return title;
@@ -14699,7 +14780,7 @@ function resolveStringTitle(title, fallback) {
14699
14780
 
14700
14781
  // src/data-table/MatrxTableCard.tsx
14701
14782
  import { useMemo as useMemo9, useState as useState18 } from "react";
14702
- import { Fragment as Fragment16, jsx as jsx24, jsxs as jsxs23 } from "react/jsx-runtime";
14783
+ import { Fragment as Fragment16, jsx as jsx25, jsxs as jsxs23 } from "react/jsx-runtime";
14703
14784
  function nounText(noun) {
14704
14785
  return `${noun.count.toLocaleString()} ${noun.count === 1 ? noun.singular : noun.plural}`;
14705
14786
  }
@@ -14738,8 +14819,8 @@ function MatrxTableCard({
14738
14819
  ...facts ?? []
14739
14820
  ];
14740
14821
  const ghostButton = cn(buttonVariants({ variant: "ghost", size: "sm" }), "h-8 gap-1 px-2");
14741
- const renderLink = (href, className2, content) => Link ? /* @__PURE__ */ jsx24(Link, { href, className: className2, children: content }) : /* @__PURE__ */ jsx24("a", { href, className: className2, children: content });
14742
- return /* @__PURE__ */ jsx24(MatrxTableCardContext.Provider, { value: context, children: /* @__PURE__ */ jsxs23(
14822
+ const renderLink = (href, className2, content) => Link ? /* @__PURE__ */ jsx25(Link, { href, className: className2, children: content }) : /* @__PURE__ */ jsx25("a", { href, className: className2, children: content });
14823
+ return /* @__PURE__ */ jsx25(MatrxTableCardContext.Provider, { value: context, children: /* @__PURE__ */ jsxs23(
14743
14824
  "section",
14744
14825
  {
14745
14826
  "data-matrx-table-card": true,
@@ -14748,10 +14829,10 @@ function MatrxTableCard({
14748
14829
  className
14749
14830
  ),
14750
14831
  children: [
14751
- railClassName ? /* @__PURE__ */ jsx24("span", { "aria-hidden": true, className: cn("absolute inset-y-0 left-0 w-1 opacity-70", railClassName) }) : null,
14832
+ railClassName ? /* @__PURE__ */ jsx25("span", { "aria-hidden": true, className: cn("absolute inset-y-0 left-0 w-1 opacity-70", railClassName) }) : null,
14752
14833
  /* @__PURE__ */ jsxs23("header", { "data-matrx-table-card-header": true, className: "mb-4 flex flex-wrap items-start justify-between gap-3", children: [
14753
14834
  /* @__PURE__ */ jsxs23("div", { className: "flex min-w-0 items-center gap-3", children: [
14754
- icon ? /* @__PURE__ */ jsx24(
14835
+ icon ? /* @__PURE__ */ jsx25(
14755
14836
  "div",
14756
14837
  {
14757
14838
  "aria-hidden": true,
@@ -14760,24 +14841,24 @@ function MatrxTableCard({
14760
14841
  }
14761
14842
  ) : null,
14762
14843
  /* @__PURE__ */ jsxs23("div", { className: "min-w-0", children: [
14763
- /* @__PURE__ */ jsx24(Heading, { className: "truncate text-lg font-semibold text-foreground", children: title }),
14764
- countsLine.length > 0 ? /* @__PURE__ */ jsx24("p", { "data-matrx-table-card-counts": true, className: "text-xs text-muted-foreground", children: countsLine.map((part, index) => /* @__PURE__ */ jsxs23("span", { children: [
14844
+ /* @__PURE__ */ jsx25(Heading, { className: "truncate text-lg font-semibold text-foreground", children: title }),
14845
+ countsLine.length > 0 ? /* @__PURE__ */ jsx25("p", { "data-matrx-table-card-counts": true, className: "text-xs text-muted-foreground", children: countsLine.map((part, index) => /* @__PURE__ */ jsxs23("span", { children: [
14765
14846
  index > 0 ? " \xB7 " : null,
14766
14847
  part
14767
14848
  ] }, index)) }) : null
14768
14849
  ] })
14769
14850
  ] }),
14770
14851
  /* @__PURE__ */ jsxs23("div", { "data-matrx-table-card-actions": true, className: "flex min-w-0 flex-auto flex-wrap items-center justify-end gap-1", children: [
14771
- /* @__PURE__ */ jsx24("div", { ref: setToolbarSlot, "data-matrx-table-card-toolbar": true, className: "flex min-w-0 flex-auto justify-end empty:hidden" }),
14852
+ /* @__PURE__ */ jsx25("div", { ref: setToolbarSlot, "data-matrx-table-card-toolbar": true, className: "flex min-w-0 flex-auto justify-end empty:hidden" }),
14772
14853
  headerActions,
14773
14854
  edit ? "href" in edit ? renderLink(
14774
14855
  edit.href,
14775
14856
  ghostButton,
14776
14857
  /* @__PURE__ */ jsxs23(Fragment16, { children: [
14777
- /* @__PURE__ */ jsx24(PencilIcon, { className: "h-3.5 w-3.5" }),
14778
- /* @__PURE__ */ jsx24("span", { className: "sr-only", children: edit.label ?? `Edit ${title}` })
14858
+ /* @__PURE__ */ jsx25(PencilIcon, { className: "h-3.5 w-3.5" }),
14859
+ /* @__PURE__ */ jsx25("span", { className: "sr-only", children: edit.label ?? `Edit ${title}` })
14779
14860
  ] })
14780
- ) : /* @__PURE__ */ jsx24(
14861
+ ) : /* @__PURE__ */ jsx25(
14781
14862
  "button",
14782
14863
  {
14783
14864
  type: "button",
@@ -14785,7 +14866,7 @@ function MatrxTableCard({
14785
14866
  onClick: edit.onEdit,
14786
14867
  "aria-label": edit.label ?? `Edit ${title}`,
14787
14868
  title: edit.label ?? `Edit ${title}`,
14788
- children: /* @__PURE__ */ jsx24(PencilIcon, { className: "h-3.5 w-3.5" })
14869
+ children: /* @__PURE__ */ jsx25(PencilIcon, { className: "h-3.5 w-3.5" })
14789
14870
  }
14790
14871
  ) : null,
14791
14872
  open ? renderLink(
@@ -14793,32 +14874,32 @@ function MatrxTableCard({
14793
14874
  ghostButton,
14794
14875
  /* @__PURE__ */ jsxs23(Fragment16, { children: [
14795
14876
  open.label ?? "Open",
14796
- /* @__PURE__ */ jsx24(ChevronRightIcon, { className: "h-3.5 w-3.5" }),
14797
- /* @__PURE__ */ jsx24("span", { className: "sr-only", children: ` ${title}` })
14877
+ /* @__PURE__ */ jsx25(ChevronRightIcon, { className: "h-3.5 w-3.5" }),
14878
+ /* @__PURE__ */ jsx25("span", { className: "sr-only", children: ` ${title}` })
14798
14879
  ] })
14799
14880
  ) : null
14800
14881
  ] })
14801
14882
  ] }),
14802
- /* @__PURE__ */ jsx24("div", { "data-matrx-table-card-body": true, className: "-mx-2 min-w-0", children }),
14883
+ /* @__PURE__ */ jsx25("div", { "data-matrx-table-card-body": true, className: "-mx-2 min-w-0", children }),
14803
14884
  /* @__PURE__ */ jsxs23(
14804
14885
  "footer",
14805
14886
  {
14806
14887
  "data-matrx-table-card-footer": true,
14807
14888
  className: cn("flex flex-wrap items-center justify-between gap-2", (add || adding) && "mt-3"),
14808
14889
  children: [
14809
- adding ? /* @__PURE__ */ jsx24("div", { className: "w-full", children: adding }) : add ? /* @__PURE__ */ jsxs23(
14890
+ adding ? /* @__PURE__ */ jsx25("div", { className: "w-full", children: adding }) : add ? /* @__PURE__ */ jsxs23(
14810
14891
  "button",
14811
14892
  {
14812
14893
  type: "button",
14813
14894
  onClick: add.onAdd,
14814
14895
  className: cn(ghostButton, "text-muted-foreground hover:text-foreground"),
14815
14896
  children: [
14816
- /* @__PURE__ */ jsx24(PlusIcon, { className: "h-3.5 w-3.5" }),
14897
+ /* @__PURE__ */ jsx25(PlusIcon, { className: "h-3.5 w-3.5" }),
14817
14898
  add.label
14818
14899
  ]
14819
14900
  }
14820
14901
  ) : null,
14821
- /* @__PURE__ */ jsx24("div", { ref: setFooterSlot, "data-matrx-table-card-pager": true, className: "ml-auto flex items-center gap-2 empty:hidden" })
14902
+ /* @__PURE__ */ jsx25("div", { ref: setFooterSlot, "data-matrx-table-card-pager": true, className: "ml-auto flex items-center gap-2 empty:hidden" })
14822
14903
  ]
14823
14904
  }
14824
14905
  )
@@ -14828,9 +14909,9 @@ function MatrxTableCard({
14828
14909
  }
14829
14910
  function MatrxTableCardEmpty({ message, action, children }) {
14830
14911
  return /* @__PURE__ */ jsxs23("div", { "data-matrx-table-card-empty": true, className: "mx-2 rounded-lg border-2 border-dashed border-border py-6 text-center", children: [
14831
- /* @__PURE__ */ jsx24("p", { className: "mb-3 text-sm text-muted-foreground", children: message }),
14912
+ /* @__PURE__ */ jsx25("p", { className: "mb-3 text-sm text-muted-foreground", children: message }),
14832
14913
  action ? /* @__PURE__ */ jsxs23("button", { type: "button", onClick: action.onClick, className: cn(buttonVariants({ size: "sm" }), "gap-1.5"), children: [
14833
- /* @__PURE__ */ jsx24(PlusIcon, { className: "h-3.5 w-3.5" }),
14914
+ /* @__PURE__ */ jsx25(PlusIcon, { className: "h-3.5 w-3.5" }),
14834
14915
  action.label
14835
14916
  ] }) : null,
14836
14917
  children
@@ -14839,7 +14920,7 @@ function MatrxTableCardEmpty({ message, action, children }) {
14839
14920
 
14840
14921
  // src/data-table/SavedViewsControl.tsx
14841
14922
  import { useId as useId3, useState as useState19 } from "react";
14842
- import { Fragment as Fragment17, jsx as jsx25, jsxs as jsxs24 } from "react/jsx-runtime";
14923
+ import { Fragment as Fragment17, jsx as jsx26, jsxs as jsxs24 } from "react/jsx-runtime";
14843
14924
  function SavedViewsControl({
14844
14925
  views,
14845
14926
  activeId = null,
@@ -14933,7 +15014,7 @@ function SavedViewsControl({
14933
15014
  const activeName = activeId ? views.find((view) => view.id === activeId)?.name : void 0;
14934
15015
  return /* @__PURE__ */ jsxs24("div", { className: "flex min-w-0 flex-wrap items-center gap-1", "data-matrx-table-saved-views": true, children: [
14935
15016
  presentation === "tabs" ? /* @__PURE__ */ jsxs24(Fragment17, { children: [
14936
- /* @__PURE__ */ jsx25(
15017
+ /* @__PURE__ */ jsx26(
14937
15018
  TableViewTabs,
14938
15019
  {
14939
15020
  tabs: [{ id: "default", label: "Default view" }, ...views.map((view) => ({ id: view.id, label: view.name }))],
@@ -14954,10 +15035,10 @@ function SavedViewsControl({
14954
15035
  related
14955
15036
  }
14956
15037
  ),
14957
- loading ? /* @__PURE__ */ jsx25("span", { role: "status", className: "text-xs text-muted-foreground", children: "Loading views\u2026" }) : null
15038
+ loading ? /* @__PURE__ */ jsx26("span", { role: "status", className: "text-xs text-muted-foreground", children: "Loading views\u2026" }) : null
14958
15039
  ] }) : /* @__PURE__ */ jsxs24(DropdownMenu, { children: [
14959
15040
  /* @__PURE__ */ jsxs24(Tooltip, { children: [
14960
- /* @__PURE__ */ jsx25(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx25(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs24(
15041
+ /* @__PURE__ */ jsx26(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx26(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs24(
14961
15042
  Button2,
14962
15043
  {
14963
15044
  variant: "quiet",
@@ -14965,74 +15046,74 @@ function SavedViewsControl({
14965
15046
  "aria-label": `Table view: ${loading ? "Loading views" : activeName ?? "Default view"}${dirty ? ", unsaved changes" : ""}`,
14966
15047
  "aria-describedby": dirty ? unsavedChangesId : void 0,
14967
15048
  disabled: saving,
14968
- iconEnd: /* @__PURE__ */ jsx25(ChevronDownIcon, { "aria-hidden": "true" }),
15049
+ iconEnd: /* @__PURE__ */ jsx26(ChevronDownIcon, { "aria-hidden": "true" }),
14969
15050
  children: [
14970
- /* @__PURE__ */ jsx25("span", { className: "min-w-0 flex-1 truncate", children: loading ? "Loading views\u2026" : activeName ?? "Default view" }),
14971
- dirty ? /* @__PURE__ */ jsx25("span", { "aria-hidden": "true", className: "size-1.5 shrink-0 rounded-full bg-amber-500" }) : null
15051
+ /* @__PURE__ */ jsx26("span", { className: "min-w-0 flex-1 truncate", children: loading ? "Loading views\u2026" : activeName ?? "Default view" }),
15052
+ dirty ? /* @__PURE__ */ jsx26("span", { "aria-hidden": "true", className: "size-1.5 shrink-0 rounded-full bg-amber-500" }) : null
14972
15053
  ]
14973
15054
  }
14974
15055
  ) }) }),
14975
- /* @__PURE__ */ jsx25(TooltipContent, { children: "Choose or save a table view" })
15056
+ /* @__PURE__ */ jsx26(TooltipContent, { children: "Choose or save a table view" })
14976
15057
  ] }),
14977
15058
  /* @__PURE__ */ jsxs24(DropdownMenuContent, { align: "end", children: [
14978
- /* @__PURE__ */ jsx25(DropdownMenuLabel, { children: "Views" }),
15059
+ /* @__PURE__ */ jsx26(DropdownMenuLabel, { children: "Views" }),
14979
15060
  /* @__PURE__ */ jsxs24(DropdownMenuRadioGroup, { value: activeId ?? "__default__", onValueChange: (value) => select(value === "__default__" ? null : value), children: [
14980
- /* @__PURE__ */ jsx25(DropdownMenuRadioItem, { value: "__default__", children: "Default view" }),
14981
- views.map((view) => /* @__PURE__ */ jsx25(DropdownMenuRadioItem, { value: view.id, children: view.name }, view.id))
15061
+ /* @__PURE__ */ jsx26(DropdownMenuRadioItem, { value: "__default__", children: "Default view" }),
15062
+ views.map((view) => /* @__PURE__ */ jsx26(DropdownMenuRadioItem, { value: view.id, children: view.name }, view.id))
14982
15063
  ] }),
14983
- /* @__PURE__ */ jsx25(DropdownMenuSeparator, {}),
14984
- /* @__PURE__ */ jsx25(DropdownMenuItem, { disabled: saving, onSelect: () => {
15064
+ /* @__PURE__ */ jsx26(DropdownMenuSeparator, {}),
15065
+ /* @__PURE__ */ jsx26(DropdownMenuItem, { disabled: saving, onSelect: () => {
14985
15066
  setActionError(null);
14986
15067
  setSaveOpen(true);
14987
15068
  }, children: "Save current view\u2026" }),
14988
- activeId && onUpdate ? /* @__PURE__ */ jsx25(DropdownMenuItem, { disabled: saving, onSelect: () => void update(), children: "Update current view" }) : null,
14989
- activeId && onRemove ? /* @__PURE__ */ jsx25(DropdownMenuItem, { disabled: saving || removing, onSelect: () => requestRemove(activeId), children: "Delete current view\u2026" }) : null,
14990
- onReload ? /* @__PURE__ */ jsx25(DropdownMenuItem, { disabled: saving || loading, onSelect: () => void reload(), children: "Reload views" }) : null
15069
+ activeId && onUpdate ? /* @__PURE__ */ jsx26(DropdownMenuItem, { disabled: saving, onSelect: () => void update(), children: "Update current view" }) : null,
15070
+ activeId && onRemove ? /* @__PURE__ */ jsx26(DropdownMenuItem, { disabled: saving || removing, onSelect: () => requestRemove(activeId), children: "Delete current view\u2026" }) : null,
15071
+ onReload ? /* @__PURE__ */ jsx26(DropdownMenuItem, { disabled: saving || loading, onSelect: () => void reload(), children: "Reload views" }) : null
14991
15072
  ] })
14992
15073
  ] }),
14993
- dirty ? /* @__PURE__ */ jsx25("span", { id: unsavedChangesId, role: "status", className: "sr-only", children: "Unsaved changes" }) : null,
14994
- dirty ? onUpdate ? /* @__PURE__ */ jsx25(Button2, { variant: "quiet", disabled: saving, onClick: () => void update(), children: "Save changes" }) : /* @__PURE__ */ jsx25(Button2, { variant: "quiet", disabled: saving, onClick: () => setSaveOpen(true), children: "Save as view" }) : null,
14995
- visibleError && !saveOpen && !pendingRemove ? /* @__PURE__ */ jsx25(ErrorBox, { className: "basis-full break-words text-xs text-destructive-ink", message: visibleError, operation: "Load or save a saved view", origin: "design-system/SavedViewsControl" }) : null,
14996
- /* @__PURE__ */ jsx25(Dialog, { open: saveOpen, onOpenChange: setSaveOpen, children: /* @__PURE__ */ jsxs24(DialogContent, { children: [
14997
- /* @__PURE__ */ jsx25(DialogHeader, { children: /* @__PURE__ */ jsx25(DialogTitle, { children: "Save current view" }) }),
14998
- visibleError ? /* @__PURE__ */ jsx25(ErrorBox, { className: "text-sm text-destructive-ink", message: visibleError, operation: "Save a view", origin: "design-system/SavedViewsControl" }) : null,
14999
- /* @__PURE__ */ jsx25(Input, { "aria-label": "View name", value: name, onChange: (event) => setName(event.target.value), placeholder: "View name", autoFocus: true }),
15074
+ dirty ? /* @__PURE__ */ jsx26("span", { id: unsavedChangesId, role: "status", className: "sr-only", children: "Unsaved changes" }) : null,
15075
+ dirty ? onUpdate ? /* @__PURE__ */ jsx26(Button2, { variant: "quiet", disabled: saving, onClick: () => void update(), children: "Save changes" }) : /* @__PURE__ */ jsx26(Button2, { variant: "quiet", disabled: saving, onClick: () => setSaveOpen(true), children: "Save as view" }) : null,
15076
+ visibleError && !saveOpen && !pendingRemove ? /* @__PURE__ */ jsx26(ErrorBox, { className: "basis-full break-words text-xs text-destructive-ink", message: visibleError, operation: "Load or save a saved view", origin: "design-system/SavedViewsControl" }) : null,
15077
+ /* @__PURE__ */ jsx26(Dialog, { open: saveOpen, onOpenChange: setSaveOpen, children: /* @__PURE__ */ jsxs24(DialogContent, { children: [
15078
+ /* @__PURE__ */ jsx26(DialogHeader, { children: /* @__PURE__ */ jsx26(DialogTitle, { children: "Save current view" }) }),
15079
+ visibleError ? /* @__PURE__ */ jsx26(ErrorBox, { className: "text-sm text-destructive-ink", message: visibleError, operation: "Save a view", origin: "design-system/SavedViewsControl" }) : null,
15080
+ /* @__PURE__ */ jsx26(Input, { "aria-label": "View name", value: name, onChange: (event) => setName(event.target.value), placeholder: "View name", autoFocus: true }),
15000
15081
  /* @__PURE__ */ jsxs24(DialogFooter, { children: [
15001
- /* @__PURE__ */ jsx25(Button, { type: "button", variant: "outline", onClick: () => setSaveOpen(false), children: "Cancel" }),
15002
- /* @__PURE__ */ jsx25(Button, { type: "button", disabled: !name.trim() || saving, onClick: () => void save(), children: saving ? "Saving\u2026" : "Save view" })
15082
+ /* @__PURE__ */ jsx26(Button, { type: "button", variant: "outline", onClick: () => setSaveOpen(false), children: "Cancel" }),
15083
+ /* @__PURE__ */ jsx26(Button, { type: "button", disabled: !name.trim() || saving, onClick: () => void save(), children: saving ? "Saving\u2026" : "Save view" })
15003
15084
  ] })
15004
15085
  ] }) }),
15005
- /* @__PURE__ */ jsx25(Dialog, { open: pendingSelect !== void 0, onOpenChange: (open) => {
15086
+ /* @__PURE__ */ jsx26(Dialog, { open: pendingSelect !== void 0, onOpenChange: (open) => {
15006
15087
  if (!open) setPendingSelect(void 0);
15007
15088
  }, children: /* @__PURE__ */ jsxs24(DialogContent, { children: [
15008
- /* @__PURE__ */ jsx25(DialogHeader, { children: /* @__PURE__ */ jsx25(DialogTitle, { children: "Unsaved view changes" }) }),
15009
- /* @__PURE__ */ jsx25(DialogDescription, { children: "Switching views will discard the changes you have not saved." }),
15089
+ /* @__PURE__ */ jsx26(DialogHeader, { children: /* @__PURE__ */ jsx26(DialogTitle, { children: "Unsaved view changes" }) }),
15090
+ /* @__PURE__ */ jsx26(DialogDescription, { children: "Switching views will discard the changes you have not saved." }),
15010
15091
  /* @__PURE__ */ jsxs24(DialogFooter, { children: [
15011
- /* @__PURE__ */ jsx25(Button, { type: "button", variant: "outline", onClick: () => setPendingSelect(void 0), children: "Stay on this view" }),
15012
- /* @__PURE__ */ jsx25(Button, { type: "button", onClick: () => {
15092
+ /* @__PURE__ */ jsx26(Button, { type: "button", variant: "outline", onClick: () => setPendingSelect(void 0), children: "Stay on this view" }),
15093
+ /* @__PURE__ */ jsx26(Button, { type: "button", onClick: () => {
15013
15094
  const next = pendingSelect;
15014
15095
  setPendingSelect(void 0);
15015
15096
  if (next !== void 0) onSelect(next);
15016
15097
  }, children: "Discard changes and switch" })
15017
15098
  ] })
15018
15099
  ] }) }),
15019
- /* @__PURE__ */ jsx25(Dialog, { open: pendingRemove !== null, onOpenChange: (open) => {
15100
+ /* @__PURE__ */ jsx26(Dialog, { open: pendingRemove !== null, onOpenChange: (open) => {
15020
15101
  if (!open && !removing) setPendingRemove(null);
15021
15102
  }, children: /* @__PURE__ */ jsxs24(DialogContent, { children: [
15022
- /* @__PURE__ */ jsx25(DialogHeader, { children: /* @__PURE__ */ jsxs24(DialogTitle, { children: [
15103
+ /* @__PURE__ */ jsx26(DialogHeader, { children: /* @__PURE__ */ jsxs24(DialogTitle, { children: [
15023
15104
  "Delete ",
15024
15105
  pendingRemove ? `\u201C${pendingRemove.name}\u201D` : "saved view",
15025
15106
  "?"
15026
15107
  ] }) }),
15027
- actionError ? /* @__PURE__ */ jsx25(ErrorBox, { className: "text-sm text-destructive-ink", message: actionError, operation: "Delete a saved view", origin: "design-system/SavedViewsControl" }) : null,
15108
+ actionError ? /* @__PURE__ */ jsx26(ErrorBox, { className: "text-sm text-destructive-ink", message: actionError, operation: "Delete a saved view", origin: "design-system/SavedViewsControl" }) : null,
15028
15109
  /* @__PURE__ */ jsxs24(DialogDescription, { children: [
15029
15110
  "This removes the saved view from your account",
15030
15111
  activeId === pendingRemove?.id && dirty ? " and discards its unsaved layout changes" : "",
15031
15112
  "."
15032
15113
  ] }),
15033
15114
  /* @__PURE__ */ jsxs24(DialogFooter, { children: [
15034
- /* @__PURE__ */ jsx25(Button, { type: "button", variant: "outline", disabled: removing, onClick: () => setPendingRemove(null), children: "Cancel" }),
15035
- /* @__PURE__ */ jsx25(Button, { type: "button", variant: "destructive", disabled: removing, onClick: () => void remove(), children: removing ? "Deleting\u2026" : "Delete view" })
15115
+ /* @__PURE__ */ jsx26(Button, { type: "button", variant: "outline", disabled: removing, onClick: () => setPendingRemove(null), children: "Cancel" }),
15116
+ /* @__PURE__ */ jsx26(Button, { type: "button", variant: "destructive", disabled: removing, onClick: () => void remove(), children: removing ? "Deleting\u2026" : "Delete view" })
15036
15117
  ] })
15037
15118
  ] }) })
15038
15119
  ] });
@@ -15117,7 +15198,7 @@ function comparisonGridRecords(grid) {
15117
15198
  }
15118
15199
 
15119
15200
  // src/data-table/MatrxComparisonTable.tsx
15120
- import { jsx as jsx26, jsxs as jsxs25 } from "react/jsx-runtime";
15201
+ import { jsx as jsx27, jsxs as jsxs25 } from "react/jsx-runtime";
15121
15202
  var ROW_COLUMN_ID = "__comparison_row";
15122
15203
  var subjectColumnId = (subject) => `subject:${subject.id}`;
15123
15204
  function buildGridRows(rows, subjects, footer) {
@@ -15131,7 +15212,7 @@ function buildGridRows(rows, subjects, footer) {
15131
15212
  });
15132
15213
  }
15133
15214
  function PlaceBadge({ place }) {
15134
- return /* @__PURE__ */ jsx26(Badge, { tone: place === 1 ? "success" : "neutral", title: `${comparisonOrdinal(place)} place on this row`, children: comparisonOrdinal(place) });
15215
+ return /* @__PURE__ */ jsx27(Badge, { tone: place === 1 ? "success" : "neutral", title: `${comparisonOrdinal(place)} place on this row`, children: comparisonOrdinal(place) });
15135
15216
  }
15136
15217
  function MatrxComparisonTable({
15137
15218
  subjects: rawSubjects,
@@ -15180,11 +15261,11 @@ function MatrxComparisonTable({
15180
15261
  minWidth: 120,
15181
15262
  accessorFn: (line) => line.row.label,
15182
15263
  copyValue: (line) => line.row.label,
15183
- cell: (line) => line.row.header ?? /* @__PURE__ */ jsx26("span", { className: line.row.emphasized || line.footer ? "font-semibold text-foreground" : "text-foreground", children: line.row.label })
15264
+ cell: (line) => line.row.header ?? /* @__PURE__ */ jsx27("span", { className: line.row.emphasized || line.footer ? "font-semibold text-foreground" : "text-foreground", children: line.row.label })
15184
15265
  },
15185
15266
  ...subjects.map((subject, index) => ({
15186
15267
  id: subjectColumnId(subject),
15187
- header: subject.header ? /* @__PURE__ */ jsx26("span", { title: subject.title, children: subject.header }) : /* @__PURE__ */ jsx26("span", { title: subject.title, children: subject.label }),
15268
+ header: subject.header ? /* @__PURE__ */ jsx27("span", { title: subject.title, children: subject.header }) : /* @__PURE__ */ jsx27("span", { title: subject.title, children: subject.label }),
15188
15269
  label: subject.label,
15189
15270
  width: subjectWidth,
15190
15271
  minWidth: 96,
@@ -15200,7 +15281,7 @@ function MatrxComparisonTable({
15200
15281
  },
15201
15282
  cell: (line) => {
15202
15283
  const cell = line.cells[index];
15203
- if (!cell) return /* @__PURE__ */ jsx26("span", { className: "text-muted-foreground", children: "\u2014" });
15284
+ if (!cell) return /* @__PURE__ */ jsx27("span", { className: "text-muted-foreground", children: "\u2014" });
15204
15285
  const place = places ? line.ranking.places[subject.id] : null;
15205
15286
  return /* @__PURE__ */ jsxs25(
15206
15287
  "span",
@@ -15208,8 +15289,8 @@ function MatrxComparisonTable({
15208
15289
  className: align === "right" ? "inline-flex items-center justify-end gap-1.5" : "inline-flex items-center gap-1.5",
15209
15290
  "data-comparison-highlight": line.ranking.highlights[subject.id] ?? void 0,
15210
15291
  children: [
15211
- cell.node ?? /* @__PURE__ */ jsx26("span", { children: cell.text }),
15212
- place != null ? /* @__PURE__ */ jsx26(PlaceBadge, { place }) : null
15292
+ cell.node ?? /* @__PURE__ */ jsx27("span", { children: cell.text }),
15293
+ place != null ? /* @__PURE__ */ jsx27(PlaceBadge, { place }) : null
15213
15294
  ]
15214
15295
  }
15215
15296
  );
@@ -15261,7 +15342,7 @@ function MatrxComparisonTable({
15261
15342
  };
15262
15343
  }
15263
15344
  };
15264
- return /* @__PURE__ */ jsx26(
15345
+ return /* @__PURE__ */ jsx27(
15265
15346
  MatrxDataTable,
15266
15347
  {
15267
15348
  data,
@@ -15292,8 +15373,8 @@ function MatrxComparisonTable({
15292
15373
  }
15293
15374
 
15294
15375
  // src/data-table/MatrxBatchGrid.tsx
15295
- import { useLayoutEffect as useLayoutEffect3, useRef as useRef15, useState as useState20 } from "react";
15296
- import { Fragment as Fragment18, jsx as jsx27, jsxs as jsxs26 } from "react/jsx-runtime";
15376
+ import { useLayoutEffect as useLayoutEffect3, useRef as useRef16, useState as useState20 } from "react";
15377
+ import { Fragment as Fragment18, jsx as jsx28, jsxs as jsxs26 } from "react/jsx-runtime";
15297
15378
  var BATCH_COLUMN_FLOOR_CAP_PX = 480;
15298
15379
  function freeColumnId(wanted, fallback, taken) {
15299
15380
  if (!taken.has(wanted)) return wanted;
@@ -15309,13 +15390,13 @@ var TONE_CLASS = {
15309
15390
  };
15310
15391
  function BatchRowStatusIcon({ status }) {
15311
15392
  const Glyph = status.tone === "ready" ? CircleCheck : AlertTriangleIcon;
15312
- return /* @__PURE__ */ jsx27("span", { role: "img", "aria-label": status.label, title: status.label, "data-matrx-batch-status": status.tone, children: /* @__PURE__ */ jsx27(Glyph, { className: cn("h-4 w-4 shrink-0", TONE_CLASS[status.tone]) }) });
15393
+ return /* @__PURE__ */ jsx28("span", { role: "img", "aria-label": status.label, title: status.label, "data-matrx-batch-status": status.tone, children: /* @__PURE__ */ jsx28(Glyph, { className: cn("h-4 w-4 shrink-0", TONE_CLASS[status.tone]) }) });
15313
15394
  }
15314
15395
  function BatchRowKindBadge({
15315
15396
  kind,
15316
15397
  words
15317
15398
  }) {
15318
- return /* @__PURE__ */ jsx27(
15399
+ return /* @__PURE__ */ jsx28(
15319
15400
  "span",
15320
15401
  {
15321
15402
  "data-matrx-batch-kind": kind,
@@ -15333,12 +15414,12 @@ function BatchFillButton({ fill, disabled }) {
15333
15414
  const [value, setValue] = useState20(void 0);
15334
15415
  const stop = (event) => event.stopPropagation();
15335
15416
  return /* @__PURE__ */ jsxs26(Popover, { open, onOpenChange: setOpen, children: [
15336
- /* @__PURE__ */ jsx27(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx27(
15417
+ /* @__PURE__ */ jsx28(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx28(
15337
15418
  Button2,
15338
15419
  {
15339
15420
  type: "button",
15340
15421
  variant: "quiet",
15341
- icon: /* @__PURE__ */ jsx27(ArrowDownToLine, { className: "h-3.5 w-3.5" }),
15422
+ icon: /* @__PURE__ */ jsx28(ArrowDownToLine, { className: "h-3.5 w-3.5" }),
15342
15423
  disabled,
15343
15424
  "data-matrx-batch-fill": true,
15344
15425
  title: fill.title,
@@ -15362,9 +15443,9 @@ function BatchFillButton({ fill, disabled }) {
15362
15443
  onPointerDown: stop,
15363
15444
  onMouseDown: stop,
15364
15445
  children: [
15365
- /* @__PURE__ */ jsx27("p", { className: "type-meta text-muted-foreground", children: fill.limits }),
15446
+ /* @__PURE__ */ jsx28("p", { className: "type-meta text-muted-foreground", children: fill.limits }),
15366
15447
  fill.renderControl(value, setValue),
15367
- /* @__PURE__ */ jsx27(
15448
+ /* @__PURE__ */ jsx28(
15368
15449
  Button,
15369
15450
  {
15370
15451
  type: "button",
@@ -15386,12 +15467,12 @@ function ColumnHeader({ column, disabled }) {
15386
15467
  return /* @__PURE__ */ jsxs26("span", { className: "flex min-w-0 items-start gap-1.5", "data-matrx-batch-header": column.id, children: [
15387
15468
  /* @__PURE__ */ jsxs26("span", { className: "min-w-0", children: [
15388
15469
  /* @__PURE__ */ jsxs26("span", { className: "flex items-center gap-1", children: [
15389
- /* @__PURE__ */ jsx27("span", { className: "truncate", children: column.header }),
15390
- column.required ? /* @__PURE__ */ jsx27("span", { className: "text-destructive-ink", title: "Required", "aria-label": "Required", children: "*" }) : null
15470
+ /* @__PURE__ */ jsx28("span", { className: "truncate", children: column.header }),
15471
+ column.required ? /* @__PURE__ */ jsx28("span", { className: "text-destructive-ink", title: "Required", "aria-label": "Required", children: "*" }) : null
15391
15472
  ] }),
15392
- column.caption ? /* @__PURE__ */ jsx27("span", { className: "type-meta block truncate font-normal normal-case tracking-normal text-muted-foreground", children: column.caption }) : null
15473
+ column.caption ? /* @__PURE__ */ jsx28("span", { className: "type-meta block truncate font-normal normal-case tracking-normal text-muted-foreground", children: column.caption }) : null
15393
15474
  ] }),
15394
- column.fill ? /* @__PURE__ */ jsx27("span", { className: "ml-auto pt-0.5", children: /* @__PURE__ */ jsx27(BatchFillButton, { fill: column.fill, disabled }) }) : null
15475
+ column.fill ? /* @__PURE__ */ jsx28("span", { className: "ml-auto pt-0.5", children: /* @__PURE__ */ jsx28(BatchFillButton, { fill: column.fill, disabled }) }) : null
15395
15476
  ] });
15396
15477
  }
15397
15478
  function MatrxBatchGrid({
@@ -15421,7 +15502,7 @@ function MatrxBatchGrid({
15421
15502
  const host = useMatrxDataTableHost();
15422
15503
  const density = ownDensity ?? host.defaultDensity ?? "condensed";
15423
15504
  const [folded, setFolded] = useState20(/* @__PURE__ */ new Set());
15424
- const gridRef = useRef15(null);
15505
+ const gridRef = useRef16(null);
15425
15506
  const [floors, setFloors] = useState20({});
15426
15507
  useLayoutEffect3(() => {
15427
15508
  const root = gridRef.current;
@@ -15467,10 +15548,10 @@ function MatrxBatchGrid({
15467
15548
  const health = status?.(row) ?? null;
15468
15549
  const rowKind = kind?.(row) ?? null;
15469
15550
  return /* @__PURE__ */ jsxs26("span", { className: "flex min-w-0 items-center gap-2", "data-matrx-batch-row": id, children: [
15470
- done ? /* @__PURE__ */ jsx27(BatchRowStatusIcon, { status: { tone: "ready", label: doneLabel } }) : health ? /* @__PURE__ */ jsx27(BatchRowStatusIcon, { status: health }) : null,
15471
- rowKind ? /* @__PURE__ */ jsx27(BatchRowKindBadge, { kind: rowKind, words: kindWords }) : null,
15472
- /* @__PURE__ */ jsx27("span", { className: "min-w-0 flex-1", children: rowHeader.render ? rowHeader.render(row) : rowHeader.label(row) }),
15473
- done ? /* @__PURE__ */ jsx27("span", { className: "type-meta shrink-0 text-success-ink", children: doneLabel }) : null
15551
+ done ? /* @__PURE__ */ jsx28(BatchRowStatusIcon, { status: { tone: "ready", label: doneLabel } }) : health ? /* @__PURE__ */ jsx28(BatchRowStatusIcon, { status: health }) : null,
15552
+ rowKind ? /* @__PURE__ */ jsx28(BatchRowKindBadge, { kind: rowKind, words: kindWords }) : null,
15553
+ /* @__PURE__ */ jsx28("span", { className: "min-w-0 flex-1", children: rowHeader.render ? rowHeader.render(row) : rowHeader.label(row) }),
15554
+ done ? /* @__PURE__ */ jsx28("span", { className: "type-meta shrink-0 text-success-ink", children: doneLabel }) : null
15474
15555
  ] });
15475
15556
  }
15476
15557
  };
@@ -15478,7 +15559,7 @@ function MatrxBatchGrid({
15478
15559
  const typed = column.type !== void 0 && column.render === void 0;
15479
15560
  const def = {
15480
15561
  id: column.id,
15481
- header: /* @__PURE__ */ jsx27(ColumnHeader, { column, disabled }),
15562
+ header: /* @__PURE__ */ jsx28(ColumnHeader, { column, disabled }),
15482
15563
  label: column.header,
15483
15564
  ...column.helpText ? { helpText: column.helpText } : {},
15484
15565
  accessorFn: (row) => banded(row) ? null : column.read(row),
@@ -15497,7 +15578,7 @@ function MatrxBatchGrid({
15497
15578
  def.editableIf = (row) => !banded(row) && (column.editableIf ? column.editableIf(row) : true);
15498
15579
  } else if (column.render) {
15499
15580
  const draw = column.render;
15500
- def.cell = (row) => banded(row) ? null : /* @__PURE__ */ jsx27("div", { ...{ [CELL_EDITOR_ATTR]: "" }, "data-matrx-batch-cell": column.id, className: "min-w-0", children: draw(row) });
15581
+ def.cell = (row) => banded(row) ? null : /* @__PURE__ */ jsx28("div", { ...{ [CELL_EDITOR_ATTR]: "" }, "data-matrx-batch-cell": column.id, className: "min-w-0", children: draw(row) });
15501
15582
  }
15502
15583
  return def;
15503
15584
  });
@@ -15530,7 +15611,7 @@ function MatrxBatchGrid({
15530
15611
  data.map(getRowId).filter((id) => !folded.has(id) && hasDetail(byId.get(id)))
15531
15612
  );
15532
15613
  return /* @__PURE__ */ jsxs26("div", { ref: gridRef, className: "min-w-0", "data-matrx-batch-grid": tableId, children: [
15533
- /* @__PURE__ */ jsx27(
15614
+ /* @__PURE__ */ jsx28(
15534
15615
  MatrxDataTable,
15535
15616
  {
15536
15617
  tableId,
@@ -15586,8 +15667,8 @@ function MatrxBatchGrid({
15586
15667
  onExpandedIdsChange: (next) => setFolded(new Set(data.map(getRowId).filter((id) => !next.has(id)))),
15587
15668
  canExpand: hasDetail,
15588
15669
  render: (row) => /* @__PURE__ */ jsxs26(Fragment18, { children: [
15589
- banded(row) ? /* @__PURE__ */ jsx27("div", { "data-matrx-batch-band": true, className: "px-3 py-1.5 text-sm text-muted-foreground", children: bandOf(row) }) : null,
15590
- notesOf(row).length > 0 ? /* @__PURE__ */ jsx27(BatchRowNotes, { notes: notesOf(row) }) : null
15670
+ banded(row) ? /* @__PURE__ */ jsx28("div", { "data-matrx-batch-band": true, className: "px-3 py-1.5 text-sm text-muted-foreground", children: bandOf(row) }) : null,
15671
+ notesOf(row).length > 0 ? /* @__PURE__ */ jsx28(BatchRowNotes, { notes: notesOf(row) }) : null
15591
15672
  ] })
15592
15673
  },
15593
15674
  ...onRemoveRow ? {
@@ -15607,12 +15688,12 @@ function MatrxBatchGrid({
15607
15688
  } : {}
15608
15689
  }
15609
15690
  ),
15610
- footnote ? /* @__PURE__ */ jsx27("div", { className: "type-meta px-3 py-2 text-muted-foreground", children: footnote }) : null
15691
+ footnote ? /* @__PURE__ */ jsx28("div", { className: "type-meta px-3 py-2 text-muted-foreground", children: footnote }) : null
15611
15692
  ] });
15612
15693
  }
15613
15694
  function BatchRowNotes({ notes }) {
15614
15695
  const blocked = notes.some((note) => note.tone === "blocked");
15615
- return /* @__PURE__ */ jsx27(
15696
+ return /* @__PURE__ */ jsx28(
15616
15697
  "ul",
15617
15698
  {
15618
15699
  "data-matrx-batch-notes": true,
@@ -15621,8 +15702,8 @@ function BatchRowNotes({ notes }) {
15621
15702
  blocked ? "bg-destructive/5" : "bg-warning/10"
15622
15703
  ),
15623
15704
  children: notes.map((note) => /* @__PURE__ */ jsxs26("li", { className: "flex items-start gap-1.5", children: [
15624
- /* @__PURE__ */ jsx27(AlertTriangleIcon, { className: cn("mt-0.5 h-3.5 w-3.5 shrink-0", note.tone === "blocked" ? "text-destructive-ink" : "text-warning-ink") }),
15625
- /* @__PURE__ */ jsx27("span", { children: note.text })
15705
+ /* @__PURE__ */ jsx28(AlertTriangleIcon, { className: cn("mt-0.5 h-3.5 w-3.5 shrink-0", note.tone === "blocked" ? "text-destructive-ink" : "text-warning-ink") }),
15706
+ /* @__PURE__ */ jsx28("span", { children: note.text })
15626
15707
  ] }, note.text))
15627
15708
  }
15628
15709
  );
@@ -15700,14 +15781,14 @@ function detailGridText(rows, columns, labelHeader = "Field") {
15700
15781
  }
15701
15782
 
15702
15783
  // src/data-table/MatrxDetailGrid.tsx
15703
- import { Fragment as Fragment19, jsx as jsx28, jsxs as jsxs27 } from "react/jsx-runtime";
15784
+ import { Fragment as Fragment19, jsx as jsx29, jsxs as jsxs27 } from "react/jsx-runtime";
15704
15785
  var DEFAULT_COLUMNS = [{ key: "value", label: "Value" }];
15705
15786
  var DEFAULT_CLAMP = 400;
15706
15787
  function JsonValue({ data }) {
15707
15788
  const host = useMatrxDataTableHost();
15708
15789
  const Viewer = host.JsonViewer;
15709
- if (Viewer) return /* @__PURE__ */ jsx28(Viewer, { data });
15710
- return /* @__PURE__ */ jsx28("pre", { className: "max-h-96 overflow-auto whitespace-pre-wrap break-words rounded-md bg-muted/40 p-2 font-mono text-xs leading-relaxed text-foreground", children: detailValueText(data) });
15790
+ if (Viewer) return /* @__PURE__ */ jsx29(Viewer, { data });
15791
+ return /* @__PURE__ */ jsx29("pre", { className: "max-h-96 overflow-auto whitespace-pre-wrap break-words rounded-md bg-muted/40 p-2 font-mono text-xs leading-relaxed text-foreground", children: detailValueText(data) });
15711
15792
  }
15712
15793
  function ClampedText({ text, clampChars, mono }) {
15713
15794
  const [open, setOpen] = useState21(false);
@@ -15715,7 +15796,7 @@ function ClampedText({ text, clampChars, mono }) {
15715
15796
  const shown = long && !open ? `${text.slice(0, clampChars).trimEnd()}\u2026` : text;
15716
15797
  return /* @__PURE__ */ jsxs27("span", { className: cn("block min-w-0 whitespace-pre-wrap break-words", mono && "font-mono"), children: [
15717
15798
  shown,
15718
- long ? /* @__PURE__ */ jsx28(
15799
+ long ? /* @__PURE__ */ jsx29(
15719
15800
  Button2,
15720
15801
  {
15721
15802
  type: "button",
@@ -15732,7 +15813,7 @@ function ClampedText({ text, clampChars, mono }) {
15732
15813
  function CollectedValue({ data }) {
15733
15814
  const [open, setOpen] = useState21(false);
15734
15815
  return /* @__PURE__ */ jsxs27("span", { className: "block min-w-0", children: [
15735
- /* @__PURE__ */ jsx28(
15816
+ /* @__PURE__ */ jsx29(
15736
15817
  Button2,
15737
15818
  {
15738
15819
  type: "button",
@@ -15744,7 +15825,7 @@ function CollectedValue({ data }) {
15744
15825
  children: collectedDetailSummary(data)
15745
15826
  }
15746
15827
  ),
15747
- open ? /* @__PURE__ */ jsx28("span", { className: "mt-1 block", children: /* @__PURE__ */ jsx28(JsonValue, { data }) }) : null
15828
+ open ? /* @__PURE__ */ jsx29("span", { className: "mt-1 block", children: /* @__PURE__ */ jsx29(JsonValue, { data }) }) : null
15748
15829
  ] });
15749
15830
  }
15750
15831
  function MatrxDetailValue({
@@ -15755,13 +15836,13 @@ function MatrxDetailValue({
15755
15836
  clampChars = DEFAULT_CLAMP
15756
15837
  }) {
15757
15838
  if (isBlankDetailValue(value)) {
15758
- return /* @__PURE__ */ jsx28("span", { className: "italic text-muted-foreground", "data-matrx-detail-empty": "", children: emptyLabel });
15839
+ return /* @__PURE__ */ jsx29("span", { className: "italic text-muted-foreground", "data-matrx-detail-empty": "", children: emptyLabel });
15759
15840
  }
15760
- if (isUuidValue(value)) return /* @__PURE__ */ jsx28(RecordId, { value, label });
15841
+ if (isUuidValue(value)) return /* @__PURE__ */ jsx29(RecordId, { value, label });
15761
15842
  const collected = collectedDetailValue(value);
15762
- if (collected) return /* @__PURE__ */ jsx28(CollectedValue, { data: collected });
15843
+ if (collected) return /* @__PURE__ */ jsx29(CollectedValue, { data: collected });
15763
15844
  const text = Array.isArray(value) ? value.map((item) => detailValueText(item)).join(", ") : typeof value === "string" ? value : formatTableDisplayValue(value);
15764
- return /* @__PURE__ */ jsx28(ClampedText, { text, clampChars, mono });
15845
+ return /* @__PURE__ */ jsx29(ClampedText, { text, clampChars, mono });
15765
15846
  }
15766
15847
  function MatrxDetailGrid({
15767
15848
  rows,
@@ -15793,14 +15874,14 @@ function MatrxDetailGrid({
15793
15874
  const value = row.values[column.key];
15794
15875
  if (!copy || isBlankDetailValue(value)) return null;
15795
15876
  const label = columns.length > 1 ? `${row.label} \xB7 ${column.label}` : row.label;
15796
- return /* @__PURE__ */ jsx28(
15877
+ return /* @__PURE__ */ jsx29(
15797
15878
  "span",
15798
15879
  {
15799
15880
  className: cn(
15800
15881
  "shrink-0 opacity-0 transition-opacity focus-within:opacity-100 group-hover/detail:opacity-100",
15801
15882
  floating && "absolute right-1 top-0.5 rounded-md bg-card"
15802
15883
  ),
15803
- children: /* @__PURE__ */ jsx28(
15884
+ children: /* @__PURE__ */ jsx29(
15804
15885
  DeferredCopyButtons,
15805
15886
  {
15806
15887
  size: "xs",
@@ -15819,12 +15900,12 @@ function MatrxDetailGrid({
15819
15900
  );
15820
15901
  };
15821
15902
  if (rows.length === 0) {
15822
- return /* @__PURE__ */ jsx28("div", { className: cn("type-secondary text-muted-foreground", className), children: empty ?? "Nothing to show" });
15903
+ return /* @__PURE__ */ jsx29("div", { className: cn("type-secondary text-muted-foreground", className), children: empty ?? "Nothing to show" });
15823
15904
  }
15824
15905
  const showHeader = header ?? columns.length > 1;
15825
15906
  const singleRecord = columns.length === 1 && !showHeader;
15826
15907
  const footer = /* @__PURE__ */ jsxs27(Fragment19, { children: [
15827
- filtered.length > limit ? /* @__PURE__ */ jsx28(
15908
+ filtered.length > limit ? /* @__PURE__ */ jsx29(
15828
15909
  Button2,
15829
15910
  {
15830
15911
  type: "button",
@@ -15835,7 +15916,7 @@ function MatrxDetailGrid({
15835
15916
  children: `Show all ${filtered.length}`
15836
15917
  }
15837
15918
  ) : null,
15838
- held > rows.length ? /* @__PURE__ */ jsx28("div", { className: "mt-1 type-meta text-muted-foreground", "data-matrx-detail-held": "", children: `${rows.length} of ${held} rows shown` }) : null
15919
+ held > rows.length ? /* @__PURE__ */ jsx29("div", { className: "mt-1 type-meta text-muted-foreground", "data-matrx-detail-held": "", children: `${rows.length} of ${held} rows shown` }) : null
15839
15920
  ] });
15840
15921
  if (singleRecord) {
15841
15922
  const column = columns[0];
@@ -15854,18 +15935,18 @@ function MatrxDetailGrid({
15854
15935
  ...meta ? { meta } : {}
15855
15936
  };
15856
15937
  if (custom === void 0 && isBlankDetailValue(value)) {
15857
- return /* @__PURE__ */ jsx28(PropertyRow, { ...common, missing: column.emptyLabel ?? true }, row.key);
15938
+ return /* @__PURE__ */ jsx29(PropertyRow, { ...common, missing: column.emptyLabel ?? true }, row.key);
15858
15939
  }
15859
15940
  if (collected) {
15860
- return /* @__PURE__ */ jsx28(PropertyRow, { ...common, data: collected, expanded: /* @__PURE__ */ jsx28(JsonValue, { data: collected }) }, row.key);
15941
+ return /* @__PURE__ */ jsx29(PropertyRow, { ...common, data: collected, expanded: /* @__PURE__ */ jsx29(JsonValue, { data: collected }) }, row.key);
15861
15942
  }
15862
- return /* @__PURE__ */ jsx28(PropertyRow, { ...common, mono: Boolean(row.mono ?? column.mono), children: custom ?? /* @__PURE__ */ jsx28(MatrxDetailValue, { value, label: row.label, mono: row.mono ?? column.mono, clampChars }) }, row.key);
15943
+ return /* @__PURE__ */ jsx29(PropertyRow, { ...common, mono: Boolean(row.mono ?? column.mono), children: custom ?? /* @__PURE__ */ jsx29(MatrxDetailValue, { value, label: row.label, mono: row.mono ?? column.mono, clampChars }) }, row.key);
15863
15944
  }),
15864
15945
  footer
15865
15946
  ] });
15866
15947
  }
15867
15948
  const template = `minmax(5rem, 11rem) repeat(${columns.length}, minmax(0, 1fr))`;
15868
- const copyAll = copy ? /* @__PURE__ */ jsx28(
15949
+ const copyAll = copy ? /* @__PURE__ */ jsx29(
15869
15950
  DeferredCopyButtons,
15870
15951
  {
15871
15952
  size: "xs",
@@ -15883,8 +15964,8 @@ function MatrxDetailGrid({
15883
15964
  return /* @__PURE__ */ jsxs27("div", { className: cn("min-w-0", className), "data-matrx-detail-grid": reviewing ? "review" : "grid", "data-matrx-table-look": macLook, children: [
15884
15965
  reviewing ? /* @__PURE__ */ jsxs27("div", { className: "mb-1 flex min-h-7 items-center gap-2", "data-matrx-detail-bar": "", children: [
15885
15966
  reviewing ? /* @__PURE__ */ jsxs27(Fragment19, { children: [
15886
- /* @__PURE__ */ jsx28("span", { className: "type-secondary text-muted-foreground", "data-matrx-detail-changed-count": "", children: `${changedCount} changed` }),
15887
- changedCount > 0 && changedCount < rows.length ? /* @__PURE__ */ jsx28(
15967
+ /* @__PURE__ */ jsx29("span", { className: "type-secondary text-muted-foreground", "data-matrx-detail-changed-count": "", children: `${changedCount} changed` }),
15968
+ changedCount > 0 && changedCount < rows.length ? /* @__PURE__ */ jsx29(
15888
15969
  Button2,
15889
15970
  {
15890
15971
  type: "button",
@@ -15897,10 +15978,10 @@ function MatrxDetailGrid({
15897
15978
  }
15898
15979
  ) : null
15899
15980
  ] }) : null,
15900
- copyAll ? /* @__PURE__ */ jsx28("span", { className: "ml-auto", children: copyAll }) : null
15981
+ copyAll ? /* @__PURE__ */ jsx29("span", { className: "ml-auto", children: copyAll }) : null
15901
15982
  ] }) : null,
15902
15983
  /* @__PURE__ */ jsxs27("div", { className: "group/detail-grid relative", children: [
15903
- !reviewing && copyAll ? /* @__PURE__ */ jsx28(
15984
+ !reviewing && copyAll ? /* @__PURE__ */ jsx29(
15904
15985
  "span",
15905
15986
  {
15906
15987
  "data-matrx-detail-copy-all": "",
@@ -15908,17 +15989,17 @@ function MatrxDetailGrid({
15908
15989
  children: copyAll
15909
15990
  }
15910
15991
  ) : null,
15911
- /* @__PURE__ */ jsx28("div", { className: "overflow-x-auto rounded-md border border-border", children: /* @__PURE__ */ jsxs27("div", { role: "table", className: "grid min-w-max sm:min-w-0", style: { gridTemplateColumns: template }, children: [
15992
+ /* @__PURE__ */ jsx29("div", { className: "overflow-x-auto rounded-md border border-border", children: /* @__PURE__ */ jsxs27("div", { role: "table", className: "grid min-w-max sm:min-w-0", style: { gridTemplateColumns: template }, children: [
15912
15993
  showHeader ? /* @__PURE__ */ jsxs27("div", { role: "row", className: "contents", children: [
15913
- /* @__PURE__ */ jsx28("div", { role: "columnheader", className: "border-b border-border bg-muted/40 px-2 py-1 type-label text-muted-foreground", children: labelHeader }),
15914
- columns.map((column) => /* @__PURE__ */ jsx28("div", { role: "columnheader", className: "border-b border-border bg-muted/40 px-2 py-1 type-label text-muted-foreground", children: column.label }, column.key))
15994
+ /* @__PURE__ */ jsx29("div", { role: "columnheader", className: "border-b border-border bg-muted/40 px-2 py-1 type-label text-muted-foreground", children: labelHeader }),
15995
+ columns.map((column) => /* @__PURE__ */ jsx29("div", { role: "columnheader", className: "border-b border-border bg-muted/40 px-2 py-1 type-label text-muted-foreground", children: column.label }, column.key))
15915
15996
  ] }) : null,
15916
15997
  shown.map((row, index) => {
15917
15998
  const changed = reviewing && isDetailRowChanged(row, columns);
15918
15999
  const last = index === shown.length - 1;
15919
16000
  const edge = last ? "" : "border-b border-border";
15920
16001
  return /* @__PURE__ */ jsxs27("div", { role: "row", className: "contents", "data-matrx-detail-row": row.key, ...changed ? { "data-changed": "" } : {}, children: [
15921
- /* @__PURE__ */ jsx28("div", { role: "rowheader", className: cn("px-2 py-1 type-secondary text-muted-foreground", edge), children: row.label }),
16002
+ /* @__PURE__ */ jsx29("div", { role: "rowheader", className: cn("px-2 py-1 type-secondary text-muted-foreground", edge), children: row.label }),
15922
16003
  columns.map((column) => {
15923
16004
  const value = row.values[column.key];
15924
16005
  const emphasise = changed && column.key === after;
@@ -15935,7 +16016,7 @@ function MatrxDetailGrid({
15935
16016
  ),
15936
16017
  ...emphasise ? { "data-changed-cell": "" } : {},
15937
16018
  children: [
15938
- /* @__PURE__ */ jsx28("span", { className: "block min-w-0", children: row.render?.[column.key] ?? /* @__PURE__ */ jsx28(
16019
+ /* @__PURE__ */ jsx29("span", { className: "block min-w-0", children: row.render?.[column.key] ?? /* @__PURE__ */ jsx29(
15939
16020
  MatrxDetailValue,
15940
16021
  {
15941
16022
  value,
@@ -15983,7 +16064,7 @@ function versionTimelineRows(versions, currentNumber) {
15983
16064
  }
15984
16065
 
15985
16066
  // src/data-table/MatrxVersionTimeline.tsx
15986
- import { Fragment as Fragment20, jsx as jsx29, jsxs as jsxs28 } from "react/jsx-runtime";
16067
+ import { Fragment as Fragment20, jsx as jsx30, jsxs as jsxs28 } from "react/jsx-runtime";
15987
16068
  var lucide = (props) => ({
15988
16069
  width: 24,
15989
16070
  height: 24,
@@ -15997,25 +16078,25 @@ var lucide = (props) => ({
15997
16078
  });
15998
16079
  function CompareIcon(props) {
15999
16080
  return /* @__PURE__ */ jsxs28("svg", { ...lucide(props), children: [
16000
- /* @__PURE__ */ jsx29("circle", { cx: "5", cy: "6", r: "3" }),
16001
- /* @__PURE__ */ jsx29("path", { d: "M12 6h5a2 2 0 0 1 2 2v7" }),
16002
- /* @__PURE__ */ jsx29("path", { d: "m15 9-3-3 3-3" }),
16003
- /* @__PURE__ */ jsx29("circle", { cx: "19", cy: "18", r: "3" }),
16004
- /* @__PURE__ */ jsx29("path", { d: "M12 18H7a2 2 0 0 1-2-2V9" }),
16005
- /* @__PURE__ */ jsx29("path", { d: "m9 15 3 3-3 3" })
16081
+ /* @__PURE__ */ jsx30("circle", { cx: "5", cy: "6", r: "3" }),
16082
+ /* @__PURE__ */ jsx30("path", { d: "M12 6h5a2 2 0 0 1 2 2v7" }),
16083
+ /* @__PURE__ */ jsx30("path", { d: "m15 9-3-3 3-3" }),
16084
+ /* @__PURE__ */ jsx30("circle", { cx: "19", cy: "18", r: "3" }),
16085
+ /* @__PURE__ */ jsx30("path", { d: "M12 18H7a2 2 0 0 1-2-2V9" }),
16086
+ /* @__PURE__ */ jsx30("path", { d: "m9 15 3 3-3 3" })
16006
16087
  ] });
16007
16088
  }
16008
16089
  function RestoreIcon(props) {
16009
16090
  return /* @__PURE__ */ jsxs28("svg", { ...lucide(props), children: [
16010
- /* @__PURE__ */ jsx29("path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" }),
16011
- /* @__PURE__ */ jsx29("path", { d: "M3 3v5h5" })
16091
+ /* @__PURE__ */ jsx30("path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" }),
16092
+ /* @__PURE__ */ jsx30("path", { d: "M3 3v5h5" })
16012
16093
  ] });
16013
16094
  }
16014
16095
  function NextIcon(props) {
16015
- return /* @__PURE__ */ jsx29(ArrowRightIcon, { ...props });
16096
+ return /* @__PURE__ */ jsx30(ArrowRightIcon, { ...props });
16016
16097
  }
16017
16098
  function LoadIcon(props) {
16018
- return /* @__PURE__ */ jsx29(ChevronDownIcon, { ...props });
16099
+ return /* @__PURE__ */ jsx30(ChevronDownIcon, { ...props });
16019
16100
  }
16020
16101
  function formatWhen(at2) {
16021
16102
  if (!at2) return "";
@@ -16025,7 +16106,7 @@ function formatWhen(at2) {
16025
16106
  }
16026
16107
  function VersionCell({ row }) {
16027
16108
  return /* @__PURE__ */ jsxs28("span", { className: "inline-flex items-center gap-1.5", "data-matrx-version": row.entry.number, children: [
16028
- /* @__PURE__ */ jsx29(
16109
+ /* @__PURE__ */ jsx30(
16029
16110
  "span",
16030
16111
  {
16031
16112
  "aria-hidden": true,
@@ -16036,8 +16117,8 @@ function VersionCell({ row }) {
16036
16117
  )
16037
16118
  }
16038
16119
  ),
16039
- /* @__PURE__ */ jsx29("span", { className: cn("font-mono font-medium tabular-nums", row.isCurrent ? "font-semibold text-foreground" : "text-foreground"), children: `v${row.entry.number}` }),
16040
- row.isCurrent ? /* @__PURE__ */ jsx29("span", { className: "sr-only", children: "Current" }) : null
16120
+ /* @__PURE__ */ jsx30("span", { className: cn("font-mono font-medium tabular-nums", row.isCurrent ? "font-semibold text-foreground" : "text-foreground"), children: `v${row.entry.number}` }),
16121
+ row.isCurrent ? /* @__PURE__ */ jsx30("span", { className: "sr-only", children: "Current" }) : null
16041
16122
  ] });
16042
16123
  }
16043
16124
  function MatrxVersionTimeline({
@@ -16066,7 +16147,7 @@ function MatrxVersionTimeline({
16066
16147
  header: "Version",
16067
16148
  accessorFn: (row) => row.entry.number,
16068
16149
  copyValue: (row) => `v${row.entry.number}`,
16069
- cell: (row) => /* @__PURE__ */ jsx29(VersionCell, { row }),
16150
+ cell: (row) => /* @__PURE__ */ jsx30(VersionCell, { row }),
16070
16151
  format: { id: "integer" },
16071
16152
  width: 96,
16072
16153
  frozen: true
@@ -16085,7 +16166,7 @@ function MatrxVersionTimeline({
16085
16166
  id: "at",
16086
16167
  header: "When",
16087
16168
  accessorFn: (row) => row.entry.at instanceof Date ? row.entry.at.toISOString() : row.entry.at ?? "",
16088
- cell: (row) => /* @__PURE__ */ jsx29("span", { className: "text-muted-foreground", children: formatWhen(row.entry.at) }),
16169
+ cell: (row) => /* @__PURE__ */ jsx30("span", { className: "text-muted-foreground", children: formatWhen(row.entry.at) }),
16089
16170
  format: { id: "datetime" },
16090
16171
  width: 160
16091
16172
  });
@@ -16106,14 +16187,14 @@ function MatrxVersionTimeline({
16106
16187
  header: "Changes",
16107
16188
  accessorFn: (row) => [row.entry.note, row.entry.changesText].filter(Boolean).join(" \xB7 "),
16108
16189
  cell: (row) => /* @__PURE__ */ jsxs28("div", { className: "min-w-0 space-y-1", children: [
16109
- row.entry.note ? /* @__PURE__ */ jsx29("div", { className: "text-muted-foreground", children: row.entry.note }) : null,
16110
- row.entry.changes ?? (row.entry.loaded === false ? onLoad ? null : /* @__PURE__ */ jsx29("span", { className: "text-muted-foreground", children: "\u2014" }) : row.previous ? row.entry.changesText ? /* @__PURE__ */ jsx29("span", { className: "text-muted-foreground", children: row.entry.changesText }) : /* @__PURE__ */ jsx29("span", { className: "text-muted-foreground", children: "No changes" }) : /* @__PURE__ */ jsx29("span", { className: "text-muted-foreground", children: "First version" })),
16111
- row.entry.loaded === false && onLoad ? /* @__PURE__ */ jsx29(
16190
+ row.entry.note ? /* @__PURE__ */ jsx30("div", { className: "text-muted-foreground", children: row.entry.note }) : null,
16191
+ row.entry.changes ?? (row.entry.loaded === false ? onLoad ? null : /* @__PURE__ */ jsx30("span", { className: "text-muted-foreground", children: "\u2014" }) : row.previous ? row.entry.changesText ? /* @__PURE__ */ jsx30("span", { className: "text-muted-foreground", children: row.entry.changesText }) : /* @__PURE__ */ jsx30("span", { className: "text-muted-foreground", children: "No changes" }) : /* @__PURE__ */ jsx30("span", { className: "text-muted-foreground", children: "First version" })),
16192
+ row.entry.loaded === false && onLoad ? /* @__PURE__ */ jsx30(
16112
16193
  Button2,
16113
16194
  {
16114
16195
  type: "button",
16115
16196
  variant: "link",
16116
- icon: /* @__PURE__ */ jsx29(LoadIcon, { className: "size-3", "aria-hidden": true }),
16197
+ icon: /* @__PURE__ */ jsx30(LoadIcon, { className: "size-3", "aria-hidden": true }),
16117
16198
  "data-matrx-version-load": "",
16118
16199
  className: "shrink-0",
16119
16200
  onClick: (event) => {
@@ -16160,7 +16241,7 @@ function MatrxVersionTimeline({
16160
16241
  };
16161
16242
  const words = pendingRestore && restore ? restore.confirm(pendingRestore) : null;
16162
16243
  return /* @__PURE__ */ jsxs28(Fragment20, { children: [
16163
- /* @__PURE__ */ jsx29(
16244
+ /* @__PURE__ */ jsx30(
16164
16245
  MatrxDataTable,
16165
16246
  {
16166
16247
  tableId,
@@ -16186,7 +16267,7 @@ function MatrxVersionTimeline({
16186
16267
  } : {}
16187
16268
  }
16188
16269
  ),
16189
- words ? /* @__PURE__ */ jsx29(
16270
+ words ? /* @__PURE__ */ jsx30(
16190
16271
  ConfirmDialog,
16191
16272
  {
16192
16273
  open: true,