@gv-tech/design-system 0.9.0 → 1.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.
- package/.github/workflows/ci.yml +3 -12
- package/.github/workflows/release-please.yml +2 -2
- package/.vscode/mcp.json +8 -0
- package/CHANGELOG.md +32 -0
- package/components.json +20 -0
- package/dist/App.d.ts +3 -0
- package/dist/App.d.ts.map +1 -0
- package/dist/components/docs/CodeBlock.d.ts +8 -0
- package/dist/components/docs/CodeBlock.d.ts.map +1 -0
- package/dist/components/docs/ComponentShowcase.d.ts +17 -0
- package/dist/components/docs/ComponentShowcase.d.ts.map +1 -0
- package/dist/components/docs/Footer.d.ts +2 -0
- package/dist/components/docs/Footer.d.ts.map +1 -0
- package/dist/components/docs/Sidebar.d.ts +14 -0
- package/dist/components/docs/Sidebar.d.ts.map +1 -0
- package/dist/components/docs/ThemeToggle.d.ts +2 -0
- package/dist/components/docs/ThemeToggle.d.ts.map +1 -0
- package/dist/components/docs/index.d.ts +6 -0
- package/dist/components/docs/index.d.ts.map +1 -0
- package/dist/components/ui/accordion.d.ts +8 -0
- package/dist/components/ui/accordion.d.ts.map +1 -0
- package/dist/components/ui/alert-dialog.d.ts +21 -0
- package/dist/components/ui/alert-dialog.d.ts.map +1 -0
- package/dist/components/ui/alert.d.ts +9 -0
- package/dist/components/ui/alert.d.ts.map +1 -0
- package/dist/components/ui/aspect-ratio.d.ts +4 -0
- package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
- package/dist/components/ui/avatar.d.ts +7 -0
- package/dist/components/ui/avatar.d.ts.map +1 -0
- package/dist/components/ui/badge.d.ts +10 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/breadcrumb.d.ts +20 -0
- package/dist/components/ui/breadcrumb.d.ts.map +1 -0
- package/dist/components/ui/button.d.ts +12 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/calendar.d.ts +9 -0
- package/dist/components/ui/calendar.d.ts.map +1 -0
- package/dist/components/ui/card.d.ts +9 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/carousel.d.ts +19 -0
- package/dist/components/ui/carousel.d.ts.map +1 -0
- package/dist/components/ui/chart.d.ts +63 -0
- package/dist/components/ui/chart.d.ts.map +1 -0
- package/dist/components/ui/checkbox.d.ts +5 -0
- package/dist/components/ui/checkbox.d.ts.map +1 -0
- package/dist/components/ui/collapsible.d.ts +6 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/command.d.ts +81 -0
- package/dist/components/ui/command.d.ts.map +1 -0
- package/dist/components/ui/context-menu.d.ts +28 -0
- package/dist/components/ui/context-menu.d.ts.map +1 -0
- package/dist/components/ui/dialog.d.ts +20 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/drawer.d.ts +23 -0
- package/dist/components/ui/drawer.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +28 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/form.d.ts +24 -0
- package/dist/components/ui/form.d.ts.map +1 -0
- package/dist/components/ui/hover-card.d.ts +7 -0
- package/dist/components/ui/hover-card.d.ts.map +1 -0
- package/dist/components/ui/input.d.ts +4 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/label.d.ts +6 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/menubar.d.ts +29 -0
- package/dist/components/ui/menubar.d.ts.map +1 -0
- package/dist/components/ui/navigation-menu.d.ts +13 -0
- package/dist/components/ui/navigation-menu.d.ts.map +1 -0
- package/dist/components/ui/pagination.d.ts +29 -0
- package/dist/components/ui/pagination.d.ts.map +1 -0
- package/dist/components/ui/popover.d.ts +8 -0
- package/dist/components/ui/popover.d.ts.map +1 -0
- package/dist/components/ui/progress.d.ts +5 -0
- package/dist/components/ui/progress.d.ts.map +1 -0
- package/dist/components/ui/radio-group.d.ts +6 -0
- package/dist/components/ui/radio-group.d.ts.map +1 -0
- package/dist/components/ui/resizable.d.ts +11 -0
- package/dist/components/ui/resizable.d.ts.map +1 -0
- package/dist/components/ui/scroll-area.d.ts +6 -0
- package/dist/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/components/ui/select.d.ts +14 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/separator.d.ts +5 -0
- package/dist/components/ui/separator.d.ts.map +1 -0
- package/dist/components/ui/sheet.d.ts +26 -0
- package/dist/components/ui/sheet.d.ts.map +1 -0
- package/dist/components/ui/skeleton.d.ts +4 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/slider.d.ts +5 -0
- package/dist/components/ui/slider.d.ts.map +1 -0
- package/dist/components/ui/sonner.d.ts +6 -0
- package/dist/components/ui/sonner.d.ts.map +1 -0
- package/dist/components/ui/switch.d.ts +5 -0
- package/dist/components/ui/switch.d.ts.map +1 -0
- package/dist/components/ui/table.d.ts +11 -0
- package/dist/components/ui/table.d.ts.map +1 -0
- package/dist/components/ui/tabs.d.ts +8 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/textarea.d.ts +4 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/toast.d.ts +16 -0
- package/dist/components/ui/toast.d.ts.map +1 -0
- package/dist/components/ui/toaster.d.ts +2 -0
- package/dist/components/ui/toaster.d.ts.map +1 -0
- package/dist/components/ui/toggle-group.d.ts +13 -0
- package/dist/components/ui/toggle-group.d.ts.map +1 -0
- package/dist/components/ui/toggle.d.ts +13 -0
- package/dist/components/ui/toggle.d.ts.map +1 -0
- package/dist/components/ui/tooltip.d.ts +8 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/hooks/use-toast.d.ts +45 -0
- package/dist/hooks/use-toast.d.ts.map +1 -0
- package/dist/index.cjs.js +8 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.es.js +2275 -0
- package/dist/index.es.js.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/pages/GettingStarted.d.ts +3 -0
- package/dist/pages/GettingStarted.d.ts.map +1 -0
- package/dist/pages/components/AccordionDocs.d.ts +2 -0
- package/dist/pages/components/AccordionDocs.d.ts.map +1 -0
- package/dist/pages/components/AlertDialogDocs.d.ts +2 -0
- package/dist/pages/components/AlertDialogDocs.d.ts.map +1 -0
- package/dist/pages/components/AlertDocs.d.ts +2 -0
- package/dist/pages/components/AlertDocs.d.ts.map +1 -0
- package/dist/pages/components/AspectRatioDocs.d.ts +2 -0
- package/dist/pages/components/AspectRatioDocs.d.ts.map +1 -0
- package/dist/pages/components/AvatarDocs.d.ts +2 -0
- package/dist/pages/components/AvatarDocs.d.ts.map +1 -0
- package/dist/pages/components/BadgeDocs.d.ts +2 -0
- package/dist/pages/components/BadgeDocs.d.ts.map +1 -0
- package/dist/pages/components/BreadcrumbDocs.d.ts +2 -0
- package/dist/pages/components/BreadcrumbDocs.d.ts.map +1 -0
- package/dist/pages/components/ButtonDocs.d.ts +2 -0
- package/dist/pages/components/ButtonDocs.d.ts.map +1 -0
- package/dist/pages/components/CalendarDocs.d.ts +2 -0
- package/dist/pages/components/CalendarDocs.d.ts.map +1 -0
- package/dist/pages/components/CardDocs.d.ts +2 -0
- package/dist/pages/components/CardDocs.d.ts.map +1 -0
- package/dist/pages/components/CarouselDocs.d.ts +2 -0
- package/dist/pages/components/CarouselDocs.d.ts.map +1 -0
- package/dist/pages/components/ChartDocs.d.ts +2 -0
- package/dist/pages/components/ChartDocs.d.ts.map +1 -0
- package/dist/pages/components/CheckboxDocs.d.ts +2 -0
- package/dist/pages/components/CheckboxDocs.d.ts.map +1 -0
- package/dist/pages/components/CollapsibleDocs.d.ts +2 -0
- package/dist/pages/components/CollapsibleDocs.d.ts.map +1 -0
- package/dist/pages/components/CommandDocs.d.ts +2 -0
- package/dist/pages/components/CommandDocs.d.ts.map +1 -0
- package/dist/pages/components/ContextMenuDocs.d.ts +2 -0
- package/dist/pages/components/ContextMenuDocs.d.ts.map +1 -0
- package/dist/pages/components/DialogDocs.d.ts +2 -0
- package/dist/pages/components/DialogDocs.d.ts.map +1 -0
- package/dist/pages/components/DrawerDocs.d.ts +2 -0
- package/dist/pages/components/DrawerDocs.d.ts.map +1 -0
- package/dist/pages/components/DropdownMenuDocs.d.ts +2 -0
- package/dist/pages/components/DropdownMenuDocs.d.ts.map +1 -0
- package/dist/pages/components/FormDocs.d.ts +2 -0
- package/dist/pages/components/FormDocs.d.ts.map +1 -0
- package/dist/pages/components/HoverCardDocs.d.ts +2 -0
- package/dist/pages/components/HoverCardDocs.d.ts.map +1 -0
- package/dist/pages/components/InputDocs.d.ts +2 -0
- package/dist/pages/components/InputDocs.d.ts.map +1 -0
- package/dist/pages/components/LabelDocs.d.ts +2 -0
- package/dist/pages/components/LabelDocs.d.ts.map +1 -0
- package/dist/pages/components/MenubarDocs.d.ts +2 -0
- package/dist/pages/components/MenubarDocs.d.ts.map +1 -0
- package/dist/pages/components/NavigationMenuDocs.d.ts +2 -0
- package/dist/pages/components/NavigationMenuDocs.d.ts.map +1 -0
- package/dist/pages/components/PaginationDocs.d.ts +2 -0
- package/dist/pages/components/PaginationDocs.d.ts.map +1 -0
- package/dist/pages/components/PopoverDocs.d.ts +2 -0
- package/dist/pages/components/PopoverDocs.d.ts.map +1 -0
- package/dist/pages/components/ProgressDocs.d.ts +2 -0
- package/dist/pages/components/ProgressDocs.d.ts.map +1 -0
- package/dist/pages/components/RadioGroupDocs.d.ts +2 -0
- package/dist/pages/components/RadioGroupDocs.d.ts.map +1 -0
- package/dist/pages/components/ResizableDocs.d.ts +2 -0
- package/dist/pages/components/ResizableDocs.d.ts.map +1 -0
- package/dist/pages/components/ScrollAreaDocs.d.ts +2 -0
- package/dist/pages/components/ScrollAreaDocs.d.ts.map +1 -0
- package/dist/pages/components/SelectDocs.d.ts +2 -0
- package/dist/pages/components/SelectDocs.d.ts.map +1 -0
- package/dist/pages/components/SeparatorDocs.d.ts +2 -0
- package/dist/pages/components/SeparatorDocs.d.ts.map +1 -0
- package/dist/pages/components/SheetDocs.d.ts +2 -0
- package/dist/pages/components/SheetDocs.d.ts.map +1 -0
- package/dist/pages/components/SkeletonDocs.d.ts +2 -0
- package/dist/pages/components/SkeletonDocs.d.ts.map +1 -0
- package/dist/pages/components/SliderDocs.d.ts +2 -0
- package/dist/pages/components/SliderDocs.d.ts.map +1 -0
- package/dist/pages/components/SonnerDocs.d.ts +2 -0
- package/dist/pages/components/SonnerDocs.d.ts.map +1 -0
- package/dist/pages/components/SwitchDocs.d.ts +2 -0
- package/dist/pages/components/SwitchDocs.d.ts.map +1 -0
- package/dist/pages/components/TableDocs.d.ts +2 -0
- package/dist/pages/components/TableDocs.d.ts.map +1 -0
- package/dist/pages/components/TabsDocs.d.ts +2 -0
- package/dist/pages/components/TabsDocs.d.ts.map +1 -0
- package/dist/pages/components/TextareaDocs.d.ts +2 -0
- package/dist/pages/components/TextareaDocs.d.ts.map +1 -0
- package/dist/pages/components/ToastDocs.d.ts +2 -0
- package/dist/pages/components/ToastDocs.d.ts.map +1 -0
- package/dist/pages/components/ToggleDocs.d.ts +2 -0
- package/dist/pages/components/ToggleDocs.d.ts.map +1 -0
- package/dist/pages/components/ToggleGroupDocs.d.ts +2 -0
- package/dist/pages/components/ToggleGroupDocs.d.ts.map +1 -0
- package/dist/pages/components/TooltipDocs.d.ts +2 -0
- package/dist/pages/components/TooltipDocs.d.ts.map +1 -0
- package/dist/pages/index.d.ts +47 -0
- package/dist/pages/index.d.ts.map +1 -0
- package/dist/registry/accordion.json +13 -0
- package/dist/registry/alert-dialog.json +13 -0
- package/dist/registry/alert.json +13 -0
- package/dist/registry/aspect-ratio.json +13 -0
- package/dist/registry/avatar.json +13 -0
- package/dist/registry/badge.json +13 -0
- package/dist/registry/breadcrumb.json +13 -0
- package/dist/registry/button.json +13 -0
- package/dist/registry/calendar.json +13 -0
- package/dist/registry/card.json +13 -0
- package/dist/registry/carousel.json +13 -0
- package/dist/registry/chart.json +13 -0
- package/dist/registry/checkbox.json +13 -0
- package/dist/registry/collapsible.json +13 -0
- package/dist/registry/command.json +13 -0
- package/dist/registry/context-menu.json +13 -0
- package/dist/registry/dialog.json +13 -0
- package/dist/registry/drawer.json +13 -0
- package/dist/registry/dropdown-menu.json +13 -0
- package/dist/registry/form.json +13 -0
- package/dist/registry/hover-card.json +13 -0
- package/dist/registry/index.json +324 -0
- package/dist/registry/input.json +13 -0
- package/dist/registry/label.json +13 -0
- package/dist/registry/menubar.json +13 -0
- package/dist/registry/navigation-menu.json +13 -0
- package/dist/registry/pagination.json +13 -0
- package/dist/registry/popover.json +13 -0
- package/dist/registry/progress.json +13 -0
- package/dist/registry/radio-group.json +13 -0
- package/dist/registry/resizable.json +13 -0
- package/dist/registry/scroll-area.json +13 -0
- package/dist/registry/select.json +13 -0
- package/dist/registry/separator.json +13 -0
- package/dist/registry/sheet.json +13 -0
- package/dist/registry/skeleton.json +13 -0
- package/dist/registry/slider.json +13 -0
- package/dist/registry/sonner.json +13 -0
- package/dist/registry/switch.json +13 -0
- package/dist/registry/table.json +13 -0
- package/dist/registry/tabs.json +13 -0
- package/dist/registry/textarea.json +13 -0
- package/dist/registry/toast.json +13 -0
- package/dist/registry/toaster.json +13 -0
- package/dist/registry/toggle-group.json +13 -0
- package/dist/registry/toggle.json +13 -0
- package/dist/registry/tooltip.json +13 -0
- package/dist/vendor-CMSUBoIg.js +73 -0
- package/dist/vendor-CMSUBoIg.js.map +1 -0
- package/dist/vendor-ZhQmrf1h.mjs +25737 -0
- package/dist/vendor-ZhQmrf1h.mjs.map +1 -0
- package/eslint.config.mjs +34 -43
- package/index.html +13 -0
- package/package.json +75 -52
- package/postcss.config.mjs +5 -0
- package/scripts/build-registry.ts +47 -0
- package/scripts/import-all-shadcn.ts +68 -0
- package/scripts/validate.js +0 -2
- package/src/App.tsx +211 -0
- package/src/components/docs/CodeBlock.tsx +34 -0
- package/src/components/docs/ComponentShowcase.tsx +68 -0
- package/src/components/docs/Footer.tsx +117 -0
- package/src/components/docs/Sidebar.tsx +189 -0
- package/src/components/docs/ThemeToggle.tsx +19 -0
- package/src/components/docs/index.ts +5 -0
- package/src/components/ui/accordion.tsx +51 -0
- package/src/components/ui/alert-dialog.tsx +104 -0
- package/src/components/ui/alert.tsx +43 -0
- package/src/components/ui/aspect-ratio.tsx +5 -0
- package/src/components/ui/avatar.tsx +38 -0
- package/src/components/ui/badge.tsx +29 -0
- package/src/components/ui/breadcrumb.tsx +90 -0
- package/src/components/ui/button.tsx +46 -0
- package/src/components/ui/calendar.tsx +156 -0
- package/src/components/ui/card.tsx +43 -0
- package/src/components/ui/carousel.tsx +224 -0
- package/src/components/ui/chart.tsx +307 -0
- package/src/components/ui/checkbox.tsx +26 -0
- package/src/components/ui/collapsible.tsx +9 -0
- package/src/components/ui/command.tsx +132 -0
- package/src/components/ui/context-menu.tsx +178 -0
- package/src/components/ui/dialog.tsx +95 -0
- package/src/components/ui/drawer.tsx +87 -0
- package/src/components/ui/dropdown-menu.tsx +180 -0
- package/src/components/ui/form.tsx +149 -0
- package/src/components/ui/hover-card.tsx +27 -0
- package/src/components/ui/input.tsx +22 -0
- package/src/components/ui/label.tsx +17 -0
- package/src/components/ui/menubar.tsx +217 -0
- package/src/components/ui/navigation-menu.tsx +120 -0
- package/src/components/ui/pagination.tsx +81 -0
- package/src/components/ui/popover.tsx +31 -0
- package/src/components/ui/progress.tsx +23 -0
- package/src/components/ui/radio-group.tsx +36 -0
- package/src/components/ui/resizable.tsx +45 -0
- package/src/components/ui/scroll-area.tsx +38 -0
- package/src/components/ui/select.tsx +142 -0
- package/src/components/ui/separator.tsx +20 -0
- package/src/components/ui/sheet.tsx +106 -0
- package/src/components/ui/skeleton.tsx +8 -0
- package/src/components/ui/slider.tsx +23 -0
- package/src/components/ui/sonner.tsx +28 -0
- package/src/components/ui/switch.tsx +27 -0
- package/src/components/ui/table.tsx +76 -0
- package/src/components/ui/tabs.tsx +53 -0
- package/src/components/ui/textarea.tsx +21 -0
- package/src/components/ui/toast.tsx +111 -0
- package/src/components/ui/toaster.tsx +24 -0
- package/src/components/ui/toggle-group.tsx +51 -0
- package/src/components/ui/toggle.tsx +37 -0
- package/src/components/ui/tooltip.tsx +30 -0
- package/src/globals.css +118 -0
- package/src/hooks/use-toast.ts +189 -0
- package/src/index.ts +50 -11
- package/src/lib/utils.ts +6 -0
- package/src/main.tsx +10 -0
- package/src/pages/GettingStarted.tsx +251 -0
- package/src/pages/components/AccordionDocs.tsx +55 -0
- package/src/pages/components/AlertDialogDocs.tsx +63 -0
- package/src/pages/components/AlertDocs.tsx +45 -0
- package/src/pages/components/AspectRatioDocs.tsx +64 -0
- package/src/pages/components/AvatarDocs.tsx +34 -0
- package/src/pages/components/BadgeDocs.tsx +36 -0
- package/src/pages/components/BreadcrumbDocs.tsx +54 -0
- package/src/pages/components/ButtonDocs.tsx +77 -0
- package/src/pages/components/CalendarDocs.tsx +29 -0
- package/src/pages/components/CardDocs.tsx +81 -0
- package/src/pages/components/CarouselDocs.tsx +132 -0
- package/src/pages/components/ChartDocs.tsx +115 -0
- package/src/pages/components/CheckboxDocs.tsx +49 -0
- package/src/pages/components/CollapsibleDocs.tsx +52 -0
- package/src/pages/components/CommandDocs.tsx +100 -0
- package/src/pages/components/ContextMenuDocs.tsx +93 -0
- package/src/pages/components/DialogDocs.tsx +80 -0
- package/src/pages/components/DrawerDocs.tsx +79 -0
- package/src/pages/components/DropdownMenuDocs.tsx +51 -0
- package/src/pages/components/FormDocs.tsx +84 -0
- package/src/pages/components/HoverCardDocs.tsx +59 -0
- package/src/pages/components/InputDocs.tsx +68 -0
- package/src/pages/components/LabelDocs.tsx +23 -0
- package/src/pages/components/MenubarDocs.tsx +117 -0
- package/src/pages/components/NavigationMenuDocs.tsx +156 -0
- package/src/pages/components/PaginationDocs.tsx +68 -0
- package/src/pages/components/PopoverDocs.tsx +61 -0
- package/src/pages/components/ProgressDocs.tsx +34 -0
- package/src/pages/components/RadioGroupDocs.tsx +38 -0
- package/src/pages/components/ResizableDocs.tsx +110 -0
- package/src/pages/components/ScrollAreaDocs.tsx +89 -0
- package/src/pages/components/SelectDocs.tsx +87 -0
- package/src/pages/components/SeparatorDocs.tsx +44 -0
- package/src/pages/components/SheetDocs.tsx +104 -0
- package/src/pages/components/SkeletonDocs.tsx +48 -0
- package/src/pages/components/SliderDocs.tsx +24 -0
- package/src/pages/components/SonnerDocs.tsx +89 -0
- package/src/pages/components/SwitchDocs.tsx +31 -0
- package/src/pages/components/TableDocs.tsx +64 -0
- package/src/pages/components/TabsDocs.tsx +111 -0
- package/src/pages/components/TextareaDocs.tsx +54 -0
- package/src/pages/components/ToastDocs.tsx +102 -0
- package/src/pages/components/ToggleDocs.tsx +59 -0
- package/src/pages/components/ToggleGroupDocs.tsx +93 -0
- package/src/pages/components/TooltipDocs.tsx +38 -0
- package/src/pages/index.ts +49 -0
- package/tsconfig.json +8 -4
- package/tsconfig.node.json +2 -1
- package/vite.config.ts +30 -16
- package/wrangler.toml +22 -0
- package/.storybook/.preview-head.html +0 -1
- package/.storybook/main.ts +0 -38
- package/.storybook/preview.tsx +0 -30
- package/dist/index.js +0 -647
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -1053
- package/dist/index.mjs.map +0 -1
- package/dist/vendor-DXgJBoQh.mjs +0 -265
- package/dist/vendor-DXgJBoQh.mjs.map +0 -1
- package/dist/vendor-nZSsnGb7.js +0 -7
- package/dist/vendor-nZSsnGb7.js.map +0 -1
- package/src/Avatar.stories.tsx +0 -67
- package/src/Avatar.tsx +0 -174
- package/src/Badge.stories.tsx +0 -87
- package/src/Badge.tsx +0 -76
- package/src/Button.stories.tsx +0 -244
- package/src/Button.tsx +0 -384
- package/src/Icon.stories.tsx +0 -101
- package/src/Icon.tsx +0 -64
- package/src/Intro.stories.tsx +0 -20
- package/src/Link.stories.tsx +0 -69
- package/src/Link.tsx +0 -252
- package/src/StoryLinkWrapper.d.ts +0 -1
- package/src/StoryLinkWrapper.tsx +0 -33
- package/src/__tests__/Avatar.test.tsx +0 -28
- package/src/__tests__/Badge.test.tsx +0 -25
- package/src/__tests__/Button.test.tsx +0 -38
- package/src/__tests__/Icon.test.tsx +0 -26
- package/src/__tests__/Link.test.tsx +0 -31
- package/src/mdx.d.ts +0 -5
- package/src/setupTests.ts +0 -1
- package/src/shared/animation.d.ts +0 -18
- package/src/shared/animation.js +0 -60
- package/src/shared/global.d.ts +0 -12
- package/src/shared/global.js +0 -120
- package/src/shared/icons.d.ts +0 -34
- package/src/shared/icons.js +0 -282
- package/src/shared/styles.d.ts +0 -86
- package/src/shared/styles.js +0 -98
- package/src/test-utils/axe.ts +0 -25
- package/src/types.ts +0 -316
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
|
|
2
|
+
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
|
|
3
|
+
import { cn } from '@/lib/utils';
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import { CodeBlock } from './CodeBlock';
|
|
6
|
+
|
|
7
|
+
interface ComponentShowcaseProps {
|
|
8
|
+
title: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
code: string;
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
className?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function ComponentShowcase({ title, description, code, children, className }: ComponentShowcaseProps) {
|
|
16
|
+
return (
|
|
17
|
+
<Card className={cn('overflow-hidden', className)}>
|
|
18
|
+
<CardHeader>
|
|
19
|
+
<CardTitle className="text-lg">{title}</CardTitle>
|
|
20
|
+
{description && <CardDescription>{description}</CardDescription>}
|
|
21
|
+
</CardHeader>
|
|
22
|
+
<CardContent className="p-0">
|
|
23
|
+
<Tabs defaultValue="preview" className="w-full">
|
|
24
|
+
<div className="border-b px-6">
|
|
25
|
+
<TabsList className="h-10 bg-transparent p-0">
|
|
26
|
+
<TabsTrigger
|
|
27
|
+
value="preview"
|
|
28
|
+
className="rounded-none border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:bg-transparent"
|
|
29
|
+
>
|
|
30
|
+
Preview
|
|
31
|
+
</TabsTrigger>
|
|
32
|
+
<TabsTrigger
|
|
33
|
+
value="code"
|
|
34
|
+
className="rounded-none border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:bg-transparent"
|
|
35
|
+
>
|
|
36
|
+
Code
|
|
37
|
+
</TabsTrigger>
|
|
38
|
+
</TabsList>
|
|
39
|
+
</div>
|
|
40
|
+
<TabsContent value="preview" className="p-6 mt-0">
|
|
41
|
+
<div className="flex flex-wrap gap-4 items-center">{children}</div>
|
|
42
|
+
</TabsContent>
|
|
43
|
+
<TabsContent value="code" className="mt-0">
|
|
44
|
+
<CodeBlock code={code} className="rounded-none border-0" />
|
|
45
|
+
</TabsContent>
|
|
46
|
+
</Tabs>
|
|
47
|
+
</CardContent>
|
|
48
|
+
</Card>
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
interface ComponentSectionProps {
|
|
53
|
+
title: string;
|
|
54
|
+
description?: string;
|
|
55
|
+
children: React.ReactNode;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function ComponentSection({ title, description, children }: ComponentSectionProps) {
|
|
59
|
+
return (
|
|
60
|
+
<div className="space-y-6">
|
|
61
|
+
<div className="space-y-2">
|
|
62
|
+
<h1 className="text-3xl font-bold tracking-tight">{title}</h1>
|
|
63
|
+
{description && <p className="text-lg text-muted-foreground">{description}</p>}
|
|
64
|
+
</div>
|
|
65
|
+
<div className="space-y-6">{children}</div>
|
|
66
|
+
</div>
|
|
67
|
+
);
|
|
68
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { Separator } from '@/components/ui/separator';
|
|
2
|
+
import { Github, Linkedin, Twitter } from 'lucide-react';
|
|
3
|
+
|
|
4
|
+
export function Footer() {
|
|
5
|
+
return (
|
|
6
|
+
<footer className="border-t bg-muted/30">
|
|
7
|
+
<div className="p-8 space-y-6">
|
|
8
|
+
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
|
|
9
|
+
{/* Brand */}
|
|
10
|
+
<div className="space-y-3">
|
|
11
|
+
<h3 className="font-semibold">GV Tech Design System</h3>
|
|
12
|
+
<p className="text-sm text-muted-foreground">
|
|
13
|
+
A comprehensive React component library for building modern applications.
|
|
14
|
+
</p>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
{/* Resources */}
|
|
18
|
+
<div className="space-y-3">
|
|
19
|
+
<h4 className="font-medium text-sm">Resources</h4>
|
|
20
|
+
<ul className="space-y-2 text-sm text-muted-foreground">
|
|
21
|
+
<li>
|
|
22
|
+
<a
|
|
23
|
+
href="https://github.com/Garcia-Ventures/gvtech-design"
|
|
24
|
+
target="_blank"
|
|
25
|
+
rel="noopener noreferrer"
|
|
26
|
+
className="hover:text-foreground transition-colors"
|
|
27
|
+
>
|
|
28
|
+
GitHub Repository
|
|
29
|
+
</a>
|
|
30
|
+
</li>
|
|
31
|
+
<li>
|
|
32
|
+
<a
|
|
33
|
+
href="https://www.npmjs.com/package/@gv-tech/design-system"
|
|
34
|
+
target="_blank"
|
|
35
|
+
rel="noopener noreferrer"
|
|
36
|
+
className="hover:text-foreground transition-colors"
|
|
37
|
+
>
|
|
38
|
+
NPM Package
|
|
39
|
+
</a>
|
|
40
|
+
</li>
|
|
41
|
+
<li>
|
|
42
|
+
<a
|
|
43
|
+
href="https://ui.shadcn.com"
|
|
44
|
+
target="_blank"
|
|
45
|
+
rel="noopener noreferrer"
|
|
46
|
+
className="hover:text-foreground transition-colors"
|
|
47
|
+
>
|
|
48
|
+
shadcn/ui
|
|
49
|
+
</a>
|
|
50
|
+
</li>
|
|
51
|
+
</ul>
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
{/* Social */}
|
|
55
|
+
<div className="space-y-3">
|
|
56
|
+
<h4 className="font-medium text-sm">Connect</h4>
|
|
57
|
+
<div className="flex items-center space-x-4">
|
|
58
|
+
<a
|
|
59
|
+
href="https://github.com/Garcia-Ventures"
|
|
60
|
+
target="_blank"
|
|
61
|
+
rel="noopener noreferrer"
|
|
62
|
+
className="text-muted-foreground hover:text-foreground transition-colors"
|
|
63
|
+
aria-label="GitHub"
|
|
64
|
+
>
|
|
65
|
+
<Github className="h-5 w-5" />
|
|
66
|
+
</a>
|
|
67
|
+
<a
|
|
68
|
+
href="https://twitter.com/gvtech"
|
|
69
|
+
target="_blank"
|
|
70
|
+
rel="noopener noreferrer"
|
|
71
|
+
className="text-muted-foreground hover:text-foreground transition-colors"
|
|
72
|
+
aria-label="Twitter"
|
|
73
|
+
>
|
|
74
|
+
<Twitter className="h-5 w-5" />
|
|
75
|
+
</a>
|
|
76
|
+
<a
|
|
77
|
+
href="https://linkedin.com/company/gvtech"
|
|
78
|
+
target="_blank"
|
|
79
|
+
rel="noopener noreferrer"
|
|
80
|
+
className="text-muted-foreground hover:text-foreground transition-colors"
|
|
81
|
+
aria-label="LinkedIn"
|
|
82
|
+
>
|
|
83
|
+
<Linkedin className="h-5 w-5" />
|
|
84
|
+
</a>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
|
|
89
|
+
<Separator />
|
|
90
|
+
|
|
91
|
+
<div className="flex flex-col md:flex-row justify-between items-center gap-4 text-sm text-muted-foreground">
|
|
92
|
+
<p>© GVTech 2026. All rights reserved.</p>
|
|
93
|
+
<p>
|
|
94
|
+
Built with{' '}
|
|
95
|
+
<a
|
|
96
|
+
href="https://ui.shadcn.com"
|
|
97
|
+
target="_blank"
|
|
98
|
+
rel="noopener noreferrer"
|
|
99
|
+
className="underline underline-offset-4 hover:text-foreground"
|
|
100
|
+
>
|
|
101
|
+
shadcn/ui
|
|
102
|
+
</a>{' '}
|
|
103
|
+
and{' '}
|
|
104
|
+
<a
|
|
105
|
+
href="https://tailwindcss.com"
|
|
106
|
+
target="_blank"
|
|
107
|
+
rel="noopener noreferrer"
|
|
108
|
+
className="underline underline-offset-4 hover:text-foreground"
|
|
109
|
+
>
|
|
110
|
+
Tailwind CSS
|
|
111
|
+
</a>
|
|
112
|
+
</p>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
</footer>
|
|
116
|
+
);
|
|
117
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { Button } from '@/components/ui/button';
|
|
2
|
+
import { ScrollArea } from '@/components/ui/scroll-area';
|
|
3
|
+
import { cn } from '@/lib/utils';
|
|
4
|
+
import {
|
|
5
|
+
ChevronDown,
|
|
6
|
+
ChevronRight,
|
|
7
|
+
FormInput,
|
|
8
|
+
Home,
|
|
9
|
+
Layers,
|
|
10
|
+
LayoutGrid,
|
|
11
|
+
MessageSquare,
|
|
12
|
+
Navigation,
|
|
13
|
+
Sparkles,
|
|
14
|
+
Table2,
|
|
15
|
+
} from 'lucide-react';
|
|
16
|
+
import * as React from 'react';
|
|
17
|
+
import { version } from '../../../package.json';
|
|
18
|
+
|
|
19
|
+
export type ComponentCategory =
|
|
20
|
+
| 'getting-started'
|
|
21
|
+
| 'layout'
|
|
22
|
+
| 'forms'
|
|
23
|
+
| 'data-display'
|
|
24
|
+
| 'navigation'
|
|
25
|
+
| 'feedback'
|
|
26
|
+
| 'overlay'
|
|
27
|
+
| 'advanced';
|
|
28
|
+
|
|
29
|
+
export interface NavItem {
|
|
30
|
+
id: string;
|
|
31
|
+
label: string;
|
|
32
|
+
category: ComponentCategory;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
interface SidebarProps {
|
|
36
|
+
activeItem: string;
|
|
37
|
+
onItemSelect: (id: string) => void;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const categoryConfig: Record<ComponentCategory, { label: string; icon: React.ReactNode }> = {
|
|
41
|
+
'getting-started': { label: 'Getting Started', icon: <Home className="h-4 w-4" /> },
|
|
42
|
+
layout: { label: 'Layout', icon: <LayoutGrid className="h-4 w-4" /> },
|
|
43
|
+
forms: { label: 'Forms', icon: <FormInput className="h-4 w-4" /> },
|
|
44
|
+
'data-display': { label: 'Data Display', icon: <Table2 className="h-4 w-4" /> },
|
|
45
|
+
navigation: { label: 'Navigation', icon: <Navigation className="h-4 w-4" /> },
|
|
46
|
+
feedback: { label: 'Feedback', icon: <MessageSquare className="h-4 w-4" /> },
|
|
47
|
+
overlay: { label: 'Overlay', icon: <Layers className="h-4 w-4" /> },
|
|
48
|
+
advanced: { label: 'Advanced', icon: <Sparkles className="h-4 w-4" /> },
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export const navItems: NavItem[] = [
|
|
52
|
+
// Getting Started
|
|
53
|
+
{ id: 'getting-started', label: 'Introduction', category: 'getting-started' },
|
|
54
|
+
{ id: 'installation', label: 'Installation', category: 'getting-started' },
|
|
55
|
+
|
|
56
|
+
// Layout
|
|
57
|
+
{ id: 'card', label: 'Card', category: 'layout' },
|
|
58
|
+
{ id: 'separator', label: 'Separator', category: 'layout' },
|
|
59
|
+
{ id: 'resizable', label: 'Resizable', category: 'layout' },
|
|
60
|
+
{ id: 'scroll-area', label: 'Scroll Area', category: 'layout' },
|
|
61
|
+
{ id: 'aspect-ratio', label: 'Aspect Ratio', category: 'layout' },
|
|
62
|
+
|
|
63
|
+
// Forms
|
|
64
|
+
{ id: 'button', label: 'Button', category: 'forms' },
|
|
65
|
+
{ id: 'input', label: 'Input', category: 'forms' },
|
|
66
|
+
{ id: 'textarea', label: 'Textarea', category: 'forms' },
|
|
67
|
+
{ id: 'label', label: 'Label', category: 'forms' },
|
|
68
|
+
{ id: 'checkbox', label: 'Checkbox', category: 'forms' },
|
|
69
|
+
{ id: 'radio-group', label: 'Radio Group', category: 'forms' },
|
|
70
|
+
{ id: 'select', label: 'Select', category: 'forms' },
|
|
71
|
+
{ id: 'switch', label: 'Switch', category: 'forms' },
|
|
72
|
+
{ id: 'slider', label: 'Slider', category: 'forms' },
|
|
73
|
+
{ id: 'form', label: 'Form', category: 'forms' },
|
|
74
|
+
|
|
75
|
+
// Data Display
|
|
76
|
+
{ id: 'badge', label: 'Badge', category: 'data-display' },
|
|
77
|
+
{ id: 'avatar', label: 'Avatar', category: 'data-display' },
|
|
78
|
+
{ id: 'table', label: 'Table', category: 'data-display' },
|
|
79
|
+
{ id: 'progress', label: 'Progress', category: 'data-display' },
|
|
80
|
+
{ id: 'skeleton', label: 'Skeleton', category: 'data-display' },
|
|
81
|
+
{ id: 'chart', label: 'Chart', category: 'data-display' },
|
|
82
|
+
{ id: 'calendar', label: 'Calendar', category: 'data-display' },
|
|
83
|
+
|
|
84
|
+
// Navigation
|
|
85
|
+
{ id: 'tabs', label: 'Tabs', category: 'navigation' },
|
|
86
|
+
{ id: 'breadcrumb', label: 'Breadcrumb', category: 'navigation' },
|
|
87
|
+
{ id: 'pagination', label: 'Pagination', category: 'navigation' },
|
|
88
|
+
{ id: 'navigation-menu', label: 'Navigation Menu', category: 'navigation' },
|
|
89
|
+
{ id: 'menubar', label: 'Menubar', category: 'navigation' },
|
|
90
|
+
|
|
91
|
+
// Feedback
|
|
92
|
+
{ id: 'alert', label: 'Alert', category: 'feedback' },
|
|
93
|
+
{ id: 'alert-dialog', label: 'Alert Dialog', category: 'feedback' },
|
|
94
|
+
{ id: 'dialog', label: 'Dialog', category: 'feedback' },
|
|
95
|
+
{ id: 'toast', label: 'Toast', category: 'feedback' },
|
|
96
|
+
{ id: 'sonner', label: 'Sonner', category: 'feedback' },
|
|
97
|
+
|
|
98
|
+
// Overlay
|
|
99
|
+
{ id: 'popover', label: 'Popover', category: 'overlay' },
|
|
100
|
+
{ id: 'tooltip', label: 'Tooltip', category: 'overlay' },
|
|
101
|
+
{ id: 'hover-card', label: 'Hover Card', category: 'overlay' },
|
|
102
|
+
{ id: 'dropdown-menu', label: 'Dropdown Menu', category: 'overlay' },
|
|
103
|
+
{ id: 'context-menu', label: 'Context Menu', category: 'overlay' },
|
|
104
|
+
{ id: 'command', label: 'Command', category: 'overlay' },
|
|
105
|
+
{ id: 'sheet', label: 'Sheet', category: 'overlay' },
|
|
106
|
+
{ id: 'drawer', label: 'Drawer', category: 'overlay' },
|
|
107
|
+
|
|
108
|
+
// Advanced
|
|
109
|
+
{ id: 'accordion', label: 'Accordion', category: 'advanced' },
|
|
110
|
+
{ id: 'collapsible', label: 'Collapsible', category: 'advanced' },
|
|
111
|
+
{ id: 'carousel', label: 'Carousel', category: 'advanced' },
|
|
112
|
+
{ id: 'toggle', label: 'Toggle', category: 'advanced' },
|
|
113
|
+
{ id: 'toggle-group', label: 'Toggle Group', category: 'advanced' },
|
|
114
|
+
];
|
|
115
|
+
|
|
116
|
+
export function Sidebar({ activeItem, onItemSelect }: SidebarProps) {
|
|
117
|
+
const [expandedCategories, setExpandedCategories] = React.useState<Set<ComponentCategory>>(
|
|
118
|
+
new Set(['getting-started', 'forms']),
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
const toggleCategory = (category: ComponentCategory) => {
|
|
122
|
+
setExpandedCategories((prev) => {
|
|
123
|
+
const next = new Set(prev);
|
|
124
|
+
if (next.has(category)) {
|
|
125
|
+
next.delete(category);
|
|
126
|
+
} else {
|
|
127
|
+
next.add(category);
|
|
128
|
+
}
|
|
129
|
+
return next;
|
|
130
|
+
});
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
const categories = Object.keys(categoryConfig) as ComponentCategory[];
|
|
134
|
+
|
|
135
|
+
return (
|
|
136
|
+
<div className="w-64 border-r bg-muted/30 flex flex-col h-full">
|
|
137
|
+
<div className="p-4 border-b">
|
|
138
|
+
<h2 className="font-semibold text-lg">GV Design System</h2>
|
|
139
|
+
<p className="text-xs text-muted-foreground">v{version}</p>
|
|
140
|
+
</div>
|
|
141
|
+
<ScrollArea className="flex-1">
|
|
142
|
+
<nav className="p-2">
|
|
143
|
+
{categories.map((category) => {
|
|
144
|
+
const config = categoryConfig[category];
|
|
145
|
+
const items = navItems.filter((item) => item.category === category);
|
|
146
|
+
const isExpanded = expandedCategories.has(category);
|
|
147
|
+
|
|
148
|
+
if (items.length === 0) return null;
|
|
149
|
+
|
|
150
|
+
return (
|
|
151
|
+
<div key={category} className="mb-1">
|
|
152
|
+
<button
|
|
153
|
+
onClick={() => toggleCategory(category)}
|
|
154
|
+
className="w-full flex items-center gap-2 px-2 py-1.5 text-sm font-medium rounded-md hover:bg-accent/50 transition-colors"
|
|
155
|
+
>
|
|
156
|
+
{config.icon}
|
|
157
|
+
<span className="flex-1 text-left">{config.label}</span>
|
|
158
|
+
{isExpanded ? (
|
|
159
|
+
<ChevronDown className="h-4 w-4 text-muted-foreground" />
|
|
160
|
+
) : (
|
|
161
|
+
<ChevronRight className="h-4 w-4 text-muted-foreground" />
|
|
162
|
+
)}
|
|
163
|
+
</button>
|
|
164
|
+
{isExpanded && (
|
|
165
|
+
<div className="ml-4 mt-1 space-y-0.5">
|
|
166
|
+
{items.map((item) => (
|
|
167
|
+
<Button
|
|
168
|
+
key={item.id}
|
|
169
|
+
variant="ghost"
|
|
170
|
+
size="sm"
|
|
171
|
+
onClick={() => onItemSelect(item.id)}
|
|
172
|
+
className={cn(
|
|
173
|
+
'w-full justify-start h-8 px-2 font-normal',
|
|
174
|
+
activeItem === item.id && 'bg-accent text-accent-foreground',
|
|
175
|
+
)}
|
|
176
|
+
>
|
|
177
|
+
{item.label}
|
|
178
|
+
</Button>
|
|
179
|
+
))}
|
|
180
|
+
</div>
|
|
181
|
+
)}
|
|
182
|
+
</div>
|
|
183
|
+
);
|
|
184
|
+
})}
|
|
185
|
+
</nav>
|
|
186
|
+
</ScrollArea>
|
|
187
|
+
</div>
|
|
188
|
+
);
|
|
189
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Button } from '@/components/ui/button';
|
|
2
|
+
import { Moon, Sun } from 'lucide-react';
|
|
3
|
+
import { useTheme } from 'next-themes';
|
|
4
|
+
|
|
5
|
+
export function ThemeToggle() {
|
|
6
|
+
const { theme, setTheme } = useTheme();
|
|
7
|
+
|
|
8
|
+
return (
|
|
9
|
+
<Button
|
|
10
|
+
variant="ghost"
|
|
11
|
+
size="icon"
|
|
12
|
+
onClick={() => setTheme(theme === 'dark' ? 'light' : 'dark')}
|
|
13
|
+
aria-label="Toggle theme"
|
|
14
|
+
>
|
|
15
|
+
<Sun className="h-5 w-5 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
|
|
16
|
+
<Moon className="absolute h-5 w-5 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" />
|
|
17
|
+
</Button>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { CodeBlock } from './CodeBlock';
|
|
2
|
+
export { ComponentSection, ComponentShowcase } from './ComponentShowcase';
|
|
3
|
+
export { Footer } from './Footer';
|
|
4
|
+
export { Sidebar, navItems, type ComponentCategory, type NavItem } from './Sidebar';
|
|
5
|
+
export { ThemeToggle } from './ThemeToggle';
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as AccordionPrimitive from '@radix-ui/react-accordion';
|
|
2
|
+
import { ChevronDown } from 'lucide-react';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
|
|
5
|
+
import { cn } from '@/lib/utils';
|
|
6
|
+
|
|
7
|
+
const Accordion = AccordionPrimitive.Root;
|
|
8
|
+
|
|
9
|
+
const AccordionItem = React.forwardRef<
|
|
10
|
+
React.ElementRef<typeof AccordionPrimitive.Item>,
|
|
11
|
+
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>
|
|
12
|
+
>(({ className, ...props }, ref) => (
|
|
13
|
+
<AccordionPrimitive.Item ref={ref} className={cn('border-b', className)} {...props} />
|
|
14
|
+
));
|
|
15
|
+
AccordionItem.displayName = 'AccordionItem';
|
|
16
|
+
|
|
17
|
+
const AccordionTrigger = React.forwardRef<
|
|
18
|
+
React.ElementRef<typeof AccordionPrimitive.Trigger>,
|
|
19
|
+
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>
|
|
20
|
+
>(({ className, children, ...props }, ref) => (
|
|
21
|
+
<AccordionPrimitive.Header className="flex">
|
|
22
|
+
<AccordionPrimitive.Trigger
|
|
23
|
+
ref={ref}
|
|
24
|
+
className={cn(
|
|
25
|
+
'flex flex-1 items-center justify-between py-4 text-sm font-medium transition-all hover:underline text-left [&[data-state=open]>svg]:rotate-180',
|
|
26
|
+
className,
|
|
27
|
+
)}
|
|
28
|
+
{...props}
|
|
29
|
+
>
|
|
30
|
+
{children}
|
|
31
|
+
<ChevronDown className="h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200" />
|
|
32
|
+
</AccordionPrimitive.Trigger>
|
|
33
|
+
</AccordionPrimitive.Header>
|
|
34
|
+
));
|
|
35
|
+
AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
|
|
36
|
+
|
|
37
|
+
const AccordionContent = React.forwardRef<
|
|
38
|
+
React.ElementRef<typeof AccordionPrimitive.Content>,
|
|
39
|
+
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>
|
|
40
|
+
>(({ className, children, ...props }, ref) => (
|
|
41
|
+
<AccordionPrimitive.Content
|
|
42
|
+
ref={ref}
|
|
43
|
+
className="overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down"
|
|
44
|
+
{...props}
|
|
45
|
+
>
|
|
46
|
+
<div className={cn('pb-4 pt-0', className)}>{children}</div>
|
|
47
|
+
</AccordionPrimitive.Content>
|
|
48
|
+
));
|
|
49
|
+
AccordionContent.displayName = AccordionPrimitive.Content.displayName;
|
|
50
|
+
|
|
51
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger };
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
import { buttonVariants } from '@/components/ui/button';
|
|
5
|
+
import { cn } from '@/lib/utils';
|
|
6
|
+
|
|
7
|
+
const AlertDialog = AlertDialogPrimitive.Root;
|
|
8
|
+
|
|
9
|
+
const AlertDialogTrigger = AlertDialogPrimitive.Trigger;
|
|
10
|
+
|
|
11
|
+
const AlertDialogPortal = AlertDialogPrimitive.Portal;
|
|
12
|
+
|
|
13
|
+
const AlertDialogOverlay = React.forwardRef<
|
|
14
|
+
React.ElementRef<typeof AlertDialogPrimitive.Overlay>,
|
|
15
|
+
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>
|
|
16
|
+
>(({ className, ...props }, ref) => (
|
|
17
|
+
<AlertDialogPrimitive.Overlay
|
|
18
|
+
className={cn(
|
|
19
|
+
'fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',
|
|
20
|
+
className,
|
|
21
|
+
)}
|
|
22
|
+
{...props}
|
|
23
|
+
ref={ref}
|
|
24
|
+
/>
|
|
25
|
+
));
|
|
26
|
+
AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
|
|
27
|
+
|
|
28
|
+
const AlertDialogContent = React.forwardRef<
|
|
29
|
+
React.ElementRef<typeof AlertDialogPrimitive.Content>,
|
|
30
|
+
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>
|
|
31
|
+
>(({ className, ...props }, ref) => (
|
|
32
|
+
<AlertDialogPortal>
|
|
33
|
+
<AlertDialogOverlay />
|
|
34
|
+
<AlertDialogPrimitive.Content
|
|
35
|
+
ref={ref}
|
|
36
|
+
className={cn(
|
|
37
|
+
'fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg',
|
|
38
|
+
className,
|
|
39
|
+
)}
|
|
40
|
+
{...props}
|
|
41
|
+
/>
|
|
42
|
+
</AlertDialogPortal>
|
|
43
|
+
));
|
|
44
|
+
AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
|
|
45
|
+
|
|
46
|
+
const AlertDialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
|
|
47
|
+
<div className={cn('flex flex-col space-y-2 text-center sm:text-left', className)} {...props} />
|
|
48
|
+
);
|
|
49
|
+
AlertDialogHeader.displayName = 'AlertDialogHeader';
|
|
50
|
+
|
|
51
|
+
const AlertDialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
|
|
52
|
+
<div className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)} {...props} />
|
|
53
|
+
);
|
|
54
|
+
AlertDialogFooter.displayName = 'AlertDialogFooter';
|
|
55
|
+
|
|
56
|
+
const AlertDialogTitle = React.forwardRef<
|
|
57
|
+
React.ElementRef<typeof AlertDialogPrimitive.Title>,
|
|
58
|
+
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>
|
|
59
|
+
>(({ className, ...props }, ref) => (
|
|
60
|
+
<AlertDialogPrimitive.Title ref={ref} className={cn('text-lg font-semibold', className)} {...props} />
|
|
61
|
+
));
|
|
62
|
+
AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
|
|
63
|
+
|
|
64
|
+
const AlertDialogDescription = React.forwardRef<
|
|
65
|
+
React.ElementRef<typeof AlertDialogPrimitive.Description>,
|
|
66
|
+
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>
|
|
67
|
+
>(({ className, ...props }, ref) => (
|
|
68
|
+
<AlertDialogPrimitive.Description ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />
|
|
69
|
+
));
|
|
70
|
+
AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
|
|
71
|
+
|
|
72
|
+
const AlertDialogAction = React.forwardRef<
|
|
73
|
+
React.ElementRef<typeof AlertDialogPrimitive.Action>,
|
|
74
|
+
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>
|
|
75
|
+
>(({ className, ...props }, ref) => (
|
|
76
|
+
<AlertDialogPrimitive.Action ref={ref} className={cn(buttonVariants(), className)} {...props} />
|
|
77
|
+
));
|
|
78
|
+
AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
|
|
79
|
+
|
|
80
|
+
const AlertDialogCancel = React.forwardRef<
|
|
81
|
+
React.ElementRef<typeof AlertDialogPrimitive.Cancel>,
|
|
82
|
+
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>
|
|
83
|
+
>(({ className, ...props }, ref) => (
|
|
84
|
+
<AlertDialogPrimitive.Cancel
|
|
85
|
+
ref={ref}
|
|
86
|
+
className={cn(buttonVariants({ variant: 'outline' }), 'mt-2 sm:mt-0', className)}
|
|
87
|
+
{...props}
|
|
88
|
+
/>
|
|
89
|
+
));
|
|
90
|
+
AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
|
|
91
|
+
|
|
92
|
+
export {
|
|
93
|
+
AlertDialog,
|
|
94
|
+
AlertDialogAction,
|
|
95
|
+
AlertDialogCancel,
|
|
96
|
+
AlertDialogContent,
|
|
97
|
+
AlertDialogDescription,
|
|
98
|
+
AlertDialogFooter,
|
|
99
|
+
AlertDialogHeader,
|
|
100
|
+
AlertDialogOverlay,
|
|
101
|
+
AlertDialogPortal,
|
|
102
|
+
AlertDialogTitle,
|
|
103
|
+
AlertDialogTrigger,
|
|
104
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { cva, type VariantProps } from 'class-variance-authority';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
import { cn } from '@/lib/utils';
|
|
5
|
+
|
|
6
|
+
const alertVariants = cva(
|
|
7
|
+
'relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7',
|
|
8
|
+
{
|
|
9
|
+
variants: {
|
|
10
|
+
variant: {
|
|
11
|
+
default: 'bg-background text-foreground',
|
|
12
|
+
destructive: 'border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
defaultVariants: {
|
|
16
|
+
variant: 'default',
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
const Alert = React.forwardRef<
|
|
22
|
+
HTMLDivElement,
|
|
23
|
+
React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>
|
|
24
|
+
>(({ className, variant, ...props }, ref) => (
|
|
25
|
+
<div ref={ref} role="alert" className={cn(alertVariants({ variant }), className)} {...props} />
|
|
26
|
+
));
|
|
27
|
+
Alert.displayName = 'Alert';
|
|
28
|
+
|
|
29
|
+
const AlertTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(
|
|
30
|
+
({ className, ...props }, ref) => (
|
|
31
|
+
<h5 ref={ref} className={cn('mb-1 font-medium leading-none tracking-tight', className)} {...props} />
|
|
32
|
+
),
|
|
33
|
+
);
|
|
34
|
+
AlertTitle.displayName = 'AlertTitle';
|
|
35
|
+
|
|
36
|
+
const AlertDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(
|
|
37
|
+
({ className, ...props }, ref) => (
|
|
38
|
+
<div ref={ref} className={cn('text-sm [&_p]:leading-relaxed', className)} {...props} />
|
|
39
|
+
),
|
|
40
|
+
);
|
|
41
|
+
AlertDescription.displayName = 'AlertDescription';
|
|
42
|
+
|
|
43
|
+
export { Alert, AlertDescription, AlertTitle };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as AvatarPrimitive from '@radix-ui/react-avatar';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
import { cn } from '@/lib/utils';
|
|
5
|
+
|
|
6
|
+
const Avatar = React.forwardRef<
|
|
7
|
+
React.ElementRef<typeof AvatarPrimitive.Root>,
|
|
8
|
+
React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>
|
|
9
|
+
>(({ className, ...props }, ref) => (
|
|
10
|
+
<AvatarPrimitive.Root
|
|
11
|
+
ref={ref}
|
|
12
|
+
className={cn('relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full', className)}
|
|
13
|
+
{...props}
|
|
14
|
+
/>
|
|
15
|
+
));
|
|
16
|
+
Avatar.displayName = AvatarPrimitive.Root.displayName;
|
|
17
|
+
|
|
18
|
+
const AvatarImage = React.forwardRef<
|
|
19
|
+
React.ElementRef<typeof AvatarPrimitive.Image>,
|
|
20
|
+
React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>
|
|
21
|
+
>(({ className, ...props }, ref) => (
|
|
22
|
+
<AvatarPrimitive.Image ref={ref} className={cn('aspect-square h-full w-full', className)} {...props} />
|
|
23
|
+
));
|
|
24
|
+
AvatarImage.displayName = AvatarPrimitive.Image.displayName;
|
|
25
|
+
|
|
26
|
+
const AvatarFallback = React.forwardRef<
|
|
27
|
+
React.ElementRef<typeof AvatarPrimitive.Fallback>,
|
|
28
|
+
React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>
|
|
29
|
+
>(({ className, ...props }, ref) => (
|
|
30
|
+
<AvatarPrimitive.Fallback
|
|
31
|
+
ref={ref}
|
|
32
|
+
className={cn('flex h-full w-full items-center justify-center rounded-full bg-muted', className)}
|
|
33
|
+
{...props}
|
|
34
|
+
/>
|
|
35
|
+
));
|
|
36
|
+
AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
|
|
37
|
+
|
|
38
|
+
export { Avatar, AvatarFallback, AvatarImage };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { cva, type VariantProps } from 'class-variance-authority';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
import { cn } from '@/lib/utils';
|
|
5
|
+
|
|
6
|
+
const badgeVariants = cva(
|
|
7
|
+
'inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',
|
|
8
|
+
{
|
|
9
|
+
variants: {
|
|
10
|
+
variant: {
|
|
11
|
+
default: 'border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80',
|
|
12
|
+
secondary: 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',
|
|
13
|
+
destructive: 'border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80',
|
|
14
|
+
outline: 'text-foreground',
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
defaultVariants: {
|
|
18
|
+
variant: 'default',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {}
|
|
24
|
+
|
|
25
|
+
function Badge({ className, variant, ...props }: BadgeProps) {
|
|
26
|
+
return <div className={cn(badgeVariants({ variant }), className)} {...props} />;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export { Badge, badgeVariants };
|