@ponchia/ui 0.6.11 → 0.6.12

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/docs/stability.md CHANGED
@@ -1,4 +1,4 @@
1
- # Public API Stability
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
4
  patches are non-breaking. In practical terms: **PATCH releases (`0.6.x`) are
@@ -11,7 +11,7 @@ For the exhaustive package-manifest inventory — every `exports` key, every
11
11
  shipped `files` entry, and the generated artifact provenance map — see
12
12
  [package-contract.md](./package-contract.md).
13
13
 
14
- ## Path To 1.0
14
+ ## Path to 1.0
15
15
 
16
16
  `1.0.0` is a stability declaration, not a catalog milestone. The package is
17
17
  ready for 1.0 when the existing public contract is boring to upgrade:
@@ -36,7 +36,7 @@ ready for 1.0 when the existing public contract is boring to upgrade:
36
36
  migration entry when machine-actionable, and the deprecate-one-minor policy
37
37
  has been followed or explicitly exempted for provably-unreferenced surface.
38
38
 
39
- ### 1.0 Readiness Ledger
39
+ ### 1.0 readiness ledger
40
40
 
41
41
  This ledger is the release-candidate checklist. A row is ready only when the
42
42
  evidence column is green for the candidate commit; prose approval alone is not
@@ -51,6 +51,31 @@ enough.
51
51
  | Bundle budget has headroom | `check:dist`, `check:public-metadata`, `check:pack`, and the README size badge keep default bundle and tarball claims visible. | Budget increases are intentional, reviewed, and named in `CHANGELOG.md`; accidental growth fails before release. |
52
52
  | Deprecation history is clean | `check:migrations`, `check:release`, `check:versions`, `MIGRATIONS.json`, and this deprecation policy tie breaking changes to changelog and migration evidence. | No removal ships without either a deprecate-one-minor trail or an explicit BREAKING note for provably-unreferenced surface. |
53
53
 
54
+ ### Adoption evidence for 1.0
55
+
56
+ This snapshot records product evidence as of 2026-07-10. Use three evidence
57
+ classes:
58
+
59
+ - **Downstream-proven:** A non-example app, site, report generator, or tool
60
+ imports the published surface and passes its own build or checks.
61
+ - **Package-proven:** Packed examples, unit tests, browser tests, and type tests
62
+ prove compatibility, but no inspected non-example consumer imports the
63
+ surface.
64
+ - **Speculative:** Neither downstream use nor a package-level executable proof
65
+ justifies freezing the surface into 1.0.
66
+
67
+ Package-proven is necessary but does not establish demand. During the catalog
68
+ freeze, do not expand package-only surfaces. Recheck this table against real
69
+ consumer upgrades before the 1.0 release candidate.
70
+
71
+ | Surface family | Current evidence | 1.0 disposition |
72
+ | --- | --- | --- |
73
+ | Core CSS, class recipes, vanilla behaviors, tokens, and Tailwind bridge | Downstream-proven across five inspected non-example app, site, and service consumers. | Stabilize names and behavior contracts. Use consumer upgrades as the release-candidate proof. |
74
+ | Report, provenance, analytical CSS, annotations, glyphs, skins, workbench CSS, chart data, and Vega theme | Downstream-proven across four inspected report, site, dashboard, and tool consumers. | Keep opt-in. Stabilize the consumed paths; do not broaden the catalog during the freeze. |
75
+ | Controlled non-`<dialog>` modal | Package-proven by stack, portal, late-node, focus, and cleanup regressions. No inspected non-example consumer initializes `initModal`. | Keep compatible through 0.6.x, but require a real consumer before declaring this alternative to native `<dialog>` stable in 1.0. |
76
+ | React, Solid, Qwik, Svelte, and Vue lifecycle adapters | Package-proven by packed examples, types, and lifecycle tests. No inspected non-example consumer imports an adapter entrypoint. | Pre-1.0 candidate only. Freeze the adapter set and require downstream adoption before declaring all five stable in 1.0. |
77
+ | Mermaid, D2, Shiki, Figma Variables, and the report-claims schema | Package-proven by generated-data, render, schema, and drift checks. No inspected non-example consumer currently supplies downstream proof for every path. | Keep compatible through 0.6.x, but decide each 1.0 contract from adoption evidence rather than generator coverage alone. |
78
+
54
79
  After 1.0, breaking changes move to majors. Until then, the table below is the
