@cortexasystem/ui 0.1.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/index.cjs +1326 -643
  2. package/dist/index.d.cts +171 -13
  3. package/dist/index.d.ts +171 -13
  4. package/dist/index.js +1307 -646
  5. package/package.json +3 -3
  6. package/src/assets/isotipo-cortexa-dark.png +0 -0
  7. package/src/assets/isotipo-cortexa-light.png +0 -0
  8. package/src/components/ai/ai-chat.tsx +597 -0
  9. package/src/components/branding/brand-logo.tsx +77 -0
  10. package/src/components/data-display/icons.tsx +81 -0
  11. package/src/components/data-display/profile-avatar.tsx +154 -0
  12. package/src/components/data-display/typography.tsx +46 -0
  13. package/src/components/feedback/empty-state.tsx +63 -0
  14. package/src/components/feedback/loading-state.tsx +93 -0
  15. package/src/components/feedback/module-skeleton.tsx +76 -0
  16. package/src/components/feedback/notification.tsx +111 -0
  17. package/src/components/feedback/skeleton.tsx +9 -0
  18. package/src/components/feedback/spinner.tsx +18 -0
  19. package/src/components/feedback/status-badge.tsx +44 -0
  20. package/src/components/feedback/sync-status-badge.tsx +54 -0
  21. package/src/components/feedback/sync-status-bar.tsx +92 -0
  22. package/src/components/feedback/toaster.tsx +36 -0
  23. package/src/components/forms/searchable-select.tsx +206 -0
  24. package/src/components/forms/select.tsx +142 -0
  25. package/src/components/layout/app-shell.tsx +44 -0
  26. package/src/components/layout/form-section.tsx +21 -0
  27. package/src/components/layout/page-header.tsx +21 -0
  28. package/src/components/layout/theme-toggle.tsx +33 -0
  29. package/src/components/navigation/breadcrumb.tsx +87 -0
  30. package/src/components/navigation/header-user-menu.tsx +108 -0
  31. package/src/components/navigation/navbar.tsx +30 -0
  32. package/src/components/navigation/page-breadcrumb.tsx +44 -0
  33. package/src/components/navigation/sidebar.tsx +104 -0
  34. package/src/components/navigation/steps.tsx +82 -0
  35. package/src/components/overlays/dialog.tsx +94 -0
  36. package/src/components/overlays/drawer.tsx +85 -0
  37. package/src/components/overlays/dropdown-menu.tsx +179 -0
  38. package/src/components/overlays/sheet.tsx +110 -0
  39. package/src/components/primitives/alert.tsx +43 -0
  40. package/src/components/primitives/avatar.tsx +41 -0
  41. package/src/components/primitives/badge.tsx +26 -0
  42. package/src/components/primitives/button.tsx +49 -0
  43. package/src/components/primitives/card.tsx +97 -0
  44. package/src/components/primitives/checkbox.tsx +52 -0
  45. package/src/components/primitives/input.tsx +23 -0
  46. package/src/components/primitives/label.tsx +18 -0
  47. package/src/components/primitives/radio-group.tsx +57 -0
  48. package/src/components/primitives/separator.tsx +23 -0
  49. package/src/components/primitives/switch.tsx +75 -0
  50. package/src/components/primitives/textarea.tsx +18 -0
  51. package/src/components/tables/data-table.tsx +214 -0
  52. package/src/components/tables/data-table.types.ts +9 -0
  53. package/src/components/tables/table-row-actions.tsx +61 -0
  54. package/src/components/tables/table.tsx +88 -0
  55. package/src/declarations.d.ts +14 -0
  56. package/src/index.ts +50 -0
  57. package/src/lib/cn.ts +6 -0
  58. package/src/providers/theme-provider.tsx +90 -0
  59. package/src/styles.css +1 -1
package/dist/index.js CHANGED
@@ -68,6 +68,505 @@ function cn(...inputs) {
68
68
  return twMerge(clsx(inputs));
69
69
  }
70
70
 
