@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/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