@ponchia/ui 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -49,6 +49,7 @@ semantic versioning contract for the surfaces listed here.
49
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. |
50
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. |
51
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/row.css` | `./dist/css/row.css` | Bundled layered CSS leaf | Stable additive | Generated layered direct-import leaf. Also included in dist/bronto.css. |
52
53
  | `./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. |
53
54
  | `./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. |
54
55
  | `./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. |
@@ -94,6 +95,7 @@ semantic versioning contract for the surfaces listed here.
94
95
  | `./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. |
95
96
  | `./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. |
96
97
  | `./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. |
98
+ | `./css/unlayered/row.css` | `./css/row.css` | Unlayered CSS leaf | Stable path | Raw authored CSS leaf for consumers that deliberately opt out of @layer bronto on that leaf. |
97
99
  | `./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. |
98
100
  | `./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. |
99
101
  | `./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. |
@@ -300,6 +302,7 @@ always includes `package.json`, `README.md`, `LICENSE`, and
300
302
  | `docs/migrations/0.5-to-0.6.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
301
303
  | `docs/migrations/0.6-to-0.7.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
302
304
  | `docs/migrations/0.7-to-0.8.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
305
+ | `docs/migrations/0.8-to-0.9.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
303
306
  | `docs/adr/0001-color-system.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
304
307
  | `docs/adr/0002-scope-and-2026-baseline.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
305
308
  | `docs/adr/0003-theme-model.md` | Shipped documentation | Curated Markdown reading asset shipped in the npm tarball. |
@@ -316,7 +319,7 @@ result. The listed gates are part of `npm run check`.
316
319
  | 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. |
317
320
  | 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. |
318
321
  | 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. |
