@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,7 +1,6 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import {
4
- forwardRef,
5
4
  useCallback,
6
5
  useRef,
7
6
  useState
@@ -119,41 +118,42 @@ function PlanCta({ cta, highlighted }) {
119
118
  }
120
119
  );
121
120
  }
122
- const PricingPlan = forwardRef(
123
- (props, ref) => {
124
- const {
125
- badge,
126
- className,
127
- cta,
128
- description,
129
- features,
130
- highlighted = false,
131
- name,
132
- period,
133
- price,
134
- ...rest
135
- } = props;
136
- return /* @__PURE__ */ jsxs(
137
- "div",
138
- {
139
- className: cn(
140
- "relative flex flex-col gap-6 rounded-2xl border bg-background p-6 shadow-sm transition-colors",
141
- highlighted ? "border-primary shadow-md ring-1 ring-primary/20" : "border-border",
142
- className
143
- ),
144
- ref,
145
- ...rest,
146
- children: [
147
- badge ? /* @__PURE__ */ jsx(PlanBadgePill, { badge, highlighted }) : null,
148
- /* @__PURE__ */ jsx(PlanHeader, { description, name }),
149
- /* @__PURE__ */ jsx(PlanPrice, { period, price }),
150
- features && features.length > 0 ? /* @__PURE__ */ jsx(PlanFeatures, { features }) : null,
151
- cta ? /* @__PURE__ */ jsx(PlanCta, { cta, highlighted }) : null
152
- ]
153
- }
154
- );
155
- }
156
- );
121
+ const PricingPlan = ({
122
+ ref,
123
+ ...props
124
+ }) => {
125
+ const {
126
+ badge,
127
+ className,
128
+ cta,
129
+ description,
130
+ features,
131
+ highlighted = false,
132
+ name,
133
+ period,
134
+ price,
135
+ ...rest
136
+ } = props;
137
+ return /* @__PURE__ */ jsxs(
138
+ "div",
139
+ {
140
+ className: cn(
141
+ "relative flex flex-col gap-6 rounded-2xl border bg-background p-6 shadow-sm transition-colors",
142
+ highlighted ? "border-primary shadow-md ring-1 ring-primary/20" : "border-border",
143
+ className
144
+ ),
145
+ ref,
146
+ ...rest,
147
+ children: [
148
+ badge ? /* @__PURE__ */ jsx(PlanBadgePill, { badge, highlighted }) : null,
149
+ /* @__PURE__ */ jsx(PlanHeader, { description, name }),
150
+ /* @__PURE__ */ jsx(PlanPrice, { period, price }),
151
+ features && features.length > 0 ? /* @__PURE__ */ jsx(PlanFeatures, { features }) : null,
152
+ cta ? /* @__PURE__ */ jsx(PlanCta, { cta, highlighted }) : null
153
+ ]
154
+ }
155
+ );
156
+ };
157
157
  PricingPlan.displayName = "PricingPlan";
