@ponchia/ui 0.4.1 → 0.6.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 (153) hide show
  1. package/CHANGELOG.md +552 -8
  2. package/MIGRATIONS.json +106 -0
  3. package/README.md +34 -8
  4. package/annotations/index.d.ts +402 -0
  5. package/annotations/index.d.ts.map +1 -0
  6. package/annotations/index.js +792 -0
  7. package/behaviors/carousel.js +198 -0
  8. package/behaviors/combobox.js +226 -0
  9. package/behaviors/command.js +190 -0
  10. package/behaviors/connectors.js +95 -0
  11. package/behaviors/crosshair.js +57 -0
  12. package/behaviors/dialog.js +74 -0
  13. package/behaviors/disclosure.js +26 -0
  14. package/behaviors/dismissible.js +25 -0
  15. package/behaviors/forms.js +186 -0
  16. package/behaviors/glyph.js +108 -0
  17. package/behaviors/index.d.ts +79 -0
  18. package/behaviors/index.js +18 -1409
  19. package/behaviors/internal.js +97 -0
  20. package/behaviors/legend.js +67 -0
  21. package/behaviors/menu.js +47 -0
  22. package/behaviors/popover.js +179 -0
  23. package/behaviors/spotlight.js +52 -0
  24. package/behaviors/table.js +136 -0
  25. package/behaviors/tabs.js +103 -0
  26. package/behaviors/theme.js +84 -0
  27. package/behaviors/toast.js +164 -0
  28. package/classes/classes.json +1857 -0
  29. package/classes/index.d.ts +306 -13
  30. package/classes/index.js +339 -12
  31. package/classes/vscode.css-custom-data.json +12 -0
  32. package/connectors/index.d.ts +191 -0
  33. package/connectors/index.d.ts.map +1 -0
  34. package/connectors/index.js +275 -0
  35. package/css/analytical.css +21 -0
  36. package/css/annotations.css +292 -0
  37. package/css/app.css +43 -13
  38. package/css/base.css +15 -10
  39. package/css/command.css +97 -0
  40. package/css/connectors.css +110 -0
  41. package/css/content.css +7 -1
  42. package/css/crosshair.css +100 -0
  43. package/css/dataviz.css +5 -1
  44. package/css/disclosure.css +38 -6
  45. package/css/dots.css +57 -0
  46. package/css/feedback.css +111 -2
  47. package/css/fonts.css +11 -7
  48. package/css/forms.css +42 -1
  49. package/css/generated.css +117 -0
  50. package/css/legend.css +272 -0
  51. package/css/marks.css +174 -0
  52. package/css/motion.css +24 -44
  53. package/css/navigation.css +7 -0
  54. package/css/overlay.css +31 -1
  55. package/css/primitives.css +109 -5
  56. package/css/report.css +39 -81
  57. package/css/selection.css +46 -0
  58. package/css/site.css +16 -2
  59. package/css/sources.css +221 -0
  60. package/css/spotlight.css +104 -0
  61. package/css/state.css +121 -0
  62. package/css/tokens.css +60 -37
  63. package/css/workbench.css +83 -0
  64. package/dist/bronto.css +1 -1
  65. package/dist/css/analytical.css +1 -0
  66. package/dist/css/annotations.css +1 -0
  67. package/dist/css/app.css +1 -1
  68. package/dist/css/base.css +1 -1
  69. package/dist/css/command.css +1 -0
  70. package/dist/css/connectors.css +1 -0
  71. package/dist/css/content.css +1 -1
  72. package/dist/css/crosshair.css +1 -0
  73. package/dist/css/disclosure.css +1 -1
  74. package/dist/css/dots.css +1 -1
  75. package/dist/css/feedback.css +1 -1
  76. package/dist/css/fonts.css +1 -1
  77. package/dist/css/forms.css +1 -1
  78. package/dist/css/generated.css +1 -0
  79. package/dist/css/legend.css +1 -0
  80. package/dist/css/marks.css +1 -0
  81. package/dist/css/motion.css +1 -1
  82. package/dist/css/navigation.css +1 -1
  83. package/dist/css/overlay.css +1 -1
  84. package/dist/css/primitives.css +1 -1
  85. package/dist/css/report.css +1 -1
  86. package/dist/css/selection.css +1 -0
  87. package/dist/css/site.css +1 -1
  88. package/dist/css/sources.css +1 -0
  89. package/dist/css/spotlight.css +1 -0
  90. package/dist/css/state.css +1 -0
  91. package/dist/css/tokens.css +1 -1
  92. package/dist/css/workbench.css +1 -0
  93. package/docs/adr/0003-theme-model.md +7 -4
  94. package/docs/annotations.md +425 -0
  95. package/docs/architecture.md +246 -0
  96. package/docs/command.md +95 -0
  97. package/docs/connectors.md +91 -0
  98. package/docs/contrast.md +116 -92
  99. package/docs/crosshair.md +63 -0
  100. package/docs/d2.md +195 -0
  101. package/docs/generated.md +91 -0
  102. package/docs/legends.md +184 -0
  103. package/docs/marks.md +93 -0
  104. package/docs/mermaid.md +152 -0
  105. package/docs/reference.md +385 -23
  106. package/docs/reporting.md +436 -63
  107. package/docs/selection.md +40 -0
  108. package/docs/sources.md +137 -0
  109. package/docs/spotlight.md +78 -0
  110. package/docs/stability.md +24 -2
  111. package/docs/state.md +85 -0
  112. package/docs/usage.md +123 -4
  113. package/docs/vega.md +225 -0
  114. package/docs/workbench.md +78 -0
  115. package/fonts/doto-400.woff2 +0 -0
  116. package/fonts/doto-500.woff2 +0 -0
  117. package/fonts/doto-600.woff2 +0 -0
  118. package/fonts/doto-700.woff2 +0 -0
  119. package/fonts/doto-800.woff2 +0 -0
  120. package/fonts/doto-900.woff2 +0 -0
  121. package/glyphs/glyphs.js +6 -4
  122. package/llms.txt +362 -14
  123. package/package.json +115 -12
  124. package/qwik/index.d.ts +42 -54
  125. package/qwik/index.d.ts.map +1 -0
  126. package/qwik/index.js +75 -3
  127. package/react/index.d.ts +39 -56
  128. package/react/index.d.ts.map +1 -0
  129. package/react/index.js +67 -3
  130. package/solid/index.d.ts +64 -56
  131. package/solid/index.d.ts.map +1 -0
  132. package/solid/index.js +70 -3
  133. package/tokens/d2.d.ts +38 -0
  134. package/tokens/d2.js +71 -0
  135. package/tokens/d2.json +43 -0
  136. package/tokens/index.d.ts +5 -5
  137. package/tokens/index.js +23 -5
  138. package/tokens/index.json +9 -0
  139. package/tokens/mermaid.d.ts +23 -0
  140. package/tokens/mermaid.js +181 -0
  141. package/tokens/mermaid.json +163 -0
  142. package/tokens/resolved.json +45 -1
  143. package/tokens/skins.js +3 -2
  144. package/tokens/tokens.dtcg.json +26 -0
  145. package/tokens/vega.d.ts +34 -0
  146. package/tokens/vega.js +155 -0
  147. package/tokens/vega.json +179 -0
  148. package/fonts/doto-400.ttf +0 -0
  149. package/fonts/doto-500.ttf +0 -0
  150. package/fonts/doto-600.ttf +0 -0
  151. package/fonts/doto-700.ttf +0 -0
  152. package/fonts/doto-800.ttf +0 -0
  153. package/fonts/doto-900.ttf +0 -0
