@teamblind-chorus/ui 1.1.0 → 2.0.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 (148) hide show
  1. package/README.md +3 -3
  2. package/agents/AGENTS.md +6 -6
  3. package/agents/DESIGN.md +245 -244
  4. package/agents/LOVABLE.md +40 -11
  5. package/agents/catalog.md +10 -8
  6. package/agents/components/avatar-rail/avatar-rail.md +2 -4
  7. package/agents/components/avatar-rail/avatar-rail.spec.json +27 -12
  8. package/agents/components/badge/role.md +7 -9
  9. package/agents/components/badge/role.spec.json +6 -6
  10. package/agents/components/badge/update.md +6 -8
  11. package/agents/components/badge/update.spec.json +5 -5
  12. package/agents/components/banner/banner.family.json +3 -1
  13. package/agents/components/banner/banner.md +66 -15
  14. package/agents/components/banner/banner.spec.json +37 -14
  15. package/agents/components/bottom-sheet/bottom-sheet.md +4 -6
  16. package/agents/components/bottom-sheet/bottom-sheet.spec.json +5 -5
  17. package/agents/components/bubble/bubble.md +8 -10
  18. package/agents/components/bubble/bubble.spec.json +11 -11
  19. package/agents/components/button/button.md +1 -1
  20. package/agents/components/button/check.md +9 -11
  21. package/agents/components/button/check.spec.json +25 -8
  22. package/agents/components/button/fab.md +7 -9
  23. package/agents/components/button/fab.spec.json +27 -10
  24. package/agents/components/button/group.spec.json +4 -4
  25. package/agents/components/button/icon.md +21 -23
  26. package/agents/components/button/icon.spec.json +29 -12
  27. package/agents/components/button/standard.md +40 -42
  28. package/agents/components/button/standard.spec.json +37 -20
  29. package/agents/components/button/text.md +21 -23
  30. package/agents/components/button/text.spec.json +30 -13
  31. package/agents/components/button/toggle.md +7 -9
  32. package/agents/components/button/toggle.spec.json +27 -10
  33. package/agents/components/button/toolbar.md +24 -26
  34. package/agents/components/button/toolbar.spec.json +10 -12
  35. package/agents/components/carousel/carousel.md +1 -1
  36. package/agents/components/carousel/post.md +15 -21
  37. package/agents/components/carousel/post.spec.json +17 -17
  38. package/agents/components/carousel/profile.md +9 -45
  39. package/agents/components/carousel/profile.spec.json +17 -17
  40. package/agents/components/chip/chip.md +1 -1
  41. package/agents/components/chip/filter.md +22 -24
  42. package/agents/components/chip/filter.spec.json +34 -11
  43. package/agents/components/chip/tag.md +22 -24
  44. package/agents/components/chip/tag.spec.json +36 -13
  45. package/agents/components/dialog/dialog.md +1 -3
  46. package/agents/components/dialog/dialog.spec.json +3 -3
  47. package/agents/components/directory-list/directory-list.md +1 -3
  48. package/agents/components/directory-list/directory-list.spec.json +2 -2
  49. package/agents/components/divider/divider.family.json +1 -1
  50. package/agents/components/divider/divider.md +12 -14
  51. package/agents/components/divider/divider.spec.json +8 -8
  52. package/agents/components/empty-state/empty-state.family.json +28 -0
  53. package/agents/components/empty-state/empty-state.md +69 -0
  54. package/agents/components/empty-state/empty-state.spec.json +87 -0
  55. package/agents/components/feed/ad.md +2 -4
  56. package/agents/components/feed/ad.spec.json +10 -10
  57. package/agents/components/feed/post.md +41 -43
  58. package/agents/components/feed/post.spec.json +35 -39
  59. package/agents/components/form-field/form-field.md +1 -1
  60. package/agents/components/form-field/input.md +32 -34
  61. package/agents/components/form-field/input.spec.json +39 -31
  62. package/agents/components/form-field/search.md +2 -4
  63. package/agents/components/form-field/search.spec.json +24 -16
  64. package/agents/components/form-field/select.md +18 -20
  65. package/agents/components/form-field/select.spec.json +36 -27
  66. package/agents/components/form-field/textarea.md +3 -5
  67. package/agents/components/form-field/textarea.spec.json +37 -29
  68. package/agents/components/header/main.md +4 -6
  69. package/agents/components/header/main.spec.json +3 -3
  70. package/agents/components/header/sub.md +6 -8
  71. package/agents/components/header/sub.spec.json +3 -3
  72. package/agents/components/list/accordion.md +34 -45
  73. package/agents/components/list/accordion.spec.json +26 -17
  74. package/agents/components/list/entry.md +59 -81
  75. package/agents/components/list/entry.spec.json +37 -21
  76. package/agents/components/list/list.md +2 -2
  77. package/agents/components/list/radio.md +13 -20
  78. package/agents/components/list/radio.spec.json +33 -18
  79. package/agents/components/list/standard.md +88 -64
  80. package/agents/components/list/standard.spec.json +52 -20
  81. package/agents/components/metadata/compact.md +4 -6
  82. package/agents/components/metadata/compact.spec.json +6 -6
  83. package/agents/components/metadata/metadata.md +1 -1
  84. package/agents/components/metadata/standard.md +12 -14
  85. package/agents/components/metadata/standard.spec.json +10 -10
  86. package/agents/components/nav-card/nav-card.md +25 -27
  87. package/agents/components/nav-card/nav-card.spec.json +25 -16
  88. package/agents/components/nav-list/nav-list.md +2 -8
  89. package/agents/components/nav-list/nav-list.spec.json +3 -3
  90. package/agents/components/navigation-bar/main.md +9 -11
  91. package/agents/components/navigation-bar/main.spec.json +6 -6
  92. package/agents/components/navigation-bar/search.md +6 -8
  93. package/agents/components/navigation-bar/search.spec.json +9 -9
  94. package/agents/components/navigation-bar/sub.md +9 -11
  95. package/agents/components/navigation-bar/sub.spec.json +7 -7
  96. package/agents/components/page-shell/page-shell.family.json +1 -1
  97. package/agents/components/page-shell/page-shell.md +33 -0
  98. package/agents/components/page-shell/page-shell.spec.json +85 -0
  99. package/agents/components/pagination/pagination.family.json +1 -1
  100. package/agents/components/pagination/pagination.md +3 -3
  101. package/agents/components/pagination/pagination.spec.json +5 -5
  102. package/agents/components/profile-header/profile-header.md +9 -11
  103. package/agents/components/profile-header/profile-header.spec.json +9 -9
  104. package/agents/components/progress/progress.family.json +1 -1
  105. package/agents/components/progress/progress.md +5 -5
  106. package/agents/components/progress/progress.spec.json +8 -8
  107. package/agents/components/side-sheet/side-sheet.md +11 -13
  108. package/agents/components/side-sheet/side-sheet.spec.json +3 -3
  109. package/agents/components/skeleton/skeleton.md +7 -9
  110. package/agents/components/skeleton/skeleton.spec.json +5 -5
  111. package/agents/components/spinner/spinner.family.json +27 -0
  112. package/agents/components/spinner/spinner.md +96 -0
  113. package/agents/components/spinner/spinner.spec.json +82 -0
  114. package/agents/components/status-tag/status-tag.md +7 -9
  115. package/agents/components/status-tag/status-tag.spec.json +5 -5
  116. package/agents/components/suggestion-list/suggestion-list.md +3 -7
  117. package/agents/components/suggestion-list/suggestion-list.spec.json +8 -12
  118. package/agents/components/switch/switch.md +12 -14
  119. package/agents/components/switch/switch.spec.json +23 -15
  120. package/agents/components/tab-bar/tab-bar.md +9 -11
  121. package/agents/components/tab-bar/tab-bar.spec.json +37 -23
  122. package/agents/components/tabs/rounded.md +6 -8
  123. package/agents/components/tabs/rounded.spec.json +34 -13
  124. package/agents/components/tabs/segmented.md +4 -6
  125. package/agents/components/tabs/segmented.spec.json +4 -8
  126. package/agents/components/tabs/underline.md +9 -11
  127. package/agents/components/tabs/underline.spec.json +31 -14
  128. package/agents/components/thumbnail/thumbnail.md +5 -7
  129. package/agents/components/thumbnail/thumbnail.spec.json +8 -8
  130. package/agents/components/toast/toast.md +5 -7
  131. package/agents/components/toast/toast.spec.json +3 -3
  132. package/agents/components/tooltip/tooltip.md +6 -8
  133. package/agents/components/tooltip/tooltip.spec.json +4 -4
  134. package/agents/manifest.json +8 -6
  135. package/agents/tokens.usage.json +71 -226
  136. package/agents/usage.json +12 -0
  137. package/dist/index.cjs +531 -262
  138. package/dist/index.cjs.map +1 -1
  139. package/dist/index.d.cts +57 -13
  140. package/dist/index.d.ts +57 -13
  141. package/dist/index.js +530 -263
  142. package/dist/index.js.map +1 -1
  143. package/dist/styles.css +560 -379
  144. package/eslint/rules.js +7 -7
  145. package/package.json +2 -3
  146. package/agents/anti-patterns.md +0 -533
  147. package/agents/compose.md +0 -240
  148. package/agents/images.md +0 -66
