@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.
- package/CHANGELOG.md +175 -6
- package/README.md +38 -25
- package/annotations/index.d.ts.map +1 -1
- package/annotations/index.js +21 -3
- package/behaviors/carousel.d.ts.map +1 -1
- package/behaviors/carousel.js +91 -32
- package/behaviors/combobox.d.ts.map +1 -1
- package/behaviors/combobox.js +117 -43
- 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 +92 -9
- 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 +37 -16
- 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 +78 -5
- package/behaviors/glyph.d.ts.map +1 -1
- package/behaviors/glyph.js +17 -2
- package/behaviors/index.d.ts +2 -0
- package/behaviors/index.d.ts.map +1 -1
- package/behaviors/index.js +2 -0
- package/behaviors/inert.js +3 -2
- package/behaviors/internal.d.ts +2 -1
- package/behaviors/internal.d.ts.map +1 -1
- package/behaviors/internal.js +25 -4
- package/behaviors/legend.d.ts +0 -5
- package/behaviors/legend.d.ts.map +1 -1
- package/behaviors/legend.js +78 -14
- 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 +89 -9
- package/behaviors/sources.d.ts.map +1 -1
- package/behaviors/sources.js +14 -2
- package/behaviors/splitter.d.ts +26 -0
- package/behaviors/splitter.d.ts.map +1 -0
- package/behaviors/splitter.js +239 -0
- package/behaviors/spotlight.d.ts.map +1 -1
- package/behaviors/spotlight.js +28 -2
- package/behaviors/table.d.ts.map +1 -1
- package/behaviors/table.js +105 -13
- package/behaviors/tabs.d.ts.map +1 -1
- package/behaviors/tabs.js +82 -18
- package/behaviors/theme.d.ts.map +1 -1
- package/behaviors/theme.js +26 -6
- package/classes/classes.json +230 -4
- package/classes/index.d.ts +64 -3
- package/classes/index.js +56 -2
- package/classes/vscode.css-custom-data.json +1 -1
- package/connectors/index.d.ts +39 -6
- package/connectors/index.d.ts.map +1 -1
- package/connectors/index.js +67 -9
- package/css/analytical.css +3 -1
- package/css/annotations.css +12 -0
- package/css/app.css +4 -4
- package/css/clamp.css +92 -0
- package/css/crosshair.css +27 -2
- package/css/feedback.css +2 -30
- package/css/figure.css +102 -0
- package/css/highlights.css +50 -0
- package/css/interval.css +90 -0
- package/css/navigation.css +12 -0
- package/css/primitives.css +2 -3
- package/css/report-kit.css +38 -0
- package/css/report.css +23 -4
- package/css/sidenote.css +12 -2
- package/css/site.css +2 -1
- package/css/sources.css +5 -0
- package/css/state.css +120 -1
- package/css/table.css +4 -0
- package/css/tokens.css +25 -9
- package/css/workbench.css +101 -8
- package/dist/bronto.css +1 -1
- package/dist/css/analytical.css +1 -1
- package/dist/css/annotations.css +1 -1
- package/dist/css/app.css +1 -1
- package/dist/css/clamp.css +1 -0
- package/dist/css/crosshair.css +1 -1
- package/dist/css/feedback.css +1 -1
- package/dist/css/figure.css +1 -0
- package/dist/css/highlights.css +1 -0
- package/dist/css/interval.css +1 -0
- package/dist/css/navigation.css +1 -1
- package/dist/css/primitives.css +1 -1
- package/dist/css/report-kit.css +1 -0
- package/dist/css/report.css +1 -1
- package/dist/css/sidenote.css +1 -1
- package/dist/css/site.css +1 -1
- package/dist/css/sources.css +1 -1
- package/dist/css/state.css +1 -1
- package/dist/css/table.css +1 -1
- package/dist/css/tokens.css +1 -1
- package/dist/css/workbench.css +1 -1
- package/docs/adr/0001-color-system.md +3 -2
- package/docs/adr/0002-scope-and-2026-baseline.md +1 -1
- package/docs/annotations.md +12 -1
- package/docs/architecture.md +105 -48
- package/docs/clamp.md +49 -0
- package/docs/command.md +4 -1
- package/docs/connectors.md +16 -0
- package/docs/contrast.md +34 -24
- package/docs/crosshair.md +1 -1
- package/docs/d2.md +37 -0
- package/docs/dots.md +4 -1
- package/docs/figure.md +71 -0
- package/docs/frontier-primitives.md +25 -24
- package/docs/glyphs.md +11 -0
- package/docs/highlights.md +52 -0
- package/docs/interop/tailwind.md +148 -0
- package/docs/interval.md +55 -0
- package/docs/legends.md +3 -2
- package/docs/mermaid.md +6 -0
- package/docs/migrations/0.2-to-0.3.md +80 -0
- package/docs/migrations/0.3-to-0.4.md +48 -0
- package/docs/migrations/0.4-to-0.5.md +96 -0
- package/docs/migrations/0.5-to-0.6.md +82 -0
- package/docs/package-contract.md +44 -6
- package/docs/reference.md +78 -5
- package/docs/reporting.md +126 -60
- package/docs/sidenote.md +7 -1
- package/docs/sources.md +1 -1
- package/docs/stability.md +23 -5
- package/docs/state.md +67 -10
- package/docs/theming.md +12 -4
- package/docs/usage.md +47 -13
- package/docs/vega.md +4 -4
- package/docs/workbench.md +59 -18
- package/llms.txt +89 -16
- package/package.json +82 -6
- package/qwik/index.d.ts +1 -0
- package/qwik/index.d.ts.map +1 -1
- package/qwik/index.js +26 -21
- package/react/index.d.ts +1 -0
- package/react/index.d.ts.map +1 -1
- package/react/index.js +4 -1
- package/schemas/report-claims.v1.schema.json +137 -0
- package/solid/index.d.ts +2 -0
- package/solid/index.d.ts.map +1 -1
- package/solid/index.js +3 -0
- package/svelte/index.d.ts +114 -0
- package/svelte/index.d.ts.map +1 -0
- package/svelte/index.js +193 -0
- package/tailwind.css +87 -0
- package/tokens/figma.variables.json +2241 -0
- package/tokens/index.js +1 -1
- package/tokens/index.json +2 -2
- package/tokens/resolved.json +3 -3
- package/tokens/tokens.dtcg.json +1 -1
- package/vue/index.d.ts +116 -0
- package/vue/index.d.ts.map +1 -0
- package/vue/index.js +228 -0
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.
|
|
@@ -276,12 +284,14 @@ without it these widgets are unlabelled or unannounced:
|
|
|
276
284
|
- **`ui-skiplink`** — keep it the first focusable element and point its `href`
|
|
277
285
|
at the `id` of your main landmark.
|
|
278
286
|
|
|
279
|
-
## App shell: the
|
|
287
|
+
## App shell: the service frame
|
|
280
288
|
|
|
281
|
-
`ui-app-shell` is
|
|
282
|
-
column
|
|
283
|
-
|
|
284
|
-
|
|
289
|
+
`ui-app-shell` is the default cross-service identity frame: a CSS-only
|
|
290
|
+
two-column app shell (sidebar rail + main column) that collapses to a single
|
|
291
|
+
column with a horizontal rail below 880px — no behavior required. Use it for
|
|
292
|
+
ops tools, admin apps, internal services, generated dashboards, and any workflow
|
|
293
|
+
surface that should feel like part of the same system. The nesting matters; the
|
|
294
|
+
rail is `ui-app-rail` and the content side is `ui-app-main`:
|
|
285
295
|
|
|
286
296
|
```html
|
|
287
297
|
<div class="ui-app-shell">
|
|
@@ -290,7 +300,9 @@ content side is `ui-app-main`:
|
|
|
290
300
|
<nav class="ui-app-nav" aria-label="Primary">
|
|
291
301
|
<span class="ui-app-nav__section">Main</span>
|
|
292
302
|
<a href="/overview" aria-current="page">Overview</a>
|
|
293
|
-
<a href="/
|
|
303
|
+
<a href="/jobs">Jobs</a>
|
|
304
|
+
<a href="/integrations">Integrations</a>
|
|
305
|
+
<a href="/settings">Settings</a>
|
|
294
306
|
</nav>
|
|
295
307
|
<div class="ui-app-rail__account">…</div>
|
|
296
308
|
</aside>
|
|
@@ -310,6 +322,21 @@ Knobs: `--app-rail` sets the rail width (default 14rem); `ui-app-shell--full`
|
|
|
310
322
|
drops the rail for a single-column app. `ui-app-nav` honours `aria-current="page"`
|
|
311
323
|
(preferred) and the visual-only `.is-active`.
|
|
312
324
|
|
|
325
|
+
Service composition checklist:
|
|
326
|
+
|
|
327
|
+
- Start with `ui-app-shell`, `ui-app-rail`, `ui-app-nav`, `ui-app-main`,
|
|
328
|
+
`ui-app-topbar`, and `ui-app-content`.
|
|
329
|
+
- Put brand and account identity in the rail; do not rebuild that frame per app.
|
|
330
|
+
- Use `ui-app-toolbar` for filters/actions above a workflow surface.
|
|
331
|
+
- Use `ui-app-panel` for grouped operational sections, not nested cards.
|
|
332
|
+
- Use `ui-statgrid`/`ui-stat`, `ui-table`, `ui-field`, `ui-alert`, and
|
|
333
|
+
`ui-progress` inside panels; add opt-in `state.css` for `ui-state` lifecycle
|
|
334
|
+
labels.
|
|
335
|
+
- Keep nav current state on `aria-current="page"` so the visual cue and AT cue
|
|
336
|
+
match.
|
|
337
|
+
- Reach for opt-in `workbench.css` only when the service needs panes,
|
|
338
|
+
inspectors, or selected-object bulk actions.
|
|
339
|
+
|
|
313
340
|
## Menus: `data-bronto-menu` + `initMenu`
|
|
314
341
|
|
|
315
342
|
A dropdown menu is a native `<details data-bronto-menu>` styled as
|
|
@@ -570,7 +597,9 @@ one of these a screen reader announces nothing while the user waits.
|
|
|
570
597
|
carries the native `popover` attribute (never clipped by `overflow`/stacking);
|
|
571
598
|
without it, it falls back to an `is-open` class that a clipping ancestor can cut
|
|
572
599
|
off. Add `popover` to the panel for the robust path — the `is-open` form is a
|
|
573
|
-
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.
|
|
574
603
|
|
|
575
604
|
It is a **non-modal** dialog by design: the panel gets `role="dialog"` and focus
|
|
576
605
|
moves into it, but there is **no focus trap** and the rest of the page stays
|
|
@@ -591,7 +620,7 @@ HTML, print/PDF, and before any hydration:
|
|
|
591
620
|
|
|
592
621
|
| Component | How it works without JS |
|
|
593
622
|
| --- | --- |
|
|
594
|
-
| Tooltip (`ui-tooltip`) | `:hover` / `:focus-within`
|
|
623
|
+
| Tooltip (`ui-tooltip`) | `:hover` / `:focus-within` for short local labels |
|
|
595
624
|
| Accordion | native `<details>` / `<summary>` |
|
|
596
625
|
| Segmented control (`ui-segmented`) | `:has(input:checked)` over a radio group |
|
|
597
626
|
| Scroll-reveal (`ui-scroll-reveal`) | scroll-driven animation, zero JS |
|
|
@@ -603,20 +632,25 @@ These are JS widgets wearing the Bronto look; without the behavior they are iner
|
|
|
603
632
|
|
|
604
633
|
| Component | Behavior | With the behavior absent |
|
|
605
634
|
| --- | --- | --- |
|
|
635
|
+
| Disclosure trigger (`[data-bronto-disclosure]`) | `initDisclosure` | a button with stale `aria-expanded`; the controlled panel never toggles |
|
|
606
636
|
| Tabs (`ui-tabs`) | `initTabs` | **author panels visible** — ship `hidden` panels and if `initTabs` never runs the content is unreachable |
|
|
607
637
|
| Combobox (`ui-combobox`) | `initCombobox` | a plain text input beside an unfiltered list |
|
|
608
638
|
| Command palette (`ui-command`) | `initCommand` | a static, unfiltered list |
|
|
639
|
+
| Splitter (`ui-splitter`) | `initSplitter` | fixed panes at the authored `--splitter-pos`; no keyboard/pointer resize or `aria-valuenow` updates |
|
|
609
640
|
| Table sort/select (`[data-bronto-sortable]`) | `initTableSort` | a static table (still readable) |
|
|
610
641
|
| Popover (`ui-popover`) | `initPopover` | no placement/ARIA — prefer the native `popover` attribute |
|
|
611
642
|
| Carousel (`ui-carousel`) | `initCarousel` | a native scroll-snap track (usable, no controls) |
|
|
612
|
-
| Controlled modal (`ui-modal.is-open`) | `initModal` |
|
|
643
|
+
| Controlled modal (`ui-modal.is-open`) | `initModal` | open skin only — no inert trap, focus-return, or Escape close signal |
|
|
613
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 |
|
|
614
646
|
| Toast | `toast()` | nothing — it is imperative-only |
|
|
615
647
|
|
|
616
648
|
One cross-cutting guard, not tied to a single component:
|
|
617
649
|
|
|
618
650
|
| Concern | Behavior | With the behavior absent |
|
|
619
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` |
|
|
620
654
|
| `aria-disabled="true"` controls | `initDisabledGuard` | dimmed + pointer-inert via CSS, but still **keyboard**-activatable on Enter/Space (native `disabled` is already fully inert) |
|
|
621
655
|
|
|
622
656
|
Rule of thumb: if a component needs ARIA-state sync, focus management, a keyboard
|
|
@@ -628,10 +662,10 @@ boundary of what CSS alone cannot do.
|
|
|
628
662
|
The CSS is the framework; `@ponchia/ui/behaviors` is the *sanctioned*
|
|
629
663
|
home for the little JS that genuinely needs scripting (theme persistence,
|
|
630
664
|
disclosure, dialog glue, modal focus-trap, toast, combobox, form-validation,
|
|
631
|
-
table-sort). Reach for it instead of reimplementing — every
|
|
632
|
-
SSR-safe, idempotent, and returns a cleanup. If you find yourself
|
|
633
|
-
management or `aria-expanded` toggling by hand,
|
|
634
|
-
a behavior for it.
|
|
665
|
+
table-sort, splitter resizing). Reach for it instead of reimplementing — every
|
|
666
|
+
initializer is SSR-safe, idempotent, and returns a cleanup. If you find yourself
|
|
667
|
+
writing focus management, ARIA value sync, or `aria-expanded` toggling by hand,
|
|
668
|
+
there is probably already a behavior for it.
|
|
635
669
|
|
|
636
670
|
## Re-brand obligations (the short version)
|
|
637
671
|
|
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.
|
package/docs/workbench.md
CHANGED
|
@@ -1,29 +1,69 @@
|
|
|
1
|
-
# Workbench — inspector, properties, selection bar
|
|
1
|
+
# Workbench — split panes, inspector, properties, selection bar
|
|
2
2
|
|
|
3
3
|
`@ponchia/ui/css/workbench.css` is an opt-in set of primitives for **real
|
|
4
|
-
tools**: an inspector panel, property rows for a selected
|
|
5
|
-
actions on the current selection. Generic kits stop at
|
|
6
|
-
every app builds its own half-consistent workbench. This
|
|
7
|
-
core — layout and
|
|
4
|
+
tools**: resizable split panes, an inspector panel, property rows for a selected
|
|
5
|
+
object, and a bar of actions on the current selection. Generic kits stop at
|
|
6
|
+
cards/tables/forms, so every app builds its own half-consistent workbench. This
|
|
7
|
+
is the low-risk core — layout, resize affordance, and ARIA value sync.
|
|
8
8
|
|
|
9
9
|
```css
|
|
10
10
|
@import '@ponchia/ui';
|
|
11
11
|
@import '@ponchia/ui/css/workbench.css';
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
```js
|
|
15
|
+
import { initSplitter } from '@ponchia/ui/behaviors';
|
|
16
|
+
|
|
17
|
+
initSplitter();
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Not in the core bundle. Import the CSS leaf where the workbench appears and run
|
|
21
|
+
`initSplitter()` only if the page includes `[data-bronto-splitter]`.
|
|
22
|
+
|
|
23
|
+
## Splitter — `.ui-splitter`
|
|
24
|
+
|
|
25
|
+
Two panes separated by a focusable ARIA separator handle. The CSS owns the grid
|
|
26
|
+
tracks and handle affordance; `initSplitter()` owns keyboard/pointer resizing,
|
|
27
|
+
`--splitter-pos`, `aria-valuenow`, and the `bronto:splitter:resize` event. The
|
|
28
|
+
host owns pane content, persistence, saved layout state, collapse policy, and any
|
|
29
|
+
domain selection model.
|
|
30
|
+
|
|
31
|
+
```html
|
|
32
|
+
<div
|
|
33
|
+
class="ui-splitter ui-splitter--vertical"
|
|
34
|
+
data-bronto-splitter
|
|
35
|
+
style="--splitter-pos: 36%"
|
|
36
|
+
>
|
|
37
|
+
<section class="ui-splitter__pane" id="files" aria-label="Files">...</section>
|
|
38
|
+
<div
|
|
39
|
+
class="ui-splitter__handle"
|
|
40
|
+
role="separator"
|
|
41
|
+
tabindex="0"
|
|
42
|
+
aria-controls="files"
|
|
43
|
+
aria-label="Resize files pane"
|
|
44
|
+
aria-orientation="vertical"
|
|
45
|
+
aria-valuemin="20"
|
|
46
|
+
aria-valuemax="72"
|
|
47
|
+
aria-valuenow="36"
|
|
48
|
+
></div>
|
|
49
|
+
<section class="ui-splitter__pane" aria-label="Preview">...</section>
|
|
50
|
+
</div>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Use `.ui-splitter--horizontal` for top/bottom panes. Arrow keys change the value
|
|
54
|
+
by 2 percentage points, Shift+Arrow and PageUp/PageDown by 10, and Home/End jump
|
|
55
|
+
to `aria-valuemin` / `aria-valuemax`. The handle needs a real accessible name
|
|
56
|
+
and `aria-controls` pointing at the primary pane.
|
|
17
57
|
|
|
18
58
|
## Inspector — `.ui-inspector`
|
|
19
59
|
|
|
20
|
-
A panel of details for the selected object: a `
|
|
60
|
+
A panel of details for the selected object: a `__head` (title + actions) over
|
|
21
61
|
a `__body` of property rows.
|
|
22
62
|
|
|
23
63
|
```html
|
|
24
64
|
<aside class="ui-inspector">
|
|
25
65
|
<div class="ui-inspector__head">
|
|
26
|
-
<h2 class="ui-eyebrow">
|
|
66
|
+
<h2 class="ui-eyebrow">Sync job</h2>
|
|
27
67
|
<button class="ui-button ui-button--subtle ui-button--sm" type="button">Reset</button>
|
|
28
68
|
</div>
|
|
29
69
|
<div class="ui-inspector__body">
|
|
@@ -39,12 +79,12 @@ A label/value pair, denser than `ui-key-value` and tuned for an inspector. The
|
|
|
39
79
|
|
|
40
80
|
```html
|
|
41
81
|
<div class="ui-property">
|
|
42
|
-
<span class="ui-property__label">
|
|
43
|
-
<span class="ui-property__value">
|
|
82
|
+
<span class="ui-property__label">Owner</span>
|
|
83
|
+
<span class="ui-property__value">Platform</span>
|
|
44
84
|
</div>
|
|
45
85
|
<div class="ui-property">
|
|
46
|
-
<span class="ui-property__label">
|
|
47
|
-
<span class="ui-property__value"><input class="ui-input" value="
|
|
86
|
+
<span class="ui-property__label">Retries</span>
|
|
87
|
+
<span class="ui-property__value"><input class="ui-input" value="3" /></span>
|
|
48
88
|
</div>
|
|
49
89
|
```
|
|
50
90
|
|
|
@@ -72,7 +112,8 @@ A raised bar of actions on the current selection: a `__count` on one side,
|
|
|
72
112
|
|
|
73
113
|
## Scope
|
|
74
114
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
the selection bar with the cross-cutting [`ui-sel`](./selection.md) states
|
|
78
|
-
selected items themselves
|
|
115
|
+
No recipes — these are structural containers and rows; apply the classes
|
|
116
|
+
directly (or read them from `cls.splitter`, `cls.inspector`, `cls.property`, …).
|
|
117
|
+
Pair the selection bar with the cross-cutting [`ui-sel`](./selection.md) states
|
|
118
|
+
on the selected items themselves. Bronto styles both and wires the splitter
|
|
119
|
+
affordance; the host owns hit-testing, persistence, pane contents, and commands.
|
package/llms.txt
CHANGED
|
@@ -44,7 +44,7 @@ the path changes from source `css/` to built `dist/css/`:
|
|
|
44
44
|
<!-- installed locally -->
|
|
45
45
|
<link rel="stylesheet" href="./node_modules/@ponchia/ui/dist/css/<leaf>.css" />
|
|
46
46
|
<!-- or from a CDN; pin the version (pre-1.0, breaking changes ship in the minor) -->
|
|
47
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.
|
|
47
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.8/dist/css/<leaf>.css" />
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
The flattened default bundle is `dist/bronto.css` (bundler shorthand
|
|
@@ -84,13 +84,17 @@ matching `.ui-source-card`, seed lightweight preview metadata, and emit
|
|
|
84
84
|
`bronto:source:focus`; the host still owns numbering, fetching, trust decisions,
|
|
85
85
|
and any rich preview popover.
|
|
86
86
|
|
|
87
|
-
|
|
88
|
-
deps `react` / `solid-js` /
|
|
87
|
+
Optional lifecycle adapters wrap those behaviors without owning markup or state.
|
|
88
|
+
React/Solid/Qwik use hook bindings (peer deps `react` / `solid-js` /
|
|
89
|
+
`@builder.io/qwik`, optional — core stays zero-dep); Svelte uses dependency-free
|
|
90
|
+
actions, and Vue uses dependency-free directives/plugin helpers:
|
|
89
91
|
|
|
90
92
|
```js
|
|
91
93
|
import { useDialog, useToast } from '@ponchia/ui/react'; // or '@ponchia/ui/solid' or '@ponchia/ui/qwik'
|
|
92
94
|
// React: scope with { root: reactRef } or a resolver, not { root: ref.current } during render.
|
|
93
95
|
// Qwik: hooks run in useVisibleTask$; scope with a Qwik signal — useDialog({ root: useSignal() }).
|
|
96
|
+
// Svelte: import { dialog, toast } from '@ponchia/ui/svelte'.
|
|
97
|
+
// Vue: import { vDialog, useToast } from '@ponchia/ui/vue', or app.use(brontoVue).
|
|
94
98
|
```
|
|
95
99
|
|
|
96
100
|
Optional display glyphs — dot-matrix bitmaps on the `.ui-dotmatrix` primitive
|
|
@@ -213,10 +217,30 @@ simulated protan/deutan/tritan), `--chart-seq-*` (sequential), `--chart-div-*`
|
|
|
213
217
|
pattern N; colour is never the sole signal). Details in `docs/theming.md`.
|
|
214
218
|
|
|
215
219
|
Building analytical / generated-report UI? Import the roll-up
|
|
216
|
-
`@ponchia/ui/css/analytical.css` (bundles
|
|
217
|
-
connectors + spotlight + crosshair + selection) instead
|
|
218
|
-
add `css/dataviz.css` for chart colours and `css/report.css`
|
|
219
|
-
grammar.
|
|
220
|
+
`@ponchia/ui/css/analytical.css` (bundles figure + annotations + legend +
|
|
221
|
+
marks + connectors + spotlight + crosshair + selection + highlights) instead
|
|
222
|
+
of the nine leaves; add `css/dataviz.css` for chart colours and `css/report.css`
|
|
223
|
+
for the document grammar. Interval and clamp are report/evidence leaves but are
|
|
224
|
+
NOT in the roll-up; link them individually. The individual layers (each opt-in,
|
|
225
|
+
none in the default bundle):
|
|
226
|
+
|
|
227
|
+
Optional figure stage for charts, diagrams, screenshots, and annotated media —
|
|
228
|
+
opt-in, never in the default bundle. It composes with `ui-report__figure` but
|
|
229
|
+
does not replace it:
|
|
230
|
+
|
|
231
|
+
```html
|
|
232
|
+
<link rel="stylesheet" href="@ponchia/ui/css/figure.css" />
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Use `ui-figure` on the `<figure>`, `ui-figure__caption` on the caption,
|
|
236
|
+
`ui-figure__body` and optional `ui-figure__body--key-right` for stage + key
|
|
237
|
+
layout, `ui-figure__stage` for the centered media box, `ui-figure__media` for
|
|
238
|
+
the chart/SVG/img/canvas, `ui-figure__overlay` for pointer-transparent absolute
|
|
239
|
+
overlays, `ui-figure__key` for legends, and `ui-figure__data` for fallback
|
|
240
|
+
tables. Author-set knobs: `--figure-max-inline`, `--figure-min-block`,
|
|
241
|
+
`--figure-key-width`. Bronto owns layout only; the host owns data, scales,
|
|
242
|
+
chart rendering, overlay content, and accessibility text. Details:
|
|
243
|
+
`docs/figure.md`.
|
|
220
244
|
|
|
221
245
|
Optional SVG annotations for charts/reports — opt-in, never in the default
|
|
222
246
|
bundle. This is Bronto's subject / connector / note grammar inspired by
|
|
@@ -351,6 +375,20 @@ Apply `ui-sel` + `ui-sel--on` (selected), `ui-sel--off` (excluded), or
|
|
|
351
375
|
row, list item, map region) from YOUR selection/brush logic — Bronto only styles
|
|
352
376
|
them. `ui.sel({ state: 'on'|'off'|'maybe' })`. Details: `docs/selection.md`.
|
|
353
377
|
|
|
378
|
+
Optional Custom Highlight API paint — opt-in, CSS only, never in the default
|
|
379
|
+
bundle. For cited evidence, search hits, and current match ranges without
|
|
380
|
+
wrapping text nodes:
|
|
381
|
+
|
|
382
|
+
```html
|
|
383
|
+
<link rel="stylesheet" href="@ponchia/ui/css/highlights.css" />
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
Put `ui-highlights` on the text scope. The host creates `Range` objects and
|
|
387
|
+
registers `Highlight` sets as `CSS.highlights.set('bronto-evidence', ...)`,
|
|
388
|
+
`bronto-search`, and `bronto-current`; Bronto only paints them. Custom props:
|
|
389
|
+
`--highlight-evidence`, `--highlight-search`, `--highlight-current`. Always
|
|
390
|
+
check `CSS.highlights` before registering. Details: `docs/highlights.md`.
|
|
391
|
+
|
|
354
392
|
Optional source/citation/provenance trust layer — opt-in, CSS only, never in
|
|
355
393
|
the default bundle. The grammar for "where did this come from?" in generated
|
|
356
394
|
reports/AI output:
|
|
@@ -371,6 +409,32 @@ author-written label (never colour alone). A tone class **needs a host**:
|
|
|
371
409
|
states; the host owns fetching, numbering, and trust. `ui.citation({chip,state})` / `ui.source({state})` /
|
|
372
410
|
`ui.provenance({state})`. Details: `docs/sources.md`.
|
|
373
411
|
|
|
412
|
+
Optional low/high interval — opt-in, CSS only, never in the default bundle. For
|
|
413
|
+
confidence windows, estimates, budget bands, or caveated evidence readings:
|
|
414
|
+
|
|
415
|
+
```html
|
|
416
|
+
<link rel="stylesheet" href="@ponchia/ui/css/interval.css" />
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
Use `ui-interval` with host-normalised `--lo` and `--hi` (0..1), optional
|
|
420
|
+
`ui-interval__point` with `--v`, plus `ui-interval__track`,
|
|
421
|
+
`ui-interval__range`, `ui-interval__label`, and `ui-interval__bounds`.
|
|
422
|
+
The container needs host-written text (`role="img"` + `aria-label`, or nearby
|
|
423
|
+
visible prose). Bronto paints geometry only. Details: `docs/interval.md`.
|
|
424
|
+
|
|
425
|
+
Optional bounded excerpt clamp — opt-in, CSS only, never in the default bundle.
|
|
426
|
+
For source excerpts, claim basis, and caveats that should scan compactly but
|
|
427
|
+
remain reachable:
|
|
428
|
+
|
|
429
|
+
```html
|
|
430
|
+
<link rel="stylesheet" href="@ponchia/ui/css/clamp.css" />
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
Use `ui-clamp` with `--clamp-lines`, `ui-clamp__body`, and optionally a checkbox
|
|
434
|
+
`ui-clamp__toggle` followed by a visible `ui-clamp__control` containing explicit
|
|
435
|
+
`ui-clamp__more` / `ui-clamp__less` text. Host owns IDs and content. Print
|
|
436
|
+
expands the body and hides the control. Details: `docs/clamp.md`.
|
|
437
|
+
|
|
374
438
|
Optional line/row change-review grammar — opt-in, CSS only, never in the
|
|
375
439
|
default bundle. For code review, changelogs, version history, config diffs, and
|
|
376
440
|
generated reports:
|
|
@@ -558,7 +622,8 @@ behavior. Filter + keyboard-navigate a DOM-authored command list:
|
|
|
558
622
|
Enter→`bronto:command:select` ({value,label}) and Escape→`bronto:command:close`.
|
|
559
623
|
The HOST owns the action registry + execution; NO global Cmd/Ctrl+K (open it
|
|
560
624
|
yourself, e.g. a <dialog> via initDialog). Pairs with `ui-shortcut`. Binding:
|
|
561
|
-
`useCommand()` (
|
|
625
|
+
`useCommand()` (React/Solid/Qwik), `command` / `useCommand` (Svelte), and
|
|
626
|
+
`vCommand` / `brontoVue` (Vue). Details: `docs/command.md`.
|
|
562
627
|
|
|
563
628
|
Optional static report layer for LLM-authored HTML reports — opt-in, never in
|
|
564
629
|
the default bundle. Pair it with the normal bundle, and add data-viz only when
|
|
@@ -569,11 +634,13 @@ specifiers only work after a bundler rewrites them:
|
|
|
569
634
|
<link rel="stylesheet" href="./node_modules/@ponchia/ui/dist/bronto.css" />
|
|
570
635
|
<link rel="stylesheet" href="./node_modules/@ponchia/ui/dist/css/report.css" />
|
|
571
636
|
<link rel="stylesheet" href="./node_modules/@ponchia/ui/dist/css/dataviz.css" />
|
|
637
|
+
<link rel="stylesheet" href="./node_modules/@ponchia/ui/dist/css/figure.css" />
|
|
572
638
|
<link rel="stylesheet" href="./node_modules/@ponchia/ui/dist/css/sources.css" />
|
|
573
639
|
```
|
|
574
640
|
|
|
575
641
|
In Vite/webpack/etc., import `@ponchia/ui`, `@ponchia/ui/css/report.css`, and
|
|
576
|
-
`@ponchia/ui/css/dataviz.css` instead.
|
|
642
|
+
`@ponchia/ui/css/dataviz.css` instead; add `figure.css`, `interval.css`,
|
|
643
|
+
`clamp.css`, or `highlights.css` only when the report uses them.
|
|
577
644
|
|
|
578
645
|
Canonical report skeleton:
|
|
579
646
|
|
|
@@ -616,8 +683,9 @@ Report rules for agents:
|
|
|
616
683
|
- Use semantic headings; give tables captions and header cells; give charts
|
|
617
684
|
captions, legends/direct labels, and fallback data.
|
|
618
685
|
- For a chart, theme Vega-Lite with `@ponchia/ui/vega` or hand-author a
|
|
619
|
-
token-themed inline `<svg>` inside
|
|
620
|
-
|
|
686
|
+
token-themed inline `<svg>` inside `ui-report__figure ui-figure`, with a
|
|
687
|
+
`ui-figure__stage`, optional `ui-figure__key`, and fallback `ui-figure__data`.
|
|
688
|
+
Bronto ships no chart component.
|
|
621
689
|
- Put the above-the-fold call in `ui-report__decision`; use
|
|
622
690
|
`ui-report__finding--critical|--major|--minor|--resolved` only when the
|
|
623
691
|
written finding label also states the severity/status.
|
|
@@ -633,9 +701,12 @@ Report rules for agents:
|
|
|
633
701
|
conflicting, unverified, or generated inputs should be surfaced near affected
|
|
634
702
|
claims, not only in the source appendix.
|
|
635
703
|
- For important reports, emit a sidecar `claims.json` / source archive manifest
|
|
636
|
-
with
|
|
637
|
-
|
|
638
|
-
|
|
704
|
+
with `schemaVersion: "bronto-report-claims.v1"` and, when validating,
|
|
705
|
+
`@ponchia/ui/schemas/report-claims.v1.schema.json`. Include stable claim IDs,
|
|
706
|
+
source IDs, status, risk, retrieval time, and explicit `relations`
|
|
707
|
+
(`supports`, `limits`, `contradicts`, or `informs`). The visible HTML remains
|
|
708
|
+
the primary artifact, but the sidecar lets tools prove IDs and high-risk
|
|
709
|
+
evidence still resolve.
|
|
639
710
|
- Use `ui-delta` (`--up`/`--down`/`--flat`, `--invert` when up is bad) for a
|
|
640
711
|
trend figure and `ui-compare` (`--2up`) for an A/B / before-after section.
|
|
641
712
|
- Use `ui-report__section--unnumbered` for appendices in numbered reports.
|
|
@@ -676,6 +747,8 @@ Read these from `node_modules/@ponchia/ui/` — no network needed:
|
|
|
676
747
|
- `docs/reporting.md` — static/PDF-first report cookbook for LLM-authored
|
|
677
748
|
reports, including report skeletons, decision/finding/evidence patterns,
|
|
678
749
|
chart rules, print utilities, and safety boundaries.
|
|
750
|
+
- `schemas/report-claims.v1.schema.json` — declarative JSON Schema for
|
|
751
|
+
`claims.json` sidecars that map report claims to source IDs and relations.
|
|
679
752
|
- `docs/annotations.md` — SVG annotation recipes and helper guidance for
|
|
680
753
|
analytical figures.
|
|
681
754
|
- `docs/mermaid.md` — theme Mermaid diagrams from bronto tokens (resolved
|
|
@@ -705,11 +778,11 @@ Read these from `node_modules/@ponchia/ui/` — no network needed:
|
|
|
705
778
|
annotation geometry.
|
|
706
779
|
- `classes/vscode.css-custom-data.json` — editor autocomplete for tokens.
|
|
707
780
|
|
|
708
|
-
##
|
|
781
|
+
## External web references
|
|
709
782
|
|
|
710
783
|
- Live kitchen-sink demo (every component, light/dark, RTL): https://ponchia.github.io/bronto-ui/
|
|
711
784
|
- Architecture & the CSS-first decision: https://github.com/Ponchia/bronto-ui/blob/main/docs/architecture.md
|
|
712
|
-
- Framework integration guides (Astro / SvelteKit / React-Solid-Qwik / vanilla):
|
|
785
|
+
- Framework integration guides (Astro / SvelteKit / Vue / React-Solid-Qwik / vanilla):
|
|
713
786
|
https://github.com/Ponchia/bronto-ui/tree/main/docs/getting-started
|
|
714
787
|
|
|
715
788
|
## Rules an agent should respect
|