package/docs/reference.md CHANGED
@@ -9,8 +9,11 @@ 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
- - 303 classes across 121 component groups
12
+ - 477 classes across 149 component groups
13
13
  - Import the typed registry: `import { cls, ui, cx } from '@ponchia/ui/classes'`
14
+ - Validate markup as data (no JS/TS): `@ponchia/ui/classes.json` — the same
15
+ vocabulary as language-neutral JSON (`groups`, `classes`, `states`,
16
+ `customProperties`), for an external linter or non-JS host
14
17
  - Tokens as data: `import { cssVars, tokens, themeColor } from '@ponchia/ui/tokens'`
15
18
 
16
19
  ## Classes
@@ -66,6 +69,46 @@ each one matches a real selector in the stylesheet.
66
69
  | --- | --- | --- |
67
70
  | `cls.animateMatrix` | `ui-animate-matrix` | base |
68
71
 
72
+ ### `.ui-annotation`
73
+
74
+ | Registry key | Class | Kind |
75
+ | --- | --- | --- |
76
+ | `cls.annotation` | `ui-annotation` | base |
77
+ | `cls.annotationBadge` | `ui-annotation__badge` | part |
78
+ | `cls.annotationConnector` | `ui-annotation__connector` | part |
79
+ | `cls.annotationConnectorEnd` | `ui-annotation__connector-end` | part |
80
+ | `cls.annotationLabel` | `ui-annotation__label` | part |
81
+ | `cls.annotationNote` | `ui-annotation__note` | part |
82
+ | `cls.annotationNoteLine` | `ui-annotation__note-line` | part |
83
+ | `cls.annotationSubject` | `ui-annotation__subject` | part |
84
+ | `cls.annotationTitle` | `ui-annotation__title` | part |
85
+ | `cls.annotationAccent` | `ui-annotation--accent` | modifier |
86
+ | `cls.annotationAxis` | `ui-annotation--axis` | modifier |
87
+ | `cls.annotationBadgeVariant` | `ui-annotation--badge` | modifier |
88
+ | `cls.annotationBand` | `ui-annotation--band` | modifier |
89
+ | `cls.annotationBracket` | `ui-annotation--bracket` | modifier |
90
+ | `cls.annotationCallout` | `ui-annotation--callout` | modifier |
91
+ | `cls.annotationCircle` | `ui-annotation--circle` | modifier |
92
+ | `cls.annotationCluster` | `ui-annotation--cluster` | modifier |
93
+ | `cls.annotationCompare` | `ui-annotation--compare` | modifier |
94
+ | `cls.annotationCurve` | `ui-annotation--curve` | modifier |
95
+ | `cls.annotationDanger` | `ui-annotation--danger` | modifier |
96
+ | `cls.annotationDraw` | `ui-annotation--draw` | modifier |
97
+ | `cls.annotationElbow` | `ui-annotation--elbow` | modifier |
98
+ | `cls.annotationEvidence` | `ui-annotation--evidence` | modifier |
99
+ | `cls.annotationFocus` | `ui-annotation--focus` | modifier |
100
+ | `cls.annotationInfo` | `ui-annotation--info` | modifier |
101
+ | `cls.annotationLabelVariant` | `ui-annotation--label` | modifier |
102
+ | `cls.annotationMuted` | `ui-annotation--muted` | modifier |
103
+ | `cls.annotationPulse` | `ui-annotation--pulse` | modifier |
104
+ | `cls.annotationRect` | `ui-annotation--rect` | modifier |
105
+ | `cls.annotationReveal` | `ui-annotation--reveal` | modifier |
106
+ | `cls.annotationSlope` | `ui-annotation--slope` | modifier |
107
+ | `cls.annotationSuccess` | `ui-annotation--success` | modifier |
108
+ | `cls.annotationThreshold` | `ui-annotation--threshold` | modifier |
109
+ | `cls.annotationTimeline` | `ui-annotation--timeline` | modifier |
110
+ | `cls.annotationWarning` | `ui-annotation--warning` | modifier |
111
+
69
112
  ### `.ui-app-content`
