@ponchia/ui 0.3.2 → 0.3.4

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.
@@ -0,0 +1,950 @@
1
+ <!-- @ponchia/ui — GENERATED from classes/index.js + tokens/index.js
2
+ by scripts/gen-reference.mjs. Do not edit by hand; run
3
+ `npm run reference:build`. Drift-checked in CI. -->
4
+
5
+ # Reference
6
+
7
+ The complete public surface, generated from the typed contract. Live
8
+ rendering of every class is the kitchen-sink demo:
9
+ **<https://ponchia.github.io/bronto-ui/>**. Theming knobs and the token
10
+ contract: [docs/theming.md](theming.md).
11
+
12
+ - 230 classes across 101 component groups
13
+ - Import the typed registry: `import { cls, ui, cx } from '@ponchia/ui/classes'`
14
+ - Tokens as data: `import { cssVars, tokens, themeColor } from '@ponchia/ui/tokens'`
15
+
16
+ ## Classes
17
+
18
+ Grouped by base class. `--x` = modifier, `__x` = part. Every key is a
19
+ member of `cls` and a recipe-emittable string; `check-classes` proves
20
+ each one matches a real selector in the stylesheet.
21
+
22
+ ### `.ui-accordion`
23
+
24
+ | Registry key | Class | Kind |
25
+ | --- | --- | --- |
26
+ | `cls.accordion` | `ui-accordion` | base |
27
+ | `cls.accordionBody` | `ui-accordion__body` | part |
28
+ | `cls.accordionItem` | `ui-accordion__item` | part |
29
+ | `cls.accordionSummary` | `ui-accordion__summary` | part |
30
+
31
+ ### `.ui-alert`
32
+
33
+ | Registry key | Class | Kind |
34
+ | --- | --- | --- |
35
+ | `cls.alert` | `ui-alert` | base |
36
+ | `cls.alertBody` | `ui-alert__body` | part |
37
+ | `cls.alertDismiss` | `ui-alert__dismiss` | part |
38
+ | `cls.alertTitle` | `ui-alert__title` | part |
39
+ | `cls.alertAccent` | `ui-alert--accent` | modifier |
40
+ | `cls.alertDanger` | `ui-alert--danger` | modifier |
41
+ | `cls.alertInfo` | `ui-alert--info` | modifier |
42
+ | `cls.alertSuccess` | `ui-alert--success` | modifier |
43
+ | `cls.alertWarning` | `ui-alert--warning` | modifier |
44
+
45
+ ### `.ui-animate-dot`
46
+
47
+ | Registry key | Class | Kind |
48
+ | --- | --- | --- |
49
+ | `cls.animateDot` | `ui-animate-dot` | base |
50
+
51
+ ### `.ui-animate-fade`
52
+
53
+ | Registry key | Class | Kind |
54
+ | --- | --- | --- |
55
+ | `cls.animateFade` | `ui-animate-fade` | base |
56
+
57
+ ### `.ui-animate-in`
58
+
59
+ | Registry key | Class | Kind |
60
+ | --- | --- | --- |
61
+ | `cls.animateIn` | `ui-animate-in` | base |
62
+
63
+ ### `.ui-animate-matrix`
64
+
65
+ | Registry key | Class | Kind |
66
+ | --- | --- | --- |
67
+ | `cls.animateMatrix` | `ui-animate-matrix` | base |
68
+
69
+ ### `.ui-app-content`
70
+
71
+ | Registry key | Class | Kind |
72
+ | --- | --- | --- |
73
+ | `cls.appContent` | `ui-app-content` | base |
74
+
75
+ ### `.ui-app-empty-state`
76
+
77
+ | Registry key | Class | Kind |
78
+ | --- | --- | --- |
79
+ | `cls.appEmptyState` | `ui-app-empty-state` | base |
80
+
81
+ ### `.ui-app-main`
82
+
83
+ | Registry key | Class | Kind |
84
+ | --- | --- | --- |
85
+ | `cls.appMain` | `ui-app-main` | base |
86
+
87
+ ### `.ui-app-metric`
88
+
89
+ | Registry key | Class | Kind |
90
+ | --- | --- | --- |
91
+ | `cls.appMetric` | `ui-app-metric` | base |
92
+ | `cls.appMetricDelta` | `ui-app-metric__delta` | part |
93
+ | `cls.appMetricLabel` | `ui-app-metric__label` | part |
94
+ | `cls.appMetricValue` | `ui-app-metric__value` | part |
95
+
96
+ ### `.ui-app-metrics`
97
+
98
+ | Registry key | Class | Kind |
99
+ | --- | --- | --- |
100
+ | `cls.appMetrics` | `ui-app-metrics` | base |
101
+
102
+ ### `.ui-app-nav`
103
+
104
+ | Registry key | Class | Kind |
105
+ | --- | --- | --- |
106
+ | `cls.appNav` | `ui-app-nav` | base |
107
+ | `cls.appNavSection` | `ui-app-nav__section` | part |
108
+
109
+ ### `.ui-app-panel`
110
+
111
+ | Registry key | Class | Kind |
112
+ | --- | --- | --- |
113
+ | `cls.appPanel` | `ui-app-panel` | base |
114
+ | `cls.appPanelHead` | `ui-app-panel__head` | part |
115
+ | `cls.appPanelTitle` | `ui-app-panel__title` | part |
116
+
117
+ ### `.ui-app-rail`
118
+
119
+ | Registry key | Class | Kind |
120
+ | --- | --- | --- |
121
+ | `cls.appRail` | `ui-app-rail` | base |
122
+ | `cls.appRailAccount` | `ui-app-rail__account` | part |
123
+ | `cls.appRailBrand` | `ui-app-rail__brand` | part |
124
+ | `cls.appRailFoot` | `ui-app-rail__foot` | part |
125
+ | `cls.appRailToggle` | `ui-app-rail__toggle` | part |
126
+
127
+ ### `.ui-app-shell`
128
+
129
+ | Registry key | Class | Kind |
130
+ | --- | --- | --- |
131
+ | `cls.appShell` | `ui-app-shell` | base |
132
+ | `cls.appShellFull` | `ui-app-shell--full` | modifier |
133
+
134
+ ### `.ui-app-toolbar`
135
+
136
+ | Registry key | Class | Kind |
137
+ | --- | --- | --- |
138
+ | `cls.appToolbar` | `ui-app-toolbar` | base |
139
+ | `cls.appToolbarGroup` | `ui-app-toolbar__group` | part |
140
+
141
+ ### `.ui-app-topbar`
142
+
143
+ | Registry key | Class | Kind |
144
+ | --- | --- | --- |
145
+ | `cls.appTopbar` | `ui-app-topbar` | base |
146
+ | `cls.appTopbarTitle` | `ui-app-topbar__title` | part |
147
+
148
+ ### `.ui-avatar`
149
+
150
+ | Registry key | Class | Kind |
151
+ | --- | --- | --- |
152
+ | `cls.avatar` | `ui-avatar` | base |
153
+ | `cls.avatarLg` | `ui-avatar--lg` | modifier |
154
+ | `cls.avatarSm` | `ui-avatar--sm` | modifier |
155
+
156
+ ### `.ui-avatar-group`
157
+
158
+ | Registry key | Class | Kind |
159
+ | --- | --- | --- |
160
+ | `cls.avatarGroup` | `ui-avatar-group` | base |
161
+
162
+ ### `.ui-badge`
163
+
164
+ | Registry key | Class | Kind |
165
+ | --- | --- | --- |
166
+ | `cls.badge` | `ui-badge` | base |
167
+ | `cls.badgeAccent` | `ui-badge--accent` | modifier |
168
+ | `cls.badgeDanger` | `ui-badge--danger` | modifier |
169
+ | `cls.badgeDot` | `ui-badge--dot` | modifier |
170
+ | `cls.badgeInfo` | `ui-badge--info` | modifier |
171
+ | `cls.badgeMuted` | `ui-badge--muted` | modifier |
172
+ | `cls.badgeSuccess` | `ui-badge--success` | modifier |
173
+ | `cls.badgeWarning` | `ui-badge--warning` | modifier |
174
+
175
+ ### `.ui-breadcrumb`
176
+
177
+ | Registry key | Class | Kind |
178
+ | --- | --- | --- |
179
+ | `cls.breadcrumb` | `ui-breadcrumb` | base |
180
+ | `cls.breadcrumbItem` | `ui-breadcrumb__item` | part |
181
+
182
+ ### `.ui-button`
183
+
184
+ | Registry key | Class | Kind |
185
+ | --- | --- | --- |
186
+ | `cls.button` | `ui-button` | base |
187
+ | `cls.buttonDanger` | `ui-button--danger` | modifier |
188
+ | `cls.buttonGhost` | `ui-button--ghost` | modifier |
189
+ | `cls.buttonIcon` | `ui-button--icon` | modifier |
190
+ | `cls.buttonLg` | `ui-button--lg` | modifier |
191
+ | `cls.buttonSm` | `ui-button--sm` | modifier |
192
+ | `cls.buttonSubtle` | `ui-button--subtle` | modifier |
193
+
194
+ ### `.ui-card`
195
+
196
+ | Registry key | Class | Kind |
197
+ | --- | --- | --- |
198
+ | `cls.card` | `ui-card` | base |
199
+ | `cls.cardHead` | `ui-card__head` | part |
200
+ | `cls.cardAccent` | `ui-card--accent` | modifier |
201
+ | `cls.cardInteractive` | `ui-card--interactive` | modifier |
202
+
203
+ ### `.ui-caret`
204
+
205
+ | Registry key | Class | Kind |
206
+ | --- | --- | --- |
207
+ | `cls.caret` | `ui-caret` | base |
208
+
209
+ ### `.ui-center`
210
+
211
+ | Registry key | Class | Kind |
212
+ | --- | --- | --- |
213
+ | `cls.center` | `ui-center` | base |
214
+
215
+ ### `.ui-check`
216
+
217
+ | Registry key | Class | Kind |
218
+ | --- | --- | --- |
219
+ | `cls.check` | `ui-check` | base |
220
+
221
+ ### `.ui-chip`
222
+
223
+ | Registry key | Class | Kind |
224
+ | --- | --- | --- |
225
+ | `cls.chip` | `ui-chip` | base |
226
+ | `cls.chipAccent` | `ui-chip--accent` | modifier |
227
+
228
+ ### `.ui-cluster`
229
+
230
+ | Registry key | Class | Kind |
231
+ | --- | --- | --- |
232
+ | `cls.cluster` | `ui-cluster` | base |
233
+ | `cls.clusterBetween` | `ui-cluster--between` | modifier |
234
+
235
+ ### `.ui-combobox`
236
+
237
+ | Registry key | Class | Kind |
238
+ | --- | --- | --- |
239
+ | `cls.combobox` | `ui-combobox` | base |
240
+ | `cls.comboboxEmpty` | `ui-combobox__empty` | part |
241
+ | `cls.comboboxInput` | `ui-combobox__input` | part |
242
+ | `cls.comboboxList` | `ui-combobox__list` | part |
243
+ | `cls.comboboxOption` | `ui-combobox__option` | part |
244
+
245
+ ### `.ui-container`
246
+
247
+ | Registry key | Class | Kind |
248
+ | --- | --- | --- |
249
+ | `cls.container` | `ui-container` | base |
250
+ | `cls.containerNarrow` | `ui-container--narrow` | modifier |
251
+ | `cls.containerWide` | `ui-container--wide` | modifier |
252
+
253
+ ### `.ui-cq`
254
+
255
+ | Registry key | Class | Kind |
256
+ | --- | --- | --- |
257
+ | `cls.cq` | `ui-cq` | base |
258
+
259
+ ### `.ui-display`
260
+
261
+ | Registry key | Class | Kind |
262
+ | --- | --- | --- |
263
+ | `cls.display` | `ui-display` | base |
264
+
265
+ ### `.ui-divider`
266
+
267
+ | Registry key | Class | Kind |
268
+ | --- | --- | --- |
269
+ | `cls.divider` | `ui-divider` | base |
270
+
271
+ ### `.ui-dot`
272
+
273
+ | Registry key | Class | Kind |
274
+ | --- | --- | --- |
275
+ | `cls.dot` | `ui-dot` | base |
276
+ | `cls.dotAccent` | `ui-dot--accent` | modifier |
277
+ | `cls.dotDanger` | `ui-dot--danger` | modifier |
278
+ | `cls.dotInfo` | `ui-dot--info` | modifier |
279
+ | `cls.dotLive` | `ui-dot--live` | modifier |
280
+ | `cls.dotSuccess` | `ui-dot--success` | modifier |
281
+ | `cls.dotWarning` | `ui-dot--warning` | modifier |
282
+
283
+ ### `.ui-dotbar`
284
+
285
+ | Registry key | Class | Kind |
286
+ | --- | --- | --- |
287
+ | `cls.dotbar` | `ui-dotbar` | base |
288
+ | `cls.dotbarIndeterminate` | `ui-dotbar--indeterminate` | modifier |
289
+
290
+ ### `.ui-dotfield`
291
+
292
+ | Registry key | Class | Kind |
293
+ | --- | --- | --- |
294
+ | `cls.dotfield` | `ui-dotfield` | base |
295
+
296
+ ### `.ui-dotgrid`
297
+
298
+ | Registry key | Class | Kind |
299
+ | --- | --- | --- |
300
+ | `cls.dotgrid` | `ui-dotgrid` | base |
301
+ | `cls.dotgridAccent` | `ui-dotgrid--accent` | modifier |
302
+ | `cls.dotgridDense` | `ui-dotgrid--dense` | modifier |
303
+
304
+ ### `.ui-dotloader`
305
+
306
+ | Registry key | Class | Kind |
307
+ | --- | --- | --- |
308
+ | `cls.dotloader` | `ui-dotloader` | base |
309
+
310
+ ### `.ui-dotmatrix`
311
+
312
+ | Registry key | Class | Kind |
313
+ | --- | --- | --- |
314
+ | `cls.dotmatrix` | `ui-dotmatrix` | base |
315
+ | `cls.dotmatrixCell` | `ui-dotmatrix__cell` | part |
316
+ | `cls.dotmatrixCellAccent` | `ui-dotmatrix__cell--accent` | modifier |
317
+ | `cls.dotmatrixCellHot` | `ui-dotmatrix__cell--hot` | modifier |
318
+
319
+ ### `.ui-dotrule`
320
+
321
+ | Registry key | Class | Kind |
322
+ | --- | --- | --- |
323
+ | `cls.dotrule` | `ui-dotrule` | base |
324
+
325
+ ### `.ui-dotspinner`
326
+
327
+ | Registry key | Class | Kind |
328
+ | --- | --- | --- |
329
+ | `cls.dotspinner` | `ui-dotspinner` | base |
330
+ | `cls.dotspinnerLg` | `ui-dotspinner--lg` | modifier |
331
+ | `cls.dotspinnerSm` | `ui-dotspinner--sm` | modifier |
332
+
333
+ ### `.ui-empty-state`
334
+
335
+ | Registry key | Class | Kind |
336
+ | --- | --- | --- |
337
+ | `cls.emptyState` | `ui-empty-state` | base |
338
+
339
+ ### `.ui-error-summary`
340
+
341
+ | Registry key | Class | Kind |
342
+ | --- | --- | --- |
343
+ | `cls.errorSummary` | `ui-error-summary` | base |
344
+ | `cls.errorSummaryList` | `ui-error-summary__list` | part |
345
+ | `cls.errorSummaryTitle` | `ui-error-summary__title` | part |
346
+
347
+ ### `.ui-eyebrow`
348
+
349
+ | Registry key | Class | Kind |
350
+ | --- | --- | --- |
351
+ | `cls.eyebrow` | `ui-eyebrow` | base |
352
+ | `cls.eyebrowMuted` | `ui-eyebrow--muted` | modifier |
353
+ | `cls.eyebrowSm` | `ui-eyebrow--sm` | modifier |
354
+
355
+ ### `.ui-field`
356
+
357
+ | Registry key | Class | Kind |
358
+ | --- | --- | --- |
359
+ | `cls.field` | `ui-field` | base |
360
+
361
+ ### `.ui-file`
362
+
363
+ | Registry key | Class | Kind |
364
+ | --- | --- | --- |
365
+ | `cls.file` | `ui-file` | base |
366
+
367
+ ### `.ui-grid`
368
+
369
+ | Registry key | Class | Kind |
370
+ | --- | --- | --- |
371
+ | `cls.grid` | `ui-grid` | base |
372
+
373
+ ### `.ui-hint`
374
+
375
+ | Registry key | Class | Kind |
376
+ | --- | --- | --- |
377
+ | `cls.hint` | `ui-hint` | base |
378
+ | `cls.hintError` | `ui-hint--error` | modifier |
379
+
380
+ ### `.ui-input`
381
+
382
+ | Registry key | Class | Kind |
383
+ | --- | --- | --- |
384
+ | `cls.input` | `ui-input` | base |
385
+
386
+ ### `.ui-input-group`
387
+
388
+ | Registry key | Class | Kind |
389
+ | --- | --- | --- |
390
+ | `cls.inputGroup` | `ui-input-group` | base |
391
+ | `cls.inputGroupAddon` | `ui-input-group__addon` | part |
392
+
393
+ ### `.ui-key-value`
394
+
395
+ | Registry key | Class | Kind |
396
+ | --- | --- | --- |
397
+ | `cls.keyValue` | `ui-key-value` | base |
398
+
399
+ ### `.ui-label`
400
+
401
+ | Registry key | Class | Kind |
402
+ | --- | --- | --- |
403
+ | `cls.label` | `ui-label` | base |
404
+
405
+ ### `.ui-link`
406
+
407
+ | Registry key | Class | Kind |
408
+ | --- | --- | --- |
409
+ | `cls.link` | `ui-link` | base |
410
+ | `cls.linkArrow` | `ui-link--arrow` | modifier |
411
+ | `cls.linkCta` | `ui-link--cta` | modifier |
412
+
413
+ ### `.ui-matrix`
414
+
415
+ | Registry key | Class | Kind |
416
+ | --- | --- | --- |
417
+ | `cls.matrix` | `ui-matrix` | base |
418
+
419
+ ### `.ui-menu`
420
+
421
+ | Registry key | Class | Kind |
422
+ | --- | --- | --- |
423
+ | `cls.menu` | `ui-menu` | base |
424
+ | `cls.menuItem` | `ui-menu__item` | part |
425
+ | `cls.menuLabel` | `ui-menu__label` | part |
426
+ | `cls.menuSep` | `ui-menu__sep` | part |
427
+
428
+ ### `.ui-menu-host`
429
+
430
+ | Registry key | Class | Kind |
431
+ | --- | --- | --- |
432
+ | `cls.menuHost` | `ui-menu-host` | base |
433
+
434
+ ### `.ui-meta`
435
+
436
+ | Registry key | Class | Kind |
437
+ | --- | --- | --- |
438
+ | `cls.meta` | `ui-meta` | base |
439
+ | `cls.metaItem` | `ui-meta__item` | part |
440
+
441
+ ### `.ui-modal`
442
+
443
+ | Registry key | Class | Kind |
444
+ | --- | --- | --- |
445
+ | `cls.modal` | `ui-modal` | base |
446
+ | `cls.modalBody` | `ui-modal__body` | part |
447
+ | `cls.modalClose` | `ui-modal__close` | part |
448
+ | `cls.modalFoot` | `ui-modal__foot` | part |
449
+ | `cls.modalHead` | `ui-modal__head` | part |
450
+ | `cls.modalTitle` | `ui-modal__title` | part |
451
+ | `cls.modalDrawer` | `ui-modal--drawer` | modifier |
452
+
453
+ ### `.ui-mono`
454
+
455
+ | Registry key | Class | Kind |
456
+ | --- | --- | --- |
457
+ | `cls.mono` | `ui-mono` | base |
458
+
459
+ ### `.ui-muted`
460
+
461
+ | Registry key | Class | Kind |
462
+ | --- | --- | --- |
463
+ | `cls.muted` | `ui-muted` | base |
464
+
465
+ ### `.ui-num`
466
+
467
+ | Registry key | Class | Kind |
468
+ | --- | --- | --- |
469
+ | `cls.num` | `ui-num` | base |
470
+ | `cls.numMuted` | `ui-num--muted` | modifier |
471
+ | `cls.numNeg` | `ui-num--neg` | modifier |
472
+ | `cls.numPos` | `ui-num--pos` | modifier |
473
+
474
+ ### `.ui-pagination`
475
+
476
+ | Registry key | Class | Kind |
477
+ | --- | --- | --- |
478
+ | `cls.pagination` | `ui-pagination` | base |
479
+ | `cls.paginationItem` | `ui-pagination__item` | part |
480
+
481
+ ### `.ui-panel`
482
+
483
+ | Registry key | Class | Kind |
484
+ | --- | --- | --- |
485
+ | `cls.panel` | `ui-panel` | base |
486
+ | `cls.panelHead` | `ui-panel__head` | part |
487
+
488
+ ### `.ui-popover`
489
+
490
+ | Registry key | Class | Kind |
491
+ | --- | --- | --- |
492
+ | `cls.popover` | `ui-popover` | base |
493
+
494
+ ### `.ui-progress`
495
+
496
+ | Registry key | Class | Kind |
497
+ | --- | --- | --- |
498
+ | `cls.progress` | `ui-progress` | base |
499
+ | `cls.progressBar` | `ui-progress__bar` | part |
500
+ | `cls.progressIndeterminate` | `ui-progress--indeterminate` | modifier |
501
+
502
+ ### `.ui-prose`
503
+
504
+ | Registry key | Class | Kind |
505
+ | --- | --- | --- |
506
+ | `cls.prose` | `ui-prose` | base |
507
+ | `cls.proseCompact` | `ui-prose--compact` | modifier |
508
+
509
+ ### `.ui-quote`
510
+
511
+ | Registry key | Class | Kind |
512
+ | --- | --- | --- |
513
+ | `cls.quote` | `ui-quote` | base |
514
+ | `cls.quoteCite` | `ui-quote__cite` | part |
515
+
516
+ ### `.ui-range`
517
+
518
+ | Registry key | Class | Kind |
519
+ | --- | --- | --- |
520
+ | `cls.range` | `ui-range` | base |
521
+
522
+ ### `.ui-ratio`
523
+
524
+ | Registry key | Class | Kind |
525
+ | --- | --- | --- |
526
+ | `cls.ratio` | `ui-ratio` | base |
527
+
528
+ ### `.ui-reveal`
529
+
530
+ | Registry key | Class | Kind |
531
+ | --- | --- | --- |
532
+ | `cls.reveal` | `ui-reveal` | base |
533
+
534
+ ### `.ui-search`
535
+
536
+ | Registry key | Class | Kind |
537
+ | --- | --- | --- |
538
+ | `cls.search` | `ui-search` | base |
539
+
540
+ ### `.ui-segmented`
541
+
542
+ | Registry key | Class | Kind |
543
+ | --- | --- | --- |
544
+ | `cls.segmented` | `ui-segmented` | base |
545
+ | `cls.segmentedOption` | `ui-segmented__option` | part |
546
+
547
+ ### `.ui-select`
548
+
549
+ | Registry key | Class | Kind |
550
+ | --- | --- | --- |
551
+ | `cls.select` | `ui-select` | base |
552
+
553
+ ### `.ui-sidebar`
554
+
555
+ | Registry key | Class | Kind |
556
+ | --- | --- | --- |
557
+ | `cls.sidebar` | `ui-sidebar` | base |
558
+
559
+ ### `.ui-sitefooter`
560
+
561
+ | Registry key | Class | Kind |
562
+ | --- | --- | --- |
563
+ | `cls.sitefooter` | `ui-sitefooter` | base |
564
+ | `cls.sitefooterLinks` | `ui-sitefooter__links` | part |
565
+
566
+ ### `.ui-siteheader`
567
+
568
+ | Registry key | Class | Kind |
569
+ | --- | --- | --- |
570
+ | `cls.siteheader` | `ui-siteheader` | base |
571
+ | `cls.siteheaderActions` | `ui-siteheader__actions` | part |
572
+ | `cls.siteheaderBrand` | `ui-siteheader__brand` | part |
573
+ | `cls.siteheaderSticky` | `ui-siteheader--sticky` | modifier |
574
+
575
+ ### `.ui-sitemenu`
576
+
577
+ | Registry key | Class | Kind |
578
+ | --- | --- | --- |
579
+ | `cls.sitemenu` | `ui-sitemenu` | base |
580
+ | `cls.sitemenuPanel` | `ui-sitemenu__panel` | part |
581
+
582
+ ### `.ui-sitenav`
583
+
584
+ | Registry key | Class | Kind |
585
+ | --- | --- | --- |
586
+ | `cls.sitenav` | `ui-sitenav` | base |
587
+
588
+ ### `.ui-skeleton`
589
+
590
+ | Registry key | Class | Kind |
591
+ | --- | --- | --- |
592
+ | `cls.skeleton` | `ui-skeleton` | base |
593
+
594
+ ### `.ui-skiplink`
595
+
596
+ | Registry key | Class | Kind |
597
+ | --- | --- | --- |
598
+ | `cls.skiplink` | `ui-skiplink` | base |
599
+
600
+ ### `.ui-spinner`
601
+
602
+ | Registry key | Class | Kind |
603
+ | --- | --- | --- |
604
+ | `cls.spinner` | `ui-spinner` | base |
605
+
606
+ ### `.ui-stack`
607
+
608
+ | Registry key | Class | Kind |
609
+ | --- | --- | --- |
610
+ | `cls.stack` | `ui-stack` | base |
611
+
612
+ ### `.ui-stagger`
613
+
614
+ | Registry key | Class | Kind |
615
+ | --- | --- | --- |
616
+ | `cls.stagger` | `ui-stagger` | base |
617
+ | `cls.staggerAuto` | `ui-stagger--auto` | modifier |
618
+
619
+ ### `.ui-stat`
620
+
621
+ | Registry key | Class | Kind |
622
+ | --- | --- | --- |
623
+ | `cls.stat` | `ui-stat` | base |
624
+ | `cls.statDelta` | `ui-stat__delta` | part |
625
+ | `cls.statLabel` | `ui-stat__label` | part |
626
+ | `cls.statValue` | `ui-stat__value` | part |
627
+
628
+ ### `.ui-statgrid`
629
+
630
+ | Registry key | Class | Kind |
631
+ | --- | --- | --- |
632
+ | `cls.statgrid` | `ui-statgrid` | base |
633
+
634
+ ### `.ui-status`
635
+
636
+ | Registry key | Class | Kind |
637
+ | --- | --- | --- |
638
+ | `cls.status` | `ui-status` | base |
639
+
640
+ ### `.ui-surface`
641
+
642
+ | Registry key | Class | Kind |
643
+ | --- | --- | --- |
644
+ | `cls.surface` | `ui-surface` | base |
645
+
646
+ ### `.ui-switch`
647
+
648
+ | Registry key | Class | Kind |
649
+ | --- | --- | --- |
650
+ | `cls.switch` | `ui-switch` | base |
651
+ | `cls.switchThumb` | `ui-switch__thumb` | part |
652
+ | `cls.switchTrack` | `ui-switch__track` | part |
653
+
654
+ ### `.ui-switcher`
655
+
656
+ | Registry key | Class | Kind |
657
+ | --- | --- | --- |
658
+ | `cls.switcher` | `ui-switcher` | base |
659
+
660
+ ### `.ui-tab`
661
+
662
+ | Registry key | Class | Kind |
663
+ | --- | --- | --- |
664
+ | `cls.tab` | `ui-tab` | base |
665
+
666
+ ### `.ui-table`
667
+
668
+ | Registry key | Class | Kind |
669
+ | --- | --- | --- |
670
+ | `cls.table` | `ui-table` | base |
671
+ | `cls.tableEmpty` | `ui-table__empty` | part |
672
+ | `cls.tableSelect` | `ui-table__select` | part |
673
+ | `cls.tableSort` | `ui-table__sort` | part |
674
+ | `cls.tableToolbar` | `ui-table__toolbar` | part |
675
+ | `cls.tableComfortable` | `ui-table--comfortable` | modifier |
676
+ | `cls.tableDense` | `ui-table--dense` | modifier |
677
+ | `cls.tableLined` | `ui-table--lined` | modifier |
678
+ | `cls.tableLoading` | `ui-table--loading` | modifier |
679
+ | `cls.tableSelectable` | `ui-table--selectable` | modifier |
680
+
681
+ ### `.ui-table-wrap`
682
+
683
+ | Registry key | Class | Kind |
684
+ | --- | --- | --- |
685
+ | `cls.tableWrap` | `ui-table-wrap` | base |
686
+
687
+ ### `.ui-tabs`
688
+
689
+ | Registry key | Class | Kind |
690
+ | --- | --- | --- |
691
+ | `cls.tabs` | `ui-tabs` | base |
692
+ | `cls.tabsList` | `ui-tabs__list` | part |
693
+ | `cls.tabsPanel` | `ui-tabs__panel` | part |
694
+
695
+ ### `.ui-tag`
696
+
697
+ | Registry key | Class | Kind |
698
+ | --- | --- | --- |
699
+ | `cls.tag` | `ui-tag` | base |
700
+ | `cls.tagAccent` | `ui-tag--accent` | modifier |
701
+
702
+ ### `.ui-tags`
703
+
704
+ | Registry key | Class | Kind |
705
+ | --- | --- | --- |
706
+ | `cls.tags` | `ui-tags` | base |
707
+
708
+ ### `.ui-textarea`
709
+
710
+ | Registry key | Class | Kind |
711
+ | --- | --- | --- |
712
+ | `cls.textarea` | `ui-textarea` | base |
713
+
714
+ ### `.ui-themetoggle`
715
+
716
+ | Registry key | Class | Kind |
717
+ | --- | --- | --- |
718
+ | `cls.themetoggleButton` | `ui-themetoggle__button` | part |
719
+ | `cls.themetoggleLabel` | `ui-themetoggle__label` | part |
720
+ | `cls.themetogglePrefix` | `ui-themetoggle__prefix` | part |
721
+ | `cls.themetoggleThumb` | `ui-themetoggle__thumb` | part |
722
+ | `cls.themetoggleTrack` | `ui-themetoggle__track` | part |
723
+
724
+ ### `.ui-toast`
725
+
726
+ | Registry key | Class | Kind |
727
+ | --- | --- | --- |
728
+ | `cls.toast` | `ui-toast` | base |
729
+ | `cls.toastClose` | `ui-toast__close` | part |
730
+ | `cls.toastTitle` | `ui-toast__title` | part |
731
+ | `cls.toastAccent` | `ui-toast--accent` | modifier |
732
+ | `cls.toastDanger` | `ui-toast--danger` | modifier |
733
+ | `cls.toastInfo` | `ui-toast--info` | modifier |
734
+ | `cls.toastSuccess` | `ui-toast--success` | modifier |
735
+ | `cls.toastWarning` | `ui-toast--warning` | modifier |
736
+
737
+ ### `.ui-toast-stack`
738
+
739
+ | Registry key | Class | Kind |
740
+ | --- | --- | --- |
741
+ | `cls.toastStack` | `ui-toast-stack` | base |
742
+ | `cls.toastStackAssertive` | `ui-toast-stack--assertive` | modifier |
743
+
744
+ ### `.ui-tooltip`
745
+
746
+ | Registry key | Class | Kind |
747
+ | --- | --- | --- |
748
+ | `cls.tooltip` | `ui-tooltip` | base |
749
+ | `cls.tooltipBubble` | `ui-tooltip__bubble` | part |
750
+
751
+ ### `.ui-visually-hidden`
752
+
753
+ | Registry key | Class | Kind |
754
+ | --- | --- | --- |
755
+ | `cls.visuallyHidden` | `ui-visually-hidden` | base |
756
+
757
+ ## Table-local state classes
758
+
759
+ Not in `cls` by design — these are plain `is-*` state hooks scoped to
760
+ `.ui-table` (the same convention as `is-active` on tabs), so they never
761
+ collide with global classes. Apply them on `<td>`/`<th>`. A typed
762
+ registry consumer should reach for these instead of re-implementing
763
+ `text-align` / tabular figures by hand.
764
+
765
+ | Class | Where | Effect |
766
+ | --- | --- | --- |
767
+ | `.ui-table .is-num` | numeric `<td>`/`<th>` | tabular figures + end-aligned (the canonical numeric cell) |
768
+ | `.ui-table .is-pos` | numeric `<td>` | positive-delta tone |
769
+ | `.ui-table .is-neg` | numeric `<td>` | negative-delta tone |
770
+
771
+ For numeric text *outside* a table, use the `ui-num` primitive
772
+ (`ui.num({ tone })`), which carries the same tabular/aligned/tone intent.
773
+
774
+ ## Composition & state (read before re-implementing glue)
775
+
776
+ The agnostic surface is class- and string-recipe-only; **stateful and
777
+ relational wiring is ARIA-driven, not class-driven** — by design, so it
778
+ works in any framework without a binding layer:
779
+
780
+ - **Form field** — compose `ui-field` > `ui-label` + control +
781
+ `ui-hint`. Invalid state is the native `aria-invalid="true"` on the
782
+ control (styles `ui-input`/`ui-select`/`ui-textarea` red); associate
783
+ the hint with `aria-describedby`. There is deliberately no
784
+ `ui-field--invalid` class.
785
+ - **Button loading** — set `aria-busy="true"` (and `disabled`) on
786
+ `ui-button`; the leading spinner is injected by CSS with no extra
787
+ markup or class. `ui-button--sm`/`--lg` size it.
788
+ - **Badge tone** — `ui.badge({ tone })` emits the framework tone
789
+ (`accent|success|warning|danger|info|muted`). Mapping an app's own variant
790
+ vocabulary onto a tone is application logic, not a framework class.
791
+ - **Modal** — native `<dialog>` gets backdrop + top-layer + focus-trap
792
+ free. For a controlled/portal modal, add `is-open`
793
+ (`ui.modal({ open: true })`) for the same skin/layout; the
794
+ backdrop and focus-trap are then yours.
795
+
796
+ ## Tokens
797
+
798
+ Exact mirror of the `:root` blocks in `css/tokens.css`
799
+ (`check-tokens` enforces parity). DTCG export:
800
+ [`@ponchia/ui/tokens.dtcg.json`](../tokens/tokens.dtcg.json).
801
+
802
+ ### Global (scales — shared by both themes)
803
+
804
+ | Token | Value |
805
+ | --- | --- |
806
+ | `--radius-xl` | `4px` |
807
+ | `--radius-lg` | `3px` |
808
+ | `--radius-md` | `2px` |
809
+ | `--radius-sm` | `1px` |
810
+ | `--radius-pill` | `999px` |
811
+ | `--space-2xs` | `0.25rem` |
812
+ | `--space-xs` | `0.5rem` |
813
+ | `--space-sm` | `0.75rem` |
814
+ | `--space-md` | `1rem` |
815
+ | `--space-lg` | `1.35rem` |
816
+ | `--space-xl` | `1.75rem` |
817
+ | `--space-2xl` | `2.5rem` |
818
+ | `--mono` | `'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'SF Mono', ui-monospace, monospace` |
819
+ | `--sans` | `'Inter', 'SF Pro Text', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif` |
820
+ | `--dot-font` | `'Doto', var(--mono)` |
821
+ | `--display` | `var(--dot-font)` |
822
+ | `--text-2xs` | `0.68rem` |
823
+ | `--text-xs` | `0.76rem` |
824
+ | `--text-sm` | `0.86rem` |
825
+ | `--text-base` | `0.95rem` |
826
+ | `--text-lg` | `1.15rem` |
827
+ | `--text-xl` | `1.45rem` |
828
+ | `--tracking-wide` | `0.14em` |
829
+ | `--tracking-wider` | `0.22em` |
830
+ | `--ease-standard` | `cubic-bezier(0.2, 0.8, 0.2, 1)` |
831
+ | `--ease-spring` | `cubic-bezier(0.16, 1, 0.3, 1)` |
832
+ | `--ease-out` | `cubic-bezier(0.33, 1, 0.68, 1)` |
833
+ | `--duration-fast` | `130ms` |
834
+ | `--duration-base` | `200ms` |
835
+ | `--duration-slow` | `360ms` |
836
+ | `--dot-size` | `2px` |
837
+ | `--dot-gap` | `14px` |
838
+ | `--z-base` | `0` |
839
+ | `--z-raised` | `10` |
840
+ | `--z-sticky` | `20` |
841
+ | `--z-overlay` | `30` |
842
+ | `--z-popover` | `50` |
843
+ | `--z-toast` | `60` |
844
+ | `--accent-1` | `color-mix(in srgb, var(--accent) 8%, var(--bg))` |
845
+ | `--accent-2` | `color-mix(in srgb, var(--accent) 16%, var(--bg))` |
846
+ | `--accent-3` | `color-mix(in srgb, var(--accent) 32%, var(--bg))` |
847
+ | `--accent-4` | `color-mix(in srgb, var(--accent) 60%, var(--bg))` |
848
+ | `--accent-5` | `var(--accent)` |
849
+ | `--accent-6` | `var(--accent-strong)` |
850
+ | `--surface-1` | `var(--bg)` |
851
+ | `--surface-2` | `var(--bg-elevated)` |
852
+ | `--surface-3` | `var(--panel)` |
853
+ | `--surface-4` | `var(--panel-soft)` |
854
+ | `--surface-5` | `var(--line)` |
855
+ | `--surface-6` | `var(--line-strong)` |
856
+ | `--bronto-color-bg` | `var(--bg)` |
857
+ | `--bronto-color-surface` | `var(--panel)` |
858
+ | `--bronto-color-surface-raised` | `var(--panel-strong)` |
859
+ | `--bronto-color-border` | `var(--line)` |
860
+ | `--bronto-color-border-strong` | `var(--line-strong)` |
861
+ | `--bronto-color-text` | `var(--text)` |
862
+ | `--bronto-color-text-muted` | `var(--text-dim)` |
863
+ | `--bronto-color-action` | `var(--accent)` |
864
+ | `--bronto-color-on-action` | `var(--button-text)` |
865
+ | `--bronto-color-focus` | `var(--focus-ring)` |
866
+ | `--bronto-color-success` | `var(--success)` |
867
+ | `--bronto-color-warning` | `var(--warning)` |
868
+ | `--bronto-color-danger` | `var(--danger)` |
869
+ | `--bronto-color-info` | `var(--info)` |
870
+ | `--surface` | `var(--panel)` |
871
+ | `--surface-raised` | `var(--panel-strong)` |
872
+ | `--surface-muted` | `var(--panel-soft)` |
873
+ | `--border` | `var(--line)` |
874
+ | `--border-strong` | `var(--line-strong)` |
875
+
876
+ ### Light theme
877
+
878
+ | Token | Value |
879
+ | --- | --- |
880
+ | `--bg` | `#f4f4f2` |
881
+ | `--bg-elevated` | `#fbfbfa` |
882
+ | `--bg-accent` | `color-mix(in srgb, var(--accent) 6%, transparent)` |
883
+ | `--panel` | `#ffffff` |
884
+ | `--panel-strong` | `#ffffff` |
885
+ | `--panel-soft` | `#ececea` |
886
+ | `--line` | `#d8d8d4` |
887
+ | `--line-strong` | `#a8a8a2` |
888
+ | `--text` | `#0a0a0a` |
889
+ | `--text-soft` | `#353533` |
890
+ | `--text-dim` | `#686863` |
891
+ | `--accent` | `#d71921` |
892
+ | `--accent-strong` | `color-mix(in srgb, var(--accent) 83%, #000)` |
893
+ | `--accent-text` | `var(--accent-strong)` |
894
+ | `--accent-soft` | `color-mix(in srgb, var(--accent) 10%, transparent)` |
895
+ | `--success` | `#2f7d4f` |
896
+ | `--success-soft` | `rgb(47, 125, 79, 0.12)` |
897
+ | `--warning` | `#806414` |
898
+ | `--warning-soft` | `rgb(128, 100, 20, 0.13)` |
899
+ | `--orange` | `#a85f32` |
900
+ | `--orange-soft` | `rgb(168, 95, 50, 0.13)` |
901
+ | `--danger` | `#c01622` |
902
+ | `--danger-soft` | `rgb(192, 22, 34, 0.1)` |
903
+ | `--info` | `#1f63c4` |
904
+ | `--info-soft` | `rgb(31, 99, 196, 0.12)` |
905
+ | `--code-bg` | `rgb(10, 10, 10, 0.05)` |
906
+ | `--button-text` | `#ffffff` |
907
+ | `--field-dot` | `rgb(10, 10, 10, 0.16)` |
908
+ | `--field-dot-hot` | `rgb(10, 10, 10, 0.4)` |
909
+ | `--field-dot-accent` | `color-mix(in srgb, var(--accent) 78%, transparent)` |
910
+ | `--focus-ring` | `var(--accent)` |
911
+ | `--shadow` | `none` |
912
+ | `--shadow-raised` | `0 0 0 1px var(--line-strong)` |
913
+
914
+ ### Dark theme
915
+
916
+ | Token | Value |
917
+ | --- | --- |
918
+ | `--bg` | `#000000` |
919
+ | `--bg-elevated` | `#0a0a0a` |
920
+ | `--bg-accent` | `color-mix(in srgb, var(--accent) 8%, transparent)` |
921
+ | `--panel` | `#0c0c0c` |
922
+ | `--panel-strong` | `#141414` |
923
+ | `--panel-soft` | `#1a1a1a` |
924
+ | `--line` | `#2a2a2a` |
925
+ | `--line-strong` | `#444444` |
926
+ | `--text` | `#f2f2f2` |
927
+ | `--text-soft` | `#c4c4c4` |
928
+ | `--text-dim` | `#858585` |
929
+ | `--accent` | `#ff3b41` |
930
+ | `--accent-strong` | `color-mix(in srgb, var(--accent) 84%, #fff)` |
931
+ | `--accent-text` | `var(--accent-strong)` |
932
+ | `--accent-soft` | `color-mix(in srgb, var(--accent) 14%, transparent)` |
933
+ | `--success` | `#4ec27e` |
934
+ | `--success-soft` | `rgb(78, 194, 126, 0.14)` |
935
+ | `--warning` | `#d8bd72` |
936
+ | `--warning-soft` | `rgb(216, 189, 114, 0.14)` |
937
+ | `--orange` | `#d08c5b` |
938
+ | `--orange-soft` | `rgb(208, 140, 91, 0.15)` |
939
+ | `--danger` | `#ff4d54` |
940
+ | `--danger-soft` | `rgb(255, 77, 84, 0.15)` |
941
+ | `--info` | `#6fb0e6` |
942
+ | `--info-soft` | `rgb(111, 176, 230, 0.14)` |
943
+ | `--code-bg` | `rgb(255, 255, 255, 0.05)` |
944
+ | `--button-text` | `#000000` |
945
+ | `--field-dot` | `rgb(242, 242, 242, 0.14)` |
946
+ | `--field-dot-hot` | `rgb(242, 242, 242, 0.36)` |
947
+ | `--field-dot-accent` | `color-mix(in srgb, var(--accent) 82%, transparent)` |
948
+ | `--focus-ring` | `var(--accent)` |
949
+ | `--shadow` | `none` |
950
+ | `--shadow-raised` | `0 0 0 1px var(--line-strong)` |