@vllnt/ui 0.3.0-canary.a42d8f4 → 0.3.0-canary.ce98eca

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 (348) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/dist/components/accordion/accordion.js +2 -8
  3. package/dist/components/activity-heatmap/activity-heatmap.js +22 -29
  4. package/dist/components/activity-log/activity-log.js +57 -58
  5. package/dist/components/agent-activity/agent-activity.js +140 -120
  6. package/dist/components/ai-artifact/ai-artifact.js +138 -82
  7. package/dist/components/ai-chat-input/ai-chat-input.js +60 -60
  8. package/dist/components/ai-message-bubble/ai-message-bubble.js +64 -66
  9. package/dist/components/ai-sidebar/ai-sidebar.js +77 -54
  10. package/dist/components/ai-source-citation/ai-source-citation.js +38 -32
  11. package/dist/components/ai-streaming-text/ai-streaming-text.js +33 -35
  12. package/dist/components/ai-tool-call-display/ai-tool-call-display.js +58 -60
  13. package/dist/components/alert/alert.js +20 -7
  14. package/dist/components/alert-dialog/alert-dialog.js +36 -13
  15. package/dist/components/alert-pulse/alert-pulse.js +69 -69
  16. package/dist/components/anchor-port/anchor-port.js +26 -28
  17. package/dist/components/animated-beam/animated-beam.js +157 -0
  18. package/dist/components/animated-beam/index.js +4 -0
  19. package/dist/components/animated-grid-pattern/animated-grid-pattern.js +81 -0
  20. package/dist/components/animated-grid-pattern/index.js +6 -0
  21. package/dist/components/animated-list/animated-list.js +28 -0
  22. package/dist/components/animated-list/index.js +4 -0
  23. package/dist/components/animated-tabs/animated-tabs.js +98 -0
  24. package/dist/components/animated-tabs/index.js +6 -0
  25. package/dist/components/animated-testimonials/animated-testimonials.js +97 -0
  26. package/dist/components/animated-testimonials/index.js +6 -0
  27. package/dist/components/animated-text/animated-text.js +66 -67
  28. package/dist/components/animated-tooltip/animated-tooltip.js +58 -0
  29. package/dist/components/animated-tooltip/index.js +6 -0
  30. package/dist/components/auto-reload/auto-reload.js +137 -109
  31. package/dist/components/avatar/avatar.js +18 -7
  32. package/dist/components/avatar-group/avatar-group.js +35 -30
  33. package/dist/components/banner/banner.js +80 -77
  34. package/dist/components/bento-grid/bento-grid.js +46 -0
  35. package/dist/components/bento-grid/index.js +8 -0
  36. package/dist/components/blog-card/blog-card.js +1 -1
  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 +59 -61
  46. package/dist/components/canvas-shell/canvas-foundation-demo.js +8 -8
  47. package/dist/components/canvas-shell/canvas-shell.js +11 -6
  48. package/dist/components/canvas-view/canvas-view.js +138 -97
  49. package/dist/components/card/card.js +35 -12
  50. package/dist/components/card-flip/card-flip.js +67 -0
  51. package/dist/components/card-flip/index.js +4 -0
  52. package/dist/components/carousel/carousel.js +78 -60
  53. package/dist/components/chain-of-thought/chain-of-thought.js +78 -0
  54. package/dist/components/chain-of-thought/index.js +6 -0
  55. package/dist/components/chart/area-chart.js +66 -67
  56. package/dist/components/chart/bar-chart.js +68 -70
  57. package/dist/components/chart/line-chart.js +69 -70
  58. package/dist/components/chat-dock-section/chat-dock-section.js +43 -45
  59. package/dist/components/checkbox/checkbox.js +6 -3
  60. package/dist/components/checkbox-group/checkbox-group.js +98 -0
  61. package/dist/components/checkbox-group/index.js +8 -0
  62. package/dist/components/choropleth-map/choropleth-map.js +95 -82
  63. package/dist/components/chronological-timeline/chronological-timeline.js +76 -73
  64. package/dist/components/civilization-card/civilization-card.js +77 -57
  65. package/dist/components/code-block/code-block.js +14 -17
  66. package/dist/components/code-playground/code-playground.js +8 -9
  67. package/dist/components/color-picker/color-picker.js +133 -0
  68. package/dist/components/color-picker/index.js +4 -0
  69. package/dist/components/combobox/combobox.js +59 -60
  70. package/dist/components/command/command.js +42 -15
  71. package/dist/components/comment-pin/comment-pin.js +58 -60
  72. package/dist/components/connector-edge/connector-edge.js +59 -54
  73. package/dist/components/content-intro/content-intro.js +4 -1
  74. package/dist/components/context-lens/context-lens.js +74 -73
  75. package/dist/components/context-menu/context-menu.js +55 -17
  76. package/dist/components/contribution-graph/contribution-graph.js +118 -0
  77. package/dist/components/contribution-graph/index.js +6 -0
  78. package/dist/components/conversation-thread/conversation-thread.js +89 -65
  79. package/dist/components/cookie-consent/cookie-consent.js +114 -115
  80. package/dist/components/copy-button/copy-button.js +100 -103
  81. package/dist/components/countdown-timer/countdown-timer.js +48 -76
  82. package/dist/components/credit-badge/credit-badge.js +26 -22
  83. package/dist/components/curriculum/curriculum.js +2 -2
  84. package/dist/components/cursor/cursor.js +52 -0
  85. package/dist/components/cursor/index.js +4 -0
  86. package/dist/components/data-list/data-list.js +54 -40
  87. package/dist/components/data-table/data-table.js +4 -4
  88. package/dist/components/date-field/date-field.js +42 -0
  89. package/dist/components/date-field/index.js +4 -0
  90. package/dist/components/date-picker/date-picker.js +51 -52
  91. package/dist/components/date-range-picker/date-range-picker.js +73 -0
  92. package/dist/components/date-range-picker/index.js +6 -0
  93. package/dist/components/dialog/dialog.js +25 -9
  94. package/dist/components/dock/dock.js +109 -0
  95. package/dist/components/dock/index.js +5 -0
  96. package/dist/components/document-sibling-nav/document-sibling-nav.js +10 -5
  97. package/dist/components/dot-pattern/dot-pattern.js +36 -0
  98. package/dist/components/dot-pattern/index.js +4 -0
  99. package/dist/components/drawer/drawer.js +25 -9
  100. package/dist/components/dropdown-menu/dropdown-menu.js +56 -17
  101. package/dist/components/edge-label/edge-label.js +17 -15
  102. package/dist/components/empty-state/empty-state.js +27 -31
  103. package/dist/components/era-comparison/era-comparison.js +131 -100
  104. package/dist/components/expandable-cards/expandable-cards.js +61 -0
  105. package/dist/components/expandable-cards/index.js +6 -0
  106. package/dist/components/field/field.js +137 -0
  107. package/dist/components/field/index.js +16 -0
  108. package/dist/components/fieldset/fieldset.js +49 -0
  109. package/dist/components/fieldset/index.js +10 -0
  110. package/dist/components/file-upload/file-upload.js +4 -3
  111. package/dist/components/flashcard/flashcard.js +8 -2
  112. package/dist/components/floating-navbar/floating-navbar.js +67 -0
  113. package/dist/components/floating-navbar/index.js +4 -0
  114. package/dist/components/floating-toolbar/floating-toolbar.js +49 -51
  115. package/dist/components/flow-diagram/flow-fullscreen.js +3 -13
  116. package/dist/components/flow-diagram/use-flow-diagram.js +7 -18
  117. package/dist/components/follow-mode/follow-mode.js +67 -69
  118. package/dist/components/form/form.js +131 -112
  119. package/dist/components/gantt-chart/gantt-chart.js +49 -51
  120. package/dist/components/gauge-chart/gauge-chart.js +132 -0
  121. package/dist/components/gauge-chart/index.js +4 -0
  122. package/dist/components/geography-quiz-map/geography-quiz-map.js +94 -83
  123. package/dist/components/glass-card/glass-card.js +25 -0
  124. package/dist/components/glass-card/index.js +4 -0
  125. package/dist/components/glass-panel/glass-panel.js +16 -14
  126. package/dist/components/glass-progress/glass-progress.js +39 -0
  127. package/dist/components/glass-progress/index.js +4 -0
  128. package/dist/components/globe-3d/globe-3d.js +70 -66
  129. package/dist/components/grid/grid.js +100 -0
  130. package/dist/components/grid/index.js +4 -0
  131. package/dist/components/group-hull/group-hull.js +27 -22
  132. package/dist/components/handoff-beacon/handoff-beacon.js +55 -57
  133. package/dist/components/heat-map-overlay/heat-map-overlay.js +55 -55
  134. package/dist/components/heat-overlay/heat-overlay.js +49 -48
  135. package/dist/components/historic-timeline/historic-timeline.js +59 -61
  136. package/dist/components/historical-figure-card/historical-figure-card.js +5 -3
  137. package/dist/components/hover-card/hover-card.js +8 -3
  138. package/dist/components/index.js +271 -0
  139. package/dist/components/infinite-plane/infinite-plane.js +34 -36
  140. package/dist/components/input/input.js +19 -17
  141. package/dist/components/input-group/index.js +14 -0
  142. package/dist/components/input-group/input-group.js +73 -0
  143. package/dist/components/input-otp/input-otp.js +25 -8
  144. package/dist/components/interactive-timeline/interactive-timeline.js +53 -17
  145. package/dist/components/item/index.js +18 -0
  146. package/dist/components/item/item.js +118 -0
  147. package/dist/components/jarvis-dock/jarvis-dock.js +40 -42
  148. package/dist/components/kbd/kbd.js +31 -34
  149. package/dist/components/keyboard-shortcuts-help/keyboard-shortcuts-help.js +7 -18
  150. package/dist/components/knowledge-check/knowledge-check.js +89 -72
  151. package/dist/components/label/label.js +6 -3
  152. package/dist/components/left-rail/left-rail.js +22 -18
  153. package/dist/components/link/index.js +5 -0
  154. package/dist/components/link/link.js +53 -0
  155. package/dist/components/liquid-glass/index.js +4 -0
  156. package/dist/components/liquid-glass/liquid-glass.js +39 -0
  157. package/dist/components/list-box/index.js +8 -0
  158. package/dist/components/list-box/list-box.js +130 -0
  159. package/dist/components/live-cursor/live-cursor.js +49 -51
  160. package/dist/components/live-feed/live-feed.js +52 -77
  161. package/dist/components/magnetic/index.js +4 -0
  162. package/dist/components/magnetic/magnetic.js +63 -0
  163. package/dist/components/magnetic-button/index.js +4 -0
  164. package/dist/components/magnetic-button/magnetic-button.js +64 -0
  165. package/dist/components/map-2d/map-2d.js +120 -101
  166. package/dist/components/map-timeline/map-timeline.js +188 -170
  167. package/dist/components/market-treemap/market-treemap.js +10 -6
  168. package/dist/components/marquee/marquee.js +64 -65
  169. package/dist/components/mdx-content/mdx-content.js +4 -1
  170. package/dist/components/menubar/menubar.js +82 -35
  171. package/dist/components/meteors/index.js +4 -0
  172. package/dist/components/meteors/meteors.js +62 -0
  173. package/dist/components/meter/index.js +5 -0
  174. package/dist/components/meter/meter.js +76 -0
  175. package/dist/components/metric-cluster/metric-cluster.js +47 -49
  176. package/dist/components/metric-gauge/metric-gauge.js +43 -45
  177. package/dist/components/mini-map-panel/mini-map-panel.js +71 -66
  178. package/dist/components/model-comparison/model-comparison.js +90 -62
  179. package/dist/components/model-selector/model-selector.js +5 -5
  180. package/dist/components/multi-select/multi-select.js +103 -105
  181. package/dist/components/multi-select-lasso/multi-select-lasso.js +5 -5
  182. package/dist/components/native-select/index.js +4 -0
  183. package/dist/components/native-select/native-select.js +28 -0
  184. package/dist/components/navbar-saas/navbar-saas.js +2 -2
  185. package/dist/components/navigation-menu/navigation-menu.js +38 -13
  186. package/dist/components/newsletter-signup/newsletter-signup.js +7 -5
  187. package/dist/components/number-input/number-input.js +4 -3
  188. package/dist/components/number-ticker/number-ticker.js +50 -51
  189. package/dist/components/object-card/object-card.js +41 -43
  190. package/dist/components/object-handle/object-handle.js +33 -30
  191. package/dist/components/object-inspector/object-inspector.js +40 -42
  192. package/dist/components/order-book/order-book.js +59 -54
  193. package/dist/components/overview-board/overview-board.js +91 -87
  194. package/dist/components/panel/index.js +16 -0
  195. package/dist/components/panel/panel.js +95 -0
  196. package/dist/components/parallel-timeline/parallel-timeline.js +56 -58
  197. package/dist/components/particles/index.js +4 -0
  198. package/dist/components/particles/particles.js +52 -0
  199. package/dist/components/password-input/password-input.js +35 -36
  200. package/dist/components/phone-input/index.js +6 -0
  201. package/dist/components/phone-input/phone-input.js +63 -0
  202. package/dist/components/pie-chart/index.js +4 -0
  203. package/dist/components/pie-chart/pie-chart.js +130 -0
  204. package/dist/components/plan-badge/plan-badge.js +28 -24
  205. package/dist/components/playback-ghost/playback-ghost.js +46 -48
  206. package/dist/components/policy-delivery-panel/policy-delivery-panel.js +5 -5
  207. package/dist/components/popover/popover.js +8 -3
  208. package/dist/components/presence-stack/presence-stack.js +39 -41
  209. package/dist/components/presence-sync-indicator/presence-sync-indicator.js +5 -5
  210. package/dist/components/pricing-table/pricing-table.js +126 -88
  211. package/dist/components/primary-source-viewer/primary-source-viewer.js +90 -41
  212. package/dist/components/progress-card/progress-card.js +1 -1
  213. package/dist/components/progress-tracker/progress-tracker.js +4 -4
  214. package/dist/components/progressive-blur/index.js +6 -0
  215. package/dist/components/progressive-blur/progressive-blur.js +48 -0
  216. package/dist/components/prompt-input/index.js +4 -0
  217. package/dist/components/prompt-input/prompt-input.js +185 -0
  218. package/dist/components/prompt-templates/prompt-templates.js +51 -59
  219. package/dist/components/property-section/property-section.js +28 -30
  220. package/dist/components/qr-code/index.js +4 -0
  221. package/dist/components/qr-code/qr-code.js +49 -0
  222. package/dist/components/radar-chart/index.js +6 -0
  223. package/dist/components/radar-chart/radar-chart.js +180 -0
  224. package/dist/components/radio-group/radio-group.js +12 -5
  225. package/dist/components/range-calendar/index.js +4 -0
  226. package/dist/components/range-calendar/range-calendar.js +35 -0
  227. package/dist/components/reasoning/index.js +4 -0
  228. package/dist/components/reasoning/reasoning.js +124 -0
  229. package/dist/components/relationship-inspector/relationship-inspector.js +5 -5
  230. package/dist/components/reveal-text/index.js +6 -0
  231. package/dist/components/reveal-text/reveal-text.js +93 -0
  232. package/dist/components/right-dock/right-dock.js +26 -21
  233. package/dist/components/role-badge/role-badge.js +22 -19
  234. package/dist/components/route-map/route-map.js +5 -3
  235. package/dist/components/routing-assignment-panel/routing-assignment-panel.js +5 -5
  236. package/dist/components/run-timeline/run-timeline.js +57 -59
  237. package/dist/components/runtime-overview-panel/runtime-overview-panel.js +5 -5
  238. package/dist/components/sankey-chart/index.js +6 -0
  239. package/dist/components/sankey-chart/sankey-chart.js +255 -0
  240. package/dist/components/scope-selector/scope-selector.js +44 -45
  241. package/dist/components/scramble-text/index.js +4 -0
  242. package/dist/components/scramble-text/scramble-text.js +76 -0
  243. package/dist/components/scroll-area/scroll-area.js +14 -5
  244. package/dist/components/scroll-progress/index.js +4 -0
  245. package/dist/components/scroll-progress/scroll-progress.js +50 -0
  246. package/dist/components/search-bar/search-bar.js +5 -2
  247. package/dist/components/search-dialog/search-dialog.js +1 -1
  248. package/dist/components/search-field/index.js +4 -0
  249. package/dist/components/search-field/search-field.js +67 -0
  250. package/dist/components/segmented-control/segmented-control.js +14 -5
  251. package/dist/components/select/select.js +46 -15
  252. package/dist/components/selection-halo/selection-halo.js +53 -62
  253. package/dist/components/selection-presence/selection-presence.js +5 -5
  254. package/dist/components/separator/separator.js +19 -16
  255. package/dist/components/share-dialog/share-dialog.js +6 -8
  256. package/dist/components/sheet/sheet.js +26 -9
  257. package/dist/components/shimmer-button/index.js +4 -0
  258. package/dist/components/shimmer-button/shimmer-button.js +41 -0
  259. package/dist/components/shimmer-text/index.js +4 -0
  260. package/dist/components/shimmer-text/shimmer-text.js +40 -0
  261. package/dist/components/shine-border/index.js +4 -0
  262. package/dist/components/shine-border/shine-border.js +38 -0
  263. package/dist/components/shiny-button/index.js +4 -0
  264. package/dist/components/shiny-button/shiny-button.js +39 -0
  265. package/dist/components/sidebar-provider/sidebar-provider.js +2 -7
  266. package/dist/components/slider/slider.js +6 -3
  267. package/dist/components/slideshow/slideshow.js +380 -302
  268. package/dist/components/snap-guides/snap-guides.js +35 -35
  269. package/dist/components/sparkles/index.js +4 -0
  270. package/dist/components/sparkles/sparkles.js +51 -0
  271. package/dist/components/sparkline-grid/sparkline-grid.js +9 -9
  272. package/dist/components/spinner/unicode-spinner.js +57 -56
  273. package/dist/components/spinning-text/index.js +4 -0
  274. package/dist/components/spinning-text/spinning-text.js +58 -0
  275. package/dist/components/spotlight-card/index.js +4 -0
  276. package/dist/components/spotlight-card/spotlight-card.js +53 -0
  277. package/dist/components/stat-card/stat-card.js +37 -39
  278. package/dist/components/state-badge-overlay/state-badge-overlay.js +5 -5
  279. package/dist/components/static-code/static-code-copy.js +5 -10
  280. package/dist/components/status-board/status-board.js +21 -23
  281. package/dist/components/status-indicator/status-indicator.js +38 -40
  282. package/dist/components/sticky-metric/sticky-metric.js +58 -60
  283. package/dist/components/story-map/story-map.js +66 -60
  284. package/dist/components/subscription-card/subscription-card.js +68 -70
  285. package/dist/components/switch/switch.js +6 -3
  286. package/dist/components/table/table.js +47 -16
  287. package/dist/components/table-of-contents-panel/table-of-contents-panel.js +7 -18
  288. package/dist/components/tabs/tabs.js +2 -2
  289. package/dist/components/tag-group/index.js +8 -0
  290. package/dist/components/tag-group/tag-group.js +127 -0
  291. package/dist/components/tags-input/tags-input.js +59 -60
  292. package/dist/components/terminal/terminal.js +7 -15
  293. package/dist/components/text-animate/index.js +6 -0
  294. package/dist/components/text-animate/text-animate.js +129 -0
  295. package/dist/components/text-field/index.js +4 -0
  296. package/dist/components/text-field/text-field.js +59 -0
  297. package/dist/components/text-reveal/index.js +4 -0
  298. package/dist/components/text-reveal/text-reveal.js +90 -0
  299. package/dist/components/text-shimmer/index.js +4 -0
  300. package/dist/components/text-shimmer/text-shimmer.js +33 -0
  301. package/dist/components/textarea/textarea.js +17 -16
  302. package/dist/components/thinking-block/thinking-block.js +1 -1
  303. package/dist/components/thread-bubble/thread-bubble.js +51 -53
  304. package/dist/components/threshold-ring/threshold-ring.js +76 -78
  305. package/dist/components/ticker-tape/ticker-tape.js +47 -46
  306. package/dist/components/tilt-card/index.js +4 -0
  307. package/dist/components/tilt-card/tilt-card.js +70 -0
  308. package/dist/components/time-field/index.js +4 -0
  309. package/dist/components/time-field/time-field.js +42 -0
  310. package/dist/components/time-picker/index.js +4 -0
  311. package/dist/components/time-picker/time-picker.js +113 -0
  312. package/dist/components/timeline/timeline.js +70 -66
  313. package/dist/components/timeline-scrubber/timeline-scrubber.js +5 -3
  314. package/dist/components/tldr-section/tldr-section.js +9 -6
  315. package/dist/components/toast/toast.js +32 -11
  316. package/dist/components/toggle/toggle.js +8 -3
  317. package/dist/components/toggle-group/toggle-group.js +20 -6
  318. package/dist/components/toolbar/index.js +8 -0
  319. package/dist/components/toolbar/toolbar.js +87 -0
  320. package/dist/components/tooltip/tooltip.js +7 -3
  321. package/dist/components/top-bar/top-bar.js +30 -24
  322. package/dist/components/tour/tour.js +8 -2
  323. package/dist/components/transaction-list/transaction-list.js +66 -54
  324. package/dist/components/tree-view/tree-view.js +72 -76
  325. package/dist/components/tutorial-card/tutorial-card.js +1 -1
  326. package/dist/components/tutorial-complete/tutorial-complete.js +2 -2
  327. package/dist/components/tutorial-mdx/tutorial-mdx.js +14 -14
  328. package/dist/components/typewriter/index.js +4 -0
  329. package/dist/components/typewriter/typewriter.js +71 -0
  330. package/dist/components/typography/index.js +26 -0
  331. package/dist/components/typography/typography.js +173 -0
  332. package/dist/components/usage-breakdown/usage-breakdown.js +38 -39
  333. package/dist/components/viewport-bookmarks/viewport-bookmarks.js +5 -5
  334. package/dist/components/wallet-card/wallet-card.js +56 -58
  335. package/dist/components/watchlist/watchlist.js +47 -52
  336. package/dist/components/workspace-switcher/workspace-switcher.js +58 -52
  337. package/dist/components/world-breadcrumbs/world-breadcrumbs.js +43 -45
  338. package/dist/components/world-clock-bar/world-clock-bar.js +34 -61
  339. package/dist/components/zoom-hud/zoom-hud.js +56 -51
  340. package/dist/index.d.ts +6186 -3946
  341. package/dist/index.js +15 -0
  342. package/dist/lib/format.js +14 -0
  343. package/dist/lib/use-body-scroll-lock.js +30 -0
  344. package/dist/lib/use-escape-key.js +24 -0
  345. package/dist/lib/use-live-date.js +26 -0
  346. package/dist/lib/use-theme-preset.js +1 -0
  347. package/package.json +8 -6
  348. package/styles.css +57 -0
