@auto-engineer/generate-react-client 1.64.0 → 1.66.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/CHANGELOG.md +140 -0
  2. package/dist/starter/.storybook/main.ts +17 -22
  3. package/dist/starter/.storybook/manager-head.html +31 -31
  4. package/dist/starter/.storybook/manager.ts +133 -133
  5. package/dist/starter/.storybook/preview-head.html +12 -12
  6. package/dist/starter/.storybook/preview.tsx +79 -79
  7. package/dist/starter/biome.json +126 -0
  8. package/dist/starter/codegen.ts +11 -11
  9. package/dist/starter/components.json +27 -27
  10. package/dist/starter/package.json +86 -80
  11. package/dist/starter/public/mockServiceWorker.js +261 -261
  12. package/dist/starter/scripts/build-component-db.ts +17 -20
  13. package/dist/starter/src/App.tsx +15 -17
  14. package/dist/starter/src/components/ui/Accordion.stories.tsx +35 -35
  15. package/dist/starter/src/components/ui/Accordion.tsx +33 -33
  16. package/dist/starter/src/components/ui/Alert.stories.tsx +15 -15
  17. package/dist/starter/src/components/ui/Alert.tsx +32 -32
  18. package/dist/starter/src/components/ui/AlertDialog.stories.tsx +50 -50
  19. package/dist/starter/src/components/ui/AlertDialog.tsx +114 -115
  20. package/dist/starter/src/components/ui/AspectRatio.stories.tsx +20 -20
  21. package/dist/starter/src/components/ui/AspectRatio.tsx +1 -1
  22. package/dist/starter/src/components/ui/Avatar.stories.tsx +27 -27
  23. package/dist/starter/src/components/ui/Avatar.tsx +63 -63
  24. package/dist/starter/src/components/ui/Badge.stories.tsx +14 -14
  25. package/dist/starter/src/components/ui/Badge.tsx +27 -27
  26. package/dist/starter/src/components/ui/Breadcrumb.stories.tsx +38 -38
  27. package/dist/starter/src/components/ui/Breadcrumb.tsx +63 -62
  28. package/dist/starter/src/components/ui/Button.stories.tsx +55 -55
  29. package/dist/starter/src/components/ui/Button.tsx +49 -49
  30. package/dist/starter/src/components/ui/ButtonGroup.stories.tsx +17 -17
  31. package/dist/starter/src/components/ui/ButtonGroup.tsx +52 -53
  32. package/dist/starter/src/components/ui/Calendar.stories.tsx +20 -19
  33. package/dist/starter/src/components/ui/Calendar.tsx +142 -143
  34. package/dist/starter/src/components/ui/Card.stories.tsx +29 -29
  35. package/dist/starter/src/components/ui/Card.tsx +31 -31
  36. package/dist/starter/src/components/ui/Carousel.stories.tsx +41 -41
  37. package/dist/starter/src/components/ui/Carousel.tsx +171 -172
  38. package/dist/starter/src/components/ui/Chart.stories.tsx +21 -21
  39. package/dist/starter/src/components/ui/Chart.tsx +244 -247
  40. package/dist/starter/src/components/ui/Checkbox.stories.tsx +11 -11
  41. package/dist/starter/src/components/ui/Checkbox.tsx +18 -18
  42. package/dist/starter/src/components/ui/Collapsible.stories.tsx +40 -40
  43. package/dist/starter/src/components/ui/Collapsible.tsx +3 -3
  44. package/dist/starter/src/components/ui/Combobox.stories.tsx +48 -48
  45. package/dist/starter/src/components/ui/Combobox.tsx +204 -205
  46. package/dist/starter/src/components/ui/Command.stories.tsx +55 -55
  47. package/dist/starter/src/components/ui/Command.tsx +102 -103
  48. package/dist/starter/src/components/ui/ContextMenu.stories.tsx +52 -52
  49. package/dist/starter/src/components/ui/ContextMenu.tsx +151 -151
  50. package/dist/starter/src/components/ui/DesignSystem-Colors.stories.tsx +92 -92
  51. package/dist/starter/src/components/ui/DesignSystem-Layout.stories.tsx +139 -139
  52. package/dist/starter/src/components/ui/DesignSystem-Overview.stories.tsx +676 -657
  53. package/dist/starter/src/components/ui/DesignSystem-Typography.stories.tsx +59 -59
  54. package/dist/starter/src/components/ui/Dialog.stories.tsx +56 -56
  55. package/dist/starter/src/components/ui/Dialog.tsx +97 -98
  56. package/dist/starter/src/components/ui/Direction.stories.tsx +20 -20
  57. package/dist/starter/src/components/ui/Direction.tsx +7 -7
  58. package/dist/starter/src/components/ui/Drawer.stories.tsx +54 -54
  59. package/dist/starter/src/components/ui/Drawer.tsx +70 -70
  60. package/dist/starter/src/components/ui/DropdownMenu.stories.tsx +58 -58
  61. package/dist/starter/src/components/ui/DropdownMenu.tsx +157 -157
  62. package/dist/starter/src/components/ui/Empty.stories.tsx +22 -22
  63. package/dist/starter/src/components/ui/Empty.tsx +58 -58
  64. package/dist/starter/src/components/ui/Field.stories.tsx +31 -31
  65. package/dist/starter/src/components/ui/Field.tsx +180 -181
  66. package/dist/starter/src/components/ui/Form.stories.tsx +29 -29
  67. package/dist/starter/src/components/ui/Form.tsx +93 -96
  68. package/dist/starter/src/components/ui/HoverCard.stories.tsx +34 -34
  69. package/dist/starter/src/components/ui/HoverCard.tsx +21 -21
  70. package/dist/starter/src/components/ui/Input.stories.tsx +18 -18
  71. package/dist/starter/src/components/ui/Input.tsx +14 -14
  72. package/dist/starter/src/components/ui/InputGroup.stories.tsx +34 -34
  73. package/dist/starter/src/components/ui/InputGroup.tsx +110 -111
  74. package/dist/starter/src/components/ui/InputOTP.stories.tsx +28 -28
  75. package/dist/starter/src/components/ui/InputOTP.tsx +43 -43
  76. package/dist/starter/src/components/ui/Item.stories.tsx +45 -45
  77. package/dist/starter/src/components/ui/Item.tsx +113 -114
  78. package/dist/starter/src/components/ui/Kbd.stories.tsx +31 -31
  79. package/dist/starter/src/components/ui/Kbd.tsx +11 -11
  80. package/dist/starter/src/components/ui/Label.stories.tsx +62 -62
  81. package/dist/starter/src/components/ui/Label.tsx +26 -25
  82. package/dist/starter/src/components/ui/Menubar.stories.tsx +62 -62
  83. package/dist/starter/src/components/ui/Menubar.tsx +173 -173
  84. package/dist/starter/src/components/ui/NativeSelect.stories.tsx +26 -26
  85. package/dist/starter/src/components/ui/NativeSelect.tsx +29 -29
  86. package/dist/starter/src/components/ui/NavigationMenu.stories.tsx +64 -64
  87. package/dist/starter/src/components/ui/NavigationMenu.tsx +103 -103
  88. package/dist/starter/src/components/ui/Pagination.stories.tsx +61 -61
  89. package/dist/starter/src/components/ui/Pagination.tsx +69 -71
  90. package/dist/starter/src/components/ui/Popover.stories.tsx +38 -38
  91. package/dist/starter/src/components/ui/Popover.tsx +25 -25
  92. package/dist/starter/src/components/ui/Progress.stories.tsx +9 -9
  93. package/dist/starter/src/components/ui/Progress.tsx +14 -14
  94. package/dist/starter/src/components/ui/RadioGroup.stories.tsx +35 -35
  95. package/dist/starter/src/components/ui/RadioGroup.tsx +19 -19
  96. package/dist/starter/src/components/ui/Resizable.stories.tsx +54 -54
  97. package/dist/starter/src/components/ui/Resizable.tsx +29 -29
  98. package/dist/starter/src/components/ui/ScrollArea.stories.tsx +27 -27
  99. package/dist/starter/src/components/ui/ScrollArea.tsx +34 -34
  100. package/dist/starter/src/components/ui/Select.stories.tsx +43 -43
  101. package/dist/starter/src/components/ui/Select.tsx +120 -120
  102. package/dist/starter/src/components/ui/Separator.stories.tsx +27 -27
  103. package/dist/starter/src/components/ui/Separator.tsx +17 -17
  104. package/dist/starter/src/components/ui/Sheet.stories.tsx +53 -53
  105. package/dist/starter/src/components/ui/Sheet.tsx +69 -69
  106. package/dist/starter/src/components/ui/Sidebar.stories.tsx +77 -77
  107. package/dist/starter/src/components/ui/Sidebar.tsx +563 -564
  108. package/dist/starter/src/components/ui/Skeleton.stories.tsx +25 -25
  109. package/dist/starter/src/components/ui/Skeleton.tsx +1 -1
  110. package/dist/starter/src/components/ui/Slider.stories.tsx +5 -5
  111. package/dist/starter/src/components/ui/Slider.tsx +45 -44
  112. package/dist/starter/src/components/ui/Sonner.stories.tsx +32 -32
  113. package/dist/starter/src/components/ui/Sonner.tsx +23 -23
  114. package/dist/starter/src/components/ui/Spinner.stories.tsx +8 -8
  115. package/dist/starter/src/components/ui/Spinner.tsx +1 -1
  116. package/dist/starter/src/components/ui/Switch.stories.tsx +16 -17
  117. package/dist/starter/src/components/ui/Switch.tsx +24 -24
  118. package/dist/starter/src/components/ui/Table.stories.tsx +50 -50
  119. package/dist/starter/src/components/ui/Table.tsx +45 -45
  120. package/dist/starter/src/components/ui/Tabs.stories.tsx +39 -39
  121. package/dist/starter/src/components/ui/Tabs.tsx +47 -47
  122. package/dist/starter/src/components/ui/Textarea.stories.tsx +9 -9
  123. package/dist/starter/src/components/ui/Textarea.tsx +11 -11
  124. package/dist/starter/src/components/ui/Toast.stories.tsx +77 -77
  125. package/dist/starter/src/components/ui/Toast.tsx +75 -75
  126. package/dist/starter/src/components/ui/Toaster.tsx +17 -19
  127. package/dist/starter/src/components/ui/Toggle.stories.tsx +20 -20
  128. package/dist/starter/src/components/ui/Toggle.tsx +26 -26
  129. package/dist/starter/src/components/ui/ToggleGroup.stories.tsx +41 -41
  130. package/dist/starter/src/components/ui/ToggleGroup.tsx +61 -62
  131. package/dist/starter/src/components/ui/Tooltip.stories.tsx +26 -26
  132. package/dist/starter/src/components/ui/Tooltip.tsx +24 -24
  133. package/dist/starter/src/gql/execute.ts +1 -1
  134. package/dist/starter/src/gql/fragment-masking.ts +1 -1
  135. package/dist/starter/src/gql/graphql.ts +3 -0
  136. package/dist/starter/src/hooks/use-mobile.ts +11 -11
  137. package/dist/starter/src/hooks/use-toast.ts +135 -135
  138. package/dist/starter/src/index.css +105 -105
  139. package/dist/starter/src/lib/utils.ts +1 -1
  140. package/dist/starter/src/main.tsx +4 -1
  141. package/dist/starter/tsconfig.app.json +24 -24
  142. package/dist/starter/tsconfig.json +8 -8
  143. package/dist/starter/vite.config.ts +38 -37
  144. package/dist/tsconfig.tsbuildinfo +1 -1
  145. 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
