@ponchia/ui 0.6.6 → 0.6.7
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 +105 -6
- package/README.md +36 -23
- package/behaviors/carousel.d.ts.map +1 -1
- package/behaviors/carousel.js +3 -0
- package/behaviors/dialog.d.ts.map +1 -1
- package/behaviors/dialog.js +14 -8
- package/behaviors/forms.d.ts.map +1 -1
- package/behaviors/forms.js +11 -5
- package/behaviors/index.d.ts +2 -0
- package/behaviors/index.d.ts.map +1 -1
- package/behaviors/index.js +2 -0
- package/behaviors/internal.d.ts +2 -1
- package/behaviors/internal.d.ts.map +1 -1
- package/behaviors/internal.js +23 -3
- package/behaviors/legend.d.ts.map +1 -1
- package/behaviors/legend.js +41 -9
- package/behaviors/splitter.d.ts +26 -0
- package/behaviors/splitter.d.ts.map +1 -0
- package/behaviors/splitter.js +200 -0
- package/behaviors/table.js +3 -3
- package/behaviors/theme.js +2 -2
- package/classes/classes.json +230 -4
- package/classes/index.d.ts +49 -1
- package/classes/index.js +56 -1
- package/classes/vscode.css-custom-data.json +1 -1
- package/css/analytical.css +3 -1
- package/css/app.css +4 -4
- package/css/clamp.css +92 -0
- package/css/figure.css +102 -0
- package/css/highlights.css +50 -0
- package/css/interval.css +90 -0
- package/css/primitives.css +2 -3
- package/css/report-kit.css +38 -0
- package/css/report.css +23 -4
- package/css/sidenote.css +12 -2
- package/css/site.css +2 -1
- package/css/sources.css +5 -0
- package/css/state.css +120 -1
- package/css/table.css +4 -0
- package/css/tokens.css +9 -9
- package/css/workbench.css +101 -8
- package/dist/bronto.css +1 -1
- package/dist/css/analytical.css +1 -1
- package/dist/css/app.css +1 -1
- package/dist/css/clamp.css +1 -0
- package/dist/css/figure.css +1 -0
- package/dist/css/highlights.css +1 -0
- package/dist/css/interval.css +1 -0
- package/dist/css/primitives.css +1 -1
- package/dist/css/report-kit.css +1 -0
- package/dist/css/report.css +1 -1
- package/dist/css/sidenote.css +1 -1
- package/dist/css/site.css +1 -1
- package/dist/css/sources.css +1 -1
- package/dist/css/state.css +1 -1
- package/dist/css/table.css +1 -1
- package/dist/css/tokens.css +1 -1
- package/dist/css/workbench.css +1 -1
- package/docs/adr/0002-scope-and-2026-baseline.md +1 -1
- package/docs/architecture.md +67 -43
- package/docs/clamp.md +49 -0
- package/docs/contrast.md +34 -24
- package/docs/d2.md +37 -0
- package/docs/figure.md +71 -0
- package/docs/frontier-primitives.md +25 -24
- package/docs/highlights.md +52 -0
- package/docs/interop/tailwind.md +148 -0
- package/docs/interval.md +55 -0
- package/docs/legends.md +3 -2
- package/docs/mermaid.md +6 -0
- package/docs/migrations/0.2-to-0.3.md +80 -0
- package/docs/migrations/0.3-to-0.4.md +48 -0
- package/docs/migrations/0.4-to-0.5.md +96 -0
- package/docs/migrations/0.5-to-0.6.md +82 -0
- package/docs/package-contract.md +40 -2
- package/docs/reference.md +78 -5
- package/docs/reporting.md +113 -58
- package/docs/sidenote.md +7 -1
- package/docs/sources.md +1 -1
- package/docs/stability.md +5 -3
- package/docs/state.md +67 -10
- package/docs/theming.md +10 -2
- package/docs/usage.md +31 -11
- package/docs/workbench.md +59 -18
- package/llms.txt +80 -12
- package/package.json +66 -6
- package/qwik/index.d.ts +1 -0
- package/qwik/index.d.ts.map +1 -1
- package/qwik/index.js +26 -21
- package/react/index.d.ts +1 -0
- package/react/index.d.ts.map +1 -1
- package/react/index.js +4 -1
- package/schemas/report-claims.v1.schema.json +137 -0
- package/solid/index.d.ts +2 -0
- package/solid/index.d.ts.map +1 -1
- package/solid/index.js +3 -0
- package/svelte/index.d.ts +88 -0
- package/svelte/index.d.ts.map +1 -0
- package/svelte/index.js +166 -0
- package/tailwind.css +87 -0
- package/tokens/figma.variables.json +2241 -0
- package/tokens/index.js +1 -1
- package/tokens/index.json +2 -2
- package/tokens/resolved.json +3 -3
- package/tokens/tokens.dtcg.json +1 -1
- package/vue/index.d.ts +79 -0
- package/vue/index.d.ts.map +1 -0
- package/vue/index.js +197 -0
package/classes/index.js
CHANGED
|
@@ -346,6 +346,16 @@ export const cls = Object.freeze({
|
|
|
346
346
|
compare2up: 'ui-compare--2up',
|
|
347
347
|
compareCol: 'ui-compare__col',
|
|
348
348
|
compareHead: 'ui-compare__head',
|
|
349
|
+
// figure — analytical/report figure stage (css/figure.css)
|
|
350
|
+
figure: 'ui-figure',
|
|
351
|
+
figureCaption: 'ui-figure__caption',
|
|
352
|
+
figureBody: 'ui-figure__body',
|
|
353
|
+
figureBodyKeyRight: 'ui-figure__body--key-right',
|
|
354
|
+
figureStage: 'ui-figure__stage',
|
|
355
|
+
figureMedia: 'ui-figure__media',
|
|
356
|
+
figureOverlay: 'ui-figure__overlay',
|
|
357
|
+
figureKey: 'ui-figure__key',
|
|
358
|
+
figureData: 'ui-figure__data',
|
|
349
359
|
// legend (standalone data keys — css/legend.css)
|
|
350
360
|
legend: 'ui-legend',
|
|
351
361
|
legendVertical: 'ui-legend--vertical',
|
|
@@ -483,6 +493,22 @@ export const cls = Object.freeze({
|
|
|
483
493
|
srcReviewed: 'ui-src--reviewed',
|
|
484
494
|
srcStale: 'ui-src--stale',
|
|
485
495
|
srcConflict: 'ui-src--conflict',
|
|
496
|
+
// interval — low/high uncertainty span (css/interval.css)
|
|
497
|
+
interval: 'ui-interval',
|
|
498
|
+
intervalTrack: 'ui-interval__track',
|
|
499
|
+
intervalRange: 'ui-interval__range',
|
|
500
|
+
intervalPoint: 'ui-interval__point',
|
|
501
|
+
intervalLabel: 'ui-interval__label',
|
|
502
|
+
intervalBounds: 'ui-interval__bounds',
|
|
503
|
+
// clamp — bounded excerpt + reveal (css/clamp.css)
|
|
504
|
+
clamp: 'ui-clamp',
|
|
505
|
+
clampBody: 'ui-clamp__body',
|
|
506
|
+
clampToggle: 'ui-clamp__toggle',
|
|
507
|
+
clampControl: 'ui-clamp__control',
|
|
508
|
+
clampMore: 'ui-clamp__more',
|
|
509
|
+
clampLess: 'ui-clamp__less',
|
|
510
|
+
// highlights — CSS Custom Highlight API paint host (css/highlights.css)
|
|
511
|
+
highlights: 'ui-highlights',
|
|
486
512
|
// diff — line/row change-review grammar (css/diff.css)
|
|
487
513
|
diff: 'ui-diff',
|
|
488
514
|
diffSplit: 'ui-diff--split',
|
|
@@ -558,6 +584,20 @@ export const cls = Object.freeze({
|
|
|
558
584
|
stateReviewed: 'ui-state--reviewed',
|
|
559
585
|
stateNeedsReview: 'ui-state--needs-review',
|
|
560
586
|
syncbar: 'ui-syncbar',
|
|
587
|
+
job: 'ui-job',
|
|
588
|
+
jobHead: 'ui-job__head',
|
|
589
|
+
jobTitle: 'ui-job__title',
|
|
590
|
+
jobMeta: 'ui-job__meta',
|
|
591
|
+
jobBody: 'ui-job__body',
|
|
592
|
+
jobProgress: 'ui-job__progress',
|
|
593
|
+
jobBar: 'ui-job__bar',
|
|
594
|
+
jobActions: 'ui-job__actions',
|
|
595
|
+
jobCompact: 'ui-job--compact',
|
|
596
|
+
jobQueued: 'ui-job--queued',
|
|
597
|
+
jobRunning: 'ui-job--running',
|
|
598
|
+
jobBlocked: 'ui-job--blocked',
|
|
599
|
+
jobFailed: 'ui-job--failed',
|
|
600
|
+
jobComplete: 'ui-job--complete',
|
|
561
601
|
// generated content / AI-trust surfaces (css/generated.css)
|
|
562
602
|
generated: 'ui-generated',
|
|
563
603
|
generatedLabel: 'ui-generated__label',
|
|
@@ -570,7 +610,7 @@ export const cls = Object.freeze({
|
|
|
570
610
|
toolCallName: 'ui-tool-call__name',
|
|
571
611
|
toolCallStatus: 'ui-tool-call__status',
|
|
572
612
|
toolCallBody: 'ui-tool-call__body',
|
|
573
|
-
// workbench — inspector / property / selection bar (css/workbench.css)
|
|
613
|
+
// workbench — inspector / property / selection bar / splitter (css/workbench.css)
|
|
574
614
|
inspector: 'ui-inspector',
|
|
575
615
|
inspectorHead: 'ui-inspector__head',
|
|
576
616
|
inspectorBody: 'ui-inspector__body',
|
|
@@ -580,6 +620,11 @@ export const cls = Object.freeze({
|
|
|
580
620
|
selectionbar: 'ui-selectionbar',
|
|
581
621
|
selectionbarCount: 'ui-selectionbar__count',
|
|
582
622
|
selectionbarActions: 'ui-selectionbar__actions',
|
|
623
|
+
splitter: 'ui-splitter',
|
|
624
|
+
splitterVertical: 'ui-splitter--vertical',
|
|
625
|
+
splitterHorizontal: 'ui-splitter--horizontal',
|
|
626
|
+
splitterPane: 'ui-splitter__pane',
|
|
627
|
+
splitterHandle: 'ui-splitter__handle',
|
|
583
628
|
// command palette shell (css/command.css + initCommand)
|
|
584
629
|
command: 'ui-command',
|
|
585
630
|
commandInput: 'ui-command__input',
|
|
@@ -673,6 +718,15 @@ const stateTone = (state) =>
|
|
|
673
718
|
'needs-review': cls.stateNeedsReview,
|
|
674
719
|
})[state] || '';
|
|
675
720
|
|
|
721
|
+
const jobTone = (state) =>
|
|
722
|
+
({
|
|
723
|
+
queued: cls.jobQueued,
|
|
724
|
+
running: cls.jobRunning,
|
|
725
|
+
blocked: cls.jobBlocked,
|
|
726
|
+
failed: cls.jobFailed,
|
|
727
|
+
complete: cls.jobComplete,
|
|
728
|
+
})[state] || '';
|
|
729
|
+
|
|
676
730
|
// Trust-state → tone class, shared by the source/citation/provenance recipes.
|
|
677
731
|
// Object-literal lookup to match stateTone above (shorter, greppable, one idiom).
|
|
678
732
|
const srcTone = (state) =>
|
|
@@ -987,6 +1041,7 @@ export const ui = {
|
|
|
987
1041
|
tone === 'neg' && cls.bulletMeasureNeg,
|
|
988
1042
|
),
|
|
989
1043
|
state: ({ state, busy } = {}) => j(cls.state, stateTone(state), busy && cls.stateBusy),
|
|
1044
|
+
job: ({ state, compact } = {}) => j(cls.job, jobTone(state), compact && cls.jobCompact),
|
|
990
1045
|
originLabel: ({ ai } = {}) => j(cls.originLabel, ai && cls.originLabelAi),
|
|
991
1046
|
};
|
|
992
1047
|
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
},
|
|
40
40
|
{
|
|
41
41
|
"name": "--accent-strong",
|
|
42
|
-
"description": "Theme token. Light: `color-mix(in srgb, var(--accent) 83%, #000)` · Dark: `color-mix(in srgb, var(--accent)
|
|
42
|
+
"description": "Theme token. Light: `color-mix(in srgb, var(--accent) 83%, #000)` · Dark: `color-mix(in srgb, var(--accent) 80%, #fff)`"
|
|
43
43
|
},
|
|
44
44
|
{
|
|
45
45
|
"name": "--accent-text",
|
package/css/analytical.css
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* ==========================================================================
|
|
2
2
|
analytical — convenience roll-up of the opt-in analytical-primitive layers.
|
|
3
3
|
|
|
4
|
-
Import this one file instead of the
|
|
4
|
+
Import this one file instead of the nine leaves when you're building
|
|
5
5
|
analytical / generated-report UI:
|
|
6
6
|
|
|
7
7
|
@import '@ponchia/ui';
|
|
@@ -13,9 +13,11 @@
|
|
|
13
13
|
========================================================================== */
|
|
14
14
|
|
|
15
15
|
@import url('./annotations.css') layer(bronto);
|
|
16
|
+
@import url('./figure.css') layer(bronto);
|
|
16
17
|
@import url('./legend.css') layer(bronto);
|
|
17
18
|
@import url('./marks.css') layer(bronto);
|
|
18
19
|
@import url('./connectors.css') layer(bronto);
|
|
19
20
|
@import url('./spotlight.css') layer(bronto);
|
|
20
21
|
@import url('./crosshair.css') layer(bronto);
|
|
21
22
|
@import url('./selection.css') layer(bronto);
|
|
23
|
+
@import url('./highlights.css') layer(bronto);
|
package/css/app.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* ==========================================================================
|
|
2
|
-
app —
|
|
3
|
-
For admin
|
|
2
|
+
app — service shell (sidebar + topbar + panels + metrics)
|
|
3
|
+
For app, service, admin, and operator dashboards.
|
|
4
4
|
========================================================================== */
|
|
5
5
|
|
|
6
6
|
.ui-app-shell {
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
.ui-app-nav a[aria-current]:not([aria-current='false']) {
|
|
104
104
|
background: var(--accent-soft);
|
|
105
105
|
border-inline-start-color: var(--accent);
|
|
106
|
-
color: var(--
|
|
106
|
+
color: var(--text);
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
@media (pointer: coarse) {
|
|
@@ -257,7 +257,7 @@
|
|
|
257
257
|
/* --- Metric tiles ---
|
|
258
258
|
The metric primitive itself is shell-agnostic and now lives in
|
|
259
259
|
primitives.css as `.ui-stat` / `.ui-statgrid`; `.ui-app-metric*` and
|
|
260
|
-
`.ui-app-metrics` remain as permanent
|
|
260
|
+
`.ui-app-metrics` remain as permanent app-shell aliases (grouped on
|
|
261
261
|
the canonical rules there — identical output). Nothing app-specific
|
|
262
262
|
left to define here. */
|
|
263
263
|
|
package/css/clamp.css
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
clamp — opt-in bounded excerpt + reveal.
|
|
3
|
+
|
|
4
|
+
For source excerpts, claim basis, caveats, and evidence text that should
|
|
5
|
+
scan as a bounded block but remain reachable. Bronto owns the visual clamp
|
|
6
|
+
and optional CSS-only reveal affordance; the host owns content, IDs, and
|
|
7
|
+
whether truncation is appropriate. Not imported by core.css.
|
|
8
|
+
========================================================================== */
|
|
9
|
+
|
|
10
|
+
.ui-clamp {
|
|
11
|
+
--clamp-lines: 4;
|
|
12
|
+
|
|
13
|
+
display: grid;
|
|
14
|
+
gap: var(--space-2xs);
|
|
15
|
+
min-inline-size: 0;
|
|
16
|
+
position: relative;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.ui-clamp__body {
|
|
20
|
+
-webkit-box-orient: vertical;
|
|
21
|
+
-webkit-line-clamp: var(--clamp-lines);
|
|
22
|
+
display: -webkit-box;
|
|
23
|
+
line-clamp: var(--clamp-lines);
|
|
24
|
+
mask-image: linear-gradient(to bottom, #000 72%, transparent 100%);
|
|
25
|
+
overflow: hidden;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.ui-clamp:has(> .ui-clamp__toggle:checked) .ui-clamp__body {
|
|
29
|
+
-webkit-line-clamp: unset;
|
|
30
|
+
display: block;
|
|
31
|
+
line-clamp: none;
|
|
32
|
+
mask-image: none;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.ui-clamp__toggle {
|
|
36
|
+
block-size: 1px;
|
|
37
|
+
clip-path: inset(50%);
|
|
38
|
+
inline-size: 1px;
|
|
39
|
+
overflow: hidden;
|
|
40
|
+
position: absolute;
|
|
41
|
+
white-space: nowrap;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.ui-clamp__control {
|
|
45
|
+
color: var(--accent-text);
|
|
46
|
+
cursor: pointer;
|
|
47
|
+
font-family: var(--mono);
|
|
48
|
+
font-size: var(--text-2xs);
|
|
49
|
+
inline-size: max-content;
|
|
50
|
+
letter-spacing: var(--tracking-wide);
|
|
51
|
+
text-decoration: underline;
|
|
52
|
+
text-decoration-color: color-mix(in srgb, var(--accent) 55%, transparent);
|
|
53
|
+
text-underline-offset: 0.2rem;
|
|
54
|
+
text-transform: uppercase;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.ui-clamp__toggle:focus-visible + .ui-clamp__body + .ui-clamp__control {
|
|
58
|
+
outline: 2px solid var(--focus-ring);
|
|
59
|
+
outline-offset: 2px;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.ui-clamp__less {
|
|
63
|
+
display: none;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.ui-clamp:has(> .ui-clamp__toggle:checked) .ui-clamp__more {
|
|
67
|
+
display: none;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.ui-clamp:has(> .ui-clamp__toggle:checked) .ui-clamp__less {
|
|
71
|
+
display: inline;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@media (hover: hover) {
|
|
75
|
+
.ui-clamp__control:hover {
|
|
76
|
+
text-decoration-color: currentColor;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@media print {
|
|
81
|
+
.ui-clamp__body {
|
|
82
|
+
-webkit-line-clamp: unset;
|
|
83
|
+
display: block;
|
|
84
|
+
line-clamp: none;
|
|
85
|
+
mask-image: none;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.ui-clamp__toggle,
|
|
89
|
+
.ui-clamp__control {
|
|
90
|
+
display: none;
|
|
91
|
+
}
|
|
92
|
+
}
|
package/css/figure.css
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
figure — opt-in analytical/report figure stage.
|
|
3
|
+
|
|
4
|
+
A frame for chart/diagram/media evidence: caption, stable stage, optional
|
|
5
|
+
overlay, key, and fallback data. Bronto owns only the layout grammar. The
|
|
6
|
+
host still owns data, scales, chart rendering, annotation content, and the
|
|
7
|
+
fallback table. Not imported by core.css.
|
|
8
|
+
========================================================================== */
|
|
9
|
+
|
|
10
|
+
.ui-figure {
|
|
11
|
+
display: grid;
|
|
12
|
+
gap: var(--space-sm);
|
|
13
|
+
margin: 0;
|
|
14
|
+
min-inline-size: 0;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.ui-figure > *,
|
|
18
|
+
.ui-figure__body > *,
|
|
19
|
+
.ui-figure__stage > * {
|
|
20
|
+
min-inline-size: 0;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.ui-figure__caption {
|
|
24
|
+
color: var(--text-dim);
|
|
25
|
+
font-family: var(--mono);
|
|
26
|
+
font-size: var(--text-2xs);
|
|
27
|
+
letter-spacing: 0;
|
|
28
|
+
line-height: 1.5;
|
|
29
|
+
text-transform: uppercase;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.ui-figure__body {
|
|
33
|
+
align-items: start;
|
|
34
|
+
display: grid;
|
|
35
|
+
gap: var(--space-sm);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.ui-figure__body--key-right {
|
|
39
|
+
grid-template-columns: minmax(0, 1fr) minmax(min(100%, 10rem), var(--figure-key-width, 14rem));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.ui-figure__stage {
|
|
43
|
+
--figure-max-inline: 42rem;
|
|
44
|
+
--figure-min-block: 0px;
|
|
45
|
+
|
|
46
|
+
display: grid;
|
|
47
|
+
inline-size: min(100%, var(--figure-max-inline));
|
|
48
|
+
margin-inline: auto;
|
|
49
|
+
min-block-size: var(--figure-min-block);
|
|
50
|
+
place-items: center;
|
|
51
|
+
position: relative;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.ui-figure__media {
|
|
55
|
+
display: block;
|
|
56
|
+
inline-size: 100%;
|
|
57
|
+
max-inline-size: 100%;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.ui-figure__stage > :is(canvas, img, picture, svg):not(.ui-figure__overlay) {
|
|
61
|
+
display: block;
|
|
62
|
+
max-inline-size: 100%;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.ui-figure__overlay {
|
|
66
|
+
block-size: 100%;
|
|
67
|
+
inline-size: 100%;
|
|
68
|
+
inset: 0;
|
|
69
|
+
overflow: visible;
|
|
70
|
+
pointer-events: none;
|
|
71
|
+
position: absolute;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.ui-figure__key,
|
|
75
|
+
.ui-figure__data {
|
|
76
|
+
display: grid;
|
|
77
|
+
gap: var(--space-xs);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.ui-figure__data {
|
|
81
|
+
margin-block-start: var(--space-xs);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@media (max-width: 44rem) {
|
|
85
|
+
.ui-figure__body--key-right {
|
|
86
|
+
grid-template-columns: 1fr;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
@media print {
|
|
91
|
+
.ui-figure {
|
|
92
|
+
break-inside: avoid;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.ui-figure__body {
|
|
96
|
+
display: block;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.ui-figure__body > * + * {
|
|
100
|
+
margin-block-start: var(--space-sm);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
highlights — opt-in CSS Custom Highlight API paint.
|
|
3
|
+
|
|
4
|
+
Named text ranges for cited evidence, search hits, and current match. The
|
|
5
|
+
HOST creates Range objects and registers Highlight instances in CSS.highlights
|
|
6
|
+
under the documented names. Bronto only paints the registered ranges. Not
|
|
7
|
+
imported by core.css.
|
|
8
|
+
========================================================================== */
|
|
9
|
+
|
|
10
|
+
.ui-highlights {
|
|
11
|
+
--highlight-evidence: var(--accent-soft);
|
|
12
|
+
--highlight-search: var(--warning-soft);
|
|
13
|
+
--highlight-current: color-mix(in srgb, var(--accent) 22%, transparent);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.ui-highlights::highlight(bronto-evidence) {
|
|
17
|
+
background-color: var(--highlight-evidence);
|
|
18
|
+
color: inherit;
|
|
19
|
+
text-decoration-color: var(--accent);
|
|
20
|
+
text-decoration-line: underline;
|
|
21
|
+
text-decoration-thickness: 0.1em;
|
|
22
|
+
text-underline-offset: 0.18em;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.ui-highlights::highlight(bronto-search) {
|
|
26
|
+
background-color: var(--highlight-search);
|
|
27
|
+
color: inherit;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.ui-highlights::highlight(bronto-current) {
|
|
31
|
+
background-color: var(--highlight-current);
|
|
32
|
+
color: var(--text);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@media (forced-colors: active) {
|
|
36
|
+
.ui-highlights::highlight(bronto-evidence),
|
|
37
|
+
.ui-highlights::highlight(bronto-search),
|
|
38
|
+
.ui-highlights::highlight(bronto-current) {
|
|
39
|
+
background-color: Highlight;
|
|
40
|
+
color: HighlightText;
|
|
41
|
+
text-decoration-color: HighlightText;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@media print {
|
|
46
|
+
.ui-highlights {
|
|
47
|
+
-webkit-print-color-adjust: exact;
|
|
48
|
+
print-color-adjust: exact;
|
|
49
|
+
}
|
|
50
|
+
}
|
package/css/interval.css
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
interval — opt-in low/high uncertainty span.
|
|
3
|
+
|
|
4
|
+
A compact report primitive for "the value is somewhere in this range" —
|
|
5
|
+
confidence intervals, estimates, budget windows, and measured uncertainty.
|
|
6
|
+
Boundary: the HOST normalises `--lo`, `--hi`, and optional `--v` to 0..1 and
|
|
7
|
+
writes the accessible label. Bronto only paints geometry. Not imported by
|
|
8
|
+
core.css.
|
|
9
|
+
========================================================================== */
|
|
10
|
+
|
|
11
|
+
.ui-interval {
|
|
12
|
+
--lo: 0;
|
|
13
|
+
--hi: 1;
|
|
14
|
+
|
|
15
|
+
display: grid;
|
|
16
|
+
gap: 0.35rem;
|
|
17
|
+
inline-size: 100%;
|
|
18
|
+
min-inline-size: 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.ui-interval__track {
|
|
22
|
+
background: var(--surface-4);
|
|
23
|
+
block-size: 0.7rem;
|
|
24
|
+
border: 1px solid var(--line);
|
|
25
|
+
border-radius: var(--radius-pill);
|
|
26
|
+
min-inline-size: 8rem;
|
|
27
|
+
position: relative;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.ui-interval__range {
|
|
31
|
+
background: color-mix(in srgb, var(--accent) 26%, transparent);
|
|
32
|
+
border: 1px solid color-mix(in srgb, var(--accent) 58%, var(--line));
|
|
33
|
+
border-radius: var(--radius-pill);
|
|
34
|
+
inline-size: max(2px, calc((var(--hi) - var(--lo)) * 100%));
|
|
35
|
+
inset-block: 18%;
|
|
36
|
+
inset-inline-start: calc(var(--lo) * 100%);
|
|
37
|
+
position: absolute;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.ui-interval__point {
|
|
41
|
+
background: var(--text);
|
|
42
|
+
border: 2px solid var(--panel);
|
|
43
|
+
border-radius: 50%;
|
|
44
|
+
block-size: 0.72rem;
|
|
45
|
+
box-shadow: 0 0 0 1px var(--line-strong);
|
|
46
|
+
inline-size: 0.72rem;
|
|
47
|
+
inset-block-start: 50%;
|
|
48
|
+
inset-inline-start: calc(var(--v, var(--lo)) * 100%);
|
|
49
|
+
position: absolute;
|
|
50
|
+
transform: translate(-50%, -50%);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.ui-interval__label,
|
|
54
|
+
.ui-interval__bounds {
|
|
55
|
+
color: var(--text-dim);
|
|
56
|
+
font-family: var(--mono);
|
|
57
|
+
font-size: var(--text-2xs);
|
|
58
|
+
letter-spacing: 0;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.ui-interval__label {
|
|
62
|
+
color: var(--text-soft);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.ui-interval__bounds {
|
|
66
|
+
display: flex;
|
|
67
|
+
gap: var(--space-sm);
|
|
68
|
+
justify-content: space-between;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@media (forced-colors: active) {
|
|
72
|
+
.ui-interval__track,
|
|
73
|
+
.ui-interval__range,
|
|
74
|
+
.ui-interval__point {
|
|
75
|
+
border-color: CanvasText;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.ui-interval__range,
|
|
79
|
+
.ui-interval__point {
|
|
80
|
+
background: CanvasText;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@media print {
|
|
85
|
+
.ui-interval__range,
|
|
86
|
+
.ui-interval__point {
|
|
87
|
+
-webkit-print-color-adjust: exact;
|
|
88
|
+
print-color-adjust: exact;
|
|
89
|
+
}
|
|
90
|
+
}
|
package/css/primitives.css
CHANGED
|
@@ -569,9 +569,8 @@
|
|
|
569
569
|
}
|
|
570
570
|
|
|
571
571
|
.ui-chip--accent {
|
|
572
|
-
/*
|
|
573
|
-
|
|
574
|
-
color: var(--accent-text);
|
|
572
|
+
/* Tone rides the border + hover tint; text stays neutral-readable. */
|
|
573
|
+
color: var(--text-soft);
|
|
575
574
|
border-color: var(--accent);
|
|
576
575
|
}
|
|
577
576
|
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/* ==========================================================================
|
|
2
|
+
report-kit — convenience roll-up for static/PDF report consumers.
|
|
3
|
+
|
|
4
|
+
Import the default bundle first, then this opt-in kit:
|
|
5
|
+
|
|
6
|
+
@import '@ponchia/ui';
|
|
7
|
+
@import '@ponchia/ui/css/report-kit.css';
|
|
8
|
+
|
|
9
|
+
This file deliberately excludes app workbench/command surfaces. Reports can
|
|
10
|
+
still import narrower leaves one by one; this roll-up is the no-build,
|
|
11
|
+
copy-paste path for complete static reports.
|
|
12
|
+
========================================================================== */
|
|
13
|
+
|
|
14
|
+
@import url('./report.css') layer(bronto);
|
|
15
|
+
@import url('./dataviz.css') layer(bronto);
|
|
16
|
+
@import url('./figure.css') layer(bronto);
|
|
17
|
+
@import url('./annotations.css') layer(bronto);
|
|
18
|
+
@import url('./legend.css') layer(bronto);
|
|
19
|
+
@import url('./marks.css') layer(bronto);
|
|
20
|
+
@import url('./connectors.css') layer(bronto);
|
|
21
|
+
@import url('./spotlight.css') layer(bronto);
|
|
22
|
+
@import url('./crosshair.css') layer(bronto);
|
|
23
|
+
@import url('./selection.css') layer(bronto);
|
|
24
|
+
@import url('./sources.css') layer(bronto);
|
|
25
|
+
@import url('./generated.css') layer(bronto);
|
|
26
|
+
@import url('./state.css') layer(bronto);
|
|
27
|
+
@import url('./interval.css') layer(bronto);
|
|
28
|
+
@import url('./clamp.css') layer(bronto);
|
|
29
|
+
@import url('./highlights.css') layer(bronto);
|
|
30
|
+
@import url('./diff.css') layer(bronto);
|
|
31
|
+
@import url('./code.css') layer(bronto);
|
|
32
|
+
@import url('./spark.css') layer(bronto);
|
|
33
|
+
@import url('./bullet.css') layer(bronto);
|
|
34
|
+
@import url('./sidenote.css') layer(bronto);
|
|
35
|
+
@import url('./textref.css') layer(bronto);
|
|
36
|
+
@import url('./term.css') layer(bronto);
|
|
37
|
+
@import url('./toc.css') layer(bronto);
|
|
38
|
+
@import url('./tree.css') layer(bronto);
|
package/css/report.css
CHANGED
|
@@ -274,7 +274,7 @@
|
|
|
274
274
|
|
|
275
275
|
.ui-report__finding-title {
|
|
276
276
|
color: var(--text);
|
|
277
|
-
font-size: var(--text-
|
|
277
|
+
font-size: var(--text-base);
|
|
278
278
|
font-weight: 650;
|
|
279
279
|
line-height: 1.25;
|
|
280
280
|
}
|
|
@@ -480,7 +480,7 @@
|
|
|
480
480
|
|
|
481
481
|
.ui-evidence-item__value {
|
|
482
482
|
color: var(--text);
|
|
483
|
-
font-size: var(--text-
|
|
483
|
+
font-size: var(--text-base);
|
|
484
484
|
font-weight: 650;
|
|
485
485
|
}
|
|
486
486
|
|
|
@@ -510,13 +510,20 @@
|
|
|
510
510
|
padding-block: var(--space-sm);
|
|
511
511
|
}
|
|
512
512
|
|
|
513
|
+
.ui-report__action > :not(.ui-report__action-status) {
|
|
514
|
+
grid-column: 1;
|
|
515
|
+
}
|
|
516
|
+
|
|
513
517
|
.ui-report__action-status {
|
|
514
|
-
align-self: start;
|
|
515
518
|
color: var(--text-dim);
|
|
516
519
|
font-family: var(--mono);
|
|
517
520
|
font-size: var(--text-2xs);
|
|
521
|
+
grid-column: 2;
|
|
522
|
+
grid-row: 1;
|
|
518
523
|
letter-spacing: var(--tracking-wide);
|
|
524
|
+
place-self: start end;
|
|
519
525
|
text-transform: uppercase;
|
|
526
|
+
white-space: nowrap;
|
|
520
527
|
}
|
|
521
528
|
|
|
522
529
|
.ui-report__action-title,
|
|
@@ -556,6 +563,12 @@
|
|
|
556
563
|
.ui-report__action {
|
|
557
564
|
grid-template-columns: 1fr;
|
|
558
565
|
}
|
|
566
|
+
|
|
567
|
+
.ui-report__action-status {
|
|
568
|
+
grid-column: 1;
|
|
569
|
+
grid-row: auto;
|
|
570
|
+
place-self: auto start;
|
|
571
|
+
}
|
|
559
572
|
}
|
|
560
573
|
|
|
561
574
|
.ui-report__sources,
|
|
@@ -720,6 +733,9 @@
|
|
|
720
733
|
margin-block-start: var(--space-sm);
|
|
721
734
|
}
|
|
722
735
|
|
|
736
|
+
/* Stat tiles and table rows are guarded at the item level (the tile / the
|
|
737
|
+
row), not the container — a long statgrid or table may legitimately span
|
|
738
|
+
pages, but a sliced tile or row is unreadable. */
|
|
723
739
|
.ui-report__cover,
|
|
724
740
|
.ui-report__head,
|
|
725
741
|
.ui-report__decision,
|
|
@@ -730,7 +746,10 @@
|
|
|
730
746
|
.ui-report__toc,
|
|
731
747
|
.ui-claim,
|
|
732
748
|
.ui-evidence-item,
|
|
733
|
-
.ui-report__action
|
|
749
|
+
.ui-report__action,
|
|
750
|
+
.ui-stat,
|
|
751
|
+
.ui-statgrid > *,
|
|
752
|
+
tr {
|
|
734
753
|
break-inside: avoid;
|
|
735
754
|
}
|
|
736
755
|
|
package/css/sidenote.css
CHANGED
|
@@ -14,11 +14,21 @@
|
|
|
14
14
|
same breakpoint. Place each note in the DOM right after its `.ui-sidenote__ref`.
|
|
15
15
|
========================================================================== */
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
/* The two knobs are ROOT-scoped on purpose: the documented host contract has
|
|
18
|
+
the CONTAINER reserve the gutter with
|
|
19
|
+
`padding-inline-end: calc(var(--sidenote-width) + var(--sidenote-gap))`,
|
|
20
|
+
and custom properties do not flow upward — declared only on the notes,
|
|
21
|
+
that calc is invalid on any ancestor and silently resolves to NO gutter
|
|
22
|
+
(the floated notes then spill past the page edge). Root scope makes the
|
|
23
|
+
documented calc work anywhere, and overriding either var on the container
|
|
24
|
+
re-sizes the notes and the gutter together. */
|
|
25
|
+
:root {
|
|
19
26
|
--sidenote-width: 12rem;
|
|
20
27
|
--sidenote-gap: 2rem;
|
|
28
|
+
}
|
|
21
29
|
|
|
30
|
+
.ui-sidenote,
|
|
31
|
+
.ui-marginnote {
|
|
22
32
|
border-inline-start: 2px solid var(--line);
|
|
23
33
|
color: var(--text-dim);
|
|
24
34
|
display: block;
|
package/css/site.css
CHANGED
|
@@ -318,10 +318,11 @@
|
|
|
318
318
|
padding: 0.28rem 0.6rem;
|
|
319
319
|
}
|
|
320
320
|
|
|
321
|
+
/* Tone rides the tint + border; text stays neutral-readable. */
|
|
321
322
|
.ui-tag--accent {
|
|
322
323
|
background: var(--accent-soft);
|
|
323
324
|
border-color: color-mix(in srgb, var(--accent) 42%, var(--line));
|
|
324
|
-
color: var(--
|
|
325
|
+
color: var(--text-soft);
|
|
325
326
|
}
|
|
326
327
|
|
|
327
328
|
/* --- Meta row — date · author · read-time, dot-separated --- */
|