@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,238 +0,0 @@
1
- 'use client'
2
-
3
- import React from 'react';
4
- import useEmblaCarousel from 'embla-carousel-react'
5
- // @ts-ignore
6
- const { EmblaCarouselType, EmblaOptionsType, EmblaPluginType } = {}
7
-
8
- import { ArrowLeft, ArrowRight } from 'lucide-react'
9
-
10
- import { cn } from '../util'
11
- import Button from './button'
12
-
13
- type CarouselApi = EmblaCarouselType
14
- type CarouselOptions = EmblaOptionsType
15
- type CarouselPlugin = EmblaPluginType
16
-
17
- type CarouselProps = {
18
- options?: CarouselOptions
19
- plugins?: CarouselPlugin[]
20
- orientation?: 'horizontal' | 'vertical'
21
- setApi?: (api: CarouselApi) => void
22
- onCarouselSelect?: (api: CarouselApi) => void
23
- }
24
-
25
- type UseCarouselType = {
26
- carouselRef: ReturnType<typeof useEmblaCarousel>[0]
27
- api: ReturnType<typeof useEmblaCarousel>[1]
28
- scrollPrev: () => void
29
- scrollNext: () => void
30
- canScrollPrev: boolean
31
- canScrollNext: boolean
32
- } & CarouselProps
33
-
34
- const CarouselContext = React.createContext<UseCarouselType | null>(null)
35
-
36
- const useCarousel = (): UseCarouselType => {
37
- const service = React.useContext(CarouselContext)
38
- if (!service) { throw new Error('useCarousel must be used within a <Carousel />') }
39
- return service
40
- }
41
-
42
- // https://github.com/emilkowalski/vaul/pull/250
43
- // See data-vaul-no-drag throughout
44
-
45
- const Carousel = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement> & CarouselProps>(
46
- ({
47
- orientation = 'horizontal',
48
- options,
49
- setApi,
50
- plugins,
51
- className,
52
- children,
53
- onCarouselSelect,
54
- ...props
55
- }, ref ) => {
56
-
57
- const [carouselRef, api] = useEmblaCarousel({...options, axis: orientation === 'horizontal' ? 'x' : 'y'}, plugins)
58
-
59
- const [canScrollPrev, setCanScrollPrev] = React.useState<boolean>(false)
60
- const [canScrollNext, setCanScrollNext] = React.useState<boolean>(false)
61
-
62
- const onSelect = React.useCallback((api: CarouselApi) => {
63
- if (!api) { return } // would this ever happen??
64
-
65
- setCanScrollPrev(api.canScrollPrev())
66
- setCanScrollNext(api.canScrollNext())
67
- if (onCarouselSelect) { onCarouselSelect(api)}
68
- }, [])
69
-
70
- const scrollPrev = React.useCallback(() => { api?.scrollPrev()}, [api])
71
- const scrollNext = React.useCallback(() => { api?.scrollNext()}, [api])
72
-
73
- const handleKeyDown = React.useCallback((event: React.KeyboardEvent<HTMLDivElement>) => {
74
- if (event.key === 'ArrowLeft') {
75
- event.preventDefault()
76
- scrollPrev()
77
- }
78
- else if (event.key === 'ArrowRight') {
79
- event.preventDefault()
80
- scrollNext()
81
- }
82
- }, [scrollPrev, scrollNext])
83
-
84
- React.useEffect(() => {
85
- if (!api || !setApi) { return }
86
- setApi(api)
87
- }, [api, setApi])
88
-
89
- React.useEffect(() => {
90
- if (!api) { return }
91
- onSelect(api)
92
- api.on('reInit', onSelect)
93
- api.on('select', onSelect)
94
- return () => { api?.off('select', onSelect) }
95
- }, [api, onSelect])
96
-
97
- return (
98
- <CarouselContext.Provider
99
- value={{
100
- carouselRef,
101
- api,
102
- options,
103
- orientation: orientation || (options?.axis === 'y' ? 'vertical' : 'horizontal'),
104
- scrollPrev,
105
- scrollNext,
106
- canScrollPrev,
107
- canScrollNext,
108
- }}
109
- >
110
- <div
111
- ref={ref}
112
- onKeyDownCapture={handleKeyDown}
113
- className={cn('relative', className)}
114
- role='region'
115
- aria-roledescription='carousel'
116
- data-vaul-no-drag
117
- {...props}
118
- >
119
- {children}
120
- </div>
121
- </CarouselContext.Provider>
122
- )
123
- }
124
- )
125
- Carousel.displayName = 'Carousel'
126
-
127
- const CarouselContent = React.forwardRef<
128
- HTMLDivElement,
129
- React.HTMLAttributes<HTMLDivElement>
130
- >(({ className, ...props }, ref) => {
131
- const { carouselRef, orientation } = useCarousel()
132
-
133
- return (
134
- <div ref={carouselRef} className='overflow-hidden' data-vaul-no-drag >
135
- <div
136
- ref={ref}
137
- className={cn(
138
- 'flex',
139
- orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col',
140
- className
141
- )}
142
- {...props}
143
- />
144
- </div>
145
- )
146
- })
147
- CarouselContent.displayName = 'CarouselContent'
148
-
149
- const CarouselItem = React.forwardRef<
150
- HTMLDivElement,
151
- React.HTMLAttributes<HTMLDivElement>
152
- >(({ className, ...props }, ref) => {
153
- const { orientation } = useCarousel()
154
-
155
- return (
156
- <div
157
- ref={ref}
158
- role='group'
159
- aria-roledescription='slide'
160
- data-vaul-no-drag
161
- className={cn(
162
- 'min-w-0 shrink-0 grow-0 basis-full',
163
- orientation === 'horizontal' ? 'pl-4' : 'pt-4',
164
- className
165
- )}
166
- {...props}
167
- />
168
- )
169
- })
170
- CarouselItem.displayName = 'CarouselItem'
171
-
172
- const CarouselPrevious = React.forwardRef<
173
- HTMLButtonElement,
174
- React.ComponentProps<typeof Button>
175
- >(({ className, variant = 'ghost', size = 'icon', ...props }, ref) => {
176
- const { orientation, scrollPrev, canScrollPrev } = useCarousel()
177
-
178
- return (
179
- <Button
180
- ref={ref}
181
- variant={variant}
182
- size={size}
183
- className={cn(
184
- 'absolute h-8 w-8 rounded-full',
185
- orientation === 'horizontal'
186
- ? '-left-12 top-1/2 -translate-y-1/2'
187
- : '-top-12 left-1/2 -translate-x-1/2 rotate-90',
188
- className
189
- )}
190
- disabled={!canScrollPrev}
191
- onClick={scrollPrev}
192
- {...props}
193
- >
194
- <ArrowLeft className='h-4 w-4' />
195
- <span className='sr-only'>Previous slide</span>
196
- </Button>
197
- )
198
- })
199
- CarouselPrevious.displayName = 'CarouselPrevious'
200
-
201
- const CarouselNext = React.forwardRef<
202
- HTMLButtonElement,
203
- React.ComponentProps<typeof Button>
204
- >(({ className, variant = 'ghost', size = 'icon', ...props }, ref) => {
205
- const { orientation, scrollNext, canScrollNext } = useCarousel()
206
-
207
- return (
208
- <Button
209
- ref={ref}
210
- variant={variant}
211
- size={size}
212
- className={cn(
213
- 'absolute h-8 w-8 rounded-full',
214
- orientation === 'horizontal'
215
- ? '-right-12 top-1/2 -translate-y-1/2'
216
- : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',
217
- className
218
- )}
219
- disabled={!canScrollNext}
220
- onClick={scrollNext}
221
- {...props}
222
- >
223
- <ArrowRight className='h-4 w-4' />
224
- <span className='sr-only'>Next slide</span>
225
- </Button>
226
- )
227
- })
228
- CarouselNext.displayName = 'CarouselNext'
229
-
230
- export {
231
- type CarouselApi,
232
- type CarouselOptions,
233
- Carousel,
234
- CarouselContent,
235
- CarouselItem,
236
- CarouselPrevious,
237
- CarouselNext,
238
- }
@@ -1,88 +0,0 @@
1
- // import { useTranslation } from '@hanzo_network/hanzo-i18n';
2
- const useTranslation = () => ({ t: (key) => key });
3
- import React from 'react';
4
-
5
- import { useCombinedRefs } from '../../src/hooks/use-combined-refs';
6
- import { cn } from '../../src/utils';
7
- import { ChatInput } from './chat-input';
8
-
9
- type ChatInputAreaProps = {
10
- value: string;
11
- onChange: (value: string) => void;
12
- onKeyDown?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;
13
- onPaste?: (e: React.ClipboardEvent<HTMLTextAreaElement>) => void;
14
- onSubmit: () => void;
15
- disabled?: boolean;
16
- autoFocus?: boolean;
17
- isLoading?: boolean;
18
- placeholder?: string;
19
- topAddons?: React.ReactNode;
20
- bottomAddons?: React.ReactNode;
21
- textareaClassName?: string;
22
- className?: string;
23
- alternateElement?: React.ReactNode;
24
- ref?: React.RefObject<HTMLTextAreaElement | null>;
25
- };
26
- export const ChatInputArea = ({
27
- value,
28
- onChange,
29
- onPaste,
30
- onKeyDown,
31
- autoFocus,
32
- onSubmit,
33
- disabled,
34
- isLoading,
35
- placeholder,
36
- topAddons,
37
- bottomAddons,
38
- textareaClassName,
39
- alternateElement,
40
- className,
41
- ref,
42
- }: ChatInputAreaProps) => {
43
- const { t } = useTranslation();
44
- const textareaRef = useCombinedRefs<HTMLTextAreaElement>(
45
- ref as React.RefObject<HTMLTextAreaElement>,
46
- );
47
-
48
- return (
49
- <div
50
- className={cn(
51
- 'bg-bg-secondary flex w-full max-w-full flex-col rounded-xl text-sm aria-disabled:cursor-not-allowed aria-disabled:opacity-50',
52
- 'shadow-border-input focus-within:shadow-border-input-focus overflow-hidden shadow-[0_0_0_1px_currentColor] transition-shadow',
53
- className,
54
- )}
55
- >
56
- {topAddons}
57
- <div
58
- aria-disabled={disabled}
59
- className="flex cursor-text flex-col aria-disabled:cursor-not-allowed"
60
- onClick={(e) => {
61
- if (e.target === e.currentTarget) {
62
- textareaRef?.current?.focus();
63
- }
64
- }}
65
- >
66
- {alternateElement ? (
67
- alternateElement
68
- ) : (
69
- <ChatInput
70
- autoFocus={autoFocus}
71
- className={textareaClassName}
72
- disabled={disabled || isLoading}
73
- onChange={(e) => onChange(e.target.value)}
74
- onKeyDown={onKeyDown}
75
- onPaste={onPaste}
76
- onSend={onSubmit}
77
- placeholder={placeholder ?? t('chat.sendMessagePlaceholder')}
78
- ref={textareaRef}
79
- value={value}
80
- />
81
- )}
82
- {bottomAddons}
83
- </div>
84
- </div>
85
- );
86
- };
87
-
88
- ChatInputArea.displayName = 'ChatInputArea';
@@ -1,71 +0,0 @@
1
- import React from 'react';
2
-
3
- import { cn } from '../../src/utils';
4
-
5
- export interface ChatInputProps
6
- extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {
7
- onSend?: () => void;
8
- ref: React.RefObject<HTMLTextAreaElement | null>;
9
- }
10
-
11
- export const useAutoResizeTextarea = (
12
- ref: React.RefObject<HTMLTextAreaElement | null>,
13
- value: string | number | readonly string[] | undefined,
14
- autoResize = true, //later to unify
15
- ) => {
16
- const textAreaRef = React.useRef<HTMLTextAreaElement>(null);
17
-
18
- React.useImperativeHandle(ref, () => textAreaRef.current!);
19
-
20
- React.useEffect(() => {
21
- const ref = textAreaRef?.current;
22
-
23
- const updateTextareaHeight = () => {
24
- if (ref && autoResize) {
25
- ref.style.height = 'auto';
26
- ref.style.height = ref?.scrollHeight + 'px';
27
- }
28
- };
29
-
30
- updateTextareaHeight();
31
-
32
- ref?.addEventListener('input', updateTextareaHeight);
33
- return () => ref?.removeEventListener('input', updateTextareaHeight);
34
- // eslint-disable-next-line react-hooks/exhaustive-deps
35
- }, [value]);
36
-
37
- return { textAreaRef };
38
- };
39
-
40
- const ChatInputBase = ({
41
- className,
42
- onSend,
43
- onKeyDown,
44
- ref,
45
- ...props
46
- }: ChatInputProps) => {
47
- const { textAreaRef } = useAutoResizeTextarea(ref, props.value);
48
-
49
- return (
50
- <textarea
51
- className={cn(
52
- 'placeholder:!text-text-placeholder flex max-h-[40vh] min-h-[80px] w-full resize-none overflow-y-auto border-none bg-transparent px-3 py-2 text-base leading-normal break-words focus:outline-hidden focus-visible:ring-0 focus-visible:outline-hidden disabled:cursor-not-allowed disabled:opacity-50',
53
- className,
54
- )}
55
- id="chat-input"
56
- onKeyDown={(event) => {
57
- onKeyDown?.(event);
58
- if (event.key === 'Enter' && !event.shiftKey) {
59
- event.preventDefault();
60
- onSend?.();
61
- }
62
- }}
63
- ref={textAreaRef}
64
- spellCheck={false}
65
- {...props}
66
- />
67
- );
68
- };
69
-
70
- ChatInputBase.displayName = 'ChatInput';
71
- export const ChatInput = React.memo(ChatInputBase);