@hanzo/ui 4.5.4 → 4.6.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 (156) hide show
  1. package/README-MCP.md +3 -3
  2. package/README.md +229 -0
  3. package/assets/ai-icons.tsx +207 -0
  4. package/assets/crypto.tsx +33 -0
  5. package/assets/file-type-icon.tsx +66 -0
  6. package/assets/file.tsx +45 -0
  7. package/assets/general.tsx +2318 -0
  8. package/assets/hanzo-logo.svg +9 -0
  9. package/assets/hanzo-logo.tsx +15 -0
  10. package/assets/index.ts +8 -0
  11. package/assets/index.tsx +4 -0
  12. package/assets/llm-provider.tsx +1094 -0
  13. package/bin/create-registry.js +1 -1
  14. package/bin/test-mcp.sh +1 -1
  15. package/bin/update-registry.js +2 -2
  16. package/blocks/components/content.tsx +1 -1
  17. package/blocks/components/grid-block/index.tsx +1 -1
  18. package/blocks/components/screenful-block/content.tsx +1 -1
  19. package/blocks/components/screenful-block/poster-background.tsx +1 -1
  20. package/components/index.ts +56 -0
  21. package/dist/button.d.ts +1 -0
  22. package/dist/button.js +1 -0
  23. package/dist/hooks/index.d.ts +7 -0
  24. package/dist/hooks/index.js +7 -0
  25. package/dist/hooks/use-click-away.d.ts +2 -0
  26. package/dist/hooks/use-click-away.js +23 -0
  27. package/dist/hooks/use-combined-refs.d.ts +3 -0
  28. package/dist/hooks/use-combined-refs.js +18 -0
  29. package/dist/hooks/use-copy-clipboard.d.ts +9 -0
  30. package/dist/hooks/use-copy-clipboard.js +21 -0
  31. package/dist/hooks/use-debounce.d.ts +1 -0
  32. package/dist/hooks/use-debounce.js +13 -0
  33. package/dist/hooks/use-fill-ids.d.ts +8 -0
  34. package/dist/hooks/use-fill-ids.js +20 -0
  35. package/dist/hooks/use-map.d.ts +1 -0
  36. package/dist/hooks/use-map.js +20 -0
  37. package/dist/hooks/use-measure.d.ts +8 -0
  38. package/dist/hooks/use-measure.js +25 -0
  39. package/dist/hooks/use-reverse-video-playback.d.ts +1 -0
  40. package/dist/hooks/use-reverse-video-playback.js +41 -0
  41. package/dist/hooks/use-scroll-restoration.d.ts +8 -0
  42. package/dist/hooks/use-scroll-restoration.js +36 -0
  43. package/dist/mcp/enhanced-server.js +2 -2
  44. package/dist/registry/api.d.ts +1 -1
  45. package/dist/registry/api.js +3 -3
  46. package/dist/registry/index.d.ts +48 -48
  47. package/dist/registry/index.js +3 -3
  48. package/dist/utils.d.ts +1 -0
  49. package/dist/utils.js +1 -0
  50. package/helpers/file.ts +33 -0
  51. package/helpers/memoization.ts +40 -0
  52. package/package.json +27 -6
  53. package/primitives/accordion.tsx +53 -45
  54. package/primitives/alert-dialog.tsx +185 -0
  55. package/primitives/alert.tsx +74 -0
  56. package/primitives/apply-typography.tsx +1 -1
  57. package/primitives/avatar.tsx +37 -29
  58. package/primitives/background-beams.tsx +142 -0
  59. package/primitives/badge.tsx +27 -19
  60. package/primitives/breadcrumb.tsx +77 -62
  61. package/primitives/button.tsx +69 -72
  62. package/primitives/card.tsx +73 -59
  63. package/primitives/chat/chat-input-area.tsx +87 -0
  64. package/primitives/chat/chat-input.tsx +71 -0
  65. package/primitives/chat/files-preview.tsx +330 -0
  66. package/primitives/chat/index.ts +6 -0
  67. package/primitives/chat/json-form.tsx +8 -0
  68. package/primitives/chat/message-list.tsx +307 -0
  69. package/primitives/chat/message.tsx +569 -0
  70. package/primitives/chat/sqlite-preview.tsx +215 -0
  71. package/primitives/checkbox.tsx +18 -19
  72. package/primitives/collapsible.tsx +9 -0
  73. package/primitives/command.tsx +75 -83
  74. package/primitives/context-menu.tsx +115 -109
  75. package/primitives/copy-to-clipboard-icon.tsx +60 -0
  76. package/primitives/dialog-video-controller.tsx +1 -1
  77. package/primitives/dialog.tsx +111 -145
  78. package/primitives/dot-pattern.tsx +57 -0
  79. package/primitives/dots-loader.tsx +13 -0
  80. package/primitives/drawer.tsx +59 -87
  81. package/primitives/dropdown-menu.tsx +199 -0
  82. package/primitives/error-message.tsx +19 -0
  83. package/primitives/file-uploader.tsx +200 -0
  84. package/primitives/form.tsx +92 -87
  85. package/primitives/hover-card.tsx +28 -0
  86. package/primitives/icons/github.tsx +1 -1
  87. package/primitives/icons/youtube-logo.tsx +1 -1
  88. package/primitives/index-common.ts +121 -42
  89. package/primitives/index-next.ts +3 -1
  90. package/primitives/input.tsx +115 -20
  91. package/primitives/label.tsx +15 -23
  92. package/primitives/loading-spinner.tsx +1 -1
  93. package/primitives/markdown-preview.tsx +609 -0
  94. package/primitives/mermaid.tsx +196 -0
  95. package/primitives/next/link-element.tsx +1 -1
  96. package/primitives/next/mdx-link.tsx +1 -1
  97. package/primitives/pagination.tsx +117 -0
  98. package/primitives/popover.tsx +20 -25
  99. package/primitives/pretty-json-print.tsx +28 -0
  100. package/primitives/progress.tsx +14 -15
  101. package/primitives/prompt-textarea.tsx +72 -0
  102. package/primitives/qr-code.tsx +112 -0
  103. package/primitives/radio-group.tsx +25 -39
  104. package/primitives/resizable.tsx +47 -0
  105. package/primitives/scroll-area.tsx +35 -25
  106. package/primitives/search-input.tsx +66 -0
  107. package/primitives/select.tsx +62 -109
  108. package/primitives/separator.tsx +22 -26
  109. package/primitives/sheet.tsx +78 -117
  110. package/primitives/skeleton.tsx +13 -16
  111. package/primitives/slider.tsx +50 -60
  112. package/primitives/stepper.tsx +272 -0
  113. package/primitives/switch.tsx +14 -23
  114. package/primitives/table.tsx +65 -77
  115. package/primitives/tabs.tsx +29 -39
  116. package/primitives/text-link.tsx +25 -0
  117. package/primitives/textarea.tsx +61 -0
  118. package/primitives/textfield.tsx +75 -0
  119. package/primitives/toast.tsx +30 -0
  120. package/primitives/toggle-group.tsx +33 -33
  121. package/primitives/toggle.tsx +22 -51
  122. package/primitives/tooltip.tsx +37 -38
  123. package/registry.json +1 -1
  124. package/src/button.ts +1 -0
  125. package/src/hooks/index.ts +7 -0
  126. package/src/hooks/use-click-away.ts +31 -0
  127. package/src/hooks/use-combined-refs.ts +22 -0
  128. package/src/hooks/use-copy-clipboard.ts +30 -0
  129. package/src/hooks/use-debounce.ts +17 -0
  130. package/src/hooks/use-fill-ids.ts +25 -0
  131. package/src/hooks/use-map.ts +26 -0
  132. package/src/hooks/use-measure.ts +42 -0
  133. package/src/hooks/use-reverse-video-playback.ts +43 -0
  134. package/src/hooks/use-scroll-restoration.ts +50 -0
  135. package/src/mcp/README.md +1 -1
  136. package/src/mcp/enhanced-server.ts +2 -2
  137. package/src/registry/api.ts +3 -3
  138. package/src/registry/index.ts +3 -3
  139. package/src/utils.ts +1 -0
  140. package/style/theme-provider.tsx +1 -1
  141. package/test-imports.mjs +19 -0
  142. package/types/animation-def.ts +1 -1
  143. package/types/button-def.ts +1 -1
  144. package/types/index.ts +1 -1
  145. package/util/blob.ts +28 -0
  146. package/util/copy-to-clipboard.ts +17 -0
  147. package/util/create-shadow-root.ts +22 -0
  148. package/util/date.ts +83 -0
  149. package/util/debounce.ts +11 -0
  150. package/util/file.ts +15 -0
  151. package/util/format-and-abbreviate-as-currency.ts +1 -1
  152. package/util/format-text.ts +33 -0
  153. package/util/index.ts +9 -78
  154. package/util/timing.ts +3 -0
  155. package/util/toasts.tsx +17 -0
  156. package/utils.ts +9 -0
