@cortexasystem/ui 0.1.0 → 1.0.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 CHANGED
@@ -30,6 +30,23 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/index.ts
31
31
  var index_exports = {};
32
32
  __export(index_exports, {
33
+ AiChatAssistantMessage: () => AiChatAssistantMessage,
34
+ AiChatComposer: () => AiChatComposer,
35
+ AiChatEmptyState: () => AiChatEmptyState,
36
+ AiChatFloatingButton: () => AiChatFloatingButton,
37
+ AiChatFloatingSidebar: () => AiChatFloatingSidebar,
38
+ AiChatHeader: () => AiChatHeader,
39
+ AiChatLayout: () => AiChatLayout,
40
+ AiChatMessage: () => AiChatMessage,
41
+ AiChatMessageList: () => AiChatMessageList,
42
+ AiChatPanel: () => AiChatPanel,
43
+ AiChatSidebar: () => AiChatSidebar,
44
+ AiChatSidebarHeader: () => AiChatSidebarHeader,
45
+ AiChatSummaryAction: () => AiChatSummaryAction,
46
+ AiChatSummaryActions: () => AiChatSummaryActions,
47
+ AiChatThreadButton: () => AiChatThreadButton,
48
+ AiChatThreadList: () => AiChatThreadList,
49
+ AiChatUserMessage: () => AiChatUserMessage,
33
50
  Alert: () => Alert,
34
51
  AlertDescription: () => AlertDescription,
35
52
  AlertTitle: () => AlertTitle,
@@ -94,14 +111,17 @@ __export(index_exports, {
94
111
  DropdownMenuSubContent: () => DropdownMenuSubContent,
95
112
  DropdownMenuSubTrigger: () => DropdownMenuSubTrigger,
96
113
  DropdownMenuTrigger: () => DropdownMenuTrigger,
114
+ EmptyState: () => EmptyState,
97
115
  FeatureIcon: () => FeatureIcon,
98
116
  FormSection: () => FormSection,
117
+ HeaderUserMenu: () => HeaderUserMenu,
99
118
  Input: () => Input,
100
119
  Label: () => Label3,
101
120
  LoadingCard: () => LoadingCard,
102
121
  LoadingState: () => LoadingState,
103
122
  LoadingTableRows: () => LoadingTableRows,
104
123
  ModuleIconButton: () => ModuleIconButton,
124
+ ModuleSkeleton: () => ModuleSkeleton,
105
125
  Navbar: () => Navbar,
106
126
  NotificationAction: () => NotificationAction,
107
127
  NotificationMessage: () => NotificationMessage,
@@ -141,6 +161,8 @@ __export(index_exports, {
141
161
  Steps: () => Steps,
142
162
  Switch: () => Switch,
143
163
  SwitchField: () => SwitchField,
164
+ SyncStatusBadge: () => SyncStatusBadge,
165
+ SyncStatusBar: () => SyncStatusBar,
144
166
  Table: () => Table,
145
167
  TableBody: () => TableBody,
146
168
  TableCaption: () => TableCaption,
@@ -227,6 +249,505 @@ function cn(...inputs) {
227
249
  return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
228
250
  }
229
251
 
252
+ // src/components/ai/ai-chat.tsx
253
+ var React4 = __toESM(require("react"), 1);
254
+ var import_lucide_react2 = require("lucide-react");
255
+
256
+ // src/components/overlays/sheet.tsx
257
+ var React = __toESM(require("react"), 1);
258
+ var SheetPrimitive = __toESM(require("@radix-ui/react-dialog"), 1);
259
+ var import_class_variance_authority = require("class-variance-authority");
260
+ var import_lucide_react = require("lucide-react");
261
+ var import_jsx_runtime2 = require("react/jsx-runtime");
262
+ var Sheet = SheetPrimitive.Root;
263
+ var SheetTrigger = SheetPrimitive.Trigger;
264
+ var SheetClose = SheetPrimitive.Close;
265
+ var SheetPortal = SheetPrimitive.Portal;
266
+ var SheetOverlay = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
267
+ SheetPrimitive.Overlay,
268
+ {
269
+ className: cn(
270
+ "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
271
+ className
272
+ ),
273
+ ...props,
274
+ ref
275
+ }
276
+ ));
277
+ SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
278
+ var sheetVariants = (0, import_class_variance_authority.cva)(
279
+ "fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
280
+ {
281
+ variants: {
282
+ side: {
283
+ top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
284
+ bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
285
+ left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
286
+ right: "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"
287
+ }
288
+ },
289
+ defaultVariants: {
290
+ side: "right"
291
+ }
292
+ }
293
+ );
294
+ var SheetContent = React.forwardRef(
295
+ ({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(SheetPortal, { children: [
296
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(SheetOverlay, {}),
297
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(SheetPrimitive.Content, { ref, className: cn(sheetVariants({ side }), className), ...props, children: [
298
+ children,
299
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(SheetPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary", children: [
300
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_lucide_react.X, { className: "h-4 w-4" }),
301
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "sr-only", children: "Close" })
302
+ ] })
303
+ ] })
304
+ ] })
305
+ );
306
+ SheetContent.displayName = SheetPrimitive.Content.displayName;
307
+ var SheetHeader = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: cn("flex flex-col space-y-2 text-center sm:text-left", className), ...props });
308
+ SheetHeader.displayName = "SheetHeader";
309
+ var SheetFooter = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className), ...props });
310
+ SheetFooter.displayName = "SheetFooter";
311
+ var SheetTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(SheetPrimitive.Title, { ref, className: cn("text-lg font-semibold text-foreground", className), ...props }));
312
+ SheetTitle.displayName = SheetPrimitive.Title.displayName;
313
+ var SheetDescription = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(SheetPrimitive.Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
314
+ SheetDescription.displayName = SheetPrimitive.Description.displayName;
315
+
316
+ // src/components/primitives/badge.tsx
317
+ var import_class_variance_authority2 = require("class-variance-authority");
318
+ var import_jsx_runtime3 = require("react/jsx-runtime");
319
+ var badgeVariants = (0, import_class_variance_authority2.cva)("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", {
320
+ variants: {
321
+ variant: {
322
+ default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
323
+ secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
324
+ destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
325
+ outline: "text-foreground"
326
+ }
327
+ },
328
+ defaultVariants: {
329
+ variant: "default"
330
+ }
331
+ });
332
+ function Badge({ className, variant, ...props }) {
333
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: cn(badgeVariants({ variant }), className), ...props });
334
+ }
335
+
336
+ // src/components/primitives/button.tsx
337
+ var React2 = __toESM(require("react"), 1);
338
+ var import_react_slot = require("@radix-ui/react-slot");
339
+ var import_class_variance_authority3 = require("class-variance-authority");
340
+ var import_jsx_runtime4 = require("react/jsx-runtime");
341
+ var buttonVariants = (0, import_class_variance_authority3.cva)(
342
+ "inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium shadow-sm ring-offset-background 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 [&_svg]:shrink-0",
343
+ {
344
+ variants: {
345
+ variant: {
346
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
347
+ destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
348
+ outline: "border border-input bg-background text-foreground hover:bg-accent hover:text-accent-foreground",
349
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
350
+ ghost: "text-foreground shadow-none hover:bg-accent hover:text-accent-foreground",
351
+ link: "h-auto px-0 py-0 text-primary underline-offset-4 shadow-none hover:underline"
352
+ },
353
+ size: {
354
+ default: "h-10 px-4 py-2",
355
+ sm: "h-9 rounded-md px-3",
356
+ lg: "h-11 rounded-md px-8",
357
+ icon: "h-10 w-10"
358
+ }
359
+ },
360
+ defaultVariants: {
361
+ variant: "default",
362
+ size: "default"
363
+ }
364
+ }
365
+ );
366
+ var Button = React2.forwardRef(
367
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
368
+ const Comp = asChild ? import_react_slot.Slot : "button";
369
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Comp, { className: cn(buttonVariants({ variant, size, className })), ref, ...props });
370
+ }
371
+ );
372
+ Button.displayName = "Button";
373
+
374
+ // src/components/primitives/textarea.tsx
375
+ var React3 = __toESM(require("react"), 1);
376
+ var import_jsx_runtime5 = require("react/jsx-runtime");
377
+ var Textarea = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
378
+ "textarea",
379
+ {
380
+ ref,
381
+ className: cn(
382
+ "flex min-h-24 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",
383
+ className
384
+ ),
385
+ ...props
386
+ }
387
+ ));
388
+ Textarea.displayName = "Textarea";
389
+
390
+ // src/components/ai/ai-chat.tsx
391
+ var import_jsx_runtime6 = require("react/jsx-runtime");
392
+ function AiChatLayout({ className, variant = "screen", ...props }) {
393
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
394
+ "section",
395
+ {
396
+ className: cn(
397
+ "overflow-hidden rounded-2xl border bg-card text-card-foreground shadow-sm",
398
+ variant === "screen" ? "grid min-h-[720px] w-full lg:grid-cols-[320px_minmax(0,1fr)]" : "flex h-full min-h-0 w-full flex-col",
399
+ className
400
+ ),
401
+ ...props
402
+ }
403
+ );
404
+ }
405
+ var AiChatSidebar = React4.forwardRef(
406
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
407
+ "aside",
408
+ {
409
+ ref,
410
+ className: cn(
411
+ "flex min-h-0 flex-col border-b bg-muted/20 lg:border-b-0 lg:border-r",
412
+ className
413
+ ),
414
+ ...props
415
+ }
416
+ )
417
+ );
418
+ AiChatSidebar.displayName = "AiChatSidebar";
419
+ function AiChatSidebarHeader({ className, title, description, action, ...props }) {
420
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: cn("border-b px-4 py-4", className), ...props, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
421
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "grid gap-1", children: [
422
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "text-sm font-semibold text-foreground", children: title }),
423
+ description ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "text-xs text-muted-foreground", children: description }) : null
424
+ ] }),
425
+ action ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "shrink-0", children: action }) : null
426
+ ] }) });
427
+ }
428
+ var AiChatThreadList = React4.forwardRef(
429
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { ref, className: cn("flex-1 space-y-2 overflow-y-auto p-3", className), ...props })
430
+ );
431
+ AiChatThreadList.displayName = "AiChatThreadList";
432
+ var AiChatThreadButton = React4.forwardRef(
433
+ ({
434
+ className,
435
+ title,
436
+ preview,
437
+ timestamp,
438
+ active = false,
439
+ unreadCount,
440
+ icon: Icon2 = import_lucide_react2.MessageSquareText,
441
+ type = "button",
442
+ ...props
443
+ }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
444
+ "button",
445
+ {
446
+ ref,
447
+ type,
448
+ className: cn(
449
+ "flex w-full items-start gap-3 rounded-xl border px-3 py-3 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
450
+ active ? "border-[var(--color-accent-blue)]/40 bg-[var(--color-accent-blue)]/8" : "border-transparent bg-transparent hover:border-border hover:bg-accent/40",
451
+ className
452
+ ),
453
+ ...props,
454
+ children: [
455
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
456
+ "span",
457
+ {
458
+ className: cn(
459
+ "mt-0.5 flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border",
460
+ active ? "border-[var(--color-accent-blue)]/30 bg-[var(--color-accent-blue)]/12 text-[var(--color-accent-blue)]" : "border-border bg-background text-muted-foreground"
461
+ ),
462
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Icon2, { className: "h-4 w-4" })
463
+ }
464
+ ),
465
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "grid min-w-0 flex-1 gap-1", children: [
466
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "flex items-start justify-between gap-3", children: [
467
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "truncate text-sm font-medium text-foreground", children: title }),
468
+ timestamp ? /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "inline-flex shrink-0 items-center gap-1 text-[11px] text-muted-foreground", children: [
469
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.Clock3, { className: "h-3 w-3" }),
470
+ timestamp
471
+ ] }) : null
472
+ ] }),
473
+ preview ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "line-clamp-2 text-xs text-muted-foreground", children: preview }) : null
474
+ ] }),
475
+ typeof unreadCount === "number" && unreadCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Badge, { className: "shrink-0 rounded-full px-2 py-0.5 text-[11px]", children: unreadCount > 9 ? "9+" : unreadCount }) : null
476
+ ]
477
+ }
478
+ )
479
+ );
480
+ AiChatThreadButton.displayName = "AiChatThreadButton";
481
+ var AiChatPanel = React4.forwardRef(
482
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { ref, className: cn("flex min-h-0 flex-1 flex-col bg-background/40", className), ...props })
483
+ );
484
+ AiChatPanel.displayName = "AiChatPanel";
485
+ function AiChatHeader({ className, title, description, meta, actions, ...props }) {
486
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("header", { className: cn("border-b bg-card/95 px-5 py-4 backdrop-blur", className), ...props, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "flex flex-wrap items-start justify-between gap-4", children: [
487
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "grid gap-1", children: [
488
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "flex flex-wrap items-center gap-2", children: [
489
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "text-base font-semibold text-foreground", children: title }),
490
+ meta ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "flex items-center gap-2 text-xs text-muted-foreground", children: meta }) : null
491
+ ] }),
492
+ description ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "text-sm text-muted-foreground", children: description }) : null
493
+ ] }),
494
+ actions ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "flex flex-wrap items-center gap-2", children: actions }) : null
495
+ ] }) });
496
+ }
497
+ var AiChatMessageList = React4.forwardRef(
498
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
499
+ "div",
500
+ {
501
+ ref,
502
+ role: "log",
503
+ "aria-live": "polite",
504
+ className: cn("flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto px-5 py-5", className),
505
+ ...props
506
+ }
507
+ )
508
+ );
509
+ AiChatMessageList.displayName = "AiChatMessageList";
510
+ function getDefaultAvatar(role) {
511
+ if (role === "assistant") {
512
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "flex h-9 w-9 items-center justify-center rounded-full bg-[var(--color-brand)] text-white shadow-sm", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.Bot, { className: "h-4 w-4" }) });
513
+ }
514
+ if (role === "system") {
515
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "flex h-9 w-9 items-center justify-center rounded-full bg-secondary text-secondary-foreground shadow-sm", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.Sparkles, { className: "h-4 w-4" }) });
516
+ }
517
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "flex h-9 w-9 items-center justify-center rounded-full bg-foreground text-background shadow-sm", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "text-xs font-semibold", children: "TU" }) });
518
+ }
519
+ function AiChatMessage({
520
+ className,
521
+ role = "assistant",
522
+ author,
523
+ timestamp,
524
+ status = "complete",
525
+ avatar,
526
+ actions,
527
+ sources,
528
+ children,
529
+ ...props
530
+ }) {
531
+ const isUser = role === "user";
532
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
533
+ "article",
534
+ {
535
+ className: cn("flex gap-3", isUser ? "justify-end" : "justify-start", className),
536
+ ...props,
537
+ children: [
538
+ !isUser ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "shrink-0", children: avatar ?? getDefaultAvatar(role) }) : null,
539
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: cn("grid max-w-[90%] gap-2 md:max-w-[74%]", isUser && "justify-items-end"), children: [
540
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: cn("flex items-center gap-2", isUser && "justify-end"), children: [
541
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "text-xs font-medium text-foreground", children: author ?? (isUser ? "Tu" : "Cortexa AI") }),
542
+ timestamp ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "text-xs text-muted-foreground", children: timestamp }) : null,
543
+ status !== "complete" ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Badge, { variant: status === "error" ? "destructive" : "secondary", children: status === "streaming" ? "Generando" : "Error" }) : null
544
+ ] }),
545
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
546
+ "div",
547
+ {
548
+ className: cn(
549
+ "rounded-2xl border px-4 py-3 text-sm leading-6 shadow-sm",
550
+ isUser ? "border-primary bg-primary text-primary-foreground" : role === "system" ? "border-secondary bg-secondary text-secondary-foreground" : "bg-card text-foreground"
551
+ ),
552
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "whitespace-pre-wrap", children })
553
+ }
554
+ ),
555
+ sources?.length ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: cn("flex flex-wrap gap-2", isUser && "justify-end"), children: sources.map(
556
+ (source) => source.href ? /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
557
+ "a",
558
+ {
559
+ href: source.href,
560
+ className: "inline-flex items-center gap-1 rounded-full border px-2.5 py-1 text-xs text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground",
561
+ children: [
562
+ source.label,
563
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.PanelRightOpen, { className: "h-3 w-3" })
564
+ ]
565
+ },
566
+ `${source.label}-${source.href}`
567
+ ) : /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
568
+ "span",
569
+ {
570
+ className: "inline-flex items-center rounded-full border px-2.5 py-1 text-xs text-muted-foreground",
571
+ children: source.label
572
+ },
573
+ source.label
574
+ )
575
+ ) }) : null,
576
+ actions ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: cn("flex flex-wrap gap-2", isUser && "justify-end"), children: actions }) : null
577
+ ] }),
578
+ isUser ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "shrink-0", children: avatar ?? getDefaultAvatar(role) }) : null
579
+ ]
580
+ }
581
+ );
582
+ }
583
+ function AiChatAssistantMessage(props) {
584
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(AiChatMessage, { role: "assistant", ...props });
585
+ }
586
+ function AiChatUserMessage(props) {
587
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(AiChatMessage, { role: "user", ...props });
588
+ }
589
+ function AiChatSummaryActions({
590
+ className,
591
+ title = "Quick actions",
592
+ description,
593
+ actionsClassName,
594
+ children,
595
+ ...props
596
+ }) {
597
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("section", { className: cn("grid gap-3 rounded-2xl border bg-card p-4 shadow-sm", className), ...props, children: [
598
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "grid gap-1", children: [
599
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "text-sm font-semibold text-foreground", children: title }),
600
+ description ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "text-xs text-muted-foreground", children: description }) : null
601
+ ] }),
602
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: cn("grid gap-3 md:grid-cols-3", actionsClassName), children })
603
+ ] });
604
+ }
605
+ var AiChatSummaryAction = React4.forwardRef(
606
+ ({
607
+ className,
608
+ title,
609
+ description,
610
+ icon: Icon2 = import_lucide_react2.Sparkles,
611
+ active = false,
612
+ badge,
613
+ type = "button",
614
+ ...props
615
+ }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
616
+ "button",
617
+ {
618
+ ref,
619
+ type,
620
+ className: cn(
621
+ "flex w-full items-start gap-3 rounded-xl border px-4 py-4 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
622
+ active ? "border-[var(--color-accent-blue)]/40 bg-[var(--color-accent-blue)]/10" : "hover:border-border hover:bg-accent/40",
623
+ className
624
+ ),
625
+ ...props,
626
+ children: [
627
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "mt-0.5 flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-[var(--color-brand)]/10 text-[var(--color-brand)]", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Icon2, { className: "h-5 w-5" }) }),
628
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "grid flex-1 gap-1", children: [
629
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "flex flex-wrap items-center gap-2", children: [
630
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "text-sm font-medium text-foreground", children: title }),
631
+ badge ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Badge, { variant: "secondary", children: badge }) : null
632
+ ] }),
633
+ description ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "text-xs leading-5 text-muted-foreground", children: description }) : null
634
+ ] })
635
+ ]
636
+ }
637
+ )
638
+ );
639
+ AiChatSummaryAction.displayName = "AiChatSummaryAction";
640
+ function AiChatComposer({
641
+ className,
642
+ textareaProps,
643
+ onSubmit,
644
+ submitLabel = "Send",
645
+ submitIcon = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.Send, { className: "h-4 w-4" }),
646
+ leadingActions,
647
+ trailingActions,
648
+ helperText,
649
+ disabled = false,
650
+ ...props
651
+ }) {
652
+ const { className: textareaClassName, placeholder, disabled: textareaDisabled, ...restTextareaProps } = textareaProps ?? {};
653
+ const isDisabled = disabled || Boolean(textareaDisabled);
654
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("form", { className: cn("border-t bg-card px-4 py-4", className), onSubmit, ...props, children: [
655
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "rounded-2xl border bg-background p-3 shadow-sm", children: [
656
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
657
+ Textarea,
658
+ {
659
+ className: cn(
660
+ "min-h-24 resize-none border-0 bg-transparent p-0 text-sm shadow-none focus-visible:ring-0",
661
+ textareaClassName
662
+ ),
663
+ placeholder: placeholder ?? "Describe what you need from the assistant...",
664
+ disabled: isDisabled,
665
+ ...restTextareaProps
666
+ }
667
+ ),
668
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "mt-3 flex flex-wrap items-center justify-between gap-3", children: [
669
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "flex flex-wrap items-center gap-2", children: leadingActions }),
670
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "flex flex-wrap items-center gap-2", children: [
671
+ trailingActions,
672
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(Button, { type: "submit", disabled: isDisabled, children: [
673
+ submitIcon,
674
+ submitLabel
675
+ ] })
676
+ ] })
677
+ ] })
678
+ ] }),
679
+ helperText ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "mt-2 text-xs text-muted-foreground", children: helperText }) : null
680
+ ] });
681
+ }
682
+ function AiChatEmptyState({
683
+ className,
684
+ title,
685
+ description,
686
+ prompts,
687
+ onPromptSelect,
688
+ ...props
689
+ }) {
690
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
691
+ "div",
692
+ {
693
+ className: cn(
694
+ "flex flex-1 flex-col items-center justify-center gap-5 rounded-2xl border border-dashed bg-card/70 px-6 py-10 text-center",
695
+ className
696
+ ),
697
+ ...props,
698
+ children: [
699
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "flex h-14 w-14 items-center justify-center rounded-2xl bg-[var(--color-brand)]/10 text-[var(--color-brand)]", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.Sparkles, { className: "h-6 w-6" }) }),
700
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "grid max-w-xl gap-2", children: [
701
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "text-lg font-semibold text-foreground", children: title }),
702
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "text-sm leading-6 text-muted-foreground", children: description })
703
+ ] }),
704
+ prompts?.length ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "flex max-w-2xl flex-wrap items-center justify-center gap-2", children: prompts.map((prompt) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Button, { type: "button", variant: "outline", size: "sm", onClick: () => onPromptSelect?.(prompt), children: prompt }, prompt)) }) : null
705
+ ]
706
+ }
707
+ );
708
+ }
709
+ function AiChatFloatingButton({
710
+ className,
711
+ label = "Asistente IA",
712
+ unreadCount,
713
+ icon: Icon2 = import_lucide_react2.Sparkles,
714
+ variant = "default",
715
+ size = "lg",
716
+ children,
717
+ ...props
718
+ }) {
719
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
720
+ Button,
721
+ {
722
+ variant,
723
+ size,
724
+ className: cn("fixed bottom-6 right-6 h-14 rounded-full px-5 shadow-lg", className),
725
+ ...props,
726
+ children: [
727
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Icon2, { className: "h-4 w-4" }),
728
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { children: children ?? label }),
729
+ typeof unreadCount === "number" && unreadCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "rounded-full bg-white/15 px-2 py-0.5 text-xs font-semibold text-inherit", children: unreadCount > 9 ? "9+" : unreadCount }) : null
730
+ ]
731
+ }
732
+ );
733
+ }
734
+ function AiChatFloatingSidebar({
735
+ children,
736
+ trigger,
737
+ side = "right",
738
+ open,
739
+ defaultOpen,
740
+ onOpenChange,
741
+ contentClassName,
742
+ triggerAsChild = true
743
+ }) {
744
+ const resolvedTrigger = trigger ?? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(AiChatFloatingButton, {});
745
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(Sheet, { open, defaultOpen, onOpenChange, children: [
746
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SheetTrigger, { asChild: triggerAsChild, children: resolvedTrigger }),
747
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SheetContent, { side, className: cn("w-full p-0 sm:max-w-[460px]", contentClassName), children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(AiChatLayout, { variant: "sidebar", className: "h-full rounded-none border-0 shadow-none", children }) })
748
+ ] });
749
+ }
750
+
230
751
  // src/assets/isotipo-cortexa-dark.png
