@adia-ai/web-components 0.8.44 → 0.8.46

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.
Files changed (69) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/components/card/card.css +12 -23
  3. package/components/card/card.yaml +11 -0
  4. package/components/chart/chart.a2ui.json +16 -1
  5. package/components/chart/chart.class.js +611 -41
  6. package/components/chart/chart.css +174 -0
  7. package/components/chart/chart.d.ts +5 -1
  8. package/components/chart/chart.yaml +45 -1
  9. package/components/context-menu/context-menu.a2ui.json +8 -3
  10. package/components/context-menu/context-menu.class.js +46 -5
  11. package/components/context-menu/context-menu.d.ts +6 -3
  12. package/components/context-menu/context-menu.examples.md +2 -2
  13. package/components/context-menu/context-menu.yaml +22 -5
  14. package/components/field/field.css +24 -2
  15. package/components/index.js +1 -0
  16. package/components/input/input.css +7 -0
  17. package/components/nav/nav.a2ui.json +2 -2
  18. package/components/nav/nav.css +1 -1
  19. package/components/nav/nav.d.ts +1 -1
  20. package/components/nav/nav.yaml +14 -3
  21. package/components/nav-group/nav-group.css +37 -3
  22. package/components/pagination/pagination.class.js +52 -22
  23. package/components/search/search.class.js +39 -5
  24. package/components/select/select.a2ui.json +5 -0
  25. package/components/select/select.class.js +20 -0
  26. package/components/select/select.css +25 -0
  27. package/components/select/select.d.ts +2 -0
  28. package/components/select/select.yaml +12 -0
  29. package/components/table/cell-types.js +9 -0
  30. package/components/table/table.a2ui.json +19 -4
  31. package/components/table/table.class.js +410 -45
  32. package/components/table/table.css +7 -4
  33. package/components/table/table.d.ts +9 -3
  34. package/components/table/table.yaml +115 -9
  35. package/components/table-footer/table-footer.a2ui.json +150 -0
  36. package/components/table-footer/table-footer.class.js +391 -0
  37. package/components/table-footer/table-footer.css +64 -0
  38. package/components/table-footer/table-footer.d.ts +39 -0
  39. package/components/table-footer/table-footer.examples.md +46 -0
  40. package/components/table-footer/table-footer.js +17 -0
  41. package/components/table-footer/table-footer.yaml +219 -0
  42. package/components/table-toolbar/table-toolbar.a2ui.json +15 -0
  43. package/components/table-toolbar/table-toolbar.class.js +61 -17
  44. package/components/table-toolbar/table-toolbar.css +34 -0
  45. package/components/table-toolbar/table-toolbar.d.ts +10 -0
  46. package/components/table-toolbar/table-toolbar.yaml +58 -15
  47. package/core/data-stream.js +37 -2
  48. package/core/index.d.ts +1 -0
  49. package/core/index.js +1 -0
  50. package/core/provider.d.ts +9 -13
  51. package/core/provider.js +9 -113
  52. package/core/store.d.ts +46 -0
  53. package/core/store.js +89 -0
  54. package/custom-elements.json +192 -8
  55. package/dist/host.min.css +1 -1
  56. package/dist/host.sheet.js +1 -1
  57. package/dist/theme-provider.min.js +1 -1
  58. package/dist/web-components.min.css +1 -1
  59. package/dist/web-components.min.js +96 -96
  60. package/dist/web-components.sheet.js +1 -1
  61. package/package.json +1 -1
  62. package/patterns/chart-in-card/chart-in-card.examples.html +36 -9
  63. package/patterns/new-enrollments/new-enrollments.examples.html +140 -0
  64. package/patterns/new-enrollments/new-enrollments.html +54 -0
  65. package/patterns/table-in-card/table-in-card.examples.html +168 -0
  66. package/patterns/table-in-card/table-in-card.examples.js +139 -0
  67. package/patterns/table-in-card/table-in-card.html +86 -0
  68. package/styles/api/sizing.css +46 -0
  69. package/styles/components.css +1 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,38 @@
1
1
  # Changelog — @adia-ai/web-components
2
2
 