158
158
  const PERIOD_ARROW_KEYS = /* @__PURE__ */ new Set([
159
159
  "ArrowDown",
@@ -243,40 +243,41 @@ function PeriodToggle({
243
243
  }
244
244
  );
245
245
  }
246
- const PricingTable = forwardRef(
247
- (props, ref) => {
248
- const {
249
- children,
250
- className,
251
- defaultPeriod = "monthly",
252
- onPeriodChange,
253
- period: controlledPeriod,
254
- periodLabels,
255
- showPeriodToggle = false,
256
- ...rest
257
- } = props;
258
- const [uncontrolledPeriod, setUncontrolledPeriod] = useState(defaultPeriod);
259
- const period = controlledPeriod ?? uncontrolledPeriod;
260
- const handlePeriodChange = useCallback(
261
- (next) => {
262
- if (controlledPeriod === void 0) setUncontrolledPeriod(next);
263
- onPeriodChange?.(next);
264
- },
265
- [controlledPeriod, onPeriodChange]
266
- );
267
- return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-6", className), ref, ...rest, children: [
268
- showPeriodToggle ? /* @__PURE__ */ jsx(
269
- PeriodToggle,
270
- {
271
- labels: periodLabels ?? {},
272
- onChange: handlePeriodChange,
273
- period
274
- }
275
- ) : null,
276
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3", children })
277
- ] });
278
- }
279
- );
246
+ const PricingTable = ({
247
+ ref,
248
+ ...props
249
+ }) => {
250
+ const {
251
+ children,
252
+ className,
253
+ defaultPeriod = "monthly",
254
+ onPeriodChange,
255
+ period: controlledPeriod,
256
+ periodLabels,
257
+ showPeriodToggle = false,
258
+ ...rest
259
+ } = props;
260
+ const [uncontrolledPeriod, setUncontrolledPeriod] = useState(defaultPeriod);
261
+ const period = controlledPeriod ?? uncontrolledPeriod;
262
+ const handlePeriodChange = useCallback(
263
+ (next) => {
264
+ if (controlledPeriod === void 0) setUncontrolledPeriod(next);
265
+ onPeriodChange?.(next);
266
+ },
267
+ [controlledPeriod, onPeriodChange]
268
+ );
269
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-6", className), ref, ...rest, children: [
270
+ showPeriodToggle ? /* @__PURE__ */ jsx(
271
+ PeriodToggle,
272
+ {
273
+ labels: periodLabels ?? {},
274
+ onChange: handlePeriodChange,
275
+ period
276
+ }
277
+ ) : null,
278
+ /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3", children })
279
+ ] });
280
+ };
280
281
  PricingTable.displayName = "PricingTable";
