@adia-ai/web-components 0.8.48 → 0.8.50
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 +16 -0
- package/MIGRATION.md +136 -0
- package/components/chart/chart.class.js +41 -10
- package/components/input/input.a2ui.json +2 -2
- package/components/input/input.css +45 -16
- package/components/input/input.yaml +11 -9
- package/components/search/search.a2ui.json +1 -1
- package/components/search/search.class.js +43 -0
- package/components/search/search.css +28 -0
- package/components/search/search.yaml +4 -1
- package/components/select/select.class.js +4 -1
- package/components/select/select.css +13 -0
- package/components/stat/stat.a2ui.json +30 -3
- package/components/stat/stat.css +88 -0
- package/components/stat/stat.d.ts +2 -2
- package/components/stat/stat.yaml +99 -6
- package/components/table/table.a2ui.json +1 -1
- package/components/table/table.class.js +9 -9
- package/components/table/table.d.ts +1 -1
- package/components/table/table.yaml +7 -7
- package/components/table-footer/table-footer.class.js +6 -6
- package/components/table-toolbar/table-toolbar.a2ui.json +3 -0
- package/components/table-toolbar/table-toolbar.class.js +28 -6
- package/components/table-toolbar/table-toolbar.css +30 -0
- package/components/table-toolbar/table-toolbar.yaml +57 -17
- package/components/theme-provider/theme-provider.a2ui.json +3 -5
- package/components/theme-provider/theme-provider.class.js +9 -30
- package/components/theme-provider/theme-provider.d.ts +3 -5
- package/components/theme-provider/theme-provider.yaml +4 -8
- package/core/element.js +16 -3
- package/custom-elements.json +10 -6
- package/dist/theme-provider.min.js +3 -3
- package/dist/web-components.min.css +1 -1
- package/dist/web-components.min.js +58 -57
- package/dist/web-components.sheet.js +1 -1
- package/index.css +1 -2
- package/package.json +1 -1
- package/styles/README.md +1 -1
- package/styles/api/sizing.css +1 -1
- package/styles/host.css +1 -4
- package/styles/index.css +2 -2
- package/styles/scale.css +19 -26
- package/styles/themes.css +2 -2
- package/styles/type/roles.css +3 -3
- package/styles/typography.css +6 -5
- package/dist/prose.min.css +0 -1
- package/dist/prose.sheet.js +0 -11
- package/dist/verse.min.css +0 -1
- package/dist/verse.sheet.js +0 -11
- package/styles/prose.css +0 -211
- package/styles/verse.css +0 -151
|
@@ -28,12 +28,11 @@
|
|
|
28
28
|
*
|
|
29
29
|
* Scope (v1): the provider supplies the FOUNDATION only — design tokens, resets,
|
|
30
30
|
* page-frame, and every primitive's CSS. OS light/dark resolves automatically
|
|
31
|
-
* (the tokens are `light-dark()`-based). Named themes (`[theme]`)
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* `theme
|
|
35
|
-
*
|
|
36
|
-
* is pre-wired for it; see .brain/notes/theme-provider-design-2026-06-04.md).
|
|
31
|
+
* (the tokens are `light-dark()`-based). Named themes (`[theme]`) live in an
|
|
32
|
+
* OPT-IN layer (themes.css) that is NOT in the foundation bundle, so setting
|
|
33
|
+
* `theme` on the wrapper does nothing until that layer is also adopted — a
|
|
34
|
+
* planned `theme=` provider option (the token-root selector is pre-wired for
|
|
35
|
+
* it; see .brain/notes/theme-provider-design-2026-06-04.md).
|
|
37
36
|
*
|
|
38
37
|
* Deliberately NOT in the all-in-one `@adia-ai/web-components` barrel — it's
|
|
39
38
|
* opt-in infra (it carries the whole foundation). Import it explicitly:
|
|
@@ -58,19 +57,17 @@ function provideFoundation() {
|
|
|
58
57
|
}
|
|
59
58
|
}
|
|
60
59
|
|
|
61
|
-
// Opt-in context registers — themes (named `[theme]` presets)
|
|
62
|
-
//
|
|
60
|
+
// Opt-in context registers — themes (named `[theme]` presets) and the `scale`
|
|
61
|
+
// register. Each is its own constructable-sheet twin (built by
|
|
63
62
|
// scripts/build/bundle-css.mjs, byte-identical to its .min.css). Adopted on demand
|
|
64
63
|
// the first time a provider needs one, deduped by sheet identity. Dynamic-imported
|
|
65
64
|
// (static paths, so bundlers can code-split) so the element stays lean — a provider
|
|
66
65
|
// that does no theming never pulls these in.
|
|
67
|
-
const TWIN_LOADED = { themes: false,
|
|
66
|
+
const TWIN_LOADED = { themes: false, scale: false };
|
|
68
67
|
function loadTwin(name) {
|
|
69
68
|
switch (name) {
|
|
70
69
|
case 'themes': return import('../../dist/themes.sheet.js');
|
|
71
70
|
case 'scale': return import('../../dist/scale.sheet.js');
|
|
72
|
-
case 'verse': return import('../../dist/verse.sheet.js');
|
|
73
|
-
case 'prose': return import('../../dist/prose.sheet.js');
|
|
74
71
|
default: return null;
|
|
75
72
|
}
|
|
76
73
|
}
|
|
@@ -100,8 +97,6 @@ export class UIThemeProvider extends UIElement {
|
|
|
100
97
|
// Sizing register — one of the six [scale] tiers (ui-sm | ui-md | ui-lg |
|
|
101
98
|
// content-sm | content-md | content-lg). Reflected, so the attribute IS the
|
|
102
99
|
// `[scale="…"]` CSS hook in scale.css (the `theme` prop's mechanism).
|
|
103
|
-
// DEPRECATED aliases: "verse" (→ ui-sm) and "prose" (→ content-md) still
|
|
104
|
-
// map onto the legacy [verse]/[prose] attributes; removed at v1.0.
|
|
105
100
|
scale: { type: String, reflect: true },
|
|
106
101
|
};
|
|
107
102
|
static template = () => null;
|
|
@@ -128,15 +123,7 @@ export class UIThemeProvider extends UIElement {
|
|
|
128
123
|
if (this.theme) ensureTwin('themes');
|
|
129
124
|
|
|
130
125
|
const scale = this.scale;
|
|
131
|
-
|
|
132
|
-
this.toggleAttribute('prose', scale === 'prose');
|
|
133
|
-
if (scale === 'verse' || scale === 'prose') {
|
|
134
|
-
// Legacy register aliases — the reflected scale="verse|prose" attribute
|
|
135
|
-
// matches no scale.css tier selector, so only the toggled [verse]/[prose]
|
|
136
|
-
// attribute has CSS effect. Removed at v1.0.
|
|
137
|
-
warnDeprecatedScaleAlias(scale);
|
|
138
|
-
ensureTwin(scale);
|
|
139
|
-
} else if (SCALE_TIERS.has(scale)) {
|
|
126
|
+
if (SCALE_TIERS.has(scale)) {
|
|
140
127
|
// Tier names match [scale="…"] in scale.css directly via reflection.
|
|
141
128
|
ensureTwin('scale');
|
|
142
129
|
}
|
|
@@ -144,11 +131,3 @@ export class UIThemeProvider extends UIElement {
|
|
|
144
131
|
}
|
|
145
132
|
|
|
146
133
|
const SCALE_TIERS = new Set(['ui-sm', 'ui-md', 'ui-lg', 'content-sm', 'content-md', 'content-lg']);
|
|
147
|
-
|
|
148
|
-
const warnedAliases = new Set();
|
|
149
|
-
function warnDeprecatedScaleAlias(alias) {
|
|
150
|
-
if (warnedAliases.has(alias)) return;
|
|
151
|
-
warnedAliases.add(alias);
|
|
152
|
-
const tier = alias === 'verse' ? 'ui-sm' : 'content-md';
|
|
153
|
-
console.warn(`[theme-provider] scale="${alias}" is deprecated — use scale="${tier}" (removed at v1.0).`);
|
|
154
|
-
}
|
|
@@ -18,9 +18,7 @@ Theming: the base foundation is OS light/dark via light-dark() tokens. Two opt-i
|
|
|
18
18
|
attributes adopt their layer on demand — theme="ocean|forest|slate|…" applies a
|
|
19
19
|
named preset (adopts the themes layer; matches the [theme] hook) and
|
|
20
20
|
scale="ui-sm|ui-md|ui-lg|content-sm|content-md|content-lg" sets the sizing
|
|
21
|
-
register (adopts the matching register layer).
|
|
22
|
-
(→ ui-sm) and "prose" (→ content-md) still map onto the legacy
|
|
23
|
-
[verse]/[prose] attributes; removed at v1.0. Each layer is fetched only
|
|
21
|
+
register (adopts the matching register layer). Each layer is fetched only
|
|
24
22
|
when its attribute is set, so a bare provider stays lean.
|
|
25
23
|
Opt-in infra: NOT in the all-in-one @adia-ai/web-components barrel (it carries
|
|
26
24
|
the whole foundation); import @adia-ai/web-components/components/theme-provider
|
|
@@ -42,6 +40,6 @@ import { UIElement } from '../../core/element.js';
|
|
|
42
40
|
export class UIThemeProvider extends UIElement {
|
|
43
41
|
/** Named theme preset for the wrapped subtree (default, ocean, forest, sunset, lavender, rose, slate, midnight). Adopts the themes layer on demand + matches the [theme="…"] hook. */
|
|
44
42
|
theme: string;
|
|
45
|
-
/** Sizing register for the subtree — one of the six [scale] tiers: ui-sm (dense product UI), ui-md (base), ui-lg (touch/presentation), content-sm (compact article), content-md (long-form), content-lg (hero/marketing). Adopts the scale layer on demand; the reflected attribute is the [scale="…"] CSS hook.
|
|
46
|
-
scale: 'ui-sm' | 'ui-md' | 'ui-lg' | 'content-sm' | 'content-md' | 'content-lg'
|
|
43
|
+
/** Sizing register for the subtree — one of the six [scale] tiers: ui-sm (dense product UI), ui-md (base), ui-lg (touch/presentation), content-sm (compact article), content-md (long-form), content-lg (hero/marketing). Adopts the scale layer on demand; the reflected attribute is the [scale="…"] CSS hook. */
|
|
44
|
+
scale: 'ui-sm' | 'ui-md' | 'ui-lg' | 'content-sm' | 'content-md' | 'content-lg';
|
|
47
45
|
}
|
|
@@ -26,9 +26,7 @@ description: |
|
|
|
26
26
|
attributes adopt their layer on demand — theme="ocean|forest|slate|…" applies a
|
|
27
27
|
named preset (adopts the themes layer; matches the [theme] hook) and
|
|
28
28
|
scale="ui-sm|ui-md|ui-lg|content-sm|content-md|content-lg" sets the sizing
|
|
29
|
-
register (adopts the matching register layer).
|
|
30
|
-
(→ ui-sm) and "prose" (→ content-md) still map onto the legacy
|
|
31
|
-
[verse]/[prose] attributes; removed at v1.0. Each layer is fetched only
|
|
29
|
+
register (adopts the matching register layer). Each layer is fetched only
|
|
32
30
|
when its attribute is set, so a bare provider stays lean.
|
|
33
31
|
Opt-in infra: NOT in the all-in-one @adia-ai/web-components barrel (it carries
|
|
34
32
|
the whole foundation); import @adia-ai/web-components/components/theme-provider
|
|
@@ -41,7 +39,7 @@ props:
|
|
|
41
39
|
default: ""
|
|
42
40
|
reflect: true
|
|
43
41
|
scale:
|
|
44
|
-
description: 'Sizing register for the subtree — one of the six [scale] tiers: ui-sm (dense product UI), ui-md (base), ui-lg (touch/presentation), content-sm (compact article), content-md (long-form), content-lg (hero/marketing). Adopts the scale layer on demand; the reflected attribute is the [scale="…"] CSS hook.
|
|
42
|
+
description: 'Sizing register for the subtree — one of the six [scale] tiers: ui-sm (dense product UI), ui-md (base), ui-lg (touch/presentation), content-sm (compact article), content-md (long-form), content-lg (hero/marketing). Adopts the scale layer on demand; the reflected attribute is the [scale="…"] CSS hook.'
|
|
45
43
|
type: string
|
|
46
44
|
default: ""
|
|
47
45
|
enum:
|
|
@@ -51,8 +49,6 @@ props:
|
|
|
51
49
|
- content-sm
|
|
52
50
|
- content-md
|
|
53
51
|
- content-lg
|
|
54
|
-
- verse
|
|
55
|
-
- prose
|
|
56
52
|
reflect: true
|
|
57
53
|
events: {}
|
|
58
54
|
slots: {}
|
|
@@ -67,8 +63,8 @@ a2ui:
|
|
|
67
63
|
reason: 'Adopts the foundation bundle into the document from anywhere in the tree (document.adoptedStyleSheets).'
|
|
68
64
|
- rule: 'For multi-page / top-level pages, prefer a render-blocking <link rel="stylesheet" href=".../web-components.min.css"> in <head> instead — cacheable across navigations, styled on the first frame. <theme-provider> and the link deliver byte-identical CSS, so they coexist.'
|
|
69
65
|
reason: 'Link for multi-page (no flash); provider for SPA/embedded (no head access).'
|
|
70
|
-
- rule: 'Theme the wrapped subtree with theme="ocean" (a named preset) and/or scale="
|
|
71
|
-
reason: 'theme/scale each fetch + adopt their layer (themes.css /
|
|
66
|
+
- rule: 'Theme the wrapped subtree with theme="ocean" (a named preset) and/or scale="content-md" (a sizing register tier) — the provider adopts the matching opt-in layer on demand. The base foundation is OS light/dark automatically. Keep <theme-provider> at/near the mount root — display:contents means an ancestor "> " child selector will not reach its children.'
|
|
67
|
+
reason: 'theme/scale each fetch + adopt their layer (themes.css / scale.css) on demand; display:contents preserves custom-property inheritance but not child-combinator reach (Light DOM, ADR-0033).'
|
|
72
68
|
anti_patterns: []
|
|
73
69
|
examples:
|
|
74
70
|
- name: spa-root
|
package/core/element.js
CHANGED
|
@@ -85,9 +85,22 @@ const NOOP_INTERNALS = Object.freeze({
|
|
|
85
85
|
});
|
|
86
86
|
|
|
87
87
|
function reflect(el, a, v, t) {
|
|
88
|
-
t === Boolean
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
if (t === Boolean) {
|
|
89
|
+
v ? el.setAttribute(a, '') : el.removeAttribute(a);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// gh#1895 — a Number-typed reflected prop set from an unparseable sentinel
|
|
93
|
+
// attribute (e.g. `range-total="?"`, ADR-0082 Amendment's open/unproven-
|
|
94
|
+
// total grammar) coerces to NaN. Writing `String(NaN)` back would stomp
|
|
95
|
+
// the author's sentinel with the literal string "NaN" on the very next
|
|
96
|
+
// render, so a non-finite Number value is deliberately left unreflected —
|
|
97
|
+
// the attribute keeps whatever the author wrote (or stays absent, for a
|
|
98
|
+
// NaN assigned straight from JS with no attribute yet). This mirrors how
|
|
99
|
+
// `null` already skips straight to removeAttribute below instead of
|
|
100
|
+
// stringifying: NaN gets its own no-write branch rather than one more
|
|
101
|
+
// Number.isFinite check duplicated at every "?"-sentinel call site.
|
|
102
|
+
if (t === Number && v != null && !Number.isFinite(v)) return;
|
|
103
|
+
v == null ? el.removeAttribute(a) : el.setAttribute(a, String(v));
|
|
91
104
|
}
|
|
92
105
|
|
|
93
106
|
const parseAttr = (v, t) =>
|
package/custom-elements.json
CHANGED
|
@@ -8245,7 +8245,7 @@
|
|
|
8245
8245
|
"declarations": [
|
|
8246
8246
|
{
|
|
8247
8247
|
"kind": "class",
|
|
8248
|
-
"description": "Search input with magnifying-glass icon, clear button, and debounced search event.",
|
|
8248
|
+
"description": "Search input with magnifying-glass icon, clear button, and debounced search event. Fills its",
|
|
8249
8249
|
"name": "UISearch",
|
|
8250
8250
|
"tagName": "search-ui",
|
|
8251
8251
|
"superclass": {
|
|
@@ -9217,7 +9217,7 @@
|
|
|
9217
9217
|
"text": "boolean"
|
|
9218
9218
|
},
|
|
9219
9219
|
"default": "false",
|
|
9220
|
-
"description": "
|
|
9220
|
+
"description": "The chart reaches the card's edges — which edges depends on `band`: a column bleeding top/right/bottom without it, a three-edge (inline-start, inline-end, block-end) bottom band with it. With `slot=\"chart\"` alone (no `band`), the value / label / change stack on the left while the chart fills the right column at full height and bleeds to the card's top / right / bottom edges (the horizontal counterpart to a chart in a card `<section bleed>`). Set together with `band` for the full-bleed KPI tile — see `band`. No effect without a chart slot."
|
|
9221
9221
|
},
|
|
9222
9222
|
{
|
|
9223
9223
|
"name": "band",
|
|
@@ -9225,7 +9225,7 @@
|
|
|
9225
9225
|
"text": "boolean"
|
|
9226
9226
|
},
|
|
9227
9227
|
"default": "false",
|
|
9228
|
-
"description": "Chart-band KPI layout. With a `slot=\"chart\"` child, label / value / change stack full width top to bottom and the chart forms a short full-width band between the value and the change row (the Gmail/Vercel/shadcn stat-card shape). Composes with `icon` exactly as the base layout does. No effect without a chart slot."
|
|
9228
|
+
"description": "Chart-band KPI layout. With a `slot=\"chart\"` child, label / value / change stack full width top to bottom and the chart forms a short full-width band between the value and the change row (the Gmail/Vercel/shadcn stat-card shape). Composes with `icon` exactly as the base layout does. Set together with `bleed` (`band bleed`) for the KPI tile: the band bleeds to the card's inline-start, inline-end, and block-end edges, and the `change` delta overlays it as a chip instead of stacking below it (ADR-0083) — the tile's `stat-ui` must be the card's last content (no trailing footer/section). No effect without a chart slot."
|
|
9229
9229
|
}
|
|
9230
9230
|
],
|
|
9231
9231
|
"slots": [
|
|
@@ -10223,6 +10223,10 @@
|
|
|
10223
10223
|
{
|
|
10224
10224
|
"name": "actions",
|
|
10225
10225
|
"description": "Trailing action area — primary buttons (e.g. \"New row\") rendered after the search input, [slot=\"actions-leading\"], and the page-size select."
|
|
10226
|
+
},
|
|
10227
|
+
{
|
|
10228
|
+
"name": "summary",
|
|
10229
|
+
"description": "gh#1883 — trailing, text-tier cluster for an aggregate datum that belongs with the table but has no home in the range summary or the actions area (e.g. batch-detail's line-items Subtotal: `<span slot=\"summary\">Subtotal <strong>$1,240.00</strong></span>`). Rendered in the same flex row, after [slot=\"actions-leading\"] and before the page-size select / [slot=\"actions\"] — closer to the trailing edge than [slot=\"scope\"]/[range-*], since it reads as a result/total rather than pagination or view-switching context. Text sized via [--table-toolbar-summary-size] (shared with the \"Showing X–Y of N\" range summary — both are the same text tier). Plain author-supplied markup, same real-insertion-point pattern as every other table-toolbar slot — no forced typography beyond the font-size token. Stays visible at every ADR-0076 compaction stage: it is DATA (an aggregate figure the consumer chose to show), not chrome, so it is never dropped or compacted the way the range summary/ controls are — a consumer needing narrower-container behavior owns that via its own slotted content, not a component-side compaction rule. Empty (the default) has zero footprint on existing consumers."
|
|
10226
10230
|
}
|
|
10227
10231
|
],
|
|
10228
10232
|
"events": [
|
|
@@ -10378,7 +10382,7 @@
|
|
|
10378
10382
|
"text": "[number, string]"
|
|
10379
10383
|
},
|
|
10380
10384
|
"default": "0",
|
|
10381
|
-
"description": "Total row count across ALL server pages (gh#1754, ADR-0082) — the table-authoritative server-mode data contract. Presence-gated: the attribute's PRESENCE, not its value, is the mode switch (checked via hasAttribute, never the coerced value alone — the same discipline table-footer-ui's own [range-total] ships). Absent (the default) means client mode: today's behavior exactly, [paginate] slices `.data` as always. Present with [paginate] > 0 means server mode: no local slicing (`.data` IS the current page and renders whole, after local search/sort/filter), the internal pager's page count becomes `max(1, ceil(range-total / paginate))` (one calc site, consolidated), and the internal page-reset sites (`data` set, `setFilter`, `clearFilters`) are suppressed so a fetch write-back never fights the pager back to page 0 — page state then moves only via pager interaction, the `footer-page` command, or `setState()`. The existing `page` event (0-based, unchanged) becomes the fetch trigger: the consumer listens for it, fetches that server page, and writes `.data` back. Explicit `range-total=\"0\"` is server-confirmed empty (pager hidden), never conflated with absent. With [paginate] absent/0, [range-total] is inert for this table's own rendering but stays readable by a bound table-footer-ui (REQ-W-006 branch 2) for its count-only label — see the footer-authoritative shape below, which remains lawful and is unaffected by this attribute. Named identically to table-toolbar-ui's and table-footer-ui's own [range-total] (rows, never `pagination-ui[total]`'s pages — the ADR-0063 B5 collision rule); a third instance of one name for one concept. Explicit `range-total=\"?\"` (gh#1877, ADR-0082 Amendment) is the OPEN/unproven-total state — cursor/hasMore server paging with no known row count yet: still server mode (still presence-gated), but the internal pager's page count stays exactly one page ahead of wherever the pager currently sits (never a fixed ceil(...) total), keeping `next` enabled indefinitely instead of hiding the pager the way a confirmed `range-total=\"0\"` would. Resolves to the normal finite server-mode behavior the instant a real number replaces the \"?\" — every reader downstream (table-toolbar-ui, table-footer-ui) shares this same distinction. Note:
|
|
10385
|
+
"description": "Total row count across ALL server pages (gh#1754, ADR-0082) — the table-authoritative server-mode data contract. Presence-gated: the attribute's PRESENCE, not its value, is the mode switch (checked via hasAttribute, never the coerced value alone — the same discipline table-footer-ui's own [range-total] ships). Absent (the default) means client mode: today's behavior exactly, [paginate] slices `.data` as always. Present with [paginate] > 0 means server mode: no local slicing (`.data` IS the current page and renders whole, after local search/sort/filter), the internal pager's page count becomes `max(1, ceil(range-total / paginate))` (one calc site, consolidated), and the internal page-reset sites (`data` set, `setFilter`, `clearFilters`) are suppressed so a fetch write-back never fights the pager back to page 0 — page state then moves only via pager interaction, the `footer-page` command, or `setState()`. The existing `page` event (0-based, unchanged) becomes the fetch trigger: the consumer listens for it, fetches that server page, and writes `.data` back. Explicit `range-total=\"0\"` is server-confirmed empty (pager hidden), never conflated with absent. With [paginate] absent/0, [range-total] is inert for this table's own rendering but stays readable by a bound table-footer-ui (REQ-W-006 branch 2) for its count-only label — see the footer-authoritative shape below, which remains lawful and is unaffected by this attribute. Named identically to table-toolbar-ui's and table-footer-ui's own [range-total] (rows, never `pagination-ui[total]`'s pages — the ADR-0063 B5 collision rule); a third instance of one name for one concept. Explicit `range-total=\"?\"` (gh#1877, ADR-0082 Amendment) is the OPEN/unproven-total state — cursor/hasMore server paging with no known row count yet: still server mode (still presence-gated), but the internal pager's page count stays exactly one page ahead of wherever the pager currently sits (never a fixed ceil(...) total), keeping `next` enabled indefinitely instead of hiding the pager the way a confirmed `range-total=\"0\"` would. Resolves to the normal finite server-mode behavior the instant a real number replaces the \"?\" — every reader downstream (table-toolbar-ui, table-footer-ui) shares this same distinction. Note: this prop is Number-typed and reflected; \"?\" parses to NaN (`+\"?\"`), and the coerced numeric PROPERTY is what carries the open/unproven signal (non-finite) — every reader checks the property, never `getAttribute(...) === '?'`. The DOM attribute itself keeps the authored \"?\" (gh#1895 — the framework's attribute-reflection leaves a non-finite Number value unwritten rather than stringifying it back as the literal \"NaN\")."
|
|
10382
10386
|
},
|
|
10383
10387
|
{
|
|
10384
10388
|
"name": "filteredCount",
|
|
@@ -11191,7 +11195,7 @@
|
|
|
11191
11195
|
"declarations": [
|
|
11192
11196
|
{
|
|
11193
11197
|
"kind": "class",
|
|
11194
|
-
"description": "Foundation-providing wrapper — adopts the AdiaUI foundation (design tokens + resets + page-frame + every primitive's CSS) into the document from anywhere in the DOM, so a surface renders fully-styled WITHOUT a hand-wired <link rel=\"stylesheet\"> in <head>. Layout-transparent (display: contents): the element owns no box; children lay out as if it weren't there. Mechanism: it imports the constructable-stylesheet twin of web-components.min.css (byte-identical to the CDN bundle, emitted from the same build buffer) and adopts it once into document.adoptedStyleSheets, deduped — adoption fires at module load, before paint. Coexists with the render-blocking <link> path; both deliver the same bytes. Use a <link> (-> the CDN web-components.min.css) for multi-page / top-level surfaces (cacheable across navigations, zero flash); use <theme-provider> for SPA roots, embedded apps, and dynamic mounts where you do not control <head> (e.g. <embed-shell>, an A2UI surface, a micro-frontend). Theming: the base foundation is OS light/dark via light-dark() tokens. Two opt-in attributes adopt their layer on demand — theme=\"ocean|forest|slate|…\" applies a named preset (adopts the themes layer; matches the [theme] hook) and scale=\"ui-sm|ui-md|ui-lg|content-sm|content-md|content-lg\" sets the sizing register (adopts the matching register layer).
|
|
11198
|
+
"description": "Foundation-providing wrapper — adopts the AdiaUI foundation (design tokens + resets + page-frame + every primitive's CSS) into the document from anywhere in the DOM, so a surface renders fully-styled WITHOUT a hand-wired <link rel=\"stylesheet\"> in <head>. Layout-transparent (display: contents): the element owns no box; children lay out as if it weren't there. Mechanism: it imports the constructable-stylesheet twin of web-components.min.css (byte-identical to the CDN bundle, emitted from the same build buffer) and adopts it once into document.adoptedStyleSheets, deduped — adoption fires at module load, before paint. Coexists with the render-blocking <link> path; both deliver the same bytes. Use a <link> (-> the CDN web-components.min.css) for multi-page / top-level surfaces (cacheable across navigations, zero flash); use <theme-provider> for SPA roots, embedded apps, and dynamic mounts where you do not control <head> (e.g. <embed-shell>, an A2UI surface, a micro-frontend). Theming: the base foundation is OS light/dark via light-dark() tokens. Two opt-in attributes adopt their layer on demand — theme=\"ocean|forest|slate|…\" applies a named preset (adopts the themes layer; matches the [theme] hook) and scale=\"ui-sm|ui-md|ui-lg|content-sm|content-md|content-lg\" sets the sizing register (adopts the matching register layer). Each layer is fetched only when its attribute is set, so a bare provider stays lean. Opt-in infra: NOT in the all-in-one @adia-ai/web-components barrel (it carries the whole foundation); import @adia-ai/web-components/components/theme-provider explicitly. Distinct from <frame-ui> (a layout skeleton, owns no CSS delivery) and the page shells (chrome over the same foundation).",
|
|
11195
11199
|
"name": "UIThemeProvider",
|
|
11196
11200
|
"tagName": "theme-provider",
|
|
11197
11201
|
"superclass": {
|
|
@@ -11211,7 +11215,7 @@
|
|
|
11211
11215
|
"type": {
|
|
11212
11216
|
"text": "string"
|
|
11213
11217
|
},
|
|
11214
|
-
"description": "Sizing register for the subtree — one of the six [scale] tiers: ui-sm (dense product UI), ui-md (base), ui-lg (touch/presentation), content-sm (compact article), content-md (long-form), content-lg (hero/marketing). Adopts the scale layer on demand; the reflected attribute is the [scale=\"…\"] CSS hook.
|
|
11218
|
+
"description": "Sizing register for the subtree — one of the six [scale] tiers: ui-sm (dense product UI), ui-md (base), ui-lg (touch/presentation), content-sm (compact article), content-md (long-form), content-lg (hero/marketing). Adopts the scale layer on demand; the reflected attribute is the [scale=\"…\"] CSS hook."
|
|
11215
11219
|
}
|
|
11216
11220
|
]
|
|
11217
11221
|
}
|