package/CHANGELOG.md CHANGED
@@ -30,6 +30,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
30
30
  - **Time navigation** — `TimelineScrubber`, `PlaybackGhost`, `BottomActivityStrip`, `RunTimeline`.
31
31
  - Total component count: **225** (up from 140).
32
32
 
33
+ - **OKLCH theming system** — color tokens migrated to the OKLCH color space, with 13 runtime theme presets (`default`, `matrix`, `dracula`, `synthwave`, `tron`, `cyberpunk`, `nord`, `claude`, `chatgpt`, `gemini`, `dusk`, `cyberlime`, `aura`). New public theme exports from `@vllnt/ui`: `THEME_PRESETS`, `DEFAULT_THEME_PRESET`, `CUSTOM_THEME_NAME`, `isThemePresetName`, the `ThemePreset` and `ThemePresetName` types, plus the `useThemePreset` hook (with `UseThemePresetResult`), `setThemePreset`, and `setCustomTheme` for runtime preset switching and user-supplied custom themes.
34
+
33
35
  - **A11y heading-level override** — every title-bearing component (`ProfileSection`, `FAQ`, `Slideshow`, `WorldClockBar`, `TableOfContentsPanel`, `TableOfContents`, `KeyboardShortcutsHelp`, `Watchlist`, `OrderBook`, `HorizontalScrollRow`, `MarketTreemap`, `ActivityHeatmap`, `Glossary`, `StatusBoard`, `CodePlayground`, `Comparison`, `Quiz`, `Exercise`, `ShareSection`, `CompletionDialog`, `Checklist`, `LearningObjectives`, `CandlestickChart`, `StepByStep`) accepts an `as` prop (`"h1"`–`"h6"`); multi-title components (`ContentIntro`, `TutorialComplete`) expose `titleAs` + `tocLabelAs` / `sectionLabelAs`. Defaults preserve existing heading tags. `HeadingTag` is re-exported from `@vllnt/ui`.
