@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,17 +1,17 @@
|
|
|
1
1
|
import { ComponentSection, ComponentShowcase } from '@/components/docs/ComponentShowcase';
|
|
2
|
+
import { PropsTable } from '@/components/docs/PropsTable';
|
|
2
3
|
import { Label } from '@/components/ui/label';
|
|
3
4
|
import { Switch } from '@/components/ui/switch';
|
|
4
5
|
|
|
5
6
|
export function SwitchDocs() {
|
|
6
7
|
return (
|
|
7
|
-
<ComponentSection
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
<ComponentSection
|
|
9
|
+
title="Switch"
|
|
10
|
+
description="A control that allows the user to toggle between checked and not checked."
|
|
11
|
+
>
|
|
12
12
|
<ComponentShowcase
|
|
13
|
-
title="
|
|
14
|
-
description="A switch
|
|
13
|
+
title="Default"
|
|
14
|
+
description="A default switch."
|
|
15
15
|
code={`<div className="flex items-center space-x-2">
|
|
16
16
|
<Switch id="airplane-mode" />
|
|
17
17
|
<Label htmlFor="airplane-mode">Airplane Mode</Label>
|
|
@@ -23,9 +23,64 @@ export function SwitchDocs() {
|
|
|
23
23
|
</div>
|
|
24
24
|
</ComponentShowcase>
|
|
25
25
|
|
|
26
|
-
<
|
|
27
|
-
<
|
|
28
|
-
|
|
26
|
+
<div className="space-y-4">
|
|
27
|
+
<h3 className="text-xl font-semibold">Props</h3>
|
|
28
|
+
<p className="text-sm text-muted-foreground">
|
|
29
|
+
The Switch component is built on top of{' '}
|
|
30
|
+
<a
|
|
31
|
+
href="https://www.radix-ui.com/primitives/docs/components/switch"
|
|
32
|
+
className="underline"
|
|
33
|
+
target="_blank"
|
|
34
|
+
rel="noreferrer"
|
|
35
|
+
>
|
|
36
|
+
Radix UI Switch
|
|
37
|
+
</a>
|
|
38
|
+
.
|
|
39
|
+
</p>
|
|
40
|
+
|
|
41
|
+
<h4 className="text-lg font-medium mt-6">Switch (Root)</h4>
|
|
42
|
+
<PropsTable
|
|
43
|
+
props={[
|
|
44
|
+
{
|
|
45
|
+
name: 'defaultChecked',
|
|
46
|
+
type: 'boolean',
|
|
47
|
+
description: 'The value of the switch when initially rendered.',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'checked',
|
|
51
|
+
type: 'boolean',
|
|
52
|
+
description: 'The controlled value of the switch.',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: 'onCheckedChange',
|
|
56
|
+
type: '(checked: boolean) => void',
|
|
57
|
+
description: 'Event handler called when the value changes.',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'disabled',
|
|
61
|
+
type: 'boolean',
|
|
62
|
+
description: 'When true, prevents the user from interacting with the switch.',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'required',
|
|
66
|
+
type: 'boolean',
|
|
67
|
+
description:
|
|
68
|
+
'When true, indicates that the user must toggle the switch before the owning form can be submitted.',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'name',
|
|
72
|
+
type: 'string',
|
|
73
|
+
description: 'The name of the switch. Submitted with its owning form as part of a name/value pair.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: 'value',
|
|
77
|
+
type: 'string',
|
|
78
|
+
defaultValue: '"on"',
|
|
79
|
+
description: 'The value given as data when submitted with a name.',
|
|
80
|
+
},
|
|
81
|
+
]}
|
|
82
|
+
/>
|
|
83
|
+
</div>
|
|
29
84
|
</ComponentSection>
|
|
30
85
|
);
|
|
31
86
|
}
|
|
@@ -1,20 +1,67 @@
|
|
|
1
1
|
import { ComponentSection, ComponentShowcase } from '@/components/docs/ComponentShowcase';
|
|
2
|
-
import {
|
|
2
|
+
import { PropsTable } from '@/components/docs/PropsTable';
|
|
3
|
+
import {
|
|
4
|
+
Table,
|
|
5
|
+
TableBody,
|
|
6
|
+
TableCaption,
|
|
7
|
+
TableCell,
|
|
8
|
+
TableFooter,
|
|
9
|
+
TableHead,
|
|
10
|
+
TableHeader,
|
|
11
|
+
TableRow,
|
|
12
|
+
} from '@/components/ui/table';
|
|
3
13
|
|
|
4
14
|
const invoices = [
|
|
5
|
-
{
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
15
|
+
{
|
|
16
|
+
invoice: 'INV001',
|
|
17
|
+
paymentStatus: 'Paid',
|
|
18
|
+
totalAmount: '$250.00',
|
|
19
|
+
paymentMethod: 'Credit Card',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
invoice: 'INV002',
|
|
23
|
+
paymentStatus: 'Pending',
|
|
24
|
+
totalAmount: '$150.00',
|
|
25
|
+
paymentMethod: 'PayPal',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
invoice: 'INV003',
|
|
29
|
+
paymentStatus: 'Unpaid',
|
|
30
|
+
totalAmount: '$350.00',
|
|
31
|
+
paymentMethod: 'Bank Transfer',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
invoice: 'INV004',
|
|
35
|
+
paymentStatus: 'Paid',
|
|
36
|
+
totalAmount: '$450.00',
|
|
37
|
+
paymentMethod: 'Credit Card',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
invoice: 'INV005',
|
|
41
|
+
paymentStatus: 'Paid',
|
|
42
|
+
totalAmount: '$550.00',
|
|
43
|
+
paymentMethod: 'PayPal',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
invoice: 'INV006',
|
|
47
|
+
paymentStatus: 'Pending',
|
|
48
|
+
totalAmount: '$200.00',
|
|
49
|
+
paymentMethod: 'Bank Transfer',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
invoice: 'INV007',
|
|
53
|
+
paymentStatus: 'Unpaid',
|
|
54
|
+
totalAmount: '$300.00',
|
|
55
|
+
paymentMethod: 'Credit Card',
|
|
56
|
+
},
|
|
10
57
|
];
|
|
11
58
|
|
|
12
59
|
export function TableDocs() {
|
|
13
60
|
return (
|
|
14
|
-
<ComponentSection title="Table" description="A responsive table component
|
|
61
|
+
<ComponentSection title="Table" description="A responsive table component.">
|
|
15
62
|
<ComponentShowcase
|
|
16
63
|
title="Default"
|
|
17
|
-
description="A
|
|
64
|
+
description="A list of recent invoices."
|
|
18
65
|
code={`<Table>
|
|
19
66
|
<TableCaption>A list of your recent invoices.</TableCaption>
|
|
20
67
|
<TableHeader>
|
|
@@ -29,12 +76,18 @@ export function TableDocs() {
|
|
|
29
76
|
{invoices.map((invoice) => (
|
|
30
77
|
<TableRow key={invoice.invoice}>
|
|
31
78
|
<TableCell className="font-medium">{invoice.invoice}</TableCell>
|
|
32
|
-
<TableCell>{invoice.
|
|
33
|
-
<TableCell>{invoice.
|
|
34
|
-
<TableCell className="text-right">{invoice.
|
|
79
|
+
<TableCell>{invoice.paymentStatus}</TableCell>
|
|
80
|
+
<TableCell>{invoice.paymentMethod}</TableCell>
|
|
81
|
+
<TableCell className="text-right">{invoice.totalAmount}</TableCell>
|
|
35
82
|
</TableRow>
|
|
36
83
|
))}
|
|
37
84
|
</TableBody>
|
|
85
|
+
<TableFooter>
|
|
86
|
+
<TableRow>
|
|
87
|
+
<TableCell colSpan={3}>Total</TableCell>
|
|
88
|
+
<TableCell className="text-right">$2,500.00</TableCell>
|
|
89
|
+
</TableRow>
|
|
90
|
+
</TableFooter>
|
|
38
91
|
</Table>`}
|
|
39
92
|
>
|
|
40
93
|
<Table>
|
|
@@ -51,14 +104,36 @@ export function TableDocs() {
|
|
|
51
104
|
{invoices.map((invoice) => (
|
|
52
105
|
<TableRow key={invoice.invoice}>
|
|
53
106
|
<TableCell className="font-medium">{invoice.invoice}</TableCell>
|
|
54
|
-
<TableCell>{invoice.
|
|
55
|
-
<TableCell>{invoice.
|
|
56
|
-
<TableCell className="text-right">{invoice.
|
|
107
|
+
<TableCell>{invoice.paymentStatus}</TableCell>
|
|
108
|
+
<TableCell>{invoice.paymentMethod}</TableCell>
|
|
109
|
+
<TableCell className="text-right">{invoice.totalAmount}</TableCell>
|
|
57
110
|
</TableRow>
|
|
58
111
|
))}
|
|
59
112
|
</TableBody>
|
|
113
|
+
<TableFooter>
|
|
114
|
+
<TableRow>
|
|
115
|
+
<TableCell colSpan={3}>Total</TableCell>
|
|
116
|
+
<TableCell className="text-right">$2,500.00</TableCell>
|
|
117
|
+
</TableRow>
|
|
118
|
+
</TableFooter>
|
|
60
119
|
</Table>
|
|
61
120
|
</ComponentShowcase>
|
|
121
|
+
|
|
122
|
+
<div className="space-y-4">
|
|
123
|
+
<h3 className="text-xl font-semibold">Props</h3>
|
|
124
|
+
<p className="text-sm text-muted-foreground">The Table component uses standard HTML table elements.</p>
|
|
125
|
+
|
|
126
|
+
<h4 className="text-lg font-medium mt-6">Table</h4>
|
|
127
|
+
<PropsTable
|
|
128
|
+
props={[
|
|
129
|
+
{
|
|
130
|
+
name: 'className',
|
|
131
|
+
type: 'string',
|
|
132
|
+
description: 'Additional class names to apply.',
|
|
133
|
+
},
|
|
134
|
+
]}
|
|
135
|
+
/>
|
|
136
|
+
</div>
|
|
62
137
|
</ComponentSection>
|
|
63
138
|
);
|
|
64
139
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
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
|
-
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
|
|
4
|
+
import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@/components/ui/card';
|
|
4
5
|
import { Input } from '@/components/ui/input';
|
|
5
6
|
import { Label } from '@/components/ui/label';
|
|
6
7
|
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
|
|
@@ -13,37 +14,7 @@ export function TabsDocs() {
|
|
|
13
14
|
>
|
|
14
15
|
<ComponentShowcase
|
|
15
16
|
title="Default"
|
|
16
|
-
description="A
|
|
17
|
-
code={`<Tabs defaultValue="account" className="w-[400px]">
|
|
18
|
-
<TabsList>
|
|
19
|
-
<TabsTrigger value="account">Account</TabsTrigger>
|
|
20
|
-
<TabsTrigger value="password">Password</TabsTrigger>
|
|
21
|
-
</TabsList>
|
|
22
|
-
<TabsContent value="account">
|
|
23
|
-
Make changes to your account here.
|
|
24
|
-
</TabsContent>
|
|
25
|
-
<TabsContent value="password">
|
|
26
|
-
Change your password here.
|
|
27
|
-
</TabsContent>
|
|
28
|
-
</Tabs>`}
|
|
29
|
-
>
|
|
30
|
-
<Tabs defaultValue="account" className="w-[400px]">
|
|
31
|
-
<TabsList>
|
|
32
|
-
<TabsTrigger value="account">Account</TabsTrigger>
|
|
33
|
-
<TabsTrigger value="password">Password</TabsTrigger>
|
|
34
|
-
</TabsList>
|
|
35
|
-
<TabsContent value="account" className="p-4">
|
|
36
|
-
Make changes to your account here.
|
|
37
|
-
</TabsContent>
|
|
38
|
-
<TabsContent value="password" className="p-4">
|
|
39
|
-
Change your password here.
|
|
40
|
-
</TabsContent>
|
|
41
|
-
</Tabs>
|
|
42
|
-
</ComponentShowcase>
|
|
43
|
-
|
|
44
|
-
<ComponentShowcase
|
|
45
|
-
title="With Cards"
|
|
46
|
-
description="Tabs can contain any content, including cards."
|
|
17
|
+
description="A default tabs component."
|
|
47
18
|
code={`<Tabs defaultValue="account" className="w-[400px]">
|
|
48
19
|
<TabsList className="grid w-full grid-cols-2">
|
|
49
20
|
<TabsTrigger value="account">Account</TabsTrigger>
|
|
@@ -53,14 +24,46 @@ export function TabsDocs() {
|
|
|
53
24
|
<Card>
|
|
54
25
|
<CardHeader>
|
|
55
26
|
<CardTitle>Account</CardTitle>
|
|
56
|
-
<CardDescription>
|
|
27
|
+
<CardDescription>
|
|
28
|
+
Make changes to your account here. Click save when you're done.
|
|
29
|
+
</CardDescription>
|
|
57
30
|
</CardHeader>
|
|
58
31
|
<CardContent className="space-y-2">
|
|
59
32
|
<div className="space-y-1">
|
|
60
33
|
<Label htmlFor="name">Name</Label>
|
|
61
34
|
<Input id="name" defaultValue="Pedro Duarte" />
|
|
62
35
|
</div>
|
|
36
|
+
<div className="space-y-1">
|
|
37
|
+
<Label htmlFor="username">Username</Label>
|
|
38
|
+
<Input id="username" defaultValue="@peduarte" />
|
|
39
|
+
</div>
|
|
63
40
|
</CardContent>
|
|
41
|
+
<CardFooter>
|
|
42
|
+
<Button>Save changes</Button>
|
|
43
|
+
</CardFooter>
|
|
44
|
+
</Card>
|
|
45
|
+
</TabsContent>
|
|
46
|
+
<TabsContent value="password">
|
|
47
|
+
<Card>
|
|
48
|
+
<CardHeader>
|
|
49
|
+
<CardTitle>Password</CardTitle>
|
|
50
|
+
<CardDescription>
|
|
51
|
+
Change your password here. After saving, you'll be logged out.
|
|
52
|
+
</CardDescription>
|
|
53
|
+
</CardHeader>
|
|
54
|
+
<CardContent className="space-y-2">
|
|
55
|
+
<div className="space-y-1">
|
|
56
|
+
<Label htmlFor="current">Current password</Label>
|
|
57
|
+
<Input id="current" type="password" />
|
|
58
|
+
</div>
|
|
59
|
+
<div className="space-y-1">
|
|
60
|
+
<Label htmlFor="new">New password</Label>
|
|
61
|
+
<Input id="new" type="password" />
|
|
62
|
+
</div>
|
|
63
|
+
</CardContent>
|
|
64
|
+
<CardFooter>
|
|
65
|
+
<Button>Save password</Button>
|
|
66
|
+
</CardFooter>
|
|
64
67
|
</Card>
|
|
65
68
|
</TabsContent>
|
|
66
69
|
</Tabs>`}
|
|
@@ -74,22 +77,28 @@ export function TabsDocs() {
|
|
|
74
77
|
<Card>
|
|
75
78
|
<CardHeader>
|
|
76
79
|
<CardTitle>Account</CardTitle>
|
|
77
|
-
<CardDescription>
|
|
80
|
+
<CardDescription>Make changes to your account here. Click save when you're done.</CardDescription>
|
|
78
81
|
</CardHeader>
|
|
79
82
|
<CardContent className="space-y-2">
|
|
80
83
|
<div className="space-y-1">
|
|
81
84
|
<Label htmlFor="name">Name</Label>
|
|
82
85
|
<Input id="name" defaultValue="Pedro Duarte" />
|
|
83
86
|
</div>
|
|
84
|
-
<
|
|
87
|
+
<div className="space-y-1">
|
|
88
|
+
<Label htmlFor="username">Username</Label>
|
|
89
|
+
<Input id="username" defaultValue="@peduarte" />
|
|
90
|
+
</div>
|
|
85
91
|
</CardContent>
|
|
92
|
+
<CardFooter>
|
|
93
|
+
<Button>Save changes</Button>
|
|
94
|
+
</CardFooter>
|
|
86
95
|
</Card>
|
|
87
96
|
</TabsContent>
|
|
88
97
|
<TabsContent value="password">
|
|
89
98
|
<Card>
|
|
90
99
|
<CardHeader>
|
|
91
100
|
<CardTitle>Password</CardTitle>
|
|
92
|
-
<CardDescription>Change your password.</CardDescription>
|
|
101
|
+
<CardDescription>Change your password here. After saving, you'll be logged out.</CardDescription>
|
|
93
102
|
</CardHeader>
|
|
94
103
|
<CardContent className="space-y-2">
|
|
95
104
|
<div className="space-y-1">
|
|
@@ -100,12 +109,115 @@ export function TabsDocs() {
|
|
|
100
109
|
<Label htmlFor="new">New password</Label>
|
|
101
110
|
<Input id="new" type="password" />
|
|
102
111
|
</div>
|
|
103
|
-
<Button>Save password</Button>
|
|
104
112
|
</CardContent>
|
|
113
|
+
<CardFooter>
|
|
114
|
+
<Button>Save password</Button>
|
|
115
|
+
</CardFooter>
|
|
105
116
|
</Card>
|
|
106
117
|
</TabsContent>
|
|
107
118
|
</Tabs>
|
|
108
119
|
</ComponentShowcase>
|
|
120
|
+
|
|
121
|
+
<div className="space-y-4">
|
|
122
|
+
<h3 className="text-xl font-semibold">Props</h3>
|
|
123
|
+
<p className="text-sm text-muted-foreground">
|
|
124
|
+
The Tabs component is built on top of{' '}
|
|
125
|
+
<a
|
|
126
|
+
href="https://www.radix-ui.com/primitives/docs/components/tabs"
|
|
127
|
+
className="underline"
|
|
128
|
+
target="_blank"
|
|
129
|
+
rel="noreferrer"
|
|
130
|
+
>
|
|
131
|
+
Radix UI Tabs
|
|
132
|
+
</a>
|
|
133
|
+
.
|
|
134
|
+
</p>
|
|
135
|
+
|
|
136
|
+
<h4 className="text-lg font-medium mt-6">Tabs (Root)</h4>
|
|
137
|
+
<PropsTable
|
|
138
|
+
props={[
|
|
139
|
+
{
|
|
140
|
+
name: 'defaultValue',
|
|
141
|
+
type: 'string',
|
|
142
|
+
description: 'The value of the tab that should be active when initially rendered.',
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
name: 'value',
|
|
146
|
+
type: 'string',
|
|
147
|
+
description: 'The controlled value of the tab to activate.',
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
name: 'onValueChange',
|
|
151
|
+
type: '(value: string) => void',
|
|
152
|
+
description: 'Event handler called when the value changes.',
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
name: 'orientation',
|
|
156
|
+
type: '"horizontal" | "vertical"',
|
|
157
|
+
defaultValue: '"horizontal"',
|
|
158
|
+
description: 'The orientation of the tabs.',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
name: 'dir',
|
|
162
|
+
type: '"ltr" | "rtl"',
|
|
163
|
+
description: 'The reading direction of the tabs.',
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
name: 'activationMode',
|
|
167
|
+
type: '"automatic" | "manual"',
|
|
168
|
+
defaultValue: '"automatic"',
|
|
169
|
+
description:
|
|
170
|
+
'When automatic, tabs are activated when receiving focus. When manual, tabs are activated when clicked.',
|
|
171
|
+
},
|
|
172
|
+
]}
|
|
173
|
+
/>
|
|
174
|
+
|
|
175
|
+
<h4 className="text-lg font-medium mt-6">TabsList</h4>
|
|
176
|
+
<PropsTable
|
|
177
|
+
props={[
|
|
178
|
+
{
|
|
179
|
+
name: 'loop',
|
|
180
|
+
type: 'boolean',
|
|
181
|
+
defaultValue: 'true',
|
|
182
|
+
description: 'When true, keyboard navigation will loop from last tab to first, and vice versa.',
|
|
183
|
+
},
|
|
184
|
+
]}
|
|
185
|
+
/>
|
|
186
|
+
|
|
187
|
+
<h4 className="text-lg font-medium mt-6">TabsTrigger</h4>
|
|
188
|
+
<PropsTable
|
|
189
|
+
props={[
|
|
190
|
+
{
|
|
191
|
+
name: 'value',
|
|
192
|
+
type: 'string',
|
|
193
|
+
required: true,
|
|
194
|
+
description: 'A unique value for the trigger.',
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
name: 'disabled',
|
|
198
|
+
type: 'boolean',
|
|
199
|
+
description: 'When true, prevents the user from interacting with the tab.',
|
|
200
|
+
},
|
|
201
|
+
]}
|
|
202
|
+
/>
|
|
203
|
+
|
|
204
|
+
<h4 className="text-lg font-medium mt-6">TabsContent</h4>
|
|
205
|
+
<PropsTable
|
|
206
|
+
props={[
|
|
207
|
+
{
|
|
208
|
+
name: 'value',
|
|
209
|
+
type: 'string',
|
|
210
|
+
required: true,
|
|
211
|
+
description: 'A unique value for the content.',
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
name: 'forceMount',
|
|
215
|
+
type: 'boolean',
|
|
216
|
+
description: 'Used to force mounting when more control is needed.',
|
|
217
|
+
},
|
|
218
|
+
]}
|
|
219
|
+
/>
|
|
220
|
+
</div>
|
|
109
221
|
</ComponentSection>
|
|
110
222
|
);
|
|
111
223
|
}
|
|
@@ -1,54 +1,60 @@
|
|
|
1
1
|
import { ComponentSection, ComponentShowcase } from '@/components/docs/ComponentShowcase';
|
|
2
|
-
import {
|
|
2
|
+
import { PropsTable } from '@/components/docs/PropsTable';
|
|
3
3
|
import { Label } from '@/components/ui/label';
|
|
4
4
|
import { Textarea } from '@/components/ui/textarea';
|
|
5
5
|
|
|
6
6
|
export function TextareaDocs() {
|
|
7
7
|
return (
|
|
8
|
-
<ComponentSection
|
|
8
|
+
<ComponentSection
|
|
9
|
+
title="Textarea"
|
|
10
|
+
description="Displays a form textarea or a component that looks like a textarea."
|
|
11
|
+
>
|
|
9
12
|
<ComponentShowcase
|
|
10
13
|
title="Default"
|
|
11
|
-
description="A
|
|
12
|
-
code={`<Textarea placeholder="Type your message here." />`}
|
|
13
|
-
>
|
|
14
|
-
<Textarea placeholder="Type your message here." className="max-w-md" />
|
|
15
|
-
</ComponentShowcase>
|
|
16
|
-
|
|
17
|
-
<ComponentShowcase
|
|
18
|
-
title="With Label"
|
|
19
|
-
description="A textarea with a label."
|
|
14
|
+
description="A default textarea."
|
|
20
15
|
code={`<div className="grid w-full gap-1.5">
|
|
21
16
|
<Label htmlFor="message">Your message</Label>
|
|
22
17
|
<Textarea placeholder="Type your message here." id="message" />
|
|
23
18
|
</div>`}
|
|
24
19
|
>
|
|
25
|
-
<div className="grid w-full
|
|
20
|
+
<div className="grid w-full gap-1.5">
|
|
26
21
|
<Label htmlFor="message">Your message</Label>
|
|
27
22
|
<Textarea placeholder="Type your message here." id="message" />
|
|
28
23
|
</div>
|
|
29
24
|
</ComponentShowcase>
|
|
30
25
|
|
|
31
|
-
<
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
<Button>Send message</Button>
|
|
37
|
-
</div>`}
|
|
38
|
-
>
|
|
39
|
-
<div className="grid w-full max-w-md gap-2">
|
|
40
|
-
<Textarea placeholder="Type your message here." />
|
|
41
|
-
<Button>Send message</Button>
|
|
42
|
-
</div>
|
|
43
|
-
</ComponentShowcase>
|
|
26
|
+
<div className="space-y-4">
|
|
27
|
+
<h3 className="text-xl font-semibold">Props</h3>
|
|
28
|
+
<p className="text-sm text-muted-foreground">
|
|
29
|
+
The Textarea component accepts all standard HTML textarea attributes.
|
|
30
|
+
</p>
|
|
44
31
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
32
|
+
<h4 className="text-lg font-medium mt-6">Textarea</h4>
|
|
33
|
+
<PropsTable
|
|
34
|
+
props={[
|
|
35
|
+
{
|
|
36
|
+
name: 'className',
|
|
37
|
+
type: 'string',
|
|
38
|
+
description: 'Additional class names to apply.',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'placeholder',
|
|
42
|
+
type: 'string',
|
|
43
|
+
description: 'The placeholder object.',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'disabled',
|
|
47
|
+
type: 'boolean',
|
|
48
|
+
description: 'Whether the textarea is disabled.',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'required',
|
|
52
|
+
type: 'boolean',
|
|
53
|
+
description: 'Whether the textarea is required.',
|
|
54
|
+
},
|
|
55
|
+
]}
|
|
56
|
+
/>
|
|
57
|
+
</div>
|
|
52
58
|
</ComponentSection>
|
|
53
59
|
);
|
|
54
60
|
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { ComponentSection, ComponentShowcase } from '@/components/docs/ComponentShowcase';
|
|
2
|
+
import { ThemeToggle } from '@/components/ui/theme-toggle';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
|
|
5
|
+
export function ThemeToggleDocs() {
|
|
6
|
+
const [binaryTheme, setBinaryTheme] = useState('light');
|
|
7
|
+
const [ternaryTheme, setTernaryTheme] = useState('system');
|
|
8
|
+
const [customTheme, setCustomTheme] = useState('light');
|
|
9
|
+
|
|
10
|
+
return (
|
|
11
|
+
<ComponentSection
|
|
12
|
+
title="Theme Toggle"
|
|
13
|
+
description="A component that allows users to switch between light, dark, and system themes."
|
|
14
|
+
>
|
|
15
|
+
<ComponentShowcase
|
|
16
|
+
title="Binary Mode"
|
|
17
|
+
description="The default mode allows toggling between light and dark themes. (Controlled example shown to prevent site theme changes)"
|
|
18
|
+
code={`<ThemeToggle variant="binary" />`}
|
|
19
|
+
>
|
|
20
|
+
<ThemeToggle variant="binary" customTheme={binaryTheme} onThemeChange={setBinaryTheme} />
|
|
21
|
+
</ComponentShowcase>
|
|
22
|
+
|
|
23
|
+
<ComponentShowcase
|
|
24
|
+
title="Ternary Mode"
|
|
25
|
+
description="Ternary mode allows choosing between light, dark, and system themes using a dropdown menu. (Controlled example shown to prevent site theme changes)"
|
|
26
|
+
code={`<ThemeToggle variant="ternary" />`}
|
|
27
|
+
>
|
|
28
|
+
<ThemeToggle variant="ternary" customTheme={ternaryTheme} onThemeChange={setTernaryTheme} />
|
|
29
|
+
</ComponentShowcase>
|
|
30
|
+
|
|
31
|
+
<ComponentShowcase
|
|
32
|
+
title="Custom State Integration"
|
|
33
|
+
description="You can control the theme externally by passing customTheme and onThemeChange props."
|
|
34
|
+
code={`const [theme, setTheme] = useState('light');
|
|
35
|
+
|
|
36
|
+
<ThemeToggle
|
|
37
|
+
customTheme={theme}
|
|
38
|
+
onThemeChange={(newTheme) => setTheme(newTheme)}
|
|
39
|
+
/>
|
|
40
|
+
|
|
41
|
+
<p>Current Theme: {theme}</p>`}
|
|
42
|
+
>
|
|
43
|
+
<div className="flex flex-col items-center gap-4">
|
|
44
|
+
<ThemeToggle customTheme={customTheme} onThemeChange={(newTheme) => setCustomTheme(newTheme)} />
|
|
45
|
+
<p className="text-sm font-medium">Current Selection: {customTheme}</p>
|
|
46
|
+
</div>
|
|
47
|
+
</ComponentShowcase>
|
|
48
|
+
</ComponentSection>
|
|
49
|
+
);
|
|
50
|
+
}
|