@ai-matrx/records-ui 0.84.4 → 0.84.8

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,76 @@
1
1
  # Changelog — @ai-matrx/records-ui
2
2
 
3
+ ## 0.84.8
4
+
5
+ **A host's own layout sits beside Grid, Kanban, Calendar and Gallery on the one table page.**
6
+ (lane GRID-PORT `5cb9bcbd99`, published by PUBLISH-SWEEP-4.) `RecordsUiHost.layouts?: HostLayout[]`
7
+ (`{ id, label, render({ tableId, filter }) }`) draws as a button in `ViewSwitcher`'s layout row;
8
+ `?view=<id>` opens it (`openingHostLayout`), and `onViewChanged` gets the id. It is page-level and is
9
+ never written onto the view record. A host id that is one of `PAGE_VIEWS`, or a spelling of one, is
10
+ ignored. **Consumer action:** matrx-frontend passes its ported /data grid as the Sheet layout.
11
+
12
+ ## Unreleased (source only — lane GRID-PORT; the chair's publisher owns the slot)
13
+
14
+ **A host can draw a layout beside the package's own four, on the one table page.**
15
+ `RecordsUiHost.layouts?: HostLayout[]` — `{ id, label, render({ tableId, filter }) }`. Each
16
+ appears as a button in `ViewSwitcher`'s layout row after Grid / Kanban / Calendar / Gallery, and
17
+ `?view=<id>` opens it (`openingHostLayout`); `TablePage.onViewChanged` is called with the id.
18
+ Page-level, never written onto the view record (the store's layout words stay the four). A host
19
+ id equal to one of `PAGE_VIEWS` (or a spelling of one) is ignored, so `?view=grid` is always the
20
+ package's Grid. Why: the owner's ruling (2026-09-23) — AI Matrx's ported /data grid is the
21
+ "Sheet" layout of `/data-v2/<table>`, not a second page for the same table.
22
+
23
+ Consumer action: `onViewChanged` now receives `PageView | string`; widen a handler typed
24
+ `(view: PageView) => void`.
25
+
26
+ ## 0.84.7 (unpublished — needs @ai-matrx/records 0.57.3)
27
+
28
+ * **The suite is green again (386/386), and the class is gone rather than patched.** 0.84.5's
29
+ publish gate went red in 15 files because records 0.57.2 made every table list ask
30
+ `custom.table_facts`. Only `TablesHome` sorts tables into sections, so only it asks now
31
+ (`client.tableFacts()` + `withTableFacts`); no test double had to learn the door. It says
32
+ `SECTIONS_UNKNOWN` only when the store has the door and it failed.
33
+
34
+ ## 0.84.6 (unpublished)
35
+
36
+ **A choice column that takes other values lets a person type one.** (lane STORE-RULE-GAPS.)
37
+ The production walk found the "A value that is not one of the choices is added to them" tick
38
+ saved, while the grid cell and the record form drew a closed drop-down — nothing could send an
39
+ off-list word. Now, on a column with `config.allow_other`, `FieldControl` (the one editor the
40
+ grid cell, the record form and the form runner draw) is the relation picker's shape: a search
41
+ over the choices and **Add “<typed>”** at the foot, which sends the word as typed (the store adds
42
+ it to the column's choices and stores its key). A word that already names a choice picks that
43
+ choice. Several-choices columns keep what was picked. Columns that do not take other values are
44
+ unchanged. The field editor's tick is gated on the same code path
45
+ (`CHOICE_EDITOR_ADDS_WHAT_IS_TYPED`). Paste keeps its own "add these options" step.
46
+
47
+ **One "pick or add" builder.** `PickOrAdd` (search box, list, Add/Create “<typed>” foot) is the
48
+ ONE layout both `RelationPicker` and the open choice editor are built from — same look, one place.
49
+ The choice editor orders choices by the store's own `metadata.option_position` (`inTheStoresOrder`),
50
+ so a choice added by typing is last, where the store put it, not wherever the lookup returned it.
51
+
52
+ Consumer action: none.
53
+
54
+ ## 0.84.5 (unpublished — needs @ai-matrx/records 0.57.2 published first)
55
+
56
+ **Mine is what you made, and an archived table's own address says it is archived.** (lane
57
+ HUB-FIX, guide re-walk 2026-09-23 + chair ruling.)
58
+
59
+ * `TablesHome`'s Mine section is the tables the person signed in MADE (`created_by`, folded in
60
+ by records 0.57.2's `tableList` from `custom.table_facts`), whatever their visibility — a new
61
+ internal table is under Mine AND My organization. When the store HAS `custom.table_facts`
62
+ and it does not answer, the page says so (`SECTIONS_UNKNOWN`) instead of filing everything
63
+ under My organization with Mine empty; when the store's catalogue does not carry the door at
64
+ all, nothing is asked and nothing is said (the door-presence pattern). `TablePage`'s archived
65
+ screen reads only the archive door every table already uses — it does not depend on
66
+ `table_facts`. `LANE_EMPTY.mine` says what is true under the new meaning.
67
+ * `TablePage` asks the archive (`client.tableArchived`) before saying a table is not here. An
68
+ archived table reads "This table is archived", who archived it and when, and **Bring it
69
+ back**; `TABLE_NOT_REACHABLE` no longer says "…or it may have been deleted".
70
+ * New exports `SECTIONS_UNKNOWN`, `TABLE_IS_ARCHIVED`. Full suite 379/379.
71
+
72
+ **Consumer action:** none beyond installing it with records 0.57.2.
73
+
3
74
  ## 0.84.4 (unpublished — needs @ai-matrx/records 0.57.1 published first)
4
75
 
5
76
  **The guide re-walk's small wrong things, each fixed as a class.** (lane RECORDS-UI-FIX,