@hanzo/ui 5.0.2 → 5.0.3

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 (685) hide show
  1. package/CHANGELOG.md +184 -0
  2. package/LICENSE +21 -0
  3. package/README.md +185 -192
  4. package/dist/ai/index.js +53 -0
  5. package/dist/ai/index.js.map +1 -0
  6. package/dist/ai/index.mjs +4 -0
  7. package/dist/ai/index.mjs.map +1 -0
  8. package/dist/blocks/index.js +983 -0
  9. package/dist/blocks/index.js.map +1 -0
  10. package/dist/blocks/index.mjs +945 -0
  11. package/dist/blocks/index.mjs.map +1 -0
  12. package/dist/calendar/index.js +14 -0
  13. package/dist/calendar/index.js.map +1 -0
  14. package/dist/calendar/index.mjs +5 -0
  15. package/dist/calendar/index.mjs.map +1 -0
  16. package/dist/carousel/index.js +220 -0
  17. package/dist/carousel/index.js.map +1 -0
  18. package/dist/carousel/index.mjs +191 -0
  19. package/dist/carousel/index.mjs.map +1 -0
  20. package/dist/charts/index.js +945 -0
  21. package/dist/charts/index.js.map +1 -0
  22. package/dist/charts/index.mjs +901 -0
  23. package/dist/charts/index.mjs.map +1 -0
  24. package/dist/chunk-26T4V5QU.mjs +111 -0
  25. package/dist/chunk-26T4V5QU.mjs.map +1 -0
  26. package/dist/chunk-2A5KXDLJ.js +22 -0
  27. package/dist/chunk-2A5KXDLJ.js.map +1 -0
  28. package/dist/chunk-2CJ4HMF4.js +79 -0
  29. package/dist/chunk-2CJ4HMF4.js.map +1 -0
  30. package/dist/chunk-2OIQKC5E.js +236 -0
  31. package/dist/chunk-2OIQKC5E.js.map +1 -0
  32. package/dist/chunk-2X3KSYBN.js +44 -0
  33. package/dist/chunk-2X3KSYBN.js.map +1 -0
  34. package/dist/chunk-3PBQGYR7.mjs +100 -0
  35. package/dist/chunk-3PBQGYR7.mjs.map +1 -0
  36. package/dist/chunk-3POQQ6L7.js +62 -0
  37. package/dist/chunk-3POQQ6L7.js.map +1 -0
  38. package/dist/chunk-4B47GITH.mjs +28 -0
  39. package/dist/chunk-4B47GITH.mjs.map +1 -0
  40. package/dist/chunk-4BC2OH6B.js +129 -0
  41. package/dist/chunk-4BC2OH6B.js.map +1 -0
  42. package/dist/chunk-5AQSGH4R.js +130 -0
  43. package/dist/chunk-5AQSGH4R.js.map +1 -0
  44. package/dist/chunk-5IHRJFOO.mjs +102 -0
  45. package/dist/chunk-5IHRJFOO.mjs.map +1 -0
  46. package/dist/chunk-5LDGR7YN.mjs +28 -0
  47. package/dist/chunk-5LDGR7YN.mjs.map +1 -0
  48. package/dist/chunk-5MCN3VYM.mjs +23 -0
  49. package/dist/chunk-5MCN3VYM.mjs.map +1 -0
  50. package/dist/chunk-6AVAMRMB.mjs +47 -0
  51. package/dist/chunk-6AVAMRMB.mjs.map +1 -0
  52. package/dist/chunk-6H62JRNM.mjs +120 -0
  53. package/dist/chunk-6H62JRNM.mjs.map +1 -0
  54. package/dist/chunk-6KCII3F6.mjs +126 -0
  55. package/dist/chunk-6KCII3F6.mjs.map +1 -0
  56. package/dist/chunk-7EHB43BJ.js +155 -0
  57. package/dist/chunk-7EHB43BJ.js.map +1 -0
  58. package/dist/chunk-7LRD23Q5.js +191 -0
  59. package/dist/chunk-7LRD23Q5.js.map +1 -0
  60. package/dist/chunk-7SAHKOJG.mjs +45 -0
  61. package/dist/chunk-7SAHKOJG.mjs.map +1 -0
  62. package/dist/chunk-A3D2YZK3.js +50 -0
  63. package/dist/chunk-A3D2YZK3.js.map +1 -0
  64. package/dist/chunk-AL4QFH7V.js +63 -0
  65. package/dist/chunk-AL4QFH7V.js.map +1 -0
  66. package/dist/chunk-B3WFEG6U.js +69 -0
  67. package/dist/chunk-B3WFEG6U.js.map +1 -0
  68. package/dist/chunk-BDZQJ6GK.js +242 -0
  69. package/dist/chunk-BDZQJ6GK.js.map +1 -0
  70. package/dist/chunk-BRWFYRGX.js +61 -0
  71. package/dist/chunk-BRWFYRGX.js.map +1 -0
  72. package/dist/chunk-C5DNTLBO.js +53 -0
  73. package/dist/chunk-C5DNTLBO.js.map +1 -0
  74. package/dist/chunk-CRALRACO.js +54 -0
  75. package/dist/chunk-CRALRACO.js.map +1 -0
  76. package/dist/chunk-CVACQJRM.js +149 -0
  77. package/dist/chunk-CVACQJRM.js.map +1 -0
  78. package/dist/chunk-DEIUKFPZ.mjs +63 -0
  79. package/dist/chunk-DEIUKFPZ.mjs.map +1 -0
  80. package/dist/chunk-DN2AEEA2.js +13 -0
  81. package/dist/chunk-DN2AEEA2.js.map +1 -0
  82. package/dist/chunk-DTNRWU4B.mjs +35 -0
  83. package/dist/chunk-DTNRWU4B.mjs.map +1 -0
  84. package/dist/chunk-DXIUEWRJ.mjs +31 -0
  85. package/dist/chunk-DXIUEWRJ.mjs.map +1 -0
  86. package/dist/chunk-DYFV66JX.mjs +54 -0
  87. package/dist/chunk-DYFV66JX.mjs.map +1 -0
  88. package/dist/chunk-F3WMAHXV.mjs +86 -0
  89. package/dist/chunk-F3WMAHXV.mjs.map +1 -0
  90. package/dist/chunk-F4RWPBBB.js +79 -0
  91. package/dist/chunk-F4RWPBBB.js.map +1 -0
  92. package/dist/chunk-FEGAPM6U.js +194 -0
  93. package/dist/chunk-FEGAPM6U.js.map +1 -0
  94. package/dist/chunk-G5TS56PW.mjs +160 -0
  95. package/dist/chunk-G5TS56PW.mjs.map +1 -0
  96. package/dist/chunk-GG6VGOEN.mjs +590 -0
  97. package/dist/chunk-GG6VGOEN.mjs.map +1 -0
  98. package/dist/chunk-GLAMGK32.mjs +54 -0
  99. package/dist/chunk-GLAMGK32.mjs.map +1 -0
  100. package/dist/chunk-GNMMUJXD.mjs +200 -0
  101. package/dist/chunk-GNMMUJXD.mjs.map +1 -0
  102. package/dist/chunk-GNPBULLS.mjs +600 -0
  103. package/dist/chunk-GNPBULLS.mjs.map +1 -0
  104. package/dist/chunk-GTE2DELE.js +65 -0
  105. package/dist/chunk-GTE2DELE.js.map +1 -0
  106. package/dist/chunk-GUQAFFTH.js +94 -0
  107. package/dist/chunk-GUQAFFTH.js.map +1 -0
  108. package/dist/chunk-H5VOYZHT.mjs +34 -0
  109. package/dist/chunk-H5VOYZHT.mjs.map +1 -0
  110. package/dist/chunk-HR6PBOGG.mjs +59 -0
  111. package/dist/chunk-HR6PBOGG.mjs.map +1 -0
  112. package/dist/chunk-HROONQS3.js +55 -0
  113. package/dist/chunk-HROONQS3.js.map +1 -0
  114. package/dist/chunk-IAO7SOQ3.mjs +56 -0
  115. package/dist/chunk-IAO7SOQ3.mjs.map +1 -0
  116. package/dist/chunk-K2QKU3K6.mjs +40 -0
  117. package/dist/chunk-K2QKU3K6.mjs.map +1 -0
  118. package/dist/chunk-KEUZZCCP.js +53 -0
  119. package/dist/chunk-KEUZZCCP.js.map +1 -0
  120. package/dist/chunk-KJXSLTG7.mjs +73 -0
  121. package/dist/chunk-KJXSLTG7.mjs.map +1 -0
  122. package/dist/chunk-L5AFUCVH.mjs +26 -0
  123. package/dist/chunk-L5AFUCVH.mjs.map +1 -0
  124. package/dist/chunk-LB3I52KZ.mjs +42 -0
  125. package/dist/chunk-LB3I52KZ.mjs.map +1 -0
  126. package/dist/chunk-LN75MJQ2.js +71 -0
  127. package/dist/chunk-LN75MJQ2.js.map +1 -0
  128. package/dist/chunk-LRBOFJUV.js +60 -0
  129. package/dist/chunk-LRBOFJUV.js.map +1 -0
  130. package/dist/chunk-MMNYRBOU.js +157 -0
  131. package/dist/chunk-MMNYRBOU.js.map +1 -0
  132. package/dist/chunk-MO65YF6P.js +236 -0
  133. package/dist/chunk-MO65YF6P.js.map +1 -0
  134. package/dist/chunk-N4KHP5FC.mjs +33 -0
  135. package/dist/chunk-N4KHP5FC.mjs.map +1 -0
  136. package/dist/chunk-NP2J7AB7.mjs +121 -0
  137. package/dist/chunk-NP2J7AB7.mjs.map +1 -0
  138. package/dist/chunk-OLR6SGYO.js +57 -0
  139. package/dist/chunk-OLR6SGYO.js.map +1 -0
  140. package/dist/chunk-ON7NQ4DY.js +21 -0
  141. package/dist/chunk-ON7NQ4DY.js.map +1 -0
  142. package/dist/chunk-PE3VFRLV.mjs +198 -0
  143. package/dist/chunk-PE3VFRLV.mjs.map +1 -0
  144. package/dist/chunk-Q7LOOIE5.mjs +8 -0
  145. package/dist/chunk-Q7LOOIE5.mjs.map +1 -0
  146. package/dist/chunk-QFA6U75G.mjs +51 -0
  147. package/dist/chunk-QFA6U75G.mjs.map +1 -0
  148. package/dist/chunk-QJQPT4WX.js +638 -0
  149. package/dist/chunk-QJQPT4WX.js.map +1 -0
  150. package/dist/chunk-QKHQPBSR.mjs +20 -0
  151. package/dist/chunk-QKHQPBSR.mjs.map +1 -0
  152. package/dist/chunk-SJD4XRFJ.mjs +141 -0
  153. package/dist/chunk-SJD4XRFJ.mjs.map +1 -0
  154. package/dist/chunk-SOOJLU4C.mjs +19 -0
  155. package/dist/chunk-SOOJLU4C.mjs.map +1 -0
  156. package/dist/chunk-T66B5IM5.js +51 -0
  157. package/dist/chunk-T66B5IM5.js.map +1 -0
  158. package/dist/chunk-T7RPZDO4.js +645 -0
  159. package/dist/chunk-T7RPZDO4.js.map +1 -0
  160. package/dist/chunk-TGRMDGTV.mjs +38 -0
  161. package/dist/chunk-TGRMDGTV.mjs.map +1 -0
  162. package/dist/chunk-TH2UKMCO.mjs +11 -0
  163. package/dist/chunk-TH2UKMCO.mjs.map +1 -0
  164. package/dist/chunk-TMV45OKE.mjs +113 -0
  165. package/dist/chunk-TMV45OKE.mjs.map +1 -0
  166. package/dist/chunk-TUJ7EVEK.js +171 -0
  167. package/dist/chunk-TUJ7EVEK.js.map +1 -0
  168. package/dist/chunk-ULNWDOI7.js +122 -0
  169. package/dist/chunk-ULNWDOI7.js.map +1 -0
  170. package/dist/chunk-UNUTTHCH.mjs +210 -0
  171. package/dist/chunk-UNUTTHCH.mjs.map +1 -0
  172. package/dist/chunk-VJMI6BG4.mjs +10 -0
  173. package/dist/chunk-VJMI6BG4.mjs.map +1 -0
  174. package/dist/chunk-VZVOB5MG.mjs +26 -0
  175. package/dist/chunk-VZVOB5MG.mjs.map +1 -0
  176. package/dist/chunk-WD67O22C.js +50 -0
  177. package/dist/chunk-WD67O22C.js.map +1 -0
  178. package/dist/chunk-WYPMLIJN.js +53 -0
  179. package/dist/chunk-WYPMLIJN.js.map +1 -0
  180. package/dist/chunk-X32I34NH.js +109 -0
  181. package/dist/chunk-X32I34NH.js.map +1 -0
  182. package/dist/chunk-X5MOZ3YL.js +65 -0
  183. package/dist/chunk-X5MOZ3YL.js.map +1 -0
  184. package/dist/chunk-Y4JVIPQZ.mjs +31 -0
  185. package/dist/chunk-Y4JVIPQZ.mjs.map +1 -0
  186. package/dist/chunk-Y6WOV2LZ.js +95 -0
  187. package/dist/chunk-Y6WOV2LZ.js.map +1 -0
  188. package/dist/chunk-YAEN5SCU.mjs +41 -0
  189. package/dist/chunk-YAEN5SCU.mjs.map +1 -0
  190. package/dist/chunk-YH6XDF3N.js +121 -0
  191. package/dist/chunk-YH6XDF3N.js.map +1 -0
  192. package/dist/chunk-YJKA4D75.mjs +124 -0
  193. package/dist/chunk-YJKA4D75.mjs.map +1 -0
  194. package/dist/chunk-ZANAF7WB.js +88 -0
  195. package/dist/chunk-ZANAF7WB.js.map +1 -0
  196. package/dist/chunk-ZDBWNPLO.js +30 -0
  197. package/dist/chunk-ZDBWNPLO.js.map +1 -0
  198. package/dist/chunk-ZDT2IOK2.js +56 -0
  199. package/dist/chunk-ZDT2IOK2.js.map +1 -0
  200. package/dist/chunk-ZKGVLTSI.js +25 -0
  201. package/dist/chunk-ZKGVLTSI.js.map +1 -0
  202. package/dist/chunk-ZLELESO7.js +34 -0
  203. package/dist/chunk-ZLELESO7.js.map +1 -0
  204. package/dist/chunk-ZUFUEQTX.mjs +157 -0
  205. package/dist/chunk-ZUFUEQTX.mjs.map +1 -0
  206. package/dist/chunk-ZZZWRQQE.mjs +42 -0
  207. package/dist/chunk-ZZZWRQQE.mjs.map +1 -0
  208. package/dist/command/index.js +138 -0
  209. package/dist/command/index.js.map +1 -0
  210. package/dist/command/index.mjs +128 -0
  211. package/dist/command/index.mjs.map +1 -0
  212. package/dist/components/accordion.js +25 -0
  213. package/dist/components/accordion.js.map +1 -0
  214. package/dist/components/accordion.mjs +4 -0
  215. package/dist/components/accordion.mjs.map +1 -0
  216. package/dist/components/alert.js +21 -0
  217. package/dist/components/alert.js.map +1 -0
  218. package/dist/components/alert.mjs +4 -0
  219. package/dist/components/alert.mjs.map +1 -0
  220. package/dist/components/aspect-ratio.js +12 -0
  221. package/dist/components/aspect-ratio.js.map +1 -0
  222. package/dist/components/aspect-ratio.mjs +3 -0
  223. package/dist/components/aspect-ratio.mjs.map +1 -0
  224. package/dist/components/avatar.js +21 -0
  225. package/dist/components/avatar.js.map +1 -0
  226. package/dist/components/avatar.mjs +4 -0
  227. package/dist/components/avatar.mjs.map +1 -0
  228. package/dist/components/badge.js +17 -0
  229. package/dist/components/badge.js.map +1 -0
  230. package/dist/components/badge.mjs +4 -0
  231. package/dist/components/badge.mjs.map +1 -0
  232. package/dist/components/breadcrumb.js +37 -0
  233. package/dist/components/breadcrumb.js.map +1 -0
  234. package/dist/components/breadcrumb.mjs +4 -0
  235. package/dist/components/breadcrumb.mjs.map +1 -0
  236. package/dist/components/button.js +17 -0
  237. package/dist/components/button.js.map +1 -0
  238. package/dist/components/button.mjs +4 -0
  239. package/dist/components/button.mjs.map +1 -0
  240. package/dist/components/card.js +37 -0
  241. package/dist/components/card.js.map +1 -0
  242. package/dist/components/card.mjs +4 -0
  243. package/dist/components/card.mjs.map +1 -0
  244. package/dist/components/checkbox.js +13 -0
  245. package/dist/components/checkbox.js.map +1 -0
  246. package/dist/components/checkbox.mjs +4 -0
  247. package/dist/components/checkbox.mjs.map +1 -0
  248. package/dist/components/collapsible.js +20 -0
  249. package/dist/components/collapsible.js.map +1 -0
  250. package/dist/components/collapsible.mjs +3 -0
  251. package/dist/components/collapsible.mjs.map +1 -0
  252. package/dist/components/context-menu.js +69 -0
  253. package/dist/components/context-menu.js.map +1 -0
  254. package/dist/components/context-menu.mjs +4 -0
  255. package/dist/components/context-menu.mjs.map +1 -0
  256. package/dist/components/dialog.js +49 -0
  257. package/dist/components/dialog.js.map +1 -0
  258. package/dist/components/dialog.mjs +4 -0
  259. package/dist/components/dialog.mjs.map +1 -0
  260. package/dist/components/drawer.js +49 -0
  261. package/dist/components/drawer.js.map +1 -0
  262. package/dist/components/drawer.mjs +4 -0
  263. package/dist/components/drawer.mjs.map +1 -0
  264. package/dist/components/dropdown-menu.js +69 -0
  265. package/dist/components/dropdown-menu.js.map +1 -0
  266. package/dist/components/dropdown-menu.mjs +4 -0
  267. package/dist/components/dropdown-menu.mjs.map +1 -0
  268. package/dist/components/form.js +42 -0
  269. package/dist/components/form.js.map +1 -0
  270. package/dist/components/form.mjs +5 -0
  271. package/dist/components/form.mjs.map +1 -0
  272. package/dist/components/hover-card.js +21 -0
  273. package/dist/components/hover-card.js.map +1 -0
  274. package/dist/components/hover-card.mjs +4 -0
  275. package/dist/components/hover-card.mjs.map +1 -0
  276. package/dist/components/index.js +1047 -0
  277. package/dist/components/index.js.map +1 -0
  278. package/dist/components/index.mjs +46 -0
  279. package/dist/components/index.mjs.map +1 -0
  280. package/dist/components/input-otp.js +25 -0
  281. package/dist/components/input-otp.js.map +1 -0
  282. package/dist/components/input-otp.mjs +4 -0
  283. package/dist/components/input-otp.mjs.map +1 -0
  284. package/dist/components/input.js +13 -0
  285. package/dist/components/input.js.map +1 -0
  286. package/dist/components/input.mjs +4 -0
  287. package/dist/components/input.mjs.map +1 -0
  288. package/dist/components/label.js +13 -0
  289. package/dist/components/label.js.map +1 -0
  290. package/dist/components/label.mjs +4 -0
  291. package/dist/components/label.mjs.map +1 -0
  292. package/dist/components/menubar.js +73 -0
  293. package/dist/components/menubar.js.map +1 -0
  294. package/dist/components/menubar.mjs +4 -0
  295. package/dist/components/menubar.mjs.map +1 -0
  296. package/dist/components/navigation-menu.js +45 -0
  297. package/dist/components/navigation-menu.js.map +1 -0
  298. package/dist/components/navigation-menu.mjs +4 -0
  299. package/dist/components/navigation-menu.mjs.map +1 -0
  300. package/dist/components/pagination.js +38 -0
  301. package/dist/components/pagination.js.map +1 -0
  302. package/dist/components/pagination.mjs +5 -0
  303. package/dist/components/pagination.mjs.map +1 -0
  304. package/dist/components/popover.js +25 -0
  305. package/dist/components/popover.js.map +1 -0
  306. package/dist/components/popover.mjs +4 -0
  307. package/dist/components/popover.mjs.map +1 -0
  308. package/dist/components/progress.js +13 -0
  309. package/dist/components/progress.js.map +1 -0
  310. package/dist/components/progress.mjs +4 -0
  311. package/dist/components/progress.mjs.map +1 -0
  312. package/dist/components/radio-group.js +17 -0
  313. package/dist/components/radio-group.js.map +1 -0
  314. package/dist/components/radio-group.mjs +4 -0
  315. package/dist/components/radio-group.mjs.map +1 -0
  316. package/dist/components/resizable.js +21 -0
  317. package/dist/components/resizable.js.map +1 -0
  318. package/dist/components/resizable.mjs +4 -0
  319. package/dist/components/resizable.mjs.map +1 -0
  320. package/dist/components/scroll-area.js +17 -0
  321. package/dist/components/scroll-area.js.map +1 -0
  322. package/dist/components/scroll-area.mjs +4 -0
  323. package/dist/components/scroll-area.mjs.map +1 -0
  324. package/dist/components/select.js +49 -0
  325. package/dist/components/select.js.map +1 -0
  326. package/dist/components/select.mjs +4 -0
  327. package/dist/components/select.mjs.map +1 -0
  328. package/dist/components/separator.js +13 -0
  329. package/dist/components/separator.js.map +1 -0
  330. package/dist/components/separator.mjs +4 -0
  331. package/dist/components/separator.mjs.map +1 -0
  332. package/dist/components/sheet.js +49 -0
  333. package/dist/components/sheet.js.map +1 -0
  334. package/dist/components/sheet.mjs +4 -0
  335. package/dist/components/sheet.mjs.map +1 -0
  336. package/dist/components/sidebar.js +111 -0
  337. package/dist/components/sidebar.js.map +1 -0
  338. package/dist/components/sidebar.mjs +10 -0
  339. package/dist/components/sidebar.mjs.map +1 -0
  340. package/dist/components/skeleton.js +13 -0
  341. package/dist/components/skeleton.js.map +1 -0
  342. package/dist/components/skeleton.mjs +4 -0
  343. package/dist/components/skeleton.mjs.map +1 -0
  344. package/dist/components/slider.js +13 -0
  345. package/dist/components/slider.js.map +1 -0
  346. package/dist/components/slider.mjs +4 -0
  347. package/dist/components/slider.mjs.map +1 -0
  348. package/dist/components/switch.js +13 -0
  349. package/dist/components/switch.js.map +1 -0
  350. package/dist/components/switch.mjs +4 -0
  351. package/dist/components/switch.mjs.map +1 -0
  352. package/dist/components/table.js +41 -0
  353. package/dist/components/table.js.map +1 -0
  354. package/dist/components/table.mjs +4 -0
  355. package/dist/components/table.mjs.map +1 -0
  356. package/dist/components/tabs.js +25 -0
  357. package/dist/components/tabs.js.map +1 -0
  358. package/dist/components/tabs.mjs +4 -0
  359. package/dist/components/tabs.mjs.map +1 -0
  360. package/dist/components/textarea.js +13 -0
  361. package/dist/components/textarea.js.map +1 -0
  362. package/dist/components/textarea.mjs +4 -0
  363. package/dist/components/textarea.mjs.map +1 -0
  364. package/dist/components/toast.js +37 -0
  365. package/dist/components/toast.js.map +1 -0
  366. package/dist/components/toast.mjs +4 -0
  367. package/dist/components/toast.mjs.map +1 -0
  368. package/dist/components/toggle-group.js +18 -0
  369. package/dist/components/toggle-group.js.map +1 -0
  370. package/dist/components/toggle-group.mjs +5 -0
  371. package/dist/components/toggle-group.mjs.map +1 -0
  372. package/dist/components/toggle.js +17 -0
  373. package/dist/components/toggle.js.map +1 -0
  374. package/dist/components/toggle.mjs +4 -0
  375. package/dist/components/toggle.mjs.map +1 -0
  376. package/dist/components/tooltip.js +25 -0
  377. package/dist/components/tooltip.js.map +1 -0
  378. package/dist/components/tooltip.mjs +4 -0
  379. package/dist/components/tooltip.mjs.map +1 -0
  380. package/dist/effects/index.js +162 -0
  381. package/dist/effects/index.js.map +1 -0
  382. package/dist/effects/index.mjs +156 -0
  383. package/dist/effects/index.mjs.map +1 -0
  384. package/dist/index.js +1089 -9072
  385. package/dist/index.js.map +1 -1
  386. package/dist/index.mjs +45 -8698
  387. package/dist/index.mjs.map +1 -1
  388. package/dist/lib/utils.js +12 -0
  389. package/dist/lib/utils.js.map +1 -0
  390. package/dist/lib/utils.mjs +3 -0
  391. package/dist/lib/utils.mjs.map +1 -0
  392. package/dist/markdown/index.js +669 -0
  393. package/dist/markdown/index.js.map +1 -0
  394. package/dist/markdown/index.mjs +635 -0
  395. package/dist/markdown/index.mjs.map +1 -0
  396. package/dist/qr/index.js +101 -0
  397. package/dist/qr/index.js.map +1 -0
  398. package/dist/qr/index.mjs +98 -0
  399. package/dist/qr/index.mjs.map +1 -0
  400. package/dist/upload/index.js +166 -0
  401. package/dist/upload/index.js.map +1 -0
  402. package/dist/upload/index.mjs +163 -0
  403. package/dist/upload/index.mjs.map +1 -0
  404. package/package.json +153 -272
  405. package/publish.sh +27 -0
  406. package/assets/ai-icons.tsx +0 -207
  407. package/assets/crypto.tsx +0 -33
  408. package/assets/file-type-icon.tsx +0 -66
  409. package/assets/file.tsx +0 -45
  410. package/assets/general.tsx +0 -2318
  411. package/assets/hanzo-logo.svg +0 -9
  412. package/assets/hanzo-logo.tsx +0 -17
  413. package/assets/index.ts +0 -122
  414. package/assets/index.tsx +0 -4
  415. package/assets/llm-provider.tsx +0 -1094
  416. package/bin/cli.js +0 -100
  417. package/bin/create-registry.js +0 -108
  418. package/bin/mcp.js +0 -403
  419. package/bin/npx-registry-mcp.js +0 -15
  420. package/bin/registry-mcp-wrapper.sh +0 -19
  421. package/bin/registry-mcp.js +0 -100
  422. package/bin/start-mcp-server.sh +0 -22
  423. package/bin/test-mcp.sh +0 -52
  424. package/bin/update-registry.js +0 -196
  425. package/blocks/auth/index.ts +0 -6
  426. package/blocks/auth/login-2fa.tsx +0 -165
  427. package/blocks/auth/login-basic.tsx +0 -94
  428. package/blocks/auth/login-social.tsx +0 -148
  429. package/blocks/auth/magic-link.tsx +0 -129
  430. package/blocks/auth/password-reset.tsx +0 -97
  431. package/blocks/auth/signup.tsx +0 -157
  432. package/blocks/components/accordian-block.tsx +0 -48
  433. package/blocks/components/block-component-props.ts +0 -11
  434. package/blocks/components/bullet-cards-block.tsx +0 -46
  435. package/blocks/components/card-block/index.tsx +0 -171
  436. package/blocks/components/card-block/link-out-button.tsx +0 -20
  437. package/blocks/components/card-block/util.ts +0 -28
  438. package/blocks/components/carte-blanche-block/index.tsx +0 -127
  439. package/blocks/components/carte-blanche-block/variant-content-left.tsx +0 -49
  440. package/blocks/components/content.tsx +0 -70
  441. package/blocks/components/cta-block.tsx +0 -115
  442. package/blocks/components/enh-heading-block.tsx +0 -204
  443. package/blocks/components/grid-block/grid-block-mutator.ts +0 -12
  444. package/blocks/components/grid-block/index.tsx +0 -83
  445. package/blocks/components/grid-block/mutator-registry.ts +0 -10
  446. package/blocks/components/grid-block/table-borders.mutator.ts +0 -47
  447. package/blocks/components/group-block.tsx +0 -83
  448. package/blocks/components/heading-block.tsx +0 -88
  449. package/blocks/components/image-block.tsx +0 -111
  450. package/blocks/components/index.ts +0 -30
  451. package/blocks/components/screenful-block/content.tsx +0 -123
  452. package/blocks/components/screenful-block/index.tsx +0 -107
  453. package/blocks/components/screenful-block/poster-background.tsx +0 -34
  454. package/blocks/components/screenful-block/video-background.tsx +0 -45
  455. package/blocks/components/space-block.tsx +0 -66
  456. package/blocks/components/video-block.tsx +0 -138
  457. package/blocks/data-display/activity-feed.tsx +0 -242
  458. package/blocks/data-display/data-table.tsx +0 -235
  459. package/blocks/data-display/stats-grid.tsx +0 -194
  460. package/blocks/def/accordian-block.ts +0 -14
  461. package/blocks/def/block.ts +0 -7
  462. package/blocks/def/bullet-cards-block.ts +0 -22
  463. package/blocks/def/card-block.ts +0 -22
  464. package/blocks/def/carte-blanche-block.ts +0 -21
  465. package/blocks/def/cta-block.ts +0 -19
  466. package/blocks/def/element-block.ts +0 -11
  467. package/blocks/def/enh-heading-block.ts +0 -44
  468. package/blocks/def/grid-block.ts +0 -16
  469. package/blocks/def/group-block.ts +0 -11
  470. package/blocks/def/heading-block.ts +0 -15
  471. package/blocks/def/image-block.ts +0 -31
  472. package/blocks/def/index.ts +0 -35
  473. package/blocks/def/screenful-block.ts +0 -54
  474. package/blocks/def/space-block.ts +0 -64
  475. package/blocks/def/video-block.ts +0 -9
  476. package/blocks/ecommerce/checkout.tsx +0 -242
  477. package/blocks/ecommerce/index.ts +0 -7
  478. package/blocks/ecommerce/product-detail.tsx +0 -257
  479. package/blocks/ecommerce/product-grid.tsx +0 -148
  480. package/blocks/ecommerce/shopping-cart.tsx +0 -181
  481. package/blocks/index.ts +0 -2
  482. package/blocks/marketing/cta-section.tsx +0 -207
  483. package/blocks/marketing/faq.tsx +0 -159
  484. package/blocks/marketing/features-grid.tsx +0 -156
  485. package/blocks/marketing/hero-section.tsx +0 -192
  486. package/blocks/marketing/index.ts +0 -6
  487. package/blocks/marketing/pricing-table.tsx +0 -121
  488. package/blocks/marketing/testimonials.tsx +0 -196
  489. package/components/index.ts +0 -9
  490. package/dist/tailwind.js +0 -2025
  491. package/dist/tailwind.js.map +0 -1
  492. package/dist/tailwind.mjs +0 -2013
  493. package/dist/tailwind.mjs.map +0 -1
  494. package/dist/types.js +0 -59
  495. package/dist/types.js.map +0 -1
  496. package/dist/types.mjs +0 -53
  497. package/dist/types.mjs.map +0 -1
  498. package/dist/utils.js +0 -30
  499. package/dist/utils.js.map +0 -1
  500. package/dist/utils.mjs +0 -26
  501. package/dist/utils.mjs.map +0 -1
  502. package/frameworks/core/index.ts +0 -6
  503. package/frameworks/core/utils/index.ts +0 -64
  504. package/frameworks/react/components/button.tsx +0 -26
  505. package/frameworks/react/components/index.ts +0 -5
  506. package/frameworks/react/hooks/index.ts +0 -5
  507. package/frameworks/react/index.ts +0 -9
  508. package/frameworks/react/package.json +0 -8
  509. package/frameworks/react/utils/index.ts +0 -2
  510. package/frameworks/react-native/index.ts +0 -9
  511. package/frameworks/react-native/package.json +0 -8
  512. package/frameworks/registry.json +0 -371
  513. package/frameworks/setup.sh +0 -69
  514. package/frameworks/svelte/index.ts +0 -9
  515. package/frameworks/svelte/package.json +0 -8
  516. package/frameworks/tracker.json +0 -1854
  517. package/frameworks/vue/index.ts +0 -9
  518. package/frameworks/vue/package.json +0 -8
  519. package/helpers/file.ts +0 -33
  520. package/helpers/memoization.ts +0 -40
  521. package/primitives/accordion.tsx +0 -74
  522. package/primitives/action-button.tsx +0 -42
  523. package/primitives/alert-dialog.tsx +0 -185
  524. package/primitives/alert.tsx +0 -74
  525. package/primitives/apply-typography.tsx +0 -55
  526. package/primitives/aspect-ratio.tsx +0 -5
  527. package/primitives/avatar.tsx +0 -57
  528. package/primitives/background-beams.tsx +0 -142
  529. package/primitives/badge.tsx +0 -45
  530. package/primitives/breadcrumb.tsx +0 -130
  531. package/primitives/breakpoint-indicator.tsx +0 -19
  532. package/primitives/button.tsx +0 -72
  533. package/primitives/calendar.tsx +0 -72
  534. package/primitives/card.tsx +0 -97
  535. package/primitives/carousel.tsx +0 -238
  536. package/primitives/chat/chat-input-area.tsx +0 -88
  537. package/primitives/chat/chat-input.tsx +0 -71
  538. package/primitives/chat/files-preview.tsx +0 -331
  539. package/primitives/chat/index.ts +0 -6
  540. package/primitives/chat/json-form.tsx +0 -8
  541. package/primitives/chat/message-list.tsx +0 -308
  542. package/primitives/chat/message.tsx +0 -569
  543. package/primitives/chat/sqlite-preview.tsx +0 -215
  544. package/primitives/checkbox.tsx +0 -32
  545. package/primitives/collapsible.tsx +0 -9
  546. package/primitives/combobox.tsx +0 -239
  547. package/primitives/command.tsx +0 -151
  548. package/primitives/context-menu.tsx +0 -206
  549. package/primitives/copy-to-clipboard-icon.tsx +0 -60
  550. package/primitives/dialog-video-controller.tsx +0 -38
  551. package/primitives/dialog.tsx +0 -128
  552. package/primitives/dot-pattern.tsx +0 -57
  553. package/primitives/dots-loader.tsx +0 -13
  554. package/primitives/drawer.tsx +0 -113
  555. package/primitives/dropdown-menu.tsx +0 -199
  556. package/primitives/error-message.tsx +0 -19
  557. package/primitives/file-uploader.tsx +0 -203
  558. package/primitives/form.tsx +0 -185
  559. package/primitives/hover-card.tsx +0 -28
  560. package/primitives/icons/github.tsx +0 -14
  561. package/primitives/icons/index.ts +0 -18
  562. package/primitives/icons/youtube-logo.tsx +0 -59
  563. package/primitives/index-client.ts +0 -4
  564. package/primitives/index-common.ts +0 -304
  565. package/primitives/index-next.ts +0 -4
  566. package/primitives/input-otp.tsx +0 -65
  567. package/primitives/input.tsx +0 -128
  568. package/primitives/label.tsx +0 -21
  569. package/primitives/list-adaptor.ts +0 -12
  570. package/primitives/list-box.tsx +0 -74
  571. package/primitives/loading-spinner.tsx +0 -33
  572. package/primitives/markdown-preview.tsx +0 -612
  573. package/primitives/mermaid.tsx +0 -196
  574. package/primitives/navigation-menu.tsx +0 -147
  575. package/primitives/next/image.tsx +0 -91
  576. package/primitives/next/index.ts +0 -7
  577. package/primitives/next/inline-icon.tsx +0 -36
  578. package/primitives/next/link-element.tsx +0 -109
  579. package/primitives/next/mdx-link.tsx +0 -22
  580. package/primitives/next/media-stack.tsx +0 -52
  581. package/primitives/next/nav-items.tsx +0 -45
  582. package/primitives/next/youtube-embed.tsx +0 -83
  583. package/primitives/pagination.tsx +0 -117
  584. package/primitives/popover.tsx +0 -34
  585. package/primitives/pretty-json-print.tsx +0 -28
  586. package/primitives/progress.tsx +0 -27
  587. package/primitives/prompt-textarea.tsx +0 -72
  588. package/primitives/qr-code.tsx +0 -112
  589. package/primitives/radio-group.tsx +0 -42
  590. package/primitives/resizable.tsx +0 -47
  591. package/primitives/scroll-area.tsx +0 -57
  592. package/primitives/search-input.tsx +0 -66
  593. package/primitives/select.tsx +0 -122
  594. package/primitives/separator.tsx +0 -26
  595. package/primitives/sheet.tsx +0 -139
  596. package/primitives/skeleton.tsx +0 -18
  597. package/primitives/slider.tsx +0 -63
  598. package/primitives/sonner.tsx +0 -35
  599. package/primitives/step-indicator.tsx +0 -69
  600. package/primitives/stepper.tsx +0 -272
  601. package/primitives/switch.tsx +0 -27
  602. package/primitives/table.tsx +0 -105
  603. package/primitives/tabs.tsx +0 -50
  604. package/primitives/text-area.tsx +0 -26
  605. package/primitives/text-link.tsx +0 -27
  606. package/primitives/textarea.tsx +0 -64
  607. package/primitives/textfield.tsx +0 -78
  608. package/primitives/toast.tsx +0 -30
  609. package/primitives/toggle-group.tsx +0 -63
  610. package/primitives/toggle.tsx +0 -44
  611. package/primitives/tooltip.tsx +0 -47
  612. package/primitives/video-player.tsx +0 -23
  613. package/src/button.ts +0 -1
  614. package/src/hooks/index.ts +0 -7
  615. package/src/hooks/use-click-away.ts +0 -31
  616. package/src/hooks/use-combined-refs.ts +0 -22
  617. package/src/hooks/use-copy-clipboard.ts +0 -30
  618. package/src/hooks/use-debounce.ts +0 -17
  619. package/src/hooks/use-fill-ids.ts +0 -25
  620. package/src/hooks/use-map.ts +0 -26
  621. package/src/hooks/use-measure.ts +0 -42
  622. package/src/hooks/use-reverse-video-playback.ts +0 -43
  623. package/src/hooks/use-scroll-restoration.ts +0 -50
  624. package/src/index-lean.ts +0 -87
  625. package/src/index.ts +0 -54
  626. package/src/mcp/README.md +0 -141
  627. package/src/mcp/enhanced-server.ts +0 -1208
  628. package/src/mcp/index.ts +0 -518
  629. package/src/mcp/package.json +0 -10
  630. package/src/registry/api.ts +0 -164
  631. package/src/registry/index.ts +0 -60
  632. package/src/registry/package.json +0 -10
  633. package/src/utils.ts +0 -19
  634. package/style/drawer.css +0 -163
  635. package/style/globals.css +0 -13
  636. package/style/hanzo-common.css +0 -31
  637. package/style/hanzo-default-colors.css +0 -82
  638. package/style/theme-provider.tsx +0 -20
  639. package/tailwind/colors.tailwind.js +0 -53
  640. package/tailwind/fontFamily.tailwind.ts +0 -7
  641. package/tailwind/fontSize.tailwind.ts +0 -13
  642. package/tailwind/index.ts +0 -7
  643. package/tailwind/safelist.tailwind.js +0 -26
  644. package/tailwind/screens.tailwind.js +0 -8
  645. package/tailwind/spacing.tailwind.js +0 -65
  646. package/tailwind/tailwind.config.hanzo-preset.d.ts +0 -5
  647. package/tailwind/tailwind.config.hanzo-preset.js +0 -915
  648. package/tailwind/tw-font-desc.ts +0 -15
  649. package/tailwind/typo-plugin/get-plugin-styles.js +0 -679
  650. package/tailwind/typo-plugin/index.d.ts +0 -9
  651. package/tailwind/typo-plugin/index.js +0 -141
  652. package/tailwind/typo-plugin/utils.js +0 -60
  653. package/tailwind/typography-test.mdx +0 -35
  654. package/tailwind/z-index.tailwind.js +0 -71
  655. package/types/animation-def.ts +0 -3
  656. package/types/breakpoints.ts +0 -11
  657. package/types/bullet-item.ts +0 -10
  658. package/types/button-def.ts +0 -39
  659. package/types/dimensions.ts +0 -8
  660. package/types/grid-def.ts +0 -56
  661. package/types/image-def.ts +0 -32
  662. package/types/index.ts +0 -30
  663. package/types/link-def.ts +0 -56
  664. package/types/media-stack-def.ts +0 -31
  665. package/types/t-shirt-size.ts +0 -5
  666. package/types/tshirt-dimensions.ts +0 -20
  667. package/types/video-def.ts +0 -25
  668. package/util/blob.ts +0 -33
  669. package/util/copy-to-clipboard.ts +0 -17
  670. package/util/create-shadow-root.ts +0 -22
  671. package/util/date.ts +0 -84
  672. package/util/debounce.ts +0 -11
  673. package/util/file.ts +0 -15
  674. package/util/format-and-abbreviate-as-currency.ts +0 -125
  675. package/util/format-text.ts +0 -34
  676. package/util/format-to-max-char.ts +0 -68
  677. package/util/index-client.ts +0 -3
  678. package/util/index.ts +0 -112
  679. package/util/number-abbreviate.ts +0 -49
  680. package/util/specifier.ts +0 -43
  681. package/util/spread-to-transform.ts +0 -25
  682. package/util/step-animation.ts +0 -90
  683. package/util/timing.ts +0 -3
  684. package/util/toasts.tsx +0 -17
  685. package/util/two-way-map.ts +0 -19