319
- | 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. |
322
+ | Authored CSS graph | `css/core.css plus css/*.css leaves` | dist/bronto.css; dist/css/*.css (47 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. |
320
323
  | 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. |
321
324
  | 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. |
322
325
  | 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. |
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
- - 669 classes across 183 component groups
12
+ - 677 classes across 184 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`,
@@ -874,6 +874,8 @@ each one matches a real selector in the stylesheet.
874
874
  | `cls.menuItem` | `ui-menu__item` | part |
875
875
  | `cls.menuLabel` | `ui-menu__label` | part |
876
876
  | `cls.menuSep` | `ui-menu__sep` | part |
877
+ | `cls.menuAtPointer` | `ui-menu--at-pointer` | modifier |
878
+ | `cls.menuDropdown` | `ui-menu--dropdown` | modifier |
877
879
 
878
880
  ### `.ui-menu-host`
879
881
 
@@ -1117,6 +1119,17 @@ each one matches a real selector in the stylesheet.
1117
1119
  | --- | --- | --- |
1118
1120
  | `cls.reveal` | `ui-reveal` | base |
1119
1121
 
1122
+ ### `.ui-row`
1123
+
1124
+ | Registry key | Class | Kind |
1125
+ | --- | --- | --- |
1126
+ | `cls.row` | `ui-row` | base |
1127
+ | `cls.rowMark` | `ui-row__mark` | part |
1128
+ | `cls.rowMeta` | `ui-row__meta` | part |
1129
+ | `cls.rowTitle` | `ui-row__title` | part |
1130
+ | `cls.rowRuled` | `ui-row--ruled` | modifier |
1131
+ | `cls.rowStacked` | `ui-row--stacked` | modifier |
1132
+
1120
1133
  ### `.ui-screen-only`
1121
1134
 
1122
1135
  | Registry key | Class | Kind |
package/docs/reporting.md CHANGED
@@ -54,18 +54,18 @@ No install? Link the same files from a CDN. Pin the version — pre-1.0, breakin
54
54
  changes ship in the minor (see [stability.md](./stability.md)):
55
55
 
56
56
  ```html
57
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.8.1/dist/bronto.css" />
58
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.8.1/dist/css/report-kit.css" />
57
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.9.0/dist/bronto.css" />
58
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.9.0/dist/css/report-kit.css" />
59
59
  ```
60
60
 
61
61
  Leaf-by-leaf CDN imports use the same `dist/css/` paths:
62
62
 
63
63
  ```html
64
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.8.1/dist/bronto.css" />
65
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.8.1/dist/css/report.css" />
66
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.8.1/dist/css/dataviz.css" />
67
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.8.1/dist/css/annotations.css" />
68
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.8.1/dist/css/legend.css" />
64
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.9.0/dist/bronto.css" />
65
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.9.0/dist/css/report.css" />
66
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.9.0/dist/css/dataviz.css" />
67
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.9.0/dist/css/annotations.css" />
68
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.9.0/dist/css/legend.css" />
69
69
  ```
70
70
 
71
71
  The CDN serves the package's own `fonts/` next to the CSS, so font URLs resolve
@@ -879,7 +879,7 @@ or validation runtime.
879
879
 
880
880
  ```json
881
881
  {
882
- "$schema": "https://cdn.jsdelivr.net/npm/@ponchia/ui@0.8.1/schemas/report-claims.v1.schema.json",
882
+ "$schema": "https://cdn.jsdelivr.net/npm/@ponchia/ui@0.9.0/schemas/report-claims.v1.schema.json",
883
883
  "schemaVersion": "bronto-report-claims.v1",
884
884
  "report": { "title": "Decision readiness", "type": "decision" },
885
885
  "claims": [
package/docs/stability.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Public API stability
2
2
 
3
3
  `@ponchia/ui` is pre-1.0. Breaking changes ship in the minor (`0.x.0`), and
4
- patches are non-breaking. In practical terms: **PATCH releases (`0.8.x`) are
4
+ patches are non-breaking. In practical terms: **PATCH releases (`0.9.x`) are
5
5
  non-breaking bug-fixes and additive changes — safe to upgrade without review;
6
6
  MINOR releases (`0.x.0`) may include breaking changes and consumers should
7
7
  review the CHANGELOG before upgrading.** Pin `~0.x` (tilde) to accept only
@@ -140,6 +140,7 @@ current public-surface matrix and the release policy above still applies.
140
140
  | Connectors (`@ponchia/ui/connectors`, `css/connectors.css`, `.ui-connector*`, `initConnectors`) | Stable additive | Connector class names, the `data-bronto-connector` attribute contract, geometry helper function names, and recipe options are public. Helper internals/heuristics may tune before 1.0. Opt-in, not in the default bundle. |
141
141
  | Spotlight (`css/spotlight.css`, `.ui-spotlight*`, `.ui-tour-note*`, `initSpotlight`) | Stable additive | Spotlight/tour-note class names, the `--spot-*` custom-property contract, and the `data-bronto-spotlight`/`data-target` attributes are public. Opt-in, not in the default bundle. Not a tour engine. |
142
142
  | Crosshair (`css/crosshair.css`, `.ui-crosshair*`, `.ui-readout`, `initCrosshair`) | Stable additive | Crosshair/readout class names, the `--crosshair-x/y` properties, the `data-bronto-crosshair` attribute, and the `bronto:crosshair:move`/`:leave` event contract are public. Opt-in. Reports pointer position only — no data mapping. |
143
+ | Rows (`css/row.css`, `.ui-row*`) | Stable additive | Class names, the `__title` / `__meta` / `__mark` parts, the `--stacked` / `--ruled` modifiers, and the selection contract are public: `aria-selected`, `aria-current` and `.is-selected` all paint the selected state, so the visual state cannot disagree with the announced one. `__title` is the part that truncates and `__meta` is the part that does not — that asymmetry is the contract, not a detail. **In the default bundle**, unusually for a new surface: `.ui-menu__item` composes it, so a core component depends on it. Also exported standalone, which is why it appears here, but it is NOT opt-in. |
143
144
  | Selection states (`css/selection.css`, `.ui-sel*`) | Stable additive | The `.ui-sel`/`--on`/`--off`/`--maybe` emphasis classes and recipe options are public. Opt-in, cross-cutting. The host owns selection logic; Bronto only styles the states. |
144
145
  | Analytical roll-up (`css/analytical.css`) | Stable additive | A convenience `@import` of the nine analytical leaves (figure, annotations, legend, marks, connectors, spotlight, crosshair, selection, highlights). The set of leaves it bundles may grow additively; each leaf also stays individually exported. Opt-in, not in the default bundle. |
145
146
  | Sources / provenance (`css/sources.css`, `.ui-citation*`, `.ui-source-card*`, `.ui-source-list*`, `.ui-provenance*`, `.ui-src--*`, `initSources`) | Stable additive | Citation/source/provenance class names, the cross-cutting `.ui-src--*` trust-state modifiers (always paired with an author label), the optional `data-bronto-sources` / `data-bronto-source-ref` behavior contract, `bronto:source:focus`, and the `ui.citation`/`ui.source`/`ui.provenance` recipes + `cls.sourceList` are public. Opt-in, not in the default bundle. |
package/docs/theming.md CHANGED
@@ -130,6 +130,22 @@ you change CSS `--accent` later.
130
130
  - **Spacing** — override the `--space-2xs … --space-2xl` scale, or use a
131
131
  preset: `data-density="compact"` / `data-density="comfortable"` on any
132
132
  element (defaults to the middle scale).
133
+
134
+ **Read this before relying on the preset.** It re-points the `--space-*`
135
+ scale, and only components whose padding is *expressed in that scale* move
136
+ with it — around 40 of them, including `ui-panel`, `ui-modal__body`,
137
+ `ui-evidence-item`, `ui-claim`, `ui-job`, `ui-code__body` and the report
138
+ surfaces. The rest carry tuned padding pairs like `0.5rem 0.55rem`, which the
139
+ seven-step scale cannot express, so **they do not respond at all** —
140
+ `ui-alert` and `ui-menu__item` are the two most likely to surprise you.
141
+
142
+ That is a real limit, not an oversight to work around: flattening a tuned pair
143
+ onto the nearest scale step would change how those components look at the
144
+ default density, which is the one nearly everyone uses. If you need a denser
145
+ variant of a component that does not respond, override its padding directly —
146
+ and if you find yourself doing that repeatedly for the same component, that is
147
+ worth reporting, because it is evidence for a real `--dense` modifier rather
148
+ than a preset that half-works.
133
149
  - **Dark surface** — the dark theme's base is a deliberately *elevated*
134
150
  near-black (`--bg: #121212`) for readability: pure black + bright text
135
151
  causes halation, and near-black-on-black surface steps are imperceptible.
package/docs/usage.md CHANGED
@@ -186,6 +186,48 @@ a `.ui-legend` key, and fallback data. Full LLM/static report cookbook:
186
186
  spinner is CSS. This is the ARIA-driven contract — see reference.md
187
187
  → "Composition & state".
188
188
 
189
+ ## Rows: `ui-row` vs table vs menu item
190
+
191
+ Three shapes look alike and are not interchangeable:
192
+
193
+ - **`ui-table`** when the data has columns and a header. A table promises that
194
+ the third cell means the same thing on every line.
195
+ - **`ui-menu__item`** when the list is a menu: it dismisses on choice, and it is
196
+ reached through `ui-menu-host`.
197
+ - **`ui-row`** for everything else — a search result, a file in an explorer, an
198
+ outline entry, a backlink, a commit. A full-width clickable line that
199
+ *persists*.
200
+
201
+ ```html
202
+ <button class="ui-row ui-row--ruled" type="button" aria-current="true">
203
+ <span class="ui-row__mark" aria-hidden="true">◆</span>
204
+ <span class="ui-row__title">apps/server/src/collab/room.ts</span>
205
+ <span class="ui-row__meta">4m</span>
206
+ </button>
207
+ ```
208
+
209
+ The one rule worth knowing: **`__title` is what truncates.** It takes the slack
210
+ and gives it back first; `__meta` never shrinks, because a half-rendered number
211
+ is worse than no number.
212
+
213
+ **Pick the right attribute, and it is probably not `aria-selected`.** That one
214
+ is only valid on a row whose role accepts it — `option` inside a `listbox`, or
215
+ `row` / `tab` / `gridcell` / `treeitem`. On a bare `<button>` it is invalid ARIA
216
+ and axe rates it *critical*; this project shipped that mistake in its own demo
217
+ and the a11y gate caught it before release.
218
+
219
+ - `aria-current="true"` — the row is the current one. The common case, and valid
220
+ on any element.
221
+ - `aria-selected="true"` — only when the row really is an `option` in a
222
+ `listbox`, or another role that accepts it.
223
+ - `.is-selected` — when neither fits.
224
+
225
+ All three paint the same, so the visual state cannot disagree with the announced
226
+ one. Rows carrying a severity should use `ui-severity-row` (`css/state.css`)
227
+ instead, which adds the tone gutter.
228
+
229
+ `ui-menu__item` composes `ui-row`, which is why they cannot drift.
230
+
189
231
  ## Empty state vs invite
190
232
 
191
233
  Both use `ui-empty-state`, and the slots are the same three parts — a quiet
package/llms.txt CHANGED
@@ -45,7 +45,7 @@ the path changes from source `css/` to built `dist/css/`:
45
45
  <!-- installed locally -->
46
46
  <link rel="stylesheet" href="./node_modules/@ponchia/ui/dist/css/<leaf>.css" />
47
47
  <!-- or from a CDN; pin the version (pre-1.0, breaking changes ship in the minor) -->
48
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.8.1/dist/css/<leaf>.css" />
48
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.9.0/dist/css/<leaf>.css" />
49
49
  ```
50
50
 
51
51
  The flattened default bundle is `dist/bronto.css` (bundler shorthand
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@ponchia/ui",
3
- "version": "0.8.1",
3
+ "version": "0.9.0",
4
4
  "type": "module",
5
- "description": "CSS-first identity and UI layer for services, tools, sites, and reports works in HTML, every framework, and PDF, no component runtime. Shared app shell, forms, tables, workflow chrome, plus opt-in analytical/report primitives. Monochrome with one rationed accent. Zero runtime dependencies.",
5
+ "description": "CSS-first identity and UI layer for services, tools, sites, and reports \u2014 works in HTML, every framework, and PDF, no component runtime. Shared app shell, forms, tables, workflow chrome, plus opt-in analytical/report primitives. Monochrome with one rationed accent. Zero runtime dependencies.",
6
6
  "keywords": [
7
7
  "css",
8
8
  "ui",
@@ -114,6 +114,7 @@
114
114
  "docs/migrations/0.5-to-0.6.md",
115
115
  "docs/migrations/0.6-to-0.7.md",
116
116
  "docs/migrations/0.7-to-0.8.md",
117
+ "docs/migrations/0.8-to-0.9.md",
117
118
  "docs/adr/0001-color-system.md",
118
119
  "docs/adr/0002-scope-and-2026-baseline.md",
119
120
  "docs/adr/0003-theme-model.md",
@@ -279,6 +280,7 @@
279
280
  "./css/skins.css": "./dist/css/skins.css",
280
281
  "./css/dataviz.css": "./dist/css/dataviz.css",
281
282
  "./css/report.css": "./dist/css/report.css",
283
+ "./css/row.css": "./dist/css/row.css",
282
284
  "./css/figure.css": "./dist/css/figure.css",
283
285
  "./css/annotations.css": "./dist/css/annotations.css",
284
286
  "./css/legend.css": "./dist/css/legend.css",
@@ -324,6 +326,7 @@
324
326
  "./css/unlayered/skins.css": "./css/skins.css",
325
327
  "./css/unlayered/dataviz.css": "./css/dataviz.css",
326
328
  "./css/unlayered/report.css": "./css/report.css",
329
+ "./css/unlayered/row.css": "./css/row.css",
327
330
  "./css/unlayered/figure.css": "./css/figure.css",
328
331
  "./css/unlayered/annotations.css": "./css/annotations.css",
329
332
  "./css/unlayered/legend.css": "./css/legend.css",