@ponchia/ui 0.6.6 → 0.6.8

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.
Files changed (160) hide show
  1. package/CHANGELOG.md +175 -6
  2. package/README.md +38 -25
  3. package/annotations/index.d.ts.map +1 -1
  4. package/annotations/index.js +21 -3
  5. package/behaviors/carousel.d.ts.map +1 -1
  6. package/behaviors/carousel.js +91 -32
  7. package/behaviors/combobox.d.ts.map +1 -1
  8. package/behaviors/combobox.js +117 -43
  9. package/behaviors/command.d.ts.map +1 -1
  10. package/behaviors/command.js +74 -14
  11. package/behaviors/connectors.d.ts.map +1 -1
  12. package/behaviors/connectors.js +92 -9
  13. package/behaviors/crosshair.d.ts.map +1 -1
  14. package/behaviors/crosshair.js +47 -1
  15. package/behaviors/dialog.d.ts.map +1 -1
  16. package/behaviors/dialog.js +37 -16
  17. package/behaviors/disclosure.d.ts.map +1 -1
  18. package/behaviors/disclosure.js +33 -3
  19. package/behaviors/dismissible.d.ts.map +1 -1
  20. package/behaviors/dismissible.js +3 -2
  21. package/behaviors/forms.d.ts.map +1 -1
  22. package/behaviors/forms.js +78 -5
  23. package/behaviors/glyph.d.ts.map +1 -1
  24. package/behaviors/glyph.js +17 -2
  25. package/behaviors/index.d.ts +2 -0
  26. package/behaviors/index.d.ts.map +1 -1
  27. package/behaviors/index.js +2 -0
  28. package/behaviors/inert.js +3 -2
  29. package/behaviors/internal.d.ts +2 -1
  30. package/behaviors/internal.d.ts.map +1 -1
  31. package/behaviors/internal.js +25 -4
  32. package/behaviors/legend.d.ts +0 -5
  33. package/behaviors/legend.d.ts.map +1 -1
  34. package/behaviors/legend.js +78 -14
  35. package/behaviors/menu.d.ts.map +1 -1
  36. package/behaviors/menu.js +13 -8
  37. package/behaviors/modal.d.ts.map +1 -1
  38. package/behaviors/modal.js +77 -19
  39. package/behaviors/popover.d.ts +4 -3
  40. package/behaviors/popover.d.ts.map +1 -1
  41. package/behaviors/popover.js +89 -9
  42. package/behaviors/sources.d.ts.map +1 -1
  43. package/behaviors/sources.js +14 -2
  44. package/behaviors/splitter.d.ts +26 -0
  45. package/behaviors/splitter.d.ts.map +1 -0
  46. package/behaviors/splitter.js +239 -0
  47. package/behaviors/spotlight.d.ts.map +1 -1
  48. package/behaviors/spotlight.js +28 -2
  49. package/behaviors/table.d.ts.map +1 -1
  50. package/behaviors/table.js +105 -13
  51. package/behaviors/tabs.d.ts.map +1 -1
  52. package/behaviors/tabs.js +82 -18
  53. package/behaviors/theme.d.ts.map +1 -1
  54. package/behaviors/theme.js +26 -6
  55. package/classes/classes.json +230 -4
  56. package/classes/index.d.ts +64 -3
  57. package/classes/index.js +56 -2
  58. package/classes/vscode.css-custom-data.json +1 -1
  59. package/connectors/index.d.ts +39 -6
  60. package/connectors/index.d.ts.map +1 -1
  61. package/connectors/index.js +67 -9
  62. package/css/analytical.css +3 -1
  63. package/css/annotations.css +12 -0
  64. package/css/app.css +4 -4
  65. package/css/clamp.css +92 -0
  66. package/css/crosshair.css +27 -2
  67. package/css/feedback.css +2 -30
  68. package/css/figure.css +102 -0
  69. package/css/highlights.css +50 -0
  70. package/css/interval.css +90 -0
  71. package/css/navigation.css +12 -0
  72. package/css/primitives.css +2 -3
  73. package/css/report-kit.css +38 -0
  74. package/css/report.css +23 -4
  75. package/css/sidenote.css +12 -2
  76. package/css/site.css +2 -1
  77. package/css/sources.css +5 -0
  78. package/css/state.css +120 -1
  79. package/css/table.css +4 -0
  80. package/css/tokens.css +25 -9
  81. package/css/workbench.css +101 -8
  82. package/dist/bronto.css +1 -1
  83. package/dist/css/analytical.css +1 -1
  84. package/dist/css/annotations.css +1 -1
  85. package/dist/css/app.css +1 -1
  86. package/dist/css/clamp.css +1 -0
  87. package/dist/css/crosshair.css +1 -1
  88. package/dist/css/feedback.css +1 -1
  89. package/dist/css/figure.css +1 -0
  90. package/dist/css/highlights.css +1 -0
  91. package/dist/css/interval.css +1 -0
  92. package/dist/css/navigation.css +1 -1
  93. package/dist/css/primitives.css +1 -1
  94. package/dist/css/report-kit.css +1 -0
  95. package/dist/css/report.css +1 -1
  96. package/dist/css/sidenote.css +1 -1
  97. package/dist/css/site.css +1 -1
  98. package/dist/css/sources.css +1 -1
  99. package/dist/css/state.css +1 -1
  100. package/dist/css/table.css +1 -1
  101. package/dist/css/tokens.css +1 -1
  102. package/dist/css/workbench.css +1 -1
  103. package/docs/adr/0001-color-system.md +3 -2
  104. package/docs/adr/0002-scope-and-2026-baseline.md +1 -1
  105. package/docs/annotations.md +12 -1
  106. package/docs/architecture.md +105 -48
  107. package/docs/clamp.md +49 -0
  108. package/docs/command.md +4 -1
  109. package/docs/connectors.md +16 -0
  110. package/docs/contrast.md +34 -24
  111. package/docs/crosshair.md +1 -1
  112. package/docs/d2.md +37 -0
  113. package/docs/dots.md +4 -1
  114. package/docs/figure.md +71 -0
  115. package/docs/frontier-primitives.md +25 -24
  116. package/docs/glyphs.md +11 -0
  117. package/docs/highlights.md +52 -0
  118. package/docs/interop/tailwind.md +148 -0
  119. package/docs/interval.md +55 -0
  120. package/docs/legends.md +3 -2
  121. package/docs/mermaid.md +6 -0
  122. package/docs/migrations/0.2-to-0.3.md +80 -0
  123. package/docs/migrations/0.3-to-0.4.md +48 -0
  124. package/docs/migrations/0.4-to-0.5.md +96 -0
  125. package/docs/migrations/0.5-to-0.6.md +82 -0
  126. package/docs/package-contract.md +44 -6
  127. package/docs/reference.md +78 -5
  128. package/docs/reporting.md +126 -60
  129. package/docs/sidenote.md +7 -1
  130. package/docs/sources.md +1 -1
  131. package/docs/stability.md +23 -5
  132. package/docs/state.md +67 -10
  133. package/docs/theming.md +12 -4
  134. package/docs/usage.md +47 -13
  135. package/docs/vega.md +4 -4
  136. package/docs/workbench.md +59 -18
  137. package/llms.txt +89 -16
  138. package/package.json +82 -6
  139. package/qwik/index.d.ts +1 -0
  140. package/qwik/index.d.ts.map +1 -1
  141. package/qwik/index.js +26 -21
  142. package/react/index.d.ts +1 -0
  143. package/react/index.d.ts.map +1 -1
  144. package/react/index.js +4 -1
  145. package/schemas/report-claims.v1.schema.json +137 -0
  146. package/solid/index.d.ts +2 -0
  147. package/solid/index.d.ts.map +1 -1
  148. package/solid/index.js +3 -0
  149. package/svelte/index.d.ts +114 -0
  150. package/svelte/index.d.ts.map +1 -0
  151. package/svelte/index.js +193 -0
  152. package/tailwind.css +87 -0
  153. package/tokens/figma.variables.json +2241 -0
  154. package/tokens/index.js +1 -1
  155. package/tokens/index.json +2 -2
  156. package/tokens/resolved.json +3 -3
  157. package/tokens/tokens.dtcg.json +1 -1
  158. package/vue/index.d.ts +116 -0
  159. package/vue/index.d.ts.map +1 -0
  160. package/vue/index.js +228 -0