package/src/mcp/index.ts DELETED
@@ -1,518 +0,0 @@
1
- import { registrySchema, Registry, RegistryItem } from "../registry"
2
- import { fetchRegistry, getRegistryItem, getRegistryItemUrl } from "../registry/api"
3
- import { Server } from "@modelcontextprotocol/sdk/server/index.js"
4
- import {
5
- CallToolRequestSchema,
6
- ListToolsRequestSchema,
7
- } from "@modelcontextprotocol/sdk/types.js"
8
- import { z } from "zod"
9
- import { zodToJsonSchema } from "zod-to-json-schema"
10
-
11
- // Get package version
12
- let packageVersion = "4.5.0"
13
- try {
14
- // eslint-disable-next-line @typescript-eslint/no-var-requires
15
- const packageJson = require("../../package.json")
16
- packageVersion = packageJson.version || packageVersion
17
- } catch (error) {
18
- console.error("Could not load package.json for version", error)
19
- }
20
-
21
- /**
22
- * MCP Server implementation for @hanzo/ui registry
23
- * Provides tools for interacting with the registry
24
- */
25
- export const server = new Server(
26
- {
27
- name: "hanzo-ui",
28
- version: packageVersion,
29
- },
30
- {
31
- capabilities: {
32
- resources: {},
33
- tools: {},
34
- },
35
- }
36
- )
37
-
38
- // Register the available tools
39
- server.setRequestHandler(ListToolsRequestSchema, async () => {
40
- return {
41
- tools: [
42
- {
43
- name: "init",
44
- description:
45
- "Initialize a new project using @hanzo/ui components and styles.",
46
- inputSchema: zodToJsonSchema(z.object({
47
- style: z.string().optional().describe("The style to use for the project (e.g., 'default' or 'new-york')"),
48
- })),
49
- },
50
- {
51
- name: "list_components",
52
- description: "List all available components in the registry",
53
- inputSchema: zodToJsonSchema(z.object({
54
- type: z.string().optional().describe("Filter components by type (e.g., 'ui', 'block')"),
55
- category: z.string().optional().describe("Filter components by category"),
56
- })),
57
- },
58
- {
59
- name: "get_component",
60
- description: "Get detailed information about a specific component",
61
- inputSchema: zodToJsonSchema(
62
- z.object({
63
- name: z
64
- .string()
65
- .describe("The name of the component to get from the registry"),
66
- })
67
- ),
68
- },
69
- {
70
- name: "add_component",
71
- description: "Get instructions for adding a component to a project",
72
- inputSchema: zodToJsonSchema(
73
- z.object({
74
- name: z
75
- .string()
76
- .describe("The name of the component to add"),
77
- style: z
78
- .string()
79
- .optional()
80
- .describe("The style to use (default, new-york, etc.)"),
81
- })
82
- ),
83
- },
84
- {
85
- name: "list_styles",
86
- description: "List all available styles in the registry",
87
- inputSchema: zodToJsonSchema(z.object({})),
88
- },
89
- {
90
- name: "search_registry",
91
- description: "Search the registry for components matching criteria",
92
- inputSchema: zodToJsonSchema(
93
- z.object({
94
- query: z
95
- .string()
96
- .describe("Search term to look for in component names and descriptions"),
97
- })
98
- ),
99
- },
100
- ],
101
- }
102
- })
103
-
104
- // Handle tool calls
105
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
106
- try {
107
- // Ensure we have arguments
108
- const args = request.params.arguments || {}
109
-
110
- // Get registry URL from environment variable or use default
111
- const REGISTRY_URL = process.env.REGISTRY_URL || "https://ui.hanzo.ai/registry/registry.json"
112
- const registry = await getRegistry(REGISTRY_URL)
113
-
114
- switch (request.params.name) {
115
- case "init": {
116
- const style = args.style || "default"
117
-
118
- let text = `# Initialize a new project with @hanzo/ui
119
-
120
- To create a new project with @hanzo/ui components, follow these steps:
121
-
122
- 1. Create a new project first:
123
- \`\`\`bash
124
- # Using npm
125
- npm create next-app@latest my-app
126
-
127
- # Or using yarn
128
- yarn create next-app my-app
129
-
130
- # Or using pnpm
131
- pnpm create next-app my-app
132
- \`\`\`
133
-
134
- 2. Navigate to your project directory:
135
- \`\`\`bash
136
- cd my-app
137
- \`\`\`
138
-
139
- 3. Install @hanzo/ui and initialize it:
140
- \`\`\`bash
141
- npx @hanzo/ui@latest init${style ? ` --style=${style}` : ""}
142
- \`\`\`
143
-
144
- This will:
145
- - Install all necessary dependencies
146
- - Set up the project structure for @hanzo/ui
147
- - Configure tailwind.css with the appropriate theme
148
- - Add component configuration
149
- `
150
-
151
- // Check if the registry has any additional setup instructions
152
- const setupConfig = registry.items.find(
153
- (item) => item.type === "registry:config" && item.name === "setup"
154
- )
155
-
156
- if (setupConfig) {
157
- text += `
158
- ## Additional Setup
159
-
160
- ${setupConfig.description || "Follow any additional setup instructions provided during initialization."}
161
- `
162
- }
163
-
164
- return {
165
- content: [
166
- { type: "text", text }
167
- ],
168
- }
169
- }
170
-
171
- case "list_components": {
172
- // Filter components based on type and category if provided
173
- const typeFilter = args.type ? `ui:${args.type}` : null
174
- const categoryFilter = args.category || null
175
-
176
- let components = registry.items.filter(item => {
177
- // Filter by type if specified
178
- if (typeFilter && !item.type.includes(typeFilter)) {
179
- return false
180
- }
181
-
182
- // Filter by category if specified
183
- if (categoryFilter && item.category !== categoryFilter) {
184
- return false
185
- }
186
-
187
- return true
188
- })
189
-
190
- // Group components by category if they have categories
191
- const hasCategories = components.some(item => item.category)
192
- let responseText = "# Available Components\n\n"
193
-
194
- if (hasCategories) {
195
- // Group by category
196
- const categorized = components.reduce((acc, item) => {
197
- const category = item.category || "Uncategorized"
198
- if (!acc[category]) {
199
- acc[category] = []
200
- }
201
- acc[category].push(item)
202
- return acc
203
- }, {} as Record<string, RegistryItem[]>)
204
-
205
- // Build response
206
- for (const [category, items] of Object.entries(categorized)) {
207
- responseText += `## ${category}\n\n`
208
-
209
- items.forEach(item => {
210
- responseText += `- **${item.name}** - ${item.description || 'No description available'}\n`
211
- })
212
-
213
- responseText += "\n"
214
- }
215
- } else {
216
- // Simple list
217
- components.forEach(item => {
218
- responseText += `- **${item.name}** (${item.type}) - ${item.description || 'No description available'}\n`
219
- })
220
- }
221
-
222
- responseText += "\nTo get detailed information about a specific component, use the `get_component` tool.\n"
223
- responseText += "To add a component to your project, use the `add_component` tool.\n"
224
-
225
- return {
226
- content: [{ type: "text", text: responseText }],
227
- }
228
- }
229
-
230
- case "get_component": {
231
- const name = z.string().parse(args.name)
232
-
233
- if (!name) {
234
- throw new Error("Component name is required")
235
- }
236
-
237
- const itemUrl = getRegistryItemUrl(name, REGISTRY_URL)
238
- const component = await getRegistryItem(itemUrl, "")
239
-
240
- if (!component) {
241
- return {
242
- content: [
243
- {
244
- type: "text",
245
- text: `Component '${name}' not found in the registry.`,
246
- },
247
- ],
248
- }
249
- }
250
-
251
- // Build a markdown description of the component
252
- let componentDetails = `# ${component.name}\n\n`
253
-
254
- if (component.description) {
255
- componentDetails += `${component.description}\n\n`
256
- }
257
-
258
- componentDetails += `**Type:** ${component.type}\n`
259
-
260
- if (component.category) {
261
- componentDetails += `**Category:** ${component.category}\n`
262
- }
263
-
264
- // Dependencies
265
- if (component.dependencies && component.dependencies.length > 0) {
266
- componentDetails += `\n## Dependencies\n\n`
267
- component.dependencies.forEach(dep => {
268
- componentDetails += `- ${dep}\n`
269
- })
270
- }
271
-
272
- // Registry Dependencies
273
- if (component.registryDependencies && component.registryDependencies.length > 0) {
274
- componentDetails += `\n## Required Components\n\n`
275
- componentDetails += `This component requires the following components that will be installed automatically:\n\n`
276
- component.registryDependencies.forEach(dep => {
277
- componentDetails += `- ${dep}\n`
278
- })
279
- }
280
-
281
- // Files
282
- if (component.files && component.files.length > 0) {
283
- componentDetails += `\n## Files\n\n`
284
- component.files.forEach(file => {
285
- componentDetails += `- ${file.path} (${file.type})\n`
286
- })
287
- }
288
-
289
- // Show example usage if available
290
- const exampleFile = component.files?.find(file => file.type === "registry:example")
291
- if (exampleFile && exampleFile.content) {
292
- componentDetails += `\n## Example Usage\n\n\`\`\`tsx\n${exampleFile.content}\n\`\`\`\n`
293
- }
294
-
295
- // Add installation instructions
296
- componentDetails += `\n## Installation\n\n`
297
- componentDetails += `Run the following command to add this component to your project:\n\n`
298
- componentDetails += `\`\`\`bash\n`
299
- componentDetails += `npx @hanzo/ui@latest add ${name}\n`
300
- componentDetails += `\`\`\`\n`
301
-
302
- return {
303
- content: [{ type: "text", text: componentDetails }],
304
- }
305
- }
306
-
307
- case "add_component": {
308
- const name = z.string().parse(args.name)
309
- const style = args.style || "default"
310
-
311
- if (!name) {
312
- throw new Error("Component name is required")
313
- }
314
-
315
- const itemUrl = getRegistryItemUrl(name, REGISTRY_URL)
316
- const component = await getRegistryItem(itemUrl, "")
317
-
318
- if (!component) {
319
- return {
320
- content: [
321
- {
322
- type: "text",
323
- text: `Component '${name}' not found in the registry.`,
324
- },
325
- ],
326
- }
327
- }
328
-
329
- // Check if the component has dependencies
330
- const hasDeps = component.registryDependencies && component.registryDependencies.length > 0
331
-
332
- let instructions = `# Adding the ${name} Component\n\n`
333
-
334
- // Main installation command
335
- instructions += `Run the following command to add the \`${name}\` component to your project:\n\n`
336
- instructions += `\`\`\`bash\n`
337
- instructions += `npx @hanzo/ui@latest add ${name} --style=${style}\n`
338
- instructions += `\`\`\`\n\n`
339
-
340
- // Explain what this will do
341
- instructions += `This will:\n`
342
- instructions += `- Add the component file(s) to your project\n`
343
- instructions += `- Install any required npm dependencies\n`
344
-
345
- if (hasDeps) {
346
- instructions += `- Install required component dependencies: ${component.registryDependencies!.join(", ")}\n`
347
- }
348
-
349
- // Usage example
350
- instructions += `\n## Usage\n\nAfter adding the component, you can import it in your project:\n\n`
351
- instructions += `\`\`\`tsx\n`
352
- instructions += `import { ${name.charAt(0).toUpperCase() + name.slice(1)} } from "@/components/ui/${name}"\n\n`
353
-
354
- // Add a simple example if possible
355
- if (component.type.includes("ui:")) {
356
- instructions += `export default function Example() {\n`
357
- instructions += ` return <${name.charAt(0).toUpperCase() + name.slice(1)} />\n`
358
- instructions += `}\n`
359
- }
360
-
361
- instructions += `\`\`\`\n`
362
-
363
- return {
364
- content: [
365
- {
366
- type: "text",
367
- text: instructions,
368
- },
369
- ],
370
- }
371
- }
372
-
373
- case "list_styles": {
374
- // Find all style-related items in the registry
375
- const styles = registry.items.filter(item =>
376
- item.type === "registry:style" || item.type.includes("style")
377
- )
378
-
379
- let styleInfo = "# Available Styles\n\n"
380
-
381
- if (styles.length === 0) {
382
- styleInfo += "The registry does not define any specific styles.\n\n"
383
- styleInfo += "The default style will be used when installing components.\n"
384
- } else {
385
- styles.forEach(style => {
386
- styleInfo += `## ${style.name}\n\n`
387
- styleInfo += `${style.description || 'No description available'}\n\n`
388
-
389
- // Add usage info
390
- styleInfo += `**Usage:**\n\n`
391
- styleInfo += `\`\`\`bash\n`
392
- styleInfo += `# Initialize with this style\n`
393
- styleInfo += `npx @hanzo/ui@latest init --style=${style.name}\n\n`
394
- styleInfo += `# Install components with this style\n`
395
- styleInfo += `npx @hanzo/ui@latest add [component] --style=${style.name}\n`
396
- styleInfo += `\`\`\`\n\n`
397
- })
398
- }
399
-
400
- return {
401
- content: [{ type: "text", text: styleInfo }],
402
- }
403
- }
404
-
405
- case "search_registry": {
406
- const query = z.string().parse(args.query).toLowerCase()
407
-
408
- if (!query || query.length < 2) {
409
- return {
410
- content: [
411
- {
412
- type: "text",
413
- text: "Please provide a search term with at least 2 characters.",
414
- },
415
- ],
416
- }
417
- }
418
-
419
- // Search through all items in the registry
420
- const results = registry.items.filter(item => {
421
- // Search in name
422
- if (item.name.toLowerCase().includes(query)) {
423
- return true
424
- }
425
-
426
- // Search in description
427
- if (item.description?.toLowerCase().includes(query)) {
428
- return true
429
- }
430
-
431
- // Search in category
432
- if (item.category?.toLowerCase().includes(query)) {
433
- return true
434
- }
435
-
436
- return false
437
- })
438
-
439
- if (results.length === 0) {
440
- return {
441
- content: [
442
- {
443
- type: "text",
444
- text: `No components found matching '${query}'. Try a different search term.`,
445
- },
446
- ],
447
- }
448
- }
449
-
450
- // Format the results
451
- let searchResults = `# Search Results for '${query}'\n\n`
452
- searchResults += `Found ${results.length} matching components\n\n`
453
-
454
- results.forEach(item => {
455
- searchResults += `## ${item.name}\n\n`
456
- searchResults += `**Type:** ${item.type}\n`
457
-
458
- if (item.category) {
459
- searchResults += `**Category:** ${item.category}\n`
460
- }
461
-
462
- if (item.description) {
463
- searchResults += `\n${item.description}\n`
464
- }
465
-
466
- searchResults += `\n**Installation:**\n\n`
467
- searchResults += `\`\`\`bash\nnpx @hanzo/ui@latest add ${item.name}\n\`\`\`\n\n`
468
- })
469
-
470
- return {
471
- content: [{ type: "text", text: searchResults }],
472
- }
473
- }
474
-
475
- default:
476
- throw new Error(`Tool ${request.params.name} not found`)
477
- }
478
- } catch (error) {
479
- if (error instanceof z.ZodError) {
480
- return {
481
- content: [
482
- {
483
- type: "text",
484
- text: `Invalid input: ${JSON.stringify(error.errors)}`,
485
- },
486
- ],
487
- }
488
- }
489
-
490
- throw error
491
- }
492
- })
493
-
494
- /**
495
- * Fetches and parses the registry from the given URL
496
- * @param registryUrl - URL to the registry.json file
497
- * @returns The parsed registry object
498
- */
499
- async function getRegistry(registryUrl: string): Promise<Registry> {
500
- try {
501
- const [registryJson] = await fetchRegistry([registryUrl], {
502
- useCache: false,
503
- })
504
- return registrySchema.parse(registryJson)
505
- } catch (error) {
506
- console.error(`Failed to fetch registry from ${registryUrl}:`, error)
507
- // Return a minimal valid registry if we can't fetch the real one
508
- return {
509
- name: "hanzo-ui",
510
- items: [],
511
- }
512
- }
513
- }
514
-
515
- // Support CommonJS
516
- if (typeof module !== 'undefined') {
517
- module.exports = { server }
518
- }
@@ -1,10 +0,0 @@
1
- {
2
- "name": "@hanzo/ui-mcp",
3
- "private": true,
4
- "type": "module",
5
- "main": "../dist/mcp/index.js",
6
- "types": "../dist/mcp/index.d.ts",
7
- "scripts": {
8
- "build": "tsc"
9
- }
10
- }
@@ -1,164 +0,0 @@
1
- import { registryItemSchema, RegistryItem, Registry } from "./index"
2
- import { z } from "zod"
3
-
4
- const registryCache = new Map<string, Promise<any>>()
5
-
6
- /**
7
- * Gets the full registry URL based on the registry name or URL provided
8
- * @param registry - Registry name, URL, or file path
9
- * @returns The complete registry URL
10
- */
11
- export function getRegistryUrl(registry: string): string {
12
- // Check if registry is a full URL
13
- if (registry.startsWith("http")) {
14
- return registry
15
- }
16
-
17
- // Default to Hanzo registry if REGISTRY_BASE_URL is defined, otherwise use hanzo
18
- const baseUrl = process.env.REGISTRY_BASE_URL || "https://ui.hanzo.com/registry"
19
-
20
- // Check if registry is a path to a JSON file
21
- if (registry.endsWith(".json")) {
22
- return `${baseUrl}/${registry}`
23
- }
24
-
25
- // Assume registry is a registry style
26
- return `${baseUrl}/${registry}/registry.json`
27
- }
28
-
29
- /**
30
- * Fetches a specific registry item by URL
31
- * @param itemUrl - The URL of the item to fetch
32
- * @param basePath - Base path for resolving imports
33
- * @returns The registry item or null if not found
34
- */
35
- export async function getRegistryItem(
36
- itemUrl: string,
37
- basePath: string
38
- ): Promise<RegistryItem | null> {
39
- try {
40
- const response = await fetch(itemUrl)
41
-
42
- if (!response.ok) {
43
- console.error(`Failed to fetch registry item from ${itemUrl}: ${response.status} ${response.statusText}`)
44
- return null
45
- }
46
-
47
- const item = await response.json()
48
- const validatedItem = registryItemSchema.safeParse(item)
49
-
50
- if (!validatedItem.success) {
51
- console.error(`Invalid registry item format: ${JSON.stringify(validatedItem.error)}`)
52
- return null
53
- }
54
-
55
- // Process and resolve file paths
56
- if (validatedItem.data.files) {
57
- for (const file of validatedItem.data.files) {
58
- if (!file.content) {
59
- continue
60
- }
61
-
62
- // If the file has a target, we resolve it from the target
63
- if (file.target) {
64
- file.target = resolveImport(file.target, basePath)
65
- }
66
- }
67
- }
68
-
69
- return validatedItem.data
70
- } catch (error) {
71
- console.error(`Error fetching registry item: ${error}`)
72
- return null
73
- }
74
- }
75
-
76
- /**
77
- * Resolves an import path relative to a base path
78
- * @param importPath - The import path to resolve
79
- * @param basePath - The base path to resolve against
80
- * @returns The resolved import path
81
- */
82
- export function resolveImport(importPath: string, basePath: string): string {
83
- const importParts = importPath?.split("/")
84
-
85
- // Check if it's a relative import
86
- if (importPath.startsWith(".")) {
87
- return [basePath.replace(/^@/, ""), ...importParts].filter(Boolean).join("/")
88
- }
89
-
90
- // Check if it's a scope package
91
- if (importParts?.[0]?.startsWith("@")) {
92
- return importPath
93
- }
94
-
95
- return importPath
96
- }
97
-
98
- /**
99
- * Fetches registry data from one or more paths
100
- * @param paths - Array of registry paths to fetch
101
- * @param options - Options for fetching the registry
102
- * @returns Array of registry data
103
- */
104
- export async function fetchRegistry(
105
- paths: string[],
106
- options: { useCache?: boolean } = {}
107
- ): Promise<Registry[]> {
108
- options = {
109
- useCache: true,
110
- ...options,
111
- }
112
-
113
- try {
114
- const results = await Promise.all(
115
- paths.map(async (path) => {
116
- const url = getRegistryUrl(path)
117
-
118
- // Check cache first if caching is enabled
119
- if (options.useCache && registryCache.has(url)) {
120
- return registryCache.get(url)
121
- }
122
-
123
- // Store the promise in the cache before awaiting if caching is enabled
124
- const fetchPromise = (async () => {
125
- const response = await fetch(url)
126
-
127
- if (!response.ok) {
128
- throw new Error(
129
- `Failed to fetch registry from ${url}. ${response.status} ${response.statusText}`
130
- )
131
- }
132
-
133
- return response.json()
134
- })()
135
-
136
- if (options.useCache) {
137
- registryCache.set(url, fetchPromise)
138
- }
139
- return fetchPromise
140
- })
141
- )
142
-
143
- return results
144
- } catch (error) {
145
- console.error(`Error fetching registry: ${error}`)
146
- throw error
147
- }
148
- }
149
-
150
- /**
151
- * Gets the URL for a specific registry item
152
- * @param itemName - The name of the registry item
153
- * @param registryUrl - The base registry URL
154
- * @returns The URL for the specific registry item
155
- */
156
- export function getRegistryItemUrl(itemName: string, registryUrl: string): string {
157
- const registryBaseUrl = registryUrl.replace(/\/registry\.json$/, "")
158
- return `${registryBaseUrl}/r/${itemName}.json`
159
- }
160
-
161
- // Support CommonJS
162
- if (typeof module !== 'undefined') {
163
- module.exports = { getRegistryUrl, getRegistryItem, resolveImport, fetchRegistry, getRegistryItemUrl }
164
- }