@@ -102,10 +102,7 @@
102
102
  "section heading text color"
103
103
  ],
104
104
  "maxInstancesPerScreen": 3,
105
- "maxInstancesRationale": "Brand red is a marker — more than 3 instances per screen dilute its meaning. The canonical instances are: the Create entry on tab-bar (1), an active-like state inside a feed item (≤2), an optional promotional banner accent (1).",
106
- "value": "#d92626",
107
- "darkValue": "#d92626",
108
- "unit": "hex"
105
+ "maxInstancesRationale": "Brand red is a marker — more than 3 instances per screen dilute its meaning. The canonical instances are: the Create entry on tab-bar (1), an active-like state inside a feed item (≤2), an optional promotional banner accent (1)."
109
106
  },
110
107
  "sys.color.brandContainer": {
111
108
  "role": "Tinted brand surface — promotional accent without full saturation.",
@@ -116,10 +113,7 @@
116
113
  "notFor": [
117
114
  "primary CTA"
118
115
  ],
119
- "pairsWith": "sys.color.onBrandContainer",
120
- "value": "#faf2f2",
121
- "darkValue": "#350a0a",
122
- "unit": "hex"
116
+ "pairsWith": "sys.color.onBrandContainer"
123
117
  },
124
118
  "sys.color.elevation": {
125
119
  "role": "Elevation shadow color (compose into box-shadow).",
@@ -128,10 +122,7 @@
128
122
  ],
