@ponchia/ui 0.3.1 → 0.3.3

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