@vllnt/ui 0.2.1 → 0.3.0-canary.0572c35

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 (331) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +59 -30
  3. package/dist/components/accordion/accordion.js +2 -2
  4. package/dist/components/activity-heatmap/activity-heatmap.js +17 -14
  5. package/dist/components/activity-log/activity-log.js +12 -11
  6. package/dist/components/agent-activity/agent-activity.js +317 -0
  7. package/dist/components/agent-activity/index.js +18 -0
  8. package/dist/components/ai-artifact/ai-artifact.js +439 -0
  9. package/dist/components/ai-artifact/index.js +24 -0
  10. package/dist/components/ai-chat-input/ai-chat-input.js +6 -4
  11. package/dist/components/ai-message-bubble/ai-message-bubble.js +3 -3
  12. package/dist/components/ai-sidebar/ai-sidebar.js +255 -0
  13. package/dist/components/ai-sidebar/index.js +22 -0
  14. package/dist/components/ai-source-citation/ai-source-citation.js +2 -2
  15. package/dist/components/ai-tool-call-display/ai-tool-call-display.js +5 -5
  16. package/dist/components/alert-pulse/alert-pulse.js +93 -0
  17. package/dist/components/alert-pulse/index.js +6 -0
  18. package/dist/components/anchor-port/anchor-port.js +51 -0
  19. package/dist/components/anchor-port/index.js +4 -0
  20. package/dist/components/animated-text/animated-text.js +8 -7
  21. package/dist/components/annotation/annotation.js +1 -1
  22. package/dist/components/auto-reload/auto-reload.js +401 -0
  23. package/dist/components/auto-reload/index.js +6 -0
  24. package/dist/components/avatar/avatar.js +1 -1
  25. package/dist/components/avatar-group/avatar-group.js +5 -5
  26. package/dist/components/banner/banner.js +155 -0
  27. package/dist/components/banner/index.js +10 -0
  28. package/dist/components/blog-card/blog-card.js +5 -3
  29. package/dist/components/border-beam/border-beam.js +2 -2
  30. package/dist/components/bottom-activity-strip/bottom-activity-strip.js +91 -0
  31. package/dist/components/bottom-activity-strip/index.js +6 -0
  32. package/dist/components/bottom-bar/bottom-bar.js +25 -0
  33. package/dist/components/bottom-bar/index.js +4 -0
  34. package/dist/components/breadcrumb/breadcrumb.js +33 -26
  35. package/dist/components/button/button.js +1 -1
  36. package/dist/components/calendar/calendar.js +6 -6
  37. package/dist/components/callout/callout.js +1 -1
  38. package/dist/components/candlestick-chart/candlestick-chart.js +13 -12
  39. package/dist/components/canvas-shell/canvas-foundation-demo.js +183 -0
  40. package/dist/components/canvas-shell/canvas-shell-route-config.js +0 -0
  41. package/dist/components/canvas-shell/canvas-shell.js +264 -0
  42. package/dist/components/canvas-shell/index.js +4 -0
  43. package/dist/components/canvas-view/canvas-view.js +504 -0
  44. package/dist/components/canvas-view/index.js +6 -0
  45. package/dist/components/carousel/carousel.js +18 -10
  46. package/dist/components/category-filter/category-filter.js +1 -1
  47. package/dist/components/chain-of-thought/chain-of-thought.js +77 -0
  48. package/dist/components/chain-of-thought/index.js +6 -0
  49. package/dist/components/chart/area-chart.js +1 -0
  50. package/dist/components/chart/line-chart.js +1 -0
  51. package/dist/components/chat-dock-section/chat-dock-section.js +56 -0
  52. package/dist/components/chat-dock-section/index.js +6 -0
  53. package/dist/components/checkbox/checkbox.js +2 -2
  54. package/dist/components/checklist/checklist.js +45 -10
  55. package/dist/components/checklist/index.js +10 -2
  56. package/dist/components/choropleth-map/choropleth-map.js +378 -0
  57. package/dist/components/choropleth-map/index.js +10 -0
  58. package/dist/components/chronological-timeline/chronological-timeline.js +343 -0
  59. package/dist/components/chronological-timeline/index.js +8 -0
  60. package/dist/components/civilization-card/civilization-card.js +275 -0
  61. package/dist/components/civilization-card/index.js +8 -0
  62. package/dist/components/code-block/code-block.js +43 -22
  63. package/dist/components/code-playground/code-playground.js +16 -10
  64. package/dist/components/combobox/combobox.js +49 -30
  65. package/dist/components/command/command.js +1 -1
  66. package/dist/components/comment-pin/comment-pin.js +104 -0
  67. package/dist/components/comment-pin/index.js +6 -0
  68. package/dist/components/comparison/comparison.js +11 -10
  69. package/dist/components/completion-dialog/completion-dialog.js +20 -12
  70. package/dist/components/connector-edge/connector-edge.js +66 -0
  71. package/dist/components/connector-edge/index.js +6 -0
  72. package/dist/components/content-intro/content-intro.js +29 -22
  73. package/dist/components/context-lens/context-lens.js +98 -0
  74. package/dist/components/context-lens/index.js +6 -0
  75. package/dist/components/context-menu/context-menu.js +4 -4
  76. package/dist/components/conversation-thread/conversation-thread.js +348 -0
  77. package/dist/components/conversation-thread/index.js +20 -0
  78. package/dist/components/cookie-consent/cookie-consent.js +1 -1
  79. package/dist/components/copy-button/copy-button.js +189 -0
  80. package/dist/components/copy-button/index.js +8 -0
  81. package/dist/components/countdown-timer/countdown-timer.js +10 -9
  82. package/dist/components/credit-badge/credit-badge.js +1 -7
  83. package/dist/components/curriculum/curriculum.js +349 -0
  84. package/dist/components/curriculum/index.js +10 -0
  85. package/dist/components/data-list/data-list.js +2 -1
  86. package/dist/components/data-table/data-table.js +10 -9
  87. package/dist/components/date-picker/date-picker.js +4 -9
  88. package/dist/components/dialog/dialog.js +1 -1
  89. package/dist/components/document-sibling-nav/document-sibling-nav.js +111 -0
  90. package/dist/components/document-sibling-nav/index.js +8 -0
  91. package/dist/components/dropdown-menu/dropdown-menu.js +3 -3
  92. package/dist/components/edge-label/edge-label.js +26 -0
  93. package/dist/components/edge-label/index.js +4 -0
  94. package/dist/components/empty-state/empty-state.js +93 -0
  95. package/dist/components/empty-state/index.js +8 -0
  96. package/dist/components/era-comparison/era-comparison.js +216 -0
  97. package/dist/components/era-comparison/index.js +16 -0
  98. package/dist/components/exercise/exercise.js +15 -7
  99. package/dist/components/faq/faq.js +8 -4
  100. package/dist/components/file-upload/file-upload.js +4 -9
  101. package/dist/components/filter-bar/filter-bar.js +9 -8
  102. package/dist/components/flashcard/flashcard.js +10 -4
  103. package/dist/components/floating-action-button/floating-action-button.js +1 -1
  104. package/dist/components/floating-toolbar/floating-toolbar.js +66 -0
  105. package/dist/components/floating-toolbar/index.js +6 -0
  106. package/dist/components/flow-diagram/flow-controls.js +9 -9
  107. package/dist/components/flow-diagram/flow-error-boundary.js +2 -2
  108. package/dist/components/flow-diagram/flow-fullscreen.js +2 -2
  109. package/dist/components/follow-mode/follow-mode.js +89 -0
  110. package/dist/components/follow-mode/index.js +6 -0
  111. package/dist/components/form/form.js +432 -0
  112. package/dist/components/form/index.js +20 -0
  113. package/dist/components/gantt-chart/gantt-chart.js +334 -0
  114. package/dist/components/gantt-chart/index.js +6 -0
  115. package/dist/components/geography-quiz-map/geography-quiz-map.js +344 -0
  116. package/dist/components/geography-quiz-map/index.js +12 -0
  117. package/dist/components/glass-panel/glass-panel.js +21 -0
  118. package/dist/components/glass-panel/index.js +4 -0
  119. package/dist/components/globe-3d/globe-3d.js +429 -0
  120. package/dist/components/globe-3d/index.js +10 -0
  121. package/dist/components/group-hull/group-hull.js +29 -0
  122. package/dist/components/group-hull/index.js +4 -0
  123. package/dist/components/handoff-beacon/handoff-beacon.js +78 -0
  124. package/dist/components/handoff-beacon/index.js +6 -0
  125. package/dist/components/heat-map-overlay/heat-map-overlay.js +215 -0
  126. package/dist/components/heat-map-overlay/index.js +6 -0
  127. package/dist/components/heat-overlay/heat-overlay.js +92 -0
  128. package/dist/components/heat-overlay/index.js +6 -0
  129. package/dist/components/historic-timeline/historic-timeline.js +342 -0
  130. package/dist/components/historic-timeline/index.js +6 -0
  131. package/dist/components/historical-figure-card/historical-figure-card.js +270 -0
  132. package/dist/components/historical-figure-card/index.js +6 -0
  133. package/dist/components/horizontal-scroll-row/horizontal-scroll-row.js +6 -5
  134. package/dist/components/index.js +578 -1
  135. package/dist/components/infinite-plane/index.js +6 -0
  136. package/dist/components/infinite-plane/infinite-plane.js +75 -0
  137. package/dist/components/inline-input/inline-input.js +1 -1
  138. package/dist/components/input-otp/input-otp.js +1 -1
  139. package/dist/components/interactive-timeline/index.js +16 -0
  140. package/dist/components/interactive-timeline/interactive-timeline.js +724 -0
  141. package/dist/components/jarvis-dock/index.js +6 -0
  142. package/dist/components/jarvis-dock/jarvis-dock.js +98 -0
  143. package/dist/components/kbd/index.js +5 -0
  144. package/dist/components/kbd/kbd.js +125 -0
  145. package/dist/components/key-concept/key-concept.js +6 -5
  146. package/dist/components/keyboard-shortcuts-help/keyboard-shortcuts-help.js +4 -3
  147. package/dist/components/knowledge-check/index.js +6 -0
  148. package/dist/components/knowledge-check/knowledge-check.js +473 -0
  149. package/dist/components/lang-provider/lang-provider.js +3 -3
  150. package/dist/components/learning-objectives/learning-objectives.js +14 -13
  151. package/dist/components/left-rail/index.js +4 -0
  152. package/dist/components/left-rail/left-rail.js +25 -0
  153. package/dist/components/live-cursor/index.js +6 -0
  154. package/dist/components/live-cursor/live-cursor.js +62 -0
  155. package/dist/components/live-feed/live-feed.js +18 -16
  156. package/dist/components/map-2d/index.js +20 -0
  157. package/dist/components/map-2d/map-2d.js +455 -0
  158. package/dist/components/map-timeline/index.js +16 -0
  159. package/dist/components/map-timeline/map-timeline.js +506 -0
  160. package/dist/components/market-treemap/market-treemap.js +3 -3
  161. package/dist/components/mdx-content/mdx-content.js +25 -11
  162. package/dist/components/menubar/menubar.js +4 -4
  163. package/dist/components/metric-cluster/index.js +6 -0
  164. package/dist/components/metric-cluster/metric-cluster.js +96 -0
  165. package/dist/components/metric-gauge/metric-gauge.js +3 -3
  166. package/dist/components/mini-map-panel/index.js +6 -0
  167. package/dist/components/mini-map-panel/mini-map-panel.js +74 -0
  168. package/dist/components/model-comparison/index.js +12 -0
  169. package/dist/components/model-comparison/model-comparison.js +230 -0
  170. package/dist/components/model-selector/model-selector.js +8 -8
  171. package/dist/components/multi-select/index.js +6 -0
  172. package/dist/components/multi-select/multi-select.js +258 -0
  173. package/dist/components/multi-select-lasso/index.js +6 -0
  174. package/dist/components/multi-select-lasso/multi-select-lasso.js +76 -0
  175. package/dist/components/navbar-saas/navbar-saas.js +11 -10
  176. package/dist/components/navigation-menu/navigation-menu.js +2 -2
  177. package/dist/components/newsletter-signup/index.js +8 -0
  178. package/dist/components/newsletter-signup/newsletter-signup.js +269 -0
  179. package/dist/components/number-input/number-input.js +2 -2
  180. package/dist/components/number-ticker/number-ticker.js +11 -4
  181. package/dist/components/object-card/index.js +6 -0
  182. package/dist/components/object-card/object-card.js +126 -0
  183. package/dist/components/object-handle/index.js +4 -0
  184. package/dist/components/object-handle/object-handle.js +38 -0
  185. package/dist/components/object-inspector/index.js +6 -0
  186. package/dist/components/object-inspector/object-inspector.js +136 -0
  187. package/dist/components/order-book/order-book.js +2 -2
  188. package/dist/components/overview-board/index.js +8 -0
  189. package/dist/components/overview-board/overview-board.js +127 -0
  190. package/dist/components/parallel-timeline/index.js +6 -0
  191. package/dist/components/parallel-timeline/parallel-timeline.js +251 -0
  192. package/dist/components/password-input/password-input.js +1 -1
  193. package/dist/components/plan-badge/plan-badge.js +1 -7
  194. package/dist/components/playback-ghost/index.js +6 -0
  195. package/dist/components/playback-ghost/playback-ghost.js +83 -0
  196. package/dist/components/policy-delivery-panel/index.js +6 -0
  197. package/dist/components/policy-delivery-panel/policy-delivery-panel.js +99 -0
  198. package/dist/components/presence-stack/index.js +6 -0
  199. package/dist/components/presence-stack/presence-stack.js +108 -0
  200. package/dist/components/presence-sync-indicator/index.js +6 -0
  201. package/dist/components/presence-sync-indicator/presence-sync-indicator.js +73 -0
  202. package/dist/components/pricing-table/index.js +8 -0
  203. package/dist/components/pricing-table/pricing-table.js +284 -0
  204. package/dist/components/primary-source-viewer/index.js +26 -0
  205. package/dist/components/primary-source-viewer/primary-source-viewer.js +439 -0
  206. package/dist/components/pro-tip/pro-tip.js +6 -6
  207. package/dist/components/profile-section/profile-section.js +3 -2
  208. package/dist/components/progress-card/progress-card.js +6 -5
  209. package/dist/components/progress-tracker/index.js +20 -0
  210. package/dist/components/progress-tracker/progress-tracker.js +537 -0
  211. package/dist/components/prompt-input/index.js +4 -0
  212. package/dist/components/prompt-input/prompt-input.js +186 -0
  213. package/dist/components/prompt-templates/index.js +6 -0
  214. package/dist/components/prompt-templates/prompt-templates.js +395 -0
  215. package/dist/components/property-section/index.js +6 -0
  216. package/dist/components/property-section/property-section.js +101 -0
  217. package/dist/components/quiz/quiz.js +7 -6
  218. package/dist/components/radio-group/radio-group.js +2 -2
  219. package/dist/components/rating/rating.js +3 -3
  220. package/dist/components/reasoning/index.js +4 -0
  221. package/dist/components/reasoning/reasoning.js +118 -0
  222. package/dist/components/relationship-inspector/index.js +6 -0
  223. package/dist/components/relationship-inspector/relationship-inspector.js +102 -0
  224. package/dist/components/resizable/resizable.js +1 -1
  225. package/dist/components/right-dock/index.js +4 -0
  226. package/dist/components/right-dock/right-dock.js +28 -0
  227. package/dist/components/route-map/index.js +6 -0
  228. package/dist/components/route-map/route-map.js +339 -0
  229. package/dist/components/routing-assignment-panel/index.js +6 -0
  230. package/dist/components/routing-assignment-panel/routing-assignment-panel.js +122 -0
  231. package/dist/components/run-timeline/index.js +6 -0
  232. package/dist/components/run-timeline/run-timeline.js +221 -0
  233. package/dist/components/runtime-overview-panel/index.js +6 -0
  234. package/dist/components/runtime-overview-panel/runtime-overview-panel.js +89 -0
  235. package/dist/components/scope-selector/scope-selector.js +13 -13
  236. package/dist/components/search-bar/search-bar.js +24 -2
  237. package/dist/components/search-dialog/search-dialog.js +485 -52
  238. package/dist/components/segmented-control/index.js +12 -0
  239. package/dist/components/segmented-control/segmented-control.js +61 -0
  240. package/dist/components/select/select.js +5 -5
  241. package/dist/components/selection-halo/index.js +6 -0
  242. package/dist/components/selection-halo/selection-halo.js +72 -0
  243. package/dist/components/selection-presence/index.js +6 -0
  244. package/dist/components/selection-presence/selection-presence.js +50 -0
  245. package/dist/components/severity-badge/severity-badge.js +2 -2
  246. package/dist/components/share-dialog/share-dialog.js +2 -2
  247. package/dist/components/share-section/share-section.js +2 -1
  248. package/dist/components/sheet/sheet.js +1 -1
  249. package/dist/components/sidebar/sidebar.js +31 -26
  250. package/dist/components/sidebar-toggle/sidebar-toggle.js +5 -3
  251. package/dist/components/slider/slider.js +1 -1
  252. package/dist/components/slideshow/slideshow.js +356 -275
  253. package/dist/components/snap-guides/index.js +6 -0
  254. package/dist/components/snap-guides/snap-guides.js +45 -0
  255. package/dist/components/social-fab/social-fab.js +12 -11
  256. package/dist/components/sparkline-grid/sparkline-grid.js +4 -3
  257. package/dist/components/spinner/spinner.js +4 -4
  258. package/dist/components/spinner/unicode-spinner.js +5 -2
  259. package/dist/components/stat-card/stat-card.js +5 -5
  260. package/dist/components/state-badge-overlay/index.js +6 -0
  261. package/dist/components/state-badge-overlay/state-badge-overlay.js +90 -0
  262. package/dist/components/static-code/index.js +4 -0
  263. package/dist/components/static-code/static-code-copy.js +24 -0
  264. package/dist/components/static-code/static-code.js +41 -0
  265. package/dist/components/status-board/status-board.js +15 -8
  266. package/dist/components/status-indicator/status-indicator.js +3 -3
  267. package/dist/components/step-by-step/step-by-step.js +10 -8
  268. package/dist/components/step-navigation/step-navigation.js +2 -2
  269. package/dist/components/stepper/stepper.js +3 -3
  270. package/dist/components/sticky-metric/index.js +6 -0
  271. package/dist/components/sticky-metric/sticky-metric.js +83 -0
  272. package/dist/components/story-map/index.js +8 -0
  273. package/dist/components/story-map/story-map.js +414 -0
  274. package/dist/components/subscription-card/subscription-card.js +1 -1
  275. package/dist/components/switch/switch.js +1 -1
  276. package/dist/components/table-of-contents/table-of-contents.js +5 -2
  277. package/dist/components/table-of-contents-panel/table-of-contents-panel.js +8 -6
  278. package/dist/components/tabs/tabs.js +26 -8
  279. package/dist/components/tags-input/index.js +4 -0
  280. package/dist/components/tags-input/tags-input.js +186 -0
  281. package/dist/components/terminal/terminal.js +61 -37
  282. package/dist/components/theme-preset-provider/index.js +4 -0
  283. package/dist/components/theme-preset-provider/theme-preset-provider.js +55 -0
  284. package/dist/components/theme-switcher/index.js +4 -0
  285. package/dist/components/theme-switcher/theme-switcher.js +43 -0
  286. package/dist/components/theme-toggle/theme-toggle.js +2 -2
  287. package/dist/components/thinking-block/thinking-block.js +3 -3
  288. package/dist/components/thread-bubble/index.js +6 -0
  289. package/dist/components/thread-bubble/thread-bubble.js +85 -0
  290. package/dist/components/threshold-ring/index.js +6 -0
  291. package/dist/components/threshold-ring/threshold-ring.js +160 -0
  292. package/dist/components/ticker-tape/ticker-tape.js +4 -4
  293. package/dist/components/timeline/index.js +12 -0
  294. package/dist/components/timeline/timeline.js +239 -0
  295. package/dist/components/timeline-scrubber/index.js +6 -0
  296. package/dist/components/timeline-scrubber/timeline-scrubber.js +179 -0
  297. package/dist/components/tldr-section/tldr-section.js +11 -9
  298. package/dist/components/top-bar/index.js +4 -0
  299. package/dist/components/top-bar/top-bar.js +31 -0
  300. package/dist/components/tour/tour.js +10 -4
  301. package/dist/components/transaction-list/index.js +14 -0
  302. package/dist/components/transaction-list/transaction-list.js +253 -0
  303. package/dist/components/tree-view/index.js +6 -0
  304. package/dist/components/tree-view/tree-view.js +298 -0
  305. package/dist/components/tutorial-card/tutorial-card.js +2 -2
  306. package/dist/components/tutorial-complete/tutorial-complete.js +18 -16
  307. package/dist/components/tutorial-filters/tutorial-filters.js +2 -2
  308. package/dist/components/tutorial-intro-content/tutorial-intro-content.js +5 -5
  309. package/dist/components/tutorial-mdx/tutorial-mdx.js +20 -20
  310. package/dist/components/usage-breakdown/usage-breakdown.js +12 -7
  311. package/dist/components/video-embed/video-embed.js +2 -2
  312. package/dist/components/viewport-bookmarks/index.js +6 -0
  313. package/dist/components/viewport-bookmarks/viewport-bookmarks.js +118 -0
  314. package/dist/components/wallet-card/wallet-card.js +1 -1
  315. package/dist/components/watchlist/watchlist.js +7 -6
  316. package/dist/components/workspace-switcher/index.js +6 -0
  317. package/dist/components/workspace-switcher/workspace-switcher.js +61 -0
  318. package/dist/components/world-breadcrumbs/index.js +6 -0
  319. package/dist/components/world-breadcrumbs/world-breadcrumbs.js +114 -0
  320. package/dist/components/world-clock-bar/world-clock-bar.js +35 -14
  321. package/dist/components/zoom-hud/index.js +4 -0
  322. package/dist/components/zoom-hud/zoom-hud.js +61 -0
  323. package/dist/index.d.ts +8176 -202
  324. package/dist/index.js +27 -1
  325. package/dist/lib/theme-presets.js +32 -0
  326. package/dist/lib/use-theme-preset.js +95 -0
  327. package/dist/tailwind-preset.js +19 -19
  328. package/package.json +15 -10
  329. package/styles.css +38 -38
  330. package/themes/default.css +39 -39
  331. package/themes/presets.css +547 -0
