@hanzo/ui 4.8.5 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +184 -0
- package/LICENSE +21 -0
- package/README.md +185 -192
- package/dist/ai/index.js +53 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/index.mjs +4 -0
- package/dist/ai/index.mjs.map +1 -0
- package/dist/blocks/index.js +983 -0
- package/dist/blocks/index.js.map +1 -0
- package/dist/blocks/index.mjs +945 -0
- package/dist/blocks/index.mjs.map +1 -0
- package/dist/calendar/index.js +14 -0
- package/dist/calendar/index.js.map +1 -0
- package/dist/calendar/index.mjs +5 -0
- package/dist/calendar/index.mjs.map +1 -0
- package/dist/carousel/index.js +220 -0
- package/dist/carousel/index.js.map +1 -0
- package/dist/carousel/index.mjs +191 -0
- package/dist/carousel/index.mjs.map +1 -0
- package/dist/charts/index.js +945 -0
- package/dist/charts/index.js.map +1 -0
- package/dist/charts/index.mjs +901 -0
- package/dist/charts/index.mjs.map +1 -0
- package/dist/chunk-26T4V5QU.mjs +111 -0
- package/dist/chunk-26T4V5QU.mjs.map +1 -0
- package/dist/chunk-2A5KXDLJ.js +22 -0
- package/dist/chunk-2A5KXDLJ.js.map +1 -0
- package/dist/chunk-2CJ4HMF4.js +79 -0
- package/dist/chunk-2CJ4HMF4.js.map +1 -0
- package/dist/chunk-2OIQKC5E.js +236 -0
- package/dist/chunk-2OIQKC5E.js.map +1 -0
- package/dist/chunk-2X3KSYBN.js +44 -0
- package/dist/chunk-2X3KSYBN.js.map +1 -0
- package/dist/chunk-3PBQGYR7.mjs +100 -0
- package/dist/chunk-3PBQGYR7.mjs.map +1 -0
- package/dist/chunk-3POQQ6L7.js +62 -0
- package/dist/chunk-3POQQ6L7.js.map +1 -0
- package/dist/chunk-4B47GITH.mjs +28 -0
- package/dist/chunk-4B47GITH.mjs.map +1 -0
- package/dist/chunk-4BC2OH6B.js +129 -0
- package/dist/chunk-4BC2OH6B.js.map +1 -0
- package/dist/chunk-5AQSGH4R.js +130 -0
- package/dist/chunk-5AQSGH4R.js.map +1 -0
- package/dist/chunk-5IHRJFOO.mjs +102 -0
- package/dist/chunk-5IHRJFOO.mjs.map +1 -0
- package/dist/chunk-5LDGR7YN.mjs +28 -0
- package/dist/chunk-5LDGR7YN.mjs.map +1 -0
- package/dist/chunk-5MCN3VYM.mjs +23 -0
- package/dist/chunk-5MCN3VYM.mjs.map +1 -0
- package/dist/chunk-6AVAMRMB.mjs +47 -0
- package/dist/chunk-6AVAMRMB.mjs.map +1 -0
- package/dist/chunk-6H62JRNM.mjs +120 -0
- package/dist/chunk-6H62JRNM.mjs.map +1 -0
- package/dist/chunk-6KCII3F6.mjs +126 -0
- package/dist/chunk-6KCII3F6.mjs.map +1 -0
- package/dist/chunk-7EHB43BJ.js +155 -0
- package/dist/chunk-7EHB43BJ.js.map +1 -0
- package/dist/chunk-7LRD23Q5.js +191 -0
- package/dist/chunk-7LRD23Q5.js.map +1 -0
- package/dist/chunk-7SAHKOJG.mjs +45 -0
- package/dist/chunk-7SAHKOJG.mjs.map +1 -0
- package/dist/chunk-A3D2YZK3.js +50 -0
- package/dist/chunk-A3D2YZK3.js.map +1 -0
- package/dist/chunk-AL4QFH7V.js +63 -0
- package/dist/chunk-AL4QFH7V.js.map +1 -0
- package/dist/chunk-B3WFEG6U.js +69 -0
- package/dist/chunk-B3WFEG6U.js.map +1 -0
- package/dist/chunk-BDZQJ6GK.js +242 -0
- package/dist/chunk-BDZQJ6GK.js.map +1 -0
- package/dist/chunk-BRWFYRGX.js +61 -0
- package/dist/chunk-BRWFYRGX.js.map +1 -0
- package/dist/chunk-C5DNTLBO.js +53 -0
- package/dist/chunk-C5DNTLBO.js.map +1 -0
- package/dist/chunk-CRALRACO.js +54 -0
- package/dist/chunk-CRALRACO.js.map +1 -0
- package/dist/chunk-CVACQJRM.js +149 -0
- package/dist/chunk-CVACQJRM.js.map +1 -0
- package/dist/chunk-DEIUKFPZ.mjs +63 -0
- package/dist/chunk-DEIUKFPZ.mjs.map +1 -0
- package/dist/chunk-DN2AEEA2.js +13 -0
- package/dist/chunk-DN2AEEA2.js.map +1 -0
- package/dist/chunk-DTNRWU4B.mjs +35 -0
- package/dist/chunk-DTNRWU4B.mjs.map +1 -0
- package/dist/chunk-DXIUEWRJ.mjs +31 -0
- package/dist/chunk-DXIUEWRJ.mjs.map +1 -0
- package/dist/chunk-DYFV66JX.mjs +54 -0
- package/dist/chunk-DYFV66JX.mjs.map +1 -0
- package/dist/chunk-F3WMAHXV.mjs +86 -0
- package/dist/chunk-F3WMAHXV.mjs.map +1 -0
- package/dist/chunk-F4RWPBBB.js +79 -0
- package/dist/chunk-F4RWPBBB.js.map +1 -0
- package/dist/chunk-FEGAPM6U.js +194 -0
- package/dist/chunk-FEGAPM6U.js.map +1 -0
- package/dist/chunk-G5TS56PW.mjs +160 -0
- package/dist/chunk-G5TS56PW.mjs.map +1 -0
- package/dist/chunk-GG6VGOEN.mjs +590 -0
- package/dist/chunk-GG6VGOEN.mjs.map +1 -0
- package/dist/chunk-GLAMGK32.mjs +54 -0
- package/dist/chunk-GLAMGK32.mjs.map +1 -0
- package/dist/chunk-GNMMUJXD.mjs +200 -0
- package/dist/chunk-GNMMUJXD.mjs.map +1 -0
- package/dist/chunk-GNPBULLS.mjs +600 -0
- package/dist/chunk-GNPBULLS.mjs.map +1 -0
- package/dist/chunk-GTE2DELE.js +65 -0
- package/dist/chunk-GTE2DELE.js.map +1 -0
- package/dist/chunk-GUQAFFTH.js +94 -0
- package/dist/chunk-GUQAFFTH.js.map +1 -0
- package/dist/chunk-H5VOYZHT.mjs +34 -0
- package/dist/chunk-H5VOYZHT.mjs.map +1 -0
- package/dist/chunk-HR6PBOGG.mjs +59 -0
- package/dist/chunk-HR6PBOGG.mjs.map +1 -0
- package/dist/chunk-HROONQS3.js +55 -0
- package/dist/chunk-HROONQS3.js.map +1 -0
- package/dist/chunk-IAO7SOQ3.mjs +56 -0
- package/dist/chunk-IAO7SOQ3.mjs.map +1 -0
- package/dist/chunk-K2QKU3K6.mjs +40 -0
- package/dist/chunk-K2QKU3K6.mjs.map +1 -0
- package/dist/chunk-KEUZZCCP.js +53 -0
- package/dist/chunk-KEUZZCCP.js.map +1 -0
- package/dist/chunk-KJXSLTG7.mjs +73 -0
- package/dist/chunk-KJXSLTG7.mjs.map +1 -0
- package/dist/chunk-L5AFUCVH.mjs +26 -0
- package/dist/chunk-L5AFUCVH.mjs.map +1 -0
- package/dist/chunk-LB3I52KZ.mjs +42 -0
- package/dist/chunk-LB3I52KZ.mjs.map +1 -0
- package/dist/chunk-LN75MJQ2.js +71 -0
- package/dist/chunk-LN75MJQ2.js.map +1 -0
- package/dist/chunk-LRBOFJUV.js +60 -0
- package/dist/chunk-LRBOFJUV.js.map +1 -0
- package/dist/chunk-MMNYRBOU.js +157 -0
- package/dist/chunk-MMNYRBOU.js.map +1 -0
- package/dist/chunk-MO65YF6P.js +236 -0
- package/dist/chunk-MO65YF6P.js.map +1 -0
- package/dist/chunk-N4KHP5FC.mjs +33 -0
- package/dist/chunk-N4KHP5FC.mjs.map +1 -0
- package/dist/chunk-NP2J7AB7.mjs +121 -0
- package/dist/chunk-NP2J7AB7.mjs.map +1 -0
- package/dist/chunk-OLR6SGYO.js +57 -0
- package/dist/chunk-OLR6SGYO.js.map +1 -0
- package/dist/chunk-ON7NQ4DY.js +21 -0
- package/dist/chunk-ON7NQ4DY.js.map +1 -0
- package/dist/chunk-PE3VFRLV.mjs +198 -0
- package/dist/chunk-PE3VFRLV.mjs.map +1 -0
- package/dist/chunk-Q7LOOIE5.mjs +8 -0
- package/dist/chunk-Q7LOOIE5.mjs.map +1 -0
- package/dist/chunk-QFA6U75G.mjs +51 -0
- package/dist/chunk-QFA6U75G.mjs.map +1 -0
- package/dist/chunk-QJQPT4WX.js +638 -0
- package/dist/chunk-QJQPT4WX.js.map +1 -0
- package/dist/chunk-QKHQPBSR.mjs +20 -0
- package/dist/chunk-QKHQPBSR.mjs.map +1 -0
- package/dist/chunk-SJD4XRFJ.mjs +141 -0
- package/dist/chunk-SJD4XRFJ.mjs.map +1 -0
- package/dist/chunk-SOOJLU4C.mjs +19 -0
- package/dist/chunk-SOOJLU4C.mjs.map +1 -0
- package/dist/chunk-T66B5IM5.js +51 -0
- package/dist/chunk-T66B5IM5.js.map +1 -0
- package/dist/chunk-T7RPZDO4.js +645 -0
- package/dist/chunk-T7RPZDO4.js.map +1 -0
- package/dist/chunk-TGRMDGTV.mjs +38 -0
- package/dist/chunk-TGRMDGTV.mjs.map +1 -0
- package/dist/chunk-TH2UKMCO.mjs +11 -0
- package/dist/chunk-TH2UKMCO.mjs.map +1 -0
- package/dist/chunk-TMV45OKE.mjs +113 -0
- package/dist/chunk-TMV45OKE.mjs.map +1 -0
- package/dist/chunk-TUJ7EVEK.js +171 -0
- package/dist/chunk-TUJ7EVEK.js.map +1 -0
- package/dist/chunk-ULNWDOI7.js +122 -0
- package/dist/chunk-ULNWDOI7.js.map +1 -0
- package/dist/chunk-UNUTTHCH.mjs +210 -0
- package/dist/chunk-UNUTTHCH.mjs.map +1 -0
- package/dist/chunk-VJMI6BG4.mjs +10 -0
- package/dist/chunk-VJMI6BG4.mjs.map +1 -0
- package/dist/chunk-VZVOB5MG.mjs +26 -0
- package/dist/chunk-VZVOB5MG.mjs.map +1 -0
- package/dist/chunk-WD67O22C.js +50 -0
- package/dist/chunk-WD67O22C.js.map +1 -0
- package/dist/chunk-WYPMLIJN.js +53 -0
- package/dist/chunk-WYPMLIJN.js.map +1 -0
- package/dist/chunk-X32I34NH.js +109 -0
- package/dist/chunk-X32I34NH.js.map +1 -0
- package/dist/chunk-X5MOZ3YL.js +65 -0
- package/dist/chunk-X5MOZ3YL.js.map +1 -0
- package/dist/chunk-Y4JVIPQZ.mjs +31 -0
- package/dist/chunk-Y4JVIPQZ.mjs.map +1 -0
- package/dist/chunk-Y6WOV2LZ.js +95 -0
- package/dist/chunk-Y6WOV2LZ.js.map +1 -0
- package/dist/chunk-YAEN5SCU.mjs +41 -0
- package/dist/chunk-YAEN5SCU.mjs.map +1 -0
- package/dist/chunk-YH6XDF3N.js +121 -0
- package/dist/chunk-YH6XDF3N.js.map +1 -0
- package/dist/chunk-YJKA4D75.mjs +124 -0
- package/dist/chunk-YJKA4D75.mjs.map +1 -0
- package/dist/chunk-ZANAF7WB.js +88 -0
- package/dist/chunk-ZANAF7WB.js.map +1 -0
- package/dist/chunk-ZDBWNPLO.js +30 -0
- package/dist/chunk-ZDBWNPLO.js.map +1 -0
- package/dist/chunk-ZDT2IOK2.js +56 -0
- package/dist/chunk-ZDT2IOK2.js.map +1 -0
- package/dist/chunk-ZKGVLTSI.js +25 -0
- package/dist/chunk-ZKGVLTSI.js.map +1 -0
- package/dist/chunk-ZLELESO7.js +34 -0
- package/dist/chunk-ZLELESO7.js.map +1 -0
- package/dist/chunk-ZUFUEQTX.mjs +157 -0
- package/dist/chunk-ZUFUEQTX.mjs.map +1 -0
- package/dist/chunk-ZZZWRQQE.mjs +42 -0
- package/dist/chunk-ZZZWRQQE.mjs.map +1 -0
- package/dist/command/index.js +138 -0
- package/dist/command/index.js.map +1 -0
- package/dist/command/index.mjs +128 -0
- package/dist/command/index.mjs.map +1 -0
- package/dist/components/accordion.js +25 -0
- package/dist/components/accordion.js.map +1 -0
- package/dist/components/accordion.mjs +4 -0
- package/dist/components/accordion.mjs.map +1 -0
- package/dist/components/alert.js +21 -0
- package/dist/components/alert.js.map +1 -0
- package/dist/components/alert.mjs +4 -0
- package/dist/components/alert.mjs.map +1 -0
- package/dist/components/aspect-ratio.js +12 -0
- package/dist/components/aspect-ratio.js.map +1 -0
- package/dist/components/aspect-ratio.mjs +3 -0
- package/dist/components/aspect-ratio.mjs.map +1 -0
- package/dist/components/avatar.js +21 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/avatar.mjs +4 -0
- package/dist/components/avatar.mjs.map +1 -0
- package/dist/components/badge.js +17 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/badge.mjs +4 -0
- package/dist/components/badge.mjs.map +1 -0
- package/dist/components/breadcrumb.js +37 -0
- package/dist/components/breadcrumb.js.map +1 -0
- package/dist/components/breadcrumb.mjs +4 -0
- package/dist/components/breadcrumb.mjs.map +1 -0
- package/dist/components/button.js +17 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/button.mjs +4 -0
- package/dist/components/button.mjs.map +1 -0
- package/dist/components/card.js +37 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/card.mjs +4 -0
- package/dist/components/card.mjs.map +1 -0
- package/dist/components/checkbox.js +13 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/checkbox.mjs +4 -0
- package/dist/components/checkbox.mjs.map +1 -0
- package/dist/components/collapsible.js +20 -0
- package/dist/components/collapsible.js.map +1 -0
- package/dist/components/collapsible.mjs +3 -0
- package/dist/components/collapsible.mjs.map +1 -0
- package/dist/components/context-menu.js +69 -0
- package/dist/components/context-menu.js.map +1 -0
- package/dist/components/context-menu.mjs +4 -0
- package/dist/components/context-menu.mjs.map +1 -0
- package/dist/components/dialog.js +49 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/dialog.mjs +4 -0
- package/dist/components/dialog.mjs.map +1 -0
- package/dist/components/drawer.js +49 -0
- package/dist/components/drawer.js.map +1 -0
- package/dist/components/drawer.mjs +4 -0
- package/dist/components/drawer.mjs.map +1 -0
- package/dist/components/dropdown-menu.js +69 -0
- package/dist/components/dropdown-menu.js.map +1 -0
- package/dist/components/dropdown-menu.mjs +4 -0
- package/dist/components/dropdown-menu.mjs.map +1 -0
- package/dist/components/form.js +42 -0
- package/dist/components/form.js.map +1 -0
- package/dist/components/form.mjs +5 -0
- package/dist/components/form.mjs.map +1 -0
- package/dist/components/hover-card.js +21 -0
- package/dist/components/hover-card.js.map +1 -0
- package/dist/components/hover-card.mjs +4 -0
- package/dist/components/hover-card.mjs.map +1 -0
- package/dist/components/index.js +1047 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/index.mjs +46 -0
- package/dist/components/index.mjs.map +1 -0
- package/dist/components/input-otp.js +25 -0
- package/dist/components/input-otp.js.map +1 -0
- package/dist/components/input-otp.mjs +4 -0
- package/dist/components/input-otp.mjs.map +1 -0
- package/dist/components/input.js +13 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/input.mjs +4 -0
- package/dist/components/input.mjs.map +1 -0
- package/dist/components/label.js +13 -0
- package/dist/components/label.js.map +1 -0
- package/dist/components/label.mjs +4 -0
- package/dist/components/label.mjs.map +1 -0
- package/dist/components/menubar.js +73 -0
- package/dist/components/menubar.js.map +1 -0
- package/dist/components/menubar.mjs +4 -0
- package/dist/components/menubar.mjs.map +1 -0
- package/dist/components/navigation-menu.js +45 -0
- package/dist/components/navigation-menu.js.map +1 -0
- package/dist/components/navigation-menu.mjs +4 -0
- package/dist/components/navigation-menu.mjs.map +1 -0
- package/dist/components/pagination.js +38 -0
- package/dist/components/pagination.js.map +1 -0
- package/dist/components/pagination.mjs +5 -0
- package/dist/components/pagination.mjs.map +1 -0
- package/dist/components/popover.js +25 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/popover.mjs +4 -0
- package/dist/components/popover.mjs.map +1 -0
- package/dist/components/progress.js +13 -0
- package/dist/components/progress.js.map +1 -0
- package/dist/components/progress.mjs +4 -0
- package/dist/components/progress.mjs.map +1 -0
- package/dist/components/radio-group.js +17 -0
- package/dist/components/radio-group.js.map +1 -0
- package/dist/components/radio-group.mjs +4 -0
- package/dist/components/radio-group.mjs.map +1 -0
- package/dist/components/resizable.js +21 -0
- package/dist/components/resizable.js.map +1 -0
- package/dist/components/resizable.mjs +4 -0
- package/dist/components/resizable.mjs.map +1 -0
- package/dist/components/scroll-area.js +17 -0
- package/dist/components/scroll-area.js.map +1 -0
- package/dist/components/scroll-area.mjs +4 -0
- package/dist/components/scroll-area.mjs.map +1 -0
- package/dist/components/select.js +49 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/select.mjs +4 -0
- package/dist/components/select.mjs.map +1 -0
- package/dist/components/separator.js +13 -0
- package/dist/components/separator.js.map +1 -0
- package/dist/components/separator.mjs +4 -0
- package/dist/components/separator.mjs.map +1 -0
- package/dist/components/sheet.js +49 -0
- package/dist/components/sheet.js.map +1 -0
- package/dist/components/sheet.mjs +4 -0
- package/dist/components/sheet.mjs.map +1 -0
- package/dist/components/sidebar.js +111 -0
- package/dist/components/sidebar.js.map +1 -0
- package/dist/components/sidebar.mjs +10 -0
- package/dist/components/sidebar.mjs.map +1 -0
- package/dist/components/skeleton.js +13 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/skeleton.mjs +4 -0
- package/dist/components/skeleton.mjs.map +1 -0
- package/dist/components/slider.js +13 -0
- package/dist/components/slider.js.map +1 -0
- package/dist/components/slider.mjs +4 -0
- package/dist/components/slider.mjs.map +1 -0
- package/dist/components/switch.js +13 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/switch.mjs +4 -0
- package/dist/components/switch.mjs.map +1 -0
- package/dist/components/table.js +41 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/table.mjs +4 -0
- package/dist/components/table.mjs.map +1 -0
- package/dist/components/tabs.js +25 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/tabs.mjs +4 -0
- package/dist/components/tabs.mjs.map +1 -0
- package/dist/components/textarea.js +13 -0
- package/dist/components/textarea.js.map +1 -0
- package/dist/components/textarea.mjs +4 -0
- package/dist/components/textarea.mjs.map +1 -0
- package/dist/components/toast.js +37 -0
- package/dist/components/toast.js.map +1 -0
- package/dist/components/toast.mjs +4 -0
- package/dist/components/toast.mjs.map +1 -0
- package/dist/components/toggle-group.js +18 -0
- package/dist/components/toggle-group.js.map +1 -0
- package/dist/components/toggle-group.mjs +5 -0
- package/dist/components/toggle-group.mjs.map +1 -0
- package/dist/components/toggle.js +17 -0
- package/dist/components/toggle.js.map +1 -0
- package/dist/components/toggle.mjs +4 -0
- package/dist/components/toggle.mjs.map +1 -0
- package/dist/components/tooltip.js +25 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/components/tooltip.mjs +4 -0
- package/dist/components/tooltip.mjs.map +1 -0
- package/dist/effects/index.js +162 -0
- package/dist/effects/index.js.map +1 -0
- package/dist/effects/index.mjs +156 -0
- package/dist/effects/index.mjs.map +1 -0
- package/dist/index.js +1096 -9353
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +47 -9342
- package/dist/index.mjs.map +1 -0
- package/dist/lib/utils.js +10 -45
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/utils.mjs +3 -28
- package/dist/lib/utils.mjs.map +1 -0
- package/dist/markdown/index.js +669 -0
- package/dist/markdown/index.js.map +1 -0
- package/dist/markdown/index.mjs +635 -0
- package/dist/markdown/index.mjs.map +1 -0
- package/dist/qr/index.js +101 -0
- package/dist/qr/index.js.map +1 -0
- package/dist/qr/index.mjs +98 -0
- package/dist/qr/index.mjs.map +1 -0
- package/dist/upload/index.js +166 -0
- package/dist/upload/index.js.map +1 -0
- package/dist/upload/index.mjs +163 -0
- package/dist/upload/index.mjs.map +1 -0
- package/package.json +153 -270
- package/publish.sh +27 -0
- package/assets/ai-icons.tsx +0 -207
- package/assets/crypto.tsx +0 -33
- package/assets/file-type-icon.tsx +0 -66
- package/assets/file.tsx +0 -45
- package/assets/general.tsx +0 -2318
- package/assets/hanzo-logo.svg +0 -9
- package/assets/hanzo-logo.tsx +0 -17
- package/assets/index.ts +0 -122
- package/assets/index.tsx +0 -4
- package/assets/llm-provider.tsx +0 -1094
- package/bin/cli.js +0 -100
- package/bin/create-registry.js +0 -108
- package/bin/mcp.js +0 -403
- package/bin/npx-registry-mcp.js +0 -15
- package/bin/registry-mcp-wrapper.sh +0 -19
- package/bin/registry-mcp.js +0 -100
- package/bin/start-mcp-server.sh +0 -22
- package/bin/test-mcp.sh +0 -52
- package/bin/update-registry.js +0 -196
- package/blocks/auth/index.ts +0 -6
- package/blocks/auth/login-2fa.tsx +0 -165
- package/blocks/auth/login-basic.tsx +0 -94
- package/blocks/auth/login-social.tsx +0 -148
- package/blocks/auth/magic-link.tsx +0 -129
- package/blocks/auth/password-reset.tsx +0 -97
- package/blocks/auth/signup.tsx +0 -157
- package/blocks/components/accordian-block.tsx +0 -48
- package/blocks/components/block-component-props.ts +0 -11
- package/blocks/components/bullet-cards-block.tsx +0 -46
- package/blocks/components/card-block/index.tsx +0 -171
- package/blocks/components/card-block/link-out-button.tsx +0 -20
- package/blocks/components/card-block/util.ts +0 -28
- package/blocks/components/carte-blanche-block/index.tsx +0 -127
- package/blocks/components/carte-blanche-block/variant-content-left.tsx +0 -49
- package/blocks/components/content.tsx +0 -70
- package/blocks/components/cta-block.tsx +0 -115
- package/blocks/components/enh-heading-block.tsx +0 -204
- package/blocks/components/grid-block/grid-block-mutator.ts +0 -12
- package/blocks/components/grid-block/index.tsx +0 -83
- package/blocks/components/grid-block/mutator-registry.ts +0 -10
- package/blocks/components/grid-block/table-borders.mutator.ts +0 -47
- package/blocks/components/group-block.tsx +0 -83
- package/blocks/components/heading-block.tsx +0 -88
- package/blocks/components/image-block.tsx +0 -111
- package/blocks/components/index.ts +0 -30
- package/blocks/components/screenful-block/content.tsx +0 -123
- package/blocks/components/screenful-block/index.tsx +0 -107
- package/blocks/components/screenful-block/poster-background.tsx +0 -34
- package/blocks/components/screenful-block/video-background.tsx +0 -45
- package/blocks/components/space-block.tsx +0 -66
- package/blocks/components/video-block.tsx +0 -138
- package/blocks/data-display/activity-feed.tsx +0 -242
- package/blocks/data-display/data-table.tsx +0 -235
- package/blocks/data-display/stats-grid.tsx +0 -194
- package/blocks/def/accordian-block.ts +0 -14
- package/blocks/def/block.ts +0 -7
- package/blocks/def/bullet-cards-block.ts +0 -22
- package/blocks/def/card-block.ts +0 -22
- package/blocks/def/carte-blanche-block.ts +0 -21
- package/blocks/def/cta-block.ts +0 -19
- package/blocks/def/element-block.ts +0 -11
- package/blocks/def/enh-heading-block.ts +0 -44
- package/blocks/def/grid-block.ts +0 -16
- package/blocks/def/group-block.ts +0 -11
- package/blocks/def/heading-block.ts +0 -15
- package/blocks/def/image-block.ts +0 -31
- package/blocks/def/index.ts +0 -35
- package/blocks/def/screenful-block.ts +0 -54
- package/blocks/def/space-block.ts +0 -64
- package/blocks/def/video-block.ts +0 -9
- package/blocks/ecommerce/checkout.tsx +0 -242
- package/blocks/ecommerce/index.ts +0 -7
- package/blocks/ecommerce/product-detail.tsx +0 -257
- package/blocks/ecommerce/product-grid.tsx +0 -148
- package/blocks/ecommerce/shopping-cart.tsx +0 -181
- package/blocks/index.ts +0 -2
- package/blocks/marketing/cta-section.tsx +0 -207
- package/blocks/marketing/faq.tsx +0 -159
- package/blocks/marketing/features-grid.tsx +0 -156
- package/blocks/marketing/hero-section.tsx +0 -192
- package/blocks/marketing/index.ts +0 -6
- package/blocks/marketing/pricing-table.tsx +0 -121
- package/blocks/marketing/testimonials.tsx +0 -196
- package/components/index.ts +0 -9
- package/dist/src/utils.js +0 -47
- package/dist/src/utils.mjs +0 -28
- package/dist/tailwind/index.js +0 -2050
- package/dist/tailwind/index.mjs +0 -2019
- package/dist/types/index.js +0 -79
- package/dist/types/index.mjs +0 -56
- package/dist/util/format-text.js +0 -51
- package/dist/util/format-text.mjs +0 -32
- package/dist/util/index.js +0 -384
- package/dist/util/index.mjs +0 -363
- package/frameworks/core/index.ts +0 -6
- package/frameworks/core/utils/index.ts +0 -64
- package/frameworks/react/components/button.tsx +0 -26
- package/frameworks/react/components/index.ts +0 -5
- package/frameworks/react/hooks/index.ts +0 -5
- package/frameworks/react/index.ts +0 -9
- package/frameworks/react/package.json +0 -8
- package/frameworks/react/utils/index.ts +0 -2
- package/frameworks/react-native/index.ts +0 -9
- package/frameworks/react-native/package.json +0 -8
- package/frameworks/registry.json +0 -371
- package/frameworks/setup.sh +0 -69
- package/frameworks/svelte/index.ts +0 -9
- package/frameworks/svelte/package.json +0 -8
- package/frameworks/tracker.json +0 -1854
- package/frameworks/vue/index.ts +0 -9
- package/frameworks/vue/package.json +0 -8
- package/helpers/file.ts +0 -33
- package/helpers/memoization.ts +0 -40
- package/primitives/accordion.tsx +0 -74
- package/primitives/action-button.tsx +0 -42
- package/primitives/alert-dialog.tsx +0 -185
- package/primitives/alert.tsx +0 -74
- package/primitives/apply-typography.tsx +0 -55
- package/primitives/aspect-ratio.tsx +0 -5
- package/primitives/avatar.tsx +0 -57
- package/primitives/background-beams.tsx +0 -142
- package/primitives/badge.tsx +0 -45
- package/primitives/breadcrumb.tsx +0 -130
- package/primitives/breakpoint-indicator.tsx +0 -19
- package/primitives/button.tsx +0 -72
- package/primitives/calendar.tsx +0 -72
- package/primitives/card.tsx +0 -97
- package/primitives/carousel.tsx +0 -238
- package/primitives/chat/chat-input-area.tsx +0 -88
- package/primitives/chat/chat-input.tsx +0 -71
- package/primitives/chat/files-preview.tsx +0 -331
- package/primitives/chat/index.ts +0 -6
- package/primitives/chat/json-form.tsx +0 -8
- package/primitives/chat/message-list.tsx +0 -308
- package/primitives/chat/message.tsx +0 -569
- package/primitives/chat/sqlite-preview.tsx +0 -215
- package/primitives/checkbox.tsx +0 -32
- package/primitives/collapsible.tsx +0 -9
- package/primitives/combobox.tsx +0 -239
- package/primitives/command.tsx +0 -151
- package/primitives/context-menu.tsx +0 -206
- package/primitives/copy-to-clipboard-icon.tsx +0 -60
- package/primitives/dialog-video-controller.tsx +0 -38
- package/primitives/dialog.tsx +0 -128
- package/primitives/dot-pattern.tsx +0 -57
- package/primitives/dots-loader.tsx +0 -13
- package/primitives/drawer.tsx +0 -113
- package/primitives/dropdown-menu.tsx +0 -199
- package/primitives/error-message.tsx +0 -19
- package/primitives/file-uploader.tsx +0 -203
- package/primitives/form.tsx +0 -185
- package/primitives/hover-card.tsx +0 -28
- package/primitives/icons/github.tsx +0 -14
- package/primitives/icons/index.ts +0 -18
- package/primitives/icons/youtube-logo.tsx +0 -59
- package/primitives/index-client.ts +0 -4
- package/primitives/index-common.ts +0 -304
- package/primitives/index-next.ts +0 -4
- package/primitives/input-otp.tsx +0 -65
- package/primitives/input.tsx +0 -128
- package/primitives/label.tsx +0 -21
- package/primitives/list-adaptor.ts +0 -12
- package/primitives/list-box.tsx +0 -74
- package/primitives/loading-spinner.tsx +0 -33
- package/primitives/markdown-preview.tsx +0 -612
- package/primitives/mermaid.tsx +0 -191
- package/primitives/navigation-menu.tsx +0 -147
- package/primitives/next/image.tsx +0 -91
- package/primitives/next/index.ts +0 -7
- package/primitives/next/inline-icon.tsx +0 -36
- package/primitives/next/link-element.tsx +0 -109
- package/primitives/next/mdx-link.tsx +0 -22
- package/primitives/next/media-stack.tsx +0 -52
- package/primitives/next/nav-items.tsx +0 -45
- package/primitives/next/youtube-embed.tsx +0 -83
- package/primitives/pagination.tsx +0 -117
- package/primitives/popover.tsx +0 -34
- package/primitives/pretty-json-print.tsx +0 -28
- package/primitives/progress.tsx +0 -27
- package/primitives/prompt-textarea.tsx +0 -72
- package/primitives/qr-code.tsx +0 -112
- package/primitives/radio-group.tsx +0 -42
- package/primitives/resizable.tsx +0 -47
- package/primitives/scroll-area.tsx +0 -57
- package/primitives/search-input.tsx +0 -66
- package/primitives/select.tsx +0 -122
- package/primitives/separator.tsx +0 -26
- package/primitives/sheet.tsx +0 -139
- package/primitives/skeleton.tsx +0 -18
- package/primitives/slider.tsx +0 -63
- package/primitives/sonner.tsx +0 -35
- package/primitives/step-indicator.tsx +0 -69
- package/primitives/stepper.tsx +0 -272
- package/primitives/switch.tsx +0 -27
- package/primitives/table.tsx +0 -105
- package/primitives/tabs.tsx +0 -50
- package/primitives/text-area.tsx +0 -26
- package/primitives/text-link.tsx +0 -25
- package/primitives/textarea.tsx +0 -64
- package/primitives/textfield.tsx +0 -78
- package/primitives/toast.tsx +0 -30
- package/primitives/toggle-group.tsx +0 -63
- package/primitives/toggle.tsx +0 -44
- package/primitives/tooltip.tsx +0 -47
- package/primitives/video-player.tsx +0 -23
- package/src/button.ts +0 -1
- package/src/hooks/index.ts +0 -7
- package/src/hooks/use-click-away.ts +0 -31
- package/src/hooks/use-combined-refs.ts +0 -22
- package/src/hooks/use-copy-clipboard.ts +0 -30
- package/src/hooks/use-debounce.ts +0 -17
- package/src/hooks/use-fill-ids.ts +0 -25
- package/src/hooks/use-map.ts +0 -26
- package/src/hooks/use-measure.ts +0 -42
- package/src/hooks/use-reverse-video-playback.ts +0 -43
- package/src/hooks/use-scroll-restoration.ts +0 -50
- package/src/index-lean.ts +0 -87
- package/src/index.ts +0 -54
- package/src/mcp/README.md +0 -141
- package/src/mcp/enhanced-server.ts +0 -1208
- package/src/mcp/index.ts +0 -518
- package/src/mcp/package.json +0 -10
- package/src/registry/api.ts +0 -164
- package/src/registry/index.ts +0 -60
- package/src/registry/package.json +0 -10
- package/src/utils.ts +0 -19
- package/style/drawer.css +0 -163
- package/style/globals.css +0 -13
- package/style/hanzo-common.css +0 -31
- package/style/hanzo-default-colors.css +0 -82
- package/style/theme-provider.tsx +0 -20
- package/tailwind/colors.tailwind.js +0 -53
- package/tailwind/fontFamily.tailwind.ts +0 -7
- package/tailwind/fontSize.tailwind.ts +0 -13
- package/tailwind/index.ts +0 -7
- package/tailwind/safelist.tailwind.js +0 -26
- package/tailwind/screens.tailwind.js +0 -8
- package/tailwind/spacing.tailwind.js +0 -65
- package/tailwind/tailwind.config.hanzo-preset.d.ts +0 -5
- package/tailwind/tailwind.config.hanzo-preset.js +0 -915
- package/tailwind/tw-font-desc.ts +0 -15
- package/tailwind/typo-plugin/get-plugin-styles.js +0 -679
- package/tailwind/typo-plugin/index.d.ts +0 -9
- package/tailwind/typo-plugin/index.js +0 -141
- package/tailwind/typo-plugin/utils.js +0 -60
- package/tailwind/typography-test.mdx +0 -35
- package/tailwind/z-index.tailwind.js +0 -71
- package/types/animation-def.ts +0 -3
- package/types/breakpoints.ts +0 -11
- package/types/bullet-item.ts +0 -10
- package/types/button-def.ts +0 -39
- package/types/dimensions.ts +0 -8
- package/types/grid-def.ts +0 -56
- package/types/image-def.ts +0 -32
- package/types/index.ts +0 -30
- package/types/link-def.ts +0 -56
- package/types/media-stack-def.ts +0 -31
- package/types/t-shirt-size.ts +0 -5
- package/types/tshirt-dimensions.ts +0 -20
- package/types/video-def.ts +0 -25
- package/util/blob.ts +0 -33
- package/util/copy-to-clipboard.ts +0 -17
- package/util/create-shadow-root.ts +0 -22
- package/util/date.ts +0 -84
- package/util/debounce.ts +0 -11
- package/util/file.ts +0 -15
- package/util/format-and-abbreviate-as-currency.ts +0 -125
- package/util/format-text.ts +0 -34
- package/util/format-to-max-char.ts +0 -68
- package/util/index-client.ts +0 -3
- package/util/index.ts +0 -112
- package/util/number-abbreviate.ts +0 -49
- package/util/specifier.ts +0 -43
- package/util/spread-to-transform.ts +0 -25
- package/util/step-animation.ts +0 -90
- package/util/timing.ts +0 -3
- package/util/toasts.tsx +0 -17
- 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
|
-
}
|
package/src/mcp/package.json
DELETED
package/src/registry/api.ts
DELETED
|
@@ -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
|
-
}
|