@hanzo/ui 4.6.0 → 4.7.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 (290) hide show
  1. package/dist/index.d.mts +16 -0
  2. package/dist/index.d.ts +16 -0
  3. package/dist/index.js +9458 -0
  4. package/dist/index.mjs +9449 -0
  5. package/dist/lib/utils.d.mts +2 -0
  6. package/dist/lib/utils.d.ts +2 -0
  7. package/dist/lib/utils.js +47 -0
  8. package/dist/lib/utils.mjs +28 -0
  9. package/dist/src/utils.d.mts +7 -0
  10. package/dist/src/utils.d.ts +7 -0
  11. package/dist/src/utils.js +47 -0
  12. package/dist/src/utils.mjs +28 -0
  13. package/dist/tailwind/index.d.mts +2 -0
  14. package/dist/tailwind/index.d.ts +2 -0
  15. package/dist/tailwind/index.js +2048 -0
  16. package/dist/tailwind/index.mjs +2017 -0
  17. package/dist/types/index.d.mts +12 -0
  18. package/dist/types/index.d.ts +12 -0
  19. package/dist/types/index.js +79 -0
  20. package/dist/types/index.mjs +56 -0
  21. package/package.json +151 -25
  22. package/MCP-INSTRUCTIONS.md +0 -73
  23. package/README-MCP.md +0 -175
  24. package/assets/ai-icons.tsx +0 -207
  25. package/assets/crypto.tsx +0 -33
  26. package/assets/file-type-icon.tsx +0 -66
  27. package/assets/file.tsx +0 -45
  28. package/assets/general.tsx +0 -2318
  29. package/assets/hanzo-logo.svg +0 -9
  30. package/assets/hanzo-logo.tsx +0 -15
  31. package/assets/index.ts +0 -8
  32. package/assets/index.tsx +0 -4
  33. package/assets/llm-provider.tsx +0 -1094
  34. package/blocks/components/accordian-block.tsx +0 -48
  35. package/blocks/components/block-component-props.ts +0 -11
  36. package/blocks/components/bullet-cards-block.tsx +0 -46
  37. package/blocks/components/card-block/index.tsx +0 -171
  38. package/blocks/components/card-block/link-out-button.tsx +0 -20
  39. package/blocks/components/card-block/util.ts +0 -28
  40. package/blocks/components/carte-blanche-block/index.tsx +0 -127
  41. package/blocks/components/carte-blanche-block/variant-content-left.tsx +0 -49
  42. package/blocks/components/content.tsx +0 -70
  43. package/blocks/components/cta-block.tsx +0 -115
  44. package/blocks/components/enh-heading-block.tsx +0 -204
  45. package/blocks/components/grid-block/grid-block-mutator.ts +0 -12
  46. package/blocks/components/grid-block/index.tsx +0 -83
  47. package/blocks/components/grid-block/mutator-registry.ts +0 -10
  48. package/blocks/components/grid-block/table-borders.mutator.ts +0 -47
  49. package/blocks/components/group-block.tsx +0 -83
  50. package/blocks/components/heading-block.tsx +0 -88
  51. package/blocks/components/image-block.tsx +0 -111
  52. package/blocks/components/index.ts +0 -30
  53. package/blocks/components/screenful-block/content.tsx +0 -123
  54. package/blocks/components/screenful-block/index.tsx +0 -107
  55. package/blocks/components/screenful-block/poster-background.tsx +0 -34
  56. package/blocks/components/screenful-block/video-background.tsx +0 -45
  57. package/blocks/components/space-block.tsx +0 -66
  58. package/blocks/components/video-block.tsx +0 -138
  59. package/blocks/def/accordian-block.ts +0 -14
  60. package/blocks/def/block.ts +0 -7
  61. package/blocks/def/bullet-cards-block.ts +0 -22
  62. package/blocks/def/card-block.ts +0 -22
  63. package/blocks/def/carte-blanche-block.ts +0 -21
  64. package/blocks/def/cta-block.ts +0 -19
  65. package/blocks/def/element-block.ts +0 -11
  66. package/blocks/def/enh-heading-block.ts +0 -44
  67. package/blocks/def/grid-block.ts +0 -16
  68. package/blocks/def/group-block.ts +0 -11
  69. package/blocks/def/heading-block.ts +0 -15
  70. package/blocks/def/image-block.ts +0 -31
  71. package/blocks/def/index.ts +0 -35
  72. package/blocks/def/screenful-block.ts +0 -54
  73. package/blocks/def/space-block.ts +0 -64
  74. package/blocks/def/video-block.ts +0 -9
  75. package/blocks/index.ts +0 -2
  76. package/components/index.ts +0 -56
  77. package/dist/button.d.ts +0 -1
  78. package/dist/button.js +0 -1
  79. package/dist/hooks/index.d.ts +0 -7
  80. package/dist/hooks/index.js +0 -7
  81. package/dist/hooks/use-click-away.d.ts +0 -2
  82. package/dist/hooks/use-click-away.js +0 -23
  83. package/dist/hooks/use-combined-refs.d.ts +0 -3
  84. package/dist/hooks/use-combined-refs.js +0 -18
  85. package/dist/hooks/use-copy-clipboard.d.ts +0 -9
  86. package/dist/hooks/use-copy-clipboard.js +0 -21
  87. package/dist/hooks/use-debounce.d.ts +0 -1
  88. package/dist/hooks/use-debounce.js +0 -13
  89. package/dist/hooks/use-fill-ids.d.ts +0 -8
  90. package/dist/hooks/use-fill-ids.js +0 -20
  91. package/dist/hooks/use-map.d.ts +0 -1
  92. package/dist/hooks/use-map.js +0 -20
  93. package/dist/hooks/use-measure.d.ts +0 -8
  94. package/dist/hooks/use-measure.js +0 -25
  95. package/dist/hooks/use-reverse-video-playback.d.ts +0 -1
  96. package/dist/hooks/use-reverse-video-playback.js +0 -41
  97. package/dist/hooks/use-scroll-restoration.d.ts +0 -8
  98. package/dist/hooks/use-scroll-restoration.js +0 -36
  99. package/dist/mcp/enhanced-server.d.ts +0 -29
  100. package/dist/mcp/enhanced-server.js +0 -1128
  101. package/dist/mcp/index.d.ts +0 -28
  102. package/dist/mcp/index.js +0 -436
  103. package/dist/registry/api.d.ts +0 -37
  104. package/dist/registry/api.js +0 -129
  105. package/dist/registry/index.d.ts +0 -353
  106. package/dist/registry/index.js +0 -45
  107. package/dist/utils.d.ts +0 -1
  108. package/dist/utils.js +0 -1
  109. package/environment.d.ts +0 -6
  110. package/helpers/file.ts +0 -33
  111. package/helpers/memoization.ts +0 -40
  112. package/primitives/accordion.tsx +0 -74
  113. package/primitives/action-button.tsx +0 -42
  114. package/primitives/alert-dialog.tsx +0 -185
  115. package/primitives/alert.tsx +0 -74
  116. package/primitives/apply-typography.tsx +0 -55
  117. package/primitives/aspect-ratio.tsx +0 -5
  118. package/primitives/avatar.tsx +0 -57
  119. package/primitives/background-beams.tsx +0 -142
  120. package/primitives/badge.tsx +0 -44
  121. package/primitives/breadcrumb.tsx +0 -130
  122. package/primitives/breakpoint-indicator.tsx +0 -19
  123. package/primitives/button.tsx +0 -82
  124. package/primitives/calendar.tsx +0 -72
  125. package/primitives/card.tsx +0 -97
  126. package/primitives/carousel.tsx +0 -237
  127. package/primitives/chat/chat-input-area.tsx +0 -87
  128. package/primitives/chat/chat-input.tsx +0 -71
  129. package/primitives/chat/files-preview.tsx +0 -330
  130. package/primitives/chat/index.ts +0 -6
  131. package/primitives/chat/json-form.tsx +0 -8
  132. package/primitives/chat/message-list.tsx +0 -307
  133. package/primitives/chat/message.tsx +0 -569
  134. package/primitives/chat/sqlite-preview.tsx +0 -215
  135. package/primitives/checkbox.tsx +0 -31
  136. package/primitives/collapsible.tsx +0 -9
  137. package/primitives/combobox.tsx +0 -239
  138. package/primitives/command.tsx +0 -149
  139. package/primitives/context-menu.tsx +0 -206
  140. package/primitives/copy-to-clipboard-icon.tsx +0 -60
  141. package/primitives/dialog-video-controller.tsx +0 -38
  142. package/primitives/dialog.tsx +0 -123
  143. package/primitives/dot-pattern.tsx +0 -57
  144. package/primitives/dots-loader.tsx +0 -13
  145. package/primitives/drawer.tsx +0 -110
  146. package/primitives/dropdown-menu.tsx +0 -199
  147. package/primitives/error-message.tsx +0 -19
  148. package/primitives/file-uploader.tsx +0 -200
  149. package/primitives/form.tsx +0 -183
  150. package/primitives/hover-card.tsx +0 -28
  151. package/primitives/icons/github.tsx +0 -14
  152. package/primitives/icons/index.ts +0 -18
  153. package/primitives/icons/youtube-logo.tsx +0 -59
  154. package/primitives/index-common.ts +0 -303
  155. package/primitives/index-next.ts +0 -4
  156. package/primitives/input-otp.tsx +0 -65
  157. package/primitives/input.tsx +0 -125
  158. package/primitives/label.tsx +0 -20
  159. package/primitives/list-adaptor.ts +0 -12
  160. package/primitives/list-box.tsx +0 -74
  161. package/primitives/loading-spinner.tsx +0 -33
  162. package/primitives/markdown-preview.tsx +0 -609
  163. package/primitives/mermaid.tsx +0 -196
  164. package/primitives/navigation-menu.tsx +0 -147
  165. package/primitives/next/image.tsx +0 -90
  166. package/primitives/next/index.ts +0 -7
  167. package/primitives/next/inline-icon.tsx +0 -36
  168. package/primitives/next/link-element.tsx +0 -109
  169. package/primitives/next/mdx-link.tsx +0 -22
  170. package/primitives/next/media-stack.tsx +0 -69
  171. package/primitives/next/nav-items.tsx +0 -45
  172. package/primitives/next/youtube-embed.tsx +0 -83
  173. package/primitives/pagination.tsx +0 -117
  174. package/primitives/popover.tsx +0 -32
  175. package/primitives/pretty-json-print.tsx +0 -28
  176. package/primitives/progress.tsx +0 -26
  177. package/primitives/prompt-textarea.tsx +0 -72
  178. package/primitives/qr-code.tsx +0 -112
  179. package/primitives/radio-group.tsx +0 -42
  180. package/primitives/resizable.tsx +0 -47
  181. package/primitives/scroll-area.tsx +0 -57
  182. package/primitives/search-input.tsx +0 -66
  183. package/primitives/select.tsx +0 -122
  184. package/primitives/separator.tsx +0 -25
  185. package/primitives/sheet.tsx +0 -139
  186. package/primitives/skeleton.tsx +0 -17
  187. package/primitives/slider.tsx +0 -62
  188. package/primitives/sonner.tsx +0 -35
  189. package/primitives/step-indicator.tsx +0 -69
  190. package/primitives/stepper.tsx +0 -272
  191. package/primitives/switch.tsx +0 -26
  192. package/primitives/table.tsx +0 -105
  193. package/primitives/tabs.tsx +0 -50
  194. package/primitives/text-area.tsx +0 -26
  195. package/primitives/text-link.tsx +0 -25
  196. package/primitives/textarea.tsx +0 -61
  197. package/primitives/textfield.tsx +0 -75
  198. package/primitives/toast.tsx +0 -30
  199. package/primitives/toggle-group.tsx +0 -63
  200. package/primitives/toggle.tsx +0 -44
  201. package/primitives/tooltip.tsx +0 -47
  202. package/primitives/video-player.tsx +0 -23
  203. package/public/r/accordion.json +0 -11
  204. package/public/r/alert.json +0 -11
  205. package/public/r/avatar.json +0 -11
  206. package/public/r/badge.json +0 -11
  207. package/public/r/button.json +0 -11
  208. package/public/r/card.json +0 -11
  209. package/public/r/checkbox.json +0 -11
  210. package/public/r/default.json +0 -6
  211. package/public/r/dialog.json +0 -11
  212. package/public/r/input.json +0 -11
  213. package/public/r/label.json +0 -11
  214. package/public/r/new-york.json +0 -6
  215. package/public/r/popover.json +0 -11
  216. package/public/r/select.json +0 -11
  217. package/public/r/table.json +0 -11
  218. package/public/r/tabs.json +0 -11
  219. package/public/r/toast.json +0 -11
  220. package/registry.json +0 -184
  221. package/src/button.ts +0 -1
  222. package/src/hooks/index.ts +0 -7
  223. package/src/hooks/use-click-away.ts +0 -31
  224. package/src/hooks/use-combined-refs.ts +0 -22
  225. package/src/hooks/use-copy-clipboard.ts +0 -30
  226. package/src/hooks/use-debounce.ts +0 -17
  227. package/src/hooks/use-fill-ids.ts +0 -25
  228. package/src/hooks/use-map.ts +0 -26
  229. package/src/hooks/use-measure.ts +0 -42
  230. package/src/hooks/use-reverse-video-playback.ts +0 -43
  231. package/src/hooks/use-scroll-restoration.ts +0 -50
  232. package/src/mcp/README.md +0 -141
  233. package/src/mcp/enhanced-server.ts +0 -1208
  234. package/src/mcp/index.ts +0 -518
  235. package/src/mcp/package.json +0 -10
  236. package/src/registry/api.ts +0 -164
  237. package/src/registry/index.ts +0 -60
  238. package/src/registry/package.json +0 -10
  239. package/src/utils.ts +0 -1
  240. package/tailwind/colors.tailwind.js +0 -53
  241. package/tailwind/fontFamily.tailwind.ts +0 -7
  242. package/tailwind/fontSize.tailwind.ts +0 -13
  243. package/tailwind/index.ts +0 -7
  244. package/tailwind/safelist.tailwind.js +0 -26
  245. package/tailwind/screens.tailwind.js +0 -8
  246. package/tailwind/spacing.tailwind.js +0 -65
  247. package/tailwind/tailwind.config.hanzo-preset.d.ts +0 -5
  248. package/tailwind/tailwind.config.hanzo-preset.js +0 -915
  249. package/tailwind/tw-font-desc.ts +0 -15
  250. package/tailwind/typo-plugin/get-plugin-styles.js +0 -679
  251. package/tailwind/typo-plugin/index.d.ts +0 -9
  252. package/tailwind/typo-plugin/index.js +0 -141
  253. package/tailwind/typo-plugin/utils.js +0 -60
  254. package/tailwind/typography-test.mdx +0 -35
  255. package/tailwind/z-index.tailwind.js +0 -71
  256. package/test/test-registry.js +0 -73
  257. package/test-imports.mjs +0 -19
  258. package/tsconfig.json +0 -22
  259. package/types/animation-def.ts +0 -3
  260. package/types/breakpoints.ts +0 -11
  261. package/types/bullet-item.ts +0 -10
  262. package/types/button-def.ts +0 -39
  263. package/types/dimensions.ts +0 -8
  264. package/types/grid-def.ts +0 -56
  265. package/types/image-def.ts +0 -32
  266. package/types/index.ts +0 -29
  267. package/types/link-def.ts +0 -56
  268. package/types/media-stack-def.ts +0 -31
  269. package/types/t-shirt-size.ts +0 -5
  270. package/types/tshirt-dimensions.ts +0 -20
  271. package/types/video-def.ts +0 -25
  272. package/util/blob.ts +0 -28
  273. package/util/copy-to-clipboard.ts +0 -17
  274. package/util/create-shadow-root.ts +0 -22
  275. package/util/date.ts +0 -83
  276. package/util/debounce.ts +0 -11
  277. package/util/file.ts +0 -15
  278. package/util/format-and-abbreviate-as-currency.ts +0 -125
  279. package/util/format-text.ts +0 -33
  280. package/util/format-to-max-char.ts +0 -68
  281. package/util/index-client.ts +0 -3
  282. package/util/index.ts +0 -9
  283. package/util/number-abbreviate.ts +0 -49
  284. package/util/specifier.ts +0 -43
  285. package/util/spread-to-transform.ts +0 -24
  286. package/util/step-animation.ts +0 -90
  287. package/util/timing.ts +0 -3
  288. package/util/toasts.tsx +0 -17
  289. package/util/two-way-map.ts +0 -19
  290. package/utils.ts +0 -9
@@ -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 * as 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,32 +0,0 @@
1
- import * as PopoverPrimitive from '@radix-ui/react-popover';
2
- import * as 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
-
11
- const PopoverContent = ({
12
- className,
13
- align = 'center',
14
- sideOffset = 4,
15
- ...props
16
- }: React.ComponentProps<typeof PopoverPrimitive.Content>) => (
17
- <PopoverPrimitive.Portal>
18
- <PopoverPrimitive.Content
19
- align={align}
20
- className={cn(
21
- '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',
22
- 'bg-bg-dark border-divider z-50 w-72 rounded-md border p-4 text-gray-50 shadow-lg shadow-md outline-hidden',
23
- className,
24
- )}
25
- sideOffset={sideOffset}
26
- {...props}
27
- />
28
- </PopoverPrimitive.Portal>
29
- );
30
- PopoverContent.displayName = PopoverPrimitive.Content.displayName;
31
-
32
- export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };
@@ -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,26 +0,0 @@
1
- import * as ProgressPrimitive from '@radix-ui/react-progress';
2
- import * as 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 };
@@ -1,72 +0,0 @@
1
- import * as 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 * as 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 * as 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 };