@ponchia/ui 0.9.0 → 0.11.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 +107 -4
- package/MIGRATIONS.json +127 -18
- package/README.md +17 -9
- package/behaviors/index.d.ts +0 -2
- package/behaviors/index.d.ts.map +1 -1
- package/behaviors/index.js +0 -2
- package/behaviors/popover.js +4 -4
- package/classes/classes.json +53 -9
- package/classes/index.d.ts +20 -3
- package/classes/index.js +33 -3
- package/classes/vscode.css-custom-data.json +10 -10
- package/css/annotations.css +2 -2
- package/css/app.css +55 -31
- package/css/base.css +10 -14
- package/css/command.css +4 -4
- package/css/content.css +23 -21
- package/css/disclosure.css +17 -17
- package/css/discussion.css +150 -0
- package/css/feedback.css +15 -15
- package/css/figure.css +6 -4
- package/css/forms.css +8 -7
- package/css/generated.css +19 -12
- package/css/legend.css +13 -5
- package/css/navigation.css +3 -3
- package/css/overlay.css +13 -29
- package/css/primitives.css +48 -28
- package/css/report.css +91 -53
- package/css/sources.css +1 -1
- package/css/state.css +95 -6
- package/css/table.css +3 -3
- package/css/tokens.css +10 -10
- package/css/workbench.css +21 -9
- package/dist/bronto.css +1 -1
- package/dist/css/analytical.css +1 -1
- package/dist/css/annotations.css +1 -1
- package/dist/css/app.css +1 -1
- package/dist/css/base.css +1 -1
- package/dist/css/command.css +1 -1
- package/dist/css/content.css +1 -1
- package/dist/css/disclosure.css +1 -1
- package/dist/css/discussion.css +1 -0
- package/dist/css/feedback.css +1 -1
- package/dist/css/figure.css +1 -1
- package/dist/css/forms.css +1 -1
- package/dist/css/generated.css +1 -1
- package/dist/css/legend.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/sources.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/0004-prune-unused-adapters.md +5 -1
- package/docs/adr/0005-productive-tools-and-editorial-reports.md +58 -0
- package/docs/adr/0006-trusted-publishing.md +92 -0
- package/docs/architecture.md +16 -23
- package/docs/command.md +1 -2
- package/docs/compositions.md +131 -0
- package/docs/discussion.md +64 -0
- package/docs/figure.md +10 -1
- package/docs/frontier-primitives.md +1 -2
- package/docs/migrations/0.10-to-0.11.md +61 -0
- package/docs/migrations/0.9-to-0.10.md +47 -0
- package/docs/package-contract.md +16 -13
- package/docs/reference.md +47 -18
- package/docs/reporting.md +15 -9
- package/docs/stability.md +20 -55
- package/docs/state.md +47 -0
- package/docs/usage.md +18 -30
- package/llms.txt +7 -18
- package/package.json +18 -54
- package/tokens/figma.variables.json +20 -20
- package/tokens/index.js +10 -10
- package/tokens/index.json +20 -20
- package/tokens/resolved.json +10 -10
- package/tokens/tokens.dtcg.json +20 -20
- package/behaviors/modal.d.ts +0 -45
- package/behaviors/modal.d.ts.map +0 -1
- package/behaviors/modal.js +0 -373
- package/qwik/index.d.ts +0 -48
- package/qwik/index.d.ts.map +0 -1
- package/qwik/index.js +0 -227
- package/react/index.d.ts +0 -45
- package/react/index.d.ts.map +0 -1
- package/react/index.js +0 -165
- package/solid/index.d.ts +0 -75
- package/solid/index.d.ts.map +0 -1
- package/solid/index.js +0 -172
- package/svelte/index.d.ts +0 -114
- package/svelte/index.d.ts.map +0 -1
- package/svelte/index.js +0 -197
- package/vue/index.d.ts +0 -116
- package/vue/index.d.ts.map +0 -1
- package/vue/index.js +0 -266
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,109 @@
|
|
|
5
5
|
|> `^0` / `*` wildcard does **not** protect you. See README → Versioning, and
|
|
6
6
|
|> the deprecation policy in CONTRIBUTING.md.
|
|
7
7
|
|
|
8
|
+
## 0.11.0 — 2026-09-09
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **BREAKING: complete the supporting typography.** Figure captions, legend
|
|
13
|
+
text, generated-content labels and command groups use sentence-case sans.
|
|
14
|
+
Technical log bodies and identifiers retain mono. Caption text is 14px at
|
|
15
|
+
the default root size; inline citations no longer shrink below 12px.
|
|
16
|
+
- Figure keys and decision/action rows respond to their own available width.
|
|
17
|
+
Two-up comparisons wrap intrinsically, including outside a report. Named
|
|
18
|
+
containment on figure, decision-grid and actions wrappers is disabled for
|
|
19
|
+
print to preserve document flow.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- Narrow evidence panels no longer squeeze a chart into 40px or decision text
|
|
24
|
+
into 21px on a wide page. Long action status and legend labels wrap.
|
|
25
|
+
- Long mobile navigation labels wrap while keeping every destination reachable.
|
|
26
|
+
- The figure specimen's authored annotation stays inside its viewBox.
|
|
27
|
+
- Generated-content disclosure summaries retain the coarse-pointer target floor.
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- Optional `discussion.css` with thread lists, quoted passages, messages and
|
|
32
|
+
composers. State and posting remain host-owned; includes a local interactive
|
|
33
|
+
specimen and a narrow-panel example.
|
|
34
|
+
|
|
35
|
+
- A working service specimen with deterministic loading, empty, error and stale
|
|
36
|
+
states, environment/search filtering, retry and native-dialog sample creation.
|
|
37
|
+
Unavailable observations never retain an operational health claim. Product
|
|
38
|
+
state stays in the specimen; no framework state machine or data dependency.
|
|
39
|
+
- Narrow-parent regression checks, including a comparison outside a report,
|
|
40
|
+
annotation bounds, long action status, citation text and recovery journeys.
|
|
41
|
+
- A complete-screen migration recipe for explicit consumer typography overrides.
|
|
42
|
+
|
|
43
|
+
See [the migration guide](docs/migrations/0.10-to-0.11.md).
|
|
44
|
+
|
|
45
|
+
## 0.10.0 — 2026-09-08
|
|
46
|
+
|
|
47
|
+
### Changed
|
|
48
|
+
|
|
49
|
+
- **BREAKING: readable tool and report defaults.** The root respects the
|
|
50
|
+
browser's default text size. Everyday headings, labels, navigation, tables,
|
|
51
|
+
and controls use sans typography and sentence case. Explicit `ui-display`,
|
|
52
|
+
glyphs, and readouts retain the dot identity. Small text steps are 12/13/14px
|
|
53
|
+
at a 16px root; corner tokens use a restrained 2/4/6/8px scale.
|
|
54
|
+
- Service panels remove redundant framing, overview metrics stay compact, and
|
|
55
|
+
mobile navigation wraps. Inspectors adapt property rows to their own width.
|
|
56
|
+
Reports use 1.125rem prose, a 68ch measure, and 11pt print text.
|
|
57
|
+
- ADR-0005 and composition recipes replace the shipped-duplicate admission
|
|
58
|
+
rule with demonstrated task improvement. The default CSS budget is now
|
|
59
|
+
100,000/18,000 bytes raw/gzip, restoring deliberate maintenance headroom.
|
|
60
|
+
- The example CI matrix derives from the shared registry. The complete browser
|
|
61
|
+
suite runs in three required shards, with unchanged cross-engine coverage.
|
|
62
|
+
Local Playwright uses an owned server on 8124 (`BRONTO_UI_TEST_PORT` override)
|
|
63
|
+
and refuses to reuse a live specimen server.
|
|
64
|
+
|
|
65
|
+
### Removed
|
|
66
|
+
|
|
67
|
+
- **BREAKING:** the five framework adapter subpaths and optional framework
|
|
68
|
+
peers, deprecated in 0.7. Initialize vanilla behaviors in the host lifecycle.
|
|
69
|
+
- **BREAKING:** the controlled modal initializer, detail type, data attribute,
|
|
70
|
+
event, and `ui.modal({ open: true })` option. Use native dialog plus
|
|
71
|
+
`initDialog`; native modal and drawer styling remain.
|
|
72
|
+
- Unused adapter parity machinery and Solid/Qwik/Vue packed examples. React
|
|
73
|
+
and SvelteKit examples verify vanilla behavior mounting and cleanup.
|
|
74
|
+
|
|
75
|
+
### Added
|
|
76
|
+
|
|
77
|
+
- `ui-timestrip` in the opt-in state leaf: the host supplies normalized event
|
|
78
|
+
positions and Bronto paints the rail, now marker, and severity marks. Old
|
|
79
|
+
events can remain visible at the window edge through `data-outside`.
|
|
80
|
+
- `ui-severity-tone` exposes the existing severity mapping without painting a
|
|
81
|
+
background, including for SVG consumers. `severity(level, { part: 'tone' })`
|
|
82
|
+
returns the corresponding class and level.
|
|
83
|
+
- `ui-chip--dense` and `ui.chip({ dense: true })` for static pane-header labels,
|
|
84
|
+
with pointer target floors when used on controls.
|
|
85
|
+
- A collapsed `details.ui-report__toc` recipe that keeps the decision first.
|
|
86
|
+
|
|
87
|
+
### Fixed
|
|
88
|
+
|
|
89
|
+
- Single-column stacks and prose shrink inside narrow parents; the showcase's
|
|
90
|
+
nested legend grid fits its available width. Range inputs no longer add
|
|
91
|
+
browser margins outside their containing width.
|
|
92
|
+
- The workbench specimen stacks panes when narrow, provides native file-row
|
|
93
|
+
selection, and separates badge tone from row metadata styling.
|
|
94
|
+
- The service and report examples use favorable tones for decreasing latency.
|
|
95
|
+
Report annotations leave room for their stroke outside the drawing bounds.
|
|
96
|
+
- Development URI, YAML, and color parsers receive compatible security updates.
|
|
97
|
+
|
|
98
|
+
### Internal
|
|
99
|
+
|
|
100
|
+
- Releases publish to npm by trusted publishing (OIDC) instead of a stored
|
|
101
|
+
access token. The token that authenticated previous releases expired
|
|
102
|
+
silently and surfaced only as a misleading `E404` after every gate and the
|
|
103
|
+
publish approval had passed; there is now no credential to expire. The
|
|
104
|
+
publisher identity is the repository, the workflow filename `release.yml`,
|
|
105
|
+
and the `npm-publish` environment — see
|
|
106
|
+
[ADR-0006](docs/adr/0006-trusted-publishing.md). The only packaged change is
|
|
107
|
+
that ADR joining the published documentation set.
|
|
108
|
+
|
|
109
|
+
See [the migration guide](docs/migrations/0.9-to-0.10.md).
|
|
110
|
+
|
|
8
111
|
## 0.9.0 — 2026-08-11
|
|
9
112
|
|
|
10
113
|
Two additions and one correction, all from the same source: migrating a
|
|
@@ -53,7 +156,7 @@ downstream workbench onto 0.8.1 and watching where adoption stalled.
|
|
|
53
156
|
- **`.ui-menu` no longer welds placement into the surface.** It used to declare
|
|
54
157
|
`position: absolute` plus a trigger-relative offset, so a menu opened at a
|
|
55
158
|
pointer — a canvas context menu, a long-press — could not use it at all, and
|
|
56
|
-
consumers
|
|
159
|
+
consumers redeclared the panel, border, radius and shadow to get a surface.
|
|
57
160
|
The dropdown placement is now `--dropdown` (unchanged behaviour, opted into)
|
|
58
161
|
and `--at-pointer` takes a menu out of flow for a host that computes its own
|
|
59
162
|
position.
|
|
@@ -149,7 +252,7 @@ consumer had to write because the framework did not provide it, or got wrong.
|
|
|
149
252
|
neutral. From 0.8 the ten `SKIN_CANVAS_TOKENS` (`--bg`, `--bg-elevated`,
|
|
150
253
|
`--panel`, `--panel-strong`, `--panel-soft`, `--line`, `--line-strong`,
|
|
151
254
|
`--text`, `--text-soft`, `--text-dim`) are re-pointed per skin per theme.
|
|
152
|
-
- **If you want the old look**,
|
|
255
|
+
- **If you want the old look**, redeclare those ten tokens after the skin
|
|
153
256
|
import; they are ordinary custom properties on `:root[data-bronto-skin=…]`
|
|
154
257
|
and un-layered app CSS wins.
|
|
155
258
|
- **If you already hand-wrote a canvas** for a skin — the case this change
|
|
@@ -181,7 +284,7 @@ consumer had to write because the framework did not provide it, or got wrong.
|
|
|
181
284
|
text in it and `--icon` decides whether the words are painted; they stay in
|
|
182
285
|
the accessible name and in text-based test selectors either way. One markup
|
|
183
286
|
shape serves both the labelled and icon-only forms, and no `aria-label` can
|
|
184
|
-
drift out of sync with the visible wording. The slot also
|
|
287
|
+
drift out of sync with the visible wording. The slot also ellipsis rather
|
|
185
288
|
than wrapping, so a labelled button in a tight bar shrinks instead of pushing
|
|
186
289
|
its neighbours out. `ui.button()` is unchanged; `cls.buttonLabel` is new.
|
|
187
290
|
- **`.ui-button--dense`** — a size tier for bars whose *height* is the
|
|
@@ -1096,7 +1199,7 @@ and D2. The data-viz **palette** (`--chart-*`, `tokens/charts.json`) and the
|
|
|
1096
1199
|
(build five real reports across the whole stack, review from every POV). The
|
|
1097
1200
|
Vega CDN recipe now pins the `/build/*.min.js` UMD bundles and `renderer:'svg'`
|
|
1098
1201
|
(a bare `cdn.jsdelivr.net/npm/vega@6` tag has no `window.vega`, so the previous
|
|
1099
|
-
recipe rendered nothing); the file
|
|
1202
|
+
recipe rendered nothing); the `file://`-portable path (inline the config — an
|
|
1100
1203
|
imported/fetched config is CORS-blocked from disk) is now explicit. New
|
|
1101
1204
|
`docs/reporting.md` recipes: "Theming a live report" (the theme-toggle/re-embed
|
|
1102
1205
|
foot-guns — clear the host, container-width-while-hidden, Mermaid source vs
|
package/MIGRATIONS.json
CHANGED
|
@@ -6,21 +6,78 @@
|
|
|
6
6
|
"to": "0.3",
|
|
7
7
|
"summary": "Entire non-ui-* legacy vocabulary removed; everything is now under the .ui-* contract and the check-classes drift gate.",
|
|
8
8
|
"safe": [
|
|
9
|
-
{
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
{
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
{
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
{
|
|
22
|
-
|
|
23
|
-
|
|
9
|
+
{
|
|
10
|
+
"old": "skip-link",
|
|
11
|
+
"new": "ui-skiplink"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"old": "site-nav",
|
|
15
|
+
"new": "ui-sitenav"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"old": "site-menu",
|
|
19
|
+
"new": "ui-sitemenu"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"old": "theme-toggle",
|
|
23
|
+
"new": "ui-themetoggle",
|
|
24
|
+
"prefix": true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"old": "app-shell",
|
|
28
|
+
"new": "ui-app-shell",
|
|
29
|
+
"prefix": true
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"old": "app-rail",
|
|
33
|
+
"new": "ui-app-rail",
|
|
34
|
+
"prefix": true
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"old": "app-topbar",
|
|
38
|
+
"new": "ui-app-topbar",
|
|
39
|
+
"prefix": true
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"old": "app-toolbar",
|
|
43
|
+
"new": "ui-app-toolbar",
|
|
44
|
+
"prefix": true
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"old": "app-nav",
|
|
48
|
+
"new": "ui-app-nav",
|
|
49
|
+
"prefix": true
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"old": "app-panel",
|
|
53
|
+
"new": "ui-app-panel",
|
|
54
|
+
"prefix": true
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"old": "app-content",
|
|
58
|
+
"new": "ui-app-content",
|
|
59
|
+
"prefix": true
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"old": "app-main",
|
|
63
|
+
"new": "ui-app-main",
|
|
64
|
+
"prefix": true
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"old": "app-metrics",
|
|
68
|
+
"new": "ui-app-metrics",
|
|
69
|
+
"prefix": true
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"old": "app-metric",
|
|
73
|
+
"new": "ui-app-metric",
|
|
74
|
+
"prefix": true
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"old": "app-empty-state",
|
|
78
|
+
"new": "ui-app-empty-state",
|
|
79
|
+
"prefix": true
|
|
80
|
+
}
|
|
24
81
|
],
|
|
25
82
|
"manual": [
|
|
26
83
|
{
|
|
@@ -65,9 +122,18 @@
|
|
|
65
122
|
"to": "0.5",
|
|
66
123
|
"summary": "Adds the analytical-primitives suite (annotations, legend, marks, connectors, spotlight, crosshair, selection + the analytical.css roll-up); all additive/opt-in. Three breaking changes: the chart data key moved out of the report kit into the standalone Legends layer (`.ui-chart__legend`/`.ui-chart__swatch` removed); annotation arrowheads now render via the shared connectors geometry kernel (a small visual path change, no API change); and the marks/bracket-note rationed-accent tone was renamed `evidence`→`accent` to match the annotation/connector tone vocabulary (`.ui-annotation--evidence` stays — it's a marker variant, not a tone).",
|
|
67
124
|
"safe": [
|
|
68
|
-
{
|
|
69
|
-
|
|
70
|
-
|
|
125
|
+
{
|
|
126
|
+
"old": "ui-chart__swatch",
|
|
127
|
+
"new": "ui-legend__swatch"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"old": "ui-mark--evidence",
|
|
131
|
+
"new": "ui-mark--accent"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"old": "ui-bracket-note--evidence",
|
|
135
|
+
"new": "ui-bracket-note--accent"
|
|
136
|
+
}
|
|
71
137
|
],
|
|
72
138
|
"manual": [
|
|
73
139
|
{
|
|
@@ -115,6 +181,49 @@
|
|
|
115
181
|
}
|
|
116
182
|
],
|
|
117
183
|
"codemod": "No source codemod. Update the DTCG reader at its JSON access boundary, then run npx --no-install bronto-ui-check against consumer source. See docs/migrations/0.6-to-0.7.md."
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"from": "0.9",
|
|
187
|
+
"to": "0.10",
|
|
188
|
+
"summary": "Readable tool/report defaults; retire framework adapters and controlled modal.",
|
|
189
|
+
"safe": [],
|
|
190
|
+
"manual": [
|
|
191
|
+
{
|
|
192
|
+
"old": "@ponchia/ui/react / @ponchia/ui/solid / @ponchia/ui/qwik / @ponchia/ui/svelte / @ponchia/ui/vue",
|
|
193
|
+
"new": "@ponchia/ui/classes + @ponchia/ui/behaviors",
|
|
194
|
+
"note": "Initialize vanilla behaviors in the host mount lifecycle and return cleanup; wrappers and peers are removed."
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"old": "initModal / data-bronto-modal / ui.modal({ open: true }) / bronto:modal:close",
|
|
198
|
+
"new": "native dialog + initDialog",
|
|
199
|
+
"note": "Use showModal/close and native cancel/close events; .is-open no longer opens a modal."
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"old": "global dot headings and compact text defaults",
|
|
203
|
+
"new": "sans headings; explicit ui-display; productive tools and editorial reports",
|
|
204
|
+
"note": "Review real screens and preserve intentional display titles. Reports use a reading measure and separate print typography."
|
|
205
|
+
}
|
|
206
|
+
],
|
|
207
|
+
"codemod": "See docs/migrations/0.9-to-0.10.md. Changes require consumer lifecycle and visual review; no blanket replacement is safe."
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"from": "0.10",
|
|
211
|
+
"to": "0.11",
|
|
212
|
+
"summary": "Readable supporting typography and container-aware evidence layouts.",
|
|
213
|
+
"safe": [],
|
|
214
|
+
"manual": [
|
|
215
|
+
{
|
|
216
|
+
"old": "viewport-based figure/report layouts",
|
|
217
|
+
"new": "container-aware figure, decision-grid and actions layouts; intrinsic two-up comparisons",
|
|
218
|
+
"note": "Keep the documented wrappers, verify narrow parents on wide screens and review print. New inline-size containment can change intrinsic sizing."
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"old": "uppercase mono explanatory labels and unconstrained superscript citations",
|
|
222
|
+
"new": "sentence-case sans supporting text and a citation size floor",
|
|
223
|
+
"note": "Review explicit consumer overrides by role, preserving intentional display and technical identifiers."
|
|
224
|
+
}
|
|
225
|
+
],
|
|
226
|
+
"codemod": "No automatic rewrite: review complete consumer tasks and docs/migrations/0.10-to-0.11.md."
|
|
118
227
|
}
|
|
119
228
|
]
|
|
120
229
|
}
|
package/README.md
CHANGED
|
@@ -19,11 +19,17 @@ app shells, navigation, forms, tables, feedback, overlays, prose, motion, and
|
|
|
19
19
|
the token system that lets apps feel related without sharing a component runtime.
|
|
20
20
|
|
|
21
21
|
The look is deliberately restrained: a mostly neutral canvas, one core accent
|
|
22
|
-
for emphasis, dot-matrix display type, and
|
|
22
|
+
for emphasis, selective dot-matrix display type, and restrained borders. Status colors,
|
|
23
23
|
display-expression tokens, and data-viz colors are separate governed tiers, not
|
|
24
24
|
extra brand accents. Opt-in skins re-point the root accent; Mermaid, D2, and
|
|
25
25
|
Vega bridges use resolved renderer theme data instead of live CSS variables.
|
|
26
26
|
|
|
27
|
+
Everyday tools use readable sans typography and sentence-case labels. Reports
|
|
28
|
+
use a separate reading measure and print treatment. Use `ui-display` when a
|
|
29
|
+
large title should carry the dot-matrix signature; ordinary headings stay quiet.
|
|
30
|
+
[Composition recipes](docs/compositions.md) show a service overview, a narrow
|
|
31
|
+
inspector, and a decision report with their imports and acceptance checks.
|
|
32
|
+
|
|
27
33
|
## Start here
|
|
28
34
|
|
|
29
35
|
- **Building an app or service shell?** Use the quick start below, then the
|
|
@@ -63,6 +69,12 @@ specificity fight. Print and reduced-motion rules still use `!important`
|
|
|
63
69
|
deliberately where the framework must neutralize animation or layout at a media
|
|
64
70
|
boundary.
|
|
65
71
|
|
|
72
|
+
One production consumer is **[Sense6](https://sense6.net/en/)**, a privacy-first
|
|
73
|
+
browser perception lab. Its static multilingual discovery pages and interactive
|
|
74
|
+
colour, reaction-time, hearing, and visual-detail experiments use Bronto's
|
|
75
|
+
shared shell, accessible controls, responsive layout, themes, and print rules
|
|
76
|
+
while keeping the experiment-specific visual identity in the application.
|
|
77
|
+
|
|
66
78
|
It ships a complete, accessible **standard component set** because that is the
|
|
67
79
|
identity layer every service consumes. Its sharper edge is the opt-in **tooling,
|
|
68
80
|
analytical, and communication layer** sketched above. The line that holds it
|
|
@@ -81,7 +93,7 @@ Or drop it in with no build step, straight from a CDN (replace the version only
|
|
|
81
93
|
when deliberately upgrading across a breaking pre-1.0 minor):
|
|
82
94
|
|
|
83
95
|
```html
|
|
84
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.
|
|
96
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.11.0/dist/bronto.css">
|
|
85
97
|
```
|
|
86
98
|
|
|
87
99
|
## Quick start
|
|
@@ -191,10 +203,9 @@ Not an afterthought — a gate. Every contractual token pairing has a declared W
|
|
|
191
203
|
The CSS is the framework, so it works with React, Svelte/SvelteKit, Astro, Vue,
|
|
192
204
|
Solid, Qwik or plain HTML — there's no component runtime to adopt. The optional
|
|
193
205
|
`classes` and framework-neutral `behaviors` entrypoints pull in **no** UI
|
|
194
|
-
framework and are SSR-safe.
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
mount/cleanup lifecycle instead.
|
|
206
|
+
framework and are SSR-safe. Framework consumers initialize vanilla behaviors in their normal mount/cleanup
|
|
207
|
+
lifecycle. The unadopted framework adapters were removed in 0.10; see the
|
|
208
|
+
[migration guide](docs/migrations/0.9-to-0.10.md).
|
|
198
209
|
|
|
199
210
|
Per-framework getting-started guides + runnable example apps live in the repo:
|
|
200
211
|
|
|
@@ -203,10 +214,7 @@ Per-framework getting-started guides + runnable example apps live in the repo:
|
|
|
203
214
|
| Vanilla / Vite / plain HTML | [vanilla.md](https://github.com/Ponchia/bronto-ui/blob/main/docs/getting-started/vanilla.md) | [`examples/vanilla-vite`](https://github.com/Ponchia/bronto-ui/tree/main/examples/vanilla-vite) |
|
|
204
215
|
| Astro | [astro.md](https://github.com/Ponchia/bronto-ui/blob/main/docs/getting-started/astro.md) | [`examples/astro`](https://github.com/Ponchia/bronto-ui/tree/main/examples/astro) |
|
|
205
216
|
| SvelteKit | [sveltekit.md](https://github.com/Ponchia/bronto-ui/blob/main/docs/getting-started/sveltekit.md) | [`examples/sveltekit`](https://github.com/Ponchia/bronto-ui/tree/main/examples/sveltekit) |
|
|
206
|
-
| Vue | [vue.md](https://github.com/Ponchia/bronto-ui/blob/main/docs/getting-started/vue.md) | [`examples/vue-vite`](https://github.com/Ponchia/bronto-ui/tree/main/examples/vue-vite) |
|
|
207
217
|
| React | [react-solid.md](https://github.com/Ponchia/bronto-ui/blob/main/docs/getting-started/react-solid.md) | [`examples/react-vite`](https://github.com/Ponchia/bronto-ui/tree/main/examples/react-vite) |
|
|
208
|
-
| Solid | [react-solid.md](https://github.com/Ponchia/bronto-ui/blob/main/docs/getting-started/react-solid.md) | [`examples/solid-vite`](https://github.com/Ponchia/bronto-ui/tree/main/examples/solid-vite) |
|
|
209
|
-
| Qwik | [react-solid.md](https://github.com/Ponchia/bronto-ui/blob/main/docs/getting-started/react-solid.md) | [`examples/qwik-vite`](https://github.com/Ponchia/bronto-ui/tree/main/examples/qwik-vite) |
|
|
210
218
|
| Tailwind v4 bridge / cascade-layer interop | [tailwind.md](https://github.com/Ponchia/bronto-ui/blob/main/docs/interop/tailwind.md) | [`examples/tailwind-vite`](https://github.com/Ponchia/bronto-ui/tree/main/examples/tailwind-vite) |
|
|
211
219
|
|
|
212
220
|
## Extras
|
package/behaviors/index.d.ts
CHANGED
|
@@ -2,7 +2,6 @@ export { dismissible } from "./dismissible.js";
|
|
|
2
2
|
export { initDisabledGuard } from "./inert.js";
|
|
3
3
|
export { initTabs } from "./tabs.js";
|
|
4
4
|
export { initDialog } from "./dialog.js";
|
|
5
|
-
export { initModal } from "./modal.js";
|
|
6
5
|
export { toast } from "./toast.js";
|
|
7
6
|
export { initDisclosure } from "./disclosure.js";
|
|
8
7
|
export { initMenu } from "./menu.js";
|
|
@@ -25,7 +24,6 @@ export type ThemeStorageOpts = import("./theme.js").ThemeStorageOpts;
|
|
|
25
24
|
export type ApplyThemeOpts = import("./theme.js").ApplyThemeOpts;
|
|
26
25
|
export type ThemeChangeDetail = import("./theme.js").ThemeChangeDetail;
|
|
27
26
|
export type ToastOpts = import("./toast.js").ToastOpts;
|
|
28
|
-
export type ModalCloseDetail = import("./modal.js").ModalCloseDetail;
|
|
29
27
|
export type LegendToggleDetail = import("./legend.js").LegendToggleDetail;
|
|
30
28
|
export type CrosshairMoveDetail = import("./crosshair.js").CrosshairMoveDetail;
|
|
31
29
|
export type CommandSelectDetail = import("./command.js").CommandSelectDetail;
|
package/behaviors/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;sBAmBa,OAAO,eAAe,EAAE,OAAO;2BAC/B,OAAO,eAAe,EAAE,YAAY;+BACpC,OAAO,YAAY,EAAE,gBAAgB;6BACrC,OAAO,YAAY,EAAE,cAAc;gCACnC,OAAO,YAAY,EAAE,iBAAiB;wBACtC,OAAO,YAAY,EAAE,SAAS;iCAC9B,OAAO,aAAa,EAAE,kBAAkB;kCACxC,OAAO,gBAAgB,EAAE,mBAAmB;kCAC5C,OAAO,cAAc,EAAE,mBAAmB;gCAC1C,OAAO,cAAc,EAAE,iBAAiB;mCACxC,OAAO,eAAe,EAAE,oBAAoB"}
|
package/behaviors/index.js
CHANGED
|
@@ -23,7 +23,6 @@
|
|
|
23
23
|
* @typedef {import('./theme.js').ApplyThemeOpts} ApplyThemeOpts
|
|
24
24
|
* @typedef {import('./theme.js').ThemeChangeDetail} ThemeChangeDetail
|
|
25
25
|
* @typedef {import('./toast.js').ToastOpts} ToastOpts
|
|
26
|
-
* @typedef {import('./modal.js').ModalCloseDetail} ModalCloseDetail
|
|
27
26
|
* @typedef {import('./legend.js').LegendToggleDetail} LegendToggleDetail
|
|
28
27
|
* @typedef {import('./crosshair.js').CrosshairMoveDetail} CrosshairMoveDetail
|
|
29
28
|
* @typedef {import('./command.js').CommandSelectDetail} CommandSelectDetail
|
|
@@ -35,7 +34,6 @@ export { dismissible } from './dismissible.js';
|
|
|
35
34
|
export { initDisabledGuard } from './inert.js';
|
|
36
35
|
export { initTabs } from './tabs.js';
|
|
37
36
|
export { initDialog } from './dialog.js';
|
|
38
|
-
export { initModal } from './modal.js';
|
|
39
37
|
export { toast } from './toast.js';
|
|
40
38
|
export { initDisclosure } from './disclosure.js';
|
|
41
39
|
export { initMenu } from './menu.js';
|
package/behaviors/popover.js
CHANGED
|
@@ -90,9 +90,9 @@ export function initPopover({ root } = {}) {
|
|
|
90
90
|
return;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
// A
|
|
94
|
-
//
|
|
95
|
-
//
|
|
93
|
+
// A host may temporarily keep a portaled panel inert. Wait until it
|
|
94
|
+
// admits this panel rather than guessing how many microtasks the host
|
|
95
|
+
// needs to reconcile its interaction state.
|
|
96
96
|
const Observer = view?.MutationObserver;
|
|
97
97
|
if (!Observer) {
|
|
98
98
|
queueMicrotask(() => {
|
|
@@ -234,7 +234,7 @@ export function initPopover({ root } = {}) {
|
|
|
234
234
|
// the browser's close-request then finds the dialog as the new topmost
|
|
235
235
|
// element and dismisses it too. preventDefault() stops that native
|
|
236
236
|
// close-request and stopPropagation() keeps it off other delegated keydown
|
|
237
|
-
// listeners
|
|
237
|
+
// listeners owned by the host, so only the popover closes — the documented
|
|
238
238
|
// "popover + dialog open together" contract.
|
|
239
239
|
e.preventDefault();
|
|
240
240
|
e.stopPropagation();
|
package/classes/classes.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$comment": "@ponchia/ui class vocabulary as language-neutral data — validate emitted markup without executing the ESM cls map or parsing the .d.ts. Generated from classes/index.js — do not edit by hand; run `npm run classes:json:build`. Drift-checked in CI. `groups[].base` is null for a parts-only namespace (no standalone base class — do NOT emit it). A modifier whose name contains `__` (e.g. `ui-spark__bar--pos`) attaches to THAT part, not the base host. `states` is the author-applied `is-*` hooks (runtime/behavior-managed hooks are excluded); `behaviorAttributes` are the `data-bronto-*` wiring hooks the optional behaviors delegate on; `requiredAria` is the role/aria a generator must emit per component. `states` + `customProperties` are documented in docs/reference.md and ship outside `cls` by design.",
|
|
3
3
|
"counts": {
|
|
4
|
-
"classes":
|
|
5
|
-
"groups":
|
|
4
|
+
"classes": 695,
|
|
5
|
+
"groups": 187
|
|
6
6
|
},
|
|
7
7
|
"groups": {
|
|
8
8
|
"ui-accordion": {
|
|
@@ -295,7 +295,8 @@
|
|
|
295
295
|
"ui-chip": {
|
|
296
296
|
"base": "ui-chip",
|
|
297
297
|
"modifiers": [
|
|
298
|
-
"ui-chip--accent"
|
|
298
|
+
"ui-chip--accent",
|
|
299
|
+
"ui-chip--dense"
|
|
299
300
|
],
|
|
300
301
|
"parts": []
|
|
301
302
|
},
|
|
@@ -464,6 +465,23 @@
|
|
|
464
465
|
"ui-diff__row"
|
|
465
466
|
]
|
|
466
467
|
},
|
|
468
|
+
"ui-discussion": {
|
|
469
|
+
"base": "ui-discussion",
|
|
470
|
+
"modifiers": [],
|
|
471
|
+
"parts": [
|
|
472
|
+
"ui-discussion__actions",
|
|
473
|
+
"ui-discussion__composer",
|
|
474
|
+
"ui-discussion__header",
|
|
475
|
+
"ui-discussion__hint",
|
|
476
|
+
"ui-discussion__item",
|
|
477
|
+
"ui-discussion__list",
|
|
478
|
+
"ui-discussion__message",
|
|
479
|
+
"ui-discussion__messages",
|
|
480
|
+
"ui-discussion__meta",
|
|
481
|
+
"ui-discussion__quote",
|
|
482
|
+
"ui-discussion__state"
|
|
483
|
+
]
|
|
484
|
+
},
|
|
467
485
|
"ui-display": {
|
|
468
486
|
"base": "ui-display",
|
|
469
487
|
"modifiers": [],
|
|
@@ -1167,6 +1185,11 @@
|
|
|
1167
1185
|
"ui-severity-row__title"
|
|
1168
1186
|
]
|
|
1169
1187
|
},
|
|
1188
|
+
"ui-severity-tone": {
|
|
1189
|
+
"base": "ui-severity-tone",
|
|
1190
|
+
"modifiers": [],
|
|
1191
|
+
"parts": []
|
|
1192
|
+
},
|
|
1170
1193
|
"ui-shortcut": {
|
|
1171
1194
|
"base": "ui-shortcut",
|
|
1172
1195
|
"modifiers": [],
|
|
@@ -1457,6 +1480,15 @@
|
|
|
1457
1480
|
"ui-timeline__time"
|
|
1458
1481
|
]
|
|
1459
1482
|
},
|
|
1483
|
+
"ui-timestrip": {
|
|
1484
|
+
"base": "ui-timestrip",
|
|
1485
|
+
"modifiers": [],
|
|
1486
|
+
"parts": [
|
|
1487
|
+
"ui-timestrip__axis",
|
|
1488
|
+
"ui-timestrip__event",
|
|
1489
|
+
"ui-timestrip__now"
|
|
1490
|
+
]
|
|
1491
|
+
},
|
|
1460
1492
|
"ui-toast": {
|
|
1461
1493
|
"base": "ui-toast",
|
|
1462
1494
|
"modifiers": [
|
|
@@ -1697,6 +1729,7 @@
|
|
|
1697
1729
|
"ui-check",
|
|
1698
1730
|
"ui-chip",
|
|
1699
1731
|
"ui-chip--accent",
|
|
1732
|
+
"ui-chip--dense",
|
|
1700
1733
|
"ui-citation",
|
|
1701
1734
|
"ui-citation--chip",
|
|
1702
1735
|
"ui-claim",
|
|
@@ -1783,6 +1816,18 @@
|
|
|
1783
1816
|
"ui-diff__row--add",
|
|
1784
1817
|
"ui-diff__row--context",
|
|
1785
1818
|
"ui-diff__row--remove",
|
|
1819
|
+
"ui-discussion",
|
|
1820
|
+
"ui-discussion__actions",
|
|
1821
|
+
"ui-discussion__composer",
|
|
1822
|
+
"ui-discussion__header",
|
|
1823
|
+
"ui-discussion__hint",
|
|
1824
|
+
"ui-discussion__item",
|
|
1825
|
+
"ui-discussion__list",
|
|
1826
|
+
"ui-discussion__message",
|
|
1827
|
+
"ui-discussion__messages",
|
|
1828
|
+
"ui-discussion__meta",
|
|
1829
|
+
"ui-discussion__quote",
|
|
1830
|
+
"ui-discussion__state",
|
|
1786
1831
|
"ui-display",
|
|
1787
1832
|
"ui-divider",
|
|
1788
1833
|
"ui-dot",
|
|
@@ -2086,6 +2131,7 @@
|
|
|
2086
2131
|
"ui-severity-row",
|
|
2087
2132
|
"ui-severity-row__meta",
|
|
2088
2133
|
"ui-severity-row__title",
|
|
2134
|
+
"ui-severity-tone",
|
|
2089
2135
|
"ui-shortcut",
|
|
2090
2136
|
"ui-shortcut__sep",
|
|
2091
2137
|
"ui-sidebar",
|
|
@@ -2194,6 +2240,10 @@
|
|
|
2194
2240
|
"ui-timeline",
|
|
2195
2241
|
"ui-timeline__item",
|
|
2196
2242
|
"ui-timeline__time",
|
|
2243
|
+
"ui-timestrip",
|
|
2244
|
+
"ui-timestrip__axis",
|
|
2245
|
+
"ui-timestrip__event",
|
|
2246
|
+
"ui-timestrip__now",
|
|
2197
2247
|
"ui-toast",
|
|
2198
2248
|
"ui-toast--accent",
|
|
2199
2249
|
"ui-toast--danger",
|
|
@@ -2824,12 +2874,6 @@
|
|
|
2824
2874
|
"behavior": "initDialog",
|
|
2825
2875
|
"note": "opt into backdrop light-dismiss (click the backdrop to close)"
|
|
2826
2876
|
},
|
|
2827
|
-
{
|
|
2828
|
-
"name": "data-bronto-modal",
|
|
2829
|
-
"on": "a controlled (non-<dialog>) .ui-modal overlay",
|
|
2830
|
-
"behavior": "initModal",
|
|
2831
|
-
"note": "inert focus-trap, focus-return, and Escape close signal for a consumer-owned .is-open modal; needs an accessible name"
|
|
2832
|
-
},
|
|
2833
2877
|
{
|
|
2834
2878
|
"name": "data-bronto-menu",
|
|
2835
2879
|
"on": "a native <details> dropdown",
|
package/classes/index.d.ts
CHANGED
|
@@ -51,6 +51,7 @@ export declare const cls: {
|
|
|
51
51
|
readonly badgeDot: 'ui-badge--dot';
|
|
52
52
|
readonly chip: 'ui-chip';
|
|
53
53
|
readonly chipAccent: 'ui-chip--accent';
|
|
54
|
+
readonly chipDense: 'ui-chip--dense';
|
|
54
55
|
readonly link: 'ui-link';
|
|
55
56
|
readonly linkArrow: 'ui-link--arrow';
|
|
56
57
|
readonly linkCta: 'ui-link--cta';
|
|
@@ -381,6 +382,18 @@ export declare const cls: {
|
|
|
381
382
|
readonly legendTrack: 'ui-legend__track';
|
|
382
383
|
readonly legendTicks: 'ui-legend__ticks';
|
|
383
384
|
readonly legendTick: 'ui-legend__tick';
|
|
385
|
+
readonly discussion: 'ui-discussion';
|
|
386
|
+
readonly discussionHeader: 'ui-discussion__header';
|
|
387
|
+
readonly discussionActions: 'ui-discussion__actions';
|
|
388
|
+
readonly discussionQuote: 'ui-discussion__quote';
|
|
389
|
+
readonly discussionMessages: 'ui-discussion__messages';
|
|
390
|
+
readonly discussionList: 'ui-discussion__list';
|
|
391
|
+
readonly discussionMessage: 'ui-discussion__message';
|
|
392
|
+
readonly discussionMeta: 'ui-discussion__meta';
|
|
393
|
+
readonly discussionHint: 'ui-discussion__hint';
|
|
394
|
+
readonly discussionState: 'ui-discussion__state';
|
|
395
|
+
readonly discussionItem: 'ui-discussion__item';
|
|
396
|
+
readonly discussionComposer: 'ui-discussion__composer';
|
|
384
397
|
readonly annotation: 'ui-annotation';
|
|
385
398
|
readonly annotationSubject: 'ui-annotation__subject';
|
|
386
399
|
readonly annotationConnector: 'ui-annotation__connector';
|
|
@@ -579,6 +592,11 @@ export declare const cls: {
|
|
|
579
592
|
readonly severityRow: 'ui-severity-row';
|
|
580
593
|
readonly severityRowTitle: 'ui-severity-row__title';
|
|
581
594
|
readonly severityRowMeta: 'ui-severity-row__meta';
|
|
595
|
+
readonly severityTone: 'ui-severity-tone';
|
|
596
|
+
readonly timestrip: 'ui-timestrip';
|
|
597
|
+
readonly timestripAxis: 'ui-timestrip__axis';
|
|
598
|
+
readonly timestripNow: 'ui-timestrip__now';
|
|
599
|
+
readonly timestripEvent: 'ui-timestrip__event';
|
|
582
600
|
readonly generated: 'ui-generated';
|
|
583
601
|
readonly generatedLabel: 'ui-generated__label';
|
|
584
602
|
readonly originLabel: 'ui-origin-label';
|
|
@@ -742,6 +760,7 @@ export interface ClaimOpts {
|
|
|
742
760
|
}
|
|
743
761
|
export interface ChipOpts {
|
|
744
762
|
accent?: boolean;
|
|
763
|
+
dense?: boolean;
|
|
745
764
|
}
|
|
746
765
|
export interface LinkOpts {
|
|
747
766
|
arrow?: boolean;
|
|
@@ -794,8 +813,6 @@ export interface DotbarOpts {
|
|
|
794
813
|
}
|
|
795
814
|
export interface ModalOpts {
|
|
796
815
|
drawer?: boolean;
|
|
797
|
-
/** Controlled non-dialog usage — adds only the is-open state; pair with initModal for focus management. */
|
|
798
|
-
open?: boolean;
|
|
799
816
|
}
|
|
800
817
|
export interface TabOpts {
|
|
801
818
|
active?: boolean;
|
|
@@ -1014,7 +1031,7 @@ export type SeverityLevel = (typeof SEVERITY_LEVELS)[number];
|
|
|
1014
1031
|
* `'unknown'`, which paints the neutral tone. */
|
|
1015
1032
|
export declare function severity(
|
|
1016
1033
|
level: SeverityLevel | (string & {}) | null | undefined,
|
|
1017
|
-
opts?: { part?: 'chip' | 'dot' | 'row' },
|
|
1034
|
+
opts?: { part?: 'chip' | 'dot' | 'row' | 'tone' },
|
|
1018
1035
|
): { class: string; 'data-level': string };
|
|
1019
1036
|
|
|
1020
1037
|
/** Min/max for the value-bearing fills; defaults to 0–100. */
|