@robr0/design-system 0.13.0 → 0.15.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 (91) hide show
  1. package/README.md +15 -6
  2. package/charts.d.ts +1 -0
  3. package/charts.js +2 -0
  4. package/components/AnchorNav/AnchorNav.css +74 -0
  5. package/components/AnchorNav/AnchorNav.d.ts +7 -0
  6. package/components/AnchorNav/AnchorNav.js +74 -21
  7. package/components/Banner/Banner.css +110 -0
  8. package/components/Banner/Banner.d.ts +36 -0
  9. package/components/Banner/Banner.js +59 -0
  10. package/components/Button/Button.css +51 -0
  11. package/components/Button/Button.d.ts +2 -2
  12. package/components/Chart/Chart.css +4 -1
  13. package/components/CircularButton/CircularButton.css +46 -0
  14. package/components/CircularButton/CircularButton.d.ts +13 -2
  15. package/components/CircularButton/CircularButton.js +19 -16
  16. package/components/CommandPalette/CommandPalette.css +26 -1
  17. package/components/CommandPalette/CommandPalette.js +11 -7
  18. package/components/Composer/Composer.css +18 -0
  19. package/components/Composer/Composer.d.ts +4 -2
  20. package/components/Composer/Composer.js +1 -0
  21. package/components/ContributionGraph/ContributionGraph.css +28 -1
  22. package/components/ContributionGraph/ContributionGraph.d.ts +9 -1
  23. package/components/ContributionGraph/ContributionGraph.js +66 -42
  24. package/components/EmptyState/EmptyState.css +5 -0
  25. package/components/Figure/Figure.css +14 -4
  26. package/components/Figure/Figure.js +11 -20
  27. package/components/FunnelChart/FunnelChart.css +11 -35
  28. package/components/FunnelChart/FunnelChart.d.ts +26 -15
  29. package/components/FunnelChart/FunnelChart.js +82 -34
  30. package/components/Gauge/Gauge.css +39 -12
  31. package/components/Gauge/Gauge.d.ts +16 -8
  32. package/components/Gauge/Gauge.js +78 -62
  33. package/components/HoverCard/HoverCard.css +97 -0
  34. package/components/HoverCard/HoverCard.d.ts +29 -0
  35. package/components/HoverCard/HoverCard.js +83 -0
  36. package/components/ImageCompare/ImageCompare.css +112 -0
  37. package/components/ImageCompare/ImageCompare.d.ts +40 -0
  38. package/components/ImageCompare/ImageCompare.js +134 -0
  39. package/components/LinkList/LinkList.d.ts +3 -1
  40. package/components/LinkList/LinkList.js +4 -3
  41. package/components/Meter/Meter.css +98 -0
  42. package/components/Meter/Meter.d.ts +36 -0
  43. package/components/Meter/Meter.js +48 -0
  44. package/components/NotificationCenter/NotificationCenter.css +11 -3
  45. package/components/ProgressBar/ProgressBar.css +1 -1
  46. package/components/Rating/Rating.css +74 -0
  47. package/components/Rating/Rating.d.ts +41 -0
  48. package/components/Rating/Rating.js +124 -0
  49. package/components/SegmentedControl/SegmentedControl.css +23 -0
  50. package/components/SegmentedControl/SegmentedControl.d.ts +3 -1
  51. package/components/SegmentedControl/SegmentedControl.js +3 -1
  52. package/components/Slider/Slider.css +1 -1
  53. package/components/Slider/Slider.js +1 -1
  54. package/components/SourceTrail/SourceTrail.css +209 -0
  55. package/components/SourceTrail/SourceTrail.d.ts +49 -0
  56. package/components/SourceTrail/SourceTrail.js +108 -0
  57. package/components/Sparkline/Sparkline.css +26 -2
  58. package/components/Sparkline/Sparkline.d.ts +5 -3
  59. package/components/Sparkline/Sparkline.js +32 -2
  60. package/components/Spinner/Spinner.css +1 -1
  61. package/components/SplitButton/SplitButton.css +93 -0
  62. package/components/SplitButton/SplitButton.d.ts +43 -0
  63. package/components/SplitButton/SplitButton.js +67 -0
  64. package/components/StreamingText/StreamingText.d.ts +27 -9
  65. package/components/StreamingText/StreamingText.js +17 -29
  66. package/components/StreamingText/useStreamReveal.d.ts +70 -0
  67. package/components/StreamingText/useStreamReveal.js +121 -0
  68. package/components/ToggleGroup/ToggleGroup.css +17 -0
  69. package/components/ToggleGroup/ToggleGroup.d.ts +2 -0
  70. package/components/ToggleGroup/ToggleGroup.js +2 -0
  71. package/components/ToolCall/ToolCall.css +7 -2
  72. package/components/Tooltip/Tooltip.css +24 -7
  73. package/components/Tooltip/Tooltip.d.ts +2 -1
  74. package/components/UsageCard/UsageCard.css +30 -0
  75. package/components/UsageCard/UsageCard.d.ts +48 -0
  76. package/components/UsageCard/UsageCard.js +54 -0
  77. package/components/registry.d.ts +8 -2
  78. package/components/registry.json +89 -14
  79. package/components/registry.json.d.ts +89 -14
  80. package/components/registry.json.js +1 -1
  81. package/index.d.ts +8 -1
  82. package/index.js +19 -2
  83. package/package.json +5 -1
  84. package/tokens/motion.d.ts +9 -4
  85. package/tokens/motion.js +5 -1
  86. package/tokens/registry.json +4 -0
  87. package/tokens/registry.json.d.ts +4 -0
  88. package/tokens/registry.json.js +1 -1
  89. package/tokens/tokens-dark.css +11 -2
  90. package/tokens/tokens-light.css +25 -11
  91. package/tokens/tokens-primitives.css +3 -0
@@ -137,7 +137,8 @@ declare const _default: {
137
137
  "description": "Filled area chart for showing volume over time, with stacked and single-series variants.",
138
138
  "category": "charts",
139
139
  "client": false,
140
- "folder": "Chart"
140
+ "folder": "Chart",
141
+ "recharts": true
141
142
  },