@@ -1,8 +1,6 @@
1
- 'use client'
2
- import * as React from "react"
3
- import * as LabelPrimitive from "@radix-ui/react-label"
4
- import { Slot } from "@radix-ui/react-slot"
5
-
1
+ import type * as LabelPrimitive from '@radix-ui/react-label';
2
+ import { Slot } from '@radix-ui/react-slot';
3
+ import * as React from 'react';
6
4
  import {
7
5
  Controller,
8
6
  type ControllerProps,
@@ -10,27 +8,27 @@ import {
10
8
  type FieldValues,
11
9
  FormProvider,
12
10
  useFormContext,
13
- } from "react-hook-form"
11
+ } from 'react-hook-form';
14
12
 
15
- import { cn } from "../util"
16
- import Label from "./label"
13
+ import { cn } from '../src/utils';
14
+ import { Label } from './label';
17
15
 
18
- const Form = FormProvider
16
+ const Form = FormProvider;
19
17
 
20
18
  type FormFieldContextValue<
21
19
  TFieldValues extends FieldValues = FieldValues,
22
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>
20
+ TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
23
21
  > = {
24
- name: TName
25
- }
22
+ name: TName;
23
+ };
26
24
 
27
25
  const FormFieldContext = React.createContext<FormFieldContextValue>(
28
- {} as FormFieldContextValue
29
- )
26
+ {} as FormFieldContextValue,
27
+ );
30
28
 
