@ponchia/ui 0.6.7 → 0.6.9
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 +129 -4
- package/README.md +4 -4
- package/annotations/index.d.ts.map +1 -1
- package/annotations/index.js +26 -9
- package/behaviors/carousel.d.ts.map +1 -1
- package/behaviors/carousel.js +145 -49
- package/behaviors/combobox.d.ts.map +1 -1
- package/behaviors/combobox.js +220 -92
- package/behaviors/command.d.ts.map +1 -1
- package/behaviors/command.js +74 -14
- package/behaviors/connectors.d.ts.map +1 -1
- package/behaviors/connectors.js +131 -32
- package/behaviors/crosshair.d.ts.map +1 -1
- package/behaviors/crosshair.js +47 -1
- package/behaviors/dialog.d.ts.map +1 -1
- package/behaviors/dialog.js +24 -9
- package/behaviors/disclosure.d.ts.map +1 -1
- package/behaviors/disclosure.js +33 -3
- package/behaviors/dismissible.d.ts.map +1 -1
- package/behaviors/dismissible.js +3 -2
- package/behaviors/forms.d.ts.map +1 -1
- package/behaviors/forms.js +211 -140
- package/behaviors/glyph.d.ts.map +1 -1
- package/behaviors/glyph.js +172 -132
- package/behaviors/inert.d.ts +1 -1
- package/behaviors/inert.d.ts.map +1 -1
- package/behaviors/inert.js +4 -3
- package/behaviors/internal.d.ts.map +1 -1
- package/behaviors/internal.js +4 -3
- package/behaviors/legend.d.ts +0 -5
- package/behaviors/legend.d.ts.map +1 -1
- package/behaviors/legend.js +45 -13
- package/behaviors/menu.d.ts.map +1 -1
- package/behaviors/menu.js +13 -8
- package/behaviors/modal.d.ts.map +1 -1
- package/behaviors/modal.js +77 -19
- package/behaviors/popover.d.ts +4 -3
- package/behaviors/popover.d.ts.map +1 -1
- package/behaviors/popover.js +94 -14
- package/behaviors/sources.d.ts.map +1 -1
- package/behaviors/sources.js +14 -2
- package/behaviors/splitter.d.ts.map +1 -1
- package/behaviors/splitter.js +149 -110
- package/behaviors/spotlight.d.ts.map +1 -1
- package/behaviors/spotlight.js +28 -2
- package/behaviors/table.d.ts +1 -1
- package/behaviors/table.d.ts.map +1 -1
- package/behaviors/table.js +108 -17
- package/behaviors/tabs.d.ts.map +1 -1
- package/behaviors/tabs.js +84 -20
- package/behaviors/theme.d.ts.map +1 -1
- package/behaviors/theme.js +25 -5
- package/behaviors/toast.js +5 -5
- package/classes/index.d.ts +15 -2
- package/classes/index.js +48 -35
- package/connectors/index.d.ts +41 -8
- package/connectors/index.d.ts.map +1 -1
- package/connectors/index.js +74 -19
- package/css/annotations.css +12 -0
- package/css/app.css +3 -4
- package/css/base.css +1 -1
- package/css/content.css +3 -3
- package/css/crosshair.css +27 -2
- package/css/disclosure.css +3 -3
- package/css/dots.css +4 -4
- package/css/feedback.css +8 -37
- package/css/forms.css +9 -12
- package/css/legend.css +1 -1
- package/css/marks.css +1 -1
- package/css/motion.css +6 -6
- package/css/navigation.css +12 -0
- package/css/overlay.css +5 -7
- package/css/primitives.css +14 -16
- package/css/sidenote.css +2 -2
- package/css/table.css +2 -2
- package/css/tokens.css +16 -0
- package/dist/bronto.css +1 -1
- package/dist/css/analytical.css +1 -1
- package/dist/css/annotations.css +1 -1
- package/dist/css/crosshair.css +1 -1
- package/dist/css/feedback.css +1 -1
- package/dist/css/navigation.css +1 -1
- package/dist/css/report-kit.css +1 -1
- package/dist/css/tokens.css +1 -1
- package/docs/adr/0001-color-system.md +3 -2
- package/docs/annotations.md +21 -1
- package/docs/architecture.md +74 -13
- package/docs/command.md +4 -1
- package/docs/connectors.md +16 -0
- package/docs/crosshair.md +1 -1
- package/docs/dots.md +4 -1
- package/docs/glyphs.md +11 -0
- package/docs/interop/react-flow.md +89 -0
- package/docs/migrations/0.2-to-0.3.md +1 -1
- package/docs/package-contract.md +7 -5
- package/docs/reporting.md +23 -12
- package/docs/stability.md +85 -9
- package/docs/theming.md +2 -2
- package/docs/usage.md +16 -2
- package/docs/vega.md +4 -4
- package/glyphs/glyphs.js +43 -33
- package/llms.txt +19 -8
- package/package.json +23 -4
- package/schemas/report-claims.v1.schema.json +1 -1
- package/svelte/index.d.ts +71 -45
- package/svelte/index.d.ts.map +1 -1
- package/svelte/index.js +29 -2
- package/tokens/index.js +2 -2
- package/vue/index.d.ts +42 -5
- package/vue/index.d.ts.map +1 -1
- package/vue/index.js +32 -1
package/docs/connectors.md
CHANGED
|
@@ -41,6 +41,17 @@ import { initConnectors } from '@ponchia/ui/behaviors';
|
|
|
41
41
|
const stop = initConnectors(); // redraws on resize/scroll; returns a cleanup
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
+
For static SVG output, author the same parts directly: `.ui-connector__path`
|
|
45
|
+
holds the line path, and `.ui-connector__end` holds an optional arrowhead/dot
|
|
46
|
+
path from `arrowHead()` or `dotMark()`.
|
|
47
|
+
|
|
48
|
+
```html
|
|
49
|
+
<svg class="ui-connector ui-connector--accent" aria-hidden="true">
|
|
50
|
+
<path class="ui-connector__path" d="M20,10C48,10 72,50 100,50" />
|
|
51
|
+
<path class="ui-connector__end" d="M100,50L92,46L92,54Z" />
|
|
52
|
+
</svg>
|
|
53
|
+
```
|
|
54
|
+
|
|
44
55
|
A connector is decorative — mark it `aria-hidden="true"` and make sure the
|
|
45
56
|
relationship it depicts is also clear from the content/DOM order.
|
|
46
57
|
|
|
@@ -81,6 +92,11 @@ const head = arrowHead(to, angle); // place at the endpoint
|
|
|
81
92
|
- `endTangentAngle(from, to, shape)` — the angle the path *arrives* at `to`
|
|
82
93
|
(chord for `straight`, axis-aligned for `elbow`/`curve`); rotate an end marker
|
|
83
94
|
by this so it points along the path. `connectRects().angle` already uses it.
|
|
95
|
+
- Low-level scalar/SVG kernel helpers are exported for hosts that need the same
|
|
96
|
+
rounding and guard semantics as the path builders: `PRECISION`,
|
|
97
|
+
`roundNumber(value)`, `fmt(value)`, `point(x, y)`, `finite(name, value,
|
|
98
|
+
fallback)`, `dimension(name, value, fallback)`, `clamp(value, min, max)`, and
|
|
99
|
+
`rectPath(left, top, right, bottom)`.
|
|
84
100
|
|
|
85
101
|
## Coordinate model
|
|
86
102
|
|
package/docs/crosshair.md
CHANGED
|
@@ -48,7 +48,7 @@ document.querySelector('[data-bronto-crosshair]').addEventListener(
|
|
|
48
48
|
| `ui-crosshair` | The overlay. Hidden until `.is-active` (set on the first pointer move over the plot). |
|
|
49
49
|
| `ui-crosshair__line` + `--x` / `--y` | Vertical / horizontal rule, positioned by `--crosshair-x` / `--crosshair-y`. |
|
|
50
50
|
| `ui-crosshair__badge` | An axis value chip (you set its text + edge). |
|
|
51
|
-
| `ui-readout` | A pinned readout chip; follows the crosshair point. |
|
|
51
|
+
| `ui-readout` inside `.ui-crosshair` | A pinned readout chip; follows the crosshair point and flips before/above near plot edges via `data-readout-inline` / `data-readout-block`. Standalone `.ui-readout` remains the dot-matrix numeric row from `dots.css`. |
|
|
52
52
|
|
|
53
53
|
`ui-crosshair--muted` is a subtler neutral crosshair. `ui.crosshair({ muted })`
|
|
54
54
|
builds the class string. Include only the lines you need (just `--x` for a
|
package/docs/dots.md
CHANGED
|
@@ -62,7 +62,7 @@ container MUST carry a host-written `role="img"` + `aria-label` with the exact
|
|
|
62
62
|
value — rounding to whole cells is presentation-only, so keep the figure in the
|
|
63
63
|
label (WCAG 1.4.1).
|
|
64
64
|
|
|
65
|
-
### `.ui-
|
|
65
|
+
### `.ui-dotmatrix` cell grid
|
|
66
66
|
|
|
67
67
|
`.ui-dotmatrix` is the raw data-bound grid (the one the glyphs render on): a grid
|
|
68
68
|
of `.ui-dotmatrix__cell` (with `--hot` / `--accent` tones) plus the `--reveal` /
|
|
@@ -125,6 +125,9 @@ Knobs: `--v`, `--gauge-size`, `--gauge-sweep` (default 270deg), `--gauge-from`,
|
|
|
125
125
|
The row wrapper produced by `renderReadout` (see `docs/glyphs.md`) — a Nothing-style
|
|
126
126
|
hero numeric composed from digit glyphs. Tune character spacing with
|
|
127
127
|
`--readout-gap`; spaces render as a `.ui-readout__spacer` of width `--readout-space`.
|
|
128
|
+
Large multi-character readouts are intentionally intrinsic; on narrow report or
|
|
129
|
+
demo pages, either tune the glyph dot size or wrap the readout in a local
|
|
130
|
+
keyboard-focusable horizontal scroller so it does not widen the page.
|
|
128
131
|
|
|
129
132
|
### `.ui-spark--dots`
|
|
130
133
|
|
package/docs/glyphs.md
CHANGED
|
@@ -49,6 +49,17 @@ the same as a hot `#` cell (both become opaque mask regions).
|
|
|
49
49
|
| `render` | `'mask'` | — | the one-node `.ui-icon` path |
|
|
50
50
|
| `size` | CSS length | `1em` | with `render: 'mask'`, the icon size (`--icon-size`) |
|
|
51
51
|
|
|
52
|
+
## Registry and lower-level helpers
|
|
53
|
+
|
|
54
|
+
The public registry is intentionally plain data:
|
|
55
|
+
|
|
56
|
+
- `GLYPH_SIZE` is the grid edge length.
|
|
57
|
+
- `GLYPHS` is the frozen name → bitmap registry.
|
|
58
|
+
- `GLYPH_NAMES` is the sorted, frozen name list.
|
|
59
|
+
- `glyph(name)` returns the raw bitmap rows or `undefined`.
|
|
60
|
+
- `glyphCells(name)` returns the 256 row-major cell descriptors.
|
|
61
|
+
- `glyphMask(name)` returns the CSS `url(...)` value used by the mask renderer.
|
|
62
|
+
|
|
52
63
|
## Big numeric readout — `renderReadout`
|
|
53
64
|
|
|
54
65
|
Compose digits and punctuation into a row of dot-matrix glyphs — the
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# React Flow interop
|
|
2
|
+
|
|
3
|
+
`@ponchia/ui` does not wrap or depend on React Flow / Xyflow. Use React Flow as
|
|
4
|
+
the renderer and keep graph state, layout, hit-testing, and node components in
|
|
5
|
+
the host application.
|
|
6
|
+
|
|
7
|
+
The one Bronto-specific gotcha is the base media reset:
|
|
8
|
+
|
|
9
|
+
```css
|
|
10
|
+
img,
|
|
11
|
+
svg {
|
|
12
|
+
display: block;
|
|
13
|
+
max-inline-size: 100%;
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
That reset is correct for normal inline SVGs, report figures, icons, and rendered
|
|
18
|
+
diagrams. React Flow edge SVGs are different: the edge layer uses absolutely
|
|
19
|
+
positioned SVG wrappers that paint by overflow. If `max-inline-size: 100%` is
|
|
20
|
+
allowed to constrain those wrappers, edges can disappear or clip.
|
|
21
|
+
|
|
22
|
+
## Edge SVG escape hatch
|
|
23
|
+
|
|
24
|
+
Scope the escape hatch to the React Flow surface in your app stylesheet. Keep it
|
|
25
|
+
un-layered, or place it in an app layer declared after `bronto`.
|
|
26
|
+
|
|
27
|
+
```css
|
|
28
|
+
/* app.css */
|
|
29
|
+
@import '@ponchia/ui';
|
|
30
|
+
|
|
31
|
+
.flow-surface .react-flow__edges svg,
|
|
32
|
+
.flow-surface .react-flow__edge svg {
|
|
33
|
+
display: initial;
|
|
34
|
+
max-inline-size: none;
|
|
35
|
+
overflow: visible;
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
import { ReactFlow } from '@xyflow/react';
|
|
41
|
+
import '@xyflow/react/dist/style.css';
|
|
42
|
+
|
|
43
|
+
export function GraphView() {
|
|
44
|
+
return (
|
|
45
|
+
<div className="flow-surface">
|
|
46
|
+
<ReactFlow nodes={nodes} edges={edges} />
|
|
47
|
+
</div>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Do not remove Bronto's global SVG reset to fix this. The incompatibility is
|
|
53
|
+
specific to React Flow's edge-layer geometry, so the override should stay scoped
|
|
54
|
+
to the canvas.
|
|
55
|
+
|
|
56
|
+
## HTML edge labels
|
|
57
|
+
|
|
58
|
+
If you use React Flow's `EdgeLabelRenderer`, remember that labels are HTML
|
|
59
|
+
overlays, not SVG text. Container/group nodes can paint over them. Lift the label
|
|
60
|
+
overlay only inside the graph surface, and keep labels pointer-transparent unless
|
|
61
|
+
they are deliberately interactive:
|
|
62
|
+
|
|
63
|
+
```css
|
|
64
|
+
.flow-surface .react-flow__edgelabel-renderer {
|
|
65
|
+
z-index: var(--z-raised, 10);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.flow-surface .flow-edge-label {
|
|
69
|
+
pointer-events: none;
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
For dense operational diagrams, prefer sparse edge labels plus a side inspector
|
|
74
|
+
for detail. Use Bronto primitives inside nodes or inspectors (`ui-badge`,
|
|
75
|
+
`ui-dot`, `ui-property`, `ui-legend`) rather than adding a Bronto graph-node
|
|
76
|
+
component before a second consumer proves the pattern repeats.
|
|
77
|
+
|
|
78
|
+
## What belongs in the app
|
|
79
|
+
|
|
80
|
+
Keep these outside `@ponchia/ui`:
|
|
81
|
+
|
|
82
|
+
- authored or automatic node placement;
|
|
83
|
+
- graph data models and domain status names;
|
|
84
|
+
- brand/product icons;
|
|
85
|
+
- animation semantics, such as travelling reconciliation dots;
|
|
86
|
+
- click/hover selection behavior.
|
|
87
|
+
|
|
88
|
+
Bronto should provide the visual vocabulary and interop recipe. The graph
|
|
89
|
+
renderer and product meaning remain the host application's job.
|
|
@@ -74,7 +74,7 @@ declarations are literal unions.
|
|
|
74
74
|
## Deprecation policy
|
|
75
75
|
|
|
76
76
|
From 0.3.1 onward, removals follow the policy in
|
|
77
|
-
[
|
|
77
|
+
[stability.md](../stability.md#deprecation-policy): a class is
|
|
78
78
|
deprecated for **one minor** (kept working, marked in CHANGELOG +
|
|
79
79
|
`MIGRATIONS.json`) before it is removed. 0.2 → 0.3 predates this policy,
|
|
80
80
|
which is why it was a hard cut.
|
package/docs/package-contract.md
CHANGED
|
@@ -169,6 +169,7 @@ semantic versioning contract for the surfaces listed here.
|
|
|
169
169
|
| `./docs/workbench.md` | `./docs/workbench.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
|
|
170
170
|
| `./docs/command.md` | `./docs/command.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
|
|
171
171
|
| `./docs/interop/tailwind.md` | `./docs/interop/tailwind.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
|
|
172
|
+
| `./docs/interop/react-flow.md` | `./docs/interop/react-flow.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
|
|
172
173
|
| `./docs/migrations/0.2-to-0.3.md` | `./docs/migrations/0.2-to-0.3.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
|
|
173
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. |
|
|
174
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. |
|
|
@@ -266,6 +267,7 @@ always includes `package.json`, `README.md`, `LICENSE`, and
|
|
|
266
267
|
| `docs/workbench.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
|
|
267
268
|
| `docs/command.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
|
|
268
269
|
| `docs/interop/tailwind.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
|
|
270
|
+
| `docs/interop/react-flow.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
|
|
269
271
|
| `docs/migrations/0.2-to-0.3.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
|
|
270
272
|
| `docs/migrations/0.3-to-0.4.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
|
|
271
273
|
| `docs/migrations/0.4-to-0.5.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
|
|
@@ -282,15 +284,15 @@ result. The listed gates are part of `npm run check`.
|
|
|
282
284
|
|
|
283
285
|
| Surface | Source of truth | Generated outputs | Generator | Gate | Note |
|
|
284
286
|
| --- | --- | --- | --- | --- | --- |
|
|
285
|
-
| Package manifest | `package.json` | docs/package-contract.md | `npm run package-contract:build` | check:fresh | The complete export/file matrix in this document is generated from the manifest. |
|
|
287
|
+
| Package manifest | `package.json` | docs/package-contract.md | `npm run package-contract:build` | check:fresh; check:exports; check:pack; check:consumer-surface; check:consumer-types; check:publint; check:attw | The complete export/file matrix in this document is generated from the manifest; packed tarball imports, concrete file resolution, and package-level type resolution are smoke-tested in clean consumers. |
|
|
286
288
|
| Token model | `tokens/index.js` | css/tokens.css; tokens/index.json; tokens/tokens.dtcg.json; tokens/resolved.json; tokens/figma.variables.json; tokens/index.d.ts | `npm run tokens:css:build; tokens:build; dtcg:build; resolved:build; figma:variables:build; dts:build` | check:fresh; check:contrast | Token names/roles are public. Resolved and Figma handoff values are visual tuning before 1.0. |
|
|
287
289
|
| Class registry | `classes/index.js plus css/*.css selectors` | classes/classes.json; classes/index.d.ts; classes/vscode.css-custom-data.json; docs/reference.md | `npm run classes:json:build; dts:build; vscode:build; reference:build` | check:fresh; check:classes; check:contract | The typed registry, JSON vocabulary, and generated reference stay aligned with real selectors. |
|
|
288
|
-
| Authored CSS graph | `css/core.css plus css/*.css leaves` | dist/bronto.css; dist/css/*.css (46 layered outputs) | `npm run dist:build` | check:dist; check:exports | Default bundle and direct layered leaf imports are generated from authored CSS and
|
|
289
|
-
| JSDoc-authored public JS | `behaviors/; annotations/; connectors/; react/; solid/; qwik/` | adjacent *.d.ts and *.d.ts.map files | `npm run dts:emit` | check:dts-emit; check:types; check:attw; check:publint | Declarations are emitted from the shipped JS,
|
|
290
|
-
| Glyph registry | `glyphs/glyphs.js` | glyphs/glyphs.d.ts | `npm run glyphs:build` | check:glyphs;
|
|
290
|
+
| Authored CSS graph | `css/core.css plus css/*.css leaves` | dist/bronto.css; dist/css/*.css (46 layered outputs) | `npm run dist:build` | check:dist; check:exports; check:component-matrix | Default bundle and direct layered leaf imports are generated from authored CSS, size-gated, and coverage-owned as foundation or component leaves. |
|
|
291
|
+
| JSDoc-authored public JS | `behaviors/; annotations/; connectors/; react/; solid/; qwik/; svelte/; vue/` | adjacent *.d.ts and *.d.ts.map files | `npm run dts:emit` | check:dts-emit; check:types; check:consumer-surface; check:consumer-types; check:behavior-matrix; check:attw; check:publint | Declarations are emitted from the shipped JS, package subpath imports are compiled from a packed clean consumer, and public behavior exports are docs/unit/browser owned. |
|
|
292
|
+
| Glyph registry | `glyphs/glyphs.js` | glyphs/glyphs.d.ts | `npm run glyphs:build` | check:glyphs; check:unit | Glyph names and render options are public. The registry stays sorted and type-covered. |
|
|
291
293
|
| Display colorways | `tokens/skins.js` | css/skins.css; tokens/skins.d.ts | `npm run skins:build` | check:skins; check:contrast | Skins are opt-in root-level choices and never part of dist/bronto.css. |
|
|
292
294
|
| Chart palette | `tokens/charts.js` | css/dataviz.css; tokens/charts.json; tokens/charts.d.ts | `npm run charts:build` | check:charts | Data-viz colors are opt-in, CVD-gated, and never UI chrome. |
|
|
293
|
-
| External renderer themes | `tokens/mermaid.js; tokens/d2.js; tokens/vega.js` | tokens/{mermaid,d2,vega}.{js,json,d.ts} | `npm run mermaid:build; d2:build; vega:build` | check:mermaid; check:d2; check:vega | Renderer configs use resolved colors because the external renderers cannot consume CSS variables directly. |
|
|
295
|
+
| External renderer themes | `tokens/mermaid.js; tokens/d2.js; tokens/vega.js` | tokens/{mermaid,d2,vega}.{js,json,d.ts} | `npm run mermaid:build; d2:build; vega:build` | check:mermaid; check:d2; check:vega; check:unit | Renderer configs use resolved colors because the external renderers cannot consume CSS variables directly; unit tests prove helper defaults and Vega render landing. |
|
|
294
296
|
| Contrast report | `tokens/resolved.json; tokens/skins.js; tokens/charts.js` | docs/contrast.md | `npm run contrast:build` | check:contrast | WCAG floors are hard-gated; APCA is reported as advisory. |
|
|
295
297
|
|
|
296
298
|
## Internal Paths
|
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.6.
|
|
58
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.
|
|
57
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.9/dist/bronto.css" />
|
|
58
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.9/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.6.
|
|
65
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.
|
|
66
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.
|
|
67
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.
|
|
68
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.
|
|
64
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.9/dist/bronto.css" />
|
|
65
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.9/dist/css/report.css" />
|
|
66
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.9/dist/css/dataviz.css" />
|
|
67
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.9/dist/css/annotations.css" />
|
|
68
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.9/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
|
|
@@ -87,8 +87,8 @@ the default bundle — add the leaves a given report actually needs.
|
|
|
87
87
|
`@ponchia/ui/css/analytical.css` is a convenience roll-up of the **nine
|
|
88
88
|
figure/evidence-layer leaves only** (figure, annotations, legends, marks,
|
|
89
89
|
connectors, spotlight, crosshair, selection, highlights) — sources, generated,
|
|
90
|
-
state, interval, clamp, and the prose/evidence leaves below
|
|
91
|
-
must be linked individually. Reach for:
|
|
90
|
+
state, interval, clamp, workbench, command, and the prose/evidence leaves below
|
|
91
|
+
are NOT in it and must be linked individually. Reach for:
|
|
92
92
|
|
|
93
93
|
| Layer | Import | Reach for it when… |
|
|
94
94
|
| --- | --- | --- |
|
|
@@ -98,12 +98,20 @@ must be linked individually. Reach for:
|
|
|
98
98
|
| **Interval** (`.ui-interval*`) | `css/interval.css` | Evidence is a low/high estimate, confidence window, target band, or uncertain reading. The host normalises `--lo`, `--hi`, and optional `--v`; Bronto only paints the range and point. See [interval.md](./interval.md). |
|
|
99
99
|
| **Clamp** (`.ui-clamp*`) | `css/clamp.css` | A source excerpt, claim basis, or caveat should scan as a bounded text block but remain reachable through explicit "Show more" / "Show less" labels and print expansion. See [clamp.md](./clamp.md). |
|
|
100
100
|
| **Highlights** (`.ui-highlights`) | `css/highlights.css` | The host registers CSS Custom Highlight API ranges for cited evidence, search hits, or the current match without wrapping DOM text nodes. See [highlights.md](./highlights.md). |
|
|
101
|
+
| **Chart palette** (`--chart-*`) | `css/dataviz.css` | A figure needs categorical, sequential, or diverging chart colours. The palette is opt-in, CVD-gated, and never UI chrome. See [theming.md](./theming.md#data-viz-palette). |
|
|
101
102
|
| **Annotations** (`.ui-annotation*`) | `css/annotations.css` | A figure needs an explicit callout — a peak, a limit, a watched region — or a small decorative margin mark. SVG only. See [annotations.md](./annotations.md) and the [off-chart + scaling notes](./annotations.md#using-annotations-off-chart) before you size one. |
|
|
103
|
+
| **Connectors** (`.ui-connector*`) | `css/connectors.css` | A note, card, or region needs a leader line to another DOM element. Bronto supplies overlay styling plus pure SVG path geometry; the host owns layout and meaning. See [connectors.md](./connectors.md). |
|
|
102
104
|
| **Legends / data keys** (`.ui-legend*`) | `css/legend.css` | A chart figure needs a colour key. WCAG 1.4.1 by construction. See [legends.md](./legends.md). |
|
|
105
|
+
| **Spotlight** (`.ui-spotlight*`, `.ui-tour-note*`) | `css/spotlight.css` | A screen report or guided workflow needs a visual focus cutout and callout note. It is not a tour engine; the host owns step order, persistence, and focus movement. See [spotlight.md](./spotlight.md). |
|
|
106
|
+
| **Crosshair / readout** (`.ui-crosshair*`, `.ui-readout`) | `css/crosshair.css` | A plot needs pointer-tracking ruler lines and a readout chip. Bronto reports pixels/fractions; the host maps those to data values with its own scales. See [crosshair.md](./crosshair.md). |
|
|
107
|
+
| **Selection emphasis** (`.ui-sel*`) | `css/selection.css` | Host-owned brush, filter, or selection logic needs a shared visual state vocabulary for selected / excluded / candidate items. See [selection.md](./selection.md). |
|
|
103
108
|
| **Mermaid theme** (`@ponchia/ui/mermaid`) | _(JS/JSON, no CSS)_ | The report embeds a [Mermaid](https://mermaid.js.org) diagram (flowchart, sequence, pie…) and you want it on-brand instead of generic. A resolved `base` theme projected from the same tokens as `charts.json`; annotate the rendered SVG with the annotation layer. See [mermaid.md](./mermaid.md). |
|
|
104
109
|
| **D2 theme** (`@ponchia/ui/d2`) | _(JS/JSON, no CSS)_ | The report embeds a [D2](https://d2lang.com) diagram and you want it on-brand. Resolved theme-override slots (monochrome base + one rationed accent) projected from the same tokens; annotate the rendered SVG. See [d2.md](./d2.md). |
|
|
110
|
+
| **Vega theme** (`@ponchia/ui/vega`) | _(JS/JSON, no CSS)_ | The report embeds a live or generated Vega-Lite chart and you want token-matched axes, text, legends, and ramps. See [vega.md](./vega.md). |
|
|
105
111
|
| **Generated-content trust** (`.ui-generated`, `.ui-origin-label`, `.ui-reasoning`, `.ui-tool-log`) | `css/generated.css` | The report (or a section of it) is AI/system-authored and should _say so_ — an origin label plus quiet, collapsible reasoning / tool-call logs. Pairs with the sources layer. See [generated.md](./generated.md). |
|
|
106
112
|
| **Lifecycle / system state** (`.ui-state`, `.ui-syncbar`) | `css/state.css` | A status report needs to show the state a thing is in — saving / queued / stale / conflict / reviewed — as a labelled object, not a bare coloured dot. See [state.md](./state.md). |
|
|
113
|
+
| **Workbench surfaces** (`.ui-inspector`, `.ui-property`, `.ui-selectionbar`, `.ui-splitter`) | `css/workbench.css` | A screen report or analytical tool needs an inspector, property rows, selected-item actions, or resizable panes. Not in `report-kit.css`; pair splitters with `initSplitter`. See [workbench.md](./workbench.md). |
|
|
114
|
+
| **Command palette** (`.ui-command*`) | `css/command.css` | A screen report or analytical tool needs a searchable command shell. Not in `report-kit.css`; pair with `initCommand` and a host-owned opener/action registry. See [command.md](./command.md). |
|
|
107
115
|
| **Spark** (`.ui-spark*`) | `css/spark.css` | A trend belongs _inside a sentence or table cell_ — a word-sized inline microchart, the inline counterpart to `ui-delta`/`ui-num`/`ui-stat`. See [spark.md](./spark.md). |
|
|
108
116
|
| **Bullet graph** (`.ui-bullet*`) | `css/bullet.css` | A measure needs "inside budget? vs target?" at a glance — the canonical SLO / error-budget figure that `ui-meter` structurally cannot express. See [bullet.md](./bullet.md). |
|
|
109
117
|
| **Diff** (`.ui-diff*`) | `css/diff.css` | The report shows what _changed_ — code review, changelogs, version history, config diffs. Marks call out a sentence; diff calls out a line. See [diff.md](./diff.md). |
|
|
@@ -117,8 +125,11 @@ must be linked individually. Reach for:
|
|
|
117
125
|
|
|
118
126
|
These compose with the report-native primitives already called out in
|
|
119
127
|
[Composition rules](#composition-rules): `ui-statgrid`, `ui-alert`, `ui-table`,
|
|
120
|
-
`ui-timeline`, `ui-meter`, and `ui-num`.
|
|
121
|
-
they are
|
|
128
|
+
`ui-timeline`, `ui-meter`, and `ui-num`. The static leaves do not require
|
|
129
|
+
behavior JS, so they are safe in the PDF-first report path. `workbench.css` and
|
|
130
|
+
`command.css` are deliberately screen-tool leaves: they stay out of
|
|
131
|
+
`report-kit.css` and only become interactive when the host imports the matching
|
|
132
|
+
behavior JS.
|
|
122
133
|
|
|
123
134
|
## Canonical skeleton
|
|
124
135
|
|
|
@@ -868,7 +879,7 @@ or validation runtime.
|
|
|
868
879
|
|
|
869
880
|
```json
|
|
870
881
|
{
|
|
871
|
-
"$schema": "https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.
|
|
882
|
+
"$schema": "https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.9/schemas/report-claims.v1.schema.json",
|
|
872
883
|
"schemaVersion": "bronto-report-claims.v1",
|
|
873
884
|
"report": { "title": "Decision readiness", "type": "decision" },
|
|
874
885
|
"claims": [
|
package/docs/stability.md
CHANGED
|
@@ -11,28 +11,75 @@ 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 To 1.0
|
|
15
|
+
|
|
16
|
+
`1.0.0` is a stability declaration, not a catalog milestone. The package is
|
|
17
|
+
ready for 1.0 when the existing public contract is boring to upgrade:
|
|
18
|
+
|
|
19
|
+
- **Core boundary settled.** The default bundle contains shared app/service
|
|
20
|
+
identity only. Report, analytical, provenance, generated-content, renderer,
|
|
21
|
+
workbench, and command surfaces remain opt-in unless they solve universal
|
|
22
|
+
application chrome.
|
|
23
|
+
- **Refusal list enforced by review.** The package still refuses chart scales,
|
|
24
|
+
data fetching, persistence, routing, workflow execution, global action
|
|
25
|
+
registries, virtualized grids, framework component APIs, theme marketplaces,
|
|
26
|
+
and second-accent visual systems.
|
|
27
|
+
- **Consumer proof is routine.** Packed tarball checks, packed example builds,
|
|
28
|
+
packed TypeScript resolution, and at least one real downstream upgrade prove
|
|
29
|
+
each release candidate; source-tree checks are not treated as enough.
|
|
30
|
+
- **Generated contracts stay registry-backed.** Exports, shipped docs, CSS
|
|
31
|
+
leaves, examples, generated artifacts, visual baselines, and ownership
|
|
32
|
+
matrices derive from shared local registries wherever possible.
|
|
33
|
+
- **Bundle budget has headroom.** The default CSS bundle and tarball size have
|
|
34
|
+
deliberate margin, or any budget increase is explicit in the changelog.
|
|
35
|
+
- **Deprecation history is clean.** Every breaking change has a changelog note,
|
|
36
|
+
migration entry when machine-actionable, and the deprecate-one-minor policy
|
|
37
|
+
has been followed or explicitly exempted for provably-unreferenced surface.
|
|
38
|
+
|
|
39
|
+
### 1.0 Readiness Ledger
|
|
40
|
+
|
|
41
|
+
This ledger is the release-candidate checklist. A row is ready only when the
|
|
42
|
+
evidence column is green for the candidate commit; prose approval alone is not
|
|
43
|
+
enough.
|
|
44
|
+
|
|
45
|
+
| Criterion | Current evidence | 1.0 bar |
|
|
46
|
+
| --- | --- | --- |
|
|
47
|
+
| Core boundary settled | `check:exports`, `check:dist`, `check:component-matrix`, `check:report`, and the `CORE_BUNDLE` registry keep default CSS, opt-in leaves, and report/analytical surfaces separate. | No unexplained growth in the default bundle; any move from opt-in to core is called out in `CHANGELOG.md`. |
|
|
48
|
+
| Refusal list enforced by review | `test/analytical-boundary.test.mjs`, `check:contract`, `check:behavior-matrix`, `check:helper-matrix`, and review against `docs/architecture.md` keep scales, routing, persistence, workflow execution, global action registries, and framework component APIs out of package-owned behavior. | No public helper, behavior, or doc implies Bronto owns application state, data, routing, workflow execution, or framework component rendering. |
|
|
49
|
+
| Consumer proof is routine | `check:pack`, `check:consumer-surface`, `check:consumer-types`, `check:examples`, `check:publint`, and `check:attw` prove the packed npm artifact before release; the release process requires a public-safe Release evidence note. | Every 1.0 candidate has packed import/type/example proof plus at least one real downstream upgrade note that names the consumer class, imported surface, and result without leaking private repo or product names. |
|
|
50
|
+
| Generated contracts stay registry-backed | `check:fresh`, `check:classes`, `check:dts-emit`, `check:doc-links`, `check:public-metadata`, `check:public-hygiene`, and the matrix gates prove generated artifacts, shipped docs, public hygiene, and ownership maps do not drift. | New public surface has one registry/source of truth before it gets a hand-authored gate row. |
|
|
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
|
+
| 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
|
+
|
|
54
|
+
After 1.0, breaking changes move to majors. Until then, the table below is the
|
|
55
|
+
current public-surface matrix and the release policy above still applies.
|
|
56
|
+
|
|
14
57
|
| Surface | Stability | Contract |
|
|
15
58
|
| --- | --- | --- |
|
|
16
59
|
| CSS package root (`@ponchia/ui`) | Stable | CSS-only entrypoint. CSS side-effect imports are supported in CSS-aware bundlers; Node/runtime JS root imports are not. |
|
|
17
60
|
| JS module format | Stable | JS subpaths are ESM-only. CommonJS consumers use dynamic `import()`. |
|
|
18
61
|
| CSS class names (`.ui-*`) | Stable | Names and documented modifier semantics are public. Internal selector structure and leaf-file boundaries may change. |
|
|
19
|
-
| Class recipes (`@ponchia/ui/classes`) | Stable | Exported `cls`, `ui`, `cx`, recipe names, and option unions are public. |
|
|
20
|
-
| Class vocabulary as data (`@ponchia/ui/classes.json`) | Stable additive | The JSON shape (`groups`/`classes`/`states`/`customProperties`) and
|
|
62
|
+
| Class recipes (`@ponchia/ui/classes`) | Stable | Exported `cls`, `ui`, `cx`, `attrs`, recipe names, ARIA attribute helper names, and option unions are public. |
|
|
63
|
+
| 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. |
|
|
21
64
|
| 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. |
|
|
22
65
|
| `--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. |
|
|
23
|
-
| Tokens as data (`tokens.json`, `tokens.dtcg.json`, `tokens/resolved.json`) | Stable additive | The JSON shapes are public for non-CSS/non-JS consumers. `resolved.json` exposes `light`/`dark` (resolved colours) and `scale` (resolved non-colour scales). Token names/roles are stable; exact resolved values are visual tuning (pin `~0.x`). |
|
|
24
|
-
| Schemas (`schemas/*.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. |
|
|
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` (resolved colours) and `scale` (resolved non-colour scales). `tokens/figma.variables.json` mirrors the token contract for local Figma Variables import/sync. Token names/roles are stable; exact resolved values are visual tuning (pin `~0.x`). |
|
|
67
|
+
| 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. |
|
|
25
68
|
| 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
|
+
| 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. |
|
|
26
70
|
| Behavior attributes (`data-bronto-*`) | Stable | Attribute names and documented markup relationships are public. Behavior internals are not. |
|
|
27
71
|
| Behavior functions (`@ponchia/ui/behaviors`) | Stable | Exported function names, option names, custom events, SSR no-op behavior, idempotency, and cleanup-returning contract are public. |
|
|
28
72
|
| 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. |
|
|
29
73
|
| `.ui-icon` mask renderer | Stable | Class name, `--icon-size`, currentColor inheritance, and `--icon-mask` contract are public. The internal data URL encoding is not. |
|
|
30
74
|
| Framework lifecycle adapters (`react`/`solid`/`qwik`/`svelte`/`vue`) | Stable thin adapters | Hook/action/directive names, optional peer behavior where applicable, root ref/signal/resolver support, and cleanup lifecycle are public. They remain wrappers over vanilla behaviors, not component APIs. |
|
|
31
|
-
| Skins (`@ponchia/ui/skins`, `css/skins.css`) | Stable additive | Existing skin names stay valid. New skins are additive. Skins are root-level choices. |
|
|
32
|
-
| Charts (`@ponchia/ui/charts`, `charts.json`, `css/dataviz.css`) | Stable additive | Token names, JSON shape, and 8 categorical slots are public. Exact palette values may tune if gates and release notes justify it. |
|
|
75
|
+
| 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
|
+
| 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
|
+
| 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. |
|
|
78
|
+
| Shiki theme data (`@ponchia/ui/shiki/nothing.json`) | Stable additive | The bundled Shiki theme JSON shape and token-derived scope roles are public for syntax-highlighting consumers. Exact colours may tune with the token model and must stay generated from the governed palette. |
|
|
33
79
|
| Reports (`css/report.css`, `.ui-report*`, print utilities) | Stable additive | Report class names, BEM part names, and print utility names are public. Report CSS is opt-in and not imported by the default bundle. The data key now lives in the standalone Legends layer (below), not `css/report.css`; charting is via the Vega theme target (`@ponchia/ui/vega`, see [vega](./vega.md)) or a token-themed inline SVG, not a shipped renderer. |
|
|
34
80
|
| Report kit roll-up (`css/report-kit.css`) | Stable additive | A convenience `@import` of the complete static-report vocabulary. The set of leaves it bundles may grow additively; each leaf also stays individually exported. Opt-in, not in the default bundle. |
|
|
35
|
-
|
|
|
81
|
+
| Figure stage (`css/figure.css`, `.ui-figure*`) | Stable additive | Figure class names, overlay/key/fallback-data slots, and report composition hooks are public. Opt-in, not in the default bundle. Bronto owns the figure frame, not chart rendering, scales, or data mapping. |
|
|
82
|
+
| Annotations (`@ponchia/ui/annotations`, `css/annotations.css`, `.ui-annotation*`) | Stable additive | SVG annotation class names, recipe option names, and helper function names are public. Helper internals and exact path-control heuristics may tune before 1.0. Opt-in, not in the default bundle. Rich placement, renderer, editing, and chart/diagram adapter APIs belong to the sibling `@ponchia/annotations` package; `@ponchia/ui` does not depend on it at runtime or through public declarations. |
|
|
36
83
|
| Legends (`css/legend.css`, `.ui-legend*`, `@ponchia/ui/behaviors` `initLegend`) | Stable additive | Legend class names, recipe option names, and the `bronto:legend:toggle` event contract (`aria-pressed="true"` ⇒ shown) are public. Opt-in, not in the default bundle; swatch colours are gated to the `--chart-*` palette. |
|
|
37
84
|
| Marks (`css/marks.css`, `.ui-mark*`, `.ui-bracket-note*`) | Stable additive | Text-mark and bracket-note class names and recipe option names are public. Opt-in, not in the default bundle. Uses semantic tones only. |
|
|
38
85
|
| Connectors (`@ponchia/ui/connectors`, `css/connectors.css`, `.ui-connector*`, `initConnectors`) | Stable additive | Connector class names, the `data-bronto-connector` attribute contract, geometry helper function names, and recipe options are public. Helper internals/heuristics may tune before 1.0. Opt-in, not in the default bundle. |
|
|
@@ -41,15 +88,44 @@ shipped `files` entry, and the generated artifact provenance map — see
|
|
|
41
88
|
| Selection states (`css/selection.css`, `.ui-sel*`) | Stable additive | The `.ui-sel`/`--on`/`--off`/`--maybe` emphasis classes and recipe options are public. Opt-in, cross-cutting. The host owns selection logic; Bronto only styles the states. |
|
|
42
89
|
| Analytical roll-up (`css/analytical.css`) | Stable additive | A convenience `@import` of the nine analytical leaves (figure, annotations, legend, marks, connectors, spotlight, crosshair, selection, highlights). The set of leaves it bundles may grow additively; each leaf also stays individually exported. Opt-in, not in the default bundle. |
|
|
43
90
|
| Sources / provenance (`css/sources.css`, `.ui-citation*`, `.ui-source-card*`, `.ui-source-list*`, `.ui-provenance*`, `.ui-src--*`, `initSources`) | Stable additive | Citation/source/provenance class names, the cross-cutting `.ui-src--*` trust-state modifiers (always paired with an author label), the optional `data-bronto-sources` / `data-bronto-source-ref` behavior contract, `bronto:source:focus`, and the `ui.citation`/`ui.source`/`ui.provenance` recipes + `cls.sourceList` are public. Opt-in, not in the default bundle. |
|
|
91
|
+
| Interval ranges (`css/interval.css`, `.ui-interval*`) | Stable additive | Interval class names and the normalised `--lo`/`--hi`/`--v` custom-property contract are public. Opt-in, not in the default bundle. The host owns domains, units, and estimate math. |
|
|
92
|
+
| Clamp blocks (`css/clamp.css`, `.ui-clamp*`) | Stable additive | Clamp class/part names, expanded/collapsed affordance slots, and print-expansion behavior are public. Opt-in, not in the default bundle. The host owns disclosure copy and state persistence. |
|
|
93
|
+
| Text highlights (`css/highlights.css`, `.ui-highlights`) | Stable additive | Highlight container classes and token-backed Custom Highlight API paint are public. Opt-in, not in the default bundle. The host owns range registration and search/current-match logic. |
|
|
44
94
|
| 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. |
|
|
45
95
|
| 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. |
|
|
46
96
|
| 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. |
|
|
47
|
-
| Command palette (`css/command.css`, `.ui-command*`, `initCommand`, `useCommand`) | 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, plus the
|
|
97
|
+
| Command palette (`css/command.css`, `.ui-command*`, `initCommand`, `useCommand` / `command` / `vCommand`) | 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, plus the framework binding adapters. Bronto filters + navigates (APG combobox/listbox); the host owns the action registry/execution. Opt-in, not in the default bundle, no global hotkey. |
|
|
98
|
+
| 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
|
+
| 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
|
+
| 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. |
|
|
101
|
+
| Code evidence (`css/code.css`, `.ui-code*`) | Stable additive | Code block/gutter/line-state class names and token-backed syntax-theme roles are public. Opt-in, not in the default bundle. Bronto styles code-as-evidence; it does not parse or highlight code at runtime. |
|
|
102
|
+
| Sidenotes (`css/sidenote.css`, `.ui-sidenote`, `.ui-marginnote`) | Stable additive | Sidenote and marginnote class names, numbering behavior, and responsive in-flow fallback are public. Opt-in, not in the default bundle. |
|
|
103
|
+
| Text references (`css/textref.css`, `.ui-textref`) | Stable additive | Text-reference class names and `::target-text` styling are public. Opt-in, not in the default bundle. The host owns URL text fragments and quote provenance. |
|
|
104
|
+
| 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
|
+
| 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
|
+
| 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. |
|
|
48
107
|
| Controlled-modal focus trap (`initModal`, `useModal`, `data-bronto-modal`) | Stable additive | For the `.ui-modal.is-open` (non-`<dialog>`) path: the `data-bronto-modal` opt-in marker, the `inert`-based focus trap + focus-return, and the cancelable `bronto:modal:close` (`detail: { reason }`) event are public. The consumer still owns the `is-open` class; the behavior never changes visibility. The native `<dialog>` path (`initDialog`) is the default and gets the trap for free. |
|
|
49
108
|
| 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). |
|
|
50
|
-
|
|
|
109
|
+
| 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
|
+
| 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. |
|
|
51
111
|
| Demo, examples, tests, scripts | Internal | Useful for learning and verification, but not shipped runtime API unless a path is explicitly exported in `package.json`. |
|
|
52
112
|
|
|
113
|
+
## Deprecation Policy
|
|
114
|
+
|
|
115
|
+
Public surface (`.ui-*` classes, `data-bronto-*` attributes, `cls`/token keys,
|
|
116
|
+
behavior signatures, and exported schema values) is removed on a
|
|
117
|
+
**deprecate-one-minor** cycle:
|
|
118
|
+
|
|
119
|
+
1. **Deprecate** in minor _N_: the surface keeps working unchanged, is marked
|
|
120
|
+
deprecated in `CHANGELOG.md`, and, for renames, gets an entry in
|
|
121
|
+
[`MIGRATIONS.json`](../MIGRATIONS.json).
|
|
122
|
+
2. **Remove** no earlier than minor _N+1_, with a **BREAKING** changelog entry
|
|
123
|
+
and migration note.
|
|
124
|
+
|
|
125
|
+
A token/class/attribute that is provably referenced by no shipped CSS,
|
|
126
|
+
component, behavior, or doc may skip that window and be removed with a BREAKING
|
|
127
|
+
entry plus migration note; there is no working call-site to keep alive.
|
|
128
|
+
|
|
53
129
|
## Trust Boundary
|
|
54
130
|
|
|
55
131
|
Behaviors assume trusted application markup. If a delegated root includes
|
package/docs/theming.md
CHANGED
|
@@ -223,7 +223,7 @@ you have, so the one-accent discipline holds.
|
|
|
223
223
|
colorways". (Your _own_ `--accent` re-brand is still your obligation; the
|
|
224
224
|
guarantee covers the shipped palettes and skins.)
|
|
225
225
|
|
|
226
|
-
## Data-viz palette
|
|
226
|
+
## Data-viz palette
|
|
227
227
|
|
|
228
228
|
Opt-in Tier-4 chart colours for dashboards — **charts only, never UI chrome**
|
|
229
229
|
(a build gate fails on `var(--chart-*)` in component CSS), and never in the
|
|
@@ -275,7 +275,7 @@ semantics — the CSS can't add ARIA for you:
|
|
|
275
275
|
content use `.ui-popover` + `initPopover()` (collision-aware).
|
|
276
276
|
|
|
277
277
|
> **Verify a rebrand:** open
|
|
278
|
-
> [
|
|
278
|
+
> [the theme playground](https://ponchia.github.io/bronto-ui/demo/theme-playground.html) — paste
|
|
279
279
|
> your `--accent`, see the derived family and the computed WCAG ratios
|
|
280
280
|
> for `--accent-text` / `--accent` against the surface, and copy the CSS
|
|
281
281
|
> + DTCG override. This is the instrument for the "verify your hue"
|
package/docs/usage.md
CHANGED
|
@@ -191,6 +191,12 @@ destructive action).
|
|
|
191
191
|
| toast | transient, out-of-flow, system-initiated. Danger toasts route to an assertive live region; everything else polite. |
|
|
192
192
|
| tooltip | supplemental, hover/focus, never essential info (it's not announced reliably; don't hide required content in it). |
|
|
193
193
|
|
|
194
|
+
For dismissible in-flow alerts, mark the host with `data-bronto-dismissible`,
|
|
195
|
+
put `data-bronto-dismiss` on the close button, and wire `dismissible()` from
|
|
196
|
+
`@ponchia/ui/behaviors`. With no attribute value, the button removes the nearest
|
|
197
|
+
dismissible host; with a selector value, it removes the nearest matching
|
|
198
|
+
ancestor and dispatches a cancelable `bronto:dismiss` event first.
|
|
199
|
+
|
|
194
200
|
The CSS `ui-tooltip` is hover/focus-only and CSS can't wire it to assistive
|
|
195
201
|
tech for you — associate the bubble with its trigger yourself, or it conveys
|
|
196
202
|
nothing to a screen reader: give `.ui-tooltip__bubble` an `id`, point the
|
|
@@ -222,6 +228,8 @@ Both are a thin horizontal bar; they mean different things.
|
|
|
222
228
|
zero bar — so the helper returns just `role="progressbar"` + `aria-busy="true"`
|
|
223
229
|
(no `aria-valuenow`, no `--value`). Pair it with the class:
|
|
224
230
|
`<div class={ui.progress({ indeterminate: true })} {...attrs.progress()}>`.
|
|
231
|
+
The segmented `.ui-dotbar` uses the same accessibility contract through
|
|
232
|
+
`attrs.dotbar(value)` or `attrs.dotbar()` for the indeterminate sweep.
|
|
225
233
|
|
|
226
234
|
Rule of thumb: *something is happening* → progress; *something measures
|
|
227
235
|
this much* → meter.
|
|
@@ -589,7 +597,9 @@ one of these a screen reader announces nothing while the user waits.
|
|
|
589
597
|
carries the native `popover` attribute (never clipped by `overflow`/stacking);
|
|
590
598
|
without it, it falls back to an `is-open` class that a clipping ancestor can cut
|
|
591
599
|
off. Add `popover` to the panel for the robust path — the `is-open` form is a
|
|
592
|
-
fallback, not the default to copy.
|
|
600
|
+
fallback, not the default to copy. Placement flips to the roomier vertical side,
|
|
601
|
+
keeps the panel on-screen, and scrolls tall content inside the available viewport
|
|
602
|
+
space.
|
|
593
603
|
|
|
594
604
|
It is a **non-modal** dialog by design: the panel gets `role="dialog"` and focus
|
|
595
605
|
moves into it, but there is **no focus trap** and the rest of the page stays
|
|
@@ -610,7 +620,7 @@ HTML, print/PDF, and before any hydration:
|
|
|
610
620
|
|
|
611
621
|
| Component | How it works without JS |
|
|
612
622
|
| --- | --- |
|
|
613
|
-
| Tooltip (`ui-tooltip`) | `:hover` / `:focus-within`
|
|
623
|
+
| Tooltip (`ui-tooltip`) | `:hover` / `:focus-within` for short local labels |
|
|
614
624
|
| Accordion | native `<details>` / `<summary>` |
|
|
615
625
|
| Segmented control (`ui-segmented`) | `:has(input:checked)` over a radio group |
|
|
616
626
|
| Scroll-reveal (`ui-scroll-reveal`) | scroll-driven animation, zero JS |
|
|
@@ -622,6 +632,7 @@ These are JS widgets wearing the Bronto look; without the behavior they are iner
|
|
|
622
632
|
|
|
623
633
|
| Component | Behavior | With the behavior absent |
|
|
624
634
|
| --- | --- | --- |
|
|
635
|
+
| Disclosure trigger (`[data-bronto-disclosure]`) | `initDisclosure` | a button with stale `aria-expanded`; the controlled panel never toggles |
|
|
625
636
|
| Tabs (`ui-tabs`) | `initTabs` | **author panels visible** — ship `hidden` panels and if `initTabs` never runs the content is unreachable |
|
|
626
637
|
| Combobox (`ui-combobox`) | `initCombobox` | a plain text input beside an unfiltered list |
|
|
627
638
|
| Command palette (`ui-command`) | `initCommand` | a static, unfiltered list |
|
|
@@ -631,12 +642,15 @@ These are JS widgets wearing the Bronto look; without the behavior they are iner
|
|
|
631
642
|
| Carousel (`ui-carousel`) | `initCarousel` | a native scroll-snap track (usable, no controls) |
|
|
632
643
|
| Controlled modal (`ui-modal.is-open`) | `initModal` | open skin only — no inert trap, focus-return, or Escape close signal |
|
|
633
644
|
| Menu (`data-bronto-menu`) | `initMenu` | a button next to a list with no open/close, outside-click, or Escape |
|
|
645
|
+
| Dismissible alert/callout (`data-bronto-dismissible`) | `dismissible` | the close affordance is just a button; nothing is removed |
|
|
634
646
|
| Toast | `toast()` | nothing — it is imperative-only |
|
|
635
647
|
|
|
636
648
|
One cross-cutting guard, not tied to a single component:
|
|
637
649
|
|
|
638
650
|
| Concern | Behavior | With the behavior absent |
|
|
639
651
|
| --- | --- | --- |
|
|
652
|
+
| Theme persistence before first paint | `applyStoredTheme` | the token layer follows OS preference until client code sets `data-theme`, so a stored preference can flash |
|
|
653
|
+
| Theme toggle controls | `initThemeToggle` | the button is inert and does not persist `data-theme` |
|
|
640
654
|
| `aria-disabled="true"` controls | `initDisabledGuard` | dimmed + pointer-inert via CSS, but still **keyboard**-activatable on Enter/Space (native `disabled` is already fully inert) |
|
|
641
655
|
|
|
642
656
|
Rule of thumb: if a component needs ARIA-state sync, focus management, a keyboard
|
package/docs/vega.md
CHANGED
|
@@ -137,7 +137,7 @@ one chromatic default (series 1 / the lone mark), never the chrome:
|
|
|
137
137
|
| `range.diverging` | − … neutral … + ramp | `charts.json` diverging |
|
|
138
138
|
|
|
139
139
|
The palette is the same CVD-safe, pattern-paired set documented in
|
|
140
|
-
[theming](./theming.md#data-viz) — colour is never the sole channel. When a
|
|
140
|
+
[theming](./theming.md#data-viz-palette) — colour is never the sole channel. When a
|
|
141
141
|
series needs the redundant second channel, drive the mark's fill from the
|
|
142
142
|
`--chart-pattern-*` tokens or pair a [legend](./legends.md) swatch.
|
|
143
143
|
|
|
@@ -237,8 +237,8 @@ contract**, so pin your Vega version and key off the data, not generated ids.
|
|
|
237
237
|
|
|
238
238
|
bronto owns the theme config — gated structurally by `check:vega` (every colour
|
|
239
239
|
slot resolves, both themes, no `var()` leaks, every `range.*` ramp populated),
|
|
240
|
-
and
|
|
241
|
-
|
|
242
|
-
|
|
240
|
+
and by the unit suite (`check:unit`, via the `vega`/`vega-lite` dev deps) which
|
|
241
|
+
asserts the colours actually land on a rendered chart — and the annotation
|
|
242
|
+
geometry. It does not own Vega's grammar, its rendering, or its internal SVG —
|
|
243
243
|
those stay Vega's, and the chart is a documented composition, not a shipped
|
|
244
244
|
runtime binding.
|