142
143
  {
143
144
  "name": "Avatar",
@@ -163,6 +164,14 @@ declare const _default: {
163
164
  "category": "data-display",
164
165
  "client": false
165
166
  },
167
+ {
168
+ "name": "Banner",
169
+ "label": "Banner",
170
+ "slug": "banner",
171
+ "description": "Full-width status strip for page-level announcements, with an action slot and optional dismissal.",
172
+ "category": "feedback",
173
+ "client": false
174
+ },
166
175
  {
167
176
  "name": "BarChart",
168
177
  "label": "Bar chart",
@@ -170,7 +179,8 @@ declare const _default: {
170
179
  "description": "Vertical bars for comparing values across categories or time, with summary stats and tooltips.",
171
180
  "category": "charts",
172
181
  "client": false,
173
- "folder": "Chart"
182
+ "folder": "Chart",
183
+ "recharts": true
174
184
  },
175
185
  {
176
186
  "name": "Breadcrumb",
@@ -184,7 +194,7 @@ declare const _default: {
184
194
  "name": "Button",
185
195
  "label": "Button",
186
196
  "slug": "button",
187
- "description": "Primary and secondary button variants in default and compact sizes, with icon support and multiple states.",
197
+ "description": "Primary, secondary, tertiary, neutral and destructive variants in default and compact sizes, with icon support and multiple states.",
188
198
  "category": "actions",
189
199
  "client": true
190
200
  },
@@ -272,7 +282,7 @@ declare const _default: {
272
282
  "name": "CircularButton",
273
283
  "label": "Circular button",
274
284
  "slug": "circular-button",
275
- "description": "Round icon button with primary and secondary variants, default and compact sizes.",
285
+ "description": "Round icon button with primary, secondary, tertiary and neutral variants, default and compact sizes.",
276
286
  "category": "actions",
277
287
  "client": false
278
288
  },
@@ -307,7 +317,8 @@ declare const _default: {
307
317
  "description": "Bar and line series in one chart, with an optional second y-axis for pairs in different units, like spend and ROAS.",
308
318
  "category": "charts",
309
319
  "client": false,
310
- "folder": "Chart"
320
+ "folder": "Chart",
321
+ "recharts": true
311
322
  },
312
323
  {
313
324
  "name": "Combobox",
@@ -489,9 +500,10 @@ declare const _default: {
489
500
  "name": "FunnelChart",
490
501
  "label": "Funnel chart",
491
502
  "slug": "funnel-chart",
492
- "description": "Ordered funnel stages as stepped bars with conversion percentages, each sized by its share of the first stage.",
503
+ "description": "Ordered funnel stages as centred trapezoid bands, each sized by its share of the first stage.",
493
504
  "category": "charts",
494
- "client": false
505
+ "client": false,
506
+ "recharts": true
495
507
  },
496
508
  {
497
509
  "name": "Gauge",
@@ -509,6 +521,22 @@ declare const _default: {
509
521
  "category": "maps",
510
522
  "client": true
511
523
  },
524
+ {
525
+ "name": "HoverCard",
526
+ "label": "Hover card",
527
+ "slug": "hover-card",
528
+ "description": "Rich preview panel that opens from hover or focus, with interactive content and position options.",
529
+ "category": "overlays",
530
+ "client": true
531
+ },
532
+ {
533
+ "name": "ImageCompare",
534
+ "label": "Image compare",
535
+ "slug": "image-compare",
536
+ "description": "Before-and-after image comparison with a draggable divider, keyboard control, and corner labels.",
537
+ "category": "data-display",
538
+ "client": true
539
+ },
512
540
  {
513
541
  "name": "Input",
514
542
  "label": "Input",
@@ -556,7 +584,8 @@ declare const _default: {
556
584
  "description": "Multi-series line chart for trends over time, with per-series colours and a summary row.",
557
585
  "category": "charts",
558
586
  "client": false,
559
- "folder": "Chart"
587
+ "folder": "Chart",
588
+ "recharts": true
560
589
  },
561
590
  {
562
591
  "name": "LinkList",
@@ -598,6 +627,14 @@ declare const _default: {
598
627
  "category": "ai",
599
628
  "client": false
600
629
  },
630
+ {
631
+ "name": "Meter",
632
+ "label": "Meter",
633
+ "slug": "meter",
634
+ "description": "Level indicator for a known quantity, with a status-coloured fill and an optional value readout.",
635
+ "category": "feedback",
636
+ "client": false
637
+ },
601
638
  {
602
639
  "name": "ModelPicker",
603
640
  "label": "Model picker",
@@ -661,7 +698,8 @@ declare const _default: {
661
698
  "description": "Proportional share of a whole as a pie or donut, with per-slice colours.",
662
699
  "category": "charts",
663
700
  "client": false,
664
- "folder": "Chart"
701
+ "folder": "Chart",
702
+ "recharts": true
665
703
  },
666
704
  {
667
705
  "name": "PinInput",
@@ -718,7 +756,8 @@ declare const _default: {
718
756
  "description": "Multi-axis comparison of series across categories on a radial grid.",
719
757
  "category": "charts",
720
758
  "client": false,
721
- "folder": "Chart"
759
+ "folder": "Chart",
760
+ "recharts": true
722
761
  },
723
762
  {
724
763
  "name": "RadialChart",
@@ -727,7 +766,8 @@ declare const _default: {
727
766
  "description": "Concentric progress rings for completion and KPI readouts.",
728
767
  "category": "charts",
729
768
  "client": false,
730
- "folder": "Chart"
769
+ "folder": "Chart",
770
+ "recharts": true
731
771
  },
732
772
  {
733
773
  "name": "RadioButton",
@@ -737,6 +777,14 @@ declare const _default: {
737
777
  "category": "forms",
738
778
  "client": true
739
779
  },
780
+ {
781
+ "name": "Rating",
782
+ "label": "Rating",
783
+ "slug": "rating",
784
+ "description": "Star-scale rating control with keyboard selection, a read-only mode, and a configurable icon.",
785
+ "category": "forms",
786
+ "client": true
787
+ },
740
788
  {
741
789
  "name": "Reasoning",
742
790
  "label": "Reasoning",
@@ -752,7 +800,8 @@ declare const _default: {
752
800
  "description": "Plots point clusters across two axes to show correlation and distribution.",
753
801
  "category": "charts",
754
802
  "client": false,
755
- "folder": "Chart"
803
+ "folder": "Chart",
804
+ "recharts": true
756
805
  },
757
806
  {
758
807
  "name": "SectionTitle",
@@ -810,6 +859,14 @@ declare const _default: {
810
859
  "category": "ai",
811
860
  "client": false
812
861
  },
862
+ {
863
+ "name": "SourceTrail",
864
+ "label": "Source trail",
865
+ "slug": "source-trail",
866
+ "description": "The sources an agent opened while answering, as a collapsible list with per-item status.",
867
+ "category": "ai",
868
+ "client": true
869
+ },
813
870
  {
814
871
  "name": "Sparkline",
815
872
  "label": "Sparkline",
@@ -826,6 +883,14 @@ declare const _default: {
826
883
  "category": "feedback",
827
884
  "client": false
828
885
  },
886
+ {
887
+ "name": "SplitButton",
888
+ "label": "Split button",
889
+ "slug": "split-button",
890
+ "description": "Primary action with an attached menu of alternatives, composing Button and DropdownMenu in one pill.",
891
+ "category": "actions",
892
+ "client": false
893
+ },
829
894
  {
830
895
  "name": "SplitPane",
831
896
  "label": "Split pane",
@@ -841,7 +906,8 @@ declare const _default: {
841
906
  "description": "Bars split into stacked segments to compare totals and their composition.",
842
907
  "category": "charts",
843
908
  "client": false,
844
- "folder": "Chart"
909
+ "folder": "Chart",
910
+ "recharts": true
845
911
  },
846
912
  {
847
913
  "name": "Stat",
@@ -978,7 +1044,16 @@ declare const _default: {
978
1044
  "description": "Nested rectangles sized by value for part-to-whole breakdowns.",
979
1045
  "category": "charts",
980
1046
  "client": false,
981
- "folder": "Chart"
1047
+ "folder": "Chart",
1048
+ "recharts": true
1049
+ },
1050
+ {
1051
+ "name": "UsageCard",
1052
+ "label": "Usage card",
1053
+ "slug": "usage-card",
1054
+ "description": "An agent's budgets at a glance: context window and plan limits as meter rows with reset captions.",
1055
+ "category": "ai",
1056
+ "client": false
982
1057
  }
983
1058
  ],
984
1059
  "docOnlyHelpers": [
@@ -1,5 +1,5 @@
1
1
  const categories = [{ "id": "actions", "label": "Actions", "description": "Buttons, button groups, and toggles for triggering actions and switching modes." }, { "id": "ai", "label": "AI", "description": "Chat, agent, and model surfaces for building AI products, from the composer to the reasoning trace and the diff an agent proposes." }, { "id": "charts", "label": "Charts", "description": "Data visualisation components for plotting series and activity over time." }, { "id": "data-display", "label": "Data display", "description": "Cards, tables, lists, and badges for presenting structured content." }, { "id": "effects", "label": "Effects", "description": "Ambient and decorative surfaces that sit behind or around the interface." }, { "id": "feedback", "label": "Feedback", "description": "Alerts, toasts, progress, and empty states that tell people what is happening." }, { "id": "forms", "label": "Forms", "description": "Inputs, pickers, and selection controls for collecting and editing values." }, { "id": "layout", "label": "Layout", "description": "Page scaffolding: app shells, sidebars, dividers, and section headings." }, { "id": "maps", "label": "Maps", "description": "Geographic surfaces for showing where things are and what connects them, from the globe to its legend." }, { "id": "navigation", "label": "Navigation", "description": "Top bars, breadcrumbs, tabs, steppers, and pagination for moving through a product." }, { "id": "overlays", "label": "Overlays", "description": "Dialogs, drawers, menus, and tooltips that float above the page." }];
2
- const components = /* @__PURE__ */ JSON.parse(`[{"name":"Accordion","label":"Accordion","slug":"accordion","description":"Collapsible content sections for organising related information.","category":"data-display","client":true},{"name":"AgentPlan","label":"Agent plan","slug":"agent-plan","description":"A collapsible checklist of an agent's task, with live step states and a progress readout.","category":"ai","client":true},{"name":"AgentStatus","label":"Agent status","slug":"agent-status","description":"A dot-matrix indicator and status line reporting what an agent is doing right now.","category":"ai","client":true},{"name":"AiButton","label":"AI button","slug":"ai-button","description":"The AI entry point: icon and label on a transparent field, ringed by a slowly turning gradient and a soft glow.","category":"ai","client":true},{"name":"Alert","label":"Alert","slug":"alert","description":"Contextual feedback with status variants, optional dismiss, and compact sizing.","category":"feedback","client":false},{"name":"AlertDialog","label":"Alert dialog","slug":"alert-dialog","description":"Modal confirmation overlay with title, description, and confirm / cancel actions.","category":"overlays","client":true},{"name":"AnchorNav","label":"Anchor nav","slug":"anchor-nav","description":"An on-page list of anchor links that tracks the reader's position and jumps between sections.","category":"navigation","client":true},{"name":"AppLayout","label":"App layout","slug":"app-layout","description":"Full-page template pairing the collapsible App sidebar with a centred content area.","category":"layout","client":true},{"name":"AppSidebar","label":"App sidebar","slug":"app-sidebar","description":"Collapsible navigation rail with accordion sub-items, category headings, and profile section.","category":"layout","client":true},{"name":"AreaChart","label":"Area chart","slug":"area-chart","description":"Filled area chart for showing volume over time, with stacked and single-series variants.","category":"charts","client":false,"folder":"Chart"},{"name":"Avatar","label":"Avatar","slug":"avatar","description":"User profile image with initials and icon fallback, status indicator, and multiple sizes.","category":"data-display","client":true},{"name":"AvatarGroup","label":"Avatar group","slug":"avatar-group","description":"Overlapping avatar stack with a +N counter for the overflow.","category":"data-display","client":false},{"name":"Badge","label":"Badge","slug":"badge","description":"Small inline status labels with info, positive, warning, error, and neutral variants.","category":"data-display","client":false},{"name":"BarChart","label":"Bar chart","slug":"bar-chart","description":"Vertical bars for comparing values across categories or time, with summary stats and tooltips.","category":"charts","client":false,"folder":"Chart"},{"name":"Breadcrumb","label":"Breadcrumb","slug":"breadcrumb","description":"Hierarchical navigation trail showing the user's location within the site.","category":"navigation","client":false},{"name":"Button","label":"Button","slug":"button","description":"Primary and secondary button variants in default and compact sizes, with icon support and multiple states.","category":"actions","client":true},{"name":"ButtonGroup","label":"Button group","slug":"button-group","description":"Horizontal and vertical button group layouts for related actions and navigation patterns.","category":"actions","client":false},{"name":"Card","label":"Card","slug":"card","description":"Card components for previews, navigation, and token documentation, from content cards to colour swatches and typography specimens.","category":"data-display","client":true},{"name":"CardStack","label":"Card stack","slug":"card-stack","description":"A deck of cards showing one at a time, flipped through with a lift-and-settle animation.","category":"data-display","client":true},{"name":"Carousel","label":"Carousel","slug":"carousel","description":"Sliding content viewer with navigation arrows, dot indicators, auto-play, and keyboard support.","category":"data-display","client":true},{"name":"ChatHeader","label":"Chat header","slug":"chat-header","description":"The top row of a chat surface, with the conversation title and its controls.","category":"ai","client":false},{"name":"ChatMarker","label":"Chat marker","slug":"chat-marker","description":"An inline conversation separator for date breaks and system notes.","category":"ai","client":false},{"name":"ChatMessage","label":"Chat message","slug":"chat-message","description":"A single chat turn with avatar, author, timestamp, and bubble or plain content aligned by role.","category":"ai","client":false},{"name":"ChatThread","label":"Chat thread","slug":"chat-thread","description":"A scrollable conversation column with edge fades, send anchoring, and a subtle scrollbar.","category":"ai","client":true},{"name":"Checkbox","label":"Checkbox","slug":"checkbox","description":"Custom checkbox with check and indeterminate states, keyboard accessible with animated transitions.","category":"forms","client":true},{"name":"Chip","label":"Chip","slug":"chip","description":"Compact pills for attributes, filters, and inline metadata.","category":"data-display","client":false},{"name":"CircularButton","label":"Circular button","slug":"circular-button","description":"Round icon button with primary and secondary variants, default and compact sizes.","category":"actions","client":false},{"name":"CodeBlock","label":"Code block","slug":"code-block","description":"Monospace code with a header and one-click copy.","category":"data-display","client":true},{"name":"CodeDiff","label":"Code diff","slug":"code-diff","description":"Unified diff view for code changes, with added, removed, and context lines.","category":"ai","client":false},{"name":"ColorPicker","label":"Colour picker","slug":"color-picker","description":"Swatch trigger opening a saturation area, hue and alpha sliders, and a hex field; controlled or uncontrolled.","category":"forms","client":true},{"name":"ComboChart","label":"Combo chart","slug":"combo-chart","description":"Bar and line series in one chart, with an optional second y-axis for pairs in different units, like spend and ROAS.","category":"charts","client":false,"folder":"Chart"},{"name":"Combobox","label":"Combobox","slug":"combobox","description":"A filterable select that narrows options as the user types, with multi-select chips, grouping, and async loading.","category":"forms","client":true},{"name":"CommandPalette","label":"Command palette","slug":"command-palette","description":"A modal Cmd+K launcher that searches a grouped command list, with keyboard navigation and shortcut hints.","category":"overlays","client":true},{"name":"Composer","label":"Composer","slug":"composer","description":"An auto-growing message input with send and stop states, an attachment slot, and Enter-to-send.","category":"ai","client":true},{"name":"ContactCard","label":"Contact card","slug":"contact-card","description":"Linked contact method with icon, label, and value.","category":"data-display","client":true},{"name":"ContextMenu","label":"Context menu","slug":"context-menu","description":"Right-click menu at the pointer with groups, sub-menus, and shortcut hints.","category":"overlays","client":true},{"name":"ContributionGraph","label":"Contribution graph","slug":"contribution-graph","description":"A year of activity, one cell per day.","category":"charts","client":false},{"name":"DataTable","label":"Data table","slug":"data-table","description":"The wired table: sorting, search, row selection, and pagination assembled around Table.","category":"data-display","client":true},{"name":"DateInput","label":"Date input","slug":"date-input","description":"Date input with native picker, calendar icon, label, and validation states.","category":"forms","client":true},{"name":"DatePicker","label":"Date picker","slug":"date-picker","description":"Inline calendar with month navigation, day selection, and today indicator.","category":"forms","client":true},{"name":"Dialog","label":"Dialog","slug":"dialog","description":"A general-purpose modal for focused tasks, with sizes, an optional footer, and full focus management.","category":"overlays","client":true},{"name":"Divider","label":"Divider","slug":"divider","description":"A thin rule separating stacked content, with optional inline label and vertical orientation.","category":"layout","client":false},{"name":"DocumentChip","label":"Document chip","slug":"document-chip","description":"A compact file reference with a type icon, name, metadata, and optional remove.","category":"ai","client":false},{"name":"Drawer","label":"Drawer","slug":"drawer","description":"An edge-anchored modal panel that slides in from any side, for filter panels, detail views, and mobile navigation.","category":"overlays","client":true},{"name":"Dropdown","label":"Dropdown","slug":"dropdown","description":"Custom select dropdown with keyboard navigation, disabled options, and error states.","category":"forms","client":true},{"name":"DropdownMenu","label":"Dropdown menu","slug":"dropdown-menu","description":"Contextual menu with sections, sub-menus, keyboard shortcuts, and inset-gap hover styling.","category":"overlays","client":true},{"name":"EmptyState","label":"Empty state","slug":"empty-state","description":"The placeholder for a list, table, or search with nothing to show: icon, headline, guidance, and a next action.","category":"feedback","client":false},{"name":"EntityCard","label":"Entity card","slug":"entity-card","description":"Compact display-only card with a centred icon or image and a label, used in the Icons and Logos galleries.","category":"data-display","client":false},{"name":"EventCalendar","label":"Event calendar","slug":"event-calendar","description":"A month grid with event pills, overflow counts, and month navigation.","category":"data-display","client":true},{"name":"Field","label":"Field","slug":"field","description":"The shared scaffolding for labelled form controls: label, required marker, helper and error text, and the ARIA wiring that ties them together.","category":"forms","client":true},{"name":"Figure","label":"Figure","slug":"figure","description":"Images with captions, in the case-study frame.","category":"data-display","client":false},{"name":"FileInput","label":"File input","slug":"file-input","description":"A click-or-drop upload zone paired with a controlled file list showing size, progress, and per-file errors.","category":"forms","client":true},{"name":"FilterBar","label":"Filter bar","slug":"filter-bar","description":"A row of filter chips for narrowing a collection, each opening a popover of options, with per-filter and clear-all resets.","category":"forms","client":true},{"name":"FunnelChart","label":"Funnel chart","slug":"funnel-chart","description":"Ordered funnel stages as stepped bars with conversion percentages, each sized by its share of the first stage.","category":"charts","client":false},{"name":"Gauge","label":"Gauge","slug":"gauge","description":"A radial dial for a single bounded reading, recoloured through the status roles as it crosses thresholds.","category":"charts","client":false},{"name":"Globe","label":"Globe","slug":"globe","description":"An orthographic globe with markers and great-circle arcs, rotated by drag, keys, or a slow spin.","category":"maps","client":true},{"name":"Input","label":"Input","slug":"input","description":"Text input with label, placeholder, left and right icons, helper text, and error states.","category":"forms","client":true},{"name":"Instructions","label":"Instructions","slug":"instructions","description":"Step-by-step guidance with numbered badges, connecting lines, and horizontal layout.","category":"data-display","client":false},{"name":"InterruptCard","label":"Interrupt card","slug":"interrupt-card","description":"A human-in-the-loop checkpoint with a question from the agent and option buttons to decide.","category":"ai","client":false},{"name":"Kbd","label":"Kbd","slug":"kbd","description":"A keyboard key rendered as a keycap, for shortcut hints in menus and prose.","category":"data-display","client":false},{"name":"LegendTile","label":"Legend tile","slug":"legend-tile","description":"The labelled value tile under a chart: a series dot, the series name, and its reading, on an inset fill.","category":"charts","client":false},{"name":"LineChart","label":"Line chart","slug":"line-chart","description":"Multi-series line chart for trends over time, with per-series colours and a summary row.","category":"charts","client":false,"folder":"Chart"},{"name":"LinkList","label":"Link list","slug":"link-list","description":"Linked items with logo, label, and subtitle.","category":"data-display","client":false},{"name":"MapCallout","label":"Map callout","slug":"map-callout","description":"The annotation beside a map point: a name in capitals over monospace readout lines.","category":"maps","client":false},{"name":"MapLegend","label":"Map legend","slug":"map-legend","description":"The corner block of a map: its name, what it shows, and the key to its markers.","category":"maps","client":false},{"name":"MessageActions","label":"Message actions","slug":"message-actions","description":"An icon-button row for message-level actions like copy, retry, and feedback.","category":"ai","client":false},{"name":"MessageCard","label":"Message card","slug":"message-card","description":"A structured rich-content card embedded in a chat message, with media, title, body, and actions.","category":"ai","client":false},{"name":"ModelPicker","label":"Model picker","slug":"model-picker","description":"A model selector for chat surfaces, with per-model descriptions and an optional effort row.","category":"ai","client":true},{"name":"Nav","label":"Nav","slug":"nav","description":"Desktop top navigation bar with a brand slot, horizontal button group, and optional trailing content.","category":"navigation","client":false},{"name":"NavList","label":"Nav list","slug":"nav-list","description":"Vertical list of navigation links for drawers and menus, with three indent levels and per-row expand toggles.","category":"navigation","client":true},{"name":"NotificationCenter","label":"Notification centre","slug":"notification-center","description":"A persistent notification inbox with unread count, filter tabs, and per-item actions.","category":"feedback","client":true},{"name":"NumberInput","label":"Number input","slug":"number-input","description":"Numeric field with increment and decrement steppers and min/max clamping.","category":"forms","client":true},{"name":"Pagination","label":"Pagination","slug":"pagination","description":"Numbered page navigation for long datasets, with ellipses, disabled end arrows, and a compact readout mode.","category":"navigation","client":true},{"name":"Panel","label":"Panel","slug":"panel","description":"The plain dashboard surface: a rounded container with no border or shadow, just padding and a gap.","category":"layout","client":false},{"name":"PieChart","label":"Pie chart","slug":"pie-chart","description":"Proportional share of a whole as a pie or donut, with per-slice colours.","category":"charts","client":false,"folder":"Chart"},{"name":"PinInput","label":"Pin input","slug":"pin-input","description":"Segmented one-time-code input with auto-advance, paste support, and completion callback.","category":"forms","client":true},{"name":"Popover","label":"Popover","slug":"popover","description":"Contextual overlay panel with click and hover triggers, positioned relative to its anchor.","category":"overlays","client":true},{"name":"ProgressBar","label":"Progress bar","slug":"progress-bar","description":"Horizontal bar indicating completion progress, with an optional percentage label.","category":"feedback","client":false},{"name":"PromptSuggestions","label":"Prompt suggestions","slug":"prompt-suggestions","description":"A horizontal row of tappable prompt suggestions to start or steer a conversation.","category":"ai","client":false},{"name":"Prose","label":"Prose","slug":"prose","description":"Token-styled typography for rendered markdown and rich agent output.","category":"ai","client":false},{"name":"Quote","label":"Quote","slug":"quote","description":"Blockquotes and pull-quotes with attribution.","category":"data-display","client":false},{"name":"RadarChart","label":"Radar chart","slug":"radar-chart","description":"Multi-axis comparison of series across categories on a radial grid.","category":"charts","client":false,"folder":"Chart"},{"name":"RadialChart","label":"Radial chart","slug":"radial-chart","description":"Concentric progress rings for completion and KPI readouts.","category":"charts","client":false,"folder":"Chart"},{"name":"RadioButton","label":"Radio button","slug":"radio-button","description":"Radio button and radio group with vertical and horizontal layouts, animated dot indicator.","category":"forms","client":true},{"name":"Reasoning","label":"Reasoning","slug":"reasoning","description":"A model's thinking, disclosed behind a one-line summary and collapsed once it finishes.","category":"ai","client":true},{"name":"ScatterChart","label":"Scatter chart","slug":"scatter-chart","description":"Plots point clusters across two axes to show correlation and distribution.","category":"charts","client":false,"folder":"Chart"},{"name":"SectionTitle","label":"Section title","slug":"section-title","description":"Heading with a divider line and optional trailing content for organising page sections.","category":"layout","client":false},{"name":"SegmentedControl","label":"Segmented control","slug":"segmented-control","description":"Pill-style toggle between related views with keyboard navigation and icon support.","category":"actions","client":true},{"name":"SelectionCard","label":"Selection card","slug":"selection-card","description":"Large selectable option cards with radio or checkbox indicators for high-visibility choices like settings and onboarding.","category":"data-display","client":true},{"name":"ShaderField","label":"Shader field","slug":"shader-field","description":"An ambient WebGL2 field of soft light sources that sample colour tokens, with a reported fallback status.","category":"effects","client":true},{"name":"Skeleton","label":"Skeleton","slug":"skeleton","description":"Placeholder loading indicators with text, circular, and rectangular variants.","category":"feedback","client":false},{"name":"Slider","label":"Slider","slug":"slider","description":"Range input for selecting a value between a minimum and maximum, in default and compact sizes.","category":"forms","client":true},{"name":"SourceChip","label":"Source chip","slug":"source-chip","description":"A numbered citation pill linking a claim to its source.","category":"ai","client":false},{"name":"Sparkline","label":"Sparkline","slug":"sparkline","description":"Inline trend line for stats and table cells, drawn without axes or chrome.","category":"charts","client":false},{"name":"Spinner","label":"Spinner","slug":"spinner","description":"Animated circular loading indicator in three sizes and primary, neutral, or inherit variants.","category":"feedback","client":false},{"name":"SplitPane","label":"Split pane","slug":"split-pane","description":"Two resizable regions with a draggable, keyboard-operable divider between them.","category":"layout","client":true},{"name":"StackedBarChart","label":"Stacked bar chart","slug":"stacked-bar-chart","description":"Bars split into stacked segments to compare totals and their composition.","category":"charts","client":false,"folder":"Chart"},{"name":"Stat","label":"Stat","slug":"stat","description":"Headline metrics with labels and trend deltas.","category":"data-display","client":false},{"name":"Stepper","label":"Stepper","slug":"stepper","description":"Step-by-step progress indicator for wizards and multi-stage flows.","category":"navigation","client":true},{"name":"StreamingText","label":"Streaming text","slug":"streaming-text","description":"Progressive reveal for text arriving in chunks, with a blinking cursor while more is coming.","category":"ai","client":true},{"name":"Swatch","label":"Swatch","slug":"swatch","description":"Clickable colour tile for preset palettes and picker triggers, with a theme-aware selection ring.","category":"forms","client":false},{"name":"Table","label":"Table","slug":"table","description":"Data table with flexible cell content, striped rows, compact sizing, and support for icons, inputs, buttons, and interactive controls.","category":"data-display","client":false},{"name":"Tabs","label":"Tabs","slug":"tabs","description":"Tab navigation with underline indicator, icon support, compact size, and full-width mode.","category":"navigation","client":true},{"name":"TagInput","label":"Tag input","slug":"tag-input","description":"Multi-value text input with entries held as removable tags.","category":"forms","client":true},{"name":"Textarea","label":"Textarea","slug":"textarea","description":"Multi-line text input with character counter, resize control, helper text, and error states.","category":"forms","client":true},{"name":"TimePicker","label":"Time picker","slug":"time-picker","description":"Time-of-day field with a dropdown list of selectable times.","category":"forms","client":true},{"name":"Timeline","label":"Timeline","slug":"timeline","description":"Ordered sequences: histories and steppers.","category":"data-display","client":false},{"name":"Toast","label":"Toast","slug":"toast","description":"Temporary notification with status variants, auto-dismiss, and stacking via ToastProvider.","category":"feedback","client":true},{"name":"ToggleGroup","label":"Toggle group","slug":"toggle-group","description":"A set of two-state buttons that can be toggled on or off, supporting text and icon items.","category":"actions","client":true},{"name":"ToggleSwitch","label":"Toggle switch","slug":"toggle-switch","description":"Binary on/off toggle control with sliding thumb and check indicator, used for settings like theme switching.","category":"forms","client":true},{"name":"ToolCall","label":"Tool call","slug":"tool-call","description":"The record of one tool invocation, with its arguments and result behind a disclosure.","category":"ai","client":true},{"name":"Tooltip","label":"Tooltip","slug":"tooltip","description":"Contextual text label that appears on hover or focus with position and delay options.","category":"overlays","client":true},{"name":"TreeView","label":"Tree view","slug":"tree-view","description":"Collapsible hierarchy for files, folders, and nested structures.","category":"data-display","client":true},{"name":"Treemap","label":"Treemap","slug":"treemap","description":"Nested rectangles sized by value for part-to-whole breakdowns.","category":"charts","client":false,"folder":"Chart"}]`);
2
+ const components = /* @__PURE__ */ JSON.parse(`[{"name":"Accordion","label":"Accordion","slug":"accordion","description":"Collapsible content sections for organising related information.","category":"data-display","client":true},{"name":"AgentPlan","label":"Agent plan","slug":"agent-plan","description":"A collapsible checklist of an agent's task, with live step states and a progress readout.","category":"ai","client":true},{"name":"AgentStatus","label":"Agent status","slug":"agent-status","description":"A dot-matrix indicator and status line reporting what an agent is doing right now.","category":"ai","client":true},{"name":"AiButton","label":"AI button","slug":"ai-button","description":"The AI entry point: icon and label on a transparent field, ringed by a slowly turning gradient and a soft glow.","category":"ai","client":true},{"name":"Alert","label":"Alert","slug":"alert","description":"Contextual feedback with status variants, optional dismiss, and compact sizing.","category":"feedback","client":false},{"name":"AlertDialog","label":"Alert dialog","slug":"alert-dialog","description":"Modal confirmation overlay with title, description, and confirm / cancel actions.","category":"overlays","client":true},{"name":"AnchorNav","label":"Anchor nav","slug":"anchor-nav","description":"An on-page list of anchor links that tracks the reader's position and jumps between sections.","category":"navigation","client":true},{"name":"AppLayout","label":"App layout","slug":"app-layout","description":"Full-page template pairing the collapsible App sidebar with a centred content area.","category":"layout","client":true},{"name":"AppSidebar","label":"App sidebar","slug":"app-sidebar","description":"Collapsible navigation rail with accordion sub-items, category headings, and profile section.","category":"layout","client":true},{"name":"AreaChart","label":"Area chart","slug":"area-chart","description":"Filled area chart for showing volume over time, with stacked and single-series variants.","category":"charts","client":false,"folder":"Chart","recharts":true},{"name":"Avatar","label":"Avatar","slug":"avatar","description":"User profile image with initials and icon fallback, status indicator, and multiple sizes.","category":"data-display","client":true},{"name":"AvatarGroup","label":"Avatar group","slug":"avatar-group","description":"Overlapping avatar stack with a +N counter for the overflow.","category":"data-display","client":false},{"name":"Badge","label":"Badge","slug":"badge","description":"Small inline status labels with info, positive, warning, error, and neutral variants.","category":"data-display","client":false},{"name":"Banner","label":"Banner","slug":"banner","description":"Full-width status strip for page-level announcements, with an action slot and optional dismissal.","category":"feedback","client":false},{"name":"BarChart","label":"Bar chart","slug":"bar-chart","description":"Vertical bars for comparing values across categories or time, with summary stats and tooltips.","category":"charts","client":false,"folder":"Chart","recharts":true},{"name":"Breadcrumb","label":"Breadcrumb","slug":"breadcrumb","description":"Hierarchical navigation trail showing the user's location within the site.","category":"navigation","client":false},{"name":"Button","label":"Button","slug":"button","description":"Primary, secondary, tertiary, neutral and destructive variants in default and compact sizes, with icon support and multiple states.","category":"actions","client":true},{"name":"ButtonGroup","label":"Button group","slug":"button-group","description":"Horizontal and vertical button group layouts for related actions and navigation patterns.","category":"actions","client":false},{"name":"Card","label":"Card","slug":"card","description":"Card components for previews, navigation, and token documentation, from content cards to colour swatches and typography specimens.","category":"data-display","client":true},{"name":"CardStack","label":"Card stack","slug":"card-stack","description":"A deck of cards showing one at a time, flipped through with a lift-and-settle animation.","category":"data-display","client":true},{"name":"Carousel","label":"Carousel","slug":"carousel","description":"Sliding content viewer with navigation arrows, dot indicators, auto-play, and keyboard support.","category":"data-display","client":true},{"name":"ChatHeader","label":"Chat header","slug":"chat-header","description":"The top row of a chat surface, with the conversation title and its controls.","category":"ai","client":false},{"name":"ChatMarker","label":"Chat marker","slug":"chat-marker","description":"An inline conversation separator for date breaks and system notes.","category":"ai","client":false},{"name":"ChatMessage","label":"Chat message","slug":"chat-message","description":"A single chat turn with avatar, author, timestamp, and bubble or plain content aligned by role.","category":"ai","client":false},{"name":"ChatThread","label":"Chat thread","slug":"chat-thread","description":"A scrollable conversation column with edge fades, send anchoring, and a subtle scrollbar.","category":"ai","client":true},{"name":"Checkbox","label":"Checkbox","slug":"checkbox","description":"Custom checkbox with check and indeterminate states, keyboard accessible with animated transitions.","category":"forms","client":true},{"name":"Chip","label":"Chip","slug":"chip","description":"Compact pills for attributes, filters, and inline metadata.","category":"data-display","client":false},{"name":"CircularButton","label":"Circular button","slug":"circular-button","description":"Round icon button with primary, secondary, tertiary and neutral variants, default and compact sizes.","category":"actions","client":false},{"name":"CodeBlock","label":"Code block","slug":"code-block","description":"Monospace code with a header and one-click copy.","category":"data-display","client":true},{"name":"CodeDiff","label":"Code diff","slug":"code-diff","description":"Unified diff view for code changes, with added, removed, and context lines.","category":"ai","client":false},{"name":"ColorPicker","label":"Colour picker","slug":"color-picker","description":"Swatch trigger opening a saturation area, hue and alpha sliders, and a hex field; controlled or uncontrolled.","category":"forms","client":true},{"name":"ComboChart","label":"Combo chart","slug":"combo-chart","description":"Bar and line series in one chart, with an optional second y-axis for pairs in different units, like spend and ROAS.","category":"charts","client":false,"folder":"Chart","recharts":true},{"name":"Combobox","label":"Combobox","slug":"combobox","description":"A filterable select that narrows options as the user types, with multi-select chips, grouping, and async loading.","category":"forms","client":true},{"name":"CommandPalette","label":"Command palette","slug":"command-palette","description":"A modal Cmd+K launcher that searches a grouped command list, with keyboard navigation and shortcut hints.","category":"overlays","client":true},{"name":"Composer","label":"Composer","slug":"composer","description":"An auto-growing message input with send and stop states, an attachment slot, and Enter-to-send.","category":"ai","client":true},{"name":"ContactCard","label":"Contact card","slug":"contact-card","description":"Linked contact method with icon, label, and value.","category":"data-display","client":true},{"name":"ContextMenu","label":"Context menu","slug":"context-menu","description":"Right-click menu at the pointer with groups, sub-menus, and shortcut hints.","category":"overlays","client":true},{"name":"ContributionGraph","label":"Contribution graph","slug":"contribution-graph","description":"A year of activity, one cell per day.","category":"charts","client":false},{"name":"DataTable","label":"Data table","slug":"data-table","description":"The wired table: sorting, search, row selection, and pagination assembled around Table.","category":"data-display","client":true},{"name":"DateInput","label":"Date input","slug":"date-input","description":"Date input with native picker, calendar icon, label, and validation states.","category":"forms","client":true},{"name":"DatePicker","label":"Date picker","slug":"date-picker","description":"Inline calendar with month navigation, day selection, and today indicator.","category":"forms","client":true},{"name":"Dialog","label":"Dialog","slug":"dialog","description":"A general-purpose modal for focused tasks, with sizes, an optional footer, and full focus management.","category":"overlays","client":true},{"name":"Divider","label":"Divider","slug":"divider","description":"A thin rule separating stacked content, with optional inline label and vertical orientation.","category":"layout","client":false},{"name":"DocumentChip","label":"Document chip","slug":"document-chip","description":"A compact file reference with a type icon, name, metadata, and optional remove.","category":"ai","client":false},{"name":"Drawer","label":"Drawer","slug":"drawer","description":"An edge-anchored modal panel that slides in from any side, for filter panels, detail views, and mobile navigation.","category":"overlays","client":true},{"name":"Dropdown","label":"Dropdown","slug":"dropdown","description":"Custom select dropdown with keyboard navigation, disabled options, and error states.","category":"forms","client":true},{"name":"DropdownMenu","label":"Dropdown menu","slug":"dropdown-menu","description":"Contextual menu with sections, sub-menus, keyboard shortcuts, and inset-gap hover styling.","category":"overlays","client":true},{"name":"EmptyState","label":"Empty state","slug":"empty-state","description":"The placeholder for a list, table, or search with nothing to show: icon, headline, guidance, and a next action.","category":"feedback","client":false},{"name":"EntityCard","label":"Entity card","slug":"entity-card","description":"Compact display-only card with a centred icon or image and a label, used in the Icons and Logos galleries.","category":"data-display","client":false},{"name":"EventCalendar","label":"Event calendar","slug":"event-calendar","description":"A month grid with event pills, overflow counts, and month navigation.","category":"data-display","client":true},{"name":"Field","label":"Field","slug":"field","description":"The shared scaffolding for labelled form controls: label, required marker, helper and error text, and the ARIA wiring that ties them together.","category":"forms","client":true},{"name":"Figure","label":"Figure","slug":"figure","description":"Images with captions, in the case-study frame.","category":"data-display","client":false},{"name":"FileInput","label":"File input","slug":"file-input","description":"A click-or-drop upload zone paired with a controlled file list showing size, progress, and per-file errors.","category":"forms","client":true},{"name":"FilterBar","label":"Filter bar","slug":"filter-bar","description":"A row of filter chips for narrowing a collection, each opening a popover of options, with per-filter and clear-all resets.","category":"forms","client":true},{"name":"FunnelChart","label":"Funnel chart","slug":"funnel-chart","description":"Ordered funnel stages as centred trapezoid bands, each sized by its share of the first stage.","category":"charts","client":false,"recharts":true},{"name":"Gauge","label":"Gauge","slug":"gauge","description":"A radial dial for a single bounded reading, recoloured through the status roles as it crosses thresholds.","category":"charts","client":false},{"name":"Globe","label":"Globe","slug":"globe","description":"An orthographic globe with markers and great-circle arcs, rotated by drag, keys, or a slow spin.","category":"maps","client":true},{"name":"HoverCard","label":"Hover card","slug":"hover-card","description":"Rich preview panel that opens from hover or focus, with interactive content and position options.","category":"overlays","client":true},{"name":"ImageCompare","label":"Image compare","slug":"image-compare","description":"Before-and-after image comparison with a draggable divider, keyboard control, and corner labels.","category":"data-display","client":true},{"name":"Input","label":"Input","slug":"input","description":"Text input with label, placeholder, left and right icons, helper text, and error states.","category":"forms","client":true},{"name":"Instructions","label":"Instructions","slug":"instructions","description":"Step-by-step guidance with numbered badges, connecting lines, and horizontal layout.","category":"data-display","client":false},{"name":"InterruptCard","label":"Interrupt card","slug":"interrupt-card","description":"A human-in-the-loop checkpoint with a question from the agent and option buttons to decide.","category":"ai","client":false},{"name":"Kbd","label":"Kbd","slug":"kbd","description":"A keyboard key rendered as a keycap, for shortcut hints in menus and prose.","category":"data-display","client":false},{"name":"LegendTile","label":"Legend tile","slug":"legend-tile","description":"The labelled value tile under a chart: a series dot, the series name, and its reading, on an inset fill.","category":"charts","client":false},{"name":"LineChart","label":"Line chart","slug":"line-chart","description":"Multi-series line chart for trends over time, with per-series colours and a summary row.","category":"charts","client":false,"folder":"Chart","recharts":true},{"name":"LinkList","label":"Link list","slug":"link-list","description":"Linked items with logo, label, and subtitle.","category":"data-display","client":false},{"name":"MapCallout","label":"Map callout","slug":"map-callout","description":"The annotation beside a map point: a name in capitals over monospace readout lines.","category":"maps","client":false},{"name":"MapLegend","label":"Map legend","slug":"map-legend","description":"The corner block of a map: its name, what it shows, and the key to its markers.","category":"maps","client":false},{"name":"MessageActions","label":"Message actions","slug":"message-actions","description":"An icon-button row for message-level actions like copy, retry, and feedback.","category":"ai","client":false},{"name":"MessageCard","label":"Message card","slug":"message-card","description":"A structured rich-content card embedded in a chat message, with media, title, body, and actions.","category":"ai","client":false},{"name":"Meter","label":"Meter","slug":"meter","description":"Level indicator for a known quantity, with a status-coloured fill and an optional value readout.","category":"feedback","client":false},{"name":"ModelPicker","label":"Model picker","slug":"model-picker","description":"A model selector for chat surfaces, with per-model descriptions and an optional effort row.","category":"ai","client":true},{"name":"Nav","label":"Nav","slug":"nav","description":"Desktop top navigation bar with a brand slot, horizontal button group, and optional trailing content.","category":"navigation","client":false},{"name":"NavList","label":"Nav list","slug":"nav-list","description":"Vertical list of navigation links for drawers and menus, with three indent levels and per-row expand toggles.","category":"navigation","client":true},{"name":"NotificationCenter","label":"Notification centre","slug":"notification-center","description":"A persistent notification inbox with unread count, filter tabs, and per-item actions.","category":"feedback","client":true},{"name":"NumberInput","label":"Number input","slug":"number-input","description":"Numeric field with increment and decrement steppers and min/max clamping.","category":"forms","client":true},{"name":"Pagination","label":"Pagination","slug":"pagination","description":"Numbered page navigation for long datasets, with ellipses, disabled end arrows, and a compact readout mode.","category":"navigation","client":true},{"name":"Panel","label":"Panel","slug":"panel","description":"The plain dashboard surface: a rounded container with no border or shadow, just padding and a gap.","category":"layout","client":false},{"name":"PieChart","label":"Pie chart","slug":"pie-chart","description":"Proportional share of a whole as a pie or donut, with per-slice colours.","category":"charts","client":false,"folder":"Chart","recharts":true},{"name":"PinInput","label":"Pin input","slug":"pin-input","description":"Segmented one-time-code input with auto-advance, paste support, and completion callback.","category":"forms","client":true},{"name":"Popover","label":"Popover","slug":"popover","description":"Contextual overlay panel with click and hover triggers, positioned relative to its anchor.","category":"overlays","client":true},{"name":"ProgressBar","label":"Progress bar","slug":"progress-bar","description":"Horizontal bar indicating completion progress, with an optional percentage label.","category":"feedback","client":false},{"name":"PromptSuggestions","label":"Prompt suggestions","slug":"prompt-suggestions","description":"A horizontal row of tappable prompt suggestions to start or steer a conversation.","category":"ai","client":false},{"name":"Prose","label":"Prose","slug":"prose","description":"Token-styled typography for rendered markdown and rich agent output.","category":"ai","client":false},{"name":"Quote","label":"Quote","slug":"quote","description":"Blockquotes and pull-quotes with attribution.","category":"data-display","client":false},{"name":"RadarChart","label":"Radar chart","slug":"radar-chart","description":"Multi-axis comparison of series across categories on a radial grid.","category":"charts","client":false,"folder":"Chart","recharts":true},{"name":"RadialChart","label":"Radial chart","slug":"radial-chart","description":"Concentric progress rings for completion and KPI readouts.","category":"charts","client":false,"folder":"Chart","recharts":true},{"name":"RadioButton","label":"Radio button","slug":"radio-button","description":"Radio button and radio group with vertical and horizontal layouts, animated dot indicator.","category":"forms","client":true},{"name":"Rating","label":"Rating","slug":"rating","description":"Star-scale rating control with keyboard selection, a read-only mode, and a configurable icon.","category":"forms","client":true},{"name":"Reasoning","label":"Reasoning","slug":"reasoning","description":"A model's thinking, disclosed behind a one-line summary and collapsed once it finishes.","category":"ai","client":true},{"name":"ScatterChart","label":"Scatter chart","slug":"scatter-chart","description":"Plots point clusters across two axes to show correlation and distribution.","category":"charts","client":false,"folder":"Chart","recharts":true},{"name":"SectionTitle","label":"Section title","slug":"section-title","description":"Heading with a divider line and optional trailing content for organising page sections.","category":"layout","client":false},{"name":"SegmentedControl","label":"Segmented control","slug":"segmented-control","description":"Pill-style toggle between related views with keyboard navigation and icon support.","category":"actions","client":true},{"name":"SelectionCard","label":"Selection card","slug":"selection-card","description":"Large selectable option cards with radio or checkbox indicators for high-visibility choices like settings and onboarding.","category":"data-display","client":true},{"name":"ShaderField","label":"Shader field","slug":"shader-field","description":"An ambient WebGL2 field of soft light sources that sample colour tokens, with a reported fallback status.","category":"effects","client":true},{"name":"Skeleton","label":"Skeleton","slug":"skeleton","description":"Placeholder loading indicators with text, circular, and rectangular variants.","category":"feedback","client":false},{"name":"Slider","label":"Slider","slug":"slider","description":"Range input for selecting a value between a minimum and maximum, in default and compact sizes.","category":"forms","client":true},{"name":"SourceChip","label":"Source chip","slug":"source-chip","description":"A numbered citation pill linking a claim to its source.","category":"ai","client":false},{"name":"SourceTrail","label":"Source trail","slug":"source-trail","description":"The sources an agent opened while answering, as a collapsible list with per-item status.","category":"ai","client":true},{"name":"Sparkline","label":"Sparkline","slug":"sparkline","description":"Inline trend line for stats and table cells, drawn without axes or chrome.","category":"charts","client":false},{"name":"Spinner","label":"Spinner","slug":"spinner","description":"Animated circular loading indicator in three sizes and primary, neutral, or inherit variants.","category":"feedback","client":false},{"name":"SplitButton","label":"Split button","slug":"split-button","description":"Primary action with an attached menu of alternatives, composing Button and DropdownMenu in one pill.","category":"actions","client":false},{"name":"SplitPane","label":"Split pane","slug":"split-pane","description":"Two resizable regions with a draggable, keyboard-operable divider between them.","category":"layout","client":true},{"name":"StackedBarChart","label":"Stacked bar chart","slug":"stacked-bar-chart","description":"Bars split into stacked segments to compare totals and their composition.","category":"charts","client":false,"folder":"Chart","recharts":true},{"name":"Stat","label":"Stat","slug":"stat","description":"Headline metrics with labels and trend deltas.","category":"data-display","client":false},{"name":"Stepper","label":"Stepper","slug":"stepper","description":"Step-by-step progress indicator for wizards and multi-stage flows.","category":"navigation","client":true},{"name":"StreamingText","label":"Streaming text","slug":"streaming-text","description":"Progressive reveal for text arriving in chunks, with a blinking cursor while more is coming.","category":"ai","client":true},{"name":"Swatch","label":"Swatch","slug":"swatch","description":"Clickable colour tile for preset palettes and picker triggers, with a theme-aware selection ring.","category":"forms","client":false},{"name":"Table","label":"Table","slug":"table","description":"Data table with flexible cell content, striped rows, compact sizing, and support for icons, inputs, buttons, and interactive controls.","category":"data-display","client":false},{"name":"Tabs","label":"Tabs","slug":"tabs","description":"Tab navigation with underline indicator, icon support, compact size, and full-width mode.","category":"navigation","client":true},{"name":"TagInput","label":"Tag input","slug":"tag-input","description":"Multi-value text input with entries held as removable tags.","category":"forms","client":true},{"name":"Textarea","label":"Textarea","slug":"textarea","description":"Multi-line text input with character counter, resize control, helper text, and error states.","category":"forms","client":true},{"name":"TimePicker","label":"Time picker","slug":"time-picker","description":"Time-of-day field with a dropdown list of selectable times.","category":"forms","client":true},{"name":"Timeline","label":"Timeline","slug":"timeline","description":"Ordered sequences: histories and steppers.","category":"data-display","client":false},{"name":"Toast","label":"Toast","slug":"toast","description":"Temporary notification with status variants, auto-dismiss, and stacking via ToastProvider.","category":"feedback","client":true},{"name":"ToggleGroup","label":"Toggle group","slug":"toggle-group","description":"A set of two-state buttons that can be toggled on or off, supporting text and icon items.","category":"actions","client":true},{"name":"ToggleSwitch","label":"Toggle switch","slug":"toggle-switch","description":"Binary on/off toggle control with sliding thumb and check indicator, used for settings like theme switching.","category":"forms","client":true},{"name":"ToolCall","label":"Tool call","slug":"tool-call","description":"The record of one tool invocation, with its arguments and result behind a disclosure.","category":"ai","client":true},{"name":"Tooltip","label":"Tooltip","slug":"tooltip","description":"Contextual text label that appears on hover or focus with position and delay options.","category":"overlays","client":true},{"name":"TreeView","label":"Tree view","slug":"tree-view","description":"Collapsible hierarchy for files, folders, and nested structures.","category":"data-display","client":true},{"name":"Treemap","label":"Treemap","slug":"treemap","description":"Nested rectangles sized by value for part-to-whole breakdowns.","category":"charts","client":false,"folder":"Chart","recharts":true},{"name":"UsageCard","label":"Usage card","slug":"usage-card","description":"An agent's budgets at a glance: context window and plan limits as meter rows with reset captions.","category":"ai","client":false}]`);
3
3
  const registry = {
4
4
  categories,
5
5
  components
package/index.d.ts CHANGED
@@ -16,6 +16,7 @@ export * from './components/AppSidebar/AppSidebar';
16
16
  export * from './components/Avatar/Avatar';
17
17
  export * from './components/AvatarGroup/AvatarGroup';
18
18
  export * from './components/Badge/Badge';
19
+ export * from './components/Banner/Banner';
19
20
  export * from './components/Breadcrumb/Breadcrumb';
20
21
  export * from './components/Button/Button';
21
22
  export * from './components/ButtonGroup/ButtonGroup';
@@ -55,9 +56,10 @@ export * from './components/Field/FieldContext';
55
56
  export * from './components/Figure/Figure';
56
57
  export * from './components/FileInput/FileInput';
57
58
  export * from './components/FilterBar/FilterBar';
58
- export * from './components/FunnelChart/FunnelChart';
59
59
  export * from './components/Gauge/Gauge';
60
60
  export * from './components/Globe/Globe';
61
+ export * from './components/HoverCard/HoverCard';
62
+ export * from './components/ImageCompare/ImageCompare';
61
63
  export * from './components/Input/Input';
62
64
  export * from './components/Instructions/Instructions';
63
65
  export * from './components/InterruptCard/InterruptCard';
@@ -68,6 +70,7 @@ export * from './components/MapCallout/MapCallout';
68
70
  export * from './components/MapLegend/MapLegend';
69
71
  export * from './components/MessageActions/MessageActions';
70
72
  export * from './components/MessageCard/MessageCard';
73
+ export * from './components/Meter/Meter';
71
74
  export * from './components/ModelPicker/ModelPicker';
72
75
  export * from './components/Nav/Nav';
73
76
  export * from './components/NavList/NavList';
@@ -82,6 +85,7 @@ export * from './components/PromptSuggestions/PromptSuggestions';
82
85
  export * from './components/Prose/Prose';
83
86
  export * from './components/Quote/Quote';
84
87
  export * from './components/RadioButton/RadioButton';
88
+ export * from './components/Rating/Rating';
85
89
  export * from './components/Reasoning/Reasoning';
86
90
  export * from './components/SectionTitle/SectionTitle';
87
91
  export * from './components/SegmentedControl/SegmentedControl';
@@ -90,8 +94,10 @@ export * from './components/ShaderField/ShaderField';
90
94
  export * from './components/Skeleton/Skeleton';
91
95
  export * from './components/Slider/Slider';
92
96
  export * from './components/SourceChip/SourceChip';
97
+ export * from './components/SourceTrail/SourceTrail';
93
98
  export * from './components/Sparkline/Sparkline';
94
99
  export * from './components/Spinner/Spinner';
100
+ export * from './components/SplitButton/SplitButton';
95
101
  export * from './components/SplitPane/SplitPane';
96
102
  export * from './components/Stat/Stat';
97
103
  export * from './components/Stepper/Stepper';
@@ -109,6 +115,7 @@ export * from './components/ToggleSwitch/ToggleSwitch';
109
115
  export * from './components/ToolCall/ToolCall';
110
116
  export * from './components/Tooltip/Tooltip';
111
117
  export * from './components/TreeView/TreeView';
118
+ export * from './components/UsageCard/UsageCard';
112
119
  export { componentRegistry, componentMetadata, componentCategories, componentCategoryMetadata, COMPONENT_COUNT, } from './components/registry';
113
120
  export type { ComponentMeta, ComponentCategoryMeta } from './components/registry';
114
121
  export { tokenRegistry, TOKEN_COUNT, TOKEN_COUNTS } from './tokens/registry';
package/index.js CHANGED
@@ -11,6 +11,7 @@ import { AppSidebar } from "./components/AppSidebar/AppSidebar.js";
11
11
  import { Avatar } from "./components/Avatar/Avatar.js";
12
12
  import { AvatarGroup } from "./components/AvatarGroup/AvatarGroup.js";
13
13
  import { Badge } from "./components/Badge/Badge.js";
14
+ import { Banner } from "./components/Banner/Banner.js";
14
15
  import { Breadcrumb } from "./components/Breadcrumb/Breadcrumb.js";
15
16
  import { Button } from "./components/Button/Button.js";
16
17
  import { ButtonGroup } from "./components/ButtonGroup/ButtonGroup.js";
@@ -50,9 +51,10 @@ import { FieldContext, useField } from "./components/Field/FieldContext.js";
50
51
  import { Figure } from "./components/Figure/Figure.js";
51
52
  import { FileInput } from "./components/FileInput/FileInput.js";
52
53
  import { FilterBar } from "./components/FilterBar/FilterBar.js";
53
- import { FunnelChart } from "./components/FunnelChart/FunnelChart.js";
54
54
  import { Gauge } from "./components/Gauge/Gauge.js";
55
55
  import { Globe } from "./components/Globe/Globe.js";
56
+ import { HoverCard } from "./components/HoverCard/HoverCard.js";
57
+ import { ImageCompare } from "./components/ImageCompare/ImageCompare.js";
56
58
  import { Input } from "./components/Input/Input.js";
57
59
  import { Instructions } from "./components/Instructions/Instructions.js";
58
60
  import { InterruptCard } from "./components/InterruptCard/InterruptCard.js";
@@ -63,6 +65,7 @@ import { MapCallout } from "./components/MapCallout/MapCallout.js";
63
65
  import { MapLegend } from "./components/MapLegend/MapLegend.js";
64
66
  import { MessageActions } from "./components/MessageActions/MessageActions.js";
65
67
  import { MessageCard } from "./components/MessageCard/MessageCard.js";
68
+ import { Meter } from "./components/Meter/Meter.js";
66
69
  import { ModelPicker } from "./components/ModelPicker/ModelPicker.js";
67
70
  import { Nav } from "./components/Nav/Nav.js";
68
71
  import { NavList } from "./components/NavList/NavList.js";
@@ -77,6 +80,7 @@ import { PromptSuggestions } from "./components/PromptSuggestions/PromptSuggesti
77
80
  import { Prose } from "./components/Prose/Prose.js";
78
81
  import { Quote } from "./components/Quote/Quote.js";
79
82
  import { RadioButton, RadioGroup } from "./components/RadioButton/RadioButton.js";
83
+ import { Rating } from "./components/Rating/Rating.js";
80
84
  import { Reasoning } from "./components/Reasoning/Reasoning.js";
81
85
  import { SectionTitle } from "./components/SectionTitle/SectionTitle.js";
82
86
  import { SegmentedControl } from "./components/SegmentedControl/SegmentedControl.js";
@@ -85,8 +89,10 @@ import { ShaderField } from "./components/ShaderField/ShaderField.js";
85
89
  import { Skeleton } from "./components/Skeleton/Skeleton.js";
86
90
  import { Slider } from "./components/Slider/Slider.js";
87
91
  import { SourceChip } from "./components/SourceChip/SourceChip.js";
92
+ import { SourceTrail } from "./components/SourceTrail/SourceTrail.js";
88
93
  import { Sparkline } from "./components/Sparkline/Sparkline.js";
89
94
  import { Spinner } from "./components/Spinner/Spinner.js";
95
+ import { SplitButton } from "./components/SplitButton/SplitButton.js";
90
96
  import { SplitPane } from "./components/SplitPane/SplitPane.js";
91
97
  import { Stat } from "./components/Stat/Stat.js";
92
98
  import { Stepper } from "./components/Stepper/Stepper.js";
@@ -104,10 +110,12 @@ import { ToggleSwitch } from "./components/ToggleSwitch/ToggleSwitch.js";
104
110
  import { ToolCall } from "./components/ToolCall/ToolCall.js";
105
111
  import { Tooltip } from "./components/Tooltip/Tooltip.js";
106
112
  import { TreeView } from "./components/TreeView/TreeView.js";
113
+ import { UsageCard } from "./components/UsageCard/UsageCard.js";
107
114
  import { COMPONENT_COUNT, componentCategories, componentCategoryMetadata, componentMetadata, componentRegistry } from "./components/registry.js";
108
115
  import { TOKEN_COUNT, TOKEN_COUNTS, tokenRegistry } from "./tokens/registry.js";
109
116
  import { BLOB_COUNT } from "./components/ShaderField/field.glsl.js";
110
117
  import { DEFAULT_SHADER_BLOBS, DEFAULT_SHADER_PARAMS, useShaderField } from "./components/ShaderField/useShaderField.js";
118
+ import { createStreamReveal, useStreamReveal } from "./components/StreamingText/useStreamReveal.js";
111
119
  export {
112
120
  Accordion,
113
121
  AgentPlan,
@@ -122,6 +130,7 @@ export {
122
130
  AvatarGroup,
123
131
  BLOB_COUNT,
124
132
  Badge,
133
+ Banner,
125
134
  Breadcrumb,
126
135
  Button,
127
136
  ButtonGroup,
@@ -165,9 +174,10 @@ export {
165
174
  Figure,
166
175
  FileInput,
167
176
  FilterBar,
168
- FunnelChart,
169
177
  Gauge,
170
178
  Globe,
179
+ HoverCard,
180
+ ImageCompare,
171
181
  Input,
172
182
  Instructions,
173
183
  InterruptCard,
@@ -178,6 +188,7 @@ export {
178
188
  MapLegend,
179
189
  MessageActions,
180
190
  MessageCard,
191
+ Meter,
181
192
  ModelPicker,
182
193
  Nav,
183
194
  NavList,
@@ -194,6 +205,7 @@ export {
194
205
  Quote,
195
206
  RadioButton,
196
207
  RadioGroup,
208
+ Rating,
197
209
  Reasoning,
198
210
  SectionTitle,
199
211
  SegmentedControl,
@@ -202,8 +214,10 @@ export {
202
214
  Skeleton,
203
215
  Slider,
204
216
  SourceChip,
217
+ SourceTrail,
205
218
  Sparkline,
206
219
  Spinner,
220
+ SplitButton,
207
221
  SplitPane,
208
222
  Stat,
209
223
  Stepper,
@@ -224,14 +238,17 @@ export {
224
238
  ToolCall,
225
239
  Tooltip,
226
240
  TreeView,
241
+ UsageCard,
227
242
  agentStatusPatterns,
228
243
  componentCategories,
229
244
  componentCategoryMetadata,
230
245
  componentMetadata,
231
246
  componentRegistry,
247
+ createStreamReveal,
232
248
  parseUnifiedDiff,
233
249
  tokenRegistry,
234
250
  useField,
235
251
  useShaderField,
252
+ useStreamReveal,
236
253
  useToast
237
254
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robr0/design-system",
3
- "version": "0.13.0",
3
+ "version": "0.15.0",
4
4
  "description": "An AI-ready React design system: accessible components on composable tokens, light/dark theming, and CSS-variable overrides.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -46,6 +46,10 @@
46
46
  "types": "./components/ShaderField/useShaderField.d.ts",
47
47
  "import": "./components/ShaderField/useShaderField.js"
48
48
  },
49
+ "./components/StreamingText/useStreamReveal": {
50
+ "types": "./components/StreamingText/useStreamReveal.d.ts",
51
+ "import": "./components/StreamingText/useStreamReveal.js"
52
+ },
49
53
  "./tokens/registry": {
50
54
  "types": "./tokens/registry.d.ts",
51
55
  "import": "./tokens/registry.js"
@@ -7,9 +7,10 @@
7
7
  *
8
8
  * Most are schedule timings (when something starts, stops, or is taken
9
9
  * away), which the reduced-motion guard in tokens-motion.css deliberately
10
- * leaves alone. A constant that paces an animation (the streaming-text
11
- * reveal step) is the exception: its component checks the preference
12
- * itself in JS, because the CSS guard cannot see a JavaScript timer.
10
+ * leaves alone. A constant that paces an animation (the streaming reveal's
11
+ * rate floor and drain window) is the exception: its component checks the
12
+ * preference itself in JS, because the CSS guard cannot see a JavaScript
13
+ * timer.
13
14
  */
14
15
  /** Delay before a hover-triggered overlay appears, filtering pass-through hovers. */
15
16
  export declare const MOTION_HOVER_SHOW_DELAY_MS = 300;
@@ -23,5 +24,9 @@ export declare const MOTION_AUTOPLAY_INTERVAL_MS = 5000;
23
24
  export declare const MOTION_FEEDBACK_RESET_MS = 2000;
24
25
  /** How long after the last scroll event a scroll surface is considered settled. */
25
26
  export declare const MOTION_SCROLL_SETTLE_MS = 600;
26
- /** Interval between character-reveal steps when streaming text types itself out. An animation pace, not a schedule timing StreamingText skips the reveal under reduced motion. */
27
+ /** Slowest the streaming reveal ever runs, in characters per second — the pace a thin trickle of deltas types at. An animation pace, not a schedule timing: the reveal is skipped under reduced motion. */
28
+ export declare const MOTION_STREAM_FLOOR_CPS = 70;
29
+ /** However much streamed text is waiting, the reveal has it fully on screen within this long — the rate rises with the backlog, so a dumped paragraph catches up in a beat. */
30
+ export declare const MOTION_STREAM_DRAIN_MS = 250;
31
+ /** The retired interval-based reveal step. @deprecated The reveal is frame-driven now — pace it with MOTION_STREAM_FLOOR_CPS and MOTION_STREAM_DRAIN_MS. */
27
32
  export declare const MOTION_STREAM_CHAR_INTERVAL_MS = 15;