@vllnt/ui 0.2.1-canary.c0bc557 → 0.2.1-canary.cacf57f

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/dist/components/accordion/accordion.js +2 -2
  2. package/dist/components/activity-heatmap/activity-heatmap.js +15 -13
  3. package/dist/components/activity-log/activity-log.js +5 -5
  4. package/dist/components/agent-activity/agent-activity.js +8 -8
  5. package/dist/components/ai-artifact/ai-artifact.js +8 -8
  6. package/dist/components/ai-chat-input/ai-chat-input.js +2 -2
  7. package/dist/components/ai-message-bubble/ai-message-bubble.js +1 -1
  8. package/dist/components/ai-sidebar/ai-sidebar.js +4 -4
  9. package/dist/components/ai-source-citation/ai-source-citation.js +2 -2
  10. package/dist/components/ai-tool-call-display/ai-tool-call-display.js +4 -4
  11. package/dist/components/animated-text/animated-text.js +1 -4
  12. package/dist/components/auto-reload/auto-reload.js +14 -4
  13. package/dist/components/avatar/avatar.js +1 -1
  14. package/dist/components/avatar-group/avatar-group.js +4 -4
  15. package/dist/components/banner/banner.js +3 -3
  16. package/dist/components/bottom-activity-strip/bottom-activity-strip.js +1 -1
  17. package/dist/components/breadcrumb/breadcrumb.js +33 -26
  18. package/dist/components/button/button.js +1 -1
  19. package/dist/components/calendar/calendar.js +6 -6
  20. package/dist/components/callout/callout.js +1 -1
  21. package/dist/components/candlestick-chart/candlestick-chart.js +1 -1
  22. package/dist/components/canvas-shell/canvas-foundation-demo.js +4 -4
  23. package/dist/components/carousel/carousel.js +4 -4
  24. package/dist/components/chat-dock-section/chat-dock-section.js +1 -1
  25. package/dist/components/checkbox/checkbox.js +2 -2
  26. package/dist/components/checklist/checklist.js +3 -3
  27. package/dist/components/chronological-timeline/chronological-timeline.js +6 -5
  28. package/dist/components/civilization-card/civilization-card.js +1 -1
  29. package/dist/components/code-block/code-block.js +2 -2
  30. package/dist/components/code-playground/code-playground.js +8 -7
  31. package/dist/components/combobox/combobox.js +46 -22
  32. package/dist/components/command/command.js +1 -1
  33. package/dist/components/comment-pin/comment-pin.js +1 -1
  34. package/dist/components/comparison/comparison.js +9 -9
  35. package/dist/components/completion-dialog/completion-dialog.js +1 -1
  36. package/dist/components/content-intro/content-intro.js +8 -7
  37. package/dist/components/context-menu/context-menu.js +4 -4
  38. package/dist/components/conversation-thread/conversation-thread.js +8 -8
  39. package/dist/components/cookie-consent/cookie-consent.js +1 -1
  40. package/dist/components/copy-button/copy-button.js +3 -3
  41. package/dist/components/countdown-timer/countdown-timer.js +8 -7
  42. package/dist/components/credit-badge/credit-badge.js +1 -7
  43. package/dist/components/curriculum/curriculum.js +10 -10
  44. package/dist/components/data-list/data-list.js +1 -1
  45. package/dist/components/data-table/data-table.js +5 -4
  46. package/dist/components/date-picker/date-picker.js +1 -1
  47. package/dist/components/dialog/dialog.js +1 -1
  48. package/dist/components/dropdown-menu/dropdown-menu.js +3 -3
  49. package/dist/components/empty-state/empty-state.js +3 -3
  50. package/dist/components/exercise/exercise.js +4 -4
  51. package/dist/components/faq/faq.js +2 -2
  52. package/dist/components/file-upload/file-upload.js +3 -3
  53. package/dist/components/filter-bar/filter-bar.js +2 -1
  54. package/dist/components/flashcard/flashcard.js +1 -1
  55. package/dist/components/floating-action-button/floating-action-button.js +1 -1
  56. package/dist/components/floating-toolbar/floating-toolbar.js +1 -1
  57. package/dist/components/flow-diagram/flow-controls.js +9 -9
  58. package/dist/components/flow-diagram/flow-error-boundary.js +2 -2
  59. package/dist/components/flow-diagram/flow-fullscreen.js +2 -2
  60. package/dist/components/gantt-chart/gantt-chart.js +15 -13
  61. package/dist/components/handoff-beacon/handoff-beacon.js +1 -1
  62. package/dist/components/historic-timeline/historic-timeline.js +2 -2
  63. package/dist/components/historical-figure-card/historical-figure-card.js +4 -7
  64. package/dist/components/horizontal-scroll-row/horizontal-scroll-row.js +4 -4
  65. package/dist/components/input-otp/input-otp.js +1 -1
  66. package/dist/components/interactive-timeline/interactive-timeline.js +4 -4
  67. package/dist/components/jarvis-dock/jarvis-dock.js +2 -2
  68. package/dist/components/key-concept/key-concept.js +4 -4
  69. package/dist/components/keyboard-shortcuts-help/keyboard-shortcuts-help.js +2 -2
  70. package/dist/components/knowledge-check/knowledge-check.js +3 -3
  71. package/dist/components/learning-objectives/learning-objectives.js +12 -12
  72. package/dist/components/live-feed/live-feed.js +15 -13
  73. package/dist/components/map-2d/map-2d.js +2 -2
  74. package/dist/components/market-treemap/market-treemap.js +1 -1
  75. package/dist/components/mdx-content/mdx-content.js +5 -4
  76. package/dist/components/menubar/menubar.js +4 -4
  77. package/dist/components/metric-cluster/metric-cluster.js +1 -1
  78. package/dist/components/metric-gauge/metric-gauge.js +1 -1
  79. package/dist/components/model-comparison/model-comparison.js +2 -2
  80. package/dist/components/model-selector/model-selector.js +2 -2
  81. package/dist/components/multi-select/multi-select.js +3 -3
  82. package/dist/components/navbar-saas/navbar-saas.js +3 -2
  83. package/dist/components/navigation-menu/navigation-menu.js +2 -2
  84. package/dist/components/newsletter-signup/newsletter-signup.js +3 -3
  85. package/dist/components/number-input/number-input.js +1 -1
  86. package/dist/components/number-ticker/number-ticker.js +11 -4
  87. package/dist/components/object-inspector/object-inspector.js +1 -1
  88. package/dist/components/parallel-timeline/parallel-timeline.js +2 -2
  89. package/dist/components/password-input/password-input.js +1 -1
  90. package/dist/components/plan-badge/plan-badge.js +1 -7
  91. package/dist/components/presence-stack/presence-stack.js +2 -2
  92. package/dist/components/presence-sync-indicator/presence-sync-indicator.js +1 -1
  93. package/dist/components/pricing-table/pricing-table.js +3 -3
  94. package/dist/components/pro-tip/pro-tip.js +6 -6
  95. package/dist/components/profile-section/profile-section.js +1 -1
  96. package/dist/components/progress-card/progress-card.js +4 -3
  97. package/dist/components/progress-tracker/progress-tracker.js +7 -5
  98. package/dist/components/prompt-templates/prompt-templates.js +2 -2
  99. package/dist/components/quiz/quiz.js +5 -5
  100. package/dist/components/radio-group/radio-group.js +2 -2
  101. package/dist/components/rating/rating.js +3 -3
  102. package/dist/components/resizable/resizable.js +1 -1
  103. package/dist/components/runtime-overview-panel/runtime-overview-panel.js +1 -1
  104. package/dist/components/scope-selector/scope-selector.js +7 -7
  105. package/dist/components/search-bar/search-bar.js +24 -2
  106. package/dist/components/search-dialog/search-dialog.js +1 -1
  107. package/dist/components/select/select.js +5 -5
  108. package/dist/components/selection-halo/selection-halo.js +1 -1
  109. package/dist/components/severity-badge/severity-badge.js +2 -2
  110. package/dist/components/sheet/sheet.js +1 -1
  111. package/dist/components/sidebar/sidebar.js +1 -1
  112. package/dist/components/sidebar-toggle/sidebar-toggle.js +2 -2
  113. package/dist/components/slider/slider.js +1 -1
  114. package/dist/components/slideshow/slideshow.js +12 -11
  115. package/dist/components/social-fab/social-fab.js +2 -1
  116. package/dist/components/sparkline-grid/sparkline-grid.js +1 -1
  117. package/dist/components/spinner/spinner.js +3 -3
  118. package/dist/components/stat-card/stat-card.js +3 -3
  119. package/dist/components/state-badge-overlay/state-badge-overlay.js +1 -1
  120. package/dist/components/status-board/status-board.js +1 -1
  121. package/dist/components/status-indicator/status-indicator.js +3 -3
  122. package/dist/components/step-by-step/step-by-step.js +8 -7
  123. package/dist/components/step-navigation/step-navigation.js +2 -2
  124. package/dist/components/stepper/stepper.js +3 -3
  125. package/dist/components/sticky-metric/sticky-metric.js +1 -1
  126. package/dist/components/subscription-card/subscription-card.js +1 -1
  127. package/dist/components/switch/switch.js +1 -1
  128. package/dist/components/table-of-contents-panel/table-of-contents-panel.js +5 -5
  129. package/dist/components/tags-input/tags-input.js +1 -1
  130. package/dist/components/terminal/terminal.js +48 -34
  131. package/dist/components/thinking-block/thinking-block.js +1 -1
  132. package/dist/components/ticker-tape/ticker-tape.js +3 -3
  133. package/dist/components/timeline/timeline.js +2 -2
  134. package/dist/components/tldr-section/tldr-section.js +2 -2
  135. package/dist/components/tour/tour.js +1 -1
  136. package/dist/components/transaction-list/transaction-list.js +30 -9
  137. package/dist/components/tree-view/tree-view.js +2 -2
  138. package/dist/components/tutorial-complete/tutorial-complete.js +9 -9
  139. package/dist/components/tutorial-intro-content/tutorial-intro-content.js +4 -4
  140. package/dist/components/tutorial-mdx/tutorial-mdx.js +4 -4
  141. package/dist/components/usage-breakdown/usage-breakdown.js +9 -5
  142. package/dist/components/video-embed/video-embed.js +2 -2
  143. package/dist/components/viewport-bookmarks/viewport-bookmarks.js +1 -1
  144. package/dist/components/wallet-card/wallet-card.js +1 -1
  145. package/dist/components/watchlist/watchlist.js +5 -5
  146. package/dist/components/world-clock-bar/world-clock-bar.js +32 -12
  147. package/dist/index.d.ts +1 -1
  148. package/package.json +3 -3