231
752
  var isotipo_cortexa_dark_default = "./isotipo-cortexa-dark-F2MDSEEV.png";
232
753
 
@@ -234,7 +755,7 @@ var isotipo_cortexa_dark_default = "./isotipo-cortexa-dark-F2MDSEEV.png";
234
755
  var isotipo_cortexa_light_default = "./isotipo-cortexa-light-LV3O6ASR.png";
235
756
 
236
757
  // src/components/branding/brand-logo.tsx
237
- var import_jsx_runtime2 = require("react/jsx-runtime");
758
+ var import_jsx_runtime7 = require("react/jsx-runtime");
238
759
  var sizeMap = {
239
760
  sm: { icon: "h-6 w-6", text: "text-sm", gap: "gap-2" },
240
761
  md: { icon: "h-7 w-7", text: "text-lg", gap: "gap-3" },
@@ -244,8 +765,8 @@ function BrandLogo({ className, size = "md", href }) {
244
765
  const { resolvedTheme } = useTheme();
245
766
  const isDark = resolvedTheme === "dark";
246
767
  const s = sizeMap[size];
247
- const content = /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
248
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
768
+ const content = /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
769
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
249
770
  "div",
250
771
  {
251
772
  className: cn(
@@ -253,7 +774,7 @@ function BrandLogo({ className, size = "md", href }) {
253
774
  s.icon,
254
775
  isDark ? "bg-[var(--color-brand)] p-1" : "bg-transparent"
255
776
  ),
256
- children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
777
+ children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
257
778
  "img",
258
779
  {
259
780
  src: isDark ? isotipo_cortexa_dark_default : isotipo_cortexa_light_default,
@@ -263,8 +784,8 @@ function BrandLogo({ className, size = "md", href }) {
263
784
  )
264
785
  }
265
786
  ),
266
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "flex items-baseline", children: [
267
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
787
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex items-baseline", children: [
788
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
268
789
  "span",
269
790
  {
270
791
  className: cn(
@@ -275,7 +796,7 @@ function BrandLogo({ className, size = "md", href }) {
275
796
  children: "Cortexa"
276
797
  }
277
798
  ),
278
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
799
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
279
800
  "span",
280
801
  {
281
802
  className: cn(
@@ -290,13 +811,13 @@ function BrandLogo({ className, size = "md", href }) {
290
811
  ] });
291
812
  const wrapperClass = cn("flex items-center", s.gap, className);
292
813
  if (href) {
293
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("a", { href, className: wrapperClass, "aria-label": "Cortexa Fiscal \u2014 Inicio", children: content });
814
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("a", { href, className: wrapperClass, "aria-label": "Cortexa Fiscal \u2014 Inicio", children: content });
294
815
  }
295
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: wrapperClass, "aria-label": "Cortexa Fiscal", children: content });
816
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: wrapperClass, "aria-label": "Cortexa Fiscal", children: content });
296
817
  }
297
818
 
298
819
  // src/components/data-display/icons.tsx
299
- var import_jsx_runtime3 = require("react/jsx-runtime");
820
+ var import_jsx_runtime8 = require("react/jsx-runtime");
300
821
  var toneStyles = {
301
822
  brand: "bg-[var(--color-brand)]/10 text-[var(--color-brand)]",
302
823
  info: "bg-[var(--color-info-bg)] text-[var(--color-accent-blue)]",
@@ -312,7 +833,7 @@ var sizeStyles = {
312
833
  };
313
834
  function FeatureIcon({ className, icon: Icon2, tone = "brand", size = "md", iconClassName }) {
314
835
  const classes = sizeStyles[size];
315
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: cn("inline-flex items-center justify-center", classes.wrapper, toneStyles[tone], className), children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon2, { className: cn(classes.icon, iconClassName) }) });
836
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: cn("inline-flex items-center justify-center", classes.wrapper, toneStyles[tone], className), children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Icon2, { className: cn(classes.icon, iconClassName) }) });
316
837
  }
317
838
  function ModuleIconButton({
318
839
  className,
@@ -323,7 +844,7 @@ function ModuleIconButton({
323
844
  tone = "brand",
324
845
  ...props
325
846
  }) {
326
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
847
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
327
848
  "button",
328
849
  {
329
850
  type,
@@ -333,7 +854,7 @@ function ModuleIconButton({
333
854
  ),
334
855
  ...props,
335
856
  children: [
336
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
857
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
337
858
  FeatureIcon,
338
859
  {
339
860
  icon,
@@ -342,9 +863,9 @@ function ModuleIconButton({
342
863
  className: "transition-colors group-hover:bg-[var(--color-brand)]/20"
343
864
  }
344
865
  ),
345
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "grid gap-1", children: [
346
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-sm font-medium text-foreground", children: label }),
347
- description ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-xs text-muted-foreground", children: description }) : null
866
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("span", { className: "grid gap-1", children: [
867
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "text-sm font-medium text-foreground", children: label }),
868
+ description ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "text-xs text-muted-foreground", children: description }) : null
348
869
  ] })
349
870
  ]
350
871
  }
@@ -352,10 +873,10 @@ function ModuleIconButton({
352
873
  }
353
874
 
354
875
  // src/components/primitives/avatar.tsx
355
- var React = __toESM(require("react"), 1);
876
+ var React5 = __toESM(require("react"), 1);
356
877
  var AvatarPrimitive = __toESM(require("@radix-ui/react-avatar"), 1);
357
- var import_jsx_runtime4 = require("react/jsx-runtime");
358
- var Avatar = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
878
+ var import_jsx_runtime9 = require("react/jsx-runtime");
879
+ var Avatar = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
359
880
  AvatarPrimitive.Root,
360
881
  {
361
882
  ref,
@@ -364,9 +885,9 @@ var Avatar = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
364
885
  }
365
886
  ));
366
887
  Avatar.displayName = AvatarPrimitive.Root.displayName;
367
- var AvatarImage = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(AvatarPrimitive.Image, { ref, className: cn("aspect-square h-full w-full", className), ...props }));
888
+ var AvatarImage = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(AvatarPrimitive.Image, { ref, className: cn("aspect-square h-full w-full", className), ...props }));
368
889
  AvatarImage.displayName = AvatarPrimitive.Image.displayName;
369
- var AvatarFallback = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
890
+ var AvatarFallback = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
370
891
  AvatarPrimitive.Fallback,