@@ -0,0 +1,96 @@
1
+ # Migrating 0.4 → 0.5
2
+
3
+ 0.5.0 builds out the **analytical & communication** identity: an opt-in suite of
4
+ primitives for interfaces that explain themselves — SVG annotations, standalone
5
+ legends, text/evidence marks, leader-line connectors, a guided-focus spotlight, a
6
+ crosshair/readout, a selection vocabulary (rolled up in
7
+ [`css/analytical.css`](../../css/analytical.css)), plus standalone
8
+ `sources`/provenance, lifecycle `state`, AI-trust `generated`, `workbench` and a
9
+ `command` palette.
10
+
11
+ Almost all of it is **additive and opt-in** — the default `dist/bronto.css`
12
+ renders identically and needs no change. There are **three breaking changes**,
13
+ and every one of them lives in the _opt-in_ report / analytical layer. The
14
+ machine-readable map is [`MIGRATIONS.json`](../../MIGRATIONS.json) (now shipped
15
+ in the package).
16
+
17
+ ## 1. The report kit's chart key moved to the standalone Legends layer
18
+
19
+ `.ui-chart__legend` / `.ui-chart__swatch` were **removed** from
20
+ `css/report.css`. The data key is now the standalone Legends layer
21
+ (`css/legend.css`), which is richer (categorical / gradient / threshold /
22
+ pattern keys, an optional interactive series toggle) and reusable outside
23
+ reports.
24
+
25
+ **Migration:** add the legend leaf next to the report kit and rework the wrapper.
26
+
27
+ ```diff
28
+ + <link rel="stylesheet" href="@ponchia/ui/css/legend.css">
29
+
30
+ - <ul class="ui-chart__legend">
31
+ - <li><span class="ui-chart__swatch" style="--chart-color: var(--chart-1)"></span> Research</li>
32
+ - </ul>
33
+ + <ul class="ui-legend">
34
+ + <li class="ui-legend__item">
35
+ + <span class="ui-legend__swatch" style="--chart-color: var(--chart-1)"></span>
36
+ + <span class="ui-legend__label">Research</span>
37
+ + </li>
38
+ + </ul>
39
+ ```
40
+
41
+ The swatch's `--chart-color` / `--chart-pattern` inline contract is unchanged;
42
+ the categorical colour is also available via `.ui-legend__swatch--1..8`. Full
43
+ grammar: [`docs/legends.md`](../legends.md). Quick rename:
44
+
45
+ ```bash
46
+ rg -l 'ui-chart__legend|ui-chart__swatch' .
47
+ # s/ui-chart__swatch/ui-legend__swatch/g + rework the <ul> wrapper as above
48
+ ```
49
+
50
+ ## 2. The marks rationed-accent tone `evidence` → `accent`
51
+
52
+ To match the connector/annotation tone vocabulary, the **tone** modifier on
53
+ text marks and bracket notes was renamed:
54
+
55
+ | 0.4 | 0.5 |
56
+ | --- | --- |
57
+ | `.ui-mark--evidence` | `.ui-mark--accent` |
58
+ | `.ui-bracket-note--evidence` | `.ui-bracket-note--accent` |
59
+ | `ui.mark({ tone: 'evidence' })` | `ui.mark({ tone: 'accent' })` |
60
+ | `ui.bracketNote({ tone: 'evidence' })` | `ui.bracketNote({ tone: 'accent' })` |
61
+
62
+ **Do _not_ rewrite** `ui.annotation({ variant: 'evidence' })` or the
63
+ `.ui-annotation--evidence` subject marker — those are a marker **shape**, not a
64
+ tone, and are unchanged.
65
+
66
+ ```bash
67
+ rg -l 'ui-mark--evidence|ui-bracket-note--evidence' .
68
+ # s/ui-mark--evidence/ui-mark--accent/g ; s/ui-bracket-note--evidence/ui-bracket-note--accent/g
69
+ ```
70
+
71
+ ## 3. Annotation arrowheads share the connectors geometry kernel
72
+
73
+ No API change — `connectorEndArrow` and the annotation arrowhead recipes keep
74
+ their signatures. Only the **rendered arrowhead path** differs slightly now that
75
+ it reuses the shared `@ponchia/ui/connectors` geometry kernel.
76
+
77
+ **Migration:** nothing to change in code. If you keep exact-path SVG snapshot
78
+ tests of annotation arrowheads, **re-baseline** them.
79
+
80
+ ## What's new (all opt-in, nothing to change)
81
+
82
+ - **Analytical suite** — `@ponchia/ui/css/analytical.css` rolls up annotations,
83
+ legend, marks, connectors, spotlight, crosshair and selection. Each owns only
84
+ its visual grammar + pure geometry (no chart engine, no state, no hit-testing).
85
+ - **App-tier leaves** — `css/sources.css` (citation/provenance trust),
86
+ `css/state.css` (lifecycle/system state), `css/generated.css` (AI-trust),
87
+ `css/workbench.css` (inspector/property/selection bar), and `css/command.css`
88
+ + `initCommand` (a filter/keyboard command palette).
89
+ - **`.ui-shortcut`** — a keyboard-hint chord/sequence primitive in the core layer.
90
+
91
+ ## Re-pin
92
+
93
+ ```jsonc
94
+ // package.json — 0.5 is a breaking minor under the pre-1.0 policy
95
+ "@ponchia/ui": "~0.5.0"
96
+ ```
@@ -0,0 +1,82 @@
1
+ # Migrating 0.5 -> 0.6
2
+
3
+ 0.6.0 is the **charting realignment** release. The analytical layer still
4
+ explains figures, but it no longer pretends CSS can be a chart renderer:
5
+ scales, domains, axes and data binding belong to a chart engine.
6
+
7
+ There is one breaking change. The data-viz palette (`--chart-*`,
8
+ `tokens/charts.json`) and the standalone Legends layer are unchanged. The
9
+ machine-readable map is [`MIGRATIONS.json`](../../MIGRATIONS.json).
10
+
11
+ ## 1. Replace the removed `.ui-chart*` renderer
12
+
13
+ The static bar-chart classes were removed:
14
+
15
+ ```text
16
+ ui-chart
17
+ ui-chart__plot
18
+ ui-chart__bar
19
+ ui-chart__label
20
+ ui-chart__track
21
+ ui-chart__fill
22
+ ui-chart__fallback
23
+ ui-chart__caption
24
+ ```
25
+
26
+ There is no safe class rename. Find call sites first:
27
+
28
+ ```bash
29
+ rg -n 'ui-chart\b|ui-chart__' .
30
+ ```
31
+
32
+ For live or data-driven charts, migrate to Vega-Lite and apply the Bronto
33
+ theme config:
34
+
35
+ ```js
36
+ import { brontoVegaConfig } from '@ponchia/ui/vega';
37
+
38
+ vegaEmbed('#chart', spec, {
39
+ config: brontoVegaConfig(document.documentElement.dataset.theme || 'light'),
40
+ renderer: 'svg',
41
+ actions: false,
42
+ });
43
+ ```
44
+
45
+ Wrap the rendered chart in report chrome and keep the data key in the
46
+ standalone legend layer:
47
+
48
+ ```html
49
+ <figure class="ui-report__figure">
50
+ <div id="chart"></div>
51
+ <figcaption class="ui-report__caption">Latency by region.</figcaption>
52
+ <ul class="ui-legend">
53
+ <li class="ui-legend__item">
54
+ <span class="ui-legend__swatch ui-legend__swatch--1"></span>
55
+ <span class="ui-legend__label">EU West</span>
56
+ </li>
57
+ </ul>
58
+ </figure>
59
+ ```
60
+
61
+ For frozen print charts with no runtime, hand-author an inline `<svg>` using the
62
+ resolved `--chart-*` palette or `tokens/charts.json`.
63
+
64
+ ## 2. Remove `--chart-value`
65
+
66
+ The old renderer's per-bar `--chart-value` knob is gone with the renderer.
67
+ Keep using `--chart-color` and `--chart-pattern` on `.ui-legend__swatch`; those
68
+ belong to the unchanged Legends layer.
69
+
70
+ ## 3. Import the new chart theme helper only when needed
71
+
72
+ `@ponchia/ui/vega` and `vega.json` are config/data only. Vega, Vega-Lite and
73
+ vega-embed remain consumer dependencies; Bronto does not bundle a chart engine.
74
+ See [`docs/vega.md`](../vega.md) for the browser, CDN and static-report
75
+ recipes.
76
+
77
+ ## Re-pin
78
+
79
+ ```jsonc
80
+ // package.json — 0.6 is a breaking minor under the pre-1.0 policy
81
+ "@ponchia/ui": "~0.6.0"
82
+ ```
@@ -27,6 +27,8 @@ semantic versioning contract for the surfaces listed here.
27
27
  | --- | --- | --- | --- | --- |
