create-deesse-app 0.3.0 → 0.4.1

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 (100) hide show
  1. package/dist/src/copy.d.ts.map +1 -1
  2. package/dist/src/copy.js +41 -66
  3. package/dist/src/copy.js.map +1 -1
  4. package/dist/tsconfig.tsbuildinfo +1 -1
  5. package/package.json +4 -5
  6. package/templates/default/.agents/skills/shadcn/SKILL.md +242 -0
  7. package/templates/default/.agents/skills/shadcn/agents/openai.yml +5 -0
  8. package/templates/default/.agents/skills/shadcn/assets/shadcn-small.png +0 -0
  9. package/templates/default/.agents/skills/shadcn/assets/shadcn.png +0 -0
  10. package/templates/default/.agents/skills/shadcn/cli.md +257 -0
  11. package/templates/default/.agents/skills/shadcn/customization.md +202 -0
  12. package/templates/default/.agents/skills/shadcn/evals/evals.json +47 -0
  13. package/templates/default/.agents/skills/shadcn/mcp.md +94 -0
  14. package/templates/default/.agents/skills/shadcn/rules/base-vs-radix.md +306 -0
  15. package/templates/default/.agents/skills/shadcn/rules/composition.md +195 -0
  16. package/templates/default/.agents/skills/shadcn/rules/forms.md +192 -0
  17. package/templates/default/.agents/skills/shadcn/rules/icons.md +101 -0
  18. package/templates/default/.agents/skills/shadcn/rules/styling.md +162 -0
  19. package/templates/default/AGENTS.md +5 -0
  20. package/templates/default/CLAUDE.md +1 -0
  21. package/templates/default/README.md +28 -0
  22. package/templates/default/components.json +25 -0
  23. package/templates/default/eslint.config.mjs +18 -0
  24. package/templates/default/next.config.ts +7 -0
  25. package/templates/default/package.json +50 -0
  26. package/templates/default/postcss.config.mjs +7 -0
  27. package/templates/default/public/file.svg +1 -0
  28. package/templates/default/public/globe.svg +1 -0
  29. package/templates/default/public/nesalia.svg +50 -0
  30. package/templates/default/public/window.svg +1 -0
  31. package/templates/default/skills-lock.json +10 -0
  32. package/templates/default/src/app/(deesse)/admin/[[...slug]]/page.tsx +20 -0
  33. package/templates/default/src/app/(deesse)/admin/layout.tsx +7 -0
  34. package/templates/default/src/app/(frontend)/page.tsx +50 -0
  35. package/templates/default/src/app/globals.css +130 -0
  36. package/templates/default/src/app/icon.svg +109 -0
  37. package/templates/default/src/app/layout.tsx +33 -0
  38. package/templates/default/src/app/page.tsx +50 -0
  39. package/templates/default/src/components/providers/index.tsx +9 -0
  40. package/templates/default/src/components/providers/theme-provider.tsx +11 -0
  41. package/templates/default/src/components/ui/accordion.tsx +81 -0
  42. package/templates/default/src/components/ui/alert-dialog.tsx +199 -0
  43. package/templates/default/src/components/ui/alert.tsx +76 -0
  44. package/templates/default/src/components/ui/aspect-ratio.tsx +11 -0
  45. package/templates/default/src/components/ui/avatar.tsx +112 -0
  46. package/templates/default/src/components/ui/badge.tsx +49 -0
  47. package/templates/default/src/components/ui/breadcrumb.tsx +122 -0
  48. package/templates/default/src/components/ui/button-group.tsx +83 -0
  49. package/templates/default/src/components/ui/button.tsx +67 -0
  50. package/templates/default/src/components/ui/calendar.tsx +222 -0
  51. package/templates/default/src/components/ui/card.tsx +103 -0
  52. package/templates/default/src/components/ui/carousel.tsx +242 -0
  53. package/templates/default/src/components/ui/chart.tsx +373 -0
  54. package/templates/default/src/components/ui/checkbox.tsx +33 -0
  55. package/templates/default/src/components/ui/collapsible.tsx +33 -0
  56. package/templates/default/src/components/ui/combobox.tsx +299 -0
  57. package/templates/default/src/components/ui/command.tsx +195 -0
  58. package/templates/default/src/components/ui/context-menu.tsx +263 -0
  59. package/templates/default/src/components/ui/dialog.tsx +168 -0
  60. package/templates/default/src/components/ui/direction.tsx +22 -0
  61. package/templates/default/src/components/ui/drawer.tsx +134 -0
  62. package/templates/default/src/components/ui/dropdown-menu.tsx +269 -0
  63. package/templates/default/src/components/ui/empty.tsx +104 -0
  64. package/templates/default/src/components/ui/field.tsx +238 -0
  65. package/templates/default/src/components/ui/hover-card.tsx +44 -0
  66. package/templates/default/src/components/ui/input-group.tsx +156 -0
  67. package/templates/default/src/components/ui/input-otp.tsx +87 -0
  68. package/templates/default/src/components/ui/input.tsx +19 -0
  69. package/templates/default/src/components/ui/item.tsx +196 -0
  70. package/templates/default/src/components/ui/kbd.tsx +26 -0
  71. package/templates/default/src/components/ui/label.tsx +24 -0
  72. package/templates/default/src/components/ui/menubar.tsx +280 -0
  73. package/templates/default/src/components/ui/native-select.tsx +52 -0
  74. package/templates/default/src/components/ui/navigation-menu.tsx +164 -0
  75. package/templates/default/src/components/ui/pagination.tsx +129 -0
  76. package/templates/default/src/components/ui/popover.tsx +89 -0
  77. package/templates/default/src/components/ui/progress.tsx +31 -0
  78. package/templates/default/src/components/ui/radio-group.tsx +44 -0
  79. package/templates/default/src/components/ui/resizable.tsx +50 -0
  80. package/templates/default/src/components/ui/scroll-area.tsx +55 -0
  81. package/templates/default/src/components/ui/select.tsx +192 -0
  82. package/templates/default/src/components/ui/separator.tsx +28 -0
  83. package/templates/default/src/components/ui/sheet.tsx +147 -0
  84. package/templates/default/src/components/ui/sidebar.tsx +702 -0
  85. package/templates/default/src/components/ui/skeleton.tsx +13 -0
  86. package/templates/default/src/components/ui/slider.tsx +59 -0
  87. package/templates/default/src/components/ui/sonner.tsx +49 -0
  88. package/templates/default/src/components/ui/spinner.tsx +10 -0
  89. package/templates/default/src/components/ui/switch.tsx +33 -0
  90. package/templates/default/src/components/ui/table.tsx +116 -0
  91. package/templates/default/src/components/ui/tabs.tsx +90 -0
  92. package/templates/default/src/components/ui/textarea.tsx +18 -0
  93. package/templates/default/src/components/ui/toggle-group.tsx +89 -0
  94. package/templates/default/src/components/ui/toggle.tsx +46 -0
  95. package/templates/default/src/components/ui/tooltip.tsx +57 -0
  96. package/templates/default/src/deesse.config.ts +11 -0
  97. package/templates/default/src/hooks/use-mobile.ts +19 -0
  98. package/templates/default/src/lib/utils.ts +6 -0
  99. package/templates/default/tsconfig.json +35 -0
  100. package/templates/minimal/.gitkeep +0 -0
