@ponchia/ui 0.10.0 → 0.12.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.
Files changed (62) hide show
  1. package/CHANGELOG.md +84 -0
  2. package/MIGRATIONS.json +52 -9
  3. package/README.md +3 -3
  4. package/behaviors/forms.d.ts +1 -1
  5. package/behaviors/internal.d.ts +1 -1
  6. package/classes/classes.json +31 -2
  7. package/classes/index.d.ts +12 -0
  8. package/classes/index.js +13 -0
  9. package/css/annotations.css +2 -2
  10. package/css/app.css +3 -1
  11. package/css/command.css +4 -4
  12. package/css/dataviz.css +117 -64
  13. package/css/discussion.css +150 -0
  14. package/css/figure.css +6 -4
  15. package/css/generated.css +19 -12
  16. package/css/legend.css +14 -7
  17. package/css/report.css +25 -11
  18. package/css/sources.css +1 -1
  19. package/dist/bronto.css +1 -1
  20. package/dist/css/analytical.css +1 -1
  21. package/dist/css/annotations.css +1 -1
  22. package/dist/css/app.css +1 -1
  23. package/dist/css/command.css +1 -1
  24. package/dist/css/dataviz.css +1 -1
  25. package/dist/css/discussion.css +1 -0
  26. package/dist/css/figure.css +1 -1
  27. package/dist/css/generated.css +1 -1
  28. package/dist/css/legend.css +1 -1
  29. package/dist/css/report-kit.css +1 -1
  30. package/dist/css/report.css +1 -1
  31. package/dist/css/sources.css +1 -1
  32. package/docs/adr/0001-color-system.md +29 -0
  33. package/docs/architecture.md +1 -1
  34. package/docs/compositions.md +23 -2
  35. package/docs/contrast.md +24 -24
  36. package/docs/discussion.md +64 -0
  37. package/docs/figure.md +10 -1
  38. package/docs/frontier-primitives.md +5 -0
  39. package/docs/mermaid.md +1 -1
  40. package/docs/migrations/0.10-to-0.11.md +61 -0
  41. package/docs/migrations/0.11-to-0.12.md +47 -0
  42. package/docs/package-contract.md +14 -2
  43. package/docs/reference.md +18 -1
  44. package/docs/renderer.md +100 -0
  45. package/docs/reporting.md +9 -9
  46. package/docs/stability.md +4 -2
  47. package/docs/theming.md +29 -19
  48. package/docs/usage.md +12 -8
  49. package/docs/vega.md +24 -23
  50. package/llms.txt +8 -4
  51. package/package.json +18 -3
  52. package/renderer/index.d.ts +203 -0
  53. package/renderer/index.d.ts.map +1 -0
  54. package/renderer/index.js +650 -0
  55. package/tokens/charts.d.ts +16 -10
  56. package/tokens/charts.js +65 -49
  57. package/tokens/charts.json +77 -29
  58. package/tokens/mermaid.js +56 -56
  59. package/tokens/mermaid.json +56 -56
  60. package/tokens/vega.d.ts +3 -3
  61. package/tokens/vega.js +111 -72
  62. package/tokens/vega.json +198 -126
@@ -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(--mono);
26
- font-size: var(--text-2xs);
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: uppercase;
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
- @media (max-width: 44rem) {
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(--mono);
29
- font-size: var(--text-2xs);
28
+ font-family: var(--sans);
29
+ font-size: var(--text-xs);
30
30
  gap: 0.4rem;
31
- letter-spacing: var(--tracking-wide);
32
- text-transform: uppercase;
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(--mono);
43
- font-size: var(--text-2xs);
42
+ font-family: var(--sans);
43
+ font-size: var(--text-xs);
44
44
  gap: 0.35rem;
45
- letter-spacing: var(--tracking-wide);
45
+ letter-spacing: 0;
46
46
  padding: 0.08rem 0.55rem;
47
- text-transform: uppercase;
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(--mono);
65
- font-size: var(--text-2xs);
66
- letter-spacing: var(--tracking-wide);
67
- text-transform: uppercase;
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(--mono);
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-2xs);
40
+ font-size: var(--text-xs);
41
41
  letter-spacing: 0;
42
42
  margin: 0;
43
- text-transform: uppercase;
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-2xs);
69
+ font-size: var(--text-xs);
66
70
  letter-spacing: 0;
67
- text-transform: uppercase;
71
+ text-transform: none;
68
72
  }
69
73
 