129
123
  "notFor": [
130
124
  "visible fills"
131
- ],
132
- "value": "#000000",
133
- "darkValue": "#000000",
134
- "unit": "hex"
125
+ ]
135
126
  },
136
127
  "sys.color.error": {
137
128
  "role": "Red destructive / error commit color — never used for emphasis, only for destructive actions or error states.",
@@ -156,10 +147,7 @@
156
147
  "default body text",
157
148
  "tab-bar/* (Create item uses brand)",
158
149
  "promotional surfaces (use brand)"
159
- ],
160
- "value": "#b42222",
161
- "darkValue": "#931a1a",
162
- "unit": "hex"
150
+ ]
163
151
  },
164
152
  "sys.color.errorContainer": {
165
153
  "role": "Tinted-red surface — destructive banner / error notice.",
@@ -168,10 +156,7 @@
168
156
  "destructive callout"
169
157
  ],
170
158
  "notFor": [],
171
- "pairsWith": "sys.color.onErrorContainer",
172
- "value": "#f5dbdb",
173
- "darkValue": "#350a0a",
174
- "unit": "hex"
159
+ "pairsWith": "sys.color.onErrorContainer"
175
160
  },
176
161
  "sys.color.focus": {
177
162
  "role": "Focus ring outer stroke color.",
@@ -181,10 +166,7 @@
181
166
  "notFor": [
182
167
  "body text",
183
168
  "interactive fills"
184
- ],
185
- "value": "#000000",
186
- "darkValue": "#ffffff",
187
- "unit": "hex"
169
+ ]
188
170
  },
189
171
  "sys.color.focusInset": {
190
172
  "role": "Focus ring inner counter-ring color — paints between the focus stroke and the control.",
@@ -193,10 +175,7 @@
193
175
  ],
194
176
  "notFor": [
195
177
  "body text"
196
- ],
197
- "value": "#ffffff",
198
- "darkValue": "#000000",
199
- "unit": "hex"
178
+ ]
200
179
  },
201
180
  "sys.color.inverseOnSurface": {
202
181
  "role": "Foreground on inverseSurface — Toast text.",
@@ -205,10 +184,7 @@
205
184
  ],
206
185
  "notFor": [
207
186
  "default body text"
208
- ],
209
- "value": "#fafafa",
210
- "darkValue": "#141414",
211
- "unit": "hex"
187
+ ]
212
188
  },