@@ -0,0 +1,299 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import { Combobox as ComboboxPrimitive } from "@base-ui/react"
5
+
6
+ import { cn } from "@/lib/utils"
7
+ import { Button } from "@/components/ui/button"
8
+ import {
9
+ InputGroup,
10
+ InputGroupAddon,
11
+ InputGroupButton,
12
+ InputGroupInput,
13
+ } from "@/components/ui/input-group"
14
+ import { ChevronDownIcon, XIcon, CheckIcon } from "lucide-react"
15
+
16
+ const Combobox = ComboboxPrimitive.Root
17
+
18
+ function ComboboxValue({ ...props }: ComboboxPrimitive.Value.Props) {
19
+ return <ComboboxPrimitive.Value data-slot="combobox-value" {...props} />
20
+ }
21
+
22
+ function ComboboxTrigger({
23
+ className,
24
+ children,
25
+ ...props
26
+ }: ComboboxPrimitive.Trigger.Props) {
27
+ return (
28
+ <ComboboxPrimitive.Trigger
29
+ data-slot="combobox-trigger"
30
+ className={cn("[&_svg:not([class*='size-'])]:size-4", className)}
31
+ {...props}
32
+ >
33
+ {children}
34
+ <ChevronDownIcon className="pointer-events-none size-4 text-muted-foreground" />
35
+ </ComboboxPrimitive.Trigger>
36
+ )
37
+ }
38
+
39
+ function ComboboxClear({ className, ...props }: ComboboxPrimitive.Clear.Props) {
40
+ return (
41
+ <ComboboxPrimitive.Clear
42
+ data-slot="combobox-clear"
43
+ render={<InputGroupButton variant="ghost" size="icon-xs" />}
44
+ className={cn(className)}
45
+ {...props}
46
+ >
47
+ <XIcon className="pointer-events-none" />
48
+ </ComboboxPrimitive.Clear>
49
+ )
50
+ }
51
+
52
+ function ComboboxInput({
53
+ className,
54
+ children,
55
+ disabled = false,
56
+ showTrigger = true,
57
+ showClear = false,
58
+ ...props
59
+ }: ComboboxPrimitive.Input.Props & {
60
+ showTrigger?: boolean
61
+ showClear?: boolean
62
+ }) {
63
+ return (
64
+ <InputGroup className={cn("w-auto", className)}>
65
+ <ComboboxPrimitive.Input
66
+ render={<InputGroupInput disabled={disabled} />}
67
+ {...props}
68
+ />
69
+ <InputGroupAddon align="inline-end">
70
+ {showTrigger && (
71
+ <InputGroupButton
72
+ size="icon-xs"
73
+ variant="ghost"
74
+ asChild
75
+ data-slot="input-group-button"
76
+ className="group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent"
77
+ disabled={disabled}
78
+ >
79
+ <ComboboxTrigger />
80
+ </InputGroupButton>
81
+ )}
82
+ {showClear && <ComboboxClear disabled={disabled} />}
83
+ </InputGroupAddon>
84
+ {children}
85
+ </InputGroup>
86
+ )
87
+ }
88
+
89
+ function ComboboxContent({
90
+ className,
91
+ side = "bottom",
92
+ sideOffset = 6,
93
+ align = "start",
94
+ alignOffset = 0,
95
+ anchor,
96
+ ...props
97
+ }: ComboboxPrimitive.Popup.Props &
98
+ Pick<
99
+ ComboboxPrimitive.Positioner.Props,
100
+ "side" | "align" | "sideOffset" | "alignOffset" | "anchor"
101
+ >) {
102
+ return (
103
+ <ComboboxPrimitive.Portal>
104
+ <ComboboxPrimitive.Positioner
105
+ side={side}
106
+ sideOffset={sideOffset}
107
+ align={align}
108
+ alignOffset={alignOffset}
109
+ anchor={anchor}
110
+ className="isolate z-50"
111
+ >
112
+ <ComboboxPrimitive.Popup
113
+ data-slot="combobox-content"
114
+ data-chips={!!anchor}
115
+ className={cn("group/combobox-content relative max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-[calc(var(--anchor-width)+--spacing(7))] origin-(--transform-origin) overflow-hidden rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[chips=true]:min-w-(--anchor-width) data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:border-input/30 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:shadow-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className )}
116
+ {...props}
117
+ />
118
+ </ComboboxPrimitive.Positioner>
119
+ </ComboboxPrimitive.Portal>
120
+ )
121
+ }
122
+
123
+ function ComboboxList({ className, ...props }: ComboboxPrimitive.List.Props) {
124
+ return (
125
+ <ComboboxPrimitive.List
126
+ data-slot="combobox-list"
127
+ className={cn(
128
+ "no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto overscroll-contain p-1 data-empty:p-0",
129
+ className
130
+ )}
131
+ {...props}
132
+ />
133
+ )
134
+ }
135
+
136
+ function ComboboxItem({
137
+ className,
138
+ children,
139
+ ...props
140
+ }: ComboboxPrimitive.Item.Props) {
141
+ return (
142
+ <ComboboxPrimitive.Item
143
+ data-slot="combobox-item"
144
+ className={cn(
145
+ "relative flex w-full cursor-default items-center gap-2 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
146
+ className
147
+ )}
148
+ {...props}
149
+ >
150
+ {children}
151
+ <ComboboxPrimitive.ItemIndicator
152
+ render={
153
+ <span className="pointer-events-none absolute right-2 flex size-4 items-center justify-center" />
154
+ }
155
+ >
156
+ <CheckIcon className="pointer-events-none" />
157
+ </ComboboxPrimitive.ItemIndicator>
158
+ </ComboboxPrimitive.Item>
159
+ )
160
+ }
161
+
162
+ function ComboboxGroup({ className, ...props }: ComboboxPrimitive.Group.Props) {
163
+ return (
164
+ <ComboboxPrimitive.Group
165
+ data-slot="combobox-group"
166
+ className={cn(className)}
167
+ {...props}
168
+ />
169
+ )
170
+ }
171
+
172
+ function ComboboxLabel({
173
+ className,
174
+ ...props
175
+ }: ComboboxPrimitive.GroupLabel.Props) {
176
+ return (
177
+ <ComboboxPrimitive.GroupLabel
178
+ data-slot="combobox-label"
179
+ className={cn("px-2 py-1.5 text-xs text-muted-foreground", className)}
180
+ {...props}
181
+ />
182
+ )
183
+ }
184
+
185
+ function ComboboxCollection({ ...props }: ComboboxPrimitive.Collection.Props) {
186
+ return (
187
+ <ComboboxPrimitive.Collection data-slot="combobox-collection" {...props} />
188
+ )
189
+ }
190
+
191
+ function ComboboxEmpty({ className, ...props }: ComboboxPrimitive.Empty.Props) {
192
+ return (
193
+ <ComboboxPrimitive.Empty
194
+ data-slot="combobox-empty"
195
+ className={cn(
196
+ "hidden w-full justify-center py-2 text-center text-sm text-muted-foreground group-data-empty/combobox-content:flex",
197
+ className
198
+ )}
199
+ {...props}
200
+ />
201
+ )
202
+ }
203
+
204
+ function ComboboxSeparator({
205
+ className,
206
+ ...props
207
+ }: ComboboxPrimitive.Separator.Props) {
208
+ return (
209
+ <ComboboxPrimitive.Separator
210
+ data-slot="combobox-separator"
211
+ className={cn("-mx-1 my-1 h-px bg-border", className)}
212
+ {...props}
213
+ />
214
+ )
215
+ }
216
+
217
+ function ComboboxChips({
218
+ className,
219
+ ...props
220
+ }: React.ComponentPropsWithRef<typeof ComboboxPrimitive.Chips> &
221
+ ComboboxPrimitive.Chips.Props) {
222
+ return (
223
+ <ComboboxPrimitive.Chips
224
+ data-slot="combobox-chips"
225
+ className={cn(
226
+ "flex min-h-8 flex-wrap items-center gap-1 rounded-lg border border-input bg-transparent bg-clip-padding px-2.5 py-1 text-sm transition-colors focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50 has-aria-invalid:border-destructive has-aria-invalid:ring-3 has-aria-invalid:ring-destructive/20 has-data-[slot=combobox-chip]:px-1 dark:bg-input/30 dark:has-aria-invalid:border-destructive/50 dark:has-aria-invalid:ring-destructive/40",
227
+ className
228
+ )}
229
+ {...props}
230
+ />
231
+ )
232
+ }
233
+
234
+ function ComboboxChip({
235
+ className,
236
+ children,
237
+ showRemove = true,
238
+ ...props
239
+ }: ComboboxPrimitive.Chip.Props & {
240
+ showRemove?: boolean
241
+ }) {
242
+ return (
243
+ <ComboboxPrimitive.Chip
244
+ data-slot="combobox-chip"
245
+ className={cn(
246
+ "flex h-[calc(--spacing(5.25))] w-fit items-center justify-center gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium whitespace-nowrap text-foreground has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-disabled:opacity-50 has-data-[slot=combobox-chip-remove]:pr-0",
247
+ className
248
+ )}
249
+ {...props}
250
+ >
251
+ {children}
252
+ {showRemove && (
253
+ <ComboboxPrimitive.ChipRemove
254
+ render={<Button variant="ghost" size="icon-xs" />}
255
+ className="-ml-1 opacity-50 hover:opacity-100"
256
+ data-slot="combobox-chip-remove"
257
+ >
258
+ <XIcon className="pointer-events-none" />
259
+ </ComboboxPrimitive.ChipRemove>
260
+ )}
261
+ </ComboboxPrimitive.Chip>
262
+ )
263
+ }
264
+
265
+ function ComboboxChipsInput({
266
+ className,
267
+ ...props
268
+ }: ComboboxPrimitive.Input.Props) {
269
+ return (
270
+ <ComboboxPrimitive.Input
271
+ data-slot="combobox-chip-input"
272
+ className={cn("min-w-16 flex-1 outline-none", className)}
273
+ {...props}
274
+ />
275
+ )
276
+ }
277
+
278
+ function useComboboxAnchor() {
279
+ return React.useRef<HTMLDivElement | null>(null)
280
+ }
281
+
282
+ export {
283
+ Combobox,
284
+ ComboboxInput,
285
+ ComboboxContent,
286
+ ComboboxList,
287
+ ComboboxItem,
288
+ ComboboxGroup,
289
+ ComboboxLabel,
290
+ ComboboxCollection,
291
+ ComboboxEmpty,
292
+ ComboboxSeparator,
293
+ ComboboxChips,
294
+ ComboboxChip,
295
+ ComboboxChipsInput,
296
+ ComboboxTrigger,
297
+ ComboboxValue,
298
+ useComboboxAnchor,
299
+ }
@@ -0,0 +1,195 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import { Command as CommandPrimitive } from "cmdk"
5
+
6
+ import { cn } from "@/lib/utils"
7
+ import {
8
+ Dialog,
9
+ DialogContent,
10
+ DialogDescription,
11
+ DialogHeader,
12
+ DialogTitle,
13
+ } from "@/components/ui/dialog"
14
+ import {
15
+ InputGroup,
16
+ InputGroupAddon,
17
+ } from "@/components/ui/input-group"
18
+ import { SearchIcon, CheckIcon } from "lucide-react"
19
+
20
+ function Command({
21
+ className,
22
+ ...props
23
+ }: React.ComponentProps<typeof CommandPrimitive>) {
24
+ return (
25
+ <CommandPrimitive
26
+ data-slot="command"
27
+ className={cn(
28
+ "flex size-full flex-col overflow-hidden rounded-xl! bg-popover p-1 text-popover-foreground",
29
+ className
30
+ )}
31
+ {...props}
32
+ />
33
+ )
34
+ }
35
+
36
+ function CommandDialog({
37
+ title = "Command Palette",
38
+ description = "Search for a command to run...",
39
+ children,
40
+ className,
41
+ showCloseButton = false,
42
+ ...props
43
+ }: React.ComponentProps<typeof Dialog> & {
44
+ title?: string
45
+ description?: string
46
+ className?: string
47
+ showCloseButton?: boolean
48
+ }) {
49
+ return (
50
+ <Dialog {...props}>
51
+ <DialogHeader className="sr-only">
52
+ <DialogTitle>{title}</DialogTitle>
53
+ <DialogDescription>{description}</DialogDescription>
54
+ </DialogHeader>
55
+ <DialogContent
56
+ className={cn(
57
+ "top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0",
58
+ className
59
+ )}
60
+ showCloseButton={showCloseButton}
61
+ >
62
+ {children}
63
+ </DialogContent>
64
+ </Dialog>
65
+ )
66
+ }
67
+
68
+ function CommandInput({
69
+ className,
70
+ ...props
71
+ }: React.ComponentProps<typeof CommandPrimitive.Input>) {
72
+ return (
73
+ <div data-slot="command-input-wrapper" className="p-1 pb-0">
74
+ <InputGroup className="h-8! rounded-lg! border-input/30 bg-input/30 shadow-none! *:data-[slot=input-group-addon]:pl-2!">
75
+ <CommandPrimitive.Input
76
+ data-slot="command-input"
77
+ className={cn(
78
+ "w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
79
+ className
80
+ )}
81
+ {...props}
82
+ />
83
+ <InputGroupAddon>
84
+ <SearchIcon className="size-4 shrink-0 opacity-50" />
85
+ </InputGroupAddon>
86
+ </InputGroup>
87
+ </div>
88
+ )
89
+ }
90
+
91
+ function CommandList({
92
+ className,
93
+ ...props
94
+ }: React.ComponentProps<typeof CommandPrimitive.List>) {
95
+ return (
96
+ <CommandPrimitive.List
97
+ data-slot="command-list"
98
+ className={cn(
99
+ "no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none",
100
+ className
101
+ )}
102
+ {...props}
103
+ />
104
+ )
105
+ }
106
+
107
+ function CommandEmpty({
108
+ className,
109
+ ...props
110
+ }: React.ComponentProps<typeof CommandPrimitive.Empty>) {
111
+ return (
112
+ <CommandPrimitive.Empty
113
+ data-slot="command-empty"
114
+ className={cn("py-6 text-center text-sm", className)}
115
+ {...props}
116
+ />
117
+ )
118
+ }
119
+
120
+ function CommandGroup({
121
+ className,
122
+ ...props
123
+ }: React.ComponentProps<typeof CommandPrimitive.Group>) {
124
+ return (
125
+ <CommandPrimitive.Group
126
+ data-slot="command-group"
127
+ className={cn(
128
+ "overflow-hidden p-1 text-foreground **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground",
129
+ className
130
+ )}
131
+ {...props}
132
+ />
133
+ )
134
+ }
135
+
136
+ function CommandSeparator({
137
+ className,
138
+ ...props
139
+ }: React.ComponentProps<typeof CommandPrimitive.Separator>) {
140
+ return (
141
+ <CommandPrimitive.Separator
142
+ data-slot="command-separator"
143
+ className={cn("-mx-1 h-px bg-border", className)}
144
+ {...props}
145
+ />
146
+ )
147
+ }
148
+
149
+ function CommandItem({
150
+ className,
151
+ children,
152
+ ...props
153
+ }: React.ComponentProps<typeof CommandPrimitive.Item>) {
154
+ return (
155
+ <CommandPrimitive.Item
156
+ data-slot="command-item"
157
+ className={cn(
158
+ "group/command-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-selected:bg-muted data-selected:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-selected:*:[svg]:text-foreground",
159
+ className
160
+ )}
161
+ {...props}
162
+ >
163
+ {children}
164
+ <CheckIcon className="ml-auto opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100" />
165
+ </CommandPrimitive.Item>
166
+ )
167
+ }
168
+
169
+ function CommandShortcut({
170
+ className,
171
+ ...props
172
+ }: React.ComponentProps<"span">) {
173
+ return (
174
+ <span
175
+ data-slot="command-shortcut"
176
+ className={cn(
177
+ "ml-auto text-xs tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground",
178
+ className
179
+ )}
180
+ {...props}
181
+ />
182
+ )
183
+ }
184
+
185
+ export {
186
+ Command,
187
+ CommandDialog,
188
+ CommandInput,
189
+ CommandList,
190
+ CommandEmpty,
191
+ CommandGroup,
192
+ CommandItem,
193
+ CommandShortcut,
194
+ CommandSeparator,
195
+ }