31
29
  const FormField = <
32
30
  TFieldValues extends FieldValues = FieldValues,
33
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>
31
+ TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
34
32
  >({
35
33
  ...props
36
34
  }: ControllerProps<TFieldValues, TName>) => {
@@ -38,21 +36,21 @@ const FormField = <
38
36
  <FormFieldContext.Provider value={{ name: props.name }}>
39
37
  <Controller {...props} />
40
38
  </FormFieldContext.Provider>
41
- )
42
- }
39
+ );
40
+ };
43
41
 
44
42
  const useFormField = () => {
45
- const fieldContext = React.useContext(FormFieldContext)
46
- const itemContext = React.useContext(FormItemContext)
47
- const { getFieldState, formState } = useFormContext()
43
+ const fieldContext = React.useContext(FormFieldContext);
44
+ const itemContext = React.useContext(FormItemContext);
45
+ const { getFieldState, formState } = useFormContext();
48
46
 
49
- const fieldState = getFieldState(fieldContext.name, formState)
47
+ const fieldState = getFieldState(fieldContext.name, formState);
50
48
 
51
49
  if (!fieldContext) {
52
- throw new Error("useFormField should be used within <FormField>")
50
+ throw new Error('useFormField should be used within <FormField>');
53
51
  }
54
52
 
55
- const { id } = itemContext
53
+ const { id } = itemContext;
56
54
 
57
55
  return {
58
56
  id,
@@ -61,110 +59,117 @@ const useFormField = () => {
61
59
  formDescriptionId: `${id}-form-item-description`,
62
60
  formMessageId: `${id}-form-item-message`,
63
61
  ...fieldState,
64
- }
65
- }
62
+ };
63
+ };
66
64
 
67
65
  type FormItemContextValue = {
68
- id: string
69
- }
66
+ id: string;
67
+ };
70
68
 
71
69
  const FormItemContext = React.createContext<FormItemContextValue>(
72
- {} as FormItemContextValue
73
- )
70
+ {} as FormItemContextValue,
71
+ );
74
72
 