34
36
 
35
37
  ### Changed
@@ -1,16 +1,10 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import {
4
- createContext,
5
- useCallback,
6
- useContext,
7
- useMemo,
8
- useState
9
- } from "react";
3
+ import { createContext, use, useCallback, useMemo, useState } from "react";
10
4
  import { cn } from "../../lib/utils";
11
5
  const AccordionContext = createContext(null);
12
6
  function useAccordionContext() {
13
- const context = useContext(AccordionContext);
7
+ const context = use(AccordionContext);
14
8
  if (!context) {
15
9
  throw new Error("AccordionItem must be used within an Accordion");
16
10
  }
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import * as React from "react";
2
+ import { normalizeDate } from "../../lib/format";
3
3
  import { cn } from "../../lib/utils";
4
4
  const WEEKDAY_LABELS = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
5
5
  const VISIBLE_DAY_LABELS = /* @__PURE__ */ new Set(["Mon", "Wed", "Fri"]);
@@ -10,12 +10,6 @@ const LEVEL_CLASS_NAMES = [
10
10
  "bg-emerald-500/65",
11
11
  "bg-emerald-500"
12
12
  ];
13
- function normalizeDate(input) {
14
- if (input instanceof Date) {
15
- return new Date(input.getTime());
16
- }
17
- return new Date(input);
18
- }
19
13
  function toUtcDate(date) {
20
14
  return new Date(
21
15
  Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate())
@@ -143,28 +137,27 @@ function HeatmapGrid({
143
137
  ] })
144
138
  ] });
