@sero-ai/ui 0.1.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/.turbo/turbo-typecheck.log +4 -0
- package/components.json +18 -0
- package/package.json +70 -0
- package/src/components/ai-elements/agent.tsx +142 -0
- package/src/components/ai-elements/artifact.tsx +149 -0
- package/src/components/ai-elements/attachments.tsx +427 -0
- package/src/components/ai-elements/audio-player.tsx +232 -0
- package/src/components/ai-elements/canvas.tsx +26 -0
- package/src/components/ai-elements/chain-of-thought.tsx +223 -0
- package/src/components/ai-elements/checkpoint.tsx +72 -0
- package/src/components/ai-elements/code-block.tsx +555 -0
- package/src/components/ai-elements/commit.tsx +449 -0
- package/src/components/ai-elements/confirmation.tsx +173 -0
- package/src/components/ai-elements/connection.tsx +28 -0
- package/src/components/ai-elements/context.tsx +410 -0
- package/src/components/ai-elements/controls.tsx +19 -0
- package/src/components/ai-elements/conversation.tsx +167 -0
- package/src/components/ai-elements/edge.tsx +144 -0
- package/src/components/ai-elements/environment-variables.tsx +325 -0
- package/src/components/ai-elements/file-tree.tsx +298 -0
- package/src/components/ai-elements/image.tsx +25 -0
- package/src/components/ai-elements/inline-citation.tsx +294 -0
- package/src/components/ai-elements/jsx-preview.tsx +250 -0
- package/src/components/ai-elements/message.tsx +359 -0
- package/src/components/ai-elements/mic-selector.tsx +372 -0
- package/src/components/ai-elements/model-selector.tsx +214 -0
- package/src/components/ai-elements/node.tsx +72 -0
- package/src/components/ai-elements/open-in-chat.tsx +367 -0
- package/src/components/ai-elements/package-info.tsx +235 -0
- package/src/components/ai-elements/panel.tsx +16 -0
- package/src/components/ai-elements/persona.tsx +280 -0
- package/src/components/ai-elements/plan.tsx +144 -0
- package/src/components/ai-elements/prompt-input.tsx +1341 -0
- package/src/components/ai-elements/queue.tsx +275 -0
- package/src/components/ai-elements/reasoning.tsx +229 -0
- package/src/components/ai-elements/sandbox.tsx +133 -0
- package/src/components/ai-elements/schema-display.tsx +473 -0
- package/src/components/ai-elements/shimmer.tsx +78 -0
- package/src/components/ai-elements/snippet.tsx +141 -0
- package/src/components/ai-elements/sources.tsx +78 -0
- package/src/components/ai-elements/speech-input.tsx +324 -0
- package/src/components/ai-elements/stack-trace.tsx +531 -0
- package/src/components/ai-elements/suggestion.tsx +58 -0
- package/src/components/ai-elements/task.tsx +88 -0
- package/src/components/ai-elements/terminal.tsx +277 -0
- package/src/components/ai-elements/test-results.tsx +497 -0
- package/src/components/ai-elements/tool.tsx +174 -0
- package/src/components/ai-elements/toolbar.tsx +17 -0
- package/src/components/ai-elements/transcription.tsx +126 -0
- package/src/components/ai-elements/voice-selector.tsx +525 -0
- package/src/components/ai-elements/web-preview.tsx +282 -0
- package/src/components/ui/accordion.tsx +64 -0
- package/src/components/ui/alert-dialog.tsx +196 -0
- package/src/components/ui/alert.tsx +66 -0
- package/src/components/ui/aspect-ratio.tsx +11 -0
- package/src/components/ui/avatar.tsx +107 -0
- package/src/components/ui/badge.tsx +48 -0
- package/src/components/ui/breadcrumb.tsx +109 -0
- package/src/components/ui/button-group.tsx +83 -0
- package/src/components/ui/button.tsx +64 -0
- package/src/components/ui/calendar.tsx +218 -0
- package/src/components/ui/card.tsx +92 -0
- package/src/components/ui/carousel.tsx +239 -0
- package/src/components/ui/chart.tsx +355 -0
- package/src/components/ui/checkbox.tsx +32 -0
- package/src/components/ui/collapsible.tsx +31 -0
- package/src/components/ui/combobox.tsx +310 -0
- package/src/components/ui/command.tsx +184 -0
- package/src/components/ui/context-menu.tsx +252 -0
- package/src/components/ui/dialog.tsx +158 -0
- package/src/components/ui/direction.tsx +22 -0
- package/src/components/ui/drawer.tsx +133 -0
- package/src/components/ui/dropdown-menu.tsx +257 -0
- package/src/components/ui/empty.tsx +104 -0
- package/src/components/ui/field.tsx +248 -0
- package/src/components/ui/form.tsx +165 -0
- package/src/components/ui/hover-card.tsx +42 -0
- package/src/components/ui/input-group.tsx +168 -0
- package/src/components/ui/input-otp.tsx +77 -0
- package/src/components/ui/input.tsx +21 -0
- package/src/components/ui/item.tsx +193 -0
- package/src/components/ui/kbd.tsx +28 -0
- package/src/components/ui/label.tsx +22 -0
- package/src/components/ui/menubar.tsx +276 -0
- package/src/components/ui/native-select.tsx +53 -0
- package/src/components/ui/navigation-menu.tsx +168 -0
- package/src/components/ui/pagination.tsx +127 -0
- package/src/components/ui/popover.tsx +87 -0
- package/src/components/ui/progress.tsx +31 -0
- package/src/components/ui/radio-group.tsx +43 -0
- package/src/components/ui/resizable.tsx +53 -0
- package/src/components/ui/scroll-area.tsx +56 -0
- package/src/components/ui/select.tsx +190 -0
- package/src/components/ui/separator.tsx +28 -0
- package/src/components/ui/sheet.tsx +145 -0
- package/src/components/ui/sidebar.tsx +724 -0
- package/src/components/ui/skeleton.tsx +13 -0
- package/src/components/ui/slider.tsx +61 -0
- package/src/components/ui/sonner.tsx +40 -0
- package/src/components/ui/spinner.tsx +16 -0
- package/src/components/ui/switch.tsx +33 -0
- package/src/components/ui/table.tsx +116 -0
- package/src/components/ui/tabs.tsx +91 -0
- package/src/components/ui/textarea.tsx +18 -0
- package/src/components/ui/toggle-group.tsx +83 -0
- package/src/components/ui/toggle.tsx +47 -0
- package/src/components/ui/tooltip.tsx +57 -0
- package/src/components/ui/tree.tsx +207 -0
- package/src/hooks/use-mobile.ts +17 -0
- package/src/index.ts +16 -0
- package/src/lib/utils.ts +6 -0
- package/src/styles/globals.css +373 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Collapsible as CollapsiblePrimitive } from "radix-ui"
|
|
2
|
+
|
|
3
|
+
function Collapsible({
|
|
4
|
+
...props
|
|
5
|
+
}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {
|
|
6
|
+
return <CollapsiblePrimitive.Root data-slot="collapsible" {...props} />
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function CollapsibleTrigger({
|
|
10
|
+
...props
|
|
11
|
+
}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {
|
|
12
|
+
return (
|
|
13
|
+
<CollapsiblePrimitive.CollapsibleTrigger
|
|
14
|
+
data-slot="collapsible-trigger"
|
|
15
|
+
{...props}
|
|
16
|
+
/>
|
|
17
|
+
)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function CollapsibleContent({
|
|
21
|
+
...props
|
|
22
|
+
}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {
|
|
23
|
+
return (
|
|
24
|
+
<CollapsiblePrimitive.CollapsibleContent
|
|
25
|
+
data-slot="collapsible-content"
|
|
26
|
+
{...props}
|
|
27
|
+
/>
|
|
28
|
+
)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export { Collapsible, CollapsibleTrigger, CollapsibleContent }
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import * as React from "react"
|
|
4
|
+
import { Combobox as ComboboxPrimitive } from "@base-ui/react"
|
|
5
|
+
import { CheckIcon, ChevronDownIcon, XIcon } from "lucide-react"
|
|
6
|
+
|
|
7
|
+
import { cn } from "../../lib/utils"
|
|
8
|
+
import { Button } from "./button"
|
|
9
|
+
import {
|
|
10
|
+
InputGroup,
|
|
11
|
+
InputGroupAddon,
|
|
12
|
+
InputGroupButton,
|
|
13
|
+
InputGroupInput,
|
|
14
|
+
} from "./input-group"
|
|
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
|
|
35
|
+
data-slot="combobox-trigger-icon"
|
|
36
|
+
className="text-muted-foreground pointer-events-none size-4"
|
|
37
|
+
/>
|
|
38
|
+
</ComboboxPrimitive.Trigger>
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function ComboboxClear({ className, ...props }: ComboboxPrimitive.Clear.Props) {
|
|
43
|
+
return (
|
|
44
|
+
<ComboboxPrimitive.Clear
|
|
45
|
+
data-slot="combobox-clear"
|
|
46
|
+
render={<InputGroupButton variant="ghost" size="icon-xs" />}
|
|
47
|
+
className={cn(className)}
|
|
48
|
+
{...props}
|
|
49
|
+
>
|
|
50
|
+
<XIcon className="pointer-events-none" />
|
|
51
|
+
</ComboboxPrimitive.Clear>
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function ComboboxInput({
|
|
56
|
+
className,
|
|
57
|
+
children,
|
|
58
|
+
disabled = false,
|
|
59
|
+
showTrigger = true,
|
|
60
|
+
showClear = false,
|
|
61
|
+
...props
|
|
62
|
+
}: ComboboxPrimitive.Input.Props & {
|
|
63
|
+
showTrigger?: boolean
|
|
64
|
+
showClear?: boolean
|
|
65
|
+
}) {
|
|
66
|
+
return (
|
|
67
|
+
<InputGroup className={cn("w-auto", className)}>
|
|
68
|
+
<ComboboxPrimitive.Input
|
|
69
|
+
render={<InputGroupInput disabled={disabled} />}
|
|
70
|
+
{...props}
|
|
71
|
+
/>
|
|
72
|
+
<InputGroupAddon align="inline-end">
|
|
73
|
+
{showTrigger && (
|
|
74
|
+
<InputGroupButton
|
|
75
|
+
size="icon-xs"
|
|
76
|
+
variant="ghost"
|
|
77
|
+
asChild
|
|
78
|
+
data-slot="input-group-button"
|
|
79
|
+
className="group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent"
|
|
80
|
+
disabled={disabled}
|
|
81
|
+
>
|
|
82
|
+
<ComboboxTrigger />
|
|
83
|
+
</InputGroupButton>
|
|
84
|
+
)}
|
|
85
|
+
{showClear && <ComboboxClear disabled={disabled} />}
|
|
86
|
+
</InputGroupAddon>
|
|
87
|
+
{children}
|
|
88
|
+
</InputGroup>
|
|
89
|
+
)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function ComboboxContent({
|
|
93
|
+
className,
|
|
94
|
+
side = "bottom",
|
|
95
|
+
sideOffset = 6,
|
|
96
|
+
align = "start",
|
|
97
|
+
alignOffset = 0,
|
|
98
|
+
anchor,
|
|
99
|
+
...props
|
|
100
|
+
}: ComboboxPrimitive.Popup.Props &
|
|
101
|
+
Pick<
|
|
102
|
+
ComboboxPrimitive.Positioner.Props,
|
|
103
|
+
"side" | "align" | "sideOffset" | "alignOffset" | "anchor"
|
|
104
|
+
>) {
|
|
105
|
+
return (
|
|
106
|
+
<ComboboxPrimitive.Portal>
|
|
107
|
+
<ComboboxPrimitive.Positioner
|
|
108
|
+
side={side}
|
|
109
|
+
sideOffset={sideOffset}
|
|
110
|
+
align={align}
|
|
111
|
+
alignOffset={alignOffset}
|
|
112
|
+
anchor={anchor}
|
|
113
|
+
className="isolate z-50"
|
|
114
|
+
>
|
|
115
|
+
<ComboboxPrimitive.Popup
|
|
116
|
+
data-slot="combobox-content"
|
|
117
|
+
data-chips={!!anchor}
|
|
118
|
+
className={cn(
|
|
119
|
+
"bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-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 ring-foreground/10 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:border-input/30 group/combobox-content relative max-h-96 w-(--anchor-width) max-w-(--available-width) min-w-[calc(var(--anchor-width)+--spacing(7))] origin-(--transform-origin) overflow-hidden rounded-md shadow-md ring-1 duration-100 data-[chips=true]:min-w-(--anchor-width) *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:shadow-none",
|
|
120
|
+
className
|
|
121
|
+
)}
|
|
122
|
+
{...props}
|
|
123
|
+
/>
|
|
124
|
+
</ComboboxPrimitive.Positioner>
|
|
125
|
+
</ComboboxPrimitive.Portal>
|
|
126
|
+
)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function ComboboxList({ className, ...props }: ComboboxPrimitive.List.Props) {
|
|
130
|
+
return (
|
|
131
|
+
<ComboboxPrimitive.List
|
|
132
|
+
data-slot="combobox-list"
|
|
133
|
+
className={cn(
|
|
134
|
+
"max-h-[min(calc(--spacing(96)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto p-1 data-empty:p-0",
|
|
135
|
+
className
|
|
136
|
+
)}
|
|
137
|
+
{...props}
|
|
138
|
+
/>
|
|
139
|
+
)
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function ComboboxItem({
|
|
143
|
+
className,
|
|
144
|
+
children,
|
|
145
|
+
...props
|
|
146
|
+
}: ComboboxPrimitive.Item.Props) {
|
|
147
|
+
return (
|
|
148
|
+
<ComboboxPrimitive.Item
|
|
149
|
+
data-slot="combobox-item"
|
|
150
|
+
className={cn(
|
|
151
|
+
"data-highlighted:bg-accent data-highlighted:text-accent-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 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",
|
|
152
|
+
className
|
|
153
|
+
)}
|
|
154
|
+
{...props}
|
|
155
|
+
>
|
|
156
|
+
{children}
|
|
157
|
+
<ComboboxPrimitive.ItemIndicator
|
|
158
|
+
data-slot="combobox-item-indicator"
|
|
159
|
+
render={
|
|
160
|
+
<span className="pointer-events-none absolute right-2 flex size-4 items-center justify-center" />
|
|
161
|
+
}
|
|
162
|
+
>
|
|
163
|
+
<CheckIcon className="pointer-events-none size-4 pointer-coarse:size-5" />
|
|
164
|
+
</ComboboxPrimitive.ItemIndicator>
|
|
165
|
+
</ComboboxPrimitive.Item>
|
|
166
|
+
)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function ComboboxGroup({ className, ...props }: ComboboxPrimitive.Group.Props) {
|
|
170
|
+
return (
|
|
171
|
+
<ComboboxPrimitive.Group
|
|
172
|
+
data-slot="combobox-group"
|
|
173
|
+
className={cn(className)}
|
|
174
|
+
{...props}
|
|
175
|
+
/>
|
|
176
|
+
)
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function ComboboxLabel({
|
|
180
|
+
className,
|
|
181
|
+
...props
|
|
182
|
+
}: ComboboxPrimitive.GroupLabel.Props) {
|
|
183
|
+
return (
|
|
184
|
+
<ComboboxPrimitive.GroupLabel
|
|
185
|
+
data-slot="combobox-label"
|
|
186
|
+
className={cn(
|
|
187
|
+
"text-muted-foreground px-2 py-1.5 text-xs pointer-coarse:px-3 pointer-coarse:py-2 pointer-coarse:text-sm",
|
|
188
|
+
className
|
|
189
|
+
)}
|
|
190
|
+
{...props}
|
|
191
|
+
/>
|
|
192
|
+
)
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
function ComboboxCollection({ ...props }: ComboboxPrimitive.Collection.Props) {
|
|
196
|
+
return (
|
|
197
|
+
<ComboboxPrimitive.Collection data-slot="combobox-collection" {...props} />
|
|
198
|
+
)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
function ComboboxEmpty({ className, ...props }: ComboboxPrimitive.Empty.Props) {
|
|
202
|
+
return (
|
|
203
|
+
<ComboboxPrimitive.Empty
|
|
204
|
+
data-slot="combobox-empty"
|
|
205
|
+
className={cn(
|
|
206
|
+
"text-muted-foreground hidden w-full justify-center py-2 text-center text-sm group-data-empty/combobox-content:flex",
|
|
207
|
+
className
|
|
208
|
+
)}
|
|
209
|
+
{...props}
|
|
210
|
+
/>
|
|
211
|
+
)
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
function ComboboxSeparator({
|
|
215
|
+
className,
|
|
216
|
+
...props
|
|
217
|
+
}: ComboboxPrimitive.Separator.Props) {
|
|
218
|
+
return (
|
|
219
|
+
<ComboboxPrimitive.Separator
|
|
220
|
+
data-slot="combobox-separator"
|
|
221
|
+
className={cn("bg-border -mx-1 my-1 h-px", className)}
|
|
222
|
+
{...props}
|
|
223
|
+
/>
|
|
224
|
+
)
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
function ComboboxChips({
|
|
228
|
+
className,
|
|
229
|
+
...props
|
|
230
|
+
}: React.ComponentPropsWithRef<typeof ComboboxPrimitive.Chips> &
|
|
231
|
+
ComboboxPrimitive.Chips.Props) {
|
|
232
|
+
return (
|
|
233
|
+
<ComboboxPrimitive.Chips
|
|
234
|
+
data-slot="combobox-chips"
|
|
235
|
+
className={cn(
|
|
236
|
+
"dark:bg-input/30 border-input focus-within:border-ring focus-within:ring-ring/50 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive dark:has-aria-invalid:border-destructive/50 flex min-h-9 flex-wrap items-center gap-1.5 rounded-md border bg-transparent bg-clip-padding px-2.5 py-1.5 text-sm shadow-xs transition-[color,box-shadow] focus-within:ring-[3px] has-aria-invalid:ring-[3px] has-data-[slot=combobox-chip]:px-1.5",
|
|
237
|
+
className
|
|
238
|
+
)}
|
|
239
|
+
{...props}
|
|
240
|
+
/>
|
|
241
|
+
)
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
function ComboboxChip({
|
|
245
|
+
className,
|
|
246
|
+
children,
|
|
247
|
+
showRemove = true,
|
|
248
|
+
...props
|
|
249
|
+
}: ComboboxPrimitive.Chip.Props & {
|
|
250
|
+
showRemove?: boolean
|
|
251
|
+
}) {
|
|
252
|
+
return (
|
|
253
|
+
<ComboboxPrimitive.Chip
|
|
254
|
+
data-slot="combobox-chip"
|
|
255
|
+
className={cn(
|
|
256
|
+
"bg-muted text-foreground flex h-[calc(--spacing(5.5))] w-fit items-center justify-center gap-1 rounded-sm px-1.5 text-xs font-medium whitespace-nowrap has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-disabled:opacity-50 has-data-[slot=combobox-chip-remove]:pr-0",
|
|
257
|
+
className
|
|
258
|
+
)}
|
|
259
|
+
{...props}
|
|
260
|
+
>
|
|
261
|
+
{children}
|
|
262
|
+
{showRemove && (
|
|
263
|
+
<ComboboxPrimitive.ChipRemove
|
|
264
|
+
render={<Button variant="ghost" size="icon-xs" />}
|
|
265
|
+
className="-ml-1 opacity-50 hover:opacity-100"
|
|
266
|
+
data-slot="combobox-chip-remove"
|
|
267
|
+
>
|
|
268
|
+
<XIcon className="pointer-events-none" />
|
|
269
|
+
</ComboboxPrimitive.ChipRemove>
|
|
270
|
+
)}
|
|
271
|
+
</ComboboxPrimitive.Chip>
|
|
272
|
+
)
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
function ComboboxChipsInput({
|
|
276
|
+
className,
|
|
277
|
+
children,
|
|
278
|
+
...props
|
|
279
|
+
}: ComboboxPrimitive.Input.Props) {
|
|
280
|
+
return (
|
|
281
|
+
<ComboboxPrimitive.Input
|
|
282
|
+
data-slot="combobox-chip-input"
|
|
283
|
+
className={cn("min-w-16 flex-1 outline-none", className)}
|
|
284
|
+
{...props}
|
|
285
|
+
/>
|
|
286
|
+
)
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
function useComboboxAnchor() {
|
|
290
|
+
return React.useRef<HTMLDivElement | null>(null)
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
export {
|
|
294
|
+
Combobox,
|
|
295
|
+
ComboboxInput,
|
|
296
|
+
ComboboxContent,
|
|
297
|
+
ComboboxList,
|
|
298
|
+
ComboboxItem,
|
|
299
|
+
ComboboxGroup,
|
|
300
|
+
ComboboxLabel,
|
|
301
|
+
ComboboxCollection,
|
|
302
|
+
ComboboxEmpty,
|
|
303
|
+
ComboboxSeparator,
|
|
304
|
+
ComboboxChips,
|
|
305
|
+
ComboboxChip,
|
|
306
|
+
ComboboxChipsInput,
|
|
307
|
+
ComboboxTrigger,
|
|
308
|
+
ComboboxValue,
|
|
309
|
+
useComboboxAnchor,
|
|
310
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import * as React from "react"
|
|
4
|
+
import { Command as CommandPrimitive } from "cmdk"
|
|
5
|
+
import { SearchIcon } from "lucide-react"
|
|
6
|
+
|
|
7
|
+
import { cn } from "../../lib/utils"
|
|
8
|
+
import {
|
|
9
|
+
Dialog,
|
|
10
|
+
DialogContent,
|
|
11
|
+
DialogDescription,
|
|
12
|
+
DialogHeader,
|
|
13
|
+
DialogTitle,
|
|
14
|
+
} from "./dialog"
|
|
15
|
+
|
|
16
|
+
function Command({
|
|
17
|
+
className,
|
|
18
|
+
...props
|
|
19
|
+
}: React.ComponentProps<typeof CommandPrimitive>) {
|
|
20
|
+
return (
|
|
21
|
+
<CommandPrimitive
|
|
22
|
+
data-slot="command"
|
|
23
|
+
className={cn(
|
|
24
|
+
"bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md",
|
|
25
|
+
className
|
|
26
|
+
)}
|
|
27
|
+
{...props}
|
|
28
|
+
/>
|
|
29
|
+
)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function CommandDialog({
|
|
33
|
+
title = "Command Palette",
|
|
34
|
+
description = "Search for a command to run...",
|
|
35
|
+
children,
|
|
36
|
+
className,
|
|
37
|
+
showCloseButton = true,
|
|
38
|
+
...props
|
|
39
|
+
}: React.ComponentProps<typeof Dialog> & {
|
|
40
|
+
title?: string
|
|
41
|
+
description?: string
|
|
42
|
+
className?: string
|
|
43
|
+
showCloseButton?: boolean
|
|
44
|
+
}) {
|
|
45
|
+
return (
|
|
46
|
+
<Dialog {...props}>
|
|
47
|
+
<DialogHeader className="sr-only">
|
|
48
|
+
<DialogTitle>{title}</DialogTitle>
|
|
49
|
+
<DialogDescription>{description}</DialogDescription>
|
|
50
|
+
</DialogHeader>
|
|
51
|
+
<DialogContent
|
|
52
|
+
className={cn("overflow-hidden p-0", className)}
|
|
53
|
+
showCloseButton={showCloseButton}
|
|
54
|
+
>
|
|
55
|
+
<Command className="[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5">
|
|
56
|
+
{children}
|
|
57
|
+
</Command>
|
|
58
|
+
</DialogContent>
|
|
59
|
+
</Dialog>
|
|
60
|
+
)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function CommandInput({
|
|
64
|
+
className,
|
|
65
|
+
...props
|
|
66
|
+
}: React.ComponentProps<typeof CommandPrimitive.Input>) {
|
|
67
|
+
return (
|
|
68
|
+
<div
|
|
69
|
+
data-slot="command-input-wrapper"
|
|
70
|
+
className="flex h-9 items-center gap-2 border-b px-3"
|
|
71
|
+
>
|
|
72
|
+
<SearchIcon className="size-4 shrink-0 opacity-50" />
|
|
73
|
+
<CommandPrimitive.Input
|
|
74
|
+
data-slot="command-input"
|
|
75
|
+
className={cn(
|
|
76
|
+
"placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
|
|
77
|
+
className
|
|
78
|
+
)}
|
|
79
|
+
{...props}
|
|
80
|
+
/>
|
|
81
|
+
</div>
|
|
82
|
+
)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function CommandList({
|
|
86
|
+
className,
|
|
87
|
+
...props
|
|
88
|
+
}: React.ComponentProps<typeof CommandPrimitive.List>) {
|
|
89
|
+
return (
|
|
90
|
+
<CommandPrimitive.List
|
|
91
|
+
data-slot="command-list"
|
|
92
|
+
className={cn(
|
|
93
|
+
"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",
|
|
94
|
+
className
|
|
95
|
+
)}
|
|
96
|
+
{...props}
|
|
97
|
+
/>
|
|
98
|
+
)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function CommandEmpty({
|
|
102
|
+
...props
|
|
103
|
+
}: React.ComponentProps<typeof CommandPrimitive.Empty>) {
|
|
104
|
+
return (
|
|
105
|
+
<CommandPrimitive.Empty
|
|
106
|
+
data-slot="command-empty"
|
|
107
|
+
className="py-6 text-center text-sm"
|
|
108
|
+
{...props}
|
|
109
|
+
/>
|
|
110
|
+
)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function CommandGroup({
|
|
114
|
+
className,
|
|
115
|
+
...props
|
|
116
|
+
}: React.ComponentProps<typeof CommandPrimitive.Group>) {
|
|
117
|
+
return (
|
|
118
|
+
<CommandPrimitive.Group
|
|
119
|
+
data-slot="command-group"
|
|
120
|
+
className={cn(
|
|
121
|
+
"text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium",
|
|
122
|
+
className
|
|
123
|
+
)}
|
|
124
|
+
{...props}
|
|
125
|
+
/>
|
|
126
|
+
)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function CommandSeparator({
|
|
130
|
+
className,
|
|
131
|
+
...props
|
|
132
|
+
}: React.ComponentProps<typeof CommandPrimitive.Separator>) {
|
|
133
|
+
return (
|
|
134
|
+
<CommandPrimitive.Separator
|
|
135
|
+
data-slot="command-separator"
|
|
136
|
+
className={cn("bg-border -mx-1 h-px", className)}
|
|
137
|
+
{...props}
|
|
138
|
+
/>
|
|
139
|
+
)
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function CommandItem({
|
|
143
|
+
className,
|
|
144
|
+
...props
|
|
145
|
+
}: React.ComponentProps<typeof CommandPrimitive.Item>) {
|
|
146
|
+
return (
|
|
147
|
+
<CommandPrimitive.Item
|
|
148
|
+
data-slot="command-item"
|
|
149
|
+
className={cn(
|
|
150
|
+
"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_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=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
151
|
+
className
|
|
152
|
+
)}
|
|
153
|
+
{...props}
|
|
154
|
+
/>
|
|
155
|
+
)
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function CommandShortcut({
|
|
159
|
+
className,
|
|
160
|
+
...props
|
|
161
|
+
}: React.ComponentProps<"span">) {
|
|
162
|
+
return (
|
|
163
|
+
<span
|
|
164
|
+
data-slot="command-shortcut"
|
|
165
|
+
className={cn(
|
|
166
|
+
"text-muted-foreground ml-auto text-xs tracking-widest",
|
|
167
|
+
className
|
|
168
|
+
)}
|
|
169
|
+
{...props}
|
|
170
|
+
/>
|
|
171
|
+
)
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export {
|
|
175
|
+
Command,
|
|
176
|
+
CommandDialog,
|
|
177
|
+
CommandInput,
|
|
178
|
+
CommandList,
|
|
179
|
+
CommandEmpty,
|
|
180
|
+
CommandGroup,
|
|
181
|
+
CommandItem,
|
|
182
|
+
CommandShortcut,
|
|
183
|
+
CommandSeparator,
|
|
184
|
+
}
|