@@ -104,7 +104,7 @@ function AccordionTrigger({
104
104
  "span",
105
105
  {
106
106
  className: cn(
107
- "h-4 w-4 flex-shrink-0 transition-transform duration-200",
107
+ "size-4 flex-shrink-0 transition-transform duration-200",
108
108
  isOpen && "rotate-180"
109
109
  ),
110
110
  children: icon
@@ -113,7 +113,7 @@ function AccordionTrigger({
113
113
  "svg",
114
114
  {
115
115
  className: cn(
116
- "h-4 w-4 flex-shrink-0 transition-transform duration-200",
116
+ "size-4 flex-shrink-0 transition-transform duration-200",
117
117
  isOpen && "rotate-180"
118
118
  ),
119
119
  fill: "none",
@@ -72,19 +72,21 @@ function getGridData(data, endDate, weeks) {
72
72
  });
73
73
  });
74
74
  }
75
+ const MONTH_LABEL_FORMATTER = new Intl.DateTimeFormat("en-US", {
76
+ month: "short",
77
+ timeZone: "UTC"
78
+ });
79
+ const TOOLTIP_DATE_FORMATTER = new Intl.DateTimeFormat("en-US", {
80
+ day: "numeric",
81
+ month: "short",
82
+ timeZone: "UTC",
83
+ year: "numeric"
84
+ });
75
85
  function formatMonthLabel(date) {
76
- return new Intl.DateTimeFormat("en-US", {
77
- month: "short",
78
- timeZone: "UTC"
79
- }).format(date);
86
+ return MONTH_LABEL_FORMATTER.format(date);
80
87
  }
81
88
  function formatTooltip(date, count) {
82
- const formattedDate = new Intl.DateTimeFormat("en-US", {
83
- day: "numeric",
84
- month: "short",
85
- timeZone: "UTC",
86
- year: "numeric"
87
- }).format(date);
89
+ const formattedDate = TOOLTIP_DATE_FORMATTER.format(date);
88
90
  return `${count} activity ${count === 1 ? "event" : "events"} on ${formattedDate}`;
89
91
  }
90
92
  function HeatmapGrid({
@@ -127,15 +129,15 @@ function HeatmapGrid({
127
129
  ),
128
130
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-2 text-xs text-muted-foreground", children: [
129
131
  /* @__PURE__ */ jsx("span", { children: "Less" }),
130
- LEVEL_CLASS_NAMES.map((className, index) => /* @__PURE__ */ jsx(
132
+ LEVEL_CLASS_NAMES.map((className) => /* @__PURE__ */ jsx(
131
133
  "span",
132
134
  {
133
135
  className: cn(
134
- "h-3 w-3 rounded-[3px] border border-border/40",
136
+ "size-3 rounded-[3px] border border-border/40",
135
137
  className
136
138
  )
137
139
  },
138
- `legend-${index}`
140
+ `legend-${className}`
139
141
  )),
140
142
  /* @__PURE__ */ jsx("span", { children: "More" })
141
143
  ] })
@@ -82,7 +82,7 @@ function PaginationControls({
82
82
  size: "sm",
83
83
  variant: "outline",
84
84
  children: [
85
- /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4" }),
85
+ /* @__PURE__ */ jsx(ChevronLeft, { className: "size-4" }),
86
86
  "Previous"
87
87
  ]
88
88
  }
@@ -111,7 +111,7 @@ function PaginationControls({
111
111
  variant: "outline",
112
112
  children: [
113
113
  "Next",
114
- /* @__PURE__ */ jsx(ChevronRight, { className: "h-4 w-4" })
114
+ /* @__PURE__ */ jsx(ChevronRight, { className: "size-4" })
115
115
  ]
116
116
  }
117
117
  )
@@ -132,18 +132,18 @@ function ActivityRow({ item }) {
132
132
  {
133
133
  "aria-hidden": "true",
134
134
  className: cn(
135
- "absolute left-4 top-3 h-3 w-3 rounded-full ring-4 ring-background",
135
+ "absolute left-4 top-3 size-3 rounded-full ring-4 ring-background",
136
136
  palette.markerClassName
137
137
  )
138
138
  }
139
139
  ),
140
140
  /* @__PURE__ */ jsx("div", { className: "rounded-lg border bg-background/70 p-4", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between", children: [
141
141
  /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-start gap-3", children: [
142
- /* @__PURE__ */ jsx(Avatar, { className: "h-9 w-9 border bg-muted", children: /* @__PURE__ */ jsx(AvatarFallback, { children: getInitials(item.actor) }) }),
142
+ /* @__PURE__ */ jsx(Avatar, { className: "size-9 border bg-muted", children: /* @__PURE__ */ jsx(AvatarFallback, { children: getInitials(item.actor) }) }),
143
143
  /* @__PURE__ */ jsxs("div", { className: "min-w-0 space-y-1", children: [
144
144
  /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
145
145
  /* @__PURE__ */ jsx("span", { className: "font-medium text-foreground", children: item.actor }),
146
- /* @__PURE__ */ jsx(ArrowRight, { className: "h-3.5 w-3.5 text-muted-foreground" }),
146
+ /* @__PURE__ */ jsx(ArrowRight, { className: "size-3.5 text-muted-foreground" }),
147
147
  /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: item.action }),
148
148
  item.target ? /* @__PURE__ */ jsx("span", { className: "truncate text-sm font-medium text-foreground", children: item.target }) : null
149
149
  ] }),
@@ -46,11 +46,11 @@ const STATUS_CLASSES = {
46
46
  }
47
47
  };
48
48
  const DEFAULT_STATUS_ICON = {
49
- completed: /* @__PURE__ */ jsx(CheckCircle2, { "aria-hidden": "true", className: "h-4 w-4" }),
50
- error: /* @__PURE__ */ jsx(AlertTriangle, { "aria-hidden": "true", className: "h-4 w-4" }),
51
- pending: /* @__PURE__ */ jsx(Circle, { "aria-hidden": "true", className: "h-4 w-4" }),
52
- running: /* @__PURE__ */ jsx(Loader2, { "aria-hidden": "true", className: "h-4 w-4 animate-spin" }),
53
- skipped: /* @__PURE__ */ jsx(MinusCircle, { "aria-hidden": "true", className: "h-4 w-4" })
49
+ completed: /* @__PURE__ */ jsx(CheckCircle2, { "aria-hidden": "true", className: "size-4" }),
50
+ error: /* @__PURE__ */ jsx(AlertTriangle, { "aria-hidden": "true", className: "size-4" }),
51
+ pending: /* @__PURE__ */ jsx(Circle, { "aria-hidden": "true", className: "size-4" }),
52
+ running: /* @__PURE__ */ jsx(Loader2, { "aria-hidden": "true", className: "size-4 animate-spin" }),
53
+ skipped: /* @__PURE__ */ jsx(MinusCircle, { "aria-hidden": "true", className: "size-4" })
54
54
  };
55
55
  const StepContext = createContext({ status: "pending" });
56
56
  const DEFAULT_LABELS = {
@@ -148,7 +148,7 @@ function StepRow({
148
148
  {
149
149
  "aria-hidden": "true",
150
150
  className: cn(
151
- "mt-0.5 inline-flex h-5 w-5 shrink-0 items-center justify-center",
151
+ "mt-0.5 inline-flex size-5 shrink-0 items-center justify-center",
152
152
  iconClass
153
153
  ),
154
154
  children: icon
@@ -161,7 +161,7 @@ function StepRow({
161
161
  "aria-controls": detailsId,
162
162
  "aria-expanded": open,
163
163
  "aria-label": open ? labels.collapse : labels.expand,
164
- className: "ml-auto inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-foreground/10 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
164
+ className: "ml-auto inline-flex size-6 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-foreground/10 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
165
165
  onClick: onToggle,
166
166
  type: "button",
167
167
  children: /* @__PURE__ */ jsx(
@@ -169,7 +169,7 @@ function StepRow({
169
169
  {
170
170
  "aria-hidden": "true",
171
171
  className: cn(
172
- "h-4 w-4 transition-transform",
172
+ "size-4 transition-transform",
173
173
  open ? "rotate-180" : "rotate-0"
174
174
  )
175
175
  }
@@ -271,14 +271,14 @@ const AIArtifactCopyButton = forwardRef(({ className, onClick, ...rest }, ref) =
271
271
  Button,
272
272
  {
273
273
  "aria-label": copied ? labels.copied : labels.copy,
274
- className: cn("h-8 w-8", className),
274
+ className: cn("size-8", className),
275
275
  onClick: handleClick,
276
276
  ref,
277
277
  size: "icon",
278
278
  type: "button",
279
279
  variant: "ghost",
280
280
  ...rest,
281
- children: copied ? /* @__PURE__ */ jsx(Check, { "aria-hidden": "true", className: "h-4 w-4" }) : /* @__PURE__ */ jsx(Copy, { "aria-hidden": "true", className: "h-4 w-4" })
281
+ children: copied ? /* @__PURE__ */ jsx(Check, { "aria-hidden": "true", className: "size-4" }) : /* @__PURE__ */ jsx(Copy, { "aria-hidden": "true", className: "size-4" })
282
282
  }
283
283
  );
284
284
  });
@@ -298,14 +298,14 @@ const AIArtifactEditButton = forwardRef(({ className, onClick, ...rest }, ref) =
298
298
  Button,
299
299
  {
300
300
  "aria-label": labels.edit,
301
- className: cn("h-8 w-8", className),
301
+ className: cn("size-8", className),
302
302
  onClick: handleClick,
303
303
  ref,
304
304
  size: "icon",
305
305
  type: "button",
306
306
  variant: "ghost",
307
307
  ...rest,
308
- children: /* @__PURE__ */ jsx(Pencil, { "aria-hidden": "true", className: "h-4 w-4" })
308
+ children: /* @__PURE__ */ jsx(Pencil, { "aria-hidden": "true", className: "size-4" })
309
309
  }
310
310
  );
311
311
  });
@@ -324,14 +324,14 @@ const AIArtifactDownloadButton = forwardRef(({ className, onClick, ...rest }, re
324
324
  Button,
325
325
  {
326
326
  "aria-label": labels.download,
327
- className: cn("h-8 w-8", className),
327
+ className: cn("size-8", className),
328
328
  onClick: handleClick,
329
329
  ref,
330
330
  size: "icon",
331
331
  type: "button",
332
332
  variant: "ghost",
333
333
  ...rest,
334
- children: /* @__PURE__ */ jsx(Download, { "aria-hidden": "true", className: "h-4 w-4" })
334
+ children: /* @__PURE__ */ jsx(Download, { "aria-hidden": "true", className: "size-4" })
335
335
  }
336
336
  );
337
337
  });
@@ -351,14 +351,14 @@ const AIArtifactFullscreenButton = forwardRef(({ className, onClick, ...rest },
351
351
  {
352
352
  "aria-label": fullscreen ? labels.exitFullscreen : labels.enterFullscreen,
353
353
  "aria-pressed": fullscreen,
354
- className: cn("h-8 w-8", className),
354
+ className: cn("size-8", className),
355
355
  onClick: handleClick,
356
356
  ref,
357
357
  size: "icon",
358
358
  type: "button",
359
359
  variant: "ghost",
360
360
  ...rest,
361
- children: fullscreen ? /* @__PURE__ */ jsx(Minimize2, { "aria-hidden": "true", className: "h-4 w-4" }) : /* @__PURE__ */ jsx(Maximize2, { "aria-hidden": "true", className: "h-4 w-4" })
361
+ children: fullscreen ? /* @__PURE__ */ jsx(Minimize2, { "aria-hidden": "true", className: "size-4" }) : /* @__PURE__ */ jsx(Maximize2, { "aria-hidden": "true", className: "size-4" })
362
362
  }
363
363
  );
364
364
  });
@@ -36,7 +36,7 @@ function AIChatInputFooter({
36
36
  disabled: isSubmitDisabled,
37
37
  type: "submit",
38
38
  children: [
39
- isSubmitting ? /* @__PURE__ */ jsx(LoaderCircle, { className: "mr-2 h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx(SendHorizontal, { className: "mr-2 h-4 w-4" }),
39
+ isSubmitting ? /* @__PURE__ */ jsx(LoaderCircle, { className: "mr-2 size-4 animate-spin" }) : /* @__PURE__ */ jsx(SendHorizontal, { className: "mr-2 size-4" }),
40
40
  submitLabel
41
41
  ]
42
42
  }
@@ -72,7 +72,7 @@ const AIChatInput = forwardRef(
72
72
  /* @__PURE__ */ jsx(
73
73
  Textarea,
74
74
  {
75
- className: "min-h-[120px] resize-none rounded-xl border-0 bg-transparent px-1 py-1 shadow-none focus-visible:ring-0 focus-visible:ring-offset-0",
75
+ className: "min-h-[120px] resize-none rounded-xl border-0 bg-transparent p-1 shadow-none focus-visible:ring-0 focus-visible:ring-offset-0",
76
76
  disabled,
77
77
  onChange: (event) => {
78
78
  textareaProps?.onChange?.(event);
@@ -73,7 +73,7 @@ const AIMessageBubble = forwardRef(
73
73
  isUser ? "flex-row-reverse text-right" : "flex-row"
74
74
  ),
75
75
  children: [
76
- /* @__PURE__ */ jsx(Avatar, { className: "mt-0.5 h-8 w-8 border border-border/70", children: /* @__PURE__ */ jsx(AvatarFallback, { className: "bg-muted text-[11px] font-medium uppercase text-muted-foreground", children: fallbackLabel }) }),
76
+ /* @__PURE__ */ jsx(Avatar, { className: "mt-0.5 size-8 border border-border/70", children: /* @__PURE__ */ jsx(AvatarFallback, { className: "bg-muted text-[11px] font-medium uppercase text-muted-foreground", children: fallbackLabel }) }),
77
77
  /* @__PURE__ */ jsxs(
78
78
  "div",
79
79
  {
@@ -160,7 +160,7 @@ const AISidebarTitle = forwardRef(({ children, className, ...rest }, ref) => {
160
160
  ref,
161
161
  ...rest,
162
162
  children: [
163
- /* @__PURE__ */ jsx(Bot, { "aria-hidden": "true", className: "h-4 w-4 text-muted-foreground" }),
163
+ /* @__PURE__ */ jsx(Bot, { "aria-hidden": "true", className: "size-4 text-muted-foreground" }),
164
164
  children ?? labels.defaultTitle
165
165
  ]
166
166
  }
@@ -181,14 +181,14 @@ const AISidebarClose = forwardRef(({ className, onClick, ...rest }, ref) => {
181
181
  Button,
182
182
  {
183
183
  "aria-label": labels.close,
184
- className: cn("h-8 w-8", className),
184
+ className: cn("size-8", className),
185
185
  onClick: handleClick,
186
186
  ref,
187
187
  size: "icon",
188
188
  type: "button",
189
189
  variant: "ghost",
190
190
  ...rest,
191
- children: /* @__PURE__ */ jsx(X, { "aria-hidden": "true", className: "h-4 w-4" })
191
+ children: /* @__PURE__ */ jsx(X, { "aria-hidden": "true", className: "size-4" })
192
192
  }
193
193
  );
194
194
  });
@@ -236,7 +236,7 @@ const AISidebarTrigger = forwardRef(({ children, className, onClick, ...rest },
236
236
  type: "button",
237
237
  variant: "outline",
238
238
  ...rest,
239
- children: children ?? /* @__PURE__ */ jsx(MessageSquarePlus, { "aria-hidden": "true", className: "h-4 w-4" })
239
+ children: children ?? /* @__PURE__ */ jsx(MessageSquarePlus, { "aria-hidden": "true", className: "size-4" })
240
240
  }
241
241
  );
242
242
  });
@@ -18,13 +18,13 @@ const AISourceCitation = forwardRef(
18
18
  ...props,
19
19
  children: [
20
20
  /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2", children: [
21
- /* @__PURE__ */ jsx(Quote, { className: "mt-0.5 h-4 w-4 shrink-0 text-muted-foreground" }),
21
+ /* @__PURE__ */ jsx(Quote, { className: "mt-0.5 size-4 shrink-0 text-muted-foreground" }),
22
22
  /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-3", children: [
23
23
  /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
24
24
  /* @__PURE__ */ jsx("p", { className: "truncate text-sm font-medium text-foreground", children: title }),
25
25
  /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: source })
26
26
  ] }),
27
- /* @__PURE__ */ jsx(ExternalLink, { className: "h-4 w-4 shrink-0 text-muted-foreground transition-transform group-hover:-translate-y-0.5 group-hover:translate-x-0.5" })
27
+ /* @__PURE__ */ jsx(ExternalLink, { className: "size-4 shrink-0 text-muted-foreground transition-transform group-hover:-translate-y-0.5 group-hover:translate-x-0.5" })
28
28
  ] }) })
29
29
  ] }),
30
30
  snippet ? /* @__PURE__ */ jsx("p", { className: "line-clamp-3 text-sm leading-6 text-muted-foreground", children: snippet }) : null
@@ -21,10 +21,10 @@ const statusVariants = cva(
21
21
  }
22
22
  );
23
23
  const statusIconMap = {
24
- complete: /* @__PURE__ */ jsx(CheckCircle2, { className: "h-4 w-4" }),
25
- error: /* @__PURE__ */ jsx(AlertCircle, { className: "h-4 w-4" }),
26
- queued: /* @__PURE__ */ jsx(Clock3, { className: "h-4 w-4" }),
27
- running: /* @__PURE__ */ jsx(Wrench, { className: "h-4 w-4 animate-pulse" })
24
+ complete: /* @__PURE__ */ jsx(CheckCircle2, { className: "size-4" }),
25
+ error: /* @__PURE__ */ jsx(AlertCircle, { className: "size-4" }),
26
+ queued: /* @__PURE__ */ jsx(Clock3, { className: "size-4" }),
27
+ running: /* @__PURE__ */ jsx(Wrench, { className: "size-4 animate-pulse" })
28
28
  };
29
29
  const AIToolCallDisplay = forwardRef(
30
30
  ({
@@ -24,10 +24,7 @@ const ANIMATED_TEXT_RANDOM_CHARACTER_PRESETS = {
24
24
  const DEFAULT_RANDOM_CHARACTERS = ANIMATED_TEXT_RANDOM_CHARACTER_PRESETS.matrix;
25
25
  function getSegments(text, splitBy) {
26
26
  if (splitBy === "character") {
27
- const segmenter = new Intl.Segmenter(void 0, {
28
- granularity: "grapheme"
29
- });
30
- return Array.from(segmenter.segment(text), ({ segment }) => segment);
27
+ return Array.from(GLYPH_SEGMENTER.segment(text), ({ segment }) => segment);
31
28
  }
32
29
  return text.match(/\S+\s*/g) ?? [];
33
30
  }
@@ -34,11 +34,21 @@ function valueToCents(value) {
34
34
  if (Number.isNaN(parsed)) return 0;
35
35
  return Math.round(parsed * CENTS_PER_UNIT);
36
36
  }
37
+ const CURRENCY_FORMATTER_CACHE = /* @__PURE__ */ new Map();
38
+ function getCurrencyFormatter(locale, currency) {
39
+ const key = `${locale}|${currency}`;
40
+ let formatter = CURRENCY_FORMATTER_CACHE.get(key);
41
+ if (!formatter) {
42
+ formatter = new Intl.NumberFormat(locale, {
43
+ currency,
44
+ style: "currency"
45
+ });
46
+ CURRENCY_FORMATTER_CACHE.set(key, formatter);
47
+ }
48
+ return formatter;
49
+ }
37
50
  function getCurrencySymbol(locale, currency) {
38
- const formatted = new Intl.NumberFormat(locale, {
39
- currency,
40
- style: "currency"
41
- }).format(0);
51
+ const formatted = getCurrencyFormatter(locale, currency).format(0);
42
52
  const symbol = formatted.replaceAll(/[\d\s,.]/g, "");
43
53
  return symbol.length > 0 ? symbol : currency;
44
54
  }
@@ -7,7 +7,7 @@ const Avatar = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7
7
  AvatarPrimitive.Root,
8
8
  {
9
9
  className: cn(
10
- "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
10
+ "relative flex size-10 shrink-0 overflow-hidden rounded-full",
11
11
  className
12
12
  ),
13
13
  ref,
@@ -23,9 +23,9 @@ const avatarItemVariants = cva(
23
23
  },
24
24
  variants: {
25
25
  size: {
26
- lg: "h-12 w-12 text-sm",
27
- md: "h-10 w-10 text-xs",
28
- sm: "h-8 w-8 text-[11px]"
26
+ lg: "size-12 text-sm",
27
+ md: "size-10 text-xs",
28
+ sm: "size-8 text-[11px]"
29
29
  }
30
30
  }
31
31
  }
@@ -66,7 +66,7 @@ const AvatarGroup = React.forwardRef(
66
66
  /* @__PURE__ */ jsx(AvatarFallback, { children: item.fallback })
67
67
  ]
68
68
  },
69
- `${item.alt}-${index}`
69
+ item.src ?? item.alt
70
70
  )),
71
71
  hiddenCount > 0 ? /* @__PURE__ */ jsx("span", { className: overflowBadgeVariants({ size }), children: overflowLabel ? overflowLabel(hiddenCount) : `+${hiddenCount}` }) : null
72
72
  ]
@@ -108,7 +108,7 @@ const Banner = forwardRef(
108
108
  "span",
109
109
  {
110
110
  "aria-hidden": "true",
111
- className: "mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center [&>svg]:h-4 [&>svg]:w-4",
111
+ className: "mt-0.5 flex size-4 shrink-0 items-center justify-center [&>svg]:h-4 [&>svg]:w-4",
112
112
  children: icon
113
113
  }
114
114
  ) : null,
@@ -117,10 +117,10 @@ const Banner = forwardRef(
117
117
  "button",
118
118
  {
119
119
  "aria-label": dismissLabel,
120
- className: "ml-auto inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-md opacity-70 transition-colors hover:bg-foreground/10 hover:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
120
+ className: "ml-auto inline-flex size-6 shrink-0 items-center justify-center rounded-md opacity-70 transition-colors hover:bg-foreground/10 hover:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
121
121
  onClick: handleDismiss,
122
122
  type: "button",
123
- children: /* @__PURE__ */ jsx(X, { "aria-hidden": "true", className: "h-4 w-4" })
123
+ children: /* @__PURE__ */ jsx(X, { "aria-hidden": "true", className: "size-4" })
124
124
  }
125
125
  ) : null
126
126
  ]
@@ -23,7 +23,7 @@ const ChipBody = (props) => {
23
23
  "span",
24
24
  {
25
25
  "aria-hidden": "true",
26
- className: cn("h-1.5 w-1.5 rounded-full", TONE_DOT[tone])
26
+ className: cn("size-1.5 rounded-full", TONE_DOT[tone])
27
27
  }
28
28
  ),
29
29
  /* @__PURE__ */ jsx("span", { className: "text-foreground", children: event.label }),
@@ -20,39 +20,46 @@ function Breadcrumb({
20
20
  {
21
21
  "aria-label": "Breadcrumb",
22
22
  className: cn("flex items-center space-x-1 text-sm", className),
23
- children: items.map((item, index) => /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
24
- index > 0 && /* @__PURE__ */ jsx("span", { className: "mx-2", children: /* @__PURE__ */ jsx(SeparatorIcon, { type: separator }) }),
25
- item.href ? /* @__PURE__ */ jsxs(
26
- Link,
27
- {
28
- className: "flex items-center gap-1 hover:text-foreground transition-colors",
29
- href: item.href,
30
- children: [
23
+ children: items.map((item, index) => /* @__PURE__ */ jsxs(
24
+ "div",
25
+ {
26
+ className: "flex items-center",
27
+ children: [
28
+ index > 0 && /* @__PURE__ */ jsx("span", { className: "mx-2", children: /* @__PURE__ */ jsx(SeparatorIcon, { type: separator }) }),
29
+ item.href ? /* @__PURE__ */ jsxs(
30
+ Link,
31
+ {
32
+ className: "flex items-center gap-1 hover:text-foreground transition-colors",
33
+ href: item.href,
34
+ children: [
35
+ item.icon ? /* @__PURE__ */ jsx("span", { className: "flex-shrink-0", children: item.icon }) : null,
36
+ /* @__PURE__ */ jsx(
37
+ "span",
38
+ {
39
+ className: cn(
40
+ // Truncate plain string labels; custom React elements handle their own overflow
41
+ typeof item.label === "string" && "truncate",
42
+ variant === "minimal" ? "text-muted-foreground" : "text-foreground"
43
+ ),
44
+ children: item.label
45
+ }
46
+ )
47
+ ]
48
+ }
49
+ ) : /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1 text-muted-foreground", children: [
31
50
  item.icon ? /* @__PURE__ */ jsx("span", { className: "flex-shrink-0", children: item.icon }) : null,
32
51
  /* @__PURE__ */ jsx(
33
52
  "span",
34
53
  {
35
- className: cn(
36
- // Truncate plain string labels; custom React elements handle their own overflow
37
- typeof item.label === "string" && "truncate",
38
- variant === "minimal" ? "text-muted-foreground" : "text-foreground"
39
- ),
54
+ className: cn(typeof item.label === "string" && "truncate"),
40
55
  children: item.label
41
56
  }
42
57
  )
43
- ]
44
- }
45
- ) : /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1 text-muted-foreground", children: [
46
- item.icon ? /* @__PURE__ */ jsx("span", { className: "flex-shrink-0", children: item.icon }) : null,
47
- /* @__PURE__ */ jsx(
48
- "span",
49
- {
50
- className: cn(typeof item.label === "string" && "truncate"),
51
- children: item.label
52
- }
53
- )
54
- ] })
55
- ] }, index))
58
+ ] })
59
+ ]
60
+ },
61
+ typeof item.label === "string" ? item.label : `breadcrumb-${index}`
62
+ ))
56
63
  }
