@ponchia/ui 0.6.11 → 0.7.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 +113 -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 +17 -13
- package/behaviors/modal.d.ts.map +1 -1
- package/behaviors/modal.js +281 -106
- package/behaviors/popover.d.ts.map +1 -1
- package/behaviors/popover.js +50 -2
- 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 +7 -0
- package/classes/vscode.css-custom-data.json +1 -1
- package/css/disclosure.css +10 -0
- package/css/dots.css +43 -18
- package/css/feedback.css +35 -0
- package/css/report.css +0 -40
- package/css/site.css +10 -0
- package/css/tokens.css +1 -1
- package/dist/bronto.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/report-kit.css +1 -1
- package/dist/css/report.css +1 -1
- package/dist/css/site.css +1 -1
- package/dist/css/tokens.css +1 -1
- package/docs/adr/0004-prune-unused-adapters.md +34 -0
- package/docs/architecture.md +15 -11
- package/docs/command.md +18 -4
- package/docs/migrations/0.6-to-0.7.md +85 -0
- package/docs/package-contract.md +10 -5
- package/docs/reference.md +1 -1
- package/docs/reporting.md +8 -8
- package/docs/stability.md +36 -10
- package/docs/theming.md +49 -5
- package/docs/usage.md +68 -18
- package/docs/workbench.md +16 -2
- 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 +2 -2
- package/tokens/index.js +1 -1
- package/tokens/index.json +2 -2
- package/tokens/resolved.json +1 -1
- package/tokens/tokens.dtcg.json +2508 -399
- package/vue/index.d.ts.map +1 -1
- package/vue/index.js +4 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Migrating 0.6 to 0.7
|
|
2
|
+
|
|
3
|
+
Machine-readable migration graph: [`MIGRATIONS.json`](../../MIGRATIONS.json).
|
|
4
|
+
|
|
5
|
+
0.7.0 repairs public contracts found by auditing ten real consumers. It does
|
|
6
|
+
not add another component family. The only immediate breaking change is the
|
|
7
|
+
value shape of `tokens.dtcg.json`.
|
|
8
|
+
|
|
9
|
+
## 1. Update DTCG readers
|
|
10
|
+
|
|
11
|
+
`@ponchia/ui/tokens.dtcg.json` now follows the DTCG 2025.10 typed-value format.
|
|
12
|
+
Colors and dimensions are structured values instead of CSS strings, and the
|
|
13
|
+
file contains no `null` placeholders.
|
|
14
|
+
|
|
15
|
+
Before 0.7:
|
|
16
|
+
|
|
17
|
+
```js
|
|
18
|
+
const accent = tokens.color.light.accent.DEFAULT.$value; // '#d71921'
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
From 0.7:
|
|
22
|
+
|
|
23
|
+
```js
|
|
24
|
+
const accent = tokens.color.light.accent.DEFAULT.$value;
|
|
25
|
+
// { colorSpace: 'srgb', components: [0.843137, 0.098039, 0.129412], alpha: 1, hex: '#d71921' }
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Dimensions now use the same structured form:
|
|
29
|
+
|
|
30
|
+
```js
|
|
31
|
+
tokens.scale.space.md.$value; // { value: 1, unit: 'rem' }
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Derived `var()` and `color-mix()` colors are resolved separately for the light
|
|
35
|
+
and dark groups. Their authored CSS expression remains available under
|
|
36
|
+
`$extensions["com.ponchia.css"].authoredValue`.
|
|
37
|
+
|
|
38
|
+
If your tool needs every raw CSS expression, including CSS-only shadows and
|
|
39
|
+
em-based letter-spacing, read `@ponchia/ui/tokens.json` instead. If it only needs
|
|
40
|
+
static values for rendering, `@ponchia/ui/tokens/resolved.json` remains the
|
|
41
|
+
simpler flat projection. The DTCG root extension lists the deliberately omitted
|
|
42
|
+
CSS variables.
|
|
43
|
+
|
|
44
|
+
## 2. Add a non-drag splitter path
|
|
45
|
+
|
|
46
|
+
Keep the existing separator for pointer dragging and keyboard operation. Add
|
|
47
|
+
normal buttons inside the splitter so a pointer user can resize without a drag:
|
|
48
|
+
|
|
49
|
+
```html
|
|
50
|
+
<button type="button" data-bronto-splitter-adjust="-10">Narrow first pane</button>
|
|
51
|
+
<button type="button" data-bronto-splitter-adjust="10">Widen first pane</button>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
The value is a signed percentage-point delta. `initSplitter()` clamps it to the
|
|
55
|
+
separator's `aria-valuemin` and `aria-valuemax`, updates `--splitter-pos`, and
|
|
56
|
+
emits the existing `bronto:splitter:resize` event.
|
|
57
|
+
|
|
58
|
+
## 3. Replace deprecated package-only adapters
|
|
59
|
+
|
|
60
|
+
The React, Solid, Qwik, Svelte, and Vue adapter subpaths remain compatible in
|
|
61
|
+
0.7, but are deprecated for removal no earlier than 0.8. No inspected real
|
|
62
|
+
consumer uses them. Initialize the framework-agnostic behavior in the
|
|
63
|
+
framework's normal client lifecycle and retain its cleanup function.
|
|
64
|
+
|
|
65
|
+
The controlled non-`<dialog>` `initModal()` path follows the same deprecation
|
|
66
|
+
window. Prefer a native `<dialog class="ui-modal">` with `initDialog()`.
|
|
67
|
+
|
|
68
|
+
## 4. Check consumer literals
|
|
69
|
+
|
|
70
|
+
Run the package's zero-dependency checker after upgrading:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
npx --no-install bronto-ui-check src
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
It reports literal `ui-*` classes absent from the shipped registry and
|
|
77
|
+
unresolved Bronto-like `var(--*)` references. Use `--allow-class` or
|
|
78
|
+
`--allow-token` only for an intentional consumer-owned exception.
|
|
79
|
+
|
|
80
|
+
## Re-pin
|
|
81
|
+
|
|
82
|
+
```jsonc
|
|
83
|
+
// package.json — 0.7 is a breaking minor under the pre-1.0 policy
|
|
84
|
+
"@ponchia/ui": "~0.7.0"
|
|
85
|
+
```
|
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
|
@@ -1678,7 +1678,7 @@ Exact mirror of the `:root` blocks in `css/tokens.css`
|
|
|
1678
1678
|
| `--display` | `var(--dot-font)` |
|
|
1679
1679
|
| `--display-weight` | `700` |
|
|
1680
1680
|
| `--display-weight-strong` | `800` |
|
|
1681
|
-
| `--text-2xs` | `0.
|
|
1681
|
+
| `--text-2xs` | `0.72rem` |
|
|
1682
1682
|
| `--text-xs` | `0.76rem` |
|
|
1683
1683
|
| `--text-sm` | `0.86rem` |
|
|
1684
1684
|
| `--text-base` | `0.95rem` |
|
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.7.0/dist/bronto.css" />
|
|
58
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.7.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.7.0/dist/bronto.css" />
|
|
65
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.7.0/dist/css/report.css" />
|
|
66
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.7.0/dist/css/dataviz.css" />
|
|
67
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.7.0/dist/css/annotations.css" />
|
|
68
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.7.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.7.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
|
-
# Public API
|
|
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.7.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
|
|
@@ -11,7 +11,7 @@ For the exhaustive package-manifest inventory — every `exports` key, every
|
|
|
11
11
|
shipped `files` entry, and the generated artifact provenance map — see
|
|
12
12
|
[package-contract.md](./package-contract.md).
|
|
13
13
|
|
|
14
|
-
## Path
|
|
14
|
+
## Path to 1.0
|
|
15
15
|
|
|
16
16
|
`1.0.0` is a stability declaration, not a catalog milestone. The package is
|
|
17
17
|
ready for 1.0 when the existing public contract is boring to upgrade:
|
|
@@ -36,7 +36,7 @@ ready for 1.0 when the existing public contract is boring to upgrade:
|
|
|
36
36
|
migration entry when machine-actionable, and the deprecate-one-minor policy
|
|
37
37
|
has been followed or explicitly exempted for provably-unreferenced surface.
|
|
38
38
|
|
|
39
|
-
### 1.0
|
|
39
|
+
### 1.0 readiness ledger
|
|
40
40
|
|
|
41
41
|
This ledger is the release-candidate checklist. A row is ready only when the
|
|
42
42
|
evidence column is green for the candidate commit; prose approval alone is not
|
|
@@ -51,6 +51,31 @@ enough.
|
|
|
51
51
|
| Bundle budget has headroom | `check:dist`, `check:public-metadata`, `check:pack`, and the README size badge keep default bundle and tarball claims visible. | Budget increases are intentional, reviewed, and named in `CHANGELOG.md`; accidental growth fails before release. |
|
|
52
52
|
| Deprecation history is clean | `check:migrations`, `check:release`, `check:versions`, `MIGRATIONS.json`, and this deprecation policy tie breaking changes to changelog and migration evidence. | No removal ships without either a deprecate-one-minor trail or an explicit BREAKING note for provably-unreferenced surface. |
|
|
53
53
|
|
|
54
|
+
### Adoption evidence for 1.0
|
|
55
|
+
|
|
56
|
+
This snapshot records product evidence as of 2026-07-20. Use three evidence
|
|
57
|
+
classes:
|
|
58
|
+
|
|
59
|
+
- **Downstream-proven:** A non-example app, site, report generator, or tool
|
|
60
|
+
imports the published surface and passes its own build or checks.
|
|
61
|
+
- **Package-proven:** Packed examples, unit tests, browser tests, and type tests
|
|
62
|
+
prove compatibility, but no inspected non-example consumer imports the
|
|
63
|
+
surface.
|
|
64
|
+
- **Speculative:** Neither downstream use nor a package-level executable proof
|
|
65
|
+
justifies freezing the surface into 1.0.
|
|
66
|
+
|
|
67
|
+
Package-proven is necessary but does not establish demand. During the catalog
|
|
68
|
+
freeze, do not expand package-only surfaces. Recheck this table against real
|
|
69
|
+
consumer upgrades before the 1.0 release candidate.
|
|
70
|
+
|
|
71
|
+
| Surface family | Current evidence | 1.0 disposition |
|
|
72
|
+
| --- | --- | --- |
|
|
73
|
+
| 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
|
+
| 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. 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. |
|
|
76
|
+
| 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. |
|
|
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.7.x, but decide each 1.0 contract from adoption evidence rather than generator coverage alone. |
|
|
78
|
+
|
|
54
79
|
After 1.0, breaking changes move to majors. Until then, the table below is the
|
|
55
80
|
current public-surface matrix and the release policy above still applies.
|
|
56
81
|
|
|
@@ -63,15 +88,16 @@ current public-surface matrix and the release policy above still applies.
|
|
|
63
88
|
| 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. |
|
|
64
89
|
| 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. |
|
|
65
90
|
| `--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. |
|
|
66
|
-
| 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`
|
|
91
|
+
| 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`). |
|
|
67
92
|
| 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. |
|
|
68
93
|
| 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. |
|
|
69
94
|
| 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. |
|
|
70
95
|
| Behavior attributes (`data-bronto-*`) | Stable | Attribute names and documented markup relationships are public. Behavior internals are not. |
|
|
71
96
|
| Behavior functions (`@ponchia/ui/behaviors`) | Stable | Exported function names, option names, custom events, SSR no-op behavior, idempotency, and cleanup-returning contract are public. |
|
|
97
|
+
| 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. |
|
|
72
98
|
| 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. |
|
|
73
99
|
| `.ui-icon` mask renderer | Stable | Class name, `--icon-size`, currentColor inheritance, and `--icon-mask` contract are public. The internal data URL encoding is not. |
|
|
74
|
-
| Framework lifecycle adapters (`react`/`solid`/`qwik`/`svelte`/`vue`) |
|
|
100
|
+
| 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. |
|
|
75
101
|
| 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. |
|
|
76
102
|
| 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. |
|
|
77
103
|
| 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. |
|
|
@@ -94,7 +120,7 @@ current public-surface matrix and the release policy above still applies.
|
|
|
94
120
|
| 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. |
|
|
95
121
|
| 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. |
|
|
96
122
|
| 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. |
|
|
97
|
-
| Command palette (`css/command.css`, `.ui-command*`, `initCommand
|
|
123
|
+
| 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. |
|
|
98
124
|
| 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. |
|
|
99
125
|
| 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. |
|
|
100
126
|
| 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. |
|
|
@@ -104,13 +130,13 @@ current public-surface matrix and the release policy above still applies.
|
|
|
104
130
|
| 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. |
|
|
105
131
|
| 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. |
|
|
106
132
|
| 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. |
|
|
107
|
-
| Controlled-modal focus trap (`initModal`, `useModal`, `data-bronto-modal`) |
|
|
133
|
+
| 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. |
|
|
108
134
|
| 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). |
|
|
109
135
|
| 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. |
|
|
110
136
|
| 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. |
|
|
111
137
|
| Demo, examples, tests, scripts | Internal | Useful for learning and verification, but not shipped runtime API unless a path is explicitly exported in `package.json`. |
|
|
112
138
|
|
|
113
|
-
## Deprecation
|
|
139
|
+
## Deprecation policy
|
|
114
140
|
|
|
115
141
|
Public surface (`.ui-*` classes, `data-bronto-*` attributes, `cls`/token keys,
|
|
116
142
|
behavior signatures, and exported schema values) is removed on a
|
|
@@ -126,7 +152,7 @@ A token/class/attribute that is provably referenced by no shipped CSS,
|
|
|
126
152
|
component, behavior, or doc may skip that window and be removed with a BREAKING
|
|
127
153
|
entry plus migration note; there is no working call-site to keep alive.
|
|
128
154
|
|
|
129
|
-
## Trust
|
|
155
|
+
## Trust boundary
|
|
130
156
|
|
|
131
157
|
Behaviors assume trusted application markup. If a delegated root includes
|
|
132
158
|
untrusted CMS or user HTML, sanitize it first or do not initialize behaviors on
|
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
|
|
@@ -307,11 +347,15 @@ semantics — the CSS can't add ARIA for you:
|
|
|
307
347
|
`@ponchia/ui/tokens.dtcg.json` is the token model in the W3C Design
|
|
308
348
|
Tokens Community Group format, for Style Dictionary / Figma / other
|
|
309
349
|
tooling. Generated from `tokens/index.js` and drift-checked by
|
|
310
|
-
`npm run check`.
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
350
|
+
`npm run check`. From 0.7 it is a resolved DTCG 2025.10 projection: colours use
|
|
351
|
+
structured sRGB values, dimensions use `{ value, unit }`, durations use
|
|
352
|
+
`{ value, unit }`, and every typed token has a non-null portable value. Derived
|
|
353
|
+
`var()` / `color-mix()` colours are resolved independently in the light and dark
|
|
354
|
+
groups. The authored CSS remains in `$extensions["com.ponchia.css"].authoredValue`.
|
|
355
|
+
CSS-only expressions that cannot be represented portably, including shadows,
|
|
356
|
+
and em-based letter-spacing remain in `@ponchia/ui/tokens.json` rather than
|
|
357
|
+
becoming fake DTCG values. The root extension lists every deliberately omitted
|
|
358
|
+
CSS variable.
|
|
315
359
|
|
|
316
360
|
`@ponchia/ui/tokens/figma.variables.json` is the resolved local handoff for
|
|
317
361
|
Figma Variables import/sync scripts. It is generated from `tokens/resolved.json`
|
package/docs/usage.md
CHANGED
|
@@ -362,23 +362,29 @@ element (e.g. `aria-label="Ada Lovelace"`) because the initials alone don't
|
|
|
362
362
|
convey identity to AT. Keep initials to ~2 characters — the box is
|
|
363
363
|
`overflow: hidden` and silently clips a third.
|
|
364
364
|
|
|
365
|
-
## Modal: native `<dialog>`
|
|
365
|
+
## Modal: use native `<dialog>`
|
|
366
366
|
|
|
367
367
|
Prefer the **native `<dialog>`** path — you get top-layer, backdrop and
|
|
368
368
|
focus-trap free (wire it with `initDialog` for open-triggers + focus-return).
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
369
|
+
The older `ui-modal.is-open` + `data-bronto-modal` + `initModal()` path remains
|
|
370
|
+
compatible throughout 0.7, but is deprecated for removal no earlier than 0.8.
|
|
371
|
+
It duplicates platform focus, stacking, and inert ownership and no inspected
|
|
372
|
+
real consumer uses it. Migrate portals to a native `<dialog>` where possible;
|
|
373
|
+
if a framework must retain the controlled path during 0.7, keep the existing
|
|
374
|
+
accessible name and `bronto:modal:close` handling unchanged.
|
|
375
|
+
|
|
376
|
+
Controlled modals share one document-level stack. Opening a sibling portal
|
|
377
|
+
modal makes the previous modal inert and keeps only the new top modal
|
|
378
|
+
interactive; closing it restores focus into the previous modal. An
|
|
379
|
+
`initPopover()` trigger inside the top modal may target a panel portaled
|
|
380
|
+
elsewhere in the document: while that panel is open, it joins the live modal
|
|
381
|
+
tree and owns Escape without releasing unrelated background content. Background
|
|
382
|
+
nodes added after the modal opens are trapped too. If a controlled parent modal
|
|
383
|
+
closes while a descendant still carries `is-open`, the descendant is suspended
|
|
384
|
+
with the parent and resumes if the parent reopens.
|
|
385
|
+
|
|
386
|
+
**Scroll-lock is not automatic.** A native `<dialog>` does not freeze background
|
|
387
|
+
scroll — the page behind an open modal can
|
|
382
388
|
still scroll. If that matters, toggle a lock yourself while the modal is open
|
|
383
389
|
(`document.documentElement.style.overflow = 'hidden'`, restored on close), or add
|
|
384
390
|
`html:has(dialog[open]) { overflow: hidden }` for the native path.
|
|
@@ -564,6 +570,49 @@ authoring engine.
|
|
|
564
570
|
provide. The summary's title is the legible sans, not the display face — it's
|
|
565
571
|
meant to be read.
|
|
566
572
|
|
|
573
|
+
### Branded file input: keep the native control operable
|
|
574
|
+
|
|
575
|
+
Prefer the visible native control: `<input class="ui-file" type="file">` styles
|
|
576
|
+
its file-selector button without hiding the input. If the product needs a
|
|
577
|
+
button-shaped label, keep the native input focusable inside the label and expose
|
|
578
|
+
its focus on the visible wrapper. Never use `display: none` on the input: that
|
|
579
|
+
removes it from keyboard navigation.
|
|
580
|
+
|
|
581
|
+
```html
|
|
582
|
+
<label class="ui-button upload-button">
|
|
583
|
+
Choose file
|
|
584
|
+
<input class="ui-visually-hidden" type="file" name="document" />
|
|
585
|
+
</label>
|
|
586
|
+
```
|
|
587
|
+
|
|
588
|
+
```css
|
|
589
|
+
.upload-button:focus-within {
|
|
590
|
+
outline: 3px solid var(--focus-ring);
|
|
591
|
+
outline-offset: var(--focus-offset);
|
|
592
|
+
}
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
### Sortable table: the button is part of the contract
|
|
596
|
+
|
|
597
|
+
Put a real button in each sortable header, mark the table, then initialize the
|
|
598
|
+
behavior. Use `data-sort="num"` for numeric columns and `data-sort-value` on a
|
|
599
|
+
cell when its displayed text is not a canonical sortable value.
|
|
600
|
+
|
|
601
|
+
```html
|
|
602
|
+
<table class="ui-table" data-bronto-sortable>
|
|
603
|
+
<thead><tr>
|
|
604
|
+
<th><button class="ui-table__sort" data-sort type="button">Name</button></th>
|
|
605
|
+
<th class="is-num"><button class="ui-table__sort" data-sort="num" type="button">Score</button></th>
|
|
606
|
+
</tr></thead>
|
|
607
|
+
<tbody><tr><td>Ada</td><td class="is-num" data-sort-value="9.5">9,5</td></tr></tbody>
|
|
608
|
+
</table>
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
```js
|
|
612
|
+
import { initTableSort } from '@ponchia/ui/behaviors';
|
|
613
|
+
const cleanup = initTableSort();
|
|
614
|
+
```
|
|
615
|
+
|
|
567
616
|
## Reveal: `ui-reveal` needs JS, `ui-scroll-reveal` doesn't
|
|
568
617
|
|
|
569
618
|
`ui-scroll-reveal` is scroll-driven and **zero-JS** — reach for it in a static
|
|
@@ -605,8 +654,9 @@ It is a **non-modal** dialog by design: the panel gets `role="dialog"` and focus
|
|
|
605
654
|
moves into it, but there is **no focus trap** and the rest of the page stays
|
|
606
655
|
interactive — Tab moves *out* of the panel (it does not cycle), and it closes on
|
|
607
656
|
Escape or outside-click. Don't assume `<dialog>`-modal semantics; if you need a
|
|
608
|
-
trap and an inert backdrop, use a real modal (`<dialog>` + `initDialog
|
|
609
|
-
`initModal
|
|
657
|
+
trap and an inert backdrop, use a real modal (`<dialog>` + `initDialog`). The
|
|
658
|
+
deprecated `initModal()` path remains available only for 0.7 migration. And the
|
|
659
|
+
`is-open` fallback is a plain stacked element, so it sits
|
|
610
660
|
*under* any open native `<dialog>`'s top layer — another reason to prefer the
|
|
611
661
|
native `popover` attribute when a popover and a dialog can be open together.
|
|
612
662
|
|
|
@@ -640,7 +690,7 @@ These are JS widgets wearing the Bronto look; without the behavior they are iner
|
|
|
640
690
|
| Popover (`ui-popover`) | `initPopover` | no placement/ARIA — prefer the native `popover` attribute |
|
|
641
691
|
| Carousel (`ui-carousel`) | `initCarousel` | a native scroll-snap track (usable, no controls) |
|
|
642
692
|
| Native dialog/lightbox (`<dialog>`, `ui-lightbox`) | `initDialog` | closed markup stays closed; `data-bronto-open`/close buttons do nothing. Do not use `open` as a modal fallback: it is non-modal and has no trigger/focus-return path |
|
|
643
|
-
| Controlled modal (`ui-modal.is-open
|
|
693
|
+
| Controlled modal (`ui-modal.is-open`, deprecated) | `initModal` (deprecated) | open skin only — no inert trap, focus-return, or Escape close signal |
|
|
644
694
|
| Menu (`data-bronto-menu`) | `initMenu` | a button next to a list with no open/close, outside-click, or Escape |
|
|
645
695
|
| Dismissible alert/callout (`data-bronto-dismissible`) | `dismissible` | the close affordance is just a button; nothing is removed |
|
|
646
696
|
| Toast | `toast()` | nothing — it is imperative-only |
|
|
@@ -661,7 +711,7 @@ boundary of what CSS alone cannot do.
|
|
|
661
711
|
|
|
662
712
|
The CSS is the framework; `@ponchia/ui/behaviors` is the *sanctioned*
|
|
663
713
|
home for the little JS that genuinely needs scripting (theme persistence,
|
|
664
|
-
disclosure, dialog glue,
|
|
714
|
+
disclosure, native-dialog glue, toast, combobox, form-validation,
|
|
665
715
|
table-sort, splitter resizing). Reach for it instead of reimplementing — every
|
|
666
716
|
initializer is SSR-safe, idempotent, and returns a cleanup. If you find yourself
|
|
667
717
|
writing focus management, ARIA value sync, or `aria-expanded` toggling by hand,
|
package/docs/workbench.md
CHANGED
|
@@ -80,7 +80,17 @@ domain selection model.
|
|
|
80
80
|
data-bronto-splitter
|
|
81
81
|
style="--splitter-pos: 36%"
|
|
82
82
|
>
|
|
83
|
-
<section class="ui-splitter__pane" id="files" aria-label="Files"
|
|
83
|
+
<section class="ui-splitter__pane" id="files" aria-label="Files">
|
|
84
|
+
<div class="ui-cluster" role="group" aria-label="Resize files pane">
|
|
85
|
+
<button class="ui-button ui-button--sm" type="button" data-bronto-splitter-adjust="-10">
|
|
86
|
+
Narrow
|
|
87
|
+
</button>
|
|
88
|
+
<button class="ui-button ui-button--sm" type="button" data-bronto-splitter-adjust="10">
|
|
89
|
+
Widen
|
|
90
|
+
</button>
|
|
91
|
+
</div>
|
|
92
|
+
...
|
|
93
|
+
</section>
|
|
84
94
|
<div
|
|
85
95
|
class="ui-splitter__handle"
|
|
86
96
|
role="separator"
|
|
@@ -99,7 +109,11 @@ domain selection model.
|
|
|
99
109
|
Use `.ui-splitter--horizontal` for top/bottom panes. Arrow keys change the value
|
|
100
110
|
by 2 percentage points, Shift+Arrow and PageUp/PageDown by 10, and Home/End jump
|
|
101
111
|
to `aria-valuemin` / `aria-valuemax`. The handle needs a real accessible name
|
|
102
|
-
and `aria-controls` pointing at the primary pane.
|
|
112
|
+
and `aria-controls` pointing at the primary pane. Also provide ordinary buttons
|
|
113
|
+
with `data-bronto-splitter-adjust="-10"` / `"10"`: pointer users then have a
|
|
114
|
+
non-drag resize path, while keyboard and assistive-technology users retain the
|
|
115
|
+
separator interaction. The signed value is a percentage-point delta and is
|
|
116
|
+
clamped to the separator's min/max.
|
|
103
117
|
|
|
104
118
|
## Inspector — `.ui-inspector`
|
|
105
119
|
|
package/llms.txt
CHANGED
|
@@ -45,7 +45,7 @@ the path changes from source `css/` to built `dist/css/`:
|
|
|
45
45
|
<!-- installed locally -->
|
|
46
46
|
<link rel="stylesheet" href="./node_modules/@ponchia/ui/dist/css/<leaf>.css" />
|
|
47
47
|
<!-- or from a CDN; pin the version (pre-1.0, breaking changes ship in the minor) -->
|
|
48
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.
|
|
48
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.7.0/dist/css/<leaf>.css" />
|
|
49
49
|
```
|
|
50
50
|
|
|
51
51
|
The flattened default bundle is `dist/bronto.css` (bundler shorthand
|
|
@@ -75,7 +75,8 @@ import { applyStoredTheme } from '@ponchia/ui/behaviors';
|
|
|
75
75
|
Notable behaviors beyond the obvious: `initMenu()` adds close affordances to a
|
|
76
76
|
native `<details data-bronto-menu>` dropdown (outside-click/Escape/select-close);
|
|
77
77
|
`initModal()` wires the controlled `.ui-modal.is-open` path (inert focus-trap +
|
|
78
|
-
role/aria-modal)
|
|
78
|
+
role/aria-modal), but is deprecated in 0.7 for removal no earlier than 0.8;
|
|
79
|
+
prefer native `<dialog>` + `initDialog()`. `initDisabledGuard()` makes every `aria-disabled` control
|
|
79
80
|
keyboard-inert (CSS alone is only pointer-inert). For the value-bearing fills,
|
|
80
81
|
`attrs.meter(value)` / `attrs.progress(value)` from `@ponchia/ui/classes` return
|
|
81
82
|
`role`+`aria-valuenow/min/max`+the `--value` style to spread onto the host.
|
|
@@ -86,6 +87,8 @@ matching `.ui-source-card`, seed lightweight preview metadata, and emit
|
|
|
86
87
|
and any rich preview popover.
|
|
87
88
|
|
|
88
89
|
Optional lifecycle adapters wrap those behaviors without owning markup or state.
|
|
90
|
+
They remain compatible in 0.7 but are deprecated for removal no earlier than
|
|
91
|
+
0.8; prefer vanilla behavior initialization in the host lifecycle.
|
|
89
92
|
React/Solid/Qwik use hook bindings (peer deps `react` / `solid-js` /
|
|
90
93
|
`@builder.io/qwik`, optional — core stays zero-dep); Svelte uses dependency-free
|
|
91
94
|
actions, and Vue uses dependency-free directives/plugin helpers:
|
|
@@ -769,7 +772,8 @@ Read these from `node_modules/@ponchia/ui/` — no network needed:
|
|
|
769
772
|
resolved palette; the build fails below the declared floor.
|
|
770
773
|
- `tokens/index.d.ts` — every design-token name as a literal union.
|
|
771
774
|
- `tokens/index.json` — tokens as plain data (global / light / dark).
|
|
772
|
-
- `tokens/tokens.dtcg.json` —
|
|
775
|
+
- `tokens/tokens.dtcg.json` — resolved DTCG 2025.10 structured typed values;
|
|
776
|
+
authored CSS expressions remain in `tokens/index.json` and DTCG extensions.
|
|
773
777
|
- `tokens/resolved.json` — every colour token resolved to a static
|
|
774
778
|
`#rrggbb` / `rgba(...)` per theme (var() + color-mix() evaluated) in
|
|
775
779
|
`light`/`dark`, plus a `scale` block of the non-colour scales
|