@seaguntech/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/LICENSE +21 -0
- package/README.md +11 -0
- package/dist/index.cjs +1131 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +210 -0
- package/dist/index.d.ts +210 -0
- package/dist/index.js +1041 -0
- package/dist/index.js.map +1 -0
- package/package.json +78 -0
- package/src/styles/globals.css +27 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,1131 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
"use strict";
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
+
mod
|
|
28
|
+
));
|
|
29
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
+
|
|
31
|
+
// src/index.ts
|
|
32
|
+
var src_exports = {};
|
|
33
|
+
__export(src_exports, {
|
|
34
|
+
Badge: () => Badge,
|
|
35
|
+
BentoGrid: () => BentoGrid,
|
|
36
|
+
BentoGridItem: () => BentoGridItem,
|
|
37
|
+
Button: () => Button,
|
|
38
|
+
Card: () => Card,
|
|
39
|
+
CardContent: () => CardContent,
|
|
40
|
+
CardDescription: () => CardDescription,
|
|
41
|
+
CardFooter: () => CardFooter,
|
|
42
|
+
CardHeader: () => CardHeader,
|
|
43
|
+
CardTitle: () => CardTitle,
|
|
44
|
+
Command: () => Command,
|
|
45
|
+
CommandDialog: () => CommandDialog,
|
|
46
|
+
CommandEmpty: () => CommandEmpty,
|
|
47
|
+
CommandGroup: () => CommandGroup,
|
|
48
|
+
CommandInput: () => CommandInput,
|
|
49
|
+
CommandItem: () => CommandItem,
|
|
50
|
+
CommandList: () => CommandList,
|
|
51
|
+
CommandSeparator: () => CommandSeparator,
|
|
52
|
+
CommandShortcut: () => CommandShortcut,
|
|
53
|
+
Conversation: () => Conversation,
|
|
54
|
+
Dialog: () => Dialog,
|
|
55
|
+
DialogClose: () => DialogClose,
|
|
56
|
+
DialogContent: () => DialogContent,
|
|
57
|
+
DialogDescription: () => DialogDescription,
|
|
58
|
+
DialogFooter: () => DialogFooter,
|
|
59
|
+
DialogHeader: () => DialogHeader,
|
|
60
|
+
DialogOverlay: () => DialogOverlay,
|
|
61
|
+
DialogPortal: () => DialogPortal,
|
|
62
|
+
DialogTitle: () => DialogTitle,
|
|
63
|
+
DialogTrigger: () => DialogTrigger,
|
|
64
|
+
DropdownMenu: () => DropdownMenu,
|
|
65
|
+
DropdownMenuContent: () => DropdownMenuContent,
|
|
66
|
+
DropdownMenuItem: () => DropdownMenuItem,
|
|
67
|
+
DropdownMenuLabel: () => DropdownMenuLabel,
|
|
68
|
+
DropdownMenuSeparator: () => DropdownMenuSeparator,
|
|
69
|
+
DropdownMenuTrigger: () => DropdownMenuTrigger,
|
|
70
|
+
GenerativeContainer: () => GenerativeContainer,
|
|
71
|
+
Input: () => Input,
|
|
72
|
+
Label: () => Label2,
|
|
73
|
+
MagneticButton: () => MagneticButton,
|
|
74
|
+
Message: () => Message,
|
|
75
|
+
ScrollArea: () => ScrollArea,
|
|
76
|
+
ScrollBar: () => ScrollBar,
|
|
77
|
+
Separator: () => Separator2,
|
|
78
|
+
SpotlightCard: () => SpotlightCard,
|
|
79
|
+
Tabs: () => Tabs,
|
|
80
|
+
TabsContent: () => TabsContent,
|
|
81
|
+
TabsList: () => TabsList,
|
|
82
|
+
TabsTrigger: () => TabsTrigger,
|
|
83
|
+
Textarea: () => Textarea,
|
|
84
|
+
VoiceButton: () => VoiceButton,
|
|
85
|
+
VoiceInputBar: () => VoiceInputBar,
|
|
86
|
+
Waveform: () => Waveform,
|
|
87
|
+
buttonVariants: () => buttonVariants,
|
|
88
|
+
cn: () => cn
|
|
89
|
+
});
|
|
90
|
+
module.exports = __toCommonJS(src_exports);
|
|
91
|
+
|
|
92
|
+
// src/lib/utils.ts
|
|
93
|
+
var import_clsx = require("clsx");
|
|
94
|
+
var import_tailwind_merge = require("tailwind-merge");
|
|
95
|
+
function cn(...inputs) {
|
|
96
|
+
return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// src/components/badge.tsx
|
|
100
|
+
var import_class_variance_authority = require("class-variance-authority");
|
|
101
|
+
var React = __toESM(require("react"), 1);
|
|
102
|
+
var badgeVariants = (0, import_class_variance_authority.cva)(
|
|
103
|
+
"inline-flex items-center rounded-md border px-2 py-0.5 text-xs font-medium transition-all duration-300",
|
|
104
|
+
{
|
|
105
|
+
variants: {
|
|
106
|
+
variant: {
|
|
107
|
+
default: "border-transparent bg-primary text-primary-foreground",
|
|
108
|
+
secondary: "border-transparent bg-secondary text-secondary-foreground",
|
|
109
|
+
outline: "text-foreground",
|
|
110
|
+
new: "badge-new"
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
defaultVariants: {
|
|
114
|
+
variant: "default"
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
);
|
|
118
|
+
function Badge({
|
|
119
|
+
className,
|
|
120
|
+
variant,
|
|
121
|
+
...props
|
|
122
|
+
}) {
|
|
123
|
+
return /* @__PURE__ */ React.createElement(
|
|
124
|
+
"div",
|
|
125
|
+
{
|
|
126
|
+
"data-slot": "badge",
|
|
127
|
+
className: cn(badgeVariants({ variant }), className),
|
|
128
|
+
...props
|
|
129
|
+
}
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// src/components/bento-grid.tsx
|
|
134
|
+
var import_react = __toESM(require("react"), 1);
|
|
135
|
+
function BentoGrid({ className, children, ...props }) {
|
|
136
|
+
return /* @__PURE__ */ import_react.default.createElement(
|
|
137
|
+
"div",
|
|
138
|
+
{
|
|
139
|
+
className: cn(
|
|
140
|
+
"grid w-full auto-rows-[22rem] grid-cols-3 gap-4 mx-auto",
|
|
141
|
+
className
|
|
142
|
+
),
|
|
143
|
+
...props
|
|
144
|
+
},
|
|
145
|
+
children
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
function BentoGridItem({
|
|
149
|
+
className,
|
|
150
|
+
title,
|
|
151
|
+
description,
|
|
152
|
+
header,
|
|
153
|
+
icon
|
|
154
|
+
}) {
|
|
155
|
+
return /* @__PURE__ */ import_react.default.createElement(
|
|
156
|
+
"div",
|
|
157
|
+
{
|
|
158
|
+
className: cn(
|
|
159
|
+
"row-span-1 rounded-xl group/bento hover:shadow-xl transition duration-200 shadow-input dark:shadow-none p-4 dark:bg-black dark:border-white/[0.2] bg-white border border-transparent justify-between flex flex-col space-y-4",
|
|
160
|
+
className
|
|
161
|
+
)
|
|
162
|
+
},
|
|
163
|
+
header,
|
|
164
|
+
/* @__PURE__ */ import_react.default.createElement("div", { className: "group-hover/bento:translate-x-2 transition duration-200" }, icon, /* @__PURE__ */ import_react.default.createElement("div", { className: "font-sans font-bold text-neutral-600 dark:text-neutral-200 mb-2 mt-2" }, title), /* @__PURE__ */ import_react.default.createElement("div", { className: "font-sans font-normal text-neutral-600 text-xs dark:text-neutral-300" }, description))
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// src/components/button.tsx
|
|
169
|
+
var import_react_slot = require("@radix-ui/react-slot");
|
|
170
|
+
var import_class_variance_authority2 = require("class-variance-authority");
|
|
171
|
+
var React3 = __toESM(require("react"), 1);
|
|
172
|
+
var buttonVariants = (0, import_class_variance_authority2.cva)(
|
|
173
|
+
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4",
|
|
174
|
+
{
|
|
175
|
+
variants: {
|
|
176
|
+
variant: {
|
|
177
|
+
default: "bg-primary text-primary-foreground hover:opacity-90",
|
|
178
|
+
secondary: "bg-secondary text-secondary-foreground hover:opacity-90",
|
|
179
|
+
outline: "border border-input bg-background hover:bg-accent",
|
|
180
|
+
ghost: "hover:bg-accent",
|
|
181
|
+
destructive: "bg-destructive text-destructive-foreground hover:opacity-90",
|
|
182
|
+
link: "text-primary underline-offset-4 hover:underline"
|
|
183
|
+
},
|
|
184
|
+
size: {
|
|
185
|
+
default: "h-10 px-4 py-2",
|
|
186
|
+
sm: "h-9 px-3",
|
|
187
|
+
lg: "h-11 px-8",
|
|
188
|
+
icon: "size-10"
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
defaultVariants: {
|
|
192
|
+
variant: "default",
|
|
193
|
+
size: "default"
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
);
|
|
197
|
+
function Button({
|
|
198
|
+
className,
|
|
199
|
+
variant,
|
|
200
|
+
size,
|
|
201
|
+
asChild = false,
|
|
202
|
+
...props
|
|
203
|
+
}) {
|
|
204
|
+
const Comp = asChild ? import_react_slot.Slot : "button";
|
|
205
|
+
return /* @__PURE__ */ React3.createElement(
|
|
206
|
+
Comp,
|
|
207
|
+
{
|
|
208
|
+
"data-slot": "button",
|
|
209
|
+
className: cn(buttonVariants({ variant, size, className })),
|
|
210
|
+
...props
|
|
211
|
+
}
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// src/components/card.tsx
|
|
216
|
+
var React4 = __toESM(require("react"), 1);
|
|
217
|
+
function Card({ className, ...props }) {
|
|
218
|
+
return /* @__PURE__ */ React4.createElement(
|
|
219
|
+
"div",
|
|
220
|
+
{
|
|
221
|
+
"data-slot": "card",
|
|
222
|
+
className: cn(
|
|
223
|
+
"rounded-lg border bg-card text-card-foreground shadow-sm",
|
|
224
|
+
className
|
|
225
|
+
),
|
|
226
|
+
...props
|
|
227
|
+
}
|
|
228
|
+
);
|
|
229
|
+
}
|
|
230
|
+
function CardHeader({
|
|
231
|
+
className,
|
|
232
|
+
...props
|
|
233
|
+
}) {
|
|
234
|
+
return /* @__PURE__ */ React4.createElement(
|
|
235
|
+
"div",
|
|
236
|
+
{
|
|
237
|
+
"data-slot": "card-header",
|
|
238
|
+
className: cn("flex flex-col space-y-1.5 p-6", className),
|
|
239
|
+
...props
|
|
240
|
+
}
|
|
241
|
+
);
|
|
242
|
+
}
|
|
243
|
+
function CardTitle({ className, ...props }) {
|
|
244
|
+
return /* @__PURE__ */ React4.createElement(
|
|
245
|
+
"h3",
|
|
246
|
+
{
|
|
247
|
+
"data-slot": "card-title",
|
|
248
|
+
className: cn(
|
|
249
|
+
"text-lg font-semibold leading-none tracking-tight",
|
|
250
|
+
className
|
|
251
|
+
),
|
|
252
|
+
...props
|
|
253
|
+
}
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
function CardDescription({
|
|
257
|
+
className,
|
|
258
|
+
...props
|
|
259
|
+
}) {
|
|
260
|
+
return /* @__PURE__ */ React4.createElement(
|
|
261
|
+
"p",
|
|
262
|
+
{
|
|
263
|
+
"data-slot": "card-description",
|
|
264
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
265
|
+
...props
|
|
266
|
+
}
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
function CardContent({
|
|
270
|
+
className,
|
|
271
|
+
...props
|
|
272
|
+
}) {
|
|
273
|
+
return /* @__PURE__ */ React4.createElement(
|
|
274
|
+
"div",
|
|
275
|
+
{
|
|
276
|
+
"data-slot": "card-content",
|
|
277
|
+
className: cn("p-6 pt-0", className),
|
|
278
|
+
...props
|
|
279
|
+
}
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
function CardFooter({
|
|
283
|
+
className,
|
|
284
|
+
...props
|
|
285
|
+
}) {
|
|
286
|
+
return /* @__PURE__ */ React4.createElement(
|
|
287
|
+
"div",
|
|
288
|
+
{
|
|
289
|
+
"data-slot": "card-footer",
|
|
290
|
+
className: cn("flex items-center p-6 pt-0", className),
|
|
291
|
+
...props
|
|
292
|
+
}
|
|
293
|
+
);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// src/components/dialog.tsx
|
|
297
|
+
var DialogPrimitive = __toESM(require("@radix-ui/react-dialog"), 1);
|
|
298
|
+
var import_lucide_react = require("lucide-react");
|
|
299
|
+
var React5 = __toESM(require("react"), 1);
|
|
300
|
+
function Dialog(props) {
|
|
301
|
+
return /* @__PURE__ */ React5.createElement(DialogPrimitive.Root, { "data-slot": "dialog", ...props });
|
|
302
|
+
}
|
|
303
|
+
function DialogTrigger(props) {
|
|
304
|
+
return /* @__PURE__ */ React5.createElement(DialogPrimitive.Trigger, { "data-slot": "dialog-trigger", ...props });
|
|
305
|
+
}
|
|
306
|
+
function DialogPortal(props) {
|
|
307
|
+
return /* @__PURE__ */ React5.createElement(DialogPrimitive.Portal, { "data-slot": "dialog-portal", ...props });
|
|
308
|
+
}
|
|
309
|
+
function DialogClose(props) {
|
|
310
|
+
return /* @__PURE__ */ React5.createElement(DialogPrimitive.Close, { "data-slot": "dialog-close", ...props });
|
|
311
|
+
}
|
|
312
|
+
function DialogOverlay({
|
|
313
|
+
className,
|
|
314
|
+
...props
|
|
315
|
+
}) {
|
|
316
|
+
return /* @__PURE__ */ React5.createElement(
|
|
317
|
+
DialogPrimitive.Overlay,
|
|
318
|
+
{
|
|
319
|
+
"data-slot": "dialog-overlay",
|
|
320
|
+
className: cn(
|
|
321
|
+
"fixed inset-0 z-50 bg-black/60 backdrop-blur-sm",
|
|
322
|
+
className
|
|
323
|
+
),
|
|
324
|
+
...props
|
|
325
|
+
}
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
function DialogContent({
|
|
329
|
+
className,
|
|
330
|
+
children,
|
|
331
|
+
...props
|
|
332
|
+
}) {
|
|
333
|
+
return /* @__PURE__ */ React5.createElement(DialogPortal, null, /* @__PURE__ */ React5.createElement(DialogOverlay, null), /* @__PURE__ */ React5.createElement(
|
|
334
|
+
DialogPrimitive.Content,
|
|
335
|
+
{
|
|
336
|
+
"data-slot": "dialog-content",
|
|
337
|
+
className: cn(
|
|
338
|
+
"bg-background fixed top-1/2 left-1/2 z-50 grid w-[calc(100%-2rem)] max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 rounded-lg border p-6 shadow-lg",
|
|
339
|
+
className
|
|
340
|
+
),
|
|
341
|
+
...props
|
|
342
|
+
},
|
|
343
|
+
children,
|
|
344
|
+
/* @__PURE__ */ React5.createElement(DialogPrimitive.Close, { className: "ring-offset-background data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-sm opacity-80 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2" }, /* @__PURE__ */ React5.createElement(import_lucide_react.X, { className: "size-4" }), /* @__PURE__ */ React5.createElement("span", { className: "sr-only" }, "Close"))
|
|
345
|
+
));
|
|
346
|
+
}
|
|
347
|
+
function DialogHeader({
|
|
348
|
+
className,
|
|
349
|
+
...props
|
|
350
|
+
}) {
|
|
351
|
+
return /* @__PURE__ */ React5.createElement(
|
|
352
|
+
"div",
|
|
353
|
+
{
|
|
354
|
+
"data-slot": "dialog-header",
|
|
355
|
+
className: cn("flex flex-col space-y-1.5", className),
|
|
356
|
+
...props
|
|
357
|
+
}
|
|
358
|
+
);
|
|
359
|
+
}
|
|
360
|
+
function DialogFooter({
|
|
361
|
+
className,
|
|
362
|
+
...props
|
|
363
|
+
}) {
|
|
364
|
+
return /* @__PURE__ */ React5.createElement(
|
|
365
|
+
"div",
|
|
366
|
+
{
|
|
367
|
+
"data-slot": "dialog-footer",
|
|
368
|
+
className: cn(
|
|
369
|
+
"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
|
|
370
|
+
className
|
|
371
|
+
),
|
|
372
|
+
...props
|
|
373
|
+
}
|
|
374
|
+
);
|
|
375
|
+
}
|
|
376
|
+
function DialogTitle({
|
|
377
|
+
className,
|
|
378
|
+
...props
|
|
379
|
+
}) {
|
|
380
|
+
return /* @__PURE__ */ React5.createElement(
|
|
381
|
+
DialogPrimitive.Title,
|
|
382
|
+
{
|
|
383
|
+
"data-slot": "dialog-title",
|
|
384
|
+
className: cn("text-lg font-semibold", className),
|
|
385
|
+
...props
|
|
386
|
+
}
|
|
387
|
+
);
|
|
388
|
+
}
|
|
389
|
+
function DialogDescription({
|
|
390
|
+
className,
|
|
391
|
+
...props
|
|
392
|
+
}) {
|
|
393
|
+
return /* @__PURE__ */ React5.createElement(
|
|
394
|
+
DialogPrimitive.Description,
|
|
395
|
+
{
|
|
396
|
+
"data-slot": "dialog-description",
|
|
397
|
+
className: cn("text-muted-foreground text-sm", className),
|
|
398
|
+
...props
|
|
399
|
+
}
|
|
400
|
+
);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
// src/components/command.tsx
|
|
404
|
+
var import_cmdk = require("cmdk");
|
|
405
|
+
var import_lucide_react2 = require("lucide-react");
|
|
406
|
+
var React6 = __toESM(require("react"), 1);
|
|
407
|
+
var Command = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React6.createElement(
|
|
408
|
+
import_cmdk.Command,
|
|
409
|
+
{
|
|
410
|
+
ref,
|
|
411
|
+
className: cn(
|
|
412
|
+
"flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",
|
|
413
|
+
className
|
|
414
|
+
),
|
|
415
|
+
...props
|
|
416
|
+
}
|
|
417
|
+
));
|
|
418
|
+
Command.displayName = import_cmdk.Command.displayName;
|
|
419
|
+
var CommandDialog = ({ children, ...props }) => {
|
|
420
|
+
return /* @__PURE__ */ React6.createElement(Dialog, { ...props }, /* @__PURE__ */ React6.createElement(DialogContent, { className: "overflow-hidden p-0 shadow-lg" }, /* @__PURE__ */ React6.createElement(DialogTitle, { className: "sr-only" }, "Command menu"), /* @__PURE__ */ React6.createElement(Command, { className: "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[data-cmdk-input-wrapper]_svg]:h-5 [&_[data-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" }, children)));
|
|
421
|
+
};
|
|
422
|
+
var CommandInput = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React6.createElement("div", { className: "flex items-center border-b px-3", "data-cmdk-input-wrapper": "" }, /* @__PURE__ */ React6.createElement(import_lucide_react2.Search, { className: "mr-2 h-4 w-4 shrink-0 opacity-50" }), /* @__PURE__ */ React6.createElement(
|
|
423
|
+
import_cmdk.Command.Input,
|
|
424
|
+
{
|
|
425
|
+
ref,
|
|
426
|
+
className: cn(
|
|
427
|
+
"flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
|
|
428
|
+
className
|
|
429
|
+
),
|
|
430
|
+
...props
|
|
431
|
+
}
|
|
432
|
+
)));
|
|
433
|
+
CommandInput.displayName = import_cmdk.Command.Input.displayName;
|
|
434
|
+
var CommandList = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React6.createElement(
|
|
435
|
+
import_cmdk.Command.List,
|
|
436
|
+
{
|
|
437
|
+
ref,
|
|
438
|
+
className: cn("max-h-[300px] overflow-y-auto overflow-x-hidden", className),
|
|
439
|
+
...props
|
|
440
|
+
}
|
|
441
|
+
));
|
|
442
|
+
CommandList.displayName = import_cmdk.Command.List.displayName;
|
|
443
|
+
var CommandEmpty = React6.forwardRef((props, ref) => /* @__PURE__ */ React6.createElement(
|
|
444
|
+
import_cmdk.Command.Empty,
|
|
445
|
+
{
|
|
446
|
+
ref,
|
|
447
|
+
className: "py-6 text-center text-sm",
|
|
448
|
+
...props
|
|
449
|
+
}
|
|
450
|
+
));
|
|
451
|
+
CommandEmpty.displayName = import_cmdk.Command.Empty.displayName;
|
|
452
|
+
var CommandGroup = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React6.createElement(
|
|
453
|
+
import_cmdk.Command.Group,
|
|
454
|
+
{
|
|
455
|
+
ref,
|
|
456
|
+
className: cn(
|
|
457
|
+
"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",
|
|
458
|
+
className
|
|
459
|
+
),
|
|
460
|
+
...props
|
|
461
|
+
}
|
|
462
|
+
));
|
|
463
|
+
CommandGroup.displayName = import_cmdk.Command.Group.displayName;
|
|
464
|
+
var CommandSeparator = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React6.createElement(
|
|
465
|
+
import_cmdk.Command.Separator,
|
|
466
|
+
{
|
|
467
|
+
ref,
|
|
468
|
+
className: cn("-mx-1 h-px bg-border", className),
|
|
469
|
+
...props
|
|
470
|
+
}
|
|
471
|
+
));
|
|
472
|
+
CommandSeparator.displayName = import_cmdk.Command.Separator.displayName;
|
|
473
|
+
var CommandItem = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React6.createElement(
|
|
474
|
+
import_cmdk.Command.Item,
|
|
475
|
+
{
|
|
476
|
+
ref,
|
|
477
|
+
className: cn(
|
|
478
|
+
"relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected='true']:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
479
|
+
className
|
|
480
|
+
),
|
|
481
|
+
...props
|
|
482
|
+
}
|
|
483
|
+
));
|
|
484
|
+
CommandItem.displayName = import_cmdk.Command.Item.displayName;
|
|
485
|
+
var CommandShortcut = ({
|
|
486
|
+
className,
|
|
487
|
+
...props
|
|
488
|
+
}) => {
|
|
489
|
+
return /* @__PURE__ */ React6.createElement(
|
|
490
|
+
"span",
|
|
491
|
+
{
|
|
492
|
+
className: cn(
|
|
493
|
+
"ml-auto text-xs tracking-widest text-muted-foreground",
|
|
494
|
+
className
|
|
495
|
+
),
|
|
496
|
+
...props
|
|
497
|
+
}
|
|
498
|
+
);
|
|
499
|
+
};
|
|
500
|
+
CommandShortcut.displayName = "CommandShortcut";
|
|
501
|
+
|
|
502
|
+
// src/components/conversation.tsx
|
|
503
|
+
var React7 = __toESM(require("react"), 1);
|
|
504
|
+
function Conversation({
|
|
505
|
+
className,
|
|
506
|
+
...props
|
|
507
|
+
}) {
|
|
508
|
+
return /* @__PURE__ */ React7.createElement(
|
|
509
|
+
"div",
|
|
510
|
+
{
|
|
511
|
+
"data-slot": "conversation",
|
|
512
|
+
className: cn("flex flex-col gap-3", className),
|
|
513
|
+
...props
|
|
514
|
+
}
|
|
515
|
+
);
|
|
516
|
+
}
|
|
517
|
+
function Message({
|
|
518
|
+
from = "assistant",
|
|
519
|
+
className,
|
|
520
|
+
...props
|
|
521
|
+
}) {
|
|
522
|
+
return /* @__PURE__ */ React7.createElement(
|
|
523
|
+
"div",
|
|
524
|
+
{
|
|
525
|
+
"data-slot": "message",
|
|
526
|
+
className: cn(
|
|
527
|
+
"max-w-[80%] rounded-xl px-3 py-2 text-sm",
|
|
528
|
+
from === "user" ? "bg-primary text-primary-foreground ml-auto" : "bg-muted text-foreground",
|
|
529
|
+
className
|
|
530
|
+
),
|
|
531
|
+
...props
|
|
532
|
+
}
|
|
533
|
+
);
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
// src/components/dropdown-menu.tsx
|
|
537
|
+
var DropdownMenuPrimitive = __toESM(require("@radix-ui/react-dropdown-menu"), 1);
|
|
538
|
+
var React8 = __toESM(require("react"), 1);
|
|
539
|
+
function DropdownMenu(props) {
|
|
540
|
+
return /* @__PURE__ */ React8.createElement(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
|
|
541
|
+
}
|
|
542
|
+
function DropdownMenuTrigger(props) {
|
|
543
|
+
return /* @__PURE__ */ React8.createElement(
|
|
544
|
+
DropdownMenuPrimitive.Trigger,
|
|
545
|
+
{
|
|
546
|
+
"data-slot": "dropdown-menu-trigger",
|
|
547
|
+
...props
|
|
548
|
+
}
|
|
549
|
+
);
|
|
550
|
+
}
|
|
551
|
+
function DropdownMenuContent({
|
|
552
|
+
className,
|
|
553
|
+
sideOffset = 4,
|
|
554
|
+
...props
|
|
555
|
+
}) {
|
|
556
|
+
return /* @__PURE__ */ React8.createElement(DropdownMenuPrimitive.Portal, null, /* @__PURE__ */ React8.createElement(
|
|
557
|
+
DropdownMenuPrimitive.Content,
|
|
558
|
+
{
|
|
559
|
+
"data-slot": "dropdown-menu-content",
|
|
560
|
+
sideOffset,
|
|
561
|
+
className: cn(
|
|
562
|
+
"bg-popover text-popover-foreground z-50 min-w-40 overflow-hidden rounded-md border p-1 shadow-md",
|
|
563
|
+
className
|
|
564
|
+
),
|
|
565
|
+
...props
|
|
566
|
+
}
|
|
567
|
+
));
|
|
568
|
+
}
|
|
569
|
+
function DropdownMenuItem({
|
|
570
|
+
className,
|
|
571
|
+
...props
|
|
572
|
+
}) {
|
|
573
|
+
return /* @__PURE__ */ React8.createElement(
|
|
574
|
+
DropdownMenuPrimitive.Item,
|
|
575
|
+
{
|
|
576
|
+
"data-slot": "dropdown-menu-item",
|
|
577
|
+
className: cn(
|
|
578
|
+
"focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none",
|
|
579
|
+
className
|
|
580
|
+
),
|
|
581
|
+
...props
|
|
582
|
+
}
|
|
583
|
+
);
|
|
584
|
+
}
|
|
585
|
+
function DropdownMenuSeparator({
|
|
586
|
+
className,
|
|
587
|
+
...props
|
|
588
|
+
}) {
|
|
589
|
+
return /* @__PURE__ */ React8.createElement(
|
|
590
|
+
DropdownMenuPrimitive.Separator,
|
|
591
|
+
{
|
|
592
|
+
className: cn("bg-border -mx-1 my-1 h-px", className),
|
|
593
|
+
...props
|
|
594
|
+
}
|
|
595
|
+
);
|
|
596
|
+
}
|
|
597
|
+
function DropdownMenuLabel({
|
|
598
|
+
className,
|
|
599
|
+
...props
|
|
600
|
+
}) {
|
|
601
|
+
return /* @__PURE__ */ React8.createElement(
|
|
602
|
+
DropdownMenuPrimitive.Label,
|
|
603
|
+
{
|
|
604
|
+
className: cn("px-2 py-1.5 text-sm font-medium", className),
|
|
605
|
+
...props
|
|
606
|
+
}
|
|
607
|
+
);
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
// src/components/generative-container.tsx
|
|
611
|
+
var import_react2 = __toESM(require("react"), 1);
|
|
612
|
+
function GenerativeContainer({
|
|
613
|
+
children,
|
|
614
|
+
className,
|
|
615
|
+
active = true,
|
|
616
|
+
...props
|
|
617
|
+
}) {
|
|
618
|
+
return /* @__PURE__ */ import_react2.default.createElement(
|
|
619
|
+
"div",
|
|
620
|
+
{
|
|
621
|
+
className: cn("relative rounded-xl p-[1px] overflow-hidden", className),
|
|
622
|
+
...props
|
|
623
|
+
},
|
|
624
|
+
active && /* @__PURE__ */ import_react2.default.createElement("div", { className: "absolute inset-0 z-0 bg-[conic-gradient(from_0deg_at_50%_50%,transparent_0%,transparent_75%,hsl(var(--primary))_100%)] animate-[spin_3s_linear_infinite]" }),
|
|
625
|
+
/* @__PURE__ */ import_react2.default.createElement("div", { className: "relative z-10 rounded-[10px] bg-background h-full w-full" }, children)
|
|
626
|
+
);
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
// src/components/input.tsx
|
|
630
|
+
var React10 = __toESM(require("react"), 1);
|
|
631
|
+
function Input({ className, error, id, ...props }) {
|
|
632
|
+
const errorId = id ? `${id}-error` : void 0;
|
|
633
|
+
return /* @__PURE__ */ React10.createElement("div", { className: "grid gap-1.5" }, /* @__PURE__ */ React10.createElement(
|
|
634
|
+
"input",
|
|
635
|
+
{
|
|
636
|
+
id,
|
|
637
|
+
"data-slot": "input",
|
|
638
|
+
className: cn(
|
|
639
|
+
"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
|
640
|
+
error && "border-destructive focus-visible:ring-destructive",
|
|
641
|
+
className
|
|
642
|
+
),
|
|
643
|
+
"aria-invalid": error ? true : void 0,
|
|
644
|
+
"aria-describedby": error ? errorId : void 0,
|
|
645
|
+
...props
|
|
646
|
+
}
|
|
647
|
+
), error ? /* @__PURE__ */ React10.createElement("p", { id: errorId, className: "text-sm text-destructive", role: "alert" }, error) : null);
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
// src/components/label.tsx
|
|
651
|
+
var LabelPrimitive = __toESM(require("@radix-ui/react-label"), 1);
|
|
652
|
+
var React11 = __toESM(require("react"), 1);
|
|
653
|
+
function Label2({
|
|
654
|
+
className,
|
|
655
|
+
...props
|
|
656
|
+
}) {
|
|
657
|
+
return /* @__PURE__ */ React11.createElement(
|
|
658
|
+
LabelPrimitive.Root,
|
|
659
|
+
{
|
|
660
|
+
"data-slot": "label",
|
|
661
|
+
className: cn(
|
|
662
|
+
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
|
|
663
|
+
className
|
|
664
|
+
),
|
|
665
|
+
...props
|
|
666
|
+
}
|
|
667
|
+
);
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
// src/components/magnetic-button.tsx
|
|
671
|
+
var import_framer_motion = require("framer-motion");
|
|
672
|
+
var import_react3 = __toESM(require("react"), 1);
|
|
673
|
+
function MagneticButton({
|
|
674
|
+
children,
|
|
675
|
+
distance = 10,
|
|
676
|
+
className,
|
|
677
|
+
...props
|
|
678
|
+
}) {
|
|
679
|
+
const [position, setPosition] = (0, import_react3.useState)({ x: 0, y: 0 });
|
|
680
|
+
const ref = (0, import_react3.useRef)(null);
|
|
681
|
+
const handleMouse = (e) => {
|
|
682
|
+
const { clientX, clientY } = e;
|
|
683
|
+
if (!ref.current) return;
|
|
684
|
+
const { height, width, left, top } = ref.current.getBoundingClientRect();
|
|
685
|
+
const middleX = clientX - (left + width / 2);
|
|
686
|
+
const middleY = clientY - (top + height / 2);
|
|
687
|
+
const normalizedX = middleX / Math.max(width / 2, 1);
|
|
688
|
+
const normalizedY = middleY / Math.max(height / 2, 1);
|
|
689
|
+
setPosition({
|
|
690
|
+
x: normalizedX * distance,
|
|
691
|
+
y: normalizedY * distance
|
|
692
|
+
});
|
|
693
|
+
};
|
|
694
|
+
const reset = () => {
|
|
695
|
+
setPosition({ x: 0, y: 0 });
|
|
696
|
+
};
|
|
697
|
+
return /* @__PURE__ */ import_react3.default.createElement(
|
|
698
|
+
import_framer_motion.motion.div,
|
|
699
|
+
{
|
|
700
|
+
style: { position: "relative", display: "inline-block" },
|
|
701
|
+
ref,
|
|
702
|
+
onMouseMove: handleMouse,
|
|
703
|
+
onMouseLeave: reset,
|
|
704
|
+
animate: { x: position.x, y: position.y },
|
|
705
|
+
transition: { type: "spring", stiffness: 150, damping: 15, mass: 0.1 }
|
|
706
|
+
},
|
|
707
|
+
/* @__PURE__ */ import_react3.default.createElement(Button, { className, ...props }, children)
|
|
708
|
+
);
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
// src/components/scroll-area.tsx
|
|
712
|
+
var ScrollAreaPrimitive = __toESM(require("@radix-ui/react-scroll-area"), 1);
|
|
713
|
+
var React13 = __toESM(require("react"), 1);
|
|
714
|
+
var ScrollArea = React13.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React13.createElement(
|
|
715
|
+
ScrollAreaPrimitive.Root,
|
|
716
|
+
{
|
|
717
|
+
ref,
|
|
718
|
+
className: cn("relative overflow-hidden", className),
|
|
719
|
+
...props
|
|
720
|
+
},
|
|
721
|
+
/* @__PURE__ */ React13.createElement(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit]" }, children),
|
|
722
|
+
/* @__PURE__ */ React13.createElement(ScrollBar, null),
|
|
723
|
+
/* @__PURE__ */ React13.createElement(ScrollAreaPrimitive.Corner, null)
|
|
724
|
+
));
|
|
725
|
+
ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
|
|
726
|
+
var ScrollBar = React13.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ React13.createElement(
|
|
727
|
+
ScrollAreaPrimitive.ScrollAreaScrollbar,
|
|
728
|
+
{
|
|
729
|
+
ref,
|
|
730
|
+
orientation,
|
|
731
|
+
className: cn(
|
|
732
|
+
"flex touch-none select-none transition-colors",
|
|
733
|
+
orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-[1px]",
|
|
734
|
+
orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent p-[1px]",
|
|
735
|
+
className
|
|
736
|
+
),
|
|
737
|
+
...props
|
|
738
|
+
},
|
|
739
|
+
/* @__PURE__ */ React13.createElement(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" })
|
|
740
|
+
));
|
|
741
|
+
ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
|
|
742
|
+
|
|
743
|
+
// src/components/separator.tsx
|
|
744
|
+
var SeparatorPrimitive = __toESM(require("@radix-ui/react-separator"), 1);
|
|
745
|
+
var React14 = __toESM(require("react"), 1);
|
|
746
|
+
function Separator2({
|
|
747
|
+
className,
|
|
748
|
+
orientation = "horizontal",
|
|
749
|
+
decorative = true,
|
|
750
|
+
...props
|
|
751
|
+
}) {
|
|
752
|
+
return /* @__PURE__ */ React14.createElement(
|
|
753
|
+
SeparatorPrimitive.Root,
|
|
754
|
+
{
|
|
755
|
+
"data-slot": "separator",
|
|
756
|
+
decorative,
|
|
757
|
+
orientation,
|
|
758
|
+
className: cn(
|
|
759
|
+
"bg-border shrink-0",
|
|
760
|
+
orientation === "horizontal" ? "h-px w-full" : "h-full w-px",
|
|
761
|
+
className
|
|
762
|
+
),
|
|
763
|
+
...props
|
|
764
|
+
}
|
|
765
|
+
);
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
// src/components/spotlight-card.tsx
|
|
769
|
+
var import_react4 = __toESM(require("react"), 1);
|
|
770
|
+
function SpotlightCard({
|
|
771
|
+
children,
|
|
772
|
+
className,
|
|
773
|
+
spotlightColor = "rgba(120, 119, 198, 0.1)",
|
|
774
|
+
...props
|
|
775
|
+
}) {
|
|
776
|
+
const divRef = (0, import_react4.useRef)(null);
|
|
777
|
+
const [isFocused, setIsFocused] = (0, import_react4.useState)(false);
|
|
778
|
+
const [position, setPosition] = (0, import_react4.useState)({ x: 0, y: 0 });
|
|
779
|
+
const [opacity, setOpacity] = (0, import_react4.useState)(0);
|
|
780
|
+
const handleMouseMove = (e) => {
|
|
781
|
+
if (!divRef.current || isFocused) return;
|
|
782
|
+
const div = divRef.current;
|
|
783
|
+
const rect = div.getBoundingClientRect();
|
|
784
|
+
setPosition({ x: e.clientX - rect.left, y: e.clientY - rect.top });
|
|
785
|
+
};
|
|
786
|
+
const handleFocus = () => {
|
|
787
|
+
setIsFocused(true);
|
|
788
|
+
setOpacity(1);
|
|
789
|
+
};
|
|
790
|
+
const handleBlur = () => {
|
|
791
|
+
setIsFocused(false);
|
|
792
|
+
setOpacity(0);
|
|
793
|
+
};
|
|
794
|
+
const handleMouseEnter = () => {
|
|
795
|
+
setOpacity(1);
|
|
796
|
+
};
|
|
797
|
+
const handleMouseLeave = () => {
|
|
798
|
+
setOpacity(0);
|
|
799
|
+
};
|
|
800
|
+
return /* @__PURE__ */ import_react4.default.createElement(
|
|
801
|
+
"div",
|
|
802
|
+
{
|
|
803
|
+
ref: divRef,
|
|
804
|
+
onMouseMove: handleMouseMove,
|
|
805
|
+
onFocus: handleFocus,
|
|
806
|
+
onBlur: handleBlur,
|
|
807
|
+
onMouseEnter: handleMouseEnter,
|
|
808
|
+
onMouseLeave: handleMouseLeave,
|
|
809
|
+
className: cn(
|
|
810
|
+
"relative overflow-hidden rounded-xl border bg-card text-card-foreground shadow transition-colors",
|
|
811
|
+
className
|
|
812
|
+
),
|
|
813
|
+
...props
|
|
814
|
+
},
|
|
815
|
+
/* @__PURE__ */ import_react4.default.createElement(
|
|
816
|
+
"div",
|
|
817
|
+
{
|
|
818
|
+
className: "pointer-events-none absolute -inset-px opacity-0 transition duration-300",
|
|
819
|
+
style: {
|
|
820
|
+
opacity,
|
|
821
|
+
background: `radial-gradient(600px circle at ${position.x}px ${position.y}px, ${spotlightColor}, transparent 40%)`
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
),
|
|
825
|
+
/* @__PURE__ */ import_react4.default.createElement("div", { className: "relative h-full z-10" }, children)
|
|
826
|
+
);
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
// src/components/tabs.tsx
|
|
830
|
+
var TabsPrimitive = __toESM(require("@radix-ui/react-tabs"), 1);
|
|
831
|
+
var React16 = __toESM(require("react"), 1);
|
|
832
|
+
function Tabs({
|
|
833
|
+
className,
|
|
834
|
+
...props
|
|
835
|
+
}) {
|
|
836
|
+
return /* @__PURE__ */ React16.createElement(
|
|
837
|
+
TabsPrimitive.Root,
|
|
838
|
+
{
|
|
839
|
+
"data-slot": "tabs",
|
|
840
|
+
className: cn("flex flex-col gap-2", className),
|
|
841
|
+
...props
|
|
842
|
+
}
|
|
843
|
+
);
|
|
844
|
+
}
|
|
845
|
+
function TabsList({
|
|
846
|
+
className,
|
|
847
|
+
...props
|
|
848
|
+
}) {
|
|
849
|
+
return /* @__PURE__ */ React16.createElement(
|
|
850
|
+
TabsPrimitive.List,
|
|
851
|
+
{
|
|
852
|
+
"data-slot": "tabs-list",
|
|
853
|
+
className: cn(
|
|
854
|
+
"bg-muted text-muted-foreground inline-flex h-10 items-center rounded-md p-1",
|
|
855
|
+
className
|
|
856
|
+
),
|
|
857
|
+
...props
|
|
858
|
+
}
|
|
859
|
+
);
|
|
860
|
+
}
|
|
861
|
+
function TabsTrigger({
|
|
862
|
+
className,
|
|
863
|
+
...props
|
|
864
|
+
}) {
|
|
865
|
+
return /* @__PURE__ */ React16.createElement(
|
|
866
|
+
TabsPrimitive.Trigger,
|
|
867
|
+
{
|
|
868
|
+
"data-slot": "tabs-trigger",
|
|
869
|
+
className: cn(
|
|
870
|
+
"data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center rounded-sm px-3 py-1.5 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
|
|
871
|
+
className
|
|
872
|
+
),
|
|
873
|
+
...props
|
|
874
|
+
}
|
|
875
|
+
);
|
|
876
|
+
}
|
|
877
|
+
function TabsContent({
|
|
878
|
+
className,
|
|
879
|
+
...props
|
|
880
|
+
}) {
|
|
881
|
+
return /* @__PURE__ */ React16.createElement(
|
|
882
|
+
TabsPrimitive.Content,
|
|
883
|
+
{
|
|
884
|
+
"data-slot": "tabs-content",
|
|
885
|
+
className: cn(
|
|
886
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-md",
|
|
887
|
+
className
|
|
888
|
+
),
|
|
889
|
+
...props
|
|
890
|
+
}
|
|
891
|
+
);
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
// src/components/textarea.tsx
|
|
895
|
+
var React17 = __toESM(require("react"), 1);
|
|
896
|
+
function Textarea({
|
|
897
|
+
className,
|
|
898
|
+
...props
|
|
899
|
+
}) {
|
|
900
|
+
return /* @__PURE__ */ React17.createElement(
|
|
901
|
+
"textarea",
|
|
902
|
+
{
|
|
903
|
+
"data-slot": "textarea",
|
|
904
|
+
className: cn(
|
|
905
|
+
"border-input bg-background ring-offset-background placeholder:text-muted-foreground focus-visible:ring-ring min-h-20 w-full rounded-md border px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
|
906
|
+
className
|
|
907
|
+
),
|
|
908
|
+
...props
|
|
909
|
+
}
|
|
910
|
+
);
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
// src/components/voice-button.tsx
|
|
914
|
+
var import_lucide_react3 = require("lucide-react");
|
|
915
|
+
var React18 = __toESM(require("react"), 1);
|
|
916
|
+
function VoiceButton({
|
|
917
|
+
isListening = false,
|
|
918
|
+
onToggle,
|
|
919
|
+
disabled,
|
|
920
|
+
className
|
|
921
|
+
}) {
|
|
922
|
+
return /* @__PURE__ */ React18.createElement(
|
|
923
|
+
Button,
|
|
924
|
+
{
|
|
925
|
+
type: "button",
|
|
926
|
+
variant: isListening ? "destructive" : "default",
|
|
927
|
+
className: cn("min-w-36 gap-2", className),
|
|
928
|
+
onClick: onToggle,
|
|
929
|
+
disabled
|
|
930
|
+
},
|
|
931
|
+
isListening ? /* @__PURE__ */ React18.createElement(import_lucide_react3.MicOff, null) : /* @__PURE__ */ React18.createElement(import_lucide_react3.Mic, null),
|
|
932
|
+
isListening ? "Stop listening" : "Start speaking"
|
|
933
|
+
);
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
// src/components/voice-input-bar.tsx
|
|
937
|
+
var import_framer_motion2 = require("framer-motion");
|
|
938
|
+
var import_lucide_react4 = require("lucide-react");
|
|
939
|
+
var import_react5 = __toESM(require("react"), 1);
|
|
940
|
+
function VoiceInputBar({
|
|
941
|
+
onSend,
|
|
942
|
+
onVoiceStart,
|
|
943
|
+
onVoiceStop,
|
|
944
|
+
placeholder = "Message or tap mic...",
|
|
945
|
+
className
|
|
946
|
+
}) {
|
|
947
|
+
const [isListening, setIsListening] = (0, import_react5.useState)(false);
|
|
948
|
+
const [text, setText] = (0, import_react5.useState)("");
|
|
949
|
+
const inputRef = (0, import_react5.useRef)(null);
|
|
950
|
+
const toggleListen = () => {
|
|
951
|
+
if (isListening) {
|
|
952
|
+
setIsListening(false);
|
|
953
|
+
onVoiceStop?.();
|
|
954
|
+
} else {
|
|
955
|
+
setIsListening(true);
|
|
956
|
+
onVoiceStart?.();
|
|
957
|
+
}
|
|
958
|
+
};
|
|
959
|
+
const handleSend = () => {
|
|
960
|
+
if (text.trim()) {
|
|
961
|
+
onSend?.(text);
|
|
962
|
+
setText("");
|
|
963
|
+
}
|
|
964
|
+
};
|
|
965
|
+
return /* @__PURE__ */ import_react5.default.createElement(
|
|
966
|
+
"div",
|
|
967
|
+
{
|
|
968
|
+
className: cn(
|
|
969
|
+
"relative flex w-full max-w-2xl items-center rounded-full border bg-background px-2 py-1.5 shadow-sm transition-all focus-within:ring-1 focus-within:ring-ring",
|
|
970
|
+
isListening && "ring-1 ring-primary/50 shadow-md",
|
|
971
|
+
className
|
|
972
|
+
)
|
|
973
|
+
},
|
|
974
|
+
/* @__PURE__ */ import_react5.default.createElement(
|
|
975
|
+
"button",
|
|
976
|
+
{
|
|
977
|
+
type: "button",
|
|
978
|
+
onClick: toggleListen,
|
|
979
|
+
className: cn(
|
|
980
|
+
"flex h-10 w-10 shrink-0 items-center justify-center rounded-full transition-colors",
|
|
981
|
+
isListening ? "bg-red-500 text-white shadow-[0_0_15px_rgba(239,68,68,0.5)]" : "bg-muted text-muted-foreground hover:bg-muted/80 hover:text-foreground"
|
|
982
|
+
)
|
|
983
|
+
},
|
|
984
|
+
/* @__PURE__ */ import_react5.default.createElement(import_lucide_react4.Mic, { className: cn("h-5 w-5", isListening && "animate-pulse") })
|
|
985
|
+
),
|
|
986
|
+
/* @__PURE__ */ import_react5.default.createElement("div", { className: "relative flex-1 overflow-hidden px-3" }, /* @__PURE__ */ import_react5.default.createElement(import_framer_motion2.AnimatePresence, { mode: "popLayout" }, isListening ? /* @__PURE__ */ import_react5.default.createElement(
|
|
987
|
+
import_framer_motion2.motion.div,
|
|
988
|
+
{
|
|
989
|
+
initial: { y: 20, opacity: 0 },
|
|
990
|
+
animate: { y: 0, opacity: 1 },
|
|
991
|
+
exit: { y: -20, opacity: 0 },
|
|
992
|
+
className: "flex h-10 items-center justify-center space-x-1"
|
|
993
|
+
},
|
|
994
|
+
[1, 2, 3, 4, 3, 2, 1, 2, 3, 4, 2].map((i, index) => /* @__PURE__ */ import_react5.default.createElement(
|
|
995
|
+
import_framer_motion2.motion.div,
|
|
996
|
+
{
|
|
997
|
+
key: index,
|
|
998
|
+
animate: {
|
|
999
|
+
height: ["10%", "100%", "10%"]
|
|
1000
|
+
},
|
|
1001
|
+
transition: {
|
|
1002
|
+
duration: 1,
|
|
1003
|
+
repeat: Infinity,
|
|
1004
|
+
delay: index * 0.1,
|
|
1005
|
+
ease: "easeInOut"
|
|
1006
|
+
},
|
|
1007
|
+
className: "w-1 rounded-full bg-foreground"
|
|
1008
|
+
}
|
|
1009
|
+
)),
|
|
1010
|
+
/* @__PURE__ */ import_react5.default.createElement("span", { className: "ml-4 text-sm font-medium animate-pulse text-muted-foreground" }, "Listening...")
|
|
1011
|
+
) : /* @__PURE__ */ import_react5.default.createElement(
|
|
1012
|
+
import_framer_motion2.motion.input,
|
|
1013
|
+
{
|
|
1014
|
+
initial: { y: -20, opacity: 0 },
|
|
1015
|
+
animate: { y: 0, opacity: 1 },
|
|
1016
|
+
exit: { y: 20, opacity: 0 },
|
|
1017
|
+
ref: inputRef,
|
|
1018
|
+
type: "text",
|
|
1019
|
+
value: text,
|
|
1020
|
+
onChange: (e) => setText(e.target.value),
|
|
1021
|
+
onKeyDown: (e) => e.key === "Enter" && handleSend(),
|
|
1022
|
+
placeholder,
|
|
1023
|
+
className: "flex h-10 w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50"
|
|
1024
|
+
}
|
|
1025
|
+
))),
|
|
1026
|
+
/* @__PURE__ */ import_react5.default.createElement(import_framer_motion2.AnimatePresence, null, !isListening && text.length > 0 && /* @__PURE__ */ import_react5.default.createElement(
|
|
1027
|
+
import_framer_motion2.motion.button,
|
|
1028
|
+
{
|
|
1029
|
+
initial: { scale: 0.8, opacity: 0 },
|
|
1030
|
+
animate: { scale: 1, opacity: 1 },
|
|
1031
|
+
exit: { scale: 0.8, opacity: 0 },
|
|
1032
|
+
type: "button",
|
|
1033
|
+
onClick: handleSend,
|
|
1034
|
+
className: "flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground hover:bg-primary/90 transition-colors mr-1"
|
|
1035
|
+
},
|
|
1036
|
+
/* @__PURE__ */ import_react5.default.createElement(import_lucide_react4.Send, { className: "h-4 w-4 ml-0.5" })
|
|
1037
|
+
))
|
|
1038
|
+
);
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
// src/components/waveform.tsx
|
|
1042
|
+
var React20 = __toESM(require("react"), 1);
|
|
1043
|
+
function Waveform({
|
|
1044
|
+
bars = 24,
|
|
1045
|
+
active = false,
|
|
1046
|
+
className
|
|
1047
|
+
}) {
|
|
1048
|
+
const data = React20.useMemo(() => {
|
|
1049
|
+
return Array.from({ length: bars }, (_, index) => {
|
|
1050
|
+
const cycle = index % 7 + 1;
|
|
1051
|
+
return cycle / 7;
|
|
1052
|
+
});
|
|
1053
|
+
}, [bars]);
|
|
1054
|
+
return /* @__PURE__ */ React20.createElement(
|
|
1055
|
+
"div",
|
|
1056
|
+
{
|
|
1057
|
+
"data-slot": "waveform",
|
|
1058
|
+
className: cn("flex h-10 items-end gap-1 rounded-md px-2", className)
|
|
1059
|
+
},
|
|
1060
|
+
data.map((value, index) => /* @__PURE__ */ React20.createElement(
|
|
1061
|
+
"div",
|
|
1062
|
+
{
|
|
1063
|
+
key: index,
|
|
1064
|
+
className: cn(
|
|
1065
|
+
"bg-primary/80 w-1 rounded-full transition-all",
|
|
1066
|
+
active ? "animate-pulse" : ""
|
|
1067
|
+
),
|
|
1068
|
+
style: { height: `${Math.max(value * 100, 20)}%` }
|
|
1069
|
+
}
|
|
1070
|
+
))
|
|
1071
|
+
);
|
|
1072
|
+
}
|
|
1073
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
1074
|
+
0 && (module.exports = {
|
|
1075
|
+
Badge,
|
|
1076
|
+
BentoGrid,
|
|
1077
|
+
BentoGridItem,
|
|
1078
|
+
Button,
|
|
1079
|
+
Card,
|
|
1080
|
+
CardContent,
|
|
1081
|
+
CardDescription,
|
|
1082
|
+
CardFooter,
|
|
1083
|
+
CardHeader,
|
|
1084
|
+
CardTitle,
|
|
1085
|
+
Command,
|
|
1086
|
+
CommandDialog,
|
|
1087
|
+
CommandEmpty,
|
|
1088
|
+
CommandGroup,
|
|
1089
|
+
CommandInput,
|
|
1090
|
+
CommandItem,
|
|
1091
|
+
CommandList,
|
|
1092
|
+
CommandSeparator,
|
|
1093
|
+
CommandShortcut,
|
|
1094
|
+
Conversation,
|
|
1095
|
+
Dialog,
|
|
1096
|
+
DialogClose,
|
|
1097
|
+
DialogContent,
|
|
1098
|
+
DialogDescription,
|
|
1099
|
+
DialogFooter,
|
|
1100
|
+
DialogHeader,
|
|
1101
|
+
DialogOverlay,
|
|
1102
|
+
DialogPortal,
|
|
1103
|
+
DialogTitle,
|
|
1104
|
+
DialogTrigger,
|
|
1105
|
+
DropdownMenu,
|
|
1106
|
+
DropdownMenuContent,
|
|
1107
|
+
DropdownMenuItem,
|
|
1108
|
+
DropdownMenuLabel,
|
|
1109
|
+
DropdownMenuSeparator,
|
|
1110
|
+
DropdownMenuTrigger,
|
|
1111
|
+
GenerativeContainer,
|
|
1112
|
+
Input,
|
|
1113
|
+
Label,
|
|
1114
|
+
MagneticButton,
|
|
1115
|
+
Message,
|
|
1116
|
+
ScrollArea,
|
|
1117
|
+
ScrollBar,
|
|
1118
|
+
Separator,
|
|
1119
|
+
SpotlightCard,
|
|
1120
|
+
Tabs,
|
|
1121
|
+
TabsContent,
|
|
1122
|
+
TabsList,
|
|
1123
|
+
TabsTrigger,
|
|
1124
|
+
Textarea,
|
|
1125
|
+
VoiceButton,
|
|
1126
|
+
VoiceInputBar,
|
|
1127
|
+
Waveform,
|
|
1128
|
+
buttonVariants,
|
|
1129
|
+
cn
|
|
1130
|
+
});
|
|
1131
|
+
//# sourceMappingURL=index.cjs.map
|