70
113
 
71
114
  | Registry key | Class | Kind |
@@ -122,7 +165,6 @@ each one matches a real selector in the stylesheet.
122
165
  | `cls.appRailAccount` | `ui-app-rail__account` | part |
123
166
  | `cls.appRailBrand` | `ui-app-rail__brand` | part |
124
167
  | `cls.appRailFoot` | `ui-app-rail__foot` | part |
125
- | `cls.appRailToggle` | `ui-app-rail__toggle` | part |
126
168
 
127
169
  ### `.ui-app-shell`
128
170
 
@@ -172,6 +214,18 @@ each one matches a real selector in the stylesheet.
172
214
  | `cls.badgeSuccess` | `ui-badge--success` | modifier |
173
215
  | `cls.badgeWarning` | `ui-badge--warning` | modifier |
174
216
 
217
+ ### `.ui-bracket-note`
218
+
219
+ | Registry key | Class | Kind |
220
+ | --- | --- | --- |
221
+ | `cls.bracketNote` | `ui-bracket-note` | base |
222
+ | `cls.bracketNoteLabel` | `ui-bracket-note__label` | part |
223
+ | `cls.bracketNoteAccent` | `ui-bracket-note--accent` | modifier |
224
+ | `cls.bracketNoteDanger` | `ui-bracket-note--danger` | modifier |
225
+ | `cls.bracketNoteInfo` | `ui-bracket-note--info` | modifier |
226
+ | `cls.bracketNoteSuccess` | `ui-bracket-note--success` | modifier |
227
+ | `cls.bracketNoteWarning` | `ui-bracket-note--warning` | modifier |
228
+
175
229
  ### `.ui-breadcrumb`
176
230
 
177
231
  | Registry key | Class | Kind |
@@ -238,21 +292,6 @@ each one matches a real selector in the stylesheet.
238
292
  | --- | --- | --- |
239
293
  | `cls.center` | `ui-center` | base |
240
294
 
241
- ### `.ui-chart`
242
-
243
- | Registry key | Class | Kind |
244
- | --- | --- | --- |
245
- | `cls.chart` | `ui-chart` | base |
246
- | `cls.chartBar` | `ui-chart__bar` | part |
247
- | `cls.chartCaption` | `ui-chart__caption` | part |
248
- | `cls.chartFallback` | `ui-chart__fallback` | part |
249
- | `cls.chartFill` | `ui-chart__fill` | part |
250
- | `cls.chartLabel` | `ui-chart__label` | part |
251
- | `cls.chartLegend` | `ui-chart__legend` | part |
252
- | `cls.chartPlot` | `ui-chart__plot` | part |
253
- | `cls.chartSwatch` | `ui-chart__swatch` | part |
254
- | `cls.chartTrack` | `ui-chart__track` | part |
255
-
256
295
  ### `.ui-check`
257
296
 
258
297
  | Registry key | Class | Kind |
@@ -266,6 +305,13 @@ each one matches a real selector in the stylesheet.
266
305
  | `cls.chip` | `ui-chip` | base |
267
306
  | `cls.chipAccent` | `ui-chip--accent` | modifier |
268
307
 
308
+ ### `.ui-citation`
309
+
310
+ | Registry key | Class | Kind |
311
+ | --- | --- | --- |
312
+ | `cls.citation` | `ui-citation` | base |
313
+ | `cls.citationChip` | `ui-citation--chip` | modifier |
314
+
269
315
  ### `.ui-cluster`
270
316
 
271
317
  | Registry key | Class | Kind |
@@ -283,6 +329,44 @@ each one matches a real selector in the stylesheet.
283
329
  | `cls.comboboxList` | `ui-combobox__list` | part |
284
330
  | `cls.comboboxOption` | `ui-combobox__option` | part |
285
331
 
332
+ ### `.ui-command`
333
+
334
+ | Registry key | Class | Kind |
335
+ | --- | --- | --- |
336
+ | `cls.command` | `ui-command` | base |
337
+ | `cls.commandEmpty` | `ui-command__empty` | part |
338
+ | `cls.commandGroup` | `ui-command__group` | part |
339
+ | `cls.commandInput` | `ui-command__input` | part |
340
+ | `cls.commandItem` | `ui-command__item` | part |
341
+ | `cls.commandList` | `ui-command__list` | part |
342
+ | `cls.commandMeta` | `ui-command__meta` | part |
343
+ | `cls.commandShortcut` | `ui-command__shortcut` | part |
344
+
345
+ ### `.ui-compare`
346
+
347
+ | Registry key | Class | Kind |
348
+ | --- | --- | --- |
349
+ | `cls.compare` | `ui-compare` | base |
350
+ | `cls.compareCol` | `ui-compare__col` | part |
351
+ | `cls.compareHead` | `ui-compare__head` | part |
352
+ | `cls.compare2up` | `ui-compare--2up` | modifier |
353
+
354
+ ### `.ui-connector`
355
+
356
+ | Registry key | Class | Kind |
357
+ | --- | --- | --- |
358
+ | `cls.connector` | `ui-connector` | base |
359
+ | `cls.connectorEnd` | `ui-connector__end` | part |
360
+ | `cls.connectorPath` | `ui-connector__path` | part |
361
+ | `cls.connectorAccent` | `ui-connector--accent` | modifier |
362
+ | `cls.connectorDanger` | `ui-connector--danger` | modifier |
363
+ | `cls.connectorDashed` | `ui-connector--dashed` | modifier |
364
+ | `cls.connectorDraw` | `ui-connector--draw` | modifier |
365
+ | `cls.connectorInfo` | `ui-connector--info` | modifier |
366
+ | `cls.connectorMuted` | `ui-connector--muted` | modifier |
367
+ | `cls.connectorSuccess` | `ui-connector--success` | modifier |
368
+ | `cls.connectorWarning` | `ui-connector--warning` | modifier |
369
+
286
370
  ### `.ui-container`
