@adia-ai/gen-ui 0.8.39 → 0.8.41
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 +19 -0
- package/README.md +1 -1
- package/compose/transpiler/transpiler-maps.js +54 -4
- package/corpus/chunk-embeddings.json +1 -1
- package/corpus/chunks/_index.json +288 -6
- package/corpus/chunks/_source-hashes.json +57 -57
- package/corpus/chunks/admin-shell-rounded-borderless.json +2 -1
- package/corpus/chunks/admin-topbar-search.json +4 -4
- package/corpus/chunks/agent-activity-feed.json +5 -5
- package/corpus/chunks/agent-prompt-library-grid.json +4 -4
- package/corpus/chunks/agent-rate-limit.json +1 -1
- package/corpus/chunks/agent-reasoning-collapsed.json +7 -7
- package/corpus/chunks/auth-new-password-form.json +1 -1
- package/corpus/chunks/auth-new-password.json +1 -1
- package/corpus/chunks/billing-overview.json +14 -14
- package/corpus/chunks/billing-progress-label.json +16 -16
- package/corpus/chunks/conversion-funnel-4-step-funnel.json +11 -11
- package/corpus/chunks/conversion-funnel-6step.json +17 -17
- package/corpus/chunks/conversion-funnel-wide-summary.json +11 -11
- package/corpus/chunks/conversion-funnel-with-segment-compare.json +11 -11
- package/corpus/chunks/dashboard-admin-page.json +2 -2
- package/corpus/chunks/dashboard-conversion-panel.json +10 -10
- package/corpus/chunks/dashboard-funnel.json +11 -11
- package/corpus/chunks/dashboard-overview-panel.json +13 -13
- package/corpus/chunks/dashboard-storage-card.json +14 -14
- package/corpus/chunks/dashboard-team-actions-storage.json +13 -13
- package/corpus/chunks/date-range-picker-canonical.json +51 -0
- package/corpus/chunks/date-range-picker-comparison.json +50 -0
- package/corpus/chunks/date-time-picker-form.json +5 -6
- package/corpus/chunks/drawer-report.json +5 -6
- package/corpus/chunks/filter-bar-filter-bar-with-table.json +4 -4
- package/corpus/chunks/form-system-live-demo.json +1 -1
- package/corpus/chunks/image-thumbnail-grid.json +5 -5
- package/corpus/chunks/inline-dialog-schedule.json +4 -6
- package/corpus/chunks/list-window-chat-thread.json +76 -0
- package/corpus/chunks/list-window-loading.json +39 -0
- package/corpus/chunks/loading-skeleton-placeholder.json +11 -11
- package/corpus/chunks/map-with-location-list.json +3 -3
- package/corpus/chunks/members-active-table-search-filter.json +4 -6
- package/corpus/chunks/patient-visit-shell.json +1 -1
- package/corpus/chunks/permissions-share-people.json +4 -4
- package/corpus/chunks/playground-app-shell.json +2 -1
- package/corpus/chunks/progress-tracker-milestones.json +1 -1
- package/corpus/chunks/rating-stars-review-summary.json +1 -1
- package/corpus/chunks/real-time-metrics-dashboard.json +1 -1
- package/corpus/chunks/search-with-filters.json +4 -4
- package/corpus/chunks/spinner-button-saving.json +50 -0
- package/corpus/chunks/spinner-button-uploading.json +49 -0
- package/corpus/chunks/spinner-centered-card.json +36 -0
- package/corpus/chunks/spinner-typing-indicator.json +41 -0
- package/corpus/chunks/time-picker-appointment-form.json +126 -0
- package/corpus/chunks/time-picker-min-max.json +50 -0
- package/corpus/chunks/timeline-events.json +3 -3
- package/corpus/chunks/timezone-selector-preview.json +3 -4
- package/corpus/chunks/usage-quota-meter-card.json +1 -1
- package/corpus/chunks/user-onboarding-checklist.json +1 -1
- package/corpus/chunks/video-player-controls.json +1 -1
- package/corpus/manifest.json +4 -4
- package/package.json +1 -1
- package/retrieval/README.md +1 -1
- package/retrieval/catalog.js +67 -40
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog — @adia-ai/gen-ui
|
|
2
2
|
|
|
3
|
+
## [0.8.41] — 2026-08-17
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
- **Union-typed catalog props (nullable number/object) coerce again (gh#1425, regression from gh#1329's PR #1418).** A nullable prop's catalog `type` is a JSON Schema UNION (`["number","null"]`, `["object","null"]`) — every `pdef.type === 'x'` strict-equality check in the transpiler's `extractCatalogProps()` type dispatch never matched the array form, so nullable props of ANY declared type (Progress.value, Input/Select's min/max/minlength/maxlength/precision, Chart.cornerRadius, InvoiceDetail.invoice, NotificationPreferences.channelEnabled) silently fell through to the catch-all string branch. New `hasType()`/`isNumberType()` in `compose/transpiler/transpiler-maps.js` matches both forms uniformly, closing the bug class for booleans/numbers/arrays/objects at once. The same file also stops `search-ui`'s self-referencing alias from claiming the reverse-registry slot, so the docs transpiler emits `"component": "Search"` again.
|
|
7
|
+
- **Category map derived from yaml, recursively, across both component trees (gh#1363 B9 + gh#1380, ADR-0065).** `retrieval/catalog.js` scanned only `components/<dir>/<dir-name>.a2ui.json`, missing family sidecars (`feed/feed-item.a2ui.json`, `tabs/tab.a2ui.json`) and the entire web-modules composite tree — every missed component silently defaulted its category to `other`. The scan is now recursive over both roots, and the engine's `categoryMap` derives from the ratified yaml category vocabulary instead of a hand-kept list.
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
- **Corpus re-harvested for the 0.8.41 catalog wave (gh#764 re-harvests + gh#1382 wave 1).** Four corpus-invisible components gain harvested chunks; the spinner/progress, date-time-picker, and toggle-family chunks re-harvested against the post-consolidation markup (`progress-ui[variant]` retirement, `calendar-picker-ui[precision]`, `segmented-ui[multiple]`); `corpus/chunks/_index.json` + `corpus/chunk-embeddings.json` regenerated. Generated artifacts — regenerated, not hand-edited.
|
|
11
|
+
|
|
12
|
+
### Maintenance
|
|
13
|
+
- **`validate/` touched in this release window** (1 file(s), e.g. `validate/catalog-package-load.test.js`) — carried by the entries above.
|
|
14
|
+
|
|
15
|
+
## [0.8.40] — 2026-08-15
|
|
16
|
+
|
|
17
|
+
### Maintenance
|
|
18
|
+
- **Lockstep version bump only.** No source changes in this package; bumped to maintain the lockstep version coherence enforced by `scripts/release/check-lockstep.mjs`. Substantive v0.8.40 work shipped in the ADR-0052/0053/0054/0056 attribute-grammar and token-convention breaking wave. See `packages/web-components/CHANGELOG.md#0840--2026-08-15` for details.
|
|
19
|
+
- **`compose/` touched in this release window** (1 file(s), e.g. `transpiler/transpiler-maps.js`) — carried by the entries above.
|
|
20
|
+
- **`corpus/` touched in this release window** (1 file(s), e.g. `chunks/_source-hashes.json`) — carried by the entries above.
|
|
21
|
+
|
|
3
22
|
## [0.8.39] — 2026-08-15
|
|
4
23
|
|
|
5
24
|
### Added
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ One-way dependency: `gen-ui → a2ui`. This package produces A2UI documents;
|
|
|
7
7
|
`@adia-ai/a2ui` is the protocol runtime that renders them. Nothing here is
|
|
8
8
|
required to *render* A2UI — only to *generate* it.
|
|
9
9
|
|
|
10
|
-
Minted by [ADR-0048](../../../docs/adr/adr-0048-a2ui-gen-ui-estate-split.md) by
|
|
10
|
+
Minted by [ADR-0048](../../../docs/ops/adr/adr-0048-a2ui-gen-ui-estate-split.md) by
|
|
11
11
|
folding together four previously separate packages.
|
|
12
12
|
|
|
13
13
|
## What's inside
|
|
@@ -137,6 +137,34 @@ const TYPE_ALIAS = (() => {
|
|
|
137
137
|
return m;
|
|
138
138
|
})();
|
|
139
139
|
|
|
140
|
+
/**
|
|
141
|
+
* gh#1425 (regression from gh#1329/PR #1418): a nullable prop's catalog
|
|
142
|
+
* `type` is a JSON Schema type UNION — e.g. `["number", "null"]`,
|
|
143
|
+
* `["object", "null"]` — not a bare string. Every `pdef.type === 'x'`
|
|
144
|
+
* strict-equality check in extractCatalogProps()'s type dispatch below
|
|
145
|
+
* never matched the array form, so a nullable prop of ANY declared type
|
|
146
|
+
* (numeric — Progress.value, Input/Select's maxlength/minlength/min/max/
|
|
147
|
+
* precision, Chart.cornerRadius; object — InvoiceDetail.invoice,
|
|
148
|
+
* NotificationPreferences.channelEnabled) silently fell through to the
|
|
149
|
+
* catch-all string branch instead of being coerced/parsed. `hasType()`
|
|
150
|
+
* matches a type name against either the bare-string form or an array
|
|
151
|
+
* containing it; every branch below uses it uniformly so this bug class
|
|
152
|
+
* closes for booleans/numbers/arrays/objects at once, not just numbers.
|
|
153
|
+
*
|
|
154
|
+
* @param {{type?: string|string[]}} pdef — catalog prop schema
|
|
155
|
+
* @param {...string} names — type name(s) to match against
|
|
156
|
+
* @returns {boolean}
|
|
157
|
+
*/
|
|
158
|
+
function hasType(pdef, ...names) {
|
|
159
|
+
if (typeof pdef.type === 'string') return names.includes(pdef.type);
|
|
160
|
+
return Array.isArray(pdef.type) && pdef.type.some((t) => names.includes(t));
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/** Numeric-prop convenience wrapper — gh#1425's own named fix target. */
|
|
164
|
+
export function isNumberType(pdef) {
|
|
165
|
+
return hasType(pdef, 'number', 'integer');
|
|
166
|
+
}
|
|
167
|
+
|
|
140
168
|
/**
|
|
141
169
|
* §163 generic extractor: pull every catalog-declared prop from the
|
|
142
170
|
* element's attributes. Type-aware (booleans become true on presence,
|
|
@@ -170,18 +198,18 @@ function extractCatalogProps(el, a2uiType) {
|
|
|
170
198
|
const raw = attr(pname) ?? (kebab !== pname ? attr(kebab) : null);
|
|
171
199
|
if (raw === null || raw === undefined) continue;
|
|
172
200
|
|
|
173
|
-
if (pdef
|
|
201
|
+
if (hasType(pdef, 'boolean')) {
|
|
174
202
|
// HTML boolean attr convention: presence (incl. empty string) = true.
|
|
175
203
|
// <input required> → raw === '' → true
|
|
176
204
|
// <input required=""> → raw === '' → true
|
|
177
205
|
// <input required="required"> → raw === 'required' → true
|
|
178
206
|
// <input required="false"> → raw === 'false' → false (defensive)
|
|
179
207
|
props[pname] = raw !== 'false';
|
|
180
|
-
} else if (pdef
|
|
208
|
+
} else if (isNumberType(pdef)) {
|
|
181
209
|
if (raw === '') continue;
|
|
182
210
|
const n = Number(raw);
|
|
183
211
|
props[pname] = Number.isFinite(n) ? n : raw;
|
|
184
|
-
} else if (pdef
|
|
212
|
+
} else if (hasType(pdef, 'array')) {
|
|
185
213
|
// TKT-0010: declarative JSON-array attribute (e.g. chart-ui/table-ui's
|
|
186
214
|
// data='[{...}]'), hydrated once at connect per those components' own
|
|
187
215
|
// yaml docs. Parse it — the raw string never satisfies the catalog's
|
|
@@ -193,7 +221,7 @@ function extractCatalogProps(el, a2uiType) {
|
|
|
193
221
|
const parsed = JSON.parse(raw);
|
|
194
222
|
if (Array.isArray(parsed)) props[pname] = parsed;
|
|
195
223
|
} catch { /* not valid JSON — skip */ }
|
|
196
|
-
} else if (pdef
|
|
224
|
+
} else if (hasType(pdef, 'object')) {
|
|
197
225
|
// gh#853 sibling of the array branch above: object-typed props (e.g.
|
|
198
226
|
// InvoiceDetail.invoice, NotificationPreferences.channelEnabled) are
|
|
199
227
|
// JSON-encoded HTML attributes too — same declarative-data convention,
|
|
@@ -217,6 +245,19 @@ function extractCatalogProps(el, a2uiType) {
|
|
|
217
245
|
const ALIAS_TYPES = new Set([
|
|
218
246
|
'Select', 'LoadingIndicator', 'ErrorContainer', 'Keyboard',
|
|
219
247
|
'DatePicker', 'CommandPalette', 'Segmented', 'OTP', 'SideNav', 'IconSource',
|
|
248
|
+
// 'search-ui' — registry.js's "AgentUI Aliases (backwards compat with
|
|
249
|
+
// -ui tags)" block registers the tag name itself as a self-referencing
|
|
250
|
+
// type (`['search-ui', 'search-ui']`) ahead of the real canonical
|
|
251
|
+
// `['Search', 'search-ui']` entry later in the file — first-write-wins
|
|
252
|
+
// let the alias claim the reverse-registry slot, so the docs transpiler
|
|
253
|
+
// emitted `"component": "search-ui"` instead of `"component": "Search"`
|
|
254
|
+
// for any harvested chunk composing <search-ui> directly (gh#1381 PR
|
|
255
|
+
// #1414 review — packages/gen-ui/engine/corpus/chunks/
|
|
256
|
+
// members-active-table-search-filter.json). Forward resolution
|
|
257
|
+
// (`resolveTag('search-ui')`) is untouched — this only reorders which
|
|
258
|
+
// type wins the REVERSE (tag → canonical type) lookup, same mechanism
|
|
259
|
+
// already used for 'Select' above.
|
|
260
|
+
'search-ui',
|
|
220
261
|
]);
|
|
221
262
|
|
|
222
263
|
// ── Reverse Registry: tag → primary A2UI type ────────────────────────────
|
|
@@ -400,6 +441,15 @@ export function extractProps(el, a2uiType) {
|
|
|
400
441
|
const spanAttr = attr('span');
|
|
401
442
|
if (spanAttr) props.span = spanAttr;
|
|
402
443
|
|
|
444
|
+
// Universal: preserve [density] for every element. Density is the ambient
|
|
445
|
+
// global attribute (compact | spacious, unset = standard) any element can
|
|
446
|
+
// carry (ADR-0054) — no .yaml declares it as a component prop (table-ui's
|
|
447
|
+
// own local `density` enum converged onto this global mechanism and
|
|
448
|
+
// dropped its yaml-declared prop, gh#1300), so the catalog-driven pass
|
|
449
|
+
// below silently drops it, same gap class as [slot]/[span] above.
|
|
450
|
+
const densityAttr = attr('density');
|
|
451
|
+
if (densityAttr) props.density = densityAttr;
|
|
452
|
+
|
|
403
453
|
// §163 (v0.5.4) — Catalog-driven generic extraction FIRST. Fills in
|
|
404
454
|
// every prop the v0.9 catalog declares for this type (label, icon,
|
|
405
455
|
// variant=, etc.). Legacy per-type blocks below run AFTER and can
|