281
282
  export {
282
283
  PricingPlan,
@@ -2,9 +2,8 @@
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import {
4
4
  createContext,
5
- forwardRef,
5
+ use,
6
6
  useCallback,
7
- useContext,
8
7
  useId,
9
8
  useMemo,
10
9
  useState
@@ -54,7 +53,7 @@ const DEFAULT_LABELS = {
54
53
  };
55
54
  const ViewerContext = createContext(null);
56
55
  function useViewerContext() {
57
- const ctx = useContext(ViewerContext);
56
+ const ctx = use(ViewerContext);
58
57
  if (!ctx) {
59
58
  throw new Error("PrimarySourceViewer subcomponent used outside its root.");
60
59
  }
@@ -87,7 +86,12 @@ function useViewerState(resolvedLabels) {
87
86
  [resolvedLabels, rotate, rotation, zoom, zoomIn, zoomOut]
88
87
  );
89
88
  }
90
- const PrimarySourceToolbar = forwardRef(({ children, className, ...rest }, ref) => /* @__PURE__ */ jsx(
89
+ const PrimarySourceToolbar = ({
90
+ children,
91
+ className,
92
+ ref,
93
+ ...rest
94
+ }) => /* @__PURE__ */ jsx(
91
95
  "div",
92
96
  {
93
97
  className: cn(
@@ -99,27 +103,35 @@ const PrimarySourceToolbar = forwardRef(({ children, className, ...rest }, ref)
99
103
  ...rest,
100
104
  children
101
105
  }
102
- ));
106
+ );
103
107
  PrimarySourceToolbar.displayName = "PrimarySourceToolbar";
104
- const ToolbarButton = forwardRef(
105
- ({ ariaLabel, className, glyph, onActivate, ...rest }, ref) => /* @__PURE__ */ jsx(
106
- "button",
107
- {
108
- "aria-label": ariaLabel,
109
- className: cn(
110
- "inline-flex h-8 min-w-8 items-center justify-center rounded-md border border-border bg-background px-2 text-sm font-medium hover:bg-accent focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",
111
- className
112
- ),
113
- onClick: onActivate,
114
- ref,
115
- type: "button",
116
- ...rest,
117
- children: glyph
118
- }
119
- )
108
+ const ToolbarButton = ({
109
+ ariaLabel,
110
+ className,
111
+ glyph,
112
+ onActivate,
113
+ ref,
114
+ ...rest
115
+ }) => /* @__PURE__ */ jsx(
116
+ "button",
117
+ {
118
+ "aria-label": ariaLabel,
119
+ className: cn(
120
+ "inline-flex h-8 min-w-8 items-center justify-center rounded-md border border-border bg-background px-2 text-sm font-medium hover:bg-accent focus:outline-none focus-visible:ring-2 focus-visible:ring-ring",
121
+ className
122
+ ),
123
+ onClick: onActivate,
124
+ ref,
125
+ type: "button",
126
+ ...rest,
127
+ children: glyph
128
+ }
120
129
  );
121
130
  ToolbarButton.displayName = "ToolbarButton";
122
- const PrimarySourceZoomIn = forwardRef(({ ...rest }, ref) => {
131
+ const PrimarySourceZoomIn = ({
132
+ ref,
133
+ ...rest
134
+ }) => {
123
135
  const { labels, zoomIn } = useViewerContext();
124
136
  return /* @__PURE__ */ jsx(
125
137
  ToolbarButton,
@@ -131,9 +143,12 @@ const PrimarySourceZoomIn = forwardRef(({ ...rest }, ref) => {
131
143
  ...rest
132
144
  }
133
145
  );
134
- });
146
+ };
135
147
  PrimarySourceZoomIn.displayName = "PrimarySourceZoomIn";
136
- const PrimarySourceZoomOut = forwardRef(({ ...rest }, ref) => {
148
+ const PrimarySourceZoomOut = ({
149
+ ref,
150
+ ...rest
151
+ }) => {
137
152
  const { labels, zoomOut } = useViewerContext();
138
153
  return /* @__PURE__ */ jsx(
139
154
  ToolbarButton,
@@ -145,9 +160,12 @@ const PrimarySourceZoomOut = forwardRef(({ ...rest }, ref) => {
145
160
  ...rest
146
161
  }
147
162
  );
148
- });
163
+ };
149
164
  PrimarySourceZoomOut.displayName = "PrimarySourceZoomOut";
150
- const PrimarySourceRotate = forwardRef(({ ...rest }, ref) => {
165
+ const PrimarySourceRotate = ({
166
+ ref,
167
+ ...rest
168
+ }) => {
151
169
  const { labels, rotate } = useViewerContext();
152
170
  return /* @__PURE__ */ jsx(
153
171
  ToolbarButton,
@@ -159,9 +177,14 @@ const PrimarySourceRotate = forwardRef(({ ...rest }, ref) => {
159
177
  ...rest
160
178
  }
161
179
  );
162
- });
180
+ };
163
181
  PrimarySourceRotate.displayName = "PrimarySourceRotate";
164
- const PrimarySourceAnnotations = forwardRef(({ children, className, ...rest }, ref) => /* @__PURE__ */ jsx(
182
+ const PrimarySourceAnnotations = ({
183
+ children,
184
+ className,
185
+ ref,
186
+ ...rest
187
+ }) => /* @__PURE__ */ jsx(
165
188
  "div",
166
189
  {
167
190
  "aria-label": "Annotations",
@@ -170,7 +193,7 @@ const PrimarySourceAnnotations = forwardRef(({ children, className, ...rest }, r
170
193
  ...rest,
171
194
  children
172
195
  }
173
- ));
196
+ );
174
197
  PrimarySourceAnnotations.displayName = "PrimarySourceAnnotations";
175
198
  function AnnotationTooltip({
176
199
  category,
@@ -201,7 +224,10 @@ function AnnotationTooltip({
201
224
  }
202
225
  );
203
226
  }
204
- const PrimarySourceAnnotation = forwardRef((props, ref) => {
227
+ const PrimarySourceAnnotation = ({
228
+ ref,
229
+ ...props
230
+ }) => {
205
231
  const {
206
232
  category,
207
233
  className,
@@ -248,9 +274,14 @@ const PrimarySourceAnnotation = forwardRef((props, ref) => {
248
274
  )
249
275
  }
250
276
  );
251
- });
277
+ };
252
278
  PrimarySourceAnnotation.displayName = "PrimarySourceAnnotation";
253
- const PrimarySourceTranscription = forwardRef(({ children, className, ...rest }, ref) => /* @__PURE__ */ jsxs(
279
+ const PrimarySourceTranscription = ({
280
+ children,
281
+ className,
282
+ ref,
283
+ ...rest
284
+ }) => /* @__PURE__ */ jsxs(
254
285
  "aside",
255
286
  {
256
287
  "aria-label": "Transcription",
@@ -265,9 +296,14 @@ const PrimarySourceTranscription = forwardRef(({ children, className, ...rest },
265
296
  /* @__PURE__ */ jsx("div", { className: "space-y-2 text-foreground", children })
266
297
  ]
267
298
  }
268
- ));
299
+ );
269
300
  PrimarySourceTranscription.displayName = "PrimarySourceTranscription";
270
- const PrimarySourceContext = forwardRef(({ children, className, ...rest }, ref) => /* @__PURE__ */ jsx(
301
+ const PrimarySourceContext = ({
302
+ children,
303
+ className,
304
+ ref,
305
+ ...rest
306
+ }) => /* @__PURE__ */ jsx(
271
307
  "footer",
272
308
  {
273
309
  className: cn(
@@ -278,9 +314,14 @@ const PrimarySourceContext = forwardRef(({ children, className, ...rest }, ref)
278
314
  ...rest,
279
315
  children
280
316
  }
281
- ));
317
+ );
282
318
  PrimarySourceContext.displayName = "PrimarySourceContext";
283
- const PrimarySourceMetadata = forwardRef(({ children, className, ...rest }, ref) => /* @__PURE__ */ jsx(
319
+ const PrimarySourceMetadata = ({
320
+ children,
321
+ className,
322
+ ref,
323
+ ...rest
324
+ }) => /* @__PURE__ */ jsx(
284
325
  "dl",
285
326
  {
286
327
  "aria-label": "Metadata",
@@ -292,9 +333,14 @@ const PrimarySourceMetadata = forwardRef(({ children, className, ...rest }, ref)
292
333
  ...rest,
293
334
  children
294
335
  }
295
- ));
336
+ );
296
337
  PrimarySourceMetadata.displayName = "PrimarySourceMetadata";
297
- const PrimarySourceQuestions = forwardRef(({ children, className, ...rest }, ref) => /* @__PURE__ */ jsxs(
338
+ const PrimarySourceQuestions = ({
339
+ children,
340
+ className,
341
+ ref,
342
+ ...rest
343
+ }) => /* @__PURE__ */ jsxs(
298
344
  "div",
299
345
  {
300
346
  "aria-label": "Discussion questions",
@@ -306,7 +352,7 @@ const PrimarySourceQuestions = forwardRef(({ children, className, ...rest }, ref
306
352
  /* @__PURE__ */ jsx("div", { className: "space-y-1 text-foreground", children })
307
353
  ]
308
354
  }
309
- ));
355
+ );
310
356
  PrimarySourceQuestions.displayName = "PrimarySourceQuestions";
311
357
  const SLOT_DISPLAY_NAMES = {
312
358
  annotations: PrimarySourceAnnotations.displayName,
@@ -376,7 +422,10 @@ function Stage({ annotations, source }) {
376
422
  }
377
423
  );
378
424
  }
379
- const PrimarySourceViewer = forwardRef((props, ref) => {
425
+ const PrimarySourceViewer = ({
426
+ ref,
427
+ ...props
428
+ }) => {
380
429
  const {
381
430
  children,
382
431
  className,
@@ -422,7 +471,7 @@ const PrimarySourceViewer = forwardRef((props, ref) => {
422
471
  ]
423
472
  }
424
473
  ) });
425
- });
474
+ };
426
475
  PrimarySourceViewer.displayName = "PrimarySourceViewer";
427
476
  export {
428
477
  PrimarySourceAnnotation,
@@ -119,7 +119,7 @@ function useChecklistProgress(checklistItems = [], persistKey) {
119
119
  };
120
120
  }
121
121
  function useProgressTrackerContext() {
122
- const context = React.useContext(ProgressTrackerContext);
122
+ const context = React.use(ProgressTrackerContext);
123
123
  if (!context) {
124
124
  throw new Error(
125
125
  "ProgressTracker compound components must be used within <ProgressTracker />."
@@ -0,0 +1,6 @@
1
+ import {
2
+ ProgressiveBlur
3
+ } from "./progressive-blur";
4
+ export {
5
+ ProgressiveBlur
6
+ };
@@ -0,0 +1,48 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { cn } from "../../lib/utils";
3
+ function layerMask(direction, index) {
4
+ const start = index / 5 * 100;
5
+ const mid = (index + 1) / 5 * 100;
6
+ return `linear-gradient(to ${direction}, transparent ${String(start)}%, black ${String(mid)}%)`;
7
+ }
8
+ const ProgressiveBlur = ({
9
+ blur = 8,
10
+ className,
11
+ direction = "bottom",
12
+ layers = 5,
13
+ ref,
14
+ ...props
15
+ }) => {
16
+ const bands = Array.from({ length: layers }, (_, index) => index);
17
+ return /* @__PURE__ */ jsx(
18
+ "div",
19
+ {
20
+ "aria-hidden": "true",
21
+ className: cn(
22
+ "pointer-events-none absolute inset-0 overflow-hidden",
23
+ className
24
+ ),
25
+ ref,
26
+ ...props,
27
+ children: bands.map((index) => {
28
+ const mask = layerMask(direction, index);
29
+ return /* @__PURE__ */ jsx(
30
+ "div",
31
+ {
32
+ className: "absolute inset-0",
33
+ style: {
34
+ backdropFilter: `blur(${(index + 1) / layers * blur}px)`,
35
+ maskImage: mask,
36
+ WebkitMaskImage: mask
37
+ }
38
+ },
39
+ index
40
+ );
41
+ })
42
+ }
43
+ );
44
+ };
45
+ ProgressiveBlur.displayName = "ProgressiveBlur";
46
+ export {
47
+ ProgressiveBlur
48
+ };
@@ -0,0 +1,4 @@
1
+ import { PromptInput } from "./prompt-input";
2
+ export {
3
+ PromptInput
4
+ };
@@ -0,0 +1,185 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { useCallback, useEffect, useRef, useState } from "react";
4
+ import { LoaderCircle, SendHorizontal } from "lucide-react";
5
+ import { cn } from "../../lib/utils";
6
+ const SUBMIT_KEY = "Enter";
7
+ const REM_PER_ROW = 1.5;
8
+ function autoResize(element) {
9
+ if (element === null) {
10
+ return;
11
+ }
12
+ element.style.height = "auto";
13
+ element.style.height = `${element.scrollHeight}px`;
14
+ }
15
+ function applyRef(ref, node) {
16
+ if (typeof ref === "function") {
17
+ ref(node);
18
+ return;
19
+ }
20
+ if (ref) {
21
+ ref.current = node;
22
+ }
23
+ }
24
+ function useMergedRef(ref) {
25
+ const innerRef = useRef(null);
26
+ const assignRef = useCallback(
27
+ (node) => {
28
+ innerRef.current = node;
29
+ applyRef(ref, node);
30
+ },
31
+ [ref]
32
+ );
33
+ return { assignRef, innerRef };
34
+ }
35
+ function usePromptInput({
36
+ defaultValue,
37
+ isControlled,
38
+ onSubmit,
39
+ onValueChange,
40
+ ref,
41
+ value
42
+ }) {
43
+ const { assignRef, innerRef } = useMergedRef(ref);
44
+ const [internalValue, setInternalValue] = useState(defaultValue);
45
+ const currentValue = isControlled ? value ?? "" : internalValue;
46
+ useEffect(() => {
47
+ autoResize(innerRef.current);
48
+ }, [currentValue, innerRef]);
49
+ const handleChange = useCallback(
50
+ (event) => {
51
+ if (!isControlled) {
52
+ setInternalValue(event.target.value);
53
+ }
54
+ onValueChange?.(event.target.value);
55
+ },
56
+ [isControlled, onValueChange]
57
+ );
58
+ const submit = useCallback(() => {
59
+ if (currentValue.trim().length === 0) {
60
+ return;
61
+ }
62
+ onSubmit?.(currentValue);
63
+ if (!isControlled) {
64
+ setInternalValue("");
65
+ }
66
+ }, [currentValue, isControlled, onSubmit]);
67
+ const handleKeyDown = useCallback(
68
+ (event) => {
69
+ if (event.key === SUBMIT_KEY && !event.shiftKey) {
70
+ event.preventDefault();
71
+ submit();
72
+ }
73
+ },
74
+ [submit]
75
+ );
76
+ const handleFormSubmit = useCallback(
77
+ (event) => {
78
+ event.preventDefault();
79
+ submit();
80
+ },
81
+ [submit]
82
+ );
83
+ return {
84
+ assignRef,
85
+ currentValue,
86
+ handleChange,
87
+ handleFormSubmit,
88
+ handleKeyDown
89
+ };
90
+ }
91
+ function PromptInputActions({
92
+ canSubmit,
93
+ isLoading,
94
+ submitLabel,
95
+ toolbar
96
+ }) {
97
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
98
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1", children: toolbar }),
99
+ /* @__PURE__ */ jsx(
100
+ "button",
101
+ {
102
+ "aria-label": submitLabel,
103
+ className: "inline-flex size-8 shrink-0 items-center justify-center rounded-lg bg-primary text-primary-foreground transition-opacity hover:opacity-90 disabled:opacity-40",
104
+ disabled: !canSubmit,
105
+ type: "submit",
106
+ children: isLoading ? /* @__PURE__ */ jsx(LoaderCircle, { className: "size-4 animate-spin" }) : /* @__PURE__ */ jsx(SendHorizontal, { className: "size-4" })
107
+ }
108
+ )
109
+ ] });
110
+ }
111
+ const PromptInput = ({
112
+ className,
113
+ defaultValue = "",
114
+ disabled = false,
115
+ isLoading = false,
116
+ maxRows = 8,
117
+ minRows = 1,
118
+ onSubmit,
119
+ onValueChange,
120
+ placeholder = "Send a message\u2026",
121
+ ref,
122
+ submitLabel = "Send",
123
+ toolbar,
124
+ value
125
+ }) => {
126
+ const isControlled = value !== void 0;
127
+ const {
128
+ assignRef,
129
+ currentValue,
130
+ handleChange,
131
+ handleFormSubmit,
132
+ handleKeyDown
133
+ } = usePromptInput({
134
+ defaultValue,
135
+ isControlled,
136
+ onSubmit,
137
+ onValueChange,
138
+ ref,
139
+ value
140
+ });
141
+ const canSubmit = !disabled && !isLoading && currentValue.trim().length > 0;
142
+ return /* @__PURE__ */ jsxs(
143
+ "form",
144
+ {
145
+ className: cn(
146
+ "flex flex-col gap-2 rounded-2xl border border-border bg-background p-2 shadow-sm transition-colors focus-within:ring-1 focus-within:ring-ring",
147
+ className
148
+ ),
149
+ onSubmit: handleFormSubmit,
150
+ children: [
151
+ /* @__PURE__ */ jsx(
152
+ "textarea",
153
+ {
154
+ "aria-label": placeholder,
155
+ className: "w-full resize-none bg-transparent px-2 py-1.5 text-sm text-foreground outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
156
+ disabled,
157
+ onChange: handleChange,
158
+ onKeyDown: handleKeyDown,
159
+ placeholder,
160
+ ref: assignRef,
161
+ style: {
162
+ maxHeight: `${maxRows * REM_PER_ROW}rem`,
163
+ minHeight: `${minRows * REM_PER_ROW}rem`,
164
+ overflowY: "auto"
165
+ },
166
+ value: currentValue
167
+ }
168
+ ),
169
+ /* @__PURE__ */ jsx(
170
+ PromptInputActions,
171
+ {
172
+ canSubmit,
173
+ isLoading,
174
+ submitLabel,
175
+ toolbar
176
+ }
177
+ )
178
+ ]
179
+ }
180
+ );
181
+ };
182
+ PromptInput.displayName = "PromptInput";
183
+ export {
184
+ PromptInput
185
+ };