145
139
  }
146
- const ActivityHeatmap = React.forwardRef(
147
- ({
148
- as: Heading = "h2",
149
- className,
150
- data,
151
- description,
152
- endDate = /* @__PURE__ */ new Date(),
153
- title = "Activity heatmap",
154
- weeks = 12,
155
- ...props
156
- }, ref) => {
157
- const normalizedEndDate = normalizeDate(endDate);
158
- const gridData = getGridData(data, normalizedEndDate, weeks);
159
- return /* @__PURE__ */ jsxs("div", { className: cn("space-y-4", className), ref, ...props, children: [
160
- /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
161
- /* @__PURE__ */ jsx(Heading, { className: "text-lg font-semibold tracking-tight", children: title }),
162
- description ? /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: description }) : null
163
- ] }),
164
- /* @__PURE__ */ jsx("div", { className: "overflow-x-auto rounded-lg border bg-card p-4 shadow-sm", children: /* @__PURE__ */ jsx(HeatmapGrid, { gridData, weeks }) })
165
- ] });
166
- }
167
- );
140
+ const ActivityHeatmap = ({
141
+ as: Heading = "h2",
142
+ className,
143
+ data,
144
+ description,
145
+ endDate = /* @__PURE__ */ new Date(),
146
+ ref,
147
+ title = "Activity heatmap",
148
+ weeks = 12,
149
+ ...props
150
+ }) => {
151
+ const normalizedEndDate = normalizeDate(endDate);
152
+ const gridData = getGridData(data, normalizedEndDate, weeks);
153
+ return /* @__PURE__ */ jsxs("div", { className: cn("space-y-4", className), ref, ...props, children: [
154
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
155
+ /* @__PURE__ */ jsx(Heading, { className: "text-lg font-semibold tracking-tight", children: title }),
156
+ description ? /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: description }) : null
157
+ ] }),
158
+ /* @__PURE__ */ jsx("div", { className: "overflow-x-auto rounded-lg border bg-card p-4 shadow-sm", children: /* @__PURE__ */ jsx(HeatmapGrid, { gridData, weeks }) })
159
+ ] });
160
+ };
168
161
  ActivityHeatmap.displayName = "ActivityHeatmap";
