@ai-matrx/records-ui 0.86.0 → 0.88.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,92 @@
1
1
  # Changelog — @ai-matrx/records-ui
2
2
 
3
+ ## 0.88.1 (2026-09-26)
4
+
5
+ - **Fix (merged grid): hiding a column is kept again.** Every hide sent the whole column order
6
+ with it (`presentation.columnOrder`), and the store's view registry (`custom.view_keys()`) does
7
+ not take that key yet, so `view_look_set` refused the whole look — the hide was lost on reload
8
+ (found on the live walk). The order is now sent only when somebody actually moved a column; a
9
+ moved column is still refused by the store's own sentence until the registry takes
10
+ `presentation.columnOrder` (reported to the custom-data lead). RED → GREEN in
11
+ `the-merged-grid-carries-the-older-grids-controls.test.tsx`.
12
+
13
+ ## 0.88.0 (2026-09-26 — type-to-edit; needs @ai-matrx/design-system 0.43.0)
14
+
15
+ - **Type to edit (both grids).** Select a cell and type: the cell opens ITS OWN Field editor
16
+ holding what was typed — a letter, an IME composition, an Option/AltGr character, dictation —
17
+ through design-system 0.43's type catcher and `spreadsheet.onEditRequest`. A column a person
18
+ types into opens with the typed text replacing the value (numbers only when it is a number); a
19
+ picker column opens as usual; a worked-out column or a row this person may not write swallows
20
+ nothing. The editor opens with the caret at the end. `GridEditing.begin(address, seed?)`.
21
+ - **"Who changed this?" moved off the bare `h`** (it clashed with typing): Option-Shift-H
22
+ (`asksWhoChanged`, read off `code`), the cell's own badge, and the merged grid's right-click
23
+ Cell section ("Who changed this? ⌥⇧H").
24
+ - Test doubles: `store-rule-gaps.test.tsx` answers `field_options` (the column settings read an
25
+ existing choice column's words for its colours) — 0.87.0's CI publish failed on it.
26
+
27
+ ## Unreleased
28
+
29
+ - **Fix: the one toolbar row never overlaps and never spills** (lane V25-UI-FIXES; VERIFIER-25 on
30
+ production at 1600 px: with Settings open, the purple *Settings* button and the grid's *Manual*
31
+ sort chip overprinted; with a personal look pending the row ran to 1663 px in 1532 px, *New record*
32
+ cut to "Ne", *Layout* past the edge). The layout's slot in `TablePage`'s row is its own sideways
33
+ scroller, so what a layout draws there can never spill over the buttons after it; every piece
34
+ after the slot keeps its width. The row MEASURES its pieces (`useToolbarFit`, `toolbarFit.ts`) and,
35
+ when they do not fit, folds the least it must — first your look's three doors into one
36
+ **Your look** menu (same doors, same words), then the inline layout chooser into the table's menu
37
+ (where a phone already has it) — from widths measured unfolded, so it never flips back and forth.
38
+ Pure `toolbarFold` and the layout pair guard `overlappingPieces` are exported for walks. Suites:
39
+ `the-toolbar-row-never-overlaps.test.tsx` RED 5/5 on 0.87.0 bytes → GREEN 5/5;
40
+ `toolbarFit.test.tsx` 8/8. **When even the folded row cannot hold the layout's controls** (the
41
+ Settings rail open beside the table, a phone), the slot scrolls and never hides that it does: the
42
+ end that hides controls fades (`data-clipped` on the slot, `useSlotScroll` / `clippedEnds`), and a
43
+ mouse wheel over the slot scrolls it sideways. Walked on the harness (source bytes, dev clone,
44
+ admin's Grid Parity Fixture) at 1600, 390 and 320: 28/28, no two controls ever overlap.
45
+
46
+ ## 0.87.0 (2026-09-25 — one-grid merge step 5 + tranches 6a / 6b; needs @ai-matrx/design-system 0.42.0)
47
+
48
+ - **THE MERGED GRID, behind a temporary switch (`RecordsUiHost.grid?: "classic" | "merged"`,
49
+ default `classic`).** Arman and the custom-data lead ruled that the older /data grid's behaviour
50
+ becomes THE table grid in this package. `merged` lays its control layer over `Grid`'s data paths
51
+ (`gridControls.tsx`, pure builders in `gridMenus.ts`):
52
+ - **Column header menu** (`MatrxColumnDef.headerMenu`): Rename column, Column settings…, Insert
53
+ column left… / right…, Use as row label (`title_field`), Hide column, Delete column… — each
54
+ through the store's own doors (`field_update`, `field_declare` via `FieldEditor`,
55
+ `field_retire`, the table record's `title_field`); a person who may not change the table's
56
+ shape sees each item with the reason, never a dead one.
57
+ - **Right-click** (`contextMenu.sections`): Cell (copy, paste, clear, who changed this, show rows
58
+ with this value), Row (open record, row history, copy row, insert row above/below on a
59
+ hand-ordered view, duplicate, delete), Column (sort A→Z / Z→A / clear, plus the header items),
60
+ Table (new record, add column); a selected range gets copy / clear / fill down. Every write is
61
+ the grid's own versioned cell write.
62
+ - **Column order and hidden columns are kept on the view's look** (`presentation.columnOrder` —
63
+ new, sparse like `widths` — and `presentation.hiddenFields`), written through
64
+ `onPresentationChange` (the table page's `view_look_set`), so they survive a reload.
65
+ - A column inserted left/right of another lands beside it in the view's order.
66
+ - **Merge step 5 (pure refactor):** `Grid.tsx`'s drawing parts moved to `gridColumns.tsx`
67
+ (`columnForField`, `workedOutFrom`, `reorderItems` still exported from `Grid`).
68
+ - **A reader can copy (both grids):** readers get the spreadsheet cursor with `readOnly` — range
69
+ select, select all, Cmd-C — and every write gesture says why it cannot run.
70
+ - **A choice wears the colour its column keeps (both grids, tranche 6f early):** the Field's own
71
+ `display_format.options.choices` colours (what the /data-v2 Sheet's seam writes) now paint choice
72
+ chips (design-system `CELL_TINT_CLASS`) and the colour-by lookup; a word with no kept colour
73
+ still reads plain / hashes as before (`choiceLooks.ts`).
74
+ - **Column settings edit an existing column's look** (`FieldEditor`): per-choice colours
75
+ (`ChoiceColorsEditor`) and "Shows as" for plain columns (`ShowsAsPicker`, the design-system
76
+ format registry), both sent as the Field's `display_format` in the same `field_update`;
77
+ `formatForField` now honours a plain column's `display_format` (`shownAsOf`).
78
+ - **Fix:** `Grid` called a hook after its refusal early-return, so a refused table read threw
79
+ "Rendered fewer hooks than expected" instead of drawing the store's sentence (exposed when
80
+ `useTable` moved to `read_records_by_ids`). The clinic testkit models that door.
81
+ - **Guard:** `the-package-imports-no-app.test.tsx` — no source file imports `next/*`, `@/…`,
82
+ supabase or redux.
83
+
84
+ ## 0.86.1
85
+
86
+ Automatic changed-only republish (docs/metadata drift since the last tag — see
87
+ `git diff npm/records-ui/v0.86.0..npm/records-ui/v0.86.1 -- apps/shared/records-ui`).
88
+ No source changes intended and no consumer action required.
89
+
3
90
  ## 0.86.0 (2026-09-25 — version and notes set by PUBLISHER-5; needs @ai-matrx/design-system 0.40.0)
4
91
 
5
92
  - **A text kept as a file is edited WHOLE (lane BIG-VALUES-WRITE, owner 2026-09-25: "Make sure that
@@ -3814,3 +3901,4 @@ First release: `Grid`, `RecordForm`, `FieldEditor`, `TableSettings`,
3814
3901
  `CustomFieldsSection`, plus the `RecordsUiProvider` rights port and the shared
3815
3902
  refusal surface. Every one of them is proven headlessly against the rehearsal
3816
3903
  branch by `pnpm test`.
3904
+