@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 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.**