287
371
 
288
372
  | Registry key | Class | Kind |
@@ -297,6 +381,27 @@ each one matches a real selector in the stylesheet.
297
381
  | --- | --- | --- |
298
382
  | `cls.cq` | `ui-cq` | base |
299
383
 
384
+ ### `.ui-crosshair`
385
+
386
+ | Registry key | Class | Kind |
387
+ | --- | --- | --- |
388
+ | `cls.crosshair` | `ui-crosshair` | base |
389
+ | `cls.crosshairBadge` | `ui-crosshair__badge` | part |
390
+ | `cls.crosshairLine` | `ui-crosshair__line` | part |
391
+ | `cls.crosshairLineX` | `ui-crosshair__line--x` | modifier |
392
+ | `cls.crosshairLineY` | `ui-crosshair__line--y` | modifier |
393
+ | `cls.crosshairMuted` | `ui-crosshair--muted` | modifier |
394
+
395
+ ### `.ui-delta`
396
+
397
+ | Registry key | Class | Kind |
398
+ | --- | --- | --- |
399
+ | `cls.delta` | `ui-delta` | base |
400
+ | `cls.deltaDown` | `ui-delta--down` | modifier |
401
+ | `cls.deltaFlat` | `ui-delta--flat` | modifier |
402
+ | `cls.deltaInvert` | `ui-delta--invert` | modifier |
403
+ | `cls.deltaUp` | `ui-delta--up` | modifier |
404
+
300
405
  ### `.ui-display`
301
406
 
302
407
  | Registry key | Class | Kind |
@@ -407,6 +512,13 @@ each one matches a real selector in the stylesheet.
407
512
  | --- | --- | --- |
408
513
  | `cls.file` | `ui-file` | base |
409
514
 
515
+ ### `.ui-generated`
516
+
517
+ | Registry key | Class | Kind |
518
+ | --- | --- | --- |
519
+ | `cls.generated` | `ui-generated` | base |
520
+ | `cls.generatedLabel` | `ui-generated__label` | part |
521
+
410
522
  ### `.ui-grid`
411
523
 
412
524
  | Registry key | Class | Kind |
@@ -447,6 +559,14 @@ each one matches a real selector in the stylesheet.
447
559
  | `cls.inputIconSlot` | `ui-input-icon__icon` | part |
448
560
  | `cls.inputIconEnd` | `ui-input-icon--end` | modifier |
449
561
 
562
+ ### `.ui-inspector`
563
+
564
+ | Registry key | Class | Kind |
565
+ | --- | --- | --- |
566
+ | `cls.inspector` | `ui-inspector` | base |
567
+ | `cls.inspectorBody` | `ui-inspector__body` | part |
568
+ | `cls.inspectorHead` | `ui-inspector__head` | part |
569
+
450
570
  ### `.ui-kbd`
451
571
 
452
572
  | Registry key | Class | Kind |
@@ -471,6 +591,39 @@ each one matches a real selector in the stylesheet.
471
591
  | --- | --- | --- |
472
592
  | `cls.label` | `ui-label` | base |
473
593
 
594
+ ### `.ui-legend`
595
+
596
+ | Registry key | Class | Kind |
597
+ | --- | --- | --- |
598
+ | `cls.legend` | `ui-legend` | base |
599
+ | `cls.legendCaption` | `ui-legend__caption` | part |
600
+ | `cls.legendItem` | `ui-legend__item` | part |
601
+ | `cls.legendLabel` | `ui-legend__label` | part |
602
+ | `cls.legendSwatch` | `ui-legend__swatch` | part |
603
+ | `cls.legendSwatch1` | `ui-legend__swatch--1` | modifier |
604
+ | `cls.legendSwatch2` | `ui-legend__swatch--2` | modifier |
605
+ | `cls.legendSwatch3` | `ui-legend__swatch--3` | modifier |
606
+ | `cls.legendSwatch4` | `ui-legend__swatch--4` | modifier |
607
+ | `cls.legendSwatch5` | `ui-legend__swatch--5` | modifier |
608
+ | `cls.legendSwatch6` | `ui-legend__swatch--6` | modifier |
609
+ | `cls.legendSwatch7` | `ui-legend__swatch--7` | modifier |
610
+ | `cls.legendSwatch8` | `ui-legend__swatch--8` | modifier |
611
+ | `cls.legendSwatchCircle` | `ui-legend__swatch--circle` | modifier |
612
+ | `cls.legendSwatchLine` | `ui-legend__swatch--line` | modifier |
613
+ | `cls.legendSymbol` | `ui-legend__symbol` | part |
614
+ | `cls.legendTick` | `ui-legend__tick` | part |
615
+ | `cls.legendTicks` | `ui-legend__ticks` | part |
616
+ | `cls.legendTitle` | `ui-legend__title` | part |
617
+ | `cls.legendTrack` | `ui-legend__track` | part |
618
+ | `cls.legendValue` | `ui-legend__value` | part |
619
+ | `cls.legendCompact` | `ui-legend--compact` | modifier |
620
+ | `cls.legendDiverging` | `ui-legend--diverging` | modifier |
621
+ | `cls.legendGradient` | `ui-legend--gradient` | modifier |
622
+ | `cls.legendInteractive` | `ui-legend--interactive` | modifier |
623
+ | `cls.legendThreshold` | `ui-legend--threshold` | modifier |
624
+ | `cls.legendVertical` | `ui-legend--vertical` | modifier |
625
+ | `cls.legendWithValues` | `ui-legend--with-values` | modifier |
626
+
474
627
  ### `.ui-lightbox`