3
+ ## [0.8.46] — 2026-08-22
4
+
5
+
6
+ ### Maintenance
7
+ - **`components/` touched in this release window** (31 file(s), e.g. `card/card.css`) — carried by the entries above.
8
+ - **`dist/` bundles rebuilt** in this cut's window (4 file(s)) — regenerated from the source changes described above, not independent edits.
9
+ - **`patterns/` touched in this release window** (6 file(s), e.g. `chart-in-card/chart-in-card.examples.html`) — carried by the entries above.
10
+ - **`styles/` touched in this release window** (1 file(s), e.g. `styles/components.css`) — carried by the entries above.
11
+
12
+ ## [0.8.45] — 2026-08-20
13
+
14
+ ### Added
15
+ - **`createStore()` — a signal-backed store primitive in `core/store.js` (gh#1761).** `subscribe(cb) -> unsubscribe`, an `Object.is` no-notify guard, and interop with `UIElement.controller`; ships alongside a new `check-no-hand-rolled-stores.mjs` lint gate (gh#1779) that rejects new hand-rolled Set-of-listeners stores outside `core/`.
16
+
17
+ ### Changed
18
+ - **`for=`-carrying components normalized to an events-only interaction contract (gh#1764/#1780), ADR-0079.** `table-toolbar-ui` → `table-ui` direct writes/calls (`paginate=`, `search=`, `setFilter()`, `clearFilters()`, `columns=`) became five `toolbar-*` command CustomEvents with matching `table-ui` listeners — additive, zero observable-behavior change. `context-menu-ui`'s `for` (selector-flavored) renamed to `target-selector`, `for` kept as a deprecated back-compat alias.
19
+ - **`RouteController` deduplicated into `core/controller.js` (gh#1766).** `provider.js` now imports/re-exports the canonical location.
20
+ - **`[density="compact"|"spacious"]` re-declares `--a-space-*` at the scoped selector, not only `:root` (gh#1771, gh#570).** Element-scoped density was globally inert; `components/table/table.css`'s stale ADR-0054 comment corrected alongside.
21
+ - **Billing composites (`billing-overview`, `invoice-history`, `invoice-detail`, `plan-picker`) route fetch through `core/transport.js`, opting out of the `core/data-stream.js` auto-observer via a new `data-stream-managed="false"` marker (gh#1760).**
22
+ - **`select`/`table-toolbar` — visually-hidden `select` label (`[label-hidden]`) + actions-leading icon-only Filter/Columns reduction (gh#1748).**
23
+ - **`table-ui` adopts an `isEqualNode()`-based `adoptOrDiffChildren()` for SSR adopt-in-place, with `RENDERER_OWNED` `WeakSet` tagging for unconditional replacement of renderer-owned cells (gh#1678).**
24
+ - **`search-ui`/`pagination-ui` post-adopt attribute writes are idempotent under SSR zero-mutation (gh#1755).**
25
+ - **Three independently-authored path-walker implementations in `packages/gen-ui/a2ui/path-pointer.js` unified, preserving each call site's real divergent edge-case semantics rather than silently collapsing them (empty-path, primitive mid-path, doubled-slash) — mechanical staging toward ADR-0078's vendored-model migration.**
26
+
27
+ ### Docs
28
+ - **New `table-with-toolbar-in-card-header` demo** — `table-toolbar-ui` composed inside `card-ui`'s header (sole-child case; a real `card.css` grid/centering conflict documented for the heading+action-slot case, not yet supported).
29
+ - **`nav-group-ui`'s `[data-nav-label]` group-label hook documented (gh#1736).**
30
+ - **Render clock & external-store wiring doctrine ratified in `.claude/docs/specs/component-implementation-patterns.md` (gh#1777/#1778)** — `table-ui`'s rAF-batched render clock named as the sole verified exception to the microtask-flush contract; `BaseController` promoted as a `createStore()` adapter via its existing optional-chaining `controller` setter (no new adapter code needed — the contract was already satisfied).
31
+
32
+ ### Maintenance
33
+ - **`dist/` bundles rebuilt** in this cut's window (6 file(s)) — regenerated from the source changes described above, not independent edits.
34
+ - **`styles/` touched in this release window** (2 file(s), e.g. `api/sizing.css`) — carried by the entries above.
35
+
3
36
  ## [0.8.44] — 2026-08-20
4
37
 
5
38
  ### Added
@@ -427,29 +427,18 @@
427
427
  border-radius: 0;
428
428
  }
429
429
 
430
- /* Guide/value/legend safety inset (gh#1095) [bleed]'s zero-inset is
431
- only collision-free for the bare-marks case: a sparkline (its
432
- renderer never emits axis ticks, gridlines, value labels, or a
433
- legend chart.class.js #renderSparkline), or any other chart-ui
434
- type with BOTH [no-grid] and [no-values] set (the author opted
435
- out of every text element). A chart that still draws guides or
436
- value text or is paired with a <chart-legend-ui> — needs
437
- clearance from the card's frame, or that text collides with the
438
- card edge and clips under the corner-rounded `overflow: hidden`
439
- (:scope, top of file). Restore the card's own inset automatically
440
- for those cases rather than relying on every author to remember —
441
- the :has() selector's specificity already beats the plain [bleed]
442
- reset above regardless of source order. Pairing a legend with a
443
- genuinely full-bleed chart still works — put the legend in its OWN
444
- section below, wired via chart-legend-ui[for="<chart id>"], which
445
- never enters this selector (see chart-in-card.examples.html's
446
- "Full-bleed chart + legend band" example). */
447
- & > section[bleed]:has(> chart-ui:not([type="sparkline"]):not([no-grid])),
448
- & > section[bleed]:has(> chart-ui:not([type="sparkline"]):not([no-values])),
449
- & > section[bleed]:has(> chart-legend-ui) {
450
- margin: var(--card-inset);
451
- padding: 0;
452
- }
430
+ /* [bleed] is unconditionally author-controlled (gh#1801, operator ruling
431
+ 2026-08-20 supersedes gh#1095's mechanical auto-restore, removed
432
+ here). A full-bleed chart-ui that still draws gridlines, value labels,
433
+ or is paired with a <chart-legend-ui> can clip that text under the
434
+ card's corner-rounded `overflow: hidden` (:scope, top of file) this
435
+ is now the AUTHOR's responsibility to avoid, not something this
436
+ stylesheet silently repairs by re-inserting an inset the author
437
+ explicitly opted out of. card.yaml's `bleed` prop docs and
438
+ chart-in-card.examples.html both carry the clipping-hazard note and
439
+ the recommended mitigation: render value/guide text as overlay chips
440
+ INSET within the plot area (never hanging outside it) rather than
441
+ relying on card margin for clearance. */
453
442
 
454
443
  /* ═══════ Footer ═══════
455
444
  Margin-based inset. Flex row for actions.
@@ -161,6 +161,17 @@ a2ui:
161
161
  row 2 without needing slot="description".
162
162
  - Multiple <section> siblings are allowed and stack vertically. [bleed] on a section removes its margin for edge-to-edge
163
163
  content (tables, charts); [padding] adds a canvas-scrim background for hero regions.
164
+ - >-
165
+ [bleed] is unconditionally author-controlled — card.css never restores
166
+ the section's inset on your behalf (gh#1801, operator ruling
167
+ 2026-08-20; supersedes gh#1095's removed auto-restore guard). A
168
+ full-bleed <chart-ui> that still draws gridlines or value labels, or is
169
+ paired with a <chart-legend-ui>, can clip that text under the card's
170
+ own corner-rounded overflow:hidden — keeping it clear of the card
171
+ frame is YOUR responsibility as the author, e.g. by rendering value/
172
+ guide text as overlay chips INSET within the plot area rather than
173
+ hanging outside it, or by placing a <chart-legend-ui> in its own
174
+ non-bled section. See chart-in-card.examples.html for the pattern.
164
175
  - >-
165
176
  When neither [raw] nor [frameless] is present, a <table-ui> placed
166
177
  directly inside a <section bleed> automatically renders chromeless
@@ -62,7 +62,7 @@
62
62
  "default": null
63
63
  },
64
64
  "data": {
65
- "description": "JS property (set programmatically — `el.data = [...]`). An array of plain objects; each object's keys are named by the `x` and `y` attributes — e.g. `<chart-ui x=\"month\" y=\"revenue\">` consumes `[{month:'Jan', revenue:3200}, {month:'Feb', revenue:4100}]`. The Chart.js `{labels, datasets}` envelope is NOT chart-ui's API — passing it (or any non-array value) renders an empty chart. May also be supplied declaratively as a JSON-array `data=\"[…]\"` attribute, hydrated once at connect. Custom accessor on the element class, not a reflected attribute.",
65
+ "description": "JS property (set programmatically — `el.data = [...]`). An array of plain objects; each object's keys are named by the `x` and `y` attributes — e.g. `<chart-ui x=\"month\" y=\"revenue\">` consumes `[{month:'Jan', revenue:3200}, {month:'Feb', revenue:4100}]`. The Chart.js `{labels, datasets}` envelope is NOT chart-ui's API — passing it (or any non-array value) renders an empty chart. May also be supplied declaratively as a JSON-array `data=\"[…]\"` attribute, hydrated once at connect. Custom accessor on the element class, not a reflected attribute. A datum object carrying a truthy `provisional` key (ADR-0081) renders that period's type-specific incomplete-period treatment (hollow/dashed bar, dashed line + faded area, hollow ring dot) on cartesian types; a no-op on radial/part-to-whole types and sparkline (gh#1690's N/A list). Provisional state is per-datum data-shape, not a chart-ui attribute — see ADR-0081 §3.",
66
66
  "$ref": "common_types.json#/$defs/DynamicObjectList"
67
67
  },
68
68
  "dots": {
@@ -87,6 +87,16 @@
87
87
  ],
88
88
  "default": "abbr"
89
89
  },
90
+ "labels": {
91
+ "description": "Chart 2.0 axis-label mode (ADR-0081). Unset (default, \"\") always resolves to `outside` — today's pre-2.0 outside-the-plot axis labels, byte-for-byte unchanged. Set explicitly to `chip` to opt into the pill-treated overlay labels inset within the plot box (never hanging outside it) — the resolved value reflects onto the host as `data-labels-resolved=\"chip\"|\"outside\"`. Deliberately explicit-opt-in rather than auto-detected from full-bleed ancestry (`section[bleed]`/ `card-ui[padding=\"none\"]`): an earlier draft auto-activated chip mode on any full-bleed composition, which silently changed the rendering of every ALREADY-SHIPPED full-bleed chart the moment it shipped — this build's own 60-fixture Charts visual-eval floor caught it (2 `comp-chart-in-card-n-*` regressions). `chart-in-card` compositions opt in explicitly once their own examples are updated (gh#1805).",
92
+ "type": "string",
93
+ "enum": [
94
+ "",
95
+ "chip",
96
+ "outside"
97
+ ],
98
+ "default": ""
99
+ },
90
100
  "loading": {
91
101
  "description": "Show a skeleton placeholder instead of the chart body. Set to true while data is being fetched; clear once data arrives. Preserves the element's aspect-ratio dimensions so the skeleton occupies the same space the chart will fill. Parity with stat-ui[loading] and table-ui[loading] (§FB-12, v0.6.27).",
92
102
  "type": "boolean",
@@ -137,6 +147,11 @@
137
147
  "type": "number",
138
148
  "default": 0.4
139
149
  },
150
+ "today": {
151
+ "description": "Names the datum whose x-axis value marks \"today\" (ADR-0081). Unset (default, \"\") renders no marker — additive. Compared against each datum's x-key value via a loose string comparison (`String(datum[x]) === String(today)`), so category axes (\"month\", \"region\") work the same as literal date strings; chart-ui never auto-derives today from the clock. Renders a baseline dot + a short band tick (REQ-F-008) on cartesian types (bar, line, area, scatter, multi-line, stacked-bar, grouped-bar, composed); a no-op on every radial/part-to-whole type and on sparkline (gh#1690's N/A list). Fallback (not the primary mechanism): a datum already carrying a truthy `today` key is treated as an equivalent marker even with this attribute unset.",
152
+ "type": "string",
153
+ "default": ""
154
+ },
140
155
  "x": {
141
156
  "description": "Data key for x-axis (category) values",
142
157
  "type": "string",