@hanzo/ui 5.0.0 → 5.0.2

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/README.md +192 -185
  2. package/assets/ai-icons.tsx +207 -0
  3. package/assets/crypto.tsx +33 -0
  4. package/assets/file-type-icon.tsx +66 -0
  5. package/assets/file.tsx +45 -0
  6. package/assets/general.tsx +2318 -0
  7. package/assets/hanzo-logo.svg +9 -0
  8. package/assets/hanzo-logo.tsx +17 -0
  9. package/assets/index.ts +122 -0
  10. package/assets/index.tsx +4 -0
  11. package/assets/llm-provider.tsx +1094 -0
  12. package/bin/cli.js +100 -0
  13. package/bin/create-registry.js +108 -0
  14. package/bin/mcp.js +403 -0
  15. package/bin/npx-registry-mcp.js +15 -0
  16. package/bin/registry-mcp-wrapper.sh +19 -0
  17. package/bin/registry-mcp.js +100 -0
  18. package/bin/start-mcp-server.sh +22 -0
  19. package/bin/test-mcp.sh +52 -0
  20. package/bin/update-registry.js +196 -0
  21. package/blocks/auth/index.ts +6 -0
  22. package/blocks/auth/login-2fa.tsx +165 -0
  23. package/blocks/auth/login-basic.tsx +94 -0
  24. package/blocks/auth/login-social.tsx +148 -0
  25. package/blocks/auth/magic-link.tsx +129 -0
  26. package/blocks/auth/password-reset.tsx +97 -0
  27. package/blocks/auth/signup.tsx +157 -0
  28. package/blocks/components/accordian-block.tsx +48 -0
  29. package/blocks/components/block-component-props.ts +11 -0
  30. package/blocks/components/bullet-cards-block.tsx +46 -0
  31. package/blocks/components/card-block/index.tsx +171 -0
  32. package/blocks/components/card-block/link-out-button.tsx +20 -0
  33. package/blocks/components/card-block/util.ts +28 -0
  34. package/blocks/components/carte-blanche-block/index.tsx +127 -0
  35. package/blocks/components/carte-blanche-block/variant-content-left.tsx +49 -0
  36. package/blocks/components/content.tsx +70 -0
  37. package/blocks/components/cta-block.tsx +115 -0
  38. package/blocks/components/enh-heading-block.tsx +204 -0
  39. package/blocks/components/grid-block/grid-block-mutator.ts +12 -0
  40. package/blocks/components/grid-block/index.tsx +83 -0
  41. package/blocks/components/grid-block/mutator-registry.ts +10 -0
  42. package/blocks/components/grid-block/table-borders.mutator.ts +47 -0
  43. package/blocks/components/group-block.tsx +83 -0
  44. package/blocks/components/heading-block.tsx +88 -0
  45. package/blocks/components/image-block.tsx +111 -0
  46. package/blocks/components/index.ts +30 -0
  47. package/blocks/components/screenful-block/content.tsx +123 -0
  48. package/blocks/components/screenful-block/index.tsx +107 -0
  49. package/blocks/components/screenful-block/poster-background.tsx +34 -0
  50. package/blocks/components/screenful-block/video-background.tsx +45 -0
  51. package/blocks/components/space-block.tsx +66 -0
  52. package/blocks/components/video-block.tsx +138 -0
  53. package/blocks/data-display/activity-feed.tsx +242 -0
  54. package/blocks/data-display/data-table.tsx +235 -0
  55. package/blocks/data-display/stats-grid.tsx +194 -0
  56. package/blocks/def/accordian-block.ts +14 -0
  57. package/blocks/def/block.ts +7 -0
  58. package/blocks/def/bullet-cards-block.ts +22 -0
  59. package/blocks/def/card-block.ts +22 -0
  60. package/blocks/def/carte-blanche-block.ts +21 -0
  61. package/blocks/def/cta-block.ts +19 -0
  62. package/blocks/def/element-block.ts +11 -0
  63. package/blocks/def/enh-heading-block.ts +44 -0
  64. package/blocks/def/grid-block.ts +16 -0
  65. package/blocks/def/group-block.ts +11 -0
  66. package/blocks/def/heading-block.ts +15 -0
  67. package/blocks/def/image-block.ts +31 -0
  68. package/blocks/def/index.ts +35 -0
  69. package/blocks/def/screenful-block.ts +54 -0
  70. package/blocks/def/space-block.ts +64 -0
  71. package/blocks/def/video-block.ts +9 -0
  72. package/blocks/ecommerce/checkout.tsx +242 -0
  73. package/blocks/ecommerce/index.ts +7 -0
  74. package/blocks/ecommerce/product-detail.tsx +257 -0
  75. package/blocks/ecommerce/product-grid.tsx +148 -0
  76. package/blocks/ecommerce/shopping-cart.tsx +181 -0
  77. package/blocks/index.ts +2 -0
  78. package/blocks/marketing/cta-section.tsx +207 -0
  79. package/blocks/marketing/faq.tsx +159 -0
  80. package/blocks/marketing/features-grid.tsx +156 -0
  81. package/blocks/marketing/hero-section.tsx +192 -0
  82. package/blocks/marketing/index.ts +6 -0
  83. package/blocks/marketing/pricing-table.tsx +121 -0
  84. package/blocks/marketing/testimonials.tsx +196 -0
  85. package/components/index.ts +9 -0
  86. package/dist/index.js +9072 -1089
  87. package/dist/index.js.map +1 -1
  88. package/dist/index.mjs +8698 -45
  89. package/dist/index.mjs.map +1 -1
  90. package/dist/tailwind.js +2025 -0
  91. package/dist/tailwind.js.map +1 -0
  92. package/dist/tailwind.mjs +2013 -0
  93. package/dist/tailwind.mjs.map +1 -0
  94. package/dist/types.js +59 -0
  95. package/dist/types.js.map +1 -0
  96. package/dist/types.mjs +53 -0
  97. package/dist/types.mjs.map +1 -0
  98. package/dist/utils.js +30 -0
  99. package/dist/utils.js.map +1 -0
  100. package/dist/utils.mjs +26 -0
  101. package/dist/utils.mjs.map +1 -0
  102. package/frameworks/core/index.ts +6 -0
  103. package/frameworks/core/utils/index.ts +64 -0
  104. package/frameworks/react/components/button.tsx +26 -0
  105. package/frameworks/react/components/index.ts +5 -0
  106. package/frameworks/react/hooks/index.ts +5 -0
  107. package/frameworks/react/index.ts +9 -0
  108. package/frameworks/react/package.json +8 -0
  109. package/frameworks/react/utils/index.ts +2 -0
  110. package/frameworks/react-native/index.ts +9 -0
  111. package/frameworks/react-native/package.json +8 -0
  112. package/frameworks/registry.json +371 -0
  113. package/frameworks/setup.sh +69 -0
  114. package/frameworks/svelte/index.ts +9 -0
  115. package/frameworks/svelte/package.json +8 -0
  116. package/frameworks/tracker.json +1854 -0
  117. package/frameworks/vue/index.ts +9 -0
  118. package/frameworks/vue/package.json +8 -0
  119. package/helpers/file.ts +33 -0
  120. package/helpers/memoization.ts +40 -0
  121. package/package.json +272 -153
  122. package/primitives/accordion.tsx +74 -0
  123. package/primitives/action-button.tsx +42 -0
  124. package/primitives/alert-dialog.tsx +185 -0
  125. package/primitives/alert.tsx +74 -0
  126. package/primitives/apply-typography.tsx +55 -0
  127. package/primitives/aspect-ratio.tsx +5 -0
  128. package/primitives/avatar.tsx +57 -0
  129. package/primitives/background-beams.tsx +142 -0
  130. package/primitives/badge.tsx +45 -0
  131. package/primitives/breadcrumb.tsx +130 -0
  132. package/primitives/breakpoint-indicator.tsx +19 -0
  133. package/primitives/button.tsx +72 -0
  134. package/primitives/calendar.tsx +72 -0
  135. package/primitives/card.tsx +97 -0
  136. package/primitives/carousel.tsx +238 -0
  137. package/primitives/chat/chat-input-area.tsx +88 -0
  138. package/primitives/chat/chat-input.tsx +71 -0
  139. package/primitives/chat/files-preview.tsx +331 -0
  140. package/primitives/chat/index.ts +6 -0
  141. package/primitives/chat/json-form.tsx +8 -0
  142. package/primitives/chat/message-list.tsx +308 -0
  143. package/primitives/chat/message.tsx +569 -0
  144. package/primitives/chat/sqlite-preview.tsx +215 -0
  145. package/primitives/checkbox.tsx +32 -0
  146. package/primitives/collapsible.tsx +9 -0
  147. package/primitives/combobox.tsx +239 -0
  148. package/primitives/command.tsx +151 -0
  149. package/primitives/context-menu.tsx +206 -0
  150. package/primitives/copy-to-clipboard-icon.tsx +60 -0
  151. package/primitives/dialog-video-controller.tsx +38 -0
  152. package/primitives/dialog.tsx +128 -0
  153. package/primitives/dot-pattern.tsx +57 -0
  154. package/primitives/dots-loader.tsx +13 -0
  155. package/primitives/drawer.tsx +113 -0
  156. package/primitives/dropdown-menu.tsx +199 -0
  157. package/primitives/error-message.tsx +19 -0
  158. package/primitives/file-uploader.tsx +203 -0
  159. package/primitives/form.tsx +185 -0
  160. package/primitives/hover-card.tsx +28 -0
  161. package/primitives/icons/github.tsx +14 -0
  162. package/primitives/icons/index.ts +18 -0
  163. package/primitives/icons/youtube-logo.tsx +59 -0
  164. package/primitives/index-client.ts +4 -0
  165. package/primitives/index-common.ts +304 -0
  166. package/primitives/index-next.ts +4 -0
  167. package/primitives/input-otp.tsx +65 -0
  168. package/primitives/input.tsx +128 -0
  169. package/primitives/label.tsx +21 -0
  170. package/primitives/list-adaptor.ts +12 -0
  171. package/primitives/list-box.tsx +74 -0
  172. package/primitives/loading-spinner.tsx +33 -0
  173. package/primitives/markdown-preview.tsx +612 -0
  174. package/primitives/mermaid.tsx +196 -0
  175. package/primitives/navigation-menu.tsx +147 -0
  176. package/primitives/next/image.tsx +91 -0
  177. package/primitives/next/index.ts +7 -0
  178. package/primitives/next/inline-icon.tsx +36 -0
  179. package/primitives/next/link-element.tsx +109 -0
  180. package/primitives/next/mdx-link.tsx +22 -0
  181. package/primitives/next/media-stack.tsx +52 -0
  182. package/primitives/next/nav-items.tsx +45 -0
  183. package/primitives/next/youtube-embed.tsx +83 -0
  184. package/primitives/pagination.tsx +117 -0
  185. package/primitives/popover.tsx +34 -0
  186. package/primitives/pretty-json-print.tsx +28 -0
  187. package/primitives/progress.tsx +27 -0
  188. package/primitives/prompt-textarea.tsx +72 -0
  189. package/primitives/qr-code.tsx +112 -0
  190. package/primitives/radio-group.tsx +42 -0
  191. package/primitives/resizable.tsx +47 -0
  192. package/primitives/scroll-area.tsx +57 -0
  193. package/primitives/search-input.tsx +66 -0
  194. package/primitives/select.tsx +122 -0
  195. package/primitives/separator.tsx +26 -0
  196. package/primitives/sheet.tsx +139 -0
  197. package/primitives/skeleton.tsx +18 -0
  198. package/primitives/slider.tsx +63 -0
  199. package/primitives/sonner.tsx +35 -0
  200. package/primitives/step-indicator.tsx +69 -0
  201. package/primitives/stepper.tsx +272 -0
  202. package/primitives/switch.tsx +27 -0
  203. package/primitives/table.tsx +105 -0
  204. package/primitives/tabs.tsx +50 -0
  205. package/primitives/text-area.tsx +26 -0
  206. package/primitives/text-link.tsx +27 -0
  207. package/primitives/textarea.tsx +64 -0
  208. package/primitives/textfield.tsx +78 -0
  209. package/primitives/toast.tsx +30 -0
  210. package/primitives/toggle-group.tsx +63 -0
  211. package/primitives/toggle.tsx +44 -0
  212. package/primitives/tooltip.tsx +47 -0
  213. package/primitives/video-player.tsx +23 -0
  214. package/src/button.ts +1 -0
  215. package/src/hooks/index.ts +7 -0
  216. package/src/hooks/use-click-away.ts +31 -0
  217. package/src/hooks/use-combined-refs.ts +22 -0
  218. package/src/hooks/use-copy-clipboard.ts +30 -0
  219. package/src/hooks/use-debounce.ts +17 -0
  220. package/src/hooks/use-fill-ids.ts +25 -0
  221. package/src/hooks/use-map.ts +26 -0
  222. package/src/hooks/use-measure.ts +42 -0
  223. package/src/hooks/use-reverse-video-playback.ts +43 -0
  224. package/src/hooks/use-scroll-restoration.ts +50 -0
  225. package/src/index-lean.ts +87 -0
  226. package/src/index.ts +54 -0
  227. package/src/mcp/README.md +141 -0
  228. package/src/mcp/enhanced-server.ts +1208 -0
  229. package/src/mcp/index.ts +518 -0
  230. package/src/mcp/package.json +10 -0
  231. package/src/registry/api.ts +164 -0
  232. package/src/registry/index.ts +60 -0
  233. package/src/registry/package.json +10 -0
  234. package/src/utils.ts +19 -0
  235. package/style/drawer.css +163 -0
  236. package/style/globals.css +13 -0
  237. package/style/hanzo-common.css +31 -0
  238. package/style/hanzo-default-colors.css +82 -0
  239. package/style/theme-provider.tsx +20 -0
  240. package/tailwind/colors.tailwind.js +53 -0
  241. package/tailwind/fontFamily.tailwind.ts +7 -0
  242. package/tailwind/fontSize.tailwind.ts +13 -0
  243. package/tailwind/index.ts +7 -0
  244. package/tailwind/safelist.tailwind.js +26 -0
  245. package/tailwind/screens.tailwind.js +8 -0
  246. package/tailwind/spacing.tailwind.js +65 -0
  247. package/tailwind/tailwind.config.hanzo-preset.d.ts +5 -0
  248. package/tailwind/tailwind.config.hanzo-preset.js +915 -0
  249. package/tailwind/tw-font-desc.ts +15 -0
  250. package/tailwind/typo-plugin/get-plugin-styles.js +679 -0
  251. package/tailwind/typo-plugin/index.d.ts +9 -0
  252. package/tailwind/typo-plugin/index.js +141 -0
  253. package/tailwind/typo-plugin/utils.js +60 -0
  254. package/tailwind/typography-test.mdx +35 -0
  255. package/tailwind/z-index.tailwind.js +71 -0
  256. package/types/animation-def.ts +3 -0
  257. package/types/breakpoints.ts +11 -0
  258. package/types/bullet-item.ts +10 -0
  259. package/types/button-def.ts +39 -0
  260. package/types/dimensions.ts +8 -0
  261. package/types/grid-def.ts +56 -0
  262. package/types/image-def.ts +32 -0
  263. package/types/index.ts +30 -0
  264. package/types/link-def.ts +56 -0
  265. package/types/media-stack-def.ts +31 -0
  266. package/types/t-shirt-size.ts +5 -0
  267. package/types/tshirt-dimensions.ts +20 -0
  268. package/types/video-def.ts +25 -0
  269. package/util/blob.ts +33 -0
  270. package/util/copy-to-clipboard.ts +17 -0
  271. package/util/create-shadow-root.ts +22 -0
  272. package/util/date.ts +84 -0
  273. package/util/debounce.ts +11 -0
  274. package/util/file.ts +15 -0
  275. package/util/format-and-abbreviate-as-currency.ts +125 -0
  276. package/util/format-text.ts +34 -0
  277. package/util/format-to-max-char.ts +68 -0
  278. package/util/index-client.ts +3 -0
  279. package/util/index.ts +112 -0
  280. package/util/number-abbreviate.ts +49 -0
  281. package/util/specifier.ts +43 -0
  282. package/util/spread-to-transform.ts +25 -0
  283. package/util/step-animation.ts +90 -0
  284. package/util/timing.ts +3 -0
  285. package/util/toasts.tsx +17 -0
  286. package/util/two-way-map.ts +19 -0
  287. package/CHANGELOG.md +0 -184
  288. package/LICENSE +0 -21
  289. package/dist/ai/index.js +0 -53
  290. package/dist/ai/index.js.map +0 -1
  291. package/dist/ai/index.mjs +0 -4
  292. package/dist/ai/index.mjs.map +0 -1
  293. package/dist/blocks/index.js +0 -983
  294. package/dist/blocks/index.js.map +0 -1
  295. package/dist/blocks/index.mjs +0 -945
  296. package/dist/blocks/index.mjs.map +0 -1
  297. package/dist/calendar/index.js +0 -14
  298. package/dist/calendar/index.js.map +0 -1
  299. package/dist/calendar/index.mjs +0 -5
  300. package/dist/calendar/index.mjs.map +0 -1
  301. package/dist/carousel/index.js +0 -220
  302. package/dist/carousel/index.js.map +0 -1
  303. package/dist/carousel/index.mjs +0 -191
  304. package/dist/carousel/index.mjs.map +0 -1
  305. package/dist/charts/index.js +0 -945
  306. package/dist/charts/index.js.map +0 -1
  307. package/dist/charts/index.mjs +0 -901
  308. package/dist/charts/index.mjs.map +0 -1
  309. package/dist/chunk-26T4V5QU.mjs +0 -111
  310. package/dist/chunk-26T4V5QU.mjs.map +0 -1
  311. package/dist/chunk-2A5KXDLJ.js +0 -22
  312. package/dist/chunk-2A5KXDLJ.js.map +0 -1
  313. package/dist/chunk-2CJ4HMF4.js +0 -79
  314. package/dist/chunk-2CJ4HMF4.js.map +0 -1
  315. package/dist/chunk-2OIQKC5E.js +0 -236
  316. package/dist/chunk-2OIQKC5E.js.map +0 -1
  317. package/dist/chunk-2X3KSYBN.js +0 -44
  318. package/dist/chunk-2X3KSYBN.js.map +0 -1
  319. package/dist/chunk-3PBQGYR7.mjs +0 -100
  320. package/dist/chunk-3PBQGYR7.mjs.map +0 -1
  321. package/dist/chunk-3POQQ6L7.js +0 -62
  322. package/dist/chunk-3POQQ6L7.js.map +0 -1
  323. package/dist/chunk-4B47GITH.mjs +0 -28
  324. package/dist/chunk-4B47GITH.mjs.map +0 -1
  325. package/dist/chunk-4BC2OH6B.js +0 -129
  326. package/dist/chunk-4BC2OH6B.js.map +0 -1
  327. package/dist/chunk-5AQSGH4R.js +0 -130
  328. package/dist/chunk-5AQSGH4R.js.map +0 -1
  329. package/dist/chunk-5IHRJFOO.mjs +0 -102
  330. package/dist/chunk-5IHRJFOO.mjs.map +0 -1
  331. package/dist/chunk-5LDGR7YN.mjs +0 -28
  332. package/dist/chunk-5LDGR7YN.mjs.map +0 -1
  333. package/dist/chunk-5MCN3VYM.mjs +0 -23
  334. package/dist/chunk-5MCN3VYM.mjs.map +0 -1
  335. package/dist/chunk-6AVAMRMB.mjs +0 -47
  336. package/dist/chunk-6AVAMRMB.mjs.map +0 -1
  337. package/dist/chunk-6H62JRNM.mjs +0 -120
  338. package/dist/chunk-6H62JRNM.mjs.map +0 -1
  339. package/dist/chunk-6KCII3F6.mjs +0 -126
  340. package/dist/chunk-6KCII3F6.mjs.map +0 -1
  341. package/dist/chunk-7EHB43BJ.js +0 -155
  342. package/dist/chunk-7EHB43BJ.js.map +0 -1
  343. package/dist/chunk-7LRD23Q5.js +0 -191
  344. package/dist/chunk-7LRD23Q5.js.map +0 -1
  345. package/dist/chunk-7SAHKOJG.mjs +0 -45
  346. package/dist/chunk-7SAHKOJG.mjs.map +0 -1
  347. package/dist/chunk-A3D2YZK3.js +0 -50
  348. package/dist/chunk-A3D2YZK3.js.map +0 -1
  349. package/dist/chunk-AL4QFH7V.js +0 -63
  350. package/dist/chunk-AL4QFH7V.js.map +0 -1
  351. package/dist/chunk-B3WFEG6U.js +0 -69
  352. package/dist/chunk-B3WFEG6U.js.map +0 -1
  353. package/dist/chunk-BDZQJ6GK.js +0 -242
  354. package/dist/chunk-BDZQJ6GK.js.map +0 -1
  355. package/dist/chunk-BRWFYRGX.js +0 -61
  356. package/dist/chunk-BRWFYRGX.js.map +0 -1
  357. package/dist/chunk-C5DNTLBO.js +0 -53
  358. package/dist/chunk-C5DNTLBO.js.map +0 -1
  359. package/dist/chunk-CRALRACO.js +0 -54
  360. package/dist/chunk-CRALRACO.js.map +0 -1
  361. package/dist/chunk-CVACQJRM.js +0 -149
  362. package/dist/chunk-CVACQJRM.js.map +0 -1
  363. package/dist/chunk-DEIUKFPZ.mjs +0 -63
  364. package/dist/chunk-DEIUKFPZ.mjs.map +0 -1
  365. package/dist/chunk-DN2AEEA2.js +0 -13
  366. package/dist/chunk-DN2AEEA2.js.map +0 -1
  367. package/dist/chunk-DTNRWU4B.mjs +0 -35
  368. package/dist/chunk-DTNRWU4B.mjs.map +0 -1
  369. package/dist/chunk-DXIUEWRJ.mjs +0 -31
  370. package/dist/chunk-DXIUEWRJ.mjs.map +0 -1
  371. package/dist/chunk-DYFV66JX.mjs +0 -54
  372. package/dist/chunk-DYFV66JX.mjs.map +0 -1
  373. package/dist/chunk-F3WMAHXV.mjs +0 -86
  374. package/dist/chunk-F3WMAHXV.mjs.map +0 -1
  375. package/dist/chunk-F4RWPBBB.js +0 -79
  376. package/dist/chunk-F4RWPBBB.js.map +0 -1
  377. package/dist/chunk-FEGAPM6U.js +0 -194
  378. package/dist/chunk-FEGAPM6U.js.map +0 -1
  379. package/dist/chunk-G5TS56PW.mjs +0 -160
  380. package/dist/chunk-G5TS56PW.mjs.map +0 -1
  381. package/dist/chunk-GG6VGOEN.mjs +0 -590
  382. package/dist/chunk-GG6VGOEN.mjs.map +0 -1
  383. package/dist/chunk-GLAMGK32.mjs +0 -54
  384. package/dist/chunk-GLAMGK32.mjs.map +0 -1
  385. package/dist/chunk-GNMMUJXD.mjs +0 -200
  386. package/dist/chunk-GNMMUJXD.mjs.map +0 -1
  387. package/dist/chunk-GNPBULLS.mjs +0 -600
  388. package/dist/chunk-GNPBULLS.mjs.map +0 -1
  389. package/dist/chunk-GTE2DELE.js +0 -65
  390. package/dist/chunk-GTE2DELE.js.map +0 -1
  391. package/dist/chunk-GUQAFFTH.js +0 -94
  392. package/dist/chunk-GUQAFFTH.js.map +0 -1
  393. package/dist/chunk-H5VOYZHT.mjs +0 -34
  394. package/dist/chunk-H5VOYZHT.mjs.map +0 -1
  395. package/dist/chunk-HR6PBOGG.mjs +0 -59
  396. package/dist/chunk-HR6PBOGG.mjs.map +0 -1
  397. package/dist/chunk-HROONQS3.js +0 -55
  398. package/dist/chunk-HROONQS3.js.map +0 -1
  399. package/dist/chunk-IAO7SOQ3.mjs +0 -56
  400. package/dist/chunk-IAO7SOQ3.mjs.map +0 -1
  401. package/dist/chunk-K2QKU3K6.mjs +0 -40
  402. package/dist/chunk-K2QKU3K6.mjs.map +0 -1
  403. package/dist/chunk-KEUZZCCP.js +0 -53
  404. package/dist/chunk-KEUZZCCP.js.map +0 -1
  405. package/dist/chunk-KJXSLTG7.mjs +0 -73
  406. package/dist/chunk-KJXSLTG7.mjs.map +0 -1
  407. package/dist/chunk-L5AFUCVH.mjs +0 -26
  408. package/dist/chunk-L5AFUCVH.mjs.map +0 -1
  409. package/dist/chunk-LB3I52KZ.mjs +0 -42
  410. package/dist/chunk-LB3I52KZ.mjs.map +0 -1
  411. package/dist/chunk-LN75MJQ2.js +0 -71
  412. package/dist/chunk-LN75MJQ2.js.map +0 -1
  413. package/dist/chunk-LRBOFJUV.js +0 -60
  414. package/dist/chunk-LRBOFJUV.js.map +0 -1
  415. package/dist/chunk-MMNYRBOU.js +0 -157
  416. package/dist/chunk-MMNYRBOU.js.map +0 -1
  417. package/dist/chunk-MO65YF6P.js +0 -236
  418. package/dist/chunk-MO65YF6P.js.map +0 -1
  419. package/dist/chunk-N4KHP5FC.mjs +0 -33
  420. package/dist/chunk-N4KHP5FC.mjs.map +0 -1
  421. package/dist/chunk-NP2J7AB7.mjs +0 -121
  422. package/dist/chunk-NP2J7AB7.mjs.map +0 -1
  423. package/dist/chunk-OLR6SGYO.js +0 -57
  424. package/dist/chunk-OLR6SGYO.js.map +0 -1
  425. package/dist/chunk-ON7NQ4DY.js +0 -21
  426. package/dist/chunk-ON7NQ4DY.js.map +0 -1
  427. package/dist/chunk-PE3VFRLV.mjs +0 -198
  428. package/dist/chunk-PE3VFRLV.mjs.map +0 -1
  429. package/dist/chunk-Q7LOOIE5.mjs +0 -8
  430. package/dist/chunk-Q7LOOIE5.mjs.map +0 -1
  431. package/dist/chunk-QFA6U75G.mjs +0 -51
  432. package/dist/chunk-QFA6U75G.mjs.map +0 -1
  433. package/dist/chunk-QJQPT4WX.js +0 -638
  434. package/dist/chunk-QJQPT4WX.js.map +0 -1
  435. package/dist/chunk-QKHQPBSR.mjs +0 -20
  436. package/dist/chunk-QKHQPBSR.mjs.map +0 -1
  437. package/dist/chunk-SJD4XRFJ.mjs +0 -141
  438. package/dist/chunk-SJD4XRFJ.mjs.map +0 -1
  439. package/dist/chunk-SOOJLU4C.mjs +0 -19
  440. package/dist/chunk-SOOJLU4C.mjs.map +0 -1
  441. package/dist/chunk-T66B5IM5.js +0 -51
  442. package/dist/chunk-T66B5IM5.js.map +0 -1
  443. package/dist/chunk-T7RPZDO4.js +0 -645
  444. package/dist/chunk-T7RPZDO4.js.map +0 -1
  445. package/dist/chunk-TGRMDGTV.mjs +0 -38
  446. package/dist/chunk-TGRMDGTV.mjs.map +0 -1
  447. package/dist/chunk-TH2UKMCO.mjs +0 -11
  448. package/dist/chunk-TH2UKMCO.mjs.map +0 -1
  449. package/dist/chunk-TMV45OKE.mjs +0 -113
  450. package/dist/chunk-TMV45OKE.mjs.map +0 -1
  451. package/dist/chunk-TUJ7EVEK.js +0 -171
  452. package/dist/chunk-TUJ7EVEK.js.map +0 -1
  453. package/dist/chunk-ULNWDOI7.js +0 -122
  454. package/dist/chunk-ULNWDOI7.js.map +0 -1
  455. package/dist/chunk-UNUTTHCH.mjs +0 -210
  456. package/dist/chunk-UNUTTHCH.mjs.map +0 -1
  457. package/dist/chunk-VJMI6BG4.mjs +0 -10
  458. package/dist/chunk-VJMI6BG4.mjs.map +0 -1
  459. package/dist/chunk-VZVOB5MG.mjs +0 -26
  460. package/dist/chunk-VZVOB5MG.mjs.map +0 -1
  461. package/dist/chunk-WD67O22C.js +0 -50
  462. package/dist/chunk-WD67O22C.js.map +0 -1
  463. package/dist/chunk-WYPMLIJN.js +0 -53
  464. package/dist/chunk-WYPMLIJN.js.map +0 -1
  465. package/dist/chunk-X32I34NH.js +0 -109
  466. package/dist/chunk-X32I34NH.js.map +0 -1
  467. package/dist/chunk-X5MOZ3YL.js +0 -65
  468. package/dist/chunk-X5MOZ3YL.js.map +0 -1
  469. package/dist/chunk-Y4JVIPQZ.mjs +0 -31
  470. package/dist/chunk-Y4JVIPQZ.mjs.map +0 -1
  471. package/dist/chunk-Y6WOV2LZ.js +0 -95
  472. package/dist/chunk-Y6WOV2LZ.js.map +0 -1
  473. package/dist/chunk-YAEN5SCU.mjs +0 -41
  474. package/dist/chunk-YAEN5SCU.mjs.map +0 -1
  475. package/dist/chunk-YH6XDF3N.js +0 -121
  476. package/dist/chunk-YH6XDF3N.js.map +0 -1
  477. package/dist/chunk-YJKA4D75.mjs +0 -124
  478. package/dist/chunk-YJKA4D75.mjs.map +0 -1
  479. package/dist/chunk-ZANAF7WB.js +0 -88
  480. package/dist/chunk-ZANAF7WB.js.map +0 -1
  481. package/dist/chunk-ZDBWNPLO.js +0 -30
  482. package/dist/chunk-ZDBWNPLO.js.map +0 -1
  483. package/dist/chunk-ZDT2IOK2.js +0 -56
  484. package/dist/chunk-ZDT2IOK2.js.map +0 -1
  485. package/dist/chunk-ZKGVLTSI.js +0 -25
  486. package/dist/chunk-ZKGVLTSI.js.map +0 -1
  487. package/dist/chunk-ZLELESO7.js +0 -34
  488. package/dist/chunk-ZLELESO7.js.map +0 -1
  489. package/dist/chunk-ZUFUEQTX.mjs +0 -157
  490. package/dist/chunk-ZUFUEQTX.mjs.map +0 -1
  491. package/dist/chunk-ZZZWRQQE.mjs +0 -42
  492. package/dist/chunk-ZZZWRQQE.mjs.map +0 -1
  493. package/dist/command/index.js +0 -138
  494. package/dist/command/index.js.map +0 -1
  495. package/dist/command/index.mjs +0 -128
  496. package/dist/command/index.mjs.map +0 -1
  497. package/dist/components/accordion.js +0 -25
  498. package/dist/components/accordion.js.map +0 -1
  499. package/dist/components/accordion.mjs +0 -4
  500. package/dist/components/accordion.mjs.map +0 -1
  501. package/dist/components/alert.js +0 -21
  502. package/dist/components/alert.js.map +0 -1
  503. package/dist/components/alert.mjs +0 -4
  504. package/dist/components/alert.mjs.map +0 -1
  505. package/dist/components/aspect-ratio.js +0 -12
  506. package/dist/components/aspect-ratio.js.map +0 -1
  507. package/dist/components/aspect-ratio.mjs +0 -3
  508. package/dist/components/aspect-ratio.mjs.map +0 -1
  509. package/dist/components/avatar.js +0 -21
  510. package/dist/components/avatar.js.map +0 -1
  511. package/dist/components/avatar.mjs +0 -4
  512. package/dist/components/avatar.mjs.map +0 -1
  513. package/dist/components/badge.js +0 -17
  514. package/dist/components/badge.js.map +0 -1
  515. package/dist/components/badge.mjs +0 -4
  516. package/dist/components/badge.mjs.map +0 -1
  517. package/dist/components/breadcrumb.js +0 -37
  518. package/dist/components/breadcrumb.js.map +0 -1
  519. package/dist/components/breadcrumb.mjs +0 -4
  520. package/dist/components/breadcrumb.mjs.map +0 -1
  521. package/dist/components/button.js +0 -17
  522. package/dist/components/button.js.map +0 -1
  523. package/dist/components/button.mjs +0 -4
  524. package/dist/components/button.mjs.map +0 -1
  525. package/dist/components/card.js +0 -37
  526. package/dist/components/card.js.map +0 -1
  527. package/dist/components/card.mjs +0 -4
  528. package/dist/components/card.mjs.map +0 -1
  529. package/dist/components/checkbox.js +0 -13
  530. package/dist/components/checkbox.js.map +0 -1
  531. package/dist/components/checkbox.mjs +0 -4
  532. package/dist/components/checkbox.mjs.map +0 -1
  533. package/dist/components/collapsible.js +0 -20
  534. package/dist/components/collapsible.js.map +0 -1
  535. package/dist/components/collapsible.mjs +0 -3
  536. package/dist/components/collapsible.mjs.map +0 -1
  537. package/dist/components/context-menu.js +0 -69
  538. package/dist/components/context-menu.js.map +0 -1
  539. package/dist/components/context-menu.mjs +0 -4
  540. package/dist/components/context-menu.mjs.map +0 -1
  541. package/dist/components/dialog.js +0 -49
  542. package/dist/components/dialog.js.map +0 -1
  543. package/dist/components/dialog.mjs +0 -4
  544. package/dist/components/dialog.mjs.map +0 -1
  545. package/dist/components/drawer.js +0 -49
  546. package/dist/components/drawer.js.map +0 -1
  547. package/dist/components/drawer.mjs +0 -4
  548. package/dist/components/drawer.mjs.map +0 -1
  549. package/dist/components/dropdown-menu.js +0 -69
  550. package/dist/components/dropdown-menu.js.map +0 -1
  551. package/dist/components/dropdown-menu.mjs +0 -4
  552. package/dist/components/dropdown-menu.mjs.map +0 -1
  553. package/dist/components/form.js +0 -42
  554. package/dist/components/form.js.map +0 -1
  555. package/dist/components/form.mjs +0 -5
  556. package/dist/components/form.mjs.map +0 -1
  557. package/dist/components/hover-card.js +0 -21
  558. package/dist/components/hover-card.js.map +0 -1
  559. package/dist/components/hover-card.mjs +0 -4
  560. package/dist/components/hover-card.mjs.map +0 -1
  561. package/dist/components/index.js +0 -1047
  562. package/dist/components/index.js.map +0 -1
  563. package/dist/components/index.mjs +0 -46
  564. package/dist/components/index.mjs.map +0 -1
  565. package/dist/components/input-otp.js +0 -25
  566. package/dist/components/input-otp.js.map +0 -1
  567. package/dist/components/input-otp.mjs +0 -4
  568. package/dist/components/input-otp.mjs.map +0 -1
  569. package/dist/components/input.js +0 -13
  570. package/dist/components/input.js.map +0 -1
  571. package/dist/components/input.mjs +0 -4
  572. package/dist/components/input.mjs.map +0 -1
  573. package/dist/components/label.js +0 -13
  574. package/dist/components/label.js.map +0 -1
  575. package/dist/components/label.mjs +0 -4
  576. package/dist/components/label.mjs.map +0 -1
  577. package/dist/components/menubar.js +0 -73
  578. package/dist/components/menubar.js.map +0 -1
  579. package/dist/components/menubar.mjs +0 -4
  580. package/dist/components/menubar.mjs.map +0 -1
  581. package/dist/components/navigation-menu.js +0 -45
  582. package/dist/components/navigation-menu.js.map +0 -1
  583. package/dist/components/navigation-menu.mjs +0 -4
  584. package/dist/components/navigation-menu.mjs.map +0 -1
  585. package/dist/components/pagination.js +0 -38
  586. package/dist/components/pagination.js.map +0 -1
  587. package/dist/components/pagination.mjs +0 -5
  588. package/dist/components/pagination.mjs.map +0 -1
  589. package/dist/components/popover.js +0 -25
  590. package/dist/components/popover.js.map +0 -1
  591. package/dist/components/popover.mjs +0 -4
  592. package/dist/components/popover.mjs.map +0 -1
  593. package/dist/components/progress.js +0 -13
  594. package/dist/components/progress.js.map +0 -1
  595. package/dist/components/progress.mjs +0 -4
  596. package/dist/components/progress.mjs.map +0 -1
  597. package/dist/components/radio-group.js +0 -17
  598. package/dist/components/radio-group.js.map +0 -1
  599. package/dist/components/radio-group.mjs +0 -4
  600. package/dist/components/radio-group.mjs.map +0 -1
  601. package/dist/components/resizable.js +0 -21
  602. package/dist/components/resizable.js.map +0 -1
  603. package/dist/components/resizable.mjs +0 -4
  604. package/dist/components/resizable.mjs.map +0 -1
  605. package/dist/components/scroll-area.js +0 -17
  606. package/dist/components/scroll-area.js.map +0 -1
  607. package/dist/components/scroll-area.mjs +0 -4
  608. package/dist/components/scroll-area.mjs.map +0 -1
  609. package/dist/components/select.js +0 -49
  610. package/dist/components/select.js.map +0 -1
  611. package/dist/components/select.mjs +0 -4
  612. package/dist/components/select.mjs.map +0 -1
  613. package/dist/components/separator.js +0 -13
  614. package/dist/components/separator.js.map +0 -1
  615. package/dist/components/separator.mjs +0 -4
  616. package/dist/components/separator.mjs.map +0 -1
  617. package/dist/components/sheet.js +0 -49
  618. package/dist/components/sheet.js.map +0 -1
  619. package/dist/components/sheet.mjs +0 -4
  620. package/dist/components/sheet.mjs.map +0 -1
  621. package/dist/components/sidebar.js +0 -111
  622. package/dist/components/sidebar.js.map +0 -1
  623. package/dist/components/sidebar.mjs +0 -10
  624. package/dist/components/sidebar.mjs.map +0 -1
  625. package/dist/components/skeleton.js +0 -13
  626. package/dist/components/skeleton.js.map +0 -1
  627. package/dist/components/skeleton.mjs +0 -4
  628. package/dist/components/skeleton.mjs.map +0 -1
  629. package/dist/components/slider.js +0 -13
  630. package/dist/components/slider.js.map +0 -1
  631. package/dist/components/slider.mjs +0 -4
  632. package/dist/components/slider.mjs.map +0 -1
  633. package/dist/components/switch.js +0 -13
  634. package/dist/components/switch.js.map +0 -1
  635. package/dist/components/switch.mjs +0 -4
  636. package/dist/components/switch.mjs.map +0 -1
  637. package/dist/components/table.js +0 -41
  638. package/dist/components/table.js.map +0 -1
  639. package/dist/components/table.mjs +0 -4
  640. package/dist/components/table.mjs.map +0 -1
  641. package/dist/components/tabs.js +0 -25
  642. package/dist/components/tabs.js.map +0 -1
  643. package/dist/components/tabs.mjs +0 -4
  644. package/dist/components/tabs.mjs.map +0 -1
  645. package/dist/components/textarea.js +0 -13
  646. package/dist/components/textarea.js.map +0 -1
  647. package/dist/components/textarea.mjs +0 -4
  648. package/dist/components/textarea.mjs.map +0 -1
  649. package/dist/components/toast.js +0 -37
  650. package/dist/components/toast.js.map +0 -1
  651. package/dist/components/toast.mjs +0 -4
  652. package/dist/components/toast.mjs.map +0 -1
  653. package/dist/components/toggle-group.js +0 -18
  654. package/dist/components/toggle-group.js.map +0 -1
  655. package/dist/components/toggle-group.mjs +0 -5
  656. package/dist/components/toggle-group.mjs.map +0 -1
  657. package/dist/components/toggle.js +0 -17
  658. package/dist/components/toggle.js.map +0 -1
  659. package/dist/components/toggle.mjs +0 -4
  660. package/dist/components/toggle.mjs.map +0 -1
  661. package/dist/components/tooltip.js +0 -25
  662. package/dist/components/tooltip.js.map +0 -1
  663. package/dist/components/tooltip.mjs +0 -4
  664. package/dist/components/tooltip.mjs.map +0 -1
  665. package/dist/effects/index.js +0 -162
  666. package/dist/effects/index.js.map +0 -1
  667. package/dist/effects/index.mjs +0 -156
  668. package/dist/effects/index.mjs.map +0 -1
  669. package/dist/lib/utils.js +0 -12
  670. package/dist/lib/utils.js.map +0 -1
  671. package/dist/lib/utils.mjs +0 -3
  672. package/dist/lib/utils.mjs.map +0 -1
  673. package/dist/markdown/index.js +0 -669
  674. package/dist/markdown/index.js.map +0 -1
  675. package/dist/markdown/index.mjs +0 -635
  676. package/dist/markdown/index.mjs.map +0 -1
  677. package/dist/qr/index.js +0 -101
  678. package/dist/qr/index.js.map +0 -1
  679. package/dist/qr/index.mjs +0 -98
  680. package/dist/qr/index.mjs.map +0 -1
  681. package/dist/upload/index.js +0 -166
  682. package/dist/upload/index.js.map +0 -1
  683. package/dist/upload/index.mjs +0 -163
  684. package/dist/upload/index.mjs.map +0 -1
  685. package/publish.sh +0 -27