28
28
  | `.` | style: `./dist/bronto.css`<br>default: `./dist/bronto.css` | CSS root bundle | Stable | CSS-only package root. Supported as a CSS side-effect import in CSS-aware bundlers; not a Node/runtime JS entrypoint. |
29
29
  | `./dist/bronto.css` | `./dist/bronto.css` | Flattened CSS bundle | Stable path | The prebuilt default stylesheet. Generated from css/core.css and byte-checked by check:dist. |
30
+ | `./tailwind` | `./tailwind.css` | Tailwind CSS bridge | Stable additive | CSS-only Tailwind v4 theme/variant bridge. It maps Bronto tokens into Tailwind namespaces; it does not import component CSS. |
31
+ | `./tailwind.css` | `./tailwind.css` | Tailwind CSS bridge | Stable additive | CSS-only Tailwind v4 theme/variant bridge. It maps Bronto tokens into Tailwind namespaces; it does not import component CSS. |
30
32
  | `./css` | `./css/core.css` | CSS source fan-out | Stable path | Bundler entrypoint for css/core.css. It preserves source @import boundaries and layer behavior. |
31
33
  | `./css/core.css` | `./css/core.css` | CSS source fan-out | Stable path | Source fan-out file for consumers that want the authored leaf graph through a bundler. |
