@ponchia/ui 0.10.0 → 0.11.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.
- package/CHANGELOG.md +37 -0
- package/MIGRATIONS.json +28 -9
- package/README.md +1 -1
- package/classes/classes.json +31 -2
- package/classes/index.d.ts +12 -0
- package/classes/index.js +13 -0
- package/css/annotations.css +2 -2
- package/css/app.css +3 -1
- package/css/command.css +4 -4
- package/css/discussion.css +150 -0
- package/css/figure.css +6 -4
- package/css/generated.css +19 -12
- package/css/legend.css +13 -5
- package/css/report.css +25 -11
- package/css/sources.css +1 -1
- 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/command.css +1 -1
- package/dist/css/discussion.css +1 -0
- package/dist/css/figure.css +1 -1
- package/dist/css/generated.css +1 -1
- package/dist/css/legend.css +1 -1
- package/dist/css/report-kit.css +1 -1
- package/dist/css/report.css +1 -1
- package/dist/css/sources.css +1 -1
- package/docs/compositions.md +23 -2
- package/docs/discussion.md +64 -0
- package/docs/figure.md +10 -1
- package/docs/migrations/0.10-to-0.11.md +61 -0
- package/docs/package-contract.md +7 -1
- package/docs/reference.md +18 -1
- package/docs/reporting.md +8 -8
- package/docs/stability.md +2 -1
- package/llms.txt +1 -1
- package/package.json +10 -4
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,43 @@
|
|
|
5
5
|
|> `^0` / `*` wildcard does **not** protect you. See README → Versioning, and
|
|
6
6
|
|> the deprecation policy in CONTRIBUTING.md.
|
|
7
7
|
|
|
8
|
+
## 0.11.0 — 2026-09-09
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **BREAKING: complete the supporting typography.** Figure captions, legend
|
|
13
|
+
text, generated-content labels and command groups use sentence-case sans.
|
|
14
|
+
Technical log bodies and identifiers retain mono. Caption text is 14px at
|
|
15
|
+
the default root size; inline citations no longer shrink below 12px.
|
|
16
|
+
- Figure keys and decision/action rows respond to their own available width.
|
|
17
|
+
Two-up comparisons wrap intrinsically, including outside a report. Named
|
|
18
|
+
containment on figure, decision-grid and actions wrappers is disabled for
|
|
19
|
+
print to preserve document flow.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- Narrow evidence panels no longer squeeze a chart into 40px or decision text
|
|
24
|
+
into 21px on a wide page. Long action status and legend labels wrap.
|
|
25
|
+
- Long mobile navigation labels wrap while keeping every destination reachable.
|
|
26
|
+
- The figure specimen's authored annotation stays inside its viewBox.
|
|
27
|
+
- Generated-content disclosure summaries retain the coarse-pointer target floor.
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- Optional `discussion.css` with thread lists, quoted passages, messages and
|
|
32
|
+
composers. State and posting remain host-owned; includes a local interactive
|
|
33
|
+
specimen and a narrow-panel example.
|
|
34
|
+
|
|
35
|
+
- A working service specimen with deterministic loading, empty, error and stale
|
|
36
|
+
states, environment/search filtering, retry and native-dialog sample creation.
|
|
37
|
+
Unavailable observations never retain an operational health claim. Product
|
|
38
|
+
state stays in the specimen; no framework state machine or data dependency.
|
|
39
|
+
- Narrow-parent regression checks, including a comparison outside a report,
|
|
40
|
+
annotation bounds, long action status, citation text and recovery journeys.
|
|
41
|
+
- A complete-screen migration recipe for explicit consumer typography overrides.
|
|
42
|
+
|
|
43
|
+
See [the migration guide](docs/migrations/0.10-to-0.11.md).
|
|
44
|
+
|
|
8
45
|
## 0.10.0 — 2026-09-08
|
|
9
46
|
|
|
10
47
|
### Changed
|
package/MIGRATIONS.json
CHANGED
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
{
|
|
84
84
|
"old": "hero / project-* / post-card / essay-* / page-* / home-* / signal-panel / worklog-summary",
|
|
85
85
|
"new": "the ui-* content layer",
|
|
86
|
-
"note": "Long-form content: .ui-prose / .ui-quote. Cards: .ui-card. Layout: .ui-grid / .ui-stack. Site chrome: the ui-site* shell. No 1:1 mapping
|
|
86
|
+
"note": "Long-form content: .ui-prose / .ui-quote. Cards: .ui-card. Layout: .ui-grid / .ui-stack. Site chrome: the ui-site* shell. No 1:1 mapping — re-compose with the content primitives."
|
|
87
87
|
},
|
|
88
88
|
{
|
|
89
89
|
"old": "callout",
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
{
|
|
99
99
|
"old": "tag-list / tag",
|
|
100
100
|
"new": "ui-tags / ui-tag",
|
|
101
|
-
"note": "Compact variant .tag-list--compact
|
|
101
|
+
"note": "Compact variant .tag-list--compact → .ui-tags--compact; verify accent-on-accent contrast (see CHANGELOG 0.3.0 a11y fix)."
|
|
102
102
|
}
|
|
103
103
|
],
|
|
104
104
|
"codemod": "See docs/migrations/0.2-to-0.3.md for a ready-to-run ripgrep+sed recipe covering the 'safe' rules."
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
"manual": [
|
|
112
112
|
{
|
|
113
113
|
"old": "--orange / --orange-soft",
|
|
114
|
-
"new": "(removed
|
|
114
|
+
"new": "(removed — re-declare in a consumer :root override if referenced)",
|
|
115
115
|
"note": "Orphan token pair: defined in the token mirrors but referenced by no shipped component and documented nowhere, and untiered under the new colour model. Removed under the CONTRIBUTING 'provably-unreferenced surface' exception. If you used it: :root { --orange: #a85f32; --orange-soft: rgb(168 95 50 / 0.13); }"
|
|
116
116
|
}
|
|
117
117
|
],
|
|
@@ -120,7 +120,7 @@
|
|
|
120
120
|
{
|
|
121
121
|
"from": "0.4",
|
|
122
122
|
"to": "0.5",
|
|
123
|
-
"summary": "Adds the analytical-primitives suite (annotations, legend, marks, connectors, spotlight, crosshair, selection + the analytical.css roll-up); all additive/opt-in. Three breaking changes: the chart data key moved out of the report kit into the standalone Legends layer (`.ui-chart__legend`/`.ui-chart__swatch` removed); annotation arrowheads now render via the shared connectors geometry kernel (a small visual path change, no API change); and the marks/bracket-note rationed-accent tone was renamed `evidence
|
|
123
|
+
"summary": "Adds the analytical-primitives suite (annotations, legend, marks, connectors, spotlight, crosshair, selection + the analytical.css roll-up); all additive/opt-in. Three breaking changes: the chart data key moved out of the report kit into the standalone Legends layer (`.ui-chart__legend`/`.ui-chart__swatch` removed); annotation arrowheads now render via the shared connectors geometry kernel (a small visual path change, no API change); and the marks/bracket-note rationed-accent tone was renamed `evidence`→`accent` to match the annotation/connector tone vocabulary (`.ui-annotation--evidence` stays — it's a marker variant, not a tone).",
|
|
124
124
|
"safe": [
|
|
125
125
|
{
|
|
126
126
|
"old": "ui-chart__swatch",
|
|
@@ -139,12 +139,12 @@
|
|
|
139
139
|
{
|
|
140
140
|
"old": "ui.mark({ tone: 'evidence' }) / ui.bracketNote({ tone: 'evidence' })",
|
|
141
141
|
"new": "tone: 'accent'",
|
|
142
|
-
"note": "The rationed-accent tone option on the mark/bracket-note recipes is now 'accent' (was 'evidence'), matching ui.connector/ui.annotation. Do NOT rewrite ui.annotation({ variant: 'evidence' }) or the 'evidence' subject marker
|
|
142
|
+
"note": "The rationed-accent tone option on the mark/bracket-note recipes is now 'accent' (was 'evidence'), matching ui.connector/ui.annotation. Do NOT rewrite ui.annotation({ variant: 'evidence' }) or the 'evidence' subject marker — those are a marker shape, not a tone, and are unchanged."
|
|
143
143
|
},
|
|
144
144
|
{
|
|
145
145
|
"old": "ui-chart__legend",
|
|
146
146
|
"new": "ui-legend",
|
|
147
|
-
"note": "Also import '@ponchia/ui/css/legend.css' beside report.css, and wrap each entry's content as <li class=\"ui-legend__item\">
|
|
147
|
+
"note": "Also import '@ponchia/ui/css/legend.css' beside report.css, and wrap each entry's content as <li class=\"ui-legend__item\"> … <span class=\"ui-legend__label\">…</span>. The swatch's --chart-color/--chart-pattern inline contract is unchanged; the categorical --chart-N colour is also available via .ui-legend__swatch--N. See docs/legends.md."
|
|
148
148
|
},
|
|
149
149
|
{
|
|
150
150
|
"old": "connectorEndArrow (annotations)",
|
|
@@ -157,16 +157,16 @@
|
|
|
157
157
|
{
|
|
158
158
|
"from": "0.5",
|
|
159
159
|
"to": "0.6",
|
|
160
|
-
"summary": "Charting realignment. The local static bar-chart renderer (.ui-chart*) is removed
|
|
160
|
+
"summary": "Charting realignment. The local static bar-chart renderer (.ui-chart*) is removed — a chart needs scales + data binding, out of scope for the analytical layer. bronto is now a themeable target for Vega-Lite (@ponchia/ui/vega), the same tokens-as-data path as Mermaid/D2. The --chart-* data-viz palette, tokens/charts.json, and the .ui-legend layer are unchanged.",
|
|
161
161
|
"safe": [],
|
|
162
162
|
"manual": [
|
|
163
163
|
{
|
|
164
164
|
"old": "ui-chart / ui-chart__plot / ui-chart__bar / ui-chart__label / ui-chart__track / ui-chart__fill / ui-chart__fallback / ui-chart__caption",
|
|
165
165
|
"new": "a Vega-Lite chart themed with @ponchia/ui/vega, or a token-themed inline <svg>",
|
|
166
|
-
"note": "No 1:1 class mapping
|
|
166
|
+
"note": "No 1:1 class mapping — the renderer is removed. For a real chart: import '@ponchia/ui/vega', pass brontoVegaConfig(theme) to vega-embed, and place the result in a <figure class=\"ui-report__figure\"> with a <figcaption class=\"ui-report__caption\"> and a <ul class=\"ui-legend\"> key (see docs/vega.md). For a frozen/print chart: hand-author an inline <svg> using the --chart-N palette tokens for fills. The --chart-value inline knob is gone; --chart-color/--chart-pattern remain on .ui-legend__swatch."
|
|
167
167
|
}
|
|
168
168
|
],
|
|
169
|
-
"codemod": "No codemod
|
|
169
|
+
"codemod": "No codemod — the .ui-chart* renderer has no replacement class. rg -l 'ui-chart\\\\b|ui-chart__' to find call sites, then rebuild each as a Vega-Lite chart (@ponchia/ui/vega) or a token-themed inline <svg>. See docs/vega.md."
|
|
170
170
|
},
|
|
171
171
|
{
|
|
172
172
|
"from": "0.6",
|
|
@@ -205,6 +205,25 @@
|
|
|
205
205
|
}
|
|
206
206
|
],
|
|
207
207
|
"codemod": "See docs/migrations/0.9-to-0.10.md. Changes require consumer lifecycle and visual review; no blanket replacement is safe."
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"from": "0.10",
|
|
211
|
+
"to": "0.11",
|
|
212
|
+
"summary": "Readable supporting typography and container-aware evidence layouts.",
|
|
213
|
+
"safe": [],
|
|
214
|
+
"manual": [
|
|
215
|
+
{
|
|
216
|
+
"old": "viewport-based figure/report layouts",
|
|
217
|
+
"new": "container-aware figure, decision-grid and actions layouts; intrinsic two-up comparisons",
|
|
218
|
+
"note": "Keep the documented wrappers, verify narrow parents on wide screens and review print. New inline-size containment can change intrinsic sizing."
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"old": "uppercase mono explanatory labels and unconstrained superscript citations",
|
|
222
|
+
"new": "sentence-case sans supporting text and a citation size floor",
|
|
223
|
+
"note": "Review explicit consumer overrides by role, preserving intentional display and technical identifiers."
|
|
224
|
+
}
|
|
225
|
+
],
|
|
226
|
+
"codemod": "No automatic rewrite: review complete consumer tasks and docs/migrations/0.10-to-0.11.md."
|
|
208
227
|
}
|
|
209
228
|
]
|
|
210
229
|
}
|
package/README.md
CHANGED
|
@@ -93,7 +93,7 @@ Or drop it in with no build step, straight from a CDN (replace the version only
|
|
|
93
93
|
when deliberately upgrading across a breaking pre-1.0 minor):
|
|
94
94
|
|
|
95
95
|
```html
|
|
96
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.
|
|
96
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.11.0/dist/bronto.css">
|
|
97
97
|
```
|
|
98
98
|
|
|
99
99
|
## Quick start
|
package/classes/classes.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$comment": "@ponchia/ui class vocabulary as language-neutral data — validate emitted markup without executing the ESM cls map or parsing the .d.ts. Generated from classes/index.js — do not edit by hand; run `npm run classes:json:build`. Drift-checked in CI. `groups[].base` is null for a parts-only namespace (no standalone base class — do NOT emit it). A modifier whose name contains `__` (e.g. `ui-spark__bar--pos`) attaches to THAT part, not the base host. `states` is the author-applied `is-*` hooks (runtime/behavior-managed hooks are excluded); `behaviorAttributes` are the `data-bronto-*` wiring hooks the optional behaviors delegate on; `requiredAria` is the role/aria a generator must emit per component. `states` + `customProperties` are documented in docs/reference.md and ship outside `cls` by design.",
|
|
3
3
|
"counts": {
|
|
4
|
-
"classes":
|
|
5
|
-
"groups":
|
|
4
|
+
"classes": 695,
|
|
5
|
+
"groups": 187
|
|
6
6
|
},
|
|
7
7
|
"groups": {
|
|
8
8
|
"ui-accordion": {
|
|
@@ -465,6 +465,23 @@
|
|
|
465
465
|
"ui-diff__row"
|
|
466
466
|
]
|
|
467
467
|
},
|
|
468
|
+
"ui-discussion": {
|
|
469
|
+
"base": "ui-discussion",
|
|
470
|
+
"modifiers": [],
|
|
471
|
+
"parts": [
|
|
472
|
+
"ui-discussion__actions",
|
|
473
|
+
"ui-discussion__composer",
|
|
474
|
+
"ui-discussion__header",
|
|
475
|
+
"ui-discussion__hint",
|
|
476
|
+
"ui-discussion__item",
|
|
477
|
+
"ui-discussion__list",
|
|
478
|
+
"ui-discussion__message",
|
|
479
|
+
"ui-discussion__messages",
|
|
480
|
+
"ui-discussion__meta",
|
|
481
|
+
"ui-discussion__quote",
|
|
482
|
+
"ui-discussion__state"
|
|
483
|
+
]
|
|
484
|
+
},
|
|
468
485
|
"ui-display": {
|
|
469
486
|
"base": "ui-display",
|
|
470
487
|
"modifiers": [],
|
|
@@ -1799,6 +1816,18 @@
|
|
|
1799
1816
|
"ui-diff__row--add",
|
|
1800
1817
|
"ui-diff__row--context",
|
|
1801
1818
|
"ui-diff__row--remove",
|
|
1819
|
+
"ui-discussion",
|
|
1820
|
+
"ui-discussion__actions",
|
|
1821
|
+
"ui-discussion__composer",
|
|
1822
|
+
"ui-discussion__header",
|
|
1823
|
+
"ui-discussion__hint",
|
|
1824
|
+
"ui-discussion__item",
|
|
1825
|
+
"ui-discussion__list",
|
|
1826
|
+
"ui-discussion__message",
|
|
1827
|
+
"ui-discussion__messages",
|
|
1828
|
+
"ui-discussion__meta",
|
|
1829
|
+
"ui-discussion__quote",
|
|
1830
|
+
"ui-discussion__state",
|
|
1802
1831
|
"ui-display",
|
|
1803
1832
|
"ui-divider",
|
|
1804
1833
|
"ui-dot",
|
package/classes/index.d.ts
CHANGED
|
@@ -382,6 +382,18 @@ export declare const cls: {
|
|
|
382
382
|
readonly legendTrack: 'ui-legend__track';
|
|
383
383
|
readonly legendTicks: 'ui-legend__ticks';
|
|
384
384
|
readonly legendTick: 'ui-legend__tick';
|
|
385
|
+
readonly discussion: 'ui-discussion';
|
|
386
|
+
readonly discussionHeader: 'ui-discussion__header';
|
|
387
|
+
readonly discussionActions: 'ui-discussion__actions';
|
|
388
|
+
readonly discussionQuote: 'ui-discussion__quote';
|
|
389
|
+
readonly discussionMessages: 'ui-discussion__messages';
|
|
390
|
+
readonly discussionList: 'ui-discussion__list';
|
|
391
|
+
readonly discussionMessage: 'ui-discussion__message';
|
|
392
|
+
readonly discussionMeta: 'ui-discussion__meta';
|
|
393
|
+
readonly discussionHint: 'ui-discussion__hint';
|
|
394
|
+
readonly discussionState: 'ui-discussion__state';
|
|
395
|
+
readonly discussionItem: 'ui-discussion__item';
|
|
396
|
+
readonly discussionComposer: 'ui-discussion__composer';
|
|
385
397
|
readonly annotation: 'ui-annotation';
|
|
386
398
|
readonly annotationSubject: 'ui-annotation__subject';
|
|
387
399
|
readonly annotationConnector: 'ui-annotation__connector';
|
package/classes/index.js
CHANGED
|
@@ -400,6 +400,19 @@ export const cls = Object.freeze({
|
|
|
400
400
|
legendTrack: 'ui-legend__track',
|
|
401
401
|
legendTicks: 'ui-legend__ticks',
|
|
402
402
|
legendTick: 'ui-legend__tick',
|
|
403
|
+
// discussions (opt-in discussion.css; host-owned state)
|
|
404
|
+
discussion: 'ui-discussion',
|
|
405
|
+
discussionHeader: 'ui-discussion__header',
|
|
406
|
+
discussionActions: 'ui-discussion__actions',
|
|
407
|
+
discussionQuote: 'ui-discussion__quote',
|
|
408
|
+
discussionMessages: 'ui-discussion__messages',
|
|
409
|
+
discussionList: 'ui-discussion__list',
|
|
410
|
+
discussionMessage: 'ui-discussion__message',
|
|
411
|
+
discussionMeta: 'ui-discussion__meta',
|
|
412
|
+
discussionHint: 'ui-discussion__hint',
|
|
413
|
+
discussionState: 'ui-discussion__state',
|
|
414
|
+
discussionItem: 'ui-discussion__item',
|
|
415
|
+
discussionComposer: 'ui-discussion__composer',
|
|
403
416
|
annotation: 'ui-annotation',
|
|
404
417
|
annotationSubject: 'ui-annotation__subject',
|
|
405
418
|
annotationConnector: 'ui-annotation__connector',
|
package/css/annotations.css
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
--annotation-stroke-width: 1.5;
|
|
15
15
|
|
|
16
16
|
color: var(--annotation-color);
|
|
17
|
-
font-family: var(--
|
|
17
|
+
font-family: var(--sans);
|
|
18
18
|
font-size: var(--text-xs);
|
|
19
19
|
overflow: visible;
|
|
20
20
|
}
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
stroke: var(--annotation-note-bg);
|
|
97
97
|
stroke-linejoin: round;
|
|
98
98
|
stroke-width: 3;
|
|
99
|
-
text-transform:
|
|
99
|
+
text-transform: none;
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
.ui-annotation__label {
|
package/css/app.css
CHANGED
|
@@ -73,6 +73,8 @@
|
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
.ui-app-nav a {
|
|
76
|
+
min-inline-size: 0;
|
|
77
|
+
overflow-wrap: anywhere;
|
|
76
78
|
align-items: center;
|
|
77
79
|
border-inline-start: 2px solid transparent;
|
|
78
80
|
color: var(--text-soft);
|
|
@@ -354,7 +356,7 @@
|
|
|
354
356
|
justify-content: center;
|
|
355
357
|
border-inline-start: 0;
|
|
356
358
|
border-block-end: 2px solid transparent;
|
|
357
|
-
white-space:
|
|
359
|
+
white-space: normal;
|
|
358
360
|
}
|
|
359
361
|
|
|
360
362
|
.ui-app-nav a.is-active,
|
package/css/command.css
CHANGED
|
@@ -43,11 +43,11 @@
|
|
|
43
43
|
|
|
44
44
|
.ui-command__group {
|
|
45
45
|
color: var(--text-dim);
|
|
46
|
-
font-family: var(--
|
|
47
|
-
font-size: var(--text-
|
|
48
|
-
letter-spacing:
|
|
46
|
+
font-family: var(--sans);
|
|
47
|
+
font-size: var(--text-xs);
|
|
48
|
+
letter-spacing: 0;
|
|
49
49
|
padding: 0.5rem 0.6rem 0.25rem;
|
|
50
|
-
text-transform:
|
|
50
|
+
text-transform: none;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
.ui-command__item {
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/* Discussions: readable messages and composers. The host owns storage, identity,
|
|
2
|
+
focus management, anchoring, notifications, and posting state. */
|
|
3
|
+
.ui-discussion {
|
|
4
|
+
color: var(--text);
|
|
5
|
+
font-family: var(--sans);
|
|
6
|
+
font-size: var(--text-sm);
|
|
7
|
+
line-height: 1.5;
|
|
8
|
+
min-inline-size: 0;
|
|
9
|
+
overflow-wrap: anywhere;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.ui-discussion__header {
|
|
13
|
+
align-items: start;
|
|
14
|
+
display: flex;
|
|
15
|
+
gap: var(--space-md);
|
|
16
|
+
justify-content: space-between;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.ui-discussion__header > div {
|
|
20
|
+
min-inline-size: 0;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.ui-discussion__header h2 {
|
|
24
|
+
font-family: var(--sans);
|
|
25
|
+
font-size: var(--text-lg);
|
|
26
|
+
font-weight: 650;
|
|
27
|
+
letter-spacing: normal;
|
|
28
|
+
line-height: 1.25;
|
|
29
|
+
margin: 0;
|
|
30
|
+
text-transform: none;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.ui-discussion__header p,
|
|
34
|
+
.ui-discussion__meta,
|
|
35
|
+
.ui-discussion__hint,
|
|
36
|
+
.ui-discussion__state {
|
|
37
|
+
color: var(--text-dim);
|
|
38
|
+
font-family: var(--sans);
|
|
39
|
+
font-size: var(--text-xs);
|
|
40
|
+
letter-spacing: normal;
|
|
41
|
+
text-transform: none;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.ui-discussion__actions {
|
|
45
|
+
align-items: center;
|
|
46
|
+
display: flex;
|
|
47
|
+
flex-wrap: wrap;
|
|
48
|
+
gap: var(--space-sm);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.ui-discussion__quote {
|
|
52
|
+
background: var(--panel);
|
|
53
|
+
border-inline-start: 3px solid var(--accent);
|
|
54
|
+
color: var(--text);
|
|
55
|
+
font-family: var(--sans);
|
|
56
|
+
margin: var(--space-md) 0;
|
|
57
|
+
padding: var(--space-sm) var(--space-md);
|
|
58
|
+
white-space: pre-wrap;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.ui-discussion__messages,
|
|
62
|
+
.ui-discussion__list {
|
|
63
|
+
list-style: none;
|
|
64
|
+
margin: var(--space-md) 0;
|
|
65
|
+
padding: 0;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.ui-discussion__message {
|
|
69
|
+
border-block-end: 1px solid var(--line);
|
|
70
|
+
padding-block: var(--space-md);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.ui-discussion__message .ui-prose {
|
|
74
|
+
font-family: var(--sans);
|
|
75
|
+
font-size: var(--text-sm);
|
|
76
|
+
line-height: 1.5;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.ui-discussion__meta {
|
|
80
|
+
margin-block: 0 var(--space-sm);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.ui-discussion__item {
|
|
84
|
+
background: transparent;
|
|
85
|
+
border: 0;
|
|
86
|
+
border-block-end: 1px solid var(--line);
|
|
87
|
+
color: inherit;
|
|
88
|
+
cursor: pointer;
|
|
89
|
+
display: grid;
|
|
90
|
+
font: inherit;
|
|
91
|
+
gap: var(--space-xs);
|
|
92
|
+
inline-size: 100%;
|
|
93
|
+
min-block-size: 44px;
|
|
94
|
+
padding: var(--space-md) var(--space-sm);
|
|
95
|
+
text-align: start;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.ui-discussion__item > :first-child {
|
|
99
|
+
font-weight: 600;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.ui-discussion__item small {
|
|
103
|
+
color: var(--text-dim);
|
|
104
|
+
font-family: var(--sans);
|
|
105
|
+
font-size: var(--text-xs);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.ui-discussion__item:is(:hover, :focus-visible) {
|
|
109
|
+
background: var(--panel);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.ui-discussion__item:focus-visible {
|
|
113
|
+
outline: 2px solid var(--accent);
|
|
114
|
+
outline-offset: -2px;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.ui-discussion__composer {
|
|
118
|
+
border-block-start: 1px solid var(--line);
|
|
119
|
+
display: grid;
|
|
120
|
+
gap: var(--space-sm);
|
|
121
|
+
padding-block: var(--space-md);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.ui-discussion__composer textarea {
|
|
125
|
+
font-family: var(--sans);
|
|
126
|
+
inline-size: 100%;
|
|
127
|
+
min-block-size: 7rem;
|
|
128
|
+
resize: vertical;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
@media (forced-colors: active) {
|
|
132
|
+
.ui-discussion__quote {
|
|
133
|
+
border-color: Highlight;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.ui-discussion__item:focus-visible {
|
|
137
|
+
outline-color: Highlight;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
@media print {
|
|
142
|
+
.ui-discussion__actions,
|
|
143
|
+
.ui-discussion__composer {
|
|
144
|
+
display: none;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.ui-discussion__message {
|
|
148
|
+
break-inside: avoid;
|
|
149
|
+
}
|
|
150
|
+
}
|
package/css/figure.css
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
========================================================================== */
|
|
9
9
|
|
|
10
10
|
.ui-figure {
|
|
11
|
+
container: bronto-figure / inline-size;
|
|
11
12
|
display: grid;
|
|
12
13
|
gap: var(--space-sm);
|
|
13
14
|
margin: 0;
|
|
@@ -22,11 +23,11 @@
|
|
|
22
23
|
|
|
23
24
|
.ui-figure__caption {
|
|
24
25
|
color: var(--text-dim);
|
|
25
|
-
font-family: var(--
|
|
26
|
-
font-size: var(--text-
|
|
26
|
+
font-family: var(--sans);
|
|
27
|
+
font-size: var(--text-sm);
|
|
27
28
|
letter-spacing: 0;
|
|
28
29
|
line-height: 1.5;
|
|
29
|
-
text-transform:
|
|
30
|
+
text-transform: none;
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
.ui-figure__body {
|
|
@@ -81,7 +82,7 @@
|
|
|
81
82
|
margin-block-start: var(--space-xs);
|
|
82
83
|
}
|
|
83
84
|
|
|
84
|
-
@
|
|
85
|
+
@container bronto-figure (max-width: 44rem) {
|
|
85
86
|
.ui-figure__body--key-right {
|
|
86
87
|
grid-template-columns: 1fr;
|
|
87
88
|
}
|
|
@@ -89,6 +90,7 @@
|
|
|
89
90
|
|
|
90
91
|
@media print {
|
|
91
92
|
.ui-figure {
|
|
93
|
+
container-type: normal;
|
|
92
94
|
break-inside: avoid;
|
|
93
95
|
}
|
|
94
96
|
|
package/css/generated.css
CHANGED
|
@@ -25,11 +25,11 @@
|
|
|
25
25
|
align-items: center;
|
|
26
26
|
color: var(--text-dim);
|
|
27
27
|
display: inline-flex;
|
|
28
|
-
font-family: var(--
|
|
29
|
-
font-size: var(--text-
|
|
28
|
+
font-family: var(--sans);
|
|
29
|
+
font-size: var(--text-xs);
|
|
30
30
|
gap: 0.4rem;
|
|
31
|
-
letter-spacing:
|
|
32
|
-
text-transform:
|
|
31
|
+
letter-spacing: 0;
|
|
32
|
+
text-transform: none;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
/* --- Origin label — "AI assisted" / "model output" / "human reviewed". --- */
|
|
@@ -39,12 +39,12 @@
|
|
|
39
39
|
border-radius: var(--radius-pill);
|
|
40
40
|
color: var(--text-soft);
|
|
41
41
|
display: inline-flex;
|
|
42
|
-
font-family: var(--
|
|
43
|
-
font-size: var(--text-
|
|
42
|
+
font-family: var(--sans);
|
|
43
|
+
font-size: var(--text-xs);
|
|
44
44
|
gap: 0.35rem;
|
|
45
|
-
letter-spacing:
|
|
45
|
+
letter-spacing: 0;
|
|
46
46
|
padding: 0.08rem 0.55rem;
|
|
47
|
-
text-transform:
|
|
47
|
+
text-transform: none;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
.ui-origin-label--ai {
|
|
@@ -61,10 +61,10 @@
|
|
|
61
61
|
.ui-reasoning > summary {
|
|
62
62
|
color: var(--text-soft);
|
|
63
63
|
cursor: pointer;
|
|
64
|
-
font-family: var(--
|
|
65
|
-
font-size: var(--text-
|
|
66
|
-
letter-spacing:
|
|
67
|
-
text-transform:
|
|
64
|
+
font-family: var(--sans);
|
|
65
|
+
font-size: var(--text-xs);
|
|
66
|
+
letter-spacing: 0;
|
|
67
|
+
text-transform: none;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
.ui-reasoning__body {
|
|
@@ -110,6 +110,13 @@
|
|
|
110
110
|
white-space: pre-wrap;
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
+
@media (pointer: coarse) {
|
|
114
|
+
.ui-reasoning > summary,
|
|
115
|
+
.ui-tool-call > summary {
|
|
116
|
+
min-block-size: var(--tap-target);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
113
120
|
@media (forced-colors: active) {
|
|
114
121
|
.ui-generated {
|
|
115
122
|
border-inline-start-color: CanvasText;
|
package/css/legend.css
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
color: var(--text-soft);
|
|
19
19
|
display: flex;
|
|
20
20
|
flex-wrap: wrap;
|
|
21
|
-
font-family: var(--
|
|
21
|
+
font-family: var(--sans);
|
|
22
22
|
font-size: var(--text-xs);
|
|
23
23
|
gap: var(--space-2xs) var(--space-md);
|
|
24
24
|
list-style: none;
|
|
@@ -37,13 +37,15 @@
|
|
|
37
37
|
|
|
38
38
|
.ui-legend__title {
|
|
39
39
|
color: var(--text-dim);
|
|
40
|
-
font-size: var(--text-
|
|
40
|
+
font-size: var(--text-xs);
|
|
41
41
|
letter-spacing: 0;
|
|
42
42
|
margin: 0;
|
|
43
|
-
text-transform:
|
|
43
|
+
text-transform: none;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
.ui-legend__item {
|
|
47
|
+
min-inline-size: 0;
|
|
48
|
+
max-inline-size: 100%;
|
|
47
49
|
align-items: center;
|
|
48
50
|
color: inherit;
|
|
49
51
|
display: inline-flex;
|
|
@@ -51,6 +53,8 @@
|
|
|
51
53
|
}
|
|
52
54
|
|
|
53
55
|
.ui-legend__label {
|
|
56
|
+
min-inline-size: 0;
|
|
57
|
+
overflow-wrap: anywhere;
|
|
54
58
|
color: inherit;
|
|
55
59
|
}
|
|
56
60
|
|
|
@@ -62,9 +66,9 @@
|
|
|
62
66
|
|
|
63
67
|
.ui-legend__caption {
|
|
64
68
|
color: var(--text-dim);
|
|
65
|
-
font-size: var(--text-
|
|
69
|
+
font-size: var(--text-xs);
|
|
66
70
|
letter-spacing: 0;
|
|
67
|
-
text-transform:
|
|
71
|
+
text-transform: none;
|
|
68
72
|
}
|
|
69
73
|
|
|
70
74
|
/* Swatch — same token contract as the chart fill: set `--chart-color` (and,
|
|
@@ -202,6 +206,8 @@
|
|
|
202
206
|
}
|
|
203
207
|
|
|
204
208
|
.ui-legend--with-values .ui-legend__item {
|
|
209
|
+
min-inline-size: 0;
|
|
210
|
+
max-inline-size: 100%;
|
|
205
211
|
display: grid;
|
|
206
212
|
grid-column: 1 / -1;
|
|
207
213
|
grid-template-columns: subgrid;
|
|
@@ -242,6 +248,8 @@
|
|
|
242
248
|
|
|
243
249
|
.ui-legend__item.is-inactive .ui-legend__label,
|
|
244
250
|
.ui-legend__item[aria-pressed='false'] .ui-legend__label {
|
|
251
|
+
min-inline-size: 0;
|
|
252
|
+
overflow-wrap: anywhere;
|
|
245
253
|
text-decoration: line-through;
|
|
246
254
|
}
|
|
247
255
|
|