@hanzo/ui 5.0.2 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (371) hide show
  1. package/dist/accordion.js +1 -0
  2. package/dist/accordion.mjs +1 -0
  3. package/dist/alert-dialog.js +1 -0
  4. package/dist/alert-dialog.mjs +1 -0
  5. package/dist/alert.js +1 -0
  6. package/dist/alert.mjs +1 -0
  7. package/dist/avatar.js +1 -0
  8. package/dist/avatar.mjs +1 -0
  9. package/dist/badge.js +1 -0
  10. package/dist/badge.mjs +1 -0
  11. package/dist/breadcrumb.js +1 -0
  12. package/dist/breadcrumb.mjs +1 -0
  13. package/dist/calendar.js +1 -0
  14. package/dist/calendar.mjs +1 -0
  15. package/dist/carousel.js +1 -0
  16. package/dist/carousel.mjs +1 -0
  17. package/dist/checkbox.js +1 -0
  18. package/dist/checkbox.mjs +1 -0
  19. package/dist/chunk-3H5S2OQ3.mjs +1 -0
  20. package/dist/chunk-5GRJ7UQX.js +1 -0
  21. package/dist/chunk-63HNMH7C.js +1 -0
  22. package/dist/chunk-72TOQ4DM.mjs +1 -0
  23. package/dist/chunk-7AEFTV5R.mjs +1 -0
  24. package/dist/chunk-7M4AVV2R.js +1 -0
  25. package/dist/chunk-DKPVJSBC.js +1 -0
  26. package/dist/chunk-EI7MMDWY.js +1 -0
  27. package/dist/chunk-GANGDIZG.mjs +1 -0
  28. package/dist/chunk-GRGT2Z4K.js +1 -0
  29. package/dist/chunk-JCUUC6NY.mjs +1 -0
  30. package/dist/chunk-JUQMWLIN.js +1 -0
  31. package/dist/chunk-PRVEIITE.js +1 -0
  32. package/dist/chunk-SH52AKNZ.js +1 -0
  33. package/dist/chunk-TU67EJEW.mjs +1 -0
  34. package/dist/chunk-WN5KN73U.mjs +1 -0
  35. package/dist/chunk-YSXGDEY5.mjs +1 -0
  36. package/dist/chunk-Z76OOVUE.mjs +1 -0
  37. package/dist/collapsible.js +1 -0
  38. package/dist/collapsible.mjs +1 -0
  39. package/dist/command.js +1 -0
  40. package/dist/command.mjs +1 -0
  41. package/dist/context-menu.js +1 -0
  42. package/dist/context-menu.mjs +1 -0
  43. package/dist/dialog.js +1 -0
  44. package/dist/dialog.mjs +1 -0
  45. package/dist/drawer.js +1 -0
  46. package/dist/drawer.mjs +1 -0
  47. package/dist/dropdown-menu.js +1 -0
  48. package/dist/dropdown-menu.mjs +1 -0
  49. package/dist/form.js +1 -0
  50. package/dist/form.mjs +1 -0
  51. package/dist/hover-card.js +1 -0
  52. package/dist/hover-card.mjs +1 -0
  53. package/dist/index.js +1 -9079
  54. package/dist/index.mjs +1 -8700
  55. package/dist/input-otp.js +1 -0
  56. package/dist/input-otp.mjs +1 -0
  57. package/dist/lib/utils.js +1 -0
  58. package/dist/lib/utils.mjs +1 -0
  59. package/dist/navigation-menu.js +1 -0
  60. package/dist/navigation-menu.mjs +1 -0
  61. package/dist/popover.js +1 -0
  62. package/dist/popover.mjs +1 -0
  63. package/dist/progress.js +1 -0
  64. package/dist/progress.mjs +1 -0
  65. package/dist/radio-group.js +1 -0
  66. package/dist/radio-group.mjs +1 -0
  67. package/dist/resizable.js +1 -0
  68. package/dist/resizable.mjs +1 -0
  69. package/dist/scroll-area.js +1 -0
  70. package/dist/scroll-area.mjs +1 -0
  71. package/dist/select.js +1 -0
  72. package/dist/select.mjs +1 -0
  73. package/dist/separator.js +1 -0
  74. package/dist/separator.mjs +1 -0
  75. package/dist/sheet.js +1 -0
  76. package/dist/sheet.mjs +1 -0
  77. package/dist/skeleton.js +1 -0
  78. package/dist/skeleton.mjs +1 -0
  79. package/dist/slider.js +1 -0
  80. package/dist/slider.mjs +1 -0
  81. package/dist/sonner.js +1 -0
  82. package/dist/sonner.mjs +1 -0
  83. package/dist/src/utils.js +1 -0
  84. package/dist/src/utils.mjs +1 -0
  85. package/dist/switch.js +1 -0
  86. package/dist/switch.mjs +1 -0
  87. package/dist/table.js +1 -0
  88. package/dist/table.mjs +1 -0
  89. package/dist/tabs.js +1 -0
  90. package/dist/tabs.mjs +1 -0
  91. package/dist/tailwind/index.js +1 -0
  92. package/dist/tailwind/index.mjs +1 -0
  93. package/dist/textarea.js +1 -0
  94. package/dist/textarea.mjs +1 -0
  95. package/dist/toggle-group.js +1 -0
  96. package/dist/toggle-group.mjs +1 -0
  97. package/dist/toggle.js +1 -0
  98. package/dist/toggle.mjs +1 -0
  99. package/dist/tooltip.js +1 -0
  100. package/dist/tooltip.mjs +1 -0
  101. package/dist/types/index.js +1 -0
  102. package/dist/types/index.mjs +1 -0
  103. package/package.json +110 -81
  104. package/assets/ai-icons.tsx +0 -207
  105. package/assets/crypto.tsx +0 -33
  106. package/assets/file-type-icon.tsx +0 -66
  107. package/assets/file.tsx +0 -45
  108. package/assets/general.tsx +0 -2318
  109. package/assets/hanzo-logo.svg +0 -9
  110. package/assets/hanzo-logo.tsx +0 -17
  111. package/assets/index.ts +0 -122
  112. package/assets/index.tsx +0 -4
  113. package/assets/llm-provider.tsx +0 -1094
  114. package/blocks/auth/index.ts +0 -6
  115. package/blocks/auth/login-2fa.tsx +0 -165
  116. package/blocks/auth/login-basic.tsx +0 -94
  117. package/blocks/auth/login-social.tsx +0 -148
  118. package/blocks/auth/magic-link.tsx +0 -129
  119. package/blocks/auth/password-reset.tsx +0 -97
  120. package/blocks/auth/signup.tsx +0 -157
  121. package/blocks/components/accordian-block.tsx +0 -48
  122. package/blocks/components/block-component-props.ts +0 -11
  123. package/blocks/components/bullet-cards-block.tsx +0 -46
  124. package/blocks/components/card-block/index.tsx +0 -171
  125. package/blocks/components/card-block/link-out-button.tsx +0 -20
  126. package/blocks/components/card-block/util.ts +0 -28
  127. package/blocks/components/carte-blanche-block/index.tsx +0 -127
  128. package/blocks/components/carte-blanche-block/variant-content-left.tsx +0 -49
  129. package/blocks/components/content.tsx +0 -70
  130. package/blocks/components/cta-block.tsx +0 -115
  131. package/blocks/components/enh-heading-block.tsx +0 -204
  132. package/blocks/components/grid-block/grid-block-mutator.ts +0 -12
  133. package/blocks/components/grid-block/index.tsx +0 -83
  134. package/blocks/components/grid-block/mutator-registry.ts +0 -10
  135. package/blocks/components/grid-block/table-borders.mutator.ts +0 -47
  136. package/blocks/components/group-block.tsx +0 -83
  137. package/blocks/components/heading-block.tsx +0 -88
  138. package/blocks/components/image-block.tsx +0 -111
  139. package/blocks/components/index.ts +0 -30
  140. package/blocks/components/screenful-block/content.tsx +0 -123
  141. package/blocks/components/screenful-block/index.tsx +0 -107
  142. package/blocks/components/screenful-block/poster-background.tsx +0 -34
  143. package/blocks/components/screenful-block/video-background.tsx +0 -45
  144. package/blocks/components/space-block.tsx +0 -66
  145. package/blocks/components/video-block.tsx +0 -138
  146. package/blocks/data-display/activity-feed.tsx +0 -242
  147. package/blocks/data-display/data-table.tsx +0 -235
  148. package/blocks/data-display/stats-grid.tsx +0 -194
  149. package/blocks/def/accordian-block.ts +0 -14
  150. package/blocks/def/block.ts +0 -7
  151. package/blocks/def/bullet-cards-block.ts +0 -22
  152. package/blocks/def/card-block.ts +0 -22
  153. package/blocks/def/carte-blanche-block.ts +0 -21
  154. package/blocks/def/cta-block.ts +0 -19
  155. package/blocks/def/element-block.ts +0 -11
  156. package/blocks/def/enh-heading-block.ts +0 -44
  157. package/blocks/def/grid-block.ts +0 -16
  158. package/blocks/def/group-block.ts +0 -11
  159. package/blocks/def/heading-block.ts +0 -15
  160. package/blocks/def/image-block.ts +0 -31
  161. package/blocks/def/index.ts +0 -35
  162. package/blocks/def/screenful-block.ts +0 -54
  163. package/blocks/def/space-block.ts +0 -64
  164. package/blocks/def/video-block.ts +0 -9
  165. package/blocks/ecommerce/checkout.tsx +0 -242
  166. package/blocks/ecommerce/index.ts +0 -7
  167. package/blocks/ecommerce/product-detail.tsx +0 -257
  168. package/blocks/ecommerce/product-grid.tsx +0 -148
  169. package/blocks/ecommerce/shopping-cart.tsx +0 -181
  170. package/blocks/index.ts +0 -2
  171. package/blocks/marketing/cta-section.tsx +0 -207
  172. package/blocks/marketing/faq.tsx +0 -159
  173. package/blocks/marketing/features-grid.tsx +0 -156
  174. package/blocks/marketing/hero-section.tsx +0 -192
  175. package/blocks/marketing/index.ts +0 -6
  176. package/blocks/marketing/pricing-table.tsx +0 -121
  177. package/blocks/marketing/testimonials.tsx +0 -196
  178. package/components/index.ts +0 -9
  179. package/dist/index.js.map +0 -1
  180. package/dist/index.mjs.map +0 -1
  181. package/dist/tailwind.js +0 -2025
  182. package/dist/tailwind.js.map +0 -1
  183. package/dist/tailwind.mjs +0 -2013
  184. package/dist/tailwind.mjs.map +0 -1
  185. package/dist/types.js +0 -59
  186. package/dist/types.js.map +0 -1
  187. package/dist/types.mjs +0 -53
  188. package/dist/types.mjs.map +0 -1
  189. package/dist/utils.js +0 -30
  190. package/dist/utils.js.map +0 -1
  191. package/dist/utils.mjs +0 -26
  192. package/dist/utils.mjs.map +0 -1
  193. package/frameworks/core/index.ts +0 -6
  194. package/frameworks/core/utils/index.ts +0 -64
  195. package/frameworks/react/components/button.tsx +0 -26
  196. package/frameworks/react/components/index.ts +0 -5
  197. package/frameworks/react/hooks/index.ts +0 -5
  198. package/frameworks/react/index.ts +0 -9
  199. package/frameworks/react/package.json +0 -8
  200. package/frameworks/react/utils/index.ts +0 -2
  201. package/frameworks/react-native/index.ts +0 -9
  202. package/frameworks/react-native/package.json +0 -8
  203. package/frameworks/registry.json +0 -371
  204. package/frameworks/setup.sh +0 -69
  205. package/frameworks/svelte/index.ts +0 -9
  206. package/frameworks/svelte/package.json +0 -8
  207. package/frameworks/tracker.json +0 -1854
  208. package/frameworks/vue/index.ts +0 -9
  209. package/frameworks/vue/package.json +0 -8
  210. package/helpers/file.ts +0 -33
  211. package/helpers/memoization.ts +0 -40
  212. package/primitives/accordion.tsx +0 -74
  213. package/primitives/action-button.tsx +0 -42
  214. package/primitives/alert-dialog.tsx +0 -185
  215. package/primitives/alert.tsx +0 -74
  216. package/primitives/apply-typography.tsx +0 -55
  217. package/primitives/aspect-ratio.tsx +0 -5
  218. package/primitives/avatar.tsx +0 -57
  219. package/primitives/background-beams.tsx +0 -142
  220. package/primitives/badge.tsx +0 -45
  221. package/primitives/breadcrumb.tsx +0 -130
  222. package/primitives/breakpoint-indicator.tsx +0 -19
  223. package/primitives/button.tsx +0 -72
  224. package/primitives/calendar.tsx +0 -72
  225. package/primitives/card.tsx +0 -97
  226. package/primitives/carousel.tsx +0 -238
  227. package/primitives/chat/chat-input-area.tsx +0 -88
  228. package/primitives/chat/chat-input.tsx +0 -71
  229. package/primitives/chat/files-preview.tsx +0 -331
  230. package/primitives/chat/index.ts +0 -6
  231. package/primitives/chat/json-form.tsx +0 -8
  232. package/primitives/chat/message-list.tsx +0 -308
  233. package/primitives/chat/message.tsx +0 -569
  234. package/primitives/chat/sqlite-preview.tsx +0 -215
  235. package/primitives/checkbox.tsx +0 -32
  236. package/primitives/collapsible.tsx +0 -9
  237. package/primitives/combobox.tsx +0 -239
  238. package/primitives/command.tsx +0 -151
  239. package/primitives/context-menu.tsx +0 -206
  240. package/primitives/copy-to-clipboard-icon.tsx +0 -60
  241. package/primitives/dialog-video-controller.tsx +0 -38
  242. package/primitives/dialog.tsx +0 -128
  243. package/primitives/dot-pattern.tsx +0 -57
  244. package/primitives/dots-loader.tsx +0 -13
  245. package/primitives/drawer.tsx +0 -113
  246. package/primitives/dropdown-menu.tsx +0 -199
  247. package/primitives/error-message.tsx +0 -19
  248. package/primitives/file-uploader.tsx +0 -203
  249. package/primitives/form.tsx +0 -185
  250. package/primitives/hover-card.tsx +0 -28
  251. package/primitives/icons/github.tsx +0 -14
  252. package/primitives/icons/index.ts +0 -18
  253. package/primitives/icons/youtube-logo.tsx +0 -59
  254. package/primitives/index-client.ts +0 -4
  255. package/primitives/index-common.ts +0 -304
  256. package/primitives/index-next.ts +0 -4
  257. package/primitives/input-otp.tsx +0 -65
  258. package/primitives/input.tsx +0 -128
  259. package/primitives/label.tsx +0 -21
  260. package/primitives/list-adaptor.ts +0 -12
  261. package/primitives/list-box.tsx +0 -74
  262. package/primitives/loading-spinner.tsx +0 -33
  263. package/primitives/markdown-preview.tsx +0 -612
  264. package/primitives/mermaid.tsx +0 -196
  265. package/primitives/navigation-menu.tsx +0 -147
  266. package/primitives/next/image.tsx +0 -91
  267. package/primitives/next/index.ts +0 -7
  268. package/primitives/next/inline-icon.tsx +0 -36
  269. package/primitives/next/link-element.tsx +0 -109
  270. package/primitives/next/mdx-link.tsx +0 -22
  271. package/primitives/next/media-stack.tsx +0 -52
  272. package/primitives/next/nav-items.tsx +0 -45
  273. package/primitives/next/youtube-embed.tsx +0 -83
  274. package/primitives/pagination.tsx +0 -117
  275. package/primitives/popover.tsx +0 -34
  276. package/primitives/pretty-json-print.tsx +0 -28
  277. package/primitives/progress.tsx +0 -27
  278. package/primitives/prompt-textarea.tsx +0 -72
  279. package/primitives/qr-code.tsx +0 -112
  280. package/primitives/radio-group.tsx +0 -42
  281. package/primitives/resizable.tsx +0 -47
  282. package/primitives/scroll-area.tsx +0 -57
  283. package/primitives/search-input.tsx +0 -66
  284. package/primitives/select.tsx +0 -122
  285. package/primitives/separator.tsx +0 -26
  286. package/primitives/sheet.tsx +0 -139
  287. package/primitives/skeleton.tsx +0 -18
  288. package/primitives/slider.tsx +0 -63
  289. package/primitives/sonner.tsx +0 -35
  290. package/primitives/step-indicator.tsx +0 -69
  291. package/primitives/stepper.tsx +0 -272
  292. package/primitives/switch.tsx +0 -27
  293. package/primitives/table.tsx +0 -105
  294. package/primitives/tabs.tsx +0 -50
  295. package/primitives/text-area.tsx +0 -26
  296. package/primitives/text-link.tsx +0 -27
  297. package/primitives/textarea.tsx +0 -64
  298. package/primitives/textfield.tsx +0 -78
  299. package/primitives/toast.tsx +0 -30
  300. package/primitives/toggle-group.tsx +0 -63
  301. package/primitives/toggle.tsx +0 -44
  302. package/primitives/tooltip.tsx +0 -47
  303. package/primitives/video-player.tsx +0 -23
  304. package/src/button.ts +0 -1
  305. package/src/hooks/index.ts +0 -7
  306. package/src/hooks/use-click-away.ts +0 -31
  307. package/src/hooks/use-combined-refs.ts +0 -22
  308. package/src/hooks/use-copy-clipboard.ts +0 -30
  309. package/src/hooks/use-debounce.ts +0 -17
  310. package/src/hooks/use-fill-ids.ts +0 -25
  311. package/src/hooks/use-map.ts +0 -26
  312. package/src/hooks/use-measure.ts +0 -42
  313. package/src/hooks/use-reverse-video-playback.ts +0 -43
  314. package/src/hooks/use-scroll-restoration.ts +0 -50
  315. package/src/index-lean.ts +0 -87
  316. package/src/index.ts +0 -54
  317. package/src/mcp/README.md +0 -141
  318. package/src/mcp/enhanced-server.ts +0 -1208
  319. package/src/mcp/index.ts +0 -518
  320. package/src/mcp/package.json +0 -10
  321. package/src/registry/api.ts +0 -164
  322. package/src/registry/index.ts +0 -60
  323. package/src/registry/package.json +0 -10
  324. package/src/utils.ts +0 -19
  325. package/tailwind/colors.tailwind.js +0 -53
  326. package/tailwind/fontFamily.tailwind.ts +0 -7
  327. package/tailwind/fontSize.tailwind.ts +0 -13
  328. package/tailwind/index.ts +0 -7
  329. package/tailwind/safelist.tailwind.js +0 -26
  330. package/tailwind/screens.tailwind.js +0 -8
  331. package/tailwind/spacing.tailwind.js +0 -65
  332. package/tailwind/tailwind.config.hanzo-preset.d.ts +0 -5
  333. package/tailwind/tailwind.config.hanzo-preset.js +0 -915
  334. package/tailwind/tw-font-desc.ts +0 -15
  335. package/tailwind/typo-plugin/get-plugin-styles.js +0 -679
  336. package/tailwind/typo-plugin/index.d.ts +0 -9
  337. package/tailwind/typo-plugin/index.js +0 -141
  338. package/tailwind/typo-plugin/utils.js +0 -60
  339. package/tailwind/typography-test.mdx +0 -35
  340. package/tailwind/z-index.tailwind.js +0 -71
  341. package/types/animation-def.ts +0 -3
  342. package/types/breakpoints.ts +0 -11
  343. package/types/bullet-item.ts +0 -10
  344. package/types/button-def.ts +0 -39
  345. package/types/dimensions.ts +0 -8
  346. package/types/grid-def.ts +0 -56
  347. package/types/image-def.ts +0 -32
  348. package/types/index.ts +0 -30
  349. package/types/link-def.ts +0 -56
  350. package/types/media-stack-def.ts +0 -31
  351. package/types/t-shirt-size.ts +0 -5
  352. package/types/tshirt-dimensions.ts +0 -20
  353. package/types/video-def.ts +0 -25
  354. package/util/blob.ts +0 -33
  355. package/util/copy-to-clipboard.ts +0 -17
  356. package/util/create-shadow-root.ts +0 -22
  357. package/util/date.ts +0 -84
  358. package/util/debounce.ts +0 -11
  359. package/util/file.ts +0 -15
  360. package/util/format-and-abbreviate-as-currency.ts +0 -125
  361. package/util/format-text.ts +0 -34
  362. package/util/format-to-max-char.ts +0 -68
  363. package/util/index-client.ts +0 -3
  364. package/util/index.ts +0 -112
  365. package/util/number-abbreviate.ts +0 -49
  366. package/util/specifier.ts +0 -43
  367. package/util/spread-to-transform.ts +0 -25
  368. package/util/step-animation.ts +0 -90
  369. package/util/timing.ts +0 -3
  370. package/util/toasts.tsx +0 -17
  371. package/util/two-way-map.ts +0 -19