@@ -0,0 +1,45 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { forwardRef } from "react";
4
+ import { cn } from "../../lib/utils";
5
+ const DEFAULT_LABELS = {
6
+ region: "Snap guides"
7
+ };
8
+ const SnapGuides = forwardRef(
9
+ (props, ref) => {
10
+ const { className, guides, labels, ...rest } = props;
11
+ const resolvedLabels = { ...DEFAULT_LABELS, ...labels };
12
+ return /* @__PURE__ */ jsx(
13
+ "div",
14
+ {
15
+ "aria-label": resolvedLabels.region,
16
+ className: cn("pointer-events-none absolute inset-0 z-30", className),
17
+ "data-snap-guide-count": guides.length,
18
+ ref,
19
+ ...rest,
20
+ children: guides.map((guide) => {
21
+ const isVertical = guide.orientation === "vertical";
22
+ const offset = isVertical ? guide.x : guide.y;
23
+ return /* @__PURE__ */ jsx(
24
+ "span",
25
+ {
26
+ "aria-hidden": "true",
27
+ className: cn(
28
+ "absolute border-primary/70",
29
+ isVertical ? "inset-y-0 w-px border-l border-dashed" : "inset-x-0 h-px border-t border-dashed"
30
+ ),
31
+ "data-snap-guide-id": guide.id,
32
+ "data-snap-orientation": guide.orientation,
33
+ style: isVertical ? { left: `${offset.toString()}px` } : { top: `${offset.toString()}px` }
34
+ },
35
+ guide.id
36
+ );
37
+ })
38
+ }
39
+ );
40
+ }
41
+ );
42
+ SnapGuides.displayName = "SnapGuides";
43
+ export {
44
+ SnapGuides
45
+ };
@@ -7,15 +7,15 @@ function ShareMenu({
7
7
  onPlatformSelect,
8
8
  platforms
9
9
  }) {
10
- return /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-0.5 rounded-md border border-gray-300 bg-background p-1.5 shadow-md dark:border-gray-600", children: platforms.map((p) => {
11
- const handleClick = () => {
10
+ return /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-0.5 rounded-md border border-zinc-300 bg-background p-1.5 shadow-md dark:border-zinc-600", children: platforms.map((p) => {
11
+ const handleSelectSharePlatform = () => {
12
12
  onPlatformSelect(p.key);
13
13
  };
14
14
  return /* @__PURE__ */ jsx(
15
15
  "button",
16
16
  {
17
17
  className: "rounded px-3 py-1.5 text-left text-sm text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
18
- onClick: handleClick,
18
+ onClick: handleSelectSharePlatform,
19
19
  type: "button",
20
20
  children: p.label
21
21
  },
@@ -24,12 +24,12 @@ function ShareMenu({
24
24
  }) });
25
25
  }
