@ai-matrx/records-ui 0.62.0 → 0.65.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 +133 -0
- package/dist/index.cjs +372 -357
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +110 -10
- package/dist/index.d.ts +110 -10
- package/dist/index.js +366 -345
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,138 @@
|
|
|
1
1
|
# Changelog — @ai-matrx/records-ui
|
|
2
2
|
|
|
3
|
+
## 0.65.0
|
|
4
|
+
|
|
5
|
+
**A condition about a relation column stops asking a person to type a uuid.**
|
|
6
|
+
(lane RELATION-DISPLAY-2.)
|
|
7
|
+
|
|
8
|
+
* **`ConditionField` carried no type, so the ONE condition builder could not know a
|
|
9
|
+
column points at another record.** It drew the same plain text box every other
|
|
10
|
+
clause gets — and a relation's stored value is the other record's id (FLD-6 /
|
|
11
|
+
REL-1), so the only way to write a true clause was to find and TYPE a uuid. The
|
|
12
|
+
dispatcher's actual house rule, *"a job for Harborview Property Group cannot
|
|
13
|
+
leave Scheduled without a purchase order"*, was unwritable by exactly the person
|
|
14
|
+
the builder exists for. A box that accepts anything and can only produce a rule
|
|
15
|
+
matching nothing is law 4's dead control.
|
|
16
|
+
* `ConditionField` now carries an OPTIONAL `field`. When it is a relation, the value
|
|
17
|
+
control is **`RelationPicker`** — the same picker the cell uses, on the same
|
|
18
|
+
`relation_words_many` the cell reads — so a filter offers the column's own joined
|
|
19
|
+
words ("Harborview Property Group, Carpinteria") and writes the ID. A filter and
|
|
20
|
+
the column it filters can no longer disagree about what a record is called.
|
|
21
|
+
* It is asked for ONE record even when the column holds several: a clause compares
|
|
22
|
+
against one value, and a picker that let somebody choose three would write an
|
|
23
|
+
expression this row cannot draw back.
|
|
24
|
+
* Both callers in this package already held the whole `Field` and were throwing it
|
|
25
|
+
away one line before handing it over — `StageRules` and `FormBuilder`. In the form
|
|
26
|
+
builder this is the OWNER's screen; a stranger is still never asked a relation
|
|
27
|
+
question (`publicQuestions.ts` is untouched).
|
|
28
|
+
|
|
29
|
+
**Consumer action:** none — `field` is optional and a caller passing only
|
|
30
|
+
`{id, key, label}` gets exactly the old behaviour, which has its own clause. A host
|
|
31
|
+
that wants the picker passes the `Field` it already has.
|
|
32
|
+
|
|
33
|
+
*Numbered 0.65.0, not 0.64.0: a peer lane claimed 0.64.0 for the coercion primitive
|
|
34
|
+
while this work was in flight and tagged it first. Two lanes bumping one package in
|
|
35
|
+
one afternoon is the cost of a shared checkout; the fix is to move, never to take a
|
|
36
|
+
version somebody else's tag already names.*
|
|
37
|
+
|
|
38
|
+
## 0.64.0
|
|
39
|
+
|
|
40
|
+
**The paste and the editor stop owning their own opinion of a column, and the capture sheet
|
|
41
|
+
stops minting NaN.**
|
|
42
|
+
|
|
43
|
+
- **`editorKindFor` is `fieldKindFor`** (`@ai-matrx/records` 0.45.0) with this package's
|
|
44
|
+
kernel File/Person ids bound. The classifier body lived here and was the only one.
|
|
45
|
+
- **`valueFromPastedText` is one call to `coerceTypedAnswer`**, keeping this package's label
|
|
46
|
+
so a refusal names the column the way the grid's header does. Its 150-line body WAS the
|
|
47
|
+
coercion — and while it sat here, the public booking page was unbookable over any table
|
|
48
|
+
with a number field.
|
|
49
|
+
- **`ChoiceOptions`** is re-exported from the core instead of declared twice.
|
|
50
|
+
- **`CaptureRun`** used `Number(raw)`, which answers NaN for "about twelve" — and a NaN
|
|
51
|
+
becomes null on the wire, so a reading taken in a yard could silently record nothing. It
|
|
52
|
+
coerces through the one body now and KEEPS the typed text when the value is refused.
|
|
53
|
+
- **`ViewSwitcher`**'s calendar offer tested `kind === "datetime" || kind === "date"`. FLD-11
|
|
54
|
+
has no "date" kind; it compiled only because the old `EditorKind` union carried two words
|
|
55
|
+
nothing produced.
|
|
56
|
+
- **`BuildOrAsk`** (landed 0.63.x→here): "Ask an agent" is ABSENT when `mayBuild` is false —
|
|
57
|
+
asking an agent is the same act as building by hand, through the same doors.
|
|
58
|
+
- **One label map per enum** (`enumLabels.ts`): no panel keeps its own copy, and the
|
|
59
|
+
"Done"/"Finished" split between `ChecklistRunner` and `ActionInbox` is gone.
|
|
60
|
+
|
|
61
|
+
*Consumer action:* none. `EditorKind` is now an alias of `FieldKind`; a host that compared a
|
|
62
|
+
kind against `"date"` or `"boolean"` was comparing against a value the classifier never
|
|
63
|
+
returned.
|
|
64
|
+
|
|
65
|
+
## 0.63.0
|
|
66
|
+
|
|
67
|
+
**A relation cell finally SHOWS what its column was configured to show, and the
|
|
68
|
+
six hand-rolled copies of "what is this id called" are gone — all six, by moving
|
|
69
|
+
the code, none by allowlisting.** (lane RELATION-DISPLAY-2.)
|
|
70
|
+
|
|
71
|
+
* **The display spec reached the store in 0.62.0 and no screen could read it.**
|
|
72
|
+
REL-DISP gave a relation column a `display` — which of the target's columns it
|
|
73
|
+
shows, in what order, joined by what — and shipped `ReferenceBuilder` to
|
|
74
|
+
configure it. But `labels.tsx`, which every grid, board, gallery, calendar and
|
|
75
|
+
peek cell reads through, resolved names ITSELF: 200 rows of the target Table
|
|
76
|
+
plus `tableList()` for its `title_field`. So a person could set Rincon
|
|
77
|
+
Plumbing's `jobs.customer` to read "first name + last name", press Save, and
|
|
78
|
+
the board would go on drawing "Maria Chen" for both of the Maria Chens. The
|
|
79
|
+
builder wrote a setting that nothing displayed.
|
|
80
|
+
`labels.tsx` now fetches NOTHING up front and asks `relation_words_many` for
|
|
81
|
+
the ids the page actually draws — one call per Field per tick, the store's one
|
|
82
|
+
resolver, this column's own spec, the visibility ladder asked BEFORE the name
|
|
83
|
+
is read, and no 200-row prefetch ceiling. Its own comment recorded the batch
|
|
84
|
+
door as missing ("there is still no batch door on the store"); REL-DISP built
|
|
85
|
+
it, so the per-id `record_read` lane is gone entirely.
|
|
86
|
+
* **`RelationPicker` offers the same words the cell shows.** It had the third
|
|
87
|
+
copy of the derivation, which is why a column configured to read "Maria Chen —
|
|
88
|
+
Rincon" still asked a person to choose between two identical "Maria Chen"s.
|
|
89
|
+
One `relation_words_many` now covers the offered rows AND the already-picked
|
|
90
|
+
ids, so what you pick from and what you read back can never disagree.
|
|
91
|
+
* **`recordNameIn` / `rowNameIn` — the one naming call for a record whose Table
|
|
92
|
+
you already hold.** `Grid` (the Talk action), `Peek` (the peek title),
|
|
93
|
+
`PortalsPanel`'s client picker and the host test bench were each writing
|
|
94
|
+
`recordName(row.document, table.title_field)` out by hand. That is not the
|
|
95
|
+
store's question — there is no id to resolve — but it is the same question
|
|
96
|
+
answered five times in four files, which is how a Table titled by `cname` read
|
|
97
|
+
"Untitled" on one screen and correctly on the next. It lives once now.
|
|
98
|
+
NOT a second resolver: hold an id, and the answer is still the store's.
|
|
99
|
+
* **`check:one-reference-builder` goes from a baseline of SIX to ZERO.** The
|
|
100
|
+
guard shipped saying out loud that allowlisting the six "would be the same lie
|
|
101
|
+
with extra steps". None was allowlisted. Proven red on a planted copy at
|
|
102
|
+
baseline 0, then green.
|
|
103
|
+
|
|
104
|
+
**Consumer action:** none for a host that only mounts these components — the
|
|
105
|
+
change is behind them. A host resolving a relation label itself should delete
|
|
106
|
+
that code and call `client.relationWordsMany`; one holding a Table and a
|
|
107
|
+
document should call `recordNameIn` / `rowNameIn`.
|
|
108
|
+
|
|
109
|
+
## 0.62.0
|
|
110
|
+
|
|
111
|
+
**THE ONE REFERENCE BUILDER.** (lane RELATION-DISPLAY.)
|
|
112
|
+
|
|
113
|
+
*Written after the fact by lane RELATION-DISPLAY-2 — 0.62.0 published with no
|
|
114
|
+
entry here, and a released version with no changelog row is a version nobody
|
|
115
|
+
downstream can read. Sourced from that lane's own progress note, not invented.*
|
|
116
|
+
|
|
117
|
+
* **`ReferenceBuilder` + `previewWords`** — the one place a reference to another
|
|
118
|
+
table is built. It asks, in the order a person thinks of it: which table →
|
|
119
|
+
what a record of it is called TODAY (its own reference column, SHOWN rather
|
|
120
|
+
than hidden) → only if they want it, which columns instead, in order, with a
|
|
121
|
+
separator → a preview on that table's REAL first rows. `FieldEditor`'s private
|
|
122
|
+
`TableToPointAt` is deleted and this stands in its place.
|
|
123
|
+
* **A relation is asked its questions when EDITING too.** That branch skipped
|
|
124
|
+
every existing column that was not a choice list, so there was nowhere to say
|
|
125
|
+
which columns a link should show — the one thing about an existing relation a
|
|
126
|
+
person most wants to change. The target stays locked there, because the panel
|
|
127
|
+
sends no `relation_target` in a patch and a picker that changed it would be a
|
|
128
|
+
control that silently does nothing.
|
|
129
|
+
* **`looksLikeId` and `WITHHELD_RECORD_LABEL` are exported at last** — they were
|
|
130
|
+
defined and unreachable, so a host could not agree with the package about what
|
|
131
|
+
a name is.
|
|
132
|
+
|
|
133
|
+
**Consumer action:** a surface that lets a person choose a column's target table
|
|
134
|
+
mounts `ReferenceBuilder` instead of building its own dropdown.
|
|
135
|
+
|
|
3
136
|
## 0.61.0
|
|
4
137
|
|
|
5
138
|
**A link to a board opens a board, and a cell that is still resolving says what
|