@@ -1,45 +0,0 @@
1
- import React from 'react'
2
-
3
- import type { LinkDef } from '../../types'
4
- import LinkElement from './link-element'
5
- import { cn } from '../../util'
6
-
7
- const NavItems: React.FC<{
8
- items: LinkDef[]
9
- className?: string,
10
- as?: React.ElementType
11
- itemClx?: string | ((def: LinkDef) => string),
12
- currentAs?: string
13
- }> = ({
14
- items,
15
- className='',
16
- itemClx,
17
- as: Tag='nav',
18
- currentAs
19
- }) => ( items.length ? (
20
- <Tag className={className} >
21
- {items.map((item, index) => {
22
-
23
- const variant = item.variant ?? 'link'
24
- let internalClx = ''
25
-
26
- // note that linkFG (or any other variant of 'link')
27
- // will not get assigned these classes,
28
- // and will remain styles is 'foreground' (hence the name)
29
- if (variant === 'link') {
30
- internalClx += 'text-nav hover:text-nav-hover '
31
- if (currentAs && currentAs === item.href) {
32
- internalClx += 'text-nav-current '
33
- }
34
- }
35
- else {
36
- internalClx += 'min-w-0 lg:min-w-0 '
37
- }
38
-
39
- const _itemClx = (itemClx) ? (typeof itemClx === 'string' ? itemClx : itemClx(item)) : ''
40
- return (<LinkElement def={item} key={index} className={cn( internalClx, _itemClx)} />)
41
- })}
42
- </Tag>) : null
43
- )
44
-
45
- export default NavItems
@@ -1,83 +0,0 @@
1
- 'use client'
2
-
3
- import { useState } from 'react'
4
- import Image from 'next/image'
5
-
6
- import * as Icons from '../icons'
7
-
8
- // Concept based on https://www.youtube.com/watch?v=lLqRchtjN00
9
- // (https://github.com/a-trost/fableton)
10
-
11
- const YouTubeEmbed: React.FC<{
12
- youtubeID: string
13
- width: number
14
- height: number
15
- buttonSize?: number
16
- timeAt?: string // '5s'
17
- title?: string
18
- caption?: string
19
- className?: string
20
- }> = ({
21
- youtubeID,
22
- width,
23
- height,
24
- buttonSize=100,
25
- timeAt,
26
- title,
27
- caption,
28
- className=''
29
- }) => {
30
-
31
- const [showVideo, setShowVideo] = useState(false)
32
-
33
- // re autoplay: https://stackoverflow.com/a/45610557/11645689
34
- return (
35
- <div className={className}>
36
- {showVideo ? (
37
- <iframe
38
- width={width}
39
- height={height}
40
- src={`https://www.youtube-nocookie.com/embed/${youtubeID + ((timeAt) ? `?t=${timeAt}&` : '?')}rel=0&autoplay=1`}
41
- allow='accelerometer ; autoplay *; clipboard-write *; encrypted-media *; gyroscope *; picture-in-picture *;'
42
- allowFullScreen
43
- title={title || 'Youtube video'}
44
- className='aspect-[16/9] h-full w-full p-0 border-0 '
45
- />
46
- ) : (
47
- <button
48
- type='button'
49
- onClick={() => setShowVideo(true)}
50
- className='relative aspect-[16/9] w-full'
51
- aria-label={`Play video ${title}`}
52
- >
53
- <Image
54
- src={`https://img.youtube.com/vi/${youtubeID}/maxresdefault.jpg`}
55
- alt=''
56
- className='h-full w-full'
57
- width={width}
58
- height={height}
59
- loading='lazy'
60
- />
61
- <div
62
- className={ //https://stackoverflow.com/a/23384995/11645689
63
- 'absolute z-above-content-2 left-[50%] top-[50%] -translate-y-2/4 -translate-x-2/4 ' +
64
- 'grid place-items-center ' +
65
- 'text-xl text-white opacity-90'
66
- }
67
- >
68
- <Icons.youtube
69
- width={buttonSize}
70
- height={buttonSize}
71
- role='img'
72
- className='transform transition hover:scale-110'
73
- {...{'aria-hidden': true}}
74
- />
75
- </div>
76
- {caption && <p className='hidden md:block whitespace-nowrap typography absolute z-above-content left-[50%] top-[20px] -translate-x-2/4 '>{caption}</p>}
77
- </button>
78
- )}
79
- </div>
80
- )
81
- }
82
-
83
- export default YouTubeEmbed
@@ -1,117 +0,0 @@
1
- import { MoreHorizontal, RedoIcon, UndoIcon } from 'lucide-react';
2
- import React from 'react';
3
-
4
- import { cn } from '../src/utils';
5
- import { ButtonProps, buttonVariants } from './button';
6
-
7
- const Pagination = ({ className, ...props }: React.ComponentProps<'nav'>) => (
8
- <nav
9
- aria-label="pagination"
10
- className={cn('mx-auto flex w-full justify-center', className)}
11
- role="navigation"
12
- {...props}
13
- />
14
- );
15
- Pagination.displayName = 'Pagination';
16
-
17
- const PaginationContent = ({
18
- className,
19
- ...props
20
- }: React.ComponentProps<'ul'>) => (
21
- <ul
22
- className={cn('flex flex-row items-center gap-1', className)}
23
- {...props}
24
- />
25
- );
26
- PaginationContent.displayName = 'PaginationContent';
27
-
28
- const PaginationItem = ({
29
- className,
30
- ...props
31
- }: React.ComponentProps<'li'>) => (
32
- <li className={cn('', className)} {...props} />
33
- );
34
- PaginationItem.displayName = 'PaginationItem';
35
-
36
- type PaginationLinkProps = {
37
- isActive?: boolean;
38
- } & Pick<ButtonProps, 'size'> &
39
- React.ComponentProps<'a'>;
40
-
41
- const PaginationLink = ({
42
- className,
43
- isActive,
44
- size = 'icon',
45
- ...props
46
- }: PaginationLinkProps) => (
47
- <a
48
- aria-current={isActive ? 'page' : undefined}
49
- className={cn(
50
- buttonVariants({
51
- variant: isActive ? 'outline' : 'tertiary',
52
- size,
53
- }),
54
- 'size-[30px] rounded-lg p-0.5',
55
- className,
56
- )}
57
- {...props}
58
- />
59
- );
60
- PaginationLink.displayName = 'PaginationLink';
61
-
62
- const PaginationPrevious = ({
63
- className,
64
- ...props
65
- }: React.ComponentProps<typeof PaginationLink>) => (
66
- <PaginationLink
67
- aria-label="Go to previous page"
68
- className={cn('gap-1', className)}
69
- size="sm"
70
- {...props}
71
- >
72
- <UndoIcon className="h-4 w-4" />
73
- <span className="sr-only">Previous</span>
74
- </PaginationLink>
75
- );
76
- PaginationPrevious.displayName = 'PaginationPrevious';
77
-
78
- const PaginationNext = ({
79
- className,
80
- ...props
81
- }: React.ComponentProps<typeof PaginationLink>) => (
82
- <PaginationLink
83
- aria-label="Go to next page"
84
- className={cn('gap-1', className)}
85
- size="sm"
86
- {...props}
87
- >
88
- <span className="sr-only">Next</span>
89
- <RedoIcon className="h-4 w-4" />
90
- </PaginationLink>
91
- );
92
- PaginationNext.displayName = 'PaginationNext';
93
-
94
- const PaginationEllipsis = ({
95
- className,
96
- ...props
97
- }: React.ComponentProps<'span'>) => (
98
- <span
99
- aria-hidden
100
- className={cn('flex h-9 w-9 items-center justify-center', className)}
101
- {...props}
102
- >
103
- <MoreHorizontal className="h-4 w-4" />
104
- <span className="sr-only">More pages</span>
105
- </span>
106
- );
107
- PaginationEllipsis.displayName = 'PaginationEllipsis';
108
-
109
- export {
110
- Pagination,
111
- PaginationContent,
112
- PaginationLink,
113
- PaginationItem,
114
- PaginationPrevious,
115
- PaginationNext,
116
- PaginationEllipsis,
117
- };
@@ -1,34 +0,0 @@
1
- import * as PopoverPrimitive from '@radix-ui/react-popover';
2
- import React from 'react';
3
-
4
- import { cn } from '../src/utils';
5
-
6
- const Popover = PopoverPrimitive.Root;
7
-
8
- const PopoverTrigger = PopoverPrimitive.Trigger;
9
- const PopoverAnchor = PopoverPrimitive.Anchor;
10
- const PopoverArrow = PopoverPrimitive.Arrow;
11
- const PopoverClose = PopoverPrimitive.Close;
12
-
13
- const PopoverContent = ({
14
- className,
15
- align = 'center',
16
- sideOffset = 4,
17
- ...props
18
- }: React.ComponentProps<typeof PopoverPrimitive.Content>) => (
19
- <PopoverPrimitive.Portal>
20
- <PopoverPrimitive.Content
21
- align={align}
22
- className={cn(
23
- 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
24
- 'bg-bg-dark border-divider z-50 w-72 rounded-md border p-4 text-gray-50 shadow-lg shadow-md outline-hidden',
25
- className,
26
- )}
27
- sideOffset={sideOffset}
28
- {...props}
29
- />
30
- </PopoverPrimitive.Portal>
31
- );
32
- PopoverContent.displayName = PopoverPrimitive.Content.displayName;
33
-
34
- export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor, PopoverArrow, PopoverClose };
@@ -1,28 +0,0 @@
1
- import { useMemo } from 'react';
2
- import { cn } from '../src/utils';
3
-
4
- export const PrettyJsonPrint = ({
5
- json,
6
- className,
7
- }: {
8
- json: string | object;
9
- className?: string;
10
- }) => {
11
- const formattedJson = useMemo(() => {
12
- let formattedValue = `Unparseable JSON: String(${json})`;
13
- if (typeof json === 'object') {
14
- formattedValue = JSON.stringify(json, null, 2);
15
- } else if (typeof json === 'string') {
16
- try {
17
- const parsedJson = JSON.parse(json);
18
- formattedValue = JSON.stringify(parsedJson, null, 2);
19
- } catch (error) {
20
- console.error('error parsing json', error);
21
- }
22
- }
23
- return formattedValue;
24
- }, [json]);
25
- return (
26
- <pre className={cn('overflow-x-scroll', className)}>{formattedJson}</pre>
27
- );
28
- };
@@ -1,27 +0,0 @@
1
- import * as ProgressPrimitive from '@radix-ui/react-progress';
2
- import React from 'react';
3
-
4
- import { cn } from '../src/utils';
5
-
6
- const Progress = ({
7
- className,
8
- value,
9
- ...props
10
- }: React.ComponentProps<typeof ProgressPrimitive.Root>) => (
11
- <ProgressPrimitive.Root
12
- className={cn(
13
- 'bg-bg-quaternary relative h-4 w-full overflow-hidden',
14
- className,
15
- )}
16
- {...props}
17
- >
18
- <ProgressPrimitive.Indicator
19
- className="h-full w-full flex-1 bg-green-500 transition-all"
20
- style={{ transform: `translateX(-${100 - (value || 0)}%)` }}
21
- />
22
- </ProgressPrimitive.Root>
23
- );
24
- Progress.displayName = ProgressPrimitive.Root.displayName;
25
-
26
- export { Progress };
27
- export default Progress;
@@ -1,72 +0,0 @@
1
- import React from 'react';
2
-
3
- import { cn } from '../src/utils';
4
- import { DotsLoader } from './dots-loader';
5
- import { FormLabel } from './form';
6
-
7
- const MIN_TEXTAREA_HEIGHT = 32;
8
- export interface PromptTextareaProps
9
- extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {
10
- isLoading?: boolean;
11
- label?: string;
12
- field: {
13
- onChange: (...event: any[]) => void;
14
- onBlur: () => void;
15
- value: any;
16
- disabled?: boolean;
17
- name: string;
18
- placeholder?: string;
19
- };
20
- }
21
-
22
- const PromptTextarea = ({ className, ...props }: PromptTextareaProps) => {
23
- const textareaRef = React.useRef<HTMLTextAreaElement>(null);
24
-
25
- React.useLayoutEffect(() => {
26
- // Reset height - important to shrink on delete
27
-
28
- if (!textareaRef.current) return;
29
-
30
- textareaRef.current.style.height = '60px';
31
- // Set height
32
- textareaRef.current.style.height = `${Math.max(
33
- textareaRef.current.scrollHeight + 2,
34
- MIN_TEXTAREA_HEIGHT,
35
- )}px`;
36
-
37
- if (props.autoFocus !== undefined && props.autoFocus) {
38
- textareaRef.current.focus();
39
- }
40
- // eslint-disable-next-line react-hooks/exhaustive-deps
41
- }, [props.value]);
42
-
43
- return (
44
- <>
45
- <textarea
46
- className={cn(
47
- 'flex w-full rounded-md border border-gray-200 bg-gray-400 px-4 py-2 pt-4 text-sm break-words placeholder-gray-100 placeholder:text-base focus-visible:ring-1 focus-visible:ring-gray-100 focus-visible:outline-hidden focus-visible:ring-inset disabled:cursor-not-allowed disabled:opacity-50',
48
- className,
49
- )}
50
- style={{
51
- minHeight: MIN_TEXTAREA_HEIGHT,
52
- resize: 'none',
53
- maxHeight: '300px',
54
- }}
55
- {...props.field}
56
- onKeyDown={props.onKeyDown}
57
- ref={textareaRef}
58
- {...(!props.isLoading && {
59
- placeholder: props.label,
60
- })}
61
- />
62
-
63
- {props.isLoading ? (
64
- <DotsLoader className="absolute top-6 left-4" />
65
- ) : null}
66
- <FormLabel className="sr-only">{props.label}</FormLabel>
67
- </>
68
- );
69
- };
70
- PromptTextarea.displayName = 'PromptTextarea';
71
-
72
- export { PromptTextarea };
@@ -1,112 +0,0 @@
1
- import { DownloadIcon } from '@radix-ui/react-icons';
2
- import { Check } from 'lucide-react';
3
- import React, { useState } from 'react';
4
- import { IProps, QRCode as ReactQRCode } from 'react-qrcode-logo';
5
-
6
- import hanzoLogo from '../assets/images/app-icon.png';
7
- import { Button } from './button';
8
- import { Dialog, DialogContent } from './dialog';
9
-
10
- export function QRCode({
11
- value,
12
- size,
13
- id,
14
- ...props
15
- }: {
16
- value: IProps['value'];
17
- size: IProps['size'];
18
- id?: IProps['id'];
19
- } & React.HTMLAttributes<HTMLDivElement>): React.ReactElement {
20
- return (
21
- <div {...props}>
22
- <ReactQRCode
23
- ecLevel={'M'}
24
- eyeColor="black"
25
- eyeRadius={10}
26
- fgColor="black"
27
- id={id}
28
- logoHeight={size ? size * 0.2 : undefined}
29
- logoImage={hanzoLogo}
30
- logoPaddingStyle="circle"
31
- logoWidth={size ? size * 0.2 : undefined}
32
- qrStyle="dots"
33
- removeQrCodeBehindLogo
34
- size={size ?? 300}
35
- value={value}
36
- />
37
- </div>
38
- );
39
- }
40
-
41
- export function QrCodeModal({
42
- open,
43
- onOpenChange,
44
- value,
45
- onSave,
46
- title,
47
- description,
48
- modalClassName,
49
- }: {
50
- open: boolean;
51
- onOpenChange: (open: boolean) => void;
52
- value: IProps['value'];
53
- onSave: (key: string) => void;
54
- title: React.ReactNode;
55
- description: React.ReactNode;
56
- modalClassName?: string;
57
- }) {
58
- const [saved, setSaved] = useState(false);
59
- const downloadCode = async () => {
60
- const canvas = document.querySelector('#registration-code-qr');
61
- if (canvas instanceof HTMLCanvasElement) {
62
- try {
63
- const pngUrl = canvas.toDataURL();
64
- onSave(pngUrl);
65
- setSaved(true);
66
- } catch (error) {
67
- console.error(error);
68
- } finally {
69
- setTimeout(() => {
70
- setSaved(false);
71
- }, 3000);
72
- }
73
- }
74
- };
75
-
76
- return (
77
- <Dialog onOpenChange={onOpenChange} open={open}>
78
- <DialogContent className={modalClassName}>
79
- <div className="flex flex-col items-center py-4">
80
- <h2 className="mb-1 text-lg font-semibold">{title}</h2>
81
- <p className="text-text-secondary mb-5 text-center text-xs">
82
- {description}
83
- </p>
84
- <div className="mb-7 overflow-hidden rounded-lg shadow-2xl">
85
- <QRCode size={190} value={value} />
86
- <QRCode
87
- className="hidden"
88
- id="registration-code-qr"
89
- size={1024}
90
- value={value}
91
- />
92
- </div>
93
- <div className="flex flex-col gap-4">
94
- <Button className="flex gap-1" onClick={downloadCode}>
95
- {saved ? <Check /> : <DownloadIcon className="h-4 w-4" />}
96
- {saved ? 'Saved' : 'Download'}
97
- </Button>
98
- <Button
99
- className="flex gap-1"
100
- onClick={() => {
101
- onOpenChange(false);
102
- }}
103
- variant="tertiary"
104
- >
105
- I saved it, close
106
- </Button>
107
- </div>
108
- </div>
109
- </DialogContent>
110
- </Dialog>
111
- );
112
- }
@@ -1,42 +0,0 @@
1
- 'use client';
2
-
3
- import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
4
- import { Circle } from 'lucide-react';
5
- import React from 'react';
6
-
7
- import { cn } from '../src/utils';
8
-
9
- const RadioGroup = ({
10
- className,
11
- ...props
12
- }: React.ComponentProps<typeof RadioGroupPrimitive.Root>) => {
13
- return (
14
- <RadioGroupPrimitive.Root
15
- className={cn('grid gap-2', className)}
16
- {...props}
17
- />
18
- );
19
- };
20
- RadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
21
-
22
- const RadioGroupItem = ({
23
- className,
24
- ...props
25
- }: React.ComponentProps<typeof RadioGroupPrimitive.Item>) => {
26
- return (
27
- <RadioGroupPrimitive.Item
28
- className={cn(
29
- 'border-brand text-brand ring-offset-background focus-visible:ring-ring aspect-square h-4 w-4 rounded-full border focus:outline-hidden focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',
30
- className,
31
- )}
32
- {...props}
33
- >
34
- <RadioGroupPrimitive.Indicator className="flex items-center justify-center">
35
- <Circle className="h-2.5 w-2.5 fill-current text-current" />
36
- </RadioGroupPrimitive.Indicator>
37
- </RadioGroupPrimitive.Item>
38
- );
39
- };
40
- RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
41
-
42
- export { RadioGroup, RadioGroupItem };
@@ -1,47 +0,0 @@
1
- import { GripVertical } from 'lucide-react';
2
- import * as ResizablePrimitive from 'react-resizable-panels';
3
-
4
- import { cn } from '../src/utils';
5
-
6
- const ResizablePanelGroup = ({
7
- className,
8
- ...props
9
- }: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) => (
10
- <ResizablePrimitive.PanelGroup
11
- className={cn(
12
- 'flex h-full w-full data-[panel-group-direction=vertical]:flex-col',
13
- className,
14
- )}
15
- {...props}
16
- />
17
- );
18
-
19
- const ResizablePanel = ResizablePrimitive.Panel;
20
-
21
- const ResizableHandle = ({
22
- withHandle,
23
- className,
24
- ...props
25
- }: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {
26
- withHandle?: boolean;
27
- }) => (
28
- <ResizablePrimitive.PanelResizeHandle
29
- className={cn(
30
- 'focus-visible:ring-ring relative flex w-px items-center justify-center bg-gray-100 after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden',
31
- 'data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90',
32
- 'data-[resize-handle-state=drag]:after:bg-bg-secondary',
33
- 'data-[resize-handle-state=hover]:after:bg-bg-secondary',
34
- 'after:w-[1px] data-[panel-group-direction=vertical]:after:h-[1px]',
35
- className,
36
- )}
37
- {...props}
38
- >
39
- {withHandle && (
40
- <div className="z-10 flex h-4 w-3 items-center justify-center rounded-xs border bg-gray-200">
41
- <GripVertical className="h-2.5 w-2.5" />
42
- </div>
43
- )}
44
- </ResizablePrimitive.PanelResizeHandle>
45
- );
46
-
47
- export { ResizablePanelGroup, ResizablePanel, ResizableHandle };
@@ -1,57 +0,0 @@
1
- import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
2
- import React from 'react';
3
-
4
- import { cn } from '../src/utils';
5
-
6
- const ScrollArea = ({
7
- className,
8
- children,
9
- ref,
10
- ...props
11
- }: React.ComponentProps<typeof ScrollAreaPrimitive.Root> & {
12
- ref?: React.RefObject<HTMLDivElement | null>;
13
- }) => (
14
- <ScrollAreaPrimitive.Root
15
- className={cn('relative overflow-hidden', className)}
16
- {...props}
17
- >
18
- <ScrollAreaPrimitive.Viewport
19
- className="h-full w-full rounded-[inherit]"
20
- ref={ref}
21
- >
22
- {children}
23
- </ScrollAreaPrimitive.Viewport>
24
- <ScrollBar />
25
- <ScrollAreaPrimitive.Corner />
26
- </ScrollAreaPrimitive.Root>
27
- );
28
- ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
29
-
30
- const ScrollBar = ({
31
- className,
32
- orientation = 'vertical',
33
- ...props
34
- }: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) => (
35
- <ScrollAreaPrimitive.ScrollAreaScrollbar
36
- className={cn(
37
- 'flex touch-none transition-colors select-none',
38
- orientation === 'vertical' &&
39
- 'h-full w-2.5 border-l border-l-transparent p-[1px]',
40
- orientation === 'horizontal' &&
41
- 'h-2.5 border-t border-t-transparent p-[1px]',
42
- className,
43
- )}
44
- orientation={orientation}
45
- {...props}
46
- >
47
- <ScrollAreaPrimitive.ScrollAreaThumb
48
- className={cn(
49
- 'relative rounded-full bg-gray-300',
50
- orientation === 'vertical' && 'flex-1',
51
- )}
52
- />
53
- </ScrollAreaPrimitive.ScrollAreaScrollbar>
54
- );
55
- ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
56
-
57
- export { ScrollArea, ScrollBar };