@ponchia/ui 0.6.12 → 0.8.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 +210 -0
- package/MIGRATIONS.json +14 -0
- package/README.md +14 -6
- package/behaviors/dialog.d.ts.map +1 -1
- package/behaviors/dialog.js +14 -0
- package/behaviors/modal.d.ts +4 -0
- package/behaviors/modal.d.ts.map +1 -1
- package/behaviors/modal.js +4 -0
- package/behaviors/splitter.d.ts +2 -0
- package/behaviors/splitter.d.ts.map +1 -1
- package/behaviors/splitter.js +15 -1
- package/behaviors/theme.d.ts +3 -2
- package/behaviors/theme.d.ts.map +1 -1
- package/behaviors/theme.js +10 -6
- package/bin/bronto-ui-check.mjs +286 -0
- package/classes/classes.json +86 -7
- package/classes/index.d.ts +53 -1
- package/classes/index.js +60 -0
- package/classes/vscode.css-custom-data.json +24 -0
- package/css/app.css +14 -3
- package/css/disclosure.css +15 -5
- package/css/dots.css +43 -18
- package/css/feedback.css +46 -8
- package/css/forms.css +3 -3
- package/css/navigation.css +1 -1
- package/css/overlay.css +19 -5
- package/css/primitives.css +101 -6
- package/css/report.css +0 -40
- package/css/site.css +19 -3
- package/css/skins.css +97 -3
- package/css/state.css +161 -0
- package/css/table.css +1 -1
- package/css/tokens.css +6 -0
- package/css/workbench.css +151 -0
- package/dist/bronto.css +1 -1
- package/dist/css/app.css +1 -1
- package/dist/css/disclosure.css +1 -1
- package/dist/css/dots.css +1 -1
- package/dist/css/feedback.css +1 -1
- package/dist/css/forms.css +1 -1
- package/dist/css/navigation.css +1 -1
- package/dist/css/overlay.css +1 -1
- package/dist/css/primitives.css +1 -1
- package/dist/css/report-kit.css +1 -1
- package/dist/css/report.css +1 -1
- package/dist/css/site.css +1 -1
- package/dist/css/skins.css +1 -1
- package/dist/css/state.css +1 -1
- package/dist/css/table.css +1 -1
- package/dist/css/tokens.css +1 -1
- package/dist/css/workbench.css +1 -1
- package/docs/adr/0001-color-system.md +32 -3
- package/docs/adr/0004-prune-unused-adapters.md +34 -0
- package/docs/architecture.md +14 -10
- package/docs/command.md +18 -4
- package/docs/contrast.md +102 -18
- package/docs/migrations/0.6-to-0.7.md +85 -0
- package/docs/package-contract.md +10 -5
- package/docs/reference.md +52 -1
- package/docs/reporting.md +8 -8
- package/docs/stability.md +39 -9
- package/docs/state.md +51 -1
- package/docs/theming.md +67 -5
- package/docs/usage.md +119 -19
- package/docs/workbench.md +99 -6
- package/llms.txt +7 -3
- package/package.json +13 -3
- package/qwik/index.d.ts.map +1 -1
- package/qwik/index.js +4 -0
- package/react/index.d.ts.map +1 -1
- package/react/index.js +4 -0
- package/solid/index.d.ts.map +1 -1
- package/solid/index.js +4 -0
- package/svelte/index.d.ts.map +1 -1
- package/svelte/index.js +4 -0
- package/tokens/figma.variables.json +84 -0
- package/tokens/index.d.ts +2 -2
- package/tokens/index.js +23 -0
- package/tokens/index.json +12 -0
- package/tokens/resolved.json +6 -0
- package/tokens/skins.js +117 -7
- package/tokens/tokens.dtcg.json +2514 -399
- package/vue/index.d.ts.map +1 -1
- package/vue/index.js +4 -0
package/docs/package-contract.md
CHANGED
|
@@ -174,9 +174,11 @@ semantic versioning contract for the surfaces listed here.
|
|
|
174
174
|
| `./docs/migrations/0.3-to-0.4.md` | `./docs/migrations/0.3-to-0.4.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
|
|
175
175
|
| `./docs/migrations/0.4-to-0.5.md` | `./docs/migrations/0.4-to-0.5.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
|
|
176
176
|
| `./docs/migrations/0.5-to-0.6.md` | `./docs/migrations/0.5-to-0.6.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
|
|
177
|
+
| `./docs/migrations/0.6-to-0.7.md` | `./docs/migrations/0.6-to-0.7.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
|
|
177
178
|
| `./docs/adr/0001-color-system.md` | `./docs/adr/0001-color-system.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
|
|
178
179
|
| `./docs/adr/0002-scope-and-2026-baseline.md` | `./docs/adr/0002-scope-and-2026-baseline.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
|
|
179
180
|
| `./docs/adr/0003-theme-model.md` | `./docs/adr/0003-theme-model.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
|
|
181
|
+
| `./docs/adr/0004-prune-unused-adapters.md` | `./docs/adr/0004-prune-unused-adapters.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
|
|
180
182
|
| `./classes` | types: `./classes/index.d.ts`<br>default: `./classes/index.js` | Class recipes JS | Stable | ESM class registry, recipes, attrs helpers, and cx joiner. The emitted class vocabulary is public. |
|
|
181
183
|
| `./classes.json` | `./classes/classes.json` | Machine-readable data | Stable additive | JSON package data for non-JS/tooling consumers. Shape is public unless the paired doc marks a field internal. |
|
|
182
184
|
| `./behaviors` | types: `./behaviors/index.d.ts`<br>default: `./behaviors/index.js` | Vanilla behavior JS | Stable | ESM, SSR-safe, cleanup-returning behavior initializers. Behavior internals are not public. |
|
|
@@ -205,11 +207,11 @@ semantic versioning contract for the surfaces listed here.
|
|
|
205
207
|
| `./glyphs` | types: `./glyphs/glyphs.d.ts`<br>default: `./glyphs/glyphs.js` | Geometry/render helper JS | Stable additive | ESM helper surface. Function names, options, and data shapes are public; rendering heuristics may tune. |
|
|
206
208
|
| `./annotations` | types: `./annotations/index.d.ts`<br>default: `./annotations/index.js` | Geometry/render helper JS | Stable additive | ESM helper surface. Function names, options, and data shapes are public; rendering heuristics may tune. |
|
|
207
209
|
| `./connectors` | types: `./connectors/index.d.ts`<br>default: `./connectors/index.js` | Geometry/render helper JS | Stable additive | ESM helper surface. Function names, options, and data shapes are public; rendering heuristics may tune. |
|
|
208
|
-
| `./react` | types: `./react/index.d.ts`<br>default: `./react/index.js` | Framework binding JS |
|
|
209
|
-
| `./solid` | types: `./solid/index.d.ts`<br>default: `./solid/index.js` | Framework binding JS |
|
|
210
|
-
| `./qwik` | types: `./qwik/index.d.ts`<br>default: `./qwik/index.js` | Framework binding JS |
|
|
211
|
-
| `./svelte` | types: `./svelte/index.d.ts`<br>default: `./svelte/index.js` | Framework binding JS |
|
|
212
|
-
| `./vue` | types: `./vue/index.d.ts`<br>default: `./vue/index.js` | Framework binding JS |
|
|
210
|
+
| `./react` | types: `./react/index.d.ts`<br>default: `./react/index.js` | Framework binding JS | Deprecated in 0.7 | Compatibility wrapper over vanilla behaviors. Scheduled for removal no earlier than 0.8 under ADR-0004; use direct behavior lifecycle cleanup. |
|
|
211
|
+
| `./solid` | types: `./solid/index.d.ts`<br>default: `./solid/index.js` | Framework binding JS | Deprecated in 0.7 | Compatibility wrapper over vanilla behaviors. Scheduled for removal no earlier than 0.8 under ADR-0004; use direct behavior lifecycle cleanup. |
|
|
212
|
+
| `./qwik` | types: `./qwik/index.d.ts`<br>default: `./qwik/index.js` | Framework binding JS | Deprecated in 0.7 | Compatibility wrapper over vanilla behaviors. Scheduled for removal no earlier than 0.8 under ADR-0004; use direct behavior lifecycle cleanup. |
|
|
213
|
+
| `./svelte` | types: `./svelte/index.d.ts`<br>default: `./svelte/index.js` | Framework binding JS | Deprecated in 0.7 | Compatibility wrapper over vanilla behaviors. Scheduled for removal no earlier than 0.8 under ADR-0004; use direct behavior lifecycle cleanup. |
|
|
214
|
+
| `./vue` | types: `./vue/index.d.ts`<br>default: `./vue/index.js` | Framework binding JS | Deprecated in 0.7 | Compatibility wrapper over vanilla behaviors. Scheduled for removal no earlier than 0.8 under ADR-0004; use direct behavior lifecycle cleanup. |
|
|
213
215
|
| `./skins` | types: `./tokens/skins.d.ts`<br>default: `./tokens/skins.js` | Renderer/theme helper JS | Stable additive | ESM theme data/helpers for opt-in skins, chart palettes, and external renderers. |
|
|
214
216
|
| `./charts` | types: `./tokens/charts.d.ts`<br>default: `./tokens/charts.js` | Renderer/theme helper JS | Stable additive | ESM theme data/helpers for opt-in skins, chart palettes, and external renderers. |
|
|
215
217
|
| `./charts.json` | `./tokens/charts.json` | Machine-readable data | Stable additive | JSON package data for non-JS/tooling consumers. Shape is public unless the paired doc marks a field internal. |
|
|
@@ -236,6 +238,7 @@ always includes `package.json`, `README.md`, `LICENSE`, and
|
|
|
236
238
|
| `fonts` | Vendored assets | Doto woff2 files plus OFL license. |
|
|
237
239
|
| `tokens` | Mixed source/generated data | Token source plus generated JSON, declarations, and renderer theme data. |
|
|
238
240
|
| `classes` | Mixed source/generated data | Class recipe source plus generated JSON/declarations/custom-data. |
|
|
241
|
+
| `bin` | Package file | Included in the npm files allowlist. |
|
|
239
242
|
| `behaviors` | Authored public JS directory | ESM source shipped as-is; adjacent declarations/maps are generated. |
|
|
240
243
|
| `glyphs` | Authored public JS directory | Glyph registry/renderers shipped as JS; declarations are generated. |
|
|
241
244
|
| `schemas` | Machine-readable schemas | Declarative JSON schemas for package-adjacent report/tooling contracts. |
|
|
@@ -295,9 +298,11 @@ always includes `package.json`, `README.md`, `LICENSE`, and
|
|
|
295
298
|
| `docs/migrations/0.3-to-0.4.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
|
|
296
299
|
| `docs/migrations/0.4-to-0.5.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
|
|
297
300
|
| `docs/migrations/0.5-to-0.6.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
|
|
301
|
+
| `docs/migrations/0.6-to-0.7.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
|
|
298
302
|
| `docs/adr/0001-color-system.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
|
|
299
303
|
| `docs/adr/0002-scope-and-2026-baseline.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
|
|
300
304
|
| `docs/adr/0003-theme-model.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
|
|
305
|
+
| `docs/adr/0004-prune-unused-adapters.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
|
|
301
306
|
|
|
302
307
|
## Artifact Provenance
|
|
303
308
|
|
package/docs/reference.md
CHANGED
|
@@ -9,7 +9,7 @@ rendering of every class is the kitchen-sink demo:
|
|
|
9
9
|
**<https://ponchia.github.io/bronto-ui/>**. Theming knobs and the token
|
|
10
10
|
contract: [docs/theming.md](theming.md).
|
|
11
11
|
|
|
12
|
-
-
|
|
12
|
+
- 669 classes across 183 component groups
|
|
13
13
|
- Import the typed registry: `import { cls, ui, cx } from '@ponchia/ui/classes'`
|
|
14
14
|
- Validate markup as data (no JS/TS): `@ponchia/ui/classes.json` — the same
|
|
15
15
|
vocabulary as language-neutral JSON (`groups`, `classes`, `states`,
|
|
@@ -268,7 +268,9 @@ each one matches a real selector in the stylesheet.
|
|
|
268
268
|
| Registry key | Class | Kind |
|
|
269
269
|
| --- | --- | --- |
|
|
270
270
|
| `cls.button` | `ui-button` | base |
|
|
271
|
+
| `cls.buttonLabel` | `ui-button__label` | part |
|
|
271
272
|
| `cls.buttonDanger` | `ui-button--danger` | modifier |
|
|
273
|
+
| `cls.buttonDense` | `ui-button--dense` | modifier |
|
|
272
274
|
| `cls.buttonGhost` | `ui-button--ghost` | modifier |
|
|
273
275
|
| `cls.buttonIcon` | `ui-button--icon` | modifier |
|
|
274
276
|
| `cls.buttonLg` | `ui-button--lg` | modifier |
|
|
@@ -577,6 +579,10 @@ each one matches a real selector in the stylesheet.
|
|
|
577
579
|
| Registry key | Class | Kind |
|
|
578
580
|
| --- | --- | --- |
|
|
579
581
|
| `cls.emptyState` | `ui-empty-state` | base |
|
|
582
|
+
| `cls.emptyStateGlyph` | `ui-empty-state__glyph` | part |
|
|
583
|
+
| `cls.emptyStateHint` | `ui-empty-state__hint` | part |
|
|
584
|
+
| `cls.emptyStateLead` | `ui-empty-state__lead` | part |
|
|
585
|
+
| `cls.emptyStateInvite` | `ui-empty-state--invite` | modifier |
|
|
580
586
|
|
|
581
587
|
### `.ui-error-summary`
|
|
582
588
|
|
|
@@ -952,6 +958,17 @@ each one matches a real selector in the stylesheet.
|
|
|
952
958
|
| `cls.pagination` | `ui-pagination` | base |
|
|
953
959
|
| `cls.paginationItem` | `ui-pagination__item` | part |
|
|
954
960
|
|
|
961
|
+
### `.ui-pane`
|
|
962
|
+
|
|
963
|
+
| Registry key | Class | Kind |
|
|
964
|
+
| --- | --- | --- |
|
|
965
|
+
| `cls.pane` | `ui-pane` | base |
|
|
966
|
+
| `cls.paneActions` | `ui-pane__actions` | part |
|
|
967
|
+
| `cls.paneBody` | `ui-pane__body` | part |
|
|
968
|
+
| `cls.paneHead` | `ui-pane__head` | part |
|
|
969
|
+
| `cls.paneTitle` | `ui-pane__title` | part |
|
|
970
|
+
| `cls.paneTitleInput` | `ui-pane__title-input` | part |
|
|
971
|
+
|
|
955
972
|
### `.ui-panel`
|
|
956
973
|
|
|
957
974
|
| Registry key | Class | Kind |
|
|
@@ -1160,6 +1177,29 @@ each one matches a real selector in the stylesheet.
|
|
|
1160
1177
|
| `cls.selectionbar` | `ui-selectionbar` | base |
|
|
1161
1178
|
| `cls.selectionbarActions` | `ui-selectionbar__actions` | part |
|
|
1162
1179
|
| `cls.selectionbarCount` | `ui-selectionbar__count` | part |
|
|
1180
|
+
| `cls.selectionbarAnchorBlockEnd` | `ui-selectionbar--anchor-block-end` | modifier |
|
|
1181
|
+
| `cls.selectionbarAnchorBlockStart` | `ui-selectionbar--anchor-block-start` | modifier |
|
|
1182
|
+
| `cls.selectionbarAnchored` | `ui-selectionbar--anchored` | modifier |
|
|
1183
|
+
|
|
1184
|
+
### `.ui-severity`
|
|
1185
|
+
|
|
1186
|
+
| Registry key | Class | Kind |
|
|
1187
|
+
| --- | --- | --- |
|
|
1188
|
+
| `cls.severity` | `ui-severity` | base |
|
|
1189
|
+
|
|
1190
|
+
### `.ui-severity-dot`
|
|
1191
|
+
|
|
1192
|
+
| Registry key | Class | Kind |
|
|
1193
|
+
| --- | --- | --- |
|
|
1194
|
+
| `cls.severityDot` | `ui-severity-dot` | base |
|
|
1195
|
+
|
|
1196
|
+
### `.ui-severity-row`
|
|
1197
|
+
|
|
1198
|
+
| Registry key | Class | Kind |
|
|
1199
|
+
| --- | --- | --- |
|
|
1200
|
+
| `cls.severityRow` | `ui-severity-row` | base |
|
|
1201
|
+
| `cls.severityRowMeta` | `ui-severity-row__meta` | part |
|
|
1202
|
+
| `cls.severityRowTitle` | `ui-severity-row__title` | part |
|
|
1163
1203
|
|
|
1164
1204
|
### `.ui-shortcut`
|
|
1165
1205
|
|
|
@@ -1511,10 +1551,15 @@ each one matches a real selector in the stylesheet.
|
|
|
1511
1551
|
| `cls.toolstripActions` | `ui-toolstrip__actions` | part |
|
|
1512
1552
|
| `cls.toolstripBrand` | `ui-toolstrip__brand` | part |
|
|
1513
1553
|
| `cls.toolstripContext` | `ui-toolstrip__context` | part |
|
|
1554
|
+
| `cls.toolstripFill` | `ui-toolstrip__fill` | part |
|
|
1514
1555
|
| `cls.toolstripGroup` | `ui-toolstrip__group` | part |
|
|
1515
1556
|
| `cls.toolstripSearch` | `ui-toolstrip__search` | part |
|
|
1557
|
+
| `cls.toolstripAnchorBlockEnd` | `ui-toolstrip--anchor-block-end` | modifier |
|
|
1558
|
+
| `cls.toolstripAnchorBlockStart` | `ui-toolstrip--anchor-block-start` | modifier |
|
|
1559
|
+
| `cls.toolstripAnchored` | `ui-toolstrip--anchored` | modifier |
|
|
1516
1560
|
| `cls.toolstripCompact` | `ui-toolstrip--compact` | modifier |
|
|
1517
1561
|
| `cls.toolstripFloating` | `ui-toolstrip--floating` | modifier |
|
|
1562
|
+
| `cls.toolstripPane` | `ui-toolstrip--pane` | modifier |
|
|
1518
1563
|
|
|
1519
1564
|
### `.ui-tooltip`
|
|
1520
1565
|
|
|
@@ -1672,6 +1717,12 @@ Exact mirror of the `:root` blocks in `css/tokens.css`
|
|
|
1672
1717
|
| `--space-lg` | `1.35rem` |
|
|
1673
1718
|
| `--space-xl` | `1.75rem` |
|
|
1674
1719
|
| `--space-2xl` | `2.5rem` |
|
|
1720
|
+
| `--tap-target` | `max(44px, 2.9rem)` |
|
|
1721
|
+
| `--tap-target-min` | `max(24px, 1.6rem)` |
|
|
1722
|
+
| `--safe-area-top` | `env(safe-area-inset-top, 0px)` |
|
|
1723
|
+
| `--safe-area-right` | `env(safe-area-inset-right, 0px)` |
|
|
1724
|
+
| `--safe-area-bottom` | `env(safe-area-inset-bottom, 0px)` |
|
|
1725
|
+
| `--safe-area-left` | `env(safe-area-inset-left, 0px)` |
|
|
1675
1726
|
| `--mono` | `'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'SF Mono', ui-monospace, monospace` |
|
|
1676
1727
|
| `--sans` | `'Inter', 'SF Pro Text', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif` |
|
|
1677
1728
|
| `--dot-font` | `'Doto', var(--mono)` |
|
package/docs/reporting.md
CHANGED
|
@@ -54,18 +54,18 @@ No install? Link the same files from a CDN. Pin the version — pre-1.0, breakin
|
|
|
54
54
|
changes ship in the minor (see [stability.md](./stability.md)):
|
|
55
55
|
|
|
56
56
|
```html
|
|
57
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.
|
|
58
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.
|
|
57
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.8.0/dist/bronto.css" />
|
|
58
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.8.0/dist/css/report-kit.css" />
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
Leaf-by-leaf CDN imports use the same `dist/css/` paths:
|
|
62
62
|
|
|
63
63
|
```html
|
|
64
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.
|
|
65
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.
|
|
66
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.
|
|
67
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.
|
|
68
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.
|
|
64
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.8.0/dist/bronto.css" />
|
|
65
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.8.0/dist/css/report.css" />
|
|
66
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.8.0/dist/css/dataviz.css" />
|
|
67
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.8.0/dist/css/annotations.css" />
|
|
68
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.8.0/dist/css/legend.css" />
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
The CDN serves the package's own `fonts/` next to the CSS, so font URLs resolve
|
|
@@ -879,7 +879,7 @@ or validation runtime.
|
|
|
879
879
|
|
|
880
880
|
```json
|
|
881
881
|
{
|
|
882
|
-
"$schema": "https://cdn.jsdelivr.net/npm/@ponchia/ui@0.
|
|
882
|
+
"$schema": "https://cdn.jsdelivr.net/npm/@ponchia/ui@0.8.0/schemas/report-claims.v1.schema.json",
|
|
883
883
|
"schemaVersion": "bronto-report-claims.v1",
|
|
884
884
|
"report": { "title": "Decision readiness", "type": "decision" },
|
|
885
885
|
"claims": [
|
package/docs/stability.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Public API stability
|
|
2
2
|
|
|
3
3
|
`@ponchia/ui` is pre-1.0. Breaking changes ship in the minor (`0.x.0`), and
|
|
4
|
-
patches are non-breaking. In practical terms: **PATCH releases (`0.
|
|
4
|
+
patches are non-breaking. In practical terms: **PATCH releases (`0.8.x`) are
|
|
5
5
|
non-breaking bug-fixes and additive changes — safe to upgrade without review;
|
|
6
6
|
MINOR releases (`0.x.0`) may include breaking changes and consumers should
|
|
7
7
|
review the CHANGELOG before upgrading.** Pin `~0.x` (tilde) to accept only
|
|
@@ -53,7 +53,7 @@ enough.
|
|
|
53
53
|
|
|
54
54
|
### Adoption evidence for 1.0
|
|
55
55
|
|
|
56
|
-
This snapshot records product evidence as of 2026-07-
|
|
56
|
+
This snapshot records product evidence as of 2026-07-20. Use three evidence
|
|
57
57
|
classes:
|
|
58
58
|
|
|
59
59
|
- **Downstream-proven:** A non-example app, site, report generator, or tool
|
|
@@ -68,13 +68,41 @@ Package-proven is necessary but does not establish demand. During the catalog
|
|
|
68
68
|
freeze, do not expand package-only surfaces. Recheck this table against real
|
|
69
69
|
consumer upgrades before the 1.0 release candidate.
|
|
70
70
|
|
|
71
|
+
> **The 0.8.0 consumer audit — read this before trusting the table below.** A
|
|
72
|
+
> full-surface audit of the largest downstream consumer (a Yjs-collaborative
|
|
73
|
+
> spatial canvas workspace: React, Vite, ~10k lines of its own CSS) found it
|
|
74
|
+
> using **26 of the 646 published classes**, and hand-rebuilding much of the
|
|
75
|
+
> rest — 10 bespoke empty states, 15 error surfaces, 17 control bars, three
|
|
76
|
+
> parallel severity vocabularies, its own Markdown prose layer, its own diff
|
|
77
|
+
> rows, its own meters, and two copies of visually-hidden text. Thirteen
|
|
78
|
+
> primitives that map almost exactly onto what it built return **zero** uses:
|
|
79
|
+
> `ui-state`, `ui-prose`, `ui-diff`, `ui-code`, `ui-meter`, `ui-progress`,
|
|
80
|
+
> `ui-toolstrip`, `ui-dot`, `ui-chip`, `ui-tag`, `ui-timeline`, `ui-steps`,
|
|
81
|
+
> `ui-job`.
|
|
82
|
+
>
|
|
83
|
+
> The lesson for this document is not about that consumer. It is that **"no
|
|
84
|
+
> inspected consumer imports the surface" has been measuring discoverability,
|
|
85
|
+
> not demand.** Those surfaces were not rejected; they were never found. The
|
|
86
|
+
> opt-in leaf model is right, but nothing tells a consumer which leaf it is
|
|
87
|
+
> about to reimplement — and `bronto-ui-check`, which catches part of it, was
|
|
88
|
+
> installed in that consumer and had never been run. Before any 1.0 decision
|
|
89
|
+
> retires a package-proven surface for lack of adoption, confirm the surface was
|
|
90
|
+
> *reachable*: named in the consumer's imports, or at least in a leaf it
|
|
91
|
+
> imports. Non-adoption of an unimported leaf is not evidence.
|
|
92
|
+
>
|
|
93
|
+
> The same audit produced this release's four consumer-driven changes (the tap
|
|
94
|
+
> target floor, the safe-area tokens, `ui-button__label`, and the dense tier)
|
|
95
|
+
> and the ADR-0001 canvas amendment. That is the intended loop: the consumer's
|
|
96
|
+
> local classes are the backlog, resolving either to a deletion there or an
|
|
97
|
+
> addition here.
|
|
98
|
+
|
|
71
99
|
| Surface family | Current evidence | 1.0 disposition |
|
|
72
100
|
| --- | --- | --- |
|
|
73
101
|
| Core CSS, class recipes, vanilla behaviors, tokens, and Tailwind bridge | Downstream-proven across five inspected non-example app, site, and service consumers. | Stabilize names and behavior contracts. Use consumer upgrades as the release-candidate proof. |
|
|
74
102
|
| Report, provenance, analytical CSS, annotations, glyphs, skins, workbench CSS, chart data, and Vega theme | Downstream-proven across four inspected report, site, dashboard, and tool consumers. | Keep opt-in. Stabilize the consumed paths; do not broaden the catalog during the freeze. |
|
|
75
|
-
| Controlled non-`<dialog>` modal | Package-proven by stack, portal, late-node, focus, and cleanup regressions.
|
|
76
|
-
| React, Solid, Qwik, Svelte, and Vue lifecycle adapters | Package-proven by packed examples, types, and lifecycle tests.
|
|
77
|
-
| Mermaid, D2, Shiki, Figma Variables, and the report-claims schema | Package-proven by generated-data, render, schema, and drift checks. No inspected non-example consumer currently supplies downstream proof for every path. | Keep compatible through 0.
|
|
103
|
+
| Controlled non-`<dialog>` modal | Package-proven by stack, portal, late-node, focus, and cleanup regressions. None of ten inspected non-example consumers initializes `initModal`. | Deprecated in 0.7; remove no earlier than 0.8 unless a real consumer adopts it. Native `<dialog>` + `initDialog` is the stable path. |
|
|
104
|
+
| React, Solid, Qwik, Svelte, and Vue lifecycle adapters | Package-proven by packed examples, types, and lifecycle tests. None of ten inspected non-example consumers imports an adapter entrypoint. | Deprecated in 0.7; remove no earlier than 0.8 unless a real consumer adopts one. Vanilla behaviors remain stable. |
|
|
105
|
+
| Mermaid, D2, Shiki, Figma Variables, and the report-claims schema | Package-proven by generated-data, render, schema, and drift checks. No inspected non-example consumer currently supplies downstream proof for every path. | Keep compatible through 0.8.x, but decide each 1.0 contract from adoption evidence rather than generator coverage alone. |
|
|
78
106
|
|
|
79
107
|
After 1.0, breaking changes move to majors. Until then, the table below is the
|
|
80
108
|
current public-surface matrix and the release policy above still applies.
|
|
@@ -85,18 +113,20 @@ current public-surface matrix and the release policy above still applies.
|
|
|
85
113
|
| JS module format | Stable | JS subpaths are ESM-only. CommonJS consumers use dynamic `import()`. |
|
|
86
114
|
| CSS class names (`.ui-*`) | Stable | Names and documented modifier semantics are public. Internal selector structure and leaf-file boundaries may change. |
|
|
87
115
|
| Class recipes (`@ponchia/ui/classes`) | Stable | Exported `cls`, `ui`, `cx`, `attrs`, recipe names, ARIA attribute helper names, and option unions are public. |
|
|
116
|
+
| Severity ladder (`SEVERITY_LEVELS`, `severity()`, `.ui-severity*`) | Stable additive | The tier names and **their order** are public: `critical` › `error` › `warning` › `notice` › `ok`, with `unknown` deliberately outside the ordering as the fallback for "not measured". `severity()` returns `{ class, 'data-level' }`, and `data-level` is the public attribute contract — a host may carry it on its own element and read `var(--severity-tone)`. New tiers would be a breaking reorder, not an addition, so the ladder is closed; new *parts* (`chip`/`dot`/`row`) are additive. Ships in the opt-in `css/state.css`, not the default bundle. |
|
|
88
117
|
| Class vocabulary as data (`@ponchia/ui/classes.json`, `@ponchia/ui/vscode.css-custom-data.json`) | Stable additive | The JSON shape (`groups`/`classes`/`states`/`customProperties`) and class/custom-property entries are public — for validating markup from a non-JS/non-TS host or editor integration. Generated from `cls` and CSS selectors; `classes.json`, `.d.ts`, reference docs, and VS Code custom data are drift-checked together. New classes/hooks are additive. |
|
|
89
118
|
| Design tokens | Stable names/roles | Token names and documented roles are public. Exact values and generated colour math outputs may change for visual tuning before 1.0. |
|
|
90
119
|
| `--accent-1..6` | Stable names/roles | A subtle-to-bold accent ramp derived from `--accent`. Exact resolved values are visual tuning; algorithm changes require release-note visibility and resolver/browser checks. |
|
|
91
|
-
| Tokens as data (`tokens.json`, `tokens.dtcg.json`, `tokens/resolved.json`, `tokens/figma.variables.json`) | Stable additive | The JSON shapes are public for non-CSS/non-JS consumers and handoff tooling. `resolved.json` exposes `light`/`dark`
|
|
120
|
+
| Tokens as data (`tokens.json`, `tokens.dtcg.json`, `tokens/resolved.json`, `tokens/figma.variables.json`) | Stable additive from 0.7 | The JSON shapes are public for non-CSS/non-JS consumers and handoff tooling. `tokens.dtcg.json` is a DTCG 2025.10 resolved projection with structured typed values; `tokens.json` preserves authored CSS expressions. `resolved.json` exposes flat `light`/`dark` colours and non-colour `scale`; `figma.variables.json` is the local Figma handoff. Token names/roles are stable; exact resolved values are visual tuning (pin `~0.x`). |
|
|
92
121
|
| Schemas (`schemas/*.schema.json`, `schemas/report-claims.v1.schema.json`) | Stable additive | Declarative JSON Schema contracts for package-adjacent tooling data. Existing schema files and enum values are public within a compatible minor; new optional properties and new schema files are additive. No validator runtime ships. |
|
|
93
122
|
| Theme axes | Mixed | `data-theme` (light/dark) is the **contractual** base. `data-surface="oled"`, `data-density`, and `data-contrast` are **convenience presets** — best-effort visual variants, **not** part of the stability contract; their presence and exact values may change for tuning. Computed-style smoke tests guard that the presets apply to their intended token families. |
|
|
94
123
|
| Tailwind v4 bridge (`@ponchia/ui/tailwind`, `@ponchia/ui/tailwind.css`) | Stable additive | CSS-only token/variant bridge for Tailwind v4. It maps Bronto tokens and variants into Tailwind namespaces; it must not import Bronto component CSS or change the default bundle. |
|
|
95
124
|
| Behavior attributes (`data-bronto-*`) | Stable | Attribute names and documented markup relationships are public. Behavior internals are not. |
|
|
96
125
|
| Behavior functions (`@ponchia/ui/behaviors`) | Stable | Exported function names, option names, custom events, SSR no-op behavior, idempotency, and cleanup-returning contract are public. |
|
|
126
|
+
| Consumer checker (`bronto-ui-check`) | Stable additive | The installed binary lexically validates literal `ui-*` classes and unresolved reserved-token references in supported code, style, and template sources after stripping comments; Markdown prose and generated/vendor directories are excluded. Exit 0 means no findings, exit 1 means contract findings, and exit 2 means invocation/input failure. New checks may be additive; an existing valid literal cannot become an error within a patch unless the corresponding public contract was already invalid. |
|
|
97
127
|
| Glyph registry/renderers (`@ponchia/ui/glyphs`) | Stable additive | Existing glyph names stay valid. New glyphs are additive. Renderer option names and accessibility defaults are public. |
|
|
98
128
|
| `.ui-icon` mask renderer | Stable | Class name, `--icon-size`, currentColor inheritance, and `--icon-mask` contract are public. The internal data URL encoding is not. |
|
|
99
|
-
| Framework lifecycle adapters (`react`/`solid`/`qwik`/`svelte`/`vue`) |
|
|
129
|
+
| Framework lifecycle adapters (`react`/`solid`/`qwik`/`svelte`/`vue`) | Deprecated in 0.7 | Hook/action/directive names, optional peer behavior, root resolver support, and cleanup remain compatible through 0.7. Scheduled for removal no earlier than 0.8 under ADR-0004. Use vanilla behaviors in framework lifecycle code. |
|
|
100
130
|
| Skins (`@ponchia/ui/skins`, `css/skins.css`) | Stable additive | Existing skin names stay valid. New skins are additive. Skins are root-level choices. Skin CSS is opt-in, not in the default bundle. |
|
|
101
131
|
| Charts (`@ponchia/ui/charts`, `charts.json`, `css/dataviz.css`) | Stable additive | Token names, JSON shape, and 8 categorical slots are public. `css/dataviz.css` is opt-in, not in the default bundle. Exact palette values may tune if gates and release notes justify it. |
|
|
102
132
|
| External renderer themes (`@ponchia/ui/mermaid`, `@ponchia/ui/mermaid.json`, `@ponchia/ui/d2`, `@ponchia/ui/d2.json`, `@ponchia/ui/vega`, `@ponchia/ui/vega.json`) | Stable additive | Theme helper names, JSON shapes, and supported renderer theme slots are public. Values are resolved colours because Mermaid, D2, and Vega cannot consume Bronto CSS variables directly. Exact colours may tune with token changes, but `check:mermaid`, `check:d2`, and `check:vega` must prove every exported theme resolves with no `var()` leaks. No renderer runtime ships. |
|
|
@@ -119,7 +149,7 @@ current public-surface matrix and the release policy above still applies.
|
|
|
119
149
|
| Lifecycle state (`css/state.css`, `.ui-state*`, `.ui-syncbar`) | Stable additive | The `.ui-state`/`__label`/`__detail`/`--busy` classes, the canonical lifecycle state modifiers, `.ui-syncbar`, and the `ui.state` recipe are public. Opt-in, not in the default bundle. |
|
|
120
150
|
| Generated / AI-trust (`css/generated.css`, `.ui-generated*`, `.ui-origin-label*`, `.ui-reasoning*`, `.ui-tool-log`, `.ui-tool-call*`) | Stable additive | The generated-content, origin-label (incl. `--ai`), reasoning-trace and tool-log/tool-call class names and the `ui.originLabel` recipe are public. Opt-in, not in the default bundle. Not a chat kit; no confidence widget. |
|
|
121
151
|
| Workbench (`css/workbench.css`, `.ui-splitter*`, `.ui-inspector*`, `.ui-property*`, `.ui-selectionbar*`, `initSplitter`) | Stable additive | Splitter, inspector, property-row and selection-bar class + BEM part names are public (no recipe). `data-bronto-splitter`, `--splitter-pos`, `bronto:splitter:resize`, and the `initSplitter` cleanup contract are public. Opt-in, not in the default bundle. The host owns pane content, persistence, collapse policy, and selection state. |
|
|
122
|
-
| Command palette (`css/command.css`, `.ui-command*`, `initCommand
|
|
152
|
+
| Command palette (`css/command.css`, `.ui-command*`, `initCommand`) | Stable additive | Command class/part names, the `data-bronto-command` attribute, and the event contract — `bronto:command:select` (`detail: { value, label }`) and `bronto:command:close` — are public. Bronto filters + navigates (APG combobox/listbox); the host owns the action registry/execution. Opt-in, not in the default bundle, no global hotkey. The deprecated framework bindings remain compatible only for the 0.7 migration window. |
|
|
123
153
|
| Spark microcharts (`css/spark.css`, `.ui-spark*`) | Stable additive | Spark class names and inline sizing/label slots are public. Opt-in, not in the default bundle. The host owns data reduction and accessible surrounding text. |
|
|
124
154
|
| Bullet graphs (`css/bullet.css`, `.ui-bullet*`) | Stable additive | Bullet class names and measure/target/range custom-property slots are public. Opt-in, not in the default bundle. The host owns thresholds, units, and data mapping. |
|
|
125
155
|
| Diffs (`css/diff.css`, `.ui-diff*`) | Stable additive | Diff container/line/gutter class names and add/remove/highlight state modifiers are public. Opt-in, not in the default bundle. Bronto styles evidence; it does not compute diffs. |
|
|
@@ -129,7 +159,7 @@ current public-surface matrix and the release policy above still applies.
|
|
|
129
159
|
| Terms / glossary (`css/term.css`, `.ui-term`, `.ui-glossary`) | Stable additive | Term and glossary class names plus native-popover definition hooks are public. Opt-in, not in the default bundle. The host owns glossary content and terminology policy. |
|
|
130
160
|
| Contents rail (`css/toc.css`, `.ui-toc*`) | Stable additive | TOC rail class/part names and current-section state classes are public. Opt-in, not in the default bundle. The host owns section observation and active-state updates. |
|
|
131
161
|
| Tree outlines (`css/tree.css`, `.ui-tree*`) | Stable additive | Tree outline class names, depth styling, and native `<details>` composition are public. Opt-in, not in the default bundle. The host owns tree data, lazy loading, and selection state. |
|
|
132
|
-
| Controlled-modal focus trap (`initModal`, `useModal`, `data-bronto-modal`) |
|
|
162
|
+
| Controlled-modal focus trap (`initModal`, adapter `useModal`, `data-bronto-modal`) | Deprecated in 0.7 | The controlled non-`<dialog>` path remains compatible through 0.7 and is scheduled for removal no earlier than 0.8 under ADR-0004. Use native `<dialog>` with `initDialog()`; it remains stable. |
|
|
133
163
|
| Keyboard-shortcut hint (`.ui-shortcut`, `.ui-shortcut__sep`) | Stable additive | Class names for the chord/sequence hint over `.ui-kbd` are public. Ships in the core layer (class-only, no recipe). |
|
|
134
164
|
| Agent and migration data (`llms.txt`, `MIGRATIONS.json`) | Stable additive | `llms.txt` stays shipped as the offline agent entrypoint. `MIGRATIONS.json` stays a machine-readable migration map for breaking renames/removals. New migration entries are additive; removal of a migration record requires the same breaking-change discipline as the surface it describes. |
|
|
135
165
|
| Generated docs shipped in npm | Stable paths | Exported docs paths stay shipped and resolvable within a compatible minor. Markdown/text assets are for reading unless your runtime has a loader. Generated content may change with the source contract. |
|
package/docs/state.md
CHANGED
|
@@ -124,14 +124,64 @@ For indeterminate jobs, omit the progress block or omit `aria-valuenow`, and
|
|
|
124
124
|
make the written state clear ("Running", "Waiting for worker", "Retrying").
|
|
125
125
|
Use `ui-job--compact` for dense queues.
|
|
126
126
|
|
|
127
|
+
## Severity — `.ui-severity`
|
|
128
|
+
|
|
129
|
+
`.ui-state` answers *what is this thing doing*. Severity answers *how bad is
|
|
130
|
+
it*. Bronto already shipped the tones as per-component modifiers, but never the
|
|
131
|
+
**scale** — the tier names, their order, and the attribute carrying them. So
|
|
132
|
+
every consumer invents the ladder, and inside one app it drifts: one surface
|
|
133
|
+
saying `critical|error|warning|note`, the next `bad|warn`, a third
|
|
134
|
+
`critical|warning|info|ok`, under two different attribute names. Findings then
|
|
135
|
+
do not sort against alerts, and a filter written for one list misses the other.
|
|
136
|
+
|
|
137
|
+
The ladder, worst to best:
|
|
138
|
+
|
|
139
|
+
| Level | Means |
|
|
140
|
+
| --- | --- |
|
|
141
|
+
| `critical` | Broken now, and still losing something. |
|
|
142
|
+
| `error` | Something failed; it is not currently getting worse. |
|
|
143
|
+
| `warning` | A threshold was crossed; nothing has failed yet. |
|
|
144
|
+
| `notice` | Worth reading, no action implied. |
|
|
145
|
+
| `ok` | Checked and healthy — an **assertion**, not the absence of news. |
|
|
146
|
+
| `unknown` | Not measured, stale, or the check itself failed. |
|
|
147
|
+
|
|
148
|
+
`unknown` sits **outside** the ordering on purpose. It is not "slightly worse
|
|
149
|
+
than ok", it is "we do not know" — and collapsing it into `ok` is how a dead
|
|
150
|
+
collector reads as a healthy system. `SEVERITY_LEVELS` therefore excludes it.
|
|
151
|
+
|
|
152
|
+
The level travels on `data-level`, one attribute name, so the same selector
|
|
153
|
+
works on a chip, a row, a dot, or your own element via `var(--severity-tone)`:
|
|
154
|
+
|
|
155
|
+
```html
|
|
156
|
+
<span class="ui-severity" data-level="critical">Critical</span>
|
|
157
|
+
|
|
158
|
+
<li class="ui-severity-row" data-level="warning">
|
|
159
|
+
<span class="ui-severity-row__title">Disk 84% on kpi-1</span>
|
|
160
|
+
<span class="ui-severity-row__meta">12m</span>
|
|
161
|
+
</li>
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Colour is never the only channel (WCAG 1.4.1): `.ui-severity` carries an
|
|
165
|
+
author-written label, and `.ui-severity-dot` is only for rows that **also** name
|
|
166
|
+
their level in text.
|
|
167
|
+
|
|
127
168
|
## Recipe
|
|
128
169
|
|
|
129
170
|
```js
|
|
130
|
-
import { ui } from '@ponchia/ui/classes';
|
|
171
|
+
import { ui, severity, SEVERITY_LEVELS } from '@ponchia/ui/classes';
|
|
131
172
|
|
|
132
173
|
ui.state({ state: 'saving', busy: true }); // "ui-state ui-state--saving ui-state--busy"
|
|
133
174
|
ui.state({ state: 'conflict' }); // "ui-state ui-state--conflict"
|
|
134
175
|
ui.job({ state: 'running' }); // "ui-job ui-job--running"
|
|
176
|
+
|
|
177
|
+
// Bundles the class WITH data-level, so the attribute that carries the meaning
|
|
178
|
+
// cannot be forgotten — the class alone paints the neutral tone and silently
|
|
179
|
+
// loses the level.
|
|
180
|
+
severity('critical'); // { class: 'ui-severity', 'data-level': 'critical' }
|
|
181
|
+
severity('warning', { part: 'row' }); // { class: 'ui-severity-row', … }
|
|
182
|
+
severity('nope'); // { class: 'ui-severity', 'data-level': 'unknown' }
|
|
183
|
+
|
|
184
|
+
SEVERITY_LEVELS; // ['critical','error','warning','notice','ok'] — sort/filter from this
|
|
135
185
|
```
|
|
136
186
|
|
|
137
187
|
## Scope
|
package/docs/theming.md
CHANGED
|
@@ -4,6 +4,46 @@
|
|
|
4
4
|
This is the **stable, supported surface** for re-branding without forking.
|
|
5
5
|
Anything not listed here is internal and may change between minor versions.
|
|
6
6
|
|
|
7
|
+
## Theme selection, persistence, and OS synchronization
|
|
8
|
+
|
|
9
|
+
Declare both supported schemes in the document head so browser-owned controls
|
|
10
|
+
and chrome follow the active theme:
|
|
11
|
+
|
|
12
|
+
```html
|
|
13
|
+
<meta name="color-scheme" content="light dark" />
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Call `initThemeToggle()` for any `[data-bronto-theme-toggle]` controls. It
|
|
17
|
+
persists an explicit light/dark choice in `localStorage['bronto-theme']`, keeps
|
|
18
|
+
`aria-pressed` current, and emits `bronto:themechange` on `<html>`. When there is
|
|
19
|
+
no explicit `data-theme`, an OS preference change emits the same event, so
|
|
20
|
+
canvas, SVG, MapLibre, and other non-CSS renderers can redraw without a separate
|
|
21
|
+
media-query listener.
|
|
22
|
+
|
|
23
|
+
```js
|
|
24
|
+
import { initThemeToggle } from '@ponchia/ui/behaviors';
|
|
25
|
+
|
|
26
|
+
const stopTheme = initThemeToggle();
|
|
27
|
+
document.documentElement.addEventListener('bronto:themechange', (event) => {
|
|
28
|
+
redrawNonCssSurface(event.detail.theme);
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
For a stored preference without first-paint flash, put this render-blocking
|
|
33
|
+
script in `<head>` before the stylesheet/module code:
|
|
34
|
+
|
|
35
|
+
```html
|
|
36
|
+
<script>
|
|
37
|
+
try {
|
|
38
|
+
var theme = localStorage.getItem('bronto-theme');
|
|
39
|
+
if (theme === 'light' || theme === 'dark') document.documentElement.dataset.theme = theme;
|
|
40
|
+
} catch (error) {}
|
|
41
|
+
</script>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
To return to automatic OS mode, remove both the storage item and `data-theme`,
|
|
45
|
+
then reinitialize the theme behavior so it can subscribe to OS changes again.
|
|
46
|
+
|
|
7
47
|
## The brand knob: `--accent`
|
|
8
48
|
|
|
9
49
|
The accent family derives from `--accent` via `color-mix()` and the
|
|
@@ -100,6 +140,24 @@ you change CSS `--accent` later.
|
|
|
100
140
|
[ADR-0003](adr/0003-theme-model.md) for the theme-model rationale.
|
|
101
141
|
- **Radius** — `--radius-sm … --radius-xl`, `--radius-pill`. The Nothing
|
|
102
142
|
default is near-sharp; raise these for a softer brand.
|
|
143
|
+
- **Tap targets** — `--tap-target` (44px, WCAG 2.5.5 / iOS HIG / Material) is
|
|
144
|
+
the floor every control floats to inside `@media (pointer: coarse)`;
|
|
145
|
+
`--tap-target-min` (24px) is the WCAG 2.5.8 AA minimum used by controls that
|
|
146
|
+
only have to clear the smaller bar. Both are authored as `max(px, rem)` on
|
|
147
|
+
purpose: they scale up with a larger root font but **cannot shrink below the
|
|
148
|
+
standard** if you re-point `html { font-size }`. If you override them, keep
|
|
149
|
+
the clamp — a bare rem is how a 44px floor quietly becomes 43.5px. Raise them
|
|
150
|
+
for a glove-friendly or kiosk build; do not lower them.
|
|
151
|
+
- **Safe areas** — `--safe-area-top / -right / -bottom / -left` default to
|
|
152
|
+
`env(safe-area-inset-*, 0px)`, so they are 0 everywhere except a device with
|
|
153
|
+
a display cutout or a gesture bar. Every viewport-anchored surface Bronto
|
|
154
|
+
ships reads them: the app rail and topbar, a sticky site header, the skip
|
|
155
|
+
link, both toast stacks, the drawer modal and the lightbox. Override them
|
|
156
|
+
when your host supplies its own insets — an embedded webview, a kiosk frame,
|
|
157
|
+
or a test runner that cannot emulate `env()`, which is the reason the values
|
|
158
|
+
are indirected through custom properties rather than called at the point of
|
|
159
|
+
use. Consumers positioning their own floating chrome should follow the same
|
|
160
|
+
convention: `inset-block-end: max(<your offset>, var(--safe-area-bottom))`.
|
|
103
161
|
- **Type** — `--display` (dot-matrix face), `--mono`, `--sans`. Override
|
|
104
162
|
to drop Doto or swap the body face; the token layer keeps working even
|
|
105
163
|
if you self-host fonts (see the `fonts.css` note in the README).
|
|
@@ -307,11 +365,15 @@ semantics — the CSS can't add ARIA for you:
|
|
|
307
365
|
`@ponchia/ui/tokens.dtcg.json` is the token model in the W3C Design
|
|
308
366
|
Tokens Community Group format, for Style Dictionary / Figma / other
|
|
309
367
|
tooling. Generated from `tokens/index.js` and drift-checked by
|
|
310
|
-
`npm run check`.
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
368
|
+
`npm run check`. From 0.7 it is a resolved DTCG 2025.10 projection: colours use
|
|
369
|
+
structured sRGB values, dimensions use `{ value, unit }`, durations use
|
|
370
|
+
`{ value, unit }`, and every typed token has a non-null portable value. Derived
|
|
371
|
+
`var()` / `color-mix()` colours are resolved independently in the light and dark
|
|
372
|
+
groups. The authored CSS remains in `$extensions["com.ponchia.css"].authoredValue`.
|
|
373
|
+
CSS-only expressions that cannot be represented portably, including shadows,
|
|
374
|
+
and em-based letter-spacing remain in `@ponchia/ui/tokens.json` rather than
|
|
375
|
+
becoming fake DTCG values. The root extension lists every deliberately omitted
|
|
376
|
+
CSS variable.
|
|
315
377
|
|
|
316
378
|
`@ponchia/ui/tokens/figma.variables.json` is the resolved local handoff for
|
|
317
379
|
Figma Variables import/sync scripts. It is generated from `tokens/resolved.json`
|