@hanzo/ui 4.5.3 → 4.6.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 (419) hide show
  1. package/README-MCP.md +3 -3
  2. package/README.md +229 -0
  3. package/assets/ai-icons.tsx +207 -0
  4. package/assets/crypto.tsx +33 -0
  5. package/assets/file-type-icon.tsx +66 -0
  6. package/assets/file.tsx +45 -0
  7. package/assets/general.tsx +2318 -0
  8. package/assets/hanzo-logo.svg +9 -0
  9. package/assets/hanzo-logo.tsx +15 -0
  10. package/assets/index.ts +8 -0
  11. package/assets/index.tsx +4 -0
  12. package/assets/llm-provider.tsx +1094 -0
  13. package/bin/create-registry.js +1 -1
  14. package/bin/test-mcp.sh +1 -1
  15. package/bin/update-registry.js +2 -2
  16. package/blocks/components/content.tsx +1 -1
  17. package/blocks/components/grid-block/index.tsx +1 -1
  18. package/blocks/components/screenful-block/content.tsx +1 -1
  19. package/blocks/components/screenful-block/poster-background.tsx +1 -1
  20. package/components/index.ts +56 -0
  21. package/dist/button.d.ts +1 -0
  22. package/dist/button.js +1 -0
  23. package/dist/hooks/index.d.ts +7 -0
  24. package/dist/hooks/index.js +7 -0
  25. package/dist/hooks/use-click-away.d.ts +2 -0
  26. package/dist/hooks/use-click-away.js +23 -0
  27. package/dist/hooks/use-combined-refs.d.ts +3 -0
  28. package/dist/hooks/use-combined-refs.js +18 -0
  29. package/dist/hooks/use-copy-clipboard.d.ts +9 -0
  30. package/dist/hooks/use-copy-clipboard.js +21 -0
  31. package/dist/hooks/use-debounce.d.ts +1 -0
  32. package/dist/hooks/use-debounce.js +13 -0
  33. package/dist/hooks/use-fill-ids.d.ts +8 -0
  34. package/dist/hooks/use-fill-ids.js +20 -0
  35. package/dist/hooks/use-map.d.ts +1 -0
  36. package/dist/hooks/use-map.js +20 -0
  37. package/dist/hooks/use-measure.d.ts +8 -0
  38. package/dist/hooks/use-measure.js +25 -0
  39. package/dist/hooks/use-reverse-video-playback.d.ts +1 -0
  40. package/dist/hooks/use-reverse-video-playback.js +41 -0
  41. package/dist/hooks/use-scroll-restoration.d.ts +8 -0
  42. package/dist/hooks/use-scroll-restoration.js +36 -0
  43. package/dist/mcp/enhanced-server.js +3 -3
  44. package/dist/mcp/index.js +1 -1
  45. package/dist/registry/api.d.ts +1 -1
  46. package/dist/registry/api.js +3 -4
  47. package/dist/registry/index.d.ts +348 -4
  48. package/dist/registry/index.js +3 -3
  49. package/dist/utils.d.ts +1 -0
  50. package/dist/utils.js +1 -0
  51. package/helpers/file.ts +33 -0
  52. package/helpers/memoization.ts +40 -0
  53. package/package.json +27 -6
  54. package/primitives/accordion.tsx +53 -45
  55. package/primitives/alert-dialog.tsx +185 -0
  56. package/primitives/alert.tsx +74 -0
  57. package/primitives/apply-typography.tsx +1 -1
  58. package/primitives/avatar.tsx +37 -29
  59. package/primitives/background-beams.tsx +142 -0
  60. package/primitives/badge.tsx +27 -19
  61. package/primitives/breadcrumb.tsx +77 -62
  62. package/primitives/button.tsx +69 -72
  63. package/primitives/card.tsx +73 -59
  64. package/primitives/chat/chat-input-area.tsx +87 -0
  65. package/primitives/chat/chat-input.tsx +71 -0
  66. package/primitives/chat/files-preview.tsx +330 -0
  67. package/primitives/chat/index.ts +6 -0
  68. package/primitives/chat/json-form.tsx +8 -0
  69. package/primitives/chat/message-list.tsx +307 -0
  70. package/primitives/chat/message.tsx +569 -0
  71. package/primitives/chat/sqlite-preview.tsx +215 -0
  72. package/primitives/checkbox.tsx +18 -19
  73. package/primitives/collapsible.tsx +9 -0
  74. package/primitives/command.tsx +75 -83
  75. package/primitives/context-menu.tsx +115 -109
  76. package/primitives/copy-to-clipboard-icon.tsx +60 -0
  77. package/primitives/dialog-video-controller.tsx +1 -1
  78. package/primitives/dialog.tsx +111 -145
  79. package/primitives/dot-pattern.tsx +57 -0
  80. package/primitives/dots-loader.tsx +13 -0
  81. package/primitives/drawer.tsx +59 -87
  82. package/primitives/dropdown-menu.tsx +199 -0
  83. package/primitives/error-message.tsx +19 -0
  84. package/primitives/file-uploader.tsx +200 -0
  85. package/primitives/form.tsx +92 -87
  86. package/primitives/hover-card.tsx +28 -0
  87. package/primitives/icons/github.tsx +1 -1
  88. package/primitives/icons/youtube-logo.tsx +1 -1
  89. package/primitives/index-common.ts +121 -42
  90. package/primitives/index-next.ts +3 -1
  91. package/primitives/input.tsx +115 -20
  92. package/primitives/label.tsx +15 -23
  93. package/primitives/loading-spinner.tsx +1 -1
  94. package/primitives/markdown-preview.tsx +609 -0
  95. package/primitives/mermaid.tsx +196 -0
  96. package/primitives/next/link-element.tsx +1 -1
  97. package/primitives/next/mdx-link.tsx +1 -1
  98. package/primitives/pagination.tsx +117 -0
  99. package/primitives/popover.tsx +20 -25
  100. package/primitives/pretty-json-print.tsx +28 -0
  101. package/primitives/progress.tsx +14 -15
  102. package/primitives/prompt-textarea.tsx +72 -0
  103. package/primitives/qr-code.tsx +112 -0
  104. package/primitives/radio-group.tsx +25 -39
  105. package/primitives/resizable.tsx +47 -0
  106. package/primitives/scroll-area.tsx +35 -25
  107. package/primitives/search-input.tsx +66 -0
  108. package/primitives/select.tsx +62 -109
  109. package/primitives/separator.tsx +22 -26
  110. package/primitives/sheet.tsx +78 -117
  111. package/primitives/skeleton.tsx +13 -16
  112. package/primitives/slider.tsx +50 -60
  113. package/primitives/stepper.tsx +272 -0
  114. package/primitives/switch.tsx +14 -23
  115. package/primitives/table.tsx +65 -77
  116. package/primitives/tabs.tsx +29 -39
  117. package/primitives/text-link.tsx +25 -0
  118. package/primitives/textarea.tsx +61 -0
  119. package/primitives/textfield.tsx +75 -0
  120. package/primitives/toast.tsx +30 -0
  121. package/primitives/toggle-group.tsx +33 -33
  122. package/primitives/toggle.tsx +22 -51
  123. package/primitives/tooltip.tsx +37 -38
  124. package/registry.json +1 -1
  125. package/src/button.ts +1 -0
  126. package/src/hooks/index.ts +7 -0
  127. package/src/hooks/use-click-away.ts +31 -0
  128. package/src/hooks/use-combined-refs.ts +22 -0
  129. package/src/hooks/use-copy-clipboard.ts +30 -0
  130. package/src/hooks/use-debounce.ts +17 -0
  131. package/src/hooks/use-fill-ids.ts +25 -0
  132. package/src/hooks/use-map.ts +26 -0
  133. package/src/hooks/use-measure.ts +42 -0
  134. package/src/hooks/use-reverse-video-playback.ts +43 -0
  135. package/src/hooks/use-scroll-restoration.ts +50 -0
  136. package/{mcp → src/mcp}/README.md +1 -1
  137. package/{mcp → src/mcp}/enhanced-server.ts +2 -2
  138. package/{registry → src/registry}/api.ts +3 -3
  139. package/{registry → src/registry}/index.ts +3 -3
  140. package/src/utils.ts +1 -0
  141. package/style/theme-provider.tsx +1 -1
  142. package/test-imports.mjs +19 -0
  143. package/tsconfig.json +9 -4
  144. package/types/animation-def.ts +1 -1
  145. package/types/button-def.ts +1 -1
  146. package/types/index.ts +1 -1
  147. package/util/blob.ts +28 -0
  148. package/util/copy-to-clipboard.ts +17 -0
  149. package/util/create-shadow-root.ts +22 -0
  150. package/util/date.ts +83 -0
  151. package/util/debounce.ts +11 -0
  152. package/util/file.ts +15 -0
  153. package/util/format-and-abbreviate-as-currency.ts +1 -1
  154. package/util/format-text.ts +33 -0
  155. package/util/index.ts +9 -78
  156. package/util/timing.ts +3 -0
  157. package/util/toasts.tsx +17 -0
  158. package/utils.ts +9 -0
  159. package/dist/blocks/components/accordian-block.d.ts +0 -4
  160. package/dist/blocks/components/accordian-block.jsx +0 -25
  161. package/dist/blocks/components/block-component-props.d.ts +0 -7
  162. package/dist/blocks/components/block-component-props.js +0 -1
  163. package/dist/blocks/components/bullet-cards-block.d.ts +0 -4
  164. package/dist/blocks/components/bullet-cards-block.jsx +0 -25
  165. package/dist/blocks/components/card-block/index.d.ts +0 -6
  166. package/dist/blocks/components/card-block/index.jsx +0 -87
  167. package/dist/blocks/components/card-block/link-out-button.d.ts +0 -6
  168. package/dist/blocks/components/card-block/link-out-button.jsx +0 -4
  169. package/dist/blocks/components/card-block/util.d.ts +0 -4
  170. package/dist/blocks/components/card-block/util.js +0 -6
  171. package/dist/blocks/components/carte-blanche-block/index.d.ts +0 -4
  172. package/dist/blocks/components/carte-blanche-block/index.jsx +0 -82
  173. package/dist/blocks/components/carte-blanche-block/variant-content-left.d.ts +0 -10
  174. package/dist/blocks/components/carte-blanche-block/variant-content-left.jsx +0 -23
  175. package/dist/blocks/components/content.d.ts +0 -10
  176. package/dist/blocks/components/content.jsx +0 -47
  177. package/dist/blocks/components/cta-block.d.ts +0 -12
  178. package/dist/blocks/components/cta-block.jsx +0 -69
  179. package/dist/blocks/components/enh-heading-block.d.ts +0 -7
  180. package/dist/blocks/components/enh-heading-block.jsx +0 -142
  181. package/dist/blocks/components/grid-block/grid-block-mutator.d.ts +0 -5
  182. package/dist/blocks/components/grid-block/grid-block-mutator.js +0 -1
  183. package/dist/blocks/components/grid-block/index.d.ts +0 -9
  184. package/dist/blocks/components/grid-block/index.jsx +0 -56
  185. package/dist/blocks/components/grid-block/mutator-registry.d.ts +0 -3
  186. package/dist/blocks/components/grid-block/mutator-registry.js +0 -5
  187. package/dist/blocks/components/grid-block/table-borders.mutator.d.ts +0 -3
  188. package/dist/blocks/components/grid-block/table-borders.mutator.js +0 -36
  189. package/dist/blocks/components/group-block.d.ts +0 -7
  190. package/dist/blocks/components/group-block.jsx +0 -61
  191. package/dist/blocks/components/heading-block.d.ts +0 -4
  192. package/dist/blocks/components/heading-block.jsx +0 -99
  193. package/dist/blocks/components/image-block.d.ts +0 -7
  194. package/dist/blocks/components/image-block.jsx +0 -69
  195. package/dist/blocks/components/index.d.ts +0 -14
  196. package/dist/blocks/components/index.js +0 -13
  197. package/dist/blocks/components/screenful-block/content.d.ts +0 -8
  198. package/dist/blocks/components/screenful-block/content.jsx +0 -71
  199. package/dist/blocks/components/screenful-block/index.d.ts +0 -12
  200. package/dist/blocks/components/screenful-block/index.jsx +0 -57
  201. package/dist/blocks/components/screenful-block/poster-background.d.ts +0 -7
  202. package/dist/blocks/components/screenful-block/poster-background.jsx +0 -14
  203. package/dist/blocks/components/screenful-block/video-background.d.ts +0 -8
  204. package/dist/blocks/components/screenful-block/video-background.jsx +0 -20
  205. package/dist/blocks/components/space-block.d.ts +0 -4
  206. package/dist/blocks/components/space-block.jsx +0 -42
  207. package/dist/blocks/components/video-block.d.ts +0 -9
  208. package/dist/blocks/components/video-block.jsx +0 -83
  209. package/dist/blocks/def/accordian-block.d.ts +0 -10
  210. package/dist/blocks/def/accordian-block.js +0 -2
  211. package/dist/blocks/def/block.d.ts +0 -4
  212. package/dist/blocks/def/block.js +0 -1
  213. package/dist/blocks/def/bullet-cards-block.d.ts +0 -17
  214. package/dist/blocks/def/bullet-cards-block.js +0 -1
  215. package/dist/blocks/def/card-block.d.ts +0 -17
  216. package/dist/blocks/def/card-block.js +0 -2
  217. package/dist/blocks/def/carte-blanche-block.d.ts +0 -12
  218. package/dist/blocks/def/carte-blanche-block.js +0 -1
  219. package/dist/blocks/def/cta-block.d.ts +0 -8
  220. package/dist/blocks/def/cta-block.js +0 -1
  221. package/dist/blocks/def/element-block.d.ts +0 -7
  222. package/dist/blocks/def/element-block.js +0 -2
  223. package/dist/blocks/def/enh-heading-block.d.ts +0 -22
  224. package/dist/blocks/def/enh-heading-block.js +0 -1
  225. package/dist/blocks/def/grid-block.d.ts +0 -12
  226. package/dist/blocks/def/grid-block.js +0 -1
  227. package/dist/blocks/def/group-block.d.ts +0 -7
  228. package/dist/blocks/def/group-block.js +0 -1
  229. package/dist/blocks/def/heading-block.d.ts +0 -11
  230. package/dist/blocks/def/heading-block.js +0 -1
  231. package/dist/blocks/def/image-block.d.ts +0 -26
  232. package/dist/blocks/def/image-block.js +0 -1
  233. package/dist/blocks/def/index.d.ts +0 -17
  234. package/dist/blocks/def/index.js +0 -2
  235. package/dist/blocks/def/screenful-block.d.ts +0 -41
  236. package/dist/blocks/def/screenful-block.js +0 -1
  237. package/dist/blocks/def/space-block.d.ts +0 -47
  238. package/dist/blocks/def/space-block.js +0 -8
  239. package/dist/blocks/def/video-block.d.ts +0 -5
  240. package/dist/blocks/def/video-block.js +0 -1
  241. package/dist/blocks/index.d.ts +0 -2
  242. package/dist/blocks/index.js +0 -2
  243. package/dist/primitives/accordion.d.ts +0 -10
  244. package/dist/primitives/accordion.jsx +0 -21
  245. package/dist/primitives/action-button.d.ts +0 -9
  246. package/dist/primitives/action-button.jsx +0 -16
  247. package/dist/primitives/apply-typography.d.ts +0 -7
  248. package/dist/primitives/apply-typography.jsx +0 -38
  249. package/dist/primitives/aspect-ratio.d.ts +0 -3
  250. package/dist/primitives/aspect-ratio.jsx +0 -4
  251. package/dist/primitives/avatar.d.ts +0 -6
  252. package/dist/primitives/avatar.jsx +0 -11
  253. package/dist/primitives/badge.d.ts +0 -9
  254. package/dist/primitives/badge.jsx +0 -18
  255. package/dist/primitives/breadcrumb.d.ts +0 -19
  256. package/dist/primitives/breadcrumb.jsx +0 -27
  257. package/dist/primitives/breakpoint-indicator.d.ts +0 -3
  258. package/dist/primitives/breakpoint-indicator.jsx +0 -14
  259. package/dist/primitives/button.d.ts +0 -12
  260. package/dist/primitives/button.jsx +0 -55
  261. package/dist/primitives/calendar.d.ts +0 -8
  262. package/dist/primitives/calendar.jsx +0 -40
  263. package/dist/primitives/card.d.ts +0 -8
  264. package/dist/primitives/card.jsx +0 -18
  265. package/dist/primitives/carousel.d.ts +0 -18
  266. package/dist/primitives/carousel.jsx +0 -106
  267. package/dist/primitives/checkbox.d.ts +0 -4
  268. package/dist/primitives/checkbox.jsx +0 -15
  269. package/dist/primitives/combobox.d.ts +0 -41
  270. package/dist/primitives/combobox.jsx +0 -77
  271. package/dist/primitives/command.d.ts +0 -17
  272. package/dist/primitives/command.jsx +0 -38
  273. package/dist/primitives/context-menu.d.ts +0 -27
  274. package/dist/primitives/context-menu.jsx +0 -57
  275. package/dist/primitives/dialog-video-controller.d.ts +0 -3
  276. package/dist/primitives/dialog-video-controller.jsx +0 -24
  277. package/dist/primitives/dialog.d.ts +0 -28
  278. package/dist/primitives/dialog.jsx +0 -37
  279. package/dist/primitives/drawer.d.ts +0 -29
  280. package/dist/primitives/drawer.jsx +0 -34
  281. package/dist/primitives/form.d.ts +0 -12
  282. package/dist/primitives/form.jsx +0 -69
  283. package/dist/primitives/icons/github.d.ts +0 -4
  284. package/dist/primitives/icons/github.jsx +0 -6
  285. package/dist/primitives/icons/index.d.ts +0 -4
  286. package/dist/primitives/icons/index.js +0 -4
  287. package/dist/primitives/icons/youtube-logo.d.ts +0 -4
  288. package/dist/primitives/icons/youtube-logo.jsx +0 -39
  289. package/dist/primitives/index-common.d.ts +0 -47
  290. package/dist/primitives/index-common.js +0 -46
  291. package/dist/primitives/index-next.d.ts +0 -2
  292. package/dist/primitives/index-next.js +0 -2
  293. package/dist/primitives/input-otp.d.ts +0 -7
  294. package/dist/primitives/input-otp.jsx +0 -24
  295. package/dist/primitives/input.d.ts +0 -5
  296. package/dist/primitives/input.jsx +0 -11
  297. package/dist/primitives/label.d.ts +0 -5
  298. package/dist/primitives/label.jsx +0 -11
  299. package/dist/primitives/list-adaptor.d.ts +0 -9
  300. package/dist/primitives/list-adaptor.js +0 -1
  301. package/dist/primitives/list-box.d.ts +0 -10
  302. package/dist/primitives/list-box.jsx +0 -14
  303. package/dist/primitives/loading-spinner.d.ts +0 -5
  304. package/dist/primitives/loading-spinner.jsx +0 -8
  305. package/dist/primitives/navigation-menu.d.ts +0 -12
  306. package/dist/primitives/navigation-menu.jsx +0 -38
  307. package/dist/primitives/next/image.d.ts +0 -11
  308. package/dist/primitives/next/image.jsx +0 -42
  309. package/dist/primitives/next/index.d.ts +0 -7
  310. package/dist/primitives/next/index.js +0 -7
  311. package/dist/primitives/next/inline-icon.d.ts +0 -13
  312. package/dist/primitives/next/inline-icon.jsx +0 -15
  313. package/dist/primitives/next/link-element.d.ts +0 -23
  314. package/dist/primitives/next/link-element.jsx +0 -56
  315. package/dist/primitives/next/mdx-link.d.ts +0 -3
  316. package/dist/primitives/next/mdx-link.jsx +0 -12
  317. package/dist/primitives/next/media-stack.d.ts +0 -8
  318. package/dist/primitives/next/media-stack.jsx +0 -28
  319. package/dist/primitives/next/nav-items.d.ts +0 -10
  320. package/dist/primitives/next/nav-items.jsx +0 -24
  321. package/dist/primitives/next/youtube-embed.d.ts +0 -11
  322. package/dist/primitives/next/youtube-embed.jsx +0 -23
  323. package/dist/primitives/popover.d.ts +0 -9
  324. package/dist/primitives/popover.jsx +0 -18
  325. package/dist/primitives/progress.d.ts +0 -4
  326. package/dist/primitives/progress.jsx +0 -9
  327. package/dist/primitives/radio-group.d.ts +0 -7
  328. package/dist/primitives/radio-group.jsx +0 -18
  329. package/dist/primitives/scroll-area.d.ts +0 -5
  330. package/dist/primitives/scroll-area.jsx +0 -19
  331. package/dist/primitives/select.d.ts +0 -13
  332. package/dist/primitives/select.jsx +0 -62
  333. package/dist/primitives/separator.d.ts +0 -4
  334. package/dist/primitives/separator.jsx +0 -7
  335. package/dist/primitives/sheet.d.ts +0 -30
  336. package/dist/primitives/sheet.jsx +0 -56
  337. package/dist/primitives/skeleton.d.ts +0 -4
  338. package/dist/primitives/skeleton.jsx +0 -3
  339. package/dist/primitives/slider.d.ts +0 -9
  340. package/dist/primitives/slider.jsx +0 -30
  341. package/dist/primitives/sonner.d.ts +0 -5
  342. package/dist/primitives/sonner.jsx +0 -16
  343. package/dist/primitives/step-indicator.d.ts +0 -9
  344. package/dist/primitives/step-indicator.jsx +0 -23
  345. package/dist/primitives/switch.d.ts +0 -6
  346. package/dist/primitives/switch.jsx +0 -14
  347. package/dist/primitives/table.d.ts +0 -10
  348. package/dist/primitives/table.jsx +0 -21
  349. package/dist/primitives/tabs.d.ts +0 -7
  350. package/dist/primitives/tabs.jsx +0 -18
  351. package/dist/primitives/text-area.d.ts +0 -5
  352. package/dist/primitives/text-area.jsx +0 -9
  353. package/dist/primitives/toggle-group.d.ts +0 -14
  354. package/dist/primitives/toggle-group.jsx +0 -28
  355. package/dist/primitives/toggle.d.ts +0 -14
  356. package/dist/primitives/toggle.jsx +0 -52
  357. package/dist/primitives/tooltip.d.ts +0 -11
  358. package/dist/primitives/tooltip.jsx +0 -18
  359. package/dist/primitives/video-player.d.ts +0 -6
  360. package/dist/primitives/video-player.jsx +0 -8
  361. package/dist/style/theme-provider.d.ts +0 -4
  362. package/dist/style/theme-provider.jsx +0 -11
  363. package/dist/tailwind/fontFamily.tailwind.d.ts +0 -8
  364. package/dist/tailwind/fontFamily.tailwind.js +0 -7
  365. package/dist/tailwind/fontSize.tailwind.d.ts +0 -36
  366. package/dist/tailwind/fontSize.tailwind.js +0 -13
  367. package/dist/tailwind/index.d.ts +0 -3
  368. package/dist/tailwind/index.js +0 -2
  369. package/dist/tailwind/screens.tailwind.d.ts +0 -9
  370. package/dist/tailwind/screens.tailwind.js +0 -8
  371. package/dist/tailwind/tw-font-desc.d.ts +0 -6
  372. package/dist/tailwind/tw-font-desc.js +0 -6
  373. package/dist/types/animation-def.d.ts +0 -2
  374. package/dist/types/animation-def.js +0 -1
  375. package/dist/types/breakpoints.d.ts +0 -4
  376. package/dist/types/breakpoints.js +0 -4
  377. package/dist/types/bullet-item.d.ts +0 -6
  378. package/dist/types/bullet-item.js +0 -2
  379. package/dist/types/button-def.d.ts +0 -29
  380. package/dist/types/button-def.js +0 -2
  381. package/dist/types/dimensions.d.ts +0 -5
  382. package/dist/types/dimensions.js +0 -1
  383. package/dist/types/grid-def.d.ts +0 -36
  384. package/dist/types/grid-def.js +0 -33
  385. package/dist/types/image-def.d.ts +0 -27
  386. package/dist/types/image-def.js +0 -1
  387. package/dist/types/index.d.ts +0 -13
  388. package/dist/types/index.js +0 -2
  389. package/dist/types/link-def.d.ts +0 -44
  390. package/dist/types/link-def.js +0 -1
  391. package/dist/types/media-stack-def.d.ts +0 -25
  392. package/dist/types/media-stack-def.js +0 -1
  393. package/dist/types/t-shirt-size.d.ts +0 -2
  394. package/dist/types/t-shirt-size.js +0 -1
  395. package/dist/types/tshirt-dimensions.d.ts +0 -12
  396. package/dist/types/tshirt-dimensions.js +0 -1
  397. package/dist/types/video-def.d.ts +0 -9
  398. package/dist/types/video-def.js +0 -1
  399. package/dist/util/format-and-abbreviate-as-currency.d.ts +0 -11
  400. package/dist/util/format-and-abbreviate-as-currency.js +0 -91
  401. package/dist/util/format-to-max-char.d.ts +0 -5
  402. package/dist/util/format-to-max-char.js +0 -57
  403. package/dist/util/index-client.d.ts +0 -2
  404. package/dist/util/index-client.js +0 -3
  405. package/dist/util/index.d.ts +0 -17
  406. package/dist/util/index.js +0 -41
  407. package/dist/util/number-abbreviate.d.ts +0 -9
  408. package/dist/util/number-abbreviate.js +0 -30
  409. package/dist/util/specifier.d.ts +0 -7
  410. package/dist/util/specifier.js +0 -31
  411. package/dist/util/spread-to-transform.d.ts +0 -7
  412. package/dist/util/spread-to-transform.js +0 -18
  413. package/dist/util/step-animation.d.ts +0 -5
  414. package/dist/util/step-animation.js +0 -60
  415. package/dist/util/two-way-map.d.ts +0 -8
  416. package/dist/util/two-way-map.js +0 -16
  417. /package/{mcp → src/mcp}/index.ts +0 -0
  418. /package/{mcp → src/mcp}/package.json +0 -0
  419. /package/{registry → src/registry}/package.json +0 -0