- return <ContextMenuPrimitive.Root data-slot="context-menu" {...props} />;
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
- return <ContextMenuPrimitive.Trigger data-slot="context-menu-trigger" {...props} />;
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
- return <ContextMenuPrimitive.Group data-slot="context-menu-group" {...props} />;
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
- return <ContextMenuPrimitive.Portal data-slot="context-menu-portal" {...props} />;
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
- return <ContextMenuPrimitive.Sub data-slot="context-menu-sub" {...props} />;
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
- return <ContextMenuPrimitive.RadioGroup data-slot="context-menu-radio-group" {...props} />;
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
- className,
42
- inset,
43
- children,
44
- ...props
41
+ className,
42
+ inset,
43
+ children,
44
+ ...props
45
45
  }: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & {
46
- inset?: boolean;
46
+ inset?: boolean;
47
47
  }) {
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
- );
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
- 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
- );
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
- 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
- );
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
- 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
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
- inset?: boolean;
107
- variant?: 'default' | 'destructive';
106
+ inset?: boolean;
107
+ variant?: 'default' | 'destructive';
108
108
  }) {
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
- );
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
- className,
126
- children,
127
- checked,
128
- ...props
125
+ className,
126
+ children,
127
+ checked,
128
+ ...props
129
129
  }: React.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem>) {
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
- );
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
- className,
153
- children,
154
- ...props
152
+ className,
153
+ children,
154
+ ...props
155
155
  }: React.ComponentProps<typeof ContextMenuPrimitive.RadioItem>) {
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
- );
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
- className,
178
- inset,
179
- ...props
177
+ className,
178
+ inset,
179
+ ...props
180
180
  }: React.ComponentProps<typeof ContextMenuPrimitive.Label> & {
181
- inset?: boolean;
181
+ inset?: boolean;
182
182
  }) {
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
- );
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
- 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
- );
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
- 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
- );
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
- 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,
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
- variable: string;
5
- utility: string;
4
+ variable: string;
5
+ utility: string;
6
6
  }
7
7
 
8
8
  interface ColorGroup {
9
- label: string;
10
- tokens: ColorToken[];
9
+ label: string;
10
+ tokens: ColorToken[];
11
11
  }
12
12
 
13
13
  const colorGroups: ColorGroup[] = [
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
- },
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
- 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
- );
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
- 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
- );
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
- title: 'Design System/Colors',
108
- component: ColorSwatches,
109
- tags: ['!autodocs', '!manifest'],
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
- render: () => <ColorSwatches />,
116
+ render: () => <ColorSwatches />,
117
117
  };