169
162
  export {
170
163
  ActivityHeatmap
@@ -1,20 +1,20 @@
1
1
  "use client";
2
2
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
- import { forwardRef, useMemo, useState } from "react";
3
+ import { useMemo, useState } from "react";
4
4
  import { ArrowRight, ChevronLeft, ChevronRight } from "lucide-react";
5
5
  import { cn } from "../../lib/utils";
6
6
  import { Avatar, AvatarFallback } from "../avatar/avatar";
7
- import { Badge } from "../badge";
8
- import { Button } from "../button";
7
+ import { Badge } from "../badge/badge";
8
+ import { Button } from "../button/button";
9
9
  import {
10
10
  Card,
11
11
  CardContent,
12
12
  CardDescription,
13
13
  CardHeader,
14
14
  CardTitle
15
- } from "../card";
16
- import { ScrollArea } from "../scroll-area";
17
- import { Separator } from "../separator";
15
+ } from "../card/card";
16
+ import { ScrollArea } from "../scroll-area/scroll-area";
17
+ import { Separator } from "../separator/separator";
18
18
  const toneConfig = {
19
19
  danger: {
20
20
  badgeClassName: "border-destructive/20 bg-destructive/10 text-destructive dark:text-destructive",
@@ -197,60 +197,59 @@ function ActivityLogBody({
197
197
  ] })
198
198
  ] });