75
- const FormItem = React.forwardRef<
76
- HTMLDivElement,
77
- React.HTMLAttributes<HTMLDivElement>
78
- >(({ className, ...props }, ref) => {
79
- const id = React.useId()
73
+ const FormItem = ({
74
+ className,
75
+ ...props
76
+ }: React.HTMLAttributes<HTMLDivElement>) => {
77
+ const id = React.useId();
80
78
 
81
79
  return (
82
80
  <FormItemContext.Provider value={{ id }}>
83
- <div ref={ref} className={cn("space-y-2", className)} {...props} />
81
+ <div className={cn('relative', className)} {...props} />
84
82
  </FormItemContext.Provider>
85
- )
86
- })
87
- FormItem.displayName = "FormItem"
83
+ );
84
+ };
85
+ FormItem.displayName = 'FormItem';
88
86
 
89
- const FormLabel = React.forwardRef<
90
- React.ElementRef<typeof LabelPrimitive.Root>,
91
- React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>
92
- >(({ className, ...props }, ref) => {
93
- const { error, formItemId } = useFormField()
87
+ const FormLabel = ({
88
+ className,
89
+ ...props
90
+ }: React.ComponentProps<typeof LabelPrimitive.Root>) => {
91
+ const { error, formItemId } = useFormField();
94
92
 
95
93
  return (
96
94
  <Label
97
- ref={ref}
98
- className={cn(error && "text-destructive", className)}
95
+ className={cn(
96
+ 'text-text-secondary pointer-events-none absolute top-3 left-4 flex text-xs leading-tight font-medium transition-all select-none',
97
+ // input
98
+ 'peer-placeholder-shown:text-text-tertiary z-[1] peer-placeholder-shown:text-base peer-placeholder-shown:leading-[2.3]',
99
+ 'peer-focus:text-text-secondary peer-disabled:peer-placeholder-shown:text-text-tertiary peer-disabled:text-text-tertiary peer-focus:text-xs peer-focus:leading-tight',
100
+ // select
101
+ 'peer-data-[placeholder]/select:top-5 peer-data-[placeholder]/select:text-base',
102
+ // adornment
103
+ 'peer-[.adornment]/adornment:text-xs',
104
+ error && 'text-red-500',
105
+ className,
106
+ )}
99
107
  htmlFor={formItemId}
100
108
  {...props}
101
109
  />
102
- )
103
- })
104
- FormLabel.displayName = "FormLabel"
110
+ );
111
+ };
112
+ FormLabel.displayName = 'FormLabel';
105
113
 
106
- const FormControl = React.forwardRef<
107
- React.ElementRef<typeof Slot>,
108
- React.ComponentPropsWithoutRef<typeof Slot>
109
- >(({ ...props }, ref) => {
110
- const { error, formItemId, formDescriptionId, formMessageId } = useFormField()
114
+ const FormControl = ({ ...props }: React.ComponentProps<typeof Slot>) => {
115
+ const { error, formItemId, formDescriptionId, formMessageId } =
116
+ useFormField();
111
117
 
112
118
  return (
113
119
  <Slot
114
- ref={ref}
115
- id={formItemId}
116
120
  aria-describedby={
117
- !error
118
- ? `${formDescriptionId}`
119
- : `${formDescriptionId} ${formMessageId}`
121
+ error ? `${formDescriptionId} ${formMessageId}` : `${formDescriptionId}`
120
122
  }
121
123
  aria-invalid={!!error}
124
+ id={formItemId}
122
125
  {...props}
123
126
  />
124
- )
125
- })
126
- FormControl.displayName = "FormControl"
127
+ );
128
+ };
129
+ FormControl.displayName = 'FormControl';
127
130
 
