@ai-matrx/records-ui 0.85.4 → 0.85.6
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 +124 -2
- package/dist/index.cjs +2907 -2592
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +266 -14
- package/dist/index.d.ts +266 -14
- package/dist/index.js +2251 -1935
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,116 @@
|
|
|
1
1
|
# Changelog — @ai-matrx/records-ui
|
|
2
2
|
|
|
3
|
-
## Unreleased — lane
|
|
3
|
+
## Unreleased — lane S5-PRIME (2026-09-24)
|
|
4
|
+
|
|
5
|
+
* **`ActionInbox` reaches Linear's and Superhuman's table stakes.** Grouped by kind (default:
|
|
6
|
+
Approvals, Agent proposals, Assigned to you) or by table, each heading counted; a `Group by`
|
|
7
|
+
control and `g` cycle kind → table → none; `j/k`, `x`, `a/d` walk the rows in the order they are
|
|
8
|
+
drawn. `h` / "Show decided" brings closed items in, and **a closed item says who decided it and
|
|
9
|
+
when** ("Approved by … · <time>", or "Withdrawn when … archived it") with the store's sentence and no
|
|
10
|
+
controls. **An empty inbox says why** (what arrives here; nothing ever decided; or, narrowed to a
|
|
11
|
+
table, how many wait in other tables with "Show all"). `tableId` now actually narrows (it kept every
|
|
12
|
+
row). Exports `groupInbox`, `InboxGrouping`, `INBOX_GROUPINGS`; `enumLabels` adds
|
|
13
|
+
`WORK_INBOX_KIND_GROUP_LABEL`, `WORK_APPROVAL_STATES`, `WORK_APPROVAL_STATE_LABEL`. Suite
|
|
14
|
+
`inbox-groups-and-closed-items.test.tsx`: RED 6/6 on the prior bytes, GREEN 6/6. Needs
|
|
15
|
+
`@ai-matrx/records` with the S5-PRIME `WorkInboxItem` fields.
|
|
16
|
+
|
|
17
|
+
## Unreleased — lane VIEW-KEYS-SHEET (2026-09-24)
|
|
18
|
+
|
|
19
|
+
* **The Sheet is designated one way: `layout: "sheet"`.** `designatedLayoutOf` no longer reads the
|
|
20
|
+
mover's mark (`moved_from.kind = "default_view"` with no layout) as the Sheet; `moved_from` is
|
|
21
|
+
provenance only. The store's view-keys registry declares `sheet` as a layout, the mover writes it,
|
|
22
|
+
and a production repair wrote it on every copied table's default view (none left on the mark
|
|
23
|
+
alone — measured on production before this change). Suites: `a-table-opens-the-way-it-was-designated.test.tsx`
|
|
24
|
+
(the mark alone designates nothing: RED on the prior bytes, GREEN), `the-designated-default-wins-over-a-seed.test.tsx`.
|
|
25
|
+
|
|
26
|
+
## Unreleased — lane UI-FIX-18 (2026-09-24)
|
|
27
|
+
|
|
28
|
+
* **A card is titled by what names its record** (VERIFIER-18 H5). New `cardTitleField(fields, titleKey,
|
|
29
|
+
exclude)` in `names.ts`: the Table's `title_field` → a conventional name key → the first text column
|
|
30
|
+
in declared order → any other column that can title; never a checkbox, the group/stage column or a
|
|
31
|
+
system stamp. The kanban, the calendar and the pipeline all read it (the kanban used to take the
|
|
32
|
+
first non-group column, so a board grouped by Stage read "false"/"true"). The table's title column
|
|
33
|
+
is handed down by the host that already read the table — new `ViewSwitcher` prop `titleField`
|
|
34
|
+
(TablePage passes it) and `PipelineBoard` prop `titleKey`; neither reads the table a second time.
|
|
35
|
+
Suite `a-card-is-titled-by-what-names-its-record.test.tsx` (RED 1/7 on the prior bytes, GREEN 7/7).
|
|
36
|
+
* **A date is a date — the control and the text follow the stored value, never `config.kind` alone**
|
|
37
|
+
(correction to the 0.85.6 date line). `carriesTimeOfDay(field, value)` / `dateFormatFor(field, value)`
|
|
38
|
+
read the value's shape: a value with no time part (a date of birth on a `kind: "datetime"` Field) gets
|
|
39
|
+
a date-only control and a date-only reading in the grid, the form, the panel and the calendar; with no
|
|
40
|
+
value, only `format: "datetime"` or the store's own Created / Last changed stamps carry a time. The
|
|
41
|
+
one-day-early fix stays: a bare date is read as a local calendar day. The recorded public form's
|
|
42
|
+
"date of birth" asks for a date again (`demo/form-runner.test.tsx` GREEN on the unchanged fixture);
|
|
43
|
+
the date suite gains the birthday clauses (GREEN 15/15).
|
|
44
|
+
* **A dashboard save is confirmed, and what the store did not keep is said** (VERIFIER-18 M2). Every
|
|
45
|
+
`declare()` on the canvas (shape, grouping, comparison, target, remove) reads the dashboard back and
|
|
46
|
+
`whatTheStoreDidNotKeep(sent, stored)` names any setting the store answered differently, on its block
|
|
47
|
+
("The store did not keep its comparison for “Jobs by status”…"), in a status line; the controls show
|
|
48
|
+
what the store really holds. Suite `a-dashboard-save-says-what-the-store-did-not-keep.test.tsx`
|
|
49
|
+
(RED 4/4 on the prior bytes, GREEN 4/4); S3 and canvas suites still green.
|
|
50
|
+
* **A withheld value says why, in every layout** (VERIFIER-18 H1, the screen half). New `withheld.tsx`
|
|
51
|
+
is the one helper: `withheldNoticeOf(hidden, key)`, `withheldSentence(field, notice)` (the store's
|
|
52
|
+
own `says` — "Budget with contingency is worked out from Budget, which you have not been given." —
|
|
53
|
+
or its reason, the level it needs and the other way in), `WithheldValue` and `WITHHELD_WORD`.
|
|
54
|
+
`RecordValue` takes `withheld` and draws "Withheld" with the sentence on hover and for screen
|
|
55
|
+
readers, never "—"; the grid cell, the editing cell, the gallery, the record panel and the public
|
|
56
|
+
page hand it `row.hidden[key]`; every card (kanban, calendar, pipeline, unplaced list) reads one
|
|
57
|
+
`cardWords(record, field, labels)`; the export writes "Withheld: <sentence>". A source guard refuses a
|
|
58
|
+
`<RecordValue` that draws a row's value without its notice. Suite
|
|
59
|
+
`a-withheld-value-says-why-in-every-layout.test.tsx` (RED 5/6 on the prior bytes, GREEN 6/6).
|
|
60
|
+
* **`TablesHome makingOnly`** (VERIFIER-18 M3): only the ways to make a table (New table, Start from an
|
|
61
|
+
example, the import that follows) and none of the lists — no table sections, no dashboards list (and
|
|
62
|
+
no `dashboards` read), no booking pages, no "Show everything" line. matrx-frontend's organization hub,
|
|
63
|
+
which lists the organization's tables (pick lists under "Kept by the app"), dashboards and booking
|
|
64
|
+
pages itself, passes it once this version is in its lockfile, so the page draws one list. Default
|
|
65
|
+
false. Suite `the-organization-page-lists-its-tables-once.test.tsx` (RED 1/2 on the prior bytes,
|
|
66
|
+
GREEN 2/2).
|
|
67
|
+
* **Exported for hosts:** `resolveTableStyle` and `styleFromDecorations` (the one color resolver —
|
|
68
|
+
matrx-frontend's Sheet moves onto them and deletes its own translation once this version is in its
|
|
69
|
+
lockfile), the date helper (`dateText`, `calendarDayOf`, `calendarDayLabel`, `carriesTimeOfDay`,
|
|
70
|
+
`dateFormatFor`, `hasTimePart`, `isDateField`) and `cardTitleField`.
|
|
71
|
+
|
|
72
|
+
## 0.85.6 (2026-09-24 — published by PUBLISH-SWEEP-5)
|
|
73
|
+
|
|
74
|
+
**Needs `@ai-matrx/records` 0.58.4** (published first: its catalogue carries the doors this release
|
|
75
|
+
draws — `table_home`, `table_move`, `portal_form`, the `entity_reference` kind). 0.85.5 (the release
|
|
76
|
+
run's automatic tag) never reached npm: `every-kind-the-store-takes-is-on-the-menu` found
|
|
77
|
+
`entity_reference` published by the store with nothing classifying how the menu sends it (it goes as
|
|
78
|
+
its word, with `allowed_types`, exactly like `signature`); and `every-table-row-says-where-it-lives`
|
|
79
|
+
asserted the door-absent sentence for `custom.table_home`, which is live now — it asserts the store is
|
|
80
|
+
asked once, when the chip is pressed, and that its organization is drawn (RED on the pre-apply
|
|
81
|
+
catalogue, GREEN on the live one).
|
|
82
|
+
|
|
83
|
+
### Lane UI-FIX-18 (2026-09-24)
|
|
84
|
+
|
|
85
|
+
* **A date reads the same day in every layout, in every time zone** (VERIFIER-18 H2). New `dates.ts`
|
|
86
|
+
is the one date helper: `dateText` prints through the design system's registry (`formatFieldValue`,
|
|
87
|
+
what the grid already used), `calendarDayOf` / `calendarDayLabel` file and head a calendar day
|
|
88
|
+
without UTC midnight, `carriesTimeOfDay` / `dateFormatFor` read `config.kind` (with the older
|
|
89
|
+
`format: "datetime"` honoured). `scalarText` (gallery, cards, record panel, history), the calendar,
|
|
90
|
+
the date editor and `formatForField` all read it. A bare `2026-04-01` is Apr 1 in Los Angeles and in
|
|
91
|
+
Tokyo, never Mar 31. Suite `a-date-reads-the-same-day-in-every-layout.test.tsx` (RED 7/13 on the
|
|
92
|
+
prior bytes, GREEN 13/13), with a source guard refusing `toISOString().slice(0, 10)` and UTC-midnight
|
|
93
|
+
dates in any screen.
|
|
94
|
+
* **Created time and Last changed time print like every other date and time** (VERIFIER-18 M1):
|
|
95
|
+
`formatForField` answers `{ id: "datetime" }` for `config.system` `created_time` / `modified_time`, so
|
|
96
|
+
the grid, gallery, record panel and the panel's "Worked out by the system" line read
|
|
97
|
+
*Sep 24, 2026, 5:13 PM*, not `2026-09-25T00:13:34.564Z`.
|
|
98
|
+
|
|
99
|
+
### Lane DATA-V2-FACE-2 (2026-09-24)
|
|
100
|
+
|
|
101
|
+
* **One name, one place: the Grid draws no name of its own.** `Grid` no longer draws the table's name
|
|
102
|
+
and row count above the records, nor the design system's per-browser working-view tabs ("Default
|
|
103
|
+
view" + "+") and "Default view ▾" menu (`viewTabs={false}`, no `tableId` handed to `MatrxDataTable`).
|
|
104
|
+
The page that places the grid names the table; the page's view bar is the one place views live; the
|
|
105
|
+
data table's footer counts the rows. `toolbarActions` still draw, on their own row, only when given.
|
|
106
|
+
Suite: `the-grid-names-nothing-the-page-already-names.test.tsx` (RED 3/3 on the prior bytes, GREEN 3/3).
|
|
107
|
+
* **`defaultViewOf(views)`** — when two views both claim the table's default (the mover's designated
|
|
108
|
+
Sheet and a page seed a later move of the view bar's older store brings in, both "All records"), the
|
|
109
|
+
designated one wins; `ViewBar` opens on it. Suite `the-designated-default-wins-over-a-seed.test.tsx`.
|
|
110
|
+
* **`WhereItLives` `variant="title"`** — quiet, frameless, for the page header beside the object's name
|
|
111
|
+
(matrx-frontend's /data-v2 table header uses its own copy today; the swap keeps the look).
|
|
112
|
+
|
|
113
|
+
### Lane DATA-V2-FACE (2026-09-24)
|
|
4
114
|
|
|
5
115
|
* **A table opens the way it was designated, and its face is one row.** `TablePage` draws, above the
|
|
6
116
|
records, only the saved-views bar (when the table has two or more views, or the person asked for it),
|
|
@@ -17,13 +127,16 @@
|
|
|
17
127
|
(no second "All records" is seeded beside it). A package layout (`grid`, `kanban`…) never designates,
|
|
18
128
|
because a click writes those; on a designated table a layout picked from the menu is for the visit and
|
|
19
129
|
is never written over the designation.
|
|
130
|
+
* `TablePage` takes `leading` (the host's quiet where-it-lives chip, at the start of the one row) and
|
|
131
|
+
`menuExtras` (host capabilities in the table menu, e.g. "When a row changes, run an agent…").
|
|
132
|
+
`designatedLayoutOf`, `tableOpening` and `TABLE_MENU` are exported.
|
|
20
133
|
* `ViewSwitcher` takes `chooser={false}` (the page draws the choice) and `openExport`; a host layout's
|
|
21
134
|
`render` receives `openExport`, so the Sheet's "Export this table…" opens the page's own export.
|
|
22
135
|
`ViewBar` takes `quietWhenAlone` and `onViews`.
|
|
23
136
|
* Tests: `a-table-opens-the-way-it-was-designated.test.tsx` (RED 3/3 against the pre-lane page, GREEN
|
|
24
137
|
8/8); `every-table-can-reach-its-archive.test.tsx` now reaches Archived through the menu.
|
|
25
138
|
|
|
26
|
-
|
|
139
|
+
### Lane SC-1-TAILS (2026-09-24)
|
|
27
140
|
|
|
28
141
|
* **`WhereItLives`** — the one chip for "Lives in <organization>" and moving a table, moved here from matrx-frontend
|
|
29
142
|
so every host (and `TablesHome`) mounts the same builder. The consequence is said in the panel before "Move it";
|
|
@@ -35,6 +148,12 @@
|
|
|
35
148
|
* **Consumer action:** matrx-frontend passes `organizationName` to `TablesHome` in `OrganizationHub.tsx` and swaps
|
|
36
149
|
its three `WhereItLives` call sites to this export.
|
|
37
150
|
|
|
151
|
+
## 0.85.5
|
|
152
|
+
|
|
153
|
+
Automatic changed-only republish (docs/metadata drift since the last tag — see
|
|
154
|
+
`git diff npm/records-ui/v0.85.4..npm/records-ui/v0.85.5 -- apps/shared/records-ui`).
|
|
155
|
+
No source changes intended and no consumer action required.
|
|
156
|
+
|
|
38
157
|
## 0.85.4 (2026-09-24 — published by PUBLISH-SWEEP-5; folds every section below down to 0.84.8)
|
|
39
158
|
|
|
40
159
|
**0.85.3 never reached npm** (the release run's automatic tag, run 36064683447): every test passed
|
|
@@ -80,6 +199,9 @@ integrator's sweeps (`79b505cfa5`, `9a6618f2d0`, `452e363c2e`) rather than their
|
|
|
80
199
|
Every change is one `custom.action_declare` with the whole list; a store refusal is shown under the
|
|
81
200
|
form and what was typed stays. Same controls as the field panel. Suite
|
|
82
201
|
`an-owner-writes-the-tables-own-buttons.test.tsx`: RED 6 on the bytes without the section, GREEN 8.
|
|
202
|
+
* **An agent action is never labelled "a column it changes is gone".** The store answers `runnable: false`
|
|
203
|
+
for every agent action; the badge is for update actions only (found on the live walk of Rincon's Invoices;
|
|
204
|
+
test RED → GREEN).
|
|
83
205
|
* **A button declared in settings appears on the grid beside it without a reload.** `rowActionsChanged(tableId)`
|
|
84
206
|
(gridActions.tsx): every mounted `useTableActions` of that table reads `custom.row_actions` again after a
|
|
85
207
|
declare. Test RED without the listener, GREEN with it.
|