package/bin/cli.js ADDED
@@ -0,0 +1,100 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Main CLI entry point for @hanzo/ui
5
+ * Supports various commands including registry:mcp
6
+ */
7
+
8
+ const { program } = require("commander");
9
+
10
+ // Define the version from the package.json
11
+ let version = "4.5.0";
12
+ try {
13
+ const packageJson = require("../package.json");
14
+ version = packageJson.version || version;
15
+ } catch (error) {
16
+ // Use default version if package.json can't be loaded
17
+ }
18
+
19
+ // Set up the program
20
+ program
21
+ .name("@hanzo/ui")
22
+ .description("Hanzo UI Component Library CLI")
23
+ .version(version);
24
+
25
+ // Add the MCP command (main command)
26
+ program
27
+ .command("mcp")
28
+ .description("Start the Hanzo UI MCP server for AI assistants")
29
+ .option(
30
+ "-r, --registry <url>",
31
+ "URL to the registry.json file",
32
+ process.env.REGISTRY_URL || "https://ui.hanzo.ai/registry/registry.json"
33
+ )
34
+ .option(
35
+ "-p, --port <port>",
36
+ "Port to listen on (for HTTP mode)",
37
+ "3333"
38
+ )
39
+ .option(
40
+ "--http",
41
+ "Run in HTTP mode instead of stdio mode",
42
+ false
43
+ )
44
+ .action(async (options) => {
45
+ // Delegate to the dedicated MCP binary
46
+ require("./mcp.js");
47
+ });
48
+
49
+ // Add the registry:mcp command (alias for compatibility)
50
+ program
51
+ .command("registry:mcp")
52
+ .description("Starts the registry MCP server (alias for 'mcp')")
53
+ .option(
54
+ "-r, --registry <url>",
55
+ "URL to the registry.json file",
56
+ process.env.REGISTRY_URL
57
+ )
58
+ .option(
59
+ "-p, --port <port>",
60
+ "Port to listen on (for HTTP mode)",
61
+ "3333"
62
+ )
63
+ .option(
64
+ "--http",
65
+ "Run in HTTP mode instead of stdio mode",
66
+ false
67
+ )
68
+ .action(async (options) => {
69
+ try {
70
+ // Set environment variables based on options
71
+ if (options.registry) {
72
+ process.env.REGISTRY_URL = options.registry;
73
+ }
74
+
75
+ // Set port if running in HTTP mode
76
+ if (options.http) {
77
+ process.env.MCP_HTTP_MODE = "true";
78
+ process.env.MCP_PORT = options.port;
79
+ }
80
+
81
+ // Show info about the server
82
+ console.error("Starting Hanzo UI MCP server...");
83
+ console.error(`Registry URL: ${process.env.REGISTRY_URL || "[Using default registry]"}`);
84
+
85
+ if (options.http) {
86
+ console.error(`Running in HTTP mode on port ${options.port}`);
87
+ } else {
88
+ console.error("Running in stdio mode");
89
+ }
90
+
91
+ // Load and run the MCP server script
92
+ require("./registry-mcp.js");
93
+ } catch (error) {
94
+ console.error("Error starting MCP server:", error);
95
+ process.exit(1);
96
+ }
97
+ });
98
+
99
+ // Parse command line arguments
100
+ program.parse();
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Simple registry builder for @hanzo/ui
5
+ * Creates the necessary structure for the MCP registry
6
+ */
7
+
8
+ const fs = require('fs');
9
+ const path = require('path');
10
+
11
+ // Configuration
12
+ const REGISTRY_DIR = path.resolve(__dirname, '../registry');
13
+ const PUBLIC_DIR = path.resolve(__dirname, '../public');
14
+ const OUTPUT_FILE = path.resolve(__dirname, '../registry.json');
15
+ const REGISTRY_STYLES = ['default', 'new-york'];
16
+
17
+ // Registry schema
18
+ const registrySchema = {
19
+ "$schema": "https://ui.hanzo.com/schema/registry.json",
20
+ "name": "hanzo",
21
+ "homepage": "https://ui.hanzo.ai",
22
+ "items": []
23
+ };
24
+
25
+ // Create the basic registry structure
26
+ function createRegistry() {
27
+ console.log('Creating registry structure...');
28
+
29
+ const items = [];
30
+
31
+ // Ensure registry directory exists
32
+ if (!fs.existsSync(REGISTRY_DIR)) {
33
+ fs.mkdirSync(REGISTRY_DIR, { recursive: true });
34
+ }
35
+
36
+ // Create style directories and add them to registry items
37
+ for (const style of REGISTRY_STYLES) {
38
+ const styleDir = path.join(REGISTRY_DIR, style);
39
+ if (!fs.existsSync(styleDir)) {
40
+ fs.mkdirSync(styleDir, { recursive: true });
41
+
42
+ // Create ui and block directories
43
+ fs.mkdirSync(path.join(styleDir, 'ui'), { recursive: true });
44
+ fs.mkdirSync(path.join(styleDir, 'block'), { recursive: true });
45
+ }
46
+
47
+ // Add style to registry
48
+ items.push({
49
+ name: style,
50
+ type: 'registry:style',
51
+ description: `The ${style} style for Hanzo UI components.`,
52
+ files: []
53
+ });
54
+ }
55
+
56
+ // Add primitive components as empty placeholders
57
+ const primitives = [
58
+ 'accordion', 'alert', 'avatar', 'badge', 'button', 'card',
59
+ 'checkbox', 'dialog', 'input', 'label', 'popover', 'select',
60
+ 'table', 'tabs', 'toast'
61
+ ];
62
+
63
+ for (const component of primitives) {
64
+ items.push({
65
+ name: component,
66
+ type: 'registry:component',
67
+ description: `A ${component} component for your UI.`,
68
+ files: [
69
+ {
70
+ path: `default/ui/${component}/${component}.tsx`,
71
+ type: 'registry:component'
72
+ }
73
+ ]
74
+ });
75
+ }
76
+
77
+ // Update registry.json
78
+ registrySchema.items = items;
79
+
80
+ // Create output directory if it doesn't exist
81
+ const outputDir = path.dirname(OUTPUT_FILE);
82
+ if (!fs.existsSync(outputDir)) {
83
+ fs.mkdirSync(outputDir, { recursive: true });
84
+ }
85
+
86
+ // Write registry.json
87
+ fs.writeFileSync(OUTPUT_FILE, JSON.stringify(registrySchema, null, 2), 'utf8');
88
+ console.log(`Registry updated with ${items.length} items.`);
89
+
90
+ // Create public/r directory if it doesn't exist
91
+ const publicRDir = path.join(PUBLIC_DIR, 'r');
92
+ if (!fs.existsSync(publicRDir)) {
93
+ fs.mkdirSync(publicRDir, { recursive: true });
94
+ }
95
+
96
+ // Generate individual component JSON files
97
+ console.log('Generating individual component JSON files...');
98
+ for (const item of items) {
99
+ const componentFile = path.join(publicRDir, `${item.name}.json`);
100
+ fs.writeFileSync(componentFile, JSON.stringify(item, null, 2), 'utf8');
101
+ }
102
+
103
+ console.log(`Generated ${items.length} component JSON files.`);
104
+ console.log('Registry creation complete!');
105
+ }
106
+
107
+ // Run the registry creation
108
+ createRegistry();
package/bin/mcp.js ADDED
@@ -0,0 +1,403 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Hanzo UI MCP Server
5
+ *
6
+ * This is the main entry point for the MCP server that can be run with:
7
+ * - npx @hanzo/ui mcp
8
+ * - npx @hanzo/ui@latest mcp
9
+ *
10
+ * The server provides AI assistants with tools to:
11
+ * - List and search components
12
+ * - Get component source code and demos
13
+ * - Access UI blocks and patterns
14
+ * - Generate usage examples
15
+ * - Create custom themes
16
+ */
17
+
18
+ const { StdioServerTransport } = require("@modelcontextprotocol/sdk/server/stdio.js");
19
+
20
+ // Helper to load the server implementation
21
+ async function loadServer() {
22
+ try {
23
+ // Try loading from dist directory (published package)
24
+ const distPath = require.resolve("../dist/mcp/enhanced-server.js");
25
+ return require(distPath).default || require(distPath).server;
26
+ } catch (error) {
27
+ try {
28
+ // Fallback to original server if enhanced not available
29
+ const distPath = require.resolve("../dist/mcp/index.js");
30
+ return require(distPath).server;
31
+ } catch (innerError) {
32
+ try {
33
+ // Development mode - try to use ts-node if available
34
+ const tsNode = require("ts-node");
35
+ tsNode.register({
36
+ transpileOnly: true,
37
+ compilerOptions: {
38
+ module: "commonjs",
39
+ target: "es2020",
40
+ esModuleInterop: true,
41
+ allowSyntheticDefaultImports: true
42
+ }
43
+ });
44
+
45
+ // Now try to load the TypeScript file
46
+ try {
47
+ const enhancedPath = require.resolve("../mcp/enhanced-server.ts");
48
+ return require(enhancedPath).default || require(enhancedPath).server;
49
+ } catch (e) {
50
+ const srcPath = require.resolve("../mcp/index.ts");
51
+ return require(srcPath).server;
52
+ }
53
+ } catch (tsError) {
54
+ // If ts-node not available, create a basic server inline
55
+ console.error("Creating basic MCP server (ts-node not available for enhanced features)");
56
+ return createBasicServer();
57
+ }
58
+ }
59
+ }
60
+ }
61
+
62
+ // Create a basic MCP server if we can't load the TypeScript files
63
+ function createBasicServer() {
64
+ const { Server } = require("@modelcontextprotocol/sdk/server/index.js");
65
+ const { z } = require("zod");
66
+ const { zodToJsonSchema } = require("zod-to-json-schema");
67
+
68
+ const server = new Server(
69
+ {
70
+ name: "hanzo-ui",
71
+ version: "4.5.0",
72
+ },
73
+ {
74
+ capabilities: {
75
+ resources: {},
76
+ tools: {},
77
+ },
78
+ }
79
+ );
80
+
81
+ // Register basic tools
82
+ const { ListToolsRequestSchema, CallToolRequestSchema } = require("@modelcontextprotocol/sdk/types.js");
83
+
84
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
85
+ return {
86
+ tools: [
87
+ {
88
+ name: "list_components",
89
+ description: "List all available Hanzo UI components",
90
+ inputSchema: zodToJsonSchema(z.object({})),
91
+ },
92
+ {
93
+ name: "get_component",
94
+ description: "Get information about a specific component",
95
+ inputSchema: zodToJsonSchema(z.object({
96
+ name: z.string().describe("Component name"),
97
+ })),
98
+ },
99
+ ],
100
+ };
101
+ });
102
+
103
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
104
+ const args = request.params.arguments || {};
105
+
106
+ switch (request.params.name) {
107
+ case "list_components": {
108
+ return {
109
+ content: [{
110
+ type: "text",
111
+ text: `# Hanzo UI Components
112
+
113
+ The following components are available:
114
+ - accordion - Expandable accordion component
115
+ - alert - Alert message component
116
+ - avatar - User avatar display
117
+ - badge - Badge for labels and status
118
+ - button - Versatile button component
119
+ - card - Container card component
120
+ - checkbox - Checkbox input
121
+ - dialog - Modal dialog component
122
+ - drawer - Sliding drawer panel
123
+ - dropdown-menu - Dropdown menu component
124
+ - form - Form components and validation
125
+ - input - Text input field
126
+ - label - Form label component
127
+ - popover - Popover container
128
+ - radio-group - Radio button group
129
+ - select - Select dropdown
130
+ - separator - Visual separator
131
+ - sheet - Sheet modal component
132
+ - skeleton - Loading skeleton
133
+ - slider - Range slider input
134
+ - switch - Toggle switch
135
+ - table - Data table component
136
+ - tabs - Tab navigation
137
+ - textarea - Multiline text input
138
+ - toast - Toast notification
139
+ - tooltip - Tooltip component
140
+
141
+ Use 'get_component' to get more details about a specific component.`,
142
+ }],
143
+ };
144
+ }
145
+
146
+ case "get_component": {
147
+ const name = args.name;
148
+ return {
149
+ content: [{
150
+ type: "text",
151
+ text: `# ${name} Component
152
+
153
+ To install the ${name} component:
154
+
155
+ \`\`\`bash
156
+ npx @hanzo/ui@latest add ${name}
157
+ \`\`\`
158
+
159
+ This will add the component to your project and install any required dependencies.
160
+
161
+ For more information, visit https://ui.hanzo.ai/docs/components/${name}`,
162
+ }],
163
+ };
164
+ }
165
+
166
+ default:
167
+ throw new Error(`Unknown tool: ${request.params.name}`);
168
+ }
169
+ });
170
+
171
+ return server;
172
+ }
173
+
174
+ // Parse command line arguments
175
+ function parseArgs() {
176
+ const args = process.argv.slice(2);
177
+ const options = {
178
+ mode: 'stdio',
179
+ port: 3333,
180
+ registryUrl: process.env.REGISTRY_URL || 'https://ui.hanzo.ai/registry/registry.json',
181
+ help: false,
182
+ version: false,
183
+ };
184
+
185
+ for (let i = 0; i < args.length; i++) {
186
+ const arg = args[i];
187
+
188
+ if (arg === '--help' || arg === '-h') {
189
+ options.help = true;
190
+ } else if (arg === '--version' || arg === '-v') {
191
+ options.version = true;
192
+ } else if (arg === '--http') {
193
+ options.mode = 'http';
194
+ } else if (arg === '--port' && i + 1 < args.length) {
195
+ options.port = parseInt(args[++i], 10);
196
+ } else if (arg === '--registry' && i + 1 < args.length) {
197
+ options.registryUrl = args[++i];
198
+ }
199
+ }
200
+
201
+ return options;
202
+ }
203
+
204
+ // Display help message
205
+ function showHelp() {
206
+ console.log(`
207
+ Hanzo UI MCP Server
208
+
209
+ Usage:
210
+ npx @hanzo/ui mcp [options]
211
+
212
+ Options:
213
+ --help, -h Show this help message
214
+ --version, -v Show version information
215
+ --http Run in HTTP mode instead of stdio (experimental)
216
+ --port <port> Port for HTTP mode (default: 3333)
217
+ --registry <url> Custom registry URL
218
+
219
+ Examples:
220
+ # Run MCP server (stdio mode for AI clients)
221
+ npx @hanzo/ui mcp
222
+
223
+ # Run in HTTP mode for testing
224
+ npx @hanzo/ui mcp --http --port 3333
225
+
226
+ # Use custom registry
227
+ npx @hanzo/ui mcp --registry https://my-registry.com/registry.json
228
+
229
+ AI Client Configuration:
230
+
231
+ For Claude Desktop (.mcp.json):
232
+ {
233
+ "mcpServers": {
234
+ "hanzo-ui": {
235
+ "command": "npx",
236
+ "args": ["@hanzo/ui", "mcp"]
237
+ }
238
+ }
239
+ }
240
+
241
+ For Cursor (.cursor/mcp.json):
242
+ {
243
+ "mcpServers": {
244
+ "hanzo-ui": {
245
+ "command": "npx",
246
+ "args": ["@hanzo/ui", "mcp"]
247
+ }
248
+ }
249
+ }
250
+
251
+ For VS Code (.vscode/mcp.json):
252
+ {
253
+ "mcpServers": {
254
+ "hanzo-ui": {
255
+ "command": "npx",
256
+ "args": ["@hanzo/ui", "mcp"]
257
+ }
258
+ }
259
+ }
260
+
261
+ Available Tools:
262
+ - init Initialize a new project
263
+ - list_components List all available components
264
+ - get_component Get component details
265
+ - get_component_source Get component source code
266
+ - get_component_demo Get component demo code
267
+ - add_component Add component to project
268
+ - list_blocks List UI blocks/patterns
269
+ - get_block Get block details
270
+ - search_registry Search for components
271
+ - get_installation_guide Get installation guide
272
+
273
+ Available Resources:
274
+ - hanzo://components/list Complete component list
275
+ - hanzo://blocks/list UI blocks and patterns
276
+ - hanzo://installation/guide Installation guide
277
+ - hanzo://theming/guide Theming guide
278
+
279
+ Available Prompts:
280
+ - component_usage Generate usage examples
281
+ - build_page Build complete pages
282
+ - component_composition Create custom components
283
+ - accessibility_review Review accessibility
284
+ - theme_customization Generate custom themes
285
+
286
+ Learn more: https://ui.hanzo.ai/docs/mcp
287
+ `);
288
+ }
289
+
290
+ // Display version information
291
+ function showVersion() {
292
+ try {
293
+ const packageJson = require("../package.json");
294
+ console.log(`@hanzo/ui MCP Server v${packageJson.version}`);
295
+ } catch (error) {
296
+ console.log("@hanzo/ui MCP Server");
297
+ }
298
+ }
299
+
300
+ // Start HTTP server (experimental)
301
+ async function startHttpServer(server, port) {
302
+ try {
303
+ // Dynamically import HTTP transport
304
+ const { HttpServerTransport } = require("@modelcontextprotocol/sdk/server/http.js");
305
+
306
+ const transport = new HttpServerTransport({
307
+ port: port,
308
+ cors: {
309
+ origin: "*",
310
+ methods: ["GET", "POST"],
311
+ allowedHeaders: ["Content-Type"],
312
+ },
313
+ });
314
+
315
+ await server.connect(transport);
316
+
317
+ console.log(`Hanzo UI MCP HTTP server listening on port ${port}`);
318
+ console.log(`Access the server at http://localhost:${port}`);
319
+ console.log(`\nAvailable endpoints:`);
320
+ console.log(` GET http://localhost:${port}/health`);
321
+ console.log(` POST http://localhost:${port}/mcp/v1/list_tools`);
322
+ console.log(` POST http://localhost:${port}/mcp/v1/call_tool`);
323
+ console.log(` POST http://localhost:${port}/mcp/v1/list_resources`);
324
+ console.log(` POST http://localhost:${port}/mcp/v1/read_resource`);
325
+ console.log(` POST http://localhost:${port}/mcp/v1/list_prompts`);
326
+ console.log(` POST http://localhost:${port}/mcp/v1/get_prompt`);
327
+ console.log(`\nPress Ctrl+C to stop the server`);
328
+
329
+ return true;
330
+ } catch (error) {
331
+ console.error("Failed to start HTTP server:", error.message);
332
+ console.error("Falling back to stdio mode...");
333
+ return false;
334
+ }
335
+ }
336
+
337
+ // Main function
338
+ async function main() {
339
+ const options = parseArgs();
340
+
341
+ // Handle help and version flags
342
+ if (options.help) {
343
+ showHelp();
344
+ process.exit(0);
345
+ }
346
+
347
+ if (options.version) {
348
+ showVersion();
349
+ process.exit(0);
350
+ }
351
+
352
+ // Set registry URL in environment
353
+ process.env.REGISTRY_URL = options.registryUrl;
354
+
355
+ console.error(`Loading Hanzo UI MCP server...`);
356
+ console.error(`Registry: ${options.registryUrl}`);
357
+
358
+ try {
359
+ // Load the server implementation
360
+ const server = await loadServer();
361
+
362
+ if (options.mode === 'http') {
363
+ // Try HTTP mode
364
+ const httpStarted = await startHttpServer(server, options.port);
365
+ if (!httpStarted) {
366
+ // Fall back to stdio if HTTP fails
367
+ const transport = new StdioServerTransport();
368
+ await server.connect(transport);
369
+ console.error("MCP server running in stdio mode");
370
+ }
371
+ } else {
372
+ // Default stdio mode
373
+ const transport = new StdioServerTransport();
374
+ await server.connect(transport);
375
+ console.error("MCP server running in stdio mode");
376
+ console.error("Ready for AI client connections");
377
+ }
378
+ } catch (error) {
379
+ console.error("Error starting MCP server:", error);
380
+ console.error("\nTroubleshooting:");
381
+ console.error("1. Make sure @hanzo/ui is properly installed");
382
+ console.error("2. Try running: npm install @hanzo/ui@latest");
383
+ console.error("3. Check that all dependencies are installed");
384
+ process.exit(1);
385
+ }
386
+ }
387
+
388
+ // Handle process signals
389
+ process.on('SIGINT', () => {
390
+ console.error("\nShutting down MCP server...");
391
+ process.exit(0);
392
+ });
393
+
394
+ process.on('SIGTERM', () => {
395
+ console.error("\nShutting down MCP server...");
396
+ process.exit(0);
397
+ });
398
+
399
+ // Start the server
400
+ main().catch((error) => {
401
+ console.error("Fatal error:", error);
402
+ process.exit(1);
403
+ });
@@ -0,0 +1,15 @@
1
+ // @ts-check
2
+ #!/usr/bin/env node
3
+
4
+ const { program } = require("commander")
5
+
6
+ program
7
+ .name("npx @hanzo/ui registry:mcp")
8
+ .description("Run the Hanzo UI registry with MCP support")
9
+ .action(() => {
10
+ console.log("Starting Hanzo UI MCP server...")
11
+ // Execute the MCP server
12
+ require("../bin/registry-mcp.js")
13
+ })
14
+
15
+ program.parse()
@@ -0,0 +1,19 @@
1
+ #!/bin/bash
2
+
3
+ # Find the registry-mcp.js file in the node_modules directory
4
+ MCP_SCRIPT=$(find ./node_modules -path "*/@hanzo/ui/bin/registry-mcp.js" -type f | head -1)
5
+
6
+ if [ -z "$MCP_SCRIPT" ]; then
7
+ echo "Error: @hanzo/ui registry-mcp.js not found."
8
+ echo "Please make sure @hanzo/ui is installed or run 'npm install @hanzo/ui' first."
9
+ exit 1
10
+ fi
11
+
12
+ # Set the REGISTRY_URL environment variable if not already set
13
+ if [ -z "$REGISTRY_URL" ]; then
14
+ export REGISTRY_URL="https://ui.hanzo.ai/registry/registry.json"
15
+ echo "Using default registry URL: $REGISTRY_URL"
16
+ fi
17
+
18
+ # Execute the MCP script
19
+ node "$MCP_SCRIPT"