32
34
  | `./css/tokens.css` | `./dist/css/tokens.css` | Bundled layered CSS leaf | Stable additive | Generated layered direct-import leaf. Also included in dist/bronto.css. |
@@ -47,6 +49,7 @@ semantic versioning contract for the surfaces listed here.
47
49
  | `./css/skins.css` | `./dist/css/skins.css` | Opt-in layered CSS leaf | Stable additive | Generated layered direct-import leaf. Opt-in and not included in dist/bronto.css. |
48
50
  | `./css/dataviz.css` | `./dist/css/dataviz.css` | Opt-in layered CSS leaf | Stable additive | Generated layered direct-import leaf. Opt-in and not included in dist/bronto.css. |
49
51
  | `./css/report.css` | `./dist/css/report.css` | Opt-in layered CSS leaf | Stable additive | Generated layered direct-import leaf. Opt-in and not included in dist/bronto.css. |
52
+ | `./css/figure.css` | `./dist/css/figure.css` | Opt-in layered CSS leaf | Stable additive | Generated layered direct-import leaf. Opt-in and not included in dist/bronto.css. |
50
53
  | `./css/annotations.css` | `./dist/css/annotations.css` | Opt-in layered CSS leaf | Stable additive | Generated layered direct-import leaf. Opt-in and not included in dist/bronto.css. |
51
54
  | `./css/legend.css` | `./dist/css/legend.css` | Opt-in layered CSS leaf | Stable additive | Generated layered direct-import leaf. Opt-in and not included in dist/bronto.css. |
52
55
  | `./css/marks.css` | `./dist/css/marks.css` | Opt-in layered CSS leaf | Stable additive | Generated layered direct-import leaf. Opt-in and not included in dist/bronto.css. |
@@ -55,6 +58,9 @@ semantic versioning contract for the surfaces listed here.
55
58
  | `./css/crosshair.css` | `./dist/css/crosshair.css` | Opt-in layered CSS leaf | Stable additive | Generated layered direct-import leaf. Opt-in and not included in dist/bronto.css. |
56
59
  | `./css/selection.css` | `./dist/css/selection.css` | Opt-in layered CSS leaf | Stable additive | Generated layered direct-import leaf. Opt-in and not included in dist/bronto.css. |
57
60
  | `./css/sources.css` | `./dist/css/sources.css` | Opt-in layered CSS leaf | Stable additive | Generated layered direct-import leaf. Opt-in and not included in dist/bronto.css. |
61
+ | `./css/interval.css` | `./dist/css/interval.css` | Opt-in layered CSS leaf | Stable additive | Generated layered direct-import leaf. Opt-in and not included in dist/bronto.css. |
62
+ | `./css/clamp.css` | `./dist/css/clamp.css` | Opt-in layered CSS leaf | Stable additive | Generated layered direct-import leaf. Opt-in and not included in dist/bronto.css. |
63
+ | `./css/highlights.css` | `./dist/css/highlights.css` | Opt-in layered CSS leaf | Stable additive | Generated layered direct-import leaf. Opt-in and not included in dist/bronto.css. |
58
64
  | `./css/diff.css` | `./dist/css/diff.css` | Opt-in layered CSS leaf | Stable additive | Generated layered direct-import leaf. Opt-in and not included in dist/bronto.css. |
59
65
  | `./css/code.css` | `./dist/css/code.css` | Opt-in layered CSS leaf | Stable additive | Generated layered direct-import leaf. Opt-in and not included in dist/bronto.css. |
60
66
  | `./css/spark.css` | `./dist/css/spark.css` | Opt-in layered CSS leaf | Stable additive | Generated layered direct-import leaf. Opt-in and not included in dist/bronto.css. |
