@gv-tech/ui-web 2.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 (56) hide show
  1. package/package.json +88 -0
  2. package/src/accordion.tsx +58 -0
  3. package/src/alert-dialog.tsx +121 -0
  4. package/src/alert.tsx +49 -0
  5. package/src/aspect-ratio.tsx +7 -0
  6. package/src/avatar.tsx +40 -0
  7. package/src/badge.tsx +34 -0
  8. package/src/breadcrumb.tsx +105 -0
  9. package/src/button.tsx +47 -0
  10. package/src/calendar.tsx +163 -0
  11. package/src/card.tsx +46 -0
  12. package/src/carousel.tsx +234 -0
  13. package/src/chart.tsx +296 -0
  14. package/src/checkbox.tsx +31 -0
  15. package/src/collapsible.tsx +15 -0
  16. package/src/command.tsx +154 -0
  17. package/src/context-menu.tsx +208 -0
  18. package/src/dialog.tsx +95 -0
  19. package/src/drawer.tsx +110 -0
  20. package/src/dropdown-menu.tsx +212 -0
  21. package/src/form.tsx +160 -0
  22. package/src/hooks/use-theme.ts +15 -0
  23. package/src/hooks/use-toast.ts +189 -0
  24. package/src/hover-card.tsx +35 -0
  25. package/src/index.ts +474 -0
  26. package/src/input.tsx +23 -0
  27. package/src/label.tsx +21 -0
  28. package/src/lib/utils.ts +6 -0
  29. package/src/menubar.tsx +244 -0
  30. package/src/navigation-menu.tsx +143 -0
  31. package/src/pagination.tsx +107 -0
  32. package/src/popover.tsx +45 -0
  33. package/src/progress.tsx +28 -0
  34. package/src/radio-group.tsx +41 -0
  35. package/src/resizable.tsx +59 -0
  36. package/src/scroll-area.tsx +42 -0
  37. package/src/search.tsx +87 -0
  38. package/src/select.tsx +169 -0
  39. package/src/separator.tsx +24 -0
  40. package/src/setupTests.ts +114 -0
  41. package/src/sheet.tsx +136 -0
  42. package/src/skeleton.tsx +10 -0
  43. package/src/slider.tsx +27 -0
  44. package/src/sonner.tsx +32 -0
  45. package/src/switch.tsx +31 -0
  46. package/src/table.tsx +104 -0
  47. package/src/tabs.tsx +62 -0
  48. package/src/text.tsx +55 -0
  49. package/src/textarea.tsx +25 -0
  50. package/src/theme-provider.tsx +15 -0
  51. package/src/theme-toggle.tsx +92 -0
  52. package/src/toast.tsx +111 -0
  53. package/src/toaster.tsx +27 -0
  54. package/src/toggle-group.tsx +55 -0
  55. package/src/toggle.tsx +24 -0
  56. package/src/tooltip.tsx +51 -0