55
80
  current public-surface matrix and the release policy above still applies.
56
81
 
@@ -104,13 +129,13 @@ current public-surface matrix and the release policy above still applies.
104
129
  | Terms / glossary (`css/term.css`, `.ui-term`, `.ui-glossary`) | Stable additive | Term and glossary class names plus native-popover definition hooks are public. Opt-in, not in the default bundle. The host owns glossary content and terminology policy. |
105
130
  | Contents rail (`css/toc.css`, `.ui-toc*`) | Stable additive | TOC rail class/part names and current-section state classes are public. Opt-in, not in the default bundle. The host owns section observation and active-state updates. |
106
131
  | Tree outlines (`css/tree.css`, `.ui-tree*`) | Stable additive | Tree outline class names, depth styling, and native `<details>` composition are public. Opt-in, not in the default bundle. The host owns tree data, lazy loading, and selection state. |
107
- | Controlled-modal focus trap (`initModal`, `useModal`, `data-bronto-modal`) | Stable additive | For the `.ui-modal.is-open` (non-`<dialog>`) path: the `data-bronto-modal` opt-in marker, the `inert`-based focus trap + focus-return, and the cancelable `bronto:modal:close` (`detail: { reason }`) event are public. The consumer still owns the `is-open` class; the behavior never changes visibility. The native `<dialog>` path (`initDialog`) is the default and gets the trap for free. |
132
+ | Controlled-modal focus trap (`initModal`, `useModal`, `data-bronto-modal`) | Stable additive | For the `.ui-modal.is-open` (non-`<dialog>`) path: the `data-bronto-modal` opt-in marker, stack-aware `inert` ownership, focus-return, late-background trapping, owned portaled-popover admission, and the cancelable `bronto:modal:close` (`detail: { reason }`) event are public. The consumer still owns the `is-open` class; closing a parent suspends still-open controlled descendants until the parent reopens. The native `<dialog>` path (`initDialog`) remains the default. |
108
133
  | Keyboard-shortcut hint (`.ui-shortcut`, `.ui-shortcut__sep`) | Stable additive | Class names for the chord/sequence hint over `.ui-kbd` are public. Ships in the core layer (class-only, no recipe). |
109
134
  | Agent and migration data (`llms.txt`, `MIGRATIONS.json`) | Stable additive | `llms.txt` stays shipped as the offline agent entrypoint. `MIGRATIONS.json` stays a machine-readable migration map for breaking renames/removals. New migration entries are additive; removal of a migration record requires the same breaking-change discipline as the surface it describes. |
110
135
  | Generated docs shipped in npm | Stable paths | Exported docs paths stay shipped and resolvable within a compatible minor. Markdown/text assets are for reading unless your runtime has a loader. Generated content may change with the source contract. |
111
136
  | Demo, examples, tests, scripts | Internal | Useful for learning and verification, but not shipped runtime API unless a path is explicitly exported in `package.json`. |
112
137
 
113
- ## Deprecation Policy
138
+ ## Deprecation policy
114
139
 
115
140
  Public surface (`.ui-*` classes, `data-bronto-*` attributes, `cls`/token keys,
116
141
  behavior signatures, and exported schema values) is removed on a
@@ -126,7 +151,7 @@ A token/class/attribute that is provably referenced by no shipped CSS,
126
151
  component, behavior, or doc may skip that window and be removed with a BREAKING
127
152
  entry plus migration note; there is no working call-site to keep alive.
128
153
 
129
- ## Trust Boundary
154
+ ## Trust boundary
130
155
 
131
156
  Behaviors assume trusted application markup. If a delegated root includes
132
157
  untrusted CMS or user HTML, sanitize it first or do not initialize behaviors on