@@ -69,6 +75,7 @@ semantic versioning contract for the surfaces listed here.
69
75
  | `./css/workbench.css` | `./dist/css/workbench.css` | Opt-in layered CSS leaf | Stable additive | Generated layered direct-import leaf. Opt-in and not included in dist/bronto.css. |
70
76
  | `./css/command.css` | `./dist/css/command.css` | Opt-in layered CSS leaf | Stable additive | Generated layered direct-import leaf. Opt-in and not included in dist/bronto.css. |
71
77
  | `./css/analytical.css` | `./dist/css/analytical.css` | Opt-in CSS roll-up | Stable additive | Generated layered roll-up of the analytical leaves. Not included in the default bundle. |
78
+ | `./css/report-kit.css` | `./dist/css/report-kit.css` | Opt-in CSS roll-up | Stable additive | Generated layered roll-up for complete static reports. Not included in the default bundle. |
72
79
  | `./css/unlayered/tokens.css` | `./css/tokens.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
73
80
  | `./css/unlayered/fonts.css` | `./css/fonts.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
74
81
  | `./css/unlayered/base.css` | `./css/base.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
@@ -87,6 +94,7 @@ semantic versioning contract for the surfaces listed here.
87
94
  | `./css/unlayered/skins.css` | `./css/skins.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
88
95
  | `./css/unlayered/dataviz.css` | `./css/dataviz.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
89
96
  | `./css/unlayered/report.css` | `./css/report.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
97
+ | `./css/unlayered/figure.css` | `./css/figure.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
90
98
  | `./css/unlayered/annotations.css` | `./css/annotations.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
91
99
  | `./css/unlayered/legend.css` | `./css/legend.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
92
100
  | `./css/unlayered/marks.css` | `./css/marks.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
@@ -95,6 +103,9 @@ semantic versioning contract for the surfaces listed here.
95
103
  | `./css/unlayered/crosshair.css` | `./css/crosshair.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
96
104
  | `./css/unlayered/selection.css` | `./css/selection.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
97
105
  | `./css/unlayered/sources.css` | `./css/sources.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
106
+ | `./css/unlayered/interval.css` | `./css/interval.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
107
+ | `./css/unlayered/clamp.css` | `./css/clamp.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
108
+ | `./css/unlayered/highlights.css` | `./css/highlights.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
98
109
  | `./css/unlayered/diff.css` | `./css/diff.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
99
110
  | `./css/unlayered/code.css` | `./css/code.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
100
111
  | `./css/unlayered/spark.css` | `./css/spark.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
@@ -113,8 +124,11 @@ semantic versioning contract for the surfaces listed here.
113
124
  | `./tokens.json` | `./tokens/index.json` | Machine-readable data | Stable additive | JSON package data for non-JS/tooling consumers. Shape is public unless the paired doc marks a field internal. |
114
125
  | `./tokens.dtcg.json` | `./tokens/tokens.dtcg.json` | Machine-readable data | Stable additive | JSON package data for non-JS/tooling consumers. Shape is public unless the paired doc marks a field internal. |
115
126
  | `./tokens/resolved.json` | `./tokens/resolved.json` | Machine-readable data | Stable additive | JSON package data for non-JS/tooling consumers. Shape is public unless the paired doc marks a field internal. |
127
+ | `./tokens/figma.variables.json` | `./tokens/figma.variables.json` | Machine-readable data | Stable additive | JSON package data for non-JS/tooling consumers. Shape is public unless the paired doc marks a field internal. |
116
128
  | `./shiki/nothing.json` | `./shiki/nothing.json` | Machine-readable data | Stable additive | JSON package data for non-JS/tooling consumers. Shape is public unless the paired doc marks a field internal. |
117
129
  | `./llms.txt` | `./llms.txt` | Agent entrypoint | Stable path | Plain-text orientation file shipped for offline agents and tooling. |
130
+ | `./MIGRATIONS.json` | `./MIGRATIONS.json` | Machine-readable data | Stable additive | JSON package data for non-JS/tooling consumers. Shape is public unless the paired doc marks a field internal. |
131
+ | `./schemas/report-claims.v1.schema.json` | `./schemas/report-claims.v1.schema.json` | Machine-readable data | Stable additive | JSON package data for non-JS/tooling consumers. Shape is public unless the paired doc marks a field internal. |
118
132
  | `./docs/architecture.md` | `./docs/architecture.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
119
133
  | `./docs/reference.md` | `./docs/reference.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
120
134
  | `./docs/theming.md` | `./docs/theming.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
@@ -129,6 +143,7 @@ semantic versioning contract for the surfaces listed here.
129
143
  | `./docs/mermaid.md` | `./docs/mermaid.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
130
144
  | `./docs/d2.md` | `./docs/d2.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
131
145
  | `./docs/vega.md` | `./docs/vega.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
146
+ | `./docs/figure.md` | `./docs/figure.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
132
147
  | `./docs/annotations.md` | `./docs/annotations.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
133
148
  | `./docs/legends.md` | `./docs/legends.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
134
149
  | `./docs/marks.md` | `./docs/marks.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
@@ -137,6 +152,9 @@ semantic versioning contract for the surfaces listed here.
137
152
  | `./docs/crosshair.md` | `./docs/crosshair.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
138
153
  | `./docs/selection.md` | `./docs/selection.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
139
154
  | `./docs/sources.md` | `./docs/sources.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
155
+ | `./docs/interval.md` | `./docs/interval.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
156
+ | `./docs/clamp.md` | `./docs/clamp.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
157
+ | `./docs/highlights.md` | `./docs/highlights.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
140
158
  | `./docs/diff.md` | `./docs/diff.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