26
26
  function ActionButton({ action }) {
27
- const handleClick = action.onClick;
27
+ const handleRunAction = action.onClick;
28
28
  return /* @__PURE__ */ jsx(
29
29
  "button",
30
30
  {
31
31
  className: "rounded px-3 py-1.5 text-left text-sm transition-colors hover:bg-accent",
32
- onClick: handleClick,
32
+ onClick: handleRunAction,
33
33
  type: "button",
34
34
  children: action.label
35
35
  }
@@ -47,7 +47,7 @@ function ActionPanel({
47
47
  const handleShareClick = shareAction?.onClick;
48
48
  const handleShareMouseEnter = isMobile ? void 0 : onShareHover;
49
49
  const handleShareMouseLeave = isMobile ? void 0 : onShareLeave;
50
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5 rounded-md border border-gray-300 bg-background p-1.5 shadow-md dark:border-gray-600", children: [
50
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5 rounded-md border border-zinc-300 bg-background p-1.5 shadow-md dark:border-zinc-600", children: [
51
51
  shareAction ? /* @__PURE__ */ jsx(
52
52
  "button",
53
53
  {
@@ -69,7 +69,7 @@ function MainFabButton({
69
69
  mainText,
70
70
  onToggle
71
71
  }) {
72
- const handleClick = onToggle;
72
+ const handleToggleSharePanel = onToggle;
73
73
  return /* @__PURE__ */ jsx(
74
74
  "button",
75
75
  {
@@ -77,11 +77,11 @@ function MainFabButton({
77
77
  "aria-label": isExpanded ? labels.close : labels.share,
78
78
  className: cn(
79
79
  "flex size-10 items-center justify-center rounded-md",
80
- "border border-gray-300 bg-background dark:border-gray-600",
80
+ "border border-zinc-300 bg-background dark:border-zinc-600",
81
81
  "transition-all duration-200 ease-out",
82
- "hover:-translate-y-0.5 hover:border-gray-400 hover:shadow-md dark:hover:border-gray-500"
82
+ "hover:-translate-y-0.5 hover:border-zinc-400 hover:shadow-md dark:hover:border-zinc-500"
83
83
  ),
84
- onClick: handleClick,
84
+ onClick: handleToggleSharePanel,
85
85
  type: "button",
86
86
  children: /* @__PURE__ */ jsx("span", { className: "text-sm font-mono", children: isMobile && isExpanded ? "\u2715" : mainText })
87
87
  }
@@ -140,6 +140,7 @@ function ExpandedPanel({
140
140
  }
141
141
  );
142
142
  }
143
+ const EMPTY_SHARE_PLATFORMS = [];
143
144
  function SocialFAB({
144
145
  actions,
145
146
  bottomOffset = 24,
@@ -150,7 +151,7 @@ function SocialFAB({
150
151
  onClose,
151
152
  onOpen,
152
153
  rightOffset = 24,
153
- sharePlatforms = []
154
+ sharePlatforms = EMPTY_SHARE_PLATFORMS
154
155
  }) {
155
156
  const options = { onAction, onClose, onOpen };
156
157
  const fab = useSocialFab(options);
@@ -30,7 +30,7 @@ const SparklineGrid = React.forwardRef(({ className, columns = 2, items, ...prop
30
30
  children: items.map((item) => {
31
31
  const isPositive = item.change >= 0;
32
32
  const TrendIcon = isPositive ? ArrowUpRight : ArrowDownRight;
33
- const stroke = isPositive ? "hsl(142 71% 45%)" : "hsl(348 83% 47%)";
33
+ const strokeClass = isPositive ? "text-emerald-600 dark:text-emerald-400" : "text-rose-600 dark:text-rose-400";
34
34
  return /* @__PURE__ */ jsxs(
35
35
  "section",
36
36
  {
@@ -49,7 +49,7 @@ const SparklineGrid = React.forwardRef(({ className, columns = 2, items, ...prop
49
49
  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"
50
50
  ),
51
51
  children: [
52
- /* @__PURE__ */ jsx(TrendIcon, { className: "h-3.5 w-3.5" }),
52
+ /* @__PURE__ */ jsx(TrendIcon, { className: "size-3.5" }),
53
53
  item.change > 0 ? "+" : "",
54
54
  item.change.toFixed(2),
55
55
  "%"
@@ -67,9 +67,10 @@ const SparklineGrid = React.forwardRef(({ className, columns = 2, items, ...prop
67
67
  children: /* @__PURE__ */ jsx(
68
68
  "path",
69
69
  {
70
+ className: strokeClass,
70
71
  d: buildSparklinePath(item.data, 120, 48),
71
72
  fill: "none",
72
- stroke,
73
+ stroke: "currentColor",
73
74
  strokeLinecap: "round",
74
75
  strokeLinejoin: "round",
75
76
  strokeWidth: "2.5",
@@ -7,14 +7,14 @@ function Spinner({ className, size = "md", ...props }) {
7
7
  className: cn(
8
8
  "animate-spin rounded-full border-2 border-current border-t-transparent",
9
9
  {
10
- "h-4 w-4": size === "sm",
11
- "h-6 w-6": size === "md",
12
- "h-8 w-8": size === "lg"
10
+ "size-4": size === "sm",
11
+ "size-6": size === "md",
12
+ "size-8": size === "lg"
13
13
  },
14
14
  className
15
15
  ),
16
16
  ...props,
17
- children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Loading..." })
17
+ children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Loading\u2026" })
18
18
  }
19
19
  );
20
20
  }
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { jsx, jsxs } from "react/jsx-runtime";
2
3
  import * as React from "react";
3
4
  import { cn } from "../../lib/utils";
@@ -657,9 +658,11 @@ const UnicodeSpinner = React.forwardRef(
657
658
  const preset = UNICODE_SPINNER_PRESETS[animation];
658
659
  const resolvedInterval = interval ?? preset.interval;
659
660
  const [frameIndex, setFrameIndex] = React.useState(0);
660
- React.useEffect(() => {
661
+ const [previousAnimation, setPreviousAnimation] = React.useState(animation);
662
+ if (previousAnimation !== animation) {
663
+ setPreviousAnimation(animation);
661
664
  setFrameIndex(0);
662
- }, [animation]);
665
+ }
663
666
  React.useEffect(() => {
664
667
  if (paused) {
665
668
  return;
@@ -3,7 +3,7 @@ import * as React from "react";
3
3
  import { cva } from "class-variance-authority";
4
4
  import { ArrowDownRight, ArrowRight, ArrowUpRight } from "lucide-react";
5
5
  import { cn } from "../../lib/utils";
6
- import { Card, CardContent, CardDescription, CardHeader } from "../card";
6
+ import { Card, CardContent, CardDescription, CardHeader } from "../card/card";
7
7
  const statCardVariants = cva("overflow-hidden border shadow-sm", {
8
8
  defaultVariants: {
9
9
  tone: "neutral"
@@ -47,12 +47,12 @@ const changeVariants = cva(
47
47
  );
48
48
  function TrendIcon({ trend }) {
49
49
  if (trend === "up") {
50
- return /* @__PURE__ */ jsx(ArrowUpRight, { className: "h-3.5 w-3.5" });
50
+ return /* @__PURE__ */ jsx(ArrowUpRight, { className: "size-3.5" });
51
51
  }
52
52
  if (trend === "down") {
53
- return /* @__PURE__ */ jsx(ArrowDownRight, { className: "h-3.5 w-3.5" });
53
+ return /* @__PURE__ */ jsx(ArrowDownRight, { className: "size-3.5" });
54
54
  }
55
- return /* @__PURE__ */ jsx(ArrowRight, { className: "h-3.5 w-3.5" });
55
+ return /* @__PURE__ */ jsx(ArrowRight, { className: "size-3.5" });
56
56
  }
57
57
  const StatCard = React.forwardRef(
58
58
  ({
@@ -74,7 +74,7 @@ const StatCard = React.forwardRef(
74
74
  ...props,
75
75
  children: [
76
76
  /* @__PURE__ */ jsx("div", { className: accentVariants({ tone }) }),
77
- /* @__PURE__ */ jsxs(CardHeader, { className: "flex flex-row items-start justify-between gap-4 space-y-0 pb-3", children: [
77
+ /* @__PURE__ */ jsxs(CardHeader, { className: "flex flex-row items-start justify-between gap-4 gap-y-0 pb-3", children: [
78
78
  /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
79
79
  /* @__PURE__ */ jsx(CardDescription, { className: "text-xs font-medium uppercase tracking-[0.14em]", children: label }),
80
80
  /* @__PURE__ */ jsx("div", { className: "text-3xl font-semibold tracking-tight", children: value })
@@ -0,0 +1,6 @@
1
+ import {
2
+ StateBadgeOverlay
3
+ } from "./state-badge-overlay";
4
+ export {
5
+ StateBadgeOverlay
6
+ };
@@ -0,0 +1,90 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import {
4
+ forwardRef
5
+ } from "react";
6
+ import { cn } from "../../lib/utils";
7
+ const STATE_LABEL = {
8
+ complete: "Complete",
9
+ failed: "Failed",
10
+ idle: "Idle",
11
+ queued: "Queued",
12
+ running: "Running",
13
+ stopped: "Stopped"
14
+ };
15
+ const STATE_TONE = {
16
+ complete: "border-emerald-500/40 bg-emerald-500/15 text-emerald-700 dark:text-emerald-300",
17
+ failed: "border-red-500/40 bg-red-500/15 text-red-700 dark:text-red-300",
18
+ idle: "border-border bg-muted/40 text-muted-foreground",
19
+ queued: "border-amber-500/40 bg-amber-500/15 text-amber-700 dark:text-amber-300",
20
+ running: "border-blue-500/40 bg-blue-500/15 text-blue-700 dark:text-blue-300",
21
+ stopped: "border-border bg-background text-foreground"
22
+ };
23
+ const STATE_DOT = {
24
+ complete: "bg-emerald-500",
25
+ failed: "bg-red-500",
26
+ idle: "bg-muted-foreground",
27
+ queued: "bg-amber-500",
28
+ running: "bg-blue-500 animate-pulse",
29
+ stopped: "bg-muted-foreground"
30
+ };
31
+ const ANCHOR_TRANSFORM = {
32
+ "bottom-left": "translate(-100%, 100%)",
33
+ "bottom-right": "translate(0%, 100%)",
34
+ "top-left": "translate(-100%, -100%)",
35
+ "top-right": "translate(0%, -100%)"
36
+ };
37
+ const DEFAULT_LABELS = {
38
+ region: "State"
39
+ };
40
+ const StateBadgeOverlay = forwardRef((props, ref) => {
41
+ const {
42
+ anchor = "top-right",
43
+ className,
44
+ label,
45
+ labels,
46
+ state,
47
+ x,
48
+ y,
49
+ ...rest
50
+ } = props;
51
+ const resolvedLabels = { ...DEFAULT_LABELS, ...labels };
52
+ const text = label ?? STATE_LABEL[state];
53
+ return /* @__PURE__ */ jsxs(
54
+ "div",
55
+ {
56
+ "aria-label": `${resolvedLabels.region}: ${STATE_LABEL[state]}`,
57
+ className: cn(
58
+ "pointer-events-none absolute z-20 inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide shadow-sm backdrop-blur",
59
+ STATE_TONE[state],
60
+ className
61
+ ),
62
+ "data-state-anchor": anchor,
63
+ "data-state-badge-overlay": true,
64
+ "data-state-name": state,
65
+ ref,
66
+ role: "status",
67
+ style: {
68
+ left: x,
69
+ top: y,
70
+ transform: ANCHOR_TRANSFORM[anchor]
71
+ },
72
+ ...rest,
73
+ children: [
74
+ /* @__PURE__ */ jsx(
75
+ "span",
76
+ {
77
+ "aria-hidden": "true",
78
+ className: cn("size-1.5 rounded-full", STATE_DOT[state]),
79
+ "data-state-badge-dot": true
80
+ }
81
+ ),
82
+ text
83
+ ]
84
+ }
85
+ );
86
+ });
87
+ StateBadgeOverlay.displayName = "StateBadgeOverlay";
88
+ export {
89
+ StateBadgeOverlay
90
+ };
@@ -0,0 +1,4 @@
1
+ import { StaticCode } from "./static-code";
2
+ export {
3
+ StaticCode
4
+ };
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { Check, Copy } from "lucide-react";
4
+ import { Button } from "../button/button";
5
+ import { useCopyToClipboard } from "../copy-button/copy-button";
6
+ function StaticCodeCopy({ value }) {
7
+ const { copied, copy } = useCopyToClipboard();
8
+ return /* @__PURE__ */ jsx(
9
+ Button,
10
+ {
11
+ "aria-label": copied ? "Copied" : "Copy code",
12
+ className: "absolute right-2 top-2 size-8",
13
+ onClick: () => {
14
+ void copy(value);
15
+ },
16
+ size: "icon",
17
+ variant: "ghost",
18
+ children: copied ? /* @__PURE__ */ jsx(Check, { className: "size-3" }) : /* @__PURE__ */ jsx(Copy, { className: "size-3" })
19
+ }
20
+ );
21
+ }
22
+ export {
23
+ StaticCodeCopy
24
+ };
@@ -0,0 +1,41 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
3
+ import { oneDark } from "react-syntax-highlighter/dist/esm/styles/prism";
4
+ import { cn } from "../../lib/utils";
5
+ import { StaticCodeCopy } from "./static-code-copy";
6
+ function StaticCode({
7
+ className,
8
+ code,
9
+ language = "tsx"
10
+ }) {
11
+ return /* @__PURE__ */ jsxs(
12
+ "div",
13
+ {
14
+ className: cn(
15
+ "group relative overflow-x-auto rounded-lg border border-border bg-[#282c34]",
16
+ className
17
+ ),
18
+ children: [
19
+ /* @__PURE__ */ jsx(
20
+ SyntaxHighlighter,
21
+ {
22
+ customStyle: {
23
+ background: "transparent",
24
+ fontSize: "0.875rem",
25
+ margin: 0,
26
+ padding: "1rem"
27
+ },
28
+ language,
29
+ PreTag: "div",
30
+ style: oneDark,
31
+ children: code
32
+ }
33
+ ),
34
+ /* @__PURE__ */ jsx(StaticCodeCopy, { value: code })
35
+ ]
36
+ }
37
+ );
38
+ }
39
+ export {
40
+ StaticCode
41
+ };
@@ -1,14 +1,14 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
3
  import { cn } from "../../lib/utils";
4
- import { Badge } from "../badge";
4
+ import { Badge } from "../badge/badge";
5
5
  import {
6
6
  Card,
7
7
  CardContent,
8
8
  CardDescription,
9
9
  CardHeader,
10
10
  CardTitle
11
- } from "../card";
11
+ } from "../card/card";
12
12
  const STATUS_META = {
13
13
  critical: {
14
14
  badgeVariant: "destructive",
@@ -71,10 +71,16 @@ function getSummary(items) {
71
71
  warning: 0
72
72
  }
73
73
  );
74
- return STATUS_ORDER.map((status) => ({
75
- count: counts[status],
76
- status
77
- })).filter((entry) => entry.count > 0);
74
+ return STATUS_ORDER.reduce(
75
+ (summary, status) => {
76
+ const count = counts[status];
77
+ if (count > 0) {
78
+ summary.push({ count, status });
79
+ }
80
+ return summary;
81
+ },
82
+ []
83
+ );
78
84
  }
79
85
  function StatusBoardSummary({ items }) {
80
86
  return /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: getSummary(items).map(({ count, status }) => {
@@ -96,7 +102,7 @@ function StatusBoardCard({ item }) {
96
102
  "span",
97
103
  {
98
104
  "aria-hidden": "true",
99
- className: cn("h-2.5 w-2.5 rounded-full", meta.dotClassName)
105
+ className: cn("size-2.5 rounded-full", meta.dotClassName)
100
106
  }
101
107
  ),
102
108
  /* @__PURE__ */ jsx(CardTitle, { className: "text-base leading-none", children: item.label })
@@ -113,6 +119,7 @@ function StatusBoardCard({ item }) {
113
119
  }
114
120
  const StatusBoard = React.forwardRef(
115
121
  ({
122
+ as: Heading = "h2",
116
123
  className,
117
124
  columns = 3,
118
125
  description,
@@ -123,7 +130,7 @@ const StatusBoard = React.forwardRef(
123
130
  return /* @__PURE__ */ jsxs("div", { className: cn("space-y-4", className), ref, ...props, children: [
124
131
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between", children: [
125
132
  /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
126
- /* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold tracking-tight", children: title }),
133
+ /* @__PURE__ */ jsx(Heading, { className: "text-lg font-semibold tracking-tight", children: title }),
127
134
  description ? /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: description }) : null
128
135
  ] }),
129
136
  /* @__PURE__ */ jsx(StatusBoardSummary, { items })
@@ -115,9 +115,9 @@ const dotVariants = cva("rounded-full", {
115
115
  },
116
116
  variants: {
117
117
  size: {
118
- lg: "h-2.5 w-2.5",
119
- md: "h-2 w-2",
120
- sm: "h-1.5 w-1.5"
118
+ lg: "size-2.5",
119
+ md: "size-2",
120
+ sm: "size-1.5"
121
121
  },
122
122
  tone: {
123
123
  danger: "bg-red-500",
@@ -10,7 +10,7 @@ function Step({
10
10
  }) {
11
11
  return /* @__PURE__ */ jsxs("div", { className: cn("flex gap-4", className), children: [
12
12
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center", children: [
13
- /* @__PURE__ */ jsx("div", { className: "flex h-8 w-8 items-center justify-center rounded-full bg-primary text-primary-foreground text-sm font-bold", children: number }),
13
+ /* @__PURE__ */ jsx("div", { className: "flex size-8 items-center justify-center rounded-full bg-primary text-primary-foreground text-sm font-bold", children: number }),
14
14
  /* @__PURE__ */ jsx("div", { className: "w-px flex-1 bg-border mt-2" })
15
15
  ] }),
16
16
  /* @__PURE__ */ jsxs("div", { className: "flex-1 pb-8 last:pb-0", children: [
@@ -33,7 +33,7 @@ function InteractiveStep({
33
33
  "button",
34
34
  {
35
35
  className: cn(
36
- "flex h-8 w-8 items-center justify-center rounded-full text-sm font-bold transition-colors",
36
+ "flex size-8 items-center justify-center rounded-full text-sm font-bold transition-colors",
37
37
  isCompleted ? "bg-green-500 text-white" : "bg-primary text-primary-foreground"
38
38
  ),
39
39
  onClick: onToggle,
@@ -41,7 +41,7 @@ function InteractiveStep({
41
41
  children: isCompleted ? /* @__PURE__ */ jsx(
42
42
  "svg",
43
43
  {
44
- className: "h-4 w-4",
44
+ className: "size-4",
45
45
  fill: "none",
46
46
  stroke: "currentColor",
47
47
  viewBox: "0 0 24 24",
@@ -93,6 +93,7 @@ function InteractiveStep({
93
93
  ] });
94
94
  }
95
95
  function StepByStep({
96
+ as: Heading = "h3",
96
97
  children,
97
98
  className,
98
99
  interactive = false,
@@ -112,7 +113,7 @@ function StepByStep({
112
113
  /* @__PURE__ */ jsx(
113
114
  "svg",
114
115
  {
115
- className: "h-5 w-5 text-primary",
116
+ className: "size-5 text-primary",
116
117
  fill: "none",
117
118
  stroke: "currentColor",
118
119
  viewBox: "0 0 24 24",
@@ -127,10 +128,11 @@ function StepByStep({
127
128
  )
128
129
  }
129
130
  ),
130
- /* @__PURE__ */ jsx("h3", { className: "font-semibold text-lg", children: title })
131
+ /* @__PURE__ */ jsx(Heading, { className: "font-semibold text-lg", children: title })
131
132
  ] }) : null,
132
133
  /* @__PURE__ */ jsx("div", { className: "space-y-0", children: steps.map((step, index) => {
133
134
  const stepElement = step;
135
+ const stepKey = `${stepElement.props.title}-${index + 1}`;
134
136
  return /* @__PURE__ */ jsx(
135
137
  Step,
136
138
  {
@@ -138,7 +140,7 @@ function StepByStep({
138
140
  title: stepElement.props.title,
139
141
  children: stepElement.props.children
140
142
  },
141
- index
143
+ stepKey
142
144
  );
143
145
  }) })
144
146
  ] });
@@ -148,7 +150,7 @@ function StepByStep({
148
150
  /* @__PURE__ */ jsx(
149
151
  "svg",
150
152
  {
151
- className: "h-5 w-5 text-primary",
153
+ className: "size-5 text-primary",
152
154
  fill: "none",
153
155
  stroke: "currentColor",
154
156
  viewBox: "0 0 24 24",
@@ -183,7 +185,7 @@ function StepByStep({
183
185
  title: step.props.title,
184
186
  children: step.props.children
185
187
  },
186
- index
188
+ `${step.props.title}-${index + 1}`
187
189
  )) })
188
190
  ] });
189
191
  }
@@ -45,7 +45,7 @@ function StepNavigationImpl({
45
45
  "svg",
46
46
  {
47
47
  "aria-hidden": "true",
48
- className: "h-5 w-5",
48
+ className: "size-5",
49
49
  fill: "none",
50
50
  stroke: "currentColor",
51
51
  viewBox: "0 0 24 24",
@@ -90,7 +90,7 @@ function StepNavigationImpl({
90
90
  "svg",
91
91
  {
92
92
  "aria-hidden": "true",
93
- className: "h-5 w-5",
93
+ className: "size-5",
94
94
  fill: "none",
95
95
  stroke: "currentColor",
96
96
  viewBox: "0 0 24 24",
@@ -13,10 +13,10 @@ function StepIcon({
13
13
  stepNumber
14
14
  }) {
15
15
  if (state === "complete") {
16
- return /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" });
16
+ return /* @__PURE__ */ jsx(Check, { className: "size-4" });
17
17
  }
18
18
  if (!showNumbers) {
19
- return /* @__PURE__ */ jsx(Circle, { className: "h-3.5 w-3.5 fill-current stroke-none" });
19
+ return /* @__PURE__ */ jsx(Circle, { className: "size-3.5 fill-current stroke-none" });
20
20
  }
21
21
  return /* @__PURE__ */ jsx("span", { className: "text-xs font-semibold", children: stepNumber });
22
22
  }
@@ -52,7 +52,7 @@ function StepperItem({
52
52
  {
53
53
  "aria-current": stepState === "current" ? "step" : void 0,
54
54
  className: cn(
55
- "relative z-10 flex h-8 w-8 items-center justify-center rounded-full border text-sm transition-colors",
55
+ "relative z-10 flex size-8 items-center justify-center rounded-full border text-sm transition-colors",
56
56
  stepState === "complete" && "border-primary bg-primary text-primary-foreground",
57
57
  stepState === "current" && "border-primary bg-primary/10 text-primary shadow-sm",
58
58
  stepState === "upcoming" && "border-border bg-background text-muted-foreground"
@@ -0,0 +1,6 @@
1
+ import {
2
+ StickyMetric
3
+ } from "./sticky-metric";
4
+ export {
5
+ StickyMetric
6
+ };