@vllnt/ui 0.3.0-canary.f3cafe8 → 0.3.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 (336) hide show
  1. package/CHANGELOG.md +16 -5
  2. package/README.md +1 -1
  3. package/dist/components/accordion/accordion.js +2 -8
  4. package/dist/components/activity-heatmap/activity-heatmap.js +22 -29
  5. package/dist/components/activity-log/activity-log.js +52 -53
  6. package/dist/components/agent-activity/agent-activity.js +139 -125
  7. package/dist/components/ai-artifact/ai-artifact.js +115 -76
  8. package/dist/components/ai-chat-input/ai-chat-input.js +59 -61
  9. package/dist/components/ai-message-bubble/ai-message-bubble.js +63 -65
  10. package/dist/components/ai-sidebar/ai-sidebar.js +77 -55
  11. package/dist/components/ai-source-citation/ai-source-citation.js +38 -32
  12. package/dist/components/ai-streaming-text/ai-streaming-text.js +33 -35
  13. package/dist/components/ai-tool-call-display/ai-tool-call-display.js +58 -60
  14. package/dist/components/alert/alert.js +20 -7
  15. package/dist/components/alert-dialog/alert-dialog.js +36 -13
  16. package/dist/components/alert-pulse/alert-pulse.js +69 -69
  17. package/dist/components/anchor-port/anchor-port.js +26 -28
  18. package/dist/components/animated-beam/animated-beam.js +157 -0
  19. package/dist/components/animated-beam/index.js +4 -0
  20. package/dist/components/animated-grid-pattern/animated-grid-pattern.js +81 -0
  21. package/dist/components/animated-grid-pattern/index.js +6 -0
  22. package/dist/components/animated-list/animated-list.js +28 -0
  23. package/dist/components/animated-list/index.js +4 -0
  24. package/dist/components/animated-tabs/animated-tabs.js +98 -0
  25. package/dist/components/animated-tabs/index.js +6 -0
  26. package/dist/components/animated-testimonials/animated-testimonials.js +97 -0
  27. package/dist/components/animated-testimonials/index.js +6 -0
  28. package/dist/components/animated-text/animated-text.js +66 -67
  29. package/dist/components/animated-tooltip/animated-tooltip.js +58 -0
  30. package/dist/components/animated-tooltip/index.js +6 -0
  31. package/dist/components/auto-reload/auto-reload.js +109 -105
  32. package/dist/components/avatar/avatar.js +18 -7
  33. package/dist/components/avatar-group/avatar-group.js +35 -30
  34. package/dist/components/banner/banner.js +80 -77
  35. package/dist/components/bento-grid/bento-grid.js +46 -0
  36. package/dist/components/bento-grid/index.js +8 -0
  37. package/dist/components/blur-reveal/blur-reveal.js +83 -0
  38. package/dist/components/blur-reveal/index.js +4 -0
  39. package/dist/components/border-beam/border-beam.js +43 -45
  40. package/dist/components/bottom-activity-strip/bottom-activity-strip.js +5 -5
  41. package/dist/components/bottom-bar/bottom-bar.js +22 -18
  42. package/dist/components/button/button.js +18 -14
  43. package/dist/components/button-group/button-group.js +37 -0
  44. package/dist/components/button-group/index.js +8 -0
  45. package/dist/components/candlestick-chart/candlestick-chart.js +52 -54
  46. package/dist/components/canvas-shell/canvas-shell.js +11 -6
  47. package/dist/components/canvas-view/canvas-view.js +72 -74
  48. package/dist/components/card/card.js +35 -12
  49. package/dist/components/card-flip/card-flip.js +67 -0
  50. package/dist/components/card-flip/index.js +4 -0
  51. package/dist/components/carousel/carousel.js +78 -60
  52. package/dist/components/chain-of-thought/chain-of-thought.js +78 -0
  53. package/dist/components/chain-of-thought/index.js +6 -0
  54. package/dist/components/chart/area-chart.js +66 -67
  55. package/dist/components/chart/bar-chart.js +68 -70
  56. package/dist/components/chart/line-chart.js +69 -70
  57. package/dist/components/chat-dock-section/chat-dock-section.js +43 -45
  58. package/dist/components/checkbox/checkbox.js +6 -3
  59. package/dist/components/checkbox-group/checkbox-group.js +98 -0
  60. package/dist/components/checkbox-group/index.js +8 -0
  61. package/dist/components/choropleth-map/choropleth-map.js +90 -82
  62. package/dist/components/chronological-timeline/chronological-timeline.js +75 -72
  63. package/dist/components/civilization-card/civilization-card.js +59 -56
  64. package/dist/components/code-block/code-block.js +14 -17
  65. package/dist/components/code-playground/code-playground.js +8 -9
  66. package/dist/components/color-picker/color-picker.js +133 -0
  67. package/dist/components/color-picker/index.js +4 -0
  68. package/dist/components/combobox/combobox.js +57 -58
  69. package/dist/components/command/command.js +42 -15
  70. package/dist/components/comment-pin/comment-pin.js +58 -60
  71. package/dist/components/connector-edge/connector-edge.js +59 -54
  72. package/dist/components/content-intro/content-intro.js +4 -1
  73. package/dist/components/context-lens/context-lens.js +74 -73
  74. package/dist/components/context-menu/context-menu.js +55 -17
  75. package/dist/components/contribution-graph/contribution-graph.js +118 -0
  76. package/dist/components/contribution-graph/index.js +6 -0
  77. package/dist/components/conversation-thread/conversation-thread.js +89 -65
  78. package/dist/components/cookie-consent/cookie-consent.js +114 -115
  79. package/dist/components/copy-button/copy-button.js +100 -103
  80. package/dist/components/countdown-timer/countdown-timer.js +47 -75
  81. package/dist/components/credit-badge/credit-badge.js +26 -22
  82. package/dist/components/curriculum/curriculum.js +2 -2
  83. package/dist/components/cursor/cursor.js +52 -0
  84. package/dist/components/cursor/index.js +4 -0
  85. package/dist/components/data-list/data-list.js +54 -40
  86. package/dist/components/date-field/date-field.js +42 -0
  87. package/dist/components/date-field/index.js +4 -0
  88. package/dist/components/date-picker/date-picker.js +49 -50
  89. package/dist/components/date-range-picker/date-range-picker.js +73 -0
  90. package/dist/components/date-range-picker/index.js +6 -0
  91. package/dist/components/dialog/dialog.js +25 -9
  92. package/dist/components/dock/dock.js +109 -0
  93. package/dist/components/dock/index.js +5 -0
  94. package/dist/components/document-sibling-nav/document-sibling-nav.js +10 -5
  95. package/dist/components/dot-pattern/dot-pattern.js +36 -0
  96. package/dist/components/dot-pattern/index.js +4 -0
  97. package/dist/components/drawer/drawer.js +25 -9
  98. package/dist/components/dropdown-menu/dropdown-menu.js +56 -17
  99. package/dist/components/edge-label/edge-label.js +17 -15
  100. package/dist/components/empty-state/empty-state.js +27 -31
  101. package/dist/components/era-comparison/era-comparison.js +96 -83
  102. package/dist/components/expandable-cards/expandable-cards.js +61 -0
  103. package/dist/components/expandable-cards/index.js +6 -0
  104. package/dist/components/field/field.js +137 -0
  105. package/dist/components/field/index.js +16 -0
  106. package/dist/components/fieldset/fieldset.js +49 -0
  107. package/dist/components/fieldset/index.js +10 -0
  108. package/dist/components/file-upload/file-upload.js +4 -3
  109. package/dist/components/floating-navbar/floating-navbar.js +67 -0
  110. package/dist/components/floating-navbar/index.js +4 -0
  111. package/dist/components/floating-toolbar/floating-toolbar.js +49 -51
  112. package/dist/components/flow-diagram/flow-fullscreen.js +3 -13
  113. package/dist/components/flow-diagram/use-flow-diagram.js +7 -18
  114. package/dist/components/follow-mode/follow-mode.js +67 -69
  115. package/dist/components/form/form.js +131 -112
  116. package/dist/components/gantt-chart/gantt-chart.js +49 -51
  117. package/dist/components/gauge-chart/gauge-chart.js +132 -0
  118. package/dist/components/gauge-chart/index.js +4 -0
  119. package/dist/components/geography-quiz-map/geography-quiz-map.js +88 -78
  120. package/dist/components/glass-card/glass-card.js +25 -0
  121. package/dist/components/glass-card/index.js +4 -0
  122. package/dist/components/glass-panel/glass-panel.js +16 -14
  123. package/dist/components/glass-progress/glass-progress.js +39 -0
  124. package/dist/components/glass-progress/index.js +4 -0
  125. package/dist/components/globe-3d/globe-3d.js +70 -66
  126. package/dist/components/grid/grid.js +100 -0
  127. package/dist/components/grid/index.js +4 -0
  128. package/dist/components/group-hull/group-hull.js +27 -22
  129. package/dist/components/handoff-beacon/handoff-beacon.js +55 -57
  130. package/dist/components/heat-map-overlay/heat-map-overlay.js +55 -55
  131. package/dist/components/heat-overlay/heat-overlay.js +49 -48
  132. package/dist/components/historic-timeline/historic-timeline.js +57 -59
  133. package/dist/components/historical-figure-card/historical-figure-card.js +5 -3
  134. package/dist/components/hover-card/hover-card.js +8 -3
  135. package/dist/components/index.js +271 -0
  136. package/dist/components/infinite-plane/infinite-plane.js +34 -36
  137. package/dist/components/input/input.js +19 -17
  138. package/dist/components/input-group/index.js +14 -0
  139. package/dist/components/input-group/input-group.js +73 -0
  140. package/dist/components/input-otp/input-otp.js +25 -8
  141. package/dist/components/interactive-timeline/interactive-timeline.js +38 -15
  142. package/dist/components/item/index.js +18 -0
  143. package/dist/components/item/item.js +118 -0
  144. package/dist/components/jarvis-dock/jarvis-dock.js +40 -42
  145. package/dist/components/kbd/kbd.js +31 -42
  146. package/dist/components/keyboard-shortcuts-help/keyboard-shortcuts-help.js +7 -18
  147. package/dist/components/knowledge-check/knowledge-check.js +50 -58
  148. package/dist/components/label/label.js +6 -3
  149. package/dist/components/left-rail/left-rail.js +22 -18
  150. package/dist/components/link/index.js +5 -0
  151. package/dist/components/link/link.js +53 -0
  152. package/dist/components/liquid-glass/index.js +4 -0
  153. package/dist/components/liquid-glass/liquid-glass.js +39 -0
  154. package/dist/components/list-box/index.js +8 -0
  155. package/dist/components/list-box/list-box.js +130 -0
  156. package/dist/components/live-cursor/live-cursor.js +49 -51
  157. package/dist/components/live-feed/live-feed.js +51 -76
  158. package/dist/components/magnetic/index.js +4 -0
  159. package/dist/components/magnetic/magnetic.js +63 -0
  160. package/dist/components/magnetic-button/index.js +4 -0
  161. package/dist/components/magnetic-button/magnetic-button.js +64 -0
  162. package/dist/components/map-2d/map-2d.js +120 -101
  163. package/dist/components/map-timeline/map-timeline.js +188 -170
  164. package/dist/components/market-treemap/market-treemap.js +10 -6
  165. package/dist/components/marquee/marquee.js +64 -65
  166. package/dist/components/mdx-content/mdx-content.js +4 -1
  167. package/dist/components/menubar/menubar.js +82 -35
  168. package/dist/components/meteors/index.js +4 -0
  169. package/dist/components/meteors/meteors.js +62 -0
  170. package/dist/components/meter/index.js +5 -0
  171. package/dist/components/meter/meter.js +76 -0
  172. package/dist/components/metric-cluster/metric-cluster.js +47 -49
  173. package/dist/components/metric-gauge/metric-gauge.js +42 -44
  174. package/dist/components/mini-map-panel/mini-map-panel.js +71 -66
  175. package/dist/components/model-comparison/model-comparison.js +76 -67
  176. package/dist/components/multi-select/multi-select.js +100 -102
  177. package/dist/components/multi-select-lasso/multi-select-lasso.js +5 -5
  178. package/dist/components/native-select/index.js +4 -0
  179. package/dist/components/native-select/native-select.js +28 -0
  180. package/dist/components/navbar-saas/navbar-saas.js +54 -46
  181. package/dist/components/navigation-menu/navigation-menu.js +38 -13
  182. package/dist/components/newsletter-signup/newsletter-signup.js +5 -3
  183. package/dist/components/number-input/number-input.js +4 -3
  184. package/dist/components/number-ticker/number-ticker.js +50 -51
  185. package/dist/components/object-card/object-card.js +40 -42
  186. package/dist/components/object-handle/object-handle.js +33 -30
  187. package/dist/components/object-inspector/object-inspector.js +40 -42
  188. package/dist/components/order-book/order-book.js +59 -54
  189. package/dist/components/overview-board/overview-board.js +91 -87
  190. package/dist/components/panel/index.js +16 -0
  191. package/dist/components/panel/panel.js +95 -0
  192. package/dist/components/parallel-timeline/parallel-timeline.js +54 -56
  193. package/dist/components/particles/index.js +4 -0
  194. package/dist/components/particles/particles.js +52 -0
  195. package/dist/components/password-input/password-input.js +35 -36
  196. package/dist/components/phone-input/index.js +6 -0
  197. package/dist/components/phone-input/phone-input.js +63 -0
  198. package/dist/components/pie-chart/index.js +4 -0
  199. package/dist/components/pie-chart/pie-chart.js +130 -0
  200. package/dist/components/plan-badge/plan-badge.js +28 -24
  201. package/dist/components/playback-ghost/playback-ghost.js +46 -48
  202. package/dist/components/policy-delivery-panel/policy-delivery-panel.js +5 -5
  203. package/dist/components/popover/popover.js +8 -3
  204. package/dist/components/presence-stack/presence-stack.js +39 -41
  205. package/dist/components/presence-sync-indicator/presence-sync-indicator.js +5 -5
  206. package/dist/components/pricing-table/pricing-table.js +71 -70
  207. package/dist/components/primary-source-viewer/primary-source-viewer.js +90 -41
  208. package/dist/components/progress-tracker/progress-tracker.js +1 -1
  209. package/dist/components/progressive-blur/index.js +6 -0
  210. package/dist/components/progressive-blur/progressive-blur.js +48 -0
  211. package/dist/components/prompt-input/index.js +4 -0
  212. package/dist/components/prompt-input/prompt-input.js +185 -0
  213. package/dist/components/prompt-templates/prompt-templates.js +36 -36
  214. package/dist/components/property-section/property-section.js +28 -30
  215. package/dist/components/qr-code/index.js +4 -0
  216. package/dist/components/qr-code/qr-code.js +49 -0
  217. package/dist/components/radar-chart/index.js +6 -0
  218. package/dist/components/radar-chart/radar-chart.js +180 -0
  219. package/dist/components/radio-group/radio-group.js +12 -5
  220. package/dist/components/range-calendar/index.js +4 -0
  221. package/dist/components/range-calendar/range-calendar.js +35 -0
  222. package/dist/components/reasoning/index.js +4 -0
  223. package/dist/components/reasoning/reasoning.js +124 -0
  224. package/dist/components/relationship-inspector/relationship-inspector.js +5 -5
  225. package/dist/components/reveal-text/index.js +6 -0
  226. package/dist/components/reveal-text/reveal-text.js +93 -0
  227. package/dist/components/right-dock/right-dock.js +26 -21
  228. package/dist/components/role-badge/role-badge.js +22 -19
  229. package/dist/components/route-map/route-map.js +5 -3
  230. package/dist/components/routing-assignment-panel/routing-assignment-panel.js +5 -5
  231. package/dist/components/run-timeline/run-timeline.js +57 -59
  232. package/dist/components/runtime-overview-panel/runtime-overview-panel.js +5 -5
  233. package/dist/components/sankey-chart/index.js +6 -0
  234. package/dist/components/sankey-chart/sankey-chart.js +255 -0
  235. package/dist/components/scope-selector/scope-selector.js +39 -40
  236. package/dist/components/scramble-text/index.js +4 -0
  237. package/dist/components/scramble-text/scramble-text.js +76 -0
  238. package/dist/components/scroll-area/scroll-area.js +14 -5
  239. package/dist/components/scroll-progress/index.js +4 -0
  240. package/dist/components/scroll-progress/scroll-progress.js +50 -0
  241. package/dist/components/search-bar/search-bar.js +5 -2
  242. package/dist/components/search-field/index.js +4 -0
  243. package/dist/components/search-field/search-field.js +67 -0
  244. package/dist/components/segmented-control/segmented-control.js +14 -5
  245. package/dist/components/select/select.js +46 -15
  246. package/dist/components/selection-halo/selection-halo.js +53 -62
  247. package/dist/components/selection-presence/selection-presence.js +5 -5
  248. package/dist/components/separator/separator.js +19 -16
  249. package/dist/components/share-dialog/share-dialog.js +6 -8
  250. package/dist/components/sheet/sheet.js +26 -9
  251. package/dist/components/shimmer-button/index.js +4 -0
  252. package/dist/components/shimmer-button/shimmer-button.js +41 -0
  253. package/dist/components/shimmer-text/index.js +4 -0
  254. package/dist/components/shimmer-text/shimmer-text.js +40 -0
  255. package/dist/components/shine-border/index.js +4 -0
  256. package/dist/components/shine-border/shine-border.js +38 -0
  257. package/dist/components/shiny-button/index.js +4 -0
  258. package/dist/components/shiny-button/shiny-button.js +39 -0
  259. package/dist/components/sidebar-provider/sidebar-provider.js +2 -7
  260. package/dist/components/slider/slider.js +6 -3
  261. package/dist/components/slideshow/slideshow.js +380 -302
  262. package/dist/components/snap-guides/snap-guides.js +35 -35
  263. package/dist/components/sparkles/index.js +4 -0
  264. package/dist/components/sparkles/sparkles.js +51 -0
  265. package/dist/components/sparkline-grid/sparkline-grid.js +6 -7
  266. package/dist/components/spinner/unicode-spinner.js +57 -56
  267. package/dist/components/spinning-text/index.js +4 -0
  268. package/dist/components/spinning-text/spinning-text.js +58 -0
  269. package/dist/components/spotlight-card/index.js +4 -0
  270. package/dist/components/spotlight-card/spotlight-card.js +53 -0
  271. package/dist/components/stat-card/stat-card.js +37 -39
  272. package/dist/components/state-badge-overlay/state-badge-overlay.js +5 -5
  273. package/dist/components/status-board/status-board.js +20 -22
  274. package/dist/components/status-indicator/status-indicator.js +38 -40
  275. package/dist/components/sticky-metric/sticky-metric.js +58 -60
  276. package/dist/components/story-map/story-map.js +66 -60
  277. package/dist/components/subscription-card/subscription-card.js +68 -70
  278. package/dist/components/switch/switch.js +6 -3
  279. package/dist/components/table/table.js +47 -16
  280. package/dist/components/table-of-contents-panel/table-of-contents-panel.js +7 -18
  281. package/dist/components/tabs/tabs.js +2 -2
  282. package/dist/components/tag-group/index.js +8 -0
  283. package/dist/components/tag-group/tag-group.js +127 -0
  284. package/dist/components/tags-input/tags-input.js +59 -60
  285. package/dist/components/terminal/terminal.js +7 -15
  286. package/dist/components/text-animate/index.js +6 -0
  287. package/dist/components/text-animate/text-animate.js +129 -0
  288. package/dist/components/text-field/index.js +4 -0
  289. package/dist/components/text-field/text-field.js +59 -0
  290. package/dist/components/text-reveal/index.js +4 -0
  291. package/dist/components/text-reveal/text-reveal.js +90 -0
  292. package/dist/components/text-shimmer/index.js +4 -0
  293. package/dist/components/text-shimmer/text-shimmer.js +33 -0
  294. package/dist/components/textarea/textarea.js +17 -16
  295. package/dist/components/thinking-block/thinking-block.js +1 -1
  296. package/dist/components/thread-bubble/thread-bubble.js +51 -53
  297. package/dist/components/threshold-ring/threshold-ring.js +76 -78
  298. package/dist/components/ticker-tape/ticker-tape.js +47 -46
  299. package/dist/components/tilt-card/index.js +4 -0
  300. package/dist/components/tilt-card/tilt-card.js +70 -0
  301. package/dist/components/time-field/index.js +4 -0
  302. package/dist/components/time-field/time-field.js +42 -0
  303. package/dist/components/time-picker/index.js +4 -0
  304. package/dist/components/time-picker/time-picker.js +113 -0
  305. package/dist/components/timeline/timeline.js +70 -66
  306. package/dist/components/timeline-scrubber/timeline-scrubber.js +5 -3
  307. package/dist/components/tldr-section/tldr-section.js +9 -6
  308. package/dist/components/toast/toast.js +32 -11
  309. package/dist/components/toggle/toggle.js +8 -3
  310. package/dist/components/toggle-group/toggle-group.js +20 -6
  311. package/dist/components/toolbar/index.js +8 -0
  312. package/dist/components/toolbar/toolbar.js +87 -0
  313. package/dist/components/tooltip/tooltip.js +7 -3
  314. package/dist/components/top-bar/top-bar.js +30 -24
  315. package/dist/components/transaction-list/transaction-list.js +53 -47
  316. package/dist/components/tree-view/tree-view.js +72 -76
  317. package/dist/components/typewriter/index.js +4 -0
  318. package/dist/components/typewriter/typewriter.js +71 -0
  319. package/dist/components/typography/index.js +26 -0
  320. package/dist/components/typography/typography.js +173 -0
  321. package/dist/components/usage-breakdown/usage-breakdown.js +37 -38
  322. package/dist/components/viewport-bookmarks/viewport-bookmarks.js +5 -5
  323. package/dist/components/wallet-card/wallet-card.js +56 -58
  324. package/dist/components/watchlist/watchlist.js +47 -52
  325. package/dist/components/workspace-switcher/workspace-switcher.js +58 -52
  326. package/dist/components/world-breadcrumbs/world-breadcrumbs.js +43 -45
  327. package/dist/components/world-clock-bar/world-clock-bar.js +34 -61
  328. package/dist/components/zoom-hud/zoom-hud.js +56 -51
  329. package/dist/index.d.ts +6132 -3949
  330. package/dist/index.js +9 -0
  331. package/dist/lib/format.js +14 -0
  332. package/dist/lib/use-body-scroll-lock.js +30 -0
  333. package/dist/lib/use-escape-key.js +24 -0
  334. package/dist/lib/use-live-date.js +26 -0
  335. package/package.json +7 -5
  336. package/styles.css +84 -0