475
628
 
476
629
  | Registry key | Class | Kind |
@@ -486,6 +639,22 @@ each one matches a real selector in the stylesheet.
486
639
  | `cls.linkArrow` | `ui-link--arrow` | modifier |
487
640
  | `cls.linkCta` | `ui-link--cta` | modifier |
488
641
 
642
+ ### `.ui-mark`
643
+
644
+ | Registry key | Class | Kind |
645
+ | --- | --- | --- |
646
+ | `cls.mark` | `ui-mark` | base |
647
+ | `cls.markAccent` | `ui-mark--accent` | modifier |
648
+ | `cls.markBox` | `ui-mark--box` | modifier |
649
+ | `cls.markDanger` | `ui-mark--danger` | modifier |
650
+ | `cls.markDraw` | `ui-mark--draw` | modifier |
651
+ | `cls.markInfo` | `ui-mark--info` | modifier |
652
+ | `cls.markMuted` | `ui-mark--muted` | modifier |
653
+ | `cls.markStrike` | `ui-mark--strike` | modifier |
654
+ | `cls.markSuccess` | `ui-mark--success` | modifier |
655
+ | `cls.markUnderline` | `ui-mark--underline` | modifier |
656
+ | `cls.markWarning` | `ui-mark--warning` | modifier |
657
+
489
658
  ### `.ui-matrix`
490
659
 
491
660
  | Registry key | Class | Kind |
@@ -522,6 +691,7 @@ each one matches a real selector in the stylesheet.
522
691
  | `cls.meterFill` | `ui-meter__fill` | part |
523
692
  | `cls.meterAccent` | `ui-meter--accent` | modifier |
524
693
  | `cls.meterDanger` | `ui-meter--danger` | modifier |
694
+ | `cls.meterInfo` | `ui-meter--info` | modifier |
525
695
  | `cls.meterSuccess` | `ui-meter--success` | modifier |
526
696
  | `cls.meterWarning` | `ui-meter--warning` | modifier |
527
697
 
@@ -558,6 +728,13 @@ each one matches a real selector in the stylesheet.
558
728
  | `cls.numNeg` | `ui-num--neg` | modifier |
559
729
  | `cls.numPos` | `ui-num--pos` | modifier |
560
730
 
731
+ ### `.ui-origin-label`
732
+
733
+ | Registry key | Class | Kind |
734
+ | --- | --- | --- |
735
+ | `cls.originLabel` | `ui-origin-label` | base |
736
+ | `cls.originLabelAi` | `ui-origin-label--ai` | modifier |
737
+
561
738
  ### `.ui-pagehead`
562
739
 
563
740
  | Registry key | Class | Kind |
@@ -606,6 +783,14 @@ each one matches a real selector in the stylesheet.
606
783
  | `cls.progressBar` | `ui-progress__bar` | part |
607
784
  | `cls.progressIndeterminate` | `ui-progress--indeterminate` | modifier |
608
785
 
786
+ ### `.ui-property`
787
+
788
+ | Registry key | Class | Kind |
789
+ | --- | --- | --- |
790
+ | `cls.property` | `ui-property` | base |
791
+ | `cls.propertyLabel` | `ui-property__label` | part |
792
+ | `cls.propertyValue` | `ui-property__value` | part |
793
+
609
794
  ### `.ui-prose`
610
795
 
611
796
  | Registry key | Class | Kind |
@@ -613,6 +798,13 @@ each one matches a real selector in the stylesheet.
613
798
  | `cls.prose` | `ui-prose` | base |
614
799
  | `cls.proseCompact` | `ui-prose--compact` | modifier |
615
800
 
801
+ ### `.ui-provenance`
802
+
803
+ | Registry key | Class | Kind |
804
+ | --- | --- | --- |
805
+ | `cls.provenance` | `ui-provenance` | base |
806
+ | `cls.provenanceItem` | `ui-provenance__item` | part |
807
+
616
808
  ### `.ui-quote`
617
809
 
618
810
  | Registry key | Class | Kind |
@@ -632,6 +824,19 @@ each one matches a real selector in the stylesheet.
632
824
  | --- | --- | --- |
633
825
  | `cls.ratio` | `ui-ratio` | base |
634
826
 
827
+ ### `.ui-readout`
828
+
829
+ | Registry key | Class | Kind |
830
+ | --- | --- | --- |
831
+ | `cls.readout` | `ui-readout` | base |
832
+
833
+ ### `.ui-reasoning`
834
+
835
+ | Registry key | Class | Kind |
836
+ | --- | --- | --- |
837
+ | `cls.reasoning` | `ui-reasoning` | base |
838
+ | `cls.reasoningBody` | `ui-reasoning__body` | part |
839
+
635
840
  ### `.ui-report`
636
841
 
637
842
  | Registry key | Class | Kind |
