@ai-matrx/design-system 0.48.1 → 0.48.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/dist/data-table/copy-helpers.d.cts +1 -1
- package/dist/data-table/copy-helpers.d.ts +1 -1
- package/dist/data-table/filter-engine.d.cts +1 -1
- package/dist/data-table/filter-engine.d.ts +1 -1
- package/dist/data-table/host.d.cts +1 -1
- package/dist/data-table/host.d.ts +1 -1
- package/dist/data-table/index.cjs +87 -27
- package/dist/data-table/index.cjs.map +1 -1
- package/dist/data-table/index.d.cts +3 -21
- package/dist/data-table/index.d.ts +3 -21
- package/dist/data-table/index.js +184 -124
- package/dist/data-table/index.js.map +1 -1
- package/dist/data-table/infer-filter.d.cts +1 -1
- package/dist/data-table/infer-filter.d.ts +1 -1
- package/dist/data-table/layered-filters.d.cts +1 -1
- package/dist/data-table/layered-filters.d.ts +1 -1
- package/dist/data-table/pagination.cjs +4 -1
- package/dist/data-table/pagination.cjs.map +1 -1
- package/dist/data-table/pagination.js +4 -1
- package/dist/data-table/pagination.js.map +1 -1
- package/dist/data-table/query-control.d.cts +1 -1
- package/dist/data-table/query-control.d.ts +1 -1
- package/dist/data-table/types.cjs.map +1 -1
- package/dist/data-table/types.d.cts +1 -1
- package/dist/data-table/types.d.ts +1 -1
- package/dist/data-table/url-state.d.cts +1 -1
- package/dist/data-table/url-state.d.ts +1 -1
- package/dist/data-table/xlsx.d.cts +1 -1
- package/dist/data-table/xlsx.d.ts +1 -1
- package/dist/index.cjs +43 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +40 -2
- package/dist/index.d.ts +40 -2
- package/dist/index.js +43 -13
- package/dist/index.js.map +1 -1
- package/dist/tap-target.css +4 -1
- package/dist/{types-DuvXeW4i.d.cts → types-Dh3wRc0N.d.cts} +52 -1
- package/dist/{types-oza_vuRW.d.ts → types-hMqC2Fwn.d.ts} +52 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,52 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.48.5
|
|
4
|
+
### Unreleased
|
|
5
|
+
### page-pass shared fix (2026-09-27): one field surface
|
|
6
|
+
|
|
7
|
+
- **Input, BasicInput, Textarea (both looks) and the Select trigger share one surface — `FIELD_SURFACE_CLASS` (`border border-border bg-card`), now exported.** Input and the elevated Textarea filled with `bg-background` (the grey page colour in light mode) and BasicInput / the control Textarea were `bg-transparent`, while the Select trigger was `bg-card`: on one form every text field looked disabled beside white Selects (/hr/settings/employer, the message-template editor). Input's autofill paint follows (`--card`). A caller wanting no fill still passes `bg-transparent`.
|
|
8
|
+
- Proof: `field-surface.test.tsx`.
|
|
9
|
+
|
|
10
|
+
#### Consumer action
|
|
11
|
+
- None required. Hosts drawing their own field controls use `FIELD_SURFACE_CLASS` (matrx-frontend's ProInput / ProTextarea do).
|
|
12
|
+
|
|
13
|
+
## 0.48.4
|
|
14
|
+
### (2026-09-27 — phone cards without a frame)
|
|
15
|
+
|
|
16
|
+
- **The mobile cards scroller draws no frame** (no border, card fill or padding): each card carries its own border, and a bordered panel of bordered cards was box-in-box on every phone list.
|
|
17
|
+
- **The table's touch floor also applies below 640px** (`(pointer: coarse), (max-width: 639px)`): row actions, the footer (rows per page, pager) and search controls are 44px on a phone-width table even when the pointer reports fine.
|
|
18
|
+
- Proof: `MatrxDataTable.cards-no-frame.test.tsx`; the touch floor is CSS (checked live at 375px).
|
|
19
|
+
|
|
20
|
+
### Consumer action
|
|
21
|
+
|
|
22
|
+
None.
|
|
23
|
+
|
|
24
|
+
## 0.48.3
|
|
25
|
+
### (2026-09-27 — OrganizationPicker: row labels, a host fold, a quiet empty state)
|
|
26
|
+
|
|
27
|
+
- **"No organization selected — pick one below." is muted text, not destructive red.** Nothing selected is a routine state; red is for a real failure.
|
|
28
|
+
- **`detail` per row**: a short trailing label ("Open", "Finish setup", "Turn on HR") inside the row's one button.
|
|
29
|
+
- **`folded` per row + `foldedLabel`**: the host's rarely-wanted rows sit behind one counted `ArchivedDisclosure`; the fold opens by itself when it is all there is or when a search matches inside it. Search (above eight rows) covers every row.
|
|
30
|
+
- **`hideStatus`**: hides the "Working in …" line for a host whose choice is not the active organization (HR's employer chooser).
|
|
31
|
+
- Proof: `organization-picker.test.tsx` — 4 of 25 red against 0.48.1's picker, 25 green.
|
|
32
|
+
|
|
33
|
+
### Consumer action
|
|
34
|
+
|
|
35
|
+
None required; all new props are optional. A test that asserted the red status line now asserts muted text.
|
|
36
|
+
|
|
37
|
+
## 0.48.2
|
|
38
|
+
### (2026-09-27 — list chrome, page-pass shared defects)
|
|
39
|
+
|
|
40
|
+
- **The row actions column is pinned right** (from `sm:` up; phones unchanged): a table wider than its container no longer scrolls each row's own actions (Open, Study, the kebab) off the right edge. The header cell and every row cell are sticky with the row's opaque frozen background and a hairline.
|
|
41
|
+
- **The "Clear all filters" eraser is absent when nothing is filtered**, instead of an always-present disabled control that reads as dead.
|
|
42
|
+
- **`toolbar.columns: false`** hides the table's Columns button for a placing page that owns the one column picker (two pickers that disagree about which columns exist is worse than one).
|
|
43
|
+
- **Working view tabs can be kept: `viewTabsStore`** (`{ views, onChange }`, types `TableViewTabsStore` / `SavedTableViewTab`). "+" opens the new view's name field at once (Escape discards it), named views are written to the store, the open saved view follows the layout, and a fresh mount (a reload) lists and applies them. Without a store the tabs stay in memory as before. The default tab has no close button (closing it did nothing).
|
|
44
|
+
- Proof: `MatrxDataTable.toolbar-actions.test.tsx` (eraser absent after clearing; `columns: false`); `TableViewTabs.test.tsx` "saved view tabs" (name → store → remount applies it; Escape discards).
|
|
45
|
+
|
|
46
|
+
### Consumer action
|
|
47
|
+
|
|
48
|
+
A test that asserted a disabled "Clear all filters" button now asserts its absence. A test that clicked "+" and then another tab now names the new view first (its name field is open).
|
|
49
|
+
|
|
3
50
|
## 0.48.1 (2026-09-26 — floating layers, review round)
|
|
4
51
|
|
|
5
52
|
- **A Popover or combobox a floating layer opens counts as part of it.** It portals to `<body>`, outside the window's element and the modal's React tree, so pressing its option still dismissed the modal. `isInsideFloatingLayer` now also accepts Radix popper content while a floating layer is open.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AgentPayloadInput } from './copy-types.cjs';
|
|
2
|
-
import { g as MatrxDataTableCopyConfig, M as MatrxColumnDef } from '../types-
|
|
2
|
+
import { g as MatrxDataTableCopyConfig, M as MatrxColumnDef } from '../types-Dh3wRc0N.cjs';
|
|
3
3
|
import '../content-transfer.cjs';
|
|
4
4
|
import 'react';
|
|
5
5
|
import '@ai-matrx/kit/content-transfer';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AgentPayloadInput } from './copy-types.js';
|
|
2
|
-
import { g as MatrxDataTableCopyConfig, M as MatrxColumnDef } from '../types-
|
|
2
|
+
import { g as MatrxDataTableCopyConfig, M as MatrxColumnDef } from '../types-hMqC2Fwn.js';
|
|
3
3
|
import '../content-transfer.js';
|
|
4
4
|
import 'react';
|
|
5
5
|
import '@ai-matrx/kit/content-transfer';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { M as MatrxColumnDef, C as ColumnFiltersState, S as SortState, L as LayeredFilterRule, T as TableSearchMatchMode, a as ColumnFilterValue } from '../types-
|
|
1
|
+
import { M as MatrxColumnDef, C as ColumnFiltersState, S as SortState, L as LayeredFilterRule, T as TableSearchMatchMode, a as ColumnFilterValue } from '../types-Dh3wRc0N.cjs';
|
|
2
2
|
import '../content-transfer.cjs';
|
|
3
3
|
import 'react';
|
|
4
4
|
import '@ai-matrx/kit/content-transfer';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { M as MatrxColumnDef, C as ColumnFiltersState, S as SortState, L as LayeredFilterRule, T as TableSearchMatchMode, a as ColumnFilterValue } from '../types-
|
|
1
|
+
import { M as MatrxColumnDef, C as ColumnFiltersState, S as SortState, L as LayeredFilterRule, T as TableSearchMatchMode, a as ColumnFilterValue } from '../types-hMqC2Fwn.js';
|
|
2
2
|
import '../content-transfer.js';
|
|
3
3
|
import 'react';
|
|
4
4
|
import '@ai-matrx/kit/content-transfer';
|
|
@@ -2,7 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import { ComponentType, ReactNode, MouseEventHandler } from 'react';
|
|
3
3
|
import { CopyControlProps } from './copy-types.cjs';
|
|
4
4
|
export { AgentPayloadInput, AiCustomSource, AiVariant, CopyExportConfig } from './copy-types.cjs';
|
|
5
|
-
import { b as TableSavedViewsProps, c as MatrxDataTableDensity, d as MatrxDataTableRecordControls } from '../types-
|
|
5
|
+
import { b as TableSavedViewsProps, c as MatrxDataTableDensity, d as MatrxDataTableRecordControls } from '../types-Dh3wRc0N.cjs';
|
|
6
6
|
import { MatrxTableMenuTarget, MatrxTableMenuPayload, MatrxTableMenuSectionsResolver, MatrxTableMenuIconName } from './menu-targets.cjs';
|
|
7
7
|
export { MatrxTableMenuItem, MatrxTableMenuSection } from './menu-targets.cjs';
|
|
8
8
|
import '../content-transfer.cjs';
|
|
@@ -2,7 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import { ComponentType, ReactNode, MouseEventHandler } from 'react';
|
|
3
3
|
import { CopyControlProps } from './copy-types.js';
|
|
4
4
|
export { AgentPayloadInput, AiCustomSource, AiVariant, CopyExportConfig } from './copy-types.js';
|
|
5
|
-
import { b as TableSavedViewsProps, c as MatrxDataTableDensity, d as MatrxDataTableRecordControls } from '../types-
|
|
5
|
+
import { b as TableSavedViewsProps, c as MatrxDataTableDensity, d as MatrxDataTableRecordControls } from '../types-hMqC2Fwn.js';
|
|
6
6
|
import { MatrxTableMenuTarget, MatrxTableMenuPayload, MatrxTableMenuSectionsResolver, MatrxTableMenuIconName } from './menu-targets.js';
|
|
7
7
|
export { MatrxTableMenuItem, MatrxTableMenuSection } from './menu-targets.js';
|
|
8
8
|
import '../content-transfer.js';
|
|
@@ -34939,17 +34939,22 @@ function ConfirmDialog({
|
|
|
34939
34939
|
|
|
34940
34940
|
// src/input.tsx
|
|
34941
34941
|
var React7 = __toESM(require("react"), 1);
|
|
34942
|
+
|
|
34943
|
+
// src/field-surface.ts
|
|
34944
|
+
var FIELD_SURFACE_CLASS = "border border-border bg-card";
|
|
34945
|
+
|
|
34946
|
+
// src/input.tsx
|
|
34942
34947
|
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
34943
34948
|
var getVariantStyles = (variant = "default") => {
|
|
34944
|
-
const baseStyles = `flex h-10 w-full
|
|
34949
|
+
const baseStyles = `flex h-10 w-full ${FIELD_SURFACE_CLASS} text-foreground shadow-input rounded-md px-3 py-2 text-sm file:border-0 file:bg-transparent
|
|
34945
34950
|
file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground
|
|
34946
34951
|
focus-visible:outline-none focus-visible:ring-[2px] focus-visible:ring-ring
|
|
34947
34952
|
disabled:cursor-not-allowed disabled:opacity-50
|
|
34948
34953
|
dark:shadow-none
|
|
34949
34954
|
transition duration-400
|
|
34950
|
-
[&:-webkit-autofill]:bg-
|
|
34951
|
-
dark:[&:-webkit-autofill]:shadow-[0_0_0_1000px_hsl(var(--
|
|
34952
|
-
[&:-webkit-autofill:hover]:shadow-[0_0_0_1000px_hsl(var(--
|
|
34955
|
+
[&:-webkit-autofill]:bg-card [&:-webkit-autofill]:shadow-[0_0_0_1000px_hsl(var(--card))_inset] [&:-webkit-autofill]:[caret-color:currentColor]
|
|
34956
|
+
dark:[&:-webkit-autofill]:shadow-[0_0_0_1000px_hsl(var(--card))_inset] dark:[&:-webkit-autofill]:[-webkit-text-fill-color:hsl(var(--foreground))]
|
|
34957
|
+
[&:-webkit-autofill:hover]:shadow-[0_0_0_1000px_hsl(var(--card))_inset] [&:-webkit-autofill:focus]:shadow-[0_0_0_1000px_hsl(var(--card))_inset]`;
|
|
34953
34958
|
switch (variant) {
|
|
34954
34959
|
case "destructive":
|
|
34955
34960
|
return `${baseStyles} bg-destructive text-destructive-foreground`;
|
|
@@ -35014,7 +35019,7 @@ var BasicInput = React7.forwardRef(
|
|
|
35014
35019
|
{
|
|
35015
35020
|
type,
|
|
35016
35021
|
className: cn(
|
|
35017
|
-
|
|
35022
|
+
`flex h-9 w-full rounded-md ${FIELD_SURFACE_CLASS} px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50`,
|
|
35018
35023
|
className
|
|
35019
35024
|
),
|
|
35020
35025
|
ref,
|
|
@@ -35047,7 +35052,7 @@ var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
|
35047
35052
|
var Select = SelectPrimitive.Root;
|
|
35048
35053
|
var SelectValue = SelectPrimitive.Value;
|
|
35049
35054
|
var selectTriggerVariants = (0, import_class_variance_authority2.cva)(
|
|
35050
|
-
|
|
35055
|
+
`flex w-full items-center justify-between gap-2 whitespace-nowrap rounded-md ${FIELD_SURFACE_CLASS} text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground transition-colors hover:bg-accent hover:border-accent-foreground/20 focus:outline-none focus:ring-1 focus:ring-primary/30 focus:border-primary/40 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:min-w-0 [&>span]:line-clamp-1`,
|
|
35051
35056
|
{
|
|
35052
35057
|
variants: {
|
|
35053
35058
|
size: {
|
|
@@ -36703,12 +36708,28 @@ function GenericTablePagination({
|
|
|
36703
36708
|
// src/data-table/TableViewTabs.tsx
|
|
36704
36709
|
var import_react7 = require("react");
|
|
36705
36710
|
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
36706
|
-
function TableViewTabs({ tabs, activeId, onSelect, onAdd, onClose, onRename, related }) {
|
|
36711
|
+
function TableViewTabs({ tabs, activeId, onSelect, onAdd, onClose, onRename, related, editingId, onEditCancel, onEditDone }) {
|
|
36707
36712
|
const [renaming, setRenaming] = (0, import_react7.useState)(null);
|
|
36708
36713
|
const [draft, setDraft] = (0, import_react7.useState)("");
|
|
36714
|
+
const opened = (0, import_react7.useRef)(null);
|
|
36715
|
+
(0, import_react7.useEffect)(() => {
|
|
36716
|
+
if (!editingId || opened.current === editingId) return;
|
|
36717
|
+
const tab = tabs.find((t) => t.id === editingId);
|
|
36718
|
+
if (!tab) return;
|
|
36719
|
+
opened.current = editingId;
|
|
36720
|
+
setDraft(tab.label);
|
|
36721
|
+
setRenaming(editingId);
|
|
36722
|
+
}, [editingId, tabs]);
|
|
36709
36723
|
const commit = () => {
|
|
36710
36724
|
if (renaming && draft.trim()) onRename(renaming, draft.trim());
|
|
36711
36725
|
setRenaming(null);
|
|
36726
|
+
onEditDone?.();
|
|
36727
|
+
};
|
|
36728
|
+
const cancel = () => {
|
|
36729
|
+
const id = renaming;
|
|
36730
|
+
setRenaming(null);
|
|
36731
|
+
if (id) onEditCancel?.(id);
|
|
36732
|
+
onEditDone?.();
|
|
36712
36733
|
};
|
|
36713
36734
|
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex min-w-0 shrink-0 items-center border-b", "data-matrx-table-tabs": true, children: [
|
|
36714
36735
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { role: "tablist", "aria-label": "Table views", className: "flex min-w-0 flex-1 items-center overflow-x-auto", children: [
|
|
@@ -36721,9 +36742,11 @@ function TableViewTabs({ tabs, activeId, onSelect, onAdd, onClose, onRename, rel
|
|
|
36721
36742
|
value: draft,
|
|
36722
36743
|
onChange: (e) => setDraft(e.target.value),
|
|
36723
36744
|
onBlur: commit,
|
|
36745
|
+
onFocus: (e) => e.currentTarget.select(),
|
|
36746
|
+
placeholder: "Name this view",
|
|
36724
36747
|
onKeyDown: (e) => {
|
|
36725
36748
|
if (e.key === "Enter") commit();
|
|
36726
|
-
if (e.key === "Escape")
|
|
36749
|
+
if (e.key === "Escape") cancel();
|
|
36727
36750
|
},
|
|
36728
36751
|
className: "h-8 w-32 bg-transparent px-2 text-xs outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
36729
36752
|
}
|
|
@@ -36755,7 +36778,7 @@ function TableViewTabs({ tabs, activeId, onSelect, onAdd, onClose, onRename, rel
|
|
|
36755
36778
|
]
|
|
36756
36779
|
}
|
|
36757
36780
|
),
|
|
36758
|
-
tabs.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Tooltip, { children: [
|
|
36781
|
+
tabs.length > 1 && tab.id !== "default" && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Tooltip, { children: [
|
|
36759
36782
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("button", { type: "button", "aria-label": `Close ${tab.label}`, onClick: () => onClose(tab.id), className: "flex size-7 items-center justify-center rounded hover:bg-muted focus-visible:ring-2 focus-visible:ring-ring", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(X, { className: "size-4" }) }) }),
|
|
36760
36783
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(TooltipContent, { children: [
|
|
36761
36784
|
"Close ",
|
|
@@ -36765,21 +36788,33 @@ function TableViewTabs({ tabs, activeId, onSelect, onAdd, onClose, onRename, rel
|
|
|
36765
36788
|
] }, tab.id)),
|
|
36766
36789
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(Tooltip, { children: [
|
|
36767
36790
|
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("button", { type: "button", "aria-label": "New table tab", onClick: onAdd, className: "flex size-8 shrink-0 items-center justify-center rounded hover:bg-muted focus-visible:ring-2 focus-visible:ring-ring", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Plus, { className: "size-4" }) }) }),
|
|
36768
|
-
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(TooltipContent, { children: "New
|
|
36791
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(TooltipContent, { children: "New view from the current one \xB7 double-click a tab to rename" })
|
|
36769
36792
|
] })
|
|
36770
36793
|
] }),
|
|
36771
36794
|
related && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex shrink-0 items-center gap-1 border-l px-2", children: related })
|
|
36772
36795
|
] });
|
|
36773
36796
|
}
|
|
36774
|
-
|
|
36775
|
-
|
|
36797
|
+
var same = (a, b) => JSON.stringify(a) === JSON.stringify(b);
|
|
36798
|
+
function TableViewWorkspace({ snapshot, onApply, related, store }) {
|
|
36799
|
+
const [localViews, setLocalViews] = (0, import_react7.useState)([]);
|
|
36800
|
+
const [defaultSnapshot, setDefaultSnapshot] = (0, import_react7.useState)(snapshot);
|
|
36776
36801
|
const [activeId, setActiveId] = (0, import_react7.useState)("default");
|
|
36802
|
+
const [namingId, setNamingId] = (0, import_react7.useState)(null);
|
|
36803
|
+
const saved = store ? store.views : localViews;
|
|
36804
|
+
const write = (next) => store ? store.onChange(next) : setLocalViews(next);
|
|
36805
|
+
const tabs = [{ id: "default", label: "Default view", snapshot: defaultSnapshot }, ...saved];
|
|
36806
|
+
const stashed = () => saved.map((tab) => tab.id === activeId && !same(tab.snapshot, snapshot) ? { ...tab, snapshot } : tab);
|
|
36807
|
+
const activeSaved = saved.find((tab) => tab.id === activeId);
|
|
36808
|
+
(0, import_react7.useEffect)(() => {
|
|
36809
|
+
if (store && activeSaved && !same(activeSaved.snapshot, snapshot)) write(stashed());
|
|
36810
|
+
}, [snapshot]);
|
|
36777
36811
|
const select = (id) => {
|
|
36778
36812
|
if (id === activeId) return;
|
|
36779
36813
|
const target = tabs.find((tab) => tab.id === id);
|
|
36780
36814
|
if (!target) return;
|
|
36781
|
-
if (
|
|
36782
|
-
|
|
36815
|
+
if (!same(target.snapshot, snapshot)) onApply(target.snapshot);
|
|
36816
|
+
if (activeId === "default") setDefaultSnapshot(snapshot);
|
|
36817
|
+
else write(stashed());
|
|
36783
36818
|
setActiveId(id);
|
|
36784
36819
|
};
|
|
36785
36820
|
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
@@ -36789,17 +36824,31 @@ function TableViewWorkspace({ snapshot, onApply, related }) {
|
|
|
36789
36824
|
activeId,
|
|
36790
36825
|
onSelect: select,
|
|
36791
36826
|
related,
|
|
36827
|
+
editingId: namingId,
|
|
36828
|
+
onEditDone: () => setNamingId(null),
|
|
36829
|
+
onEditCancel: (id) => {
|
|
36830
|
+
if (id !== namingId) return;
|
|
36831
|
+
write(saved.filter((tab) => tab.id !== id));
|
|
36832
|
+
if (activeId === id) setActiveId("default");
|
|
36833
|
+
},
|
|
36792
36834
|
onAdd: () => {
|
|
36793
36835
|
const id = crypto.randomUUID();
|
|
36794
|
-
|
|
36836
|
+
if (activeId === "default") setDefaultSnapshot(snapshot);
|
|
36837
|
+
write([...stashed(), { id, label: `View ${saved.length + 2}`, snapshot }]);
|
|
36795
36838
|
setActiveId(id);
|
|
36839
|
+
setNamingId(id);
|
|
36796
36840
|
},
|
|
36797
36841
|
onClose: (id) => {
|
|
36798
36842
|
if (tabs.length < 2) return;
|
|
36799
|
-
|
|
36800
|
-
|
|
36843
|
+
const rest = saved.filter((tab) => tab.id !== id);
|
|
36844
|
+
if (id === activeId) {
|
|
36845
|
+
const next = tabs.find((tab) => tab.id !== id);
|
|
36846
|
+
if (!same(next.snapshot, snapshot)) onApply(next.snapshot);
|
|
36847
|
+
setActiveId(next.id);
|
|
36848
|
+
}
|
|
36849
|
+
write(rest);
|
|
36801
36850
|
},
|
|
36802
|
-
onRename: (id, label) =>
|
|
36851
|
+
onRename: (id, label) => write(saved.map((tab) => tab.id === id ? { ...tab, label } : tab))
|
|
36803
36852
|
}
|
|
36804
36853
|
);
|
|
36805
36854
|
}
|
|
@@ -47594,6 +47643,7 @@ function MatrxDataTableCore(coreProps) {
|
|
|
47594
47643
|
tableId,
|
|
47595
47644
|
defaultViewSnapshot,
|
|
47596
47645
|
viewTabs = true,
|
|
47646
|
+
viewTabsStore,
|
|
47597
47647
|
relatedTableActions,
|
|
47598
47648
|
columnState,
|
|
47599
47649
|
reorderableColumns = true,
|
|
@@ -50144,7 +50194,16 @@ function MatrxDataTableCore(coreProps) {
|
|
|
50144
50194
|
"td",
|
|
50145
50195
|
{
|
|
50146
50196
|
"data-matrx-table-row-action-cell": true,
|
|
50147
|
-
className:
|
|
50197
|
+
className: cn(
|
|
50198
|
+
"text-right align-middle",
|
|
50199
|
+
// PINNED RIGHT from sm: up (page-pass 2026-09-27): a table wider than its
|
|
50200
|
+
// container scrolled the row's own actions off the right edge at 1280px.
|
|
50201
|
+
// The row's opaque frozen background keeps scrolled cells from showing
|
|
50202
|
+
// through; the hairline says the column floats.
|
|
50203
|
+
"sm:sticky sm:right-0 sm:z-20 sm:shadow-[inset_1px_0_0_var(--color-border)]",
|
|
50204
|
+
frozenRowBackgroundClass,
|
|
50205
|
+
canHoverFrozenCell && "sm:group-hover/matrx-row:bg-[color-mix(in_oklab,var(--color-muted)_50%,var(--color-card))]"
|
|
50206
|
+
),
|
|
50148
50207
|
style: fixedUtilityWidth(fixedTableGeometry?.actionsWidth),
|
|
50149
50208
|
children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
|
|
50150
50209
|
"div",
|
|
@@ -50340,7 +50399,7 @@ function MatrxDataTableCore(coreProps) {
|
|
|
50340
50399
|
TableTitleRow,
|
|
50341
50400
|
{
|
|
50342
50401
|
...toolbar?.singleRow ? { singleRow: true } : {},
|
|
50343
|
-
tabs: viewTabs ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(TableViewWorkspace, { snapshot: currentViewSnapshot, onApply: applyLatestSavedView, related: relatedTableActions }, tableId ?? "table") : void 0,
|
|
50402
|
+
tabs: viewTabs ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(TableViewWorkspace, { snapshot: currentViewSnapshot, onApply: applyLatestSavedView, related: relatedTableActions, ...viewTabsStore ? { store: viewTabsStore } : {} }, tableId ?? "table") : void 0,
|
|
50344
50403
|
...toolbar?.title === void 0 ? {} : { title: toolbar.title },
|
|
50345
50404
|
...toolbar?.titleCount === void 0 ? {} : { count: toolbar.titleCount },
|
|
50346
50405
|
context: tableId && SavedViews ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { "data-matrx-table-view-control": true, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
@@ -50500,17 +50559,16 @@ function MatrxDataTableCore(coreProps) {
|
|
|
50500
50559
|
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(TooltipContent, { className: "max-w-xs", children: coverageResult.notice })
|
|
50501
50560
|
] }) : null,
|
|
50502
50561
|
renderToolbarControls(/* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(import_jsx_runtime48.Fragment, { children: [
|
|
50503
|
-
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
50562
|
+
hasActiveFilters ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
50504
50563
|
TableToolbarAction,
|
|
50505
50564
|
{
|
|
50506
50565
|
HostAction: host.ToolbarAction,
|
|
50507
50566
|
ariaLabel: "Clear all filters",
|
|
50508
|
-
tooltip:
|
|
50509
|
-
disabled: !hasActiveFilters,
|
|
50567
|
+
tooltip: "Clear search and filters; keep columns and sort",
|
|
50510
50568
|
onClick: clearAllFilters,
|
|
50511
50569
|
children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Eraser, {})
|
|
50512
50570
|
}
|
|
50513
|
-
),
|
|
50571
|
+
) : null,
|
|
50514
50572
|
showToolbarCopy && effectiveCopy ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(ToolbarListedLabel, { label: "Copy or export", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
50515
50573
|
CopyButtons,
|
|
50516
50574
|
{
|
|
@@ -50585,7 +50643,7 @@ function MatrxDataTableCore(coreProps) {
|
|
|
50585
50643
|
]
|
|
50586
50644
|
}
|
|
50587
50645
|
) : null,
|
|
50588
|
-
columns.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
50646
|
+
columns.length > 0 && toolbar?.columns !== false ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
50589
50647
|
TableToolbarAction,
|
|
50590
50648
|
{
|
|
50591
50649
|
HostAction: host.ToolbarAction,
|
|
@@ -50677,7 +50735,9 @@ function MatrxDataTableCore(coreProps) {
|
|
|
50677
50735
|
"aria-busy": isLoading || isFetching,
|
|
50678
50736
|
...appendQuery === null ? {} : { style: { containerType: "inline-size" } },
|
|
50679
50737
|
className: cn(
|
|
50680
|
-
|
|
50738
|
+
// No frame around the cards: each card carries its own border, and a bordered
|
|
50739
|
+
// panel of bordered cards is box-in-box (page-pass 2026-09-27).
|
|
50740
|
+
"relative flex h-full min-h-0 flex-col gap-2 overflow-y-auto",
|
|
50681
50741
|
mobileCardsClass
|
|
50682
50742
|
),
|
|
50683
50743
|
children: [
|
|
@@ -51032,7 +51092,7 @@ function MatrxDataTableCore(coreProps) {
|
|
|
51032
51092
|
"th",
|
|
51033
51093
|
{
|
|
51034
51094
|
"data-matrx-table-actions-column": true,
|
|
51035
|
-
className: "h-9 w-px whitespace-nowrap px-2 text-right align-middle text-xs font-semibold uppercase tracking-wide text-muted-foreground",
|
|
51095
|
+
className: "h-9 w-px whitespace-nowrap px-2 text-right align-middle text-xs font-semibold uppercase tracking-wide text-muted-foreground sm:sticky sm:right-0 sm:z-30 sm:bg-muted sm:shadow-[inset_1px_0_0_var(--color-border)]",
|
|
51036
51096
|
style: fixedUtilityWidth(fixedTableGeometry?.actionsWidth),
|
|
51037
51097
|
children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { "data-matrx-table-actions-label": true, className: "inline-block whitespace-nowrap", children: "Actions" })
|
|
51038
51098
|
}
|