128
- const FormDescription = React.forwardRef<
129
- HTMLParagraphElement,
130
- React.HTMLAttributes<HTMLParagraphElement>
131
- >(({ className, ...props }, ref) => {
132
- const { formDescriptionId } = useFormField()
131
+ const FormDescription = ({
132
+ className,
133
+ ...props
134
+ }: React.HTMLAttributes<HTMLParagraphElement>) => {
135
+ const { formDescriptionId } = useFormField();
133
136
 
134
137
  return (
135
138
  <p
136
- ref={ref}
139
+ className={cn('text-text-secondary py-1 text-[0.75rem]', className)}
137
140
  id={formDescriptionId}
138
- className={cn("text-sm text-muted-1", className)}
139
141
  {...props}
140
142
  />
141
- )
142
- })
143
- FormDescription.displayName = "FormDescription"
143
+ );
144
+ };
145
+ FormDescription.displayName = 'FormDescription';
144
146
 
145
- const FormMessage = React.forwardRef<
146
- HTMLParagraphElement,
147
- React.HTMLAttributes<HTMLParagraphElement>
148
- >(({ className, children, ...props }, ref) => {
149
- const { error, formMessageId } = useFormField()
150
- const body = error ? String(error?.message) : children
147
+ const FormMessage = ({
148
+ className,
149
+ children,
150
+ ...props
151
+ }: React.HTMLAttributes<HTMLParagraphElement>) => {
152
+ const { error, formMessageId } = useFormField();
153
+ const body = error ? String(error?.message) : children;
151
154
 
152
- const classes = 'text-xs font-medium py-1 ' +
153
- (error ? 'text-destructive' : 'text-muted-1') +
154
- (body ? '' : ' invisible') // Hold space in the layout
155
+ if (!body) {
156
+ return null;
157
+ }
155
158
 
156
159
  return (
157
160
  <p
158
- ref={ref}
161
+ className={cn(
162
+ 'text-red text-[0.75rem] font-medium dark:text-red-900',
163
+ className,
164
+ )}
159
165
  id={formMessageId}
160
- className={cn(classes, className)}
161
166
  {...props}
162
167
  >
163
- {body ? body : 'dummy'}
168
+ {body}
164
169
  </p>
165
- )
166
- })
167
- FormMessage.displayName = "FormMessage"
170
+ );
171
+ };
172
+ FormMessage.displayName = 'FormMessage';
168
173
 
169
174
  export {
170
175
  useFormField,
@@ -175,4 +180,4 @@ export {
175
180
  FormDescription,
176
181
  FormMessage,
177
182
  FormField,
178
- }
183
+ };
@@ -0,0 +1,28 @@
1
+ import * as HoverCardPrimitive from '@radix-ui/react-hover-card';
2
+ import * as React from 'react';
3
+
4
+ import { cn } from '../src/utils';
5
+
6
+ const HoverCard = HoverCardPrimitive.Root;
7
+
8
+ const HoverCardTrigger = HoverCardPrimitive.Trigger;
9
+
10
+ const HoverCardContent = ({
11
+ className,
12
+ align = 'center',
13
+ sideOffset = 4,
14
+ ...props
15
+ }: React.ComponentProps<typeof HoverCardPrimitive.Content>) => (
16
+ <HoverCardPrimitive.Content
17
+ align={align}
18
+ className={cn(
19
+ '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 bg-bg-dark border-divider z-[1500000000] flex flex-col gap-3 rounded-md border pt-1 shadow-none outline-hidden data-[side=top]:flex-col-reverse',
20
+ className,
21
+ )}
22
+ sideOffset={sideOffset}
23
+ {...props}
24
+ />
25
+ );
26
+ HoverCardContent.displayName = HoverCardPrimitive.Content.displayName;
27
+
28
+ export { HoverCard, HoverCardTrigger, HoverCardContent };
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import { type LucideProps } from 'lucide-react'
2
+ import type { LucideProps } from 'lucide-react'
3
3
 
4
4
 