@@ -645,7 +850,7 @@ each one matches a real selector in the stylesheet.
645
850
  | `cls.reportFigure` | `ui-report__figure` | part |
646
851
  | `cls.reportFinding` | `ui-report__finding` | part |
647
852
  | `cls.reportFootnotes` | `ui-report__footnotes` | part |
648
- | `cls.reportHeader` | `ui-report__header` | part |
853
+ | `cls.reportHead` | `ui-report__head` | part |
649
854
  | `cls.reportMeta` | `ui-report__meta` | part |
650
855
  | `cls.reportSection` | `ui-report__section` | part |
651
856
  | `cls.reportSectionUnnumbered` | `ui-report__section--unnumbered` | modifier |
@@ -695,12 +900,36 @@ each one matches a real selector in the stylesheet.
695
900
  | `cls.segmented` | `ui-segmented` | base |
696
901
  | `cls.segmentedOption` | `ui-segmented__option` | part |
697
902
 
903
+ ### `.ui-sel`
904
+
905
+ | Registry key | Class | Kind |
906
+ | --- | --- | --- |
907
+ | `cls.sel` | `ui-sel` | base |
908
+ | `cls.selMaybe` | `ui-sel--maybe` | modifier |
909
+ | `cls.selOff` | `ui-sel--off` | modifier |
910
+ | `cls.selOn` | `ui-sel--on` | modifier |
911
+
698
912
  ### `.ui-select`
699
913
 
700
914
  | Registry key | Class | Kind |
701
915
  | --- | --- | --- |
702
916
  | `cls.select` | `ui-select` | base |
703
917
 
918
+ ### `.ui-selectionbar`
919
+
920
+ | Registry key | Class | Kind |
921
+ | --- | --- | --- |
922
+ | `cls.selectionbar` | `ui-selectionbar` | base |
923
+ | `cls.selectionbarActions` | `ui-selectionbar__actions` | part |
924
+ | `cls.selectionbarCount` | `ui-selectionbar__count` | part |
925
+
926
+ ### `.ui-shortcut`
927
+
928
+ | Registry key | Class | Kind |
929
+ | --- | --- | --- |
930
+ | `cls.shortcut` | `ui-shortcut` | base |
931
+ | `cls.shortcutSep` | `ui-shortcut__sep` | part |
932
+
704
933
  ### `.ui-sidebar`
705
934
 
706
935
  | Registry key | Class | Kind |
@@ -748,12 +977,50 @@ each one matches a real selector in the stylesheet.
748
977
  | --- | --- | --- |
749
978
  | `cls.skiplink` | `ui-skiplink` | base |
750
979
 
980
+ ### `.ui-source-card`
981
+
982
+ | Registry key | Class | Kind |
983
+ | --- | --- | --- |
984
+ | `cls.sourceCard` | `ui-source-card` | base |
985
+ | `cls.sourceCardActions` | `ui-source-card__actions` | part |
986
+ | `cls.sourceCardExcerpt` | `ui-source-card__excerpt` | part |
987
+ | `cls.sourceCardOrigin` | `ui-source-card__origin` | part |
988
+ | `cls.sourceCardTime` | `ui-source-card__time` | part |
989
+ | `cls.sourceCardTitle` | `ui-source-card__title` | part |
990
+
991
+ ### `.ui-source-list`
992
+
993
+ | Registry key | Class | Kind |
994
+ | --- | --- | --- |
995
+ | `cls.sourceList` | `ui-source-list` | base |
996
+ | `cls.sourceListItem` | `ui-source-list__item` | part |
997
+
751
998
  ### `.ui-spinner`
752
999
 
753
1000
  | Registry key | Class | Kind |
754
1001
  | --- | --- | --- |
755
1002
  | `cls.spinner` | `ui-spinner` | base |
756
1003
 
1004
+ ### `.ui-spotlight`
1005
+
1006
+ | Registry key | Class | Kind |
1007
+ | --- | --- | --- |
1008
+ | `cls.spotlight` | `ui-spotlight` | base |
1009
+ | `cls.spotlightHole` | `ui-spotlight__hole` | part |
1010
+ | `cls.spotlightRing` | `ui-spotlight--ring` | modifier |
1011
+
1012
+ ### `.ui-src`
1013
+
1014
+ | Registry key | Class | Kind |
1015
+ | --- | --- | --- |
1016
+ | `cls.src` | `ui-src` | base |
1017
+ | `cls.srcConflict` | `ui-src--conflict` | modifier |
1018
+ | `cls.srcGenerated` | `ui-src--generated` | modifier |
1019
+ | `cls.srcReviewed` | `ui-src--reviewed` | modifier |
1020
+ | `cls.srcStale` | `ui-src--stale` | modifier |
1021
+ | `cls.srcUnverified` | `ui-src--unverified` | modifier |
1022
+ | `cls.srcVerified` | `ui-src--verified` | modifier |
1023
+
757
1024
  ### `.ui-stack`
758
1025
 
759
1026
  | Registry key | Class | Kind |
@@ -776,6 +1043,25 @@ each one matches a real selector in the stylesheet.
776
1043
  | `cls.statLabel` | `ui-stat__label` | part |
777
1044
  | `cls.statValue` | `ui-stat__value` | part |
778
1045
 