70
74
  /* Swatch — same token contract as the chart fill: set `--chart-color` (and,
@@ -154,8 +158,7 @@
154
158
  var(--chart-seq-2),
155
159
  var(--chart-seq-3),
156
160
  var(--chart-seq-4),
157
- var(--chart-seq-5),
158
- var(--chart-seq-6)
161
+ var(--chart-seq-5)
159
162
  );
160
163
  block-size: 0.7rem;
161
164
  border: 1px solid var(--line);
@@ -202,6 +205,8 @@
202
205
  }
203
206
 
204
207
  .ui-legend--with-values .ui-legend__item {
208
+ min-inline-size: 0;
209
+ max-inline-size: 100%;
205
210
  display: grid;
206
211
  grid-column: 1 / -1;
207
212
  grid-template-columns: subgrid;
@@ -242,6 +247,8 @@
242
247
 
243
248
  .ui-legend__item.is-inactive .ui-legend__label,
244
249
  .ui-legend__item[aria-pressed='false'] .ui-legend__label {
250
+ min-inline-size: 0;
251
+ overflow-wrap: anywhere;
245
252
  text-decoration: line-through;
246
253
  }
247
254
 
package/css/report.css CHANGED
@@ -27,6 +27,7 @@
27
27
  .ui-report p,
28
28
  .ui-report__section > :is(ul, ol, blockquote) {
29
29
  max-inline-size: var(--report-measure);
30
+ overflow-wrap: anywhere;
30
31
  }
31
32
 
32
33
  .ui-report .ui-prose {
@@ -232,6 +233,7 @@ details.ui-report__toc:not([open]) > :not(summary) {
232
233
  }
233
234
 
234
235
  .ui-report__decision-grid {
236
+ container: bronto-decision / inline-size;
235
237
  border-block-start: 1px solid var(--line);
236
238
  display: grid;
237
239
  gap: 0;
@@ -260,6 +262,7 @@ details.ui-report__toc:not([open]) > :not(summary) {
260
262
  }
261
263
 
262
264
  .ui-report__decision-value {
265
+ overflow-wrap: anywhere;
263
266
  color: var(--text-soft);
264
267
  line-height: 1.5;
265
268
  }
@@ -519,6 +522,7 @@ details.ui-report__toc:not([open]) > :not(summary) {
519
522
  }
520
523
 
521
524
  .ui-report__actions {
525
+ container: bronto-actions / inline-size;
522
526
  border-block-start: 1px solid var(--line);
523
527
  display: grid;
524
528
  gap: 0;
@@ -546,7 +550,8 @@ details.ui-report__toc:not([open]) > :not(summary) {
546
550
  letter-spacing: 0;
547
551
  place-self: start end;
548
552
  text-transform: none;
549
- white-space: nowrap;
553
+ overflow-wrap: anywhere;
554
+ white-space: normal;
550
555
  }
551
556
 
552
557
  .ui-report__action-title,
@@ -581,8 +586,13 @@ details.ui-report__toc:not([open]) > :not(summary) {
581
586
  line-height: 1.5;
582
587
  }
583
588
 
584
- @media (max-width: 32rem) {
585
- .ui-report__decision-item,
589
+ @container bronto-decision (max-width: 32rem) {
590
+ .ui-report__decision-item {
591
+ grid-template-columns: minmax(0, 1fr);
592
+ }
593
+ }
594
+
595
+ @container bronto-actions (max-width: 32rem) {
586
596
  .ui-report__action {
587
597
  grid-template-columns: 1fr;
588
598
  }
@@ -611,7 +621,7 @@ details.ui-report__toc:not([open]) > :not(summary) {
611
621
  a single stack on a narrow screen via auto-fit, so two panels never
612
622
  overflow. `ui-compare__col` is one side, `ui-compare__head` labels it.
613
623
  `ui-compare--2up` pins exactly two equal columns for a hard before/after
614
- pairing (still collapsing to one column on a phone). */
624
+ pairing, with a 16rem reading floor per column in any parent. */
615
625
  .ui-compare {
616
626
  display: grid;
617
627
  gap: var(--space-md);
@@ -619,13 +629,12 @@ details.ui-report__toc:not([open]) > :not(summary) {
619
629
  }
620
630
 
621
631
  .ui-compare--2up {
622
- grid-template-columns: repeat(2, minmax(0, 1fr));
623
- }
624
-
625
- @media (max-width: 33rem) {
626
- .ui-compare--2up {
627
- grid-template-columns: 1fr;
628
- }
632
+ /* At most two columns, each at least 16rem unless the whole parent is narrower.
633
+ Intrinsic wrapping also works outside a report or named query container. */
634
+ grid-template-columns: repeat(
635
+ auto-fit,
636
+ minmax(min(100%, max(16rem, (100% - var(--space-md)) / 2)), 1fr)
637
+ );
629
638
  }
630
639
 
631
640
  .ui-compare__col {
@@ -687,6 +696,11 @@ details.ui-report__toc:not([open]) > :not(summary) {
687
696
  padding: 0;
688
697
  }
689
698
 
699
+ .ui-report__decision-grid,
700
+ .ui-report__actions {
701
+ container-type: normal;
702
+ }
703
+
690
704
  .ui-report__cover {
691
705
  min-block-size: auto;
692
706
  }
package/css/sources.css CHANGED
@@ -78,7 +78,7 @@
78
78
  .ui-citation {
79
79
  color: var(--accent-text);
80
80
  font-family: var(--mono);
81
- font-size: 0.72em;
81
+ font-size: max(0.72em, var(--text-2xs));
82
82
  font-weight: 600;
83
83
  text-decoration: none;
84
84
  vertical-align: super;