@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
@@ -0,0 +1,148 @@
1
+ 'use client'
2
+
3
+ import { cn } from '@hanzo/ui/util'
4
+ import { Button } from '@hanzo/ui/primitives'
5
+ import {
6
+ Card,
7
+ CardContent,
8
+ CardDescription,
9
+ CardHeader,
10
+ CardTitle,
11
+ } from '@hanzo/ui/primitives'
12
+ import { Input } from '@hanzo/ui/primitives'
13
+ import { Label } from '@hanzo/ui/primitives'
14
+ import { Icons } from '@hanzo/ui/primitives'
15
+
16
+ interface LoginSocialProps extends React.ComponentPropsWithoutRef<'div'> {
17
+ onSubmit?: (email: string, password: string) => void
18
+ onGoogleLogin?: () => void
19
+ onGitHubLogin?: () => void
20
+ onTwitterLogin?: () => void
21
+ onForgotPassword?: () => void
22
+ onSignUp?: () => void
23
+ }
24
+
25
+ export function LoginSocial({
26
+ className,
27
+ onSubmit,
28
+ onGoogleLogin,
29
+ onGitHubLogin,
30
+ onTwitterLogin,
31
+ onForgotPassword,
32
+ onSignUp,
33
+ ...props
34
+ }: LoginSocialProps) {
35
+ const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
36
+ e.preventDefault()
37
+ const formData = new FormData(e.currentTarget)
38
+ const email = formData.get('email') as string
39
+ const password = formData.get('password') as string
40
+ onSubmit?.(email, password)
41
+ }
42
+
43
+ return (
44
+ <div className={cn('flex flex-col gap-6', className)} {...props}>
45
+ <Card>
46
+ <CardHeader>
47
+ <CardTitle className="text-2xl">Login</CardTitle>
48
+ <CardDescription>
49
+ Enter your email below to login to your account
50
+ </CardDescription>
51
+ </CardHeader>
52
+ <CardContent>
53
+ <form onSubmit={handleSubmit}>
54
+ <div className="flex flex-col gap-6">
55
+ <div className="grid gap-2">
56
+ <Label htmlFor="email">Email</Label>
57
+ <Input
58
+ id="email"
59
+ name="email"
60
+ type="email"
61
+ placeholder="m@example.com"
62
+ required
63
+ />
64
+ </div>
65
+ <div className="grid gap-2">
66
+ <div className="flex items-center">
67
+ <Label htmlFor="password">Password</Label>
68
+ {onForgotPassword && (
69
+ <button
70
+ type="button"
71
+ onClick={onForgotPassword}
72
+ className="ml-auto inline-block text-sm underline-offset-4 hover:underline"
73
+ >
74
+ Forgot your password?
75
+ </button>
76
+ )}
77
+ </div>
78
+ <Input id="password" name="password" type="password" required />
79
+ </div>
80
+ <Button type="submit" className="w-full">
81
+ Login
82
+ </Button>
83
+
84
+ <div className="relative">
85
+ <div className="absolute inset-0 flex items-center">
86
+ <span className="w-full border-t" />
87
+ </div>
88
+ <div className="relative flex justify-center text-xs uppercase">
89
+ <span className="bg-background px-2 text-muted-foreground">
90
+ Or continue with
91
+ </span>
92
+ </div>
93
+ </div>
94
+
95
+ <div className="grid gap-2">
96
+ {onGoogleLogin && (
97
+ <Button
98
+ type="button"
99
+ variant="outline"
100
+ className="w-full"
101
+ onClick={onGoogleLogin}
102
+ >
103
+ <Icons.google className="mr-2 h-4 w-4" />
104
+ Google
105
+ </Button>
106
+ )}
107
+ {onGitHubLogin && (
108
+ <Button
109
+ type="button"
110
+ variant="outline"
111
+ className="w-full"
112
+ onClick={onGitHubLogin}
113
+ >
114
+ <Icons.gitHub className="mr-2 h-4 w-4" />
115
+ GitHub
116
+ </Button>
117
+ )}
118
+ {onTwitterLogin && (
119
+ <Button
120
+ type="button"
121
+ variant="outline"
122
+ className="w-full"
123
+ onClick={onTwitterLogin}
124
+ >
125
+ <Icons.twitter className="mr-2 h-4 w-4" />
126
+ Twitter
127
+ </Button>
128
+ )}
129
+ </div>
130
+ </div>
131
+ {onSignUp && (
132
+ <div className="mt-4 text-center text-sm">
133
+ Don&apos;t have an account?{' '}
134
+ <button
135
+ type="button"
136
+ onClick={onSignUp}
137
+ className="underline underline-offset-4"
138
+ >
139
+ Sign up
140
+ </button>
141
+ </div>
142
+ )}
143
+ </form>
144
+ </CardContent>
145
+ </Card>
146
+ </div>
147
+ )
148
+ }
@@ -0,0 +1,129 @@
1
+ 'use client'
2
+
3
+ import { useState } from 'react'
4
+ import { cn } from '@hanzo/ui/util'
5
+ import { Button } from '@hanzo/ui/primitives'
6
+ import {
7
+ Card,
8
+ CardContent,
9
+ CardDescription,
10
+ CardHeader,
11
+ CardTitle,
12
+ } from '@hanzo/ui/primitives'
13
+ import { Input } from '@hanzo/ui/primitives'
14
+ import { Label } from '@hanzo/ui/primitives'
15
+ import { Icons } from '@hanzo/ui/primitives'
16
+
17
+ interface MagicLinkProps extends React.ComponentPropsWithoutRef<'div'> {
18
+ onSubmit?: (email: string) => void
19
+ onSignUp?: () => void
20
+ onUsePassword?: () => void
21
+ }
22
+
23
+ export function MagicLink({
24
+ className,
25
+ onSubmit,
26
+ onSignUp,
27
+ onUsePassword,
28
+ ...props
29
+ }: MagicLinkProps) {
30
+ const [sent, setSent] = useState(false)
31
+ const [email, setEmail] = useState('')
32
+
33
+ const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
34
+ e.preventDefault()
35
+ const formData = new FormData(e.currentTarget)
36
+ const emailValue = formData.get('email') as string
37
+ setEmail(emailValue)
38
+ setSent(true)
39
+ onSubmit?.(emailValue)
40
+ }
41
+
42
+ return (
43
+ <div className={cn('flex flex-col gap-6', className)} {...props}>
44
+ <Card>
45
+ <CardHeader>
46
+ <CardTitle className="text-2xl">
47
+ {sent ? 'Check your email' : 'Sign in with email'}
48
+ </CardTitle>
49
+ <CardDescription>
50
+ {sent
51
+ ? `We've sent a magic link to ${email}`
52
+ : 'We'll send you a magic link to sign in instantly'}
53
+ </CardDescription>
54
+ </CardHeader>
55
+ <CardContent>
56
+ {sent ? (
57
+ <div className="flex flex-col gap-6">
58
+ <div className="flex justify-center">
59
+ <div className="rounded-full bg-primary/10 p-6">
60
+ <Icons.mail className="h-8 w-8 text-primary" />
61
+ </div>
62
+ </div>
63
+ <div className="text-center text-sm text-muted-foreground">
64
+ Click the link in your email to sign in. The link will expire in 10 minutes.
65
+ </div>
66
+ <div className="flex flex-col gap-2">
67
+ <Button
68
+ type="button"
69
+ variant="outline"
70
+ className="w-full"
71
+ onClick={() => setSent(false)}
72
+ >
73
+ Try a different email
74
+ </Button>
75
+ <button
76
+ type="button"
77
+ onClick={() => onSubmit?.(email)}
78
+ className="text-center text-sm underline underline-offset-4"
79
+ >
80
+ Didn&apos;t receive the email? Resend
81
+ </button>
82
+ </div>
83
+ </div>
84
+ ) : (
85
+ <form onSubmit={handleSubmit}>
86
+ <div className="flex flex-col gap-6">
87
+ <div className="grid gap-2">
88
+ <Label htmlFor="email">Email</Label>
89
+ <Input
90
+ id="email"
91
+ name="email"
92
+ type="email"
93
+ placeholder="m@example.com"
94
+ required
95
+ />
96
+ </div>
97
+ <Button type="submit" className="w-full">
98
+ Send magic link
99
+ </Button>
100
+ {onUsePassword && (
101
+ <Button
102
+ type="button"
103
+ variant="outline"
104
+ className="w-full"
105
+ onClick={onUsePassword}
106
+ >
107
+ Use password instead
108
+ </Button>
109
+ )}
110
+ </div>
111
+ {onSignUp && (
112
+ <div className="mt-4 text-center text-sm">
113
+ Don&apos;t have an account?{' '}
114
+ <button
115
+ type="button"
116
+ onClick={onSignUp}
117
+ className="underline underline-offset-4"
118
+ >
119
+ Sign up
120
+ </button>
121
+ </div>
122
+ )}
123
+ </form>
124
+ )}
125
+ </CardContent>
126
+ </Card>
127
+ </div>
128
+ )
129
+ }
@@ -0,0 +1,97 @@
1
+ 'use client'
2
+
3
+ import { cn } from '@hanzo/ui/util'
4
+ import { Button } from '@hanzo/ui/primitives'
5
+ import {
6
+ Card,
7
+ CardContent,
8
+ CardDescription,
9
+ CardHeader,
10
+ CardTitle,
11
+ } from '@hanzo/ui/primitives'
12
+ import { Input } from '@hanzo/ui/primitives'
13
+ import { Label } from '@hanzo/ui/primitives'
14
+
15
+ interface PasswordResetProps extends React.ComponentPropsWithoutRef<'div'> {
16
+ onSubmit?: (email: string) => void
17
+ onBackToLogin?: () => void
18
+ sent?: boolean
19
+ }
20
+
21
+ export function PasswordReset({
22
+ className,
23
+ onSubmit,
24
+ onBackToLogin,
25
+ sent = false,
26
+ ...props
27
+ }: PasswordResetProps) {
28
+ const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
29
+ e.preventDefault()
30
+ const formData = new FormData(e.currentTarget)
31
+ const email = formData.get('email') as string
32
+ onSubmit?.(email)
33
+ }
34
+
35
+ return (
36
+ <div className={cn('flex flex-col gap-6', className)} {...props}>
37
+ <Card>
38
+ <CardHeader>
39
+ <CardTitle className="text-2xl">Reset password</CardTitle>
40
+ <CardDescription>
41
+ {sent
42
+ ? 'Check your email for a password reset link'
43
+ : 'Enter your email address and we will send you a password reset link'}
44
+ </CardDescription>
45
+ </CardHeader>
46
+ <CardContent>
47
+ {sent ? (
48
+ <div className="flex flex-col gap-6">
49
+ <div className="text-center text-sm text-muted-foreground">
50
+ We&apos;ve sent a password reset link to your email address.
51
+ Please check your inbox and follow the instructions to reset your password.
52
+ </div>
53
+ {onBackToLogin && (
54
+ <Button
55
+ type="button"
56
+ variant="outline"
57
+ className="w-full"
58
+ onClick={onBackToLogin}
59
+ >
60
+ Back to login
61
+ </Button>
62
+ )}
63
+ </div>
64
+ ) : (
65
+ <form onSubmit={handleSubmit}>
66
+ <div className="flex flex-col gap-6">
67
+ <div className="grid gap-2">
68
+ <Label htmlFor="email">Email</Label>
69
+ <Input
70
+ id="email"
71
+ name="email"
72
+ type="email"
73
+ placeholder="m@example.com"
74
+ required
75
+ />
76
+ </div>
77
+ <Button type="submit" className="w-full">
78
+ Send reset link
79
+ </Button>
80
+ {onBackToLogin && (
81
+ <Button
82
+ type="button"
83
+ variant="outline"
84
+ className="w-full"
85
+ onClick={onBackToLogin}
86
+ >
87
+ Back to login
88
+ </Button>
89
+ )}
90
+ </div>
91
+ </form>
92
+ )}
93
+ </CardContent>
94
+ </Card>
95
+ </div>
96
+ )
97
+ }
@@ -0,0 +1,157 @@
1
+ 'use client'
2
+
3
+ import { cn } from '@hanzo/ui/util'
4
+ import { Button } from '@hanzo/ui/primitives'
5
+ import {
6
+ Card,
7
+ CardContent,
8
+ CardDescription,
9
+ CardHeader,
10
+ CardTitle,
11
+ } from '@hanzo/ui/primitives'
12
+ import { Input } from '@hanzo/ui/primitives'
13
+ import { Label } from '@hanzo/ui/primitives'
14
+ import { Checkbox } from '@hanzo/ui/primitives'
15
+
16
+ interface SignupProps extends React.ComponentPropsWithoutRef<'div'> {
17
+ onSubmit?: (data: {
18
+ firstName: string
19
+ lastName: string
20
+ email: string
21
+ password: string
22
+ acceptTerms: boolean
23
+ }) => void
24
+ onLogin?: () => void
25
+ onGoogleSignup?: () => void
26
+ }
27
+
28
+ export function Signup({
29
+ className,
30
+ onSubmit,
31
+ onLogin,
32
+ onGoogleSignup,
33
+ ...props
34
+ }: SignupProps) {
35
+ const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
36
+ e.preventDefault()
37
+ const formData = new FormData(e.currentTarget)
38
+ const data = {
39
+ firstName: formData.get('firstName') as string,
40
+ lastName: formData.get('lastName') as string,
41
+ email: formData.get('email') as string,
42
+ password: formData.get('password') as string,
43
+ acceptTerms: formData.get('acceptTerms') === 'on',
44
+ }
45
+ onSubmit?.(data)
46
+ }
47
+
48
+ return (
49
+ <div className={cn('flex flex-col gap-6', className)} {...props}>
50
+ <Card>
51
+ <CardHeader>
52
+ <CardTitle className="text-2xl">Sign Up</CardTitle>
53
+ <CardDescription>
54
+ Create a new account to get started
55
+ </CardDescription>
56
+ </CardHeader>
57
+ <CardContent>
58
+ <form onSubmit={handleSubmit}>
59
+ <div className="flex flex-col gap-6">
60
+ <div className="grid gap-4 sm:grid-cols-2">
61
+ <div className="grid gap-2">
62
+ <Label htmlFor="firstName">First name</Label>
63
+ <Input
64
+ id="firstName"
65
+ name="firstName"
66
+ placeholder="Max"
67
+ required
68
+ />
69
+ </div>
70
+ <div className="grid gap-2">
71
+ <Label htmlFor="lastName">Last name</Label>
72
+ <Input
73
+ id="lastName"
74
+ name="lastName"
75
+ placeholder="Robinson"
76
+ required
77
+ />
78
+ </div>
79
+ </div>
80
+ <div className="grid gap-2">
81
+ <Label htmlFor="email">Email</Label>
82
+ <Input
83
+ id="email"
84
+ name="email"
85
+ type="email"
86
+ placeholder="m@example.com"
87
+ required
88
+ />
89
+ </div>
90
+ <div className="grid gap-2">
91
+ <Label htmlFor="password">Password</Label>
92
+ <Input
93
+ id="password"
94
+ name="password"
95
+ type="password"
96
+ required
97
+ />
98
+ <p className="text-xs text-muted-foreground">
99
+ Must be at least 8 characters
100
+ </p>
101
+ </div>
102
+ <div className="flex items-center space-x-2">
103
+ <Checkbox id="acceptTerms" name="acceptTerms" required />
104
+ <label
105
+ htmlFor="acceptTerms"
106
+ className="text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
107
+ >
108
+ I accept the{' '}
109
+ <a href="#" className="underline underline-offset-4">
110
+ terms and conditions
111
+ </a>
112
+ </label>
113
+ </div>
114
+ <Button type="submit" className="w-full">
115
+ Create account
116
+ </Button>
117
+ {onGoogleSignup && (
118
+ <>
119
+ <div className="relative">
120
+ <div className="absolute inset-0 flex items-center">
121
+ <span className="w-full border-t" />
122
+ </div>
123
+ <div className="relative flex justify-center text-xs uppercase">
124
+ <span className="bg-background px-2 text-muted-foreground">
125
+ Or continue with
126
+ </span>
127
+ </div>
128
+ </div>
129
+ <Button
130
+ type="button"
131
+ variant="outline"
132
+ className="w-full"
133
+ onClick={onGoogleSignup}
134
+ >
135
+ Sign up with Google
136
+ </Button>
137
+ </>
138
+ )}
139
+ </div>
140
+ {onLogin && (
141
+ <div className="mt-4 text-center text-sm">
142
+ Already have an account?{' '}
143
+ <button
144
+ type="button"
145
+ onClick={onLogin}
146
+ className="underline underline-offset-4"
147
+ >
148
+ Login
149
+ </button>
150
+ </div>
151
+ )}
152
+ </form>
153
+ </CardContent>
154
+ </Card>
155
+ </div>
156
+ )
157
+ }
@@ -0,0 +1,48 @@
1
+ import React from 'react'
2
+
3
+ import {
4
+ Accordion,
5
+ AccordionContent,
6
+ AccordionItem,
7
+ AccordionTrigger,
8
+ ApplyTypography
9
+ } from '../../primitives/index-common'
10
+
11
+ import { cn } from '../../util'
12
+
13
+ import type { AccordianBlock } from '../def'
14
+ import type BlockComponentProps from './block-component-props'
15
+
16
+ const AccordianBlockComponent: React.FC<BlockComponentProps> = ({
17
+ block,
18
+ className=''
19
+ }) => {
20
+
21
+ if (block.blockType !== 'accordian') {
22
+ return <>accordian block required</>
23
+ }
24
+
25
+ const accordian = block as AccordianBlock
26
+
27
+ return (
28
+ <Accordion type="single" collapsible className={cn('w-full border rounded-xl overflow-hidden', className)}>
29
+ {accordian.items.map((item, index) => (
30
+ <AccordionItem className='border-b last:border-0 overflow-hidden' value={`value-${index}`} key={index}>
31
+ <AccordionTrigger className='px-3 md:px-4 lg:px-6 hover:no-underline hover:bg-level-3' >
32
+ <ApplyTypography>
33
+ {/* styles specific to accordion. From old site */}
34
+ <h6 className='leading-[1.2] text-[1.05rem] font-semibold ' >{item.trigger}</h6>
35
+ </ApplyTypography>
36
+ </AccordionTrigger>
37
+ <AccordionContent className='p-4 border-t bg-level-1'>
38
+ <ApplyTypography className='flex flex-col justify-start items-start '>
39
+ {(typeof item.content === 'string') ? (<p>{item.content}</p>) : item.content}
40
+ </ApplyTypography>
41
+ </AccordionContent>
42
+ </AccordionItem>
43
+ ))}
44
+ </Accordion>
45
+ )
46
+ }
47
+
48
+ export default AccordianBlockComponent
@@ -0,0 +1,11 @@
1
+ import type { Block } from "../def";
2
+
3
+ interface BlockComponentProps {
4
+ block: Block
5
+ className?: string
6
+ agent?: string
7
+ }
8
+
9
+ export {
10
+ type BlockComponentProps as default
11
+ }
@@ -0,0 +1,46 @@
1
+ import React from 'react'
2
+
3
+ import { containsToken, cn } from '../../util'
4
+ import type { Block, BulletCardsBlock } from '../def'
5
+ import InlineIcon from '../../primitives/next/inline-icon'
6
+
7
+ import type BlockComponentProps from './block-component-props'
8
+ import GridBlockComponent from './grid-block'
9
+
10
+ const BulletCardsBlockComponent: React.FC<BlockComponentProps> = ({
11
+ block,
12
+ className='',
13
+ agent
14
+ }) => {
15
+
16
+ if (block.blockType !== 'bullet-cards') {
17
+ return <>bullet cards block required</>
18
+ }
19
+ const b = block as BulletCardsBlock
20
+ const specified = (s: string) => (containsToken(b.specifiers, s))
21
+
22
+ const noBorder = specified('no-card-border') ? 'border-0' : 'md:border'
23
+ const mobileTextXs = specified('mobile-small-text') ? 'text-xs' : 'text-sm'
24
+
25
+ const borderclx = specified('border-muted-3') ?
26
+ 'md:border-muted-3'
27
+ :
28
+ (specified('border-muted-1') ? 'md:border-muted-1' : 'md:border-muted-2')
29
+
30
+ return (
31
+ <GridBlockComponent block={{blockType: 'grid', grid: b.grid} as Block} className={className} agent={agent}>
32
+ {b.cards.map((card, index) => (
33
+ <div key={index} className={cn('px-0 sm:px-4 py-1 md:py-4 rounded-lg ' +
34
+ 'flex flex-row justify-start items-center not-typography text-foreground',
35
+ noBorder,
36
+ borderclx
37
+ )}>
38
+ <InlineIcon icon={card.icon} size={b.iconSize ?? 28} agent={agent} className='shrink-0 mr-2 md:mr-4 '/>
39
+ <p className={cn('m-0 sm:text-base', mobileTextXs)}>{card.text}</p>
40
+ </div>
41
+ ))}
42
+ </GridBlockComponent>
43
+ )
44
+ }
45
+
46
+ export default BulletCardsBlockComponent