@agentuity/workbench 0.0.87 → 0.0.89

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 (258) hide show
  1. package/dist/components/App.d.ts.map +1 -1
  2. package/dist/components/App.js +18 -2
  3. package/dist/components/App.js.map +1 -1
  4. package/dist/components/ai-elements/code-block.d.ts +3 -3
  5. package/dist/components/ai-elements/code-block.d.ts.map +1 -1
  6. package/dist/components/ai-elements/code-block.js +29 -7
  7. package/dist/components/ai-elements/code-block.js.map +1 -1
  8. package/dist/components/internal/Chat.d.ts +3 -2
  9. package/dist/components/internal/Chat.d.ts.map +1 -1
  10. package/dist/components/internal/Chat.js +23 -24
  11. package/dist/components/internal/Chat.js.map +1 -1
  12. package/dist/components/internal/MonacoJsonEditor.d.ts.map +1 -1
  13. package/dist/components/internal/MonacoJsonEditor.js +10 -53
  14. package/dist/components/internal/MonacoJsonEditor.js.map +1 -1
  15. package/dist/components/internal/Schema.d.ts +1 -2
  16. package/dist/components/internal/Schema.d.ts.map +1 -1
  17. package/dist/components/internal/Schema.js +2 -3
  18. package/dist/components/internal/Schema.js.map +1 -1
  19. package/dist/components/ui/button.d.ts +1 -1
  20. package/dist/components/ui/input.d.ts.map +1 -1
  21. package/dist/components/ui/input.js +1 -1
  22. package/dist/components/ui/input.js.map +1 -1
  23. package/dist/index.d.ts +3 -5
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +4 -6
  26. package/dist/index.js.map +1 -1
  27. package/dist/{styles.css → standalone.css} +207 -1537
  28. package/package.json +29 -29
  29. package/src/{styles.css → base.css} +36 -52
  30. package/src/components/App.tsx +41 -5
  31. package/src/components/ai-elements/code-block.tsx +42 -10
  32. package/src/components/internal/Chat.tsx +112 -120
  33. package/src/components/internal/MonacoJsonEditor.tsx +15 -63
  34. package/src/components/internal/Schema.tsx +74 -86
  35. package/src/components/ui/input.tsx +2 -3
  36. package/src/index.ts +5 -14
  37. package/src/integration.css +15 -0
  38. package/src/standalone.css +25 -0
  39. package/dist/components/ConnectionStatus.d.ts +0 -7
  40. package/dist/components/ConnectionStatus.d.ts.map +0 -1
  41. package/dist/components/ConnectionStatus.js +0 -52
  42. package/dist/components/ConnectionStatus.js.map +0 -1
  43. package/dist/components/Inline.d.ts +0 -10
  44. package/dist/components/Inline.d.ts.map +0 -1
  45. package/dist/components/Inline.js +0 -11
  46. package/dist/components/Inline.js.map +0 -1
  47. package/dist/components/ai-elements/artifact.d.ts +0 -24
  48. package/dist/components/ai-elements/artifact.d.ts.map +0 -1
  49. package/dist/components/ai-elements/artifact.js +0 -21
  50. package/dist/components/ai-elements/artifact.js.map +0 -1
  51. package/dist/components/ai-elements/branch.d.ts +0 -21
  52. package/dist/components/ai-elements/branch.d.ts.map +0 -1
  53. package/dist/components/ai-elements/branch.js +0 -71
  54. package/dist/components/ai-elements/branch.js.map +0 -1
  55. package/dist/components/ai-elements/canvas.d.ts +0 -9
  56. package/dist/components/ai-elements/canvas.d.ts.map +0 -1
  57. package/dist/components/ai-elements/canvas.js +0 -6
  58. package/dist/components/ai-elements/canvas.js.map +0 -1
  59. package/dist/components/ai-elements/chain-of-thought.d.ts +0 -30
  60. package/dist/components/ai-elements/chain-of-thought.d.ts.map +0 -1
  61. package/dist/components/ai-elements/chain-of-thought.js +0 -52
  62. package/dist/components/ai-elements/chain-of-thought.js.map +0 -1
  63. package/dist/components/ai-elements/confirmation.d.ts +0 -27
  64. package/dist/components/ai-elements/confirmation.d.ts.map +0 -1
  65. package/dist/components/ai-elements/confirmation.js +0 -57
  66. package/dist/components/ai-elements/confirmation.js.map +0 -1
  67. package/dist/components/ai-elements/connection.d.ts +0 -3
  68. package/dist/components/ai-elements/connection.d.ts.map +0 -1
  69. package/dist/components/ai-elements/connection.js +0 -4
  70. package/dist/components/ai-elements/connection.js.map +0 -1
  71. package/dist/components/ai-elements/context.d.ts +0 -33
  72. package/dist/components/ai-elements/context.d.ts.map +0 -1
  73. package/dist/components/ai-elements/context.js +0 -167
  74. package/dist/components/ai-elements/context.js.map +0 -1
  75. package/dist/components/ai-elements/controls.d.ts +0 -5
  76. package/dist/components/ai-elements/controls.d.ts.map +0 -1
  77. package/dist/components/ai-elements/controls.js +0 -6
  78. package/dist/components/ai-elements/controls.js.map +0 -1
  79. package/dist/components/ai-elements/edge.d.ts +0 -6
  80. package/dist/components/ai-elements/edge.d.ts.map +0 -1
  81. package/dist/components/ai-elements/edge.js +0 -83
  82. package/dist/components/ai-elements/edge.js.map +0 -1
  83. package/dist/components/ai-elements/image.d.ts +0 -7
  84. package/dist/components/ai-elements/image.d.ts.map +0 -1
  85. package/dist/components/ai-elements/image.js +0 -4
  86. package/dist/components/ai-elements/image.js.map +0 -1
  87. package/dist/components/ai-elements/inline-citation.d.ts +0 -39
  88. package/dist/components/ai-elements/inline-citation.d.ts.map +0 -1
  89. package/dist/components/ai-elements/inline-citation.js +0 -62
  90. package/dist/components/ai-elements/inline-citation.js.map +0 -1
  91. package/dist/components/ai-elements/loader.d.ts +0 -6
  92. package/dist/components/ai-elements/loader.d.ts.map +0 -1
  93. package/dist/components/ai-elements/loader.js +0 -5
  94. package/dist/components/ai-elements/loader.js.map +0 -1
  95. package/dist/components/ai-elements/node.d.ts +0 -22
  96. package/dist/components/ai-elements/node.d.ts.map +0 -1
  97. package/dist/components/ai-elements/node.js +0 -12
  98. package/dist/components/ai-elements/node.js.map +0 -1
  99. package/dist/components/ai-elements/open-in-chat.d.ts +0 -29
  100. package/dist/components/ai-elements/open-in-chat.d.ts.map +0 -1
  101. package/dist/components/ai-elements/open-in-chat.js +0 -97
  102. package/dist/components/ai-elements/open-in-chat.js.map +0 -1
  103. package/dist/components/ai-elements/panel.d.ts +0 -6
  104. package/dist/components/ai-elements/panel.d.ts.map +0 -1
  105. package/dist/components/ai-elements/panel.js +0 -5
  106. package/dist/components/ai-elements/panel.js.map +0 -1
  107. package/dist/components/ai-elements/plan.d.ts +0 -26
  108. package/dist/components/ai-elements/plan.d.ts.map +0 -1
  109. package/dist/components/ai-elements/plan.js +0 -32
  110. package/dist/components/ai-elements/plan.js.map +0 -1
  111. package/dist/components/ai-elements/queue.d.ts +0 -62
  112. package/dist/components/ai-elements/queue.d.ts.map +0 -1
  113. package/dist/components/ai-elements/queue.js +0 -25
  114. package/dist/components/ai-elements/queue.js.map +0 -1
  115. package/dist/components/ai-elements/reasoning.d.ts +0 -17
  116. package/dist/components/ai-elements/reasoning.d.ts.map +0 -1
  117. package/dist/components/ai-elements/reasoning.js +0 -77
  118. package/dist/components/ai-elements/reasoning.js.map +0 -1
  119. package/dist/components/ai-elements/response.d.ts +0 -6
  120. package/dist/components/ai-elements/response.d.ts.map +0 -1
  121. package/dist/components/ai-elements/response.js +0 -8
  122. package/dist/components/ai-elements/response.js.map +0 -1
  123. package/dist/components/ai-elements/sources.d.ts +0 -13
  124. package/dist/components/ai-elements/sources.d.ts.map +0 -1
  125. package/dist/components/ai-elements/sources.js +0 -10
  126. package/dist/components/ai-elements/sources.js.map +0 -1
  127. package/dist/components/ai-elements/suggestion.d.ts +0 -11
  128. package/dist/components/ai-elements/suggestion.d.ts.map +0 -1
  129. package/dist/components/ai-elements/suggestion.js +0 -13
  130. package/dist/components/ai-elements/suggestion.js.map +0 -1
  131. package/dist/components/ai-elements/task.d.ts +0 -15
  132. package/dist/components/ai-elements/task.d.ts.map +0 -1
  133. package/dist/components/ai-elements/task.js +0 -11
  134. package/dist/components/ai-elements/task.js.map +0 -1
  135. package/dist/components/ai-elements/tool.d.ts +0 -24
  136. package/dist/components/ai-elements/tool.d.ts.map +0 -1
  137. package/dist/components/ai-elements/tool.js +0 -47
  138. package/dist/components/ai-elements/tool.js.map +0 -1
  139. package/dist/components/ai-elements/toolbar.d.ts +0 -6
  140. package/dist/components/ai-elements/toolbar.d.ts.map +0 -1
  141. package/dist/components/ai-elements/toolbar.js +0 -5
  142. package/dist/components/ai-elements/toolbar.js.map +0 -1
  143. package/dist/components/ai-elements/web-preview.d.ts +0 -35
  144. package/dist/components/ai-elements/web-preview.d.ts.map +0 -1
  145. package/dist/components/ai-elements/web-preview.js +0 -63
  146. package/dist/components/ai-elements/web-preview.js.map +0 -1
  147. package/dist/components/ui/alert.d.ts +0 -10
  148. package/dist/components/ui/alert.d.ts.map +0 -1
  149. package/dist/components/ui/alert.js +0 -25
  150. package/dist/components/ui/alert.js.map +0 -1
  151. package/dist/components/ui/badge.d.ts +0 -10
  152. package/dist/components/ui/badge.d.ts.map +0 -1
  153. package/dist/components/ui/badge.js +0 -23
  154. package/dist/components/ui/badge.js.map +0 -1
  155. package/dist/components/ui/card.d.ts +0 -10
  156. package/dist/components/ui/card.d.ts.map +0 -1
  157. package/dist/components/ui/card.js +0 -25
  158. package/dist/components/ui/card.js.map +0 -1
  159. package/dist/components/ui/carousel.d.ts +0 -20
  160. package/dist/components/ui/carousel.d.ts.map +0 -1
  161. package/dist/components/ui/carousel.js +0 -92
  162. package/dist/components/ui/carousel.js.map +0 -1
  163. package/dist/components/ui/checkbox.d.ts +0 -5
  164. package/dist/components/ui/checkbox.d.ts.map +0 -1
  165. package/dist/components/ui/checkbox.js +0 -9
  166. package/dist/components/ui/checkbox.js.map +0 -1
  167. package/dist/components/ui/collapsible.d.ts +0 -6
  168. package/dist/components/ui/collapsible.d.ts.map +0 -1
  169. package/dist/components/ui/collapsible.js +0 -14
  170. package/dist/components/ui/collapsible.js.map +0 -1
  171. package/dist/components/ui/field.d.ts +0 -25
  172. package/dist/components/ui/field.d.ts.map +0 -1
  173. package/dist/components/ui/field.js +0 -74
  174. package/dist/components/ui/field.js.map +0 -1
  175. package/dist/components/ui/form.d.ts +0 -25
  176. package/dist/components/ui/form.d.ts.map +0 -1
  177. package/dist/components/ui/form.js +0 -58
  178. package/dist/components/ui/form.js.map +0 -1
  179. package/dist/components/ui/label.d.ts +0 -5
  180. package/dist/components/ui/label.d.ts.map +0 -1
  181. package/dist/components/ui/label.js +0 -9
  182. package/dist/components/ui/label.js.map +0 -1
  183. package/dist/components/ui/progress.d.ts +0 -5
  184. package/dist/components/ui/progress.d.ts.map +0 -1
  185. package/dist/components/ui/progress.js +0 -9
  186. package/dist/components/ui/progress.js.map +0 -1
  187. package/dist/components/ui/separator.d.ts +0 -5
  188. package/dist/components/ui/separator.d.ts.map +0 -1
  189. package/dist/components/ui/separator.js +0 -9
  190. package/dist/components/ui/separator.js.map +0 -1
  191. package/dist/components/ui/switch.d.ts +0 -5
  192. package/dist/components/ui/switch.d.ts.map +0 -1
  193. package/dist/components/ui/switch.js +0 -8
  194. package/dist/components/ui/switch.js.map +0 -1
  195. package/dist/components/ui/tabs.d.ts +0 -8
  196. package/dist/components/ui/tabs.d.ts.map +0 -1
  197. package/dist/components/ui/tabs.js +0 -17
  198. package/dist/components/ui/tabs.js.map +0 -1
  199. package/dist/components/ui/toggle.d.ts +0 -10
  200. package/dist/components/ui/toggle.d.ts.map +0 -1
  201. package/dist/components/ui/toggle.js +0 -26
  202. package/dist/components/ui/toggle.js.map +0 -1
  203. package/dist/components.d.ts +0 -12
  204. package/dist/components.d.ts.map +0 -1
  205. package/dist/components.js +0 -13
  206. package/dist/components.js.map +0 -1
  207. package/dist/hooks/index.d.ts +0 -7
  208. package/dist/hooks/index.d.ts.map +0 -1
  209. package/dist/hooks/index.js +0 -5
  210. package/dist/hooks/index.js.map +0 -1
  211. package/dist/hooks/useWorkbenchSchemas.d.ts +0 -56
  212. package/dist/hooks/useWorkbenchSchemas.d.ts.map +0 -1
  213. package/dist/hooks/useWorkbenchSchemas.js +0 -63
  214. package/dist/hooks/useWorkbenchSchemas.js.map +0 -1
  215. package/src/components/ConnectionStatus.tsx +0 -67
  216. package/src/components/Inline.tsx +0 -16
  217. package/src/components/ai-elements/artifact.tsx +0 -118
  218. package/src/components/ai-elements/branch.tsx +0 -187
  219. package/src/components/ai-elements/canvas.tsx +0 -24
  220. package/src/components/ai-elements/chain-of-thought.tsx +0 -198
  221. package/src/components/ai-elements/confirmation.tsx +0 -119
  222. package/src/components/ai-elements/connection.tsx +0 -16
  223. package/src/components/ai-elements/context.tsx +0 -357
  224. package/src/components/ai-elements/controls.tsx +0 -18
  225. package/src/components/ai-elements/edge.tsx +0 -131
  226. package/src/components/ai-elements/image.tsx +0 -16
  227. package/src/components/ai-elements/inline-citation.tsx +0 -246
  228. package/src/components/ai-elements/loader.tsx +0 -88
  229. package/src/components/ai-elements/node.tsx +0 -66
  230. package/src/components/ai-elements/open-in-chat.tsx +0 -333
  231. package/src/components/ai-elements/panel.tsx +0 -12
  232. package/src/components/ai-elements/plan.tsx +0 -123
  233. package/src/components/ai-elements/queue.tsx +0 -231
  234. package/src/components/ai-elements/reasoning.tsx +0 -163
  235. package/src/components/ai-elements/response.tsx +0 -19
  236. package/src/components/ai-elements/sources.tsx +0 -53
  237. package/src/components/ai-elements/suggestion.tsx +0 -47
  238. package/src/components/ai-elements/task.tsx +0 -64
  239. package/src/components/ai-elements/tool.tsx +0 -136
  240. package/src/components/ai-elements/toolbar.tsx +0 -13
  241. package/src/components/ai-elements/web-preview.tsx +0 -238
  242. package/src/components/ui/alert.tsx +0 -60
  243. package/src/components/ui/badge.tsx +0 -40
  244. package/src/components/ui/card.tsx +0 -41
  245. package/src/components/ui/carousel.tsx +0 -234
  246. package/src/components/ui/checkbox.tsx +0 -27
  247. package/src/components/ui/collapsible.tsx +0 -21
  248. package/src/components/ui/field.tsx +0 -234
  249. package/src/components/ui/form.tsx +0 -154
  250. package/src/components/ui/label.tsx +0 -21
  251. package/src/components/ui/progress.tsx +0 -28
  252. package/src/components/ui/separator.tsx +0 -28
  253. package/src/components/ui/switch.tsx +0 -26
  254. package/src/components/ui/tabs.tsx +0 -52
  255. package/src/components/ui/toggle.tsx +0 -44
  256. package/src/components.tsx +0 -29
  257. package/src/hooks/index.ts +0 -20
  258. package/src/hooks/useWorkbenchSchemas.ts +0 -69