package/docs/usage.md CHANGED
@@ -377,6 +377,16 @@ also gives the overlay `role="dialog"` + `aria-modal="true"` and dev-warns if it
377
377
  has no accessible name (add `aria-label`/`aria-labelledby`). A drawer is a modal
378
378
  that enters from an edge — same rule.
379
379
 
380
+ Controlled modals share one document-level stack. Opening a sibling portal
381
+ modal makes the previous modal inert and keeps only the new top modal
382
+ interactive; closing it restores focus into the previous modal. An
383
+ `initPopover()` trigger inside the top modal may target a panel portaled
384
+ elsewhere in the document: while that panel is open, it joins the live modal
385
+ tree and owns Escape without releasing unrelated background content. Background
386
+ nodes added after the modal opens are trapped too. If a controlled parent modal
387
+ closes while a descendant still carries `is-open`, the descendant is suspended
388
+ with the parent and resumes if the parent reopens.
389
+
380
390
  **Scroll-lock is not automatic on either path.** Neither the native `<dialog>`
381
391
  nor the `is-open` path freezes the background — the page behind an open modal can
382
392
  still scroll. If that matters, toggle a lock yourself while the modal is open
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.6.11/dist/css/<leaf>.css" />
48
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.12/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,6 +1,6 @@
1
1
  {
2
2
  "name": "@ponchia/ui",
3
- "version": "0.6.11",
3
+ "version": "0.6.12",
4
4
  "type": "module",
5
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.",
6
6
  "keywords": [
@@ -2030,12 +2030,12 @@
2030
2030
  "type": "FLOAT",
2031
2031
  "sourceCssVariable": "--text-2xs",
2032
2032
  "valuesByMode": {
2033
- "global": 0.68
2033
+ "global": 0.72
2034
2034
  },
2035
2035
  "$extensions": {
2036
2036
  "com.ponchia.css": {
2037
2037
  "variable": "--text-2xs",
2038
- "value": "0.68rem"
2038
+ "value": "0.72rem"
2039
2039
  }
2040
2040
  },
2041
2041
  "unit": "rem"
package/tokens/index.js CHANGED
@@ -40,7 +40,7 @@ export const cssVars = {
40
40
  '--display': 'var(--dot-font)',
41
41
  '--display-weight': '700',
42
42
  '--display-weight-strong': '800',
43
- '--text-2xs': '0.68rem',
43
+ '--text-2xs': '0.72rem',
44
44
  '--text-xs': '0.76rem',
45
45
  '--text-sm': '0.86rem',
46
46
  '--text-base': '0.95rem',
package/tokens/index.json CHANGED
@@ -20,7 +20,7 @@
20
20
  "--display": "var(--dot-font)",
21
21
  "--display-weight": "700",
22
22
  "--display-weight-strong": "800",
23
- "--text-2xs": "0.68rem",
23
+ "--text-2xs": "0.72rem",
24
24
  "--text-xs": "0.76rem",
25
25
  "--text-sm": "0.86rem",
26
26
  "--text-base": "0.95rem",
@@ -165,7 +165,7 @@
165
165
  "display": "var(--dot-font)",
166
166
  "display-weight": "700",
167
167
  "display-weight-strong": "800",
168
- "text-2xs": "0.68rem",
168
+ "text-2xs": "0.72rem",
169
169
  "text-xs": "0.76rem",
170
170
  "text-sm": "0.86rem",
171
171
  "text-base": "0.95rem",
@@ -147,7 +147,7 @@
147
147
  "--display": "'Doto', 'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'SF Mono', ui-monospace, monospace",
148
148
  "--display-weight": "700",
149
149
  "--display-weight-strong": "800",
150
- "--text-2xs": "0.68rem",
150
+ "--text-2xs": "0.72rem",
151
151
  "--text-xs": "0.76rem",
152
152
  "--text-sm": "0.86rem",
153
153
  "--text-base": "0.95rem",
@@ -117,7 +117,7 @@
117
117
  "text": {
118
118
  "2xs": {
119
119
  "$type": "dimension",
120
- "$value": "0.68rem"
120
+ "$value": "0.72rem"
121
121
  },
122
122
  "xs": {
123
123
  "$type": "dimension",