@ai-matrx/records-ui 0.56.0 → 0.58.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 +68 -0
- package/dist/index.cjs +384 -224
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +392 -232
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,73 @@
|
|
|
1
1
|
# Changelog — @ai-matrx/records-ui
|
|
2
2
|
|
|
3
|
+
## 0.58.0
|
|
4
|
+
|
|
5
|
+
**A word pasted into a choice column becomes that option — and a paste is no
|
|
6
|
+
longer capped by the page it is looking at.**
|
|
7
|
+
|
|
8
|
+
**Pasting "Gold Annual" into a choice column.** Until now every word pasted into
|
|
9
|
+
a `select` or `multi_select` was refused outright: correct about a raw string,
|
|
10
|
+
and useless to Rincon Plumbing's office manager whose Service plan column says
|
|
11
|
+
"Gold Annual" forty times. Airtable, the champion here, matches the word to the
|
|
12
|
+
option labelled that word, and so does this.
|
|
13
|
+
|
|
14
|
+
* The grid now READS each choice column's options before the preview draws, so
|
|
15
|
+
the preview is an answer rather than a "loading" a person would have to
|
|
16
|
+
confirm blind.
|
|
17
|
+
* Matching ignores case and also accepts the option's key or id, so a round trip
|
|
18
|
+
through a spreadsheet comes back in. A multi-choice cell splits on commas and
|
|
19
|
+
semicolons and is written WHOLE or not at all — half a multi-choice answer is
|
|
20
|
+
a wrong answer, not a partial one.
|
|
21
|
+
* What is stored is the option RECORD'S ID (FLD-5/FLD-6), which is what the
|
|
22
|
+
store's own validator accepts — writing the slug would have made the preview
|
|
23
|
+
promise a write the door then refused.
|
|
24
|
+
* An unmatched word is REFUSED, naming the line, the column and the options that
|
|
25
|
+
ARE on offer, and **never silently created**: a typo promoted to a lifecycle
|
|
26
|
+
stage is a column nobody chose. The preview offers them back as ONE explicit
|
|
27
|
+
"Add these N options" action, pressed by a person; it sends the existing labels
|
|
28
|
+
back with the new ones (the door REPLACES the list) and re-plans, so the rows
|
|
29
|
+
land without pasting again.
|
|
30
|
+
|
|
31
|
+
**A 120-line paste against a 50-row page.** The page ceiling was never a paste
|
|
32
|
+
ceiling, and nothing exercised past it.
|
|
33
|
+
|
|
34
|
+
* The creates now chunk through `record_write_many` at the grid's own page size —
|
|
35
|
+
the number a person is looking at is the number that travels. A refused chunk is
|
|
36
|
+
refused whole, so every line in it is NAMED ("Rows 51-100: …"); updates stay one
|
|
37
|
+
at a time because they carry a per-row optimistic version and no bulk door can
|
|
38
|
+
honour it.
|
|
39
|
+
* The read-back PAGES. A single `limit: 500` read silently stopped counting at row
|
|
40
|
+
500, so a table that had grown past it reported values "missing" that were
|
|
41
|
+
sitting in it — a read-back that lies is worse than none.
|
|
42
|
+
|
|
43
|
+
**Consumer action:** none. `PastePreview` gains an optional `onAddOptions`; a host
|
|
44
|
+
that does not pass it simply does not offer the action.
|
|
45
|
+
|
|
46
|
+
## 0.57.0
|
|
47
|
+
|
|
48
|
+
**The builders are usable where a person actually reaches them: a 384px rail.**
|
|
49
|
+
|
|
50
|
+
The first browser walk (lane BUILDERS, Ironline Fitness, 2026-09-21) pressed
|
|
51
|
+
"Build the form" on a real gym's members table and got a preview of an empty
|
|
52
|
+
form and **no controls at all**. `FormBuilder` was authored as two desktop
|
|
53
|
+
columns — controls left, live preview in a `w-96` aside right — and the rail it
|
|
54
|
+
is mounted in is itself `w-96`, so the fixed-width preview took the entire rail
|
|
55
|
+
and squeezed the controls to nothing. The screen looked like a builder and could
|
|
56
|
+
not build.
|
|
57
|
+
|
|
58
|
+
A viewport breakpoint cannot fix that: the viewport was 1680px wide while the
|
|
59
|
+
container was 384px. Every split in these four screens is now a **container
|
|
60
|
+
query**, so they are the same screen in a rail, a dialog or a full page:
|
|
61
|
+
|
|
62
|
+
* `FormBuilder` stacks to one column and its preview goes full-width below the
|
|
63
|
+
controls until the component itself is wide enough for two (`@3xl`).
|
|
64
|
+
* `BookingBuilder`, `PortalBuilder` and `DigestScheduler` drop their two-column
|
|
65
|
+
grids and fixed-width inputs to one column under `@md`.
|
|
66
|
+
|
|
67
|
+
**Consumer action:** none. The host must already scan this package's `dist` for
|
|
68
|
+
Tailwind classes (`@source "…/@ai-matrx/records-ui/dist"`), which matrx-frontend
|
|
69
|
+
does; the container variants are generated from there like every other class.
|
|
70
|
+
|
|
3
71
|
## 0.56.0
|
|
4
72
|
|
|
5
73
|
**A condition the builder cannot draw is said in words, not blanked.**
|