@ai-matrx/design-system 0.56.2 → 0.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,58 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.59.0
4
+
5
+ - **A host's inline functions never redraw the table.** A host that writes `cell`,
6
+ `customActions`, `getRowId`, `rowClassName` or its handlers inline handed the table new
7
+ functions on every render, and every row redrew: /artifacts (560 rows) spent ~2.6 s redrawing
8
+ 1,120 rows to open one artifact. Now only a VALUE the rows draw (a width, a flag) redraws every
9
+ row; a new function or object makes each row compare the elements it would draw with the ones
10
+ it drew (`row-drawing.ts`). Equal → React skips the row; different → only that row redraws.
11
+ Every `on[A-Z]` handler inside a row is a stable trampoline to the host's latest function, so a
12
+ row that was not redrawn never calls an old closure. Render props and component types still
13
+ compare by identity, so a row never shows what an old closure drew. The default row copy reads
14
+ its columns when a person copies (`TableRowCopyControl`'s `defaultColumns` is now a getter).
15
+ Guard: `MatrxDataTable.inline-callbacks.test.tsx` (red on 0.58.0).
16
+
17
+ ### Consumer action
18
+
19
+ - None required. A host that stabilised its callbacks only to stop row redraws may drop the
20
+ `useMemo`/ref plumbing; a host whose cell reads state outside the record keeps working without
21
+ `rowVersion` (the comparison sees what the cell draws).
22
+
23
+ ## 0.58.0
24
+
25
+ - **`formatPhone` is exported from `./field-formats`** — the Phone format's one look, moved here
26
+ from records-ui so every surface shows a phone number the same way: ten North-American digits
27
+ read `(805) 555-1234`, `+1`/eleven digits with the leading 1 read `+1 (805) 555-1234`, anything
28
+ else (another country's number, an extension, words) is shown as typed. Display only; the
29
+ stored value is never rewritten. Guard: `src/field-formats/phone-format.test.ts` (red on 0.57.0).
30
+
31
+ ### Consumer action
32
+
33
+ - None required. A surface that renders a phone value calls `formatPhone(text)` from
34
+ `@ai-matrx/design-system/field-formats` instead of keeping its own copy.
35
+
36
+ ## 0.57.0
37
+
38
+ - **One actions column.** A table that declares its own `customActions` column no longer also
39
+ draws the built-in row-actions column just to hold the row-copy icon: the copy rides inline at
40
+ the start of the first visible custom column. Before, records-ui's merged grid showed two
41
+ actions columns, and the second one, 225 px wide with only the copy icon in it, pushed the
42
+ grid's own Delete off the right edge. The built-in column is still drawn when the table has
43
+ standard icon `rowActions` or a window button, and it still holds the copy whenever no custom
44
+ column is visible. Under `fitToWidth` a custom column now takes its content width (its widest
45
+ row strip or its header), not a share of the space, and a custom strip gets compact rows'
46
+ 24 px buttons. With no built-in column drawn, a custom column that ends the row takes the
47
+ built-in column's pin (sticky right from `sm:` up, `data-matrx-table-pinned-actions`), and the
48
+ sideways scroll control sits clear of it. Guards: `TableIconActions.test.tsx` and `MatrxDataTable.layout-look.test.tsx`
49
+ (red on 0.56.2).
50
+
51
+ ### Consumer action
52
+
53
+ - None. A consumer that relied on a copy-only built-in column beside its own custom column sees
54
+ that column go away; its copy is in the custom column.
55
+
3
56
  ## 0.56.2
4
57
 
5
58
  - **`BottomSheetHeader`'s Back button has a name.** It was an unnamed icon button (screen
@@ -1239,7 +1292,7 @@ on the server; drop any app-side copy of the palette.
1239
1292
 
1240
1293
  ## 0.38.0 — 2026-09-23
1241
1294
 
1242
- **On desktop a Dialog is a window, not a wall.** (register ARE-006, `common-docs/projects/ai-reachable-everywhere/REGISTER.md`.)
1295
+ **On desktop a Dialog is a window, not a wall.** (register ARE-006, `common-docs/systems/platform/ui-shell/projects/ai-reachable-everywhere/REGISTER.md`.)
1243
1296
 
1244
1297
  Arman, on a blocking settings dialog: *"none of the built-in page ai integrations are accessible because the page is totally blocked."* Unless the caller passes `modal`, a desktop `Dialog` no longer blocks the page: no overlay, and the page, its menus and every AI control beside it stay usable. It behaves like a light window:
1245
1298
 
package/README.md CHANGED
@@ -242,4 +242,8 @@ button event for callers that need modifier keys. A menu, editor or other React
242
242
  be declared in its own column: `{ id: "workflow", header: "Workflow", customActions: (row,
243
243
  controls) => <WorkflowMenu row={row} controls={controls} /> }`. Custom columns carry live
244
244
  record controls, never participate in sort/filter/copy/spreadsheet data, and are not draggable
245
- (their headers may contain controls). Hidden custom columns stay hidden in mobile cards too.
245
+ (their headers may contain controls). Hidden custom columns stay hidden in mobile cards too. A table with a visible custom column draws ONE actions column: the row copy rides inline at the
246
+ start of the first visible custom column, and the built-in row-actions column is drawn only for
247
+ standard icon `rowActions` or the window button. Under `fitToWidth` a custom column is as wide as
248
+ its widest row strip or its header, never a scaled share; when it ends the row it is pinned right
249
+ like the built-in column.