199
199
  }
200
- const ActivityLog = forwardRef(
201
- ({
202
- className,
203
- defaultPage = 1,
204
- description,
205
- emptyMessage = "No activity recorded yet.",
206
- items,
207
- onPageChange,
208
- page,
209
- pageSize = 5,
210
- title = "Activity log",
211
- ...props
212
- }, ref) => {
213
- const totalPages = Math.max(1, Math.ceil(items.length / pageSize));
214
- const [uncontrolledPage, setUncontrolledPage] = useState(defaultPage);
215
- const currentPage = Math.min(
216
- Math.max(page ?? uncontrolledPage, 1),
217
- totalPages
218
- );
219
- const pageNumbers = useMemo(
220
- () => buildPageNumbers(currentPage, totalPages),
221
- [currentPage, totalPages]
222
- );
223
- function handlePageChange(nextPage) {
224
- if (page === void 0) {
225
- setUncontrolledPage(nextPage);
226
- }
227
- onPageChange?.(nextPage);
200
+ const ActivityLog = ({
201
+ className,
202
+ defaultPage = 1,
203
+ description,
204
+ emptyMessage = "No activity recorded yet.",
205
+ items,
206
+ onPageChange,
207
+ page,
208
+ pageSize = 5,
209
+ ref,
210
+ title = "Activity log",
211
+ ...props
212
+ }) => {
213
+ const totalPages = Math.max(1, Math.ceil(items.length / pageSize));
214
+ const [uncontrolledPage, setUncontrolledPage] = useState(defaultPage);
215
+ const currentPage = Math.min(
216
+ Math.max(page ?? uncontrolledPage, 1),
217
+ totalPages
218
+ );
219
+ const pageNumbers = useMemo(
220
+ () => buildPageNumbers(currentPage, totalPages),
221
+ [currentPage, totalPages]
222
+ );
223
+ function handlePageChange(nextPage) {
224
+ if (page === void 0) {
225
+ setUncontrolledPage(nextPage);
228
226
  }
229
- return /* @__PURE__ */ jsxs(Card, { className: cn("w-full", className), ref, ...props, children: [
230
- /* @__PURE__ */ jsx(
231
- ActivityLogHeader,
232
- {
233
- currentPage,
234
- description,
235
- title,
236
- totalPages
237
- }
238
- ),
239
- /* @__PURE__ */ jsx(CardContent, { className: "space-y-4", children: /* @__PURE__ */ jsx(
240
- ActivityLogBody,
241
- {
242
- currentPage,
243
- emptyMessage,
244
- items,
245
- onPageChange: handlePageChange,
246
- pageNumbers,
247
- pageSize,
248
- totalPages
249
- }
250
- ) })
251
- ] });
227
+ onPageChange?.(nextPage);
252
228
  }
253
- );
229
+ return /* @__PURE__ */ jsxs(Card, { className: cn("w-full", className), ref, ...props, children: [
230
+ /* @__PURE__ */ jsx(
231
+ ActivityLogHeader,
232
+ {
233
+ currentPage,
234
+ description,
235
+ title,
236
+ totalPages
237
+ }
238
+ ),
239
+ /* @__PURE__ */ jsx(CardContent, { className: "space-y-4", children: /* @__PURE__ */ jsx(
240
+ ActivityLogBody,
241
+ {
242
+ currentPage,
243
+ emptyMessage,
244
+ items,
245
+ onPageChange: handlePageChange,
246
+ pageNumbers,
247
+ pageSize,
248
+ totalPages
249
+ }
250
+ ) })
251
+ ] });
252
+ };
254
253
  ActivityLog.displayName = "ActivityLog";
255
254
  export {
256
255
  ActivityLog
@@ -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
@@ -59,53 +58,58 @@ const DEFAULT_LABELS = {
59
58
  elapsed: "Elapsed",
60
59
  expand: "Show details"
61
60
  };
61
+ const AgentActivityLabelsContext = createContext(DEFAULT_LABELS);
62
62
  const ACTIVITY_LIVE_REGION_ROLE = {
63
63
  completed: "status",
64
64
  error: "status",
65
65
  idle: "status",
66
66
  running: "log"
67
67
  };
68
- const AgentActivity = forwardRef(
69
- (props, ref) => {
70
- const {
71
- children,
72
- className,
73
- elapsed,
74
- labels,
75
- status = "idle",
76
- ...rest
77
- } = props;
78
- const resolvedLabels = { ...DEFAULT_LABELS, ...labels };
79
- return /* @__PURE__ */ jsxs(
80
- "section",
81
- {
82
- "aria-live": status === "running" ? "polite" : "off",
83
- className: cn(
84
- "flex flex-col gap-3 rounded-2xl border bg-background p-4",
85
- className
86
- ),
87
- "data-status": status,
88
- ref,
89
- role: ACTIVITY_LIVE_REGION_ROLE[status],
90
- ...rest,
91
- children: [
92
- /* @__PURE__ */ jsxs("header", { className: "flex items-center justify-between gap-3", children: [
93
- /* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold tracking-tight text-foreground", children: resolvedLabels.activity }),
94
- elapsed ? /* @__PURE__ */ jsx(
95
- "span",
96
- {
97
- "aria-label": resolvedLabels.elapsed,
98
- className: "text-xs font-mono text-muted-foreground",
99
- children: elapsed
100
- }
101
- ) : null
102
- ] }),
103
- /* @__PURE__ */ jsx("ol", { className: "flex flex-col gap-2", children })
104
- ]
105
- }
106
- );
107
- }
108
- );
68
+ const AgentActivity = ({
69
+ ref,
70
+ ...props
71
+ }) => {
72
+ const {
73
+ children,
74
+ className,
75
+ elapsed,
76
+ labels,
77
+ status = "idle",
78
+ ...rest
79
+ } = props;
80
+ const resolvedLabels = useMemo(
81
+ () => ({ ...DEFAULT_LABELS, ...labels }),
82
+ [labels]
83
+ );
84
+ return /* @__PURE__ */ jsx(AgentActivityLabelsContext.Provider, { value: resolvedLabels, children: /* @__PURE__ */ jsxs(
85
+ "section",
86
+ {
87
+ "aria-live": status === "running" ? "polite" : "off",
88
+ className: cn(
89
+ "flex flex-col gap-3 rounded-2xl border bg-background p-4",
90
+ className
91
+ ),
92
+ "data-status": status,
93
+ ref,
94
+ role: ACTIVITY_LIVE_REGION_ROLE[status],
95
+ ...rest,
96
+ children: [
97
+ /* @__PURE__ */ jsxs("header", { className: "flex items-center justify-between gap-3", children: [
98
+ /* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold tracking-tight text-foreground", children: resolvedLabels.activity }),
99
+ elapsed ? /* @__PURE__ */ jsx(
100
+ "span",
101
+ {
102
+ "aria-label": resolvedLabels.elapsed,
103
+ className: "text-xs font-mono text-muted-foreground",
104
+ children: elapsed
105
+ }
106
+ ) : null
107
+ ] }),
108
+ /* @__PURE__ */ jsx("ol", { className: "flex flex-col gap-2", children })
109
+ ]
110
+ }
111
+ ) });
112
+ };
109
113
  AgentActivity.displayName = "AgentActivity";
110
114
  function getDisplayName(value) {
111
115
  if (value !== null && (typeof value === "object" || typeof value === "function") && "displayName" in value && typeof value.displayName === "string") {
@@ -178,70 +182,74 @@ function StepRow({
178
182
  ) : null
179
183
  ] });
180
184
  }
181
- const AgentStep = forwardRef(
182
- (props, ref) => {
183
- const {
184
- children,
185
- className,
186
- defaultOpen = true,
187
- icon,
188
- status,
189
- ...rest
190
- } = props;
191
- const split = useMemo(() => splitChildren(children), [children]);
192
- const palette = STATUS_CLASSES[status];
193
- const hasDetails = split.body.length > 0;
194
- const [open, setOpen] = useState(defaultOpen);
195
- const detailsId = useId();
196
- const handleToggle = useCallback(() => {
197
- setOpen((value) => !value);
198
- }, []);
199
- const contextValue = useMemo(
200
- () => ({ status }),
201
- [status]
202
- );
203
- const resolvedIcon = icon ?? DEFAULT_STATUS_ICON[status];
204
- return /* @__PURE__ */ jsx(
205
- "li",
206
- {
207
- className: cn(
208
- "rounded-xl border ring-1",
209
- palette.rowClass,
210
- palette.ringClass,
211
- className
185
+ const AgentStep = ({
186
+ ref,
187
+ ...props
188
+ }) => {
189
+ const {
190
+ children,
191
+ className,
192
+ defaultOpen = true,
193
+ icon,
194
+ status,
195
+ ...rest
196
+ } = props;
197
+ const split = useMemo(() => splitChildren(children), [children]);
198
+ const palette = STATUS_CLASSES[status];
199
+ const hasDetails = split.body.length > 0;
200
+ const [open, setOpen] = useState(defaultOpen);
201
+ const detailsId = useId();
202
+ const labels = use(AgentActivityLabelsContext);
203
+ const handleToggle = useCallback(() => {
204
+ setOpen((value) => !value);
205
+ }, []);
206
+ const contextValue = useMemo(() => ({ status }), [status]);
207
+ const resolvedIcon = icon ?? DEFAULT_STATUS_ICON[status];
208
+ return /* @__PURE__ */ jsx(
209
+ "li",
210
+ {
211
+ className: cn(
212
+ "rounded-xl border ring-1",
213
+ palette.rowClass,
214
+ palette.ringClass,
215
+ className
216
+ ),
217
+ "data-status": status,
218
+ ref,
219
+ ...rest,
220
+ children: /* @__PURE__ */ jsxs(StepContext.Provider, { value: contextValue, children: [
221
+ /* @__PURE__ */ jsx(
222
+ StepRow,
223
+ {
224
+ detailsId,
225
+ hasDetails,
226
+ header: split.header,
227
+ icon: resolvedIcon,
228
+ iconClass: palette.iconClass,
229
+ labels,
230
+ onToggle: handleToggle,
231
+ open
232
+ }
212
233
  ),
213
- "data-status": status,
214
- ref,
215
- ...rest,
216
- children: /* @__PURE__ */ jsxs(StepContext.Provider, { value: contextValue, children: [
217
- /* @__PURE__ */ jsx(
218
- StepRow,
219
- {
220
- detailsId,
221
- hasDetails,
222
- header: split.header,
223
- icon: resolvedIcon,
224
- iconClass: palette.iconClass,
225
- labels: DEFAULT_LABELS,
226
- onToggle: handleToggle,
227
- open
228
- }
229
- ),
230
- hasDetails && open ? /* @__PURE__ */ jsx(
231
- "div",
232
- {
233
- className: "border-t border-border/60 px-3 py-2 text-xs",
234
- id: detailsId,
235
- children: /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2 pl-8", children: split.body })
236
- }
237
- ) : null
238
- ] })
239
- }
240
- );
241
- }
242
- );
234
+ hasDetails ? /* @__PURE__ */ jsx(
235
+ "div",
236
+ {
237
+ className: "border-t border-border/60 px-3 py-2 text-xs",
238
+ hidden: !open,
239
+ id: detailsId,
240
+ children: /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2 pl-8", children: split.body })
241
+ }
242
+ ) : null
243
+ ] })
244
+ }
245
+ );
246
+ };
243
247
  AgentStep.displayName = "AgentStep";
244
- const AgentStepTitle = forwardRef(({ className, ...rest }, ref) => /* @__PURE__ */ jsx(
248
+ const AgentStepTitle = ({
249
+ className,
250
+ ref,
251
+ ...rest
252
+ }) => /* @__PURE__ */ jsx(
245
253
  "p",
246
254
  {
247
255
  className: cn(
@@ -251,18 +259,28 @@ const AgentStepTitle = forwardRef(({ className, ...rest }, ref) => /* @__PURE__
251
259
  ref,
252
260
  ...rest
253
261
  }
254
- ));
262
+ );
255
263
  AgentStepTitle.displayName = "AgentStepTitle";
256
- const AgentStepDuration = forwardRef(({ className, ...rest }, ref) => /* @__PURE__ */ jsx(
264
+ const AgentStepDuration = ({
265
+ className,
266
+ ref,
267
+ ...rest
268
+ }) => /* @__PURE__ */ jsx(
257
269
  "span",
258
270
  {
259
271
  className: cn("font-mono text-xs text-muted-foreground", className),
260
272
  ref,
261
273
  ...rest
262
274
  }
263
- ));
275
+ );
264
276
  AgentStepDuration.displayName = "AgentStepDuration";
265
- const AgentStepProgress = forwardRef(({ className, label = "Step progress", value, ...rest }, ref) => {
277
+ const AgentStepProgress = ({
278
+ className,
279
+ label = "Step progress",
280
+ ref,
281
+ value,
282
+ ...rest
283
+ }) => {
266
284
  const clamped = Math.max(0, Math.min(100, value));
267
285
  return /* @__PURE__ */ jsx(
268
286
  "div",
@@ -284,21 +302,23 @@ const AgentStepProgress = forwardRef(({ className, label = "Step progress", valu
284
302
  )
285
303
  }
286
304
  );
287
- });
305
+ };
288
306
  AgentStepProgress.displayName = "AgentStepProgress";
289
- const AgentStepDetail = forwardRef(
290
- ({ className, ...rest }, ref) => /* @__PURE__ */ jsx(
291
- "div",
292
- {
293
- className: cn("text-xs text-muted-foreground", className),
294
- ref,
295
- ...rest
296
- }
297
- )
307
+ const AgentStepDetail = ({
308
+ className,
309
+ ref,
310
+ ...rest
311
+ }) => /* @__PURE__ */ jsx(
312
+ "div",
313
+ {
314
+ className: cn("text-xs text-muted-foreground", className),
315
+ ref,
316
+ ...rest
317
+ }
298
318
  );
299
319
  AgentStepDetail.displayName = "AgentStepDetail";
300
320
  function useAgentStepStatus() {
301
- return useContext(StepContext).status;
321
+ return use(StepContext).status;
302
322
  }
303
323
  export {
304
324
  AgentActivity,