213
189
  "sys.color.inverseSurface": {
214
190
  "role": "Inverse-theme surface — Toast background sits on this.",
@@ -217,48 +193,33 @@
217
193
  ],
218
194
  "notFor": [
219
195
  "default page surface"
220
- ],
221
- "value": "#141414",
222
- "darkValue": "#fafafa",
223
- "unit": "hex"
196
+ ]
224
197
  },
225
198
  "sys.color.onBrand": {
226
199
  "role": "Foreground on sys.color.brand fills.",
227
200
  "usedFor": [
228
201
  "icon/label on a brand-filled FAB or banner"
229
202
  ],
230
- "notFor": [],
231
- "value": "#fafafa",
232
- "darkValue": "#fafafa",
233
- "unit": "hex"
203
+ "notFor": []
234
204
  },
235
205
  "sys.color.onBrandContainer": {
236
206
  "role": "Foreground on brandContainer surfaces.",
237
207
  "usedFor": [
238
208
  "label on brandContainer fills"
239
209
  ],
240
- "notFor": [],
241
- "value": "#b42222",
242
- "darkValue": "#df5656",
243
- "unit": "hex"
210
+ "notFor": []
244
211
  },
245
212
  "sys.color.onError": {
246
213
  "role": "Foreground on error fills.",
247
214
  "usedFor": [
248
215
  "label on a destructive-filled button"
249
216
  ],
250
- "notFor": [],
251
- "value": "#fafafa",
252
- "darkValue": "#fafafa",
253
- "unit": "hex"
217
+ "notFor": []
254
218
  },
255
219
  "sys.color.onErrorContainer": {
256
220
  "role": "Foreground on errorContainer.",
257
221
  "usedFor": [],
258
- "notFor": [],
259
- "value": "#931a1a",
260
- "darkValue": "#d92626",
261
- "unit": "hex"
222
+ "notFor": []
262
223
  },
263
224
  "sys.color.onPrimary": {
264
225
  "role": "Foreground that paints ON sys.color.primary fills. Travels as a pair.",
@@ -268,10 +229,7 @@
268
229
  ],
269
230
  "notFor": [
270
231
  "any surface that isn't sys.color.primary"
271
- ],
272
- "value": "#fafafa",
273
- "darkValue": "#fafafa",
274
- "unit": "hex"
232
+ ]
275
233
  },
276
234
  "sys.color.onPrimaryContainer": {
277
235
  "role": "Foreground for primaryContainer surfaces. Travels as a pair.",
@@ -280,10 +238,7 @@
280
238
  ],
281
239
  "notFor": [
282
240
  "primary fills (use onPrimary)"
283
- ],
284
- "value": "#1d4ed8",
285
- "darkValue": "#5081ed",
286
- "unit": "hex"
241
+ ]
287
242
  },
288
243
  "sys.color.onSecondary": {
289
244
  "role": "Foreground on sys.color.secondary fills.",
@@ -292,38 +247,26 @@
292
247
  ],
293
248
  "notFor": [
294
249
  "surfaces other than secondary"
295
- ],
296
- "value": "#fafafa",
297
- "darkValue": "#141414",
298
- "unit": "hex"
250
+ ]
299
251
  },
300
252
  "sys.color.onSecondaryContainer": {
301
253
  "role": "Foreground on secondaryContainer surfaces.",
302
254
  "usedFor": [
303
255
  "label on secondaryContainer fills"
304
256
  ],
305
- "notFor": [],
306
- "value": "#141414",
307
- "darkValue": "#f0f0f0",
308
- "unit": "hex"
257
+ "notFor": []
309
258
  },
310
259
  "sys.color.onSuccess": {
311
260
  "role": "Foreground on success fills.",
312
261
  "usedFor": [
313
262
  "label on a success-filled surface"
314
263
  ],
315
- "notFor": [],
316
- "value": "#fafafa",
317
- "darkValue": "#fafafa",
318
- "unit": "hex"
264
+ "notFor": []
319
265
  },
320
266
  "sys.color.onSuccessContainer": {
321
267
  "role": "Foreground on successContainer.",
322
268
  "usedFor": [],
323
- "notFor": [],
324
- "value": "#006d2c",
325
- "darkValue": "#25b260",
326
- "unit": "hex"
269
+ "notFor": []
327
270
  },