@@ -1,6 +1,5 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import { forwardRef } from "react";
4
3
  import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
5
4
  import { Check, ChevronRight, Circle } from "lucide-react";
6
5
  import { cn } from "../../lib/utils";
@@ -10,7 +9,13 @@ const ContextMenuGroup = ContextMenuPrimitive.Group;
10
9
  const ContextMenuPortal = ContextMenuPrimitive.Portal;
11
10
  const ContextMenuSub = ContextMenuPrimitive.Sub;
12
11
  const ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup;
13
- const ContextMenuSubTrigger = forwardRef(({ children, className, inset, ...props }, ref) => /* @__PURE__ */ jsxs(
12
+ const ContextMenuSubTrigger = ({
13
+ children,
14
+ className,
15
+ inset,
16
+ ref,
17
+ ...props
18
+ }) => /* @__PURE__ */ jsxs(
14
19
  ContextMenuPrimitive.SubTrigger,
15
20
  {
16
21
  className: cn(
@@ -25,9 +30,13 @@ const ContextMenuSubTrigger = forwardRef(({ children, className, inset, ...props
25
30
  /* @__PURE__ */ jsx(ChevronRight, { className: "ml-auto size-4" })
26
31
  ]
27
32
  }
28
- ));
33
+ );
29
34
  ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName;
30
- const ContextMenuSubContent = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
35
+ const ContextMenuSubContent = ({
36
+ className,
37
+ ref,
38
+ ...props
39
+ }) => /* @__PURE__ */ jsx(
31
40
  ContextMenuPrimitive.SubContent,
32
41
  {
33
42
  className: cn(
@@ -37,9 +46,13 @@ const ContextMenuSubContent = forwardRef(({ className, ...props }, ref) => /* @_
37
46
  ref,
38
47
  ...props
39
48
  }
40
- ));
49
+ );
41
50
  ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName;
42
- const ContextMenuContent = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(ContextMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
51
+ const ContextMenuContent = ({
52
+ className,
53
+ ref,
54
+ ...props
55
+ }) => /* @__PURE__ */ jsx(ContextMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
43
56
  ContextMenuPrimitive.Content,
44
57
  {
45
58
  className: cn(
@@ -49,9 +62,14 @@ const ContextMenuContent = forwardRef(({ className, ...props }, ref) => /* @__PU
49
62
  ref,
50
63
  ...props
51
64
  }
52
- ) }));
65
+ ) });
53
66
  ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName;
54
- const ContextMenuItem = forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
67
+ const ContextMenuItem = ({
68
+ className,
69
+ inset,
70
+ ref,
71
+ ...props
72
+ }) => /* @__PURE__ */ jsx(
55
73
  ContextMenuPrimitive.Item,
56
74
  {
57
75
  className: cn(
@@ -62,9 +80,15 @@ const ContextMenuItem = forwardRef(({ className, inset, ...props }, ref) => /* @
62
80
  ref,
63
81
  ...props
64
82
  }
65
- ));
83
+ );
66
84
  ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName;
67
- const ContextMenuCheckboxItem = forwardRef(({ checked, children, className, ...props }, ref) => /* @__PURE__ */ jsxs(
85
+ const ContextMenuCheckboxItem = ({
86
+ checked,
87
+ children,
88
+ className,
89
+ ref,
90
+ ...props
91
+ }) => /* @__PURE__ */ jsxs(
68
92
  ContextMenuPrimitive.CheckboxItem,
69
93
  {
70
94
  checked,
@@ -79,9 +103,14 @@ const ContextMenuCheckboxItem = forwardRef(({ checked, children, className, ...p
79
103
  children
80
104
  ]
81
105
  }
82
- ));
106
+ );
83
107
  ContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName;
84
- const ContextMenuRadioItem = forwardRef(({ children, className, ...props }, ref) => /* @__PURE__ */ jsxs(
108
+ const ContextMenuRadioItem = ({
109
+ children,
110
+ className,
111
+ ref,
112
+ ...props
113
+ }) => /* @__PURE__ */ jsxs(
85
114
  ContextMenuPrimitive.RadioItem,
86
115
  {
87
116
  className: cn(
@@ -95,9 +124,14 @@ const ContextMenuRadioItem = forwardRef(({ children, className, ...props }, ref)
95
124
  children
96
125
  ]
97
126
  }
98
- ));
127
+ );
99
128
  ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName;
100
- const ContextMenuLabel = forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
129
+ const ContextMenuLabel = ({
130
+ className,
131
+ inset,
132
+ ref,
133
+ ...props
134
+ }) => /* @__PURE__ */ jsx(
101
135
  ContextMenuPrimitive.Label,
102
136
  {
103
137
  className: cn(
@@ -108,16 +142,20 @@ const ContextMenuLabel = forwardRef(({ className, inset, ...props }, ref) => /*
108
142
  ref,
109
143
  ...props
110
144
  }
111
- ));
145
+ );
112
146
  ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName;
113
- const ContextMenuSeparator = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
147
+ const ContextMenuSeparator = ({
148
+ className,
149
+ ref,
150
+ ...props
151
+ }) => /* @__PURE__ */ jsx(
114
152
  ContextMenuPrimitive.Separator,
115
153
  {
116
154
  className: cn("-m-1 h-px bg-border", className),
117
155
  ref,
118
156
  ...props
119
157
  }
120
- ));
158
+ );
121
159
  ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName;
122
160
  const ContextMenuShortcut = ({
123
161
  className,
@@ -0,0 +1,118 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { cn } from "../../lib/utils";
3
+ const DEFAULT_CELL_SIZE = 12;
4
+ const DEFAULT_CELL_GAP = 3;
5
+ const DEFAULT_LEVELS = 4;
6
+ const DAYS_PER_WEEK = 7;
7
+ const MS_PER_DAY = 24 * 60 * 60 * 1e3;
8
+ function parseDay(value) {
9
+ const parsed = Date.parse(value);
10
+ if (Number.isNaN(parsed)) return null;
11
+ const date = new Date(parsed);
12
+ return Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
13
+ }
14
+ function isoFromUtc(time) {
15
+ return new Date(time).toISOString().slice(0, 10);
16
+ }
17
+ function bucket(count, max, levels) {
18
+ if (count <= 0 || max <= 0) return 0;
19
+ return Math.min(levels, Math.ceil(count / max * levels));
20
+ }
21
+ function countByDay(data) {
22
+ return data.reduce((map, entry) => {
23
+ const time = parseDay(entry.date);
24
+ if (time !== null) map.set(time, (map.get(time) ?? 0) + entry.count);
25
+ return map;
26
+ }, /* @__PURE__ */ new Map());
27
+ }
28
+ function buildWeeks(data, levels, weeksLimit) {
29
+ const counts = countByDay(data);
30
+ if (counts.size === 0) return [];
31
+ const times = [...counts.keys()];
32
+ const minTime = Math.min(...times);
33
+ const maxTime = Math.max(...times);
34
+ const start = minTime - new Date(minTime).getUTCDay() * MS_PER_DAY;
35
+ const end = maxTime + (6 - new Date(maxTime).getUTCDay()) * MS_PER_DAY;
36
+ const maxCount = Math.max(...counts.values());
37
+ const weekCount = Math.round((end - start) / (DAYS_PER_WEEK * MS_PER_DAY)) + 1;
38
+ const weeks = Array.from(
39
+ { length: weekCount },
40
+ (_week, weekIndex) => Array.from({ length: DAYS_PER_WEEK }, (_day, dayIndex) => {
41
+ const time = start + (weekIndex * DAYS_PER_WEEK + dayIndex) * MS_PER_DAY;
42
+ const count = counts.get(time) ?? 0;
43
+ return {
44
+ count,
45
+ date: isoFromUtc(time),
46
+ level: bucket(count, maxCount, levels)
47
+ };
48
+ })
49
+ );
50
+ if (weeksLimit && weeks.length > weeksLimit) {
51
+ return weeks.slice(weeks.length - weeksLimit);
52
+ }
53
+ return weeks;
54
+ }
55
+ function cellOpacity(level, levels) {
56
+ if (level <= 0) return 0.1;
57
+ return 0.25 + 0.75 * (level / levels);
58
+ }
59
+ const ContributionGraph = ({
60
+ cellGap = DEFAULT_CELL_GAP,
61
+ cellSize = DEFAULT_CELL_SIZE,
62
+ className,
63
+ color = "currentColor",
64
+ data,
65
+ levels = DEFAULT_LEVELS,
66
+ ref,
67
+ weeks,
68
+ ...props
69
+ }) => {
70
+ const ringLevels = Math.max(1, levels);
71
+ const columns = buildWeeks(data, ringLevels, weeks);
72
+ if (columns.length === 0) return null;
73
+ const step = cellSize + cellGap;
74
+ const width = columns.length * step - cellGap;
75
+ const height = DAYS_PER_WEEK * step - cellGap;
76
+ return /* @__PURE__ */ jsx(
77
+ "div",
78
+ {
79
+ className: cn(
80
+ "rounded-2xl border border-border bg-background/40 p-3",
81
+ className
82
+ ),
83
+ ref,
84
+ ...props,
85
+ children: /* @__PURE__ */ jsx(
86
+ "svg",
87
+ {
88
+ "aria-label": "Contribution graph",
89
+ className: "h-full w-full",
90
+ height,
91
+ role: "img",
92
+ viewBox: `0 0 ${width} ${height}`,
93
+ width,
94
+ children: columns.map(
95
+ (column, weekIndex) => column.map((cell, dayIndex) => /* @__PURE__ */ jsx(
96
+ "rect",
97
+ {
98
+ fill: color,
99
+ fillOpacity: cellOpacity(cell.level, ringLevels),
100
+ height: cellSize,
101
+ rx: 2,
102
+ width: cellSize,
103
+ x: weekIndex * step,
104
+ y: dayIndex * step,
105
+ children: /* @__PURE__ */ jsx("title", { children: `${cell.date}: ${cell.count.toLocaleString()}` })
106
+ },
107
+ cell.date
108
+ ))
109
+ )
110
+ }
111
+ )
112
+ }
113
+ );
114
+ };
115
+ ContributionGraph.displayName = "ContributionGraph";
116
+ export {
117
+ ContributionGraph
118
+ };
@@ -0,0 +1,6 @@
1
+ import {
2
+ ContributionGraph
3
+ } from "./contribution-graph";
4
+ export {
5
+ ContributionGraph
6
+ };
@@ -2,9 +2,8 @@
2
2
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
3
  import {
4
4
  createContext,
5
- forwardRef,
5
+ use,
6
6
  useCallback,
7
- useContext,
8
7
  useEffect,
9
8
  useMemo,
10
9
  useRef,
@@ -15,7 +14,7 @@ import { cn } from "../../lib/utils";
15
14
  import { ThinkingBlock } from "../thinking-block/thinking-block";
16
15
  const ConversationThreadContext = createContext(null);
17
16
  function useConversationThreadContext() {
18
- const ctx = useContext(ConversationThreadContext);
17
+ const ctx = use(ConversationThreadContext);
19
18
  if (!ctx) {
20
19
  throw new Error(
21
20
  "ConversationThread compound components must be used within <ConversationThread>"
@@ -147,61 +146,64 @@ function useConversationScroll(messages, isStreaming) {
147
146
  scrollToBottom
148
147
  };
149
148
  }
150
- const ConversationThread = forwardRef(
151
- ({
152
- children,
153
- className,
154
- isStreaming = false,
155
- messages,
156
- onFeedback,
157
- onRetry,
158
- onSend
159
- }, reference) => {
160
- const {
149
+ const ConversationThread = ({
150
+ children,
151
+ className,
152
+ isStreaming = false,
153
+ messages,
154
+ onFeedback,
155
+ onRetry,
156
+ onSend,
157
+ ref: reference
158
+ }) => {
159
+ const {
160
+ handleScroll,
161
+ isAtBottom,
162
+ messagesEndRef,
163
+ scrollContainerRef,
164
+ scrollToBottom
165
+ } = useConversationScroll(messages, isStreaming);
166
+ const contextValue = useMemo(
167
+ () => ({
161
168
  handleScroll,
162
169
  isAtBottom,
170
+ isStreaming,
171
+ messages,
163
172
  messagesEndRef,
173
+ onFeedback,
174
+ onRetry,
175
+ onSend,
164
176
  scrollContainerRef,
165
177
  scrollToBottom
166
- } = useConversationScroll(messages, isStreaming);
167
- const contextValue = useMemo(
168
- () => ({
169
- handleScroll,
170
- isAtBottom,
171
- isStreaming,
172
- messages,
173
- messagesEndRef,
174
- onFeedback,
175
- onRetry,
176
- onSend,
177
- scrollContainerRef,
178
- scrollToBottom
179
- }),
180
- [
181
- handleScroll,
182
- isAtBottom,
183
- isStreaming,
184
- messages,
185
- messagesEndRef,
186
- onFeedback,
187
- onRetry,
188
- onSend,
189
- scrollContainerRef,
190
- scrollToBottom
191
- ]
192
- );
193
- return /* @__PURE__ */ jsx(ConversationThreadContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
194
- "div",
195
- {
196
- className: cn("flex h-full flex-col overflow-hidden", className),
197
- ref: reference,
198
- children
199
- }
200
- ) });
201
- }
202
- );
178
+ }),
179
+ [
180
+ handleScroll,
181
+ isAtBottom,
182
+ isStreaming,
183
+ messages,
184
+ messagesEndRef,
185
+ onFeedback,
186
+ onRetry,
187
+ onSend,
188
+ scrollContainerRef,
189
+ scrollToBottom
190
+ ]
191
+ );
192
+ return /* @__PURE__ */ jsx(ConversationThreadContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
193
+ "div",
194
+ {
195
+ className: cn("flex h-full flex-col overflow-hidden", className),
196
+ ref: reference,
197
+ children
198
+ }
199
+ ) });
200
+ };
203
201
  ConversationThread.displayName = "ConversationThread";
204
- const ConversationHeader = forwardRef(({ children, className }, reference) => {
202
+ const ConversationHeader = ({
203
+ children,
204
+ className,
205
+ ref: reference
206
+ }) => {
205
207
  return /* @__PURE__ */ jsx(
206
208
  "div",
207
209
  {
@@ -210,9 +212,13 @@ const ConversationHeader = forwardRef(({ children, className }, reference) => {
210
212
  children
211
213
  }
212
214
  );
213
- });
215
+ };
214
216
  ConversationHeader.displayName = "ConversationHeader";
215
- const ConversationTitle = forwardRef(({ children, className }, reference) => {
217
+ const ConversationTitle = ({
218
+ children,
219
+ className,
220
+ ref: reference
221
+ }) => {
216
222
  return /* @__PURE__ */ jsx(
217
223
  "h2",
218
224
  {
@@ -221,9 +227,13 @@ const ConversationTitle = forwardRef(({ children, className }, reference) => {
221
227
  children
222
228
  }
223
229
  );
224
- });
230
+ };
225
231
  ConversationTitle.displayName = "ConversationTitle";
226
- const ConversationMessages = forwardRef(({ children, className }, reference) => {
232
+ const ConversationMessages = ({
233
+ children,
234
+ className,
235
+ ref: reference
236
+ }) => {
227
237
  const { handleScroll, messages, messagesEndRef, scrollContainerRef } = useConversationThreadContext();
228
238
  return /* @__PURE__ */ jsxs("div", { className: cn("relative min-h-0 flex-1", className), ref: reference, children: [
229
239
  /* @__PURE__ */ jsx(
@@ -243,9 +253,13 @@ const ConversationMessages = forwardRef(({ children, className }, reference) =>
243
253
  ),
244
254
  children
245
255
  ] });
246
- });
256
+ };
247
257
  ConversationMessages.displayName = "ConversationMessages";
248
- const ConversationEmpty = forwardRef(({ children, className }, reference) => {
258
+ const ConversationEmpty = ({
259
+ children,
260
+ className,
261
+ ref: reference
262
+ }) => {
249
263
  const { messages } = useConversationThreadContext();
250
264
  if (messages.length > 0) return null;
251
265
  return /* @__PURE__ */ jsx(
@@ -259,9 +273,13 @@ const ConversationEmpty = forwardRef(({ children, className }, reference) => {
259
273
  children: /* @__PURE__ */ jsx("div", { className: "pointer-events-auto flex flex-col items-center gap-4", children })
260
274
  }
261
275
  );
262
- });
276
+ };
263
277
  ConversationEmpty.displayName = "ConversationEmpty";
264
- const ConversationSuggestions = forwardRef(({ className, suggestions = [] }, reference) => {
278
+ const ConversationSuggestions = ({
279
+ className,
280
+ ref: reference,
281
+ suggestions = []
282
+ }) => {
265
283
  const { onSend } = useConversationThreadContext();
266
284
  return /* @__PURE__ */ jsx(
267
285
  "div",
@@ -280,9 +298,12 @@ const ConversationSuggestions = forwardRef(({ className, suggestions = [] }, ref
280
298
  ))
281
299
  }
282
300
  );
283
- });
301
+ };
284
302
  ConversationSuggestions.displayName = "ConversationSuggestions";
285
- const ConversationScrollButton = forwardRef(({ className }, reference) => {
303
+ const ConversationScrollButton = ({
304
+ className,
305
+ ref: reference
306
+ }) => {
286
307
  const { isAtBottom, scrollToBottom } = useConversationThreadContext();
287
308
  if (isAtBottom) return null;
288
309
  return /* @__PURE__ */ jsx(
@@ -299,9 +320,12 @@ const ConversationScrollButton = forwardRef(({ className }, reference) => {
299
320
  children: /* @__PURE__ */ jsx(ArrowDown, { className: "size-4" })
300
321
  }
301
322
  );
302
- });
323
+ };
303
324
  ConversationScrollButton.displayName = "ConversationScrollButton";
304
- const ConversationLoading = forwardRef(({ className }, reference) => {
325
+ const ConversationLoading = ({
326
+ className,
327
+ ref: reference
328
+ }) => {
305
329
  const { isStreaming, messages } = useConversationThreadContext();
306
330
  const lastMessage = messages.at(-1);
307
331
  if (!isStreaming || lastMessage?.role !== "assistant") return null;
@@ -334,7 +358,7 @@ const ConversationLoading = forwardRef(({ className }, reference) => {
334
358
  ]
335
359
  }
336
360
  );
337
- });
361
+ };
338
362
  ConversationLoading.displayName = "ConversationLoading";
339
363
  export {
340
364
  ConversationEmpty,