141
159
  | `./docs/code.md` | `./docs/code.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
142
160
  | `./docs/spark.md` | `./docs/spark.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
@@ -150,6 +168,11 @@ semantic versioning contract for the surfaces listed here.
150
168
  | `./docs/generated.md` | `./docs/generated.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
151
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. |
152
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
+ | `./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/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
+ | `./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
+ | `./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. |
175
+ | `./docs/migrations/0.5-to-0.6.md` | `./docs/migrations/0.5-to-0.6.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
153
176
  | `./docs/adr/0001-color-system.md` | `./docs/adr/0001-color-system.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
154
177
  | `./docs/adr/0002-scope-and-2026-baseline.md` | `./docs/adr/0002-scope-and-2026-baseline.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
155
178
  | `./docs/adr/0003-theme-model.md` | `./docs/adr/0003-theme-model.md` | Shipped documentation | Stable path | Markdown documentation shipped in the tarball. Paths are public reading assets within a compatible minor. |
@@ -162,6 +185,8 @@ semantic versioning contract for the surfaces listed here.
162
185
  | `./react` | types: `./react/index.d.ts`<br>default: `./react/index.js` | Framework binding JS | Stable thin adapter | Optional peer wrapper over vanilla behaviors. It owns lifecycle hookup, not markup or component state. |
163
186
  | `./solid` | types: `./solid/index.d.ts`<br>default: `./solid/index.js` | Framework binding JS | Stable thin adapter | Optional peer wrapper over vanilla behaviors. It owns lifecycle hookup, not markup or component state. |
164
187
  | `./qwik` | types: `./qwik/index.d.ts`<br>default: `./qwik/index.js` | Framework binding JS | Stable thin adapter | Optional peer wrapper over vanilla behaviors. It owns lifecycle hookup, not markup or component state. |
188
+ | `./svelte` | types: `./svelte/index.d.ts`<br>default: `./svelte/index.js` | Framework binding JS | Stable thin adapter | Optional peer wrapper over vanilla behaviors. It owns lifecycle hookup, not markup or component state. |
189
+ | `./vue` | types: `./vue/index.d.ts`<br>default: `./vue/index.js` | Framework binding JS | Stable thin adapter | Optional peer wrapper over vanilla behaviors. It owns lifecycle hookup, not markup or component state. |
165
190
  | `./skins` | types: `./tokens/skins.d.ts`<br>default: `./tokens/skins.js` | Renderer/theme helper JS | Stable additive | ESM theme data/helpers for opt-in skins, chart palettes, and external renderers. |
166
191
  | `./charts` | types: `./tokens/charts.d.ts`<br>default: `./tokens/charts.js` | Renderer/theme helper JS | Stable additive | ESM theme data/helpers for opt-in skins, chart palettes, and external renderers. |
167
192
  | `./charts.json` | `./tokens/charts.json` | Machine-readable data | Stable additive | JSON package data for non-JS/tooling consumers. Shape is public unless the paired doc marks a field internal. |
@@ -183,16 +208,20 @@ always includes `package.json`, `README.md`, `LICENSE`, and
183
208
  | --- | --- | --- |
184
209
  | `css` | Source CSS directory | Public source leaves. Mostly hand-authored; generated exceptions are called out in the provenance table. |
185
210
  | `dist` | Generated CSS directory | Prebuilt layered bundle and leaves. Never hand-edit. |
211
+ | `tailwind.css` | Tailwind CSS bridge | CSS-only Tailwind v4 theme/variant bridge; hand-authored and not part of the default Bronto bundle. |
186
212
  | `fonts` | Vendored assets | Doto woff2 files plus OFL license. |
187
213
  | `tokens` | Mixed source/generated data | Token source plus generated JSON, declarations, and renderer theme data. |
188
214
  | `classes` | Mixed source/generated data | Class recipe source plus generated JSON/declarations/custom-data. |
189
215
  | `behaviors` | Authored public JS directory | ESM source shipped as-is; adjacent declarations/maps are generated. |
190
216
  | `glyphs` | Authored public JS directory | Glyph registry/renderers shipped as JS; declarations are generated. |
217
+ | `schemas` | Machine-readable schemas | Declarative JSON schemas for package-adjacent report/tooling contracts. |
191
218
  | `annotations` | Authored public JS directory | ESM source shipped as-is; adjacent declarations/maps are generated. |
192
219
  | `connectors` | Authored public JS directory | ESM source shipped as-is; adjacent declarations/maps are generated. |
193
220
  | `react` | Authored public JS directory | ESM source shipped as-is; adjacent declarations/maps are generated. |
194
221
  | `solid` | Authored public JS directory | ESM source shipped as-is; adjacent declarations/maps are generated. |
195
222
  | `qwik` | Authored public JS directory | ESM source shipped as-is; adjacent declarations/maps are generated. |
223
+ | `svelte` | Authored public JS directory | ESM source shipped as-is; adjacent declarations/maps are generated. |
224
+ | `vue` | Authored public JS directory | ESM source shipped as-is; adjacent declarations/maps are generated. |
196
225
  | `shiki` | Theme data | Shiki theme JSON on the governed palette. |
197
226
  | `llms.txt` | Agent entrypoint | Shipped plain-text orientation for offline LLM/agent consumers. |
198
227
  | `CHANGELOG.md` | Release record | Shipped historical release notes. |
@@ -211,6 +240,7 @@ always includes `package.json`, `README.md`, `LICENSE`, and
211
240
  | `docs/mermaid.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
