@auto-engineer/generate-react-client 1.64.0 → 1.65.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/CHANGELOG.md +21 -0
- package/dist/starter/.storybook/main.ts +17 -22
- package/dist/starter/.storybook/manager-head.html +31 -31
- package/dist/starter/.storybook/manager.ts +133 -133
- package/dist/starter/.storybook/preview-head.html +12 -12
- package/dist/starter/.storybook/preview.tsx +79 -79
- package/dist/starter/biome.json +126 -0
- package/dist/starter/codegen.ts +11 -11
- package/dist/starter/components.json +27 -27
- package/dist/starter/package.json +86 -80
- package/dist/starter/public/mockServiceWorker.js +261 -261
- package/dist/starter/scripts/build-component-db.ts +17 -20
- package/dist/starter/src/App.tsx +15 -17
- package/dist/starter/src/components/ui/Accordion.stories.tsx +35 -35
- package/dist/starter/src/components/ui/Accordion.tsx +33 -33
- package/dist/starter/src/components/ui/Alert.stories.tsx +15 -15
- package/dist/starter/src/components/ui/Alert.tsx +32 -32
- package/dist/starter/src/components/ui/AlertDialog.stories.tsx +50 -50
- package/dist/starter/src/components/ui/AlertDialog.tsx +114 -115
- package/dist/starter/src/components/ui/AspectRatio.stories.tsx +20 -20
- package/dist/starter/src/components/ui/AspectRatio.tsx +1 -1
- package/dist/starter/src/components/ui/Avatar.stories.tsx +27 -27
- package/dist/starter/src/components/ui/Avatar.tsx +63 -63
- package/dist/starter/src/components/ui/Badge.stories.tsx +14 -14
- package/dist/starter/src/components/ui/Badge.tsx +27 -27
- package/dist/starter/src/components/ui/Breadcrumb.stories.tsx +38 -38
- package/dist/starter/src/components/ui/Breadcrumb.tsx +63 -62
- package/dist/starter/src/components/ui/Button.stories.tsx +55 -55
- package/dist/starter/src/components/ui/Button.tsx +49 -49
- package/dist/starter/src/components/ui/ButtonGroup.stories.tsx +17 -17
- package/dist/starter/src/components/ui/ButtonGroup.tsx +52 -53
- package/dist/starter/src/components/ui/Calendar.stories.tsx +20 -19
- package/dist/starter/src/components/ui/Calendar.tsx +142 -143
- package/dist/starter/src/components/ui/Card.stories.tsx +29 -29
- package/dist/starter/src/components/ui/Card.tsx +31 -31
- package/dist/starter/src/components/ui/Carousel.stories.tsx +41 -41
- package/dist/starter/src/components/ui/Carousel.tsx +171 -172
- package/dist/starter/src/components/ui/Chart.stories.tsx +21 -21
- package/dist/starter/src/components/ui/Chart.tsx +244 -247
- package/dist/starter/src/components/ui/Checkbox.stories.tsx +11 -11
- package/dist/starter/src/components/ui/Checkbox.tsx +18 -18
- package/dist/starter/src/components/ui/Collapsible.stories.tsx +40 -40
- package/dist/starter/src/components/ui/Collapsible.tsx +3 -3
- package/dist/starter/src/components/ui/Combobox.stories.tsx +48 -48
- package/dist/starter/src/components/ui/Combobox.tsx +204 -205
- package/dist/starter/src/components/ui/Command.stories.tsx +55 -55
- package/dist/starter/src/components/ui/Command.tsx +102 -103
- package/dist/starter/src/components/ui/ContextMenu.stories.tsx +52 -52
- package/dist/starter/src/components/ui/ContextMenu.tsx +151 -151
- package/dist/starter/src/components/ui/DesignSystem-Colors.stories.tsx +92 -92
- package/dist/starter/src/components/ui/DesignSystem-Layout.stories.tsx +139 -139
- package/dist/starter/src/components/ui/DesignSystem-Overview.stories.tsx +676 -657
- package/dist/starter/src/components/ui/DesignSystem-Typography.stories.tsx +59 -59
- package/dist/starter/src/components/ui/Dialog.stories.tsx +56 -56
- package/dist/starter/src/components/ui/Dialog.tsx +97 -98
- package/dist/starter/src/components/ui/Direction.stories.tsx +20 -20
- package/dist/starter/src/components/ui/Direction.tsx +7 -7
- package/dist/starter/src/components/ui/Drawer.stories.tsx +54 -54
- package/dist/starter/src/components/ui/Drawer.tsx +70 -70
- package/dist/starter/src/components/ui/DropdownMenu.stories.tsx +58 -58
- package/dist/starter/src/components/ui/DropdownMenu.tsx +157 -157
- package/dist/starter/src/components/ui/Empty.stories.tsx +22 -22
- package/dist/starter/src/components/ui/Empty.tsx +58 -58
- package/dist/starter/src/components/ui/Field.stories.tsx +31 -31
- package/dist/starter/src/components/ui/Field.tsx +180 -181
- package/dist/starter/src/components/ui/Form.stories.tsx +29 -29
- package/dist/starter/src/components/ui/Form.tsx +93 -96
- package/dist/starter/src/components/ui/HoverCard.stories.tsx +34 -34
- package/dist/starter/src/components/ui/HoverCard.tsx +21 -21
- package/dist/starter/src/components/ui/Input.stories.tsx +18 -18
- package/dist/starter/src/components/ui/Input.tsx +14 -14
- package/dist/starter/src/components/ui/InputGroup.stories.tsx +34 -34
- package/dist/starter/src/components/ui/InputGroup.tsx +110 -111
- package/dist/starter/src/components/ui/InputOTP.stories.tsx +28 -28
- package/dist/starter/src/components/ui/InputOTP.tsx +43 -43
- package/dist/starter/src/components/ui/Item.stories.tsx +45 -45
- package/dist/starter/src/components/ui/Item.tsx +113 -114
- package/dist/starter/src/components/ui/Kbd.stories.tsx +31 -31
- package/dist/starter/src/components/ui/Kbd.tsx +11 -11
- package/dist/starter/src/components/ui/Label.stories.tsx +62 -62
- package/dist/starter/src/components/ui/Label.tsx +26 -25
- package/dist/starter/src/components/ui/Menubar.stories.tsx +62 -62
- package/dist/starter/src/components/ui/Menubar.tsx +173 -173
- package/dist/starter/src/components/ui/NativeSelect.stories.tsx +26 -26
- package/dist/starter/src/components/ui/NativeSelect.tsx +29 -29
- package/dist/starter/src/components/ui/NavigationMenu.stories.tsx +64 -64
- package/dist/starter/src/components/ui/NavigationMenu.tsx +103 -103
- package/dist/starter/src/components/ui/Pagination.stories.tsx +61 -61
- package/dist/starter/src/components/ui/Pagination.tsx +69 -71
- package/dist/starter/src/components/ui/Popover.stories.tsx +38 -38
- package/dist/starter/src/components/ui/Popover.tsx +25 -25
- package/dist/starter/src/components/ui/Progress.stories.tsx +9 -9
- package/dist/starter/src/components/ui/Progress.tsx +14 -14
- package/dist/starter/src/components/ui/RadioGroup.stories.tsx +35 -35
- package/dist/starter/src/components/ui/RadioGroup.tsx +19 -19
- package/dist/starter/src/components/ui/Resizable.stories.tsx +54 -54
- package/dist/starter/src/components/ui/Resizable.tsx +29 -29
- package/dist/starter/src/components/ui/ScrollArea.stories.tsx +27 -27
- package/dist/starter/src/components/ui/ScrollArea.tsx +34 -34
- package/dist/starter/src/components/ui/Select.stories.tsx +43 -43
- package/dist/starter/src/components/ui/Select.tsx +120 -120
- package/dist/starter/src/components/ui/Separator.stories.tsx +27 -27
- package/dist/starter/src/components/ui/Separator.tsx +17 -17
- package/dist/starter/src/components/ui/Sheet.stories.tsx +53 -53
- package/dist/starter/src/components/ui/Sheet.tsx +69 -69
- package/dist/starter/src/components/ui/Sidebar.stories.tsx +77 -77
- package/dist/starter/src/components/ui/Sidebar.tsx +563 -564
- package/dist/starter/src/components/ui/Skeleton.stories.tsx +25 -25
- package/dist/starter/src/components/ui/Skeleton.tsx +1 -1
- package/dist/starter/src/components/ui/Slider.stories.tsx +5 -5
- package/dist/starter/src/components/ui/Slider.tsx +45 -44
- package/dist/starter/src/components/ui/Sonner.stories.tsx +32 -32
- package/dist/starter/src/components/ui/Sonner.tsx +23 -23
- package/dist/starter/src/components/ui/Spinner.stories.tsx +8 -8
- package/dist/starter/src/components/ui/Spinner.tsx +1 -1
- package/dist/starter/src/components/ui/Switch.stories.tsx +16 -17
- package/dist/starter/src/components/ui/Switch.tsx +24 -24
- package/dist/starter/src/components/ui/Table.stories.tsx +50 -50
- package/dist/starter/src/components/ui/Table.tsx +45 -45
- package/dist/starter/src/components/ui/Tabs.stories.tsx +39 -39
- package/dist/starter/src/components/ui/Tabs.tsx +47 -47
- package/dist/starter/src/components/ui/Textarea.stories.tsx +9 -9
- package/dist/starter/src/components/ui/Textarea.tsx +11 -11
- package/dist/starter/src/components/ui/Toast.stories.tsx +77 -77
- package/dist/starter/src/components/ui/Toast.tsx +75 -75
- package/dist/starter/src/components/ui/Toaster.tsx +17 -19
- package/dist/starter/src/components/ui/Toggle.stories.tsx +20 -20
- package/dist/starter/src/components/ui/Toggle.tsx +26 -26
- package/dist/starter/src/components/ui/ToggleGroup.stories.tsx +41 -41
- package/dist/starter/src/components/ui/ToggleGroup.tsx +61 -62
- package/dist/starter/src/components/ui/Tooltip.stories.tsx +26 -26
- package/dist/starter/src/components/ui/Tooltip.tsx +24 -24
- package/dist/starter/src/gql/execute.ts +1 -1
- package/dist/starter/src/gql/fragment-masking.ts +1 -1
- package/dist/starter/src/gql/graphql.ts +3 -0
- package/dist/starter/src/hooks/use-mobile.ts +11 -11
- package/dist/starter/src/hooks/use-toast.ts +135 -135
- package/dist/starter/src/index.css +105 -105
- package/dist/starter/src/lib/utils.ts +1 -1
- package/dist/starter/src/main.tsx +4 -1
- package/dist/starter/tsconfig.app.json +24 -24
- package/dist/starter/tsconfig.json +8 -8
- package/dist/starter/vite.config.ts +38 -37
- package/package.json +3 -3
|
@@ -1,94 +1,94 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import * as React from 'react';
|
|
4
3
|
import { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react';
|
|
5
4
|
import { ContextMenu as ContextMenuPrimitive } from 'radix-ui';
|
|
5
|
+
import type * as React from 'react';
|
|
6
6
|
|
|
7
7
|
import { cn } from '@/lib/utils';
|
|
8
8
|
|
|
9
9
|
/** Right-click menu with keyboard navigation. Supports submenus, checkbox/radio items, separators, and shortcuts. */
|
|
10
10
|
function ContextMenu({ ...props }: React.ComponentProps<typeof ContextMenuPrimitive.Root>) {
|
|
11
|
-
|
|
11
|
+
return <ContextMenuPrimitive.Root data-slot="context-menu" {...props} />;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
/** The element that opens the context menu on right-click. Wraps its children. */
|
|
15
15
|
function ContextMenuTrigger({ ...props }: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>) {
|
|
16
|
-
|
|
16
|
+
return <ContextMenuPrimitive.Trigger data-slot="context-menu-trigger" {...props} />;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
/** Groups related context menu items for accessibility. */
|
|
20
20
|
function ContextMenuGroup({ ...props }: React.ComponentProps<typeof ContextMenuPrimitive.Group>) {
|
|
21
|
-
|
|
21
|
+
return <ContextMenuPrimitive.Group data-slot="context-menu-group" {...props} />;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
/** Renders context menu content into a React portal. */
|
|
25
25
|
function ContextMenuPortal({ ...props }: React.ComponentProps<typeof ContextMenuPrimitive.Portal>) {
|
|
26
|
-
|
|
26
|
+
return <ContextMenuPrimitive.Portal data-slot="context-menu-portal" {...props} />;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
/** Container for a submenu within the context menu. */
|
|
30
30
|
function ContextMenuSub({ ...props }: React.ComponentProps<typeof ContextMenuPrimitive.Sub>) {
|
|
31
|
-
|
|
31
|
+
return <ContextMenuPrimitive.Sub data-slot="context-menu-sub" {...props} />;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
/** Groups radio items for single-selection within the context menu. */
|
|
35
35
|
function ContextMenuRadioGroup({ ...props }: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>) {
|
|
36
|
-
|
|
36
|
+
return <ContextMenuPrimitive.RadioGroup data-slot="context-menu-radio-group" {...props} />;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
/** Menu item that opens a nested submenu on hover or keyboard navigation. Shows a chevron indicator. */
|
|
40
40
|
function ContextMenuSubTrigger({
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
className,
|
|
42
|
+
inset,
|
|
43
|
+
children,
|
|
44
|
+
...props
|
|
45
45
|
}: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & {
|
|
46
|
-
|
|
46
|
+
inset?: boolean;
|
|
47
47
|
}) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
48
|
+
return (
|
|
49
|
+
<ContextMenuPrimitive.SubTrigger
|
|
50
|
+
data-slot="context-menu-sub-trigger"
|
|
51
|
+
data-inset={inset}
|
|
52
|
+
className={cn(
|
|
53
|
+
"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
54
|
+
className,
|
|
55
|
+
)}
|
|
56
|
+
{...props}
|
|
57
|
+
>
|
|
58
|
+
{children}
|
|
59
|
+
<ChevronRightIcon className="ml-auto" />
|
|
60
|
+
</ContextMenuPrimitive.SubTrigger>
|
|
61
|
+
);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
/** Popup content for a nested submenu. */
|
|
65
65
|
function ContextMenuSubContent({ className, ...props }: React.ComponentProps<typeof ContextMenuPrimitive.SubContent>) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
66
|
+
return (
|
|
67
|
+
<ContextMenuPrimitive.SubContent
|
|
68
|
+
data-slot="context-menu-sub-content"
|
|
69
|
+
className={cn(
|
|
70
|
+
'bg-popover text-popover-foreground 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-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg',
|
|
71
|
+
className,
|
|
72
|
+
)}
|
|
73
|
+
{...props}
|
|
74
|
+
/>
|
|
75
|
+
);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
/** The positioned popup container for context menu items. Portals to the document body. */
|
|
79
79
|
function ContextMenuContent({ className, ...props }: React.ComponentProps<typeof ContextMenuPrimitive.Content>) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
80
|
+
return (
|
|
81
|
+
<ContextMenuPrimitive.Portal>
|
|
82
|
+
<ContextMenuPrimitive.Content
|
|
83
|
+
data-slot="context-menu-content"
|
|
84
|
+
className={cn(
|
|
85
|
+
'bg-popover text-popover-foreground 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-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md',
|
|
86
|
+
className,
|
|
87
|
+
)}
|
|
88
|
+
{...props}
|
|
89
|
+
/>
|
|
90
|
+
</ContextMenuPrimitive.Portal>
|
|
91
|
+
);
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
/**
|
|
@@ -96,136 +96,136 @@ function ContextMenuContent({ className, ...props }: React.ComponentProps<typeof
|
|
|
96
96
|
* Use variant="destructive" for dangerous actions like delete.
|
|
97
97
|
*/
|
|
98
98
|
function ContextMenuItem({
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
99
|
+
className,
|
|
100
|
+
/** Adds left padding to align with items that have icons or indicators. */
|
|
101
|
+
inset,
|
|
102
|
+
/** Use "destructive" for dangerous actions. */
|
|
103
|
+
variant = 'default',
|
|
104
|
+
...props
|
|
105
105
|
}: React.ComponentProps<typeof ContextMenuPrimitive.Item> & {
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
inset?: boolean;
|
|
107
|
+
variant?: 'default' | 'destructive';
|
|
108
108
|
}) {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
109
|
+
return (
|
|
110
|
+
<ContextMenuPrimitive.Item
|
|
111
|
+
data-slot="context-menu-item"
|
|
112
|
+
data-inset={inset}
|
|
113
|
+
data-variant={variant}
|
|
114
|
+
className={cn(
|
|
115
|
+
"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
116
|
+
className,
|
|
117
|
+
)}
|
|
118
|
+
{...props}
|
|
119
|
+
/>
|
|
120
|
+
);
|
|
121
121
|
}
|
|
122
122
|
|
|
123
123
|
/** A toggleable checkbox item within the context menu. Shows a check indicator when active. */
|
|
124
124
|
function ContextMenuCheckboxItem({
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
125
|
+
className,
|
|
126
|
+
children,
|
|
127
|
+
checked,
|
|
128
|
+
...props
|
|
129
129
|
}: React.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
130
|
+
return (
|
|
131
|
+
<ContextMenuPrimitive.CheckboxItem
|
|
132
|
+
data-slot="context-menu-checkbox-item"
|
|
133
|
+
className={cn(
|
|
134
|
+
"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
135
|
+
className,
|
|
136
|
+
)}
|
|
137
|
+
checked={checked}
|
|
138
|
+
{...props}
|
|
139
|
+
>
|
|
140
|
+
<span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
|
|
141
|
+
<ContextMenuPrimitive.ItemIndicator>
|
|
142
|
+
<CheckIcon className="size-4" />
|
|
143
|
+
</ContextMenuPrimitive.ItemIndicator>
|
|
144
|
+
</span>
|
|
145
|
+
{children}
|
|
146
|
+
</ContextMenuPrimitive.CheckboxItem>
|
|
147
|
+
);
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
/** A radio-selectable item within a ContextMenuRadioGroup. Shows a dot indicator when selected. */
|
|
151
151
|
function ContextMenuRadioItem({
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
152
|
+
className,
|
|
153
|
+
children,
|
|
154
|
+
...props
|
|
155
155
|
}: React.ComponentProps<typeof ContextMenuPrimitive.RadioItem>) {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
156
|
+
return (
|
|
157
|
+
<ContextMenuPrimitive.RadioItem
|
|
158
|
+
data-slot="context-menu-radio-item"
|
|
159
|
+
className={cn(
|
|
160
|
+
"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
161
|
+
className,
|
|
162
|
+
)}
|
|
163
|
+
{...props}
|
|
164
|
+
>
|
|
165
|
+
<span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
|
|
166
|
+
<ContextMenuPrimitive.ItemIndicator>
|
|
167
|
+
<CircleIcon className="size-2 fill-current" />
|
|
168
|
+
</ContextMenuPrimitive.ItemIndicator>
|
|
169
|
+
</span>
|
|
170
|
+
{children}
|
|
171
|
+
</ContextMenuPrimitive.RadioItem>
|
|
172
|
+
);
|
|
173
173
|
}
|
|
174
174
|
|
|
175
175
|
/** Non-interactive label within a context menu, used for section headings. */
|
|
176
176
|
function ContextMenuLabel({
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
177
|
+
className,
|
|
178
|
+
inset,
|
|
179
|
+
...props
|
|
180
180
|
}: React.ComponentProps<typeof ContextMenuPrimitive.Label> & {
|
|
181
|
-
|
|
181
|
+
inset?: boolean;
|
|
182
182
|
}) {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
183
|
+
return (
|
|
184
|
+
<ContextMenuPrimitive.Label
|
|
185
|
+
data-slot="context-menu-label"
|
|
186
|
+
data-inset={inset}
|
|
187
|
+
className={cn('text-foreground px-2 py-1.5 text-sm font-medium data-[inset]:pl-8', className)}
|
|
188
|
+
{...props}
|
|
189
|
+
/>
|
|
190
|
+
);
|
|
191
191
|
}
|
|
192
192
|
|
|
193
193
|
/** Visual divider between groups of context menu items. */
|
|
194
194
|
function ContextMenuSeparator({ className, ...props }: React.ComponentProps<typeof ContextMenuPrimitive.Separator>) {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
195
|
+
return (
|
|
196
|
+
<ContextMenuPrimitive.Separator
|
|
197
|
+
data-slot="context-menu-separator"
|
|
198
|
+
className={cn('bg-border -mx-1 my-1 h-px', className)}
|
|
199
|
+
{...props}
|
|
200
|
+
/>
|
|
201
|
+
);
|
|
202
202
|
}
|
|
203
203
|
|
|
204
204
|
/** Displays a keyboard shortcut hint aligned to the right side of a context menu item. */
|
|
205
205
|
function ContextMenuShortcut({ className, ...props }: React.ComponentProps<'span'>) {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
206
|
+
return (
|
|
207
|
+
<span
|
|
208
|
+
data-slot="context-menu-shortcut"
|
|
209
|
+
className={cn('text-muted-foreground ml-auto text-xs tracking-widest', className)}
|
|
210
|
+
{...props}
|
|
211
|
+
/>
|
|
212
|
+
);
|
|
213
213
|
}
|
|
214
214
|
|
|
215
215
|
export {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
216
|
+
ContextMenu,
|
|
217
|
+
ContextMenuTrigger,
|
|
218
|
+
ContextMenuContent,
|
|
219
|
+
ContextMenuItem,
|
|
220
|
+
ContextMenuCheckboxItem,
|
|
221
|
+
ContextMenuRadioItem,
|
|
222
|
+
ContextMenuLabel,
|
|
223
|
+
ContextMenuSeparator,
|
|
224
|
+
ContextMenuShortcut,
|
|
225
|
+
ContextMenuGroup,
|
|
226
|
+
ContextMenuPortal,
|
|
227
|
+
ContextMenuSub,
|
|
228
|
+
ContextMenuSubContent,
|
|
229
|
+
ContextMenuSubTrigger,
|
|
230
|
+
ContextMenuRadioGroup,
|
|
231
231
|
};
|
|
@@ -1,117 +1,117 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
2
2
|
|
|
3
3
|
interface ColorToken {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
variable: string;
|
|
5
|
+
utility: string;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
interface ColorGroup {
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
label: string;
|
|
10
|
+
tokens: ColorToken[];
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
const colorGroups: ColorGroup[] = [
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
14
|
+
{
|
|
15
|
+
label: 'Core',
|
|
16
|
+
tokens: [
|
|
17
|
+
{ variable: '--primary', utility: 'bg-primary' },
|
|
18
|
+
{ variable: '--primary-foreground', utility: 'bg-primary-foreground' },
|
|
19
|
+
{ variable: '--secondary', utility: 'bg-secondary' },
|
|
20
|
+
{ variable: '--secondary-foreground', utility: 'bg-secondary-foreground' },
|
|
21
|
+
{ variable: '--accent', utility: 'bg-accent' },
|
|
22
|
+
{ variable: '--accent-foreground', utility: 'bg-accent-foreground' },
|
|
23
|
+
{ variable: '--muted', utility: 'bg-muted' },
|
|
24
|
+
{ variable: '--muted-foreground', utility: 'bg-muted-foreground' },
|
|
25
|
+
{ variable: '--destructive', utility: 'bg-destructive' },
|
|
26
|
+
{ variable: '--destructive-foreground', utility: 'bg-destructive-foreground' },
|
|
27
|
+
{ variable: '--background', utility: 'bg-background' },
|
|
28
|
+
{ variable: '--foreground', utility: 'bg-foreground' },
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
label: 'Surface',
|
|
33
|
+
tokens: [
|
|
34
|
+
{ variable: '--card', utility: 'bg-card' },
|
|
35
|
+
{ variable: '--card-foreground', utility: 'bg-card-foreground' },
|
|
36
|
+
{ variable: '--popover', utility: 'bg-popover' },
|
|
37
|
+
{ variable: '--popover-foreground', utility: 'bg-popover-foreground' },
|
|
38
|
+
],
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
label: 'UI',
|
|
42
|
+
tokens: [
|
|
43
|
+
{ variable: '--border', utility: 'bg-border' },
|
|
44
|
+
{ variable: '--input', utility: 'bg-input' },
|
|
45
|
+
{ variable: '--ring', utility: 'bg-ring' },
|
|
46
|
+
],
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
label: 'Charts',
|
|
50
|
+
tokens: [
|
|
51
|
+
{ variable: '--chart-1', utility: 'bg-chart-1' },
|
|
52
|
+
{ variable: '--chart-2', utility: 'bg-chart-2' },
|
|
53
|
+
{ variable: '--chart-3', utility: 'bg-chart-3' },
|
|
54
|
+
{ variable: '--chart-4', utility: 'bg-chart-4' },
|
|
55
|
+
{ variable: '--chart-5', utility: 'bg-chart-5' },
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
label: 'Sidebar',
|
|
60
|
+
tokens: [
|
|
61
|
+
{ variable: '--sidebar', utility: 'bg-sidebar' },
|
|
62
|
+
{ variable: '--sidebar-foreground', utility: 'bg-sidebar-foreground' },
|
|
63
|
+
{ variable: '--sidebar-primary', utility: 'bg-sidebar-primary' },
|
|
64
|
+
{
|
|
65
|
+
variable: '--sidebar-primary-foreground',
|
|
66
|
+
utility: 'bg-sidebar-primary-foreground',
|
|
67
|
+
},
|
|
68
|
+
{ variable: '--sidebar-accent', utility: 'bg-sidebar-accent' },
|
|
69
|
+
{
|
|
70
|
+
variable: '--sidebar-accent-foreground',
|
|
71
|
+
utility: 'bg-sidebar-accent-foreground',
|
|
72
|
+
},
|
|
73
|
+
{ variable: '--sidebar-border', utility: 'bg-sidebar-border' },
|
|
74
|
+
{ variable: '--sidebar-ring', utility: 'bg-sidebar-ring' },
|
|
75
|
+
],
|
|
76
|
+
},
|
|
77
77
|
];
|
|
78
78
|
|
|
79
79
|
function ColorSwatch({ variable, utility }: ColorToken) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
80
|
+
return (
|
|
81
|
+
<div className="flex flex-col items-center gap-1.5">
|
|
82
|
+
<div className="h-16 w-16 rounded-md border border-border" style={{ backgroundColor: `var(${variable})` }} />
|
|
83
|
+
<span className="text-xs font-mono text-foreground">{variable}</span>
|
|
84
|
+
<span className="text-xs font-mono text-muted-foreground">{utility}</span>
|
|
85
|
+
</div>
|
|
86
|
+
);
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
function ColorSwatches() {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
90
|
+
return (
|
|
91
|
+
<div className="flex flex-col gap-10 p-6">
|
|
92
|
+
{colorGroups.map((group) => (
|
|
93
|
+
<section key={group.label}>
|
|
94
|
+
<h2 className="mb-4 text-lg font-semibold text-foreground">{group.label}</h2>
|
|
95
|
+
<div className="flex flex-wrap gap-6">
|
|
96
|
+
{group.tokens.map((token) => (
|
|
97
|
+
<ColorSwatch key={token.variable} {...token} />
|
|
98
|
+
))}
|
|
99
|
+
</div>
|
|
100
|
+
</section>
|
|
101
|
+
))}
|
|
102
|
+
</div>
|
|
103
|
+
);
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
const meta: Meta = {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
107
|
+
title: 'Design System/Colors',
|
|
108
|
+
component: ColorSwatches,
|
|
109
|
+
tags: ['!autodocs', '!manifest'],
|
|
110
110
|
};
|
|
111
111
|
export default meta;
|
|
112
112
|
|
|
113
113
|
type Story = StoryObj;
|
|
114
114
|
|
|
115
115
|
export const Default: Story = {
|
|
116
|
-
|
|
116
|
+
render: () => <ColorSwatches />,
|
|
117
117
|
};
|