@asteby/metacore-starter-core 1.1.0 → 1.1.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 (116) hide show
  1. package/README.md +2 -2
  2. package/dist/components/ui/accordion.d.ts +8 -0
  3. package/dist/components/ui/accordion.d.ts.map +1 -0
  4. package/dist/components/ui/alert-dialog.d.ts +15 -0
  5. package/dist/components/ui/alert-dialog.d.ts.map +1 -0
  6. package/dist/components/ui/alert.d.ts +10 -0
  7. package/dist/components/ui/alert.d.ts.map +1 -0
  8. package/dist/components/ui/avatar.d.ts +7 -0
  9. package/dist/components/ui/avatar.d.ts.map +1 -0
  10. package/dist/components/ui/badge.d.ts +10 -0
  11. package/dist/components/ui/badge.d.ts.map +1 -0
  12. package/dist/components/ui/button.d.ts +11 -0
  13. package/dist/components/ui/button.d.ts.map +1 -0
  14. package/dist/components/ui/calendar.d.ts +9 -0
  15. package/dist/components/ui/calendar.d.ts.map +1 -0
  16. package/dist/components/ui/card.d.ts +10 -0
  17. package/dist/components/ui/card.d.ts.map +1 -0
  18. package/dist/components/ui/checkbox.d.ts +5 -0
  19. package/dist/components/ui/checkbox.d.ts.map +1 -0
  20. package/dist/components/ui/code-editor.d.ts +13 -0
  21. package/dist/components/ui/code-editor.d.ts.map +1 -0
  22. package/dist/components/ui/collapsible.d.ts +6 -0
  23. package/dist/components/ui/collapsible.d.ts.map +1 -0
  24. package/dist/components/ui/command.d.ts +19 -0
  25. package/dist/components/ui/command.d.ts.map +1 -0
  26. package/dist/components/ui/dialog.d.ts +16 -0
  27. package/dist/components/ui/dialog.d.ts.map +1 -0
  28. package/dist/components/ui/dropdown-menu.d.ts +26 -0
  29. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  30. package/dist/components/ui/form.d.ts +25 -0
  31. package/dist/components/ui/form.d.ts.map +1 -0
  32. package/dist/components/ui/image-upload.d.ts +11 -0
  33. package/dist/components/ui/image-upload.d.ts.map +1 -0
  34. package/dist/components/ui/index.d.ts +37 -0
  35. package/dist/components/ui/index.d.ts.map +1 -0
  36. package/dist/components/ui/input-otp.d.ts +12 -0
  37. package/dist/components/ui/input-otp.d.ts.map +1 -0
  38. package/dist/components/ui/input.d.ts +4 -0
  39. package/dist/components/ui/input.d.ts.map +1 -0
  40. package/dist/components/ui/label.d.ts +5 -0
  41. package/dist/components/ui/label.d.ts.map +1 -0
  42. package/dist/components/ui/multi-select.d.ts +18 -0
  43. package/dist/components/ui/multi-select.d.ts.map +1 -0
  44. package/dist/components/ui/phone-input.d.ts +8 -0
  45. package/dist/components/ui/phone-input.d.ts.map +1 -0
  46. package/dist/components/ui/popover.d.ts +8 -0
  47. package/dist/components/ui/popover.d.ts.map +1 -0
  48. package/dist/components/ui/progress.d.ts +5 -0
  49. package/dist/components/ui/progress.d.ts.map +1 -0
  50. package/dist/components/ui/radio-group.d.ts +6 -0
  51. package/dist/components/ui/radio-group.d.ts.map +1 -0
  52. package/dist/components/ui/scroll-area.d.ts +11 -0
  53. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  54. package/dist/components/ui/select.d.ts +16 -0
  55. package/dist/components/ui/select.d.ts.map +1 -0
  56. package/dist/components/ui/separator.d.ts +5 -0
  57. package/dist/components/ui/separator.d.ts.map +1 -0
  58. package/dist/components/ui/sheet.d.ts +14 -0
  59. package/dist/components/ui/sheet.d.ts.map +1 -0
  60. package/dist/components/ui/sidebar.d.ts +70 -0
  61. package/dist/components/ui/sidebar.d.ts.map +1 -0
  62. package/dist/components/ui/skeleton.d.ts +3 -0
  63. package/dist/components/ui/skeleton.d.ts.map +1 -0
  64. package/dist/components/ui/sonner.d.ts +3 -0
  65. package/dist/components/ui/sonner.d.ts.map +1 -0
  66. package/dist/components/ui/switch.d.ts +5 -0
  67. package/dist/components/ui/switch.d.ts.map +1 -0
  68. package/dist/components/ui/table.d.ts +14 -0
  69. package/dist/components/ui/table.d.ts.map +1 -0
  70. package/dist/components/ui/tabs.d.ts +8 -0
  71. package/dist/components/ui/tabs.d.ts.map +1 -0
  72. package/dist/components/ui/textarea.d.ts +4 -0
  73. package/dist/components/ui/textarea.d.ts.map +1 -0
  74. package/dist/components/ui/tooltip.d.ts +8 -0
  75. package/dist/components/ui/tooltip.d.ts.map +1 -0
  76. package/dist/context/theme-provider.d.ts +18 -0
  77. package/dist/context/theme-provider.d.ts.map +1 -0
  78. package/dist/hooks/use-mobile.d.ts +2 -0
  79. package/dist/hooks/use-mobile.d.ts.map +1 -0
  80. package/dist/i18n/i18n.d.ts +5 -0
  81. package/dist/i18n/i18n.d.ts.map +1 -0
  82. package/dist/index.cjs +7 -0
  83. package/dist/index.cjs.map +1 -0
  84. package/dist/index.d.ts +3 -0
  85. package/dist/index.d.ts.map +1 -0
  86. package/dist/index.js +2350 -0
  87. package/dist/index.js.map +1 -0
  88. package/dist/lib/api.d.ts +2 -0
  89. package/dist/lib/api.d.ts.map +1 -0
  90. package/dist/lib/cookies.d.ts +17 -0
  91. package/dist/lib/cookies.d.ts.map +1 -0
  92. package/dist/lib/countries.d.ts +7 -0
  93. package/dist/lib/countries.d.ts.map +1 -0
  94. package/dist/lib/currency-utils.d.ts +17 -0
  95. package/dist/lib/currency-utils.d.ts.map +1 -0
  96. package/dist/lib/date-utils.d.ts +10 -0
  97. package/dist/lib/date-utils.d.ts.map +1 -0
  98. package/dist/lib/format.d.ts +11 -0
  99. package/dist/lib/format.d.ts.map +1 -0
  100. package/dist/lib/handle-server-error.d.ts +2 -0
  101. package/dist/lib/handle-server-error.d.ts.map +1 -0
  102. package/dist/lib/index.d.ts +13 -0
  103. package/dist/lib/index.d.ts.map +1 -0
  104. package/dist/lib/notifications.d.ts +20 -0
  105. package/dist/lib/notifications.d.ts.map +1 -0
  106. package/dist/lib/option-colors.d.ts +27 -0
  107. package/dist/lib/option-colors.d.ts.map +1 -0
  108. package/dist/lib/push-notifications.d.ts +17 -0
  109. package/dist/lib/push-notifications.d.ts.map +1 -0
  110. package/dist/lib/sound.d.ts +2 -0
  111. package/dist/lib/sound.d.ts.map +1 -0
  112. package/dist/lib/utils.d.ts +28 -0
  113. package/dist/lib/utils.d.ts.map +1 -0
  114. package/dist/stores/auth-store.d.ts +37 -0
  115. package/dist/stores/auth-store.d.ts.map +1 -0
  116. package/package.json +6 -6