212
241
  | `docs/d2.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
213
242
  | `docs/vega.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
243
+ | `docs/figure.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
214
244
  | `docs/annotations.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
215
245
  | `docs/legends.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
216
246
  | `docs/marks.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
@@ -219,6 +249,9 @@ always includes `package.json`, `README.md`, `LICENSE`, and
219
249
  | `docs/crosshair.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
220
250
  | `docs/selection.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
221
251
  | `docs/sources.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
252
+ | `docs/interval.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
253
+ | `docs/clamp.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
254
+ | `docs/highlights.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
222
255
  | `docs/diff.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
223
256
  | `docs/code.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
224
257
  | `docs/spark.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
@@ -232,6 +265,11 @@ always includes `package.json`, `README.md`, `LICENSE`, and
232
265
  | `docs/generated.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
233
266
  | `docs/workbench.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
234
267
  | `docs/command.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
268
+ | `docs/interop/tailwind.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
269
+ | `docs/migrations/0.2-to-0.3.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
270
+ | `docs/migrations/0.3-to-0.4.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
271
+ | `docs/migrations/0.4-to-0.5.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
272
+ | `docs/migrations/0.5-to-0.6.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
235
273
  | `docs/adr/0001-color-system.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
236
274
  | `docs/adr/0002-scope-and-2026-baseline.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
237
275
  | `docs/adr/0003-theme-model.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
@@ -244,15 +282,15 @@ result. The listed gates are part of `npm run check`.
244
282
 
245
283
  | Surface | Source of truth | Generated outputs | Generator | Gate | Note |
246
284
  | --- | --- | --- | --- | --- | --- |
247
- | 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. |
248
- | Token model | `tokens/index.js` | css/tokens.css; tokens/index.json; tokens/tokens.dtcg.json; tokens/resolved.json; tokens/index.d.ts | `npm run tokens:css:build; tokens:build; dtcg:build; resolved:build; dts:build` | check:fresh; check:contrast | Token names/roles are public. Resolved values are visual tuning before 1.0. |
285
+ | 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
+ | 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. |
249
287
  | 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. |
