@ponchia/ui 0.8.1 → 0.10.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 (85) hide show
  1. package/CHANGELOG.md +149 -3
  2. package/MIGRATIONS.json +117 -27
  3. package/README.md +19 -11
  4. package/behaviors/index.d.ts +0 -2
  5. package/behaviors/index.d.ts.map +1 -1
  6. package/behaviors/index.js +0 -2
  7. package/behaviors/popover.js +4 -4
  8. package/classes/classes.json +48 -10
  9. package/classes/index.d.ts +16 -3
  10. package/classes/index.js +28 -3
  11. package/classes/vscode.css-custom-data.json +10 -10
  12. package/css/app.css +52 -30
  13. package/css/base.css +10 -14
  14. package/css/content.css +23 -21
  15. package/css/core.css +1 -0
  16. package/css/disclosure.css +17 -17
  17. package/css/feedback.css +15 -15
  18. package/css/forms.css +8 -7
  19. package/css/navigation.css +3 -3
  20. package/css/overlay.css +37 -39
  21. package/css/primitives.css +48 -28
  22. package/css/report.css +66 -42
  23. package/css/row.css +154 -0
  24. package/css/state.css +95 -6
  25. package/css/table.css +3 -3
  26. package/css/tokens.css +10 -10
  27. package/css/workbench.css +22 -10
  28. package/dist/bronto.css +1 -1
  29. package/dist/css/app.css +1 -1
  30. package/dist/css/base.css +1 -1
  31. package/dist/css/content.css +1 -1
  32. package/dist/css/disclosure.css +1 -1
  33. package/dist/css/feedback.css +1 -1
  34. package/dist/css/forms.css +1 -1
  35. package/dist/css/navigation.css +1 -1
  36. package/dist/css/overlay.css +1 -1
  37. package/dist/css/primitives.css +1 -1
  38. package/dist/css/report-kit.css +1 -1
  39. package/dist/css/report.css +1 -1
  40. package/dist/css/row.css +1 -0
  41. package/dist/css/state.css +1 -1
  42. package/dist/css/table.css +1 -1
  43. package/dist/css/tokens.css +1 -1
  44. package/dist/css/workbench.css +1 -1
  45. package/docs/adr/0004-prune-unused-adapters.md +5 -1
  46. package/docs/adr/0005-productive-tools-and-editorial-reports.md +58 -0
  47. package/docs/adr/0006-trusted-publishing.md +92 -0
  48. package/docs/architecture.md +16 -23
  49. package/docs/command.md +1 -2
  50. package/docs/compositions.md +110 -0
  51. package/docs/frontier-primitives.md +1 -2
  52. package/docs/migrations/0.8-to-0.9.md +66 -0
  53. package/docs/migrations/0.9-to-0.10.md +47 -0
  54. package/docs/package-contract.md +13 -13
  55. package/docs/reference.md +43 -18
  56. package/docs/reporting.md +15 -9
  57. package/docs/stability.md +20 -55
  58. package/docs/state.md +47 -0
  59. package/docs/theming.md +16 -0
  60. package/docs/usage.md +60 -30
  61. package/llms.txt +7 -18
  62. package/package.json +15 -54
  63. package/tokens/figma.variables.json +20 -20
  64. package/tokens/index.js +10 -10
  65. package/tokens/index.json +20 -20
  66. package/tokens/resolved.json +10 -10
  67. package/tokens/tokens.dtcg.json +20 -20
  68. package/behaviors/modal.d.ts +0 -45
  69. package/behaviors/modal.d.ts.map +0 -1
  70. package/behaviors/modal.js +0 -373
  71. package/qwik/index.d.ts +0 -48
  72. package/qwik/index.d.ts.map +0 -1
  73. package/qwik/index.js +0 -227
  74. package/react/index.d.ts +0 -45
  75. package/react/index.d.ts.map +0 -1
  76. package/react/index.js +0 -165
  77. package/solid/index.d.ts +0 -75
  78. package/solid/index.d.ts.map +0 -1
  79. package/solid/index.js +0 -172
  80. package/svelte/index.d.ts +0 -114
  81. package/svelte/index.d.ts.map +0 -1
  82. package/svelte/index.js +0 -197
  83. package/vue/index.d.ts +0 -116
  84. package/vue/index.d.ts.map +0 -1
  85. package/vue/index.js +0 -266
