@ponchia/ui 0.6.5 → 0.6.6
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 +71 -0
- package/README.md +10 -3
- package/css/report.css +28 -0
- package/dist/css/report.css +1 -1
- package/docs/frontier-primitives.md +32 -8
- package/docs/reference.md +1 -1
- package/docs/reporting.md +28 -7
- package/llms.txt +3 -3
- package/package.json +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,77 @@
|
|
|
5
5
|
|> `^0` / `*` wildcard does **not** protect you. See README → Versioning, and
|
|
6
6
|
|> the deprecation policy in CONTRIBUTING.md.
|
|
7
7
|
|
|
8
|
+
## 0.6.6 — 2026-06-10
|
|
9
|
+
|
|
10
|
+
Consolidation pass from the 2026-06-10 multi-agent audit: two real PDF-export
|
|
11
|
+
defects fixed and gated, the reporting hub routed to every shipped leaf, and
|
|
12
|
+
the drift-prone hand lists in the gates derived from registries. No breaking
|
|
13
|
+
changes, no `MIGRATIONS.json` entry.
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **Print overprint (the big one)** — Chromium-class print engines restart
|
|
18
|
+
grid tracks at each page break, printing new rows over the running content.
|
|
19
|
+
`css/report.css` `@media print` now demotes the vertical document-flow
|
|
20
|
+
wrappers (`.ui-report`, `__section`, `__figure`, `__actions`,
|
|
21
|
+
`.ui-evidence-ledger`) to block flow with margin-emulated gaps; the column
|
|
22
|
+
grids (`.ui-compare`, `.ui-meter__row`, `.ui-report__decision-item`,
|
|
23
|
+
`.ui-evidence-grid`) keep their tracks. Gated by a promoted multi-page
|
|
24
|
+
fixture (`test/e2e/_report-print.fixture.html`) whose PDF is parsed with
|
|
25
|
+
pdfjs-dist and asserted overlap-free (`test/e2e/report-print.spec.mjs`).
|
|
26
|
+
- **Silent module-figure drop in PDFs** — reports that render figures from
|
|
27
|
+
relative `<script type="module">` imports lose them over `file://` (CORS).
|
|
28
|
+
`scripts/render-pdf.mjs` gains `--serve` (loopback HTTP + the report's
|
|
29
|
+
`data-report-ready` signal), forwards page/console errors to stderr, and
|
|
30
|
+
warns when a module report is rendered over `file://`.
|
|
31
|
+
- **Demo class drift** — `demo/index.html` still used the renamed
|
|
32
|
+
`ui-inspector__header` (now `__head`), and `demo/version-history-report.html`
|
|
33
|
+
carried a never-registered cover-mark class; both were silent no-ops. The
|
|
34
|
+
generated reference's analytical-leaves note now names `ui-annotation`
|
|
35
|
+
(singular, the real class).
|
|
36
|
+
- `scripts/smoke-example.mjs` imports Chromium from `@playwright/test` (the
|
|
37
|
+
installed devDependency) instead of the hoisting-dependent bare
|
|
38
|
+
`playwright` specifier.
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- **Reporting hub routing** — `docs/reporting.md`'s analytical-toolbox table
|
|
43
|
+
now routes ALL report-relevant leaves (spark, bullet, diff, code, sidenote,
|
|
44
|
+
textref, term, glossary, contents rail, tree, dot surfaces) and states
|
|
45
|
+
precisely what `analytical.css` does and does not bundle. New convention in
|
|
46
|
+
CONTRIBUTING: a new report-relevant leaf ships in the same PR as its
|
|
47
|
+
routing row.
|
|
48
|
+
- **`npm run release:prep -- X.Y.Z`** — one-shot release prep: version + lock
|
|
49
|
+
bump, CHANGELOG heading dating, and re-pinning every `@ponchia/ui@X.Y.Z`
|
|
50
|
+
literal across the gated shipped docs AND the ungated `demo/*.html` pages
|
|
51
|
+
(which had already drifted a version behind).
|
|
52
|
+
- **Cross-engine e2e on merge-to-main** — pushes to `main` that touch
|
|
53
|
+
engine-sensitive surfaces (`css/`, `dist/`, `behaviors/`, `fonts/`,
|
|
54
|
+
`tokens/`, `test/e2e/`, the Playwright config) now run the firefox/webkit
|
|
55
|
+
pass too, instead of deferring it to the release tag.
|
|
56
|
+
- **`demo/dots.html`** — the dot data surfaces (waffle, activity, level,
|
|
57
|
+
dotgauge, readout, spark--dots, halftone, dotfit) get a specimen page,
|
|
58
|
+
axe/guard coverage in `demos.spec`, and render-geometry boundingBox
|
|
59
|
+
assertions (their only possible executable gate — they ship no JS).
|
|
60
|
+
- jsdom coverage for `initDisabledGuard` (activation blocking, Tab
|
|
61
|
+
pass-through, root scoping, cleanup).
|
|
62
|
+
|
|
63
|
+
### Changed
|
|
64
|
+
|
|
65
|
+
- `check:report` and `check:pack` derive their scan/entrypoint lists from
|
|
66
|
+
registries (`package.json` `files`/`exports` via `scripts/lib/css-leaves.mjs`
|
|
67
|
+
+ `lib/shipped-docs.mjs`) instead of hand lists that had drifted behind the
|
|
68
|
+
post-0.6.0 leaves. The broadened scan immediately caught the demo/reference
|
|
69
|
+
class defects above. `core.css` imports are now closed over an explicit
|
|
70
|
+
CORE_BUNDLE allowlist in both directions.
|
|
71
|
+
- `ROADMAP.md` / `docs/frontier-primitives.md` reconciled to 0.6.5: the
|
|
72
|
+
report/provenance/explanation lane is named the proven core; ui-job,
|
|
73
|
+
ui-conflict, ui-splitter, the tree roving-focus kernel, and
|
|
74
|
+
command/workbench follow-ons are explicitly dormant until a real app
|
|
75
|
+
consumer exists; the 2026-06-09 scout keeps (ui-interval, ui-clamp,
|
|
76
|
+
ui-highlights) are recorded as report-lane candidates gated behind the
|
|
77
|
+
routing hub. The adoption stance is stated in ROADMAP.
|
|
78
|
+
|
|
8
79
|
## 0.6.5 — 2026-06-09
|
|
9
80
|
|
|
10
81
|
Patch release: the source-backref behavior, the report decision/evidence
|
package/README.md
CHANGED
|
@@ -22,9 +22,16 @@ SVG annotations, legends, leader-line connectors, a guided-focus spotlight, text
|
|
|
22
22
|
marks, a colourblind-safe data-viz palette, and a static/PDF report grammar — for
|
|
23
23
|
dashboards and LLM-authored reports.
|
|
24
24
|
|
|
25
|
-
### [Live demo →](https://ponchia.github.io/bronto-ui/) · [Theme playground →](https://ponchia.github.io/bronto-ui/demo/theme-playground.html)
|
|
25
|
+
### [Live demo →](https://ponchia.github.io/bronto-ui/) · [Static report →](https://ponchia.github.io/bronto-ui/demo/report-standalone.html) · [Theme playground →](https://ponchia.github.io/bronto-ui/demo/theme-playground.html)
|
|
26
26
|
|
|
27
27
|
The demo is the kitchen sink — every component, light/dark, RTL, live theming.
|
|
28
|
+
The static report is the differentiator in one file: a complete, no-build,
|
|
29
|
+
no-JS, Chromium-PDF-ready report built from the report grammar.
|
|
30
|
+
|
|
31
|
+
<p>
|
|
32
|
+
<img alt="A research report built with the @ponchia/ui report layer" src="https://raw.githubusercontent.com/Ponchia/bronto-ui/main/demo/_preview-report-research.png" width="49%" />
|
|
33
|
+
<img alt="The same report grammar printed to PDF" src="https://raw.githubusercontent.com/Ponchia/bronto-ui/main/demo/_preview-report-print.png" width="49%" />
|
|
34
|
+
</p>
|
|
28
35
|
|
|
29
36
|
---
|
|
30
37
|
|
|
@@ -104,7 +111,7 @@ toast('Saved', { tone: 'success' }); // body-anchored stack, no markup needed
|
|
|
104
111
|
|
|
105
112
|
Behaviors cover theme persistence, disclosure, dropdown menus, native-`<dialog>` modals/drawers, tabs, combobox, form validation, table sort, carousel, source backrefs and toasts — wired by `data-bronto-*` attributes.
|
|
106
113
|
|
|
107
|
-
**5. (Optional) display glyphs — a
|
|
114
|
+
**5. (Optional) display glyphs — a 71-glyph dot-matrix icon set:**
|
|
108
115
|
|
|
109
116
|
```js
|
|
110
117
|
import { renderGlyph } from '@ponchia/ui/glyphs';
|
|
@@ -128,7 +135,7 @@ Arrows, chevrons, check/close/plus/minus, search/menu/gear, info/warning/bell/lo
|
|
|
128
135
|
- **Analytical & communication primitives** _(opt-in)_ — `@ponchia/ui/css/analytical.css`: SVG **annotations** (subject/connector/note), standalone **legends**/data-keys, text/evidence **marks**, leader-line **connectors** (+ a pure `@ponchia/ui/connectors` geometry kernel), a guided-focus **spotlight**, a **crosshair**/readout, and a cross-cutting **selection** vocabulary. Each owns its visual grammar + pure geometry and refuses scales/state/hit-testing — figures that explain themselves, not a chart engine. Plus standalone **`source`/provenance** (trust) and **lifecycle `state`** leaves.
|
|
129
136
|
- **Reports** _(opt-in)_ — `@ponchia/ui/css/report.css`, a static/PDF-first report grammar for LLM-authored HTML: covers, decisions, claims, sections, severity-labelled findings, evidence packets, evidence ledgers, action registers, source-card bindings, figures, chart wrappers and print utilities.
|
|
130
137
|
- **Motion & dots** — the dot-matrix motif kit: dot grid, status dots, dot loaders, the orbital spinner, matrix reveal — all reduced-motion aware.
|
|
131
|
-
- **Glyphs** — `@ponchia/ui/glyphs`, a
|
|
138
|
+
- **Glyphs** — `@ponchia/ui/glyphs`, a 71-glyph dot-matrix icon set on the `.ui-dotmatrix` primitive (display marks + crisp `solid` inline icons + one-node `.ui-icon` mask rendering).
|
|
132
139
|
- **Colorways** _(opt-in)_ — `data-bronto-skin="amber-crt | phosphor-green | e-ink"`: a root-level recolour of the one accent (OKLCH, per-theme, contrast-gated), never in the default bundle.
|
|
133
140
|
- **Data-viz** _(opt-in)_ — a colourblind-safe chart palette (`--chart-*` + dot-matrix pattern fills, resolved hex in `charts.json`), gated under simulated protan/deutan/tritan vision. Charts only, never UI chrome.
|
|
134
141
|
|
package/css/report.css
CHANGED
|
@@ -693,6 +693,33 @@
|
|
|
693
693
|
min-block-size: auto;
|
|
694
694
|
}
|
|
695
695
|
|
|
696
|
+
/* Chromium-class print engines overprint grid rows across page breaks
|
|
697
|
+
(fragmented grid tracks restart at the page top, on top of the running
|
|
698
|
+
content). Demote ONLY the vertical document-flow wrappers to block flow
|
|
699
|
+
and emulate their gap with margins; multi-column grids (.ui-compare,
|
|
700
|
+
.ui-meter__row, .ui-report__decision-item, .ui-evidence-grid, …) keep
|
|
701
|
+
grid — their content is break-inside-avoided as a unit instead. */
|
|
702
|
+
.ui-report,
|
|
703
|
+
.ui-report__section,
|
|
704
|
+
.ui-report__figure,
|
|
705
|
+
.ui-report__actions,
|
|
706
|
+
.ui-evidence-ledger {
|
|
707
|
+
display: block;
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
.ui-report > * + * {
|
|
711
|
+
margin-block-start: var(--report-gap);
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
.ui-report__section > * + * {
|
|
715
|
+
margin-block-start: var(--space-md);
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
.ui-report__figure > * + *,
|
|
719
|
+
.ui-evidence-ledger > * + * {
|
|
720
|
+
margin-block-start: var(--space-sm);
|
|
721
|
+
}
|
|
722
|
+
|
|
696
723
|
.ui-report__cover,
|
|
697
724
|
.ui-report__head,
|
|
698
725
|
.ui-report__decision,
|
|
@@ -700,6 +727,7 @@
|
|
|
700
727
|
.ui-report__finding,
|
|
701
728
|
.ui-report__evidence,
|
|
702
729
|
.ui-report__figure,
|
|
730
|
+
.ui-report__toc,
|
|
703
731
|
.ui-claim,
|
|
704
732
|
.ui-evidence-item,
|
|
705
733
|
.ui-report__action {
|
package/dist/css/report.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer bronto{.ui-report{--report-width: 72rem;--report-padding-block: var(--space-2xl);--report-gap: var(--space-lg);--report-measure: 74ch;color: var(--text-soft);display: grid;gap: var(--report-gap);inline-size: min(100%,var(--report-width));margin-inline: auto;padding: var(--report-padding-block) var(--space-md)}.ui-report--compact{--report-gap: var(--space-md);--report-padding-block: var(--space-xl)}.ui-report--numbered{counter-reset: report-section}.ui-report > *,.ui-report__cover > *,.ui-report__head > *,.ui-report__toc > *,.ui-report__summary > *,.ui-report__decision > *,.ui-report__finding > *,.ui-report__evidence > *,.ui-report__section > *,.ui-report__figure > *,.ui-claim > *,.ui-evidence-grid > *,.ui-evidence-ledger > *,.ui-compare > *,.ui-compare__col > *{min-inline-size: 0}.ui-report__cover{align-content: end;border-block-end: 1px solid var(--line);display: grid;gap: var(--space-md);min-block-size: min(62vh,34rem);padding-block-end: var(--space-xl)}.ui-report__cover--compact{min-block-size: auto;padding-block: var(--space-xl) var(--space-lg)}.ui-report__head{align-items: end;border-block-end: 1px solid var(--line);display: flex;flex-wrap: wrap;gap: var(--space-md);justify-content: space-between;padding-block-end: var(--space-md)}.ui-report__title{color: var(--text);font-family: var(--display);font-size: calc(var(--text-xl) * 1.35);font-weight: var(--display-weight-strong);letter-spacing: 0;line-height: 1.05;margin: 0;max-inline-size: var(--report-measure);text-transform: uppercase;text-wrap: balance}.ui-report__subtitle{color: var(--text-dim);font-size: var(--text-lg);line-height: 1.5;margin: 0;max-inline-size: var(--report-measure)}.ui-report__meta{align-items: center;color: var(--text-dim);display: flex;flex-wrap: wrap;font-family: var(--mono);font-size: var(--text-2xs);gap: 0.55rem;letter-spacing: 0;list-style: none;margin: 0;padding: 0;text-transform: uppercase}.ui-report__meta > *{align-items: center;display: inline-flex;gap: 0.55rem}.ui-report__meta > :not(:last-child)::after{background: var(--line-strong);border-radius: 50%;block-size: 0.22rem;content: '';inline-size: 0.22rem}.ui-report__toc{border: 1px solid var(--line);border-radius: var(--radius-md);display: grid;gap: var(--space-xs);padding: var(--space-md)}.ui-report__toc ol,.ui-report__toc ul{display: grid;gap: 0.35rem;margin: 0;padding-inline-start: var(--space-md)}.ui-report__toc a{color: var(--text);text-decoration: underline;text-decoration-color: color-mix(in srgb,var(--accent) 45%,transparent);text-underline-offset: 0.2rem}.ui-report__summary,.ui-report__finding,.ui-report__evidence{background: var(--panel);border: 1px solid var(--line);border-radius: var(--radius-md);display: grid;gap: var(--space-sm);padding: var(--space-md)}.ui-report__summary{border-inline-start: 2px solid var(--accent)}.ui-report__decision{background: var(--panel);border: 1px solid color-mix(in srgb,var(--accent) 40%,var(--line));border-inline-start: 3px solid var(--accent);border-radius: var(--radius-md);display: grid;gap: var(--space-sm);padding: var(--space-md)}.ui-report__decision-kicker{color: var(--accent-text);font-family: var(--mono);font-size: var(--text-2xs);letter-spacing: var(--tracking-wide);margin: 0;text-transform: uppercase}.ui-report__decision-title{color: var(--text);font-family: var(--display);font-size: var(--text-lg);font-weight: var(--display-weight);letter-spacing: 0;line-height: 1.18;margin: 0;text-transform: uppercase;text-wrap: balance}.ui-report__decision-body{color: var(--text-soft);line-height: 1.6;margin: 0;max-inline-size: var(--report-measure)}.ui-report__decision-meta{color: var(--text-dim);display: flex;flex-wrap: wrap;font-family: var(--mono);font-size: var(--text-2xs);gap: 0.45rem 0.75rem;letter-spacing: 0}.ui-report__decision-grid{border-block-start: 1px solid var(--line);display: grid;gap: 0}.ui-report__decision-item{align-items: start;border-block-end: 1px solid var(--line);display: grid;gap: var(--space-xs);grid-template-columns: minmax(8rem,14rem) minmax(0,1fr);padding-block: var(--space-xs)}.ui-report__decision-label,.ui-report__decision-value{margin: 0}.ui-report__decision-label{color: var(--text-dim);font-family: var(--mono);font-size: var(--text-2xs);letter-spacing: var(--tracking-wide);text-transform: uppercase}.ui-report__decision-value{color: var(--text-soft);line-height: 1.5}.ui-report__finding{--report-finding-tone: var(--line-strong);border-inline-start: 2px solid var(--report-finding-tone)}.ui-report__finding--critical{--report-finding-tone: var(--danger)}.ui-report__finding--major{--report-finding-tone: var(--warning)}.ui-report__finding--minor{--report-finding-tone: var(--info)}.ui-report__finding--resolved{--report-finding-tone: var(--success)}.ui-report__finding-title,.ui-report__finding-claim,.ui-report__finding-impact,.ui-report__finding-remediation,.ui-report__finding-evidence,.ui-report__finding-caveat{margin: 0}.ui-report__finding-title{color: var(--text);font-size: var(--text-md);font-weight: 650;line-height: 1.25}.ui-report__finding-claim{color: var(--text);line-height: 1.6}.ui-report__finding-impact,.ui-report__finding-remediation,.ui-report__finding-evidence{color: var(--text-soft);line-height: 1.55}.ui-report__finding-caveat{color: var(--text-dim);font-size: var(--text-sm);line-height: 1.55}.ui-claim{--claim-tone: var(--accent);background: var(--panel-soft);border: 1px solid var(--line);border-inline-start: 2px solid var(--claim-tone);border-radius: var(--radius-md);display: grid;gap: var(--space-xs);padding: var(--space-sm)}.ui-claim--supported{--claim-tone: var(--success)}.ui-claim--partial{--claim-tone: var(--warning)}.ui-claim--disputed,.ui-claim--unsupported{--claim-tone: var(--danger)}.ui-claim--unknown{--claim-tone: var(--info)}.ui-claim__statement,.ui-claim__status,.ui-claim__scope,.ui-claim__basis,.ui-claim__limits,.ui-claim__refs,.ui-claim__caveat{margin: 0}.ui-claim__statement{color: var(--text);font-weight: 650;line-height: 1.45}.ui-claim__status,.ui-claim__scope,.ui-claim__refs{color: var(--text-dim);font-family: var(--mono);font-size: var(--text-2xs);letter-spacing: 0;text-transform: uppercase}.ui-claim__basis,.ui-claim__limits,.ui-claim__caveat{color: var(--text-soft);font-size: var(--text-sm);line-height: 1.55}.ui-report__evidence{background: var(--panel-soft)}.ui-report__evidence:has(> .ui-table-wrap:only-child){padding: 0}.ui-report__evidence:has(> .ui-table-wrap:only-child) > .ui-table-wrap{border: 0;border-radius: var(--radius-md)}.ui-report__section{display: grid;gap: var(--space-md);scroll-margin-block-start: 6rem}.ui-report__section + .ui-report__section{border-block-start: 1px solid var(--line);padding-block-start: var(--space-xl)}.ui-report__section-head{color: var(--text);font-family: var(--display);font-size: var(--text-xl);font-weight: var(--display-weight);letter-spacing: 0;line-height: 1.1;margin: 0;text-transform: uppercase;text-wrap: balance}.ui-report--numbered .ui-report__section-head::before{color: var(--accent-text);content: counter(report-section,decimal-leading-zero) ' / ';counter-increment: report-section}.ui-report--numbered .ui-report__section--unnumbered > .ui-report__section-head::before{content: none;counter-increment: none}.ui-report__figure{display: grid;gap: var(--space-sm);margin: 0}.ui-report__caption{color: var(--text-dim);font-family: var(--mono);font-size: var(--text-2xs);letter-spacing: 0;line-height: 1.5;text-transform: uppercase}.ui-evidence-grid{display: grid;gap: var(--space-sm);grid-template-columns: repeat(auto-fit,minmax(min(100%,16rem),1fr))}.ui-evidence-item{background: var(--panel-soft);border: 1px solid var(--line);border-radius: var(--radius-md);display: grid;gap: 0.35rem;padding: var(--space-sm)}.ui-evidence-item__title{color: var(--text);font-size: var(--text-sm);font-weight: 600;margin: 0}.ui-evidence-item__meta{color: var(--text-dim);font-family: var(--mono);font-size: var(--text-2xs);letter-spacing: 0}.ui-evidence-item__body{color: var(--text-soft);font-size: var(--text-sm);line-height: 1.55;margin: 0}.ui-evidence-item__kind,.ui-evidence-item__method,.ui-evidence-item__window,.ui-evidence-item__value,.ui-evidence-item__source,.ui-evidence-item__caveat{margin: 0}.ui-evidence-item__kind,.ui-evidence-item__method,.ui-evidence-item__window,.ui-evidence-item__source{color: var(--text-dim);font-family: var(--mono);font-size: var(--text-2xs);letter-spacing: 0;text-transform: uppercase}.ui-evidence-item__value{color: var(--text);font-size: var(--text-md);font-weight: 650}.ui-evidence-item__caveat{color: var(--text-dim);font-size: var(--text-sm);line-height: 1.5}.ui-evidence-ledger{display: grid;gap: var(--space-sm)}.ui-report__actions{border-block-start: 1px solid var(--line);display: grid;gap: 0}.ui-report__action{align-items: start;border-block-end: 1px solid var(--line);display: grid;gap: var(--space-xs);grid-template-columns: minmax(0,1fr) auto;padding-block: var(--space-sm)}.ui-report__action-status{align-self: start;color: var(--text-dim);font-family: var(--mono);font-size: var(--text-2xs);letter-spacing: var(--tracking-wide);text-transform: uppercase}.ui-report__action-title,.ui-report__action-owner,.ui-report__action-due,.ui-report__action-priority,.ui-report__action-criteria,.ui-report__action-source{margin: 0}.ui-report__action-title{color: var(--text);font-weight: 650;line-height: 1.45}.ui-report__action-owner,.ui-report__action-due,.ui-report__action-priority,.ui-report__action-source{color: var(--text-dim);font-family: var(--mono);font-size: var(--text-2xs);letter-spacing: 0;text-transform: uppercase}.ui-report__action-criteria{color: var(--text-soft);font-size: var(--text-sm);line-height: 1.5}@media (max-width: 32rem){.ui-report__decision-item,.ui-report__action{grid-template-columns: 1fr}}.ui-report__sources,.ui-report__appendix,.ui-report__footnotes{border-block-start: 1px solid var(--line);color: var(--text-dim);display: grid;font-size: var(--text-sm);gap: var(--space-sm);padding-block-start: var(--space-md)}.ui-compare{display: grid;gap: var(--space-md);grid-template-columns: repeat(auto-fit,minmax(min(100%,16rem),1fr))}.ui-compare--2up{grid-template-columns: repeat(2,minmax(0,1fr))}@media (max-width: 33rem){.ui-compare--2up{grid-template-columns: 1fr}}.ui-compare__col{align-content: start;display: grid;gap: var(--space-sm)}.ui-compare__head{color: var(--text-dim);font-family: var(--mono);font-size: var(--text-2xs);letter-spacing: var(--tracking-wide);text-transform: uppercase}.ui-meter__row{align-items: center;display: grid;gap: var(--space-2xs) var(--space-md);grid-template-columns: minmax(9rem,14rem) 1fr auto;margin-block: var(--space-2xs)}.ui-meter__row .ui-meter{min-inline-size: 8rem}.ui-meter__label{color: var(--text-soft)}.ui-meter__value{color: var(--text);font-family: var(--mono);font-variant-numeric: tabular-nums;text-align: end}@media (max-width: 32rem){.ui-meter__row{grid-template-columns: 1fr}.ui-meter__value{text-align: start}}.ui-print-only{display: none !important}.ui-print-exact{-webkit-print-color-adjust: exact;print-color-adjust: exact}@media print{@page{margin: 18mm}.ui-report{--report-padding-block: 0;color-scheme: light;--text: #111;--text-soft: #2a2a2a;--text-dim: #555;--panel: #fff;--panel-soft: #f7f7f7;--line: #d9d9d9;--line-strong: #b3b3b3;inline-size: auto;padding: 0}.ui-report__cover{min-block-size: auto}.ui-report__cover,.ui-report__head,.ui-report__decision,.ui-report__summary,.ui-report__finding,.ui-report__evidence,.ui-report__figure,.ui-claim,.ui-evidence-item,.ui-report__action{break-inside: avoid}.ui-report__section-head{break-after: avoid}.ui-print-only{display: var(--print-display,block) !important}.ui-screen-only{display: none !important}.ui-break-before{break-before: page}.ui-break-after{break-after: page}.ui-keep{break-inside: avoid}}}
|
|
1
|
+
@layer bronto{.ui-report{--report-width: 72rem;--report-padding-block: var(--space-2xl);--report-gap: var(--space-lg);--report-measure: 74ch;color: var(--text-soft);display: grid;gap: var(--report-gap);inline-size: min(100%,var(--report-width));margin-inline: auto;padding: var(--report-padding-block) var(--space-md)}.ui-report--compact{--report-gap: var(--space-md);--report-padding-block: var(--space-xl)}.ui-report--numbered{counter-reset: report-section}.ui-report > *,.ui-report__cover > *,.ui-report__head > *,.ui-report__toc > *,.ui-report__summary > *,.ui-report__decision > *,.ui-report__finding > *,.ui-report__evidence > *,.ui-report__section > *,.ui-report__figure > *,.ui-claim > *,.ui-evidence-grid > *,.ui-evidence-ledger > *,.ui-compare > *,.ui-compare__col > *{min-inline-size: 0}.ui-report__cover{align-content: end;border-block-end: 1px solid var(--line);display: grid;gap: var(--space-md);min-block-size: min(62vh,34rem);padding-block-end: var(--space-xl)}.ui-report__cover--compact{min-block-size: auto;padding-block: var(--space-xl) var(--space-lg)}.ui-report__head{align-items: end;border-block-end: 1px solid var(--line);display: flex;flex-wrap: wrap;gap: var(--space-md);justify-content: space-between;padding-block-end: var(--space-md)}.ui-report__title{color: var(--text);font-family: var(--display);font-size: calc(var(--text-xl) * 1.35);font-weight: var(--display-weight-strong);letter-spacing: 0;line-height: 1.05;margin: 0;max-inline-size: var(--report-measure);text-transform: uppercase;text-wrap: balance}.ui-report__subtitle{color: var(--text-dim);font-size: var(--text-lg);line-height: 1.5;margin: 0;max-inline-size: var(--report-measure)}.ui-report__meta{align-items: center;color: var(--text-dim);display: flex;flex-wrap: wrap;font-family: var(--mono);font-size: var(--text-2xs);gap: 0.55rem;letter-spacing: 0;list-style: none;margin: 0;padding: 0;text-transform: uppercase}.ui-report__meta > *{align-items: center;display: inline-flex;gap: 0.55rem}.ui-report__meta > :not(:last-child)::after{background: var(--line-strong);border-radius: 50%;block-size: 0.22rem;content: '';inline-size: 0.22rem}.ui-report__toc{border: 1px solid var(--line);border-radius: var(--radius-md);display: grid;gap: var(--space-xs);padding: var(--space-md)}.ui-report__toc ol,.ui-report__toc ul{display: grid;gap: 0.35rem;margin: 0;padding-inline-start: var(--space-md)}.ui-report__toc a{color: var(--text);text-decoration: underline;text-decoration-color: color-mix(in srgb,var(--accent) 45%,transparent);text-underline-offset: 0.2rem}.ui-report__summary,.ui-report__finding,.ui-report__evidence{background: var(--panel);border: 1px solid var(--line);border-radius: var(--radius-md);display: grid;gap: var(--space-sm);padding: var(--space-md)}.ui-report__summary{border-inline-start: 2px solid var(--accent)}.ui-report__decision{background: var(--panel);border: 1px solid color-mix(in srgb,var(--accent) 40%,var(--line));border-inline-start: 3px solid var(--accent);border-radius: var(--radius-md);display: grid;gap: var(--space-sm);padding: var(--space-md)}.ui-report__decision-kicker{color: var(--accent-text);font-family: var(--mono);font-size: var(--text-2xs);letter-spacing: var(--tracking-wide);margin: 0;text-transform: uppercase}.ui-report__decision-title{color: var(--text);font-family: var(--display);font-size: var(--text-lg);font-weight: var(--display-weight);letter-spacing: 0;line-height: 1.18;margin: 0;text-transform: uppercase;text-wrap: balance}.ui-report__decision-body{color: var(--text-soft);line-height: 1.6;margin: 0;max-inline-size: var(--report-measure)}.ui-report__decision-meta{color: var(--text-dim);display: flex;flex-wrap: wrap;font-family: var(--mono);font-size: var(--text-2xs);gap: 0.45rem 0.75rem;letter-spacing: 0}.ui-report__decision-grid{border-block-start: 1px solid var(--line);display: grid;gap: 0}.ui-report__decision-item{align-items: start;border-block-end: 1px solid var(--line);display: grid;gap: var(--space-xs);grid-template-columns: minmax(8rem,14rem) minmax(0,1fr);padding-block: var(--space-xs)}.ui-report__decision-label,.ui-report__decision-value{margin: 0}.ui-report__decision-label{color: var(--text-dim);font-family: var(--mono);font-size: var(--text-2xs);letter-spacing: var(--tracking-wide);text-transform: uppercase}.ui-report__decision-value{color: var(--text-soft);line-height: 1.5}.ui-report__finding{--report-finding-tone: var(--line-strong);border-inline-start: 2px solid var(--report-finding-tone)}.ui-report__finding--critical{--report-finding-tone: var(--danger)}.ui-report__finding--major{--report-finding-tone: var(--warning)}.ui-report__finding--minor{--report-finding-tone: var(--info)}.ui-report__finding--resolved{--report-finding-tone: var(--success)}.ui-report__finding-title,.ui-report__finding-claim,.ui-report__finding-impact,.ui-report__finding-remediation,.ui-report__finding-evidence,.ui-report__finding-caveat{margin: 0}.ui-report__finding-title{color: var(--text);font-size: var(--text-md);font-weight: 650;line-height: 1.25}.ui-report__finding-claim{color: var(--text);line-height: 1.6}.ui-report__finding-impact,.ui-report__finding-remediation,.ui-report__finding-evidence{color: var(--text-soft);line-height: 1.55}.ui-report__finding-caveat{color: var(--text-dim);font-size: var(--text-sm);line-height: 1.55}.ui-claim{--claim-tone: var(--accent);background: var(--panel-soft);border: 1px solid var(--line);border-inline-start: 2px solid var(--claim-tone);border-radius: var(--radius-md);display: grid;gap: var(--space-xs);padding: var(--space-sm)}.ui-claim--supported{--claim-tone: var(--success)}.ui-claim--partial{--claim-tone: var(--warning)}.ui-claim--disputed,.ui-claim--unsupported{--claim-tone: var(--danger)}.ui-claim--unknown{--claim-tone: var(--info)}.ui-claim__statement,.ui-claim__status,.ui-claim__scope,.ui-claim__basis,.ui-claim__limits,.ui-claim__refs,.ui-claim__caveat{margin: 0}.ui-claim__statement{color: var(--text);font-weight: 650;line-height: 1.45}.ui-claim__status,.ui-claim__scope,.ui-claim__refs{color: var(--text-dim);font-family: var(--mono);font-size: var(--text-2xs);letter-spacing: 0;text-transform: uppercase}.ui-claim__basis,.ui-claim__limits,.ui-claim__caveat{color: var(--text-soft);font-size: var(--text-sm);line-height: 1.55}.ui-report__evidence{background: var(--panel-soft)}.ui-report__evidence:has(> .ui-table-wrap:only-child){padding: 0}.ui-report__evidence:has(> .ui-table-wrap:only-child) > .ui-table-wrap{border: 0;border-radius: var(--radius-md)}.ui-report__section{display: grid;gap: var(--space-md);scroll-margin-block-start: 6rem}.ui-report__section + .ui-report__section{border-block-start: 1px solid var(--line);padding-block-start: var(--space-xl)}.ui-report__section-head{color: var(--text);font-family: var(--display);font-size: var(--text-xl);font-weight: var(--display-weight);letter-spacing: 0;line-height: 1.1;margin: 0;text-transform: uppercase;text-wrap: balance}.ui-report--numbered .ui-report__section-head::before{color: var(--accent-text);content: counter(report-section,decimal-leading-zero) ' / ';counter-increment: report-section}.ui-report--numbered .ui-report__section--unnumbered > .ui-report__section-head::before{content: none;counter-increment: none}.ui-report__figure{display: grid;gap: var(--space-sm);margin: 0}.ui-report__caption{color: var(--text-dim);font-family: var(--mono);font-size: var(--text-2xs);letter-spacing: 0;line-height: 1.5;text-transform: uppercase}.ui-evidence-grid{display: grid;gap: var(--space-sm);grid-template-columns: repeat(auto-fit,minmax(min(100%,16rem),1fr))}.ui-evidence-item{background: var(--panel-soft);border: 1px solid var(--line);border-radius: var(--radius-md);display: grid;gap: 0.35rem;padding: var(--space-sm)}.ui-evidence-item__title{color: var(--text);font-size: var(--text-sm);font-weight: 600;margin: 0}.ui-evidence-item__meta{color: var(--text-dim);font-family: var(--mono);font-size: var(--text-2xs);letter-spacing: 0}.ui-evidence-item__body{color: var(--text-soft);font-size: var(--text-sm);line-height: 1.55;margin: 0}.ui-evidence-item__kind,.ui-evidence-item__method,.ui-evidence-item__window,.ui-evidence-item__value,.ui-evidence-item__source,.ui-evidence-item__caveat{margin: 0}.ui-evidence-item__kind,.ui-evidence-item__method,.ui-evidence-item__window,.ui-evidence-item__source{color: var(--text-dim);font-family: var(--mono);font-size: var(--text-2xs);letter-spacing: 0;text-transform: uppercase}.ui-evidence-item__value{color: var(--text);font-size: var(--text-md);font-weight: 650}.ui-evidence-item__caveat{color: var(--text-dim);font-size: var(--text-sm);line-height: 1.5}.ui-evidence-ledger{display: grid;gap: var(--space-sm)}.ui-report__actions{border-block-start: 1px solid var(--line);display: grid;gap: 0}.ui-report__action{align-items: start;border-block-end: 1px solid var(--line);display: grid;gap: var(--space-xs);grid-template-columns: minmax(0,1fr) auto;padding-block: var(--space-sm)}.ui-report__action-status{align-self: start;color: var(--text-dim);font-family: var(--mono);font-size: var(--text-2xs);letter-spacing: var(--tracking-wide);text-transform: uppercase}.ui-report__action-title,.ui-report__action-owner,.ui-report__action-due,.ui-report__action-priority,.ui-report__action-criteria,.ui-report__action-source{margin: 0}.ui-report__action-title{color: var(--text);font-weight: 650;line-height: 1.45}.ui-report__action-owner,.ui-report__action-due,.ui-report__action-priority,.ui-report__action-source{color: var(--text-dim);font-family: var(--mono);font-size: var(--text-2xs);letter-spacing: 0;text-transform: uppercase}.ui-report__action-criteria{color: var(--text-soft);font-size: var(--text-sm);line-height: 1.5}@media (max-width: 32rem){.ui-report__decision-item,.ui-report__action{grid-template-columns: 1fr}}.ui-report__sources,.ui-report__appendix,.ui-report__footnotes{border-block-start: 1px solid var(--line);color: var(--text-dim);display: grid;font-size: var(--text-sm);gap: var(--space-sm);padding-block-start: var(--space-md)}.ui-compare{display: grid;gap: var(--space-md);grid-template-columns: repeat(auto-fit,minmax(min(100%,16rem),1fr))}.ui-compare--2up{grid-template-columns: repeat(2,minmax(0,1fr))}@media (max-width: 33rem){.ui-compare--2up{grid-template-columns: 1fr}}.ui-compare__col{align-content: start;display: grid;gap: var(--space-sm)}.ui-compare__head{color: var(--text-dim);font-family: var(--mono);font-size: var(--text-2xs);letter-spacing: var(--tracking-wide);text-transform: uppercase}.ui-meter__row{align-items: center;display: grid;gap: var(--space-2xs) var(--space-md);grid-template-columns: minmax(9rem,14rem) 1fr auto;margin-block: var(--space-2xs)}.ui-meter__row .ui-meter{min-inline-size: 8rem}.ui-meter__label{color: var(--text-soft)}.ui-meter__value{color: var(--text);font-family: var(--mono);font-variant-numeric: tabular-nums;text-align: end}@media (max-width: 32rem){.ui-meter__row{grid-template-columns: 1fr}.ui-meter__value{text-align: start}}.ui-print-only{display: none !important}.ui-print-exact{-webkit-print-color-adjust: exact;print-color-adjust: exact}@media print{@page{margin: 18mm}.ui-report{--report-padding-block: 0;color-scheme: light;--text: #111;--text-soft: #2a2a2a;--text-dim: #555;--panel: #fff;--panel-soft: #f7f7f7;--line: #d9d9d9;--line-strong: #b3b3b3;inline-size: auto;padding: 0}.ui-report__cover{min-block-size: auto}.ui-report,.ui-report__section,.ui-report__figure,.ui-report__actions,.ui-evidence-ledger{display: block}.ui-report > * + *{margin-block-start: var(--report-gap)}.ui-report__section > * + *{margin-block-start: var(--space-md)}.ui-report__figure > * + *,.ui-evidence-ledger > * + *{margin-block-start: var(--space-sm)}.ui-report__cover,.ui-report__head,.ui-report__decision,.ui-report__summary,.ui-report__finding,.ui-report__evidence,.ui-report__figure,.ui-report__toc,.ui-claim,.ui-evidence-item,.ui-report__action{break-inside: avoid}.ui-report__section-head{break-after: avoid}.ui-print-only{display: var(--print-display,block) !important}.ui-screen-only{display: none !important}.ui-break-before{break-before: page}.ui-break-after{break-after: page}.ui-keep{break-inside: avoid}}}
|
|
@@ -226,14 +226,38 @@ precision signal the product does not have).
|
|
|
226
226
|
|
|
227
227
|
The CSS cores of candidates 1–5 shipped in 0.5.0, the 2026 scout batch shipped
|
|
228
228
|
in PRs #97/#100, and scout batch #2 (textref / bullet / term / toc / tree)
|
|
229
|
-
shipped 2026-06-04.
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
229
|
+
shipped 2026-06-04.
|
|
230
|
+
|
|
231
|
+
**The proven lane is report / provenance / explanation** — it is the only lane
|
|
232
|
+
with a real consumer (LLM-authored reports). The command, workbench, and
|
|
233
|
+
durable-state lanes shipped their CSS cores and have had **no non-demo
|
|
234
|
+
consumer since**; their follow-ons are demand-gated, not queued. Active work
|
|
235
|
+
is therefore consolidation of the report lane (hub routing, print/PDF
|
|
236
|
+
fidelity, consumer-contract gates), not new surfaces.
|
|
237
|
+
|
|
238
|
+
### Report-lane candidates (build only after the routing hub carries them)
|
|
239
|
+
|
|
240
|
+
From the 2026-06-09 local scout — kept on merit, deliberately NOT started
|
|
241
|
+
until the reporting.md routing/adoption pass has landed (shipping more leaves
|
|
242
|
+
into an unrouted hub repeats the discoverability gap):
|
|
243
|
+
|
|
244
|
+
1. `ui-interval` — honest low–high uncertainty span + ± chip, inline in
|
|
245
|
+
reports; the error-bar grammar generic kits never ship.
|
|
246
|
+
2. `ui-clamp` — N-line clamp + fade + native show-more for claim-basis and
|
|
247
|
+
source excerpts (`-webkit-line-clamp` + `mask-image` + `<details>`).
|
|
248
|
+
3. `ui-highlights` — cited-evidence / search-hit spans painted from host
|
|
249
|
+
Ranges via the CSS Custom Highlight API (progressive enhancement; clean
|
|
250
|
+
no-op below the floor).
|
|
251
|
+
|
|
252
|
+
### Dormant (build with the first real app consumer, not before)
|
|
253
|
+
|
|
254
|
+
- `ui-job` / `ui-conflict` lifecycle surfaces (candidate 2).
|
|
255
|
+
- `ui-splitter` ARIA window-splitter behavior + drag affordances
|
|
256
|
+
(candidate 4), which is also the gating consumer for `ui-tree`'s deferred
|
|
257
|
+
roving-focus tree kernel.
|
|
258
|
+
- Any command/workbench follow-ons beyond the shipped CSS cores.
|
|
259
|
+
|
|
260
|
+
Dormant items stay gated on a real consumer needing them. This posture keeps
|
|
237
261
|
Bronto differentiated while staying inside its core philosophy: small,
|
|
238
262
|
framework-agnostic primitives that make complex interfaces clearer.
|
|
239
263
|
|
package/docs/reference.md
CHANGED
|
@@ -1545,7 +1545,7 @@ works in any framework without a binding layer:
|
|
|
1545
1545
|
- **Opt-in component CSS** — a few classes are not in the core bundle and need
|
|
1546
1546
|
their leaf imported, or they render unstyled: `ui-property`/`ui-readout` →
|
|
1547
1547
|
`@ponchia/ui/css/workbench.css`; `ui-mark`/`ui-bracket-note` →
|
|
1548
|
-
`@ponchia/ui/css/marks.css`; the analytical leaves (`ui-
|
|
1548
|
+
`@ponchia/ui/css/marks.css`; the analytical leaves (`ui-annotation`,
|
|
1549
1549
|
`ui-crosshair`, `ui-spotlight`, …) → their matching leaf.
|
|
1550
1550
|
- **Loaders need their children** — `ui-dotspinner` requires exactly eight
|
|
1551
1551
|
`<i>` children, `ui-dotloader` three `<span>`, and a static `ui-dotbar`
|
package/docs/reporting.md
CHANGED
|
@@ -37,11 +37,11 @@ No install? Link the same files from a CDN. Pin the version — pre-1.0, breakin
|
|
|
37
37
|
changes ship in the minor (see [stability.md](./stability.md)):
|
|
38
38
|
|
|
39
39
|
```html
|
|
40
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.
|
|
41
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.
|
|
42
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.
|
|
43
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.
|
|
44
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.
|
|
40
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.6/dist/bronto.css" />
|
|
41
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.6/dist/css/report.css" />
|
|
42
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.6/dist/css/dataviz.css" />
|
|
43
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.6/dist/css/annotations.css" />
|
|
44
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.6/dist/css/legend.css" />
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
The CDN serves the package's own `fonts/` next to the CSS, so font URLs resolve
|
|
@@ -59,8 +59,11 @@ sanitize that content before rendering it and do not initialize
|
|
|
59
59
|
`css/report.css` gives you the document grammar (covers, sections, findings,
|
|
60
60
|
evidence). The _content_ inside those sections is where the rest of the
|
|
61
61
|
analytical layer earns its place. Each one is an opt-in import that stays out of
|
|
62
|
-
the default bundle — add the leaves a given report actually needs
|
|
63
|
-
|
|
62
|
+
the default bundle — add the leaves a given report actually needs.
|
|
63
|
+
`@ponchia/ui/css/analytical.css` is a convenience roll-up of the **seven
|
|
64
|
+
figure-layer leaves only** (annotations, legends, marks, connectors, spotlight,
|
|
65
|
+
crosshair, selection) — sources, generated, state, and the prose/evidence
|
|
66
|
+
leaves below are NOT in it and must be linked individually. Reach for:
|
|
64
67
|
|
|
65
68
|
| Layer | Import | Reach for it when… |
|
|
66
69
|
| --- | --- | --- |
|
|
@@ -72,6 +75,16 @@ whole set with `@ponchia/ui/css/analytical.css`. Reach for:
|
|
|
72
75
|
| **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). |
|
|
73
76
|
| **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). |
|
|
74
77
|
| **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). |
|
|
78
|
+
| **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). |
|
|
79
|
+
| **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). |
|
|
80
|
+
| **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). |
|
|
81
|
+
| **Code** (`.ui-code*`) | `css/code.css` | Code-as-evidence: fenced snippets with an optional gutter and add/remove/highlight line states, sharing diff's change vocabulary. On-brand syntax colours via the [Shiki theme](./code.md). See [code.md](./code.md). |
|
|
82
|
+
| **Sidenotes** (`.ui-sidenote`, `.ui-marginnote`) | `css/sidenote.css` | Evidence, caveats, and provenance asides that belong _beside_ the prose, Tufte-style, instead of interrupting it. See [sidenote.md](./sidenote.md). |
|
|
83
|
+
| **Textref** (`.ui-textref`) | `css/textref.css` | A citation should deep-link to the _exact quoted sentence_ (URL text fragments, on-brand `::target-text` paint) — the inline counterpart to the source-card layer. See [textref.md](./textref.md). |
|
|
84
|
+
| **Term / glossary** (`.ui-term`, `.ui-glossary`) | `css/term.css` | Jargon should explain itself inline (native popover definition) and gather into an end-of-report glossary. See [term.md](./term.md). |
|
|
85
|
+
| **Contents rail** (`.ui-toc*`) | `css/toc.css` | A long report needs a sticky table of contents with the in-view section highlighted; degrades to a plain anchored list with zero JS. Distinct from the in-flow `ui-report__toc` block. See [toc.md](./toc.md). |
|
|
86
|
+
| **Tree** (`.ui-tree*`) | `css/tree.css` | Nested structure — file trees, object graphs, nested provenance — as a depth-indented outline on native `<details>`. See [tree.md](./tree.md). |
|
|
87
|
+
| **Dot surfaces** (`.ui-waffle`, `.ui-activity`, `.ui-level`, `.ui-dotgauge`, `.ui-readout`, …) | _(in the core bundle)_ | A count, rate, level, or gauge wants the library's signature dot-matrix expression — waffle units, activity strips, dot gauges, readouts. See [dots.md](./dots.md). |
|
|
75
88
|
|
|
76
89
|
These compose with the report-native primitives already called out in
|
|
77
90
|
[Composition rules](#composition-rules): `ui-statgrid`, `ui-alert`, `ui-table`,
|
|
@@ -876,6 +889,14 @@ tooling.
|
|
|
876
889
|
(Puppeteer ships its own). The repo's `scripts/render-pdf.mjs` is a working
|
|
877
890
|
copy of this (`npm run report:pdf -- report.html`); it is a dev/example
|
|
878
891
|
helper, not part of the published API — bronto does not own rendering.
|
|
892
|
+
|
|
893
|
+
**If the report renders figures from `<script type="module">`, do not load
|
|
894
|
+
it over `file://`** — browsers block relative module imports from `file://`
|
|
895
|
+
(CORS, opaque `null` origin), so the figures silently render empty in the
|
|
896
|
+
PDF. Serve the report over HTTP first; `render-pdf.mjs --serve` does this
|
|
897
|
+
(loopback server + load over `http://127.0.0.1`), waits for the report's
|
|
898
|
+
`data-report-ready` signal if it sets one, and logs page errors instead of
|
|
899
|
+
swallowing them.
|
|
879
900
|
- **As a service / from another language:** run Chromium-as-a-service
|
|
880
901
|
(e.g. **Gotenberg**'s `POST /forms/chromium/convert/html`, or a hosted CDP
|
|
881
902
|
endpoint) and POST the HTML + the `dist/css/*` assets. A Python/Go/any host
|
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.6/dist/css/<leaf>.css" />
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
The flattened default bundle is `dist/bronto.css` (bundler shorthand
|
|
@@ -583,10 +583,10 @@ Canonical report skeleton:
|
|
|
583
583
|
<p class="ui-eyebrow">Report</p>
|
|
584
584
|
<h1 class="ui-report__title">System review</h1>
|
|
585
585
|
<p class="ui-report__subtitle">Static HTML, Chromium PDF-ready.</p>
|
|
586
|
-
<
|
|
586
|
+
<ul class="ui-report__meta">
|
|
587
587
|
<li>2026-06-01</li>
|
|
588
588
|
<li>Generated</li>
|
|
589
|
-
</
|
|
589
|
+
</ul>
|
|
590
590
|
</header>
|
|
591
591
|
<section class="ui-report__section">
|
|
592
592
|
<h2 class="ui-report__section-head">Executive summary</h2>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ponchia/ui",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "CSS-first design system for interfaces that explain themselves — works in HTML, every framework, and PDF, no component runtime. A standard component set plus an opt-in analytical & report layer (annotations, legends, connectors, data-viz, report grammar). Monochrome with one rationed accent, re-skinnable from one --accent knob. Zero runtime dependencies.",
|
|
6
6
|
"keywords": [
|
|
@@ -105,6 +105,7 @@
|
|
|
105
105
|
"check:format": "prettier --check .",
|
|
106
106
|
"size:report": "node scripts/size-report.mjs",
|
|
107
107
|
"report:pdf": "node scripts/render-pdf.mjs",
|
|
108
|
+
"release:prep": "node scripts/release-prep.mjs",
|
|
108
109
|
"emit:theme": "node scripts/emit-theme.mjs",
|
|
109
110
|
"emit:theme:check": "node scripts/emit-theme.mjs --check",
|
|
110
111
|
"gen": "npm run prepack",
|
|
@@ -165,6 +166,7 @@
|
|
|
165
166
|
"@builder.io/qwik": "^1.20.0",
|
|
166
167
|
"@playwright/test": "1.60.0",
|
|
167
168
|
"jsdom": "^29.1.1",
|
|
169
|
+
"pdfjs-dist": "^6.0.227",
|
|
168
170
|
"prettier": "^3.8.3",
|
|
169
171
|
"publint": "^0.3.21",
|
|
170
172
|
"react": "^19.2.7",
|