1046
+ ### `.ui-state`
1047
+
1048
+ | Registry key | Class | Kind |
1049
+ | --- | --- | --- |
1050
+ | `cls.state` | `ui-state` | base |
1051
+ | `cls.stateDetail` | `ui-state__detail` | part |
1052
+ | `cls.stateLabel` | `ui-state__label` | part |
1053
+ | `cls.stateBusy` | `ui-state--busy` | modifier |
1054
+ | `cls.stateConflict` | `ui-state--conflict` | modifier |
1055
+ | `cls.stateError` | `ui-state--error` | modifier |
1056
+ | `cls.stateLocked` | `ui-state--locked` | modifier |
1057
+ | `cls.stateNeedsReview` | `ui-state--needs-review` | modifier |
1058
+ | `cls.stateOffline` | `ui-state--offline` | modifier |
1059
+ | `cls.stateQueued` | `ui-state--queued` | modifier |
1060
+ | `cls.stateReviewed` | `ui-state--reviewed` | modifier |
1061
+ | `cls.stateSaved` | `ui-state--saved` | modifier |
1062
+ | `cls.stateSaving` | `ui-state--saving` | modifier |
1063
+ | `cls.stateStale` | `ui-state--stale` | modifier |
1064
+
779
1065
  ### `.ui-statgrid`
780
1066
 
781
1067
  | Registry key | Class | Kind |
@@ -816,6 +1102,12 @@ each one matches a real selector in the stylesheet.
816
1102
  | --- | --- | --- |
817
1103
  | `cls.switcher` | `ui-switcher` | base |
818
1104
 
1105
+ ### `.ui-syncbar`
1106
+
1107
+ | Registry key | Class | Kind |
1108
+ | --- | --- | --- |
1109
+ | `cls.syncbar` | `ui-syncbar` | base |
1110
+
819
1111
  ### `.ui-tab`
820
1112
 
821
1113
  | Registry key | Class | Kind |
@@ -908,6 +1200,21 @@ each one matches a real selector in the stylesheet.
908
1200
  | `cls.toastStack` | `ui-toast-stack` | base |
909
1201
  | `cls.toastStackAssertive` | `ui-toast-stack--assertive` | modifier |
910
1202
 
1203
+ ### `.ui-tool-call`
1204
+
1205
+ | Registry key | Class | Kind |
1206
+ | --- | --- | --- |
1207
+ | `cls.toolCall` | `ui-tool-call` | base |
1208
+ | `cls.toolCallBody` | `ui-tool-call__body` | part |
1209
+ | `cls.toolCallName` | `ui-tool-call__name` | part |
1210
+ | `cls.toolCallStatus` | `ui-tool-call__status` | part |
1211
+
1212
+ ### `.ui-tool-log`
1213
+
1214
+ | Registry key | Class | Kind |
1215
+ | --- | --- | --- |
1216
+ | `cls.toolLog` | `ui-tool-log` | base |
1217
+
911
1218
  ### `.ui-tooltip`
912
1219
 
913
1220
  | Registry key | Class | Kind |
@@ -915,6 +1222,16 @@ each one matches a real selector in the stylesheet.
915
1222
  | `cls.tooltip` | `ui-tooltip` | base |
916
1223
  | `cls.tooltipBubble` | `ui-tooltip__bubble` | part |
917
1224
 
1225
+ ### `.ui-tour-note`
1226
+
1227
+ | Registry key | Class | Kind |
1228
+ | --- | --- | --- |
1229
+ | `cls.tourNote` | `ui-tour-note` | base |
1230
+ | `cls.tourNoteActions` | `ui-tour-note__actions` | part |
1231
+ | `cls.tourNoteBody` | `ui-tour-note__body` | part |
1232
+ | `cls.tourNoteStep` | `ui-tour-note__step` | part |
1233
+ | `cls.tourNoteTitle` | `ui-tour-note__title` | part |
1234
+
918
1235
  ### `.ui-visually-hidden`
919
1236
 
920
1237
  | Registry key | Class | Kind |
@@ -938,11 +1255,19 @@ registry consumer should reach for these instead of re-implementing
938
1255
  | Class | Where | Effect |
939
1256
  | --- | --- | --- |
940
1257
  | `.ui-table .is-num` | numeric `<td>`/`<th>` | tabular figures + end-aligned (the canonical numeric cell) |
941
- | `.ui-table .is-pos` | numeric `<td>` | positive-delta tone |
942
- | `.ui-table .is-neg` | numeric `<td>` | negative-delta tone |
1258
+ | `.ui-table .is-pos` | numeric `<td>`, `.ui-stat__delta` | positive-delta tone |
1259
+ | `.ui-table .is-neg` | numeric `<td>`, `.ui-stat__delta` | negative-delta tone |
1260
+ | `.ui-table .is-key` | `<td>`/`<th>` | emphasised key column |
943
1261
 
944
1262
  For numeric text *outside* a table, use the `ui-num` primitive
945
- (`ui.num({ tone })`), which carries the same tabular/aligned/tone intent.
1263
+ (`ui.num({ tone })`), which carries the same tabular/aligned/tone intent; for
1264
+ a trend figure use `ui-delta` (`ui.delta({ dir, invert })`). The full,
1265
+ machine-readable list of these `is-*` state hooks — and the author-set inline
1266
+ custom properties (`--chart-color`, `--chart-pattern`, `--value`, and the
1267
+ **required** `--icon-mask` on `.ui-icon` and `--ui-vt-name` on `.ui-vt` —
1268
+ without which those classes render a solid square / do nothing) — is in
1269
+ [`@ponchia/ui/classes.json`](../classes/classes.json)
1270
+ (`states` / `customProperties`).
946
1271
 
947
1272
  ## Composition & state (read before re-implementing glue)
948
1273
 
@@ -964,12 +1289,45 @@ works in any framework without a binding layer:
964
1289
  - **Modal** — native `<dialog>` gets backdrop + top-layer + focus-trap