package/css/state.css CHANGED
@@ -262,29 +262,38 @@
262
262
  ========================================================================== */
263
263
 
264
264
  /* Declared once so a host putting the level on its own element gets the same
265
- mapping from `data-level` + `var(--severity-tone)`, without copying a table. */
265
+ mapping from `data-level` + `var(--severity-tone)`, without copying a table.
266
+
267
+ `.ui-severity-tone` is that host element's hook, and it paints nothing: the
268
+ three classes below all draw something — a chip, a ruled row, a background
269
+ dot — and a consumer whose mark Bronto does not ship needs the VALUE without
270
+ any of them. The case that proved it was an SVG `<circle>`, which ignores
271
+ `background` entirely, so a status strip had to restate the whole tier table
272
+ in `fill` and could then disagree with the rows beside it. */
266
273
  .ui-severity,
267
274
  .ui-severity-row,
268
- .ui-severity-dot {
275
+ .ui-severity-dot,
276
+ .ui-severity-tone,
277
+ .ui-timestrip__event {
269
278
  --severity-tone: var(--text-dim);
270
279
  }
271
280
 
272
- :is(.ui-severity, .ui-severity-row, .ui-severity-dot):is(
281
+ :is(.ui-severity, .ui-severity-row, .ui-severity-dot, .ui-severity-tone, .ui-timestrip__event):is(
273
282
  [data-level='critical'],
274
283
  [data-level='error']
275
284
  ) {
276
285
  --severity-tone: var(--danger);
277
286
  }
278
287
 
279
- :is(.ui-severity, .ui-severity-row, .ui-severity-dot)[data-level='warning'] {
288
+ :is(.ui-severity, .ui-severity-row, .ui-severity-dot, .ui-severity-tone, .ui-timestrip__event)[data-level='warning'] {
280
289
  --severity-tone: var(--warning);
281
290
  }
282
291
 
283
- :is(.ui-severity, .ui-severity-row, .ui-severity-dot)[data-level='notice'] {
292
+ :is(.ui-severity, .ui-severity-row, .ui-severity-dot, .ui-severity-tone, .ui-timestrip__event)[data-level='notice'] {
284
293
  --severity-tone: var(--info);
285
294
  }
286
295
 
287
- :is(.ui-severity, .ui-severity-row, .ui-severity-dot)[data-level='ok'] {
296
+ :is(.ui-severity, .ui-severity-row, .ui-severity-dot, .ui-severity-tone, .ui-timestrip__event)[data-level='ok'] {
288
297
  --severity-tone: var(--success);
289
298
  }
290
299
 
@@ -370,6 +379,86 @@
370
379
  font-size: var(--text-2xs);
371
380
  }
372
381
 
382
+ /* ==========================================================================
383
+ timestrip — WHEN the things in a list entered the state they are in.
384
+
385
+ A status list answers "what". This answers "when", on one axis, at a glance:
386
+ a cluster of marks at the leading edge is a fresh incident, a lone mark
387
+ pinned to the trailing edge has been wrong for a while. It is the companion
388
+ to `.ui-severity-row` and takes the same `data-level`, so a strip can never
389
+ disagree with the rows beneath it.
390
+
391
+ BOUNDARY — this is geometry, not a chart. The host owns the window, the
392
+ clock, and the arithmetic: it normalises each event to a position in 0..1 and
393
+ writes it as `--at`. Bronto owns the rail, the marker, and the mark. There
394
+ are no scales, no ticks, no axis labels and no time parsing here; a surface
395
+ that wanted those wants a chart, and Bronto refuses chart scales.
396
+
397
+ <div class="ui-timestrip" role="img" aria-label="…">
398
+ <span class="ui-timestrip__axis"></span>
399
+ <span class="ui-timestrip__now"></span>
400
+ <span class="ui-timestrip__event" data-level="critical" style="--at: .92"></span>
401
+ <span class="ui-timestrip__event" data-level="ok" data-outside style="--at: 0"></span>
402
+ </div>
403
+
404
+ `data-outside` is for an event older than the window. It stays at the edge at
405
+ reduced weight rather than vanishing, because a strip that reads "quiet"
406
+ while a row says "failing for three days" is worse than one that reads
407
+ crowded. The mark is not the state's only channel: the rows below name their
408
+ level in words, and the strip needs an `aria-label` naming what it plots.
409
+ ========================================================================== */
410
+
411
+ .ui-timestrip {
412
+ block-size: 1.4rem;
413
+ display: block;
414
+ inline-size: 100%;
415
+ position: relative;
416
+ }
417
+
418
+ /* The rail the marks sit on, and the edge that is "now". Both are decorative:
419
+ they carry no fact the label and the rows do not already carry. */
420
+ .ui-timestrip__axis {
421
+ background: var(--line);
422
+ block-size: 1px;
423
+ inset-block-end: 0.35rem;
424
+ inset-inline: 0;
425
+ position: absolute;
426
+ }
427
+
428
+ .ui-timestrip__now {
429
+ border-inline-end: 1px dashed var(--text-dim);
430
+ inset-block: 0.1rem 0.25rem;
431
+ inset-inline-end: 0;
432
+ position: absolute;
433
+ }
434
+
435
+ /* `--at` is the host's answer: 0 is the oldest edge of the window, 1 is now.
436
+ Clamped rather than trusted — an out-of-range value is a host bug, and a mark
437
+ drawn outside its own strip is harder to diagnose than one at the edge. */
438
+ .ui-timestrip__event {
439
+ background: var(--severity-tone);
440
+ block-size: 0.4rem;
441
+ border-radius: var(--radius-pill);
442
+ inline-size: 0.4rem;
443
+ inset-block-end: 0.55rem;
444
+ inset-inline-start: calc(clamp(0, var(--at, 0), 1) * 100%);
445
+ position: absolute;
446
+ translate: -50% 0;
447
+ }
448
+
449
+ .ui-timestrip__event[data-outside] {
450
+ opacity: 0.55;
451
+ }
452
+
453
+ /* Forced colours: the tone is replaced, so the marks stop distinguishing tiers.
454
+ They still say WHEN, which is the strip's whole job, and the level stays
455
+ readable in the rows. */
456
+ @media (forced-colors: active) {
457
+ .ui-timestrip__event {
458
+ background: CanvasText;
459
+ }
460
+ }
461
+
373
462
  /* Forced colours: the tone dot collapses to a system colour, so the
374
463
  author-written label remains the state channel (it already must be). */
375
464
  @media (forced-colors: active) {
package/css/table.css CHANGED
@@ -11,7 +11,7 @@
11
11
 
12
12
  .ui-table {
13
13
  border-collapse: collapse;
14
- font-family: var(--mono);
14
+ font-family: var(--sans);
15
15
  font-size: var(--text-sm);
16
16
  min-inline-size: 100%;
17
17
  inline-size: 100%;
@@ -32,9 +32,9 @@
32
32
  color: var(--text-dim);
33
33
  font-size: var(--text-2xs);
34
34
  font-weight: 700;
35
- letter-spacing: var(--tracking-wide);
35
+ letter-spacing: 0;
36
36
  position: sticky;
37
- text-transform: uppercase;
37
+ text-transform: none;
38
38
  inset-block-start: 0;
39
39
 
40
40
  /* Keep the sticky header above body cells — cheap insurance for the
package/css/tokens.css CHANGED
@@ -11,10 +11,10 @@
11
11
 
12
12
  :root {
13
13
  /* Sharp, near-zero radii — Nothing surfaces are crisp, not pill-soft. */
14
- --radius-xl: 4px;
15
- --radius-lg: 3px;
16
- --radius-md: 2px;
17
- --radius-sm: 1px;
14
+ --radius-xl: 8px;
15
+ --radius-lg: 6px;
16
+ --radius-md: 4px;
17
+ --radius-sm: 2px;
18
18
  --radius-pill: 999px;
19
19
 
20
20
  /* Spacing scale. */
@@ -39,12 +39,12 @@
39
39
  --display: var(--dot-font);
40
40
  --display-weight: 700;
41
41
  --display-weight-strong: 800;
42
- --text-2xs: 0.72rem;
43
- --text-xs: 0.76rem;
44
- --text-sm: 0.86rem;
45
- --text-base: 0.95rem;
46
- --text-lg: 1.15rem;
47
- --text-xl: 1.45rem;
42
+ --text-2xs: 0.75rem;
43
+ --text-xs: 0.8125rem;
44
+ --text-sm: 0.875rem;
45
+ --text-base: 1rem;
46
+ --text-lg: 1.125rem;
47
+ --text-xl: 1.5rem;
48
48
  --tracking-wide: 0.14em;
49
49
  --tracking-wider: 0.22em;
50
50
 
package/css/workbench.css CHANGED
@@ -10,6 +10,7 @@
10
10
 
11
11
  /* --- Inspector — a panel of details for the selected object. --- */
12
12
  .ui-inspector {
13
+ container: bronto-inspector / inline-size;
13
14
  background: var(--panel);
14
15
  border: 1px solid var(--line);
15
16
  border-radius: var(--radius-md);
@@ -22,6 +23,7 @@
22
23
  align-items: baseline;
23
24
  border-block-end: 1px solid var(--line);
24
25
  display: flex;
26
+ flex-wrap: wrap;
25
27
  gap: var(--space-sm);
26
28
  justify-content: space-between;
27
29
  padding-block-end: var(--space-xs);
@@ -53,7 +55,7 @@
53
55
 
54
56
  .ui-toolstrip--compact {
55
57
  gap: var(--space-2xs);
56
- padding: 0.25rem;
58
+ padding: var(--space-2xs);
57
59
  }
58
60
 
59
61
  /* Pane-scale — a control bar belonging to ONE pane rather than to the app. The
@@ -152,14 +154,14 @@
152
154
  border-radius: var(--radius-sm);
153
155
  color: var(--text-soft);
154
156
  cursor: pointer;
155
- font-family: var(--mono);
157
+ font-family: var(--sans);
156
158
  font-size: var(--text-xs);
157
159
  font-weight: 700;
158
- letter-spacing: var(--tracking-wide);
160
+ letter-spacing: 0;
159
161
  line-height: 1;
160
162
  min-block-size: 1.9rem;
161
163
  padding: 0.48rem 0.7rem;
162
- text-transform: uppercase;
164
+ text-transform: none;
163
165
  }
164
166
 
165
167
  .ui-segmented-buttons__button[aria-pressed='true'],
@@ -181,21 +183,31 @@
181
183
  align-items: baseline;
182
184
  display: grid;
183
185
  gap: var(--space-sm);
184
- grid-template-columns: minmax(6rem, 38%) 1fr;
186
+ grid-template-columns: minmax(0, 38%) minmax(0, 1fr);
185
187
  }
186
188
 
187
189
  .ui-property__label {
188
190
  color: var(--text-dim);
189
- font-family: var(--mono);
190
- font-size: var(--text-2xs);
191
- letter-spacing: var(--tracking-wide);
192
- text-transform: uppercase;
191
+ font-family: var(--sans);
192
+ font-size: var(--text-xs);
193
+ overflow-wrap: anywhere;
194
+ letter-spacing: 0;
195
+ text-transform: none;
193
196
  }
194
197
 
195
198
  .ui-property__value {
196
199
  color: var(--text);
197
200
  font-size: var(--text-sm);
198
201
  min-inline-size: 0;
202
+ overflow-wrap: anywhere;
203
+ }
204
+
205
+ @container bronto-inspector (max-inline-size: 20rem) {
206
+ .ui-property {
207
+ gap: var(--space-2xs);
208
+ grid-template-columns: minmax(0, 1fr);
209
+ padding-block: var(--space-xs);
210
+ }
199
211
  }
200
212
 
201
213
  /* --- Pane — a movable, renameable surface with a grab header.
@@ -304,7 +316,7 @@
304
316
 
305
317
  .ui-selectionbar__count {
306
318
  color: var(--text);
307
- font-family: var(--mono);
319
+ font-family: var(--sans);
308
320
  font-size: var(--text-sm);
309
321
  }
310
322