328
271
  "sys.color.onSurface": {
329
272
  "role": "Default body text color — what most text on a `surface` fill resolves to.",
@@ -334,10 +277,7 @@
334
277
  ],
335
278
  "notFor": [
336
279
  "primary CTA label on primary fill (use onPrimary)"
337
- ],
338
- "value": "#141414",
339
- "darkValue": "#fafafa",
340
- "unit": "hex"
280
+ ]
341
281
  },
342
282
  "sys.color.onSurfaceVariant": {
343
283
  "role": "Secondary text color — meta lines, supporting text, placeholders, glyph chrome.",
@@ -350,10 +290,7 @@
350
290
  ],
351
291
  "notFor": [
352
292
  "primary body text (use onSurface)"
353
- ],
354
- "value": "#3d3d3d",
355
- "darkValue": "#c2c2c2",
356
- "unit": "hex"
293
+ ]
357
294
  },
358
295
  "sys.color.outline": {
359
296
  "role": "Strong divider line — control boundary, full-emphasis border.",
@@ -363,10 +300,7 @@
363
300
  ],
364
301
  "notFor": [
365
302
  "hairline card stroke (use outlineVariant)"
366
- ],
367
- "value": "#999999",
368
- "darkValue": "#737373",
369
- "unit": "hex"
303
+ ]
370
304
  },
371
305
  "sys.color.outlineVariant": {
372
306
  "role": "Hairline edge stroke — card outline, divider line between rows.",
@@ -377,32 +311,7 @@
377
311
  ],
378
312
  "notFor": [
379
313
  "form field active stroke (use outline or primary)"
380
- ],
381
- "value": "#e0e0e0",
382
- "darkValue": "#3d3d3d",
383
- "unit": "hex"
384
- },
385
- "sys.color.placeholderImage.end": {
386
- "role": "Gradient end for the placeholder image-area underlay.",
387
- "usedFor": [
388
- "image-area underlay gradient end"
389
- ],
390
- "notFor": [],
391
- "value": "#2d6f72",
392
- "darkValue": "#1a2226",
393
- "unit": "hex"
394
- },
395
- "sys.color.placeholderImage.start": {
396
- "role": "Gradient start for the placeholder image-area underlay (when /placeholder.png itself is unavailable).",
397
- "usedFor": [
398
- "image-area underlay gradient start"
399
- ],
400
- "notFor": [
401
- "foreground content"
402
- ],
403
- "value": "#c8e0e1",
404
- "darkValue": "#3a4548",
405
- "unit": "hex"
314
+ ]
406
315
  },
407
316
  "sys.color.primary": {
408
317
  "role": "Brand-blue commit color — primary CTAs, active selection, link affordance.",
@@ -432,10 +341,7 @@
432
341
  "card outline (use outlineVariant)",
433
342
  "list-row divider (use outlineVariant)",
434
343
  "tab-bar/* (Create item uses brand, other items use onSurface)"
435
- ],
436
- "value": "#2563eb",
437
- "darkValue": "#2563eb",
438
- "unit": "hex"
344
+ ]
439
345
  },
440
346
  "sys.color.primaryContainer": {
441
347
  "role": "Tinted-primary surface for low-emphasis primary tints — informational chips, soft callouts.",
@@ -447,10 +353,7 @@
447
353
  "notFor": [
448
354
  "primary commit button (use primary)"
449
355
  ],
450
- "pairsWith": "sys.color.onPrimaryContainer",
451
- "value": "#f1f4fb",
452
- "darkValue": "#0a1833",
453
- "unit": "hex"
356
+ "pairsWith": "sys.color.onPrimaryContainer"
454
357
  },
455
358
  "sys.color.scrim": {
456
359
  "role": "Dialog / BottomSheet scrim background — semi-transparent black overlay.",
@@ -460,10 +363,7 @@
460
363
  ],
461
364
  "notFor": [
462
365
  "any visible surface"
463
- ],
464
- "value": "#000000a3",
465
- "darkValue": "#000000a3",
466
- "unit": "hex"
366
+ ]
467
367
  },
468
368
  "sys.color.scrimSubtle": {
469
369
  "role": "Translucent inverse-tone surface tint (~8% — black light / white dark). Surface-agnostic fill that stays visible on every host surface tier.",
@@ -477,10 +377,7 @@
477
377
  "notFor": [
478
378
  "modal backdrop (use scrim)",
479
379
  "opaque container surfaces (use surface* ladder)"
480
- ],
481
- "value": "#00000014",
482
- "darkValue": "#ffffff14",
483
- "unit": "hex"
380
+ ]
484
381
  },