5
5
  const GitHub: React.FC<LucideProps> = (props: LucideProps) => (
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import { type LucideProps } from 'lucide-react'
2
+ import { LucideProps } from 'lucide-react'
3
3
 
4
4
  const YouTubeLogo: React.FC<LucideProps> = (props: LucideProps) => (
5
5
  <svg
@@ -1,14 +1,32 @@
1
- export {
2
- Accordion,
3
- AccordionItem,
4
- AccordionTrigger,
5
- AccordionContent
1
+ export {
2
+ Accordion,
3
+ AccordionItem,
4
+ AccordionTrigger,
5
+ AccordionContent
6
6
  } from './accordion'
7
7
 
8
- export {
9
- Avatar,
10
- AvatarImage,
11
- AvatarFallback
8
+ export {
9
+ AlertDialog,
10
+ AlertDialogTrigger,
11
+ AlertDialogContent,
12
+ AlertDialogHeader,
13
+ AlertDialogTitle,
14
+ AlertDialogDescription,
15
+ AlertDialogFooter,
16
+ AlertDialogAction,
17
+ AlertDialogCancel,
18
+ } from './alert-dialog'
19
+
20
+ export {
21
+ Alert,
22
+ AlertTitle,
23
+ AlertDescription
24
+ } from './alert'
25
+
26
+ export {
27
+ Avatar,
28
+ AvatarImage,
29
+ AvatarFallback
12
30
  } from './avatar'
13
31
 
14
32
  export {
@@ -27,13 +45,13 @@ export {
27
45
  buttonVariants,
28
46
  } from './button'
29
47
 
30
- export {
31
- Card,
32
- CardHeader,
33
- CardFooter,
34
- CardTitle,
35
- CardDescription,
36
- CardContent
48
+ export {
49
+ Card,
50
+ CardHeader,
51
+ CardFooter,
52
+ CardTitle,
53
+ CardDescription,
54
+ CardContent
37
55
  } from './card'
38
56
 
39
57
  export {
@@ -58,6 +76,11 @@ export {
58
76
  CommandSeparator,
59
77
  } from './command'
60
78
 
79
+ export {
80
+ Collapsible,
81
+ CollapsibleTrigger,
82
+ CollapsibleContent,
83
+ } from './collapsible'
61
84
 
62
85
  export {
63
86
  ContextMenu,
@@ -77,7 +100,6 @@ export {
77
100
  ContextMenuRadioGroup,
78
101
  } from './context-menu'
79
102
 
80
-
81
103
  export {
82
104
  type DrawerProps,
83
105
  Drawer,
@@ -106,6 +128,24 @@ export {
106
128
  DialogDescription,
107
129
  } from './dialog'
108
130
 
131
+ export {
132
+ DropdownMenu,
133
+ DropdownMenuTrigger,
134
+ DropdownMenuContent,
135
+ DropdownMenuItem,
136
+ DropdownMenuCheckboxItem,
137
+ DropdownMenuRadioItem,
138
+ DropdownMenuLabel,
139
+ DropdownMenuSeparator,
140
+ DropdownMenuShortcut,
141
+ DropdownMenuGroup,
142
+ DropdownMenuPortal,
143
+ DropdownMenuSub,
144
+ DropdownMenuSubContent,
145
+ DropdownMenuSubTrigger,
146
+ DropdownMenuRadioGroup,
147
+ } from './dropdown-menu'
148
+
109
149
  export {
110
150
  useFormField,
111
151
  Form,
@@ -117,7 +157,13 @@ export {
117
157
  FormField,
118
158
  } from './form'
119
159
 
120
- export {
160
+ export {
161
+ HoverCard,
162
+ HoverCardTrigger,
163
+ HoverCardContent,
164
+ } from './hover-card'
165
+
166
+ export {
121
167
  InputOTP,
122
168
  InputOTPGroup,
123
169
  InputOTPSeparator,
@@ -136,15 +182,21 @@ export {
136
182
  NavigationMenuViewport,
137
183
  } from './navigation-menu'
138
184
 
139
- export {
140
- Popover,
141
- PopoverAnchor,
142
- PopoverArrow,
143
- PopoverClose,
144
- PopoverContent,
145
- PopoverTrigger,
185
+ export {
186
+ Popover,
187
+ PopoverAnchor,
188
+ PopoverArrow,
189
+ PopoverClose,
190
+ PopoverContent,
191
+ PopoverTrigger,
146
192
  } from './popover'
147
193
 
194
+ export {
195
+ ResizablePanelGroup,
196
+ ResizablePanel,
197
+ ResizableHandle,
198
+ } from './resizable'
199
+
148
200
  export {
149
201
  Select,
150
202
  SelectGroup,
@@ -182,43 +234,70 @@ export {
182
234
  TableCaption,
183
235
  } from './table'
184
236
 
185
- export {
186
- Tabs,
187
- TabsList,
188
- TabsTrigger,
189
- TabsContent
237
+ export {
238
+ Tabs,
239
+ TabsList,
240
+ TabsTrigger,
241
+ TabsContent
190
242
  } from './tabs'
191
243
 
192
- export * from './tooltip'
244
+ export * from './tooltip'
193
245
 
194
246
  export { default as ActionButton } from './action-button'
195
247
  export { default as ApplyTypography, type TypographySize} from './apply-typography'
196
248
  export { default as AspectRatio } from './aspect-ratio'
197
249
  export { default as Badge } from './badge'
198
250
  export { default as BreakpointIndicator } from './breakpoint-indicator'
199
- export { default as Calendar } from './calendar'
200
- export { default as Checkbox } from './checkbox'
201
- export { default as Combobox, type ComboboxTriggerProps } from './combobox'
251
+ export { default as Calendar } from './calendar'
252
+ export { default as Checkbox } from './checkbox'
253
+ export { default as Combobox, type ComboboxTriggerProps } from './combobox'
202
254
  export { default as DialogVideoController } from './dialog-video-controller'
203
255
  export { default as Input } from './input'
204
256
  export { default as Label } from './label'
205
257
  export type { default as ListAdaptor } from './list-adaptor'
206
258
  export { default as ListBox } from './list-box'
207
259
  export { default as LoadingSpinner } from './loading-spinner'
208
- export { default as Progress } from './progress'
260
+ export { default as Progress } from './progress'
209
261
  export { RadioGroup, RadioGroupItem } from './radio-group'
210
- export { ScrollArea, ScrollBar } from './scroll-area'
211
- export { default as Separator } from './separator'
212
- export { default as Slider } from './slider'
213
- export { default as Skeleton } from './skeleton'
262
+ export { ScrollArea, ScrollBar } from './scroll-area'
263
+ export { SearchInput } from './search-input'
264
+ export { default as Separator } from './separator'
265
+ export { default as Slider } from './slider'
266
+ export { default as Skeleton } from './skeleton'
214
267
  export { default as StepIndicator } from './step-indicator'
215
- export { default as Switch } from './switch'
216
- export { default as TextArea } from './text-area'
268
+ export { default as Switch } from './switch'
269
+ export { default as TextArea } from './textarea'
270
+ export { default as TextField } from './textfield'
217
271
  export { Toaster, toast } from './sonner'
218
272
  export { Toggle, toggleVariants } from './toggle'
219
273
  export { ToggleGroup, ToggleGroupItem } from './toggle-group'
220
274
  export { default as VideoPlayer } from './video-player'
221
275
 
222
- export * as Icons from './icons'
276
+ // Chat components
277
+ export { ChatInput } from './chat/chat-input'
278
+ export { ChatInputArea } from './chat/chat-input-area'
279
+ export { FileList } from './chat/files-preview'
280
+
281
+ // Additional components
282
+ export { CopyToClipboardIcon } from './copy-to-clipboard-icon'
283
+ export { DotsLoader } from './dots-loader'
284
+ export { FileUploader } from './file-uploader'
285
+ export { default as JsonForm } from './chat/json-form'
286
+ export { MarkdownText, MarkdownPreview } from './markdown-preview'
287
+ export { PrettyJsonPrint } from './pretty-json-print'
223
288
 
289
+ // Re-export Tooltip components individually
290
+ export {
291
+ TooltipProvider,
292
+ Tooltip,
293
+ TooltipTrigger,
294
+ TooltipContent,
295
+ TooltipArrow,
296
+ TooltipPortal,
297
+ } from './tooltip'
298
+
299
+ // Export icons
300
+ export * as Icons from './icons'
224
301
 
302
+ // Re-export assets for compatibility
303
+ export * from '../assets'
@@ -1,2 +1,4 @@
1
+ // Re-export everything from common primitives and Next.js specific components
2
+ // Note: Using comment to avoid Turbopack issues with relative imports in symlinked packages
1
3
  export * from './index-common'
2
- export * from './next'
4
+ export * from './next/index'