@gv-tech/design-system 1.0.0 → 1.2.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/.agent/skills/dogfood-components/SKILL.md +34 -0
- package/.agent/skills/maintain-component/SKILL.md +42 -0
- package/.prettierignore +2 -0
- package/CHANGELOG.md +24 -0
- package/dist/App.d.ts.map +1 -1
- package/dist/components/docs/Footer.d.ts.map +1 -1
- package/dist/components/docs/PropsTable.d.ts +13 -0
- package/dist/components/docs/PropsTable.d.ts.map +1 -0
- package/dist/components/docs/Sidebar.d.ts.map +1 -1
- package/dist/components/docs/index.d.ts +1 -0
- package/dist/components/docs/index.d.ts.map +1 -1
- package/dist/components/ui/accordion.test.d.ts +2 -0
- package/dist/components/ui/accordion.test.d.ts.map +1 -0
- package/dist/components/ui/alert-dialog.test.d.ts +2 -0
- package/dist/components/ui/alert-dialog.test.d.ts.map +1 -0
- package/dist/components/ui/alert.test.d.ts +2 -0
- package/dist/components/ui/alert.test.d.ts.map +1 -0
- package/dist/components/ui/aspect-ratio.test.d.ts +2 -0
- package/dist/components/ui/aspect-ratio.test.d.ts.map +1 -0
- package/dist/components/ui/avatar.test.d.ts +2 -0
- package/dist/components/ui/avatar.test.d.ts.map +1 -0
- package/dist/components/ui/badge.test.d.ts +2 -0
- package/dist/components/ui/badge.test.d.ts.map +1 -0
- package/dist/components/ui/breadcrumb.test.d.ts +2 -0
- package/dist/components/ui/breadcrumb.test.d.ts.map +1 -0
- package/dist/components/ui/button.test.d.ts +2 -0
- package/dist/components/ui/button.test.d.ts.map +1 -0
- package/dist/components/ui/calendar.d.ts.map +1 -1
- package/dist/components/ui/calendar.test.d.ts +2 -0
- package/dist/components/ui/calendar.test.d.ts.map +1 -0
- package/dist/components/ui/card.test.d.ts +2 -0
- package/dist/components/ui/card.test.d.ts.map +1 -0
- package/dist/components/ui/carousel.test.d.ts +2 -0
- package/dist/components/ui/carousel.test.d.ts.map +1 -0
- package/dist/components/ui/chart.test.d.ts +2 -0
- package/dist/components/ui/chart.test.d.ts.map +1 -0
- package/dist/components/ui/checkbox.test.d.ts +2 -0
- package/dist/components/ui/checkbox.test.d.ts.map +1 -0
- package/dist/components/ui/collapsible.test.d.ts +2 -0
- package/dist/components/ui/collapsible.test.d.ts.map +1 -0
- package/dist/components/ui/command.test.d.ts +2 -0
- package/dist/components/ui/command.test.d.ts.map +1 -0
- package/dist/components/ui/context-menu.test.d.ts +2 -0
- package/dist/components/ui/context-menu.test.d.ts.map +1 -0
- package/dist/components/ui/dialog.test.d.ts +2 -0
- package/dist/components/ui/dialog.test.d.ts.map +1 -0
- package/dist/components/ui/drawer.test.d.ts +2 -0
- package/dist/components/ui/drawer.test.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.test.d.ts +2 -0
- package/dist/components/ui/dropdown-menu.test.d.ts.map +1 -0
- package/dist/components/ui/form.test.d.ts +2 -0
- package/dist/components/ui/form.test.d.ts.map +1 -0
- package/dist/components/ui/hover-card.test.d.ts +2 -0
- package/dist/components/ui/hover-card.test.d.ts.map +1 -0
- package/dist/components/ui/input.test.d.ts +2 -0
- package/dist/components/ui/input.test.d.ts.map +1 -0
- package/dist/components/ui/label.test.d.ts +2 -0
- package/dist/components/ui/label.test.d.ts.map +1 -0
- package/dist/components/ui/menubar.test.d.ts +2 -0
- package/dist/components/ui/menubar.test.d.ts.map +1 -0
- package/dist/components/ui/navigation-menu.test.d.ts +2 -0
- package/dist/components/ui/navigation-menu.test.d.ts.map +1 -0
- package/dist/components/ui/pagination.test.d.ts +2 -0
- package/dist/components/ui/pagination.test.d.ts.map +1 -0
- package/dist/components/ui/popover.test.d.ts +2 -0
- package/dist/components/ui/popover.test.d.ts.map +1 -0
- package/dist/components/ui/progress.d.ts.map +1 -1
- package/dist/components/ui/progress.test.d.ts +2 -0
- package/dist/components/ui/progress.test.d.ts.map +1 -0
- package/dist/components/ui/radio-group.test.d.ts +2 -0
- package/dist/components/ui/radio-group.test.d.ts.map +1 -0
- package/dist/components/ui/resizable.test.d.ts +2 -0
- package/dist/components/ui/resizable.test.d.ts.map +1 -0
- package/dist/components/ui/scroll-area.test.d.ts +2 -0
- package/dist/components/ui/scroll-area.test.d.ts.map +1 -0
- package/dist/components/ui/select.test.d.ts +2 -0
- package/dist/components/ui/select.test.d.ts.map +1 -0
- package/dist/components/ui/separator.test.d.ts +2 -0
- package/dist/components/ui/separator.test.d.ts.map +1 -0
- package/dist/components/ui/sheet.test.d.ts +2 -0
- package/dist/components/ui/sheet.test.d.ts.map +1 -0
- package/dist/components/ui/skeleton.test.d.ts +2 -0
- package/dist/components/ui/skeleton.test.d.ts.map +1 -0
- package/dist/components/ui/slider.test.d.ts +2 -0
- package/dist/components/ui/slider.test.d.ts.map +1 -0
- package/dist/components/ui/sonner.test.d.ts +2 -0
- package/dist/components/ui/sonner.test.d.ts.map +1 -0
- package/dist/components/ui/switch.test.d.ts +2 -0
- package/dist/components/ui/switch.test.d.ts.map +1 -0
- package/dist/components/ui/table.test.d.ts +2 -0
- package/dist/components/ui/table.test.d.ts.map +1 -0
- package/dist/components/ui/tabs.test.d.ts +2 -0
- package/dist/components/ui/tabs.test.d.ts.map +1 -0
- package/dist/components/ui/textarea.test.d.ts +2 -0
- package/dist/components/ui/textarea.test.d.ts.map +1 -0
- package/dist/components/ui/theme-toggle.d.ts +17 -0
- package/dist/components/ui/theme-toggle.d.ts.map +1 -0
- package/dist/components/ui/toast.test.d.ts +2 -0
- package/dist/components/ui/toast.test.d.ts.map +1 -0
- package/dist/components/ui/toggle-group.test.d.ts +2 -0
- package/dist/components/ui/toggle-group.test.d.ts.map +1 -0
- package/dist/components/ui/toggle.test.d.ts +2 -0
- package/dist/components/ui/toggle.test.d.ts.map +1 -0
- package/dist/components/ui/tooltip.test.d.ts +2 -0
- package/dist/components/ui/tooltip.test.d.ts.map +1 -0
- package/dist/index.cjs.js +3 -3
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +978 -860
- package/dist/index.es.js.map +1 -1
- package/dist/lib/tokens.d.ts +54 -0
- package/dist/lib/tokens.d.ts.map +1 -0
- package/dist/pages/ColorTokensDocs.d.ts +2 -0
- package/dist/pages/ColorTokensDocs.d.ts.map +1 -0
- package/dist/pages/GettingStarted.d.ts.map +1 -1
- package/dist/pages/components/AccordionDocs.d.ts.map +1 -1
- package/dist/pages/components/AlertDialogDocs.d.ts.map +1 -1
- package/dist/pages/components/AlertDocs.d.ts.map +1 -1
- package/dist/pages/components/AspectRatioDocs.d.ts.map +1 -1
- package/dist/pages/components/AvatarDocs.d.ts.map +1 -1
- package/dist/pages/components/BadgeDocs.d.ts.map +1 -1
- package/dist/pages/components/BreadcrumbDocs.d.ts.map +1 -1
- package/dist/pages/components/ButtonDocs.d.ts.map +1 -1
- package/dist/pages/components/CalendarDocs.d.ts.map +1 -1
- package/dist/pages/components/CardDocs.d.ts.map +1 -1
- package/dist/pages/components/CarouselDocs.d.ts.map +1 -1
- package/dist/pages/components/ChartDocs.d.ts.map +1 -1
- package/dist/pages/components/CheckboxDocs.d.ts.map +1 -1
- package/dist/pages/components/CollapsibleDocs.d.ts.map +1 -1
- package/dist/pages/components/CommandDocs.d.ts.map +1 -1
- package/dist/pages/components/ContextMenuDocs.d.ts.map +1 -1
- package/dist/pages/components/DialogDocs.d.ts.map +1 -1
- package/dist/pages/components/DrawerDocs.d.ts.map +1 -1
- package/dist/pages/components/DropdownMenuDocs.d.ts.map +1 -1
- package/dist/pages/components/FormDocs.d.ts.map +1 -1
- package/dist/pages/components/HoverCardDocs.d.ts.map +1 -1
- package/dist/pages/components/InputDocs.d.ts.map +1 -1
- package/dist/pages/components/LabelDocs.d.ts.map +1 -1
- package/dist/pages/components/MenubarDocs.d.ts.map +1 -1
- package/dist/pages/components/NavigationMenuDocs.d.ts.map +1 -1
- package/dist/pages/components/PaginationDocs.d.ts.map +1 -1
- package/dist/pages/components/PopoverDocs.d.ts.map +1 -1
- package/dist/pages/components/ProgressDocs.d.ts.map +1 -1
- package/dist/pages/components/RadioGroupDocs.d.ts.map +1 -1
- package/dist/pages/components/ResizableDocs.d.ts.map +1 -1
- package/dist/pages/components/ScrollAreaDocs.d.ts.map +1 -1
- package/dist/pages/components/SelectDocs.d.ts.map +1 -1
- package/dist/pages/components/SeparatorDocs.d.ts.map +1 -1
- package/dist/pages/components/SheetDocs.d.ts.map +1 -1
- package/dist/pages/components/SkeletonDocs.d.ts.map +1 -1
- package/dist/pages/components/SliderDocs.d.ts.map +1 -1
- package/dist/pages/components/SonnerDocs.d.ts.map +1 -1
- package/dist/pages/components/SwitchDocs.d.ts.map +1 -1
- package/dist/pages/components/TableDocs.d.ts.map +1 -1
- package/dist/pages/components/TabsDocs.d.ts.map +1 -1
- package/dist/pages/components/TextareaDocs.d.ts.map +1 -1
- package/dist/pages/components/ThemeToggleDocs.d.ts +2 -0
- package/dist/pages/components/ThemeToggleDocs.d.ts.map +1 -0
- package/dist/pages/components/ToastDocs.d.ts.map +1 -1
- package/dist/pages/components/ToggleDocs.d.ts.map +1 -1
- package/dist/pages/components/ToggleGroupDocs.d.ts.map +1 -1
- package/dist/pages/components/TooltipDocs.d.ts.map +1 -1
- package/dist/pages/index.d.ts +2 -0
- package/dist/pages/index.d.ts.map +1 -1
- package/dist/registry/accordion.test.json +13 -0
- package/dist/registry/alert-dialog.test.json +13 -0
- package/dist/registry/alert.test.json +13 -0
- package/dist/registry/aspect-ratio.test.json +13 -0
- package/dist/registry/avatar.test.json +13 -0
- package/dist/registry/badge.test.json +13 -0
- package/dist/registry/breadcrumb.test.json +13 -0
- package/dist/registry/button.test.json +13 -0
- package/dist/registry/calendar.json +1 -1
- package/dist/registry/calendar.test.json +13 -0
- package/dist/registry/card.test.json +13 -0
- package/dist/registry/carousel.test.json +13 -0
- package/dist/registry/chart.test.json +13 -0
- package/dist/registry/checkbox.test.json +13 -0
- package/dist/registry/collapsible.test.json +13 -0
- package/dist/registry/command.test.json +13 -0
- package/dist/registry/context-menu.test.json +13 -0
- package/dist/registry/dialog.test.json +13 -0
- package/dist/registry/drawer.test.json +13 -0
- package/dist/registry/dropdown-menu.test.json +13 -0
- package/dist/registry/form.test.json +13 -0
- package/dist/registry/hover-card.test.json +13 -0
- package/dist/registry/index.json +322 -0
- package/dist/registry/input.test.json +13 -0
- package/dist/registry/label.test.json +13 -0
- package/dist/registry/menubar.test.json +13 -0
- package/dist/registry/navigation-menu.test.json +13 -0
- package/dist/registry/pagination.test.json +13 -0
- package/dist/registry/popover.test.json +13 -0
- package/dist/registry/progress.json +1 -1
- package/dist/registry/progress.test.json +13 -0
- package/dist/registry/radio-group.test.json +13 -0
- package/dist/registry/resizable.test.json +13 -0
- package/dist/registry/scroll-area.test.json +13 -0
- package/dist/registry/select.test.json +13 -0
- package/dist/registry/separator.test.json +13 -0
- package/dist/registry/sheet.test.json +13 -0
- package/dist/registry/skeleton.test.json +13 -0
- package/dist/registry/slider.test.json +13 -0
- package/dist/registry/sonner.test.json +13 -0
- package/dist/registry/switch.test.json +13 -0
- package/dist/registry/table.test.json +13 -0
- package/dist/registry/tabs.test.json +13 -0
- package/dist/registry/textarea.test.json +13 -0
- package/dist/registry/theme-toggle.json +13 -0
- package/dist/registry/toast.test.json +13 -0
- package/dist/registry/toggle-group.test.json +13 -0
- package/dist/registry/toggle.test.json +13 -0
- package/dist/registry/tooltip.test.json +13 -0
- package/dist/setupTests.d.ts +2 -0
- package/dist/setupTests.d.ts.map +1 -0
- package/dist/{vendor-ZhQmrf1h.mjs → vendor-CAF5bxO5.mjs} +2451 -2415
- package/dist/vendor-CAF5bxO5.mjs.map +1 -0
- package/dist/{vendor-CMSUBoIg.js → vendor-Hw1BQGd3.js} +17 -17
- package/dist/vendor-Hw1BQGd3.js.map +1 -0
- package/eslint.config.mjs +8 -81
- package/package.json +38 -41
- package/postcss.config.mjs +5 -0
- package/src/App.tsx +37 -7
- package/src/components/docs/Footer.tsx +51 -30
- package/src/components/docs/PropsTable.tsx +43 -0
- package/src/components/docs/Sidebar.tsx +44 -72
- package/src/components/docs/index.ts +1 -0
- package/src/components/ui/accordion.test.tsx +86 -0
- package/src/components/ui/alert-dialog.test.tsx +89 -0
- package/src/components/ui/alert.test.tsx +33 -0
- package/src/components/ui/aspect-ratio.test.tsx +34 -0
- package/src/components/ui/avatar.test.tsx +33 -0
- package/src/components/ui/badge.test.tsx +24 -0
- package/src/components/ui/breadcrumb.test.tsx +55 -0
- package/src/components/ui/button.test.tsx +62 -0
- package/src/components/ui/calendar.test.tsx +23 -0
- package/src/components/ui/calendar.tsx +14 -10
- package/src/components/ui/card.test.tsx +35 -0
- package/src/components/ui/carousel.test.tsx +37 -0
- package/src/components/ui/chart.test.tsx +62 -0
- package/src/components/ui/checkbox.test.tsx +30 -0
- package/src/components/ui/collapsible.test.tsx +51 -0
- package/src/components/ui/command.test.tsx +79 -0
- package/src/components/ui/context-menu.test.tsx +37 -0
- package/src/components/ui/dialog.test.tsx +66 -0
- package/src/components/ui/drawer.test.tsx +68 -0
- package/src/components/ui/dropdown-menu.test.tsx +93 -0
- package/src/components/ui/form.test.tsx +85 -0
- package/src/components/ui/hover-card.test.tsx +48 -0
- package/src/components/ui/input.test.tsx +33 -0
- package/src/components/ui/label.test.tsx +27 -0
- package/src/components/ui/menubar.test.tsx +92 -0
- package/src/components/ui/navigation-menu.test.tsx +53 -0
- package/src/components/ui/pagination.test.tsx +57 -0
- package/src/components/ui/popover.test.tsx +31 -0
- package/src/components/ui/progress.test.tsx +18 -0
- package/src/components/ui/progress.tsx +1 -0
- package/src/components/ui/radio-group.test.tsx +39 -0
- package/src/components/ui/resizable.test.tsx +23 -0
- package/src/components/ui/scroll-area.test.tsx +15 -0
- package/src/components/ui/select.test.tsx +42 -0
- package/src/components/ui/separator.test.tsx +16 -0
- package/src/components/ui/sheet.test.tsx +48 -0
- package/src/components/ui/skeleton.test.tsx +13 -0
- package/src/components/ui/slider.test.tsx +18 -0
- package/src/components/ui/sonner.test.tsx +13 -0
- package/src/components/ui/switch.test.tsx +22 -0
- package/src/components/ui/table.test.tsx +29 -0
- package/src/components/ui/tabs.test.tsx +43 -0
- package/src/components/ui/textarea.test.tsx +21 -0
- package/src/components/ui/theme-toggle.tsx +108 -0
- package/src/components/ui/toast.test.tsx +42 -0
- package/src/components/ui/toggle-group.test.tsx +40 -0
- package/src/components/ui/toggle.test.tsx +21 -0
- package/src/components/ui/tooltip.test.tsx +25 -0
- package/src/globals.css +94 -37
- package/src/index.ts +2 -0
- package/src/lib/tokens.ts +54 -0
- package/src/pages/ColorTokensDocs.tsx +181 -0
- package/src/pages/GettingStarted.tsx +55 -35
- package/src/pages/components/AccordionDocs.tsx +109 -0
- package/src/pages/components/AlertDialogDocs.tsx +88 -0
- package/src/pages/components/AlertDocs.tsx +20 -0
- package/src/pages/components/AspectRatioDocs.tsx +21 -0
- package/src/pages/components/AvatarDocs.tsx +48 -0
- package/src/pages/components/BadgeDocs.tsx +20 -0
- package/src/pages/components/BreadcrumbDocs.tsx +33 -0
- package/src/pages/components/ButtonDocs.tsx +43 -0
- package/src/pages/components/CalendarDocs.tsx +43 -0
- package/src/pages/components/CardDocs.tsx +20 -0
- package/src/pages/components/CarouselDocs.tsx +31 -0
- package/src/pages/components/ChartDocs.tsx +131 -101
- package/src/pages/components/CheckboxDocs.tsx +58 -0
- package/src/pages/components/CollapsibleDocs.tsx +51 -0
- package/src/pages/components/CommandDocs.tsx +109 -0
- package/src/pages/components/ContextMenuDocs.tsx +65 -0
- package/src/pages/components/DialogDocs.tsx +98 -11
- package/src/pages/components/DrawerDocs.tsx +210 -15
- package/src/pages/components/DropdownMenuDocs.tsx +273 -11
- package/src/pages/components/FormDocs.tsx +149 -70
- package/src/pages/components/HoverCardDocs.tsx +82 -5
- package/src/pages/components/InputDocs.tsx +51 -20
- package/src/pages/components/LabelDocs.tsx +40 -9
- package/src/pages/components/MenubarDocs.tsx +191 -18
- package/src/pages/components/NavigationMenuDocs.tsx +147 -49
- package/src/pages/components/PaginationDocs.tsx +27 -2
- package/src/pages/components/PopoverDocs.tsx +124 -2
- package/src/pages/components/ProgressDocs.tsx +54 -24
- package/src/pages/components/RadioGroupDocs.tsx +95 -1
- package/src/pages/components/ResizableDocs.tsx +102 -75
- package/src/pages/components/ScrollAreaDocs.tsx +64 -51
- package/src/pages/components/SelectDocs.tsx +119 -48
- package/src/pages/components/SeparatorDocs.tsx +37 -2
- package/src/pages/components/SheetDocs.tsx +112 -38
- package/src/pages/components/SkeletonDocs.tsx +16 -20
- package/src/pages/components/SliderDocs.tsx +96 -10
- package/src/pages/components/SonnerDocs.tsx +89 -61
- package/src/pages/components/SwitchDocs.tsx +65 -10
- package/src/pages/components/TableDocs.tsx +89 -14
- package/src/pages/components/TabsDocs.tsx +149 -37
- package/src/pages/components/TextareaDocs.tsx +38 -32
- package/src/pages/components/ThemeToggleDocs.tsx +50 -0
- package/src/pages/components/ToastDocs.tsx +104 -65
- package/src/pages/components/ToggleDocs.tsx +55 -38
- package/src/pages/components/ToggleGroupDocs.tsx +96 -58
- package/src/pages/components/TooltipDocs.tsx +112 -3
- package/src/pages/index.ts +2 -0
- package/src/setupTests.ts +47 -0
- package/temp.md +292 -0
- package/vitest.config.ts +4 -0
- package/dist/vendor-CMSUBoIg.js.map +0 -1
- package/dist/vendor-ZhQmrf1h.mjs.map +0 -1
- package/postcss.config.js +0 -6
- package/tailwind.config.js +0 -79
|
@@ -1,15 +1,47 @@
|
|
|
1
1
|
import { ComponentSection, ComponentShowcase } from '@/components/docs/ComponentShowcase';
|
|
2
|
+
import { PropsTable } from '@/components/docs/PropsTable';
|
|
2
3
|
import { Button } from '@/components/ui/button';
|
|
3
4
|
import {
|
|
4
5
|
DropdownMenu,
|
|
6
|
+
DropdownMenuCheckboxItem,
|
|
5
7
|
DropdownMenuContent,
|
|
8
|
+
DropdownMenuGroup,
|
|
6
9
|
DropdownMenuItem,
|
|
7
10
|
DropdownMenuLabel,
|
|
11
|
+
DropdownMenuPortal,
|
|
12
|
+
DropdownMenuRadioGroup,
|
|
13
|
+
DropdownMenuRadioItem,
|
|
8
14
|
DropdownMenuSeparator,
|
|
15
|
+
DropdownMenuShortcut,
|
|
16
|
+
DropdownMenuSub,
|
|
17
|
+
DropdownMenuSubContent,
|
|
18
|
+
DropdownMenuSubTrigger,
|
|
9
19
|
DropdownMenuTrigger,
|
|
10
20
|
} from '@/components/ui/dropdown-menu';
|
|
21
|
+
import {
|
|
22
|
+
Cloud,
|
|
23
|
+
CreditCard,
|
|
24
|
+
Keyboard,
|
|
25
|
+
LifeBuoy,
|
|
26
|
+
LogOut,
|
|
27
|
+
Mail,
|
|
28
|
+
MessageSquare,
|
|
29
|
+
Plus,
|
|
30
|
+
PlusCircle,
|
|
31
|
+
Settings,
|
|
32
|
+
User,
|
|
33
|
+
UserPlus,
|
|
34
|
+
Users,
|
|
35
|
+
} from 'lucide-react';
|
|
36
|
+
import * as React from 'react';
|
|
37
|
+
import { SiGithub } from 'react-icons/si';
|
|
11
38
|
|
|
12
39
|
export function DropdownMenuDocs() {
|
|
40
|
+
const [showStatusBar, setShowStatusBar] = React.useState(true);
|
|
41
|
+
const [showActivityBar, setShowActivityBar] = React.useState(false);
|
|
42
|
+
const [showPanel, setShowPanel] = React.useState(false);
|
|
43
|
+
const [position, setPosition] = React.useState('bottom');
|
|
44
|
+
|
|
13
45
|
return (
|
|
14
46
|
<ComponentSection
|
|
15
47
|
title="Dropdown Menu"
|
|
@@ -17,18 +49,28 @@ export function DropdownMenuDocs() {
|
|
|
17
49
|
>
|
|
18
50
|
<ComponentShowcase
|
|
19
51
|
title="Default"
|
|
20
|
-
description="A
|
|
52
|
+
description="A simple dropdown menu."
|
|
21
53
|
code={`<DropdownMenu>
|
|
22
54
|
<DropdownMenuTrigger asChild>
|
|
23
55
|
<Button variant="outline">Open</Button>
|
|
24
56
|
</DropdownMenuTrigger>
|
|
25
|
-
<DropdownMenuContent>
|
|
57
|
+
<DropdownMenuContent className="w-56">
|
|
26
58
|
<DropdownMenuLabel>My Account</DropdownMenuLabel>
|
|
27
59
|
<DropdownMenuSeparator />
|
|
28
|
-
<
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
60
|
+
<DropdownMenuGroup>
|
|
61
|
+
<DropdownMenuItem>
|
|
62
|
+
<User className="mr-2 h-4 w-4" />
|
|
63
|
+
<span>Profile</span>
|
|
64
|
+
<DropdownMenuShortcut>⇧⌘P</DropdownMenuShortcut>
|
|
65
|
+
</DropdownMenuItem>
|
|
66
|
+
...
|
|
67
|
+
</DropdownMenuGroup>
|
|
68
|
+
...
|
|
69
|
+
<DropdownMenuItem>
|
|
70
|
+
<SiGithub className="mr-2 h-4 w-4" />
|
|
71
|
+
<span>GitHub</span>
|
|
72
|
+
</DropdownMenuItem>
|
|
73
|
+
...
|
|
32
74
|
</DropdownMenuContent>
|
|
33
75
|
</DropdownMenu>`}
|
|
34
76
|
>
|
|
@@ -36,16 +78,236 @@ export function DropdownMenuDocs() {
|
|
|
36
78
|
<DropdownMenuTrigger asChild>
|
|
37
79
|
<Button variant="outline">Open</Button>
|
|
38
80
|
</DropdownMenuTrigger>
|
|
39
|
-
<DropdownMenuContent>
|
|
81
|
+
<DropdownMenuContent className="w-56">
|
|
40
82
|
<DropdownMenuLabel>My Account</DropdownMenuLabel>
|
|
41
83
|
<DropdownMenuSeparator />
|
|
42
|
-
<
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
84
|
+
<DropdownMenuGroup>
|
|
85
|
+
<DropdownMenuItem>
|
|
86
|
+
<User className="mr-2 h-4 w-4" />
|
|
87
|
+
<span>Profile</span>
|
|
88
|
+
<DropdownMenuShortcut>⇧⌘P</DropdownMenuShortcut>
|
|
89
|
+
</DropdownMenuItem>
|
|
90
|
+
<DropdownMenuItem>
|
|
91
|
+
<CreditCard className="mr-2 h-4 w-4" />
|
|
92
|
+
<span>Billing</span>
|
|
93
|
+
<DropdownMenuShortcut>⌘B</DropdownMenuShortcut>
|
|
94
|
+
</DropdownMenuItem>
|
|
95
|
+
<DropdownMenuItem>
|
|
96
|
+
<Settings className="mr-2 h-4 w-4" />
|
|
97
|
+
<span>Settings</span>
|
|
98
|
+
<DropdownMenuShortcut>⌘S</DropdownMenuShortcut>
|
|
99
|
+
</DropdownMenuItem>
|
|
100
|
+
<DropdownMenuItem>
|
|
101
|
+
<Keyboard className="mr-2 h-4 w-4" />
|
|
102
|
+
<span>Keyboard shortcuts</span>
|
|
103
|
+
<DropdownMenuShortcut>⌘K</DropdownMenuShortcut>
|
|
104
|
+
</DropdownMenuItem>
|
|
105
|
+
</DropdownMenuGroup>
|
|
106
|
+
<DropdownMenuSeparator />
|
|
107
|
+
<DropdownMenuGroup>
|
|
108
|
+
<DropdownMenuItem>
|
|
109
|
+
<Users className="mr-2 h-4 w-4" />
|
|
110
|
+
<span>Team</span>
|
|
111
|
+
</DropdownMenuItem>
|
|
112
|
+
<DropdownMenuSub>
|
|
113
|
+
<DropdownMenuSubTrigger>
|
|
114
|
+
<UserPlus className="mr-2 h-4 w-4" />
|
|
115
|
+
<span>Invite users</span>
|
|
116
|
+
</DropdownMenuSubTrigger>
|
|
117
|
+
<DropdownMenuPortal>
|
|
118
|
+
<DropdownMenuSubContent>
|
|
119
|
+
<DropdownMenuItem>
|
|
120
|
+
<Mail className="mr-2 h-4 w-4" />
|
|
121
|
+
<span>Email</span>
|
|
122
|
+
</DropdownMenuItem>
|
|
123
|
+
<DropdownMenuItem>
|
|
124
|
+
<MessageSquare className="mr-2 h-4 w-4" />
|
|
125
|
+
<span>Message</span>
|
|
126
|
+
</DropdownMenuItem>
|
|
127
|
+
<DropdownMenuSeparator />
|
|
128
|
+
<DropdownMenuItem>
|
|
129
|
+
<PlusCircle className="mr-2 h-4 w-4" />
|
|
130
|
+
<span>More...</span>
|
|
131
|
+
</DropdownMenuItem>
|
|
132
|
+
</DropdownMenuSubContent>
|
|
133
|
+
</DropdownMenuPortal>
|
|
134
|
+
</DropdownMenuSub>
|
|
135
|
+
<DropdownMenuItem>
|
|
136
|
+
<Plus className="mr-2 h-4 w-4" />
|
|
137
|
+
<span>New Team</span>
|
|
138
|
+
<DropdownMenuShortcut>⌘+T</DropdownMenuShortcut>
|
|
139
|
+
</DropdownMenuItem>
|
|
140
|
+
</DropdownMenuGroup>
|
|
141
|
+
<DropdownMenuSeparator />
|
|
142
|
+
<DropdownMenuItem>
|
|
143
|
+
<SiGithub className="mr-2 h-4 w-4" />
|
|
144
|
+
<span>GitHub</span>
|
|
145
|
+
</DropdownMenuItem>
|
|
146
|
+
<DropdownMenuItem>
|
|
147
|
+
<LifeBuoy className="mr-2 h-4 w-4" />
|
|
148
|
+
<span>Support</span>
|
|
149
|
+
</DropdownMenuItem>
|
|
150
|
+
<DropdownMenuItem disabled>
|
|
151
|
+
<Cloud className="mr-2 h-4 w-4" />
|
|
152
|
+
<span>API</span>
|
|
153
|
+
</DropdownMenuItem>
|
|
154
|
+
<DropdownMenuSeparator />
|
|
155
|
+
<DropdownMenuItem>
|
|
156
|
+
<LogOut className="mr-2 h-4 w-4" />
|
|
157
|
+
<span>Log out</span>
|
|
158
|
+
<DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut>
|
|
159
|
+
</DropdownMenuItem>
|
|
160
|
+
</DropdownMenuContent>
|
|
161
|
+
</DropdownMenu>
|
|
162
|
+
</ComponentShowcase>
|
|
163
|
+
|
|
164
|
+
<ComponentShowcase
|
|
165
|
+
title="Checkboxes and Radios"
|
|
166
|
+
description="A dropdown menu with checkboxes and radio items."
|
|
167
|
+
code={`<DropdownMenu>
|
|
168
|
+
<DropdownMenuTrigger asChild>
|
|
169
|
+
<Button variant="outline">Open</Button>
|
|
170
|
+
</DropdownMenuTrigger>
|
|
171
|
+
<DropdownMenuContent className="w-56">
|
|
172
|
+
<DropdownMenuLabel>Appearance</DropdownMenuLabel>
|
|
173
|
+
<DropdownMenuSeparator />
|
|
174
|
+
<DropdownMenuCheckboxItem
|
|
175
|
+
checked={showStatusBar}
|
|
176
|
+
onCheckedChange={setShowStatusBar}
|
|
177
|
+
>
|
|
178
|
+
Status Bar
|
|
179
|
+
</DropdownMenuCheckboxItem>
|
|
180
|
+
<DropdownMenuCheckboxItem
|
|
181
|
+
checked={showActivityBar}
|
|
182
|
+
onCheckedChange={setShowActivityBar}
|
|
183
|
+
disabled
|
|
184
|
+
>
|
|
185
|
+
Activity Bar
|
|
186
|
+
</DropdownMenuCheckboxItem>
|
|
187
|
+
<DropdownMenuCheckboxItem
|
|
188
|
+
checked={showPanel}
|
|
189
|
+
onCheckedChange={setShowPanel}
|
|
190
|
+
>
|
|
191
|
+
Panel
|
|
192
|
+
</DropdownMenuCheckboxItem>
|
|
193
|
+
<DropdownMenuSeparator />
|
|
194
|
+
<DropdownMenuLabel>Panel Position</DropdownMenuLabel>
|
|
195
|
+
<DropdownMenuSeparator />
|
|
196
|
+
<DropdownMenuRadioGroup value={position} onValueChange={setPosition}>
|
|
197
|
+
<DropdownMenuRadioItem value="top">Top</DropdownMenuRadioItem>
|
|
198
|
+
<DropdownMenuRadioItem value="bottom">Bottom</DropdownMenuRadioItem>
|
|
199
|
+
<DropdownMenuRadioItem value="right">Right</DropdownMenuRadioItem>
|
|
200
|
+
</DropdownMenuRadioGroup>
|
|
201
|
+
</DropdownMenuContent>
|
|
202
|
+
</DropdownMenu>`}
|
|
203
|
+
>
|
|
204
|
+
<DropdownMenu>
|
|
205
|
+
<DropdownMenuTrigger asChild>
|
|
206
|
+
<Button variant="outline">Open</Button>
|
|
207
|
+
</DropdownMenuTrigger>
|
|
208
|
+
<DropdownMenuContent className="w-56">
|
|
209
|
+
<DropdownMenuLabel>Appearance</DropdownMenuLabel>
|
|
210
|
+
<DropdownMenuSeparator />
|
|
211
|
+
<DropdownMenuCheckboxItem checked={showStatusBar} onCheckedChange={setShowStatusBar}>
|
|
212
|
+
Status Bar
|
|
213
|
+
</DropdownMenuCheckboxItem>
|
|
214
|
+
<DropdownMenuCheckboxItem checked={showActivityBar} onCheckedChange={setShowActivityBar} disabled>
|
|
215
|
+
Activity Bar
|
|
216
|
+
</DropdownMenuCheckboxItem>
|
|
217
|
+
<DropdownMenuCheckboxItem checked={showPanel} onCheckedChange={setShowPanel}>
|
|
218
|
+
Panel
|
|
219
|
+
</DropdownMenuCheckboxItem>
|
|
220
|
+
<DropdownMenuSeparator />
|
|
221
|
+
<DropdownMenuLabel>Panel Position</DropdownMenuLabel>
|
|
222
|
+
<DropdownMenuSeparator />
|
|
223
|
+
<DropdownMenuRadioGroup value={position} onValueChange={setPosition}>
|
|
224
|
+
<DropdownMenuRadioItem value="top">Top</DropdownMenuRadioItem>
|
|
225
|
+
<DropdownMenuRadioItem value="bottom">Bottom</DropdownMenuRadioItem>
|
|
226
|
+
<DropdownMenuRadioItem value="right">Right</DropdownMenuRadioItem>
|
|
227
|
+
</DropdownMenuRadioGroup>
|
|
46
228
|
</DropdownMenuContent>
|
|
47
229
|
</DropdownMenu>
|
|
48
230
|
</ComponentShowcase>
|
|
231
|
+
|
|
232
|
+
<div className="space-y-4">
|
|
233
|
+
<h3 className="text-xl font-semibold">Props</h3>
|
|
234
|
+
<p className="text-sm text-muted-foreground">
|
|
235
|
+
The DropdownMenu component is built on top of{' '}
|
|
236
|
+
<a
|
|
237
|
+
href="https://www.radix-ui.com/primitives/docs/components/dropdown-menu"
|
|
238
|
+
className="underline"
|
|
239
|
+
target="_blank"
|
|
240
|
+
rel="noreferrer"
|
|
241
|
+
>
|
|
242
|
+
Radix UI Dropdown Menu
|
|
243
|
+
</a>
|
|
244
|
+
.
|
|
245
|
+
</p>
|
|
246
|
+
|
|
247
|
+
<h4 className="text-lg font-medium mt-6">DropdownMenu (Root)</h4>
|
|
248
|
+
<PropsTable
|
|
249
|
+
props={[
|
|
250
|
+
{
|
|
251
|
+
name: 'open',
|
|
252
|
+
type: 'boolean',
|
|
253
|
+
description: 'The controlled open state of the dropdown menu.',
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
name: 'defaultOpen',
|
|
257
|
+
type: 'boolean',
|
|
258
|
+
description: 'The default open state when uncontrolled.',
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
name: 'onOpenChange',
|
|
262
|
+
type: '(open: boolean) => void',
|
|
263
|
+
description: 'Event handler called when the open state changes.',
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
name: 'modal',
|
|
267
|
+
type: 'boolean',
|
|
268
|
+
defaultValue: 'true',
|
|
269
|
+
description: 'The modality of the dropdown menu.',
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
name: 'dir',
|
|
273
|
+
type: '"ltr" | "rtl"',
|
|
274
|
+
description: 'The reading direction of the dropdown menu.',
|
|
275
|
+
},
|
|
276
|
+
]}
|
|
277
|
+
/>
|
|
278
|
+
|
|
279
|
+
<h4 className="text-lg font-medium mt-6">DropdownMenuCheckboxItem</h4>
|
|
280
|
+
<PropsTable
|
|
281
|
+
props={[
|
|
282
|
+
{
|
|
283
|
+
name: 'checked',
|
|
284
|
+
type: 'boolean | "indeterminate"',
|
|
285
|
+
description: 'The controlled checked state of the item.',
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
name: 'onCheckedChange',
|
|
289
|
+
type: '(checked: boolean) => void',
|
|
290
|
+
description: 'Event handler called when the checked state changes.',
|
|
291
|
+
},
|
|
292
|
+
]}
|
|
293
|
+
/>
|
|
294
|
+
|
|
295
|
+
<h4 className="text-lg font-medium mt-6">DropdownMenuRadioGroup</h4>
|
|
296
|
+
<PropsTable
|
|
297
|
+
props={[
|
|
298
|
+
{
|
|
299
|
+
name: 'value',
|
|
300
|
+
type: 'string',
|
|
301
|
+
description: 'The value of the selected item in the group.',
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
name: 'onValueChange',
|
|
305
|
+
type: '(value: string) => void',
|
|
306
|
+
description: 'Event handler called when the value changes.',
|
|
307
|
+
},
|
|
308
|
+
]}
|
|
309
|
+
/>
|
|
310
|
+
</div>
|
|
49
311
|
</ComponentSection>
|
|
50
312
|
);
|
|
51
313
|
}
|
|
@@ -1,84 +1,163 @@
|
|
|
1
1
|
import { ComponentSection, ComponentShowcase } from '@/components/docs/ComponentShowcase';
|
|
2
|
+
import { PropsTable } from '@/components/docs/PropsTable';
|
|
2
3
|
import { Button } from '@/components/ui/button';
|
|
4
|
+
import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form';
|
|
3
5
|
import { Input } from '@/components/ui/input';
|
|
4
|
-
import {
|
|
6
|
+
import { zodResolver } from '@hookform/resolvers/zod';
|
|
7
|
+
import { useForm } from 'react-hook-form';
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
|
|
10
|
+
const formSchema = z.object({
|
|
11
|
+
username: z.string().min(2, {
|
|
12
|
+
message: 'Username must be at least 2 characters.',
|
|
13
|
+
}),
|
|
14
|
+
});
|
|
5
15
|
|
|
6
16
|
export function FormDocs() {
|
|
17
|
+
const form = useForm<z.infer<typeof formSchema>>({
|
|
18
|
+
resolver: zodResolver(formSchema),
|
|
19
|
+
defaultValues: {
|
|
20
|
+
username: '',
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
function onSubmit(values: z.infer<typeof formSchema>) {
|
|
25
|
+
console.log(values);
|
|
26
|
+
}
|
|
27
|
+
|
|
7
28
|
return (
|
|
8
|
-
<ComponentSection title="Form" description="Building forms with React Hook Form and Zod
|
|
29
|
+
<ComponentSection title="Form" description="Building forms with React Hook Form and Zod.">
|
|
9
30
|
<ComponentShowcase
|
|
10
|
-
title="
|
|
11
|
-
description="A simple form
|
|
12
|
-
code={
|
|
13
|
-
<div className="space-y-2">
|
|
14
|
-
<Label htmlFor="email">Email</Label>
|
|
15
|
-
<Input type="email" id="email" placeholder="Enter your email" />
|
|
16
|
-
</div>
|
|
17
|
-
<div className="space-y-2">
|
|
18
|
-
<Label htmlFor="password">Password</Label>
|
|
19
|
-
<Input type="password" id="password" placeholder="Enter your password" />
|
|
20
|
-
</div>
|
|
21
|
-
<Button type="submit" className="w-full">Submit</Button>
|
|
22
|
-
</form>`}
|
|
23
|
-
>
|
|
24
|
-
<form className="space-y-4 w-full max-w-sm">
|
|
25
|
-
<div className="space-y-2">
|
|
26
|
-
<Label htmlFor="email">Email</Label>
|
|
27
|
-
<Input type="email" id="email" placeholder="Enter your email" />
|
|
28
|
-
</div>
|
|
29
|
-
<div className="space-y-2">
|
|
30
|
-
<Label htmlFor="password">Password</Label>
|
|
31
|
-
<Input type="password" id="password" placeholder="Enter your password" />
|
|
32
|
-
</div>
|
|
33
|
-
<Button type="submit" className="w-full">
|
|
34
|
-
Submit
|
|
35
|
-
</Button>
|
|
36
|
-
</form>
|
|
37
|
-
</ComponentShowcase>
|
|
31
|
+
title="Default"
|
|
32
|
+
description="A simple form with validation."
|
|
33
|
+
code={`"use client"
|
|
38
34
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
code={`<form className="flex gap-2 items-end w-full max-w-md">
|
|
43
|
-
<div className="flex-1 space-y-2">
|
|
44
|
-
<Label htmlFor="inline-email">Email</Label>
|
|
45
|
-
<Input type="email" id="inline-email" placeholder="Enter your email" />
|
|
46
|
-
</div>
|
|
47
|
-
<Button type="submit">Subscribe</Button>
|
|
48
|
-
</form>`}
|
|
49
|
-
>
|
|
50
|
-
<form className="flex gap-2 items-end w-full max-w-md">
|
|
51
|
-
<div className="flex-1 space-y-2">
|
|
52
|
-
<Label htmlFor="inline-email">Email</Label>
|
|
53
|
-
<Input type="email" id="inline-email" placeholder="Enter your email" />
|
|
54
|
-
</div>
|
|
55
|
-
<Button type="submit">Subscribe</Button>
|
|
56
|
-
</form>
|
|
57
|
-
</ComponentShowcase>
|
|
35
|
+
import { zodResolver } from "@hookform/resolvers/zod"
|
|
36
|
+
import { useForm } from "react-hook-form"
|
|
37
|
+
import { z } from "zod"
|
|
58
38
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
39
|
+
import { Button } from "@/components/ui/button"
|
|
40
|
+
import {
|
|
41
|
+
Form,
|
|
42
|
+
FormControl,
|
|
43
|
+
FormDescription,
|
|
44
|
+
FormField,
|
|
45
|
+
FormItem,
|
|
46
|
+
FormLabel,
|
|
47
|
+
FormMessage,
|
|
48
|
+
} from "@/components/ui/form"
|
|
49
|
+
import { Input } from "@/components/ui/input"
|
|
50
|
+
|
|
51
|
+
const formSchema = z.object({
|
|
52
|
+
username: z.string().min(2, {
|
|
53
|
+
message: "Username must be at least 2 characters.",
|
|
54
|
+
}),
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
export function ProfileForm() {
|
|
58
|
+
const form = useForm<z.infer<typeof formSchema>>({
|
|
59
|
+
resolver: zodResolver(formSchema),
|
|
60
|
+
defaultValues: {
|
|
61
|
+
username: "",
|
|
62
|
+
},
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
function onSubmit(values: z.infer<typeof formSchema>) {
|
|
66
|
+
console.log(values)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return (
|
|
70
|
+
<Form {...form}>
|
|
71
|
+
<form onSubmit={form.handleSubmit(onSubmit)} className="space-y-8">
|
|
72
|
+
<FormField
|
|
73
|
+
control={form.control}
|
|
74
|
+
name="username"
|
|
75
|
+
render={({ field }) => (
|
|
76
|
+
<FormItem>
|
|
77
|
+
<FormLabel>Username</FormLabel>
|
|
78
|
+
<FormControl>
|
|
79
|
+
<Input placeholder="shadcn" {...field} />
|
|
80
|
+
</FormControl>
|
|
81
|
+
<FormDescription>
|
|
82
|
+
This is your public display name.
|
|
83
|
+
</FormDescription>
|
|
84
|
+
<FormMessage />
|
|
85
|
+
</FormItem>
|
|
86
|
+
)}
|
|
87
|
+
/>
|
|
88
|
+
<Button type="submit">Submit</Button>
|
|
89
|
+
</form>
|
|
90
|
+
</Form>
|
|
91
|
+
)
|
|
92
|
+
}`}
|
|
72
93
|
>
|
|
73
|
-
<form
|
|
74
|
-
<
|
|
75
|
-
<
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
94
|
+
<Form {...form}>
|
|
95
|
+
<form onSubmit={form.handleSubmit(onSubmit)} className="space-y-8">
|
|
96
|
+
<FormField
|
|
97
|
+
control={form.control}
|
|
98
|
+
name="username"
|
|
99
|
+
render={({ field }) => (
|
|
100
|
+
<FormItem>
|
|
101
|
+
<FormLabel>Username</FormLabel>
|
|
102
|
+
<FormControl>
|
|
103
|
+
<Input placeholder="shadcn" {...field} />
|
|
104
|
+
</FormControl>
|
|
105
|
+
<FormDescription>This is your public display name.</FormDescription>
|
|
106
|
+
<FormMessage />
|
|
107
|
+
</FormItem>
|
|
108
|
+
)}
|
|
109
|
+
/>
|
|
110
|
+
<Button type="submit">Submit</Button>
|
|
111
|
+
</form>
|
|
112
|
+
</Form>
|
|
81
113
|
</ComponentShowcase>
|
|
114
|
+
|
|
115
|
+
<div className="space-y-4">
|
|
116
|
+
<h3 className="text-xl font-semibold">Props</h3>
|
|
117
|
+
<p className="text-sm text-muted-foreground">
|
|
118
|
+
The Form component is built on top of{' '}
|
|
119
|
+
<a href="https://react-hook-form.com/" className="underline" target="_blank" rel="noreferrer">
|
|
120
|
+
React Hook Form
|
|
121
|
+
</a>
|
|
122
|
+
.
|
|
123
|
+
</p>
|
|
124
|
+
|
|
125
|
+
<h4 className="text-lg font-medium mt-6">FormField</h4>
|
|
126
|
+
<PropsTable
|
|
127
|
+
props={[
|
|
128
|
+
{
|
|
129
|
+
name: 'control',
|
|
130
|
+
type: 'Control<TFieldValues>',
|
|
131
|
+
description: 'The control object from useForm.',
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
name: 'name',
|
|
135
|
+
type: 'FieldPath<TFieldValues>',
|
|
136
|
+
description: 'The name of the field.',
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
name: 'render',
|
|
140
|
+
type: '({ field }) => React.ReactElement',
|
|
141
|
+
description: 'Render prop for the field.',
|
|
142
|
+
},
|
|
143
|
+
]}
|
|
144
|
+
/>
|
|
145
|
+
|
|
146
|
+
<h4 className="text-lg font-medium mt-6">FormItem</h4>
|
|
147
|
+
<p className="text-sm text-muted-foreground">Context provider for form fields.</p>
|
|
148
|
+
|
|
149
|
+
<h4 className="text-lg font-medium mt-6">FormLabel</h4>
|
|
150
|
+
<p className="text-sm text-muted-foreground">Wrapper around Label with error state handling.</p>
|
|
151
|
+
|
|
152
|
+
<h4 className="text-lg font-medium mt-6">FormControl</h4>
|
|
153
|
+
<p className="text-sm text-muted-foreground">Wrapper around the input element to handle accessibility.</p>
|
|
154
|
+
|
|
155
|
+
<h4 className="text-lg font-medium mt-6">FormDescription</h4>
|
|
156
|
+
<p className="text-sm text-muted-foreground">Helper text for the field.</p>
|
|
157
|
+
|
|
158
|
+
<h4 className="text-lg font-medium mt-6">FormMessage</h4>
|
|
159
|
+
<p className="text-sm text-muted-foreground">Displays error messages.</p>
|
|
160
|
+
</div>
|
|
82
161
|
</ComponentSection>
|
|
83
162
|
);
|
|
84
163
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ComponentSection, ComponentShowcase } from '@/components/docs/ComponentShowcase';
|
|
2
|
+
import { PropsTable } from '@/components/docs/PropsTable';
|
|
2
3
|
import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
|
|
3
4
|
import { Button } from '@/components/ui/button';
|
|
4
5
|
import { HoverCard, HoverCardContent, HoverCardTrigger } from '@/components/ui/hover-card';
|
|
@@ -9,7 +10,7 @@ export function HoverCardDocs() {
|
|
|
9
10
|
<ComponentSection title="Hover Card" description="For sighted users to preview content available behind a link.">
|
|
10
11
|
<ComponentShowcase
|
|
11
12
|
title="Default"
|
|
12
|
-
description="A hover card showing user
|
|
13
|
+
description="A hover card showing user details."
|
|
13
14
|
code={`<HoverCard>
|
|
14
15
|
<HoverCardTrigger asChild>
|
|
15
16
|
<Button variant="link">@nextjs</Button>
|
|
@@ -22,10 +23,14 @@ export function HoverCardDocs() {
|
|
|
22
23
|
</Avatar>
|
|
23
24
|
<div className="space-y-1">
|
|
24
25
|
<h4 className="text-sm font-semibold">@nextjs</h4>
|
|
25
|
-
<p className="text-sm">
|
|
26
|
+
<p className="text-sm">
|
|
27
|
+
The React Framework – created and maintained by @vercel.
|
|
28
|
+
</p>
|
|
26
29
|
<div className="flex items-center pt-2">
|
|
27
|
-
<CalendarDays className="mr-2 h-4 w-4 opacity-70" />
|
|
28
|
-
<span className="text-xs text-muted-foreground">
|
|
30
|
+
<CalendarDays className="mr-2 h-4 w-4 opacity-70" />{" "}
|
|
31
|
+
<span className="text-xs text-muted-foreground">
|
|
32
|
+
Joined December 2021
|
|
33
|
+
</span>
|
|
29
34
|
</div>
|
|
30
35
|
</div>
|
|
31
36
|
</div>
|
|
@@ -46,7 +51,7 @@ export function HoverCardDocs() {
|
|
|
46
51
|
<h4 className="text-sm font-semibold">@nextjs</h4>
|
|
47
52
|
<p className="text-sm">The React Framework – created and maintained by @vercel.</p>
|
|
48
53
|
<div className="flex items-center pt-2">
|
|
49
|
-
<CalendarDays className="mr-2 h-4 w-4 opacity-70" />
|
|
54
|
+
<CalendarDays className="mr-2 h-4 w-4 opacity-70" />{' '}
|
|
50
55
|
<span className="text-xs text-muted-foreground">Joined December 2021</span>
|
|
51
56
|
</div>
|
|
52
57
|
</div>
|
|
@@ -54,6 +59,78 @@ export function HoverCardDocs() {
|
|
|
54
59
|
</HoverCardContent>
|
|
55
60
|
</HoverCard>
|
|
56
61
|
</ComponentShowcase>
|
|
62
|
+
|
|
63
|
+
<div className="space-y-4">
|
|
64
|
+
<h3 className="text-xl font-semibold">Props</h3>
|
|
65
|
+
<p className="text-sm text-muted-foreground">
|
|
66
|
+
The Hover Card component is built on top of{' '}
|
|
67
|
+
<a
|
|
68
|
+
href="https://www.radix-ui.com/primitives/docs/components/hover-card"
|
|
69
|
+
className="underline"
|
|
70
|
+
target="_blank"
|
|
71
|
+
rel="noreferrer"
|
|
72
|
+
>
|
|
73
|
+
Radix UI Hover Card
|
|
74
|
+
</a>
|
|
75
|
+
.
|
|
76
|
+
</p>
|
|
77
|
+
|
|
78
|
+
<h4 className="text-lg font-medium mt-6">HoverCard (Root)</h4>
|
|
79
|
+
<PropsTable
|
|
80
|
+
props={[
|
|
81
|
+
{
|
|
82
|
+
name: 'open',
|
|
83
|
+
type: 'boolean',
|
|
84
|
+
description: 'The controlled open state of the hover card.',
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'defaultOpen',
|
|
88
|
+
type: 'boolean',
|
|
89
|
+
description: 'The default open state when uncontrolled.',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: 'onOpenChange',
|
|
93
|
+
type: '(open: boolean) => void',
|
|
94
|
+
description: 'Event handler called when the open state changes.',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: 'openDelay',
|
|
98
|
+
type: 'number',
|
|
99
|
+
defaultValue: '700',
|
|
100
|
+
description: 'The duration from when the mouse enters the trigger until the hover card opens.',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'closeDelay',
|
|
104
|
+
type: 'number',
|
|
105
|
+
defaultValue: '300',
|
|
106
|
+
description: 'The duration from when the mouse leaves the trigger until the hover card closes.',
|
|
107
|
+
},
|
|
108
|
+
]}
|
|
109
|
+
/>
|
|
110
|
+
|
|
111
|
+
<h4 className="text-lg font-medium mt-6">HoverCardContent</h4>
|
|
112
|
+
<PropsTable
|
|
113
|
+
props={[
|
|
114
|
+
{
|
|
115
|
+
name: 'forceMount',
|
|
116
|
+
type: 'boolean',
|
|
117
|
+
description: 'Used to force mounting when more control is needed.',
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
name: 'sideOffset',
|
|
121
|
+
type: 'number',
|
|
122
|
+
defaultValue: '4',
|
|
123
|
+
description: 'The distance in pixels from the trigger.',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
name: 'align',
|
|
127
|
+
type: '"start" | "center" | "end"',
|
|
128
|
+
defaultValue: '"center"',
|
|
129
|
+
description: 'The preferred alignment against the trigger.',
|
|
130
|
+
},
|
|
131
|
+
]}
|
|
132
|
+
/>
|
|
133
|
+
</div>
|
|
57
134
|
</ComponentSection>
|
|
58
135
|
);
|
|
59
136
|
}
|