485
382
  "sys.color.secondary": {
486
383
  "role": "Neutral-dark accent — secondary text, neutral active state, supporting metric.",
@@ -493,10 +390,7 @@
493
390
  "primary commit (use primary)",
494
391
  "body text on surface (use onSurface)"
495
392
  ],
496
- "pairsWith": "sys.color.onSecondary",
497
- "value": "#3d3d3d",
498
- "darkValue": "#c2c2c2",
499
- "unit": "hex"
393
+ "pairsWith": "sys.color.onSecondary"
500
394
  },
501
395
  "sys.color.secondaryContainer": {
502
396
  "role": "Tinted neutral surface — soft secondary tint.",
@@ -507,10 +401,7 @@
507
401
  "notFor": [
508
402
  "plain card surface (use surface)"
509
403
  ],
510
- "pairsWith": "sys.color.onSecondaryContainer",
511
- "value": "#f0f0f0",
512
- "darkValue": "#525252",
513
- "unit": "hex"
404
+ "pairsWith": "sys.color.onSecondaryContainer"
514
405
  },
515
406
  "sys.color.success": {
516
407
  "role": "Green commit / status color — success states, positive metrics.",
@@ -534,10 +425,7 @@
534
425
  "button fill (primary commits use primary; destructive uses error)",
535
426
  "navigation-bar/*",
536
427
  "default body text"
537
- ],
538
- "value": "#008838",
539
- "darkValue": "#008838",
540
- "unit": "hex"
428
+ ]
541
429
  },
542
430
  "sys.color.successContainer": {
543
431
  "role": "Tinted-green surface — success banner background.",
@@ -546,10 +434,7 @@
546
434
  "completed-state callout"
547
435
  ],
548
436
  "notFor": [],
549
- "pairsWith": "sys.color.onSuccessContainer",
550
- "value": "#f0faf3",
551
- "darkValue": "#00200a",
552
- "unit": "hex"
437
+ "pairsWith": "sys.color.onSuccessContainer"
553
438
  },
554
439
  "sys.color.surface": {
555
440
  "role": "Default page and card fill — the canvas every other surface paints over.",
@@ -562,10 +447,7 @@
562
447
  "notFor": [
563
448
  "tinted callouts (use *Container variants)"
564
449
  ],
565
- "pairsWith": "sys.color.onSurface",
566
- "value": "#ffffff",
567
- "darkValue": "#141414",
568
- "unit": "hex"
450
+ "pairsWith": "sys.color.onSurface"
569
451
  },
570
452
  "sys.color.surfaceBright": {
571
453
  "role": "Light-mode bright surface step — used in dark mode to invert to a near-white surface.",
@@ -574,10 +456,7 @@
574
456
  ],
575
457
  "notFor": [
576
458
  "light-mode default fill"
577
- ],
578
- "value": "#ffffff",
579
- "darkValue": "#262626",
580
- "unit": "hex"
459
+ ]
581
460
  },
582
461
  "sys.color.surfaceContainer": {
583
462
  "role": "Mid-tint surface for grouped content blocks — Feed citation card, neutral grouped surface.",
@@ -587,10 +466,7 @@
587
466
  ],
588
467
  "notFor": [
589
468
  "page background (use surface)"
590
- ],
591
- "value": "#ffffff",
592
- "darkValue": "#262626",
593
- "unit": "hex"
469
+ ]
594
470
  },
595
471
  "sys.color.surfaceContainerHigh": {
596
472
  "role": "Higher tint than surface — banner backgrounds, ProfileCarousel cover band, image-area fallback.",
@@ -601,10 +477,7 @@
601
477
  ],
602
478
  "notFor": [
603
479
  "page background"
604
- ],
605
- "value": "#ffffff",
606
- "darkValue": "#262626",
607
- "unit": "hex"
480
+ ]
608
481
  },
609
482
  "sys.color.surfaceContainerHighest": {
610
483
  "role": "Highest neutral surface tint — pressed-state row fill, deepest neutral callout.",
@@ -614,10 +487,7 @@
614
487
  ],