965
1290
  free. For a controlled/portal modal, add `is-open`
966
1291
  (`ui.modal({ open: true })`) for the same skin/layout; the
967
- backdrop and focus-trap are then yours.
1292
+ backdrop, top-layer stacking AND focus-trap are then yours (`.is-open`
1293
+ is a bare grid — it does not float or stack on its own).
1294
+ - **Current page** — mark the active link with `aria-current="page"`; it is
1295
+ the programmatic cue the navs honour (`ui-sitenav`, `ui-app-nav`). The
1296
+ `.is-active` class is the visual-only equivalent on `ui-app-nav`/`ui-tab`;
1297
+ prefer `aria-current` so assistive tech announces the current page.
1298
+ - **Form validation wiring** — `initFormValidation` (`@ponchia/ui/behaviors`)
1299
+ reads these attributes; they ARE the contract, not styling. Markup that omits
1300
+ them renders but the behavior silently no-ops: `data-bronto-validate` on the
1301
+ `<form>`; an optional empty `[data-bronto-error]` node per field (it falls
1302
+ back to the field's `.ui-hint`, restoring the help text when valid again); a
1303
+ `[data-bronto-error-summary]` (`.ui-error-summary`) block. The combobox
1304
+ reads `[data-bronto-combobox]` + per-option `data-value` and emits
1305
+ `bronto:change` (`{ detail: { value } }`) on selection; the interactive
1306
+ legend emits `bronto:legend:toggle` (`{ detail: { series, active } }`).
1307
+ - **Status indicator** — `ui-status` carries no dot of its own: compose it with
1308
+ a `.ui-dot` child + a text label, e.g.
1309
+ `<span class="ui-status"><span class="ui-dot ui-dot--success"></span> Live</span>`.
1310
+ (`ui-state` instead bakes in its own dot + the full tone vocabulary — pick
1311
+ one.) A semantic `ui-dot--success|warning|danger|info` is colour-only outside
1312
+ forced-colors, so it ALWAYS needs an adjacent text/aria label — never ship a
1313
+ bare coloured dot as the sole signal.
1314
+ - **Opt-in component CSS** — a few classes are not in the core bundle and need
1315
+ their leaf imported, or they render unstyled: `ui-property`/`ui-readout` →
1316
+ `@ponchia/ui/css/workbench.css`; `ui-mark`/`ui-bracket-note` →
1317
+ `@ponchia/ui/css/marks.css`; the analytical leaves (`ui-annotations`,
1318
+ `ui-crosshair`, `ui-spotlight`, …) → their matching leaf.
1319
+ - **Loaders need their children** — `ui-dotspinner` requires exactly eight
1320
+ `<i>` children, `ui-dotloader` three `<span>`, and a static `ui-dotbar`
1321
+ lights a segment with `<i class="is-on">`. A childless
1322
+ `<span class="ui-dotspinner">` renders nothing.
1323
+ - **`ui-caret` is a typing cursor**, not a dropdown chevron — a blinking block
1324
+ caret (driven by `initDotGlyph`/`uiBlink`). For a disclosure/affordance
1325
+ arrow use `ui-link--arrow` (`ui.link({ arrow: true })`).
968
1326
 
969
1327
  ## Tokens
970
1328
 
971
1329
  Exact mirror of the `:root` blocks in `css/tokens.css`
972
- (`check-tokens` enforces parity). DTCG export:
1330
+ (`check-fresh` enforces parity). DTCG export:
973
1331
  [`@ponchia/ui/tokens.dtcg.json`](../tokens/tokens.dtcg.json).
974
1332
 
975
1333
  ### Global (scales — shared by both themes)
@@ -992,6 +1350,8 @@ Exact mirror of the `:root` blocks in `css/tokens.css`
992
1350
  | `--sans` | `'Inter', 'SF Pro Text', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif` |
993
1351
  | `--dot-font` | `'Doto', var(--mono)` |
994
1352
  | `--display` | `var(--dot-font)` |
1353
+ | `--display-weight` | `700` |
1354
+ | `--display-weight-strong` | `800` |
995
1355
  | `--text-2xs` | `0.68rem` |
996
1356
  | `--text-xs` | `0.76rem` |
997
1357
  | `--text-sm` | `0.86rem` |
@@ -1065,6 +1425,7 @@ Exact mirror of the `:root` blocks in `css/tokens.css`
1065
1425
  | `--accent-ramp-end` | `#ffffff` |
1066
1426
  | `--accent-strong` | `color-mix(in srgb, var(--accent) 83%, #000)` |
1067
1427
  | `--accent-text` | `var(--accent-strong)` |
1428
+ | `--on-accent` | `var(--button-text)` |
1068
1429
  | `--accent-soft` | `color-mix(in srgb, var(--accent) 10%, transparent)` |
1069
1430
  | `--success` | `#2f7d4f` |
1070
1431
  | `--success-soft` | `rgb(47, 125, 79, 0.12)` |
@@ -1102,6 +1463,7 @@ Exact mirror of the `:root` blocks in `css/tokens.css`
1102
1463
  | `--accent-ramp-end` | `#000000` |
1103
1464
  | `--accent-strong` | `color-mix(in srgb, var(--accent) 84%, #fff)` |
1104
1465
  | `--accent-text` | `var(--accent-strong)` |
1466
+ | `--on-accent` | `var(--button-text)` |
1105
1467
  | `--accent-soft` | `color-mix(in srgb, var(--accent) 14%, transparent)` |
1106
1468
  | `--success` | `#4ec27e` |
1107
1469
  | `--success-soft` | `rgb(78, 194, 126, 0.14)` |