@@ -1,234 +0,0 @@
1
- 'use client';
2
-
3
- import * as React from 'react';
4
- import useEmblaCarousel, { type UseEmblaCarouselType } from 'embla-carousel-react';
5
- import { ArrowLeft, ArrowRight } from 'lucide-react';
6
-
7
- import { cn } from '../../lib/utils';
8
- import { Button } from './button';
9
-
10
- type CarouselApi = UseEmblaCarouselType[1];
11
- type UseCarouselParameters = Parameters<typeof useEmblaCarousel>;
12
- type CarouselOptions = UseCarouselParameters[0];
13
- type CarouselPlugin = UseCarouselParameters[1];
14
-
15
- type CarouselProps = {
16
- opts?: CarouselOptions;
17
- plugins?: CarouselPlugin;
18
- orientation?: 'horizontal' | 'vertical';
19
- setApi?: (api: CarouselApi) => void;
20
- };
21
-
22
- type CarouselContextProps = {
23
- carouselRef: ReturnType<typeof useEmblaCarousel>[0];
24
- api: ReturnType<typeof useEmblaCarousel>[1];
25
- scrollPrev: () => void;
26
- scrollNext: () => void;
27
- canScrollPrev: boolean;
28
- canScrollNext: boolean;
29
- } & CarouselProps;
30
-
31
- const CarouselContext = React.createContext<CarouselContextProps | null>(null);
32
-
33
- function useCarousel() {
34
- const context = React.useContext(CarouselContext);
35
-
36
- if (!context) {
37
- throw new Error('useCarousel must be used within a <Carousel />');
38
- }
39
-
40
- return context;
41
- }
42
-
43
- function Carousel({
44
- orientation = 'horizontal',
45
- opts,
46
- setApi,
47
- plugins,
48
- className,
49
- children,
50
- ...props
51
- }: React.ComponentProps<'div'> & CarouselProps) {
52
- const [carouselRef, api] = useEmblaCarousel(
53
- {
54
- ...opts,
55
- axis: orientation === 'horizontal' ? 'x' : 'y',
56
- },
57
- plugins
58
- );
59
- const [canScrollPrev, setCanScrollPrev] = React.useState(false);
60
- const [canScrollNext, setCanScrollNext] = React.useState(false);
61
-
62
- const onSelect = React.useCallback((api: CarouselApi) => {
63
- if (!api) return;
64
- setCanScrollPrev(api.canScrollPrev());
65
- setCanScrollNext(api.canScrollNext());
66
- }, []);
67
-
68
- const scrollPrev = React.useCallback(() => {
69
- api?.scrollPrev();
70
- }, [api]);
71
-
72
- const scrollNext = React.useCallback(() => {
73
- api?.scrollNext();
74
- }, [api]);
75
-
76
- const handleKeyDown = React.useCallback(
77
- (event: React.KeyboardEvent<HTMLDivElement>) => {
78
- if (event.key === 'ArrowLeft') {
79
- event.preventDefault();
80
- scrollPrev();
81
- } else if (event.key === 'ArrowRight') {
82
- event.preventDefault();
83
- scrollNext();
84
- }
85
- },
86
- [scrollPrev, scrollNext]
87
- );
88
-
89
- React.useEffect(() => {
90
- if (!api || !setApi) return;
91
- setApi(api);
92
- }, [api, setApi]);
93
-
94
- React.useEffect(() => {
95
- if (!api) return;
96
- onSelect(api);
97
- api.on('reInit', onSelect);
98
- api.on('select', onSelect);
99
-
100
- return () => {
101
- api?.off('select', onSelect);
102
- };
103
- }, [api, onSelect]);
104
-
105
- return (
106
- <CarouselContext.Provider
107
- value={{
108
- carouselRef,
109
- api: api,
110
- opts,
111
- orientation: orientation || (opts?.axis === 'y' ? 'vertical' : 'horizontal'),
112
- scrollPrev,
113
- scrollNext,
114
- canScrollPrev,
115
- canScrollNext,
116
- }}
117
- >
118
- <div
119
- onKeyDownCapture={handleKeyDown}
120
- className={cn('relative', className)}
121
- role="region"
122
- aria-roledescription="carousel"
123
- data-slot="carousel"
124
- {...props}
125
- >
126
- {children}
127
- </div>
128
- </CarouselContext.Provider>
129
- );
130
- }
131
-
132
- function CarouselContent({ className, ...props }: React.ComponentProps<'div'>) {
133
- const { carouselRef, orientation } = useCarousel();
134
-
135
- return (
136
- <div ref={carouselRef} className="overflow-hidden" data-slot="carousel-content">
137
- <div
138
- className={cn(
139
- 'flex',
140
- orientation === 'horizontal' ? '-ml-4' : '-mt-4 flex-col',
141
- className
142
- )}
143
- {...props}
144
- />
145
- </div>
146
- );
147
- }
148
-
149
- function CarouselItem({ className, ...props }: React.ComponentProps<'div'>) {
150
- const { orientation } = useCarousel();
151
-
152
- return (
153
- <div
154
- role="group"
155
- aria-roledescription="slide"
156
- data-slot="carousel-item"
157
- className={cn(
158
- 'min-w-0 shrink-0 grow-0 basis-full',
159
- orientation === 'horizontal' ? 'pl-4' : 'pt-4',
160
- className
161
- )}
162
- {...props}
163
- />
164
- );
165
- }
166
-
167
- function CarouselPrevious({
168
- className,
169
- variant = 'outline',
170
- size = 'icon',
171
- ...props
172
- }: React.ComponentProps<typeof Button>) {
173
- const { orientation, scrollPrev, canScrollPrev } = useCarousel();
174
-
175
- return (
176
- <Button
177
- data-slot="carousel-previous"
178
- variant={variant}
179
- size={size}
180
- className={cn(
181
- 'absolute size-8 rounded-full',
182
- orientation === 'horizontal'
183
- ? 'top-1/2 -left-12 -translate-y-1/2'
184
- : '-top-12 left-1/2 -translate-x-1/2 rotate-90',
185
- className
186
- )}
187
- disabled={!canScrollPrev}
188
- onClick={scrollPrev}
189
- {...props}
190
- >
191
- <ArrowLeft />
192
- <span className="sr-only">Previous slide</span>
193
- </Button>
194
- );
195
- }
196
-
197
- function CarouselNext({
198
- className,
199
- variant = 'outline',
200
- size = 'icon',
201
- ...props
202
- }: React.ComponentProps<typeof Button>) {
203
- const { orientation, scrollNext, canScrollNext } = useCarousel();
204
-
205
- return (
206
- <Button
207
- data-slot="carousel-next"
208
- variant={variant}
209
- size={size}
210
- className={cn(
211
- 'absolute size-8 rounded-full',
212
- orientation === 'horizontal'
213
- ? 'top-1/2 -right-12 -translate-y-1/2'
214
- : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',
215
- className
216
- )}
217
- disabled={!canScrollNext}
218
- onClick={scrollNext}
219
- {...props}
220
- >
221
- <ArrowRight />
222
- <span className="sr-only">Next slide</span>
223
- </Button>
224
- );
225
- }
226
-
227
- export {
228
- type CarouselApi,
229
- Carousel,
230
- CarouselContent,
231
- CarouselItem,
232
- CarouselPrevious,
233
- CarouselNext,
234
- };
@@ -1,27 +0,0 @@
1
- import * as React from 'react';
2
- import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
3
- import { CheckIcon } from 'lucide-react';
4
-
5
- import { cn } from '../../lib/utils';
6
-
7
- function Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>) {
8
- return (
9
- <CheckboxPrimitive.Root
10
- data-slot="checkbox"
11
- className={cn(
12
- 'peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',
13
- className
14
- )}
15
- {...props}
16
- >
17
- <CheckboxPrimitive.Indicator
18
- data-slot="checkbox-indicator"
19
- className="grid place-content-center text-current transition-none"
20
- >
21
- <CheckIcon className="size-3.5" />
22
- </CheckboxPrimitive.Indicator>
23
- </CheckboxPrimitive.Root>
24
- );
25
- }
26
-
27
- export { Checkbox };
@@ -1,21 +0,0 @@
1
- 'use client';
2
-
3
- import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
4
-
5
- function Collapsible({ ...props }: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {
6
- return <CollapsiblePrimitive.Root data-slot="collapsible" {...props} />;
7
- }
8
-
9
- function CollapsibleTrigger({
10
- ...props
11
- }: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {
12
- return <CollapsiblePrimitive.CollapsibleTrigger data-slot="collapsible-trigger" {...props} />;
13
- }
14
-
15
- function CollapsibleContent({
16
- ...props
17
- }: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {
18
- return <CollapsiblePrimitive.CollapsibleContent data-slot="collapsible-content" {...props} />;
19
- }
20
-
21
- export { Collapsible, CollapsibleTrigger, CollapsibleContent };
@@ -1,234 +0,0 @@
1
- import { useMemo } from 'react';
2
- import { cva, type VariantProps } from 'class-variance-authority';
3
-
4
- import { cn } from '../../lib/utils';
5
- import { Label } from './label';
6
- import { Separator } from './separator';
7
-
8
- function FieldSet({ className, ...props }: React.ComponentProps<'fieldset'>) {
9
- return (
10
- <fieldset
11
- data-slot="field-set"
12
- className={cn(
13
- 'flex flex-col gap-6',
14
- 'has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3',
15
- className
16
- )}
17
- {...props}
18
- />
19
- );
20
- }
21
-
22
- function FieldLegend({
23
- className,
24
- variant = 'legend',
25
- ...props
26
- }: React.ComponentProps<'legend'> & { variant?: 'legend' | 'label' }) {
27
- return (
28
- <legend
29
- data-slot="field-legend"
30
- data-variant={variant}
31
- className={cn(
32
- 'mb-3 font-medium',
33
- 'data-[variant=legend]:text-base',
34
- 'data-[variant=label]:text-sm',
35
- className
36
- )}
37
- {...props}
38
- />
39
- );
40
- }
41
-
42
- function FieldGroup({ className, ...props }: React.ComponentProps<'div'>) {
43
- return (
44
- <div
45
- data-slot="field-group"
46
- className={cn(
47
- 'group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4',
48
- className
49
- )}
50
- {...props}
51
- />
52
- );
53
- }
54
-
55
- const fieldVariants = cva('group/field flex w-full gap-3 data-[invalid=true]:text-destructive', {
56
- variants: {
57
- orientation: {
58
- vertical: ['flex-col [&>*]:w-full [&>.sr-only]:w-auto'],
59
- horizontal: [
60
- 'flex-row items-center',
61
- '[&>[data-slot=field-label]]:flex-auto',
62
- 'has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px',
63
- ],
64
- responsive: [
65
- 'flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto',
66
- '@md/field-group:[&>[data-slot=field-label]]:flex-auto',
67
- '@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px',
68
- ],
69
- },
70
- },
71
- defaultVariants: {
72
- orientation: 'vertical',
73
- },
74
- });
75
-
76
- function Field({
77
- className,
78
- orientation = 'vertical',
79
- ...props
80
- }: React.ComponentProps<'div'> & VariantProps<typeof fieldVariants>) {
81
- return (
82
- <div
83
- role="group"
84
- data-slot="field"
85
- data-orientation={orientation}
86
- className={cn(fieldVariants({ orientation }), className)}
87
- {...props}
88
- />
89
- );
90
- }
91
-
92
- function FieldContent({ className, ...props }: React.ComponentProps<'div'>) {
93
- return (
94
- <div
95
- data-slot="field-content"
96
- className={cn('group/field-content flex flex-1 flex-col gap-1.5 leading-snug', className)}
97
- {...props}
98
- />
99
- );
100
- }
101
-
102
- function FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>) {
103
- return (
104
- <Label
105
- data-slot="field-label"
106
- className={cn(
107
- 'group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50',
108
- 'has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4',
109
- 'has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10',
110
- className
111
- )}
112
- {...props}
113
- />
114
- );
115
- }
116
-
117
- function FieldTitle({ className, ...props }: React.ComponentProps<'div'>) {
118
- return (
119
- <div
120
- data-slot="field-label"
121
- className={cn(
122
- 'flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50',
123
- className
124
- )}
125
- {...props}
126
- />
127
- );
128
- }
129
-
130
- function FieldDescription({ className, ...props }: React.ComponentProps<'p'>) {
131
- return (
132
- <p
133
- data-slot="field-description"
134
- className={cn(
135
- 'text-muted-foreground text-sm leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance',
136
- 'last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5',
137
- '[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4',
138
- className
139
- )}
140
- {...props}
141
- />
142
- );
143
- }
144
-
145
- function FieldSeparator({
146
- children,
147
- className,
148
- ...props
149
- }: React.ComponentProps<'div'> & {
150
- children?: React.ReactNode;
151
- }) {
152
- return (
153
- <div
154
- data-slot="field-separator"
155
- data-content={!!children}
156
- className={cn(
157
- 'relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2',
158
- className
159
- )}
160
- {...props}
161
- >
162
- <Separator className="absolute inset-0 top-1/2" />
163
- {children && (
164
- <span
165
- className="bg-background text-muted-foreground relative mx-auto block w-fit px-2"
166
- data-slot="field-separator-content"
167
- >
168
- {children}
169
- </span>
170
- )}
171
- </div>
172
- );
173
- }
174
-
175
- function FieldError({
176
- className,
177
- children,
178
- errors,
179
- ...props
180
- }: React.ComponentProps<'div'> & {
181
- errors?: Array<{ message?: string } | undefined>;
182
- }) {
183
- const content = useMemo(() => {
184
- if (children) {
185
- return children;
186
- }
187
-
188
- if (!errors?.length) {
189
- return null;
190
- }
191
-
192
- const uniqueErrors = [...new Map(errors.map((error) => [error?.message, error])).values()];
193
-
194
- if (uniqueErrors?.length == 1) {
195
- return uniqueErrors[0]?.message;
196
- }
197
-
198
- return (
199
- <ul className="ml-4 flex list-disc flex-col gap-1">
200
- {uniqueErrors.map(
201
- (error, index) => error?.message && <li key={index}>{error.message}</li>
202
- )}
203
- </ul>
204
- );
205
- }, [children, errors]);
206
-
207
- if (!content) {
208
- return null;
209
- }
210
-
211
- return (
212
- <div
213
- role="alert"
214
- data-slot="field-error"
215
- className={cn('text-destructive text-sm font-normal', className)}
216
- {...props}
217
- >
218
- {content}
219
- </div>
220
- );
221
- }
222
-
223
- export {
224
- Field,
225
- FieldLabel,
226
- FieldDescription,
227
- FieldError,
228
- FieldGroup,
229
- FieldLegend,
230
- FieldSeparator,
231
- FieldSet,
232
- FieldContent,
233
- FieldTitle,
234
- };
@@ -1,154 +0,0 @@
1
- 'use client';
2
-
3
- import * as React from 'react';
4
- import * as LabelPrimitive from '@radix-ui/react-label';
5
- import { Slot } from '@radix-ui/react-slot';
6
- import {
7
- Controller,
8
- FormProvider,
9
- useFormContext,
10
- useFormState,
11
- type ControllerProps,
12
- type FieldPath,
13
- type FieldValues,
14
- } from 'react-hook-form';
15
-
16
- import { cn } from '../../lib/utils';
17
- import { Label } from './label';
18
-
19
- const Form = FormProvider;
20
-
21
- type FormFieldContextValue<
22
- TFieldValues extends FieldValues = FieldValues,
23
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
24
- > = {
25
- name: TName;
26
- };
27
-
28
- const FormFieldContext = React.createContext<FormFieldContextValue>({} as FormFieldContextValue);
29
-
30
- const FormField = <
31
- TFieldValues extends FieldValues = FieldValues,
32
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
33
- >({
34
- ...props
35
- }: ControllerProps<TFieldValues, TName>) => {
36
- return (
37
- <FormFieldContext.Provider value={{ name: props.name }}>
38
- <Controller {...props} />
39
- </FormFieldContext.Provider>
40
- );
41
- };
42
-
43
- const useFormField = () => {
44
- const fieldContext = React.useContext(FormFieldContext);
45
- const itemContext = React.useContext(FormItemContext);
46
- const { getFieldState } = useFormContext();
47
- const formState = useFormState({ name: fieldContext.name });
48
- const fieldState = getFieldState(fieldContext.name, formState);
49
-
50
- if (!fieldContext) {
51
- throw new Error('useFormField should be used within <FormField>');
52
- }
53
-
54
- const { id } = itemContext;
55
-
56
- return {
57
- id,
58
- name: fieldContext.name,
59
- formItemId: `${id}-form-item`,
60
- formDescriptionId: `${id}-form-item-description`,
61
- formMessageId: `${id}-form-item-message`,
62
- ...fieldState,
63
- };
64
- };
65
-
66
- type FormItemContextValue = {
67
- id: string;
68
- };
69
-
70
- const FormItemContext = React.createContext<FormItemContextValue>({} as FormItemContextValue);
71
-
72
- function FormItem({ className, ...props }: React.ComponentProps<'div'>) {
73
- const id = React.useId();
74
-
75
- return (
76
- <FormItemContext.Provider value={{ id }}>
77
- <div data-slot="form-item" className={cn('grid gap-2', className)} {...props} />
78
- </FormItemContext.Provider>
79
- );
80
- }
81
-
82
- function FormLabel({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {
83
- const { error, formItemId } = useFormField();
84
-
85
- return (
86
- <Label
87
- data-slot="form-label"
88
- data-error={!!error}
89
- className={cn('data-[error=true]:text-destructive', className)}
90
- htmlFor={formItemId}
91
- {...props}
92
- />
93
- );
94
- }
95
-
96
- function FormControl({ ...props }: React.ComponentProps<typeof Slot>) {
97
- const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
98
-
99
- return (
100
- <Slot
101
- data-slot="form-control"
102
- id={formItemId}
103
- aria-describedby={
104
- !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`
105
- }
106
- aria-invalid={!!error}
107
- {...props}
108
- />
109
- );
110
- }
111
-
112
- function FormDescription({ className, ...props }: React.ComponentProps<'p'>) {
113
- const { formDescriptionId } = useFormField();
114
-
115
- return (
116
- <p
117
- data-slot="form-description"
118
- id={formDescriptionId}
119
- className={cn('text-muted-foreground text-sm', className)}
120
- {...props}
121
- />
122
- );
123
- }
124
-
125
- function FormMessage({ className, ...props }: React.ComponentProps<'p'>) {
126
- const { error, formMessageId } = useFormField();
127
- const body = error ? String(error?.message ?? '') : props.children;
128
-
129
- if (!body) {
130
- return null;
131
- }
132
-
133
- return (
134
- <p
135
- data-slot="form-message"
136
- id={formMessageId}
137
- className={cn('text-destructive text-sm', className)}
138
- {...props}
139
- >
140
- {body}
141
- </p>
142
- );
143
- }
144
-
145
- export {
146
- useFormField,
147
- Form,
148
- FormItem,
149
- FormLabel,
150
- FormControl,
151
- FormDescription,
152
- FormMessage,
153
- FormField,
154
- };
@@ -1,21 +0,0 @@
1
- 'use client';
2
-
3
- import * as React from 'react';
4
- import * as LabelPrimitive from '@radix-ui/react-label';
5
-
6
- import { cn } from '../../lib/utils';
7
-
8
- function Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {
9
- return (
10
- <LabelPrimitive.Root
11
- data-slot="label"
12
- className={cn(
13
- 'text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',
14
- className
15
- )}
16
- {...props}
17
- />
18
- );
19
- }
20
-
21
- export { Label };