615
488
  "notFor": [
616
489
  "default fill"
617
- ],
618
- "value": "#ffffff",
619
- "darkValue": "#3d3d3d",
620
- "unit": "hex"
490
+ ]
621
491
  },
622
492
  "sys.color.surfaceContainerLow": {
623
493
  "role": "Slight tint below default surface — search input bar fill, hover-state row fill.",
@@ -627,10 +497,7 @@
627
497
  ],
628
498
  "notFor": [
629
499
  "card fill (use surface)"
630
- ],
631
- "value": "#f0f0f0",
632
- "darkValue": "#141414",
633
- "unit": "hex"
500
+ ]
634
501
  },
635
502
  "sys.color.surfaceContainerLowest": {
636
503
  "role": "Deepest-low tint — barely visible surface step. Reserved for very subtle separation.",
@@ -639,10 +506,7 @@
639
506
  ],
640
507
  "notFor": [
641
508
  "any default fill"
642
- ],
643
- "value": "#f0f0f0",
644
- "darkValue": "#000000",
645
- "unit": "hex"
509
+ ]
646
510
  },
647
511
  "sys.color.surfaceDim": {
648
512
  "role": "Dimmer-than-default surface — slightly muted variant.",
@@ -651,10 +515,7 @@
651
515
  ],
652
516
  "notFor": [
653
517
  "default fill"
654
- ],
655
- "value": "#e0e0e0",
656
- "darkValue": "#141414",
657
- "unit": "hex"
518
+ ]
658
519
  },
659
520
  "sys.color.surfaceVariant": {
660
521
  "role": "Subtly-tinted surface variant — input field rest fill, low-emphasis surface.",
@@ -665,10 +526,7 @@
665
526
  "notFor": [
666
527
  "page background (use surface)"
667
528
  ],
668
- "pairsWith": "sys.color.onSurfaceVariant",
669
- "value": "#f0f0f0",
670
- "darkValue": "#262626",
671
- "unit": "hex"
529
+ "pairsWith": "sys.color.onSurfaceVariant"
672
530
  },
673
531
  "sys.elevation.floating": {
674
532
  "role": "Free-floating above the page.",
@@ -699,20 +557,6 @@
699
557
  "darkValue": "0 4px 12px #00000014, 0 16px 48px #00000033",
700
558
  "unit": "shadow"
701
559
  },