71
+ // src/components/ai/ai-chat.tsx
72
+ import * as React4 from "react";
73
+ import { Bot, Clock3, MessageSquareText, PanelRightOpen, Send, Sparkles } from "lucide-react";
74
+
75
+ // src/components/overlays/sheet.tsx
76
+ import * as React from "react";
77
+ import * as SheetPrimitive from "@radix-ui/react-dialog";
78
+ import { cva } from "class-variance-authority";
79
+ import { X } from "lucide-react";
80
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
81
+ var Sheet = SheetPrimitive.Root;
82
+ var SheetTrigger = SheetPrimitive.Trigger;
83
+ var SheetClose = SheetPrimitive.Close;
84
+ var SheetPortal = SheetPrimitive.Portal;
85
+ var SheetOverlay = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx2(
86
+ SheetPrimitive.Overlay,
87
+ {
88
+ className: cn(
89
+ "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",
90
+ className
91
+ ),
92
+ ...props,
93
+ ref
94
+ }
95
+ ));
96
+ SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
97
+ var sheetVariants = cva(
98
+ "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",
99
+ {
100
+ variants: {
101
+ side: {
102
+ top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
103
+ bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
104
+ 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",
105
+ 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"
106
+ }
107
+ },
108
+ defaultVariants: {
109
+ side: "right"
110
+ }
111
+ }
112
+ );
113
+ var SheetContent = React.forwardRef(
114
+ ({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ jsxs(SheetPortal, { children: [
115
+ /* @__PURE__ */ jsx2(SheetOverlay, {}),
116
+ /* @__PURE__ */ jsxs(SheetPrimitive.Content, { ref, className: cn(sheetVariants({ side }), className), ...props, children: [
117
+ children,
118
+ /* @__PURE__ */ 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: [
119
+ /* @__PURE__ */ jsx2(X, { className: "h-4 w-4" }),
120
+ /* @__PURE__ */ jsx2("span", { className: "sr-only", children: "Close" })
121
+ ] })
122
+ ] })
123
+ ] })
124
+ );
125
+ SheetContent.displayName = SheetPrimitive.Content.displayName;
126
+ var SheetHeader = ({ className, ...props }) => /* @__PURE__ */ jsx2("div", { className: cn("flex flex-col space-y-2 text-center sm:text-left", className), ...props });
127
+ SheetHeader.displayName = "SheetHeader";
128
+ var SheetFooter = ({ className, ...props }) => /* @__PURE__ */ jsx2("div", { className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className), ...props });
129
+ SheetFooter.displayName = "SheetFooter";
130
+ var SheetTitle = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx2(SheetPrimitive.Title, { ref, className: cn("text-lg font-semibold text-foreground", className), ...props }));
131
+ SheetTitle.displayName = SheetPrimitive.Title.displayName;
132
+ var SheetDescription = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx2(SheetPrimitive.Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
133
+ SheetDescription.displayName = SheetPrimitive.Description.displayName;
134
+
135
+ // src/components/primitives/badge.tsx
136
+ import { cva as cva2 } from "class-variance-authority";
137
+ import { jsx as jsx3 } from "react/jsx-runtime";
138
+ var badgeVariants = cva2("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", {
139
+ variants: {
140
+ variant: {
141
+ default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
142
+ secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
143
+ destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
144
+ outline: "text-foreground"
145
+ }
146
+ },
147
+ defaultVariants: {
148
+ variant: "default"
149
+ }
150
+ });
151
+ function Badge({ className, variant, ...props }) {
152
+ return /* @__PURE__ */ jsx3("div", { className: cn(badgeVariants({ variant }), className), ...props });
153
+ }
154
+
155
+ // src/components/primitives/button.tsx
156
+ import * as React2 from "react";
157
+ import { Slot } from "@radix-ui/react-slot";
158
+ import { cva as cva3 } from "class-variance-authority";
159
+ import { jsx as jsx4 } from "react/jsx-runtime";
160
+ var buttonVariants = cva3(
161
+ "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",
162
+ {
163
+ variants: {
164
+ variant: {
165
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
166
+ destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
167
+ outline: "border border-input bg-background text-foreground hover:bg-accent hover:text-accent-foreground",
168
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
169
+ ghost: "text-foreground shadow-none hover:bg-accent hover:text-accent-foreground",
170
+ link: "h-auto px-0 py-0 text-primary underline-offset-4 shadow-none hover:underline"
171
+ },
172
+ size: {
173
+ default: "h-10 px-4 py-2",
174
+ sm: "h-9 rounded-md px-3",
175
+ lg: "h-11 rounded-md px-8",
176
+ icon: "h-10 w-10"
177
+ }
178
+ },
179
+ defaultVariants: {
180
+ variant: "default",
181
+ size: "default"
182
+ }
183
+ }
184
+ );
185
+ var Button = React2.forwardRef(
186
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
187
+ const Comp = asChild ? Slot : "button";
188
+ return /* @__PURE__ */ jsx4(Comp, { className: cn(buttonVariants({ variant, size, className })), ref, ...props });
189
+ }
190
+ );
191
+ Button.displayName = "Button";
192
+
193
+ // src/components/primitives/textarea.tsx
194
+ import * as React3 from "react";
195
+ import { jsx as jsx5 } from "react/jsx-runtime";
196
+ var Textarea = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx5(
197
+ "textarea",
198
+ {
199
+ ref,
200
+ className: cn(
201
+ "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",
202
+ className
203
+ ),
204
+ ...props
205
+ }
206
+ ));
207
+ Textarea.displayName = "Textarea";
208
+
209
+ // src/components/ai/ai-chat.tsx
210
+ import { jsx as jsx6, jsxs as jsxs2 } from "react/jsx-runtime";
211
+ function AiChatLayout({ className, variant = "screen", ...props }) {
212
+ return /* @__PURE__ */ jsx6(
213
+ "section",
214
+ {
215
+ className: cn(
216
+ "overflow-hidden rounded-2xl border bg-card text-card-foreground shadow-sm",
217
+ 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",
218
+ className
219
+ ),
220
+ ...props
221
+ }
222
+ );
223
+ }
224
+ var AiChatSidebar = React4.forwardRef(
225
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx6(
226
+ "aside",
227
+ {
228
+ ref,
229
+ className: cn(
230
+ "flex min-h-0 flex-col border-b bg-muted/20 lg:border-b-0 lg:border-r",
231
+ className
232
+ ),
233
+ ...props
234
+ }
235
+ )
236
+ );
237
+ AiChatSidebar.displayName = "AiChatSidebar";
238
+ function AiChatSidebarHeader({ className, title, description, action, ...props }) {
239
+ return /* @__PURE__ */ jsx6("div", { className: cn("border-b px-4 py-4", className), ...props, children: /* @__PURE__ */ jsxs2("div", { className: "flex items-start justify-between gap-3", children: [
240
+ /* @__PURE__ */ jsxs2("div", { className: "grid gap-1", children: [
241
+ /* @__PURE__ */ jsx6("p", { className: "text-sm font-semibold text-foreground", children: title }),
242
+ description ? /* @__PURE__ */ jsx6("p", { className: "text-xs text-muted-foreground", children: description }) : null
243
+ ] }),
244
+ action ? /* @__PURE__ */ jsx6("div", { className: "shrink-0", children: action }) : null
245
+ ] }) });
246
+ }
247
+ var AiChatThreadList = React4.forwardRef(
248
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx6("div", { ref, className: cn("flex-1 space-y-2 overflow-y-auto p-3", className), ...props })
249
+ );
250
+ AiChatThreadList.displayName = "AiChatThreadList";
251
+ var AiChatThreadButton = React4.forwardRef(
252
+ ({
253
+ className,
254
+ title,
255
+ preview,
256
+ timestamp,
257
+ active = false,
258
+ unreadCount,
259
+ icon: Icon2 = MessageSquareText,
260
+ type = "button",
261
+ ...props
262
+ }, ref) => /* @__PURE__ */ jsxs2(
263
+ "button",
264
+ {
265
+ ref,
266
+ type,
267
+ className: cn(
268
+ "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",
269
+ active ? "border-[var(--color-accent-blue)]/40 bg-[var(--color-accent-blue)]/8" : "border-transparent bg-transparent hover:border-border hover:bg-accent/40",
270
+ className
271
+ ),
272
+ ...props,
273
+ children: [
274
+ /* @__PURE__ */ jsx6(
275
+ "span",
276
+ {
277
+ className: cn(
278
+ "mt-0.5 flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border",
279
+ 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"
280
+ ),
281
+ children: /* @__PURE__ */ jsx6(Icon2, { className: "h-4 w-4" })
282
+ }
283
+ ),
284
+ /* @__PURE__ */ jsxs2("span", { className: "grid min-w-0 flex-1 gap-1", children: [
285
+ /* @__PURE__ */ jsxs2("span", { className: "flex items-start justify-between gap-3", children: [
286
+ /* @__PURE__ */ jsx6("span", { className: "truncate text-sm font-medium text-foreground", children: title }),
287
+ timestamp ? /* @__PURE__ */ jsxs2("span", { className: "inline-flex shrink-0 items-center gap-1 text-[11px] text-muted-foreground", children: [
288
+ /* @__PURE__ */ jsx6(Clock3, { className: "h-3 w-3" }),
289
+ timestamp
290
+ ] }) : null
291
+ ] }),
292
+ preview ? /* @__PURE__ */ jsx6("span", { className: "line-clamp-2 text-xs text-muted-foreground", children: preview }) : null
293
+ ] }),
294
+ typeof unreadCount === "number" && unreadCount > 0 ? /* @__PURE__ */ jsx6(Badge, { className: "shrink-0 rounded-full px-2 py-0.5 text-[11px]", children: unreadCount > 9 ? "9+" : unreadCount }) : null
295
+ ]
296
+ }
297
+ )
298
+ );
299
+ AiChatThreadButton.displayName = "AiChatThreadButton";
300
+ var AiChatPanel = React4.forwardRef(
301
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx6("div", { ref, className: cn("flex min-h-0 flex-1 flex-col bg-background/40", className), ...props })
302
+ );
303
+ AiChatPanel.displayName = "AiChatPanel";
304
+ function AiChatHeader({ className, title, description, meta, actions, ...props }) {
305
+ return /* @__PURE__ */ jsx6("header", { className: cn("border-b bg-card/95 px-5 py-4 backdrop-blur", className), ...props, children: /* @__PURE__ */ jsxs2("div", { className: "flex flex-wrap items-start justify-between gap-4", children: [
306
+ /* @__PURE__ */ jsxs2("div", { className: "grid gap-1", children: [
307
+ /* @__PURE__ */ jsxs2("div", { className: "flex flex-wrap items-center gap-2", children: [
308
+ /* @__PURE__ */ jsx6("p", { className: "text-base font-semibold text-foreground", children: title }),
309
+ meta ? /* @__PURE__ */ jsx6("div", { className: "flex items-center gap-2 text-xs text-muted-foreground", children: meta }) : null
310
+ ] }),
311
+ description ? /* @__PURE__ */ jsx6("p", { className: "text-sm text-muted-foreground", children: description }) : null
312
+ ] }),
313
+ actions ? /* @__PURE__ */ jsx6("div", { className: "flex flex-wrap items-center gap-2", children: actions }) : null
314
+ ] }) });
315
+ }
316
+ var AiChatMessageList = React4.forwardRef(
317
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx6(
318
+ "div",
319
+ {
320
+ ref,
321
+ role: "log",
322
+ "aria-live": "polite",
323
+ className: cn("flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto px-5 py-5", className),
324
+ ...props
325
+ }
326
+ )
327
+ );
328
+ AiChatMessageList.displayName = "AiChatMessageList";
329
+ function getDefaultAvatar(role) {
330
+ if (role === "assistant") {
331
+ return /* @__PURE__ */ jsx6("span", { className: "flex h-9 w-9 items-center justify-center rounded-full bg-[var(--color-brand)] text-white shadow-sm", children: /* @__PURE__ */ jsx6(Bot, { className: "h-4 w-4" }) });
332
+ }
333
+ if (role === "system") {
334
+ return /* @__PURE__ */ jsx6("span", { className: "flex h-9 w-9 items-center justify-center rounded-full bg-secondary text-secondary-foreground shadow-sm", children: /* @__PURE__ */ jsx6(Sparkles, { className: "h-4 w-4" }) });
335
+ }
336
+ return /* @__PURE__ */ jsx6("span", { className: "flex h-9 w-9 items-center justify-center rounded-full bg-foreground text-background shadow-sm", children: /* @__PURE__ */ jsx6("span", { className: "text-xs font-semibold", children: "TU" }) });
337
+ }
338
+ function AiChatMessage({
339
+ className,
340
+ role = "assistant",
341
+ author,
342
+ timestamp,
343
+ status = "complete",
344
+ avatar,
345
+ actions,
346
+ sources,
347
+ children,
348
+ ...props
349
+ }) {
350
+ const isUser = role === "user";
351
+ return /* @__PURE__ */ jsxs2(
352
+ "article",
353
+ {
354
+ className: cn("flex gap-3", isUser ? "justify-end" : "justify-start", className),
355
+ ...props,
356
+ children: [
357
+ !isUser ? /* @__PURE__ */ jsx6("div", { className: "shrink-0", children: avatar ?? getDefaultAvatar(role) }) : null,
358
+ /* @__PURE__ */ jsxs2("div", { className: cn("grid max-w-[90%] gap-2 md:max-w-[74%]", isUser && "justify-items-end"), children: [
359
+ /* @__PURE__ */ jsxs2("div", { className: cn("flex items-center gap-2", isUser && "justify-end"), children: [
360
+ /* @__PURE__ */ jsx6("span", { className: "text-xs font-medium text-foreground", children: author ?? (isUser ? "Tu" : "Cortexa AI") }),
361
+ timestamp ? /* @__PURE__ */ jsx6("span", { className: "text-xs text-muted-foreground", children: timestamp }) : null,
362
+ status !== "complete" ? /* @__PURE__ */ jsx6(Badge, { variant: status === "error" ? "destructive" : "secondary", children: status === "streaming" ? "Generando" : "Error" }) : null
363
+ ] }),
364
+ /* @__PURE__ */ jsx6(
365
+ "div",
366
+ {
367
+ className: cn(
368
+ "rounded-2xl border px-4 py-3 text-sm leading-6 shadow-sm",
369
+ isUser ? "border-primary bg-primary text-primary-foreground" : role === "system" ? "border-secondary bg-secondary text-secondary-foreground" : "bg-card text-foreground"
370
+ ),
371
+ children: /* @__PURE__ */ jsx6("div", { className: "whitespace-pre-wrap", children })
372
+ }
373
+ ),
374
+ sources?.length ? /* @__PURE__ */ jsx6("div", { className: cn("flex flex-wrap gap-2", isUser && "justify-end"), children: sources.map(
375
+ (source) => source.href ? /* @__PURE__ */ jsxs2(
376
+ "a",
377
+ {
378
+ href: source.href,
379
+ 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",
380
+ children: [
381
+ source.label,
382
+ /* @__PURE__ */ jsx6(PanelRightOpen, { className: "h-3 w-3" })
383
+ ]
384
+ },
385
+ `${source.label}-${source.href}`
386
+ ) : /* @__PURE__ */ jsx6(
387
+ "span",
388
+ {
389
+ className: "inline-flex items-center rounded-full border px-2.5 py-1 text-xs text-muted-foreground",
390
+ children: source.label
391
+ },
392
+ source.label
393
+ )
394
+ ) }) : null,
395
+ actions ? /* @__PURE__ */ jsx6("div", { className: cn("flex flex-wrap gap-2", isUser && "justify-end"), children: actions }) : null
396
+ ] }),
397
+ isUser ? /* @__PURE__ */ jsx6("div", { className: "shrink-0", children: avatar ?? getDefaultAvatar(role) }) : null
398
+ ]
399
+ }
400
+ );
401
+ }
402
+ function AiChatAssistantMessage(props) {
403
+ return /* @__PURE__ */ jsx6(AiChatMessage, { role: "assistant", ...props });
404
+ }
405
+ function AiChatUserMessage(props) {
406
+ return /* @__PURE__ */ jsx6(AiChatMessage, { role: "user", ...props });
407
+ }
408
+ function AiChatSummaryActions({
409
+ className,
410
+ title = "Quick actions",
411
+ description,
412
+ actionsClassName,
413
+ children,
414
+ ...props
415
+ }) {
416
+ return /* @__PURE__ */ jsxs2("section", { className: cn("grid gap-3 rounded-2xl border bg-card p-4 shadow-sm", className), ...props, children: [
417
+ /* @__PURE__ */ jsxs2("div", { className: "grid gap-1", children: [
418
+ /* @__PURE__ */ jsx6("p", { className: "text-sm font-semibold text-foreground", children: title }),
419
+ description ? /* @__PURE__ */ jsx6("p", { className: "text-xs text-muted-foreground", children: description }) : null
420
+ ] }),
421
+ /* @__PURE__ */ jsx6("div", { className: cn("grid gap-3 md:grid-cols-3", actionsClassName), children })
422
+ ] });
423
+ }
424
+ var AiChatSummaryAction = React4.forwardRef(
425
+ ({
426
+ className,
427
+ title,
428
+ description,
429
+ icon: Icon2 = Sparkles,
430
+ active = false,
431
+ badge,
432
+ type = "button",
433
+ ...props
434
+ }, ref) => /* @__PURE__ */ jsxs2(
435
+ "button",
436
+ {
437
+ ref,
438
+ type,
439
+ className: cn(
440
+ "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",
441
+ active ? "border-[var(--color-accent-blue)]/40 bg-[var(--color-accent-blue)]/10" : "hover:border-border hover:bg-accent/40",
442
+ className
443
+ ),
444
+ ...props,
445
+ children: [
446
+ /* @__PURE__ */ jsx6("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__ */ jsx6(Icon2, { className: "h-5 w-5" }) }),
447
+ /* @__PURE__ */ jsxs2("span", { className: "grid flex-1 gap-1", children: [
448
+ /* @__PURE__ */ jsxs2("span", { className: "flex flex-wrap items-center gap-2", children: [
449
+ /* @__PURE__ */ jsx6("span", { className: "text-sm font-medium text-foreground", children: title }),
450
+ badge ? /* @__PURE__ */ jsx6(Badge, { variant: "secondary", children: badge }) : null
451
+ ] }),
452
+ description ? /* @__PURE__ */ jsx6("span", { className: "text-xs leading-5 text-muted-foreground", children: description }) : null
453
+ ] })
454
+ ]
455
+ }
456
+ )
457
+ );
458
+ AiChatSummaryAction.displayName = "AiChatSummaryAction";
459
+ function AiChatComposer({
460
+ className,
461
+ textareaProps,
462
+ onSubmit,
463
+ submitLabel = "Send",
464
+ submitIcon = /* @__PURE__ */ jsx6(Send, { className: "h-4 w-4" }),
465
+ leadingActions,
466
+ trailingActions,
467
+ helperText,
468
+ disabled = false,
469
+ ...props
470
+ }) {
471
+ const { className: textareaClassName, placeholder, disabled: textareaDisabled, ...restTextareaProps } = textareaProps ?? {};
472
+ const isDisabled = disabled || Boolean(textareaDisabled);
473
+ return /* @__PURE__ */ jsxs2("form", { className: cn("border-t bg-card px-4 py-4", className), onSubmit, ...props, children: [
474
+ /* @__PURE__ */ jsxs2("div", { className: "rounded-2xl border bg-background p-3 shadow-sm", children: [
475
+ /* @__PURE__ */ jsx6(
476
+ Textarea,
477
+ {
478
+ className: cn(
479
+ "min-h-24 resize-none border-0 bg-transparent p-0 text-sm shadow-none focus-visible:ring-0",
480
+ textareaClassName
481
+ ),
482
+ placeholder: placeholder ?? "Describe what you need from the assistant...",
483
+ disabled: isDisabled,
484
+ ...restTextareaProps
485
+ }
486
+ ),
487
+ /* @__PURE__ */ jsxs2("div", { className: "mt-3 flex flex-wrap items-center justify-between gap-3", children: [
488
+ /* @__PURE__ */ jsx6("div", { className: "flex flex-wrap items-center gap-2", children: leadingActions }),
489
+ /* @__PURE__ */ jsxs2("div", { className: "flex flex-wrap items-center gap-2", children: [
490
+ trailingActions,
491
+ /* @__PURE__ */ jsxs2(Button, { type: "submit", disabled: isDisabled, children: [
492
+ submitIcon,
493
+ submitLabel
494
+ ] })
495
+ ] })
496
+ ] })
497
+ ] }),
498
+ helperText ? /* @__PURE__ */ jsx6("p", { className: "mt-2 text-xs text-muted-foreground", children: helperText }) : null
499
+ ] });
500
+ }
501
+ function AiChatEmptyState({
502
+ className,
503
+ title,
504
+ description,
505
+ prompts,
506
+ onPromptSelect,
507
+ ...props
508
+ }) {
509
+ return /* @__PURE__ */ jsxs2(
510
+ "div",
511
+ {
512
+ className: cn(
513
+ "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",
514
+ className
515
+ ),
516
+ ...props,
517
+ children: [
518
+ /* @__PURE__ */ jsx6("span", { className: "flex h-14 w-14 items-center justify-center rounded-2xl bg-[var(--color-brand)]/10 text-[var(--color-brand)]", children: /* @__PURE__ */ jsx6(Sparkles, { className: "h-6 w-6" }) }),
519
+ /* @__PURE__ */ jsxs2("div", { className: "grid max-w-xl gap-2", children: [
520
+ /* @__PURE__ */ jsx6("p", { className: "text-lg font-semibold text-foreground", children: title }),
521
+ /* @__PURE__ */ jsx6("p", { className: "text-sm leading-6 text-muted-foreground", children: description })
522
+ ] }),
523
+ prompts?.length ? /* @__PURE__ */ jsx6("div", { className: "flex max-w-2xl flex-wrap items-center justify-center gap-2", children: prompts.map((prompt) => /* @__PURE__ */ jsx6(Button, { type: "button", variant: "outline", size: "sm", onClick: () => onPromptSelect?.(prompt), children: prompt }, prompt)) }) : null
524
+ ]
525
+ }
526
+ );
527
+ }
528
+ function AiChatFloatingButton({
529
+ className,
530
+ label = "Asistente IA",
531
+ unreadCount,
532
+ icon: Icon2 = Sparkles,
533
+ variant = "default",
534
+ size = "lg",
535
+ children,
536
+ ...props
537
+ }) {
538
+ return /* @__PURE__ */ jsxs2(
539
+ Button,
540
+ {
541
+ variant,
542
+ size,
543
+ className: cn("fixed bottom-6 right-6 h-14 rounded-full px-5 shadow-lg", className),
544
+ ...props,
545
+ children: [
546
+ /* @__PURE__ */ jsx6(Icon2, { className: "h-4 w-4" }),
547
+ /* @__PURE__ */ jsx6("span", { children: children ?? label }),
548
+ typeof unreadCount === "number" && unreadCount > 0 ? /* @__PURE__ */ jsx6("span", { className: "rounded-full bg-white/15 px-2 py-0.5 text-xs font-semibold text-inherit", children: unreadCount > 9 ? "9+" : unreadCount }) : null
549
+ ]
550
+ }
551
+ );
552
+ }
553
+ function AiChatFloatingSidebar({
554
+ children,
555
+ trigger,
556
+ side = "right",
557
+ open,
558
+ defaultOpen,
559
+ onOpenChange,
560
+ contentClassName,
561
+ triggerAsChild = true
562
+ }) {
563
+ const resolvedTrigger = trigger ?? /* @__PURE__ */ jsx6(AiChatFloatingButton, {});
564
+ return /* @__PURE__ */ jsxs2(Sheet, { open, defaultOpen, onOpenChange, children: [
565
+ /* @__PURE__ */ jsx6(SheetTrigger, { asChild: triggerAsChild, children: resolvedTrigger }),
566
+ /* @__PURE__ */ jsx6(SheetContent, { side, className: cn("w-full p-0 sm:max-w-[460px]", contentClassName), children: /* @__PURE__ */ jsx6(AiChatLayout, { variant: "sidebar", className: "h-full rounded-none border-0 shadow-none", children }) })
567
+ ] });
568
+ }
569
+
71
570
  // src/assets/isotipo-cortexa-dark.png
72
571
  var isotipo_cortexa_dark_default = "./isotipo-cortexa-dark-F2MDSEEV.png";
73
572
 
@@ -75,7 +574,7 @@ var isotipo_cortexa_dark_default = "./isotipo-cortexa-dark-F2MDSEEV.png";
75
574
  var isotipo_cortexa_light_default = "./isotipo-cortexa-light-LV3O6ASR.png";
76
575
 
77
576
  // src/components/branding/brand-logo.tsx
78
- import { Fragment, jsx as jsx2, jsxs } from "react/jsx-runtime";
577
+ import { Fragment, jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
79
578
  var sizeMap = {
80
579
  sm: { icon: "h-6 w-6", text: "text-sm", gap: "gap-2" },
81
580
  md: { icon: "h-7 w-7", text: "text-lg", gap: "gap-3" },
@@ -85,8 +584,8 @@ function BrandLogo({ className, size = "md", href }) {
85
584
  const { resolvedTheme } = useTheme();
86
585
  const isDark = resolvedTheme === "dark";
87
586
  const s = sizeMap[size];
88
- const content = /* @__PURE__ */ jsxs(Fragment, { children: [
89
- /* @__PURE__ */ jsx2(
587
+ const content = /* @__PURE__ */ jsxs3(Fragment, { children: [
588
+ /* @__PURE__ */ jsx7(
90
589
  "div",
91
590
  {
92
591
  className: cn(
@@ -94,7 +593,7 @@ function BrandLogo({ className, size = "md", href }) {
94
593
  s.icon,
95
594
  isDark ? "bg-[var(--color-brand)] p-1" : "bg-transparent"
96
595
  ),
97
- children: /* @__PURE__ */ jsx2(
596
+ children: /* @__PURE__ */ jsx7(
98
597
  "img",
99
598
  {
100
599
  src: isDark ? isotipo_cortexa_dark_default : isotipo_cortexa_light_default,
@@ -104,8 +603,8 @@ function BrandLogo({ className, size = "md", href }) {
104
603
  )
105
604
  }
106
605
  ),
107
- /* @__PURE__ */ jsxs("div", { className: "flex items-baseline", children: [
108
- /* @__PURE__ */ jsx2(
606
+ /* @__PURE__ */ jsxs3("div", { className: "flex items-baseline", children: [
607
+ /* @__PURE__ */ jsx7(
109
608
  "span",
110
609
  {
111
610
  className: cn(
@@ -116,7 +615,7 @@ function BrandLogo({ className, size = "md", href }) {
116
615
  children: "Cortexa"
117
616
  }
118
617
  ),
119
- /* @__PURE__ */ jsx2(
618
+ /* @__PURE__ */ jsx7(
120
619
  "span",
121
620
  {
122
621
  className: cn(
@@ -131,13 +630,13 @@ function BrandLogo({ className, size = "md", href }) {
131
630
  ] });
132
631
  const wrapperClass = cn("flex items-center", s.gap, className);
133
632
  if (href) {
134
- return /* @__PURE__ */ jsx2("a", { href, className: wrapperClass, "aria-label": "Cortexa Fiscal \u2014 Inicio", children: content });
633
+ return /* @__PURE__ */ jsx7("a", { href, className: wrapperClass, "aria-label": "Cortexa Fiscal \u2014 Inicio", children: content });
135
634
  }
136
- return /* @__PURE__ */ jsx2("div", { className: wrapperClass, "aria-label": "Cortexa Fiscal", children: content });
635
+ return /* @__PURE__ */ jsx7("div", { className: wrapperClass, "aria-label": "Cortexa Fiscal", children: content });
137
636
  }
138
637
 
139
638
  // src/components/data-display/icons.tsx
140
- import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
639
+ import { jsx as jsx8, jsxs as jsxs4 } from "react/jsx-runtime";
141
640
  var toneStyles = {
142
641
  brand: "bg-[var(--color-brand)]/10 text-[var(--color-brand)]",
143
642
  info: "bg-[var(--color-info-bg)] text-[var(--color-accent-blue)]",
@@ -153,7 +652,7 @@ var sizeStyles = {
153
652
  };
154
653
  function FeatureIcon({ className, icon: Icon2, tone = "brand", size = "md", iconClassName }) {
155
654
  const classes = sizeStyles[size];
156
- return /* @__PURE__ */ jsx3("span", { className: cn("inline-flex items-center justify-center", classes.wrapper, toneStyles[tone], className), children: /* @__PURE__ */ jsx3(Icon2, { className: cn(classes.icon, iconClassName) }) });
655
+ return /* @__PURE__ */ jsx8("span", { className: cn("inline-flex items-center justify-center", classes.wrapper, toneStyles[tone], className), children: /* @__PURE__ */ jsx8(Icon2, { className: cn(classes.icon, iconClassName) }) });
157
656
  }
158
657
  function ModuleIconButton({
159
658
  className,
@@ -164,7 +663,7 @@ function ModuleIconButton({
164
663
  tone = "brand",
165
664
  ...props
166
665
  }) {
167
- return /* @__PURE__ */ jsxs2(
666
+ return /* @__PURE__ */ jsxs4(
168
667
  "button",
169
668
  {
170
669
  type,
@@ -174,7 +673,7 @@ function ModuleIconButton({
174
673
  ),
175
674
  ...props,
176
675
  children: [
177
- /* @__PURE__ */ jsx3(
676
+ /* @__PURE__ */ jsx8(
178
677
  FeatureIcon,
179
678
  {
180
679
  icon,
@@ -183,9 +682,9 @@ function ModuleIconButton({
183
682
  className: "transition-colors group-hover:bg-[var(--color-brand)]/20"
184
683
  }
185
684
  ),
186
- /* @__PURE__ */ jsxs2("span", { className: "grid gap-1", children: [
187
- /* @__PURE__ */ jsx3("span", { className: "text-sm font-medium text-foreground", children: label }),
188
- description ? /* @__PURE__ */ jsx3("span", { className: "text-xs text-muted-foreground", children: description }) : null
685
+ /* @__PURE__ */ jsxs4("span", { className: "grid gap-1", children: [
686
+ /* @__PURE__ */ jsx8("span", { className: "text-sm font-medium text-foreground", children: label }),
687
+ description ? /* @__PURE__ */ jsx8("span", { className: "text-xs text-muted-foreground", children: description }) : null
189
688
  ] })
190
689
  ]
191
690
  }
@@ -193,10 +692,10 @@ function ModuleIconButton({
193
692
  }
194
693
 
195
694
  // src/components/primitives/avatar.tsx
196
- import * as React from "react";
695
+ import * as React5 from "react";
197
696
  import * as AvatarPrimitive from "@radix-ui/react-avatar";
198
- import { jsx as jsx4 } from "react/jsx-runtime";
199
- var Avatar = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx4(
697
+ import { jsx as jsx9 } from "react/jsx-runtime";
698
+ var Avatar = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx9(
200
699
  AvatarPrimitive.Root,
201
700
  {
202
701
  ref,
@@ -205,9 +704,9 @@ var Avatar = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
205
704
  }
206
705
  ));
207
706
  Avatar.displayName = AvatarPrimitive.Root.displayName;
208
- var AvatarImage = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx4(AvatarPrimitive.Image, { ref, className: cn("aspect-square h-full w-full", className), ...props }));
707
+ var AvatarImage = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx9(AvatarPrimitive.Image, { ref, className: cn("aspect-square h-full w-full", className), ...props }));
209
708
  AvatarImage.displayName = AvatarPrimitive.Image.displayName;
210
- var AvatarFallback = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx4(
709
+ var AvatarFallback = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx9(
211
710
  AvatarPrimitive.Fallback,
212
711
  {
213
712
  ref,
@@ -218,7 +717,7 @@ var AvatarFallback = React.forwardRef(({ className, ...props }, ref) => /* @__PU
218
717
  AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
219
718
 
220
719
  // src/components/data-display/profile-avatar.tsx
221
- import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
720
+ import { jsx as jsx10, jsxs as jsxs5 } from "react/jsx-runtime";
222
721
  var sizeMap2 = {
223
722
  xs: { avatar: "h-8 w-8", text: "text-xs", dot: "h-2.5 w-2.5" },
224
723
  sm: { avatar: "h-10 w-10", text: "text-sm", dot: "h-3 w-3" },
@@ -246,12 +745,12 @@ function ProfileAvatar({
246
745
  status
247
746
  }) {
248
747
  const classes = sizeMap2[size];
249
- return /* @__PURE__ */ jsxs3("div", { className: cn("relative inline-flex", className), children: [
250
- /* @__PURE__ */ jsxs3(Avatar, { className: cn(classes.avatar, avatarClassName), children: [
251
- src ? /* @__PURE__ */ jsx5(AvatarImage, { src, alt: alt ?? name }) : null,
252
- /* @__PURE__ */ jsx5(AvatarFallback, { className: cn("bg-[var(--color-brand)] text-white font-medium", classes.text, fallbackClassName), children: initials ?? getInitials(name) })
748
+ return /* @__PURE__ */ jsxs5("div", { className: cn("relative inline-flex", className), children: [
749
+ /* @__PURE__ */ jsxs5(Avatar, { className: cn(classes.avatar, avatarClassName), children: [
750
+ src ? /* @__PURE__ */ jsx10(AvatarImage, { src, alt: alt ?? name }) : null,
751
+ /* @__PURE__ */ jsx10(AvatarFallback, { className: cn("bg-[var(--color-brand)] text-white font-medium", classes.text, fallbackClassName), children: initials ?? getInitials(name) })
253
752
  ] }),
254
- status ? /* @__PURE__ */ jsx5(
753
+ status ? /* @__PURE__ */ jsx10(
255
754
  "span",
256
755
  {
257
756
  "aria-hidden": "true",
@@ -264,9 +763,9 @@ function AvatarGroup({ className, users, size = "xs", limit = 4, extraLabel }) {
264
763
  const visibleUsers = users.slice(0, limit);
265
764
  const hiddenCount = Math.max(0, users.length - limit);
266
765
  const classes = sizeMap2[size];
267
- return /* @__PURE__ */ jsxs3("div", { className: cn("flex items-center gap-3", className), children: [
268
- /* @__PURE__ */ jsxs3("div", { className: "flex -space-x-2", children: [
269
- visibleUsers.map((user) => /* @__PURE__ */ jsx5(
766
+ return /* @__PURE__ */ jsxs5("div", { className: cn("flex items-center gap-3", className), children: [
767
+ /* @__PURE__ */ jsxs5("div", { className: "flex -space-x-2", children: [
768
+ visibleUsers.map((user) => /* @__PURE__ */ jsx10(
270
769
  ProfileAvatar,
271
770
  {
272
771
  name: user.name,
@@ -278,7 +777,7 @@ function AvatarGroup({ className, users, size = "xs", limit = 4, extraLabel }) {
278
777
  },
279
778
  user.id ?? user.name
280
779
  )),
281
- hiddenCount > 0 ? /* @__PURE__ */ jsxs3(
780
+ hiddenCount > 0 ? /* @__PURE__ */ jsxs5(
282
781
  "div",
283
782
  {
284
783
  className: cn(
@@ -293,16 +792,16 @@ function AvatarGroup({ className, users, size = "xs", limit = 4, extraLabel }) {
293
792
  }
294
793
  ) : null
295
794
  ] }),
296
- extraLabel ? /* @__PURE__ */ jsx5("div", { className: "text-sm text-muted-foreground", children: extraLabel }) : null
795
+ extraLabel ? /* @__PURE__ */ jsx10("div", { className: "text-sm text-muted-foreground", children: extraLabel }) : null
297
796
  ] });
298
797
  }
299
798
  function ProfileAvatarRow({ className, name, role, src, initials, status, size = "sm", aside }) {
300
- return /* @__PURE__ */ jsxs3("div", { className: cn("flex items-center justify-between gap-3", className), children: [
301
- /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-3", children: [
302
- /* @__PURE__ */ jsx5(ProfileAvatar, { name, src, initials, status, size }),
303
- /* @__PURE__ */ jsxs3("div", { className: "grid gap-0.5", children: [
304
- /* @__PURE__ */ jsx5("p", { className: "text-sm font-medium text-foreground", children: name }),
305
- role ? /* @__PURE__ */ jsx5("p", { className: "text-xs text-muted-foreground", children: role }) : null
799
+ return /* @__PURE__ */ jsxs5("div", { className: cn("flex items-center justify-between gap-3", className), children: [
800
+ /* @__PURE__ */ jsxs5("div", { className: "flex items-center gap-3", children: [
801
+ /* @__PURE__ */ jsx10(ProfileAvatar, { name, src, initials, status, size }),
802
+ /* @__PURE__ */ jsxs5("div", { className: "grid gap-0.5", children: [
803
+ /* @__PURE__ */ jsx10("p", { className: "text-sm font-medium text-foreground", children: name }),
804
+ role ? /* @__PURE__ */ jsx10("p", { className: "text-xs text-muted-foreground", children: role }) : null
306
805
  ] })
307
806
  ] }),
308
807
  aside
@@ -310,9 +809,9 @@ function ProfileAvatarRow({ className, name, role, src, initials, status, size =
310
809
  }
311
810
 
312
811
  // src/components/data-display/typography.tsx
313
- import { cva } from "class-variance-authority";
314
- import { jsx as jsx6 } from "react/jsx-runtime";
315
- var typographyVariants = cva("text-foreground", {
812
+ import { cva as cva4 } from "class-variance-authority";
813
+ import { jsx as jsx11 } from "react/jsx-runtime";
814
+ var typographyVariants = cva4("text-foreground", {
316
815
  variants: {
317
816
  variant: {
318
817
  h1: "font-display text-4xl font-bold tracking-tight",
@@ -338,17 +837,63 @@ function Typography({
338
837
  ...props
339
838
  }) {
340
839
  const Component = as ?? "p";
341
- return /* @__PURE__ */ jsx6(Component, { className: cn(typographyVariants({ variant }), className), ...props, children });
840
+ return /* @__PURE__ */ jsx11(Component, { className: cn(typographyVariants({ variant }), className), ...props, children });
841
+ }
842
+
843
+ // src/components/feedback/empty-state.tsx
844
+ import { Inbox } from "lucide-react";
845
+ import { jsx as jsx12, jsxs as jsxs6 } from "react/jsx-runtime";
846
+ function EmptyState({
847
+ className,
848
+ icon: Icon2 = Inbox,
849
+ title,
850
+ description,
851
+ action,
852
+ secondaryAction,
853
+ align = "center",
854
+ compact = false
855
+ }) {
856
+ const isCentered = align === "center";
857
+ return /* @__PURE__ */ jsx12(
858
+ "section",
859
+ {
860
+ className: cn(
861
+ "rounded-2xl border border-dashed bg-card text-card-foreground shadow-sm",
862
+ compact ? "p-5" : "p-8 sm:p-10",
863
+ className
864
+ ),
865
+ children: /* @__PURE__ */ jsxs6(
866
+ "div",
867
+ {
868
+ className: cn(
869
+ "flex flex-col gap-5",
870
+ isCentered ? "items-center text-center" : "items-start text-left"
871
+ ),
872
+ children: [
873
+ /* @__PURE__ */ jsx12("div", { className: "flex h-14 w-14 items-center justify-center rounded-2xl bg-[var(--color-brand)]/10 text-[var(--color-brand)]", children: /* @__PURE__ */ jsx12(Icon2, { className: "h-6 w-6" }) }),
874
+ /* @__PURE__ */ jsxs6("div", { className: "grid max-w-xl gap-2", children: [
875
+ /* @__PURE__ */ jsx12("p", { className: "text-lg font-semibold text-foreground", children: title }),
876
+ description ? /* @__PURE__ */ jsx12("div", { className: "text-sm leading-6 text-muted-foreground", children: description }) : null
877
+ ] }),
878
+ action || secondaryAction ? /* @__PURE__ */ jsxs6("div", { className: cn("flex flex-wrap gap-3", isCentered && "justify-center"), children: [
879
+ action,
880
+ secondaryAction
881
+ ] }) : null
882
+ ]
883
+ }
884
+ )
885
+ }
886
+ );
342
887
  }
343
888
 
344
889
  // src/components/primitives/card.tsx
345
- import * as React2 from "react";
346
- import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
890
+ import * as React6 from "react";
891
+ import { jsx as jsx13, jsxs as jsxs7 } from "react/jsx-runtime";
347
892
  var cardBaseClassName = "rounded-lg border bg-card text-card-foreground shadow-sm";
348
- var Card = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx7("div", { ref, className: cn(cardBaseClassName, className), ...props }));
893
+ var Card = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx13("div", { ref, className: cn(cardBaseClassName, className), ...props }));
349
894
  Card.displayName = "Card";
350
- var ClickableCard = React2.forwardRef(
351
- ({ className, type = "button", ...props }, ref) => /* @__PURE__ */ jsx7(
895
+ var ClickableCard = React6.forwardRef(
896
+ ({ className, type = "button", ...props }, ref) => /* @__PURE__ */ jsx13(
352
897
  "button",
353
898
  {
354
899
  ref,
@@ -363,8 +908,8 @@ var ClickableCard = React2.forwardRef(
363
908
  )
364
909
  );
365
910
  ClickableCard.displayName = "ClickableCard";
366
- var CenteredIconCard = React2.forwardRef(
367
- ({ className, type = "button", icon: Icon2, title, iconClassName, ...props }, ref) => /* @__PURE__ */ jsxs4(
911
+ var CenteredIconCard = React6.forwardRef(
912
+ ({ className, type = "button", icon: Icon2, title, iconClassName, ...props }, ref) => /* @__PURE__ */ jsxs7(
368
913
  "button",
369
914
  {
370
915
  ref,
@@ -376,67 +921,67 @@ var CenteredIconCard = React2.forwardRef(
376
921
  ),
377
922
  ...props,
378
923
  children: [
379
- /* @__PURE__ */ jsx7("span", { className: "flex h-12 w-12 items-center justify-center rounded-xl bg-[var(--color-brand)]/10 text-[var(--color-brand)]", children: /* @__PURE__ */ jsx7(Icon2, { className: cn("h-6 w-6", iconClassName) }) }),
380
- /* @__PURE__ */ jsx7("span", { className: "text-sm font-semibold text-foreground", children: title })
924
+ /* @__PURE__ */ jsx13("span", { className: "flex h-12 w-12 items-center justify-center rounded-xl bg-[var(--color-brand)]/10 text-[var(--color-brand)]", children: /* @__PURE__ */ jsx13(Icon2, { className: cn("h-6 w-6", iconClassName) }) }),
925
+ /* @__PURE__ */ jsx13("span", { className: "text-sm font-semibold text-foreground", children: title })
381
926
  ]
382
927
  }
383
928
  )
384
929
  );
385
930
  CenteredIconCard.displayName = "CenteredIconCard";
386
- var CardHeader = React2.forwardRef(
387
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx7("div", { ref, className: cn("flex flex-col space-y-1.5 p-6", className), ...props })
931
+ var CardHeader = React6.forwardRef(
932
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx13("div", { ref, className: cn("flex flex-col space-y-1.5 p-6", className), ...props })
388
933
  );
389
934
  CardHeader.displayName = "CardHeader";
390
- var CardTitle = React2.forwardRef(
391
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx7("div", { ref, className: cn("text-2xl font-semibold leading-none tracking-tight", className), ...props })
935
+ var CardTitle = React6.forwardRef(
936
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx13("div", { ref, className: cn("text-2xl font-semibold leading-none tracking-tight", className), ...props })
392
937
  );
393
938
  CardTitle.displayName = "CardTitle";
394
- var CardDescription = React2.forwardRef(
395
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx7("div", { ref, className: cn("text-sm text-muted-foreground", className), ...props })
939
+ var CardDescription = React6.forwardRef(
940
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx13("div", { ref, className: cn("text-sm text-muted-foreground", className), ...props })
396
941
  );
397
942
  CardDescription.displayName = "CardDescription";
398
- var CardContent = React2.forwardRef(
399
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx7("div", { ref, className: cn("p-6 pt-0", className), ...props })
943
+ var CardContent = React6.forwardRef(
944
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx13("div", { ref, className: cn("p-6 pt-0", className), ...props })
400
945
  );
401
946
  CardContent.displayName = "CardContent";
402
- var CardFooter = React2.forwardRef(
403
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx7("div", { ref, className: cn("flex items-center p-6 pt-0", className), ...props })
947
+ var CardFooter = React6.forwardRef(
948
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx13("div", { ref, className: cn("flex items-center p-6 pt-0", className), ...props })
404
949
  );
405
950
  CardFooter.displayName = "CardFooter";
406
951
 
407
952
  // src/components/feedback/skeleton.tsx
408
- import { jsx as jsx8 } from "react/jsx-runtime";
953
+ import { jsx as jsx14 } from "react/jsx-runtime";
409
954
  function Skeleton({ className, ...props }) {
410
- return /* @__PURE__ */ jsx8("div", { className: cn("animate-pulse rounded-md bg-muted", className), ...props });
955
+ return /* @__PURE__ */ jsx14("div", { className: cn("animate-pulse rounded-md bg-muted", className), ...props });
411
956
  }
412
957
 
413
958
  // src/components/feedback/spinner.tsx
414
959
  import { Loader2 } from "lucide-react";
415
- import { jsx as jsx9 } from "react/jsx-runtime";
960
+ import { jsx as jsx15 } from "react/jsx-runtime";
416
961
  var sizeMap3 = {
417
962
  sm: "h-4 w-4",
418
963
  md: "h-5 w-5",
419
964
  lg: "h-7 w-7"
420
965
  };
421
966
  function Spinner({ className, size = "md" }) {
422
- return /* @__PURE__ */ jsx9(Loader2, { className: cn("animate-spin text-current", sizeMap3[size], className) });
967
+ return /* @__PURE__ */ jsx15(Loader2, { className: cn("animate-spin text-current", sizeMap3[size], className) });
423
968
  }
424
969
 
425
970
  // src/components/tables/table.tsx
426
- import * as React3 from "react";
427
- import { jsx as jsx10 } from "react/jsx-runtime";
428
- var Table = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx10("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ jsx10("table", { ref, className: cn("w-full caption-bottom text-sm", className), ...props }) }));
971
+ import * as React7 from "react";
972
+ import { jsx as jsx16 } from "react/jsx-runtime";
973
+ var Table = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx16("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ jsx16("table", { ref, className: cn("w-full caption-bottom text-sm", className), ...props }) }));
429
974
  Table.displayName = "Table";
430
- var TableHeader = React3.forwardRef(
431
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx10("thead", { ref, className: cn("[&_tr]:border-b", className), ...props })
975
+ var TableHeader = React7.forwardRef(
976
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx16("thead", { ref, className: cn("[&_tr]:border-b", className), ...props })
432
977
  );
433
978
  TableHeader.displayName = "TableHeader";
434
- var TableBody = React3.forwardRef(
435
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx10("tbody", { ref, className: cn("[&_tr:last-child]:border-0", className), ...props })
979
+ var TableBody = React7.forwardRef(
980
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx16("tbody", { ref, className: cn("[&_tr:last-child]:border-0", className), ...props })
436
981
  );
437
982
  TableBody.displayName = "TableBody";
438
- var TableFooter = React3.forwardRef(
439
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx10(
983
+ var TableFooter = React7.forwardRef(
984
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx16(
440
985
  "tfoot",
441
986
  {
442
987
  ref,
@@ -446,8 +991,8 @@ var TableFooter = React3.forwardRef(
446
991
  )
447
992
  );
448
993
  TableFooter.displayName = "TableFooter";
449
- var TableRow = React3.forwardRef(
450
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx10(
994
+ var TableRow = React7.forwardRef(
995
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx16(
451
996
  "tr",
452
997
  {
453
998
  ref,
@@ -457,8 +1002,8 @@ var TableRow = React3.forwardRef(
457
1002
  )
458
1003
  );
459
1004
  TableRow.displayName = "TableRow";
460
- var TableHead = React3.forwardRef(
461
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx10(
1005
+ var TableHead = React7.forwardRef(
1006
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx16(
462
1007
  "th",
463
1008
  {
464
1009
  ref,
@@ -468,17 +1013,17 @@ var TableHead = React3.forwardRef(
468
1013
  )
469
1014
  );
470
1015
  TableHead.displayName = "TableHead";
471
- var TableCell = React3.forwardRef(
472
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx10("td", { ref, className: cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className), ...props })
1016
+ var TableCell = React7.forwardRef(
1017
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx16("td", { ref, className: cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className), ...props })
473
1018
  );
474
1019
  TableCell.displayName = "TableCell";
475
- var TableCaption = React3.forwardRef(
476
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx10("caption", { ref, className: cn("mt-4 text-sm text-muted-foreground", className), ...props })
1020
+ var TableCaption = React7.forwardRef(
1021
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx16("caption", { ref, className: cn("mt-4 text-sm text-muted-foreground", className), ...props })
477
1022
  );
478
1023
  TableCaption.displayName = "TableCaption";
479
1024
 
480
1025
  // src/components/feedback/loading-state.tsx
481
- import { jsx as jsx11, jsxs as jsxs5 } from "react/jsx-runtime";
1026
+ import { jsx as jsx17, jsxs as jsxs8 } from "react/jsx-runtime";
482
1027
  function LoadingState({
483
1028
  className,
484
1029
  title = "Cargando datos",
@@ -486,86 +1031,92 @@ function LoadingState({
486
1031
  size = "md",
487
1032
  icon
488
1033
  }) {
489
- return /* @__PURE__ */ jsxs5(
1034
+ return /* @__PURE__ */ jsxs8(
490
1035
  "div",
491
1036
  {
492
1037
  role: "status",
493
1038
  "aria-live": "polite",
494
1039
  className: cn("flex items-center gap-3 rounded-xl border border-border bg-card px-4 py-3 text-foreground", className),
495
1040
  children: [
496
- icon ?? /* @__PURE__ */ jsx11(Spinner, { size, className: "text-primary" }),
497
- /* @__PURE__ */ jsxs5("div", { className: "grid gap-0.5", children: [
498
- /* @__PURE__ */ jsx11("p", { className: "text-sm font-medium", children: title }),
499
- /* @__PURE__ */ jsx11("p", { className: "text-xs text-muted-foreground", children: description })
1041
+ icon ?? /* @__PURE__ */ jsx17(Spinner, { size, className: "text-primary" }),
1042
+ /* @__PURE__ */ jsxs8("div", { className: "grid gap-0.5", children: [
1043
+ /* @__PURE__ */ jsx17("p", { className: "text-sm font-medium", children: title }),
1044
+ /* @__PURE__ */ jsx17("p", { className: "text-xs text-muted-foreground", children: description })
500
1045
  ] })
501
1046
  ]
502
1047
  }
503
1048
  );
504
1049
  }
505
1050
  function LoadingCard({ className, rows = 3 }) {
506
- return /* @__PURE__ */ jsx11(Card, { className, children: /* @__PURE__ */ jsxs5(CardContent, { className: "grid gap-3 p-5", children: [
507
- /* @__PURE__ */ jsx11(Skeleton, { className: "h-6 w-40" }),
508
- Array.from({ length: rows }).map((_, index) => /* @__PURE__ */ jsx11(Skeleton, { className: cn("h-4", index === rows - 1 ? "w-2/3" : "w-full") }, index)),
509
- /* @__PURE__ */ jsx11(Skeleton, { className: "mt-1 h-10 w-full rounded-lg" })
1051
+ return /* @__PURE__ */ jsx17(Card, { className, children: /* @__PURE__ */ jsxs8(CardContent, { className: "grid gap-3 p-5", children: [
1052
+ /* @__PURE__ */ jsx17(Skeleton, { className: "h-6 w-40" }),
1053
+ Array.from({ length: rows }).map((_, index) => /* @__PURE__ */ jsx17(Skeleton, { className: cn("h-4", index === rows - 1 ? "w-2/3" : "w-full") }, index)),
1054
+ /* @__PURE__ */ jsx17(Skeleton, { className: "mt-1 h-10 w-full rounded-lg" })
510
1055
  ] }) });
511
1056
  }
512
1057
  function LoadingTableRows({ className, columns = 5, rows = 4 }) {
513
- return /* @__PURE__ */ jsx11("div", { className: cn("rounded-xl border", className), children: /* @__PURE__ */ jsxs5(Table, { children: [
514
- /* @__PURE__ */ jsx11(TableHeader, { children: /* @__PURE__ */ jsx11(TableRow, { children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ jsx11(TableHead, { children: /* @__PURE__ */ jsx11(Skeleton, { className: "h-4 w-20" }) }, index)) }) }),
515
- /* @__PURE__ */ jsx11(TableBody, { children: Array.from({ length: rows }).map((_, rowIndex) => /* @__PURE__ */ jsx11(TableRow, { children: Array.from({ length: columns }).map((_2, columnIndex) => /* @__PURE__ */ jsx11(TableCell, { children: /* @__PURE__ */ jsx11(Skeleton, { className: cn("h-4", columnIndex === 0 ? "w-24" : "w-full") }) }, columnIndex)) }, rowIndex)) })
1058
+ return /* @__PURE__ */ jsx17("div", { className: cn("rounded-xl border", className), children: /* @__PURE__ */ jsxs8(Table, { children: [
1059
+ /* @__PURE__ */ jsx17(TableHeader, { children: /* @__PURE__ */ jsx17(TableRow, { children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ jsx17(TableHead, { children: /* @__PURE__ */ jsx17(Skeleton, { className: "h-4 w-20" }) }, index)) }) }),
1060
+ /* @__PURE__ */ jsx17(TableBody, { children: Array.from({ length: rows }).map((_, rowIndex) => /* @__PURE__ */ jsx17(TableRow, { children: Array.from({ length: columns }).map((_2, columnIndex) => /* @__PURE__ */ jsx17(TableCell, { children: /* @__PURE__ */ jsx17(Skeleton, { className: cn("h-4", columnIndex === 0 ? "w-24" : "w-full") }) }, columnIndex)) }, rowIndex)) })
516
1061
  ] }) });
517
1062
  }
518
1063
 
1064
+ // src/components/feedback/module-skeleton.tsx
1065
+ import { jsx as jsx18, jsxs as jsxs9 } from "react/jsx-runtime";
1066
+ function ModuleSkeleton({
1067
+ className,
1068
+ variant = "cards",
1069
+ cardCount = 6,
1070
+ showHeaderAction = true
1071
+ }) {
1072
+ return /* @__PURE__ */ jsxs9("div", { role: "status", "aria-label": "Cargando modulo", className: cn("grid gap-6 p-6", className), children: [
1073
+ /* @__PURE__ */ jsxs9("div", { className: "flex flex-wrap items-center justify-between gap-4", children: [
1074
+ /* @__PURE__ */ jsxs9("div", { className: "grid gap-2", children: [
1075
+ /* @__PURE__ */ jsx18(Skeleton, { className: "h-8 w-52" }),
1076
+ /* @__PURE__ */ jsx18(Skeleton, { className: "h-4 w-72 max-w-full" })
1077
+ ] }),
1078
+ showHeaderAction ? /* @__PURE__ */ jsx18(Skeleton, { className: "h-10 w-36" }) : null
1079
+ ] }),
1080
+ variant === "cards" ? /* @__PURE__ */ jsx18("div", { className: "grid gap-4 md:grid-cols-2 xl:grid-cols-3", children: Array.from({ length: cardCount }).map((_, index) => /* @__PURE__ */ jsx18(Skeleton, { className: "h-32 w-full rounded-xl" }, index)) }) : null,
1081
+ variant === "table" ? /* @__PURE__ */ jsxs9("div", { className: "rounded-xl border bg-card p-4", children: [
1082
+ /* @__PURE__ */ jsxs9("div", { className: "mb-4 flex flex-wrap gap-3", children: [
1083
+ /* @__PURE__ */ jsx18(Skeleton, { className: "h-10 w-64 max-w-full" }),
1084
+ /* @__PURE__ */ jsx18(Skeleton, { className: "h-10 w-36" })
1085
+ ] }),
1086
+ /* @__PURE__ */ jsxs9("div", { className: "grid gap-3", children: [
1087
+ /* @__PURE__ */ jsx18(Skeleton, { className: "h-10 w-full rounded-lg" }),
1088
+ Array.from({ length: 6 }).map((_, index) => /* @__PURE__ */ jsx18(Skeleton, { className: "h-14 w-full rounded-lg" }, index))
1089
+ ] })
1090
+ ] }) : null,
1091
+ variant === "form" ? /* @__PURE__ */ jsxs9("div", { className: "rounded-xl border bg-card p-5", children: [
1092
+ /* @__PURE__ */ jsxs9("div", { className: "grid gap-5 md:grid-cols-2", children: [
1093
+ Array.from({ length: 6 }).map((_, index) => /* @__PURE__ */ jsxs9("div", { className: "grid gap-2", children: [
1094
+ /* @__PURE__ */ jsx18(Skeleton, { className: "h-4 w-28" }),
1095
+ /* @__PURE__ */ jsx18(Skeleton, { className: "h-10 w-full" })
1096
+ ] }, index)),
1097
+ /* @__PURE__ */ jsxs9("div", { className: "grid gap-2 md:col-span-2", children: [
1098
+ /* @__PURE__ */ jsx18(Skeleton, { className: "h-4 w-32" }),
1099
+ /* @__PURE__ */ jsx18(Skeleton, { className: "h-28 w-full rounded-xl" })
1100
+ ] })
1101
+ ] }),
1102
+ /* @__PURE__ */ jsxs9("div", { className: "mt-6 flex flex-wrap justify-end gap-3", children: [
1103
+ /* @__PURE__ */ jsx18(Skeleton, { className: "h-10 w-24" }),
1104
+ /* @__PURE__ */ jsx18(Skeleton, { className: "h-10 w-36" })
1105
+ ] })
1106
+ ] }) : null
1107
+ ] });
1108
+ }
1109
+
519
1110
  // src/components/feedback/notification.tsx
520
1111
  import { AlertCircle, AlertTriangle, CheckCircle2, Info, Loader2 as Loader22 } from "lucide-react";
521
1112
  import { toast } from "sonner";
522
-
523
- // src/components/primitives/button.tsx
524
- import * as React4 from "react";
525
- import { Slot } from "@radix-ui/react-slot";
526
- import { cva as cva2 } from "class-variance-authority";
527
- import { jsx as jsx12 } from "react/jsx-runtime";
528
- var buttonVariants = cva2(
529
- "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",
530
- {
531
- variants: {
532
- variant: {
533
- default: "bg-primary text-primary-foreground hover:bg-primary/90",
534
- destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
535
- outline: "border border-input bg-background text-foreground hover:bg-accent hover:text-accent-foreground",
536
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
537
- ghost: "text-foreground shadow-none hover:bg-accent hover:text-accent-foreground",
538
- link: "h-auto px-0 py-0 text-primary underline-offset-4 shadow-none hover:underline"
539
- },
540
- size: {
541
- default: "h-10 px-4 py-2",
542
- sm: "h-9 rounded-md px-3",
543
- lg: "h-11 rounded-md px-8",
544
- icon: "h-10 w-10"
545
- }
546
- },
547
- defaultVariants: {
548
- variant: "default",
549
- size: "default"
550
- }
551
- }
552
- );
553
- var Button = React4.forwardRef(
554
- ({ className, variant, size, asChild = false, ...props }, ref) => {
555
- const Comp = asChild ? Slot : "button";
556
- return /* @__PURE__ */ jsx12(Comp, { className: cn(buttonVariants({ variant, size, className })), ref, ...props });
557
- }
558
- );
559
- Button.displayName = "Button";
560
-
561
- // src/components/feedback/notification.tsx
562
- import { jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
1113
+ import { jsx as jsx19, jsxs as jsxs10 } from "react/jsx-runtime";
563
1114
  var notificationStyles = {
564
- info: "bg-[var(--color-info-bg)] text-[var(--color-accent-blue)] border-[var(--color-accent-blue)]/30",
565
- success: "bg-[var(--color-success-bg)] text-[var(--color-success)] border-[var(--color-success)]/30",
566
- warning: "bg-[var(--color-warning-bg)] text-[var(--color-warning)] border-[var(--color-warning)]/30",
567
- danger: "bg-destructive/10 text-destructive border-destructive/30",
568
- loading: "bg-[var(--color-info-bg)] text-[var(--color-accent-blue)] border-[var(--color-accent-blue)]/30"
1115
+ 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)]",
1116
+ 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)]",
1117
+ 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)]",
1118
+ danger: "border-destructive/20 bg-[linear-gradient(135deg,rgba(220,74,65,0.16),rgba(254,242,242,0.96))] text-destructive",
1119
+ 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)]"
569
1120
  };
570
1121
  var notificationIcons = {
571
1122
  info: Info,
@@ -583,20 +1134,24 @@ function NotificationMessage({
583
1134
  icon
584
1135
  }) {
585
1136
  const Icon2 = icon ?? notificationIcons[tone];
586
- return /* @__PURE__ */ jsxs6(
1137
+ return /* @__PURE__ */ jsxs10(
587
1138
  "div",
588
1139
  {
589
1140
  role: "status",
590
- className: cn("flex items-start justify-between gap-3 rounded-lg border px-4 py-3", notificationStyles[tone], className),
1141
+ className: cn(
1142
+ "flex items-start justify-between gap-3 rounded-xl border px-4 py-3 shadow-sm",
1143
+ notificationStyles[tone],
1144
+ className
1145
+ ),
591
1146
  children: [
592
- /* @__PURE__ */ jsxs6("div", { className: "flex items-start gap-3", children: [
593
- /* @__PURE__ */ jsx13(Icon2, { className: cn("mt-0.5 h-4 w-4 shrink-0", tone === "loading" && "animate-spin") }),
594
- /* @__PURE__ */ jsxs6("div", { className: "grid gap-1", children: [
595
- /* @__PURE__ */ jsx13("p", { className: "text-sm font-medium", children: title }),
596
- description ? /* @__PURE__ */ jsx13("div", { className: "text-xs opacity-85", children: description }) : null
1147
+ /* @__PURE__ */ jsxs10("div", { className: "flex items-start gap-3", children: [
1148
+ /* @__PURE__ */ jsx19("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__ */ jsx19(Icon2, { className: cn("h-4 w-4", tone === "loading" && "animate-spin") }) }),
1149
+ /* @__PURE__ */ jsxs10("div", { className: "grid gap-1", children: [
1150
+ /* @__PURE__ */ jsx19("p", { className: "text-sm font-semibold", children: title }),
1151
+ description ? /* @__PURE__ */ jsx19("div", { className: "text-xs leading-5 opacity-90", children: description }) : null
597
1152
  ] })
598
1153
  ] }),
599
- action ? /* @__PURE__ */ jsx13("div", { className: "shrink-0", children: action }) : null
1154
+ action ? /* @__PURE__ */ jsx19("div", { className: "shrink-0", children: action }) : null
600
1155
  ]
601
1156
  }
602
1157
  );
@@ -604,6 +1159,7 @@ function NotificationMessage({
604
1159
  function buildToastOptions(payload) {
605
1160
  return {
606
1161
  description: payload.description,
1162
+ duration: payload.duration,
607
1163
  action: payload.actionLabel ? {
608
1164
  label: payload.actionLabel,
609
1165
  onClick: payload.onAction ?? (() => void 0)
@@ -611,22 +1167,20 @@ function buildToastOptions(payload) {
611
1167
  };
612
1168
  }
613
1169
  var notify = {
614
- info: (payload) => toast(payload.title, buildToastOptions(payload)),
1170
+ info: (payload) => toast.info(payload.title, buildToastOptions(payload)),
615
1171
  success: (payload) => toast.success(payload.title, buildToastOptions(payload)),
616
- warning: (payload) => toast(payload.title, {
617
- ...buildToastOptions(payload),
618
- icon: /* @__PURE__ */ jsx13(AlertTriangle, { className: "h-4 w-4 text-[var(--color-warning)]" })
619
- }),
1172
+ warning: (payload) => toast.warning(payload.title, buildToastOptions(payload)),
620
1173
  danger: (payload) => toast.error(payload.title, buildToastOptions(payload)),
1174
+ error: (payload) => toast.error(payload.title, buildToastOptions(payload)),
621
1175
  loading: (payload) => toast.loading(payload.title, buildToastOptions(payload))
622
1176
  };
623
1177
  function NotificationAction({ children, variant = "outline", size = "sm", ...props }) {
624
- return /* @__PURE__ */ jsx13(Button, { variant, size, ...props, children });
1178
+ return /* @__PURE__ */ jsx19(Button, { variant, size, ...props, children });
625
1179
  }
626
1180
 
627
1181
  // src/components/feedback/status-badge.tsx
628
- import { AlertCircle as AlertCircle2, CheckCircle2 as CheckCircle22, Clock3, Loader2 as Loader23 } from "lucide-react";
629
- import { jsx as jsx14, jsxs as jsxs7 } from "react/jsx-runtime";
1182
+ import { AlertCircle as AlertCircle2, CheckCircle2 as CheckCircle22, Clock3 as Clock32, Loader2 as Loader23 } from "lucide-react";
1183
+ import { jsx as jsx20, jsxs as jsxs11 } from "react/jsx-runtime";
630
1184
  var toneStyles2 = {
631
1185
  success: "border-transparent bg-[var(--color-success-bg)] text-[var(--color-success)]",
632
1186
  warning: "border-transparent bg-[var(--color-warning-bg)] text-[var(--color-warning)]",
@@ -636,14 +1190,14 @@ var toneStyles2 = {
636
1190
  };
637
1191
  var toneIcons = {
638
1192
  success: CheckCircle22,
639
- warning: Clock3,
1193
+ warning: Clock32,
640
1194
  danger: AlertCircle2,
641
1195
  info: CheckCircle22,
642
1196
  loading: Loader23
643
1197
  };
644
1198
  function StatusBadge({ children, tone = "info", className }) {
645
1199
  const Icon2 = toneIcons[tone];
646
- return /* @__PURE__ */ jsxs7(
1200
+ return /* @__PURE__ */ jsxs11(
647
1201
  "span",
648
1202
  {
649
1203
  className: cn(
@@ -652,30 +1206,146 @@ function StatusBadge({ children, tone = "info", className }) {
652
1206
  className
653
1207
  ),
654
1208
  children: [
655
- /* @__PURE__ */ jsx14(Icon2, { className: cn("h-3.5 w-3.5", tone === "loading" && "animate-spin") }),
1209
+ /* @__PURE__ */ jsx20(Icon2, { className: cn("h-3.5 w-3.5", tone === "loading" && "animate-spin") }),
656
1210
  children
657
1211
  ]
658
1212
  }
659
1213
  );
660
1214
  }
661
1215
 
1216
+ // src/components/feedback/sync-status-badge.tsx
1217
+ import { AlertCircle as AlertCircle3, CheckCircle2 as CheckCircle23, Clock3 as Clock33, Loader2 as Loader24, WifiOff } from "lucide-react";
1218
+ import { jsx as jsx21, jsxs as jsxs12 } from "react/jsx-runtime";
1219
+ var badgeStyles = {
1220
+ synced: "border-transparent bg-[var(--color-success-bg)] text-[var(--color-success)]",
1221
+ pending: "border-transparent bg-[var(--color-warning-bg)] text-[var(--color-warning)]",
1222
+ syncing: "border-transparent bg-[var(--color-info-bg)] text-[var(--color-accent-blue)]",
1223
+ conflict: "border-transparent bg-destructive/10 text-destructive",
1224
+ offline: "border-transparent bg-muted text-muted-foreground"
1225
+ };
1226
+ var badgeIcons = {
1227
+ synced: CheckCircle23,
1228
+ pending: Clock33,
1229
+ syncing: Loader24,
1230
+ conflict: AlertCircle3,
1231
+ offline: WifiOff
1232
+ };
1233
+ var badgeLabels = {
1234
+ synced: "Sincronizado",
1235
+ pending: "Pendiente",
1236
+ syncing: "Sincronizando",
1237
+ conflict: "Conflicto",
1238
+ offline: "Offline"
1239
+ };
1240
+ function SyncStatusBadge({ className, status, label }) {
1241
+ const Icon2 = badgeIcons[status];
1242
+ return /* @__PURE__ */ jsxs12(
1243
+ "span",
1244
+ {
1245
+ className: cn(
1246
+ "inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs font-medium",
1247
+ badgeStyles[status],
1248
+ className
1249
+ ),
1250
+ children: [
1251
+ /* @__PURE__ */ jsx21(Icon2, { className: cn("h-3.5 w-3.5", status === "syncing" && "animate-spin") }),
1252
+ label ?? badgeLabels[status]
1253
+ ]
1254
+ }
1255
+ );
1256
+ }
1257
+
1258
+ // src/components/feedback/sync-status-bar.tsx
1259
+ import { AlertTriangle as AlertTriangle2, CheckCircle2 as CheckCircle24, Loader2 as Loader25, RefreshCw, WifiOff as WifiOff2 } from "lucide-react";
1260
+ import { jsx as jsx22, jsxs as jsxs13 } from "react/jsx-runtime";
1261
+ function pluralize(count, singular, plural) {
1262
+ return `${count} ${count === 1 ? singular : plural}`;
1263
+ }
1264
+ function SyncStatusBar({
1265
+ className,
1266
+ state,
1267
+ pendingCount = 0,
1268
+ errorCount = 0,
1269
+ syncingCount = 0,
1270
+ onClick,
1271
+ label
1272
+ }) {
1273
+ const config = {
1274
+ conflict: {
1275
+ icon: AlertTriangle2,
1276
+ text: label ?? `${pluralize(errorCount || 1, "operacion", "operaciones")} con error`,
1277
+ className: "bg-destructive/15 text-destructive"
1278
+ },
1279
+ offline: {
1280
+ icon: WifiOff2,
1281
+ text: label ?? (pendingCount > 0 ? `Offline \xB7 ${pluralize(pendingCount, "pendiente", "pendientes")}` : "Offline \xB7 sin pendientes"),
1282
+ className: "bg-[var(--color-warning-bg)] text-[var(--color-warning)]"
1283
+ },
1284
+ syncing: {
1285
+ icon: Loader25,
1286
+ text: label ?? `Sincronizando ${pluralize(syncingCount || 1, "operacion", "operaciones")}...`,
1287
+ className: "bg-[var(--color-info-bg)] text-[var(--color-accent-blue)]",
1288
+ spinning: true
1289
+ },
1290
+ pending: {
1291
+ icon: RefreshCw,
1292
+ text: label ?? `${pluralize(pendingCount || 1, "pendiente", "pendientes")} por sincronizar`,
1293
+ className: "bg-[var(--color-warning-bg)] text-[var(--color-warning)]"
1294
+ },
1295
+ synced: {
1296
+ icon: CheckCircle24,
1297
+ text: label ?? "Todo sincronizado",
1298
+ className: "bg-[var(--color-success-bg)] text-[var(--color-success)]"
1299
+ }
1300
+ };
1301
+ const current = config[state];
1302
+ const Icon2 = current.icon;
1303
+ const isClickable = typeof onClick === "function";
1304
+ const Component = isClickable ? "button" : "div";
1305
+ return /* @__PURE__ */ jsxs13(
1306
+ Component,
1307
+ {
1308
+ ...isClickable ? { type: "button", onClick } : {},
1309
+ className: cn(
1310
+ "flex h-8 w-full items-center justify-center gap-1.5 px-4 text-xs font-medium transition-opacity",
1311
+ current.className,
1312
+ isClickable ? "cursor-pointer hover:opacity-85 active:opacity-70" : "cursor-default",
1313
+ className
1314
+ ),
1315
+ children: [
1316
+ /* @__PURE__ */ jsx22(Icon2, { className: cn("h-3.5 w-3.5", current.spinning && "animate-spin") }),
1317
+ /* @__PURE__ */ jsx22("span", { children: current.text }),
1318
+ isClickable ? /* @__PURE__ */ jsx22("span", { className: "ml-1 text-[10px] opacity-60", children: "\u2192" }) : null
1319
+ ]
1320
+ }
1321
+ );
1322
+ }
1323
+
662
1324
  // src/components/feedback/toaster.tsx
1325
+ import { LoaderCircle } from "lucide-react";
663
1326
  import { Toaster as Sonner } from "sonner";
664
- import { jsx as jsx15 } from "react/jsx-runtime";
1327
+ import { jsx as jsx23 } from "react/jsx-runtime";
665
1328
  function Toaster(props) {
666
1329
  const { resolvedTheme } = useTheme();
667
- return /* @__PURE__ */ jsx15(
1330
+ return /* @__PURE__ */ jsx23(
668
1331
  Sonner,
669
1332
  {
670
1333
  theme: resolvedTheme,
1334
+ position: "top-right",
1335
+ richColors: true,
671
1336
  className: "toaster group",
1337
+ icons: {
1338
+ loading: /* @__PURE__ */ jsx23(LoaderCircle, { className: "h-4 w-4 animate-spin" })
1339
+ },
672
1340
  closeButton: true,
673
1341
  toastOptions: {
674
1342
  classNames: {
675
- toast: "group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",
1343
+ 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",
1344
+ title: "text-sm font-semibold",
676
1345
  description: "group-[.toast]:text-muted-foreground",
677
- actionButton: "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",
678
- cancelButton: "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"
1346
+ actionButton: "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground group-[.toast]:rounded-md",
1347
+ cancelButton: "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground group-[.toast]:rounded-md",
1348
+ 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"
679
1349
  }
680
1350
  },
681
1351
  ...props
@@ -684,15 +1354,15 @@ function Toaster(props) {
684
1354
  }
685
1355
 
686
1356
  // src/components/forms/searchable-select.tsx
687
- import * as React6 from "react";
688
- import { Check, ChevronDown, ChevronUp, Loader2 as Loader24, Search } from "lucide-react";
1357
+ import * as React9 from "react";
1358
+ import { Check, ChevronDown, ChevronUp, Loader2 as Loader26, Search } from "lucide-react";
689
1359
 
690
1360
  // src/components/primitives/input.tsx
691
- import * as React5 from "react";
692
- import { jsx as jsx16 } from "react/jsx-runtime";
693
- var Input = React5.forwardRef(
1361
+ import * as React8 from "react";
1362
+ import { jsx as jsx24 } from "react/jsx-runtime";
1363
+ var Input = React8.forwardRef(
694
1364
  ({ className, type, ...props }, ref) => {
695
- return /* @__PURE__ */ jsx16(
1365
+ return /* @__PURE__ */ jsx24(
696
1366
  "input",
697
1367
  {
698
1368
  type,
@@ -709,11 +1379,11 @@ var Input = React5.forwardRef(
709
1379
  Input.displayName = "Input";
710
1380
 
711
1381
  // src/components/forms/searchable-select.tsx
712
- import { jsx as jsx17, jsxs as jsxs8 } from "react/jsx-runtime";
1382
+ import { jsx as jsx25, jsxs as jsxs14 } from "react/jsx-runtime";
713
1383
  function normalize(str) {
714
1384
  return str.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
715
1385
  }
716
- var SearchableSelect = React6.forwardRef(
1386
+ var SearchableSelect = React9.forwardRef(
717
1387
  ({
718
1388
  options: options2,
719
1389
  value,
@@ -726,12 +1396,12 @@ var SearchableSelect = React6.forwardRef(
726
1396
  id,
727
1397
  className
728
1398
  }, ref) => {
729
- const [open, setOpen] = React6.useState(false);
730
- const [search, setSearch] = React6.useState("");
731
- const wrapperRef = React6.useRef(null);
732
- const searchRef = React6.useRef(null);
733
- const selected = React6.useMemo(() => options2.find((option) => option.value === value) ?? null, [options2, value]);
734
- const filtered = React6.useMemo(() => {
1399
+ const [open, setOpen] = React9.useState(false);
1400
+ const [search, setSearch] = React9.useState("");
1401
+ const wrapperRef = React9.useRef(null);
1402
+ const searchRef = React9.useRef(null);
1403
+ const selected = React9.useMemo(() => options2.find((option) => option.value === value) ?? null, [options2, value]);
1404
+ const filtered = React9.useMemo(() => {
735
1405
  if (!search.trim()) {
736
1406
  return options2;
737
1407
  }
@@ -757,7 +1427,7 @@ var SearchableSelect = React6.forwardRef(
757
1427
  setSearch("");
758
1428
  }
759
1429
  }
760
- React6.useEffect(() => {
1430
+ React9.useEffect(() => {
761
1431
  if (!open) {
762
1432
  return;
763
1433
  }
@@ -770,15 +1440,15 @@ var SearchableSelect = React6.forwardRef(
770
1440
  document.addEventListener("mousedown", handleMouseDown);
771
1441
  return () => document.removeEventListener("mousedown", handleMouseDown);
772
1442
  }, [open]);
773
- React6.useEffect(() => {
1443
+ React9.useEffect(() => {
774
1444
  if (!open) {
775
1445
  return;
776
1446
  }
777
1447
  const timer = setTimeout(() => searchRef.current?.focus(), 50);
778
1448
  return () => clearTimeout(timer);
779
1449
  }, [open]);
780
- return /* @__PURE__ */ jsxs8("div", { ref: wrapperRef, className: cn("relative w-full", className), onKeyDown: handleKeyDown, children: [
781
- /* @__PURE__ */ jsxs8(
1450
+ return /* @__PURE__ */ jsxs14("div", { ref: wrapperRef, className: cn("relative w-full", className), onKeyDown: handleKeyDown, children: [
1451
+ /* @__PURE__ */ jsxs14(
782
1452
  "button",
783
1453
  {
784
1454
  ref,
@@ -793,26 +1463,26 @@ var SearchableSelect = React6.forwardRef(
793
1463
  "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"
794
1464
  ),
795
1465
  children: [
796
- loading ? /* @__PURE__ */ jsxs8("span", { className: "flex items-center gap-2 text-muted-foreground", children: [
797
- /* @__PURE__ */ jsx17(Loader24, { className: "h-4 w-4 animate-spin" }),
1466
+ loading ? /* @__PURE__ */ jsxs14("span", { className: "flex items-center gap-2 text-muted-foreground", children: [
1467
+ /* @__PURE__ */ jsx25(Loader26, { className: "h-4 w-4 animate-spin" }),
798
1468
  "Loading..."
799
- ] }) : selected ? /* @__PURE__ */ jsxs8("span", { className: "flex items-center gap-2 truncate", children: [
800
- selected.sublabel ? /* @__PURE__ */ jsx17("span", { className: "shrink-0 font-mono text-xs text-muted-foreground", children: selected.sublabel }) : null,
801
- /* @__PURE__ */ jsx17("span", { className: "truncate", children: selected.label })
802
- ] }) : /* @__PURE__ */ jsx17("span", { className: "text-muted-foreground", children: placeholder }),
803
- /* @__PURE__ */ jsx17("span", { className: "ml-2 shrink-0 opacity-50", children: open ? /* @__PURE__ */ jsx17(ChevronUp, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx17(ChevronDown, { className: "h-4 w-4" }) })
1469
+ ] }) : selected ? /* @__PURE__ */ jsxs14("span", { className: "flex items-center gap-2 truncate", children: [
1470
+ selected.sublabel ? /* @__PURE__ */ jsx25("span", { className: "shrink-0 font-mono text-xs text-muted-foreground", children: selected.sublabel }) : null,
1471
+ /* @__PURE__ */ jsx25("span", { className: "truncate", children: selected.label })
1472
+ ] }) : /* @__PURE__ */ jsx25("span", { className: "text-muted-foreground", children: placeholder }),
1473
+ /* @__PURE__ */ jsx25("span", { className: "ml-2 shrink-0 opacity-50", children: open ? /* @__PURE__ */ jsx25(ChevronUp, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx25(ChevronDown, { className: "h-4 w-4" }) })
804
1474
  ]
805
1475
  }
806
1476
  ),
807
- open ? /* @__PURE__ */ jsxs8(
1477
+ open ? /* @__PURE__ */ jsxs14(
808
1478
  "div",
809
1479
  {
810
1480
  role: "listbox",
811
1481
  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",
812
1482
  children: [
813
- /* @__PURE__ */ jsxs8("div", { className: "sticky top-0 flex items-center gap-2 border-b border-border bg-popover px-3 py-2", children: [
814
- /* @__PURE__ */ jsx17(Search, { className: "h-4 w-4 shrink-0 text-muted-foreground" }),
815
- /* @__PURE__ */ jsx17(
1483
+ /* @__PURE__ */ jsxs14("div", { className: "sticky top-0 flex items-center gap-2 border-b border-border bg-popover px-3 py-2", children: [
1484
+ /* @__PURE__ */ jsx25(Search, { className: "h-4 w-4 shrink-0 text-muted-foreground" }),
1485
+ /* @__PURE__ */ jsx25(
816
1486
  Input,
817
1487
  {
818
1488
  ref: searchRef,
@@ -824,9 +1494,9 @@ var SearchableSelect = React6.forwardRef(
824
1494
  }
825
1495
  )
826
1496
  ] }),
827
- /* @__PURE__ */ jsx17("ul", { className: "max-h-60 overflow-y-auto overscroll-contain p-1", children: filtered.length === 0 ? /* @__PURE__ */ jsx17("li", { className: "px-4 py-3 text-center text-xs text-muted-foreground", children: emptyMessage }) : filtered.map((option) => {
1497
+ /* @__PURE__ */ jsx25("ul", { className: "max-h-60 overflow-y-auto overscroll-contain p-1", children: filtered.length === 0 ? /* @__PURE__ */ jsx25("li", { className: "px-4 py-3 text-center text-xs text-muted-foreground", children: emptyMessage }) : filtered.map((option) => {
828
1498
  const isSelected = option.value === value;
829
- return /* @__PURE__ */ jsxs8(
1499
+ return /* @__PURE__ */ jsxs14(
830
1500
  "li",
831
1501
  {
832
1502
  role: "option",
@@ -837,10 +1507,10 @@ var SearchableSelect = React6.forwardRef(
837
1507
  isSelected && "bg-accent/50 font-medium"
838
1508
  ),
839
1509
  children: [
840
- /* @__PURE__ */ jsx17("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: isSelected ? /* @__PURE__ */ jsx17(Check, { className: "h-4 w-4" }) : null }),
841
- /* @__PURE__ */ jsxs8("span", { className: "flex items-center gap-2 truncate", children: [
842
- option.sublabel ? /* @__PURE__ */ jsx17("span", { className: "shrink-0 font-mono text-xs text-muted-foreground", children: option.sublabel }) : null,
843
- /* @__PURE__ */ jsx17("span", { className: "truncate", children: option.label })
1510
+ /* @__PURE__ */ jsx25("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: isSelected ? /* @__PURE__ */ jsx25(Check, { className: "h-4 w-4" }) : null }),
1511
+ /* @__PURE__ */ jsxs14("span", { className: "flex items-center gap-2 truncate", children: [
1512
+ option.sublabel ? /* @__PURE__ */ jsx25("span", { className: "shrink-0 font-mono text-xs text-muted-foreground", children: option.sublabel }) : null,
1513
+ /* @__PURE__ */ jsx25("span", { className: "truncate", children: option.label })
844
1514
  ] })
845
1515
  ]
846
1516
  },
@@ -856,14 +1526,14 @@ var SearchableSelect = React6.forwardRef(
856
1526
  SearchableSelect.displayName = "SearchableSelect";
857
1527
 
858
1528
  // src/components/forms/select.tsx
859
- import * as React7 from "react";
1529
+ import * as React10 from "react";
860
1530
  import * as SelectPrimitive from "@radix-ui/react-select";
861
1531
  import { Check as Check2, ChevronDown as ChevronDown2, ChevronUp as ChevronUp2 } from "lucide-react";
862
- import { jsx as jsx18, jsxs as jsxs9 } from "react/jsx-runtime";
1532
+ import { jsx as jsx26, jsxs as jsxs15 } from "react/jsx-runtime";
863
1533
  var Select = SelectPrimitive.Root;
864
1534
  var SelectGroup = SelectPrimitive.Group;
865
1535
  var SelectValue = SelectPrimitive.Value;
866
- var SelectTrigger = React7.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs9(
1536
+ var SelectTrigger = React10.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs15(
867
1537
  SelectPrimitive.Trigger,
868
1538
  {
869
1539
  ref,
@@ -874,24 +1544,24 @@ var SelectTrigger = React7.forwardRef(({ className, children, ...props }, ref) =
874
1544
  ...props,
875
1545
  children: [
876
1546
  children,
877
- /* @__PURE__ */ jsx18(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx18(ChevronDown2, { className: "h-4 w-4 opacity-50" }) })
1547
+ /* @__PURE__ */ jsx26(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx26(ChevronDown2, { className: "h-4 w-4 opacity-50" }) })
878
1548
  ]
879
1549
  }
880
1550
  ));
881
1551
  SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
882
- var SelectScrollUpButton = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx18(SelectPrimitive.ScrollUpButton, { ref, className: cn("flex cursor-default items-center justify-center py-1", className), ...props, children: /* @__PURE__ */ jsx18(ChevronUp2, { className: "h-4 w-4" }) }));
1552
+ var SelectScrollUpButton = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx26(SelectPrimitive.ScrollUpButton, { ref, className: cn("flex cursor-default items-center justify-center py-1", className), ...props, children: /* @__PURE__ */ jsx26(ChevronUp2, { className: "h-4 w-4" }) }));
883
1553
  SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
884
- var SelectScrollDownButton = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx18(
1554
+ var SelectScrollDownButton = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx26(
885
1555
  SelectPrimitive.ScrollDownButton,
886
1556
  {
887
1557
  ref,
888
1558
  className: cn("flex cursor-default items-center justify-center py-1", className),
889
1559
  ...props,
890
- children: /* @__PURE__ */ jsx18(ChevronDown2, { className: "h-4 w-4" })
1560
+ children: /* @__PURE__ */ jsx26(ChevronDown2, { className: "h-4 w-4" })
891
1561
  }
892
1562
  ));
893
1563
  SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
894
- var SelectContent = React7.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx18(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs9(
1564
+ var SelectContent = React10.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx26(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs15(
895
1565
  SelectPrimitive.Content,
896
1566
  {
897
1567
  ref,
@@ -903,8 +1573,8 @@ var SelectContent = React7.forwardRef(({ className, children, position = "popper
903
1573
  position,
904
1574
  ...props,
905
1575
  children: [
906
- /* @__PURE__ */ jsx18(SelectScrollUpButton, {}),
907
- /* @__PURE__ */ jsx18(
1576
+ /* @__PURE__ */ jsx26(SelectScrollUpButton, {}),
1577
+ /* @__PURE__ */ jsx26(
908
1578
  SelectPrimitive.Viewport,
909
1579
  {
910
1580
  className: cn(
@@ -914,14 +1584,14 @@ var SelectContent = React7.forwardRef(({ className, children, position = "popper
914
1584
  children
915
1585
  }
916
1586
  ),
917
- /* @__PURE__ */ jsx18(SelectScrollDownButton, {})
1587
+ /* @__PURE__ */ jsx26(SelectScrollDownButton, {})
918
1588
  ]
919
1589
  }
920
1590
  ) }));
921
1591
  SelectContent.displayName = SelectPrimitive.Content.displayName;
922
- var SelectLabel = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx18(SelectPrimitive.Label, { ref, className: cn("py-1.5 pl-8 pr-2 text-sm font-semibold", className), ...props }));
1592
+ var SelectLabel = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx26(SelectPrimitive.Label, { ref, className: cn("py-1.5 pl-8 pr-2 text-sm font-semibold", className), ...props }));
923
1593
  SelectLabel.displayName = SelectPrimitive.Label.displayName;
924
- var SelectItem = React7.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs9(
1594
+ var SelectItem = React10.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs15(
925
1595
  SelectPrimitive.Item,
926
1596
  {
927
1597
  ref,
@@ -931,80 +1601,80 @@ var SelectItem = React7.forwardRef(({ className, children, ...props }, ref) => /
931
1601
  ),
932
1602
  ...props,
933
1603
  children: [
934
- /* @__PURE__ */ jsx18("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx18(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx18(Check2, { className: "h-4 w-4" }) }) }),
935
- /* @__PURE__ */ jsx18(SelectPrimitive.ItemText, { children })
1604
+ /* @__PURE__ */ jsx26("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx26(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx26(Check2, { className: "h-4 w-4" }) }) }),
1605
+ /* @__PURE__ */ jsx26(SelectPrimitive.ItemText, { children })
936
1606
  ]
937
1607
  }
938
1608
  ));
939
1609
  SelectItem.displayName = SelectPrimitive.Item.displayName;
940
- var SelectSeparator = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx18(SelectPrimitive.Separator, { ref, className: cn("-mx-1 my-1 h-px bg-muted", className), ...props }));
1610
+ var SelectSeparator = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx26(SelectPrimitive.Separator, { ref, className: cn("-mx-1 my-1 h-px bg-muted", className), ...props }));
941
1611
  SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
942
1612
 
943
1613
  // src/components/layout/app-shell.tsx
944
1614
  import { useState as useState3 } from "react";
945
1615
 
946
1616
  // src/components/overlays/drawer.tsx
947
- import * as React8 from "react";
1617
+ import * as React11 from "react";
948
1618
  import { Drawer as DrawerPrimitive } from "vaul";
949
- import { jsx as jsx19, jsxs as jsxs10 } from "react/jsx-runtime";
950
- var Drawer = ({ shouldScaleBackground = true, ...props }) => /* @__PURE__ */ jsx19(DrawerPrimitive.Root, { shouldScaleBackground, ...props });
1619
+ import { jsx as jsx27, jsxs as jsxs16 } from "react/jsx-runtime";
1620
+ var Drawer = ({ shouldScaleBackground = true, ...props }) => /* @__PURE__ */ jsx27(DrawerPrimitive.Root, { shouldScaleBackground, ...props });
951
1621
  Drawer.displayName = "Drawer";
952
1622
  var DrawerTrigger = DrawerPrimitive.Trigger;
953
1623
  var DrawerPortal = DrawerPrimitive.Portal;
954
1624
  var DrawerClose = DrawerPrimitive.Close;
955
- var DrawerOverlay = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(DrawerPrimitive.Overlay, { ref, className: cn("fixed inset-0 z-50 bg-black/80", className), ...props }));
1625
+ var DrawerOverlay = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx27(DrawerPrimitive.Overlay, { ref, className: cn("fixed inset-0 z-50 bg-black/80", className), ...props }));
956
1626
  DrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName;
957
- var DrawerContent = React8.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs10(DrawerPortal, { children: [
958
- /* @__PURE__ */ jsx19(DrawerOverlay, {}),
959
- /* @__PURE__ */ jsxs10(
1627
+ var DrawerContent = React11.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs16(DrawerPortal, { children: [
1628
+ /* @__PURE__ */ jsx27(DrawerOverlay, {}),
1629
+ /* @__PURE__ */ jsxs16(
960
1630
  DrawerPrimitive.Content,
961
1631
  {
962
1632
  ref,
963
1633
  className: cn("fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-[10px] border bg-background", className),
964
1634
  ...props,
965
1635
  children: [
966
- /* @__PURE__ */ jsx19("div", { className: "mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted" }),
1636
+ /* @__PURE__ */ jsx27("div", { className: "mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted" }),
967
1637
  children
968
1638
  ]
969
1639
  }
970
1640
  )
971
1641
  ] }));
972
1642
  DrawerContent.displayName = "DrawerContent";
973
- var DrawerHeader = ({ className, ...props }) => /* @__PURE__ */ jsx19("div", { className: cn("grid gap-1.5 p-4 text-center sm:text-left", className), ...props });
1643
+ var DrawerHeader = ({ className, ...props }) => /* @__PURE__ */ jsx27("div", { className: cn("grid gap-1.5 p-4 text-center sm:text-left", className), ...props });
974
1644
  DrawerHeader.displayName = "DrawerHeader";
975
- var DrawerFooter = ({ className, ...props }) => /* @__PURE__ */ jsx19("div", { className: cn("mt-auto flex flex-col gap-2 p-4", className), ...props });
1645
+ var DrawerFooter = ({ className, ...props }) => /* @__PURE__ */ jsx27("div", { className: cn("mt-auto flex flex-col gap-2 p-4", className), ...props });
976
1646
  DrawerFooter.displayName = "DrawerFooter";
977
- var DrawerTitle = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(DrawerPrimitive.Title, { ref, className: cn("text-lg font-semibold leading-none tracking-tight", className), ...props }));
1647
+ var DrawerTitle = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx27(DrawerPrimitive.Title, { ref, className: cn("text-lg font-semibold leading-none tracking-tight", className), ...props }));
978
1648
  DrawerTitle.displayName = DrawerPrimitive.Title.displayName;
979
- var DrawerDescription = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx19(DrawerPrimitive.Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
1649
+ var DrawerDescription = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx27(DrawerPrimitive.Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
980
1650
  DrawerDescription.displayName = DrawerPrimitive.Description.displayName;
981
1651
 
982
1652
  // src/components/navigation/navbar.tsx
983
1653
  import { Menu } from "lucide-react";
984
- import { jsx as jsx20, jsxs as jsxs11 } from "react/jsx-runtime";
1654
+ import { jsx as jsx28, jsxs as jsxs17 } from "react/jsx-runtime";
985
1655
  function Navbar({ brand, actions, onMenuClick, className }) {
986
- return /* @__PURE__ */ jsx20("header", { className: cn("h-14 shrink-0 border-b border-border bg-card/80 px-4 backdrop-blur-sm", className), children: /* @__PURE__ */ jsxs11("div", { className: "mx-auto flex h-full w-full max-w-7xl items-center justify-between gap-3", children: [
987
- /* @__PURE__ */ jsxs11("div", { className: "flex min-w-0 flex-1 items-center gap-3", children: [
988
- onMenuClick ? /* @__PURE__ */ jsx20(Button, { type: "button", variant: "ghost", size: "icon", onClick: onMenuClick, "aria-label": "Open navigation", children: /* @__PURE__ */ jsx20(Menu, { size: 20 }) }) : null,
1656
+ return /* @__PURE__ */ jsx28("header", { className: cn("h-14 shrink-0 border-b border-border bg-card/80 px-4 backdrop-blur-sm", className), children: /* @__PURE__ */ jsxs17("div", { className: "mx-auto flex h-full w-full max-w-7xl items-center justify-between gap-3", children: [
1657
+ /* @__PURE__ */ jsxs17("div", { className: "flex min-w-0 flex-1 items-center gap-3", children: [
1658
+ onMenuClick ? /* @__PURE__ */ jsx28(Button, { type: "button", variant: "ghost", size: "icon", onClick: onMenuClick, "aria-label": "Open navigation", children: /* @__PURE__ */ jsx28(Menu, { size: 20 }) }) : null,
989
1659
  brand
990
1660
  ] }),
991
- actions ? /* @__PURE__ */ jsx20("div", { className: "flex shrink-0 items-center gap-3", children: actions }) : null
1661
+ actions ? /* @__PURE__ */ jsx28("div", { className: "flex shrink-0 items-center gap-3", children: actions }) : null
992
1662
  ] }) });
993
1663
  }
994
1664
 
995
1665
  // src/components/navigation/sidebar.tsx
996
- import { jsx as jsx21, jsxs as jsxs12 } from "react/jsx-runtime";
1666
+ import { jsx as jsx29, jsxs as jsxs18 } from "react/jsx-runtime";
997
1667
  function getInitials2(name) {
998
1668
  return name.trim().split(" ").filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase() ?? "").join("");
999
1669
  }
1000
1670
  function Sidebar({ brand, groups, user, footerAction, className }) {
1001
- return /* @__PURE__ */ jsxs12("aside", { className: cn("flex h-full w-72 max-w-[85vw] flex-col border-r border-border bg-background", className), children: [
1002
- /* @__PURE__ */ jsx21("div", { className: "border-b border-border px-5 py-4", children: brand }),
1003
- /* @__PURE__ */ jsx21("nav", { className: "flex-1 space-y-6 overflow-y-auto px-3 py-4", children: groups.map((group) => /* @__PURE__ */ jsxs12("div", { children: [
1004
- /* @__PURE__ */ jsx21("p", { className: "mb-2 px-2 text-xs font-semibold uppercase tracking-widest text-muted-foreground", children: group.label }),
1005
- /* @__PURE__ */ jsx21("ul", { className: "space-y-0.5", children: group.items.map((item) => {
1671
+ return /* @__PURE__ */ jsxs18("aside", { className: cn("flex h-full w-72 max-w-[85vw] flex-col border-r border-border bg-background", className), children: [
1672
+ /* @__PURE__ */ jsx29("div", { className: "border-b border-border px-5 py-4", children: brand }),
1673
+ /* @__PURE__ */ jsx29("nav", { className: "flex-1 space-y-6 overflow-y-auto px-3 py-4", children: groups.map((group) => /* @__PURE__ */ jsxs18("div", { children: [
1674
+ /* @__PURE__ */ jsx29("p", { className: "mb-2 px-2 text-xs font-semibold uppercase tracking-widest text-muted-foreground", children: group.label }),
1675
+ /* @__PURE__ */ jsx29("ul", { className: "space-y-0.5", children: group.items.map((item) => {
1006
1676
  const Icon2 = item.icon;
1007
- return /* @__PURE__ */ jsx21("li", { children: /* @__PURE__ */ jsxs12(
1677
+ return /* @__PURE__ */ jsx29("li", { children: /* @__PURE__ */ jsxs18(
1008
1678
  "a",
1009
1679
  {
1010
1680
  href: item.href,
@@ -1014,26 +1684,26 @@ function Sidebar({ brand, groups, user, footerAction, className }) {
1014
1684
  item.active ? "bg-primary text-primary-foreground" : "text-foreground hover:bg-accent hover:text-accent-foreground"
1015
1685
  ),
1016
1686
  children: [
1017
- Icon2 ? /* @__PURE__ */ jsx21(Icon2, { size: 17, className: "shrink-0" }) : null,
1018
- /* @__PURE__ */ jsx21("span", { className: "flex-1", children: item.label })
1687
+ Icon2 ? /* @__PURE__ */ jsx29(Icon2, { size: 17, className: "shrink-0" }) : null,
1688
+ /* @__PURE__ */ jsx29("span", { className: "flex-1", children: item.label })
1019
1689
  ]
1020
1690
  }
1021
1691
  ) }, `${group.label}-${item.label}`);
1022
1692
  }) })
1023
1693
  ] }, group.label)) }),
1024
- user ? /* @__PURE__ */ jsx21("div", { className: "border-t border-border px-5 py-4", children: /* @__PURE__ */ jsxs12("div", { className: "flex items-center gap-3", children: [
1025
- /* @__PURE__ */ jsx21(Avatar, { className: "h-9 w-9 shrink-0", children: /* @__PURE__ */ jsx21(AvatarFallback, { className: "bg-primary text-xs font-semibold text-primary-foreground", children: user.initials ?? getInitials2(user.name) }) }),
1026
- /* @__PURE__ */ jsxs12("div", { className: "min-w-0 flex-1", children: [
1027
- /* @__PURE__ */ jsx21("p", { className: "truncate text-sm font-medium text-foreground", children: user.name }),
1028
- user.role ? /* @__PURE__ */ jsx21("p", { className: "truncate text-xs text-muted-foreground", children: user.role }) : null
1694
+ user ? /* @__PURE__ */ jsx29("div", { className: "border-t border-border px-5 py-4", children: /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-3", children: [
1695
+ /* @__PURE__ */ jsx29(Avatar, { className: "h-9 w-9 shrink-0", children: /* @__PURE__ */ jsx29(AvatarFallback, { className: "bg-primary text-xs font-semibold text-primary-foreground", children: user.initials ?? getInitials2(user.name) }) }),
1696
+ /* @__PURE__ */ jsxs18("div", { className: "min-w-0 flex-1", children: [
1697
+ /* @__PURE__ */ jsx29("p", { className: "truncate text-sm font-medium text-foreground", children: user.name }),
1698
+ user.role ? /* @__PURE__ */ jsx29("p", { className: "truncate text-xs text-muted-foreground", children: user.role }) : null
1029
1699
  ] }),
1030
- footerAction ? /* @__PURE__ */ jsx21(Button, { type: "button", variant: "ghost", size: "sm", onClick: footerAction.onClick, children: footerAction.label }) : null
1700
+ footerAction ? /* @__PURE__ */ jsx29(Button, { type: "button", variant: "ghost", size: "sm", onClick: footerAction.onClick, children: footerAction.label }) : null
1031
1701
  ] }) }) : null
1032
1702
  ] });
1033
1703
  }
1034
1704
 
1035
1705
  // src/components/layout/app-shell.tsx
1036
- import { jsx as jsx22, jsxs as jsxs13 } from "react/jsx-runtime";
1706
+ import { jsx as jsx30, jsxs as jsxs19 } from "react/jsx-runtime";
1037
1707
  function AppShell({
1038
1708
  brand,
1039
1709
  actions,
@@ -1043,248 +1713,129 @@ function AppShell({
1043
1713
  children
1044
1714
  }) {
1045
1715
  const [open, setOpen] = useState3(false);
1046
- return /* @__PURE__ */ jsxs13("div", { className: "min-h-screen bg-background", children: [
1047
- /* @__PURE__ */ jsx22(Navbar, { brand, actions, onMenuClick: () => setOpen(true) }),
1048
- /* @__PURE__ */ jsx22(Drawer, { open, onOpenChange: setOpen, direction: "left", children: /* @__PURE__ */ jsx22(DrawerContent, { className: "h-full w-72 rounded-none border-r border-border p-0", children: /* @__PURE__ */ jsx22(Sidebar, { brand, groups: sidebarGroups, user: sidebarUser, footerAction: sidebarFooterAction }) }) }),
1049
- /* @__PURE__ */ jsx22("main", { className: "mx-auto w-full max-w-7xl px-4 py-6 sm:px-6", children })
1716
+ return /* @__PURE__ */ jsxs19("div", { className: "min-h-screen bg-background", children: [
1717
+ /* @__PURE__ */ jsx30(Navbar, { brand, actions, onMenuClick: () => setOpen(true) }),
1718
+ /* @__PURE__ */ jsx30(Drawer, { open, onOpenChange: setOpen, direction: "left", children: /* @__PURE__ */ jsx30(DrawerContent, { className: "h-full w-72 rounded-none border-r border-border p-0", children: /* @__PURE__ */ jsx30(Sidebar, { brand, groups: sidebarGroups, user: sidebarUser, footerAction: sidebarFooterAction }) }) }),
1719
+ /* @__PURE__ */ jsx30("main", { className: "mx-auto w-full max-w-7xl px-4 py-6 sm:px-6", children })
1050
1720
  ] });
1051
1721
  }
1052
1722
 
1053
1723
  // src/components/layout/form-section.tsx
1054
- import { jsx as jsx23, jsxs as jsxs14 } from "react/jsx-runtime";
1724
+ import { jsx as jsx31, jsxs as jsxs20 } from "react/jsx-runtime";
1055
1725
  function FormSection({ title, description, children }) {
1056
- return /* @__PURE__ */ jsxs14(Card, { children: [
1057
- /* @__PURE__ */ jsxs14(CardHeader, { children: [
1058
- /* @__PURE__ */ jsx23(CardTitle, { children: title }),
1059
- description ? /* @__PURE__ */ jsx23(CardDescription, { children: description }) : null
1726
+ return /* @__PURE__ */ jsxs20(Card, { children: [
1727
+ /* @__PURE__ */ jsxs20(CardHeader, { children: [
1728
+ /* @__PURE__ */ jsx31(CardTitle, { children: title }),
1729
+ description ? /* @__PURE__ */ jsx31(CardDescription, { children: description }) : null
1060
1730
  ] }),
1061
- /* @__PURE__ */ jsx23(CardContent, { children })
1731
+ /* @__PURE__ */ jsx31(CardContent, { children })
1062
1732
  ] });
1063
1733
  }
1064
1734
 
1065
1735
  // src/components/layout/page-header.tsx
1066
- import { jsx as jsx24, jsxs as jsxs15 } from "react/jsx-runtime";
1736
+ import { jsx as jsx32, jsxs as jsxs21 } from "react/jsx-runtime";
1067
1737
  function PageHeader({ title, description, action }) {
1068
- return /* @__PURE__ */ jsxs15("div", { className: "flex items-start justify-between gap-4 sm:flex-row sm:items-center", children: [
1069
- /* @__PURE__ */ jsxs15("div", { children: [
1070
- /* @__PURE__ */ jsx24("h1", { className: "text-2xl font-semibold text-foreground", style: { fontFamily: "var(--font-display)" }, children: title }),
1071
- description ? /* @__PURE__ */ jsx24("p", { className: "mt-0.5 text-sm text-muted-foreground", children: description }) : null
1738
+ return /* @__PURE__ */ jsxs21("div", { className: "flex items-start justify-between gap-4 sm:flex-row sm:items-center", children: [
1739
+ /* @__PURE__ */ jsxs21("div", { children: [
1740
+ /* @__PURE__ */ jsx32("h1", { className: "text-2xl font-semibold text-foreground", style: { fontFamily: "var(--font-display)" }, children: title }),
1741
+ description ? /* @__PURE__ */ jsx32("p", { className: "mt-0.5 text-sm text-muted-foreground", children: description }) : null
1072
1742
  ] }),
1073
- action ? /* @__PURE__ */ jsx24("div", { children: action }) : null
1743
+ action ? /* @__PURE__ */ jsx32("div", { children: action }) : null
1074
1744
  ] });
1075
1745
  }
1076
1746
 
1077
1747
  // src/components/layout/theme-toggle.tsx
1078
- import { Moon, Sun } from "lucide-react";
1079
- import { jsx as jsx25, jsxs as jsxs16 } from "react/jsx-runtime";
1080
- var options = [
1081
- { value: "light", Icon: Sun, label: "Light" },
1082
- { value: "dark", Icon: Moon, label: "Dark" }
1083
- ];
1084
- function ThemeToggle({ className }) {
1085
- const { theme, setTheme } = useTheme();
1086
- return /* @__PURE__ */ jsx25("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__ */ jsxs16(
1087
- "button",
1088
- {
1089
- type: "button",
1090
- onClick: () => setTheme(value),
1091
- "aria-label": label,
1092
- className: cn(
1093
- "flex cursor-pointer items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-all",
1094
- theme === value ? "bg-card text-foreground shadow-sm" : "text-muted-foreground hover:text-foreground"
1095
- ),
1096
- children: [
1097
- /* @__PURE__ */ jsx25(Icon2, { size: 13 }),
1098
- /* @__PURE__ */ jsx25("span", { children: label })
1099
- ]
1100
- },
1101
- value
1102
- )) });
1103
- }
1104
-
1105
- // src/components/navigation/breadcrumb.tsx
1106
- import * as React9 from "react";
1107
- import { Slot as Slot2 } from "@radix-ui/react-slot";
1108
- import { ChevronRight, MoreHorizontal } from "lucide-react";
1109
- import { jsx as jsx26, jsxs as jsxs17 } from "react/jsx-runtime";
1110
- var Breadcrumb = React9.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx26("nav", { ref, "aria-label": "breadcrumb", ...props }));
1111
- Breadcrumb.displayName = "Breadcrumb";
1112
- var BreadcrumbList = React9.forwardRef(
1113
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx26(
1114
- "ol",
1115
- {
1116
- ref,
1117
- className: cn("flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5", className),
1118
- ...props
1119
- }
1120
- )
1121
- );
1122
- BreadcrumbList.displayName = "BreadcrumbList";
1123
- var BreadcrumbItem = React9.forwardRef(
1124
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx26("li", { ref, className: cn("inline-flex items-center gap-1.5", className), ...props })
1125
- );
1126
- BreadcrumbItem.displayName = "BreadcrumbItem";
1127
- var BreadcrumbLink = React9.forwardRef(({ asChild, className, ...props }, ref) => {
1128
- const Comp = asChild ? Slot2 : "a";
1129
- return /* @__PURE__ */ jsx26(Comp, { ref, className: cn("transition-colors hover:text-foreground", className), ...props });
1130
- });
1131
- BreadcrumbLink.displayName = "BreadcrumbLink";
1132
- var BreadcrumbPage = React9.forwardRef(
1133
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx26(
1134
- "span",
1135
- {
1136
- ref,
1137
- role: "link",
1138
- "aria-disabled": "true",
1139
- "aria-current": "page",
1140
- className: cn("font-normal text-foreground", className),
1141
- ...props
1142
- }
1143
- )
1144
- );
1145
- BreadcrumbPage.displayName = "BreadcrumbPage";
1146
- var BreadcrumbSeparator = ({ children, className, ...props }) => /* @__PURE__ */ jsx26("li", { role: "presentation", "aria-hidden": "true", className: cn("[&>svg]:h-3.5 [&>svg]:w-3.5", className), ...props, children: children ?? /* @__PURE__ */ jsx26(ChevronRight, {}) });
1147
- BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
1148
- var BreadcrumbEllipsis = ({ className, ...props }) => /* @__PURE__ */ jsxs17("span", { role: "presentation", "aria-hidden": "true", className: cn("flex h-9 w-9 items-center justify-center", className), ...props, children: [
1149
- /* @__PURE__ */ jsx26(MoreHorizontal, { className: "h-4 w-4" }),
1150
- /* @__PURE__ */ jsx26("span", { className: "sr-only", children: "More" })
1151
- ] });
1152
- BreadcrumbEllipsis.displayName = "BreadcrumbElipssis";
1153
-
1154
- // src/components/navigation/page-breadcrumb.tsx
1155
- import { Fragment as Fragment2 } from "react";
1156
- import { jsx as jsx27, jsxs as jsxs18 } from "react/jsx-runtime";
1157
- function PageBreadcrumb({ items }) {
1158
- return /* @__PURE__ */ jsx27(Breadcrumb, { children: /* @__PURE__ */ jsx27(BreadcrumbList, { children: items.map((item, index) => {
1159
- const isLast = index === items.length - 1;
1160
- return /* @__PURE__ */ jsxs18(Fragment2, { children: [
1161
- /* @__PURE__ */ jsx27(BreadcrumbItem, { children: !isLast && item.href ? /* @__PURE__ */ jsx27(BreadcrumbLink, { href: item.href, children: item.label }) : /* @__PURE__ */ jsx27(BreadcrumbPage, { children: item.label }) }),
1162
- !isLast ? /* @__PURE__ */ jsx27(BreadcrumbSeparator, {}) : null
1163
- ] }, `${item.label}-${index}`);
1164
- }) }) });
1165
- }
1166
-
1167
- // src/components/navigation/steps.tsx
1168
- import { AlertCircle as AlertCircle3, Check as Check3 } from "lucide-react";
1169
- import { jsx as jsx28, jsxs as jsxs19 } from "react/jsx-runtime";
1170
- var indicatorStyles = {
1171
- complete: "border-primary bg-primary text-primary-foreground",
1172
- current: "border-primary bg-primary/10 text-primary",
1173
- upcoming: "border-border bg-background text-muted-foreground",
1174
- error: "border-destructive bg-destructive/10 text-destructive"
1175
- };
1176
- function Steps({ className, items, orientation = "horizontal" }) {
1177
- return /* @__PURE__ */ jsx28("ol", { className: cn("flex", orientation === "horizontal" ? "flex-col gap-4 md:flex-row" : "flex-col", className), children: items.map((item, index) => {
1178
- const status = item.status ?? "upcoming";
1179
- const isLast = index === items.length - 1;
1180
- return /* @__PURE__ */ jsxs19(
1181
- "li",
1182
- {
1183
- className: cn("relative", orientation === "horizontal" ? "flex-1" : "pb-6 last:pb-0"),
1184
- children: [
1185
- !isLast ? /* @__PURE__ */ jsx28(
1186
- "span",
1187
- {
1188
- "aria-hidden": "true",
1189
- className: cn(
1190
- "absolute bg-border",
1191
- 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"
1192
- )
1193
- }
1194
- ) : null,
1195
- /* @__PURE__ */ jsxs19("div", { className: cn(
1196
- orientation === "horizontal" ? "flex flex-col items-center gap-2 text-center" : "flex items-start gap-3"
1197
- ), children: [
1198
- /* @__PURE__ */ jsxs19(
1199
- "span",
1200
- {
1201
- className: cn(
1202
- "relative z-10 inline-flex h-8 w-8 items-center justify-center rounded-full border text-sm font-semibold shadow-sm",
1203
- indicatorStyles[status]
1204
- ),
1205
- children: [
1206
- status === "complete" ? /* @__PURE__ */ jsx28(Check3, { className: "h-4 w-4" }) : null,
1207
- status === "error" ? /* @__PURE__ */ jsx28(AlertCircle3, { className: "h-4 w-4" }) : null,
1208
- status === "current" || status === "upcoming" ? index + 1 : null
1209
- ]
1210
- }
1211
- ),
1212
- /* @__PURE__ */ jsxs19("div", { className: cn("grid gap-1", orientation === "vertical" && "pt-1"), children: [
1213
- /* @__PURE__ */ jsx28("p", { className: cn("text-sm font-medium", status === "upcoming" ? "text-muted-foreground" : "text-foreground"), children: item.title }),
1214
- item.description ? /* @__PURE__ */ jsx28("p", { className: "text-xs text-muted-foreground", children: item.description }) : null
1215
- ] })
1216
- ] })
1217
- ]
1218
- },
1219
- item.id ?? item.title
1220
- );
1221
- }) });
1222
- }
1223
-
1224
- // src/components/overlays/dialog.tsx
1225
- import * as React10 from "react";
1226
- import * as DialogPrimitive from "@radix-ui/react-dialog";
1227
- import { X } from "lucide-react";
1228
- import { jsx as jsx29, jsxs as jsxs20 } from "react/jsx-runtime";
1229
- var Dialog = DialogPrimitive.Root;
1230
- var DialogTrigger = DialogPrimitive.Trigger;
1231
- var DialogPortal = DialogPrimitive.Portal;
1232
- var DialogClose = DialogPrimitive.Close;
1233
- var DialogOverlay = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx29(
1234
- DialogPrimitive.Overlay,
1235
- {
1236
- ref,
1237
- className: cn(
1238
- "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",
1239
- className
1240
- ),
1241
- ...props
1242
- }
1243
- ));
1244
- DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
1245
- var DialogContent = React10.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs20(DialogPortal, { children: [
1246
- /* @__PURE__ */ jsx29(DialogOverlay, {}),
1247
- /* @__PURE__ */ jsxs20(
1248
- DialogPrimitive.Content,
1748
+ import { Moon, Sun } from "lucide-react";
1749
+ import { jsx as jsx33, jsxs as jsxs22 } from "react/jsx-runtime";
1750
+ var options = [
1751
+ { value: "light", Icon: Sun, label: "Light" },
1752
+ { value: "dark", Icon: Moon, label: "Dark" }
1753
+ ];
1754
+ function ThemeToggle({ className }) {
1755
+ const { theme, setTheme } = useTheme();
1756
+ return /* @__PURE__ */ jsx33("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__ */ jsxs22(
1757
+ "button",
1249
1758
  {
1250
- ref,
1759
+ type: "button",
1760
+ onClick: () => setTheme(value),
1761
+ "aria-label": label,
1251
1762
  className: cn(
1252
- "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",
1253
- className
1763
+ "flex cursor-pointer items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-all",
1764
+ theme === value ? "bg-card text-foreground shadow-sm" : "text-muted-foreground hover:text-foreground"
1254
1765
  ),
1255
- ...props,
1256
1766
  children: [
1257
- children,
1258
- /* @__PURE__ */ jsxs20(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: [
1259
- /* @__PURE__ */ jsx29(X, { className: "h-4 w-4" }),
1260
- /* @__PURE__ */ jsx29("span", { className: "sr-only", children: "Close" })
1261
- ] })
1767
+ /* @__PURE__ */ jsx33(Icon2, { size: 13 }),
1768
+ /* @__PURE__ */ jsx33("span", { children: label })
1262
1769
  ]
1770
+ },
1771
+ value
1772
+ )) });
1773
+ }
1774
+
1775
+ // src/components/navigation/breadcrumb.tsx
1776
+ import * as React12 from "react";
1777
+ import { Slot as Slot2 } from "@radix-ui/react-slot";
1778
+ import { ChevronRight, MoreHorizontal } from "lucide-react";
1779
+ import { jsx as jsx34, jsxs as jsxs23 } from "react/jsx-runtime";
1780
+ var Breadcrumb = React12.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx34("nav", { ref, "aria-label": "breadcrumb", ...props }));
1781
+ Breadcrumb.displayName = "Breadcrumb";
1782
+ var BreadcrumbList = React12.forwardRef(
1783
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx34(
1784
+ "ol",
1785
+ {
1786
+ ref,
1787
+ className: cn("flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5", className),
1788
+ ...props
1263
1789
  }
1264
1790
  )
1265
- ] }));
1266
- DialogContent.displayName = DialogPrimitive.Content.displayName;
1267
- var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx29("div", { className: cn("flex flex-col space-y-1.5 text-center sm:text-left", className), ...props });
1268
- DialogHeader.displayName = "DialogHeader";
1269
- var DialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx29("div", { className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className), ...props });
1270
- DialogFooter.displayName = "DialogFooter";
1271
- var DialogTitle = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx29(DialogPrimitive.Title, { ref, className: cn("text-lg font-semibold leading-none tracking-tight", className), ...props }));
1272
- DialogTitle.displayName = DialogPrimitive.Title.displayName;
1273
- var DialogDescription = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx29(DialogPrimitive.Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
1274
- DialogDescription.displayName = DialogPrimitive.Description.displayName;
1791
+ );
1792
+ BreadcrumbList.displayName = "BreadcrumbList";
1793
+ var BreadcrumbItem = React12.forwardRef(
1794
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx34("li", { ref, className: cn("inline-flex items-center gap-1.5", className), ...props })
1795
+ );
1796
+ BreadcrumbItem.displayName = "BreadcrumbItem";
1797
+ var BreadcrumbLink = React12.forwardRef(({ asChild, className, ...props }, ref) => {
1798
+ const Comp = asChild ? Slot2 : "a";
1799
+ return /* @__PURE__ */ jsx34(Comp, { ref, className: cn("transition-colors hover:text-foreground", className), ...props });
1800
+ });
1801
+ BreadcrumbLink.displayName = "BreadcrumbLink";
1802
+ var BreadcrumbPage = React12.forwardRef(
1803
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx34(
1804
+ "span",
1805
+ {
1806
+ ref,
1807
+ role: "link",
1808
+ "aria-disabled": "true",
1809
+ "aria-current": "page",
1810
+ className: cn("font-normal text-foreground", className),
1811
+ ...props
1812
+ }
1813
+ )
1814
+ );
1815
+ BreadcrumbPage.displayName = "BreadcrumbPage";
1816
+ var BreadcrumbSeparator = ({ children, className, ...props }) => /* @__PURE__ */ jsx34("li", { role: "presentation", "aria-hidden": "true", className: cn("[&>svg]:h-3.5 [&>svg]:w-3.5", className), ...props, children: children ?? /* @__PURE__ */ jsx34(ChevronRight, {}) });
1817
+ BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
1818
+ var BreadcrumbEllipsis = ({ className, ...props }) => /* @__PURE__ */ jsxs23("span", { role: "presentation", "aria-hidden": "true", className: cn("flex h-9 w-9 items-center justify-center", className), ...props, children: [
1819
+ /* @__PURE__ */ jsx34(MoreHorizontal, { className: "h-4 w-4" }),
1820
+ /* @__PURE__ */ jsx34("span", { className: "sr-only", children: "More" })
1821
+ ] });
1822
+ BreadcrumbEllipsis.displayName = "BreadcrumbElipssis";
1823
+
1824
+ // src/components/navigation/header-user-menu.tsx
1825
+ import { LogOut } from "lucide-react";
1275
1826
 
1276
1827
  // src/components/overlays/dropdown-menu.tsx
1277
- import * as React11 from "react";
1828
+ import * as React13 from "react";
1278
1829
  import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
1279
- import { Check as Check4, ChevronRight as ChevronRight2, Circle } from "lucide-react";
1280
- import { jsx as jsx30, jsxs as jsxs21 } from "react/jsx-runtime";
1830
+ import { Check as Check3, ChevronRight as ChevronRight2, Circle } from "lucide-react";
1831
+ import { jsx as jsx35, jsxs as jsxs24 } from "react/jsx-runtime";
1281
1832
  var DropdownMenu = DropdownMenuPrimitive.Root;
1282
1833
  var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
1283
1834
  var DropdownMenuGroup = DropdownMenuPrimitive.Group;
1284
1835
  var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
1285
1836
  var DropdownMenuSub = DropdownMenuPrimitive.Sub;
1286
1837
  var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
1287
- var DropdownMenuSubTrigger = React11.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs21(
1838
+ var DropdownMenuSubTrigger = React13.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs24(
1288
1839
  DropdownMenuPrimitive.SubTrigger,
1289
1840
  {
1290
1841
  ref,
@@ -1296,12 +1847,12 @@ var DropdownMenuSubTrigger = React11.forwardRef(({ className, inset, children, .
1296
1847
  ...props,
1297
1848
  children: [
1298
1849
  children,
1299
- /* @__PURE__ */ jsx30(ChevronRight2, { className: "ml-auto" })
1850
+ /* @__PURE__ */ jsx35(ChevronRight2, { className: "ml-auto" })
1300
1851
  ]
1301
1852
  }
1302
1853
  ));
1303
1854
  DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
1304
- var DropdownMenuSubContent = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx30(
1855
+ var DropdownMenuSubContent = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx35(
1305
1856
  DropdownMenuPrimitive.SubContent,
1306
1857
  {
1307
1858
  ref,
@@ -1313,7 +1864,7 @@ var DropdownMenuSubContent = React11.forwardRef(({ className, ...props }, ref) =
1313
1864
  }
1314
1865
  ));
1315
1866
  DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
1316
- var DropdownMenuContent = React11.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx30(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx30(
1867
+ var DropdownMenuContent = React13.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx35(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx35(
1317
1868
  DropdownMenuPrimitive.Content,
1318
1869
  {
1319
1870
  ref,
@@ -1326,7 +1877,7 @@ var DropdownMenuContent = React11.forwardRef(({ className, sideOffset = 4, ...pr
1326
1877
  }
1327
1878
  ) }));
1328
1879
  DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
1329
- var DropdownMenuItem = React11.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx30(
1880
+ var DropdownMenuItem = React13.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx35(
1330
1881
  DropdownMenuPrimitive.Item,
1331
1882
  {
1332
1883
  ref,
@@ -1339,7 +1890,7 @@ var DropdownMenuItem = React11.forwardRef(({ className, inset, ...props }, ref)
1339
1890
  }
1340
1891
  ));
1341
1892
  DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
1342
- var DropdownMenuCheckboxItem = React11.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs21(
1893
+ var DropdownMenuCheckboxItem = React13.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs24(
1343
1894
  DropdownMenuPrimitive.CheckboxItem,
1344
1895
  {
1345
1896
  ref,
@@ -1350,13 +1901,13 @@ var DropdownMenuCheckboxItem = React11.forwardRef(({ className, children, checke
1350
1901
  ...checked !== void 0 ? { checked } : {},
1351
1902
  ...props,
1352
1903
  children: [
1353
- /* @__PURE__ */ jsx30("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx30(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx30(Check4, { className: "h-4 w-4" }) }) }),
1904
+ /* @__PURE__ */ jsx35("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx35(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx35(Check3, { className: "h-4 w-4" }) }) }),
1354
1905
  children
1355
1906
  ]
1356
1907
  }
1357
1908
  ));
1358
1909
  DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
1359
- var DropdownMenuRadioItem = React11.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs21(
1910
+ var DropdownMenuRadioItem = React13.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs24(
1360
1911
  DropdownMenuPrimitive.RadioItem,
1361
1912
  {
1362
1913
  ref,
@@ -1366,84 +1917,208 @@ var DropdownMenuRadioItem = React11.forwardRef(({ className, children, ...props
1366
1917
  ),
1367
1918
  ...props,
1368
1919
  children: [
1369
- /* @__PURE__ */ jsx30("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx30(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx30(Circle, { className: "h-2 w-2 fill-current" }) }) }),
1920
+ /* @__PURE__ */ jsx35("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx35(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx35(Circle, { className: "h-2 w-2 fill-current" }) }) }),
1370
1921
  children
1371
1922
  ]
1372
1923
  }
1373
1924
  ));
1374
1925
  DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
1375
- var DropdownMenuLabel = React11.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx30(DropdownMenuPrimitive.Label, { ref, className: cn("px-2 py-1.5 text-sm font-semibold", inset && "pl-8", className), ...props }));
1926
+ var DropdownMenuLabel = React13.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx35(DropdownMenuPrimitive.Label, { ref, className: cn("px-2 py-1.5 text-sm font-semibold", inset && "pl-8", className), ...props }));
1376
1927
  DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
1377
- var DropdownMenuSeparator = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx30(DropdownMenuPrimitive.Separator, { ref, className: cn("-mx-1 my-1 h-px bg-muted", className), ...props }));
1928
+ var DropdownMenuSeparator = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx35(DropdownMenuPrimitive.Separator, { ref, className: cn("-mx-1 my-1 h-px bg-muted", className), ...props }));
1378
1929
  DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
1379
- var DropdownMenuShortcut = ({ className, ...props }) => /* @__PURE__ */ jsx30("span", { className: cn("ml-auto text-xs tracking-widest opacity-60", className), ...props });
1930
+ var DropdownMenuShortcut = ({ className, ...props }) => /* @__PURE__ */ jsx35("span", { className: cn("ml-auto text-xs tracking-widest opacity-60", className), ...props });
1380
1931
  DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
1381
1932
 
1382
- // src/components/overlays/sheet.tsx
1383
- import * as React12 from "react";
1384
- import * as SheetPrimitive from "@radix-ui/react-dialog";
1385
- import { cva as cva3 } from "class-variance-authority";
1933
+ // src/components/navigation/header-user-menu.tsx
1934
+ import { Fragment as Fragment2, jsx as jsx36, jsxs as jsxs25 } from "react/jsx-runtime";
1935
+ function getInitials3(name) {
1936
+ return name.trim().split(" ").filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase() ?? "").join("");
1937
+ }
1938
+ function HeaderUserMenu({
1939
+ className,
1940
+ name,
1941
+ email,
1942
+ role,
1943
+ initials,
1944
+ avatarSrc,
1945
+ logoutLabel = "Cerrar sesion",
1946
+ onLogout,
1947
+ extraItems
1948
+ }) {
1949
+ return /* @__PURE__ */ jsxs25(DropdownMenu, { children: [
1950
+ /* @__PURE__ */ jsx36(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx36(
1951
+ "button",
1952
+ {
1953
+ type: "button",
1954
+ "aria-label": "Menu de usuario",
1955
+ className: cn(
1956
+ "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",
1957
+ className
1958
+ ),
1959
+ children: /* @__PURE__ */ jsxs25(Avatar, { className: "h-8 w-8", children: [
1960
+ avatarSrc ? /* @__PURE__ */ jsx36(AvatarImage, { src: avatarSrc, alt: name }) : null,
1961
+ /* @__PURE__ */ jsx36(AvatarFallback, { className: "bg-primary text-xs font-semibold text-primary-foreground", children: initials ?? getInitials3(name) })
1962
+ ] })
1963
+ }
1964
+ ) }),
1965
+ /* @__PURE__ */ jsxs25(DropdownMenuContent, { align: "end", className: "w-60", children: [
1966
+ /* @__PURE__ */ jsx36(DropdownMenuLabel, { className: "font-normal", children: /* @__PURE__ */ jsxs25("div", { className: "flex gap-2", children: [
1967
+ /* @__PURE__ */ jsxs25("div", { className: "grid min-w-0 flex-1 gap-1", children: [
1968
+ /* @__PURE__ */ jsx36("p", { className: "truncate text-sm font-semibold text-foreground", children: name }),
1969
+ email ? /* @__PURE__ */ jsx36("p", { className: "truncate text-xs text-muted-foreground", children: email }) : null
1970
+ ] }),
1971
+ role ? /* @__PURE__ */ jsx36(Badge, { variant: "outline", className: "h-fit max-w-[110px] truncate", children: role }) : null
1972
+ ] }) }),
1973
+ extraItems ? /* @__PURE__ */ jsxs25(Fragment2, { children: [
1974
+ /* @__PURE__ */ jsx36(DropdownMenuSeparator, {}),
1975
+ extraItems
1976
+ ] }) : null,
1977
+ onLogout ? /* @__PURE__ */ jsxs25(Fragment2, { children: [
1978
+ /* @__PURE__ */ jsx36(DropdownMenuSeparator, {}),
1979
+ /* @__PURE__ */ jsxs25(
1980
+ DropdownMenuItem,
1981
+ {
1982
+ onClick: onLogout,
1983
+ className: "cursor-pointer gap-2 text-destructive focus:bg-destructive/10 focus:text-destructive",
1984
+ children: [
1985
+ /* @__PURE__ */ jsx36(LogOut, { className: "h-4 w-4" }),
1986
+ logoutLabel
1987
+ ]
1988
+ }
1989
+ )
1990
+ ] }) : null
1991
+ ] })
1992
+ ] });
1993
+ }
1994
+
1995
+ // src/components/navigation/page-breadcrumb.tsx
1996
+ import { Fragment as Fragment3 } from "react";
1997
+ import { jsx as jsx37, jsxs as jsxs26 } from "react/jsx-runtime";
1998
+ function PageBreadcrumb({ items }) {
1999
+ return /* @__PURE__ */ jsx37(Breadcrumb, { children: /* @__PURE__ */ jsx37(BreadcrumbList, { children: items.map((item, index) => {
2000
+ const isLast = index === items.length - 1;
2001
+ return /* @__PURE__ */ jsxs26(Fragment3, { children: [
2002
+ /* @__PURE__ */ jsx37(BreadcrumbItem, { children: !isLast && item.href ? /* @__PURE__ */ jsx37(BreadcrumbLink, { href: item.href, children: item.label }) : /* @__PURE__ */ jsx37(BreadcrumbPage, { children: item.label }) }),
2003
+ !isLast ? /* @__PURE__ */ jsx37(BreadcrumbSeparator, {}) : null
2004
+ ] }, `${item.label}-${index}`);
2005
+ }) }) });
2006
+ }
2007
+
2008
+ // src/components/navigation/steps.tsx
2009
+ import { AlertCircle as AlertCircle4, Check as Check4 } from "lucide-react";
2010
+ import { jsx as jsx38, jsxs as jsxs27 } from "react/jsx-runtime";
2011
+ var indicatorStyles = {
2012
+ complete: "border-primary bg-primary text-primary-foreground",
2013
+ current: "border-primary bg-primary/10 text-primary",
2014
+ upcoming: "border-border bg-background text-muted-foreground",
2015
+ error: "border-destructive bg-destructive/10 text-destructive"
2016
+ };
2017
+ function Steps({ className, items, orientation = "horizontal" }) {
2018
+ return /* @__PURE__ */ jsx38("ol", { className: cn("flex", orientation === "horizontal" ? "flex-col gap-4 md:flex-row" : "flex-col", className), children: items.map((item, index) => {
2019
+ const status = item.status ?? "upcoming";
2020
+ const isLast = index === items.length - 1;
2021
+ return /* @__PURE__ */ jsxs27(
2022
+ "li",
2023
+ {
2024
+ className: cn("relative", orientation === "horizontal" ? "flex-1" : "pb-6 last:pb-0"),
2025
+ children: [
2026
+ !isLast ? /* @__PURE__ */ jsx38(
2027
+ "span",
2028
+ {
2029
+ "aria-hidden": "true",
2030
+ className: cn(
2031
+ "absolute bg-border",
2032
+ 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"
2033
+ )
2034
+ }
2035
+ ) : null,
2036
+ /* @__PURE__ */ jsxs27("div", { className: cn(
2037
+ orientation === "horizontal" ? "flex flex-col items-center gap-2 text-center" : "flex items-start gap-3"
2038
+ ), children: [
2039
+ /* @__PURE__ */ jsxs27(
2040
+ "span",
2041
+ {
2042
+ className: cn(
2043
+ "relative z-10 inline-flex h-8 w-8 items-center justify-center rounded-full border text-sm font-semibold shadow-sm",
2044
+ indicatorStyles[status]
2045
+ ),
2046
+ children: [
2047
+ status === "complete" ? /* @__PURE__ */ jsx38(Check4, { className: "h-4 w-4" }) : null,
2048
+ status === "error" ? /* @__PURE__ */ jsx38(AlertCircle4, { className: "h-4 w-4" }) : null,
2049
+ status === "current" || status === "upcoming" ? index + 1 : null
2050
+ ]
2051
+ }
2052
+ ),
2053
+ /* @__PURE__ */ jsxs27("div", { className: cn("grid gap-1", orientation === "vertical" && "pt-1"), children: [
2054
+ /* @__PURE__ */ jsx38("p", { className: cn("text-sm font-medium", status === "upcoming" ? "text-muted-foreground" : "text-foreground"), children: item.title }),
2055
+ item.description ? /* @__PURE__ */ jsx38("p", { className: "text-xs text-muted-foreground", children: item.description }) : null
2056
+ ] })
2057
+ ] })
2058
+ ]
2059
+ },
2060
+ item.id ?? item.title
2061
+ );
2062
+ }) });
2063
+ }
2064
+
2065
+ // src/components/overlays/dialog.tsx
2066
+ import * as React14 from "react";
2067
+ import * as DialogPrimitive from "@radix-ui/react-dialog";
1386
2068
  import { X as X2 } from "lucide-react";
1387
- import { jsx as jsx31, jsxs as jsxs22 } from "react/jsx-runtime";
1388
- var Sheet = SheetPrimitive.Root;
1389
- var SheetTrigger = SheetPrimitive.Trigger;
1390
- var SheetClose = SheetPrimitive.Close;
1391
- var SheetPortal = SheetPrimitive.Portal;
1392
- var SheetOverlay = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(
1393
- SheetPrimitive.Overlay,
2069
+ import { jsx as jsx39, jsxs as jsxs28 } from "react/jsx-runtime";
2070
+ var Dialog = DialogPrimitive.Root;
2071
+ var DialogTrigger = DialogPrimitive.Trigger;
2072
+ var DialogPortal = DialogPrimitive.Portal;
2073
+ var DialogClose = DialogPrimitive.Close;
2074
+ var DialogOverlay = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx39(
2075
+ DialogPrimitive.Overlay,
1394
2076
  {
2077
+ ref,
1395
2078
  className: cn(
1396
2079
  "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",
1397
2080
  className
1398
2081
  ),
1399
- ...props,
1400
- ref
2082
+ ...props
1401
2083
  }
1402
2084
  ));
1403
- SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
1404
- var sheetVariants = cva3(
1405
- "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",
1406
- {
1407
- variants: {
1408
- side: {
1409
- top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
1410
- bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
1411
- 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",
1412
- 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"
1413
- }
1414
- },
1415
- defaultVariants: {
1416
- side: "right"
2085
+ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
2086
+ var DialogContent = React14.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs28(DialogPortal, { children: [
2087
+ /* @__PURE__ */ jsx39(DialogOverlay, {}),
2088
+ /* @__PURE__ */ jsxs28(
2089
+ DialogPrimitive.Content,
2090
+ {
2091
+ ref,
2092
+ className: cn(
2093
+ "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",
2094
+ className
2095
+ ),
2096
+ ...props,
2097
+ children: [
2098
+ children,
2099
+ /* @__PURE__ */ jsxs28(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: [
2100
+ /* @__PURE__ */ jsx39(X2, { className: "h-4 w-4" }),
2101
+ /* @__PURE__ */ jsx39("span", { className: "sr-only", children: "Close" })
2102
+ ] })
2103
+ ]
1417
2104
  }
1418
- }
1419
- );
1420
- var SheetContent = React12.forwardRef(
1421
- ({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ jsxs22(SheetPortal, { children: [
1422
- /* @__PURE__ */ jsx31(SheetOverlay, {}),
1423
- /* @__PURE__ */ jsxs22(SheetPrimitive.Content, { ref, className: cn(sheetVariants({ side }), className), ...props, children: [
1424
- children,
1425
- /* @__PURE__ */ jsxs22(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: [
1426
- /* @__PURE__ */ jsx31(X2, { className: "h-4 w-4" }),
1427
- /* @__PURE__ */ jsx31("span", { className: "sr-only", children: "Close" })
1428
- ] })
1429
- ] })
1430
- ] })
1431
- );
1432
- SheetContent.displayName = SheetPrimitive.Content.displayName;
1433
- var SheetHeader = ({ className, ...props }) => /* @__PURE__ */ jsx31("div", { className: cn("flex flex-col space-y-2 text-center sm:text-left", className), ...props });
1434
- SheetHeader.displayName = "SheetHeader";
1435
- var SheetFooter = ({ className, ...props }) => /* @__PURE__ */ jsx31("div", { className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className), ...props });
1436
- SheetFooter.displayName = "SheetFooter";
1437
- var SheetTitle = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(SheetPrimitive.Title, { ref, className: cn("text-lg font-semibold text-foreground", className), ...props }));
1438
- SheetTitle.displayName = SheetPrimitive.Title.displayName;
1439
- var SheetDescription = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx31(SheetPrimitive.Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
1440
- SheetDescription.displayName = SheetPrimitive.Description.displayName;
2105
+ )
2106
+ ] }));
2107
+ DialogContent.displayName = DialogPrimitive.Content.displayName;
2108
+ var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx39("div", { className: cn("flex flex-col space-y-1.5 text-center sm:text-left", className), ...props });
2109
+ DialogHeader.displayName = "DialogHeader";
2110
+ var DialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx39("div", { className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className), ...props });
2111
+ DialogFooter.displayName = "DialogFooter";
2112
+ var DialogTitle = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx39(DialogPrimitive.Title, { ref, className: cn("text-lg font-semibold leading-none tracking-tight", className), ...props }));
2113
+ DialogTitle.displayName = DialogPrimitive.Title.displayName;
2114
+ var DialogDescription = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx39(DialogPrimitive.Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
2115
+ DialogDescription.displayName = DialogPrimitive.Description.displayName;
1441
2116
 
1442
2117
  // src/components/primitives/alert.tsx
1443
- import * as React13 from "react";
1444
- import { cva as cva4 } from "class-variance-authority";
1445
- import { jsx as jsx32 } from "react/jsx-runtime";
1446
- var alertVariants = cva4("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", {
2118
+ import * as React15 from "react";
2119
+ import { cva as cva5 } from "class-variance-authority";
2120
+ import { jsx as jsx40 } from "react/jsx-runtime";
2121
+ var alertVariants = cva5("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", {
1447
2122
  variants: {
1448
2123
  variant: {
1449
2124
  default: "bg-background text-foreground",
@@ -1454,43 +2129,23 @@ var alertVariants = cva4("relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [
1454
2129
  variant: "default"
1455
2130
  }
1456
2131
  });
1457
- var Alert = React13.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */ jsx32("div", { ref, role: "alert", className: cn(alertVariants({ variant }), className), ...props }));
2132
+ var Alert = React15.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */ jsx40("div", { ref, role: "alert", className: cn(alertVariants({ variant }), className), ...props }));
1458
2133
  Alert.displayName = "Alert";
1459
- var AlertTitle = React13.forwardRef(
1460
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx32("h5", { ref, className: cn("mb-1 font-medium leading-none tracking-tight", className), ...props })
2134
+ var AlertTitle = React15.forwardRef(
2135
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx40("h5", { ref, className: cn("mb-1 font-medium leading-none tracking-tight", className), ...props })
1461
2136
  );
1462
2137
  AlertTitle.displayName = "AlertTitle";
1463
- var AlertDescription = React13.forwardRef(
1464
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx32("div", { ref, className: cn("text-sm [&_p]:leading-relaxed", className), ...props })
2138
+ var AlertDescription = React15.forwardRef(
2139
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx40("div", { ref, className: cn("text-sm [&_p]:leading-relaxed", className), ...props })
1465
2140
  );
1466
2141
  AlertDescription.displayName = "AlertDescription";
1467
2142
 
1468
- // src/components/primitives/badge.tsx
1469
- import { cva as cva5 } from "class-variance-authority";
1470
- import { jsx as jsx33 } from "react/jsx-runtime";
1471
- var badgeVariants = cva5("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", {
1472
- variants: {
1473
- variant: {
1474
- default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
1475
- secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
1476
- destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
1477
- outline: "text-foreground"
1478
- }
1479
- },
1480
- defaultVariants: {
1481
- variant: "default"
1482
- }
1483
- });
1484
- function Badge({ className, variant, ...props }) {
1485
- return /* @__PURE__ */ jsx33("div", { className: cn(badgeVariants({ variant }), className), ...props });
1486
- }
1487
-
1488
2143
  // src/components/primitives/checkbox.tsx
1489
- import * as React14 from "react";
2144
+ import * as React16 from "react";
1490
2145
  import { Check as Check5 } from "lucide-react";
1491
- import { jsx as jsx34, jsxs as jsxs23 } from "react/jsx-runtime";
1492
- var Checkbox = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs23("span", { className: "relative inline-flex h-4 w-4 shrink-0", children: [
1493
- /* @__PURE__ */ jsx34(
2146
+ import { jsx as jsx41, jsxs as jsxs29 } from "react/jsx-runtime";
2147
+ var Checkbox = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs29("span", { className: "relative inline-flex h-4 w-4 shrink-0", children: [
2148
+ /* @__PURE__ */ jsx41(
1494
2149
  "input",
1495
2150
  {
1496
2151
  ref,
@@ -1502,7 +2157,7 @@ var Checkbox = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__
1502
2157
  ...props
1503
2158
  }
1504
2159
  ),
1505
- /* @__PURE__ */ jsx34(
2160
+ /* @__PURE__ */ jsx41(
1506
2161
  Check5,
1507
2162
  {
1508
2163
  "aria-hidden": "true",
@@ -1512,18 +2167,18 @@ var Checkbox = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__
1512
2167
  ] }));
1513
2168
  Checkbox.displayName = "Checkbox";
1514
2169
  function CheckboxField({ id, label, description, containerClassName, className, ...props }) {
1515
- const generatedId = React14.useId();
2170
+ const generatedId = React16.useId();
1516
2171
  const inputId = id ?? generatedId;
1517
- return /* @__PURE__ */ jsxs23(
2172
+ return /* @__PURE__ */ jsxs29(
1518
2173
  "label",
1519
2174
  {
1520
2175
  htmlFor: inputId,
1521
2176
  className: cn("flex items-center gap-3 rounded-lg border border-border bg-card p-3 transition-colors hover:bg-accent/30", containerClassName),
1522
2177
  children: [
1523
- /* @__PURE__ */ jsx34(Checkbox, { id: inputId, className, ...props }),
1524
- /* @__PURE__ */ jsxs23("span", { className: "grid gap-1", children: [
1525
- /* @__PURE__ */ jsx34("span", { className: "text-sm font-medium text-foreground", children: label }),
1526
- description ? /* @__PURE__ */ jsx34("span", { className: "text-xs text-muted-foreground", children: description }) : null
2178
+ /* @__PURE__ */ jsx41(Checkbox, { id: inputId, className, ...props }),
2179
+ /* @__PURE__ */ jsxs29("span", { className: "grid gap-1", children: [
2180
+ /* @__PURE__ */ jsx41("span", { className: "text-sm font-medium text-foreground", children: label }),
2181
+ description ? /* @__PURE__ */ jsx41("span", { className: "text-xs text-muted-foreground", children: description }) : null
1527
2182
  ] })
1528
2183
  ]
1529
2184
  }
@@ -1531,21 +2186,21 @@ function CheckboxField({ id, label, description, containerClassName, className,
1531
2186
  }
1532
2187
 
1533
2188
  // src/components/primitives/label.tsx
1534
- import * as React15 from "react";
2189
+ import * as React17 from "react";
1535
2190
  import * as LabelPrimitive from "@radix-ui/react-label";
1536
2191
  import { cva as cva6 } from "class-variance-authority";
1537
- import { jsx as jsx35 } from "react/jsx-runtime";
2192
+ import { jsx as jsx42 } from "react/jsx-runtime";
1538
2193
  var labelVariants = cva6("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70");
1539
- var Label3 = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx35(LabelPrimitive.Root, { ref, className: cn(labelVariants(), className), ...props }));
2194
+ var Label3 = React17.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx42(LabelPrimitive.Root, { ref, className: cn(labelVariants(), className), ...props }));
1540
2195
  Label3.displayName = LabelPrimitive.Root.displayName;
1541
2196
 
1542
2197
  // src/components/primitives/radio-group.tsx
1543
- import * as React16 from "react";
1544
- import { jsx as jsx36, jsxs as jsxs24 } from "react/jsx-runtime";
1545
- var RadioGroup2 = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx36("div", { ref, role: "radiogroup", className: cn("grid gap-3", className), ...props }));
2198
+ import * as React18 from "react";
2199
+ import { jsx as jsx43, jsxs as jsxs30 } from "react/jsx-runtime";
2200
+ var RadioGroup2 = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx43("div", { ref, role: "radiogroup", className: cn("grid gap-3", className), ...props }));
1546
2201
  RadioGroup2.displayName = "RadioGroup";
1547
- var RadioGroupItem = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs24("span", { className: "relative inline-flex h-4 w-4 shrink-0", children: [
1548
- /* @__PURE__ */ jsx36(
2202
+ var RadioGroupItem = React18.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs30("span", { className: "relative inline-flex h-4 w-4 shrink-0", children: [
2203
+ /* @__PURE__ */ jsx43(
1549
2204
  "input",
1550
2205
  {
1551
2206
  ref,
@@ -1557,7 +2212,7 @@ var RadioGroupItem = React16.forwardRef(({ className, ...props }, ref) => /* @__
1557
2212
  ...props
1558
2213
  }
1559
2214
  ),
1560
- /* @__PURE__ */ jsx36(
2215
+ /* @__PURE__ */ jsx43(
1561
2216
  "span",
1562
2217
  {
1563
2218
  "aria-hidden": "true",
@@ -1567,18 +2222,18 @@ var RadioGroupItem = React16.forwardRef(({ className, ...props }, ref) => /* @__
1567
2222
  ] }));
1568
2223
  RadioGroupItem.displayName = "RadioGroupItem";
1569
2224
  function RadioField({ id, label, description, containerClassName, className, ...props }) {
1570
- const generatedId = React16.useId();
2225
+ const generatedId = React18.useId();
1571
2226
  const inputId = id ?? generatedId;
1572
- return /* @__PURE__ */ jsxs24(
2227
+ return /* @__PURE__ */ jsxs30(
1573
2228
  "label",
1574
2229
  {
1575
2230
  htmlFor: inputId,
1576
2231
  className: cn("flex items-center gap-3 rounded-lg border border-border bg-card p-3 transition-colors hover:bg-accent/30", containerClassName),
1577
2232
  children: [
1578
- /* @__PURE__ */ jsx36(RadioGroupItem, { id: inputId, className, ...props }),
1579
- /* @__PURE__ */ jsxs24("span", { className: "grid gap-1", children: [
1580
- /* @__PURE__ */ jsx36("span", { className: "text-sm font-medium text-foreground", children: label }),
1581
- description ? /* @__PURE__ */ jsx36("span", { className: "text-xs text-muted-foreground", children: description }) : null
2233
+ /* @__PURE__ */ jsx43(RadioGroupItem, { id: inputId, className, ...props }),
2234
+ /* @__PURE__ */ jsxs30("span", { className: "grid gap-1", children: [
2235
+ /* @__PURE__ */ jsx43("span", { className: "text-sm font-medium text-foreground", children: label }),
2236
+ description ? /* @__PURE__ */ jsx43("span", { className: "text-xs text-muted-foreground", children: description }) : null
1582
2237
  ] })
1583
2238
  ]
1584
2239
  }
@@ -1586,10 +2241,10 @@ function RadioField({ id, label, description, containerClassName, className, ...
1586
2241
  }
1587
2242
 
1588
2243
  // src/components/primitives/separator.tsx
1589
- import * as React17 from "react";
2244
+ import * as React19 from "react";
1590
2245
  import * as SeparatorPrimitive from "@radix-ui/react-separator";
1591
- import { jsx as jsx37 } from "react/jsx-runtime";
1592
- var Separator3 = React17.forwardRef(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx37(
2246
+ import { jsx as jsx44 } from "react/jsx-runtime";
2247
+ var Separator3 = React19.forwardRef(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsx44(
1593
2248
  SeparatorPrimitive.Root,
1594
2249
  {
1595
2250
  ref,
@@ -1602,11 +2257,11 @@ var Separator3 = React17.forwardRef(({ className, orientation = "horizontal", de
1602
2257
  Separator3.displayName = SeparatorPrimitive.Root.displayName;
1603
2258
 
1604
2259
  // src/components/primitives/switch.tsx
1605
- import * as React18 from "react";
1606
- import { jsx as jsx38, jsxs as jsxs25 } from "react/jsx-runtime";
1607
- var Switch = React18.forwardRef(({ className, size = "default", ...props }, ref) => {
2260
+ import * as React20 from "react";
2261
+ import { jsx as jsx45, jsxs as jsxs31 } from "react/jsx-runtime";
2262
+ var Switch = React20.forwardRef(({ className, size = "default", ...props }, ref) => {
1608
2263
  const isSm = size === "sm";
1609
- return /* @__PURE__ */ jsxs25(
2264
+ return /* @__PURE__ */ jsxs31(
1610
2265
  "span",
1611
2266
  {
1612
2267
  className: cn(
@@ -1614,7 +2269,7 @@ var Switch = React18.forwardRef(({ className, size = "default", ...props }, ref)
1614
2269
  isSm ? "h-4 w-7" : "h-6 w-10"
1615
2270
  ),
1616
2271
  children: [
1617
- /* @__PURE__ */ jsx38(
2272
+ /* @__PURE__ */ jsx45(
1618
2273
  "input",
1619
2274
  {
1620
2275
  ref,
@@ -1630,7 +2285,7 @@ var Switch = React18.forwardRef(({ className, size = "default", ...props }, ref)
1630
2285
  ...props
1631
2286
  }
1632
2287
  ),
1633
- /* @__PURE__ */ jsx38(
2288
+ /* @__PURE__ */ jsx45(
1634
2289
  "span",
1635
2290
  {
1636
2291
  "aria-hidden": "true",
@@ -1646,9 +2301,9 @@ var Switch = React18.forwardRef(({ className, size = "default", ...props }, ref)
1646
2301
  });
1647
2302
  Switch.displayName = "Switch";
1648
2303
  function SwitchField({ id, label, description, containerClassName, size, className, ...props }) {
1649
- const generatedId = React18.useId();
2304
+ const generatedId = React20.useId();
1650
2305
  const inputId = id ?? generatedId;
1651
- return /* @__PURE__ */ jsxs25(
2306
+ return /* @__PURE__ */ jsxs31(
1652
2307
  "label",
1653
2308
  {
1654
2309
  htmlFor: inputId,
@@ -1658,43 +2313,27 @@ function SwitchField({ id, label, description, containerClassName, size, classNa
1658
2313
  containerClassName
1659
2314
  ),
1660
2315
  children: [
1661
- /* @__PURE__ */ jsxs25("span", { className: "grid gap-0.5", children: [
1662
- /* @__PURE__ */ jsx38("span", { className: "text-sm font-medium text-foreground", children: label }),
1663
- description ? /* @__PURE__ */ jsx38("span", { className: "text-xs text-muted-foreground", children: description }) : null
2316
+ /* @__PURE__ */ jsxs31("span", { className: "grid gap-0.5", children: [
2317
+ /* @__PURE__ */ jsx45("span", { className: "text-sm font-medium text-foreground", children: label }),
2318
+ description ? /* @__PURE__ */ jsx45("span", { className: "text-xs text-muted-foreground", children: description }) : null
1664
2319
  ] }),
1665
- /* @__PURE__ */ jsx38(Switch, { id: inputId, size, className, ...props })
2320
+ /* @__PURE__ */ jsx45(Switch, { id: inputId, size, className, ...props })
1666
2321
  ]
1667
2322
  }
1668
2323
  );
1669
2324
  }
1670
2325
 
1671
- // src/components/primitives/textarea.tsx
1672
- import * as React19 from "react";
1673
- import { jsx as jsx39 } from "react/jsx-runtime";
1674
- var Textarea = React19.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx39(
1675
- "textarea",
1676
- {
1677
- ref,
1678
- className: cn(
1679
- "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",
1680
- className
1681
- ),
1682
- ...props
1683
- }
1684
- ));
1685
- Textarea.displayName = "Textarea";
1686
-
1687
2326
  // src/components/tables/data-table.tsx
1688
2327
  import { useMemo as useMemo3, useState as useState4 } from "react";
1689
2328
  import { ChevronLeft, ChevronRight as ChevronRight3, Search as Search2 } from "lucide-react";
1690
- import { jsx as jsx40, jsxs as jsxs26 } from "react/jsx-runtime";
2329
+ import { jsx as jsx46, jsxs as jsxs32 } from "react/jsx-runtime";
1691
2330
  function getCellContent(row, column) {
1692
2331
  if (column.render) {
1693
2332
  return column.render(row);
1694
2333
  }
1695
2334
  const value = row[column.key];
1696
2335
  if (value === null || value === void 0) {
1697
- return /* @__PURE__ */ jsx40("span", { className: "text-muted-foreground/40", children: "-" });
2336
+ return /* @__PURE__ */ jsx46("span", { className: "text-muted-foreground/40", children: "-" });
1698
2337
  }
1699
2338
  if (typeof value === "boolean") {
1700
2339
  return value ? "Yes" : "No";
@@ -1731,10 +2370,10 @@ function DataTable({
1731
2370
  setSearch(value);
1732
2371
  setPage(0);
1733
2372
  }
1734
- return /* @__PURE__ */ jsxs26("div", { className: "space-y-4", children: [
1735
- /* @__PURE__ */ jsxs26("div", { className: "relative", children: [
1736
- /* @__PURE__ */ jsx40(Search2, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }),
1737
- /* @__PURE__ */ jsx40(
2373
+ return /* @__PURE__ */ jsxs32("div", { className: "space-y-4", children: [
2374
+ /* @__PURE__ */ jsxs32("div", { className: "relative", children: [
2375
+ /* @__PURE__ */ jsx46(Search2, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }),
2376
+ /* @__PURE__ */ jsx46(
1738
2377
  Input,
1739
2378
  {
1740
2379
  placeholder: "Search...",
@@ -1744,25 +2383,25 @@ function DataTable({
1744
2383
  }
1745
2384
  )
1746
2385
  ] }),
1747
- /* @__PURE__ */ jsx40("div", { className: "hidden rounded-lg border md:block", children: /* @__PURE__ */ jsxs26(Table, { children: [
1748
- /* @__PURE__ */ jsx40(TableHeader, { children: /* @__PURE__ */ jsxs26(TableRow, { children: [
1749
- columns.map((column) => /* @__PURE__ */ jsx40(TableHead, { children: column.label }, String(column.key))),
1750
- actions ? /* @__PURE__ */ jsx40(TableHead, { className: "w-[100px] text-right", children: "Actions" }) : null
2386
+ /* @__PURE__ */ jsx46("div", { className: "hidden rounded-lg border md:block", children: /* @__PURE__ */ jsxs32(Table, { children: [
2387
+ /* @__PURE__ */ jsx46(TableHeader, { children: /* @__PURE__ */ jsxs32(TableRow, { children: [
2388
+ columns.map((column) => /* @__PURE__ */ jsx46(TableHead, { children: column.label }, String(column.key))),
2389
+ actions ? /* @__PURE__ */ jsx46(TableHead, { className: "w-[100px] text-right", children: "Actions" }) : null
1751
2390
  ] }) }),
1752
- /* @__PURE__ */ jsx40(TableBody, { children: isLoading ? Array.from({ length: SKELETON_ROWS }).map((_, index) => /* @__PURE__ */ jsxs26(TableRow, { children: [
1753
- columns.map((column) => /* @__PURE__ */ jsx40(TableCell, { children: /* @__PURE__ */ jsx40(Skeleton, { className: "h-4 w-full" }) }, String(column.key))),
1754
- actions ? /* @__PURE__ */ jsx40(TableCell, { children: /* @__PURE__ */ jsx40(Skeleton, { className: "ml-auto h-8 w-20" }) }) : null
1755
- ] }, index)) : paginated.length === 0 ? /* @__PURE__ */ jsx40(TableRow, { children: /* @__PURE__ */ jsx40(TableCell, { colSpan: columns.length + (actions ? 1 : 0), className: "py-12 text-center text-muted-foreground", children: emptyMessage }) }) : paginated.map((row, index) => /* @__PURE__ */ jsxs26(TableRow, { children: [
1756
- columns.map((column) => /* @__PURE__ */ jsx40(TableCell, { children: getCellContent(row, column) }, String(column.key))),
1757
- actions ? /* @__PURE__ */ jsx40(TableCell, { children: /* @__PURE__ */ jsx40("div", { className: "flex justify-end gap-1.5", children: actions(row) }) }) : null
2391
+ /* @__PURE__ */ jsx46(TableBody, { children: isLoading ? Array.from({ length: SKELETON_ROWS }).map((_, index) => /* @__PURE__ */ jsxs32(TableRow, { children: [
2392
+ columns.map((column) => /* @__PURE__ */ jsx46(TableCell, { children: /* @__PURE__ */ jsx46(Skeleton, { className: "h-4 w-full" }) }, String(column.key))),
2393
+ actions ? /* @__PURE__ */ jsx46(TableCell, { children: /* @__PURE__ */ jsx46(Skeleton, { className: "ml-auto h-8 w-20" }) }) : null
2394
+ ] }, index)) : paginated.length === 0 ? /* @__PURE__ */ jsx46(TableRow, { children: /* @__PURE__ */ jsx46(TableCell, { colSpan: columns.length + (actions ? 1 : 0), className: "py-12 text-center text-muted-foreground", children: emptyMessage }) }) : paginated.map((row, index) => /* @__PURE__ */ jsxs32(TableRow, { children: [
2395
+ columns.map((column) => /* @__PURE__ */ jsx46(TableCell, { children: getCellContent(row, column) }, String(column.key))),
2396
+ actions ? /* @__PURE__ */ jsx46(TableCell, { children: /* @__PURE__ */ jsx46("div", { className: "flex justify-end gap-1.5", children: actions(row) }) }) : null
1758
2397
  ] }, index)) })
1759
2398
  ] }) }),
1760
- /* @__PURE__ */ jsx40("div", { className: "space-y-3 md:hidden", children: isLoading ? Array.from({ length: SKELETON_ROWS }).map((_, index) => /* @__PURE__ */ jsx40(Card, { children: /* @__PURE__ */ jsxs26(CardContent, { className: "space-y-2 p-4", children: [
1761
- /* @__PURE__ */ jsx40(Skeleton, { className: "h-5 w-1/2" }),
1762
- /* @__PURE__ */ jsx40(Skeleton, { className: "h-4 w-2/3" }),
1763
- /* @__PURE__ */ jsx40(Skeleton, { className: "h-4 w-1/3" })
1764
- ] }) }, index)) : paginated.length === 0 ? /* @__PURE__ */ jsx40("p", { className: "py-10 text-center text-muted-foreground", children: emptyMessage }) : paginated.map((row, index) => /* @__PURE__ */ jsx40(Card, { children: /* @__PURE__ */ jsxs26(CardContent, { className: "space-y-3 p-4", children: [
1765
- /* @__PURE__ */ jsx40("div", { className: "space-y-1.5", children: mobileColumns.map((column, mobileIndex) => /* @__PURE__ */ jsxs26(
2399
+ /* @__PURE__ */ jsx46("div", { className: "space-y-3 md:hidden", children: isLoading ? Array.from({ length: SKELETON_ROWS }).map((_, index) => /* @__PURE__ */ jsx46(Card, { children: /* @__PURE__ */ jsxs32(CardContent, { className: "space-y-2 p-4", children: [
2400
+ /* @__PURE__ */ jsx46(Skeleton, { className: "h-5 w-1/2" }),
2401
+ /* @__PURE__ */ jsx46(Skeleton, { className: "h-4 w-2/3" }),
2402
+ /* @__PURE__ */ jsx46(Skeleton, { className: "h-4 w-1/3" })
2403
+ ] }) }, index)) : paginated.length === 0 ? /* @__PURE__ */ jsx46("p", { className: "py-10 text-center text-muted-foreground", children: emptyMessage }) : paginated.map((row, index) => /* @__PURE__ */ jsx46(Card, { children: /* @__PURE__ */ jsxs32(CardContent, { className: "space-y-3 p-4", children: [
2404
+ /* @__PURE__ */ jsx46("div", { className: "space-y-1.5", children: mobileColumns.map((column, mobileIndex) => /* @__PURE__ */ jsxs32(
1766
2405
  "div",
1767
2406
  {
1768
2407
  className: cn(
@@ -1770,27 +2409,27 @@ function DataTable({
1770
2409
  mobileIndex === 0 ? "text-sm font-medium text-foreground" : "text-xs text-muted-foreground"
1771
2410
  ),
1772
2411
  children: [
1773
- mobileIndex > 0 ? /* @__PURE__ */ jsxs26("span", { className: "shrink-0 font-medium text-foreground/50", children: [
2412
+ mobileIndex > 0 ? /* @__PURE__ */ jsxs32("span", { className: "shrink-0 font-medium text-foreground/50", children: [
1774
2413
  column.label,
1775
2414
  ":"
1776
2415
  ] }) : null,
1777
- /* @__PURE__ */ jsx40("span", { className: "truncate", children: getCellContent(row, column) })
2416
+ /* @__PURE__ */ jsx46("span", { className: "truncate", children: getCellContent(row, column) })
1778
2417
  ]
1779
2418
  },
1780
2419
  String(column.key)
1781
2420
  )) }),
1782
- actions ? /* @__PURE__ */ jsx40("div", { className: "flex gap-2 border-t border-border pt-2", children: actions(row) }) : null
2421
+ actions ? /* @__PURE__ */ jsx46("div", { className: "flex gap-2 border-t border-border pt-2", children: actions(row) }) : null
1783
2422
  ] }) }, index)) }),
1784
- !isLoading && filtered.length > pageSize ? /* @__PURE__ */ jsxs26("div", { className: "flex items-center justify-between", children: [
1785
- /* @__PURE__ */ jsxs26("span", { className: "text-sm text-muted-foreground", children: [
2423
+ !isLoading && filtered.length > pageSize ? /* @__PURE__ */ jsxs32("div", { className: "flex items-center justify-between", children: [
2424
+ /* @__PURE__ */ jsxs32("span", { className: "text-sm text-muted-foreground", children: [
1786
2425
  filtered.length,
1787
2426
  " records \xB7 Page ",
1788
2427
  currentPage + 1,
1789
2428
  " of ",
1790
2429
  totalPages
1791
2430
  ] }),
1792
- /* @__PURE__ */ jsxs26("div", { className: "flex gap-1", children: [
1793
- /* @__PURE__ */ jsx40(
2431
+ /* @__PURE__ */ jsxs32("div", { className: "flex gap-1", children: [
2432
+ /* @__PURE__ */ jsx46(
1794
2433
  Button,
1795
2434
  {
1796
2435
  variant: "outline",
@@ -1798,10 +2437,10 @@ function DataTable({
1798
2437
  className: "h-8 w-8",
1799
2438
  onClick: () => setPage((previous) => Math.max(0, previous - 1)),
1800
2439
  disabled: currentPage === 0,
1801
- children: /* @__PURE__ */ jsx40(ChevronLeft, { className: "h-4 w-4" })
2440
+ children: /* @__PURE__ */ jsx46(ChevronLeft, { className: "h-4 w-4" })
1802
2441
  }
1803
2442
  ),
1804
- /* @__PURE__ */ jsx40(
2443
+ /* @__PURE__ */ jsx46(
1805
2444
  Button,
1806
2445
  {
1807
2446
  variant: "outline",
@@ -1809,7 +2448,7 @@ function DataTable({
1809
2448
  className: "h-8 w-8",
1810
2449
  onClick: () => setPage((previous) => Math.min(totalPages - 1, previous + 1)),
1811
2450
  disabled: currentPage >= totalPages - 1,
1812
- children: /* @__PURE__ */ jsx40(ChevronRight3, { className: "h-4 w-4" })
2451
+ children: /* @__PURE__ */ jsx46(ChevronRight3, { className: "h-4 w-4" })
1813
2452
  }
1814
2453
  )
1815
2454
  ] })
@@ -1819,14 +2458,14 @@ function DataTable({
1819
2458
 
1820
2459
  // src/components/tables/table-row-actions.tsx
1821
2460
  import { MoreHorizontal as MoreHorizontal2 } from "lucide-react";
1822
- import { jsx as jsx41, jsxs as jsxs27 } from "react/jsx-runtime";
2461
+ import { jsx as jsx47, jsxs as jsxs33 } from "react/jsx-runtime";
1823
2462
  function TableRowActions({ className, label = "Abrir acciones", menuLabel = "Acciones", items }) {
1824
- return /* @__PURE__ */ jsxs27(DropdownMenu, { children: [
1825
- /* @__PURE__ */ jsx41(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx41(Button, { variant: "ghost", size: "icon", className: cn("h-8 w-8 shadow-none", className), "aria-label": label, children: /* @__PURE__ */ jsx41(MoreHorizontal2, { className: "h-4 w-4" }) }) }),
1826
- /* @__PURE__ */ jsxs27(DropdownMenuContent, { align: "end", className: "w-48", children: [
1827
- /* @__PURE__ */ jsx41(DropdownMenuLabel, { children: menuLabel }),
1828
- /* @__PURE__ */ jsx41(DropdownMenuSeparator, {}),
1829
- items.map((item) => /* @__PURE__ */ jsxs27(
2463
+ return /* @__PURE__ */ jsxs33(DropdownMenu, { children: [
2464
+ /* @__PURE__ */ jsx47(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx47(Button, { variant: "ghost", size: "icon", className: cn("h-8 w-8 shadow-none", className), "aria-label": label, children: /* @__PURE__ */ jsx47(MoreHorizontal2, { className: "h-4 w-4" }) }) }),
2465
+ /* @__PURE__ */ jsxs33(DropdownMenuContent, { align: "end", className: "w-48", children: [
2466
+ /* @__PURE__ */ jsx47(DropdownMenuLabel, { children: menuLabel }),
2467
+ /* @__PURE__ */ jsx47(DropdownMenuSeparator, {}),
2468
+ items.map((item) => /* @__PURE__ */ jsxs33(
1830
2469
  DropdownMenuItem,
1831
2470
  {
1832
2471
  disabled: item.disabled,
@@ -1835,7 +2474,7 @@ function TableRowActions({ className, label = "Abrir acciones", menuLabel = "Acc
1835
2474
  children: [
1836
2475
  item.icon,
1837
2476
  item.label,
1838
- item.shortcut ? /* @__PURE__ */ jsx41(DropdownMenuShortcut, { children: item.shortcut }) : null
2477
+ item.shortcut ? /* @__PURE__ */ jsx47(DropdownMenuShortcut, { children: item.shortcut }) : null
1839
2478
  ]
1840
2479
  },
1841
2480
  item.label
@@ -1844,6 +2483,23 @@ function TableRowActions({ className, label = "Abrir acciones", menuLabel = "Acc
1844
2483
  ] });
1845
2484
  }
1846
2485
  export {
2486
+ AiChatAssistantMessage,
2487
+ AiChatComposer,
2488
+ AiChatEmptyState,
2489
+ AiChatFloatingButton,
2490
+ AiChatFloatingSidebar,
2491
+ AiChatHeader,
2492
+ AiChatLayout,
2493
+ AiChatMessage,
2494
+ AiChatMessageList,
2495
+ AiChatPanel,
2496
+ AiChatSidebar,
2497
+ AiChatSidebarHeader,
2498
+ AiChatSummaryAction,
2499
+ AiChatSummaryActions,
2500
+ AiChatThreadButton,
2501
+ AiChatThreadList,
2502
+ AiChatUserMessage,
1847
2503
  Alert,
1848
2504
  AlertDescription,
1849
2505
  AlertTitle,
@@ -1908,14 +2564,17 @@ export {
1908
2564
  DropdownMenuSubContent,
1909
2565
  DropdownMenuSubTrigger,
1910
2566
  DropdownMenuTrigger,
2567
+ EmptyState,
1911
2568
  FeatureIcon,
1912
2569
  FormSection,
2570
+ HeaderUserMenu,
1913
2571
  Input,
1914
2572
  Label3 as Label,
1915
2573
  LoadingCard,
1916
2574
  LoadingState,
1917
2575
  LoadingTableRows,
1918
2576
  ModuleIconButton,
2577
+ ModuleSkeleton,
1919
2578
  Navbar,
1920
2579
  NotificationAction,
1921
2580
  NotificationMessage,
@@ -1955,6 +2614,8 @@ export {
1955
2614
  Steps,
1956
2615
  Switch,
1957
2616
  SwitchField,
2617
+ SyncStatusBadge,
2618
+ SyncStatusBar,
1958
2619
  Table,
1959
2620
  TableBody,
1960
2621
  TableCaption,