@@ -16,7 +16,7 @@ const REGISTRY_STYLES = ['default', 'new-york'];
16
16
 
17
17
  // Registry schema
18
18
  const registrySchema = {
19
- "$schema": "https://ui.shadcn.com/schema/registry.json",
19
+ "$schema": "https://ui.hanzo.com/schema/registry.json",
20
20
  "name": "hanzo",
21
21
  "homepage": "https://ui.hanzo.ai",
22
22
  "items": []
package/bin/test-mcp.sh CHANGED
@@ -3,7 +3,7 @@
3
3
  # Test script for verifying the Hanzo UI MCP functionality
4
4
 
5
5
  # Set a test registry URL
6
- export REGISTRY_URL="https://ui.shadcn.com/registry/registry.json"
6
+ export REGISTRY_URL="https://ui.hanzo.com/registry/registry.json"
7
7
 
8
8
  echo "Testing Hanzo UI MCP Server"
9
9
  echo "============================"
@@ -2,7 +2,7 @@
2
2
 
3
3
  /**
4
4
  * This script updates the registry.json file based on components
5
- * found in the registry directory. It's similar to the approach used by shadcn/ui.
5
+ * found in the registry directory. It's similar to the approach used by hanzo/ui.
6
6
  */
7
7
 
8
8
  const fs = require('fs');
@@ -17,7 +17,7 @@ const REGISTRY_STYLES = ['default', 'new-york']; // Add other styles as needed
17
17
 
18
18
  // Schema for registry.json
19
19
  const registrySchema = {
20
- "$schema": "https://ui.shadcn.com/schema/registry.json",
20
+ "$schema": "https://ui.hanzo.com/schema/registry.json",
21
21
  "name": "hanzo",
22
22
  "homepage": "https://ui.hanzo.ai",
23
23
  "items": []
@@ -1,4 +1,4 @@
1
- import React, { type ComponentType, type ReactNode} from 'react'
1
+ import React, { ComponentType, type ReactNode} from 'react'
2
2
 
3
3
  import type * as B from '../def'
4
4
 
@@ -1,4 +1,4 @@
1
- import React, { type PropsWithChildren } from 'react'
1
+ import React, { PropsWithChildren } from 'react'
2
2
 
3
3
  import { cn, containsToken } from '../../../util'
4
4
  import type { GridBlock } from '../../def'
@@ -1,4 +1,4 @@
1
- import React, { type PropsWithChildren } from 'react'
1
+ import React, { PropsWithChildren } from 'react'
2
2
 
3
3
  import type { Block, ScreenfulBlock} from '../../def'
4
4
  import { containsToken, cn } from '../../../util'
@@ -1,4 +1,4 @@
1
- import React, { type PropsWithChildren } from 'react'
1
+ import React, { PropsWithChildren } from 'react'
2
2
 
3
3
  import type { VideoBlock } from '../../def'
4
4
  import { cn } from '../../../util'
@@ -0,0 +1,56 @@
1
+ // Auto-generated component exports
2
+ // This file provides a central import point for all UI components
3
+ // Usage: import { Button, Card, cn } from '@hanzo/ui/components'
4
+
5
+ // Export commonly used utilities
6
+ export { cn } from '../../../app/lib/utils'
7
+
8
+ export * from '../../../app/registry/new-york/ui/accordion'
9
+ export * from '../../../app/registry/new-york/ui/alert-dialog'
10
+ export * from '../../../app/registry/new-york/ui/alert'
11
+ export * from '../../../app/registry/new-york/ui/aspect-ratio'
12
+ export * from '../../../app/registry/new-york/ui/avatar'
13
+ export * from '../../../app/registry/new-york/ui/badge'
14
+ export * from '../../../app/registry/new-york/ui/breadcrumb'
15
+ export * from '../../../app/registry/new-york/ui/button'
16
+ export * from '../../../app/registry/new-york/ui/calendar'
17
+ export * from '../../../app/registry/new-york/ui/card'
18
+ export * from '../../../app/registry/new-york/ui/carousel'
19
+ export * from '../../../app/registry/new-york/ui/chart'
20
+ export * from '../../../app/registry/new-york/ui/checkbox'
21
+ export * from '../../../app/registry/new-york/ui/collapsible'
22
+ export * from '../../../app/registry/new-york/ui/command'
23
+ export * from '../../../app/registry/new-york/ui/context-menu'
24
+ export * from '../../../app/registry/new-york/ui/dialog'
25
+ export * from '../../../app/registry/new-york/ui/drawer'
26
+ export * from '../../../app/registry/new-york/ui/dropdown-menu'
27
+ export * from '../../../app/registry/new-york/ui/form'
28
+ export * from '../../../app/registry/new-york/ui/hover-card'
29
+ export * from '../../../app/registry/new-york/ui/input-otp'
30
+ export * from '../../../app/registry/new-york/ui/input'
31
+ export * from '../../../app/registry/new-york/ui/label'
32
+ export * from '../../../app/registry/new-york/ui/menubar'
33
+ export * from '../../../app/registry/new-york/ui/navigation-menu'
34
+ export * from '../../../app/registry/new-york/ui/pagination'
35
+ export * from '../../../app/registry/new-york/ui/popover'
36
+ export * from '../../../app/registry/new-york/ui/progress'
37
+ export * from '../../../app/registry/new-york/ui/radio-group'
38
+ export * from '../../../app/registry/new-york/ui/resizable'
39
+ export * from '../../../app/registry/new-york/ui/scroll-area'
40
+ export * from '../../../app/registry/new-york/ui/select'
41
+ export * from '../../../app/registry/new-york/ui/separator'
42
+ export * from '../../../app/registry/new-york/ui/sheet'
43
+ export * from '../../../app/registry/new-york/ui/sidebar'
44
+ export * from '../../../app/registry/new-york/ui/skeleton'
45
+ export * from '../../../app/registry/new-york/ui/slider'
46
+ export * from '../../../app/registry/new-york/ui/sonner'
47
+ export * from '../../../app/registry/new-york/ui/switch'
48
+ export * from '../../../app/registry/new-york/ui/table'
49
+ export * from '../../../app/registry/new-york/ui/tabs'
50
+ export * from '../../../app/registry/new-york/ui/textarea'
51
+ export * from '../../../app/registry/new-york/ui/toast'
52
+ export * from '../../../app/registry/new-york/ui/toaster'
53
+ export * from '../../../app/registry/new-york/ui/toggle-group'
54
+ export * from '../../../app/registry/new-york/ui/toggle'
55
+ export * from '../../../app/registry/new-york/ui/tooltip'
56
+ export * from '../../../app/registry/new-york/ui/use-toast'
@@ -0,0 +1 @@
1
+ export * from '../../../app/registry/new-york/ui/button';
package/dist/button.js ADDED
@@ -0,0 +1 @@
1
+ export * from '../../../app/registry/new-york/ui/button';
@@ -0,0 +1,7 @@
1
+ export * from './use-debounce';
2
+ export * from './use-map';
3
+ export * from './use-measure';
4
+ export * from './use-click-away';
5
+ export * from './use-copy-clipboard';
6
+ export * from './use-reverse-video-playback';
7
+ export * from './use-scroll-restoration';
@@ -0,0 +1,7 @@
1
+ export * from './use-debounce';
2
+ export * from './use-map';
3
+ export * from './use-measure';
4
+ export * from './use-click-away';
5
+ export * from './use-copy-clipboard';
6
+ export * from './use-reverse-video-playback';
7
+ export * from './use-scroll-restoration';
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare function useClickAway<T extends Element>(cb: (e: Event) => void): React.RefObject<T | null>;
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ export function useClickAway(cb) {
3
+ const ref = React.useRef(null);
4
+ const refCb = React.useRef(cb);
5
+ React.useLayoutEffect(() => {
6
+ refCb.current = cb;
7
+ });
8
+ React.useEffect(() => {
9
+ const handler = (e) => {
10
+ const element = ref.current;
11
+ if (element && !element.contains(e.target)) {
12
+ refCb.current(e);
13
+ }
14
+ };
15
+ document.addEventListener('mousedown', handler);
16
+ document.addEventListener('touchstart', handler);
17
+ return () => {
18
+ document.removeEventListener('mousedown', handler);
19
+ document.removeEventListener('touchstart', handler);
20
+ };
21
+ }, []);
22
+ return ref;
23
+ }
@@ -0,0 +1,3 @@
1
+ import type React from 'react';
2
+ declare function useCombinedRefs<T>(...refs: React.ForwardedRef<T>[]): React.RefObject<T | null>;
3
+ export { useCombinedRefs };
@@ -0,0 +1,18 @@
1
+ import { useEffect, useRef } from 'react';
2
+ function useCombinedRefs(...refs) {
3
+ const targetRef = useRef(null);
4
+ useEffect(() => {
5
+ refs.forEach((ref) => {
6
+ if (!ref)
7
+ return;
8
+ if (typeof ref === 'function') {
9
+ ref(targetRef.current);
10
+ }
11
+ else {
12
+ ref.current = targetRef.current;
13
+ }
14
+ });
15
+ }, [refs]);
16
+ return targetRef;
17
+ }
18
+ export { useCombinedRefs };
@@ -0,0 +1,9 @@
1
+ type UseCopyClipboardProps = {
2
+ string?: string;
3
+ onCopyClipboard?: () => void;
4
+ };
5
+ export declare const useCopyClipboard: ({ string, onCopyClipboard, }: UseCopyClipboardProps) => {
6
+ isCopied: boolean;
7
+ onCopy: () => Promise<void>;
8
+ };
9
+ export {};
@@ -0,0 +1,21 @@
1
+ import { useState } from 'react';
2
+ import { copyToClipboard } from '../helpers';
3
+ export const useCopyClipboard = ({ string, onCopyClipboard, }) => {
4
+ const [isCopied, setIsCopied] = useState(false);
5
+ let timeout;
6
+ const onCopy = async () => {
7
+ if (!string)
8
+ return;
9
+ const string_ = string.trim();
10
+ if (onCopyClipboard && typeof onCopyClipboard === 'function') {
11
+ onCopyClipboard();
12
+ }
13
+ else {
14
+ await copyToClipboard(string_);
15
+ }
16
+ setIsCopied(true);
17
+ clearTimeout(timeout);
18
+ timeout = setTimeout(() => setIsCopied(false), 1000);
19
+ };
20
+ return { isCopied, onCopy };
21
+ };
@@ -0,0 +1 @@
1
+ export declare function useDebounce(value: string, delay?: number): string;
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ export function useDebounce(value, delay = 500) {
3
+ const [debouncedValue, setDebouncedValue] = React.useState(value);
4
+ React.useEffect(() => {
5
+ const handler = setTimeout(() => {
6
+ setDebouncedValue(value);
7
+ }, delay);
8
+ return () => {
9
+ clearTimeout(handler);
10
+ };
11
+ }, [value, delay]);
12
+ return debouncedValue;
13
+ }
@@ -0,0 +1,8 @@
1
+ export declare const useFillId: (namespace: string) => {
2
+ fill: string;
3
+ id: string;
4
+ };
5
+ export declare const useFillIds: (namespace: string, length: number) => {
6
+ fill: string;
7
+ id: string;
8
+ }[];
@@ -0,0 +1,20 @@
1
+ import { useMemo } from 'react';
2
+ export const useFillId = (namespace) => {
3
+ const id = `lobe-icons-${namespace.toLowerCase()}-fill`;
4
+ return useMemo(() => ({
5
+ fill: `url(#${id})`,
6
+ id,
7
+ }), [namespace]);
8
+ };
9
+ export const useFillIds = (namespace, length) => {
10
+ return useMemo(() => {
11
+ const ids = Array.from({ length }, (_, i) => {
12
+ const id = `lobe-icons-${namespace.toLowerCase()}-fill-${i}`;
13
+ return {
14
+ fill: `url(#${id})`,
15
+ id,
16
+ };
17
+ });
18
+ return ids;
19
+ }, [namespace]);
20
+ };
@@ -0,0 +1 @@
1
+ export declare function useMap<Key, Value>(initialState?: [Key, Value][]): Map<Key, Value>;
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ export function useMap(initialState = []) {
3
+ const mapRef = React.useRef(new Map(initialState));
4
+ const [, reRender] = React.useReducer((x) => x + 1, 0);
5
+ mapRef.current.set = (...args) => {
6
+ Map.prototype.set.apply(mapRef.current, args);
7
+ reRender();
8
+ return mapRef.current;
9
+ };
10
+ mapRef.current.clear = (...args) => {
11
+ Map.prototype.clear.apply(mapRef.current, args);
12
+ reRender();
13
+ };
14
+ mapRef.current.delete = (...args) => {
15
+ const res = Map.prototype.delete.apply(mapRef.current, args);
16
+ reRender();
17
+ return res;
18
+ };
19
+ return mapRef.current;
20
+ }
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ export declare function useMeasure<T extends Element>(): [
3
+ React.RefCallback<T>,
4
+ {
5
+ width: number | null;
6
+ height: number | null;
7
+ }
8
+ ];
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ export function useMeasure() {
3
+ const [dimensions, setDimensions] = React.useState({
4
+ width: null,
5
+ height: null,
6
+ });
7
+ const previousObserver = React.useRef(null);
8
+ const customRef = React.useCallback((node) => {
9
+ if (previousObserver.current) {
10
+ previousObserver.current.disconnect();
11
+ previousObserver.current = null;
12
+ }
13
+ if (node?.nodeType === Node.ELEMENT_NODE) {
14
+ const observer = new ResizeObserver(([entry]) => {
15
+ if (entry && entry.borderBoxSize) {
16
+ const { inlineSize: width, blockSize: height } = entry.borderBoxSize[0];
17
+ setDimensions({ width, height });
18
+ }
19
+ });
20
+ observer.observe(node);
21
+ previousObserver.current = observer;
22
+ }
23
+ }, []);
24
+ return [customRef, dimensions];
25
+ }
@@ -0,0 +1 @@
1
+ export declare const useReverseVideoPlayback: () => import("react").RefObject<HTMLVideoElement>;
@@ -0,0 +1,41 @@
1
+ import { useEffect, useRef, useState } from 'react';
2
+ export const useReverseVideoPlayback = () => {
3
+ const videoRef = useRef(null);
4
+ const [isReversing, setIsReversing] = useState(false);
5
+ const playReverse = () => {
6
+ if (!videoRef.current)
7
+ return;
8
+ const video = videoRef.current;
9
+ const reversePlayback = () => {
10
+ if (video.currentTime <= 0) {
11
+ setIsReversing(false);
12
+ void video.play();
13
+ return;
14
+ }
15
+ video.currentTime -= 0.023;
16
+ requestAnimationFrame(reversePlayback);
17
+ };
18
+ reversePlayback();
19
+ };
20
+ useEffect(() => {
21
+ const videoElement = videoRef.current;
22
+ if (videoElement) {
23
+ const handleVideoEnd = () => {
24
+ if (isReversing) {
25
+ setIsReversing(false);
26
+ videoElement.currentTime = 0;
27
+ void videoElement.play();
28
+ }
29
+ else {
30
+ setIsReversing(true);
31
+ playReverse();
32
+ }
33
+ };
34
+ videoElement.addEventListener('ended', handleVideoEnd);
35
+ return () => {
36
+ videoElement.removeEventListener('ended', handleVideoEnd);
37
+ };
38
+ }
39
+ }, [isReversing]);
40
+ return videoRef;
41
+ };
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ export declare const useScrollRestoration: ({ key, containerRef, scrollTopStateRef, }: {
3
+ key: string;
4
+ containerRef: React.RefObject<HTMLElement | null>;
5
+ scrollTopStateRef: React.RefObject<{
6
+ [key: string]: number;
7
+ } | null>;
8
+ }) => void;
@@ -0,0 +1,36 @@
1
+ import React from 'react';
2
+ export const useScrollRestoration = ({ key, containerRef, scrollTopStateRef, }) => {
3
+ const saveScroll = React.useCallback(() => {
4
+ if (scrollTopStateRef.current) {
5
+ scrollTopStateRef.current[`${key}-scrollTop`] =
6
+ containerRef?.current?.scrollTop ?? 0;
7
+ }
8
+ }, [containerRef, scrollTopStateRef, key]);
9
+ const restoreScroll = React.useCallback(() => {
10
+ if (containerRef.current) {
11
+ containerRef.current.scrollTo({
12
+ top: scrollTopStateRef?.current?.[`${key}-scrollTop`] ?? 0,
13
+ });
14
+ }
15
+ }, [containerRef, key, scrollTopStateRef]);
16
+ React.useLayoutEffect(() => {
17
+ return () => {
18
+ saveScroll();
19
+ };
20
+ }, [saveScroll]);
21
+ React.useEffect(() => {
22
+ // Small delay to ensure content is rendered
23
+ const timeoutId = setTimeout(restoreScroll, 100);
24
+ return () => clearTimeout(timeoutId);
25
+ }, [restoreScroll]);
26
+ React.useEffect(() => {
27
+ restoreScroll();
28
+ }, [restoreScroll]);
29
+ React.useEffect(() => {
30
+ const element = containerRef?.current;
31
+ element?.addEventListener('scroll', saveScroll);
32
+ return () => {
33
+ element?.removeEventListener('scroll', saveScroll);
34
+ };
35
+ }, [containerRef, saveScroll]);
36
+ };
@@ -1,4 +1,4 @@
1
- import { registrySchema, Registry, RegistryItem } from "../registry";
1
+ import { registrySchema } from "../registry";
2
2
  import { fetchRegistry, getRegistryItem, getRegistryItemUrl } from "../registry/api";
3
3
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
4
4
  import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
@@ -303,7 +303,7 @@ module.exports = {
303
303
  ### 3. Add the cn() utility
304
304
  Create \`lib/utils.ts\`:
305
305
  \`\`\`typescript
306
- import { type ClassValue, clsx } from "clsx"
306
+ import { ClassValue, clsx } from "clsx"
307
307
  import { twMerge } from "tailwind-merge"
308
308
 
309
309
  export function cn(...inputs: ClassValue[]) {
@@ -1056,7 +1056,7 @@ Add to your \`globals.css\`:
1056
1056
  Create \`lib/utils.ts\`:
1057
1057
 
1058
1058
  \`\`\`typescript
1059
- import { type ClassValue, clsx } from "clsx"
1059
+ import { ClassValue, clsx } from "clsx"
1060
1060
  import { twMerge } from "tailwind-merge"
1061
1061
 
1062
1062
  export function cn(...inputs: ClassValue[]) {
package/dist/mcp/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { registrySchema, Registry, RegistryItem } from "../registry";
1
+ import { registrySchema } from "../registry";
2
2
  import { fetchRegistry, getRegistryItem, getRegistryItemUrl } from "../registry/api";
3
3
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
4
4
  import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
@@ -1,4 +1,4 @@
1
- import { RegistryItem, Registry } from ".";
1
+ import { RegistryItem, Registry } from "./schemas";
2
2
  /**
3
3
  * Gets the full registry URL based on the registry name or URL provided
4
4
  * @param registry - Registry name, URL, or file path
@@ -1,5 +1,4 @@
1
- import { registryItemSchema, RegistryItem, Registry } from ".";
2
- import { z } from "zod";
1
+ import { registryItemSchema } from "./schemas";
3
2
  const registryCache = new Map();
4
3
  /**
5
4
  * Gets the full registry URL based on the registry name or URL provided
@@ -11,8 +10,8 @@ export function getRegistryUrl(registry) {
11
10
  if (registry.startsWith("http")) {
12
11
  return registry;
13
12
  }
14
- // Default to Hanzo registry if REGISTRY_BASE_URL is defined, otherwise use shadcn
15
- const baseUrl = process.env.REGISTRY_BASE_URL || "https://ui.shadcn.com/registry";
13
+ // Default to Hanzo registry if REGISTRY_BASE_URL is defined, otherwise use hanzo
14
+ const baseUrl = process.env.REGISTRY_BASE_URL || "https://ui.hanzo.com/registry";
16
15
  // Check if registry is a path to a JSON file
17
16
  if (registry.endsWith(".json")) {
18
17
  return `${baseUrl}/${registry}`;