250
- | Authored CSS graph | `css/core.css plus css/*.css leaves` | dist/bronto.css; dist/css/*.css (40 layered outputs) | `npm run dist:build` | check:dist; check:exports | Default bundle and direct layered leaf imports are generated from authored CSS and size-gated. |
251
- | 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, not separately maintained. |
252
- | Glyph registry | `glyphs/glyphs.js` | glyphs/glyphs.d.ts | `npm run glyphs:build` | check:glyphs; npm test | Glyph names and render options are public. The registry stays sorted and type-covered. |
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; 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. |
289
+ | 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. |
290
+ | 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. |
253
291
  | 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. |
254
292
  | 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. |
255
- | 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. |
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; 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. |
256
294
  | 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. |
257
295
 
258
296
  ## Internal Paths
package/docs/reference.md CHANGED
@@ -9,7 +9,7 @@ rendering of every class is the kitchen-sink demo:
9
9
  **<https://ponchia.github.io/bronto-ui/>**. Theming knobs and the token
10
10
  contract: [docs/theming.md](theming.md).
11
11
 
12
- - 593 classes across 171 component groups
12
+ - 634 classes across 177 component groups
13
13
  - Import the typed registry: `import { cls, ui, cx } from '@ponchia/ui/classes'`
14
14
  - Validate markup as data (no JS/TS): `@ponchia/ui/classes.json` — the same
15
15
  vocabulary as language-neutral JSON (`groups`, `classes`, `states`,
@@ -348,6 +348,17 @@ each one matches a real selector in the stylesheet.
348
348
  | `cls.claimUnknown` | `ui-claim--unknown` | modifier |
349
349
  | `cls.claimUnsupported` | `ui-claim--unsupported` | modifier |
350
350
 
351
+ ### `.ui-clamp`
352
+
353
+ | Registry key | Class | Kind |
354
+ | --- | --- | --- |
355
+ | `cls.clamp` | `ui-clamp` | base |
356
+ | `cls.clampBody` | `ui-clamp__body` | part |
357
+ | `cls.clampControl` | `ui-clamp__control` | part |
358
+ | `cls.clampLess` | `ui-clamp__less` | part |
359
+ | `cls.clampMore` | `ui-clamp__more` | part |
360
+ | `cls.clampToggle` | `ui-clamp__toggle` | part |
361
+
351
362
  ### `.ui-cluster`
352
363
 
353
364
  | Registry key | Class | Kind |
@@ -616,6 +627,20 @@ each one matches a real selector in the stylesheet.
616
627
  | --- | --- | --- |
617
628
  | `cls.field` | `ui-field` | base |
618
629
 
630
+ ### `.ui-figure`
631
+
632
+ | Registry key | Class | Kind |
633
+ | --- | --- | --- |
634
+ | `cls.figure` | `ui-figure` | base |
635
+ | `cls.figureBody` | `ui-figure__body` | part |
636
+ | `cls.figureBodyKeyRight` | `ui-figure__body--key-right` | modifier |
637
+ | `cls.figureCaption` | `ui-figure__caption` | part |
638
+ | `cls.figureData` | `ui-figure__data` | part |
639
+ | `cls.figureKey` | `ui-figure__key` | part |
640
+ | `cls.figureMedia` | `ui-figure__media` | part |
641
+ | `cls.figureOverlay` | `ui-figure__overlay` | part |
642
+ | `cls.figureStage` | `ui-figure__stage` | part |
643
+
619
644
  ### `.ui-file`
620
645
 
621
646
  | Registry key | Class | Kind |
@@ -649,6 +674,12 @@ each one matches a real selector in the stylesheet.
649
674
  | --- | --- | --- |
650
675
  | `cls.halftone` | `ui-halftone` | base |
651
676
 
677
+ ### `.ui-highlights`
678
+
679
+ | Registry key | Class | Kind |
680
+ | --- | --- | --- |
681
+ | `cls.highlights` | `ui-highlights` | base |
682
+
652
683
  ### `.ui-hint`
653
684
 
654
685
  | Registry key | Class | Kind |
@@ -691,6 +722,36 @@ each one matches a real selector in the stylesheet.
691
722
  | `cls.inspectorBody` | `ui-inspector__body` | part |
692
723
  | `cls.inspectorHead` | `ui-inspector__head` | part |
693
724
 
725
+ ### `.ui-interval`
726
+
727
+ | Registry key | Class | Kind |
728
+ | --- | --- | --- |
729
+ | `cls.interval` | `ui-interval` | base |
730
+ | `cls.intervalBounds` | `ui-interval__bounds` | part |
731
+ | `cls.intervalLabel` | `ui-interval__label` | part |
732
+ | `cls.intervalPoint` | `ui-interval__point` | part |
733
+ | `cls.intervalRange` | `ui-interval__range` | part |
734
+ | `cls.intervalTrack` | `ui-interval__track` | part |
735
+
736
+ ### `.ui-job`
737
+
738
+ | Registry key | Class | Kind |
739
+ | --- | --- | --- |
740
+ | `cls.job` | `ui-job` | base |
741
+ | `cls.jobActions` | `ui-job__actions` | part |
742
+ | `cls.jobBar` | `ui-job__bar` | part |
743
+ | `cls.jobBody` | `ui-job__body` | part |
744
+ | `cls.jobHead` | `ui-job__head` | part |
745
+ | `cls.jobMeta` | `ui-job__meta` | part |
746
+ | `cls.jobProgress` | `ui-job__progress` | part |
747
+ | `cls.jobTitle` | `ui-job__title` | part |
748
+ | `cls.jobBlocked` | `ui-job--blocked` | modifier |
749
+ | `cls.jobCompact` | `ui-job--compact` | modifier |
750
+ | `cls.jobComplete` | `ui-job--complete` | modifier |
751
+ | `cls.jobFailed` | `ui-job--failed` | modifier |
752
+ | `cls.jobQueued` | `ui-job--queued` | modifier |
753
+ | `cls.jobRunning` | `ui-job--running` | modifier |
754
+
694
755
  ### `.ui-kbd`
695
756
 
696
757
  | Registry key | Class | Kind |
@@ -1189,6 +1250,16 @@ each one matches a real selector in the stylesheet.
1189
1250
  | --- | --- | --- |
1190
1251
  | `cls.spinner` | `ui-spinner` | base |
1191
1252
 
1253
+ ### `.ui-splitter`
1254
+
1255
+ | Registry key | Class | Kind |
1256
+ | --- | --- | --- |
1257
+ | `cls.splitter` | `ui-splitter` | base |
1258
+ | `cls.splitterHandle` | `ui-splitter__handle` | part |
1259
+ | `cls.splitterPane` | `ui-splitter__pane` | part |
1260
+ | `cls.splitterHorizontal` | `ui-splitter--horizontal` | modifier |
1261
+ | `cls.splitterVertical` | `ui-splitter--vertical` | modifier |
1262
+
1192
1263
  ### `.ui-spotlight`
1193
1264
 
1194
1265
  | Registry key | Class | Kind |
@@ -1517,9 +1588,11 @@ works in any framework without a binding layer:
1517
1588
  vocabulary onto a tone is application logic, not a framework class.
1518
1589
  - **Modal** — native `<dialog>` gets backdrop + top-layer + focus-trap
1519
1590
  free. For a controlled/portal modal, add `is-open`
1520
- (`ui.modal({ open: true })`) for the same skin/layout; the
1521
- backdrop, top-layer stacking AND focus-trap are then yours (`.is-open`
1522
- is a bare grid it does not float or stack on its own).
1591
+ (`ui.modal({ open: true })`) for the same skin/layout, mark the overlay
1592
+ `data-bronto-modal`, and run `initModal()` for the inert focus trap,
1593
+ focus-return, and Escape close signal. You still own the `is-open` state,
1594
+ backdrop, and top-layer stacking (`.is-open` is a bare grid — it does not
1595
+ float or stack on its own).
1523
1596
  - **Current page** — mark the active link with `aria-current="page"`; it is
1524
1597
  the programmatic cue the navs honour (`ui-sitenav`, `ui-app-nav`). The
1525
1598
  `.is-active` class is the visual-only equivalent on `ui-app-nav`/`ui-tab`;
@@ -1694,7 +1767,7 @@ Exact mirror of the `:root` blocks in `css/tokens.css`
1694
1767
  | `--text-dim` | `#a0a0a0` |
1695
1768
  | `--accent` | `#ff3b41` |
1696
1769
  | `--accent-ramp-end` | `#000000` |
1697
- | `--accent-strong` | `color-mix(in srgb, var(--accent) 84%, #fff)` |
1770
+ | `--accent-strong` | `color-mix(in srgb, var(--accent) 80%, #fff)` |
1698
1771
  | `--accent-text` | `var(--accent-strong)` |
1699
1772
  | `--on-accent` | `var(--button-text)` |
1700
1773
  | `--accent-soft` | `color-mix(in srgb, var(--accent) 14%, transparent)` |