371
892
  {
372
893
  ref,
@@ -377,7 +898,7 @@ var AvatarFallback = React.forwardRef(({ className, ...props }, ref) => /* @__PU
377
898
  AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
378
899
 
379
900
  // src/components/data-display/profile-avatar.tsx
380
- var import_jsx_runtime5 = require("react/jsx-runtime");
901
+ var import_jsx_runtime10 = require("react/jsx-runtime");
381
902
  var sizeMap2 = {
382
903
  xs: { avatar: "h-8 w-8", text: "text-xs", dot: "h-2.5 w-2.5" },
383
904
  sm: { avatar: "h-10 w-10", text: "text-sm", dot: "h-3 w-3" },
@@ -405,12 +926,12 @@ function ProfileAvatar({
405
926
  status
406
927
  }) {
407
928
  const classes = sizeMap2[size];
408
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: cn("relative inline-flex", className), children: [
409
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(Avatar, { className: cn(classes.avatar, avatarClassName), children: [
410
- src ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(AvatarImage, { src, alt: alt ?? name }) : null,
411
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(AvatarFallback, { className: cn("bg-[var(--color-brand)] text-white font-medium", classes.text, fallbackClassName), children: initials ?? getInitials(name) })
929
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: cn("relative inline-flex", className), children: [
930
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Avatar, { className: cn(classes.avatar, avatarClassName), children: [
931
+ src ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(AvatarImage, { src, alt: alt ?? name }) : null,
932
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(AvatarFallback, { className: cn("bg-[var(--color-brand)] text-white font-medium", classes.text, fallbackClassName), children: initials ?? getInitials(name) })
412
933
  ] }),
413
- status ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
934
+ status ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
414
935
  "span",
415
936
  {
416
937
  "aria-hidden": "true",
@@ -423,9 +944,9 @@ function AvatarGroup({ className, users, size = "xs", limit = 4, extraLabel }) {
423
944
  const visibleUsers = users.slice(0, limit);
424
945
  const hiddenCount = Math.max(0, users.length - limit);
425
946
  const classes = sizeMap2[size];
426
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: cn("flex items-center gap-3", className), children: [
427
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex -space-x-2", children: [
428
- visibleUsers.map((user) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
947
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: cn("flex items-center gap-3", className), children: [
948
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex -space-x-2", children: [
949
+ visibleUsers.map((user) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
429
950
  ProfileAvatar,
430
951
  {
431
952
  name: user.name,
@@ -437,7 +958,7 @@ function AvatarGroup({ className, users, size = "xs", limit = 4, extraLabel }) {
437
958
  },
438
959
  user.id ?? user.name
439
960
  )),
440
- hiddenCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
961
+ hiddenCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
441
962
  "div",
442
963
  {
443
964
  className: cn(
@@ -452,16 +973,16 @@ function AvatarGroup({ className, users, size = "xs", limit = 4, extraLabel }) {
452
973
  }
453
974
  ) : null
454
975
  ] }),
455
- extraLabel ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "text-sm text-muted-foreground", children: extraLabel }) : null
976
+ extraLabel ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "text-sm text-muted-foreground", children: extraLabel }) : null
456
977
  ] });
457
978
  }
458
979
  function ProfileAvatarRow({ className, name, role, src, initials, status, size = "sm", aside }) {
459
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: cn("flex items-center justify-between gap-3", className), children: [
460
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex items-center gap-3", children: [
461
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ProfileAvatar, { name, src, initials, status, size }),
462
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "grid gap-0.5", children: [
463
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-sm font-medium text-foreground", children: name }),
464
- role ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-xs text-muted-foreground", children: role }) : null
980
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: cn("flex items-center justify-between gap-3", className), children: [
981
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex items-center gap-3", children: [
982
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ProfileAvatar, { name, src, initials, status, size }),
983
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "grid gap-0.5", children: [
984
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "text-sm font-medium text-foreground", children: name }),
985
+ role ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "text-xs text-muted-foreground", children: role }) : null
465
986
  ] })
466
987
  ] }),
467
988
  aside
@@ -469,9 +990,9 @@ function ProfileAvatarRow({ className, name, role, src, initials, status, size =
469
990
  }
470
991
 
471
992
  // src/components/data-display/typography.tsx
472
- var import_class_variance_authority = require("class-variance-authority");
473
- var import_jsx_runtime6 = require("react/jsx-runtime");
474
- var typographyVariants = (0, import_class_variance_authority.cva)("text-foreground", {
993
+ var import_class_variance_authority4 = require("class-variance-authority");
994
+ var import_jsx_runtime11 = require("react/jsx-runtime");
995
+ var typographyVariants = (0, import_class_variance_authority4.cva)("text-foreground", {
475
996
  variants: {
476
997
  variant: {
477
998
  h1: "font-display text-4xl font-bold tracking-tight",
@@ -497,17 +1018,63 @@ function Typography({
497
1018
  ...props
498
1019
  }) {
499
1020
  const Component = as ?? "p";
500
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Component, { className: cn(typographyVariants({ variant }), className), ...props, children });
1021
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Component, { className: cn(typographyVariants({ variant }), className), ...props, children });
1022
+ }
1023
+
1024
+ // src/components/feedback/empty-state.tsx
1025
+ var import_lucide_react3 = require("lucide-react");
1026
+ var import_jsx_runtime12 = require("react/jsx-runtime");
1027
+ function EmptyState({
1028
+ className,
1029
+ icon: Icon2 = import_lucide_react3.Inbox,
1030
+ title,
1031
+ description,
1032
+ action,
1033
+ secondaryAction,
1034
+ align = "center",
1035
+ compact = false
1036
+ }) {
1037
+ const isCentered = align === "center";
1038
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1039
+ "section",
1040
+ {
1041
+ className: cn(
1042
+ "rounded-2xl border border-dashed bg-card text-card-foreground shadow-sm",
1043
+ compact ? "p-5" : "p-8 sm:p-10",
1044
+ className
1045
+ ),
1046
+ children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
1047
+ "div",
1048
+ {
1049
+ className: cn(
1050
+ "flex flex-col gap-5",
1051
+ isCentered ? "items-center text-center" : "items-start text-left"
1052
+ ),
1053
+ children: [
1054
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "flex h-14 w-14 items-center justify-center rounded-2xl bg-[var(--color-brand)]/10 text-[var(--color-brand)]", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Icon2, { className: "h-6 w-6" }) }),
1055
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "grid max-w-xl gap-2", children: [
1056
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "text-lg font-semibold text-foreground", children: title }),
1057
+ description ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "text-sm leading-6 text-muted-foreground", children: description }) : null
1058
+ ] }),
1059
+ action || secondaryAction ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: cn("flex flex-wrap gap-3", isCentered && "justify-center"), children: [
1060
+ action,
1061
+ secondaryAction
1062
+ ] }) : null
1063
+ ]
1064
+ }
1065
+ )
1066
+ }
1067
+ );
501
1068
  }
502
1069
 
503
1070
  // src/components/primitives/card.tsx
504
- var React2 = __toESM(require("react"), 1);
505
- var import_jsx_runtime7 = require("react/jsx-runtime");
1071
+ var React6 = __toESM(require("react"), 1);
1072
+ var import_jsx_runtime13 = require("react/jsx-runtime");
506
1073
  var cardBaseClassName = "rounded-lg border bg-card text-card-foreground shadow-sm";
507
- var Card = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { ref, className: cn(cardBaseClassName, className), ...props }));
1074
+ var Card = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { ref, className: cn(cardBaseClassName, className), ...props }));
508
1075
  Card.displayName = "Card";
509
- var ClickableCard = React2.forwardRef(
510
- ({ className, type = "button", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1076
+ var ClickableCard = React6.forwardRef(
1077
+ ({ className, type = "button", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
511
1078
  "button",
512
1079
  {
513
1080
  ref,
@@ -522,8 +1089,8 @@ var ClickableCard = React2.forwardRef(
522
1089
  )
523
1090
  );
524
1091
  ClickableCard.displayName = "ClickableCard";
525
- var CenteredIconCard = React2.forwardRef(
526
- ({ className, type = "button", icon: Icon2, title, iconClassName, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
1092
+ var CenteredIconCard = React6.forwardRef(
1093
+ ({ className, type = "button", icon: Icon2, title, iconClassName, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
527
1094
  "button",
528
1095
  {
529
1096
  ref,
@@ -535,67 +1102,67 @@ var CenteredIconCard = React2.forwardRef(
535
1102
  ),
536
1103
  ...props,
537
1104
  children: [
538
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "flex h-12 w-12 items-center justify-center rounded-xl bg-[var(--color-brand)]/10 text-[var(--color-brand)]", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Icon2, { className: cn("h-6 w-6", iconClassName) }) }),
539
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "text-sm font-semibold text-foreground", children: title })
1105
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "flex h-12 w-12 items-center justify-center rounded-xl bg-[var(--color-brand)]/10 text-[var(--color-brand)]", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon2, { className: cn("h-6 w-6", iconClassName) }) }),
1106
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-sm font-semibold text-foreground", children: title })
540
1107
  ]
541
1108
  }
542
1109
  )
543
1110
  );
544
1111
  CenteredIconCard.displayName = "CenteredIconCard";
545
- var CardHeader = React2.forwardRef(
546
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { ref, className: cn("flex flex-col space-y-1.5 p-6", className), ...props })
1112
+ var CardHeader = React6.forwardRef(
1113
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { ref, className: cn("flex flex-col space-y-1.5 p-6", className), ...props })
547
1114
  );
548
1115
  CardHeader.displayName = "CardHeader";
549
- var CardTitle = React2.forwardRef(
550
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { ref, className: cn("text-2xl font-semibold leading-none tracking-tight", className), ...props })
1116
+ var CardTitle = React6.forwardRef(
1117
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { ref, className: cn("text-2xl font-semibold leading-none tracking-tight", className), ...props })
551
1118
  );
552
1119
  CardTitle.displayName = "CardTitle";
553
- var CardDescription = React2.forwardRef(
554
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { ref, className: cn("text-sm text-muted-foreground", className), ...props })
1120
+ var CardDescription = React6.forwardRef(
1121
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { ref, className: cn("text-sm text-muted-foreground", className), ...props })
555
1122
  );
556
1123
  CardDescription.displayName = "CardDescription";
557
- var CardContent = React2.forwardRef(
558
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { ref, className: cn("p-6 pt-0", className), ...props })
1124
+ var CardContent = React6.forwardRef(
1125
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { ref, className: cn("p-6 pt-0", className), ...props })
559
1126
  );
560
1127
  CardContent.displayName = "CardContent";
561
- var CardFooter = React2.forwardRef(
562
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { ref, className: cn("flex items-center p-6 pt-0", className), ...props })
1128
+ var CardFooter = React6.forwardRef(
1129
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { ref, className: cn("flex items-center p-6 pt-0", className), ...props })
563
1130
  );
564
1131
  CardFooter.displayName = "CardFooter";
565
1132
 
566
1133
  // src/components/feedback/skeleton.tsx
567
- var import_jsx_runtime8 = require("react/jsx-runtime");
1134
+ var import_jsx_runtime14 = require("react/jsx-runtime");
568
1135
  function Skeleton({ className, ...props }) {
569
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: cn("animate-pulse rounded-md bg-muted", className), ...props });
1136
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: cn("animate-pulse rounded-md bg-muted", className), ...props });
570
1137
  }
571
1138
 
572
1139
  // src/components/feedback/spinner.tsx
573
- var import_lucide_react = require("lucide-react");
574
- var import_jsx_runtime9 = require("react/jsx-runtime");
1140
+ var import_lucide_react4 = require("lucide-react");
1141
+ var import_jsx_runtime15 = require("react/jsx-runtime");
575
1142
  var sizeMap3 = {
576
1143
  sm: "h-4 w-4",
577
1144
  md: "h-5 w-5",
578
1145
  lg: "h-7 w-7"
579
1146
  };
580
1147
  function Spinner({ className, size = "md" }) {
581
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react.Loader2, { className: cn("animate-spin text-current", sizeMap3[size], className) });
1148
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_lucide_react4.Loader2, { className: cn("animate-spin text-current", sizeMap3[size], className) });
582
1149
  }
583
1150
 
584
- // src/components/tables/table.tsx
585
- var React3 = __toESM(require("react"), 1);
586
- var import_jsx_runtime10 = require("react/jsx-runtime");
587
- var Table = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("table", { ref, className: cn("w-full caption-bottom text-sm", className), ...props }) }));
1151
+ // src/components/tables/table.tsx
1152
+ var React7 = __toESM(require("react"), 1);
1153
+ var import_jsx_runtime16 = require("react/jsx-runtime");
1154
+ var Table = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("table", { ref, className: cn("w-full caption-bottom text-sm", className), ...props }) }));
588
1155
  Table.displayName = "Table";
589
- var TableHeader = React3.forwardRef(
590
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("thead", { ref, className: cn("[&_tr]:border-b", className), ...props })
1156
+ var TableHeader = React7.forwardRef(
1157
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("thead", { ref, className: cn("[&_tr]:border-b", className), ...props })
591
1158
  );
592
1159
  TableHeader.displayName = "TableHeader";
593
- var TableBody = React3.forwardRef(
594
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("tbody", { ref, className: cn("[&_tr:last-child]:border-0", className), ...props })
1160
+ var TableBody = React7.forwardRef(
1161
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("tbody", { ref, className: cn("[&_tr:last-child]:border-0", className), ...props })
595
1162
  );
596
1163
  TableBody.displayName = "TableBody";
597
- var TableFooter = React3.forwardRef(
598
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1164
+ var TableFooter = React7.forwardRef(
1165
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
599
1166
  "tfoot",
600
1167
  {
601
1168
  ref,
@@ -605,8 +1172,8 @@ var TableFooter = React3.forwardRef(
605
1172
  )
606
1173
  );
607
1174
  TableFooter.displayName = "TableFooter";
608
- var TableRow = React3.forwardRef(
609
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1175
+ var TableRow = React7.forwardRef(
1176
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
610
1177
  "tr",
611
1178
  {
612
1179
  ref,
@@ -616,8 +1183,8 @@ var TableRow = React3.forwardRef(
616
1183
  )
617
1184
  );
618
1185
  TableRow.displayName = "TableRow";
619
- var TableHead = React3.forwardRef(
620
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1186
+ var TableHead = React7.forwardRef(
1187
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
621
1188
  "th",
622
1189
  {
623
1190
  ref,
@@ -627,17 +1194,17 @@ var TableHead = React3.forwardRef(
627
1194
  )
628
1195
  );
629
1196
  TableHead.displayName = "TableHead";
630
- var TableCell = React3.forwardRef(
631
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("td", { ref, className: cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className), ...props })
1197
+ var TableCell = React7.forwardRef(
1198
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("td", { ref, className: cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className), ...props })
632
1199
  );
633
1200
  TableCell.displayName = "TableCell";
634
- var TableCaption = React3.forwardRef(
635
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("caption", { ref, className: cn("mt-4 text-sm text-muted-foreground", className), ...props })
1201
+ var TableCaption = React7.forwardRef(
1202
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("caption", { ref, className: cn("mt-4 text-sm text-muted-foreground", className), ...props })
636
1203
  );
637
1204
  TableCaption.displayName = "TableCaption";
638
1205
 
639
1206
  // src/components/feedback/loading-state.tsx
640
- var import_jsx_runtime11 = require("react/jsx-runtime");
1207
+ var import_jsx_runtime17 = require("react/jsx-runtime");
641
1208
  function LoadingState({
642
1209
  className,
643
1210
  title = "Cargando datos",
@@ -645,93 +1212,99 @@ function LoadingState({
645
1212
  size = "md",
646
1213
  icon
647
1214
  }) {
648
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
1215
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
649
1216
  "div",
650
1217
  {
651
1218
  role: "status",
652
1219
  "aria-live": "polite",
653
1220
  className: cn("flex items-center gap-3 rounded-xl border border-border bg-card px-4 py-3 text-foreground", className),
654
1221
  children: [
655
- icon ?? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Spinner, { size, className: "text-primary" }),
656
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "grid gap-0.5", children: [
657
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "text-sm font-medium", children: title }),
658
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "text-xs text-muted-foreground", children: description })
1222
+ icon ?? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Spinner, { size, className: "text-primary" }),
1223
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "grid gap-0.5", children: [
1224
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-sm font-medium", children: title }),
1225
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-xs text-muted-foreground", children: description })
659
1226
  ] })
660
1227
  ]
661
1228
  }
662
1229
  );
663
1230
  }
664
1231
  function LoadingCard({ className, rows = 3 }) {
665
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Card, { className, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(CardContent, { className: "grid gap-3 p-5", children: [
666
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Skeleton, { className: "h-6 w-40" }),
667
- Array.from({ length: rows }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Skeleton, { className: cn("h-4", index === rows - 1 ? "w-2/3" : "w-full") }, index)),
668
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Skeleton, { className: "mt-1 h-10 w-full rounded-lg" })
1232
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Card, { className, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(CardContent, { className: "grid gap-3 p-5", children: [
1233
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Skeleton, { className: "h-6 w-40" }),
1234
+ Array.from({ length: rows }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Skeleton, { className: cn("h-4", index === rows - 1 ? "w-2/3" : "w-full") }, index)),
1235
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Skeleton, { className: "mt-1 h-10 w-full rounded-lg" })
669
1236
  ] }) });
670
1237
  }
671
1238
  function LoadingTableRows({ className, columns = 5, rows = 4 }) {
672
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: cn("rounded-xl border", className), children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(Table, { children: [
673
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(TableHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(TableRow, { children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(TableHead, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Skeleton, { className: "h-4 w-20" }) }, index)) }) }),
674
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(TableBody, { children: Array.from({ length: rows }).map((_, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(TableRow, { children: Array.from({ length: columns }).map((_2, columnIndex) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Skeleton, { className: cn("h-4", columnIndex === 0 ? "w-24" : "w-full") }) }, columnIndex)) }, rowIndex)) })
1239
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: cn("rounded-xl border", className), children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(Table, { children: [
1240
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableRow, { children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableHead, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Skeleton, { className: "h-4 w-20" }) }, index)) }) }),
1241
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableBody, { children: Array.from({ length: rows }).map((_, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableRow, { children: Array.from({ length: columns }).map((_2, columnIndex) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Skeleton, { className: cn("h-4", columnIndex === 0 ? "w-24" : "w-full") }) }, columnIndex)) }, rowIndex)) })
675
1242
  ] }) });
676
1243
  }
677
1244
 
678
- // src/components/feedback/notification.tsx
679
- var import_lucide_react2 = require("lucide-react");
680
- var import_sonner = require("sonner");
681
-
682
- // src/components/primitives/button.tsx
683
- var React4 = __toESM(require("react"), 1);
684
- var import_react_slot = require("@radix-ui/react-slot");
685
- var import_class_variance_authority2 = require("class-variance-authority");
686
- var import_jsx_runtime12 = require("react/jsx-runtime");
687
- var buttonVariants = (0, import_class_variance_authority2.cva)(
688
- "inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium shadow-sm ring-offset-background 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 [&_svg]:shrink-0",
689
- {
690
- variants: {
691
- variant: {
692
- default: "bg-primary text-primary-foreground hover:bg-primary/90",
693
- destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
694
- outline: "border border-input bg-background text-foreground hover:bg-accent hover:text-accent-foreground",
695
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
696
- ghost: "text-foreground shadow-none hover:bg-accent hover:text-accent-foreground",
697
- link: "h-auto px-0 py-0 text-primary underline-offset-4 shadow-none hover:underline"
698
- },
699
- size: {
700
- default: "h-10 px-4 py-2",
701
- sm: "h-9 rounded-md px-3",
702
- lg: "h-11 rounded-md px-8",
703
- icon: "h-10 w-10"
704
- }
705
- },
706
- defaultVariants: {
707
- variant: "default",
708
- size: "default"
709
- }
710
- }
711
- );
712
- var Button = React4.forwardRef(
713
- ({ className, variant, size, asChild = false, ...props }, ref) => {
714
- const Comp = asChild ? import_react_slot.Slot : "button";
715
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Comp, { className: cn(buttonVariants({ variant, size, className })), ref, ...props });
716
- }
717
- );
718
- Button.displayName = "Button";
1245
+ // src/components/feedback/module-skeleton.tsx
1246
+ var import_jsx_runtime18 = require("react/jsx-runtime");
1247
+ function ModuleSkeleton({
1248
+ className,
1249
+ variant = "cards",
1250
+ cardCount = 6,
1251
+ showHeaderAction = true
1252
+ }) {
1253
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { role: "status", "aria-label": "Cargando modulo", className: cn("grid gap-6 p-6", className), children: [
1254
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex flex-wrap items-center justify-between gap-4", children: [
1255
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "grid gap-2", children: [
1256
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Skeleton, { className: "h-8 w-52" }),
1257
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Skeleton, { className: "h-4 w-72 max-w-full" })
1258
+ ] }),
1259
+ showHeaderAction ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Skeleton, { className: "h-10 w-36" }) : null
1260
+ ] }),
1261
+ variant === "cards" ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "grid gap-4 md:grid-cols-2 xl:grid-cols-3", children: Array.from({ length: cardCount }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Skeleton, { className: "h-32 w-full rounded-xl" }, index)) }) : null,
1262
+ variant === "table" ? /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "rounded-xl border bg-card p-4", children: [
1263
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "mb-4 flex flex-wrap gap-3", children: [
1264
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Skeleton, { className: "h-10 w-64 max-w-full" }),
1265
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Skeleton, { className: "h-10 w-36" })
1266
+ ] }),
1267
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "grid gap-3", children: [
1268
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Skeleton, { className: "h-10 w-full rounded-lg" }),
1269
+ Array.from({ length: 6 }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Skeleton, { className: "h-14 w-full rounded-lg" }, index))
1270
+ ] })
1271
+ ] }) : null,
1272
+ variant === "form" ? /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "rounded-xl border bg-card p-5", children: [
1273
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "grid gap-5 md:grid-cols-2", children: [
1274
+ Array.from({ length: 6 }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "grid gap-2", children: [
1275
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Skeleton, { className: "h-4 w-28" }),
1276
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Skeleton, { className: "h-10 w-full" })
1277
+ ] }, index)),
1278
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "grid gap-2 md:col-span-2", children: [
1279
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Skeleton, { className: "h-4 w-32" }),
1280
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Skeleton, { className: "h-28 w-full rounded-xl" })
1281
+ ] })
1282
+ ] }),
1283
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "mt-6 flex flex-wrap justify-end gap-3", children: [
1284
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Skeleton, { className: "h-10 w-24" }),
1285
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Skeleton, { className: "h-10 w-36" })
1286
+ ] })
1287
+ ] }) : null
1288
+ ] });
1289
+ }
719
1290
 
720
1291
  // src/components/feedback/notification.tsx
721
- var import_jsx_runtime13 = require("react/jsx-runtime");
1292
+ var import_lucide_react5 = require("lucide-react");
1293
+ var import_sonner = require("sonner");
1294
+ var import_jsx_runtime19 = require("react/jsx-runtime");
722
1295
  var notificationStyles = {
723
- info: "bg-[var(--color-info-bg)] text-[var(--color-accent-blue)] border-[var(--color-accent-blue)]/30",
724
- success: "bg-[var(--color-success-bg)] text-[var(--color-success)] border-[var(--color-success)]/30",
725
- warning: "bg-[var(--color-warning-bg)] text-[var(--color-warning)] border-[var(--color-warning)]/30",
726
- danger: "bg-destructive/10 text-destructive border-destructive/30",
727
- loading: "bg-[var(--color-info-bg)] text-[var(--color-accent-blue)] border-[var(--color-accent-blue)]/30"
1296
+ info: "border-[var(--color-accent-blue)]/20 bg-[linear-gradient(135deg,rgba(59,130,246,0.14),rgba(239,246,255,0.96))] text-[var(--color-accent-blue)]",
1297
+ success: "border-[var(--color-success)]/20 bg-[linear-gradient(135deg,rgba(22,163,74,0.14),rgba(220,252,231,0.96))] text-[var(--color-success)]",
1298
+ warning: "border-[var(--color-warning)]/20 bg-[linear-gradient(135deg,rgba(217,119,6,0.16),rgba(255,251,235,0.96))] text-[var(--color-warning)]",
1299
+ danger: "border-destructive/20 bg-[linear-gradient(135deg,rgba(220,74,65,0.16),rgba(254,242,242,0.96))] text-destructive",
1300
+ loading: "border-[var(--color-accent-blue)]/20 bg-[linear-gradient(135deg,rgba(59,130,246,0.14),rgba(239,246,255,0.96))] text-[var(--color-accent-blue)]"
728
1301
  };
729
1302
  var notificationIcons = {
730
- info: import_lucide_react2.Info,
731
- success: import_lucide_react2.CheckCircle2,
732
- warning: import_lucide_react2.AlertTriangle,
733
- danger: import_lucide_react2.AlertCircle,
734
- loading: import_lucide_react2.Loader2
1303
+ info: import_lucide_react5.Info,
1304
+ success: import_lucide_react5.CheckCircle2,
1305
+ warning: import_lucide_react5.AlertTriangle,
1306
+ danger: import_lucide_react5.AlertCircle,
1307
+ loading: import_lucide_react5.Loader2
735
1308
  };
736
1309
  function NotificationMessage({
737
1310
  className,
@@ -742,20 +1315,24 @@ function NotificationMessage({
742
1315
  icon
743
1316
  }) {
744
1317
  const Icon2 = icon ?? notificationIcons[tone];
745
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1318
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
746
1319
  "div",
747
1320
  {
748
1321
  role: "status",
749
- className: cn("flex items-start justify-between gap-3 rounded-lg border px-4 py-3", notificationStyles[tone], className),
1322
+ className: cn(
1323
+ "flex items-start justify-between gap-3 rounded-xl border px-4 py-3 shadow-sm",
1324
+ notificationStyles[tone],
1325
+ className
1326
+ ),
750
1327
  children: [
751
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-start gap-3", children: [
752
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon2, { className: cn("mt-0.5 h-4 w-4 shrink-0", tone === "loading" && "animate-spin") }),
753
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "grid gap-1", children: [
754
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-sm font-medium", children: title }),
755
- description ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "text-xs opacity-85", children: description }) : null
1328
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex items-start gap-3", children: [
1329
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-white/70 shadow-sm", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Icon2, { className: cn("h-4 w-4", tone === "loading" && "animate-spin") }) }),
1330
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "grid gap-1", children: [
1331
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-sm font-semibold", children: title }),
1332
+ description ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "text-xs leading-5 opacity-90", children: description }) : null
756
1333
  ] })
757
1334
  ] }),
758
- action ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "shrink-0", children: action }) : null
1335
+ action ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "shrink-0", children: action }) : null
759
1336
  ]
760
1337
  }
761
1338
  );
@@ -763,6 +1340,7 @@ function NotificationMessage({
763
1340
  function buildToastOptions(payload) {
764
1341
  return {
765
1342
  description: payload.description,
1343
+ duration: payload.duration,
766
1344
  action: payload.actionLabel ? {
767
1345
  label: payload.actionLabel,
768
1346
  onClick: payload.onAction ?? (() => void 0)
@@ -770,22 +1348,20 @@ function buildToastOptions(payload) {
770
1348
  };
771
1349
  }
772
1350
  var notify = {
773
- info: (payload) => (0, import_sonner.toast)(payload.title, buildToastOptions(payload)),
1351
+ info: (payload) => import_sonner.toast.info(payload.title, buildToastOptions(payload)),
774
1352
  success: (payload) => import_sonner.toast.success(payload.title, buildToastOptions(payload)),
775
- warning: (payload) => (0, import_sonner.toast)(payload.title, {
776
- ...buildToastOptions(payload),
777
- icon: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react2.AlertTriangle, { className: "h-4 w-4 text-[var(--color-warning)]" })
778
- }),
1353
+ warning: (payload) => import_sonner.toast.warning(payload.title, buildToastOptions(payload)),
779
1354
  danger: (payload) => import_sonner.toast.error(payload.title, buildToastOptions(payload)),
1355
+ error: (payload) => import_sonner.toast.error(payload.title, buildToastOptions(payload)),
780
1356
  loading: (payload) => import_sonner.toast.loading(payload.title, buildToastOptions(payload))
781
1357
  };
782
1358
  function NotificationAction({ children, variant = "outline", size = "sm", ...props }) {
783
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Button, { variant, size, ...props, children });
1359
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Button, { variant, size, ...props, children });
784
1360
  }
785
1361
 
786
1362
  // src/components/feedback/status-badge.tsx
787
- var import_lucide_react3 = require("lucide-react");
788
- var import_jsx_runtime14 = require("react/jsx-runtime");
1363
+ var import_lucide_react6 = require("lucide-react");
1364
+ var import_jsx_runtime20 = require("react/jsx-runtime");
789
1365
  var toneStyles2 = {
790
1366
  success: "border-transparent bg-[var(--color-success-bg)] text-[var(--color-success)]",
791
1367
  warning: "border-transparent bg-[var(--color-warning-bg)] text-[var(--color-warning)]",
@@ -794,15 +1370,15 @@ var toneStyles2 = {
794
1370
  loading: "border-transparent bg-muted text-muted-foreground"
795
1371
  };
796
1372
  var toneIcons = {
797
- success: import_lucide_react3.CheckCircle2,
798
- warning: import_lucide_react3.Clock3,
799
- danger: import_lucide_react3.AlertCircle,
800
- info: import_lucide_react3.CheckCircle2,
801
- loading: import_lucide_react3.Loader2
1373
+ success: import_lucide_react6.CheckCircle2,
1374
+ warning: import_lucide_react6.Clock3,
1375
+ danger: import_lucide_react6.AlertCircle,
1376
+ info: import_lucide_react6.CheckCircle2,
1377
+ loading: import_lucide_react6.Loader2
802
1378
  };
803
1379
  function StatusBadge({ children, tone = "info", className }) {
804
1380
  const Icon2 = toneIcons[tone];
805
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
1381
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
806
1382
  "span",
807
1383
  {
808
1384
  className: cn(
@@ -811,30 +1387,146 @@ function StatusBadge({ children, tone = "info", className }) {
811
1387
  className
812
1388
  ),
813
1389
  children: [
814
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Icon2, { className: cn("h-3.5 w-3.5", tone === "loading" && "animate-spin") }),
1390
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Icon2, { className: cn("h-3.5 w-3.5", tone === "loading" && "animate-spin") }),
815
1391
  children
816
1392
  ]
817
1393
  }
818
1394
  );
819
1395
  }
820
1396
 
1397
+ // src/components/feedback/sync-status-badge.tsx
1398
+ var import_lucide_react7 = require("lucide-react");
1399
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1400
+ var badgeStyles = {
1401
+ synced: "border-transparent bg-[var(--color-success-bg)] text-[var(--color-success)]",
1402
+ pending: "border-transparent bg-[var(--color-warning-bg)] text-[var(--color-warning)]",
1403
+ syncing: "border-transparent bg-[var(--color-info-bg)] text-[var(--color-accent-blue)]",
1404
+ conflict: "border-transparent bg-destructive/10 text-destructive",
1405
+ offline: "border-transparent bg-muted text-muted-foreground"
1406
+ };
1407
+ var badgeIcons = {
1408
+ synced: import_lucide_react7.CheckCircle2,
1409
+ pending: import_lucide_react7.Clock3,
1410
+ syncing: import_lucide_react7.Loader2,
1411
+ conflict: import_lucide_react7.AlertCircle,
1412
+ offline: import_lucide_react7.WifiOff
1413
+ };
1414
+ var badgeLabels = {
1415
+ synced: "Sincronizado",
1416
+ pending: "Pendiente",
1417
+ syncing: "Sincronizando",
1418
+ conflict: "Conflicto",
1419
+ offline: "Offline"
1420
+ };
1421
+ function SyncStatusBadge({ className, status, label }) {
1422
+ const Icon2 = badgeIcons[status];
1423
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
1424
+ "span",
1425
+ {
1426
+ className: cn(
1427
+ "inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs font-medium",
1428
+ badgeStyles[status],
1429
+ className
1430
+ ),
1431
+ children: [
1432
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Icon2, { className: cn("h-3.5 w-3.5", status === "syncing" && "animate-spin") }),
1433
+ label ?? badgeLabels[status]
1434
+ ]
1435
+ }
1436
+ );
1437
+ }
1438
+
1439
+ // src/components/feedback/sync-status-bar.tsx
1440
+ var import_lucide_react8 = require("lucide-react");
1441
+ var import_jsx_runtime22 = require("react/jsx-runtime");
1442
+ function pluralize(count, singular, plural) {
1443
+ return `${count} ${count === 1 ? singular : plural}`;
1444
+ }
1445
+ function SyncStatusBar({
1446
+ className,
1447
+ state,
1448
+ pendingCount = 0,
1449
+ errorCount = 0,
1450
+ syncingCount = 0,
1451
+ onClick,
1452
+ label
1453
+ }) {
1454
+ const config = {
1455
+ conflict: {
1456
+ icon: import_lucide_react8.AlertTriangle,
1457
+ text: label ?? `${pluralize(errorCount || 1, "operacion", "operaciones")} con error`,
1458
+ className: "bg-destructive/15 text-destructive"
1459
+ },
1460
+ offline: {
1461
+ icon: import_lucide_react8.WifiOff,
1462
+ text: label ?? (pendingCount > 0 ? `Offline \xB7 ${pluralize(pendingCount, "pendiente", "pendientes")}` : "Offline \xB7 sin pendientes"),
1463
+ className: "bg-[var(--color-warning-bg)] text-[var(--color-warning)]"
1464
+ },
1465
+ syncing: {
1466
+ icon: import_lucide_react8.Loader2,
1467
+ text: label ?? `Sincronizando ${pluralize(syncingCount || 1, "operacion", "operaciones")}...`,
1468
+ className: "bg-[var(--color-info-bg)] text-[var(--color-accent-blue)]",
1469
+ spinning: true
1470
+ },
1471
+ pending: {
1472
+ icon: import_lucide_react8.RefreshCw,
1473
+ text: label ?? `${pluralize(pendingCount || 1, "pendiente", "pendientes")} por sincronizar`,
1474
+ className: "bg-[var(--color-warning-bg)] text-[var(--color-warning)]"
1475
+ },
1476
+ synced: {
1477
+ icon: import_lucide_react8.CheckCircle2,
1478
+ text: label ?? "Todo sincronizado",
1479
+ className: "bg-[var(--color-success-bg)] text-[var(--color-success)]"
1480
+ }
1481
+ };
1482
+ const current = config[state];
1483
+ const Icon2 = current.icon;
1484
+ const isClickable = typeof onClick === "function";
1485
+ const Component = isClickable ? "button" : "div";
1486
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
1487
+ Component,
1488
+ {
1489
+ ...isClickable ? { type: "button", onClick } : {},
1490
+ className: cn(
1491
+ "flex h-8 w-full items-center justify-center gap-1.5 px-4 text-xs font-medium transition-opacity",
1492
+ current.className,
1493
+ isClickable ? "cursor-pointer hover:opacity-85 active:opacity-70" : "cursor-default",
1494
+ className
1495
+ ),
1496
+ children: [
1497
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Icon2, { className: cn("h-3.5 w-3.5", current.spinning && "animate-spin") }),
1498
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { children: current.text }),
1499
+ isClickable ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "ml-1 text-[10px] opacity-60", children: "\u2192" }) : null
1500
+ ]
1501
+ }
1502
+ );
1503
+ }
1504
+
821
1505
  // src/components/feedback/toaster.tsx
1506
+ var import_lucide_react9 = require("lucide-react");
822
1507
  var import_sonner2 = require("sonner");
823
- var import_jsx_runtime15 = require("react/jsx-runtime");
1508
+ var import_jsx_runtime23 = require("react/jsx-runtime");
824
1509
  function Toaster(props) {
825
1510
  const { resolvedTheme } = useTheme();
826
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1511
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
827
1512
  import_sonner2.Toaster,
828
1513
  {
829
1514
  theme: resolvedTheme,
1515
+ position: "top-right",
1516
+ richColors: true,
830
1517
  className: "toaster group",
1518
+ icons: {
1519
+ loading: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react9.LoaderCircle, { className: "h-4 w-4 animate-spin" })
1520
+ },
831
1521
  closeButton: true,
832
1522
  toastOptions: {
833
1523
  classNames: {
834
- toast: "group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",
1524
+ toast: "group toast group-[.toaster]:rounded-xl group-[.toaster]:border group-[.toaster]:border-border group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:shadow-xl",
1525
+ title: "text-sm font-semibold",
835
1526
  description: "group-[.toast]:text-muted-foreground",
836
- actionButton: "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",
837
- cancelButton: "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"
1527
+ actionButton: "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground group-[.toast]:rounded-md",
1528
+ cancelButton: "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground group-[.toast]:rounded-md",
1529
+ closeButton: "pointer-events-auto cursor-pointer rounded-md border border-border bg-background text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground"
838
1530
  }
839
1531
  },
840
1532
  ...props
@@ -843,15 +1535,15 @@ function Toaster(props) {
843
1535
  }
844
1536
 
845
1537
  // src/components/forms/searchable-select.tsx
846
- var React6 = __toESM(require("react"), 1);
847
- var import_lucide_react4 = require("lucide-react");
1538
+ var React9 = __toESM(require("react"), 1);
1539
+ var import_lucide_react10 = require("lucide-react");
848
1540
 
849
1541
  // src/components/primitives/input.tsx
850
- var React5 = __toESM(require("react"), 1);
851
- var import_jsx_runtime16 = require("react/jsx-runtime");
852
- var Input = React5.forwardRef(
1542
+ var React8 = __toESM(require("react"), 1);
1543
+ var import_jsx_runtime24 = require("react/jsx-runtime");
1544
+ var Input = React8.forwardRef(
853
1545
  ({ className, type, ...props }, ref) => {
854
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1546
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
855
1547
  "input",
856
1548
  {
857
1549
  type,
@@ -868,11 +1560,11 @@ var Input = React5.forwardRef(
868
1560
  Input.displayName = "Input";
869
1561
 
870
1562
  // src/components/forms/searchable-select.tsx
871
- var import_jsx_runtime17 = require("react/jsx-runtime");
1563
+ var import_jsx_runtime25 = require("react/jsx-runtime");
872
1564
  function normalize(str) {
873
1565
  return str.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
874
1566
  }
875
- var SearchableSelect = React6.forwardRef(
1567
+ var SearchableSelect = React9.forwardRef(
876
1568
  ({
877
1569
  options: options2,
878
1570
  value,
@@ -885,12 +1577,12 @@ var SearchableSelect = React6.forwardRef(
885
1577
  id,
886
1578
  className
887
1579
  }, ref) => {
888
- const [open, setOpen] = React6.useState(false);
889
- const [search, setSearch] = React6.useState("");
890
- const wrapperRef = React6.useRef(null);
891
- const searchRef = React6.useRef(null);
892
- const selected = React6.useMemo(() => options2.find((option) => option.value === value) ?? null, [options2, value]);
893
- const filtered = React6.useMemo(() => {
1580
+ const [open, setOpen] = React9.useState(false);
1581
+ const [search, setSearch] = React9.useState("");
1582
+ const wrapperRef = React9.useRef(null);
1583
+ const searchRef = React9.useRef(null);
1584
+ const selected = React9.useMemo(() => options2.find((option) => option.value === value) ?? null, [options2, value]);
1585
+ const filtered = React9.useMemo(() => {
894
1586
  if (!search.trim()) {
895
1587
  return options2;
896
1588
  }
@@ -916,7 +1608,7 @@ var SearchableSelect = React6.forwardRef(
916
1608
  setSearch("");
917
1609
  }
918
1610
  }
919
- React6.useEffect(() => {
1611
+ React9.useEffect(() => {
920
1612
  if (!open) {
921
1613
  return;
922
1614
  }
@@ -929,15 +1621,15 @@ var SearchableSelect = React6.forwardRef(
929
1621
  document.addEventListener("mousedown", handleMouseDown);
930
1622
  return () => document.removeEventListener("mousedown", handleMouseDown);
931
1623
  }, [open]);
932
- React6.useEffect(() => {
1624
+ React9.useEffect(() => {
933
1625
  if (!open) {
934
1626
  return;
935
1627
  }
936
1628
  const timer = setTimeout(() => searchRef.current?.focus(), 50);
937
1629
  return () => clearTimeout(timer);
938
1630
  }, [open]);
939
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { ref: wrapperRef, className: cn("relative w-full", className), onKeyDown: handleKeyDown, children: [
940
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1631
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { ref: wrapperRef, className: cn("relative w-full", className), onKeyDown: handleKeyDown, children: [
1632
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
941
1633
  "button",
942
1634
  {
943
1635
  ref,
@@ -952,26 +1644,26 @@ var SearchableSelect = React6.forwardRef(
952
1644
  "flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-left text-sm ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"
953
1645
  ),
954
1646
  children: [
955
- loading ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("span", { className: "flex items-center gap-2 text-muted-foreground", children: [
956
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react4.Loader2, { className: "h-4 w-4 animate-spin" }),
1647
+ loading ? /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("span", { className: "flex items-center gap-2 text-muted-foreground", children: [
1648
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.Loader2, { className: "h-4 w-4 animate-spin" }),
957
1649
  "Loading..."
958
- ] }) : selected ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("span", { className: "flex items-center gap-2 truncate", children: [
959
- selected.sublabel ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "shrink-0 font-mono text-xs text-muted-foreground", children: selected.sublabel }) : null,
960
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "truncate", children: selected.label })
961
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-muted-foreground", children: placeholder }),
962
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "ml-2 shrink-0 opacity-50", children: open ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react4.ChevronUp, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react4.ChevronDown, { className: "h-4 w-4" }) })
1650
+ ] }) : selected ? /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("span", { className: "flex items-center gap-2 truncate", children: [
1651
+ selected.sublabel ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "shrink-0 font-mono text-xs text-muted-foreground", children: selected.sublabel }) : null,
1652
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "truncate", children: selected.label })
1653
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "text-muted-foreground", children: placeholder }),
1654
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "ml-2 shrink-0 opacity-50", children: open ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.ChevronUp, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.ChevronDown, { className: "h-4 w-4" }) })
963
1655
  ]
964
1656
  }
965
1657
  ),
966
- open ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1658
+ open ? /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
967
1659
  "div",
968
1660
  {
969
1661
  role: "listbox",
970
1662
  className: "animate-in fade-in-0 zoom-in-95 absolute z-50 mt-1 w-full rounded-md border border-border bg-popover text-popover-foreground shadow-md",
971
1663
  children: [
972
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "sticky top-0 flex items-center gap-2 border-b border-border bg-popover px-3 py-2", children: [
973
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react4.Search, { className: "h-4 w-4 shrink-0 text-muted-foreground" }),
974
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1664
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "sticky top-0 flex items-center gap-2 border-b border-border bg-popover px-3 py-2", children: [
1665
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.Search, { className: "h-4 w-4 shrink-0 text-muted-foreground" }),
1666
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
975
1667
  Input,
976
1668
  {
977
1669
  ref: searchRef,
@@ -983,9 +1675,9 @@ var SearchableSelect = React6.forwardRef(
983
1675
  }
984
1676
  )
985
1677
  ] }),
986
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("ul", { className: "max-h-60 overflow-y-auto overscroll-contain p-1", children: filtered.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("li", { className: "px-4 py-3 text-center text-xs text-muted-foreground", children: emptyMessage }) : filtered.map((option) => {
1678
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("ul", { className: "max-h-60 overflow-y-auto overscroll-contain p-1", children: filtered.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("li", { className: "px-4 py-3 text-center text-xs text-muted-foreground", children: emptyMessage }) : filtered.map((option) => {
987
1679
  const isSelected = option.value === value;
988
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1680
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
989
1681
  "li",
990
1682
  {
991
1683
  role: "option",
@@ -996,10 +1688,10 @@ var SearchableSelect = React6.forwardRef(
996
1688
  isSelected && "bg-accent/50 font-medium"
997
1689
  ),
998
1690
  children: [
999
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: isSelected ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react4.Check, { className: "h-4 w-4" }) : null }),
1000
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("span", { className: "flex items-center gap-2 truncate", children: [
1001
- option.sublabel ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "shrink-0 font-mono text-xs text-muted-foreground", children: option.sublabel }) : null,
1002
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "truncate", children: option.label })
1691
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: isSelected ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react10.Check, { className: "h-4 w-4" }) : null }),
1692
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("span", { className: "flex items-center gap-2 truncate", children: [
1693
+ option.sublabel ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "shrink-0 font-mono text-xs text-muted-foreground", children: option.sublabel }) : null,
1694
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "truncate", children: option.label })
1003
1695
  ] })
1004
1696
  ]
1005
1697
  },
@@ -1015,14 +1707,14 @@ var SearchableSelect = React6.forwardRef(
1015
1707
  SearchableSelect.displayName = "SearchableSelect";
1016
1708
 
1017
1709
  // src/components/forms/select.tsx
1018
- var React7 = __toESM(require("react"), 1);
1710
+ var React10 = __toESM(require("react"), 1);
1019
1711
  var SelectPrimitive = __toESM(require("@radix-ui/react-select"), 1);
1020
- var import_lucide_react5 = require("lucide-react");
1021
- var import_jsx_runtime18 = require("react/jsx-runtime");
1712
+ var import_lucide_react11 = require("lucide-react");
1713
+ var import_jsx_runtime26 = require("react/jsx-runtime");
1022
1714
  var Select = SelectPrimitive.Root;
1023
1715
  var SelectGroup = SelectPrimitive.Group;
1024
1716
  var SelectValue = SelectPrimitive.Value;
1025
- var SelectTrigger = React7.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1717
+ var SelectTrigger = React10.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1026
1718
  SelectPrimitive.Trigger,
1027
1719
  {
1028
1720
  ref,
@@ -1033,24 +1725,24 @@ var SelectTrigger = React7.forwardRef(({ className, children, ...props }, ref) =
1033
1725
  ...props,
1034
1726
  children: [
1035
1727
  children,
1036
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react5.ChevronDown, { className: "h-4 w-4 opacity-50" }) })
1728
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react11.ChevronDown, { className: "h-4 w-4 opacity-50" }) })
1037
1729
  ]
1038
1730
  }
1039
1731
  ));
1040
1732
  SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
1041
- var SelectScrollUpButton = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SelectPrimitive.ScrollUpButton, { ref, className: cn("flex cursor-default items-center justify-center py-1", className), ...props, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react5.ChevronUp, { className: "h-4 w-4" }) }));
1733
+ var SelectScrollUpButton = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SelectPrimitive.ScrollUpButton, { ref, className: cn("flex cursor-default items-center justify-center py-1", className), ...props, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react11.ChevronUp, { className: "h-4 w-4" }) }));
1042
1734
  SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
1043
- var SelectScrollDownButton = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1735
+ var SelectScrollDownButton = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1044
1736
  SelectPrimitive.ScrollDownButton,
1045
1737
  {
1046
1738
  ref,
1047
1739
  className: cn("flex cursor-default items-center justify-center py-1", className),
1048
1740
  ...props,
1049
- children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react5.ChevronDown, { className: "h-4 w-4" })
1741
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react11.ChevronDown, { className: "h-4 w-4" })
1050
1742
  }
1051
1743
  ));
1052
1744
  SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
1053
- var SelectContent = React7.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SelectPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1745
+ var SelectContent = React10.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SelectPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1054
1746
  SelectPrimitive.Content,
1055
1747
  {
1056
1748
  ref,
@@ -1062,8 +1754,8 @@ var SelectContent = React7.forwardRef(({ className, children, position = "popper
1062
1754
  position,
1063
1755
  ...props,
1064
1756
  children: [
1065
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SelectScrollUpButton, {}),
1066
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1757
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SelectScrollUpButton, {}),
1758
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1067
1759
  SelectPrimitive.Viewport,
1068
1760
  {
1069
1761
  className: cn(
@@ -1073,14 +1765,14 @@ var SelectContent = React7.forwardRef(({ className, children, position = "popper
1073
1765
  children
1074
1766
  }
1075
1767
  ),
1076
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SelectScrollDownButton, {})
1768
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SelectScrollDownButton, {})
1077
1769
  ]
1078
1770
  }
1079
1771
  ) }));
1080
1772
  SelectContent.displayName = SelectPrimitive.Content.displayName;
1081
- var SelectLabel = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SelectPrimitive.Label, { ref, className: cn("py-1.5 pl-8 pr-2 text-sm font-semibold", className), ...props }));
1773
+ var SelectLabel = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SelectPrimitive.Label, { ref, className: cn("py-1.5 pl-8 pr-2 text-sm font-semibold", className), ...props }));
1082
1774
  SelectLabel.displayName = SelectPrimitive.Label.displayName;
1083
- var SelectItem = React7.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1775
+ var SelectItem = React10.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1084
1776
  SelectPrimitive.Item,
1085
1777
  {
1086
1778
  ref,
@@ -1090,80 +1782,80 @@ var SelectItem = React7.forwardRef(({ className, children, ...props }, ref) => /
1090
1782
  ),
1091
1783
  ...props,
1092
1784
  children: [
1093
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react5.Check, { className: "h-4 w-4" }) }) }),
1094
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SelectPrimitive.ItemText, { children })
1785
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react11.Check, { className: "h-4 w-4" }) }) }),
1786
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SelectPrimitive.ItemText, { children })
1095
1787
  ]
1096
1788
  }
1097
1789
  ));
1098
1790
  SelectItem.displayName = SelectPrimitive.Item.displayName;
1099
- var SelectSeparator = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SelectPrimitive.Separator, { ref, className: cn("-mx-1 my-1 h-px bg-muted", className), ...props }));
1791
+ var SelectSeparator = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SelectPrimitive.Separator, { ref, className: cn("-mx-1 my-1 h-px bg-muted", className), ...props }));
1100
1792
  SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
1101
1793
 
1102
1794
  // src/components/layout/app-shell.tsx
1103
1795
  var import_react2 = require("react");
1104
1796
 
1105
1797
  // src/components/overlays/drawer.tsx
1106
- var React8 = __toESM(require("react"), 1);
1798
+ var React11 = __toESM(require("react"), 1);
1107
1799
  var import_vaul = require("vaul");
1108
- var import_jsx_runtime19 = require("react/jsx-runtime");
1109
- var Drawer = ({ shouldScaleBackground = true, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_vaul.Drawer.Root, { shouldScaleBackground, ...props });
1800
+ var import_jsx_runtime27 = require("react/jsx-runtime");
1801
+ var Drawer = ({ shouldScaleBackground = true, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_vaul.Drawer.Root, { shouldScaleBackground, ...props });
1110
1802
  Drawer.displayName = "Drawer";
1111
1803
  var DrawerTrigger = import_vaul.Drawer.Trigger;
1112
1804
  var DrawerPortal = import_vaul.Drawer.Portal;
1113
1805
  var DrawerClose = import_vaul.Drawer.Close;
1114
- var DrawerOverlay = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_vaul.Drawer.Overlay, { ref, className: cn("fixed inset-0 z-50 bg-black/80", className), ...props }));
1806
+ var DrawerOverlay = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_vaul.Drawer.Overlay, { ref, className: cn("fixed inset-0 z-50 bg-black/80", className), ...props }));
1115
1807
  DrawerOverlay.displayName = import_vaul.Drawer.Overlay.displayName;
1116
- var DrawerContent = React8.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(DrawerPortal, { children: [
1117
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(DrawerOverlay, {}),
1118
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1808
+ var DrawerContent = React11.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(DrawerPortal, { children: [
1809
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DrawerOverlay, {}),
1810
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
1119
1811
  import_vaul.Drawer.Content,
1120
1812
  {
1121
1813
  ref,
1122
1814
  className: cn("fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-[10px] border bg-background", className),
1123
1815
  ...props,
1124
1816
  children: [
1125
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted" }),
1817
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted" }),
1126
1818
  children
1127
1819
  ]
1128
1820
  }
1129
1821
  )
1130
1822
  ] }));
1131
1823
  DrawerContent.displayName = "DrawerContent";
1132
- var DrawerHeader = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: cn("grid gap-1.5 p-4 text-center sm:text-left", className), ...props });
1824
+ var DrawerHeader = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: cn("grid gap-1.5 p-4 text-center sm:text-left", className), ...props });
1133
1825
  DrawerHeader.displayName = "DrawerHeader";
1134
- var DrawerFooter = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: cn("mt-auto flex flex-col gap-2 p-4", className), ...props });
1826
+ var DrawerFooter = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: cn("mt-auto flex flex-col gap-2 p-4", className), ...props });
1135
1827
  DrawerFooter.displayName = "DrawerFooter";
1136
- var DrawerTitle = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_vaul.Drawer.Title, { ref, className: cn("text-lg font-semibold leading-none tracking-tight", className), ...props }));
1828
+ var DrawerTitle = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_vaul.Drawer.Title, { ref, className: cn("text-lg font-semibold leading-none tracking-tight", className), ...props }));
1137
1829
  DrawerTitle.displayName = import_vaul.Drawer.Title.displayName;
1138
- var DrawerDescription = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_vaul.Drawer.Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
1830
+ var DrawerDescription = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_vaul.Drawer.Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
1139
1831
  DrawerDescription.displayName = import_vaul.Drawer.Description.displayName;
1140
1832
 
1141
1833
  // src/components/navigation/navbar.tsx
1142
- var import_lucide_react6 = require("lucide-react");
1143
- var import_jsx_runtime20 = require("react/jsx-runtime");
1834
+ var import_lucide_react12 = require("lucide-react");
1835
+ var import_jsx_runtime28 = require("react/jsx-runtime");
1144
1836
  function Navbar({ brand, actions, onMenuClick, className }) {
1145
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("header", { className: cn("h-14 shrink-0 border-b border-border bg-card/80 px-4 backdrop-blur-sm", className), children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "mx-auto flex h-full w-full max-w-7xl items-center justify-between gap-3", children: [
1146
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex min-w-0 flex-1 items-center gap-3", children: [
1147
- onMenuClick ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Button, { type: "button", variant: "ghost", size: "icon", onClick: onMenuClick, "aria-label": "Open navigation", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react6.Menu, { size: 20 }) }) : null,
1837
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("header", { className: cn("h-14 shrink-0 border-b border-border bg-card/80 px-4 backdrop-blur-sm", className), children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "mx-auto flex h-full w-full max-w-7xl items-center justify-between gap-3", children: [
1838
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex min-w-0 flex-1 items-center gap-3", children: [
1839
+ onMenuClick ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Button, { type: "button", variant: "ghost", size: "icon", onClick: onMenuClick, "aria-label": "Open navigation", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react12.Menu, { size: 20 }) }) : null,
1148
1840
  brand
1149
1841
  ] }),
1150
- actions ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "flex shrink-0 items-center gap-3", children: actions }) : null
1842
+ actions ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex shrink-0 items-center gap-3", children: actions }) : null
1151
1843
  ] }) });
1152
1844
  }
1153
1845
 
1154
1846
  // src/components/navigation/sidebar.tsx
1155
- var import_jsx_runtime21 = require("react/jsx-runtime");
1847
+ var import_jsx_runtime29 = require("react/jsx-runtime");
1156
1848
  function getInitials2(name) {
1157
1849
  return name.trim().split(" ").filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase() ?? "").join("");
1158
1850
  }
1159
1851
  function Sidebar({ brand, groups, user, footerAction, className }) {
1160
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("aside", { className: cn("flex h-full w-72 max-w-[85vw] flex-col border-r border-border bg-background", className), children: [
1161
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "border-b border-border px-5 py-4", children: brand }),
1162
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("nav", { className: "flex-1 space-y-6 overflow-y-auto px-3 py-4", children: groups.map((group) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { children: [
1163
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { className: "mb-2 px-2 text-xs font-semibold uppercase tracking-widest text-muted-foreground", children: group.label }),
1164
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("ul", { className: "space-y-0.5", children: group.items.map((item) => {
1852
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("aside", { className: cn("flex h-full w-72 max-w-[85vw] flex-col border-r border-border bg-background", className), children: [
1853
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "border-b border-border px-5 py-4", children: brand }),
1854
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("nav", { className: "flex-1 space-y-6 overflow-y-auto px-3 py-4", children: groups.map((group) => /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { children: [
1855
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "mb-2 px-2 text-xs font-semibold uppercase tracking-widest text-muted-foreground", children: group.label }),
1856
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("ul", { className: "space-y-0.5", children: group.items.map((item) => {
1165
1857
  const Icon2 = item.icon;
1166
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
1858
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
1167
1859
  "a",
1168
1860
  {
1169
1861
  href: item.href,
@@ -1173,26 +1865,26 @@ function Sidebar({ brand, groups, user, footerAction, className }) {
1173
1865
  item.active ? "bg-primary text-primary-foreground" : "text-foreground hover:bg-accent hover:text-accent-foreground"
1174
1866
  ),
1175
1867
  children: [
1176
- Icon2 ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Icon2, { size: 17, className: "shrink-0" }) : null,
1177
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "flex-1", children: item.label })
1868
+ Icon2 ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Icon2, { size: 17, className: "shrink-0" }) : null,
1869
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "flex-1", children: item.label })
1178
1870
  ]
1179
1871
  }
1180
1872
  ) }, `${group.label}-${item.label}`);
1181
1873
  }) })
1182
1874
  ] }, group.label)) }),
1183
- user ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "border-t border-border px-5 py-4", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center gap-3", children: [
1184
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Avatar, { className: "h-9 w-9 shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(AvatarFallback, { className: "bg-primary text-xs font-semibold text-primary-foreground", children: user.initials ?? getInitials2(user.name) }) }),
1185
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "min-w-0 flex-1", children: [
1186
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { className: "truncate text-sm font-medium text-foreground", children: user.name }),
1187
- user.role ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { className: "truncate text-xs text-muted-foreground", children: user.role }) : null
1875
+ user ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "border-t border-border px-5 py-4", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex items-center gap-3", children: [
1876
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Avatar, { className: "h-9 w-9 shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(AvatarFallback, { className: "bg-primary text-xs font-semibold text-primary-foreground", children: user.initials ?? getInitials2(user.name) }) }),
1877
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "min-w-0 flex-1", children: [
1878
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "truncate text-sm font-medium text-foreground", children: user.name }),
1879
+ user.role ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "truncate text-xs text-muted-foreground", children: user.role }) : null
1188
1880
  ] }),
1189
- footerAction ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Button, { type: "button", variant: "ghost", size: "sm", onClick: footerAction.onClick, children: footerAction.label }) : null
1881
+ footerAction ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Button, { type: "button", variant: "ghost", size: "sm", onClick: footerAction.onClick, children: footerAction.label }) : null
1190
1882
  ] }) }) : null
1191
1883
  ] });
1192
1884
  }
1193
1885
 
1194
1886
  // src/components/layout/app-shell.tsx
1195
- var import_jsx_runtime22 = require("react/jsx-runtime");
1887
+ var import_jsx_runtime30 = require("react/jsx-runtime");
1196
1888
  function AppShell({
1197
1889
  brand,
1198
1890
  actions,
@@ -1202,47 +1894,47 @@ function AppShell({
1202
1894
  children
1203
1895
  }) {
1204
1896
  const [open, setOpen] = (0, import_react2.useState)(false);
1205
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "min-h-screen bg-background", children: [
1206
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Navbar, { brand, actions, onMenuClick: () => setOpen(true) }),
1207
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Drawer, { open, onOpenChange: setOpen, direction: "left", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DrawerContent, { className: "h-full w-72 rounded-none border-r border-border p-0", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Sidebar, { brand, groups: sidebarGroups, user: sidebarUser, footerAction: sidebarFooterAction }) }) }),
1208
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("main", { className: "mx-auto w-full max-w-7xl px-4 py-6 sm:px-6", children })
1897
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "min-h-screen bg-background", children: [
1898
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Navbar, { brand, actions, onMenuClick: () => setOpen(true) }),
1899
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Drawer, { open, onOpenChange: setOpen, direction: "left", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(DrawerContent, { className: "h-full w-72 rounded-none border-r border-border p-0", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Sidebar, { brand, groups: sidebarGroups, user: sidebarUser, footerAction: sidebarFooterAction }) }) }),
1900
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("main", { className: "mx-auto w-full max-w-7xl px-4 py-6 sm:px-6", children })
1209
1901
  ] });
1210
1902
  }
1211
1903
 
1212
1904
  // src/components/layout/form-section.tsx
1213
- var import_jsx_runtime23 = require("react/jsx-runtime");
1905
+ var import_jsx_runtime31 = require("react/jsx-runtime");
1214
1906
  function FormSection({ title, description, children }) {
1215
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(Card, { children: [
1216
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(CardHeader, { children: [
1217
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(CardTitle, { children: title }),
1218
- description ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(CardDescription, { children: description }) : null
1907
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(Card, { children: [
1908
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(CardHeader, { children: [
1909
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(CardTitle, { children: title }),
1910
+ description ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(CardDescription, { children: description }) : null
1219
1911
  ] }),
1220
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(CardContent, { children })
1912
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(CardContent, { children })
1221
1913
  ] });
1222
1914
  }
1223
1915
 
1224
1916
  // src/components/layout/page-header.tsx
1225
- var import_jsx_runtime24 = require("react/jsx-runtime");
1917
+ var import_jsx_runtime32 = require("react/jsx-runtime");
1226
1918
  function PageHeader({ title, description, action }) {
1227
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-start justify-between gap-4 sm:flex-row sm:items-center", children: [
1228
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { children: [
1229
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h1", { className: "text-2xl font-semibold text-foreground", style: { fontFamily: "var(--font-display)" }, children: title }),
1230
- description ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "mt-0.5 text-sm text-muted-foreground", children: description }) : null
1919
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-start justify-between gap-4 sm:flex-row sm:items-center", children: [
1920
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { children: [
1921
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("h1", { className: "text-2xl font-semibold text-foreground", style: { fontFamily: "var(--font-display)" }, children: title }),
1922
+ description ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "mt-0.5 text-sm text-muted-foreground", children: description }) : null
1231
1923
  ] }),
1232
- action ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { children: action }) : null
1924
+ action ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { children: action }) : null
1233
1925
  ] });
1234
1926
  }
1235
1927
 
1236
1928
  // src/components/layout/theme-toggle.tsx
1237
- var import_lucide_react7 = require("lucide-react");
1238
- var import_jsx_runtime25 = require("react/jsx-runtime");
1929
+ var import_lucide_react13 = require("lucide-react");
1930
+ var import_jsx_runtime33 = require("react/jsx-runtime");
1239
1931
  var options = [
1240
- { value: "light", Icon: import_lucide_react7.Sun, label: "Light" },
1241
- { value: "dark", Icon: import_lucide_react7.Moon, label: "Dark" }
1932
+ { value: "light", Icon: import_lucide_react13.Sun, label: "Light" },
1933
+ { value: "dark", Icon: import_lucide_react13.Moon, label: "Dark" }
1242
1934
  ];
1243
1935
  function ThemeToggle({ className }) {
1244
1936
  const { theme, setTheme } = useTheme();
1245
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: cn("flex items-center gap-1 rounded-lg border border-border bg-muted p-1", className), children: options.map(({ value, Icon: Icon2, label }) => /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1937
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: cn("flex items-center gap-1 rounded-lg border border-border bg-muted p-1", className), children: options.map(({ value, Icon: Icon2, label }) => /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
1246
1938
  "button",
1247
1939
  {
1248
1940
  type: "button",
@@ -1253,8 +1945,8 @@ function ThemeToggle({ className }) {
1253
1945
  theme === value ? "bg-card text-foreground shadow-sm" : "text-muted-foreground hover:text-foreground"
1254
1946
  ),
1255
1947
  children: [
1256
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Icon2, { size: 13 }),
1257
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children: label })
1948
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Icon2, { size: 13 }),
1949
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { children: label })
1258
1950
  ]
1259
1951
  },
1260
1952
  value
@@ -1262,188 +1954,69 @@ function ThemeToggle({ className }) {
1262
1954
  }
1263
1955
 
1264
1956
  // src/components/navigation/breadcrumb.tsx
1265
- var React9 = __toESM(require("react"), 1);
1957
+ var React12 = __toESM(require("react"), 1);
1266
1958
  var import_react_slot2 = require("@radix-ui/react-slot");
1267
- var import_lucide_react8 = require("lucide-react");
1268
- var import_jsx_runtime26 = require("react/jsx-runtime");
1269
- var Breadcrumb = React9.forwardRef(({ ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("nav", { ref, "aria-label": "breadcrumb", ...props }));
1959
+ var import_lucide_react14 = require("lucide-react");
1960
+ var import_jsx_runtime34 = require("react/jsx-runtime");
1961
+ var Breadcrumb = React12.forwardRef(({ ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("nav", { ref, "aria-label": "breadcrumb", ...props }));
1270
1962
  Breadcrumb.displayName = "Breadcrumb";
1271
- var BreadcrumbList = React9.forwardRef(
1272
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1963
+ var BreadcrumbList = React12.forwardRef(
1964
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1273
1965
  "ol",
1274
1966
  {
1275
- ref,
1276
- className: cn("flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5", className),
1277
- ...props
1278
- }
1279
- )
1280
- );
1281
- BreadcrumbList.displayName = "BreadcrumbList";
1282
- var BreadcrumbItem = React9.forwardRef(
1283
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("li", { ref, className: cn("inline-flex items-center gap-1.5", className), ...props })
1284
- );
1285
- BreadcrumbItem.displayName = "BreadcrumbItem";
1286
- var BreadcrumbLink = React9.forwardRef(({ asChild, className, ...props }, ref) => {
1287
- const Comp = asChild ? import_react_slot2.Slot : "a";
1288
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Comp, { ref, className: cn("transition-colors hover:text-foreground", className), ...props });
1289
- });
1290
- BreadcrumbLink.displayName = "BreadcrumbLink";
1291
- var BreadcrumbPage = React9.forwardRef(
1292
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1293
- "span",
1294
- {
1295
- ref,
1296
- role: "link",
1297
- "aria-disabled": "true",
1298
- "aria-current": "page",
1299
- className: cn("font-normal text-foreground", className),
1300
- ...props
1301
- }
1302
- )
1303
- );
1304
- BreadcrumbPage.displayName = "BreadcrumbPage";
1305
- var BreadcrumbSeparator = ({ children, className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("li", { role: "presentation", "aria-hidden": "true", className: cn("[&>svg]:h-3.5 [&>svg]:w-3.5", className), ...props, children: children ?? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react8.ChevronRight, {}) });
1306
- BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
1307
- var BreadcrumbEllipsis = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("span", { role: "presentation", "aria-hidden": "true", className: cn("flex h-9 w-9 items-center justify-center", className), ...props, children: [
1308
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react8.MoreHorizontal, { className: "h-4 w-4" }),
1309
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "sr-only", children: "More" })
1310
- ] });
1311
- BreadcrumbEllipsis.displayName = "BreadcrumbElipssis";
1312
-
1313
- // src/components/navigation/page-breadcrumb.tsx
1314
- var import_react3 = require("react");
1315
- var import_jsx_runtime27 = require("react/jsx-runtime");
1316
- function PageBreadcrumb({ items }) {
1317
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Breadcrumb, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(BreadcrumbList, { children: items.map((item, index) => {
1318
- const isLast = index === items.length - 1;
1319
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_react3.Fragment, { children: [
1320
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(BreadcrumbItem, { children: !isLast && item.href ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(BreadcrumbLink, { href: item.href, children: item.label }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(BreadcrumbPage, { children: item.label }) }),
1321
- !isLast ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(BreadcrumbSeparator, {}) : null
1322
- ] }, `${item.label}-${index}`);
1323
- }) }) });
1324
- }
1325
-
1326
- // src/components/navigation/steps.tsx
1327
- var import_lucide_react9 = require("lucide-react");
1328
- var import_jsx_runtime28 = require("react/jsx-runtime");
1329
- var indicatorStyles = {
1330
- complete: "border-primary bg-primary text-primary-foreground",
1331
- current: "border-primary bg-primary/10 text-primary",
1332
- upcoming: "border-border bg-background text-muted-foreground",
1333
- error: "border-destructive bg-destructive/10 text-destructive"
1334
- };
1335
- function Steps({ className, items, orientation = "horizontal" }) {
1336
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("ol", { className: cn("flex", orientation === "horizontal" ? "flex-col gap-4 md:flex-row" : "flex-col", className), children: items.map((item, index) => {
1337
- const status = item.status ?? "upcoming";
1338
- const isLast = index === items.length - 1;
1339
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
1340
- "li",
1341
- {
1342
- className: cn("relative", orientation === "horizontal" ? "flex-1" : "pb-6 last:pb-0"),
1343
- children: [
1344
- !isLast ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1345
- "span",
1346
- {
1347
- "aria-hidden": "true",
1348
- className: cn(
1349
- "absolute bg-border",
1350
- orientation === "horizontal" ? "left-[calc(50%+1rem)] top-4 hidden h-px w-[calc(100%-1rem)] md:block" : "left-4 top-9 h-[calc(100%-1rem)] w-px"
1351
- )
1352
- }
1353
- ) : null,
1354
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: cn(
1355
- orientation === "horizontal" ? "flex flex-col items-center gap-2 text-center" : "flex items-start gap-3"
1356
- ), children: [
1357
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
1358
- "span",
1359
- {
1360
- className: cn(
1361
- "relative z-10 inline-flex h-8 w-8 items-center justify-center rounded-full border text-sm font-semibold shadow-sm",
1362
- indicatorStyles[status]
1363
- ),
1364
- children: [
1365
- status === "complete" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react9.Check, { className: "h-4 w-4" }) : null,
1366
- status === "error" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react9.AlertCircle, { className: "h-4 w-4" }) : null,
1367
- status === "current" || status === "upcoming" ? index + 1 : null
1368
- ]
1369
- }
1370
- ),
1371
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: cn("grid gap-1", orientation === "vertical" && "pt-1"), children: [
1372
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: cn("text-sm font-medium", status === "upcoming" ? "text-muted-foreground" : "text-foreground"), children: item.title }),
1373
- item.description ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: "text-xs text-muted-foreground", children: item.description }) : null
1374
- ] })
1375
- ] })
1376
- ]
1377
- },
1378
- item.id ?? item.title
1379
- );
1380
- }) });
1381
- }
1382
-
1383
- // src/components/overlays/dialog.tsx
1384
- var React10 = __toESM(require("react"), 1);
1385
- var DialogPrimitive = __toESM(require("@radix-ui/react-dialog"), 1);
1386
- var import_lucide_react10 = require("lucide-react");
1387
- var import_jsx_runtime29 = require("react/jsx-runtime");
1388
- var Dialog = DialogPrimitive.Root;
1389
- var DialogTrigger = DialogPrimitive.Trigger;
1390
- var DialogPortal = DialogPrimitive.Portal;
1391
- var DialogClose = DialogPrimitive.Close;
1392
- var DialogOverlay = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1393
- DialogPrimitive.Overlay,
1394
- {
1395
- ref,
1396
- className: cn(
1397
- "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
1398
- className
1399
- ),
1400
- ...props
1401
- }
1402
- ));
1403
- DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
1404
- var DialogContent = React10.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(DialogPortal, { children: [
1405
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(DialogOverlay, {}),
1406
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
1407
- DialogPrimitive.Content,
1967
+ ref,
1968
+ className: cn("flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5", className),
1969
+ ...props
1970
+ }
1971
+ )
1972
+ );
1973
+ BreadcrumbList.displayName = "BreadcrumbList";
1974
+ var BreadcrumbItem = React12.forwardRef(
1975
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("li", { ref, className: cn("inline-flex items-center gap-1.5", className), ...props })
1976
+ );
1977
+ BreadcrumbItem.displayName = "BreadcrumbItem";
1978
+ var BreadcrumbLink = React12.forwardRef(({ asChild, className, ...props }, ref) => {
1979
+ const Comp = asChild ? import_react_slot2.Slot : "a";
1980
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Comp, { ref, className: cn("transition-colors hover:text-foreground", className), ...props });
1981
+ });
1982
+ BreadcrumbLink.displayName = "BreadcrumbLink";
1983
+ var BreadcrumbPage = React12.forwardRef(
1984
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1985
+ "span",
1408
1986
  {
1409
1987
  ref,
1410
- className: cn(
1411
- "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
1412
- className
1413
- ),
1414
- ...props,
1415
- children: [
1416
- children,
1417
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(DialogPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground", children: [
1418
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react10.X, { className: "h-4 w-4" }),
1419
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "sr-only", children: "Close" })
1420
- ] })
1421
- ]
1988
+ role: "link",
1989
+ "aria-disabled": "true",
1990
+ "aria-current": "page",
1991
+ className: cn("font-normal text-foreground", className),
1992
+ ...props
1422
1993
  }
1423
1994
  )
1424
- ] }));
1425
- DialogContent.displayName = DialogPrimitive.Content.displayName;
1426
- var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: cn("flex flex-col space-y-1.5 text-center sm:text-left", className), ...props });
1427
- DialogHeader.displayName = "DialogHeader";
1428
- var DialogFooter = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className), ...props });
1429
- DialogFooter.displayName = "DialogFooter";
1430
- var DialogTitle = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(DialogPrimitive.Title, { ref, className: cn("text-lg font-semibold leading-none tracking-tight", className), ...props }));
1431
- DialogTitle.displayName = DialogPrimitive.Title.displayName;
1432
- var DialogDescription = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(DialogPrimitive.Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
1433
- DialogDescription.displayName = DialogPrimitive.Description.displayName;
1995
+ );
1996
+ BreadcrumbPage.displayName = "BreadcrumbPage";
1997
+ var BreadcrumbSeparator = ({ children, className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("li", { role: "presentation", "aria-hidden": "true", className: cn("[&>svg]:h-3.5 [&>svg]:w-3.5", className), ...props, children: children ?? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react14.ChevronRight, {}) });
1998
+ BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
1999
+ var BreadcrumbEllipsis = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { role: "presentation", "aria-hidden": "true", className: cn("flex h-9 w-9 items-center justify-center", className), ...props, children: [
2000
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react14.MoreHorizontal, { className: "h-4 w-4" }),
2001
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "sr-only", children: "More" })
2002
+ ] });
2003
+ BreadcrumbEllipsis.displayName = "BreadcrumbElipssis";
2004
+
2005
+ // src/components/navigation/header-user-menu.tsx
2006
+ var import_lucide_react16 = require("lucide-react");
1434
2007
 
1435
2008
  // src/components/overlays/dropdown-menu.tsx
1436
- var React11 = __toESM(require("react"), 1);
2009
+ var React13 = __toESM(require("react"), 1);
1437
2010
  var DropdownMenuPrimitive = __toESM(require("@radix-ui/react-dropdown-menu"), 1);
1438
- var import_lucide_react11 = require("lucide-react");
1439
- var import_jsx_runtime30 = require("react/jsx-runtime");
2011
+ var import_lucide_react15 = require("lucide-react");
2012
+ var import_jsx_runtime35 = require("react/jsx-runtime");
1440
2013
  var DropdownMenu = DropdownMenuPrimitive.Root;
1441
2014
  var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
1442
2015
  var DropdownMenuGroup = DropdownMenuPrimitive.Group;
1443
2016
  var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
1444
2017
  var DropdownMenuSub = DropdownMenuPrimitive.Sub;
1445
2018
  var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
1446
- var DropdownMenuSubTrigger = React11.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
2019
+ var DropdownMenuSubTrigger = React13.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
1447
2020
  DropdownMenuPrimitive.SubTrigger,
1448
2021
  {
1449
2022
  ref,
@@ -1455,12 +2028,12 @@ var DropdownMenuSubTrigger = React11.forwardRef(({ className, inset, children, .
1455
2028
  ...props,
1456
2029
  children: [
1457
2030
  children,
1458
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react11.ChevronRight, { className: "ml-auto" })
2031
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react15.ChevronRight, { className: "ml-auto" })
1459
2032
  ]
1460
2033
  }
1461
2034
  ));
1462
2035
  DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
1463
- var DropdownMenuSubContent = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2036
+ var DropdownMenuSubContent = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1464
2037
  DropdownMenuPrimitive.SubContent,
1465
2038
  {
1466
2039
  ref,
@@ -1472,7 +2045,7 @@ var DropdownMenuSubContent = React11.forwardRef(({ className, ...props }, ref) =
1472
2045
  }
1473
2046
  ));
1474
2047
  DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
1475
- var DropdownMenuContent = React11.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2048
+ var DropdownMenuContent = React13.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1476
2049
  DropdownMenuPrimitive.Content,
1477
2050
  {
1478
2051
  ref,
@@ -1485,7 +2058,7 @@ var DropdownMenuContent = React11.forwardRef(({ className, sideOffset = 4, ...pr
1485
2058
  }
1486
2059
  ) }));
1487
2060
  DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
1488
- var DropdownMenuItem = React11.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2061
+ var DropdownMenuItem = React13.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1489
2062
  DropdownMenuPrimitive.Item,
1490
2063
  {
1491
2064
  ref,
@@ -1498,7 +2071,7 @@ var DropdownMenuItem = React11.forwardRef(({ className, inset, ...props }, ref)
1498
2071
  }
1499
2072
  ));
1500
2073
  DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
1501
- var DropdownMenuCheckboxItem = React11.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
2074
+ var DropdownMenuCheckboxItem = React13.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
1502
2075
  DropdownMenuPrimitive.CheckboxItem,
1503
2076
  {
1504
2077
  ref,
@@ -1509,13 +2082,13 @@ var DropdownMenuCheckboxItem = React11.forwardRef(({ className, children, checke
1509
2082
  ...checked !== void 0 ? { checked } : {},
1510
2083
  ...props,
1511
2084
  children: [
1512
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react11.Check, { className: "h-4 w-4" }) }) }),
2085
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react15.Check, { className: "h-4 w-4" }) }) }),
1513
2086
  children
1514
2087
  ]
1515
2088
  }
1516
2089
  ));
1517
2090
  DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
1518
- var DropdownMenuRadioItem = React11.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
2091
+ var DropdownMenuRadioItem = React13.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
1519
2092
  DropdownMenuPrimitive.RadioItem,
1520
2093
  {
1521
2094
  ref,
@@ -1525,84 +2098,208 @@ var DropdownMenuRadioItem = React11.forwardRef(({ className, children, ...props
1525
2098
  ),
1526
2099
  ...props,
1527
2100
  children: [
1528
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react11.Circle, { className: "h-2 w-2 fill-current" }) }) }),
2101
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react15.Circle, { className: "h-2 w-2 fill-current" }) }) }),
1529
2102
  children
1530
2103
  ]
1531
2104
  }
1532
2105
  ));
1533
2106
  DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
1534
- var DropdownMenuLabel = React11.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(DropdownMenuPrimitive.Label, { ref, className: cn("px-2 py-1.5 text-sm font-semibold", inset && "pl-8", className), ...props }));
2107
+ var DropdownMenuLabel = React13.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(DropdownMenuPrimitive.Label, { ref, className: cn("px-2 py-1.5 text-sm font-semibold", inset && "pl-8", className), ...props }));
1535
2108
  DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
1536
- var DropdownMenuSeparator = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(DropdownMenuPrimitive.Separator, { ref, className: cn("-mx-1 my-1 h-px bg-muted", className), ...props }));
2109
+ var DropdownMenuSeparator = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(DropdownMenuPrimitive.Separator, { ref, className: cn("-mx-1 my-1 h-px bg-muted", className), ...props }));
1537
2110
  DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
1538
- var DropdownMenuShortcut = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: cn("ml-auto text-xs tracking-widest opacity-60", className), ...props });
2111
+ var DropdownMenuShortcut = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: cn("ml-auto text-xs tracking-widest opacity-60", className), ...props });
1539
2112
  DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
1540
2113
 
1541
- // src/components/overlays/sheet.tsx
1542
- var React12 = __toESM(require("react"), 1);
1543
- var SheetPrimitive = __toESM(require("@radix-ui/react-dialog"), 1);
1544
- var import_class_variance_authority3 = require("class-variance-authority");
1545
- var import_lucide_react12 = require("lucide-react");
1546
- var import_jsx_runtime31 = require("react/jsx-runtime");
1547
- var Sheet = SheetPrimitive.Root;
1548
- var SheetTrigger = SheetPrimitive.Trigger;
1549
- var SheetClose = SheetPrimitive.Close;
1550
- var SheetPortal = SheetPrimitive.Portal;
1551
- var SheetOverlay = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1552
- SheetPrimitive.Overlay,
2114
+ // src/components/navigation/header-user-menu.tsx
2115
+ var import_jsx_runtime36 = require("react/jsx-runtime");
2116
+ function getInitials3(name) {
2117
+ return name.trim().split(" ").filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase() ?? "").join("");
2118
+ }
2119
+ function HeaderUserMenu({
2120
+ className,
2121
+ name,
2122
+ email,
2123
+ role,
2124
+ initials,
2125
+ avatarSrc,
2126
+ logoutLabel = "Cerrar sesion",
2127
+ onLogout,
2128
+ extraItems
2129
+ }) {
2130
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(DropdownMenu, { children: [
2131
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2132
+ "button",
2133
+ {
2134
+ type: "button",
2135
+ "aria-label": "Menu de usuario",
2136
+ className: cn(
2137
+ "flex cursor-pointer items-center gap-2 rounded-lg px-2 py-1.5 transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
2138
+ className
2139
+ ),
2140
+ children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(Avatar, { className: "h-8 w-8", children: [
2141
+ avatarSrc ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(AvatarImage, { src: avatarSrc, alt: name }) : null,
2142
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(AvatarFallback, { className: "bg-primary text-xs font-semibold text-primary-foreground", children: initials ?? getInitials3(name) })
2143
+ ] })
2144
+ }
2145
+ ) }),
2146
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(DropdownMenuContent, { align: "end", className: "w-60", children: [
2147
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(DropdownMenuLabel, { className: "font-normal", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex gap-2", children: [
2148
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "grid min-w-0 flex-1 gap-1", children: [
2149
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "truncate text-sm font-semibold text-foreground", children: name }),
2150
+ email ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "truncate text-xs text-muted-foreground", children: email }) : null
2151
+ ] }),
2152
+ role ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Badge, { variant: "outline", className: "h-fit max-w-[110px] truncate", children: role }) : null
2153
+ ] }) }),
2154
+ extraItems ? /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
2155
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(DropdownMenuSeparator, {}),
2156
+ extraItems
2157
+ ] }) : null,
2158
+ onLogout ? /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
2159
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(DropdownMenuSeparator, {}),
2160
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
2161
+ DropdownMenuItem,
2162
+ {
2163
+ onClick: onLogout,
2164
+ className: "cursor-pointer gap-2 text-destructive focus:bg-destructive/10 focus:text-destructive",
2165
+ children: [
2166
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react16.LogOut, { className: "h-4 w-4" }),
2167
+ logoutLabel
2168
+ ]
2169
+ }
2170
+ )
2171
+ ] }) : null
2172
+ ] })
2173
+ ] });
2174
+ }
2175
+
2176
+ // src/components/navigation/page-breadcrumb.tsx
2177
+ var import_react3 = require("react");
2178
+ var import_jsx_runtime37 = require("react/jsx-runtime");
2179
+ function PageBreadcrumb({ items }) {
2180
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Breadcrumb, { children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(BreadcrumbList, { children: items.map((item, index) => {
2181
+ const isLast = index === items.length - 1;
2182
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_react3.Fragment, { children: [
2183
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(BreadcrumbItem, { children: !isLast && item.href ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(BreadcrumbLink, { href: item.href, children: item.label }) : /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(BreadcrumbPage, { children: item.label }) }),
2184
+ !isLast ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(BreadcrumbSeparator, {}) : null
2185
+ ] }, `${item.label}-${index}`);
2186
+ }) }) });
2187
+ }
2188
+
2189
+ // src/components/navigation/steps.tsx
2190
+ var import_lucide_react17 = require("lucide-react");
2191
+ var import_jsx_runtime38 = require("react/jsx-runtime");
2192
+ var indicatorStyles = {
2193
+ complete: "border-primary bg-primary text-primary-foreground",
2194
+ current: "border-primary bg-primary/10 text-primary",
2195
+ upcoming: "border-border bg-background text-muted-foreground",
2196
+ error: "border-destructive bg-destructive/10 text-destructive"
2197
+ };
2198
+ function Steps({ className, items, orientation = "horizontal" }) {
2199
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("ol", { className: cn("flex", orientation === "horizontal" ? "flex-col gap-4 md:flex-row" : "flex-col", className), children: items.map((item, index) => {
2200
+ const status = item.status ?? "upcoming";
2201
+ const isLast = index === items.length - 1;
2202
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
2203
+ "li",
2204
+ {
2205
+ className: cn("relative", orientation === "horizontal" ? "flex-1" : "pb-6 last:pb-0"),
2206
+ children: [
2207
+ !isLast ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2208
+ "span",
2209
+ {
2210
+ "aria-hidden": "true",
2211
+ className: cn(
2212
+ "absolute bg-border",
2213
+ orientation === "horizontal" ? "left-[calc(50%+1rem)] top-4 hidden h-px w-[calc(100%-1rem)] md:block" : "left-4 top-9 h-[calc(100%-1rem)] w-px"
2214
+ )
2215
+ }
2216
+ ) : null,
2217
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: cn(
2218
+ orientation === "horizontal" ? "flex flex-col items-center gap-2 text-center" : "flex items-start gap-3"
2219
+ ), children: [
2220
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
2221
+ "span",
2222
+ {
2223
+ className: cn(
2224
+ "relative z-10 inline-flex h-8 w-8 items-center justify-center rounded-full border text-sm font-semibold shadow-sm",
2225
+ indicatorStyles[status]
2226
+ ),
2227
+ children: [
2228
+ status === "complete" ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react17.Check, { className: "h-4 w-4" }) : null,
2229
+ status === "error" ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react17.AlertCircle, { className: "h-4 w-4" }) : null,
2230
+ status === "current" || status === "upcoming" ? index + 1 : null
2231
+ ]
2232
+ }
2233
+ ),
2234
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: cn("grid gap-1", orientation === "vertical" && "pt-1"), children: [
2235
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: cn("text-sm font-medium", status === "upcoming" ? "text-muted-foreground" : "text-foreground"), children: item.title }),
2236
+ item.description ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "text-xs text-muted-foreground", children: item.description }) : null
2237
+ ] })
2238
+ ] })
2239
+ ]
2240
+ },
2241
+ item.id ?? item.title
2242
+ );
2243
+ }) });
2244
+ }
2245
+
2246
+ // src/components/overlays/dialog.tsx
2247
+ var React14 = __toESM(require("react"), 1);
2248
+ var DialogPrimitive = __toESM(require("@radix-ui/react-dialog"), 1);
2249
+ var import_lucide_react18 = require("lucide-react");
2250
+ var import_jsx_runtime39 = require("react/jsx-runtime");
2251
+ var Dialog = DialogPrimitive.Root;
2252
+ var DialogTrigger = DialogPrimitive.Trigger;
2253
+ var DialogPortal = DialogPrimitive.Portal;
2254
+ var DialogClose = DialogPrimitive.Close;
2255
+ var DialogOverlay = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2256
+ DialogPrimitive.Overlay,
1553
2257
  {
2258
+ ref,
1554
2259
  className: cn(
1555
2260
  "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
1556
2261
  className
1557
2262
  ),
1558
- ...props,
1559
- ref
2263
+ ...props
1560
2264
  }
1561
2265
  ));
1562
- SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
1563
- var sheetVariants = (0, import_class_variance_authority3.cva)(
1564
- "fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
1565
- {
1566
- variants: {
1567
- side: {
1568
- top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
1569
- bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
1570
- left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
1571
- right: "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"
1572
- }
1573
- },
1574
- defaultVariants: {
1575
- side: "right"
2266
+ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
2267
+ var DialogContent = React14.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(DialogPortal, { children: [
2268
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(DialogOverlay, {}),
2269
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
2270
+ DialogPrimitive.Content,
2271
+ {
2272
+ ref,
2273
+ className: cn(
2274
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
2275
+ className
2276
+ ),
2277
+ ...props,
2278
+ children: [
2279
+ children,
2280
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(DialogPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground", children: [
2281
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react18.X, { className: "h-4 w-4" }),
2282
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "sr-only", children: "Close" })
2283
+ ] })
2284
+ ]
1576
2285
  }
1577
- }
1578
- );
1579
- var SheetContent = React12.forwardRef(
1580
- ({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(SheetPortal, { children: [
1581
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SheetOverlay, {}),
1582
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(SheetPrimitive.Content, { ref, className: cn(sheetVariants({ side }), className), ...props, children: [
1583
- children,
1584
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(SheetPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary", children: [
1585
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react12.X, { className: "h-4 w-4" }),
1586
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "sr-only", children: "Close" })
1587
- ] })
1588
- ] })
1589
- ] })
1590
- );
1591
- SheetContent.displayName = SheetPrimitive.Content.displayName;
1592
- var SheetHeader = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: cn("flex flex-col space-y-2 text-center sm:text-left", className), ...props });
1593
- SheetHeader.displayName = "SheetHeader";
1594
- var SheetFooter = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className), ...props });
1595
- SheetFooter.displayName = "SheetFooter";
1596
- var SheetTitle = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SheetPrimitive.Title, { ref, className: cn("text-lg font-semibold text-foreground", className), ...props }));
1597
- SheetTitle.displayName = SheetPrimitive.Title.displayName;
1598
- var SheetDescription = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(SheetPrimitive.Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
1599
- SheetDescription.displayName = SheetPrimitive.Description.displayName;
2286
+ )
2287
+ ] }));
2288
+ DialogContent.displayName = DialogPrimitive.Content.displayName;
2289
+ var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: cn("flex flex-col space-y-1.5 text-center sm:text-left", className), ...props });
2290
+ DialogHeader.displayName = "DialogHeader";
2291
+ var DialogFooter = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className), ...props });
2292
+ DialogFooter.displayName = "DialogFooter";
2293
+ var DialogTitle = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(DialogPrimitive.Title, { ref, className: cn("text-lg font-semibold leading-none tracking-tight", className), ...props }));
2294
+ DialogTitle.displayName = DialogPrimitive.Title.displayName;
2295
+ var DialogDescription = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(DialogPrimitive.Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
2296
+ DialogDescription.displayName = DialogPrimitive.Description.displayName;
1600
2297
 
1601
2298
  // src/components/primitives/alert.tsx
1602
- var React13 = __toESM(require("react"), 1);
1603
- var import_class_variance_authority4 = require("class-variance-authority");
1604
- var import_jsx_runtime32 = require("react/jsx-runtime");
1605
- var alertVariants = (0, import_class_variance_authority4.cva)("relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground", {
2299
+ var React15 = __toESM(require("react"), 1);
2300
+ var import_class_variance_authority5 = require("class-variance-authority");
2301
+ var import_jsx_runtime40 = require("react/jsx-runtime");
2302
+ var alertVariants = (0, import_class_variance_authority5.cva)("relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground", {
1606
2303
  variants: {
1607
2304
  variant: {
1608
2305
  default: "bg-background text-foreground",
@@ -1613,43 +2310,23 @@ var alertVariants = (0, import_class_variance_authority4.cva)("relative w-full r
1613
2310
  variant: "default"
1614
2311
  }
1615
2312
  });
1616
- var Alert = React13.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { ref, role: "alert", className: cn(alertVariants({ variant }), className), ...props }));
2313
+ var Alert = React15.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { ref, role: "alert", className: cn(alertVariants({ variant }), className), ...props }));
1617
2314
  Alert.displayName = "Alert";
1618
- var AlertTitle = React13.forwardRef(
1619
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("h5", { ref, className: cn("mb-1 font-medium leading-none tracking-tight", className), ...props })
2315
+ var AlertTitle = React15.forwardRef(
2316
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("h5", { ref, className: cn("mb-1 font-medium leading-none tracking-tight", className), ...props })
1620
2317
  );
1621
2318
  AlertTitle.displayName = "AlertTitle";
1622
- var AlertDescription = React13.forwardRef(
1623
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { ref, className: cn("text-sm [&_p]:leading-relaxed", className), ...props })
2319
+ var AlertDescription = React15.forwardRef(
2320
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { ref, className: cn("text-sm [&_p]:leading-relaxed", className), ...props })
1624
2321
  );
1625
2322
  AlertDescription.displayName = "AlertDescription";
1626
2323
 
1627
- // src/components/primitives/badge.tsx
1628
- var import_class_variance_authority5 = require("class-variance-authority");
1629
- var import_jsx_runtime33 = require("react/jsx-runtime");
1630
- var badgeVariants = (0, import_class_variance_authority5.cva)("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", {
1631
- variants: {
1632
- variant: {
1633
- default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
1634
- secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
1635
- destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
1636
- outline: "text-foreground"
1637
- }
1638
- },
1639
- defaultVariants: {
1640
- variant: "default"
1641
- }
1642
- });
1643
- function Badge({ className, variant, ...props }) {
1644
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: cn(badgeVariants({ variant }), className), ...props });
1645
- }
1646
-
1647
2324
  // src/components/primitives/checkbox.tsx
1648
- var React14 = __toESM(require("react"), 1);
1649
- var import_lucide_react13 = require("lucide-react");
1650
- var import_jsx_runtime34 = require("react/jsx-runtime");
1651
- var Checkbox = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "relative inline-flex h-4 w-4 shrink-0", children: [
1652
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2325
+ var React16 = __toESM(require("react"), 1);
2326
+ var import_lucide_react19 = require("lucide-react");
2327
+ var import_jsx_runtime41 = require("react/jsx-runtime");
2328
+ var Checkbox = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("span", { className: "relative inline-flex h-4 w-4 shrink-0", children: [
2329
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
1653
2330
  "input",
1654
2331
  {
1655
2332
  ref,
@@ -1661,8 +2338,8 @@ var Checkbox = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__
1661
2338
  ...props
1662
2339
  }
1663
2340
  ),
1664
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1665
- import_lucide_react13.Check,
2341
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
2342
+ import_lucide_react19.Check,
1666
2343
  {
1667
2344
  "aria-hidden": "true",
1668
2345
  className: "pointer-events-none absolute left-1/2 top-1/2 h-3 w-3 -translate-x-1/2 -translate-y-1/2 text-primary-foreground opacity-0 transition-opacity peer-checked:opacity-100"
@@ -1671,18 +2348,18 @@ var Checkbox = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__
1671
2348
  ] }));
1672
2349
  Checkbox.displayName = "Checkbox";
1673
2350
  function CheckboxField({ id, label, description, containerClassName, className, ...props }) {
1674
- const generatedId = React14.useId();
2351
+ const generatedId = React16.useId();
1675
2352
  const inputId = id ?? generatedId;
1676
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
2353
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
1677
2354
  "label",
1678
2355
  {
1679
2356
  htmlFor: inputId,
1680
2357
  className: cn("flex items-center gap-3 rounded-lg border border-border bg-card p-3 transition-colors hover:bg-accent/30", containerClassName),
1681
2358
  children: [
1682
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Checkbox, { id: inputId, className, ...props }),
1683
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "grid gap-1", children: [
1684
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "text-sm font-medium text-foreground", children: label }),
1685
- description ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "text-xs text-muted-foreground", children: description }) : null
2359
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Checkbox, { id: inputId, className, ...props }),
2360
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("span", { className: "grid gap-1", children: [
2361
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "text-sm font-medium text-foreground", children: label }),
2362
+ description ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "text-xs text-muted-foreground", children: description }) : null
1686
2363
  ] })
1687
2364
  ]
1688
2365
  }
@@ -1690,21 +2367,21 @@ function CheckboxField({ id, label, description, containerClassName, className,
1690
2367
  }
1691
2368
 
1692
2369
  // src/components/primitives/label.tsx
1693
- var React15 = __toESM(require("react"), 1);
2370
+ var React17 = __toESM(require("react"), 1);
1694
2371
  var LabelPrimitive = __toESM(require("@radix-ui/react-label"), 1);
1695
2372
  var import_class_variance_authority6 = require("class-variance-authority");
1696
- var import_jsx_runtime35 = require("react/jsx-runtime");
2373
+ var import_jsx_runtime42 = require("react/jsx-runtime");
1697
2374
  var labelVariants = (0, import_class_variance_authority6.cva)("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70");
1698
- var Label3 = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(LabelPrimitive.Root, { ref, className: cn(labelVariants(), className), ...props }));
2375
+ var Label3 = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(LabelPrimitive.Root, { ref, className: cn(labelVariants(), className), ...props }));
1699
2376
  Label3.displayName = LabelPrimitive.Root.displayName;
1700
2377
 
1701
2378
  // src/components/primitives/radio-group.tsx
1702
- var React16 = __toESM(require("react"), 1);
1703
- var import_jsx_runtime36 = require("react/jsx-runtime");
1704
- var RadioGroup2 = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { ref, role: "radiogroup", className: cn("grid gap-3", className), ...props }));
2379
+ var React18 = __toESM(require("react"), 1);
2380
+ var import_jsx_runtime43 = require("react/jsx-runtime");
2381
+ var RadioGroup2 = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { ref, role: "radiogroup", className: cn("grid gap-3", className), ...props }));
1705
2382
  RadioGroup2.displayName = "RadioGroup";
1706
- var RadioGroupItem = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("span", { className: "relative inline-flex h-4 w-4 shrink-0", children: [
1707
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2383
+ var RadioGroupItem = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("span", { className: "relative inline-flex h-4 w-4 shrink-0", children: [
2384
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
1708
2385
  "input",
1709
2386
  {
1710
2387
  ref,
@@ -1716,7 +2393,7 @@ var RadioGroupItem = React16.forwardRef(({ className, ...props }, ref) => /* @__
1716
2393
  ...props
1717
2394
  }
1718
2395
  ),
1719
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2396
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
1720
2397
  "span",
1721
2398
  {
1722
2399
  "aria-hidden": "true",
@@ -1726,18 +2403,18 @@ var RadioGroupItem = React16.forwardRef(({ className, ...props }, ref) => /* @__
1726
2403
  ] }));
1727
2404
  RadioGroupItem.displayName = "RadioGroupItem";
1728
2405
  function RadioField({ id, label, description, containerClassName, className, ...props }) {
1729
- const generatedId = React16.useId();
2406
+ const generatedId = React18.useId();
1730
2407
  const inputId = id ?? generatedId;
1731
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
2408
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
1732
2409
  "label",
1733
2410
  {
1734
2411
  htmlFor: inputId,
1735
2412
  className: cn("flex items-center gap-3 rounded-lg border border-border bg-card p-3 transition-colors hover:bg-accent/30", containerClassName),
1736
2413
  children: [
1737
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(RadioGroupItem, { id: inputId, className, ...props }),
1738
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("span", { className: "grid gap-1", children: [
1739
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-sm font-medium text-foreground", children: label }),
1740
- description ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-xs text-muted-foreground", children: description }) : null
2414
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(RadioGroupItem, { id: inputId, className, ...props }),
2415
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("span", { className: "grid gap-1", children: [
2416
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { className: "text-sm font-medium text-foreground", children: label }),
2417
+ description ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { className: "text-xs text-muted-foreground", children: description }) : null
1741
2418
  ] })
1742
2419
  ]
1743
2420
  }
@@ -1745,10 +2422,10 @@ function RadioField({ id, label, description, containerClassName, className, ...
1745
2422
  }
1746
2423
 
1747
2424
  // src/components/primitives/separator.tsx
1748
- var React17 = __toESM(require("react"), 1);
2425
+ var React19 = __toESM(require("react"), 1);
1749
2426
  var SeparatorPrimitive = __toESM(require("@radix-ui/react-separator"), 1);
1750
- var import_jsx_runtime37 = require("react/jsx-runtime");
1751
- var Separator3 = React17.forwardRef(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2427
+ var import_jsx_runtime44 = require("react/jsx-runtime");
2428
+ var Separator3 = React19.forwardRef(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
1752
2429
  SeparatorPrimitive.Root,
1753
2430
  {
1754
2431
  ref,
@@ -1761,11 +2438,11 @@ var Separator3 = React17.forwardRef(({ className, orientation = "horizontal", de
1761
2438
  Separator3.displayName = SeparatorPrimitive.Root.displayName;
1762
2439
 
1763
2440
  // src/components/primitives/switch.tsx
1764
- var React18 = __toESM(require("react"), 1);
1765
- var import_jsx_runtime38 = require("react/jsx-runtime");
1766
- var Switch = React18.forwardRef(({ className, size = "default", ...props }, ref) => {
2441
+ var React20 = __toESM(require("react"), 1);
2442
+ var import_jsx_runtime45 = require("react/jsx-runtime");
2443
+ var Switch = React20.forwardRef(({ className, size = "default", ...props }, ref) => {
1767
2444
  const isSm = size === "sm";
1768
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
2445
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
1769
2446
  "span",
1770
2447
  {
1771
2448
  className: cn(
@@ -1773,7 +2450,7 @@ var Switch = React18.forwardRef(({ className, size = "default", ...props }, ref)
1773
2450
  isSm ? "h-4 w-7" : "h-6 w-10"
1774
2451
  ),
1775
2452
  children: [
1776
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2453
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
1777
2454
  "input",
1778
2455
  {
1779
2456
  ref,
@@ -1789,7 +2466,7 @@ var Switch = React18.forwardRef(({ className, size = "default", ...props }, ref)
1789
2466
  ...props
1790
2467
  }
1791
2468
  ),
1792
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2469
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
1793
2470
  "span",
1794
2471
  {
1795
2472
  "aria-hidden": "true",
@@ -1805,9 +2482,9 @@ var Switch = React18.forwardRef(({ className, size = "default", ...props }, ref)
1805
2482
  });
1806
2483
  Switch.displayName = "Switch";
1807
2484
  function SwitchField({ id, label, description, containerClassName, size, className, ...props }) {
1808
- const generatedId = React18.useId();
2485
+ const generatedId = React20.useId();
1809
2486
  const inputId = id ?? generatedId;
1810
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
2487
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
1811
2488
  "label",
1812
2489
  {
1813
2490
  htmlFor: inputId,
@@ -1817,43 +2494,27 @@ function SwitchField({ id, label, description, containerClassName, size, classNa
1817
2494
  containerClassName
1818
2495
  ),
1819
2496
  children: [
1820
- /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("span", { className: "grid gap-0.5", children: [
1821
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "text-sm font-medium text-foreground", children: label }),
1822
- description ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "text-xs text-muted-foreground", children: description }) : null
2497
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("span", { className: "grid gap-0.5", children: [
2498
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "text-sm font-medium text-foreground", children: label }),
2499
+ description ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "text-xs text-muted-foreground", children: description }) : null
1823
2500
  ] }),
1824
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Switch, { id: inputId, size, className, ...props })
2501
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Switch, { id: inputId, size, className, ...props })
1825
2502
  ]
1826
2503
  }
1827
2504
  );
1828
2505
  }
1829
2506
 
1830
- // src/components/primitives/textarea.tsx
1831
- var React19 = __toESM(require("react"), 1);
1832
- var import_jsx_runtime39 = require("react/jsx-runtime");
1833
- var Textarea = React19.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
1834
- "textarea",
1835
- {
1836
- ref,
1837
- className: cn(
1838
- "flex min-h-24 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",
1839
- className
1840
- ),
1841
- ...props
1842
- }
1843
- ));
1844
- Textarea.displayName = "Textarea";
1845
-
1846
2507
  // src/components/tables/data-table.tsx
1847
2508
  var import_react4 = require("react");
1848
- var import_lucide_react14 = require("lucide-react");
1849
- var import_jsx_runtime40 = require("react/jsx-runtime");
2509
+ var import_lucide_react20 = require("lucide-react");
2510
+ var import_jsx_runtime46 = require("react/jsx-runtime");
1850
2511
  function getCellContent(row, column) {
1851
2512
  if (column.render) {
1852
2513
  return column.render(row);
1853
2514
  }
1854
2515
  const value = row[column.key];
1855
2516
  if (value === null || value === void 0) {
1856
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "text-muted-foreground/40", children: "-" });
2517
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "text-muted-foreground/40", children: "-" });
1857
2518
  }
1858
2519
  if (typeof value === "boolean") {
1859
2520
  return value ? "Yes" : "No";
@@ -1890,10 +2551,10 @@ function DataTable({
1890
2551
  setSearch(value);
1891
2552
  setPage(0);
1892
2553
  }
1893
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "space-y-4", children: [
1894
- /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "relative", children: [
1895
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react14.Search, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }),
1896
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2554
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "space-y-4", children: [
2555
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "relative", children: [
2556
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react20.Search, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }),
2557
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
1897
2558
  Input,
1898
2559
  {
1899
2560
  placeholder: "Search...",
@@ -1903,25 +2564,25 @@ function DataTable({
1903
2564
  }
1904
2565
  )
1905
2566
  ] }),
1906
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "hidden rounded-lg border md:block", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(Table, { children: [
1907
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TableHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(TableRow, { children: [
1908
- columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TableHead, { children: column.label }, String(column.key))),
1909
- actions ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TableHead, { className: "w-[100px] text-right", children: "Actions" }) : null
2567
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "hidden rounded-lg border md:block", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(Table, { children: [
2568
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TableHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(TableRow, { children: [
2569
+ columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TableHead, { children: column.label }, String(column.key))),
2570
+ actions ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TableHead, { className: "w-[100px] text-right", children: "Actions" }) : null
1910
2571
  ] }) }),
1911
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TableBody, { children: isLoading ? Array.from({ length: SKELETON_ROWS }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(TableRow, { children: [
1912
- columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Skeleton, { className: "h-4 w-full" }) }, String(column.key))),
1913
- actions ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Skeleton, { className: "ml-auto h-8 w-20" }) }) : null
1914
- ] }, index)) : paginated.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TableCell, { colSpan: columns.length + (actions ? 1 : 0), className: "py-12 text-center text-muted-foreground", children: emptyMessage }) }) : paginated.map((row, index) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(TableRow, { children: [
1915
- columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TableCell, { children: getCellContent(row, column) }, String(column.key))),
1916
- actions ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "flex justify-end gap-1.5", children: actions(row) }) }) : null
2572
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TableBody, { children: isLoading ? Array.from({ length: SKELETON_ROWS }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(TableRow, { children: [
2573
+ columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Skeleton, { className: "h-4 w-full" }) }, String(column.key))),
2574
+ actions ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Skeleton, { className: "ml-auto h-8 w-20" }) }) : null
2575
+ ] }, index)) : paginated.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TableCell, { colSpan: columns.length + (actions ? 1 : 0), className: "py-12 text-center text-muted-foreground", children: emptyMessage }) }) : paginated.map((row, index) => /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(TableRow, { children: [
2576
+ columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TableCell, { children: getCellContent(row, column) }, String(column.key))),
2577
+ actions ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "flex justify-end gap-1.5", children: actions(row) }) }) : null
1917
2578
  ] }, index)) })
1918
2579
  ] }) }),
1919
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "space-y-3 md:hidden", children: isLoading ? Array.from({ length: SKELETON_ROWS }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Card, { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(CardContent, { className: "space-y-2 p-4", children: [
1920
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Skeleton, { className: "h-5 w-1/2" }),
1921
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Skeleton, { className: "h-4 w-2/3" }),
1922
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Skeleton, { className: "h-4 w-1/3" })
1923
- ] }) }, index)) : paginated.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("p", { className: "py-10 text-center text-muted-foreground", children: emptyMessage }) : paginated.map((row, index) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Card, { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(CardContent, { className: "space-y-3 p-4", children: [
1924
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "space-y-1.5", children: mobileColumns.map((column, mobileIndex) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
2580
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "space-y-3 md:hidden", children: isLoading ? Array.from({ length: SKELETON_ROWS }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Card, { children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(CardContent, { className: "space-y-2 p-4", children: [
2581
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Skeleton, { className: "h-5 w-1/2" }),
2582
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Skeleton, { className: "h-4 w-2/3" }),
2583
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Skeleton, { className: "h-4 w-1/3" })
2584
+ ] }) }, index)) : paginated.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("p", { className: "py-10 text-center text-muted-foreground", children: emptyMessage }) : paginated.map((row, index) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Card, { children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(CardContent, { className: "space-y-3 p-4", children: [
2585
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "space-y-1.5", children: mobileColumns.map((column, mobileIndex) => /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
1925
2586
  "div",
1926
2587
  {
1927
2588
  className: cn(
@@ -1929,27 +2590,27 @@ function DataTable({
1929
2590
  mobileIndex === 0 ? "text-sm font-medium text-foreground" : "text-xs text-muted-foreground"
1930
2591
  ),
1931
2592
  children: [
1932
- mobileIndex > 0 ? /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("span", { className: "shrink-0 font-medium text-foreground/50", children: [
2593
+ mobileIndex > 0 ? /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("span", { className: "shrink-0 font-medium text-foreground/50", children: [
1933
2594
  column.label,
1934
2595
  ":"
1935
2596
  ] }) : null,
1936
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "truncate", children: getCellContent(row, column) })
2597
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "truncate", children: getCellContent(row, column) })
1937
2598
  ]
1938
2599
  },
1939
2600
  String(column.key)
1940
2601
  )) }),
1941
- actions ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "flex gap-2 border-t border-border pt-2", children: actions(row) }) : null
2602
+ actions ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "flex gap-2 border-t border-border pt-2", children: actions(row) }) : null
1942
2603
  ] }) }, index)) }),
1943
- !isLoading && filtered.length > pageSize ? /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "flex items-center justify-between", children: [
1944
- /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("span", { className: "text-sm text-muted-foreground", children: [
2604
+ !isLoading && filtered.length > pageSize ? /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "flex items-center justify-between", children: [
2605
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("span", { className: "text-sm text-muted-foreground", children: [
1945
2606
  filtered.length,
1946
2607
  " records \xB7 Page ",
1947
2608
  currentPage + 1,
1948
2609
  " of ",
1949
2610
  totalPages
1950
2611
  ] }),
1951
- /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "flex gap-1", children: [
1952
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2612
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "flex gap-1", children: [
2613
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
1953
2614
  Button,
1954
2615
  {
1955
2616
  variant: "outline",
@@ -1957,10 +2618,10 @@ function DataTable({
1957
2618
  className: "h-8 w-8",
1958
2619
  onClick: () => setPage((previous) => Math.max(0, previous - 1)),
1959
2620
  disabled: currentPage === 0,
1960
- children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react14.ChevronLeft, { className: "h-4 w-4" })
2621
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react20.ChevronLeft, { className: "h-4 w-4" })
1961
2622
  }
1962
2623
  ),
1963
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2624
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
1964
2625
  Button,
1965
2626
  {
1966
2627
  variant: "outline",
@@ -1968,7 +2629,7 @@ function DataTable({
1968
2629
  className: "h-8 w-8",
1969
2630
  onClick: () => setPage((previous) => Math.min(totalPages - 1, previous + 1)),
1970
2631
  disabled: currentPage >= totalPages - 1,
1971
- children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react14.ChevronRight, { className: "h-4 w-4" })
2632
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react20.ChevronRight, { className: "h-4 w-4" })
1972
2633
  }
1973
2634
  )
1974
2635
  ] })
@@ -1977,15 +2638,15 @@ function DataTable({
1977
2638
  }
1978
2639
 
1979
2640
  // src/components/tables/table-row-actions.tsx
1980
- var import_lucide_react15 = require("lucide-react");
1981
- var import_jsx_runtime41 = require("react/jsx-runtime");
2641
+ var import_lucide_react21 = require("lucide-react");
2642
+ var import_jsx_runtime47 = require("react/jsx-runtime");
1982
2643
  function TableRowActions({ className, label = "Abrir acciones", menuLabel = "Acciones", items }) {
1983
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(DropdownMenu, { children: [
1984
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Button, { variant: "ghost", size: "icon", className: cn("h-8 w-8 shadow-none", className), "aria-label": label, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react15.MoreHorizontal, { className: "h-4 w-4" }) }) }),
1985
- /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(DropdownMenuContent, { align: "end", className: "w-48", children: [
1986
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(DropdownMenuLabel, { children: menuLabel }),
1987
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(DropdownMenuSeparator, {}),
1988
- items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
2644
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(DropdownMenu, { children: [
2645
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Button, { variant: "ghost", size: "icon", className: cn("h-8 w-8 shadow-none", className), "aria-label": label, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react21.MoreHorizontal, { className: "h-4 w-4" }) }) }),
2646
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(DropdownMenuContent, { align: "end", className: "w-48", children: [
2647
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(DropdownMenuLabel, { children: menuLabel }),
2648
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(DropdownMenuSeparator, {}),
2649
+ items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
1989
2650
  DropdownMenuItem,
1990
2651
  {
1991
2652
  disabled: item.disabled,
@@ -1994,7 +2655,7 @@ function TableRowActions({ className, label = "Abrir acciones", menuLabel = "Acc
1994
2655
  children: [
1995
2656
  item.icon,
1996
2657
  item.label,
1997
- item.shortcut ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(DropdownMenuShortcut, { children: item.shortcut }) : null
2658
+ item.shortcut ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(DropdownMenuShortcut, { children: item.shortcut }) : null
1998
2659
  ]
1999
2660
  },
2000
2661
  item.label
@@ -2004,6 +2665,23 @@ function TableRowActions({ className, label = "Abrir acciones", menuLabel = "Acc
2004
2665
  }
2005
2666
  // Annotate the CommonJS export names for ESM import in node:
2006
2667
  0 && (module.exports = {
2668
+ AiChatAssistantMessage,
2669
+ AiChatComposer,
2670
+ AiChatEmptyState,
2671
+ AiChatFloatingButton,
2672
+ AiChatFloatingSidebar,
2673
+ AiChatHeader,
2674
+ AiChatLayout,
2675
+ AiChatMessage,
2676
+ AiChatMessageList,
2677
+ AiChatPanel,
2678
+ AiChatSidebar,
2679
+ AiChatSidebarHeader,
2680
+ AiChatSummaryAction,
2681
+ AiChatSummaryActions,
2682
+ AiChatThreadButton,
2683
+ AiChatThreadList,
2684
+ AiChatUserMessage,
2007
2685
  Alert,
2008
2686
  AlertDescription,
2009
2687
  AlertTitle,
@@ -2068,14 +2746,17 @@ function TableRowActions({ className, label = "Abrir acciones", menuLabel = "Acc
2068
2746
  DropdownMenuSubContent,
2069
2747
  DropdownMenuSubTrigger,
2070
2748
  DropdownMenuTrigger,
2749
+ EmptyState,
2071
2750
  FeatureIcon,
2072
2751
  FormSection,
2752
+ HeaderUserMenu,
2073
2753
  Input,
2074
2754
  Label,
2075
2755
  LoadingCard,
2076
2756
  LoadingState,
2077
2757
  LoadingTableRows,
2078
2758
  ModuleIconButton,
2759
+ ModuleSkeleton,
2079
2760
  Navbar,
2080
2761
  NotificationAction,
2081
2762
  NotificationMessage,
@@ -2115,6 +2796,8 @@ function TableRowActions({ className, label = "Abrir acciones", menuLabel = "Acc
2115
2796
  Steps,
2116
2797
  Switch,
2117
2798
  SwitchField,
2799
+ SyncStatusBadge,
2800
+ SyncStatusBar,
2118
2801
  Table,
2119
2802
  TableBody,
2120
2803
  TableCaption,