package/src/index.ts ADDED
@@ -0,0 +1,474 @@
1
+ // @gv-tech/ui-web
2
+ //
3
+ // Web (DOM/Radix) implementations of the GV Tech design system components.
4
+ // Each component satisfies the contracts defined in @gv-tech/ui-core.
5
+
6
+ // Utilities
7
+ export { cn } from './lib/utils';
8
+
9
+ // Accordion
10
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from './accordion';
11
+ export type { AccordionProps } from './accordion';
12
+
13
+ // Alert
14
+ export { Alert, AlertDescription, AlertTitle } from './alert';
15
+ export type { AlertProps } from './alert';
16
+
17
+ // Alert Dialog
18
+ export {
19
+ AlertDialog,
20
+ AlertDialogAction,
21
+ AlertDialogCancel,
22
+ AlertDialogContent,
23
+ AlertDialogDescription,
24
+ AlertDialogFooter,
25
+ AlertDialogHeader,
26
+ AlertDialogOverlay,
27
+ AlertDialogPortal,
28
+ AlertDialogTitle,
29
+ AlertDialogTrigger,
30
+ } from './alert-dialog';
31
+ export type { AlertDialogProps } from './alert-dialog';
32
+
33
+ // Aspect Ratio
34
+ export { AspectRatio } from './aspect-ratio';
35
+ export type { AspectRatioProps } from './aspect-ratio';
36
+
37
+ // Avatar
38
+ export { Avatar, AvatarFallback, AvatarImage } from './avatar';
39
+ export type { AvatarProps } from './avatar';
40
+
41
+ // Badge
42
+ export { Badge, badgeVariants } from './badge';
43
+ export type { BadgeProps } from './badge';
44
+
45
+ // Breadcrumb
46
+ export {
47
+ Breadcrumb,
48
+ BreadcrumbEllipsis,
49
+ BreadcrumbItem,
50
+ BreadcrumbLink,
51
+ BreadcrumbList,
52
+ BreadcrumbPage,
53
+ BreadcrumbSeparator,
54
+ } from './breadcrumb';
55
+ export type { BreadcrumbProps } from './breadcrumb';
56
+
57
+ // Button
58
+ export { Button, buttonVariants } from './button';
59
+ export type { ButtonProps } from './button';
60
+
61
+ // Calendar
62
+ export { Calendar, CalendarDayButton } from './calendar';
63
+ export type { CalendarProps } from './calendar';
64
+
65
+ // Card
66
+ export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './card';
67
+ export type { CardProps } from './card';
68
+
69
+ // Carousel
70
+ export { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from './carousel';
71
+ export type { CarouselApi, CarouselProps } from './carousel';
72
+
73
+ // Chart
74
+ export {
75
+ ChartContainer,
76
+ ChartLegend,
77
+ ChartLegendContent,
78
+ ChartStyle,
79
+ ChartTooltip,
80
+ ChartTooltipContent,
81
+ } from './chart';
82
+ export type { ChartConfig } from './chart';
83
+
84
+ // Checkbox
85
+ export { Checkbox } from './checkbox';
86
+ export type { CheckboxProps } from './checkbox';
87
+
88
+ // Collapsible
89
+ export { Collapsible, CollapsibleContent, CollapsibleTrigger } from './collapsible';
90
+ export type { CollapsibleContentProps, CollapsibleProps, CollapsibleTriggerProps } from './collapsible';
91
+
92
+ // Command
93
+ export {
94
+ Command,
95
+ CommandDialog,
96
+ CommandEmpty,
97
+ CommandGroup,
98
+ CommandInput,
99
+ CommandItem,
100
+ CommandList,
101
+ CommandSeparator,
102
+ CommandShortcut,
103
+ } from './command';
104
+ export type {
105
+ CommandEmptyProps,
106
+ CommandGroupProps,
107
+ CommandInputProps,
108
+ CommandItemProps,
109
+ CommandListProps,
110
+ CommandProps,
111
+ CommandSeparatorProps,
112
+ CommandShortcutProps,
113
+ } from './command';
114
+
115
+ // Context Menu
116
+ export {
117
+ ContextMenu,
118
+ ContextMenuCheckboxItem,
119
+ ContextMenuContent,
120
+ ContextMenuGroup,
121
+ ContextMenuItem,
122
+ ContextMenuLabel,
123
+ ContextMenuPortal,
124
+ ContextMenuRadioGroup,
125
+ ContextMenuRadioItem,
126
+ ContextMenuSeparator,
127
+ ContextMenuShortcut,
128
+ ContextMenuSub,
129
+ ContextMenuSubContent,
130
+ ContextMenuSubTrigger,
131
+ ContextMenuTrigger,
132
+ } from './context-menu';
133
+ export type {
134
+ ContextMenuCheckboxItemProps,
135
+ ContextMenuContentProps,
136
+ ContextMenuGroupProps,
137
+ ContextMenuItemProps,
138
+ ContextMenuLabelProps,
139
+ ContextMenuProps,
140
+ ContextMenuRadioGroupProps,
141
+ ContextMenuRadioItemProps,
142
+ ContextMenuSeparatorProps,
143
+ ContextMenuShortcutProps,
144
+ ContextMenuSubContentProps,
145
+ ContextMenuSubProps,
146
+ ContextMenuSubTriggerProps,
147
+ ContextMenuTriggerProps,
148
+ } from './context-menu';
149
+
150
+ // Dialog
151
+ export {
152
+ Dialog,
153
+ DialogClose,
154
+ DialogContent,
155
+ DialogDescription,
156
+ DialogFooter,
157
+ DialogHeader,
158
+ DialogOverlay,
159
+ DialogPortal,
160
+ DialogTitle,
161
+ DialogTrigger,
162
+ } from './dialog';
163
+
164
+ // Drawer
165
+ export {
166
+ Drawer,
167
+ DrawerClose,
168
+ DrawerContent,
169
+ DrawerDescription,
170
+ DrawerFooter,
171
+ DrawerHeader,
172
+ DrawerOverlay,
173
+ DrawerPortal,
174
+ DrawerTitle,
175
+ DrawerTrigger,
176
+ } from './drawer';
177
+ export type {
178
+ DrawerCloseProps,
179
+ DrawerContentProps,
180
+ DrawerDescriptionProps,
181
+ DrawerFooterProps,
182
+ DrawerHeaderProps,
183
+ DrawerProps,
184
+ DrawerTitleProps,
185
+ DrawerTriggerProps,
186
+ } from './drawer';
187
+
188
+ // Dropdown Menu
189
+ export {
190
+ DropdownMenu,
191
+ DropdownMenuCheckboxItem,
192
+ DropdownMenuContent,
193
+ DropdownMenuGroup,
194
+ DropdownMenuItem,
195
+ DropdownMenuLabel,
196
+ DropdownMenuPortal,
197
+ DropdownMenuRadioGroup,
198
+ DropdownMenuRadioItem,
199
+ DropdownMenuSeparator,
200
+ DropdownMenuShortcut,
201
+ DropdownMenuSub,
202
+ DropdownMenuSubContent,
203
+ DropdownMenuSubTrigger,
204
+ DropdownMenuTrigger,
205
+ } from './dropdown-menu';
206
+ export type {
207
+ DropdownMenuCheckboxItemProps,
208
+ DropdownMenuContentProps,
209
+ DropdownMenuGroupProps,
210
+ DropdownMenuItemProps,
211
+ DropdownMenuLabelProps,
212
+ DropdownMenuProps,
213
+ DropdownMenuRadioGroupProps,
214
+ DropdownMenuRadioItemProps,
215
+ DropdownMenuSeparatorProps,
216
+ DropdownMenuShortcutProps,
217
+ DropdownMenuSubContentProps,
218
+ DropdownMenuSubProps,
219
+ DropdownMenuSubTriggerProps,
220
+ DropdownMenuTriggerProps,
221
+ } from './dropdown-menu';
222
+
223
+ // Form
224
+ export { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField } from './form';
225
+ export type { FormControlProps, FormDescriptionProps, FormItemProps, FormLabelProps, FormMessageProps } from './form';
226
+
227
+ // Hover Card
228
+ export { HoverCard, HoverCardContent, HoverCardTrigger } from './hover-card';
229
+ export type { HoverCardContentProps, HoverCardProps, HoverCardTriggerProps } from './hover-card';
230
+
231
+ // Input
232
+ export { Input } from './input';
233
+ export type { InputProps } from './input';
234
+
235
+ // Label
236
+ export { Label } from './label';
237
+ export type { LabelProps } from './label';
238
+
239
+ // Menubar
240
+ export {
241
+ Menubar,
242
+ MenubarCheckboxItem,
243
+ MenubarContent,
244
+ MenubarGroup,
245
+ MenubarItem,
246
+ MenubarLabel,
247
+ MenubarMenu,
248
+ MenubarPortal,
249
+ MenubarRadioGroup,
250
+ MenubarRadioItem,
251
+ MenubarSeparator,
252
+ MenubarShortcut,
253
+ MenubarSub,
254
+ MenubarSubContent,
255
+ MenubarSubTrigger,
256
+ MenubarTrigger,
257
+ } from './menubar';
258
+ export type {
259
+ MenubarCheckboxItemProps,
260
+ MenubarContentProps,
261
+ MenubarItemProps,
262
+ MenubarLabelProps,
263
+ MenubarMenuProps,
264
+ MenubarProps,
265
+ MenubarRadioItemProps,
266
+ MenubarSeparatorProps,
267
+ MenubarShortcutProps,
268
+ MenubarSubContentProps,
269
+ MenubarSubProps,
270
+ MenubarSubTriggerProps,
271
+ MenubarTriggerProps,
272
+ } from './menubar';
273
+
274
+ // Navigation Menu
275
+ export {
276
+ NavigationMenu,
277
+ NavigationMenuContent,
278
+ NavigationMenuIndicator,
279
+ NavigationMenuItem,
280
+ NavigationMenuLink,
281
+ NavigationMenuList,
282
+ NavigationMenuTrigger,
283
+ NavigationMenuViewport,
284
+ navigationMenuTriggerStyle,
285
+ } from './navigation-menu';
286
+ export type {
287
+ NavigationMenuContentProps,
288
+ NavigationMenuIndicatorProps,
289
+ NavigationMenuItemProps,
290
+ NavigationMenuLinkProps,
291
+ NavigationMenuListProps,
292
+ NavigationMenuProps,
293
+ NavigationMenuTriggerProps,
294
+ NavigationMenuViewportProps,
295
+ } from './navigation-menu';
296
+
297
+ // Pagination
298
+ export {
299
+ Pagination,
300
+ PaginationContent,
301
+ PaginationEllipsis,
302
+ PaginationItem,
303
+ PaginationLink,
304
+ PaginationNext,
305
+ PaginationPrevious,
306
+ } from './pagination';
307
+ export type {
308
+ PaginationContentProps,
309
+ PaginationEllipsisProps,
310
+ PaginationItemProps,
311
+ PaginationLinkProps,
312
+ PaginationNextProps,
313
+ PaginationPreviousProps,
314
+ PaginationProps,
315
+ } from './pagination';
316
+
317
+ // Popover
318
+ export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from './popover';
319
+ export type { PopoverAnchorProps, PopoverContentProps, PopoverProps, PopoverTriggerProps } from './popover';
320
+
321
+ // Progress
322
+ export { Progress } from './progress';
323
+ export type { ProgressProps } from './progress';
324
+
325
+ // Radio
326
+ export { RadioGroup, RadioGroupItem } from './radio-group';
327
+ export type { RadioGroupItemProps, RadioGroupProps } from './radio-group';
328
+
329
+ // Resizable
330
+ export { ResizableHandle, ResizablePanel, ResizablePanelGroup } from './resizable';
331
+ export type { ResizableHandleProps, ResizablePanelGroupProps, ResizablePanelProps } from './resizable';
332
+
333
+ // Scroll Area
334
+ export { ScrollArea, ScrollBar } from './scroll-area';
335
+ export type { ScrollAreaProps, ScrollBarProps } from './scroll-area';
336
+
337
+ // Search
338
+ export { Search, SearchTrigger } from './search';
339
+ export type { SearchProps, SearchTriggerProps } from './search';
340
+
341
+ // Select
342
+ export {
343
+ Select,
344
+ SelectContent,
345
+ SelectGroup,
346
+ SelectItem,
347
+ SelectLabel,
348
+ SelectScrollDownButton,
349
+ SelectScrollUpButton,
350
+ SelectSeparator,
351
+ SelectTrigger,
352
+ SelectValue,
353
+ } from './select';
354
+ export type {
355
+ SelectContentProps,
356
+ SelectGroupProps,
357
+ SelectItemProps,
358
+ SelectLabelProps,
359
+ SelectProps,
360
+ SelectScrollDownButtonProps,
361
+ SelectScrollUpButtonProps,
362
+ SelectSeparatorProps,
363
+ SelectTriggerProps,
364
+ SelectValueProps,
365
+ } from './select';
366
+
367
+ // Separator
368
+ export { Separator } from './separator';
369
+ export type { SeparatorProps } from './separator';
370
+
371
+ // Sheet
372
+ export {
373
+ Sheet,
374
+ SheetClose,
375
+ SheetContent,
376
+ SheetDescription,
377
+ SheetFooter,
378
+ SheetHeader,
379
+ SheetOverlay,
380
+ SheetPortal,
381
+ SheetTitle,
382
+ SheetTrigger,
383
+ } from './sheet';
384
+ export type {
385
+ SheetCloseProps,
386
+ SheetContentProps,
387
+ SheetDescriptionProps,
388
+ SheetFooterProps,
389
+ SheetHeaderProps,
390
+ SheetOverlayProps,
391
+ SheetPortalProps,
392
+ SheetProps,
393
+ SheetTitleProps,
394
+ SheetTriggerProps,
395
+ } from './sheet';
396
+
397
+ // Skeleton
398
+ export { Skeleton } from './skeleton';
399
+ export type { SkeletonProps } from './skeleton';
400
+
401
+ // Slider
402
+ export { Slider } from './slider';
403
+ export type { SliderProps } from './slider';
404
+
405
+ // Sonner
406
+ export { Toaster as SonnerToaster } from './sonner';
407
+ export type { ToasterProps as SonnerProps } from './sonner';
408
+
409
+ // Switch
410
+ export { Switch } from './switch';
411
+ export type { SwitchProps } from './switch';
412
+
413
+ // Table
414
+ export { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from './table';
415
+ export type {
416
+ TableBodyProps,
417
+ TableCaptionProps,
418
+ TableCellProps,
419
+ TableFooterProps,
420
+ TableHeadProps,
421
+ TableHeaderProps,
422
+ TableProps,
423
+ TableRowProps,
424
+ } from './table';
425
+
426
+ // Tabs
427
+ export { Tabs, TabsContent, TabsList, TabsTrigger } from './tabs';
428
+ export type { TabsContentProps, TabsListProps, TabsProps, TabsTriggerProps } from './tabs';
429
+
430
+ // Text
431
+ export { Text, textVariants } from './text';
432
+ export type { TextProps } from './text';
433
+
434
+ // Textarea
435
+ export { Textarea } from './textarea';
436
+ export type { TextareaProps } from './textarea';
437
+
438
+ // Toggle
439
+ export { Toggle, toggleVariants } from './toggle';
440
+ export type { ToggleProps } from './toggle';
441
+
442
+ // Toggle Group
443
+ export { ToggleGroup, ToggleGroupItem } from './toggle-group';
444
+ export type { ToggleGroupItemProps, ToggleGroupProps } from './toggle-group';
445
+
446
+ // Tooltip
447
+ export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip';
448
+ export type { TooltipContentProps, TooltipProps, TooltipProviderProps, TooltipTriggerProps } from './tooltip';
449
+
450
+ // Toast
451
+ export {
452
+ Toast,
453
+ ToastAction,
454
+ ToastClose,
455
+ ToastDescription,
456
+ ToastProvider,
457
+ ToastTitle,
458
+ ToastViewport,
459
+ type ToastActionElement,
460
+ type ToastProps,
461
+ } from './toast';
462
+
463
+ // Theme Provider
464
+ export { ThemeProvider } from './theme-provider';
465
+ export type { ThemeProviderProps } from './theme-provider';
466
+
467
+ // Theme Toggle
468
+ export { ThemeToggle } from './theme-toggle';
469
+ export type { ThemeToggleProps } from './theme-toggle';
470
+
471
+ // Toaster (Radix)
472
+ export type { ToasterBaseProps as ToasterProps } from '@gv-tech/ui-core';
473
+ export { toast, useToast } from './hooks/use-toast';
474
+ export { Toaster } from './toaster';
package/src/input.tsx ADDED
@@ -0,0 +1,23 @@
1
+ import * as React from 'react';
2
+
3
+ import type { InputBaseProps } from '@gv-tech/ui-core';
4
+ import { cn } from './lib/utils';
5
+
6
+ export interface InputProps extends React.ComponentProps<'input'>, InputBaseProps {}
7
+
8
+ const Input = React.forwardRef<HTMLInputElement, InputProps>(({ className, type, ...props }, ref) => {
9
+ return (
10
+ <input
11
+ type={type}
12
+ className={cn(
13
+ 'flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',
14
+ className,
15
+ )}
16
+ ref={ref}
17
+ {...props}
18
+ />
19
+ );
20
+ });
21
+ Input.displayName = 'Input';
22
+
23
+ export { Input };
package/src/label.tsx ADDED
@@ -0,0 +1,21 @@
1
+ 'use client';
2
+
3
+ import * as LabelPrimitive from '@radix-ui/react-label';
4
+ import { cva, type VariantProps } from 'class-variance-authority';
5
+ import * as React from 'react';
6
+
7
+ import { LabelBaseProps } from '@gv-tech/ui-core';
8
+ import { cn } from './lib/utils';
9
+
10
+ const labelVariants = cva('text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70');
11
+
12
+ const Label = React.forwardRef<
13
+ React.ElementRef<typeof LabelPrimitive.Root>,
14
+ React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & VariantProps<typeof labelVariants> & LabelBaseProps
15
+ >(({ className, ...props }, ref) => (
16
+ <LabelPrimitive.Root ref={ref} className={cn(labelVariants(), className)} {...props} />
17
+ ));
18
+ Label.displayName = LabelPrimitive.Root.displayName;
19
+
20
+ export { Label };
21
+ export type { LabelBaseProps as LabelProps };
@@ -0,0 +1,6 @@
1
+ import { clsx, type ClassValue } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs));
6
+ }