@ai-matrx/design-system 0.86.334 → 0.86.335
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 +23 -68
- package/dist/carousel.cjs.map +1 -1
- package/dist/carousel.js +4 -4
- package/dist/{chunk-677JS6TX.js → chunk-4CO5STZU.js} +2 -2
- package/dist/{chunk-MFUNGDHO.js → chunk-B24DLFWR.js} +2 -2
- package/dist/{chunk-CSSD6NS4.js → chunk-DQUCOMAC.js} +2 -2
- package/dist/{chunk-6YZMGSQY.js → chunk-M34WPTPX.js} +2 -2
- package/dist/{chunk-VV6WZTH5.js → chunk-PBDQZPKV.js} +2 -2
- package/dist/{chunk-E4GS5QH7.js → chunk-Q2HWDJED.js} +2 -2
- package/dist/{chunk-ZOQ2XKXF.js → chunk-QOEKPR37.js} +5 -5
- package/dist/chunk-QOEKPR37.js.map +1 -0
- package/dist/{chunk-MEJVHDYJ.js → chunk-RGJPHRU3.js} +2 -2
- package/dist/{chunk-7NEVJKDZ.js → chunk-SUVIHUAD.js} +3 -3
- package/dist/{chunk-3MQMVPKO.js → chunk-VQ3G6AFN.js} +4 -4
- package/dist/clipboard-fallback-dialog.cjs.map +1 -1
- package/dist/clipboard-fallback-dialog.js +1 -1
- package/dist/controls.cjs +4 -4
- package/dist/controls.cjs.map +1 -1
- package/dist/controls.css +6 -0
- package/dist/controls.js +4 -4
- package/dist/data-table/data-row-inspector.cjs.map +1 -1
- package/dist/data-table/data-row-inspector.js +4 -4
- package/dist/data-table/data-row-window.cjs.map +1 -1
- package/dist/data-table/data-row-window.js +5 -5
- package/dist/data-table/index.cjs +4 -4
- package/dist/data-table/index.cjs.map +1 -1
- package/dist/data-table/index.js +7 -7
- package/dist/data-table/pagination.cjs +4 -4
- package/dist/data-table/pagination.cjs.map +1 -1
- package/dist/data-table/pagination.js +2 -2
- package/dist/data-table/uuid-cell.cjs.map +1 -1
- package/dist/data-table/uuid-cell.js +2 -2
- package/dist/desktop.cjs.map +1 -1
- package/dist/desktop.js +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +6 -6
- package/dist/item.cjs.map +1 -1
- package/dist/item.js +2 -2
- package/dist/lite-table.cjs.map +1 -1
- package/dist/lite-table.js +1 -1
- package/dist/record-list.cjs.map +1 -1
- package/dist/record-list.js +2 -2
- package/dist/settings.cjs.map +1 -1
- package/dist/settings.js +2 -2
- package/dist/writing-field.cjs.map +1 -1
- package/dist/writing-field.js +2 -2
- package/package.json +2 -2
- package/dist/chunk-ZOQ2XKXF.js.map +0 -1
- /package/dist/{chunk-677JS6TX.js.map → chunk-4CO5STZU.js.map} +0 -0
- /package/dist/{chunk-MFUNGDHO.js.map → chunk-B24DLFWR.js.map} +0 -0
- /package/dist/{chunk-CSSD6NS4.js.map → chunk-DQUCOMAC.js.map} +0 -0
- /package/dist/{chunk-6YZMGSQY.js.map → chunk-M34WPTPX.js.map} +0 -0
- /package/dist/{chunk-VV6WZTH5.js.map → chunk-PBDQZPKV.js.map} +0 -0
- /package/dist/{chunk-E4GS5QH7.js.map → chunk-Q2HWDJED.js.map} +0 -0
- /package/dist/{chunk-MEJVHDYJ.js.map → chunk-RGJPHRU3.js.map} +0 -0
- /package/dist/{chunk-7NEVJKDZ.js.map → chunk-SUVIHUAD.js.map} +0 -0
- /package/dist/{chunk-3MQMVPKO.js.map → chunk-VQ3G6AFN.js.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.86.335
|
|
4
|
+
|
|
5
|
+
- **Select `hint` never truncates** (vault review, 2026-10-23): in the menu and on the trigger the label truncates and the option's `hint` (a short id) stays whole, so two long same-named options stay told apart (`data-select-hint`). Proof: `src/controls/select-search-hint.test.tsx`. Consumer action: none.
|
|
6
|
+
|
|
3
7
|
## 0.86.334
|
|
4
8
|
|
|
5
|
-
|
|
9
|
+
No separate release note was written for this version; no consumer action known.
|
|
6
10
|
|
|
7
11
|
## 0.86.333
|
|
8
12
|
|
|
@@ -21,30 +25,20 @@ has no shipped-source changes outside tests, fixtures and docs). No consumer act
|
|
|
21
25
|
|
|
22
26
|
## 0.86.331
|
|
23
27
|
|
|
24
|
-
|
|
25
|
-
so they may include breaking API changes. Consumer action is UNKNOWN: read the diff before upgrading.
|
|
26
|
-
Diff: `git diff 12937415f7 00cdf507e0 -- apps/shared/design-system/src`
|
|
27
|
-
|
|
28
|
-
Changed shipped source files (1):
|
|
29
|
-
- `apps/shared/design-system/src/controls/controls.tsx`
|
|
28
|
+
- **Select `hint` and `searchAt`** (2026-10-23): an option's `hint` is muted text after its label in the menu and on the trigger (what tells two same-named options apart: a short id, an owner); `searchAt` puts a search row at the top of the menu once there are at least that many options (matches label, hint and group; "No match" when nothing does). Proof: `src/controls/select-search-hint.test.tsx`. Consumer action: none.
|
|
30
29
|
|
|
31
30
|
## 0.86.330
|
|
32
31
|
|
|
33
32
|
- **menu-look: one left edge, no gutter** (Arman, 2026-10-23). `MenuLookRowBody` draws no icon column for a row without a glyph (it used to reserve an empty 16px slot). New `current` on `MenuLookItem` / `MenuLookRowBody`: `data-current`, medium-weight label and a check at the row's END (`cm-current`). New `MenuLookSearch`: the menu's own sticky header-row search, text on the rows' 12px edge. `MenuLookCheckboxItem` keeps its column on and off. Consumer action: drop any invisible check/placeholder glyph used to align rows, and mark the current row with `current`.
|
|
34
33
|
- **item: `ProductSidebarTop` has one search door.** Removed `search.pool` (place search) and `matchSidebarPlaces`; `search` remains only for a list's own filter. Consumer action: a sidebar whose top row carries a search icon passes no `search`.
|
|
35
34
|
|
|
36
|
-
|
|
37
|
-
|
|
38
35
|
## 0.86.329
|
|
39
36
|
|
|
40
37
|
- **New light entry `./tap-shortcut` (2026-10-23, FB5).** `formatTapShortcut`, `parseShortcut` and `TapShortcut` with no React, for plain helpers; `./tap-target` re-exports the same three. Consumer action: none.
|
|
41
38
|
|
|
42
|
-
- **Tile `dashed` and `hoverStyle="fill"`** (2026-10-23): the Tile migration had dropped AddTile's dashed border and the desktop `ListRow`'s pointer fill (`hover:bg-fill-secondary`). Both return as named Tile options: `dashed` (the "add another" tile) and `hoverStyle="fill"` (the desktop secondary fill, the accent outside the desktop look); `AddTile` and `ListRow` use them. Proof: `media-option.test.tsx`, `mac-table-parity.test.tsx`, `tile-named-options.test.tsx`. Consumer action: none.
|
|
43
|
-
|
|
44
39
|
## 0.86.328
|
|
45
40
|
|
|
46
41
|
- **Tile `dashed` and `hoverStyle="fill"`** (2026-10-23): the Tile migration had dropped AddTile's dashed border and the desktop `ListRow`'s pointer fill (`hover:bg-fill-secondary`). Both return as named Tile options: `dashed` (the "add another" tile) and `hoverStyle="fill"` (the desktop secondary fill, the accent outside the desktop look); `AddTile` and `ListRow` use them. Proof: `media-option.test.tsx`, `mac-table-parity.test.tsx`, `tile-named-options.test.tsx`. Consumer action: none.
|
|
47
|
-
- **Tile named options** (vault 0.1.33 review, 2026-10-23): `selectedStyle="primary"` (the open item of a master list: solid primary, every ink on it, hover too), `tooltip` (the native `title`; `title` stays the visible LABEL), `level` 1|2|3 (nesting: an icon-less child's title starts under its parent's), `fit` (sizes to its content, never shrinks or truncates the title: a code), `oneLine` (the secondary line is one line), `endInset="control"` (room for a control laid over the row's end). Proof: `src/controls/tile-named-options.test.tsx`. Consumer action: a Tile that passed a tooltip string as `title` moves it to `tooltip`; never put `data-surface="primary"` on a quiet Tile (use `selectedStyle="primary"`); replace `pl-*`/`pr-*` on a Tile (its padding is locked) with `level` / `endInset`.
|
|
48
42
|
|
|
49
43
|
## 0.86.327
|
|
50
44
|
|
|
@@ -52,7 +46,6 @@ Changed shipped source files (1):
|
|
|
52
46
|
- **menu-look: one left edge, no gutter** (Arman, 2026-10-23). `MenuLookRowBody` draws no icon column for a row without a glyph (it used to reserve an empty 16px slot). New `current` on `MenuLookItem` / `MenuLookRowBody`: `data-current`, medium-weight label and a check at the row's END (`cm-current`). New `MenuLookSearch`: the menu's own sticky header-row search, text on the rows' 12px edge. `MenuLookCheckboxItem` keeps its column on and off. Consumer action: drop any invisible check/placeholder glyph used to align rows, and mark the current row with `current`.
|
|
53
47
|
- **item: `ProductSidebarTop` has one search door.** Removed `search.pool` (place search) and `matchSidebarPlaces`; `search` remains only for a list's own filter. Consumer action: a sidebar whose top row carries a search icon passes no `search`.
|
|
54
48
|
|
|
55
|
-
|
|
56
49
|
## 0.86.326
|
|
57
50
|
|
|
58
51
|
SOURCE CHANGED WITH NO RELEASE NOTE. This release shipped source changes that nobody described in an Unreleased entry,
|
|
@@ -362,14 +355,12 @@ Changed shipped source files (3):
|
|
|
362
355
|
- **Swipe deck: a finish and an empty screen worthy of the deck (Arman, 2026-10-22).** The end is the deck's own screen: a mark that draws itself (a ring filled by the score on a quiz), the headline (the group's pick, the score, or All done), "12 of 12 answered", a bar of how the answers split with chips that filter the list (Right / Wrong on a graded deck, else by answer), and every answer to look over — a row takes that answer back and returns to its card (undoable), a miss shows the right answer. `endActions` puts the host's way on (Back to brand) under it. No items is its own screen (fanned cards, `empty: {title, line, action}`), never a zero tally. `renderEnd` still replaces the end entirely; a host using it for an EmptyState should drop it for `endActions`. Guard: `src/swipe-deck/end-screens.test.tsx`. Consumer action: none (optional: drop `renderEnd`, pass `endActions` and `empty`).
|
|
363
356
|
- **A peek never leaves the screen vertically.** `PeekCard`'s height (fit, fixed and loading) is capped by `--matrx-peek-room`, which `PeekHoverCard` and `PeekPopover` set from the popper's available height; a card with no room above or below its trigger shrinks and scrolls inside instead of losing its title off the top. Consumer action: none.
|
|
364
357
|
|
|
365
|
-
|
|
366
358
|
- **`ProductSidebarTop` (`./item`) — the top of every product sidebar** (Arman 2026-10-22): optional modes slot, Search, New, the chosen related places (`›`, a place with `children` opens a flyout), "More" (every other place, extra `moreGroups`, "Edit sidebar…"). Extracted from the conversation sidebar's top; `SidebarPlacesChooser` is the dialog's "Above More" section, `SidebarEditDialog` the dialog's chrome; `splitSidebarPlaces` / `matchSidebarPlaces` the pure halves. Which places sit above More is the host's layered knob. Consumer action: none (additive).
|
|
367
359
|
|
|
368
360
|
## 0.86.294
|
|
369
361
|
|
|
370
362
|
- **A peek never leaves the screen vertically.** `PeekCard`'s height (fit, fixed and loading) is capped by `--matrx-peek-room`, which `PeekHoverCard` and `PeekPopover` set from the popper's available height; a card with no room above or below its trigger shrinks and scrolls inside instead of losing its title off the top. Consumer action: none.
|
|
371
363
|
|
|
372
|
-
|
|
373
364
|
- **`ProductSidebarTop` (`./item`) — the top of every product sidebar** (Arman 2026-10-22): optional modes slot, Search, New, the chosen related places (`›`, a place with `children` opens a flyout), "More" (every other place, extra `moreGroups`, "Edit sidebar…"). Extracted from the conversation sidebar's top; `SidebarPlacesChooser` is the dialog's "Above More" section, `SidebarEditDialog` the dialog's chrome; `splitSidebarPlaces` / `matchSidebarPlaces` the pure halves. Which places sit above More is the host's layered knob. Consumer action: none (additive).
|
|
374
365
|
|
|
375
366
|
## 0.86.293
|
|
@@ -833,7 +824,6 @@ Changed shipped source files (1):
|
|
|
833
824
|
|
|
834
825
|
- `SiteIcon` uses the package's pulse motion while loading, so a host without Tailwind animation utilities gets the same loading feedback. Formula consumer guards follow kit/Airtable's blank `YEAR` / `MONTH` / `DAY` result (`null`); nonempty invalid dates still refuse. Consumer action: none.
|
|
835
826
|
|
|
836
|
-
|
|
837
827
|
- **`SiteIcon` — a website's own icon.** `<SiteIcon site={urlOrHost} iconUrl? fallback? size? className? />` (root export and `@ai-matrx/design-system/site-icon`) reserves its box, shimmers while loading, and tries the caller's icon URL, then Google's favicon service (a 16px answer is Google's default globe and falls through), then DuckDuckGo's (a 48px answer is its default). The generic glyph (a globe by default) shows only when no real icon exists. Also exports `siteHostname`. Use it for every site / URL / domain / source avatar instead of a hand-placed Globe or Link. Consumer action: none.
|
|
838
828
|
|
|
839
829
|
- **`TextInputDialog` takes `allowEmpty`.** An "(optional)" note no longer leaves Confirm disabled until something is typed: with `allowEmpty` the button is enabled on an empty value and submits `""`. Default false, so every existing caller is unchanged.
|
|
@@ -1796,7 +1786,6 @@ Changed shipped source files (2):
|
|
|
1796
1786
|
|
|
1797
1787
|
- `MatrxDataTable` (spreadsheet mode): a double-click edits the cell when it has an editor, and opens the row (`onRowOpen`) from a cell that cannot be edited or from the row's margin; a double-click inside an editor or control stays theirs. A single click still only selects.
|
|
1798
1788
|
|
|
1799
|
-
|
|
1800
1789
|
## 0.86.158
|
|
1801
1790
|
|
|
1802
1791
|
SOURCE CHANGED WITH NO RELEASE NOTE. This release shipped source changes that nobody described in an Unreleased entry,
|
|
@@ -1870,7 +1859,6 @@ Changed shipped source files (4):
|
|
|
1870
1859
|
- **`Field` / `SearchField` `filled`: the leading search of a home page** — a 48px capsule with no frame, the `--muted` fill, a 16px value and a 20px glyph; on focus it turns `--card` with a soft lift (Google Docs / Drive home search). One per page. Consumer action: none; opt in with `<SearchField filled />`.
|
|
1871
1860
|
- **The pill-inset guard sees a border-drawn busy spinner.** An element with `role="status"` / `"progressbar"` inside a pill is ink by its box (its rings are absolute, so the walker skipped them and every pill whose icon became a spinner read "44px left vs 20px right"). Proof: `pill-inset-guard.test.tsx` (red before).
|
|
1872
1861
|
|
|
1873
|
-
|
|
1874
1862
|
## 0.86.149
|
|
1875
1863
|
|
|
1876
1864
|
SOURCE CHANGED WITH NO RELEASE NOTE. This release shipped source changes that nobody described in an Unreleased entry,
|
|
@@ -2705,20 +2693,10 @@ Automatic changed-only republish (docs/metadata drift since the last tag — see
|
|
|
2705
2693
|
No source changes intended and no consumer action required.
|
|
2706
2694
|
|
|
2707
2695
|
## 0.86.27
|
|
2708
|
-
### Unreleased
|
|
2709
|
-
|
|
2710
|
-
- New entry `@ai-matrx/design-system/carousel`: `Carousel`, THE slide strip. `mode="viewer"` swipes (scroll-snap),
|
|
2711
|
-
steps with arrows and Left/Right/Home/End, shows dots, a counter and a thumbnail strip, in 1:1, 4:5, 9:16 or
|
|
2712
|
-
16:9 with no layout shift. `mode="editor"` adds add / duplicate / delete / reorder (drag a thumbnail or
|
|
2713
|
-
move earlier/later) / edit / version history / export. The host draws every slide through `renderSlide`
|
|
2714
|
-
(images, text-on-image social slides, presentation slides) and owns storage: edits leave through
|
|
2715
|
-
`onSlidesChange`, a slide update also leaves through `onSlideChange` with the previous version
|
|
2716
|
-
(`pushVersion` keeps a bounded newest-first list), export is a callback. Pure slide logic is exported
|
|
2717
|
-
(`moveSlide`, `insertSlide`, `duplicateSlide`, `removeSlide`, `replaceSlide`, `pushVersion`).
|
|
2718
2696
|
|
|
2719
|
-
|
|
2720
|
-
|
|
2721
|
-
|
|
2697
|
+
Automatic changed-only republish (docs/metadata drift since the last tag — see
|
|
2698
|
+
`git diff npm/design-system/v0.86.26..npm/design-system/v0.86.27 -- apps/shared/design-system`).
|
|
2699
|
+
No source changes intended and no consumer action required.
|
|
2722
2700
|
|
|
2723
2701
|
## 0.86.27
|
|
2724
2702
|
|
|
@@ -3088,27 +3066,13 @@ No source changes intended and no consumer action required.
|
|
|
3088
3066
|
|
|
3089
3067
|
## 0.80.0
|
|
3090
3068
|
|
|
3091
|
-
|
|
3092
|
-
|
|
3093
|
-
-
|
|
3094
|
-
|
|
3095
|
-
|
|
3096
|
-
|
|
3097
|
-
|
|
3098
|
-
row and header; headers never wrap. New exports `columnKind`, `ColumnKind`.
|
|
3099
|
-
- `Page` notices sit in a foot bar in the layout flow (never floating over content); `Notices` is an
|
|
3100
|
-
in-flow stack. Page rhythm on the HIG scale (20 px margins and section gaps; no reserved header or
|
|
3101
|
-
section-title bands).
|
|
3102
|
-
- Dialogs from the desktop entry are macOS sheets (`DialogContent`, `DialogHeader`, `DialogTitle`,
|
|
3103
|
-
`DialogDescription`, `DialogFooter` from `./sheet`).
|
|
3104
|
-
- Dark mode: green is the dark systemGreen (never amber/lime); a selected row uses the accent at
|
|
3105
|
-
selected-row strength; status dots are desaturated. Light selection is one step deeper than the
|
|
3106
|
-
tint.
|
|
3107
|
-
- `StateView kind="empty"` draws a standard empty glyph and a quiet title; `Sparkline` axis labels
|
|
3108
|
-
sit outside the plot (never over the line); field placeholders are always the system font.
|
|
3109
|
-
|
|
3110
|
-
**Consumer action:** remove any `className` that positioned a `Notices` stack absolutely
|
|
3111
|
-
(`top-*`, `bottom-*`); place it in its container's flow instead.
|
|
3069
|
+
No layout shift, dialogs included (Arman, 2026-10-07).
|
|
3070
|
+
|
|
3071
|
+
- **`NoticeSlot`** (new): the message slot of a dialog or sheet, a fixed-height box that is always there, so an error appearing in it or leaving moves nothing around it. A longer banner is clipped to the slot, never grown.
|
|
3072
|
+
- **Lint `desktop/no-shifting-notice`**: a `Dialog` / `DialogContent` / `AlertDialogContent` is no longer a home for a Banner (it grew the dialog); `NoticeSlot` is.
|
|
3073
|
+
- **`Page` / `Notices`**: notices that render nothing leave no box and no scroll room (the stack is hidden while empty); the scroll room at the page's foot is exactly the stack's measured height (less the foot padding the page already has), so a tall stack never covers the last rows. `Notices` takes `onHeight`.
|
|
3074
|
+
|
|
3075
|
+
**Consumer action:** a Banner / ErrorBanner directly inside a dialog now fails the lint; put it in `<NoticeSlot>`.
|
|
3112
3076
|
|
|
3113
3077
|
## 0.79.5
|
|
3114
3078
|
|
|
@@ -3274,7 +3238,6 @@ No source changes intended and no consumer action required.
|
|
|
3274
3238
|
|
|
3275
3239
|
- `DataRowInspector` (the detail panel and row window's View tab) labels each field by its column's own name when the table has one, else through kit's `displayLabel` (`spineStatus` -> `Spine Status`, `createdAt` -> `Created At`), never the raw key. New optional `labelForField(key)`; `MatrxDataTable` passes its column headers.
|
|
3276
3240
|
|
|
3277
|
-
|
|
3278
3241
|
## 0.72.3
|
|
3279
3242
|
|
|
3280
3243
|
Automatic changed-only republish (docs/metadata drift since the last tag — see
|
|
@@ -4473,7 +4436,6 @@ No source changes intended and no consumer action required.
|
|
|
4473
4436
|
Frontend, Dashboard, Records Grid and desktop callers are migrated without changing writes.
|
|
4474
4437
|
Guards: `TableIconActions.test.tsx`, edit-actions, layout-look, density and row-cost tests.
|
|
4475
4438
|
|
|
4476
|
-
|
|
4477
4439
|
- **Custom fields on every list (lane 7 STANDARD-TABLES W5).** `MatrxDataTable` takes `rowToken`
|
|
4478
4440
|
(the registry token of its rows); the host port `useCustomFieldColumns(token, organizationIds)` —
|
|
4479
4441
|
a hook bound once — answers that token's custom-field columns for the rows' own organizations
|
|
@@ -5035,16 +4997,14 @@ Automatic changed-only republish (docs/metadata drift since the last tag — see
|
|
|
5035
4997
|
No source changes intended and no consumer action required.
|
|
5036
4998
|
|
|
5037
4999
|
## Unreleased
|
|
5000
|
+
### lane RENDER-3 (2026-09-27): the table's toolbar, column headers, footer and pager draw only when what they show changed
|
|
5038
5001
|
|
|
5039
|
-
-
|
|
5040
|
-
- **
|
|
5041
|
-
|
|
5042
|
-
- **
|
|
5043
|
-
- **
|
|
5044
|
-
|
|
5045
|
-
2. *The surface was the browser's.* White, thin grey border, 12px dark text — indistinguishable from macOS's own `title` box. `TooltipContent` now wears `.matrx-tooltip`: a dark, high-contrast chip in both themes (Linear / GitHub / Vercel), re-scoping `--popover`, `--foreground`, `--muted-foreground` and `--border` inside it so rich content stays legible. New tokens `--matrx-tooltip`, `--matrx-tooltip-foreground`, `--matrx-tooltip-muted-foreground`, `--matrx-tooltip-border`, `--matrx-tooltip-shadow` re-brand every tooltip at once.
|
|
5046
|
-
3. *Half the controls on a page used `title=`.* `TooltipProvider` now installs THE TITLE TAKEOVER (`title-tooltips.ts`, exported as `acquireTitleTooltips`): while any provider is mounted, hovering (mouse/pen) or keyboard-focusing an element with a `title` lifts the attribute for as long as it is held and shows the same chip instead; the `title` is restored on leave. A `TooltipTrigger` (now stamped `data-matrx-tooltip-trigger`) keeps its own tooltip and never gets a second. `data-title-side` on an element or ancestor picks the side; `data-native-title` opts a subtree out; `<TooltipProvider titleTooltips={false}>` opts a provider out. It never draws a tooltip that only repeats text already readable in full inside the element (an expanded sidebar row), and still draws it when that text is hidden or truncated.
|
|
5047
|
-
Proof: `title-tooltips.test.tsx` (every case red on 0.49.19). Consumer action: none required — a host that already mounts `TooltipProvider` gets all three. A host test asserting `bg-popover`'s computed color on a tooltip reads the chip's token now.
|
|
5002
|
+
- **`MatrxDataTable` memoises its own chrome** (`MatrxTableChrome`): the toolbar row, the `<thead>`, the `<tfoot>` and the pager are each drawn again only when a value they read changed — every prop and table value each part reads, directly and through the handlers it hands out, compared by value where the table re-derives them (columns key by key, widths, the frozen band, the column window, the header filters' options). Measured before on /data-v2 (native grid, published 0.47.2): one cell edit rendered 7,815 components, ~7.5k of them this chrome, on each of the table's ~10 renders per edit. jsdom guard (records-ui `one-cell-edit-redraws-one-row.test.tsx`, merged grid): toolbar 2,012 → 0, header 3,080 → 0, footer + pager 1,180 → 0.
|
|
5003
|
+
- **Handlers the kept chrome hands out act on the table as it is now** (`chromeLatest`): the toolbar's copy of "the view" (human, JSON, agent text, sheet rows, "Filter & sort before copying") copies the rows after the last edit; select-all, "Show more" and applying a saved view read the latest rows.
|
|
5004
|
+
- **dnd-kit's options are module values** (pointer sensor, accessibility, measuring). Written inline they were new objects on every render, so the drag context moved every render and redrew every column header (each is a draggable and a drop zone).
|
|
5005
|
+
- **Stable identities for what the chrome holds:** a controlled query with no layered filters reads one empty list; `useTableNotice().notify` is one object per host; `useCopySubsetVariant()` returns one function.
|
|
5006
|
+
- **A toolbar copy config that BUILDS its menu from the rows while drawing** (`references`, `aiVariants`, `aiCustom` or `export` declared with parameters) still redraws the toolbar with the rows; one declared with no parameter cannot read them and never does.
|
|
5007
|
+
- **Consumer action:** a host that hands `toolbar`, `columns`, `query`, `footerRows`, `columnState`, `grouping` or `copy` must pass a NEW object when what it shows changes (inline objects already are — the chrome then redraws on every render, as before). A host that wants the saving holds them still; `footerRows` is the footer's signal — a host whose footer cells read state from elsewhere passes a new `footerRows` array when that state changes.
|
|
5048
5008
|
|
|
5049
5009
|
## 0.49.19
|
|
5050
5010
|
### Unreleased
|
|
@@ -5202,7 +5162,6 @@ No source changes intended and no consumer action required.
|
|
|
5202
5162
|
|
|
5203
5163
|
- The adaptive `BottomSheet` has no 60dvh minimum (it keeps the 90dvh maximum): a two-action sheet was mostly empty and hosts overrode it with `min-h-0`. Proof: `bottom-sheet.test.tsx`, red on the old class.
|
|
5204
5164
|
|
|
5205
|
-
|
|
5206
5165
|
### (2026-09-27 — an empty table)
|
|
5207
5166
|
|
|
5208
5167
|
- **An empty table (nothing searched or filtered) draws no pager** — "0-0 of 0" and a disabled pager said nothing the empty state did not. A search or filter that matched nothing keeps its footer (it still says what was searched).
|
|
@@ -5353,7 +5312,6 @@ No source changes intended and no consumer action required.
|
|
|
5353
5312
|
- Checkbox rows (sections, columns, "Only selected rows") sit beside their labels at checkbox size (`.matrx-alchemy-check`); the text-input rule no longer styles checkboxes into 36px boxes stacked above their labels.
|
|
5354
5313
|
- Proof: `src/content-transfer/sections-workspace.test.tsx` (red before, green after). Needs `@ai-matrx/kit` with the rebundled core.
|
|
5355
5314
|
|
|
5356
|
-
|
|
5357
5315
|
## 0.46.4
|
|
5358
5316
|
|
|
5359
5317
|
Automatic changed-only republish (docs/metadata drift since the last tag — see
|
|
@@ -6183,7 +6141,6 @@ None. Every new prop is optional and every default is today's behavior. `MatrxCo
|
|
|
6183
6141
|
ignored when the column already supplies `cell`; a consumer's own renderer can ask for the same
|
|
6184
6142
|
text with the exported `formatColumnValue(col, value)` instead of writing a second money formatter.
|
|
6185
6143
|
|
|
6186
|
-
|
|
6187
6144
|
## 0.21.14 — 2026-09-19
|
|
6188
6145
|
|
|
6189
6146
|
Alchemy renders the kit's new `queued` transfer outcome (`@ai-matrx/kit` 0.16.0): a write that was
|
|
@@ -6504,7 +6461,6 @@ Alchemy adopts approved Portal sample B: 22px artwork with a tighter optical cro
|
|
|
6504
6461
|
|
|
6505
6462
|
Update `@ai-matrx/design-system`; no host styling or prop changes.
|
|
6506
6463
|
|
|
6507
|
-
|
|
6508
6464
|
## 0.19.5 — 2026-09-13
|
|
6509
6465
|
|
|
6510
6466
|
Data-table append receipts remain visible after terminal loads and across remote response or error states. Footer containment now keeps the 44px action controls and 20px action glyphs visible without mobile clipping.
|
|
@@ -6925,7 +6881,6 @@ sources into `controlled-append`; the table cannot infer an endpoint or cursor.
|
|
|
6925
6881
|
Use `@ai-matrx/data/react` `usePaginatedData` or an equivalent receipt, key every
|
|
6926
6882
|
source-affecting input, and pass the application-resolved scrolling preference.
|
|
6927
6883
|
|
|
6928
|
-
|
|
6929
6884
|
## 0.14.3 — 2026-09-11
|
|
6930
6885
|
|
|
6931
6886
|
`ConfirmDialog` now renders its accessible description through Radix's
|