57
64
  );
58
65
  }
@@ -13,7 +13,7 @@ const buttonVariants = cva(
13
13
  variants: {
14
14
  size: {
15
15
  default: "h-10 px-4 py-2",
16
- icon: "h-10 w-10",
16
+ icon: "size-10",
17
17
  lg: "h-11 rounded-md px-8",
18
18
  sm: "h-9 rounded-md px-3"
19
19
  },
@@ -5,10 +5,10 @@ import { DayPicker } from "react-day-picker";
5
5
  import { cn } from "../../lib/utils";
6
6
  import { buttonVariants } from "../button/button";
7
7
  function IconLeft() {
8
- return /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4" });
8
+ return /* @__PURE__ */ jsx(ChevronLeft, { className: "size-4" });
9
9
  }
10
10
  function IconRight() {
11
- return /* @__PURE__ */ jsx(ChevronRight, { className: "h-4 w-4" });
11
+ return /* @__PURE__ */ jsx(ChevronRight, { className: "size-4" });
12
12
  }
13
13
  function ChevronComponent({
14
14
  orientation = "right"
@@ -28,17 +28,17 @@ function Calendar({
28
28
  classNames: {
29
29
  button_next: cn(
30
30
  buttonVariants({ variant: "outline" }),
31
- "h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100 absolute right-1"
31
+ "size-7 bg-transparent p-0 opacity-50 hover:opacity-100 absolute right-1"
32
32
  ),
33
33
  button_previous: cn(
34
34
  buttonVariants({ variant: "outline" }),
35
- "h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100 absolute left-1"
35
+ "size-7 bg-transparent p-0 opacity-50 hover:opacity-100 absolute left-1"
36
36
  ),
37
37
  caption_label: "text-sm font-medium",
38
- day: "h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20",
38
+ day: "size-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20",
39
39
  day_button: cn(
40
40
  buttonVariants({ variant: "ghost" }),
41
- "h-9 w-9 p-0 font-normal aria-selected:opacity-100"
41
+ "size-9 p-0 font-normal aria-selected:opacity-100"
42
42
  ),
43
43
  disabled: "text-muted-foreground opacity-50",
44
44
  hidden: "invisible",
@@ -45,7 +45,7 @@ function Callout({
45
45
  ),
46
46
  role: "alert",
47
47
  children: /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
48
- icon ? /* @__PURE__ */ jsx("span", { className: "h-5 w-5 flex-shrink-0 mt-0.5", children: icon }) : null,
48
+ icon ? /* @__PURE__ */ jsx("span", { className: "size-5 flex-shrink-0 mt-0.5", children: icon }) : null,
49
49
  /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
50
50
  displayTitle ? /* @__PURE__ */ jsx("p", { className: "font-semibold mb-1", children: displayTitle }) : null,
51
51
  /* @__PURE__ */ jsx("div", { className: "text-sm [&>p]:mb-0 [&>p:last-child]:mb-0", children })
@@ -149,7 +149,7 @@ function SessionPill({ sessionChange }) {
149
149
  isPositive ? "border-emerald-500/30 bg-emerald-500/10 text-emerald-600 dark:text-emerald-400" : "border-rose-500/30 bg-rose-500/10 text-rose-600 dark:text-rose-400"
150
150
  ),
151
151
  children: [
152
- /* @__PURE__ */ jsx(TrendIcon, { className: "h-4 w-4" }),
152
+ /* @__PURE__ */ jsx(TrendIcon, { className: "size-4" }),
153
153
  sessionChange >= 0 ? "+" : "",
154
154
  formatValue(sessionChange)
155
155
  ]
@@ -115,7 +115,7 @@ function DemoCanvasObjects() {
115
115
  /* @__PURE__ */ jsxs("div", { className: "absolute left-[14%] top-[22%] w-72 rounded-[2rem] border border-border/18 bg-background/18 p-5 shadow-[0_22px_80px_hsl(var(--foreground)/0.05)] backdrop-blur-xl", children: [
116
116
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
117
117
  /* @__PURE__ */ jsx("div", { className: "flex size-11 items-center justify-center rounded-2xl bg-primary/10 text-primary", children: /* @__PURE__ */ jsx(Layers3, { className: "size-5" }) }),
118
- /* @__PURE__ */ jsx("div", { className: "h-2 w-2 rounded-full bg-primary/50" })
118
+ /* @__PURE__ */ jsx("div", { className: "size-2 rounded-full bg-primary/50" })
119
119
  ] }),
120
120
  /* @__PURE__ */ jsxs("div", { className: "mt-5 space-y-3", children: [
121
121
  /* @__PURE__ */ jsx("div", { className: "h-3 w-24 rounded-full bg-foreground/10" }),
@@ -130,9 +130,9 @@ function DemoCanvasObjects() {
130
130
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
131
131
  /* @__PURE__ */ jsx("div", { className: "flex size-10 items-center justify-center rounded-2xl bg-background/60 text-foreground/70", children: /* @__PURE__ */ jsx(Activity, { className: "size-4" }) }),
132
132
  /* @__PURE__ */ jsxs("div", { className: "flex gap-1.5", children: [
133
- /* @__PURE__ */ jsx("div", { className: "h-2 w-2 rounded-full bg-foreground/10" }),
134
- /* @__PURE__ */ jsx("div", { className: "h-2 w-2 rounded-full bg-foreground/10" }),
135
- /* @__PURE__ */ jsx("div", { className: "h-2 w-2 rounded-full bg-primary/45" })
133
+ /* @__PURE__ */ jsx("div", { className: "size-2 rounded-full bg-foreground/10" }),
134
+ /* @__PURE__ */ jsx("div", { className: "size-2 rounded-full bg-foreground/10" }),
135
+ /* @__PURE__ */ jsx("div", { className: "size-2 rounded-full bg-primary/45" })
136
136
  ] })
137
137
  ] }),
138
138
  /* @__PURE__ */ jsxs("div", { className: "mt-4 space-y-3", children: [
@@ -188,7 +188,7 @@ const CarouselPrevious = forwardRef(({ className, size = "icon", variant = "outl
188
188
  Button,
189
189
  {
190
190
  className: cn(
191
- "absolute h-8 w-8 rounded-full",
191
+ "absolute size-8 rounded-full",
192
192
  orientation === "horizontal" ? "-left-12 top-1/2 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
193
193
  className
194
194
  ),
@@ -199,7 +199,7 @@ const CarouselPrevious = forwardRef(({ className, size = "icon", variant = "outl
199
199
  variant,
200
200
  ...props,
201
201
  children: [
202
- /* @__PURE__ */ jsx(ArrowLeft, { className: "h-4 w-4" }),
202
+ /* @__PURE__ */ jsx(ArrowLeft, { className: "size-4" }),
203
203
  /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Previous slide" })
204
204
  ]
205
205
  }
@@ -212,7 +212,7 @@ const CarouselNext = forwardRef(({ className, size = "icon", variant = "outline"
212
212
  Button,
213
213
  {
214
214
  className: cn(
215
- "absolute h-8 w-8 rounded-full",
215
+ "absolute size-8 rounded-full",
216
216
  orientation === "horizontal" ? "-right-12 top-1/2 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
217
217
  className
218
218
  ),
@@ -223,7 +223,7 @@ const CarouselNext = forwardRef(({ className, size = "icon", variant = "outline"
223
223
  variant,
224
224
  ...props,
225
225
  children: [
226
- /* @__PURE__ */ jsx(ArrowRight, { className: "h-4 w-4" }),
226
+ /* @__PURE__ */ jsx(ArrowRight, { className: "size-4" }),
227
227
  /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Next slide" })
228
228
  ]
229
229
  }