package/dist/index.js ADDED
@@ -0,0 +1,2350 @@
1
+ import { clsx as e } from "clsx";
2
+ import { twMerge as t } from "tailwind-merge";
3
+ import { create as n } from "zustand";
4
+ import { Toaster as r, toast as i } from "sonner";
5
+ import a, { AxiosError as o } from "axios";
6
+ import * as s from "react";
7
+ import { createContext as c, useContext as l, useEffect as u, useRef as d, useState as f } from "react";
8
+ import * as p from "@radix-ui/react-accordion";
9
+ import { Check as m, CheckIcon as h, ChevronDown as g, ChevronDownIcon as _, ChevronLeftIcon as ee, ChevronRightIcon as te, ChevronUpIcon as ne, ChevronsUpDown as re, CircleIcon as ie, Image as ae, Loader2 as oe, MinusIcon as se, PanelLeftIcon as ce, SearchIcon as le, X as ue, XIcon as de } from "lucide-react";
10
+ import { jsx as v, jsxs as y } from "react/jsx-runtime";
11
+ import { cva as b } from "class-variance-authority";
12
+ import * as x from "@radix-ui/react-alert-dialog";
13
+ import { Slot as S } from "@radix-ui/react-slot";
14
+ import * as C from "@radix-ui/react-avatar";
15
+ import { DayPicker as fe, getDefaultClassNames as pe } from "react-day-picker";
16
+ import * as me from "@radix-ui/react-checkbox";
17
+ import he from "@monaco-editor/react";
18
+ import * as ge from "@radix-ui/react-collapsible";
19
+ import { Command as w } from "cmdk";
20
+ import * as T from "@radix-ui/react-dialog";
21
+ import * as E from "@radix-ui/react-dropdown-menu";
22
+ import { Controller as _e, FormProvider as ve, useFormContext as ye, useFormState as be } from "react-hook-form";
23
+ import * as xe from "@radix-ui/react-label";
24
+ import { OTPInput as Se, OTPInputContext as Ce } from "input-otp";
25
+ import * as D from "@radix-ui/react-popover";
26
+ import * as we from "react-phone-number-input";
27
+ import Te from "react-phone-number-input/flags";
28
+ import * as O from "@radix-ui/react-scroll-area";
29
+ import * as k from "@radix-ui/react-progress";
30
+ import * as Ee from "@radix-ui/react-radio-group";
31
+ import * as A from "@radix-ui/react-select";
32
+ import * as De from "@radix-ui/react-separator";
33
+ import * as j from "@radix-ui/react-tooltip";
34
+ import * as Oe from "@radix-ui/react-switch";
35
+ import * as M from "@radix-ui/react-tabs";
36
+ //#region src/lib/utils.ts
37
+ function N(...n) {
38
+ return t(e(n));
39
+ }
40
+ function ke(e, t) {
41
+ if (!e) return "";
42
+ if (e.startsWith("http://") || e.startsWith("https://")) return e;
43
+ let n = "http://localhost:8080/api".replace(/\/api$/, "");
44
+ return e.startsWith("/storage/") ? `${n}${e}` : `${n}/storage/${t}/${e}`;
45
+ }
46
+ function Ae(e) {
47
+ return e ? e.startsWith("http://") || e.startsWith("https://") ? e : `${"http://localhost:8080".replace(/\/api\/?$/, "").replace(/\/+$/, "")}${e.startsWith("/") ? e : `/${e}`}` : "";
48
+ }
49
+ function je(e = 1e3) {
50
+ return new Promise((t) => setTimeout(t, e));
51
+ }
52
+ function Me(e, t) {
53
+ let n = [];
54
+ if (t <= 5) for (let e = 1; e <= t; e++) n.push(e);
55
+ else if (n.push(1), e <= 3) {
56
+ for (let e = 2; e <= 4; e++) n.push(e);
57
+ n.push("...", t);
58
+ } else if (e >= t - 2) {
59
+ n.push("...");
60
+ for (let e = t - 3; e <= t; e++) n.push(e);
61
+ } else {
62
+ n.push("...");
63
+ for (let t = e - 1; t <= e + 1; t++) n.push(t);
64
+ n.push("...", t);
65
+ }
66
+ return n;
67
+ }
68
+ //#endregion
69
+ //#region src/stores/auth-store.ts
70
+ var P = "auth_token", F = "auth_user", I = n()((e) => {
71
+ let t = localStorage.getItem(P) || "", n = localStorage.getItem(F);
72
+ return { auth: {
73
+ user: n ? JSON.parse(n) : null,
74
+ setUser: (t) => e((e) => (t ? localStorage.setItem(F, JSON.stringify(t)) : localStorage.removeItem(F), {
75
+ ...e,
76
+ auth: {
77
+ ...e.auth,
78
+ user: t
79
+ }
80
+ })),
81
+ accessToken: t,
82
+ setAccessToken: (t) => e((e) => (localStorage.setItem(P, t), {
83
+ ...e,
84
+ auth: {
85
+ ...e.auth,
86
+ accessToken: t
87
+ }
88
+ })),
89
+ resetAccessToken: () => e((e) => (localStorage.removeItem(P), localStorage.removeItem(F), {
90
+ ...e,
91
+ auth: {
92
+ ...e.auth,
93
+ accessToken: "",
94
+ user: null
95
+ }
96
+ })),
97
+ reset: () => e((e) => (localStorage.removeItem(P), localStorage.removeItem(F), {
98
+ ...e,
99
+ auth: {
100
+ ...e.auth,
101
+ user: null,
102
+ accessToken: ""
103
+ }
104
+ }))
105
+ } };
106
+ }), Ne = {
107
+ PEN: "S/",
108
+ VES: "Bs.",
109
+ BOB: "Bs.",
110
+ GTQ: "Q",
111
+ HNL: "L",
112
+ NIO: "C$",
113
+ CRC: "₡",
114
+ PAB: "B/.",
115
+ PYG: "₲",
116
+ MXN: "$",
117
+ COP: "$",
118
+ ARS: "$",
119
+ CLP: "$",
120
+ UYU: "$",
121
+ DOP: "$",
122
+ CUP: "$",
123
+ EUR: "€",
124
+ USD: "$"
125
+ };
126
+ function Pe(e, t = "USD", n = "es") {
127
+ try {
128
+ return new Intl.NumberFormat(n, {
129
+ style: "currency",
130
+ currency: t
131
+ }).format(e);
132
+ } catch {
133
+ return `${t} ${e}`;
134
+ }
135
+ }
136
+ function Fe(e) {
137
+ return Ne[e] || (typeof Intl < "u" ? new Intl.NumberFormat("en-US", {
138
+ style: "currency",
139
+ currency: e,
140
+ currencyDisplay: "narrowSymbol"
141
+ }).formatToParts(0).find((e) => e.type === "currency")?.value || e : "$");
142
+ }
143
+ //#endregion
144
+ //#region src/lib/format.ts
145
+ function Ie() {
146
+ let e = I((e) => e.auth.user?.currency_code) || "USD";
147
+ return (t) => Pe(t, e);
148
+ }
149
+ function Le(e) {
150
+ return Pe(e, I.getState().auth.user?.currency_code || "USD");
151
+ }
152
+ //#endregion
153
+ //#region src/lib/date-utils.ts
154
+ function Re() {
155
+ let e = typeof Intl < "u" && Intl.supportedValuesOf ? Intl.supportedValuesOf("timeZone") : [
156
+ "UTC",
157
+ "America/Mexico_City",
158
+ "America/Bogota",
159
+ "America/Santiago",
160
+ "America/Argentina/Buenos_Aires",
161
+ "America/New_York",
162
+ "America/Los_Angeles",
163
+ "Europe/Madrid",
164
+ "Europe/London",
165
+ "Europe/Paris",
166
+ "Asia/Tokyo",
167
+ "Asia/Shanghai",
168
+ "Asia/Dubai",
169
+ "Australia/Sydney"
170
+ ], t = /* @__PURE__ */ new Date();
171
+ return e.map((e) => {
172
+ try {
173
+ let n = new Intl.DateTimeFormat("en-US", {
174
+ timeZone: e,
175
+ timeZoneName: "shortOffset"
176
+ }).formatToParts(t).find((e) => e.type === "timeZoneName")?.value || "";
177
+ return {
178
+ value: e,
179
+ label: `(${n}) ${e.replace(/_/g, " ")}`,
180
+ offset: n
181
+ };
182
+ } catch {
183
+ return {
184
+ value: e,
185
+ label: e,
186
+ offset: ""
187
+ };
188
+ }
189
+ }).sort((e, t) => {
190
+ let n = (e) => {
191
+ if (!e || e === "GMT") return 0;
192
+ let t = e.match(/GMT([+-])(\d+)(?::(\d+))?/);
193
+ if (!t) return 0;
194
+ let n = t[1] === "+" ? 1 : -1, r = parseInt(t[2]), i = parseInt(t[3] || "0");
195
+ return n * (r * 60 + i);
196
+ }, r = n(e.offset), i = n(t.offset);
197
+ return r === i ? e.value.localeCompare(t.value) : r - i;
198
+ });
199
+ }
200
+ //#endregion
201
+ //#region src/lib/countries.ts
202
+ var ze = /* @__PURE__ */ "AR.AT.AU.AE.AL.AO.AZ.BA.BB.BD.BE.BG.BH.BO.BR.BS.BY.BZ.CA.CD.CH.CI.CL.CM.CN.CO.CR.CU.CY.CZ.DE.DK.DO.DZ.EC.EE.EG.ES.ET.SV.FI.FJ.FR.GB.GE.GH.GR.GT.GY.HK.HN.HR.HT.HU.ID.IE.IL.IN.IQ.IR.IS.IT.JM.JO.JP.KE.KH.KR.KW.KZ.LA.LB.LK.LT.LU.LV.LY.MA.MD.ME.MK.MM.MN.MT.MU.MX.MY.MZ.NG.NI.NL.NO.NP.NZ.OM.PA.PE.PG.PH.PK.PL.PR.PT.PY.QA.RO.RS.RU.RW.SA.SE.SG.SI.SK.SN.SR.TH.TN.TR.TT.TW.TZ.UA.UG.US.UY.UZ.VE.VN.ZA".split(".");
203
+ function Be(e) {
204
+ return String.fromCodePoint(...e.toUpperCase().split("").map((e) => 127462 + e.charCodeAt(0) - 65));
205
+ }
206
+ function Ve(e) {
207
+ let t = e || navigator.language || "es", n = new Intl.DisplayNames([t], { type: "region" });
208
+ return ze.map((e) => ({
209
+ code: e,
210
+ name: n.of(e) || e,
211
+ flag: Be(e)
212
+ })).sort((e, n) => e.name.localeCompare(n.name, t));
213
+ }
214
+ //#endregion
215
+ //#region src/lib/option-colors.ts
216
+ var He = {
217
+ red: "ef4444",
218
+ orange: "f97316",
219
+ amber: "f59e0b",
220
+ yellow: "eab308",
221
+ lime: "84cc16",
222
+ green: "22c55e",
223
+ emerald: "10b981",
224
+ teal: "14b8a6",
225
+ cyan: "06b6d4",
226
+ sky: "0ea5e9",
227
+ blue: "3b82f6",
228
+ indigo: "6366f1",
229
+ violet: "8b5cf6",
230
+ purple: "a855f7",
231
+ fuchsia: "d946ef",
232
+ pink: "ec4899",
233
+ rose: "f43f5e",
234
+ gray: "6b7280",
235
+ slate: "64748b",
236
+ zinc: "71717a",
237
+ neutral: "737373",
238
+ stone: "78716c"
239
+ }, Ue = (e) => e ? He[e.toLowerCase()] || e.replace("#", "") : "", We = (e) => {
240
+ let t = Ue(e);
241
+ return t ? `#${t}` : "";
242
+ }, Ge = (e, { isDark: t }) => {
243
+ let n = Ue(e);
244
+ if (n.length < 6) return {};
245
+ let r = parseInt(n.substring(0, 2), 16), i = parseInt(n.substring(2, 4), 16), a = parseInt(n.substring(4, 6), 16);
246
+ return t ? {
247
+ backgroundColor: `rgba(${r}, ${i}, ${a}, 0.2)`,
248
+ color: `rgb(${Math.min(255, Math.floor(r * 1.2))}, ${Math.min(255, Math.floor(i * 1.2))}, ${Math.min(255, Math.floor(a * 1.2))})`,
249
+ border: `1px solid rgba(${r}, ${i}, ${a}, 0.5)`,
250
+ fontWeight: 500
251
+ } : {
252
+ backgroundColor: `rgba(${r}, ${i}, ${a}, 0.12)`,
253
+ color: `rgb(${Math.floor(r * .5)}, ${Math.floor(i * .5)}, ${Math.floor(a * .5)})`,
254
+ border: `1px solid rgba(${r}, ${i}, ${a}, 0.25)`,
255
+ fontWeight: 500
256
+ };
257
+ }, Ke = 3600 * 24 * 7;
258
+ function qe(e) {
259
+ if (typeof document > "u") return;
260
+ let t = `; ${document.cookie}`.split(`; ${e}=`);
261
+ if (t.length === 2) return t.pop()?.split(";").shift();
262
+ }
263
+ function Je(e, t, n = Ke) {
264
+ typeof document > "u" || (document.cookie = `${e}=${t}; path=/; max-age=${n}`);
265
+ }
266
+ function Ye(e) {
267
+ typeof document > "u" || (document.cookie = `${e}=; path=/; max-age=0`);
268
+ }
269
+ //#endregion
270
+ //#region src/lib/sound.ts
271
+ function Xe() {
272
+ try {
273
+ let e = window.AudioContext || window.webkitAudioContext;
274
+ if (!e) return;
275
+ let t = new e(), n = t.createOscillator(), r = t.createGain();
276
+ n.connect(r), r.connect(t.destination), n.type = "sine", n.frequency.setValueAtTime(880, t.currentTime), n.frequency.exponentialRampToValueAtTime(500, t.currentTime + .5), r.gain.setValueAtTime(.1, t.currentTime), r.gain.exponentialRampToValueAtTime(.001, t.currentTime + .4), n.start(t.currentTime), n.stop(t.currentTime + .5);
277
+ } catch (e) {
278
+ console.error("Error playing notification sound:", e);
279
+ }
280
+ }
281
+ var Ze = new class {
282
+ permission = "default";
283
+ constructor() {
284
+ "Notification" in window && (this.permission = Notification.permission);
285
+ }
286
+ async requestPermission() {
287
+ if (!("Notification" in window)) return i.error("Este navegador no soporta notificaciones"), !1;
288
+ if (this.permission === "granted") return !0;
289
+ try {
290
+ let e = await Notification.requestPermission();
291
+ return this.permission = e, e === "granted" ? (i.success("Notificaciones activadas"), !0) : (i.error("Permiso de notificaciones denegado"), !1);
292
+ } catch (e) {
293
+ return console.error("Error requesting notification permission:", e), i.error("Error al solicitar permisos"), !1;
294
+ }
295
+ }
296
+ async show(e) {
297
+ if (!("Notification" in window)) {
298
+ i(e.title, { description: e.body });
299
+ return;
300
+ }
301
+ if (this.permission !== "granted" && !await this.requestPermission()) {
302
+ i(e.title, { description: e.body });
303
+ return;
304
+ }
305
+ try {
306
+ if ("serviceWorker" in navigator && navigator.serviceWorker.controller) await (await navigator.serviceWorker.ready).showNotification(e.title, {
307
+ body: e.body,
308
+ icon: e.icon || "/images/icons/android/android-launchericon-192-192.png",
309
+ badge: "/images/icons/android/android-launchericon-96-96.png",
310
+ tag: e.tag,
311
+ data: e.data,
312
+ requireInteraction: e.requireInteraction || !1,
313
+ silent: e.silent || !1
314
+ });
315
+ else {
316
+ let t = new Notification(e.title, {
317
+ body: e.body,
318
+ icon: e.icon || "/images/icons/android/android-launchericon-192-192.png",
319
+ tag: e.tag,
320
+ data: e.data,
321
+ requireInteraction: e.requireInteraction || !1,
322
+ silent: e.silent || !1
323
+ });
324
+ t.onclick = () => {
325
+ window.focus(), t.close();
326
+ };
327
+ }
328
+ i(e.title, {
329
+ description: e.body,
330
+ duration: 5e3
331
+ });
332
+ } catch (t) {
333
+ console.error("Error showing notification:", t), i(e.title, { description: e.body });
334
+ }
335
+ }
336
+ isSupported() {
337
+ return "Notification" in window;
338
+ }
339
+ getPermission() {
340
+ return this.permission;
341
+ }
342
+ }(), Qe = { language: "es" }, L = a.create({
343
+ baseURL: "/api",
344
+ headers: { "Content-Type": "application/json" }
345
+ });
346
+ L.interceptors.request.use((e) => {
347
+ let t = localStorage.getItem("auth_token");
348
+ t && (e.headers.Authorization = `Bearer ${t}`), e.headers["Accept-Language"] = Qe.language || "es";
349
+ try {
350
+ let t = JSON.parse(localStorage.getItem("current_branch") || "{}");
351
+ t?.id && (e.headers["X-Branch-ID"] = t.id);
352
+ } catch {}
353
+ return e.data instanceof FormData && delete e.headers["Content-Type"], e;
354
+ }), L.interceptors.response.use((e) => e, (e) => {
355
+ let t = e.response?.status, n = e.response?.data, r = e.config?.method?.toUpperCase() + " " + e.config?.url, i = n?.message || n?.error || n?.title || e.message;
356
+ if (console.error(`[API Error] ${r} → ${t}: ${i}`, n), t === 401) {
357
+ let { reset: e } = I.getState().auth;
358
+ e(), window.location.href = "/sign-in";
359
+ }
360
+ return Promise.reject(e);
361
+ });
362
+ var $e = new class {
363
+ vapidPublicKey = null;
364
+ subscription = null;
365
+ isSupported = !1;
366
+ constructor() {
367
+ this.isSupported = "serviceWorker" in navigator && "PushManager" in window;
368
+ }
369
+ async init() {
370
+ if (!this.isSupported) {
371
+ console.log("⚠️ Push notifications not supported");
372
+ return;
373
+ }
374
+ try {
375
+ let e = await L.get("/push/public-key");
376
+ e.data?.publicKey && (this.vapidPublicKey = e.data.publicKey, console.log("✅ VAPID public key loaded")), this.subscription = await (await navigator.serviceWorker.ready).pushManager.getSubscription(), this.subscription && console.log("✅ Existing push subscription found");
377
+ } catch (e) {
378
+ console.error("Failed to initialize push service:", e);
379
+ }
380
+ }
381
+ async subscribe() {
382
+ if (!this.isSupported) return i.error("Tu navegador no soporta notificaciones push"), !1;
383
+ if (!this.vapidPublicKey && (await this.init(), !this.vapidPublicKey)) return i.error("No se pudo obtener la clave del servidor"), !1;
384
+ try {
385
+ if (await Notification.requestPermission() !== "granted") return i.error("Permiso de notificaciones denegado"), !1;
386
+ let e = await (await navigator.serviceWorker.ready).pushManager.subscribe({
387
+ userVisibleOnly: !0,
388
+ applicationServerKey: this.urlBase64ToUint8Array(this.vapidPublicKey)
389
+ });
390
+ this.subscription = e;
391
+ let t = e.toJSON().keys;
392
+ return await L.post("/push/subscribe", {
393
+ endpoint: e.endpoint,
394
+ p256dh: t.p256dh,
395
+ auth: t.auth,
396
+ device_type: this.detectDeviceType()
397
+ }), i.success("🔔 Notificaciones push activadas"), console.log("✅ Push subscription registered"), !0;
398
+ } catch (e) {
399
+ return console.error("Failed to subscribe to push:", e), i.error("Error al activar notificaciones push"), !1;
400
+ }
401
+ }
402
+ async unsubscribe() {
403
+ if (!this.subscription) return !0;
404
+ try {
405
+ return await this.subscription.unsubscribe(), await L.post("/push/unsubscribe", { endpoint: this.subscription.endpoint }), this.subscription = null, i.success("Notificaciones push desactivadas"), !0;
406
+ } catch (e) {
407
+ return console.error("Failed to unsubscribe:", e), i.error("Error al desactivar notificaciones"), !1;
408
+ }
409
+ }
410
+ async testNotification() {
411
+ try {
412
+ await L.post("/push/test"), i.success("Notificación de prueba enviada");
413
+ } catch (e) {
414
+ console.error("Failed to send test notification:", e), i.error("Error al enviar notificación de prueba");
415
+ }
416
+ }
417
+ isSubscribed() {
418
+ return this.subscription !== null;
419
+ }
420
+ getSupported() {
421
+ return this.isSupported;
422
+ }
423
+ urlBase64ToUint8Array(e) {
424
+ let t = (e + "=".repeat((4 - e.length % 4) % 4)).replace(/-/g, "+").replace(/_/g, "/"), n = window.atob(t), r = new Uint8Array(n.length);
425
+ for (let e = 0; e < n.length; ++e) r[e] = n.charCodeAt(e);
426
+ return r;
427
+ }
428
+ detectDeviceType() {
429
+ let e = navigator.userAgent.toLowerCase();
430
+ return /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(e) ? "mobile" : /electron/i.test(e) ? "desktop" : "web";
431
+ }
432
+ }();
433
+ //#endregion
434
+ //#region src/lib/handle-server-error.ts
435
+ function et(e) {
436
+ console.log(e);
437
+ let t = "Something went wrong!";
438
+ e && typeof e == "object" && "status" in e && Number(e.status) === 204 && (t = "Content not found."), e instanceof o && (t = e.response?.data?.message || e.response?.data?.title || e.message), i.error(t);
439
+ }
440
+ //#endregion
441
+ //#region src/components/ui/accordion.tsx
442
+ var tt = p.Root, nt = s.forwardRef(({ className: e, ...t }, n) => /* @__PURE__ */ v(p.Item, {
443
+ ref: n,
444
+ className: N("border-b", e),
445
+ ...t
446
+ }));
447
+ nt.displayName = "AccordionItem";
448
+ var rt = s.forwardRef(({ className: e, children: t, ...n }, r) => /* @__PURE__ */ v(p.Header, {
449
+ className: "flex",
450
+ children: /* @__PURE__ */ y(p.Trigger, {
451
+ ref: r,
452
+ className: N("flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180", e),
453
+ ...n,
454
+ children: [t, /* @__PURE__ */ v(g, { className: "h-4 w-4 shrink-0 transition-transform duration-200" })]
455
+ })
456
+ }));
457
+ rt.displayName = p.Trigger.displayName;
458
+ var it = s.forwardRef(({ className: e, children: t, ...n }, r) => /* @__PURE__ */ v(p.Content, {
459
+ ref: r,
460
+ className: "overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
461
+ ...n,
462
+ children: /* @__PURE__ */ v("div", {
463
+ className: N("pb-4 pt-0", e),
464
+ children: t
465
+ })
466
+ }));
467
+ it.displayName = p.Content.displayName;
468
+ //#endregion
469
+ //#region src/components/ui/alert.tsx
470
+ var at = b("relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current", {
471
+ variants: { variant: {
472
+ default: "bg-card text-card-foreground",
473
+ destructive: "text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90"
474
+ } },
475
+ defaultVariants: { variant: "default" }
476
+ });
477
+ function ot({ className: e, variant: t, ...n }) {
478
+ return /* @__PURE__ */ v("div", {
479
+ "data-slot": "alert",
480
+ role: "alert",
481
+ className: N(at({ variant: t }), e),
482
+ ...n
483
+ });
484
+ }
485
+ function st({ className: e, ...t }) {
486
+ return /* @__PURE__ */ v("div", {
487
+ "data-slot": "alert-title",
488
+ className: N("col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight", e),
489
+ ...t
490
+ });
491
+ }
492
+ function ct({ className: e, ...t }) {
493
+ return /* @__PURE__ */ v("div", {
494
+ "data-slot": "alert-description",
495
+ className: N("text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed", e),
496
+ ...t
497
+ });
498
+ }
499
+ //#endregion
500
+ //#region src/components/ui/button.tsx
501
+ var R = b("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", {
502
+ variants: {
503
+ variant: {
504
+ default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
505
+ destructive: "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
506
+ outline: "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
507
+ secondary: "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
508
+ ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
509
+ link: "text-primary underline-offset-4 hover:underline"
510
+ },
511
+ size: {
512
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
513
+ sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
514
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
515
+ icon: "size-9"
516
+ }
517
+ },
518
+ defaultVariants: {
519
+ variant: "default",
520
+ size: "default"
521
+ }
522
+ });
523
+ function z({ className: e, variant: t, size: n, asChild: r = !1, ...i }) {
524
+ return /* @__PURE__ */ v(r ? S : "button", {
525
+ "data-slot": "button",
526
+ className: N(R({
527
+ variant: t,
528
+ size: n,
529
+ className: e
530
+ })),
531
+ ...i
532
+ });
533
+ }
534
+ //#endregion
535
+ //#region src/components/ui/alert-dialog.tsx
536
+ function lt({ ...e }) {
537
+ return /* @__PURE__ */ v(x.Root, {
538
+ "data-slot": "alert-dialog",
539
+ ...e
540
+ });
541
+ }
542
+ function ut({ ...e }) {
543
+ return /* @__PURE__ */ v(x.Trigger, {
544
+ "data-slot": "alert-dialog-trigger",
545
+ ...e
546
+ });
547
+ }
548
+ function dt({ ...e }) {
549
+ return /* @__PURE__ */ v(x.Portal, {
550
+ "data-slot": "alert-dialog-portal",
551
+ ...e
552
+ });
553
+ }
554
+ function ft({ className: e, ...t }) {
555
+ return /* @__PURE__ */ v(x.Overlay, {
556
+ "data-slot": "alert-dialog-overlay",
557
+ className: N("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50", e),
558
+ ...t
559
+ });
560
+ }
561
+ function pt({ className: e, ...t }) {
562
+ return /* @__PURE__ */ y(dt, { children: [/* @__PURE__ */ v(ft, {}), /* @__PURE__ */ v(x.Content, {
563
+ "data-slot": "alert-dialog-content",
564
+ className: N("bg-background 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 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg", e),
565
+ ...t
566
+ })] });
567
+ }
568
+ function mt({ className: e, ...t }) {
569
+ return /* @__PURE__ */ v("div", {
570
+ "data-slot": "alert-dialog-header",
571
+ className: N("flex flex-col gap-2 text-center sm:text-start", e),
572
+ ...t
573
+ });
574
+ }
575
+ function ht({ className: e, ...t }) {
576
+ return /* @__PURE__ */ v("div", {
577
+ "data-slot": "alert-dialog-footer",
578
+ className: N("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", e),
579
+ ...t
580
+ });
581
+ }
582
+ function gt({ className: e, ...t }) {
583
+ return /* @__PURE__ */ v(x.Title, {
584
+ "data-slot": "alert-dialog-title",
585
+ className: N("text-lg font-semibold", e),
586
+ ...t
587
+ });
588
+ }
589
+ function _t({ className: e, ...t }) {
590
+ return /* @__PURE__ */ v(x.Description, {
591
+ "data-slot": "alert-dialog-description",
592
+ className: N("text-muted-foreground text-sm", e),
593
+ ...t
594
+ });
595
+ }
596
+ function vt({ className: e, ...t }) {
597
+ return /* @__PURE__ */ v(x.Action, {
598
+ className: N(R(), e),
599
+ ...t
600
+ });
601
+ }
602
+ function yt({ className: e, ...t }) {
603
+ return /* @__PURE__ */ v(x.Cancel, {
604
+ className: N(R({ variant: "outline" }), e),
605
+ ...t
606
+ });
607
+ }
608
+ //#endregion
609
+ //#region src/components/ui/avatar.tsx
610
+ function bt({ className: e, ...t }) {
611
+ return /* @__PURE__ */ v(C.Root, {
612
+ "data-slot": "avatar",
613
+ className: N("relative flex size-8 shrink-0 overflow-hidden rounded-full", e),
614
+ ...t
615
+ });
616
+ }
617
+ function xt({ className: e, ...t }) {
618
+ return /* @__PURE__ */ v(C.Image, {
619
+ "data-slot": "avatar-image",
620
+ className: N("aspect-square size-full object-cover", e),
621
+ ...t
622
+ });
623
+ }
624
+ function St({ className: e, ...t }) {
625
+ return /* @__PURE__ */ v(C.Fallback, {
626
+ "data-slot": "avatar-fallback",
627
+ className: N("bg-muted flex size-full items-center justify-center rounded-full", e),
628
+ ...t
629
+ });
630
+ }
631
+ //#endregion
632
+ //#region src/components/ui/badge.tsx
633
+ var Ct = b("inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden", {
634
+ variants: { variant: {
635
+ default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
636
+ secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
637
+ destructive: "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
638
+ outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
639
+ } },
640
+ defaultVariants: { variant: "default" }
641
+ });
642
+ function wt({ className: e, variant: t, asChild: n = !1, ...r }) {
643
+ return /* @__PURE__ */ v(n ? S : "span", {
644
+ "data-slot": "badge",
645
+ className: N(Ct({ variant: t }), e),
646
+ ...r
647
+ });
648
+ }
649
+ //#endregion
650
+ //#region src/components/ui/calendar.tsx
651
+ function Tt({ className: e, classNames: t, showOutsideDays: n = !0, captionLayout: r = "label", buttonVariant: i = "ghost", formatters: a, components: o, ...s }) {
652
+ let c = pe();
653
+ return /* @__PURE__ */ v(fe, {
654
+ showOutsideDays: n,
655
+ className: N("bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent", String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`, String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`, e),
656
+ captionLayout: r,
657
+ formatters: {
658
+ formatMonthDropdown: (e) => e.toLocaleString("default", { month: "short" }),
659
+ ...a
660
+ },
661
+ classNames: {
662
+ root: N("w-fit", c.root),
663
+ months: N("flex gap-4 flex-col md:flex-row relative", c.months),
664
+ month: N("flex flex-col w-full gap-4", c.month),
665
+ nav: N("flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between", c.nav),
666
+ button_previous: N(R({ variant: i }), "size-(--cell-size) aria-disabled:opacity-50 p-0 select-none", c.button_previous),
667
+ button_next: N(R({ variant: i }), "size-(--cell-size) aria-disabled:opacity-50 p-0 select-none", c.button_next),
668
+ month_caption: N("flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)", c.month_caption),
669
+ dropdowns: N("w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5", c.dropdowns),
670
+ dropdown_root: N("relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md", c.dropdown_root),
671
+ dropdown: N("absolute bg-popover inset-0 opacity-0", c.dropdown),
672
+ caption_label: N("select-none font-medium", r === "label" ? "text-sm" : "rounded-md ps-2 pe-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5", c.caption_label),
673
+ table: "w-full border-collapse",
674
+ weekdays: N("flex", c.weekdays),
675
+ weekday: N("text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none", c.weekday),
676
+ week: N("flex w-full mt-2", c.week),
677
+ week_number_header: N("select-none w-(--cell-size)", c.week_number_header),
678
+ week_number: N("text-[0.8rem] select-none text-muted-foreground", c.week_number),
679
+ day: N("relative w-full h-full p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none", c.day),
680
+ range_start: N("rounded-l-md bg-accent", c.range_start),
681
+ range_middle: N("rounded-none", c.range_middle),
682
+ range_end: N("rounded-r-md bg-accent", c.range_end),
683
+ today: N("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none", c.today),
684
+ outside: N("text-muted-foreground aria-selected:text-muted-foreground", c.outside),
685
+ disabled: N("text-muted-foreground opacity-50", c.disabled),
686
+ hidden: N("invisible", c.hidden),
687
+ ...t
688
+ },
689
+ components: {
690
+ Root: ({ className: e, rootRef: t, ...n }) => /* @__PURE__ */ v("div", {
691
+ "data-slot": "calendar",
692
+ ref: t,
693
+ className: N(e),
694
+ ...n
695
+ }),
696
+ Chevron: ({ className: e, orientation: t, ...n }) => v(t === "left" ? ee : t === "right" ? te : _, {
697
+ className: N("size-4", e),
698
+ ...n
699
+ }),
700
+ DayButton: Et,
701
+ WeekNumber: ({ children: e, ...t }) => /* @__PURE__ */ v("td", {
702
+ ...t,
703
+ children: /* @__PURE__ */ v("div", {
704
+ className: "flex size-(--cell-size) items-center justify-center text-center",
705
+ children: e
706
+ })
707
+ }),
708
+ ...o
709
+ },
710
+ ...s
711
+ });
712
+ }
713
+ function Et({ className: e, day: t, modifiers: n, ...r }) {
714
+ let i = pe(), a = s.useRef(null);
715
+ return s.useEffect(() => {
716
+ n.focused && a.current?.focus();
717
+ }, [n.focused]), /* @__PURE__ */ v(z, {
718
+ ref: a,
719
+ variant: "ghost",
720
+ size: "icon",
721
+ "data-day": t.date.toLocaleDateString(),
722
+ "data-selected-single": n.selected && !n.range_start && !n.range_end && !n.range_middle,
723
+ "data-range-start": n.range_start,
724
+ "data-range-end": n.range_end,
725
+ "data-range-middle": n.range_middle,
726
+ className: N("data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70", i.day, e),
727
+ ...r
728
+ });
729
+ }
730
+ //#endregion
731
+ //#region src/components/ui/card.tsx
732
+ function Dt({ className: e, ...t }) {
733
+ return /* @__PURE__ */ v("div", {
734
+ "data-slot": "card",
735
+ className: N("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm", e),
736
+ ...t
737
+ });
738
+ }
739
+ function Ot({ className: e, ...t }) {
740
+ return /* @__PURE__ */ v("div", {
741
+ "data-slot": "card-header",
742
+ className: N("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6", e),
743
+ ...t
744
+ });
745
+ }
746
+ function kt({ className: e, ...t }) {
747
+ return /* @__PURE__ */ v("div", {
748
+ "data-slot": "card-title",
749
+ className: N("leading-none font-semibold", e),
750
+ ...t
751
+ });
752
+ }
753
+ function At({ className: e, ...t }) {
754
+ return /* @__PURE__ */ v("div", {
755
+ "data-slot": "card-description",
756
+ className: N("text-muted-foreground text-sm", e),
757
+ ...t
758
+ });
759
+ }
760
+ function jt({ className: e, ...t }) {
761
+ return /* @__PURE__ */ v("div", {
762
+ "data-slot": "card-action",
763
+ className: N("col-start-2 row-span-2 row-start-1 self-start justify-self-end", e),
764
+ ...t
765
+ });
766
+ }
767
+ function Mt({ className: e, ...t }) {
768
+ return /* @__PURE__ */ v("div", {
769
+ "data-slot": "card-content",
770
+ className: N("px-6", e),
771
+ ...t
772
+ });
773
+ }
774
+ function Nt({ className: e, ...t }) {
775
+ return /* @__PURE__ */ v("div", {
776
+ "data-slot": "card-footer",
777
+ className: N("flex items-center px-6 [.border-t]:pt-6", e),
778
+ ...t
779
+ });
780
+ }
781
+ //#endregion
782
+ //#region src/components/ui/checkbox.tsx
783
+ function Pt({ className: e, ...t }) {
784
+ return /* @__PURE__ */ v(me.Root, {
785
+ "data-slot": "checkbox",
786
+ className: N("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50", e),
787
+ ...t,
788
+ children: /* @__PURE__ */ v(me.Indicator, {
789
+ "data-slot": "checkbox-indicator",
790
+ className: "flex items-center justify-center text-current transition-none",
791
+ children: /* @__PURE__ */ v(h, { className: "size-3.5" })
792
+ })
793
+ });
794
+ }
795
+ //#endregion
796
+ //#region src/context/theme-provider.tsx
797
+ var Ft = "system", It = c({
798
+ defaultTheme: Ft,
799
+ resolvedTheme: "light",
800
+ theme: Ft,
801
+ setTheme: () => null,
802
+ resetTheme: () => null
803
+ }), Lt = () => {
804
+ let e = l(It);
805
+ if (!e) throw Error("useTheme must be used within a ThemeProvider");
806
+ return e;
807
+ };
808
+ //#endregion
809
+ //#region src/components/ui/code-editor.tsx
810
+ function Rt({ value: e, onChange: t, language: n = "json", height: r = "200px", readOnly: i = !1, minimap: a = !1, onDrop: o, disableValidation: s = !1 }) {
811
+ let { theme: c } = Lt(), l = d(null), [u, p] = f(!1);
812
+ return /* @__PURE__ */ v("div", {
813
+ className: N("border rounded-md overflow-hidden bg-background transition-all duration-200", u && "ring-2 ring-violet-500 ring-offset-2 border-violet-500"),
814
+ children: /* @__PURE__ */ v(he, {
815
+ height: r,
816
+ language: n,
817
+ value: e,
818
+ onChange: t,
819
+ beforeMount: (e) => {
820
+ s && n === "json" && e.languages.json.jsonDefaults.setDiagnosticsOptions({
821
+ validate: !1,
822
+ schemaValidation: "ignore"
823
+ });
824
+ },
825
+ onMount: (e, n) => {
826
+ l.current = e, e.updateOptions({
827
+ scrollBeyondLastLine: !1,
828
+ fontSize: 12,
829
+ fontFamily: "'Geist Mono', monospace",
830
+ padding: {
831
+ top: 8,
832
+ bottom: 8
833
+ }
834
+ }), s && n.editor.setModelMarkers(e.getModel(), "json", []);
835
+ let r = e.getDomNode();
836
+ r && (r.addEventListener("dragover", (e) => {
837
+ e.preventDefault(), e.stopPropagation(), p(!0);
838
+ }), r.addEventListener("dragleave", (e) => {
839
+ e.preventDefault(), p(!1);
840
+ }), r.addEventListener("drop", (n) => {
841
+ n.preventDefault(), n.stopPropagation(), p(!1);
842
+ let r = n.dataTransfer?.getData("variable") || n.dataTransfer?.getData("text/plain");
843
+ if (!r) return;
844
+ let i = e.getTargetAtClientPoint(n.clientX, n.clientY);
845
+ if (i?.position) {
846
+ let t = i.position;
847
+ e.executeEdits("drop", [{
848
+ range: {
849
+ startLineNumber: t.lineNumber,
850
+ startColumn: t.column,
851
+ endLineNumber: t.lineNumber,
852
+ endColumn: t.column
853
+ },
854
+ text: r
855
+ }]), e.setPosition({
856
+ lineNumber: t.lineNumber,
857
+ column: t.column + r.length
858
+ }), e.focus();
859
+ } else {
860
+ let t = e.getPosition();
861
+ t && e.executeEdits("drop", [{
862
+ range: {
863
+ startLineNumber: t.lineNumber,
864
+ startColumn: t.column,
865
+ endLineNumber: t.lineNumber,
866
+ endColumn: t.column
867
+ },
868
+ text: r
869
+ }]);
870
+ }
871
+ let a = e.getValue();
872
+ t?.(a), o?.(r);
873
+ }));
874
+ },
875
+ theme: c === "dark" ? "vs-dark" : "light",
876
+ options: {
877
+ readOnly: i,
878
+ minimap: { enabled: a },
879
+ scrollBeyondLastLine: !1,
880
+ fontSize: 12,
881
+ fontFamily: "'Geist Mono', monospace",
882
+ padding: {
883
+ top: 8,
884
+ bottom: 8
885
+ },
886
+ lineNumbers: "on",
887
+ renderLineHighlight: "all",
888
+ automaticLayout: !0,
889
+ dropIntoEditor: { enabled: !0 }
890
+ },
891
+ loading: /* @__PURE__ */ y("div", {
892
+ className: "flex items-center justify-center h-full text-muted-foreground gap-2",
893
+ children: [/* @__PURE__ */ v(oe, { className: "h-4 w-4 animate-spin" }), /* @__PURE__ */ v("span", {
894
+ className: "text-xs",
895
+ children: "Cargando editor..."
896
+ })]
897
+ })
898
+ })
899
+ });
900
+ }
901
+ //#endregion
902
+ //#region src/components/ui/collapsible.tsx
903
+ function zt({ ...e }) {
904
+ return /* @__PURE__ */ v(ge.Root, {
905
+ "data-slot": "collapsible",
906
+ ...e
907
+ });
908
+ }
909
+ function Bt({ ...e }) {
910
+ return /* @__PURE__ */ v(ge.CollapsibleTrigger, {
911
+ "data-slot": "collapsible-trigger",
912
+ ...e
913
+ });
914
+ }
915
+ function Vt({ ...e }) {
916
+ return /* @__PURE__ */ v(ge.CollapsibleContent, {
917
+ "data-slot": "collapsible-content",
918
+ ...e
919
+ });
920
+ }
921
+ //#endregion
922
+ //#region src/components/ui/dialog.tsx
923
+ function Ht({ ...e }) {
924
+ return /* @__PURE__ */ v(T.Root, {
925
+ "data-slot": "dialog",
926
+ ...e
927
+ });
928
+ }
929
+ function Ut({ ...e }) {
930
+ return /* @__PURE__ */ v(T.Trigger, {
931
+ "data-slot": "dialog-trigger",
932
+ ...e
933
+ });
934
+ }
935
+ function Wt({ ...e }) {
936
+ return /* @__PURE__ */ v(T.Portal, {
937
+ "data-slot": "dialog-portal",
938
+ ...e
939
+ });
940
+ }
941
+ function Gt({ ...e }) {
942
+ return /* @__PURE__ */ v(T.Close, {
943
+ "data-slot": "dialog-close",
944
+ ...e
945
+ });
946
+ }
947
+ function Kt({ className: e, ...t }) {
948
+ return /* @__PURE__ */ v(T.Overlay, {
949
+ "data-slot": "dialog-overlay",
950
+ className: N("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50", e),
951
+ ...t
952
+ });
953
+ }
954
+ function qt({ className: e, children: t, showCloseButton: n = !0, ...r }) {
955
+ return /* @__PURE__ */ y(Wt, {
956
+ "data-slot": "dialog-portal",
957
+ children: [/* @__PURE__ */ v(Kt, {}), /* @__PURE__ */ y(T.Content, {
958
+ "data-slot": "dialog-content",
959
+ className: N("bg-background 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 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg", e),
960
+ ...r,
961
+ children: [t, n && /* @__PURE__ */ y(T.Close, {
962
+ "data-slot": "dialog-close",
963
+ className: "ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute end-4 top-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
964
+ children: [/* @__PURE__ */ v(de, {}), /* @__PURE__ */ v("span", {
965
+ className: "sr-only",
966
+ children: "Close"
967
+ })]
968
+ })]
969
+ })]
970
+ });
971
+ }
972
+ function Jt({ className: e, ...t }) {
973
+ return /* @__PURE__ */ v("div", {
974
+ "data-slot": "dialog-header",
975
+ className: N("flex flex-col gap-2 text-center sm:text-start", e),
976
+ ...t
977
+ });
978
+ }
979
+ function Yt({ className: e, ...t }) {
980
+ return /* @__PURE__ */ v("div", {
981
+ "data-slot": "dialog-footer",
982
+ className: N("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", e),
983
+ ...t
984
+ });
985
+ }
986
+ function Xt({ className: e, ...t }) {
987
+ return /* @__PURE__ */ v(T.Title, {
988
+ "data-slot": "dialog-title",
989
+ className: N("text-lg leading-none font-semibold", e),
990
+ ...t
991
+ });
992
+ }
993
+ function Zt({ className: e, ...t }) {
994
+ return /* @__PURE__ */ v(T.Description, {
995
+ "data-slot": "dialog-description",
996
+ className: N("text-muted-foreground text-sm", e),
997
+ ...t
998
+ });
999
+ }
1000
+ //#endregion
1001
+ //#region src/components/ui/command.tsx
1002
+ function B({ className: e, ...t }) {
1003
+ return /* @__PURE__ */ v(w, {
1004
+ "data-slot": "command",
1005
+ className: N("bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md", e),
1006
+ ...t
1007
+ });
1008
+ }
1009
+ function Qt({ title: e = "Command Palette", description: t = "Search for a command to run...", children: n, className: r, showCloseButton: i = !0, ...a }) {
1010
+ return /* @__PURE__ */ y(Ht, {
1011
+ ...a,
1012
+ children: [/* @__PURE__ */ y(Jt, {
1013
+ className: "sr-only",
1014
+ children: [/* @__PURE__ */ v(Xt, { children: e }), /* @__PURE__ */ v(Zt, { children: t })]
1015
+ }), /* @__PURE__ */ v(qt, {
1016
+ className: N("overflow-hidden p-0", r),
1017
+ showCloseButton: i,
1018
+ children: /* @__PURE__ */ v(B, {
1019
+ className: "[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5",
1020
+ children: n
1021
+ })
1022
+ })]
1023
+ });
1024
+ }
1025
+ function V({ className: e, ...t }) {
1026
+ return /* @__PURE__ */ y("div", {
1027
+ "data-slot": "command-input-wrapper",
1028
+ className: "flex h-10 items-center gap-2 border-b px-3",
1029
+ children: [/* @__PURE__ */ v(le, { className: "size-4 shrink-0 opacity-50" }), /* @__PURE__ */ v(w.Input, {
1030
+ "data-slot": "command-input",
1031
+ className: N("placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50", e),
1032
+ ...t
1033
+ })]
1034
+ });
1035
+ }
1036
+ function H({ className: e, ...t }) {
1037
+ return /* @__PURE__ */ v(w.List, {
1038
+ "data-slot": "command-list",
1039
+ className: N("max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto", e),
1040
+ ...t
1041
+ });
1042
+ }
1043
+ function U({ ...e }) {
1044
+ return /* @__PURE__ */ v(w.Empty, {
1045
+ "data-slot": "command-empty",
1046
+ className: "py-6 text-center text-sm",
1047
+ ...e
1048
+ });
1049
+ }
1050
+ function W({ className: e, ...t }) {
1051
+ return /* @__PURE__ */ v(w.Group, {
1052
+ "data-slot": "command-group",
1053
+ className: N("text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium", e),
1054
+ ...t
1055
+ });
1056
+ }
1057
+ function $t({ className: e, ...t }) {
1058
+ return /* @__PURE__ */ v(w.Separator, {
1059
+ "data-slot": "command-separator",
1060
+ className: N("bg-border -mx-1 h-px", e),
1061
+ ...t
1062
+ });
1063
+ }
1064
+ function G({ className: e, ...t }) {
1065
+ return /* @__PURE__ */ v(w.Item, {
1066
+ "data-slot": "command-item",
1067
+ className: N("data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", e),
1068
+ ...t
1069
+ });
1070
+ }
1071
+ function en({ className: e, ...t }) {
1072
+ return /* @__PURE__ */ v("span", {
1073
+ "data-slot": "command-shortcut",
1074
+ className: N("text-muted-foreground ms-auto text-xs tracking-widest", e),
1075
+ ...t
1076
+ });
1077
+ }
1078
+ //#endregion
1079
+ //#region src/components/ui/dropdown-menu.tsx
1080
+ function tn({ ...e }) {
1081
+ return /* @__PURE__ */ v(E.Root, {
1082
+ "data-slot": "dropdown-menu",
1083
+ ...e
1084
+ });
1085
+ }
1086
+ function nn({ ...e }) {
1087
+ return /* @__PURE__ */ v(E.Portal, {
1088
+ "data-slot": "dropdown-menu-portal",
1089
+ ...e
1090
+ });
1091
+ }
1092
+ function rn({ ...e }) {
1093
+ return /* @__PURE__ */ v(E.Trigger, {
1094
+ "data-slot": "dropdown-menu-trigger",
1095
+ ...e
1096
+ });
1097
+ }
1098
+ function an({ className: e, sideOffset: t = 4, ...n }) {
1099
+ return /* @__PURE__ */ v(E.Portal, { children: /* @__PURE__ */ v(E.Content, {
1100
+ "data-slot": "dropdown-menu-content",
1101
+ sideOffset: t,
1102
+ className: N("bg-popover text-popover-foreground 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-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md", e),
1103
+ ...n
1104
+ }) });
1105
+ }
1106
+ function on({ ...e }) {
1107
+ return /* @__PURE__ */ v(E.Group, {
1108
+ "data-slot": "dropdown-menu-group",
1109
+ ...e
1110
+ });
1111
+ }
1112
+ function sn({ className: e, inset: t, variant: n = "default", ...r }) {
1113
+ return /* @__PURE__ */ v(E.Item, {
1114
+ "data-slot": "dropdown-menu-item",
1115
+ "data-inset": t,
1116
+ "data-variant": n,
1117
+ className: N("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:ps-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", e),
1118
+ ...r
1119
+ });
1120
+ }
1121
+ function cn({ className: e, children: t, checked: n, ...r }) {
1122
+ return /* @__PURE__ */ y(E.CheckboxItem, {
1123
+ "data-slot": "dropdown-menu-checkbox-item",
1124
+ className: N("focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 ps-8 pe-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", e),
1125
+ checked: n,
1126
+ ...r,
1127
+ children: [/* @__PURE__ */ v("span", {
1128
+ className: "pointer-events-none absolute start-2 flex size-3.5 items-center justify-center",
1129
+ children: /* @__PURE__ */ v(E.ItemIndicator, { children: /* @__PURE__ */ v(h, { className: "size-4" }) })
1130
+ }), t]
1131
+ });
1132
+ }
1133
+ function ln({ ...e }) {
1134
+ return /* @__PURE__ */ v(E.RadioGroup, {
1135
+ "data-slot": "dropdown-menu-radio-group",
1136
+ ...e
1137
+ });
1138
+ }
1139
+ function un({ className: e, children: t, ...n }) {
1140
+ return /* @__PURE__ */ y(E.RadioItem, {
1141
+ "data-slot": "dropdown-menu-radio-item",
1142
+ className: N("focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 ps-8 pe-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", e),
1143
+ ...n,
1144
+ children: [/* @__PURE__ */ v("span", {
1145
+ className: "pointer-events-none absolute start-2 flex size-3.5 items-center justify-center",
1146
+ children: /* @__PURE__ */ v(E.ItemIndicator, { children: /* @__PURE__ */ v(ie, { className: "size-2 fill-current" }) })
1147
+ }), t]
1148
+ });
1149
+ }
1150
+ function dn({ className: e, inset: t, ...n }) {
1151
+ return /* @__PURE__ */ v(E.Label, {
1152
+ "data-slot": "dropdown-menu-label",
1153
+ "data-inset": t,
1154
+ className: N("px-2 py-1.5 text-sm font-medium data-[inset]:ps-8", e),
1155
+ ...n
1156
+ });
1157
+ }
1158
+ function fn({ className: e, ...t }) {
1159
+ return /* @__PURE__ */ v(E.Separator, {
1160
+ "data-slot": "dropdown-menu-separator",
1161
+ className: N("bg-border -mx-1 my-1 h-px", e),
1162
+ ...t
1163
+ });
1164
+ }
1165
+ function pn({ className: e, ...t }) {
1166
+ return /* @__PURE__ */ v("span", {
1167
+ "data-slot": "dropdown-menu-shortcut",
1168
+ className: N("text-muted-foreground ms-auto text-xs tracking-widest", e),
1169
+ ...t
1170
+ });
1171
+ }
1172
+ function mn({ ...e }) {
1173
+ return /* @__PURE__ */ v(E.Sub, {
1174
+ "data-slot": "dropdown-menu-sub",
1175
+ ...e
1176
+ });
1177
+ }
1178
+ function hn({ className: e, inset: t, children: n, ...r }) {
1179
+ return /* @__PURE__ */ y(E.SubTrigger, {
1180
+ "data-slot": "dropdown-menu-sub-trigger",
1181
+ "data-inset": t,
1182
+ className: N("focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:ps-8", e),
1183
+ ...r,
1184
+ children: [n, /* @__PURE__ */ v(te, { className: "ms-auto size-4" })]
1185
+ });
1186
+ }
1187
+ function gn({ className: e, ...t }) {
1188
+ return /* @__PURE__ */ v(E.SubContent, {
1189
+ "data-slot": "dropdown-menu-sub-content",
1190
+ className: N("bg-popover text-popover-foreground 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-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg", e),
1191
+ ...t
1192
+ });
1193
+ }
1194
+ //#endregion
1195
+ //#region src/components/ui/label.tsx
1196
+ function K({ className: e, ...t }) {
1197
+ return /* @__PURE__ */ v(xe.Root, {
1198
+ "data-slot": "label",
1199
+ className: N("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", e),
1200
+ ...t
1201
+ });
1202
+ }
1203
+ //#endregion
1204
+ //#region src/components/ui/form.tsx
1205
+ var _n = ve, vn = s.createContext({}), yn = ({ ...e }) => /* @__PURE__ */ v(vn.Provider, {
1206
+ value: { name: e.name },
1207
+ children: /* @__PURE__ */ v(_e, { ...e })
1208
+ }), q = () => {
1209
+ let e = s.useContext(vn), t = s.useContext(bn), { getFieldState: n } = ye(), r = be({ name: e.name }), i = n(e.name, r);
1210
+ if (!e) throw Error("useFormField should be used within <FormField>");
1211
+ let { id: a } = t;
1212
+ return {
1213
+ id: a,
1214
+ name: e.name,
1215
+ formItemId: `${a}-form-item`,
1216
+ formDescriptionId: `${a}-form-item-description`,
1217
+ formMessageId: `${a}-form-item-message`,
1218
+ ...i
1219
+ };
1220
+ }, bn = s.createContext({});
1221
+ function xn({ className: e, ...t }) {
1222
+ let n = s.useId();
1223
+ return /* @__PURE__ */ v(bn.Provider, {
1224
+ value: { id: n },
1225
+ children: /* @__PURE__ */ v("div", {
1226
+ "data-slot": "form-item",
1227
+ className: N("grid gap-2", e),
1228
+ ...t
1229
+ })
1230
+ });
1231
+ }
1232
+ function Sn({ className: e, ...t }) {
1233
+ let { error: n, formItemId: r } = q();
1234
+ return /* @__PURE__ */ v(K, {
1235
+ "data-slot": "form-label",
1236
+ "data-error": !!n,
1237
+ className: N("data-[error=true]:text-destructive", e),
1238
+ htmlFor: r,
1239
+ ...t
1240
+ });
1241
+ }
1242
+ function Cn({ ...e }) {
1243
+ let { error: t, formItemId: n, formDescriptionId: r, formMessageId: i } = q();
1244
+ return /* @__PURE__ */ v(S, {
1245
+ "data-slot": "form-control",
1246
+ id: n,
1247
+ "aria-describedby": t ? `${r} ${i}` : `${r}`,
1248
+ "aria-invalid": !!t,
1249
+ ...e
1250
+ });
1251
+ }
1252
+ function wn({ className: e, ...t }) {
1253
+ let { formDescriptionId: n } = q();
1254
+ return /* @__PURE__ */ v("p", {
1255
+ "data-slot": "form-description",
1256
+ id: n,
1257
+ className: N("text-muted-foreground text-sm", e),
1258
+ ...t
1259
+ });
1260
+ }
1261
+ function Tn({ className: e, ...t }) {
1262
+ let { error: n, formMessageId: r } = q(), i = n ? String(n?.message ?? "") : t.children;
1263
+ return i ? /* @__PURE__ */ v("p", {
1264
+ "data-slot": "form-message",
1265
+ id: r,
1266
+ className: N("text-destructive text-sm", e),
1267
+ ...t,
1268
+ children: i
1269
+ }) : null;
1270
+ }
1271
+ //#endregion
1272
+ //#region src/components/ui/image-upload.tsx
1273
+ function En({ value: e, onChange: t, label: n = "Imagen", disabled: r, multiple: a = !1, className: o }) {
1274
+ let s = d(null), [c, l] = f(!1), [p, m] = f([]);
1275
+ u(() => {
1276
+ m(Array.isArray(e) ? e : e ? [e] : []);
1277
+ }, [e]);
1278
+ let h = async (e) => {
1279
+ let t = e.target.files;
1280
+ if (!t || t.length === 0) return;
1281
+ let n = [];
1282
+ for (let e = 0; e < t.length; e++) {
1283
+ let r = t[e];
1284
+ if (!r.type.startsWith("image/")) {
1285
+ i.error(`Archivo ${r.name} no es una imagen válida`);
1286
+ continue;
1287
+ }
1288
+ if (r.size > 5 * 1024 * 1024) {
1289
+ i.error(`Imagen ${r.name} supera los 5MB`);
1290
+ continue;
1291
+ }
1292
+ n.push(r);
1293
+ }
1294
+ n.length > 0 && await g(n);
1295
+ }, g = async (e) => {
1296
+ l(!0);
1297
+ try {
1298
+ let n = e.map(async (e) => {
1299
+ let t = new FormData();
1300
+ t.append("file", e);
1301
+ try {
1302
+ return (await L.post("/upload", t, { headers: { "Content-Type": "multipart/form-data" } })).data.url;
1303
+ } catch (e) {
1304
+ return console.error("Single file upload failed", e), null;
1305
+ }
1306
+ }), r = (await Promise.all(n)).filter((e) => e !== null);
1307
+ r.length > 0 && (t(a ? [...p, ...r] : r[0]), i.success(`${r.length} imagen(es) cargada(s)`));
1308
+ } catch (e) {
1309
+ console.error("Upload Error:", e), i.error("Error al subir imágenes");
1310
+ } finally {
1311
+ l(!1), s.current && (s.current.value = "");
1312
+ }
1313
+ }, _ = (e) => {
1314
+ t(a ? p.filter((t) => t !== e) : "");
1315
+ };
1316
+ return /* @__PURE__ */ y("div", {
1317
+ className: N("space-y-4", o),
1318
+ children: [
1319
+ /* @__PURE__ */ v(K, { children: n }),
1320
+ p.length > 0 && /* @__PURE__ */ v("div", {
1321
+ className: "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-4 mb-4",
1322
+ children: p.map((e, t) => /* @__PURE__ */ y("div", {
1323
+ className: "relative group rounded-lg overflow-hidden border bg-background aspect-square flex items-center justify-center bg-gray-50 dark:bg-gray-800/50",
1324
+ children: [/* @__PURE__ */ v("img", {
1325
+ src: e,
1326
+ alt: `Image ${t + 1}`,
1327
+ className: "h-full w-full object-contain p-1"
1328
+ }), !r && /* @__PURE__ */ v("div", {
1329
+ className: "absolute top-1 right-1 opacity-0 group-hover:opacity-100 transition-opacity",
1330
+ children: /* @__PURE__ */ v(z, {
1331
+ type: "button",
1332
+ variant: "destructive",
1333
+ size: "icon",
1334
+ className: "h-6 w-6 rounded-full",
1335
+ onClick: () => _(e),
1336
+ children: /* @__PURE__ */ v(ue, { className: "h-3 w-3" })
1337
+ })
1338
+ })]
1339
+ }, t))
1340
+ }),
1341
+ !r && (a || p.length === 0) && /* @__PURE__ */ y("div", {
1342
+ className: `
1343
+ border-2 border-dashed border-muted-foreground/25 rounded-lg
1344
+ flex flex-col items-center justify-center p-6 gap-2
1345
+ transition-all hover:bg-accent/50 cursor-pointer hover:border-primary/50
1346
+ ${c ? "opacity-50 pointer-events-none" : ""}
1347
+ `,
1348
+ onClick: () => s.current?.click(),
1349
+ children: [
1350
+ c ? /* @__PURE__ */ v(oe, { className: "h-8 w-8 animate-spin text-muted-foreground" }) : /* @__PURE__ */ v(ae, { className: "h-8 w-8 text-muted-foreground" }),
1351
+ /* @__PURE__ */ v("span", {
1352
+ className: "text-sm text-muted-foreground font-medium",
1353
+ children: c ? "Subiendo..." : a ? "Click para agregar imágenes" : "Click para subir imagen"
1354
+ }),
1355
+ /* @__PURE__ */ v("p", {
1356
+ className: "text-xs text-muted-foreground/70",
1357
+ children: "Soporta: JPG, PNG, WEBP (Max 5MB)"
1358
+ }),
1359
+ /* @__PURE__ */ v("input", {
1360
+ type: "file",
1361
+ ref: s,
1362
+ className: "hidden",
1363
+ accept: "image/*",
1364
+ multiple: a,
1365
+ onChange: h,
1366
+ disabled: r || c
1367
+ })
1368
+ ]
1369
+ })
1370
+ ]
1371
+ });
1372
+ }
1373
+ //#endregion
1374
+ //#region src/components/ui/input.tsx
1375
+ function J({ className: e, type: t, ...n }) {
1376
+ return /* @__PURE__ */ v("input", {
1377
+ type: t,
1378
+ "data-slot": "input",
1379
+ className: N("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]", "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", e),
1380
+ ...n
1381
+ });
1382
+ }
1383
+ //#endregion
1384
+ //#region src/components/ui/input-otp.tsx
1385
+ function Dn({ className: e, containerClassName: t, ...n }) {
1386
+ return /* @__PURE__ */ v(Se, {
1387
+ "data-slot": "input-otp",
1388
+ containerClassName: N("flex items-center gap-2 has-disabled:opacity-50", t),
1389
+ className: N("disabled:cursor-not-allowed", e),
1390
+ ...n
1391
+ });
1392
+ }
1393
+ function On({ className: e, ...t }) {
1394
+ return /* @__PURE__ */ v("div", {
1395
+ "data-slot": "input-otp-group",
1396
+ className: N("flex items-center", e),
1397
+ ...t
1398
+ });
1399
+ }
1400
+ function kn({ index: e, className: t, ...n }) {
1401
+ let { char: r, hasFakeCaret: i, isActive: a } = s.useContext(Ce)?.slots[e] ?? {};
1402
+ return /* @__PURE__ */ y("div", {
1403
+ "data-slot": "input-otp-slot",
1404
+ "data-active": a,
1405
+ className: N("data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex h-9 w-9 items-center justify-center border-y border-r text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]", t),
1406
+ ...n,
1407
+ children: [r, i && /* @__PURE__ */ v("div", {
1408
+ className: "pointer-events-none absolute inset-0 flex items-center justify-center",
1409
+ children: /* @__PURE__ */ v("div", { className: "animate-caret-blink bg-foreground h-4 w-px duration-1000" })
1410
+ })]
1411
+ });
1412
+ }
1413
+ function An({ ...e }) {
1414
+ return /* @__PURE__ */ v("div", {
1415
+ "data-slot": "input-otp-separator",
1416
+ role: "separator",
1417
+ ...e,
1418
+ children: /* @__PURE__ */ v(se, {})
1419
+ });
1420
+ }
1421
+ //#endregion
1422
+ //#region src/components/ui/popover.tsx
1423
+ function Y({ ...e }) {
1424
+ return /* @__PURE__ */ v(D.Root, {
1425
+ "data-slot": "popover",
1426
+ ...e
1427
+ });
1428
+ }
1429
+ function X({ ...e }) {
1430
+ return /* @__PURE__ */ v(D.Trigger, {
1431
+ "data-slot": "popover-trigger",
1432
+ ...e
1433
+ });
1434
+ }
1435
+ function Z({ className: e, align: t = "center", sideOffset: n = 4, ...r }) {
1436
+ return /* @__PURE__ */ v(D.Portal, { children: /* @__PURE__ */ v(D.Content, {
1437
+ "data-slot": "popover-content",
1438
+ align: t,
1439
+ sideOffset: n,
1440
+ className: N("bg-popover text-popover-foreground 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-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden", e),
1441
+ ...r
1442
+ }) });
1443
+ }
1444
+ function jn({ ...e }) {
1445
+ return /* @__PURE__ */ v(D.Anchor, {
1446
+ "data-slot": "popover-anchor",
1447
+ ...e
1448
+ });
1449
+ }
1450
+ //#endregion
1451
+ //#region src/components/ui/multi-select.tsx
1452
+ function Mn({ options: e, selected: t, onChange: n, placeholder: r = "Select options...", className: i }) {
1453
+ let [a, o] = s.useState(!1), c = (e) => {
1454
+ n(t.filter((t) => t !== e));
1455
+ };
1456
+ return /* @__PURE__ */ y(Y, {
1457
+ open: a,
1458
+ onOpenChange: o,
1459
+ children: [/* @__PURE__ */ v(X, {
1460
+ asChild: !0,
1461
+ children: /* @__PURE__ */ y("div", {
1462
+ role: "combobox",
1463
+ "aria-expanded": a,
1464
+ className: N("flex w-full justify-between items-center rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 cursor-pointer hover:bg-accent hover:text-accent-foreground", "h-auto min-h-10", i),
1465
+ onClick: () => o(!a),
1466
+ children: [/* @__PURE__ */ v("div", {
1467
+ className: "flex flex-wrap gap-1",
1468
+ children: t.length > 0 ? t.map((t) => {
1469
+ let n = e.find((e) => e.value === t);
1470
+ return n ? /* @__PURE__ */ y(wt, {
1471
+ variant: "secondary",
1472
+ className: "mr-1 mb-1",
1473
+ onClick: (e) => {
1474
+ e.stopPropagation(), c(t);
1475
+ },
1476
+ children: [
1477
+ n.icon && /* @__PURE__ */ v(n.icon, { className: "mr-1 h-3 w-3" }),
1478
+ n.label,
1479
+ /* @__PURE__ */ v("button", {
1480
+ className: "ml-1 ring-offset-background rounded-full outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
1481
+ onKeyDown: (e) => {
1482
+ e.key === "Enter" && c(t);
1483
+ },
1484
+ onMouseDown: (e) => {
1485
+ e.preventDefault(), e.stopPropagation();
1486
+ },
1487
+ onClick: (e) => {
1488
+ e.preventDefault(), e.stopPropagation(), c(t);
1489
+ },
1490
+ children: /* @__PURE__ */ v(ue, { className: "h-3 w-3 text-muted-foreground hover:text-foreground" })
1491
+ })
1492
+ ]
1493
+ }, n.value) : null;
1494
+ }) : /* @__PURE__ */ v("span", {
1495
+ className: "text-muted-foreground font-normal",
1496
+ children: r
1497
+ })
1498
+ }), /* @__PURE__ */ v(re, { className: "ml-2 h-4 w-4 shrink-0 opacity-50" })]
1499
+ })
1500
+ }), /* @__PURE__ */ v(Z, {
1501
+ className: "w-full p-0",
1502
+ children: /* @__PURE__ */ y(B, { children: [
1503
+ /* @__PURE__ */ v(V, { placeholder: "Search..." }),
1504
+ /* @__PURE__ */ v(U, { children: "No item found." }),
1505
+ /* @__PURE__ */ v(H, { children: /* @__PURE__ */ v(W, {
1506
+ className: "max-h-64 overflow-auto",
1507
+ children: e.map((e) => /* @__PURE__ */ y(G, {
1508
+ onSelect: () => {
1509
+ t.includes(e.value) ? n(t.filter((t) => t !== e.value)) : n([...t, e.value]), o(!0);
1510
+ },
1511
+ children: [
1512
+ /* @__PURE__ */ v(m, { className: N("mr-2 h-4 w-4", t.includes(e.value) ? "opacity-100" : "opacity-0") }),
1513
+ e.icon && /* @__PURE__ */ v(e.icon, { className: "mr-2 h-4 w-4" }),
1514
+ e.label
1515
+ ]
1516
+ }, e.value))
1517
+ }) })
1518
+ ] })
1519
+ })]
1520
+ });
1521
+ }
1522
+ //#endregion
1523
+ //#region src/components/ui/scroll-area.tsx
1524
+ var Nn = s.forwardRef(({ className: e, children: t, orientation: n = "vertical", type: r = "hover", ...i }, a) => /* @__PURE__ */ y(O.Root, {
1525
+ ref: a,
1526
+ "data-slot": "scroll-area",
1527
+ type: r,
1528
+ className: N("relative overflow-hidden", e),
1529
+ ...i,
1530
+ children: [
1531
+ /* @__PURE__ */ v(O.Viewport, {
1532
+ "data-slot": "scroll-area-viewport",
1533
+ className: N("focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1", n === "horizontal" && "overflow-x-auto!"),
1534
+ children: t
1535
+ }),
1536
+ /* @__PURE__ */ v(Q, { orientation: n }),
1537
+ /* @__PURE__ */ v(O.Corner, {})
1538
+ ]
1539
+ }));
1540
+ Nn.displayName = "ScrollArea";
1541
+ var Q = s.forwardRef(({ className: e, orientation: t = "vertical", ...n }, r) => /* @__PURE__ */ v(O.ScrollAreaScrollbar, {
1542
+ ref: r,
1543
+ "data-slot": "scroll-area-scrollbar",
1544
+ orientation: t,
1545
+ className: N("flex touch-none p-px transition-colors select-none", t === "vertical" && "h-full w-3 border-l border-l-transparent", t === "horizontal" && "h-3 flex-col border-t border-t-transparent", e),
1546
+ ...n,
1547
+ children: /* @__PURE__ */ v(O.ScrollAreaThumb, {
1548
+ "data-slot": "scroll-area-thumb",
1549
+ className: "bg-foreground/35 hover:bg-foreground/50 relative flex-1 rounded-full transition-colors"
1550
+ })
1551
+ }));
1552
+ Q.displayName = "ScrollBar";
1553
+ //#endregion
1554
+ //#region src/components/ui/phone-input.tsx
1555
+ var Pn = s.forwardRef(({ className: e, onChange: t, ...n }, r) => /* @__PURE__ */ v(we.default, {
1556
+ ref: r,
1557
+ className: N("flex", e),
1558
+ flagComponent: Ln,
1559
+ countrySelectComponent: In,
1560
+ inputComponent: Fn,
1561
+ smartCaret: !1,
1562
+ onChange: (e) => t?.(e || ""),
1563
+ ...n
1564
+ }));
1565
+ Pn.displayName = "PhoneInput";
1566
+ var Fn = s.forwardRef(({ className: e, ...t }, n) => /* @__PURE__ */ v(J, {
1567
+ className: N("rounded-e-lg rounded-s-none", e),
1568
+ ...t,
1569
+ ref: n
1570
+ }));
1571
+ Fn.displayName = "InputComponent";
1572
+ var In = ({ disabled: e, value: t, onChange: n, options: r }) => {
1573
+ let i = s.useCallback((e) => {
1574
+ n(e);
1575
+ }, [n]);
1576
+ return /* @__PURE__ */ y(Y, { children: [/* @__PURE__ */ v(X, {
1577
+ asChild: !0,
1578
+ children: /* @__PURE__ */ y(z, {
1579
+ type: "button",
1580
+ variant: "outline",
1581
+ className: N("flex gap-1 rounded-e-none rounded-s-lg border-r-0 px-3 focus:z-10"),
1582
+ disabled: e,
1583
+ children: [/* @__PURE__ */ v(Ln, {
1584
+ country: t,
1585
+ countryName: t
1586
+ }), /* @__PURE__ */ v(re, { className: N("-mr-2 size-4 opacity-50", e ? "hidden" : "opacity-100") })]
1587
+ })
1588
+ }), /* @__PURE__ */ v(Z, {
1589
+ className: "w-[300px] p-0",
1590
+ children: /* @__PURE__ */ y(B, { children: [/* @__PURE__ */ v(V, { placeholder: "Buscar país..." }), /* @__PURE__ */ v(H, { children: /* @__PURE__ */ y(Nn, {
1591
+ className: "h-72",
1592
+ children: [/* @__PURE__ */ v(U, { children: "País no encontrado." }), /* @__PURE__ */ v(W, { children: r.filter((e) => e.value).map((e) => /* @__PURE__ */ y(G, {
1593
+ className: "gap-2",
1594
+ onSelect: () => i(e.value),
1595
+ children: [
1596
+ /* @__PURE__ */ v(Ln, {
1597
+ country: e.value,
1598
+ countryName: e.label
1599
+ }),
1600
+ /* @__PURE__ */ v("span", {
1601
+ className: "flex-1 text-sm",
1602
+ children: e.label
1603
+ }),
1604
+ e.value && /* @__PURE__ */ v("span", {
1605
+ className: "text-sm text-foreground/50",
1606
+ children: `+${we.getCountryCallingCode(e.value)}`
1607
+ }),
1608
+ /* @__PURE__ */ v(h, { className: N("ml-auto size-4", e.value === t ? "opacity-100" : "opacity-0") })
1609
+ ]
1610
+ }, e.value)) })]
1611
+ }) })] })
1612
+ })] });
1613
+ }, Ln = ({ country: e, countryName: t }) => {
1614
+ let n = Te[e];
1615
+ return /* @__PURE__ */ v("span", {
1616
+ className: "flex h-5 w-7 shrink-0 items-center justify-center overflow-hidden rounded-sm bg-foreground/10 [&_svg]:h-full [&_svg]:w-full [&_svg]:object-cover",
1617
+ children: n && /* @__PURE__ */ v(n, { title: t })
1618
+ });
1619
+ }, Rn = s.forwardRef(({ className: e, value: t, ...n }, r) => /* @__PURE__ */ v(k.Root, {
1620
+ ref: r,
1621
+ className: N("relative h-2 w-full overflow-hidden rounded-full bg-primary/20", e),
1622
+ ...n,
1623
+ children: /* @__PURE__ */ v(k.Indicator, {
1624
+ className: "h-full bg-primary transition-transform duration-300 ease-out",
1625
+ style: {
1626
+ width: "100%",
1627
+ transform: `translateX(-${100 - (t || 0)}%)`
1628
+ }
1629
+ })
1630
+ }));
1631
+ Rn.displayName = k.Root.displayName;
1632
+ //#endregion
1633
+ //#region src/components/ui/radio-group.tsx
1634
+ function zn({ className: e, ...t }) {
1635
+ return /* @__PURE__ */ v(Ee.Root, {
1636
+ "data-slot": "radio-group",
1637
+ className: N("grid gap-3", e),
1638
+ ...t
1639
+ });
1640
+ }
1641
+ function Bn({ className: e, ...t }) {
1642
+ return /* @__PURE__ */ v(Ee.Item, {
1643
+ "data-slot": "radio-group-item",
1644
+ className: N("border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50", e),
1645
+ ...t,
1646
+ children: /* @__PURE__ */ v(Ee.Indicator, {
1647
+ "data-slot": "radio-group-indicator",
1648
+ className: "relative flex items-center justify-center",
1649
+ children: /* @__PURE__ */ v(ie, { className: "fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2" })
1650
+ })
1651
+ });
1652
+ }
1653
+ //#endregion
1654
+ //#region src/components/ui/select.tsx
1655
+ function Vn({ ...e }) {
1656
+ return /* @__PURE__ */ v(A.Root, {
1657
+ "data-slot": "select",
1658
+ ...e
1659
+ });
1660
+ }
1661
+ function Hn({ ...e }) {
1662
+ return /* @__PURE__ */ v(A.Group, {
1663
+ "data-slot": "select-group",
1664
+ ...e
1665
+ });
1666
+ }
1667
+ function Un({ ...e }) {
1668
+ return /* @__PURE__ */ v(A.Value, {
1669
+ "data-slot": "select-value",
1670
+ ...e
1671
+ });
1672
+ }
1673
+ function Wn({ className: e, size: t = "default", children: n, ...r }) {
1674
+ return /* @__PURE__ */ y(A.Trigger, {
1675
+ "data-slot": "select-trigger",
1676
+ "data-size": t,
1677
+ className: N("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", e),
1678
+ ...r,
1679
+ children: [n, /* @__PURE__ */ v(A.Icon, {
1680
+ asChild: !0,
1681
+ children: /* @__PURE__ */ v(_, { className: "size-4 opacity-50" })
1682
+ })]
1683
+ });
1684
+ }
1685
+ function Gn({ className: e, children: t, position: n = "popper", ...r }) {
1686
+ return /* @__PURE__ */ v(A.Portal, { children: /* @__PURE__ */ y(A.Content, {
1687
+ "data-slot": "select-content",
1688
+ className: N("bg-popover text-popover-foreground 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-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md", n === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1", e),
1689
+ position: n,
1690
+ ...r,
1691
+ children: [
1692
+ /* @__PURE__ */ v(Yn, {}),
1693
+ /* @__PURE__ */ v(A.Viewport, {
1694
+ className: N("p-1", n === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),
1695
+ children: t
1696
+ }),
1697
+ /* @__PURE__ */ v(Xn, {})
1698
+ ]
1699
+ }) });
1700
+ }
1701
+ function Kn({ className: e, ...t }) {
1702
+ return /* @__PURE__ */ v(A.Label, {
1703
+ "data-slot": "select-label",
1704
+ className: N("text-muted-foreground px-2 py-1.5 text-xs", e),
1705
+ ...t
1706
+ });
1707
+ }
1708
+ function qn({ className: e, children: t, ...n }) {
1709
+ return /* @__PURE__ */ y(A.Item, {
1710
+ "data-slot": "select-item",
1711
+ className: N("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 ps-2 pe-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", e),
1712
+ ...n,
1713
+ children: [/* @__PURE__ */ v("span", {
1714
+ className: "absolute end-2 flex size-3.5 items-center justify-center",
1715
+ children: /* @__PURE__ */ v(A.ItemIndicator, { children: /* @__PURE__ */ v(h, { className: "size-4" }) })
1716
+ }), /* @__PURE__ */ v(A.ItemText, { children: t })]
1717
+ });
1718
+ }
1719
+ function Jn({ className: e, ...t }) {
1720
+ return /* @__PURE__ */ v(A.Separator, {
1721
+ "data-slot": "select-separator",
1722
+ className: N("bg-border pointer-events-none -mx-1 my-1 h-px", e),
1723
+ ...t
1724
+ });
1725
+ }
1726
+ function Yn({ className: e, ...t }) {
1727
+ return /* @__PURE__ */ v(A.ScrollUpButton, {
1728
+ "data-slot": "select-scroll-up-button",
1729
+ className: N("flex cursor-default items-center justify-center py-1", e),
1730
+ ...t,
1731
+ children: /* @__PURE__ */ v(ne, { className: "size-4" })
1732
+ });
1733
+ }
1734
+ function Xn({ className: e, ...t }) {
1735
+ return /* @__PURE__ */ v(A.ScrollDownButton, {
1736
+ "data-slot": "select-scroll-down-button",
1737
+ className: N("flex cursor-default items-center justify-center py-1", e),
1738
+ ...t,
1739
+ children: /* @__PURE__ */ v(_, { className: "size-4" })
1740
+ });
1741
+ }
1742
+ //#endregion
1743
+ //#region src/components/ui/separator.tsx
1744
+ function Zn({ className: e, orientation: t = "horizontal", decorative: n = !0, ...r }) {
1745
+ return /* @__PURE__ */ v(De.Root, {
1746
+ "data-slot": "separator",
1747
+ decorative: n,
1748
+ orientation: t,
1749
+ className: N("bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px", e),
1750
+ ...r
1751
+ });
1752
+ }
1753
+ //#endregion
1754
+ //#region src/components/ui/sheet.tsx
1755
+ function Qn({ ...e }) {
1756
+ return /* @__PURE__ */ v(T.Root, {
1757
+ "data-slot": "sheet",
1758
+ ...e
1759
+ });
1760
+ }
1761
+ function $n({ ...e }) {
1762
+ return /* @__PURE__ */ v(T.Trigger, {
1763
+ "data-slot": "sheet-trigger",
1764
+ ...e
1765
+ });
1766
+ }
1767
+ function er({ ...e }) {
1768
+ return /* @__PURE__ */ v(T.Close, {
1769
+ "data-slot": "sheet-close",
1770
+ ...e
1771
+ });
1772
+ }
1773
+ function tr({ ...e }) {
1774
+ return /* @__PURE__ */ v(T.Portal, {
1775
+ "data-slot": "sheet-portal",
1776
+ ...e
1777
+ });
1778
+ }
1779
+ function nr({ className: e, ...t }) {
1780
+ return /* @__PURE__ */ v(T.Overlay, {
1781
+ "data-slot": "sheet-overlay",
1782
+ className: N("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50", e),
1783
+ ...t
1784
+ });
1785
+ }
1786
+ function rr({ className: e, children: t, side: n = "right", ...r }) {
1787
+ return /* @__PURE__ */ y(tr, { children: [/* @__PURE__ */ v(nr, {}), /* @__PURE__ */ y(T.Content, {
1788
+ "data-slot": "sheet-content",
1789
+ className: N("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500", n === "right" && "data-[state=closed]:slide-out-to-end data-[state=open]:slide-in-from-end inset-y-0 end-0 h-full w-3/4 border-s sm:max-w-sm", n === "left" && "data-[state=closed]:slide-out-to-start data-[state=open]:slide-in-from-start inset-y-0 start-0 h-full w-3/4 border-e sm:max-w-sm", n === "top" && "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b", n === "bottom" && "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t", e),
1790
+ ...r,
1791
+ children: [t, /* @__PURE__ */ y(T.Close, {
1792
+ className: "ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute end-4 top-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none",
1793
+ children: [/* @__PURE__ */ v(de, { className: "size-4" }), /* @__PURE__ */ v("span", {
1794
+ className: "sr-only",
1795
+ children: "Close"
1796
+ })]
1797
+ })]
1798
+ })] });
1799
+ }
1800
+ function ir({ className: e, ...t }) {
1801
+ return /* @__PURE__ */ v("div", {
1802
+ "data-slot": "sheet-header",
1803
+ className: N("flex flex-col gap-1.5 p-4", e),
1804
+ ...t
1805
+ });
1806
+ }
1807
+ function ar({ className: e, ...t }) {
1808
+ return /* @__PURE__ */ v("div", {
1809
+ "data-slot": "sheet-footer",
1810
+ className: N("mt-auto flex flex-col gap-2 p-4", e),
1811
+ ...t
1812
+ });
1813
+ }
1814
+ function or({ className: e, ...t }) {
1815
+ return /* @__PURE__ */ v(T.Title, {
1816
+ "data-slot": "sheet-title",
1817
+ className: N("text-foreground font-semibold", e),
1818
+ ...t
1819
+ });
1820
+ }
1821
+ function sr({ className: e, ...t }) {
1822
+ return /* @__PURE__ */ v(T.Description, {
1823
+ "data-slot": "sheet-description",
1824
+ className: N("text-muted-foreground text-sm", e),
1825
+ ...t
1826
+ });
1827
+ }
1828
+ //#endregion
1829
+ //#region src/hooks/use-mobile.tsx
1830
+ var cr = 768;
1831
+ function lr() {
1832
+ let [e, t] = s.useState(void 0);
1833
+ return s.useEffect(() => {
1834
+ let e = window.matchMedia(`(max-width: ${cr - 1}px)`), n = () => {
1835
+ t(window.innerWidth < cr);
1836
+ };
1837
+ return e.addEventListener("change", n), t(window.innerWidth < cr), () => e.removeEventListener("change", n);
1838
+ }, []), !!e;
1839
+ }
1840
+ //#endregion
1841
+ //#region src/components/ui/skeleton.tsx
1842
+ function ur({ className: e, ...t }) {
1843
+ return /* @__PURE__ */ v("div", {
1844
+ "data-slot": "skeleton",
1845
+ className: N("bg-accent animate-pulse rounded-md", e),
1846
+ ...t
1847
+ });
1848
+ }
1849
+ //#endregion
1850
+ //#region src/components/ui/tooltip.tsx
1851
+ function dr({ delayDuration: e = 0, ...t }) {
1852
+ return /* @__PURE__ */ v(j.Provider, {
1853
+ "data-slot": "tooltip-provider",
1854
+ delayDuration: e,
1855
+ ...t
1856
+ });
1857
+ }
1858
+ function fr({ ...e }) {
1859
+ return /* @__PURE__ */ v(dr, { children: /* @__PURE__ */ v(j.Root, {
1860
+ "data-slot": "tooltip",
1861
+ ...e
1862
+ }) });
1863
+ }
1864
+ function pr({ ...e }) {
1865
+ return /* @__PURE__ */ v(j.Trigger, {
1866
+ "data-slot": "tooltip-trigger",
1867
+ ...e
1868
+ });
1869
+ }
1870
+ function mr({ className: e, sideOffset: t = 0, children: n, ...r }) {
1871
+ return /* @__PURE__ */ v(j.Portal, { children: /* @__PURE__ */ y(j.Content, {
1872
+ "data-slot": "tooltip-content",
1873
+ sideOffset: t,
1874
+ className: N("bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance", e),
1875
+ ...r,
1876
+ children: [n, /* @__PURE__ */ v(j.Arrow, { className: "bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" })]
1877
+ }) });
1878
+ }
1879
+ //#endregion
1880
+ //#region src/components/ui/sidebar.tsx
1881
+ var hr = "sidebar_state", gr = 3600 * 24 * 7, _r = "16rem", vr = "18rem", yr = "3rem", br = "b", xr = s.createContext(null);
1882
+ function $() {
1883
+ let e = s.useContext(xr);
1884
+ if (!e) throw Error("useSidebar must be used within a SidebarProvider.");
1885
+ return e;
1886
+ }
1887
+ function Sr({ defaultOpen: e = !0, open: t, onOpenChange: n, className: r, style: i, children: a, ...o }) {
1888
+ let c = lr(), [l, u] = s.useState(!1), [d, f] = s.useState(e), p = t ?? d, m = s.useCallback((e) => {
1889
+ let t = typeof e == "function" ? e(p) : e;
1890
+ n ? n(t) : f(t), document.cookie = `${hr}=${t}; path=/; max-age=${gr}`;
1891
+ }, [n, p]), h = s.useCallback(() => c ? u((e) => !e) : m((e) => !e), [
1892
+ c,
1893
+ m,
1894
+ u
1895
+ ]);
1896
+ s.useEffect(() => {
1897
+ let e = (e) => {
1898
+ e.key === br && (e.metaKey || e.ctrlKey) && (e.preventDefault(), h());
1899
+ };
1900
+ return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
1901
+ }, [h]);
1902
+ let g = p ? "expanded" : "collapsed", _ = s.useMemo(() => ({
1903
+ state: g,
1904
+ open: p,
1905
+ setOpen: m,
1906
+ isMobile: c,
1907
+ openMobile: l,
1908
+ setOpenMobile: u,
1909
+ toggleSidebar: h
1910
+ }), [
1911
+ g,
1912
+ p,
1913
+ m,
1914
+ c,
1915
+ l,
1916
+ u,
1917
+ h
1918
+ ]);
1919
+ return /* @__PURE__ */ v(xr.Provider, {
1920
+ value: _,
1921
+ children: /* @__PURE__ */ v(dr, {
1922
+ delayDuration: 0,
1923
+ children: /* @__PURE__ */ v("div", {
1924
+ "data-slot": "sidebar-wrapper",
1925
+ style: {
1926
+ "--sidebar-width": _r,
1927
+ "--sidebar-width-icon": yr,
1928
+ ...i
1929
+ },
1930
+ className: N("group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex h-svh w-full overflow-hidden", r),
1931
+ ...o,
1932
+ children: a
1933
+ })
1934
+ })
1935
+ });
1936
+ }
1937
+ function Cr({ side: e = "left", variant: t = "sidebar", collapsible: n = "offcanvas", className: r, children: i, ...a }) {
1938
+ let { isMobile: o, state: s, openMobile: c, setOpenMobile: l } = $();
1939
+ return n === "none" ? /* @__PURE__ */ v("div", {
1940
+ "data-slot": "sidebar",
1941
+ className: N("bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col", r),
1942
+ ...a,
1943
+ children: i
1944
+ }) : o ? /* @__PURE__ */ v(Qn, {
1945
+ open: c,
1946
+ onOpenChange: l,
1947
+ ...a,
1948
+ children: /* @__PURE__ */ y(rr, {
1949
+ "data-sidebar": "sidebar",
1950
+ "data-slot": "sidebar",
1951
+ "data-mobile": "true",
1952
+ className: "bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden",
1953
+ style: { "--sidebar-width": vr },
1954
+ side: e,
1955
+ children: [/* @__PURE__ */ y(ir, {
1956
+ className: "sr-only",
1957
+ children: [/* @__PURE__ */ v(or, { children: "Sidebar" }), /* @__PURE__ */ v(sr, { children: "Displays the mobile sidebar." })]
1958
+ }), /* @__PURE__ */ v("div", {
1959
+ className: "flex h-full w-full flex-col",
1960
+ children: i
1961
+ })]
1962
+ })
1963
+ }) : /* @__PURE__ */ y("div", {
1964
+ className: "group peer text-sidebar-foreground hidden md:block",
1965
+ "data-state": s,
1966
+ "data-collapsible": s === "collapsed" ? n : "",
1967
+ "data-variant": t,
1968
+ "data-side": e,
1969
+ "data-slot": "sidebar",
1970
+ children: [/* @__PURE__ */ v("div", {
1971
+ "data-slot": "sidebar-gap",
1972
+ className: N("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear", "group-data-[collapsible=offcanvas]:w-0", "group-data-[side=right]:rotate-180", t === "floating" || t === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)")
1973
+ }), /* @__PURE__ */ v("div", {
1974
+ "data-slot": "sidebar-container",
1975
+ className: N("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[inset-inline,width] duration-200 ease-linear md:flex", e === "left" ? "start-0 group-data-[collapsible=offcanvas]:-start-[calc(var(--sidebar-width))]" : "end-0 group-data-[collapsible=offcanvas]:-end-[calc(var(--sidebar-width))]", t === "floating" || t === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-e group-data-[side=right]:border-s", r),
1976
+ ...a,
1977
+ children: /* @__PURE__ */ v("div", {
1978
+ "data-sidebar": "sidebar",
1979
+ "data-slot": "sidebar-inner",
1980
+ className: "bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm",
1981
+ children: i
1982
+ })
1983
+ })]
1984
+ });
1985
+ }
1986
+ function wr({ className: e, onClick: t, ...n }) {
1987
+ let { toggleSidebar: r } = $();
1988
+ return /* @__PURE__ */ y(z, {
1989
+ "data-sidebar": "trigger",
1990
+ "data-slot": "sidebar-trigger",
1991
+ variant: "ghost",
1992
+ size: "icon",
1993
+ className: N("size-7", e),
1994
+ onClick: (e) => {
1995
+ t?.(e), r();
1996
+ },
1997
+ ...n,
1998
+ children: [/* @__PURE__ */ v(ce, {}), /* @__PURE__ */ v("span", {
1999
+ className: "sr-only",
2000
+ children: "Toggle Sidebar"
2001
+ })]
2002
+ });
2003
+ }
2004
+ function Tr({ className: e, ...t }) {
2005
+ let { toggleSidebar: n } = $();
2006
+ return /* @__PURE__ */ v("button", {
2007
+ "data-sidebar": "rail",
2008
+ "data-slot": "sidebar-rail",
2009
+ "aria-label": "Toggle Sidebar",
2010
+ tabIndex: -1,
2011
+ onClick: n,
2012
+ title: "Toggle Sidebar",
2013
+ className: N("hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-end-4 group-data-[side=right]:start-0 after:absolute after:inset-y-0 after:start-1/2 after:w-[2px] sm:flex", "in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize", "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize", "hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:start-full", "[[data-side=left][data-collapsible=offcanvas]_&]:-end-2", "[[data-side=right][data-collapsible=offcanvas]_&]:-start-2", "rtl:translate-x-1/2", "rtl:in-data-[side=left]:cursor-e-resize rtl:in-data-[side=right]:cursor-w-resize", "rtl:[[data-side=left][data-state=collapsed]_&]:cursor-w-resize rtl:[[data-side=right][data-state=collapsed]_&]:cursor-e-resize", e),
2014
+ ...t
2015
+ });
2016
+ }
2017
+ function Er({ className: e, ...t }) {
2018
+ return /* @__PURE__ */ v("div", {
2019
+ "data-slot": "sidebar-inset",
2020
+ className: N("bg-background relative flex w-full flex-1 flex-col overflow-y-auto", "md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ms-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ms-2", e),
2021
+ ...t
2022
+ });
2023
+ }
2024
+ function Dr({ className: e, ...t }) {
2025
+ return /* @__PURE__ */ v(J, {
2026
+ "data-slot": "sidebar-input",
2027
+ "data-sidebar": "input",
2028
+ className: N("bg-background h-8 w-full shadow-none", e),
2029
+ ...t
2030
+ });
2031
+ }
2032
+ function Or({ className: e, ...t }) {
2033
+ return /* @__PURE__ */ v("div", {
2034
+ "data-slot": "sidebar-header",
2035
+ "data-sidebar": "header",
2036
+ className: N("flex flex-col gap-2 p-2", e),
2037
+ ...t
2038
+ });
2039
+ }
2040
+ function kr({ className: e, ...t }) {
2041
+ return /* @__PURE__ */ v("div", {
2042
+ "data-slot": "sidebar-footer",
2043
+ "data-sidebar": "footer",
2044
+ className: N("flex flex-col gap-2 p-2", e),
2045
+ ...t
2046
+ });
2047
+ }
2048
+ function Ar({ className: e, ...t }) {
2049
+ return /* @__PURE__ */ v(Zn, {
2050
+ "data-slot": "sidebar-separator",
2051
+ "data-sidebar": "separator",
2052
+ className: N("bg-sidebar-border mx-2 w-auto", e),
2053
+ ...t
2054
+ });
2055
+ }
2056
+ function jr({ className: e, ...t }) {
2057
+ return /* @__PURE__ */ v("div", {
2058
+ "data-slot": "sidebar-content",
2059
+ "data-sidebar": "content",
2060
+ className: N("flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden", e),
2061
+ ...t
2062
+ });
2063
+ }
2064
+ function Mr({ className: e, ...t }) {
2065
+ return /* @__PURE__ */ v("div", {
2066
+ "data-slot": "sidebar-group",
2067
+ "data-sidebar": "group",
2068
+ className: N("relative flex w-full min-w-0 flex-col p-2", e),
2069
+ ...t
2070
+ });
2071
+ }
2072
+ function Nr({ className: e, asChild: t = !1, ...n }) {
2073
+ return /* @__PURE__ */ v(t ? S : "div", {
2074
+ "data-slot": "sidebar-group-label",
2075
+ "data-sidebar": "group-label",
2076
+ className: N("text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0", "group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0", e),
2077
+ ...n
2078
+ });
2079
+ }
2080
+ function Pr({ className: e, asChild: t = !1, ...n }) {
2081
+ return /* @__PURE__ */ v(t ? S : "button", {
2082
+ "data-slot": "sidebar-group-action",
2083
+ "data-sidebar": "group-action",
2084
+ className: N("text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute end-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0", "after:absolute after:-inset-2 md:after:hidden", "group-data-[collapsible=icon]:hidden", e),
2085
+ ...n
2086
+ });
2087
+ }
2088
+ function Fr({ className: e, ...t }) {
2089
+ return /* @__PURE__ */ v("div", {
2090
+ "data-slot": "sidebar-group-content",
2091
+ "data-sidebar": "group-content",
2092
+ className: N("w-full text-sm", e),
2093
+ ...t
2094
+ });
2095
+ }
2096
+ function Ir({ className: e, ...t }) {
2097
+ return /* @__PURE__ */ v("ul", {
2098
+ "data-slot": "sidebar-menu",
2099
+ "data-sidebar": "menu",
2100
+ className: N("flex w-full min-w-0 flex-col gap-1", e),
2101
+ ...t
2102
+ });
2103
+ }
2104
+ function Lr({ className: e, ...t }) {
2105
+ return /* @__PURE__ */ v("li", {
2106
+ "data-slot": "sidebar-menu-item",
2107
+ "data-sidebar": "menu-item",
2108
+ className: N("group/menu-item relative", e),
2109
+ ...t
2110
+ });
2111
+ }
2112
+ var Rr = b("peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-start text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pe-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0", {
2113
+ variants: {
2114
+ variant: {
2115
+ default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
2116
+ outline: "bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]"
2117
+ },
2118
+ size: {
2119
+ default: "h-8 text-sm",
2120
+ sm: "h-7 text-xs",
2121
+ lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!"
2122
+ }
2123
+ },
2124
+ defaultVariants: {
2125
+ variant: "default",
2126
+ size: "default"
2127
+ }
2128
+ });
2129
+ function zr({ asChild: e = !1, isActive: t = !1, variant: n = "default", size: r = "default", tooltip: i, className: a, ...o }) {
2130
+ let s = e ? S : "button", { isMobile: c, state: l } = $(), u = /* @__PURE__ */ v(s, {
2131
+ "data-slot": "sidebar-menu-button",
2132
+ "data-sidebar": "menu-button",
2133
+ "data-size": r,
2134
+ "data-active": t,
2135
+ className: N(Rr({
2136
+ variant: n,
2137
+ size: r
2138
+ }), a),
2139
+ ...o
2140
+ });
2141
+ return i ? (typeof i == "string" && (i = { children: i }), /* @__PURE__ */ y(fr, { children: [/* @__PURE__ */ v(pr, {
2142
+ asChild: !0,
2143
+ children: u
2144
+ }), /* @__PURE__ */ v(mr, {
2145
+ side: "right",
2146
+ align: "center",
2147
+ hidden: l !== "collapsed" || c,
2148
+ ...i
2149
+ })] })) : u;
2150
+ }
2151
+ function Br({ className: e, asChild: t = !1, showOnHover: n = !1, ...r }) {
2152
+ return /* @__PURE__ */ v(t ? S : "button", {
2153
+ "data-slot": "sidebar-menu-action",
2154
+ "data-sidebar": "menu-action",
2155
+ className: N("text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute end-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0", "after:absolute after:-inset-2 md:after:hidden", "peer-data-[size=sm]/menu-button:top-1", "peer-data-[size=default]/menu-button:top-1.5", "peer-data-[size=lg]/menu-button:top-2.5", "group-data-[collapsible=icon]:hidden", n && "peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0", e),
2156
+ ...r
2157
+ });
2158
+ }
2159
+ function Vr({ className: e, ...t }) {
2160
+ return /* @__PURE__ */ v("div", {
2161
+ "data-slot": "sidebar-menu-badge",
2162
+ "data-sidebar": "menu-badge",
2163
+ className: N("text-sidebar-foreground pointer-events-none absolute end-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none", "peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground", "peer-data-[size=sm]/menu-button:top-1", "peer-data-[size=default]/menu-button:top-1.5", "peer-data-[size=lg]/menu-button:top-2.5", "group-data-[collapsible=icon]:hidden", e),
2164
+ ...t
2165
+ });
2166
+ }
2167
+ function Hr({ className: e, showIcon: t = !1, ...n }) {
2168
+ let r = s.useMemo(() => `${Math.floor(Math.random() * 40) + 50}%`, []);
2169
+ return /* @__PURE__ */ y("div", {
2170
+ "data-slot": "sidebar-menu-skeleton",
2171
+ "data-sidebar": "menu-skeleton",
2172
+ className: N("flex h-8 items-center gap-2 rounded-md px-2", e),
2173
+ ...n,
2174
+ children: [t && /* @__PURE__ */ v(ur, {
2175
+ className: "size-4 rounded-md",
2176
+ "data-sidebar": "menu-skeleton-icon"
2177
+ }), /* @__PURE__ */ v(ur, {
2178
+ className: "h-4 max-w-(--skeleton-width) flex-1",
2179
+ "data-sidebar": "menu-skeleton-text",
2180
+ style: { "--skeleton-width": r }
2181
+ })]
2182
+ });
2183
+ }
2184
+ function Ur({ className: e, ...t }) {
2185
+ return /* @__PURE__ */ v("ul", {
2186
+ "data-slot": "sidebar-menu-sub",
2187
+ "data-sidebar": "menu-sub",
2188
+ className: N("border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-s px-2.5 py-0.5", "group-data-[collapsible=icon]:hidden", e),
2189
+ ...t
2190
+ });
2191
+ }
2192
+ function Wr({ className: e, ...t }) {
2193
+ return /* @__PURE__ */ v("li", {
2194
+ "data-slot": "sidebar-menu-sub-item",
2195
+ "data-sidebar": "menu-sub-item",
2196
+ className: N("group/menu-sub-item relative", e),
2197
+ ...t
2198
+ });
2199
+ }
2200
+ function Gr({ asChild: e = !1, size: t = "md", isActive: n = !1, className: r, ...i }) {
2201
+ return /* @__PURE__ */ v(e ? S : "a", {
2202
+ "data-slot": "sidebar-menu-sub-button",
2203
+ "data-sidebar": "menu-sub-button",
2204
+ "data-size": t,
2205
+ "data-active": n,
2206
+ className: N("text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-inherit", "data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground", t === "sm" && "text-xs", t === "md" && "text-sm", "group-data-[collapsible=icon]:hidden", r),
2207
+ ...i
2208
+ });
2209
+ }
2210
+ //#endregion
2211
+ //#region src/components/ui/sonner.tsx
2212
+ function Kr({ ...e }) {
2213
+ let { theme: t = "system" } = Lt();
2214
+ return /* @__PURE__ */ v(r, {
2215
+ theme: t,
2216
+ className: "toaster group [&_div[data-content]]:w-full",
2217
+ toastOptions: { classNames: {
2218
+ toast: "rounded-lg border bg-background shadow-lg",
2219
+ title: "font-semibold",
2220
+ description: "text-sm text-muted-foreground",
2221
+ actionButton: "bg-primary text-primary-foreground",
2222
+ cancelButton: "bg-muted text-muted-foreground"
2223
+ } },
2224
+ style: {
2225
+ "--normal-bg": "var(--popover)",
2226
+ "--normal-text": "var(--popover-foreground)",
2227
+ "--normal-border": "var(--border)"
2228
+ },
2229
+ ...e
2230
+ });
2231
+ }
2232
+ //#endregion
2233
+ //#region src/components/ui/switch.tsx
2234
+ function qr({ className: e, ...t }) {
2235
+ return /* @__PURE__ */ v(Oe.Root, {
2236
+ "data-slot": "switch",
2237
+ className: N("peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50", e),
2238
+ ...t,
2239
+ children: /* @__PURE__ */ v(Oe.Thumb, {
2240
+ "data-slot": "switch-thumb",
2241
+ className: N("bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 rtl:data-[state=checked]:-translate-x-[calc(100%-2px)]")
2242
+ })
2243
+ });
2244
+ }
2245
+ //#endregion
2246
+ //#region src/components/ui/table.tsx
2247
+ function Jr({ className: e, noWrapper: t, ...n }) {
2248
+ let r = /* @__PURE__ */ v("table", {
2249
+ "data-slot": "table",
2250
+ className: N("w-full caption-bottom text-sm", e),
2251
+ ...n
2252
+ });
2253
+ return t ? r : /* @__PURE__ */ v("div", {
2254
+ "data-slot": "table-container",
2255
+ className: "relative w-full overflow-x-auto",
2256
+ children: r
2257
+ });
2258
+ }
2259
+ function Yr({ className: e, ...t }) {
2260
+ return /* @__PURE__ */ v("thead", {
2261
+ "data-slot": "table-header",
2262
+ className: N("[&_tr]:border-b", e),
2263
+ ...t
2264
+ });
2265
+ }
2266
+ function Xr({ className: e, ...t }) {
2267
+ return /* @__PURE__ */ v("tbody", {
2268
+ "data-slot": "table-body",
2269
+ className: N("[&_tr:last-child]:border-0", e),
2270
+ ...t
2271
+ });
2272
+ }
2273
+ function Zr({ className: e, ...t }) {
2274
+ return /* @__PURE__ */ v("tfoot", {
2275
+ "data-slot": "table-footer",
2276
+ className: N("bg-muted/50 border-t font-medium [&>tr]:last:border-b-0", e),
2277
+ ...t
2278
+ });
2279
+ }
2280
+ function Qr({ className: e, ...t }) {
2281
+ return /* @__PURE__ */ v("tr", {
2282
+ "data-slot": "table-row",
2283
+ className: N("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors", e),
2284
+ ...t
2285
+ });
2286
+ }
2287
+ function $r({ className: e, ...t }) {
2288
+ return /* @__PURE__ */ v("th", {
2289
+ "data-slot": "table-head",
2290
+ className: N("text-foreground h-10 px-2 text-start align-middle font-medium whitespace-nowrap [&>[role=checkbox]]:translate-y-[2px]", e),
2291
+ ...t
2292
+ });
2293
+ }
2294
+ function ei({ className: e, ...t }) {
2295
+ return /* @__PURE__ */ v("td", {
2296
+ "data-slot": "table-cell",
2297
+ className: N("p-2 align-middle whitespace-nowrap [&>[role=checkbox]]:translate-y-[2px]", e),
2298
+ ...t
2299
+ });
2300
+ }
2301
+ function ti({ className: e, ...t }) {
2302
+ return /* @__PURE__ */ v("caption", {
2303
+ "data-slot": "table-caption",
2304
+ className: N("text-muted-foreground mt-4 text-sm", e),
2305
+ ...t
2306
+ });
2307
+ }
2308
+ //#endregion
2309
+ //#region src/components/ui/tabs.tsx
2310
+ function ni({ className: e, ...t }) {
2311
+ return /* @__PURE__ */ v(M.Root, {
2312
+ "data-slot": "tabs",
2313
+ className: N("flex flex-col gap-2", e),
2314
+ ...t
2315
+ });
2316
+ }
2317
+ function ri({ className: e, ...t }) {
2318
+ return /* @__PURE__ */ v(M.List, {
2319
+ "data-slot": "tabs-list",
2320
+ className: N("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]", e),
2321
+ ...t
2322
+ });
2323
+ }
2324
+ function ii({ className: e, ...t }) {
2325
+ return /* @__PURE__ */ v(M.Trigger, {
2326
+ "data-slot": "tabs-trigger",
2327
+ className: N("data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", e),
2328
+ ...t
2329
+ });
2330
+ }
2331
+ function ai({ className: e, ...t }) {
2332
+ return /* @__PURE__ */ v(M.Content, {
2333
+ "data-slot": "tabs-content",
2334
+ className: N("flex-1 outline-none", e),
2335
+ ...t
2336
+ });
2337
+ }
2338
+ //#endregion
2339
+ //#region src/components/ui/textarea.tsx
2340
+ function oi({ className: e, ...t }) {
2341
+ return /* @__PURE__ */ v("textarea", {
2342
+ "data-slot": "textarea",
2343
+ className: N("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", e),
2344
+ ...t
2345
+ });
2346
+ }
2347
+ //#endregion
2348
+ export { tt as Accordion, it as AccordionContent, nt as AccordionItem, rt as AccordionTrigger, ot as Alert, ct as AlertDescription, lt as AlertDialog, vt as AlertDialogAction, yt as AlertDialogCancel, pt as AlertDialogContent, _t as AlertDialogDescription, ht as AlertDialogFooter, mt as AlertDialogHeader, ft as AlertDialogOverlay, dt as AlertDialogPortal, gt as AlertDialogTitle, ut as AlertDialogTrigger, st as AlertTitle, bt as Avatar, St as AvatarFallback, xt as AvatarImage, wt as Badge, z as Button, Tt as Calendar, Et as CalendarDayButton, Dt as Card, jt as CardAction, Mt as CardContent, At as CardDescription, Nt as CardFooter, Ot as CardHeader, kt as CardTitle, Pt as Checkbox, Rt as CodeEditor, zt as Collapsible, Vt as CollapsibleContent, Bt as CollapsibleTrigger, B as Command, Qt as CommandDialog, U as CommandEmpty, W as CommandGroup, V as CommandInput, G as CommandItem, H as CommandList, $t as CommandSeparator, en as CommandShortcut, Ht as Dialog, Gt as DialogClose, qt as DialogContent, Zt as DialogDescription, Yt as DialogFooter, Jt as DialogHeader, Kt as DialogOverlay, Wt as DialogPortal, Xt as DialogTitle, Ut as DialogTrigger, tn as DropdownMenu, cn as DropdownMenuCheckboxItem, an as DropdownMenuContent, on as DropdownMenuGroup, sn as DropdownMenuItem, dn as DropdownMenuLabel, nn as DropdownMenuPortal, ln as DropdownMenuRadioGroup, un as DropdownMenuRadioItem, fn as DropdownMenuSeparator, pn as DropdownMenuShortcut, mn as DropdownMenuSub, gn as DropdownMenuSubContent, hn as DropdownMenuSubTrigger, rn as DropdownMenuTrigger, _n as Form, Cn as FormControl, wn as FormDescription, yn as FormField, xn as FormItem, Sn as FormLabel, Tn as FormMessage, En as ImageUpload, J as Input, Dn as InputOTP, On as InputOTPGroup, An as InputOTPSeparator, kn as InputOTPSlot, K as Label, Mn as MultiSelect, Pn as PhoneInput, Y as Popover, jn as PopoverAnchor, Z as PopoverContent, X as PopoverTrigger, Rn as Progress, zn as RadioGroup, Bn as RadioGroupItem, Ne as SPANISH_SYMBOLS, Nn as ScrollArea, Q as ScrollBar, Vn as Select, Gn as SelectContent, Hn as SelectGroup, qn as SelectItem, Kn as SelectLabel, Xn as SelectScrollDownButton, Yn as SelectScrollUpButton, Jn as SelectSeparator, Wn as SelectTrigger, Un as SelectValue, Zn as Separator, Qn as Sheet, er as SheetClose, rr as SheetContent, sr as SheetDescription, ar as SheetFooter, ir as SheetHeader, or as SheetTitle, $n as SheetTrigger, Cr as Sidebar, jr as SidebarContent, kr as SidebarFooter, Mr as SidebarGroup, Pr as SidebarGroupAction, Fr as SidebarGroupContent, Nr as SidebarGroupLabel, Or as SidebarHeader, Dr as SidebarInput, Er as SidebarInset, Ir as SidebarMenu, Br as SidebarMenuAction, Vr as SidebarMenuBadge, zr as SidebarMenuButton, Lr as SidebarMenuItem, Hr as SidebarMenuSkeleton, Ur as SidebarMenuSub, Gr as SidebarMenuSubButton, Wr as SidebarMenuSubItem, Sr as SidebarProvider, Tr as SidebarRail, Ar as SidebarSeparator, wr as SidebarTrigger, ur as Skeleton, qr as Switch, Jr as Table, Xr as TableBody, ti as TableCaption, ei as TableCell, Zr as TableFooter, $r as TableHead, Yr as TableHeader, Qr as TableRow, ni as Tabs, ai as TabsContent, ri as TabsList, ii as TabsTrigger, oi as Textarea, Kr as Toaster, fr as Tooltip, mr as TooltipContent, dr as TooltipProvider, pr as TooltipTrigger, L as api, Ct as badgeVariants, R as buttonVariants, N as cn, Le as fmtCurrency, Pe as formatCurrency, Ge as generateBadgeStyles, Re as getAllTimezones, qe as getCookie, Ve as getCountries, Fe as getCurrencySymbol, Ae as getImageUrl, Me as getPageNumbers, ke as getStorageUrl, et as handleServerError, Ze as notificationManager, Xe as playNotificationSound, $e as pushService, Ye as removeCookie, We as resolveColorCss, Ue as resolveColorHex, Je as setCookie, je as sleep, q as useFormField, Ie as useFormatCurrency, $ as useSidebar };
2349
+
2350
+ //# sourceMappingURL=index.js.map