@ai-matrx/records-ui 0.88.0 → 0.89.1

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,82 @@
1
1
  # Changelog — @ai-matrx/records-ui
2
2
 
3
+ ## 0.89.1
4
+
5
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
6
+ `git diff npm/records-ui/v0.88.1..npm/records-ui/v0.89.1 -- apps/shared/records-ui`).
7
+ No source changes intended and no consumer action required.
8
+
9
+ ## 0.89.0 (2026-09-26 — merged grid data paths: tranches 6k, 6c, 6d; needs @ai-matrx/records 0.58.20)
10
+
11
+ - **6k · the merged grid's page is the store's answer.** Search box, column filters, header sort and
12
+ page number go to `custom.read_records_page` (`useRecordPage`): a record on page six is found, a
13
+ sort orders the whole table, the count is the store's (`coverage.answeredBy: "source"`), and a
14
+ hand-ordered view pages in its hand order (`view_id`). Column filters become the store's one
15
+ filter shape (`gridPage.ts` `storeQuestion`: equality/null/date window flat; contains, ranges,
16
+ several choices and NOT as a Rule); a filter the store cannot ask is refused by name, never
17
+ applied to the loaded page. Realtime notices patch the rows on screen. Classic is unchanged.
18
+ - **6c · the selection bar works on many rows in ONE `custom.record_change_many`** (`gridBulk.tsx`):
19
+ Set a column (the Field's own editor), Clear a column, Fill down (top ticked row), Duplicate,
20
+ Delete (confirmed with the count), beside the table's row actions. One refused row refuses the
21
+ batch; the store's sentence is shown and nothing changed. The merged grid's paste and range
22
+ fill/clear are one `record_change_many` too.
23
+ - **6d · one undo** (`gridUndo.tsx`, on the design-system undo stack): a committed cell, a paste, a
24
+ bulk change, a range fill/clear and a row action each push ONE step; Undo (toolbar button with
25
+ depth, the notice's one Undo button, Cmd-Z) restores every touched cell in ONE
26
+ `record_change_many` (created rows archived, archived rows restored); Redo (Shift-Cmd-Z) writes
27
+ the after-values. A refused undo changes nothing and keeps the step. The spreadsheet primitive's
28
+ own stack is off in the merged grid (`undoDepth: 0`), so Cmd-Z has one meaning.
29
+ - `GridEditing.forget(cells)` and `useGridEditing({ onWritten })`; `useActionRunner({ onRan })`.
30
+ - Column order (`presentation.columnOrder`) is now a declared view key in the store
31
+ (`custom.view_keys()`, matrx-frontend migration `gridmerge_a_view_keeps_its_column_order.sql`), so a
32
+ moved column is kept on the view.
33
+ - RED → GREEN: `the-merged-grid-pages-edits-and-undoes-through-the-store.test.tsx` (11 of 16 red on
34
+ the 0.88.1 Grid).
35
+
36
+ Presentation tranches in the same release (6e, 6g, 6h, 6i):
37
+
38
+ - **6e · every format renders, edits and reads the same everywhere.** `RecordValue` draws a column's
39
+ "Shows as" (`Field.display_format`) through the registry wherever it is called — grid, record
40
+ panel, gallery, public page — with the older grid's rich drawings (`formattedValue.tsx`: stars,
41
+ a progress bar, mail / phone / web / maps links, a colour swatch, tag chips); card and sentence
42
+ text (`scalarText`) reads it too. A rating is ONE click in the grid (both grids; a second press on
43
+ the chosen star clears it). `FieldControl` is format-aware (`formatControls.tsx`): money typed
44
+ with its symbol and commas, a percent kept as a fraction typed as the percent a person reads
45
+ (45 → 0.45), stars, time, colour, email/link/phone inputs. **"Shows as" is the whole registry**
46
+ (`FieldFormatPicker.tsx`, replacing `ShowsAsPicker`): the formats that fit the column in the
47
+ registry's groups, then "Other kinds · changes what the column stores" (never JSON or a raw list,
48
+ never a worked-out kind), which retypes the column (`type` word) and sets its look in the SAME
49
+ `field_update`; each format's own options (currency, stored-as 45 or 0.45, decimals, duration
50
+ unit, out-of, date style, prefix/suffix, separators). Percent reads the stored `percentScale` and
51
+ never guesses. A `display_format` of `formula` is never a look.
52
+ - **6g · colours through the table's one colour door** (`gridColors.tsx`, merged grid): header menu
53
+ "Colour by…" (rows by a choice/tick column, only its cells, stop; Colour rules…; Highlight
54
+ column), right-click "Highlight cell" / "Highlight row" — each press writes ONE leaf through
55
+ `custom.table_decorate` by Field id and paints the store's answer at once. The rules dialog
56
+ (first match wins, row or cell) saves the whole list as one leaf. `useTableDecorations(tableId,
57
+ revision)` re-reads on the table's realtime notice, so another person's colour arrives live, and
58
+ exposes `apply`. A person without editor on the table sees the controls with the reason.
59
+ - **6h · the merged grid's footer is honest:** it appears only once a column is summarized
60
+ ("Summarize column" in the header menu, `summaryMenuItem`, the store's measures) and goes with
61
+ the last summary. The classic grid's footer is unchanged.
62
+ - **6i · what names each record** (`gridRowLabel.tsx`, table right-click "What names each
63
+ record…"): one column → `title_field` through the table record's update door; "Columns joined"
64
+ says the store's limit before anything is written (a store gap: the store names records by one
65
+ column's words). The label column wears a mark; the right-click Row section is headed by the
66
+ row's own name.
67
+ - RED → GREEN: `the-merged-grid-shows-formats-colours-summaries-and-row-labels.test.tsx` (18 of 20
68
+ red on the 0.88.1 bytes; 20/20 green).
69
+
70
+ ## 0.88.1 (2026-09-26)
71
+
72
+ - **Fix (merged grid): hiding a column is kept again.** Every hide sent the whole column order
73
+ with it (`presentation.columnOrder`), and the store's view registry (`custom.view_keys()`) does
74
+ not take that key yet, so `view_look_set` refused the whole look — the hide was lost on reload
75
+ (found on the live walk). The order is now sent only when somebody actually moved a column; a
76
+ moved column is still refused by the store's own sentence until the registry takes
77
+ `presentation.columnOrder` (reported to the custom-data lead). RED → GREEN in
78
+ `the-merged-grid-carries-the-older-grids-controls.test.tsx`.
79
+
3
80
  ## 0.88.0 (2026-09-26 — type-to-edit; needs @ai-matrx/design-system 0.43.0)
4
81
 
5
82
  - **Type to edit (both grids).** Select a cell and type: the cell opens ITS OWN Field editor
@@ -27,7 +104,21 @@
27
104
  (where a phone already has it) — from widths measured unfolded, so it never flips back and forth.
28
105
  Pure `toolbarFold` and the layout pair guard `overlappingPieces` are exported for walks. Suites:
29
106
  `the-toolbar-row-never-overlaps.test.tsx` RED 5/5 on 0.87.0 bytes → GREEN 5/5;
30
- `toolbarFit.test.tsx` 7/7.
107
+ `toolbarFit.test.tsx` 8/8. **When even the folded row cannot hold the layout's controls** (the
108
+ Settings rail open beside the table, a phone), the slot scrolls and never hides that it does: the
109
+ end that hides controls fades (`data-clipped` on the slot, `useSlotScroll` / `clippedEnds`), and a
110
+ mouse wheel over the slot scrolls it sideways. Walked on the harness (source bytes, dev clone,
111
+ admin's Grid Parity Fixture) at 1600, 390 and 320: 28/28, no two controls ever overlap.
112
+ - **Fix: every archive confirm says it can be restored from Trash** (lane V25-UI-FIXES; archived
113
+ store tables, records and saved views are listed by personal and Organization Trash since
114
+ TRASH-TABLES). The table's confirm (*Settings → This table → Archive this table*) and the grid's
115
+ record confirm now open with the platform's ONE archive sentence — *"This archives …. It leaves
116
+ this list, and you can restore it from Trash."*, the app's `archiveConfirmSentence` word for word,
117
+ exported here as `archiveConfirmSentence` — instead of "The store keeps them for 365 days, so it
118
+ can still be brought back" (from where?) and "waits in Archived items" (true, silent about Trash).
119
+ The record's confirm still names the table's own Archived items. This package draws no confirm
120
+ for archiving a saved view (census: none exists). Suite `every-archive-confirm-names-trash.test.tsx`
121
+ RED 2/2 on the prior bytes → GREEN 2/2.
31
122
 
32
123
  ## 0.87.0 (2026-09-25 — one-grid merge step 5 + tranches 6a / 6b; needs @ai-matrx/design-system 0.42.0)
33
124
 
@@ -3888,3 +3979,4 @@ First release: `Grid`, `RecordForm`, `FieldEditor`, `TableSettings`,
3888
3979
  refusal surface. Every one of them is proven headlessly against the rehearsal
3889
3980
  branch by `pnpm test`.
3890
3981
 
3982
+