702
- "sys.elevation.raised": {
703
- "role": "Subtle lift — sits-on the page.",
704
- "usedFor": [
705
- "card at rest",
706
- "hovered list rows",
707
- "selected menu items"
708
- ],
709
- "notFor": [
710
- "modal surfaces (use floating/overlay)"
711
- ],
712
- "value": "0 1px 2px #0000000a, 0 2px 6px #0000000f",
713
- "darkValue": "0 1px 2px #0000000a, 0 2px 6px #0000000f",
714
- "unit": "shadow"
715
- },
716
560
  "sys.elevation.sheet": {
717
561
  "role": "Edge-anchored panel projecting shadow upward (or away from the anchored edge).",
718
562
  "usedFor": [
@@ -1350,13 +1194,13 @@
1350
1194
  "mixed-group section body (use body.md or sm)"
1351
1195
  ],
1352
1196
  "value": {
1353
- "size": "20px",
1197
+ "size": "18px",
1354
1198
  "weight": 400,
1355
1199
  "line": 1.5,
1356
1200
  "tracking": "0em"
1357
1201
  },
1358
1202
  "darkValue": {
1359
- "size": "20px",
1203
+ "size": "18px",
1360
1204
  "weight": 400,
1361
1205
  "line": 1.5,
1362
1206
  "tracking": "0em"
@@ -1399,41 +1243,17 @@
1399
1243
  "value": {
1400
1244
  "size": "14px",
1401
1245
  "weight": 400,
1402
- "line": 1.5,
1246
+ "line": 1.35,
1403
1247
  "tracking": "0em"
1404
1248
  },
1405
1249
  "darkValue": {
1406
1250
  "size": "14px",
1407
1251
  "weight": 400,
1408
- "line": 1.5,
1252
+ "line": 1.35,
1409
1253
  "tracking": "0em"
1410
1254
  },
1411
1255
  "unit": "object"
1412
1256
  },
1413
- "sys.typo.caption": {
1414
- "role": "Caption (10px, weight 600) — smallest text rung; tiny annotation, badge count.",
1415
- "usedFor": [
1416
- "tiny annotation",
1417
- "badge count",
1418
- "smallest legal/aux line"
1419
- ],
1420
- "notFor": [
1421
- "any primary or meta text"
1422
- ],
1423
- "value": {
1424
- "size": "10px",
1425
- "weight": 600,
1426
- "line": 1.5,
1427
- "tracking": "0.02em"
1428
- },
1429
- "darkValue": {
1430
- "size": "10px",
1431
- "weight": 600,
1432
- "line": 1.5,
1433
- "tracking": "0.02em"
1434
- },
1435
- "unit": "object"
1436
- },
1437
1257
  "sys.typo.display.lg": {
1438
1258
  "role": "Largest display type (48→80px) — landing page hero headline.",
1439
1259
  "usedFor": [
@@ -1542,13 +1362,13 @@
1542
1362
  "list-row label (use body.md)"
1543
1363
  ],
1544
1364
  "value": {
1545
- "size": "20px",
1365
+ "size": "18px",
1546
1366
  "weight": 600,
1547
1367
  "line": 1.25,
1548
1368
  "tracking": "-0.01em"
1549
1369
  },
1550
1370
  "darkValue": {
1551
- "size": "20px",
1371
+ "size": "18px",
1552
1372
  "weight": 600,
1553
1373
  "line": 1.25,
1554
1374
  "tracking": "-0.01em"
@@ -1652,6 +1472,31 @@
1652
1472
  "tracking": "0.02em"
1653
1473
  },
1654
1474
  "unit": "object"
1475
+ },
1476
+ "sys.typo.label.xs": {
1477
+ "role": "Smallest label rung (10px, weight 600) — caption-scale text; tiny annotation, badge count, tab-bar label.",
1478
+ "usedFor": [
1479
+ "tiny annotation",
1480
+ "badge count",
1481
+ "tab-bar label",
1482
+ "smallest legal/aux line"
1483
+ ],
1484
+ "notFor": [
1485
+ "any primary or meta text"
1486
+ ],
1487
+ "value": {
1488
+ "size": "10px",
1489
+ "weight": 600,
1490
+ "line": 1.5,
1491
+ "tracking": "0.02em"
1492
+ },
1493
+ "darkValue": {
1494
+ "size": "10px",
1495
+ "weight": 600,
1496
+ "line": 1.5,
1497
+ "tracking": "0.02em"
1498
+ },
1499
+ "unit": "object"
1655
1500
  }
1656
1501
  }
1657
1502
  }
package/agents/usage.json CHANGED
@@ -156,6 +156,12 @@
156
156
  "note": "Rows are an `items` array of descriptors (name/followers/description/thumbnail/active/onToggle) — there are NO List or row children.",
157
157
  "example": "<DirectoryList label=\"…\" items={[{ value, name, followers, description, thumbnail: { src, alt }, active, onToggle }]} />"
158
158
  },
159
+ "empty-state": {
160
+ "import": "EmptyState",
161
+ "from": "@teamblind-chorus/ui",
162
+ "note": "Headline is the `headline` prop (required); `body` is the `body` prop; the CTA is the `action` object ({ label, href?/onClick? }) which renders a default-size primary Button — there is NO `cta` slot to fill with your own button. Pass an icon node to `illustration`.",
163
+ "example": "<EmptyState illustration={<ChatIcon />} headline=\"No posts yet\" body=\"Conversations you start or join will appear here.\" action={{ label: 'Start a post', onClick: () => {} }} />"
164
+ },
159
165
  "feed": {
160
166
  "import": "Feed",
161
167
  "from": "@teamblind-chorus/ui",
@@ -363,6 +369,12 @@
363
369
  "note": "shape defaults to text; width/height are consumer-supplied. Stack multiples in SkeletonGroup to mirror the loading content's rhythm.",
364
370
  "example": "<Skeleton shape=\"block\" height={120} />"
365
371
  },
372
+ "spinner": {
373
+ "import": "Spinner",
374
+ "from": "@teamblind-chorus/ui",
375
+ "note": "indeterminate only — never bind it to a progress ratio (use Progress). Reserve to one Spinner per view. aria-label defaults to 'Loading'; pass a label child for visible loading copy beside the arc.",
376
+ "example": "<Spinner aria-label=\"Loading\" />"
377
+ },
366
378
  "status-tag": {
367
379
  "import": "StatusTag",
368
380
  "from": "@teamblind-chorus/ui",