mgv-backoffice 1.28.0 → 1.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ui-lib.js CHANGED
@@ -1,125 +1,125 @@
1
- import { Fragment as e, Teleport as t, Transition as n, computed as r, createBlock as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createStaticVNode as c, createTextVNode as l, createVNode as u, defineComponent as d, effectScope as f, nextTick as p, normalizeClass as m, onBeforeUnmount as h, onMounted as g, onScopeDispose as _, onUnmounted as v, openBlock as y, ref as b, renderList as x, renderSlot as S, resolveComponent as C, resolveDynamicComponent as w, toDisplayString as T, unref as E, useSlots as D, vModelCheckbox as O, vModelDynamic as k, vModelText as A, vShow as ee, watch as j, withCtx as M, withDirectives as N, withKeys as P, withModifiers as F } from "vue";
2
- import { ArrowDownIcon as te, ArrowUpIcon as ne, Bars3Icon as re, BellIcon as ie, CheckCircleIcon as ae, ChevronDoubleLeftIcon as oe, ChevronDoubleRightIcon as se, ChevronDownIcon as ce, ChevronRightIcon as le, ClipboardDocumentCheckIcon as ue, ClipboardDocumentIcon as de, DocumentDuplicateIcon as fe, ExclamationCircleIcon as pe, ExclamationTriangleIcon as I, FolderIcon as me, InformationCircleIcon as he, MagnifyingGlassIcon as ge, MinusIcon as _e, MoonIcon as ve, SunIcon as ye, XMarkIcon as be } from "@heroicons/vue/24/outline";
3
- import { HomeIcon as xe } from "@heroicons/vue/24/solid";
4
- import { useRoute as Se, useRouter as Ce } from "vue-router";
1
+ import { Fragment as e, Teleport as t, Transition as n, computed as r, createBlock as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createStaticVNode as c, createTextVNode as l, createVNode as u, defineComponent as d, effectScope as f, nextTick as p, normalizeClass as m, onBeforeUnmount as h, onMounted as g, onScopeDispose as _, onUnmounted as v, openBlock as y, reactive as b, ref as x, renderList as S, renderSlot as C, resolveComponent as w, resolveDynamicComponent as T, toDisplayString as E, unref as D, useSlots as O, vModelCheckbox as ee, vModelDynamic as k, vModelText as A, vShow as j, watch as M, withCtx as N, withDirectives as P, withKeys as te, withModifiers as F } from "vue";
2
+ import { ArrowDownIcon as ne, ArrowUpIcon as re, Bars3Icon as ie, BellIcon as ae, CheckCircleIcon as oe, ChevronDoubleLeftIcon as se, ChevronDoubleRightIcon as ce, ChevronDownIcon as le, ChevronRightIcon as ue, ClipboardDocumentCheckIcon as de, ClipboardDocumentIcon as fe, DocumentDuplicateIcon as pe, ExclamationCircleIcon as me, ExclamationTriangleIcon as he, FolderIcon as ge, InformationCircleIcon as _e, MagnifyingGlassIcon as ve, MinusIcon as ye, MoonIcon as be, SunIcon as xe, XMarkIcon as Se } from "@heroicons/vue/24/outline";
3
+ import { HomeIcon as Ce } from "@heroicons/vue/24/solid";
4
+ import { useRoute as we, useRouter as Te } from "vue-router";
5
5
  //#region src/enums/AlertEnum.ts
6
- var L = /* @__PURE__ */ function(e) {
6
+ var I = /* @__PURE__ */ function(e) {
7
7
  return e.WARNING = "WARNING", e.ERROR = "ERROR", e.SUCCESS = "SUCCESS", e.INFO = "INFO", e;
8
- }({}), R = b(!1), we = !1, z = "mgv-theme";
9
- function Te(e) {
10
- if (we) {
11
- e !== z && console.warn(`[ui-lib] useTheme: storage key "${e}" ignored — theme already initialized with "${z}". Call initTheme({ storageKey }) before mounting any component.`);
8
+ }({}), L = x(!1), Ee = !1, R = "mgv-theme";
9
+ function De(e) {
10
+ if (Ee) {
11
+ e !== R && console.warn(`[ui-lib] useTheme: storage key "${e}" ignored — theme already initialized with "${R}". Call initTheme({ storageKey }) before mounting any component.`);
12
12
  return;
13
13
  }
14
- if (we = !0, z = e, typeof window < "u") {
15
- let e = window.localStorage?.getItem(z);
16
- e ? R.value = e === "dark" : typeof window.matchMedia == "function" && (R.value = window.matchMedia("(prefers-color-scheme: dark)").matches);
14
+ if (Ee = !0, R = e, typeof window < "u") {
15
+ let e = window.localStorage?.getItem(R);
16
+ e ? L.value = e === "dark" : typeof window.matchMedia == "function" && (L.value = window.matchMedia("(prefers-color-scheme: dark)").matches);
17
17
  }
18
18
  typeof document < "u" && f(!0).run(() => {
19
- j(R, (e) => {
20
- document.documentElement.classList.toggle("dark", e), window.localStorage?.setItem(z, e ? "dark" : "light");
19
+ M(L, (e) => {
20
+ document.documentElement.classList.toggle("dark", e), window.localStorage?.setItem(R, e ? "dark" : "light");
21
21
  }, { immediate: !0 });
22
22
  });
23
23
  }
24
- function Ee(e) {
25
- Te(e?.storageKey ?? z);
24
+ function Oe(e) {
25
+ De(e?.storageKey ?? R);
26
26
  }
27
- function B(e) {
28
- Te(e?.storageKey ?? z);
27
+ function z(e) {
28
+ De(e?.storageKey ?? R);
29
29
  function t() {
30
- R.value = !R.value;
30
+ L.value = !L.value;
31
31
  }
32
32
  return {
33
- isDark: R,
33
+ isDark: L,
34
34
  toggleTheme: t
35
35
  };
36
36
  }
37
37
  //#endregion
38
38
  //#region src/components/BaseAlert.vue?vue&type=script&setup=true&lang.ts
39
- var De = { class: "min-w-0 flex-1" }, Oe = {
39
+ var ke = { class: "min-w-0 flex-1" }, Ae = {
40
40
  key: 0,
41
41
  class: "font-medium"
42
- }, ke = /* @__PURE__ */ d({
42
+ }, je = /* @__PURE__ */ d({
43
43
  __name: "BaseAlert",
44
44
  props: {
45
45
  title: { default: "" },
46
- color: { default: L.ERROR },
46
+ color: { default: I.ERROR },
47
47
  compact: {
48
48
  type: Boolean,
49
49
  default: !1
50
50
  }
51
51
  },
52
52
  setup(e) {
53
- let t = e, { isDark: n } = B(), c = {
54
- [L.ERROR]: {
53
+ let t = e, { isDark: n } = z(), c = {
54
+ [I.ERROR]: {
55
55
  light: "bg-red-50 border-red-200 text-red-700",
56
56
  dark: "bg-red-500/10 border-red-500/30 text-red-300"
57
57
  },
58
- [L.WARNING]: {
58
+ [I.WARNING]: {
59
59
  light: "bg-amber-50 border-amber-200 text-amber-700",
60
60
  dark: "bg-amber-500/10 border-amber-500/30 text-amber-300"
61
61
  },
62
- [L.SUCCESS]: {
62
+ [I.SUCCESS]: {
63
63
  light: "bg-emerald-50 border-emerald-200 text-emerald-700",
64
64
  dark: "bg-emerald-500/10 border-emerald-500/30 text-emerald-300"
65
65
  },
66
- [L.INFO]: {
66
+ [I.INFO]: {
67
67
  light: "bg-sky-50 border-sky-200 text-sky-700",
68
68
  dark: "bg-sky-500/10 border-sky-500/30 text-sky-300"
69
69
  }
70
70
  }, l = r(() => n.value ? c[t.color].dark : c[t.color].light), u = r(() => {
71
71
  switch (t.color) {
72
- case L.SUCCESS: return ae;
73
- case L.WARNING: return I;
74
- case L.INFO: return he;
75
- default: return pe;
72
+ case I.SUCCESS: return oe;
73
+ case I.WARNING: return he;
74
+ case I.INFO: return _e;
75
+ default: return me;
76
76
  }
77
77
  }), d = r(() => {
78
78
  switch (t.color) {
79
- case L.SUCCESS: return "text-emerald-500";
80
- case L.WARNING: return "text-amber-500";
81
- case L.INFO: return "text-sky-500";
79
+ case I.SUCCESS: return "text-emerald-500";
80
+ case I.WARNING: return "text-amber-500";
81
+ case I.INFO: return "text-sky-500";
82
82
  default: return "text-red-500";
83
83
  }
84
84
  });
85
85
  return (t, n) => (y(), o("div", {
86
86
  role: "alert",
87
87
  class: m(["flex gap-3 mb-4 rounded-lg border text-sm transition-colors", [e.compact ? "items-start px-3 py-2 text-xs" : "items-start p-4", l.value]])
88
- }, [(y(), i(w(u.value), {
88
+ }, [(y(), i(T(u.value), {
89
89
  class: m(["shrink-0", [e.compact ? "w-4 h-4 mt-px" : "w-5 h-5 mt-0.5", d.value]]),
90
90
  "aria-hidden": "true"
91
- }, null, 8, ["class"])), s("div", De, [e.title ? (y(), o("p", Oe, T(e.title), 1)) : a("", !0), S(t.$slots, "default")])], 2));
91
+ }, null, 8, ["class"])), s("div", ke, [e.title ? (y(), o("p", Ae, E(e.title), 1)) : a("", !0), C(t.$slots, "default")])], 2));
92
92
  }
93
- }), V = /* @__PURE__ */ function(e) {
93
+ }), B = /* @__PURE__ */ function(e) {
94
94
  return e.NONE = "NONE", e.RED = "RED", e.YELLOW = "YELLOW", e.BLACK = "BLACK", e.GRAY = "GRAY", e.GREEN = "GREEN", e.BLUE = "BLUE", e;
95
- }({}), Ae = "bg-red-100 text-red-700 border-red-200", je = /* @__PURE__ */ d({
95
+ }({}), Me = "bg-red-100 text-red-700 border-red-200", Ne = /* @__PURE__ */ d({
96
96
  __name: "BaseBadge",
97
97
  props: { color: {
98
98
  type: String,
99
99
  required: !1
100
100
  } },
101
101
  setup(e) {
102
- let t = D(), n = r(() => !!t.default), i = e, s = {
103
- [V.RED]: "bg-red-100 text-red-700 border-red-200",
104
- [V.GREEN]: "bg-green-100 text-green-700 border-green-200",
105
- [V.BLUE]: "bg-blue-100 text-blue-700 border-blue-200",
106
- [V.YELLOW]: "bg-yellow-100 text-yellow-700 border-yellow-200",
107
- [V.GRAY]: "bg-gray-100 text-gray-700 border-gray-200",
108
- [V.BLACK]: "bg-gray-800 text-gray-100 border-gray-700",
109
- [V.NONE]: "bg-gray-50 text-gray-600 border-gray-200"
110
- }, c = r(() => `inline-flex items-center gap-1 font-semibold text-xs leading-none px-3 py-1.5 rounded-full border ${i.color && s[i.color] || Ae}`);
102
+ let t = O(), n = r(() => !!t.default), i = e, s = {
103
+ [B.RED]: "bg-red-100 text-red-700 border-red-200",
104
+ [B.GREEN]: "bg-green-100 text-green-700 border-green-200",
105
+ [B.BLUE]: "bg-blue-100 text-blue-700 border-blue-200",
106
+ [B.YELLOW]: "bg-yellow-100 text-yellow-700 border-yellow-200",
107
+ [B.GRAY]: "bg-gray-100 text-gray-700 border-gray-200",
108
+ [B.BLACK]: "bg-gray-800 text-gray-100 border-gray-700",
109
+ [B.NONE]: "bg-gray-50 text-gray-600 border-gray-200"
110
+ }, c = r(() => `inline-flex items-center gap-1 font-semibold text-xs leading-none px-3 py-1.5 rounded-full border ${i.color && s[i.color] || Me}`);
111
111
  return (e, t) => n.value ? (y(), o("span", {
112
112
  key: 0,
113
113
  class: m(c.value)
114
- }, [S(e.$slots, "default")], 2)) : a("", !0);
114
+ }, [C(e.$slots, "default")], 2)) : a("", !0);
115
115
  }
116
- }), Me = {
116
+ }), Pe = {
117
117
  class: "flex px-5 py-3 text-gray-700 border border-gray-200 rounded-lg bg-gray-50 dark:bg-gray-800 dark:border-gray-700",
118
118
  "aria-label": "Breadcrumb"
119
- }, Ne = { class: "inline-flex items-center space-x-1 md:space-x-3" }, Pe = {
119
+ }, Fe = { class: "inline-flex items-center space-x-1 md:space-x-3" }, Ie = {
120
120
  class: "inline-flex items-center",
121
121
  style: { "margin-left": "0" }
122
- }, Fe = /* @__PURE__ */ d({
122
+ }, Le = /* @__PURE__ */ d({
123
123
  __name: "BaseBreadcrumb",
124
124
  props: {
125
125
  items: {
@@ -143,41 +143,41 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
143
143
  }));
144
144
  });
145
145
  return (t, n) => {
146
- let r = C("router-link");
147
- return y(), o("nav", Me, [s("ol", Ne, [s("li", Pe, [u(r, {
146
+ let r = w("router-link");
147
+ return y(), o("nav", Pe, [s("ol", Fe, [s("li", Ie, [u(r, {
148
148
  to: "/",
149
149
  class: "inline-flex items-center text-sm font-medium text-gray-700 hover:text-blue-600 dark:text-gray-400 dark:hover:text-white transition-colors rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500"
150
150
  }, {
151
- default: M(() => [u(E(xe), { class: "h-4 w-4 text-gray-500 mr-2" }), n[0] ||= l(" Home ", -1)]),
151
+ default: N(() => [u(D(Ce), { class: "h-4 w-4 text-gray-500 mr-2" }), n[0] ||= l(" Home ", -1)]),
152
152
  _: 1
153
- })]), (y(!0), o(e, null, x(i.value, (e, t) => (y(), o("li", {
153
+ })]), (y(!0), o(e, null, S(i.value, (e, t) => (y(), o("li", {
154
154
  key: t,
155
155
  class: "inline-flex items-center",
156
156
  style: { "margin-left": "0" }
157
- }, [u(E(le), { class: "h-4 w-4 text-gray-500" }), u(r, {
157
+ }, [u(D(ue), { class: "h-4 w-4 text-gray-500" }), u(r, {
158
158
  to: e.url,
159
159
  class: "ml-1 text-sm font-medium text-gray-700 hover:text-blue-600 md:ml-2 dark:text-gray-400 dark:hover:text-white transition-colors rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500"
160
160
  }, {
161
- default: M(() => [l(T(e.name), 1)]),
161
+ default: N(() => [l(E(e.name), 1)]),
162
162
  _: 2
163
163
  }, 1032, ["to"])]))), 128))])]);
164
164
  };
165
165
  }
166
- }), H = /* @__PURE__ */ function(e) {
166
+ }), V = /* @__PURE__ */ function(e) {
167
167
  return e.RED = "RED", e.BLUE = "BLUE", e.WHITE = "WHITE", e.DARK = "DARK", e.GREEN = "GREEN", e.EMERALD = "EMERALD", e.YELLOW = "YELLOW", e.PURPLE = "PURPLE", e.SKY = "SKY", e.GRAY = "GRAY", e.AMBER = "AMBER", e;
168
- }({}), U = /* @__PURE__ */ function(e) {
168
+ }({}), H = /* @__PURE__ */ function(e) {
169
169
  return e.EXTRA_SMALL = "EXTRA_SMALL", e.SMALL = "SMALL", e.BASE = "BASE", e.LARGE = "LARGE", e.EXTRA_LARGE = "EXTRA_LARGE", e;
170
- }({}), Ie = [
170
+ }({}), Re = [
171
171
  "type",
172
172
  "disabled",
173
173
  "onClick"
174
- ], Le = {
174
+ ], ze = {
175
175
  key: 0,
176
176
  class: "inline-flex items-center"
177
- }, Re = { key: 1 }, ze = { key: 2 }, Be = ["type", "disabled"], Ve = {
177
+ }, Be = { key: 1 }, Ve = { key: 2 }, He = ["type", "disabled"], Ue = {
178
178
  key: 0,
179
179
  class: "inline-flex items-center"
180
- }, He = { key: 1 }, Ue = { key: 2 }, We = /* @__PURE__ */ d({
180
+ }, We = { key: 1 }, Ge = { key: 2 }, U = /* @__PURE__ */ d({
181
181
  __name: "BaseButton",
182
182
  props: {
183
183
  description: {
@@ -187,7 +187,7 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
187
187
  color: {
188
188
  type: String,
189
189
  required: !1,
190
- default: H.BLUE
190
+ default: V.BLUE
191
191
  },
192
192
  to: {
193
193
  type: String,
@@ -231,103 +231,103 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
231
231
  }
232
232
  },
233
233
  setup(e) {
234
- let { isDark: t } = B(), n = e;
234
+ let { isDark: t } = z(), n = e;
235
235
  function r() {
236
236
  let e = {
237
- [H.BLUE]: {
237
+ [V.BLUE]: {
238
238
  light: "text-blue-700 border-blue-300 hover:bg-blue-50",
239
239
  dark: "text-blue-400 border-blue-500/40 hover:bg-blue-500/10"
240
240
  },
241
- [H.GREEN]: {
241
+ [V.GREEN]: {
242
242
  light: "text-green-700 border-green-300 hover:bg-green-50",
243
243
  dark: "text-green-400 border-green-500/40 hover:bg-green-500/10"
244
244
  },
245
- [H.EMERALD]: {
245
+ [V.EMERALD]: {
246
246
  light: "text-emerald-700 border-emerald-300 hover:bg-emerald-50",
247
247
  dark: "text-emerald-400 border-emerald-500/40 hover:bg-emerald-500/10"
248
248
  },
249
- [H.RED]: {
249
+ [V.RED]: {
250
250
  light: "text-red-700 border-red-300 hover:bg-red-50",
251
251
  dark: "text-red-400 border-red-500/40 hover:bg-red-500/10"
252
252
  },
253
- [H.YELLOW]: {
253
+ [V.YELLOW]: {
254
254
  light: "text-yellow-700 border-yellow-300 hover:bg-yellow-50",
255
255
  dark: "text-yellow-400 border-yellow-500/40 hover:bg-yellow-500/10"
256
256
  },
257
- [H.PURPLE]: {
257
+ [V.PURPLE]: {
258
258
  light: "text-purple-700 border-purple-300 hover:bg-purple-50",
259
259
  dark: "text-purple-400 border-purple-500/40 hover:bg-purple-500/10"
260
260
  },
261
- [H.SKY]: {
261
+ [V.SKY]: {
262
262
  light: "text-sky-700 border-sky-300 hover:bg-sky-50",
263
263
  dark: "text-sky-400 border-sky-500/40 hover:bg-sky-500/10"
264
264
  },
265
- [H.AMBER]: {
265
+ [V.AMBER]: {
266
266
  light: "text-amber-700 border-amber-300 hover:bg-amber-50",
267
267
  dark: "text-amber-400 border-amber-500/40 hover:bg-amber-500/10"
268
268
  },
269
- [H.GRAY]: {
269
+ [V.GRAY]: {
270
270
  light: "text-gray-700 border-gray-300 hover:bg-gray-50",
271
271
  dark: "text-gray-300 border-gray-600 hover:bg-gray-800"
272
272
  },
273
- [H.DARK]: {
273
+ [V.DARK]: {
274
274
  light: "text-gray-700 border-gray-300 hover:bg-gray-50",
275
275
  dark: "text-gray-300 border-gray-600 hover:bg-gray-800"
276
276
  },
277
- [H.WHITE]: {
277
+ [V.WHITE]: {
278
278
  light: "text-gray-700 border-gray-300 hover:bg-gray-50",
279
279
  dark: "text-gray-300 border-gray-600 hover:bg-gray-800"
280
280
  }
281
- }, r = e[n.color] ?? e[H.BLUE], i = t.value ? r.dark : r.light;
281
+ }, r = e[n.color] ?? e[V.BLUE], i = t.value ? r.dark : r.light;
282
282
  return n.isDisable || n.isLoading ? `border bg-transparent ${i} opacity-50 cursor-not-allowed` : `focus:outline-none focus-visible:ring-2 focus-visible:ring-current border bg-transparent ${i}`;
283
283
  }
284
284
  function c() {
285
285
  let e = {
286
- [H.BLUE]: {
286
+ [V.BLUE]: {
287
287
  light: "text-blue-600 hover:bg-blue-50",
288
288
  dark: "text-blue-400 hover:bg-blue-500/10"
289
289
  },
290
- [H.GREEN]: {
290
+ [V.GREEN]: {
291
291
  light: "text-green-600 hover:bg-green-50",
292
292
  dark: "text-green-400 hover:bg-green-500/10"
293
293
  },
294
- [H.EMERALD]: {
294
+ [V.EMERALD]: {
295
295
  light: "text-emerald-600 hover:bg-emerald-50",
296
296
  dark: "text-emerald-400 hover:bg-emerald-500/10"
297
297
  },
298
- [H.SKY]: {
298
+ [V.SKY]: {
299
299
  light: "text-sky-600 hover:bg-sky-50",
300
300
  dark: "text-sky-400 hover:bg-sky-500/10"
301
301
  },
302
- [H.RED]: {
302
+ [V.RED]: {
303
303
  light: "text-red-500 hover:bg-red-50",
304
304
  dark: "text-red-400 hover:bg-red-500/10"
305
305
  },
306
- [H.AMBER]: {
306
+ [V.AMBER]: {
307
307
  light: "text-amber-700 hover:bg-amber-50",
308
308
  dark: "text-amber-300 hover:bg-amber-500/10"
309
309
  },
310
- [H.YELLOW]: {
310
+ [V.YELLOW]: {
311
311
  light: "text-yellow-600 hover:bg-yellow-50",
312
312
  dark: "text-yellow-400 hover:bg-yellow-500/10"
313
313
  },
314
- [H.PURPLE]: {
314
+ [V.PURPLE]: {
315
315
  light: "text-purple-600 hover:bg-purple-50",
316
316
  dark: "text-purple-400 hover:bg-purple-500/10"
317
317
  },
318
- [H.GRAY]: {
318
+ [V.GRAY]: {
319
319
  light: "text-gray-500 hover:bg-gray-100",
320
320
  dark: "text-gray-400 hover:bg-gray-800"
321
321
  },
322
- [H.DARK]: {
322
+ [V.DARK]: {
323
323
  light: "text-gray-500 hover:bg-gray-100",
324
324
  dark: "text-gray-400 hover:bg-gray-800"
325
325
  },
326
- [H.WHITE]: {
326
+ [V.WHITE]: {
327
327
  light: "text-gray-500 hover:bg-gray-100",
328
328
  dark: "text-gray-400 hover:bg-gray-800"
329
329
  }
330
- }, r = e[n.color] ?? e[H.GRAY], i = t.value ? r.dark : r.light;
330
+ }, r = e[n.color] ?? e[V.GRAY], i = t.value ? r.dark : r.light;
331
331
  return n.isDisable || n.isLoading ? `bg-transparent ${i} opacity-60 cursor-not-allowed` : `focus:outline-none focus-visible:ring-2 focus-visible:ring-current bg-transparent ${i} cursor-pointer`;
332
332
  }
333
333
  function l() {
@@ -335,37 +335,37 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
335
335
  e || (t += " cursor-pointer");
336
336
  let i;
337
337
  switch (n.color) {
338
- case H.BLUE:
338
+ case V.BLUE:
339
339
  i = e ? "text-white bg-blue-400 cursor-not-allowed" : "focus:outline-none text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300";
340
340
  break;
341
- case H.WHITE:
341
+ case V.WHITE:
342
342
  i = e ? "text-gray-900 bg-gray-200 border border-gray-200 cursor-not-allowed" : "focus:outline-none text-gray-900 bg-white border border-gray-200 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-200";
343
343
  break;
344
- case H.DARK:
344
+ case V.DARK:
345
345
  i = e ? "text-white bg-gray-400 cursor-not-allowed" : "focus:outline-none text-white bg-gray-800 hover:bg-gray-900 focus:ring-4 focus:ring-gray-300";
346
346
  break;
347
- case H.GREEN:
347
+ case V.GREEN:
348
348
  i = e ? "text-white bg-green-400 cursor-not-allowed" : "focus:outline-none text-white bg-green-700 hover:bg-green-800 focus:ring-4 focus:ring-green-300";
349
349
  break;
350
- case H.EMERALD:
350
+ case V.EMERALD:
351
351
  i = e ? "text-white bg-emerald-400 cursor-not-allowed" : "focus:outline-none text-white bg-emerald-600 hover:bg-emerald-700 focus:ring-4 focus:ring-emerald-300";
352
352
  break;
353
- case H.RED:
353
+ case V.RED:
354
354
  i = e ? "text-white bg-red-400 cursor-not-allowed" : "focus:outline-none text-white bg-red-700 hover:bg-red-800 focus:ring-4 focus:ring-red-300";
355
355
  break;
356
- case H.YELLOW:
356
+ case V.YELLOW:
357
357
  i = e ? "text-white bg-yellow-300 cursor-not-allowed" : "focus:outline-none text-white bg-yellow-400 hover:bg-yellow-500 focus:ring-4 focus:ring-yellow-300";
358
358
  break;
359
- case H.PURPLE:
359
+ case V.PURPLE:
360
360
  i = e ? "text-white bg-purple-400 cursor-not-allowed" : "focus:outline-none text-white bg-purple-700 hover:bg-purple-800 focus:ring-4 focus:ring-purple-300";
361
361
  break;
362
- case H.SKY:
362
+ case V.SKY:
363
363
  i = e ? "text-white bg-sky-400 cursor-not-allowed" : "focus:outline-none text-white bg-sky-600 hover:bg-sky-700 focus:ring-4 focus:ring-sky-300";
364
364
  break;
365
- case H.AMBER:
365
+ case V.AMBER:
366
366
  i = e ? "text-white bg-amber-300 cursor-not-allowed" : "focus:outline-none text-white bg-amber-500 hover:bg-amber-600 focus:ring-4 focus:ring-amber-300";
367
367
  break;
368
- case H.GRAY:
368
+ case V.GRAY:
369
369
  i = e ? "text-white bg-gray-400 cursor-not-allowed" : "focus:outline-none text-white bg-gray-600 hover:bg-gray-700 focus:ring-4 focus:ring-gray-300";
370
370
  break;
371
371
  default:
@@ -375,19 +375,19 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
375
375
  n.outline && (i = r()), n.ghost && (i = c());
376
376
  let a = "px-5 py-2.5 mr-2 mb-2 text-sm";
377
377
  switch (n.size) {
378
- case U.EXTRA_SMALL:
378
+ case H.EXTRA_SMALL:
379
379
  a = "px-3 py-2 text-xs";
380
380
  break;
381
- case U.SMALL:
381
+ case H.SMALL:
382
382
  a = "px-3 py-2 text-sm";
383
383
  break;
384
- case U.BASE:
384
+ case H.BASE:
385
385
  a = "px-5 py-2.5 text-sm";
386
386
  break;
387
- case U.LARGE:
387
+ case H.LARGE:
388
388
  a = "px-5 py-3 text-base";
389
389
  break;
390
- case U.EXTRA_LARGE:
390
+ case H.EXTRA_LARGE:
391
391
  a = "px-6 py-3.5 text-base";
392
392
  break;
393
393
  }
@@ -395,19 +395,19 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
395
395
  return n.isRounded && (o = "rounded-full"), t + " " + a + " " + i + " font-medium " + o;
396
396
  }
397
397
  return (t, r) => {
398
- let c = C("router-link");
398
+ let c = w("router-link");
399
399
  return e.to ? (y(), i(c, {
400
400
  key: 0,
401
401
  to: e.to,
402
402
  custom: ""
403
403
  }, {
404
- default: M(({ navigate: i }) => [s("button", {
404
+ default: N(({ navigate: i }) => [s("button", {
405
405
  type: n.type,
406
406
  class: m(l()),
407
407
  disabled: e.isDisable || e.isLoading,
408
408
  onClick: i
409
409
  }, [
410
- e.isLoading ? (y(), o("div", Le, [...r[0] ||= [s("svg", {
410
+ e.isLoading ? (y(), o("div", ze, [...r[0] ||= [s("svg", {
411
411
  "aria-hidden": "true",
412
412
  role: "status",
413
413
  class: "inline w-4 h-4 me-3 animate-spin",
@@ -421,10 +421,10 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
421
421
  d: "M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z",
422
422
  fill: "currentColor"
423
423
  })], -1)]])) : a("", !0),
424
- e.iconLeft ? a("", !0) : (y(), o("span", Re, T(e.description), 1)),
425
- S(t.$slots, "default"),
426
- e.iconLeft ? (y(), o("span", ze, T(e.description), 1)) : a("", !0)
427
- ], 10, Ie)]),
424
+ e.iconLeft ? a("", !0) : (y(), o("span", Be, E(e.description), 1)),
425
+ C(t.$slots, "default"),
426
+ e.iconLeft ? (y(), o("span", Ve, E(e.description), 1)) : a("", !0)
427
+ ], 10, Re)]),
428
428
  _: 3
429
429
  }, 8, ["to"])) : (y(), o("button", {
430
430
  key: 1,
@@ -432,7 +432,7 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
432
432
  class: m(l()),
433
433
  disabled: e.isDisable || e.isLoading
434
434
  }, [
435
- e.isLoading ? (y(), o("div", Ve, [...r[1] ||= [s("svg", {
435
+ e.isLoading ? (y(), o("div", Ue, [...r[1] ||= [s("svg", {
436
436
  "aria-hidden": "true",
437
437
  role: "status",
438
438
  class: "inline w-4 h-4 me-3 animate-spin",
@@ -446,24 +446,24 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
446
446
  d: "M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z",
447
447
  fill: "currentColor"
448
448
  })], -1)]])) : a("", !0),
449
- e.iconLeft ? a("", !0) : (y(), o("span", He, T(e.description), 1)),
450
- S(t.$slots, "default"),
451
- e.iconLeft ? (y(), o("span", Ue, T(e.description), 1)) : a("", !0)
452
- ], 10, Be));
449
+ e.iconLeft ? a("", !0) : (y(), o("span", We, E(e.description), 1)),
450
+ C(t.$slots, "default"),
451
+ e.iconLeft ? (y(), o("span", Ge, E(e.description), 1)) : a("", !0)
452
+ ], 10, He));
453
453
  };
454
454
  }
455
455
  }), W = /* @__PURE__ */ function(e) {
456
456
  return e.BASE = "BASE", e.BASE_SHORTER = "BASE_SHORTER", e.SQUARE = "SQUARE", e;
457
- }({}), Ge = {
457
+ }({}), Ke = {
458
458
  key: 0,
459
459
  class: "h-px my-8 bg-gray-200 border-0 dark:bg-gray-700"
460
- }, Ke = {
460
+ }, qe = {
461
461
  key: 1,
462
462
  class: "w-48 h-1 mx-auto my-4 bg-gray-100 border-0 rounded md:my-10 dark:bg-gray-700"
463
- }, qe = {
463
+ }, Je = {
464
464
  key: 2,
465
465
  class: "w-8 h-8 mx-auto my-8 bg-gray-200 border-0 rounded md:my-12 dark:bg-gray-700"
466
- }, Je = /* @__PURE__ */ d({
466
+ }, Ye = /* @__PURE__ */ d({
467
467
  __name: "BaseLine",
468
468
  props: { mode: {
469
469
  type: String,
@@ -472,14 +472,14 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
472
472
  } },
473
473
  setup(t) {
474
474
  return (n, r) => (y(), o(e, null, [
475
- t.mode === E(W).BASE ? (y(), o("hr", Ge)) : a("", !0),
476
- t.mode === E(W).BASE_SHORTER ? (y(), o("hr", Ke)) : a("", !0),
477
- t.mode === E(W).SQUARE ? (y(), o("hr", qe)) : a("", !0)
475
+ t.mode === D(W).BASE ? (y(), o("hr", Ke)) : a("", !0),
476
+ t.mode === D(W).BASE_SHORTER ? (y(), o("hr", qe)) : a("", !0),
477
+ t.mode === D(W).SQUARE ? (y(), o("hr", Je)) : a("", !0)
478
478
  ], 64));
479
479
  }
480
480
  }), G = /* @__PURE__ */ function(e) {
481
481
  return e.SMALL = "SMALL", e.MEDIUM = "MEDIUM", e.LARGE = "LARGE", e;
482
- }({}), Ye = G, Xe = ["height", "width"], Ze = /* @__PURE__ */ d({
482
+ }({}), Xe = G, Ze = ["height", "width"], Qe = /* @__PURE__ */ d({
483
483
  __name: "BaseLogo",
484
484
  props: { size: {
485
485
  type: String,
@@ -504,12 +504,12 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
504
504
  return e;
505
505
  }
506
506
  return (e, t) => {
507
- let r = C("router-link");
507
+ let r = w("router-link");
508
508
  return y(), i(r, {
509
509
  to: "/",
510
510
  class: "flex items-center mb-6 text-2xl font-semibold text-gray-900 dark:text-white"
511
511
  }, {
512
- default: M(() => [(y(), o("svg", {
512
+ default: N(() => [(y(), o("svg", {
513
513
  height: n(),
514
514
  width: n(),
515
515
  viewBox: "33.6 130.6 499.7 242.9",
@@ -659,23 +659,23 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
659
659
  d: "m281.7 183.8h3.6v18.5h-3.6z",
660
660
  fill: "url(#k)"
661
661
  }, null, -1)
662
- ]], 8, Xe))]),
662
+ ]], 8, Ze))]),
663
663
  _: 1
664
664
  });
665
665
  };
666
666
  }
667
- }), Qe = /* @__PURE__ */ function(e) {
667
+ }), $e = /* @__PURE__ */ function(e) {
668
668
  return e.DELETE = "DELETE", e.SUCCESS = "SUCCESS", e;
669
- }({}), $e = {
669
+ }({}), et = {
670
670
  key: 0,
671
671
  class: "p-6 text-center"
672
- }, et = { class: "flex justify-center" }, tt = {
672
+ }, tt = { class: "flex justify-center" }, nt = {
673
673
  key: 1,
674
674
  class: "p-6 text-center"
675
- }, nt = {
675
+ }, rt = {
676
676
  key: 0,
677
677
  class: "mb-5 text-sm text-gray-500"
678
- }, rt = { class: "flex justify-center" }, it = /* @__PURE__ */ d({
678
+ }, it = { class: "flex justify-center" }, at = /* @__PURE__ */ d({
679
679
  __name: "BaseModal",
680
680
  props: {
681
681
  title: {
@@ -694,7 +694,7 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
694
694
  mode: {
695
695
  type: String,
696
696
  required: !1,
697
- default: Qe.SUCCESS
697
+ default: $e.SUCCESS
698
698
  }
699
699
  },
700
700
  emits: ["closeModal", "confirmModal"],
@@ -715,37 +715,37 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
715
715
  role: "dialog",
716
716
  "aria-modal": "true",
717
717
  "aria-labelledby": i
718
- }, [t.mode === E(Qe).DELETE ? (y(), o("div", $e, [
719
- u(E(pe), { class: "w-12 h-12 text-gray-400 mx-auto mb-4" }),
718
+ }, [t.mode === D($e).DELETE ? (y(), o("div", et, [
719
+ u(D(me), { class: "w-12 h-12 text-gray-400 mx-auto mb-4" }),
720
720
  s("h3", {
721
721
  id: i,
722
722
  class: "mb-5 text-lg font-normal text-gray-500 dark:text-gray-400"
723
- }, " Are you sure you want to delete this " + T(t.title) + "? ", 1),
724
- s("div", et, [u(We, {
725
- color: E(H).RED,
723
+ }, " Are you sure you want to delete this " + E(t.title) + "? ", 1),
724
+ s("div", tt, [u(U, {
725
+ color: D(V).RED,
726
726
  onClick: r[1] ||= (e) => n.$emit("confirmModal"),
727
727
  description: "Yes, I'm sure"
728
- }, null, 8, ["color"]), u(We, {
729
- color: E(H).WHITE,
728
+ }, null, 8, ["color"]), u(U, {
729
+ color: D(V).WHITE,
730
730
  onClick: r[2] ||= (e) => n.$emit("closeModal"),
731
731
  description: "No, cancel"
732
732
  }, null, 8, ["color"])])
733
- ])) : (y(), o("div", tt, [
734
- u(E(ae), { class: "w-12 h-12 text-green-500 mx-auto mb-4" }),
733
+ ])) : (y(), o("div", nt, [
734
+ u(D(oe), { class: "w-12 h-12 text-green-500 mx-auto mb-4" }),
735
735
  s("h3", {
736
736
  id: i,
737
737
  class: "mb-2 text-lg font-medium text-gray-900"
738
- }, T(t.title), 1),
739
- t.description ? (y(), o("p", nt, T(t.description), 1)) : a("", !0),
740
- S(n.$slots, "default"),
741
- s("div", rt, [u(We, {
742
- color: E(H).BLUE,
738
+ }, E(t.title), 1),
739
+ t.description ? (y(), o("p", rt, E(t.description), 1)) : a("", !0),
740
+ C(n.$slots, "default"),
741
+ s("div", it, [u(U, {
742
+ color: D(V).BLUE,
743
743
  onClick: r[3] ||= (e) => n.$emit("closeModal"),
744
744
  description: "OK"
745
745
  }, null, 8, ["color"])])
746
746
  ]))])], 64));
747
747
  }
748
- }), at = /* @__PURE__ */ d({
748
+ }), ot = /* @__PURE__ */ d({
749
749
  __name: "BaseRow",
750
750
  props: { bgColor: {
751
751
  type: String,
@@ -757,9 +757,9 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
757
757
  function n() {
758
758
  return "block p-8 border border-gray-200 rounded-xl shadow-sm dark:bg-gray-800 dark:border-gray-700 " + t.bgColor;
759
759
  }
760
- return (e, t) => (y(), o("div", { class: m(n()) }, [S(e.$slots, "default")], 2));
760
+ return (e, t) => (y(), o("div", { class: m(n()) }, [C(e.$slots, "default")], 2));
761
761
  }
762
- }), ot = /* @__PURE__ */ d({
762
+ }), st = /* @__PURE__ */ d({
763
763
  __name: "BaseSpinner",
764
764
  props: {
765
765
  size: { default: "sm" },
@@ -791,7 +791,7 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
791
791
  return e.SUCCESS = "SUCCESS", e.WARNING = "WARNING", e.ERROR = "ERROR", e;
792
792
  }({}), q = /* @__PURE__ */ function(e) {
793
793
  return e.TOP_LEFT = "TOP_LEFT", e.TOP_RIGHT = "TOP_RIGHT", e.BOTTOM_LEFT = "BOTTOM_LEFT", e.BOTTOM_RIGHT = "BOTTOM_RIGHT", e;
794
- }({}), st = { class: "flex items-center w-full max-w-md p-4 mb-4 text-gray-500 bg-white rounded-lg shadow dark:text-gray-400 dark:bg-gray-800" }, ct = { class: "ml-3 text-sm font-normal" }, lt = /* @__PURE__ */ d({
794
+ }({}), ct = { class: "flex items-center w-full max-w-md p-4 mb-4 text-gray-500 bg-white rounded-lg shadow dark:text-gray-400 dark:bg-gray-800" }, lt = { class: "ml-3 text-sm font-normal" }, ut = /* @__PURE__ */ d({
795
795
  __name: "BaseToast",
796
796
  props: {
797
797
  mode: {
@@ -819,7 +819,7 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
819
819
  }
820
820
  },
821
821
  setup(e) {
822
- let t = e, n = b(!0), r = null;
822
+ let t = e, n = x(!0), r = null;
823
823
  function i() {
824
824
  n.value = !1, r &&= (clearTimeout(r), null);
825
825
  }
@@ -869,28 +869,28 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
869
869
  id: "toast-top-right",
870
870
  class: m(l()),
871
871
  role: "alert"
872
- }, [s("div", st, [
873
- e.mode == E(K).ERROR ? (y(), o("div", {
872
+ }, [s("div", ct, [
873
+ e.mode == D(K).ERROR ? (y(), o("div", {
874
874
  key: 0,
875
875
  class: m(c())
876
- }, [u(E(pe), { class: "h-6 w-6 text-red-500" }), r[0] ||= s("span", { class: "sr-only" }, "Error icon", -1)], 2)) : e.mode == E(K).SUCCESS ? (y(), o("div", {
876
+ }, [u(D(me), { class: "h-6 w-6 text-red-500" }), r[0] ||= s("span", { class: "sr-only" }, "Error icon", -1)], 2)) : e.mode == D(K).SUCCESS ? (y(), o("div", {
877
877
  key: 1,
878
878
  class: m(c())
879
- }, [u(E(ae), { class: "h-6 w-6 text-green-500" }), r[1] ||= s("span", { class: "sr-only" }, "Check icon", -1)], 2)) : e.mode == E(K).WARNING ? (y(), o("div", {
879
+ }, [u(D(oe), { class: "h-6 w-6 text-green-500" }), r[1] ||= s("span", { class: "sr-only" }, "Check icon", -1)], 2)) : e.mode == D(K).WARNING ? (y(), o("div", {
880
880
  key: 2,
881
881
  class: m(c())
882
- }, [u(E(I), { class: "h-6 w-6 text-yellow-500" }), r[2] ||= s("span", { class: "sr-only" }, "Warning icon", -1)], 2)) : a("", !0),
883
- s("div", ct, T(e.description), 1),
882
+ }, [u(D(he), { class: "h-6 w-6 text-yellow-500" }), r[2] ||= s("span", { class: "sr-only" }, "Warning icon", -1)], 2)) : a("", !0),
883
+ s("div", lt, E(e.description), 1),
884
884
  e.hasCloseIcon ? (y(), o("button", {
885
885
  key: 3,
886
886
  type: "button",
887
887
  class: "ml-auto -mx-1.5 -my-1.5 bg-white text-gray-400 hover:text-gray-900 rounded-lg focus:ring-2 focus:ring-gray-300 p-1.5 hover:bg-gray-100 inline-flex items-center justify-center h-8 w-8 dark:text-gray-500 dark:hover:text-white dark:bg-gray-800 dark:hover:bg-gray-700 cursor-pointer",
888
888
  "aria-label": "Close",
889
889
  onClick: i
890
- }, [r[3] ||= s("span", { class: "sr-only" }, "Close", -1), u(E(be), { class: "h-6 w-6 text-gray-500" })])) : a("", !0)
890
+ }, [r[3] ||= s("span", { class: "sr-only" }, "Close", -1), u(D(Se), { class: "h-6 w-6 text-gray-500" })])) : a("", !0)
891
891
  ])], 2)) : a("", !0);
892
892
  }
893
- }), ut = { class: "w-13" }, dt = /* @__PURE__ */ d({
893
+ }), dt = { class: "w-13" }, ft = /* @__PURE__ */ d({
894
894
  __name: "ColoredSquares",
895
895
  props: { color: {
896
896
  type: String,
@@ -907,29 +907,29 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
907
907
  "bg-yellow-300",
908
908
  "bg-purple-300",
909
909
  "bg-pink-300"
910
- ], r = b(n[Math.floor(Math.random() * n.length)]);
910
+ ], r = x(n[Math.floor(Math.random() * n.length)]);
911
911
  function i() {
912
912
  let e = "gray";
913
913
  switch (t.color) {
914
- case V.GREEN:
914
+ case B.GREEN:
915
915
  e = "green";
916
916
  break;
917
- case V.RED:
917
+ case B.RED:
918
918
  e = "red";
919
919
  break;
920
- case V.BLUE:
920
+ case B.BLUE:
921
921
  e = "blue";
922
922
  break;
923
- case V.YELLOW:
923
+ case B.YELLOW:
924
924
  e = "yellow";
925
925
  break;
926
- case V.NONE: return "font-bold text-xs mr-2 px-2.5 py-0.5 rounded-full";
926
+ case B.NONE: return "font-bold text-xs mr-2 px-2.5 py-0.5 rounded-full";
927
927
  }
928
928
  return "font-bold text-xs mr-2 px-2.5 py-0.5 rounded-full bg-" + e + "-100 text-" + e + "-800";
929
929
  }
930
- return (e, t) => (y(), o("div", ut, [s("div", { class: m(["border border-gray-300 relative aspect-square rounded-lg bg-white shadow-sm overflow-hidden flex items-center justify-center text-center", i()]) }, [S(e.$slots, "default"), s("div", { class: m(["absolute bottom-0 left-0 h-1 w-full", r.value]) }, null, 2)], 2)]));
930
+ return (e, t) => (y(), o("div", dt, [s("div", { class: m(["border border-gray-300 relative aspect-square rounded-lg bg-white shadow-sm overflow-hidden flex items-center justify-center text-center", i()]) }, [C(e.$slots, "default"), s("div", { class: m(["absolute bottom-0 left-0 h-1 w-full", r.value]) }, null, 2)], 2)]));
931
931
  }
932
- }), ft = { class: "flex items-start justify-between" }, pt = { class: "min-w-0" }, mt = /* @__PURE__ */ d({
932
+ }), pt = { class: "flex items-start justify-between" }, mt = { class: "min-w-0" }, ht = /* @__PURE__ */ d({
933
933
  __name: "EarningsCard",
934
934
  props: {
935
935
  title: { default: "TOTAL EARNINGS" },
@@ -984,10 +984,10 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
984
984
  return (n, r) => (y(), o("div", { class: m(["relative rounded-xl border-2 border-dashed bg-white dark:bg-slate-800", [d.value.border, t.compact ? "p-3" : "p-6"]]) }, [t.badge ? (y(), o("div", {
985
985
  key: 0,
986
986
  class: m(["absolute right-4 top-4 rounded-md px-3 py-1 text-xs font-bold tracking-wide", d.value.badge])
987
- }, T(t.badge), 3)) : a("", !0), s("div", ft, [s("div", pt, [
988
- s("p", { class: m(["font-bold tracking-wide text-gray-800 dark:text-slate-200", t.compact ? "pr-8 text-xs" : "text-sm"]) }, T(t.title), 3),
989
- s("p", { class: m(["mt-1 font-bold truncate", [d.value.amount, t.compact ? "text-lg" : "text-4xl"]]) }, T(f.value), 3),
990
- s("p", { class: m(["mt-1 font-medium", [d.value.subtitle, t.compact ? "text-xs" : "text-sm"]]) }, T(t.subtitle), 3)
987
+ }, E(t.badge), 3)) : a("", !0), s("div", pt, [s("div", mt, [
988
+ s("p", { class: m(["font-bold tracking-wide text-gray-800 dark:text-slate-200", t.compact ? "pr-8 text-xs" : "text-sm"]) }, E(t.title), 3),
989
+ s("p", { class: m(["mt-1 font-bold truncate", [d.value.amount, t.compact ? "text-lg" : "text-4xl"]]) }, E(f.value), 3),
990
+ s("p", { class: m(["mt-1 font-medium", [d.value.subtitle, t.compact ? "text-xs" : "text-sm"]]) }, E(t.subtitle), 3)
991
991
  ]), s("div", { class: m(["flex items-center justify-center", [d.value.iconBox, t.compact ? "absolute right-2 top-2 h-6 w-6 rounded-lg" : "mt-6 h-12 w-12 rounded-xl"]]) }, [(y(), o("svg", {
992
992
  class: m([d.value.icon, t.compact ? "h-3.5 w-3.5" : "h-6 w-6"]),
993
993
  viewBox: "0 0 24 24",
@@ -998,10 +998,10 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
998
998
  "stroke-linejoin": "round"
999
999
  }, [l.value ? (y(), o(e, { key: 0 }, [r[0] ||= s("polyline", { points: "22 17 13.5 8.5 8.5 13.5 2 7" }, null, -1), r[1] ||= s("polyline", { points: "16 17 22 17 22 11" }, null, -1)], 64)) : (y(), o(e, { key: 1 }, [r[2] ||= s("polyline", { points: "22 7 13.5 15.5 8.5 10.5 2 17" }, null, -1), r[3] ||= s("polyline", { points: "16 7 22 7 22 13" }, null, -1)], 64))], 2))], 2)])], 2));
1000
1000
  }
1001
- }), ht = {
1001
+ }), gt = {
1002
1002
  key: 0,
1003
1003
  class: "font-bold text-green-800 dark:text-green-400"
1004
- }, gt = { key: 0 }, _t = { key: 0 }, vt = "font-bold", yt = /* @__PURE__ */ d({
1004
+ }, _t = { key: 0 }, vt = { key: 0 }, yt = "font-bold", bt = /* @__PURE__ */ d({
1005
1005
  __name: "EuroAmount",
1006
1006
  props: {
1007
1007
  amount: {
@@ -1021,20 +1021,20 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
1021
1021
  },
1022
1022
  setup(t) {
1023
1023
  let n = t, i = r(() => n.amount !== null && n.amount !== void 0), s = r(() => i.value && n.amount < 0), c = r(() => n.beforeAmount === null || n.beforeAmount === void 0 ? !1 : n.amount < n.beforeAmount), u = r(() => s.value || c.value), d = r(() => !s.value && !c.value && !(n.beforeAmount === null || n.beforeAmount === void 0));
1024
- return (n, r) => (y(), o(e, null, [i.value && d.value ? (y(), o("span", ht, [l(T(t.amount) + " ", 1), t.showCurrency ? (y(), o("span", gt, "€")) : a("", !0)])) : a("", !0), i.value && !d.value ? (y(), o("span", {
1024
+ return (n, r) => (y(), o(e, null, [i.value && d.value ? (y(), o("span", gt, [l(E(t.amount) + " ", 1), t.showCurrency ? (y(), o("span", _t, "€")) : a("", !0)])) : a("", !0), i.value && !d.value ? (y(), o("span", {
1025
1025
  key: 1,
1026
- class: m([vt, u.value ? "text-red-800 dark:text-red-400" : "text-gray-800 dark:text-gray-200"])
1027
- }, [l(T(t.amount) + " ", 1), t.showCurrency ? (y(), o("span", _t, "€")) : a("", !0)], 2)) : a("", !0)], 64));
1026
+ class: m([yt, u.value ? "text-red-800 dark:text-red-400" : "text-gray-800 dark:text-gray-200"])
1027
+ }, [l(E(t.amount) + " ", 1), t.showCurrency ? (y(), o("span", vt, "€")) : a("", !0)], 2)) : a("", !0)], 64));
1028
1028
  }
1029
- }), bt = { "aria-label": "Pagination" }, xt = { class: "flex list-none p-0 m-0" }, St = [
1029
+ }), xt = { "aria-label": "Pagination" }, St = { class: "flex list-none p-0 m-0" }, Ct = [
1030
1030
  "aria-current",
1031
1031
  "aria-label",
1032
1032
  "onClick"
1033
- ], Ct = {
1033
+ ], wt = {
1034
1034
  key: 1,
1035
1035
  "aria-hidden": "true",
1036
1036
  class: "inline-block border border-gray-300 dark:border-gray-600 rounded-lg p-3 text-black dark:text-gray-200 cursor-not-allowed"
1037
- }, wt = /* @__PURE__ */ d({
1037
+ }, Tt = /* @__PURE__ */ d({
1038
1038
  __name: "Pagination",
1039
1039
  props: {
1040
1040
  totalItems: {
@@ -1048,7 +1048,7 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
1048
1048
  },
1049
1049
  emits: ["page-changed"],
1050
1050
  setup(t, { emit: n }) {
1051
- let r = t, i = b(1), a = b(0), c = b([]), l = n;
1051
+ let r = t, i = x(1), a = x(0), c = x([]), l = n;
1052
1052
  function u(e) {
1053
1053
  if (a.value <= 5) {
1054
1054
  c.value = Array.from({ length: a.value }, (e, t) => t + 1);
@@ -1062,30 +1062,30 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
1062
1062
  function d(e) {
1063
1063
  e === i.value || e < 1 || e > a.value || (i.value = e, u(e), l("page-changed", e));
1064
1064
  }
1065
- return j(() => [r.totalItems, r.itemsPerPage], () => {
1065
+ return M(() => [r.totalItems, r.itemsPerPage], () => {
1066
1066
  a.value = Math.ceil(r.totalItems / r.itemsPerPage), i.value > a.value && (i.value = Math.max(1, a.value)), u(i.value);
1067
- }, { immediate: !0 }), (t, n) => (y(), o("nav", bt, [s("ul", xt, [(y(!0), o(e, null, x(c.value, (e, t) => (y(), o("li", {
1067
+ }, { immediate: !0 }), (t, n) => (y(), o("nav", xt, [s("ul", St, [(y(!0), o(e, null, S(c.value, (e, t) => (y(), o("li", {
1068
1068
  key: t,
1069
1069
  class: "mr-1"
1070
- }, [e === 0 ? (y(), o("span", Ct, "...")) : (y(), o("button", {
1070
+ }, [e === 0 ? (y(), o("span", wt, "...")) : (y(), o("button", {
1071
1071
  key: 0,
1072
1072
  type: "button",
1073
1073
  "aria-current": e === i.value ? "page" : void 0,
1074
1074
  "aria-label": `Go to page ${e}`,
1075
1075
  onClick: (t) => d(e),
1076
1076
  class: m(["inline-block min-w-[44px] border border-gray-300 dark:border-gray-600 rounded-lg p-3 text-black dark:text-gray-200 cursor-pointer transition-colors hover:bg-gray-300 dark:hover:bg-gray-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", { "active font-bold bg-gray-200 dark:bg-gray-700": e === i.value }])
1077
- }, T(e), 11, St))]))), 128))])]));
1077
+ }, E(e), 11, Ct))]))), 128))])]));
1078
1078
  }
1079
- }), Tt = { key: 0 }, Et = {
1079
+ }), Et = { key: 0 }, Dt = {
1080
1080
  key: 0,
1081
1081
  class: "flex items-center space-x-2"
1082
- }, Dt = {
1082
+ }, Ot = {
1083
1083
  key: 1,
1084
1084
  class: "flex items-center space-x-2"
1085
- }, Ot = {
1085
+ }, kt = {
1086
1086
  key: 2,
1087
1087
  class: "flex items-center space-x-2"
1088
- }, kt = /* @__PURE__ */ d({
1088
+ }, At = /* @__PURE__ */ d({
1089
1089
  __name: "TrendArrow",
1090
1090
  props: {
1091
1091
  number: {
@@ -1099,22 +1099,22 @@ var De = { class: "min-w-0 flex-1" }, Oe = {
1099
1099
  },
1100
1100
  setup(e) {
1101
1101
  let t = e, n = r(() => t.number !== null && t.number !== void 0 && t.number < 0), i = r(() => t.number === 0);
1102
- return (r, s) => e.number !== null && e.number !== void 0 ? (y(), o("div", Tt, [n.value ? (y(), o("span", Et, [u(je, { color: E(V).RED }, {
1103
- default: M(() => [l(T(e.number) + T(t.icon), 1)]),
1102
+ return (r, s) => e.number !== null && e.number !== void 0 ? (y(), o("div", Et, [n.value ? (y(), o("span", Dt, [u(Ne, { color: D(B).RED }, {
1103
+ default: N(() => [l(E(e.number) + E(t.icon), 1)]),
1104
1104
  _: 1
1105
- }, 8, ["color"]), u(E(te), { class: "h-5 w-5 text-red-500" })])) : i.value ? (y(), o("span", Dt, [u(je, { color: E(V).GRAY }, {
1106
- default: M(() => [l(T(e.number) + T(t.icon), 1)]),
1105
+ }, 8, ["color"]), u(D(ne), { class: "h-5 w-5 text-red-500" })])) : i.value ? (y(), o("span", Ot, [u(Ne, { color: D(B).GRAY }, {
1106
+ default: N(() => [l(E(e.number) + E(t.icon), 1)]),
1107
1107
  _: 1
1108
- }, 8, ["color"]), u(E(_e), { class: "h-5 w-5 text-gray-400" })])) : (y(), o("span", Ot, [u(je, { color: E(V).GREEN }, {
1109
- default: M(() => [l(T(e.number) + T(t.icon), 1)]),
1108
+ }, 8, ["color"]), u(D(ye), { class: "h-5 w-5 text-gray-400" })])) : (y(), o("span", kt, [u(Ne, { color: D(B).GREEN }, {
1109
+ default: N(() => [l(E(e.number) + E(t.icon), 1)]),
1110
1110
  _: 1
1111
- }, 8, ["color"]), u(E(ne), { class: "h-5 w-5 text-green-500" })]))])) : a("", !0);
1111
+ }, 8, ["color"]), u(D(re), { class: "h-5 w-5 text-green-500" })]))])) : a("", !0);
1112
1112
  }
1113
1113
  });
1114
1114
  //#endregion
1115
1115
  //#region src/composables/useThemeClasses.ts
1116
1116
  function J() {
1117
- let { isDark: e } = B();
1117
+ let { isDark: e } = z();
1118
1118
  return {
1119
1119
  card: r(() => e.value ? "bg-gray-800 border-gray-700" : "bg-white border-gray-200"),
1120
1120
  cardAlt: r(() => e.value ? "bg-gray-900 border-gray-700" : "bg-white border-gray-200"),
@@ -1149,7 +1149,7 @@ function Y(e) {
1149
1149
  }
1150
1150
  //#endregion
1151
1151
  //#region src/components/BaseModalShell.vue?vue&type=script&setup=true&lang.ts
1152
- var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-w-0" }, Mt = { class: "p-6 overflow-y-auto flex-1" }, Nt = { class: "p-6" }, Pt = { class: "flex items-start gap-4" }, Ft = { class: "flex-1" }, It = { class: "mt-4" }, Lt = { class: "mt-6 flex gap-3 justify-end" }, Rt = /* @__PURE__ */ d({
1152
+ var jt = { class: "flex items-start gap-4 min-w-0" }, Mt = { class: "flex-1 min-w-0" }, Nt = { class: "p-6 overflow-y-auto flex-1" }, Pt = { class: "p-6" }, Ft = { class: "flex items-start gap-4" }, It = { class: "flex-1" }, Lt = { class: "mt-4" }, Rt = { class: "mt-6 flex gap-3 justify-end" }, zt = /* @__PURE__ */ d({
1153
1153
  __name: "BaseModalShell",
1154
1154
  props: {
1155
1155
  title: {},
@@ -1166,7 +1166,7 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1166
1166
  },
1167
1167
  emits: ["cancel", "backdrop"],
1168
1168
  setup(e, { emit: n }) {
1169
- let c = e, l = n, { isDark: u } = B(), d = J(), f = `modal-title-${Math.random().toString(36).slice(2, 9)}`, p = r(() => u.value ? "bg-gray-900 border border-gray-700" : "bg-white border border-gray-200");
1169
+ let c = e, l = n, { isDark: u } = z(), d = J(), f = `modal-title-${Math.random().toString(36).slice(2, 9)}`, p = r(() => u.value ? "bg-gray-900 border border-gray-700" : "bg-white border border-gray-200");
1170
1170
  function h() {
1171
1171
  l("backdrop"), c.manualClose || l("cancel");
1172
1172
  }
@@ -1183,32 +1183,32 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1183
1183
  class: m(["relative w-full mx-4 rounded-lg shadow-xl max-h-[90vh] flex flex-col", [e.maxWidthClass, p.value]]),
1184
1184
  onClick: r[0] ||= F(() => {}, ["stop"])
1185
1185
  }, [
1186
- s("div", { class: m(["flex items-start justify-between gap-4 p-6 border-b shrink-0", E(d).border]) }, [s("div", At, [S(n.$slots, "icon"), s("div", jt, [s("h3", {
1186
+ s("div", { class: m(["flex items-start justify-between gap-4 p-6 border-b shrink-0", D(d).border]) }, [s("div", jt, [C(n.$slots, "icon"), s("div", Mt, [s("h3", {
1187
1187
  id: f,
1188
- class: m(["text-lg font-medium", E(d).primaryText])
1189
- }, T(e.title), 3), e.subtitle ? (y(), o("p", {
1188
+ class: m(["text-lg font-medium", D(d).primaryText])
1189
+ }, E(e.title), 3), e.subtitle ? (y(), o("p", {
1190
1190
  key: 0,
1191
- class: m(["text-sm mt-1 break-all", E(d).mutedText])
1192
- }, T(e.subtitle), 3)) : a("", !0)])]), S(n.$slots, "header-actions")], 2),
1193
- s("div", Mt, [S(n.$slots, "default")]),
1191
+ class: m(["text-sm mt-1 break-all", D(d).mutedText])
1192
+ }, E(e.subtitle), 3)) : a("", !0)])]), C(n.$slots, "header-actions")], 2),
1193
+ s("div", Nt, [C(n.$slots, "default")]),
1194
1194
  n.$slots.footer ? (y(), o("div", {
1195
1195
  key: 0,
1196
- class: m(["flex gap-3 justify-end p-6 border-t shrink-0", E(d).border])
1197
- }, [S(n.$slots, "footer")], 2)) : a("", !0)
1196
+ class: m(["flex gap-3 justify-end p-6 border-t shrink-0", D(d).border])
1197
+ }, [C(n.$slots, "footer")], 2)) : a("", !0)
1198
1198
  ], 2)) : (y(), o("div", {
1199
1199
  key: 1,
1200
1200
  class: m(["relative w-full mx-4 rounded-lg shadow-xl", [e.maxWidthClass, p.value]]),
1201
1201
  onClick: r[1] ||= F(() => {}, ["stop"])
1202
- }, [s("div", Nt, [
1203
- s("div", Pt, [S(n.$slots, "icon"), s("div", Ft, [s("h3", {
1202
+ }, [s("div", Pt, [
1203
+ s("div", Ft, [C(n.$slots, "icon"), s("div", It, [s("h3", {
1204
1204
  id: f,
1205
- class: m(["text-lg font-medium", E(d).primaryText])
1206
- }, T(e.title), 3)])]),
1207
- s("div", It, [S(n.$slots, "default")]),
1208
- s("div", Lt, [S(n.$slots, "footer")])
1205
+ class: m(["text-lg font-medium", D(d).primaryText])
1206
+ }, E(e.title), 3)])]),
1207
+ s("div", Lt, [C(n.$slots, "default")]),
1208
+ s("div", Rt, [C(n.$slots, "footer")])
1209
1209
  ])], 2))])]));
1210
1210
  }
1211
- }), zt = ["aria-expanded"], Bt = { class: "flex items-center gap-3" }, Vt = /* @__PURE__ */ d({
1211
+ }), Bt = ["aria-expanded"], Vt = { class: "flex items-center gap-3" }, Ht = /* @__PURE__ */ d({
1212
1212
  __name: "BaseCollapsibleSection",
1213
1213
  props: {
1214
1214
  title: {},
@@ -1218,17 +1218,17 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1218
1218
  },
1219
1219
  emits: ["toggle"],
1220
1220
  setup(e, { emit: t }) {
1221
- let n = e, i = t, { isDark: c } = B(), l = J(), u = r(() => c.value ? "text-gray-100" : "text-gray-700"), d = r(() => c.value ? "bg-gray-800/50 hover:bg-gray-800 border-gray-700" : "bg-gray-50 hover:bg-gray-100 border-gray-200"), f = r(() => c.value ? "bg-emerald-500/15 text-emerald-400" : "bg-emerald-50 text-emerald-700"), p = r(() => n.bodyClass === void 0 ? c.value ? "bg-gray-800" : "bg-white" : n.bodyClass);
1222
- return (t, n) => (y(), o("section", { class: m(["rounded-xl border transition-colors", E(l).cardAlt]) }, [s("button", {
1221
+ let n = e, i = t, { isDark: c } = z(), l = J(), u = r(() => c.value ? "text-gray-100" : "text-gray-700"), d = r(() => c.value ? "bg-gray-800/50 hover:bg-gray-800 border-gray-700" : "bg-gray-50 hover:bg-gray-100 border-gray-200"), f = r(() => c.value ? "bg-emerald-500/15 text-emerald-400" : "bg-emerald-50 text-emerald-700"), p = r(() => n.bodyClass === void 0 ? c.value ? "bg-gray-800" : "bg-white" : n.bodyClass);
1222
+ return (t, n) => (y(), o("section", { class: m(["rounded-xl border transition-colors", D(l).cardAlt]) }, [s("button", {
1223
1223
  type: "button",
1224
1224
  class: m(["w-full flex items-center justify-between p-4 text-left transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500", [d.value, e.collapsed ? "rounded-xl" : "rounded-t-xl"]]),
1225
1225
  "aria-expanded": !e.collapsed,
1226
1226
  onClick: n[0] ||= (e) => i("toggle")
1227
- }, [s("div", Bt, [s("h2", { class: m(["text-base font-semibold", u.value]) }, T(e.title), 3), e.badge ? (y(), o("span", {
1227
+ }, [s("div", Vt, [s("h2", { class: m(["text-base font-semibold", u.value]) }, E(e.title), 3), e.badge ? (y(), o("span", {
1228
1228
  key: 0,
1229
1229
  class: m(["text-xs px-2 py-0.5 rounded-full", f.value])
1230
- }, T(e.badge), 3)) : a("", !0)]), (y(), o("svg", {
1231
- class: m(["w-5 h-5 transition-transform", [e.collapsed ? "" : "rotate-180", E(l).dimTextAlt]]),
1230
+ }, E(e.badge), 3)) : a("", !0)]), (y(), o("svg", {
1231
+ class: m(["w-5 h-5 transition-transform", [e.collapsed ? "" : "rotate-180", D(l).dimTextAlt]]),
1232
1232
  fill: "none",
1233
1233
  viewBox: "0 0 24 24",
1234
1234
  stroke: "currentColor",
@@ -1238,15 +1238,15 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1238
1238
  "stroke-linecap": "round",
1239
1239
  "stroke-linejoin": "round",
1240
1240
  d: "M19 9l-7 7-7-7"
1241
- }, null, -1)]], 2))], 10, zt), N(s("div", { class: m(["p-6 border-t rounded-b-xl", [E(l).border, p.value]]) }, [S(t.$slots, "default")], 2), [[ee, !e.collapsed]])], 2));
1241
+ }, null, -1)]], 2))], 10, Bt), P(s("div", { class: m(["p-6 border-t rounded-b-xl", [D(l).border, p.value]]) }, [C(t.$slots, "default")], 2), [[j, !e.collapsed]])], 2));
1242
1242
  }
1243
- }), Ht = ["disabled"], Ut = ["disabled"], Wt = {
1243
+ }), Ut = ["disabled"], Wt = ["disabled"], Gt = {
1244
1244
  key: 0,
1245
1245
  class: "w-4 h-4 animate-spin",
1246
1246
  fill: "none",
1247
1247
  viewBox: "0 0 24 24",
1248
1248
  "aria-hidden": "true"
1249
- }, Gt = /* @__PURE__ */ d({
1249
+ }, Kt = /* @__PURE__ */ d({
1250
1250
  __name: "BaseConfirmModal",
1251
1251
  props: {
1252
1252
  title: {},
@@ -1262,33 +1262,33 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1262
1262
  },
1263
1263
  emits: ["confirm", "cancel"],
1264
1264
  setup(e, { emit: t }) {
1265
- let n = e, r = t, { isDark: c } = B(), d = J();
1265
+ let n = e, r = t, { isDark: c } = z(), d = J();
1266
1266
  function f() {
1267
1267
  n.submitting || r("confirm");
1268
1268
  }
1269
1269
  function p() {
1270
1270
  n.submitting || r("cancel");
1271
1271
  }
1272
- return (t, n) => (y(), i(Rt, {
1272
+ return (t, n) => (y(), i(zt, {
1273
1273
  title: e.title,
1274
1274
  "manual-close": e.submitting,
1275
1275
  onCancel: p
1276
1276
  }, {
1277
- icon: M(() => [s("div", { class: m(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", [e.variant === "danger" ? E(c) ? "bg-red-900/30" : "bg-red-50" : E(c) ? "bg-amber-900/30" : "bg-amber-50"]]) }, [u(E(I), {
1277
+ icon: N(() => [s("div", { class: m(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", [e.variant === "danger" ? D(c) ? "bg-red-900/30" : "bg-red-50" : D(c) ? "bg-amber-900/30" : "bg-amber-50"]]) }, [u(D(he), {
1278
1278
  class: m(["h-6 w-6", e.variant === "danger" ? "text-red-600" : "text-amber-600"]),
1279
1279
  "aria-hidden": "true"
1280
1280
  }, null, 8, ["class"])], 2)]),
1281
- footer: M(() => [s("button", {
1281
+ footer: N(() => [s("button", {
1282
1282
  type: "button",
1283
1283
  disabled: e.submitting,
1284
- class: m(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [E(d).ghostButton, e.submitting ? "opacity-60 cursor-not-allowed" : "cursor-pointer"]]),
1284
+ class: m(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [D(d).ghostButton, e.submitting ? "opacity-60 cursor-not-allowed" : "cursor-pointer"]]),
1285
1285
  onClick: p
1286
- }, T(e.cancelText), 11, Ht), s("button", {
1286
+ }, E(e.cancelText), 11, Ut), s("button", {
1287
1287
  type: "button",
1288
1288
  disabled: e.submitting,
1289
1289
  class: m(["inline-flex items-center justify-center gap-2 px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2", [e.variant === "danger" ? "focus-visible:ring-red-500" : "focus-visible:ring-emerald-500", e.variant === "danger" ? e.submitting ? "bg-red-400 cursor-not-allowed" : "bg-red-600 hover:bg-red-700 cursor-pointer" : e.submitting ? "bg-emerald-400 cursor-not-allowed" : "bg-emerald-600 hover:bg-emerald-700 cursor-pointer"]]),
1290
1290
  onClick: f
1291
- }, [e.submitting ? (y(), o("svg", Wt, [...n[0] ||= [s("circle", {
1291
+ }, [e.submitting ? (y(), o("svg", Gt, [...n[0] ||= [s("circle", {
1292
1292
  class: "opacity-25",
1293
1293
  cx: "12",
1294
1294
  cy: "12",
@@ -1299,12 +1299,12 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1299
1299
  class: "opacity-75",
1300
1300
  fill: "currentColor",
1301
1301
  d: "M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z"
1302
- }, null, -1)]])) : a("", !0), l(" " + T(e.submitting ? e.submittingText : e.confirmText), 1)], 10, Ut)]),
1303
- default: M(() => [S(t.$slots, "message", {}, () => [s("p", { class: m(["text-sm", E(c) ? "text-gray-300" : "text-gray-600"]) }, T(e.message), 3)]), S(t.$slots, "default")]),
1302
+ }, null, -1)]])) : a("", !0), l(" " + E(e.submitting ? e.submittingText : e.confirmText), 1)], 10, Wt)]),
1303
+ default: N(() => [C(t.$slots, "message", {}, () => [s("p", { class: m(["text-sm", D(c) ? "text-gray-300" : "text-gray-600"]) }, E(e.message), 3)]), C(t.$slots, "default")]),
1304
1304
  _: 3
1305
1305
  }, 8, ["title", "manual-close"]));
1306
1306
  }
1307
- }), Kt = { class: "mt-4" }, qt = ["placeholder"], Jt = ["disabled"], Yt = /* @__PURE__ */ d({
1307
+ }), qt = { class: "mt-4" }, Jt = ["placeholder"], Yt = ["disabled"], Xt = /* @__PURE__ */ d({
1308
1308
  __name: "BaseTextInputModal",
1309
1309
  props: {
1310
1310
  title: {},
@@ -1322,7 +1322,7 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1322
1322
  },
1323
1323
  emits: ["confirm", "cancel"],
1324
1324
  setup(e, { emit: t }) {
1325
- let n = e, r = t, { isDark: a } = B(), o = J(), c = b(n.initialValue), l = b(null);
1325
+ let n = e, r = t, { isDark: a } = z(), o = J(), c = x(n.initialValue), l = x(null);
1326
1326
  g(async () => {
1327
1327
  await p(), l.value?.focus();
1328
1328
  });
@@ -1335,38 +1335,38 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1335
1335
  function h() {
1336
1336
  c.value.trim() === (n.initialValue ?? "").trim() && f();
1337
1337
  }
1338
- return Y(f), (t, n) => (y(), i(Rt, {
1338
+ return Y(f), (t, n) => (y(), i(zt, {
1339
1339
  title: e.title,
1340
1340
  "manual-close": "",
1341
1341
  onBackdrop: h
1342
1342
  }, {
1343
- icon: M(() => [S(t.$slots, "icon", {}, () => [s("div", { class: m(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", E(a) ? "bg-emerald-900/30" : "bg-emerald-50"]) }, [u(E(fe), {
1343
+ icon: N(() => [C(t.$slots, "icon", {}, () => [s("div", { class: m(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", D(a) ? "bg-emerald-900/30" : "bg-emerald-50"]) }, [u(D(pe), {
1344
1344
  class: "h-6 w-6 text-emerald-600",
1345
1345
  "aria-hidden": "true"
1346
1346
  })], 2)])]),
1347
- footer: M(() => [s("button", {
1347
+ footer: N(() => [s("button", {
1348
1348
  type: "button",
1349
- class: m(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", E(o).ghostButton]),
1349
+ class: m(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", D(o).ghostButton]),
1350
1350
  onClick: f
1351
- }, T(e.cancelText), 3), s("button", {
1351
+ }, E(e.cancelText), 3), s("button", {
1352
1352
  type: "button",
1353
1353
  disabled: !c.value.trim() || e.submitting,
1354
1354
  class: m(["inline-flex items-center justify-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2", [!c.value.trim() || e.submitting ? "bg-emerald-400 cursor-not-allowed" : "bg-emerald-600 hover:bg-emerald-700 cursor-pointer"]]),
1355
1355
  onClick: d
1356
- }, T(e.submitting ? e.submittingText : e.confirmText), 11, Jt)]),
1357
- default: M(() => [s("p", { class: m(["text-sm", E(a) ? "text-gray-300" : "text-gray-600"]) }, T(e.message), 3), s("div", Kt, [s("label", { class: m(["block text-sm font-medium mb-1", E(o).label]) }, T(e.inputLabel), 3), N(s("input", {
1356
+ }, E(e.submitting ? e.submittingText : e.confirmText), 11, Yt)]),
1357
+ default: N(() => [s("p", { class: m(["text-sm", D(a) ? "text-gray-300" : "text-gray-600"]) }, E(e.message), 3), s("div", qt, [s("label", { class: m(["block text-sm font-medium mb-1", D(o).label]) }, E(e.inputLabel), 3), P(s("input", {
1358
1358
  ref_key: "nameInput",
1359
1359
  ref: l,
1360
1360
  "onUpdate:modelValue": n[0] ||= (e) => c.value = e,
1361
1361
  type: "text",
1362
1362
  placeholder: e.placeholder,
1363
- class: m(["w-full px-3 py-2 rounded-md border text-sm transition-colors", E(a) ? "bg-gray-800 border-gray-600 text-gray-100 placeholder-gray-500 focus:outline-none focus:border-emerald-500" : "bg-white border-gray-300 text-gray-900 placeholder-gray-400 focus:outline-none focus:border-emerald-500"]),
1364
- onKeyup: P(d, ["enter"])
1365
- }, null, 42, qt), [[A, c.value]])])]),
1363
+ class: m(["w-full px-3 py-2 rounded-md border text-sm transition-colors", D(a) ? "bg-gray-800 border-gray-600 text-gray-100 placeholder-gray-500 focus:outline-none focus:border-emerald-500" : "bg-white border-gray-300 text-gray-900 placeholder-gray-400 focus:outline-none focus:border-emerald-500"]),
1364
+ onKeyup: te(d, ["enter"])
1365
+ }, null, 42, Jt), [[A, c.value]])])]),
1366
1366
  _: 3
1367
1367
  }, 8, ["title"]));
1368
1368
  }
1369
- }), Xt = { class: "flex items-center justify-center min-h-[60vh]" }, Zt = { class: "text-center px-6" }, Qt = /* @__PURE__ */ d({
1369
+ }), Zt = { class: "flex items-center justify-center min-h-[60vh]" }, Qt = { class: "text-center px-6" }, $t = /* @__PURE__ */ d({
1370
1370
  __name: "BaseNotFoundPage",
1371
1371
  props: {
1372
1372
  code: { default: "404" },
@@ -1375,22 +1375,22 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1375
1375
  homeLabel: { default: "Go home" }
1376
1376
  },
1377
1377
  setup(e) {
1378
- let t = e, n = Ce(), { isDark: r } = B(), i = J();
1378
+ let t = e, n = Te(), { isDark: r } = z(), i = J();
1379
1379
  function a() {
1380
1380
  n.push({ name: t.homeRouteName });
1381
1381
  }
1382
- return (t, n) => (y(), o("div", Xt, [s("div", Zt, [
1383
- u(E(I), { class: m(["w-16 h-16 mx-auto mb-4", E(i).illustration]) }, null, 8, ["class"]),
1384
- s("h1", { class: m(["text-4xl font-bold mb-2", E(r) ? "text-gray-200" : "text-gray-800"]) }, T(e.code), 3),
1385
- s("p", { class: m(["text-lg mb-6", E(i).dimTextAlt]) }, T(e.message), 3),
1382
+ return (t, n) => (y(), o("div", Zt, [s("div", Qt, [
1383
+ u(D(he), { class: m(["w-16 h-16 mx-auto mb-4", D(i).illustration]) }, null, 8, ["class"]),
1384
+ s("h1", { class: m(["text-4xl font-bold mb-2", D(r) ? "text-gray-200" : "text-gray-800"]) }, E(e.code), 3),
1385
+ s("p", { class: m(["text-lg mb-6", D(i).dimTextAlt]) }, E(e.message), 3),
1386
1386
  s("button", {
1387
1387
  onClick: a,
1388
- class: m(["inline-flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium text-white transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2", E(r) ? "bg-emerald-600 hover:bg-emerald-500" : "bg-emerald-600 hover:bg-emerald-700"])
1389
- }, T(e.homeLabel), 3)
1388
+ class: m(["inline-flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium text-white transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2", D(r) ? "bg-emerald-600 hover:bg-emerald-500" : "bg-emerald-600 hover:bg-emerald-700"])
1389
+ }, E(e.homeLabel), 3)
1390
1390
  ])]));
1391
1391
  }
1392
- }), X = b(!1);
1393
- function $t() {
1392
+ }), X = x(!1);
1393
+ function en() {
1394
1394
  function e() {
1395
1395
  X.value = !0;
1396
1396
  }
@@ -1409,19 +1409,19 @@ function $t() {
1409
1409
  }
1410
1410
  //#endregion
1411
1411
  //#region src/composables/useSidebarCollapse.ts
1412
- var Z = b(!1), en = !1, tn = "mgv-sidebar-collapsed";
1413
- function nn(e) {
1414
- if (!en && (en = !0, tn = e, typeof window < "u")) {
1415
- let e = window.localStorage?.getItem(tn);
1412
+ var Z = x(!1), tn = !1, nn = "mgv-sidebar-collapsed";
1413
+ function rn(e) {
1414
+ if (!tn && (tn = !0, nn = e, typeof window < "u")) {
1415
+ let e = window.localStorage?.getItem(nn);
1416
1416
  e && (Z.value = e === "true"), f(!0).run(() => {
1417
- j(Z, (e) => {
1418
- window.localStorage?.setItem(tn, String(e));
1417
+ M(Z, (e) => {
1418
+ window.localStorage?.setItem(nn, String(e));
1419
1419
  });
1420
1420
  });
1421
1421
  }
1422
1422
  }
1423
- function rn(e) {
1424
- nn(e?.storageKey ?? tn);
1423
+ function an(e) {
1424
+ rn(e?.storageKey ?? nn);
1425
1425
  function t() {
1426
1426
  Z.value = !0;
1427
1427
  }
@@ -1440,16 +1440,16 @@ function rn(e) {
1440
1440
  }
1441
1441
  //#endregion
1442
1442
  //#region src/composables/useNotifications.ts
1443
- var Q = b([]), $ = b(!1), an = r(() => Q.value.filter((e) => !e.read).length);
1444
- function on() {
1443
+ var Q = x([]), on = x(!1), sn = r(() => Q.value.filter((e) => !e.read).length);
1444
+ function cn() {
1445
1445
  function e() {
1446
- $.value = !0;
1446
+ on.value = !0;
1447
1447
  }
1448
1448
  function t() {
1449
- $.value = !1;
1449
+ on.value = !1;
1450
1450
  }
1451
1451
  function n() {
1452
- $.value = !$.value;
1452
+ on.value = !on.value;
1453
1453
  }
1454
1454
  function r(e) {
1455
1455
  Q.value = e;
@@ -1477,8 +1477,8 @@ function on() {
1477
1477
  }
1478
1478
  return {
1479
1479
  notifications: Q,
1480
- unreadCount: an,
1481
- open: $,
1480
+ unreadCount: sn,
1481
+ open: on,
1482
1482
  openPanel: e,
1483
1483
  closePanel: t,
1484
1484
  togglePanel: n,
@@ -1492,22 +1492,22 @@ function on() {
1492
1492
  }
1493
1493
  //#endregion
1494
1494
  //#region src/components/BaseSidebar.vue?vue&type=script&setup=true&lang.ts
1495
- var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }, ln = { class: "flex-1 overflow-y-auto px-3 space-y-6" }, un = { class: "space-y-0.5" }, dn = [
1495
+ var ln = ["aria-label", "aria-expanded"], un = { class: "flex flex-col h-full" }, dn = { class: "flex-1 overflow-y-auto px-3 space-y-6" }, fn = { class: "space-y-0.5" }, pn = [
1496
1496
  "aria-current",
1497
1497
  "title",
1498
1498
  "onClick"
1499
- ], fn = ["aria-label"], pn = { class: "relative shrink-0" }, mn = {
1499
+ ], mn = ["aria-label"], hn = { class: "relative shrink-0" }, gn = {
1500
1500
  key: 0,
1501
1501
  class: "absolute -top-1.5 -right-1.5 min-w-4 h-4 px-1 rounded-full bg-red-500 text-white text-[10px] font-semibold leading-4 text-center"
1502
- }, hn = [
1502
+ }, _n = [
1503
1503
  "title",
1504
1504
  "aria-label",
1505
1505
  "aria-pressed"
1506
- ], gn = [
1506
+ ], vn = [
1507
1507
  "title",
1508
1508
  "aria-label",
1509
1509
  "aria-pressed"
1510
- ], _n = /*#__PURE__*/ ((e, t) => {
1510
+ ], yn = /*#__PURE__*/ ((e, t) => {
1511
1511
  let n = e.__vccOpts || e;
1512
1512
  for (let [e, r] of t) n[e] = r;
1513
1513
  return n;
@@ -1532,9 +1532,9 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1532
1532
  }
1533
1533
  },
1534
1534
  setup(t) {
1535
- let n = t, c = Ce(), d = Se(), { isDark: f, toggleTheme: h } = B(), { mobileOpen: g, close: _, toggle: v } = $t(), { collapsed: C, toggle: D } = rn(), { unreadCount: O, togglePanel: k } = on(), A = r(() => n.collapsible && C.value), ee = b(null), M = null;
1536
- j(g, async (e) => {
1537
- e ? (M = document.activeElement instanceof HTMLElement ? document.activeElement : null, await p(), ee.value?.focus()) : (M?.focus(), M = null);
1535
+ let n = t, c = Te(), d = we(), { isDark: f, toggleTheme: h } = z(), { mobileOpen: g, close: _, toggle: v } = en(), { collapsed: b, toggle: w } = an(), { unreadCount: O, togglePanel: ee } = cn(), k = r(() => n.collapsible && b.value), A = x(null), j = null;
1536
+ M(g, async (e) => {
1537
+ e ? (j = document.activeElement instanceof HTMLElement ? document.activeElement : null, await p(), A.value?.focus()) : (j?.focus(), j = null);
1538
1538
  });
1539
1539
  function N() {
1540
1540
  c.push({ name: n.homeRouteName }), _();
@@ -1542,141 +1542,141 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1542
1542
  function P(e) {
1543
1543
  return d.name === e;
1544
1544
  }
1545
- function F(e) {
1545
+ function te(e) {
1546
1546
  c.push({ name: e }), _();
1547
1547
  }
1548
1548
  return (n, r) => (y(), o("div", null, [
1549
- s("div", { class: m(["mobile-topbar fixed top-0 inset-x-0 z-30 flex items-center justify-between px-4 py-3 border-b transition-colors", E(f) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200"]) }, [s("button", {
1549
+ s("div", { class: m(["mobile-topbar fixed top-0 inset-x-0 z-30 flex items-center justify-between px-4 py-3 border-b transition-colors", D(f) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200"]) }, [s("button", {
1550
1550
  type: "button",
1551
1551
  onClick: N,
1552
1552
  class: "cursor-pointer rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500",
1553
1553
  "aria-label": "Go to home"
1554
- }, [S(n.$slots, "logo", { size: 28 }, void 0, !0)]), s("button", {
1554
+ }, [C(n.$slots, "logo", { size: 28 }, void 0, !0)]), s("button", {
1555
1555
  type: "button",
1556
- onClick: r[0] ||= (...e) => E(v) && E(v)(...e),
1557
- class: m(["p-2 rounded-lg cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", E(f) ? "text-gray-400 hover:bg-gray-800" : "text-gray-600 hover:bg-gray-100"]),
1558
- "aria-label": E(g) ? "Close navigation menu" : "Open navigation menu",
1559
- "aria-expanded": E(g)
1560
- }, [E(g) ? (y(), i(E(be), {
1556
+ onClick: r[0] ||= (...e) => D(v) && D(v)(...e),
1557
+ class: m(["p-2 rounded-lg cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", D(f) ? "text-gray-400 hover:bg-gray-800" : "text-gray-600 hover:bg-gray-100"]),
1558
+ "aria-label": D(g) ? "Close navigation menu" : "Open navigation menu",
1559
+ "aria-expanded": D(g)
1560
+ }, [D(g) ? (y(), i(D(Se), {
1561
1561
  key: 1,
1562
1562
  class: "w-6 h-6",
1563
1563
  "aria-hidden": "true"
1564
- })) : (y(), i(E(re), {
1564
+ })) : (y(), i(D(ie), {
1565
1565
  key: 0,
1566
1566
  class: "w-6 h-6",
1567
1567
  "aria-hidden": "true"
1568
- }))], 10, sn)], 2),
1569
- E(g) ? (y(), o("div", {
1568
+ }))], 10, ln)], 2),
1569
+ D(g) ? (y(), o("div", {
1570
1570
  key: 0,
1571
1571
  class: "mobile-overlay fixed inset-0 z-40 bg-black/50",
1572
1572
  "aria-hidden": "true",
1573
- onClick: r[1] ||= (...e) => E(_) && E(_)(...e)
1573
+ onClick: r[1] ||= (...e) => D(_) && D(_)(...e)
1574
1574
  })) : a("", !0),
1575
1575
  s("aside", {
1576
1576
  role: "navigation",
1577
1577
  "aria-label": "Main navigation",
1578
1578
  class: m(["fixed top-0 left-0 h-screen w-60 flex flex-col border-r transition-all duration-300 lg:pointer-events-auto", [
1579
- E(f) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200",
1580
- E(g) ? "translate-x-0 z-50" : "-translate-x-full max-lg:pointer-events-none lg:translate-x-0 z-50",
1581
- t.collapsible && E(C) ? "lg:w-16" : "lg:w-60"
1579
+ D(f) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200",
1580
+ D(g) ? "translate-x-0 z-50" : "-translate-x-full max-lg:pointer-events-none lg:translate-x-0 z-50",
1581
+ t.collapsible && D(b) ? "lg:w-16" : "lg:w-60"
1582
1582
  ]])
1583
- }, [s("div", cn, [
1584
- s("div", { class: m(["px-5 pt-5 pb-4 flex items-center justify-center relative", { "lg:px-2": A.value }]) }, [s("button", {
1583
+ }, [s("div", un, [
1584
+ s("div", { class: m(["px-5 pt-5 pb-4 flex items-center justify-center relative", { "lg:px-2": k.value }]) }, [s("button", {
1585
1585
  type: "button",
1586
1586
  onClick: N,
1587
1587
  class: "cursor-pointer rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500",
1588
1588
  "aria-label": "Go to home"
1589
- }, [S(n.$slots, "logo", { size: A.value ? 36 : 52 }, void 0, !0)]), s("button", {
1589
+ }, [C(n.$slots, "logo", { size: k.value ? 36 : 52 }, void 0, !0)]), s("button", {
1590
1590
  ref_key: "closeMobileButton",
1591
- ref: ee,
1591
+ ref: A,
1592
1592
  type: "button",
1593
- onClick: r[2] ||= (...e) => E(_) && E(_)(...e),
1594
- class: m(["lg:hidden p-1.5 rounded-lg cursor-pointer absolute right-3 top-4 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", E(f) ? "text-gray-400 hover:bg-gray-800" : "text-gray-500 hover:bg-gray-100"]),
1593
+ onClick: r[2] ||= (...e) => D(_) && D(_)(...e),
1594
+ class: m(["lg:hidden p-1.5 rounded-lg cursor-pointer absolute right-3 top-4 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", D(f) ? "text-gray-400 hover:bg-gray-800" : "text-gray-500 hover:bg-gray-100"]),
1595
1595
  "aria-label": "Close navigation menu"
1596
- }, [u(E(be), {
1596
+ }, [u(D(Se), {
1597
1597
  class: "w-5 h-5",
1598
1598
  "aria-hidden": "true"
1599
1599
  })], 2)], 2),
1600
- s("nav", ln, [(y(!0), o(e, null, x(t.sections, (t) => (y(), o("div", { key: t.title }, [s("p", { class: m(["px-2 mb-2 text-[10px] font-semibold uppercase tracking-wider text-gray-500", { "lg:hidden": A.value }]) }, T(t.title), 3), s("ul", un, [(y(!0), o(e, null, x(t.items, (e) => (y(), o("li", { key: e.name }, [s("button", {
1600
+ s("nav", dn, [(y(!0), o(e, null, S(t.sections, (t) => (y(), o("div", { key: t.title }, [s("p", { class: m(["px-2 mb-2 text-[10px] font-semibold uppercase tracking-wider text-gray-500", { "lg:hidden": k.value }]) }, E(t.title), 3), s("ul", fn, [(y(!0), o(e, null, S(t.items, (e) => (y(), o("li", { key: e.name }, [s("button", {
1601
1601
  type: "button",
1602
1602
  "aria-current": P(e.name) ? "page" : void 0,
1603
- title: A.value ? e.label : void 0,
1604
- onClick: (t) => F(e.name),
1605
- class: m(["flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium transition-colors w-full text-left cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [P(e.name) ? E(f) ? "bg-emerald-500/15 text-emerald-300" : "bg-emerald-50 text-emerald-700" : E(f) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": A.value }]])
1606
- }, [(y(), i(w(e.icon), { class: "w-[18px] h-[18px] shrink-0" })), s("span", { class: m({ "lg:hidden": A.value }) }, T(e.label), 3)], 10, dn)]))), 128))])]))), 128))]),
1607
- s("div", { class: m(["px-4 py-4 border-t transition-colors space-y-3", E(f) ? "border-gray-800" : "border-gray-200"]) }, [
1603
+ title: k.value ? e.label : void 0,
1604
+ onClick: (t) => te(e.name),
1605
+ class: m(["flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium transition-colors w-full text-left cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [P(e.name) ? D(f) ? "bg-emerald-500/15 text-emerald-300" : "bg-emerald-50 text-emerald-700" : D(f) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": k.value }]])
1606
+ }, [(y(), i(T(e.icon), { class: "w-[18px] h-[18px] shrink-0" })), s("span", { class: m({ "lg:hidden": k.value }) }, E(e.label), 3)], 10, pn)]))), 128))])]))), 128))]),
1607
+ s("div", { class: m(["px-4 py-4 border-t transition-colors space-y-3", D(f) ? "border-gray-800" : "border-gray-200"]) }, [
1608
1608
  t.showNotifications ? (y(), o("button", {
1609
1609
  key: 0,
1610
1610
  type: "button",
1611
- onClick: r[3] ||= (...e) => E(k) && E(k)(...e),
1611
+ onClick: r[3] ||= (...e) => D(ee) && D(ee)(...e),
1612
1612
  title: "Notifications",
1613
- "aria-label": E(O) > 0 ? `Notifications, ${E(O)} unread` : "Notifications",
1614
- class: m(["relative flex items-center gap-3 w-full px-3 py-2.5 rounded-lg text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [E(f) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": A.value }]])
1615
- }, [s("span", pn, [u(E(ie), {
1613
+ "aria-label": D(O) > 0 ? `Notifications, ${D(O)} unread` : "Notifications",
1614
+ class: m(["relative flex items-center gap-3 w-full px-3 py-2.5 rounded-lg text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [D(f) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": k.value }]])
1615
+ }, [s("span", hn, [u(D(ae), {
1616
1616
  class: "w-[18px] h-[18px]",
1617
1617
  "aria-hidden": "true"
1618
- }), E(O) > 0 ? (y(), o("span", mn, T(E(O) > 99 ? "99+" : E(O)), 1)) : a("", !0)]), s("span", { class: m({ "lg:hidden": A.value }) }, "Notifications", 2)], 10, fn)) : a("", !0),
1618
+ }), D(O) > 0 ? (y(), o("span", gn, E(D(O) > 99 ? "99+" : D(O)), 1)) : a("", !0)]), s("span", { class: m({ "lg:hidden": k.value }) }, "Notifications", 2)], 10, mn)) : a("", !0),
1619
1619
  t.showThemeToggle ? (y(), o("button", {
1620
1620
  key: 1,
1621
1621
  type: "button",
1622
- onClick: r[4] ||= (...e) => E(h) && E(h)(...e),
1623
- title: E(f) ? "Switch to light mode" : "Switch to dark mode",
1624
- "aria-label": E(f) ? "Switch to light mode" : "Switch to dark mode",
1625
- "aria-pressed": E(f),
1626
- class: m(["flex items-center gap-3 w-full px-3 py-2.5 rounded-lg text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [E(f) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": A.value }]])
1622
+ onClick: r[4] ||= (...e) => D(h) && D(h)(...e),
1623
+ title: D(f) ? "Switch to light mode" : "Switch to dark mode",
1624
+ "aria-label": D(f) ? "Switch to light mode" : "Switch to dark mode",
1625
+ "aria-pressed": D(f),
1626
+ class: m(["flex items-center gap-3 w-full px-3 py-2.5 rounded-lg text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [D(f) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": k.value }]])
1627
1627
  }, [
1628
- (y(), i(w(E(f) ? E(ye) : E(ve)), {
1629
- class: m(["hidden w-[18px] h-[18px] shrink-0", { "lg:block": A.value }]),
1628
+ (y(), i(T(D(f) ? D(xe) : D(be)), {
1629
+ class: m(["hidden w-[18px] h-[18px] shrink-0", { "lg:block": k.value }]),
1630
1630
  "aria-hidden": "true"
1631
1631
  }, null, 8, ["class"])),
1632
- s("span", { class: m({ "lg:hidden": A.value }) }, T(E(f) ? "Switch to light" : "Switch to dark"), 3),
1633
- s("span", { class: m(["ml-auto relative w-9 h-5 rounded-full transition-colors", [E(f) ? "bg-emerald-600" : "bg-gray-300", { "lg:hidden": A.value }]]) }, [s("span", { class: m(["absolute top-0.5 left-0.5 w-4 h-4 rounded-full bg-white shadow-sm transition-transform duration-300", E(f) ? "translate-x-4" : "translate-x-0"]) }, null, 2)], 2)
1634
- ], 10, hn)) : a("", !0),
1632
+ s("span", { class: m({ "lg:hidden": k.value }) }, E(D(f) ? "Switch to light" : "Switch to dark"), 3),
1633
+ s("span", { class: m(["ml-auto relative w-9 h-5 rounded-full transition-colors", [D(f) ? "bg-emerald-600" : "bg-gray-300", { "lg:hidden": k.value }]]) }, [s("span", { class: m(["absolute top-0.5 left-0.5 w-4 h-4 rounded-full bg-white shadow-sm transition-transform duration-300", D(f) ? "translate-x-4" : "translate-x-0"]) }, null, 2)], 2)
1634
+ ], 10, _n)) : a("", !0),
1635
1635
  t.collapsible ? (y(), o("button", {
1636
1636
  key: 2,
1637
1637
  type: "button",
1638
- onClick: r[5] ||= (...e) => E(D) && E(D)(...e),
1639
- title: E(C) ? "Expand sidebar" : "Collapse sidebar",
1640
- "aria-label": E(C) ? "Expand sidebar" : "Collapse sidebar",
1641
- "aria-pressed": E(C),
1642
- class: m(["hidden lg:flex items-center gap-3 w-full px-3 py-2.5 rounded-lg text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [E(f) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": A.value }]])
1643
- }, [(y(), i(w(E(C) ? E(se) : E(oe)), {
1638
+ onClick: r[5] ||= (...e) => D(w) && D(w)(...e),
1639
+ title: D(b) ? "Expand sidebar" : "Collapse sidebar",
1640
+ "aria-label": D(b) ? "Expand sidebar" : "Collapse sidebar",
1641
+ "aria-pressed": D(b),
1642
+ class: m(["hidden lg:flex items-center gap-3 w-full px-3 py-2.5 rounded-lg text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [D(f) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": k.value }]])
1643
+ }, [(y(), i(T(D(b) ? D(ce) : D(se)), {
1644
1644
  class: "w-[18px] h-[18px] shrink-0",
1645
1645
  "aria-hidden": "true"
1646
- })), s("span", { class: m({ "lg:hidden": A.value }) }, "Collapse", 2)], 10, gn)) : a("", !0),
1647
- s("div", { class: m({ "lg:hidden": A.value }) }, [S(n.$slots, "status", {}, void 0, !0)], 2),
1648
- s("div", { class: m({ "lg:hidden": A.value }) }, [S(n.$slots, "footer", {}, () => [t.appName || t.version ? (y(), o("div", {
1646
+ })), s("span", { class: m({ "lg:hidden": k.value }) }, "Collapse", 2)], 10, vn)) : a("", !0),
1647
+ s("div", { class: m({ "lg:hidden": k.value }) }, [C(n.$slots, "status", {}, void 0, !0)], 2),
1648
+ s("div", { class: m({ "lg:hidden": k.value }) }, [C(n.$slots, "footer", {}, () => [t.appName || t.version ? (y(), o("div", {
1649
1649
  key: 0,
1650
- class: m(["flex items-center justify-center gap-2 text-xs", (E(f), "text-gray-500")])
1650
+ class: m(["flex items-center justify-center gap-2 text-xs", (D(f), "text-gray-500")])
1651
1651
  }, [s("span", null, [
1652
- l(T(t.appName), 1),
1652
+ l(E(t.appName), 1),
1653
1653
  t.appName && t.version ? (y(), o(e, { key: 0 }, [], 64)) : a("", !0),
1654
- t.version ? (y(), o(e, { key: 1 }, [l("v" + T(t.version), 1)], 64)) : a("", !0)
1654
+ t.version ? (y(), o(e, { key: 1 }, [l("v" + E(t.version), 1)], 64)) : a("", !0)
1655
1655
  ])], 2)) : a("", !0)], !0)], 2)
1656
1656
  ], 2)
1657
1657
  ])], 2)
1658
1658
  ]));
1659
1659
  }
1660
- }), [["__scopeId", "data-v-452beaf2"]]), vn = {
1660
+ }), [["__scopeId", "data-v-452beaf2"]]), bn = {
1661
1661
  key: 1,
1662
1662
  class: "mt-4 flex justify-center py-6"
1663
- }, yn = {
1663
+ }, xn = {
1664
1664
  key: 2,
1665
1665
  class: "mt-4 text-sm text-red-500",
1666
1666
  role: "alert"
1667
- }, bn = {
1667
+ }, Sn = {
1668
1668
  key: 3,
1669
1669
  class: "mt-4"
1670
- }, xn = { class: "relative" }, Sn = ["placeholder"], Cn = {
1670
+ }, Cn = { class: "relative" }, wn = ["placeholder"], Tn = {
1671
1671
  key: 4,
1672
1672
  class: "mt-3 max-h-64 overflow-y-auto"
1673
- }, wn = ["aria-pressed", "onClick"], Tn = { class: "flex-1 min-w-0" }, En = {
1673
+ }, En = ["aria-pressed", "onClick"], Dn = { class: "flex-1 min-w-0" }, On = {
1674
1674
  key: 0,
1675
1675
  class: "text-center py-6"
1676
- }, Dn = {
1676
+ }, kn = {
1677
1677
  key: 1,
1678
1678
  class: "text-center py-6"
1679
- }, On = ["disabled"], kn = ["disabled"], An = /* @__PURE__ */ d({
1679
+ }, An = ["disabled"], jn = ["disabled"], Mn = /* @__PURE__ */ d({
1680
1680
  __name: "BaseEntityPickerModal",
1681
1681
  props: {
1682
1682
  title: {},
@@ -1698,10 +1698,10 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1698
1698
  },
1699
1699
  emits: ["confirm", "cancel"],
1700
1700
  setup(t, { emit: n }) {
1701
- let c = t, l = n, { isDark: d } = B(), f = J(), h = b([]), _ = b(!1), v = b(""), C = b(null), w = b(""), D = b(null), O = r(() => {
1701
+ let c = t, l = n, { isDark: d } = z(), f = J(), h = x([]), _ = x(!1), v = x(""), b = x(null), w = x(""), T = x(null), O = r(() => {
1702
1702
  let e = c.loader ? h.value : c.items;
1703
1703
  return c.excludeId ? e.filter((e) => e.id !== c.excludeId) : e;
1704
- }), k = r(() => O.value.filter((e) => e.label.toLowerCase().includes(w.value.toLowerCase()))), ee = {
1704
+ }), ee = r(() => O.value.filter((e) => e.label.toLowerCase().includes(w.value.toLowerCase()))), k = {
1705
1705
  emerald: {
1706
1706
  iconBg: "bg-emerald-50",
1707
1707
  iconText: "text-emerald-600",
@@ -1793,7 +1793,7 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1793
1793
  confirmActive: "bg-amber-600 hover:bg-amber-700 cursor-pointer",
1794
1794
  confirmDisabled: "bg-amber-400 cursor-not-allowed"
1795
1795
  }
1796
- }, P = r(() => (d.value ? j : ee)[c.variant]);
1796
+ }, M = r(() => (d.value ? j : k)[c.variant]);
1797
1797
  g(async () => {
1798
1798
  if (c.loader) {
1799
1799
  _.value = !0;
@@ -1805,63 +1805,63 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1805
1805
  _.value = !1;
1806
1806
  }
1807
1807
  }
1808
- await p(), D.value?.focus();
1808
+ await p(), T.value?.focus();
1809
1809
  });
1810
- function F() {
1811
- !C.value || c.submitting || l("confirm", C.value);
1812
- }
1813
1810
  function te() {
1811
+ !b.value || c.submitting || l("confirm", b.value);
1812
+ }
1813
+ function F() {
1814
1814
  c.submitting || l("cancel");
1815
1815
  }
1816
- return (n, r) => (y(), i(Rt, {
1816
+ return (n, r) => (y(), i(zt, {
1817
1817
  title: t.title,
1818
1818
  "manual-close": t.submitting,
1819
- onCancel: te
1819
+ onCancel: F
1820
1820
  }, {
1821
- icon: M(() => [S(n.$slots, "icon", {}, () => [s("div", { class: m(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", P.value.iconBg]) }, [u(E(me), {
1822
- class: m(["h-6 w-6", P.value.iconText]),
1821
+ icon: N(() => [C(n.$slots, "icon", {}, () => [s("div", { class: m(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", M.value.iconBg]) }, [u(D(ge), {
1822
+ class: m(["h-6 w-6", M.value.iconText]),
1823
1823
  "aria-hidden": "true"
1824
1824
  }, null, 8, ["class"])], 2)])]),
1825
- footer: M(() => [s("button", {
1825
+ footer: N(() => [s("button", {
1826
1826
  type: "button",
1827
1827
  disabled: t.submitting,
1828
- class: m(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", E(f).ghostButton]),
1829
- onClick: te
1830
- }, T(t.cancelText), 11, On), s("button", {
1831
- type: "button",
1832
- disabled: !C.value || t.submitting,
1833
- class: m(["inline-flex items-center justify-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2", !C.value || t.submitting ? P.value.confirmDisabled : P.value.confirmActive]),
1828
+ class: m(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", D(f).ghostButton]),
1834
1829
  onClick: F
1835
- }, T(t.submitting ? t.submittingText : t.confirmText), 11, kn)]),
1836
- default: M(() => [
1830
+ }, E(t.cancelText), 11, An), s("button", {
1831
+ type: "button",
1832
+ disabled: !b.value || t.submitting,
1833
+ class: m(["inline-flex items-center justify-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2", !b.value || t.submitting ? M.value.confirmDisabled : M.value.confirmActive]),
1834
+ onClick: te
1835
+ }, E(t.submitting ? t.submittingText : t.confirmText), 11, jn)]),
1836
+ default: N(() => [
1837
1837
  t.message ? (y(), o("p", {
1838
1838
  key: 0,
1839
- class: m(["text-sm", E(d) ? "text-gray-300" : "text-gray-600"])
1840
- }, T(t.message), 3)) : a("", !0),
1841
- _.value ? (y(), o("div", vn, [u(ot, { color: "emerald" })])) : v.value ? (y(), o("div", yn, T(v.value), 1)) : a("", !0),
1842
- !_.value && !v.value && O.value.length > 0 ? (y(), o("div", bn, [s("div", xn, [u(E(ge), {
1843
- class: m(["absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4", E(f).dimText]),
1839
+ class: m(["text-sm", D(d) ? "text-gray-300" : "text-gray-600"])
1840
+ }, E(t.message), 3)) : a("", !0),
1841
+ _.value ? (y(), o("div", bn, [u(st, { color: "emerald" })])) : v.value ? (y(), o("div", xn, E(v.value), 1)) : a("", !0),
1842
+ !_.value && !v.value && O.value.length > 0 ? (y(), o("div", Sn, [s("div", Cn, [u(D(ve), {
1843
+ class: m(["absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4", D(f).dimText]),
1844
1844
  "aria-hidden": "true"
1845
- }, null, 8, ["class"]), N(s("input", {
1845
+ }, null, 8, ["class"]), P(s("input", {
1846
1846
  ref_key: "searchInputRef",
1847
- ref: D,
1847
+ ref: T,
1848
1848
  "onUpdate:modelValue": r[0] ||= (e) => w.value = e,
1849
1849
  type: "text",
1850
1850
  placeholder: t.searchPlaceholder,
1851
- class: m(["w-full pl-9 pr-3 py-2 text-sm rounded-md border outline-none transition-colors", [E(d) ? "bg-gray-800 border-gray-600 text-gray-200 placeholder-gray-500" : "bg-white border-gray-300 text-gray-700 placeholder-gray-400", P.value.inputFocus]])
1852
- }, null, 10, Sn), [[A, w.value]])])])) : a("", !0),
1853
- !_.value && !v.value ? (y(), o("div", Cn, [(y(!0), o(e, null, x(k.value, (e) => (y(), o("button", {
1851
+ class: m(["w-full pl-9 pr-3 py-2 text-sm rounded-md border outline-none transition-colors", [D(d) ? "bg-gray-800 border-gray-600 text-gray-200 placeholder-gray-500" : "bg-white border-gray-300 text-gray-700 placeholder-gray-400", M.value.inputFocus]])
1852
+ }, null, 10, wn), [[A, w.value]])])])) : a("", !0),
1853
+ !_.value && !v.value ? (y(), o("div", Tn, [(y(!0), o(e, null, S(ee.value, (e) => (y(), o("button", {
1854
1854
  key: e.id,
1855
1855
  type: "button",
1856
- "aria-pressed": C.value === e.id,
1857
- class: m(["w-full text-left flex items-center gap-3 px-3 py-2.5 rounded-lg cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500", [C.value === e.id ? P.value.selectedRow : E(d) ? "hover:bg-gray-800 border border-transparent" : "hover:bg-gray-50 border border-transparent"]]),
1858
- onClick: (t) => C.value = e.id
1856
+ "aria-pressed": b.value === e.id,
1857
+ class: m(["w-full text-left flex items-center gap-3 px-3 py-2.5 rounded-lg cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500", [b.value === e.id ? M.value.selectedRow : D(d) ? "hover:bg-gray-800 border border-transparent" : "hover:bg-gray-50 border border-transparent"]]),
1858
+ onClick: (t) => b.value = e.id
1859
1859
  }, [
1860
- u(E(me), { class: m(["w-5 h-5 flex-shrink-0", E(f).dimText]) }, null, 8, ["class"]),
1861
- s("div", Tn, [s("p", { class: m(["text-sm font-medium truncate", E(f).bodyText]) }, T(e.label), 3)]),
1862
- C.value === e.id ? (y(), o("div", {
1860
+ u(D(ge), { class: m(["w-5 h-5 flex-shrink-0", D(f).dimText]) }, null, 8, ["class"]),
1861
+ s("div", Dn, [s("p", { class: m(["text-sm font-medium truncate", D(f).bodyText]) }, E(e.label), 3)]),
1862
+ b.value === e.id ? (y(), o("div", {
1863
1863
  key: 0,
1864
- class: m(["w-5 h-5 rounded-full flex items-center justify-center", P.value.checkBg])
1864
+ class: m(["w-5 h-5 rounded-full flex items-center justify-center", M.value.checkBg])
1865
1865
  }, [...r[1] ||= [s("svg", {
1866
1866
  class: "w-3 h-3 text-white",
1867
1867
  fill: "none",
@@ -1874,15 +1874,15 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1874
1874
  "stroke-linejoin": "round",
1875
1875
  d: "M5 13l4 4L19 7"
1876
1876
  })], -1)]], 2)) : a("", !0)
1877
- ], 10, wn))), 128)), O.value.length === 0 ? (y(), o("div", En, [s("p", { class: m(["text-sm", E(f).dimText]) }, T(t.emptyMessage), 3)])) : k.value.length === 0 ? (y(), o("div", Dn, [s("p", { class: m(["text-sm", E(f).dimText]) }, T(t.noMatchMessage), 3)])) : a("", !0)])) : a("", !0)
1877
+ ], 10, En))), 128)), O.value.length === 0 ? (y(), o("div", On, [s("p", { class: m(["text-sm", D(f).dimText]) }, E(t.emptyMessage), 3)])) : ee.value.length === 0 ? (y(), o("div", kn, [s("p", { class: m(["text-sm", D(f).dimText]) }, E(t.noMatchMessage), 3)])) : a("", !0)])) : a("", !0)
1878
1878
  ]),
1879
1879
  _: 3
1880
1880
  }, 8, ["title", "manual-close"]));
1881
1881
  }
1882
- }), jn = {
1882
+ }), Nn = {
1883
1883
  href: "#main-content",
1884
1884
  class: "sr-only focus:not-sr-only focus:fixed focus:top-2 focus:left-2 focus:z-[100] focus:px-3 focus:py-2 focus:rounded-md focus:bg-emerald-600 focus:text-white focus:shadow-lg"
1885
- }, Mn = ["inert"], Nn = /* @__PURE__ */ d({
1885
+ }, Pn = ["inert"], Fn = /* @__PURE__ */ d({
1886
1886
  __name: "BaseAppLayout",
1887
1887
  props: {
1888
1888
  showSidebar: {
@@ -1892,19 +1892,19 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1892
1892
  skipLinkLabel: { default: "Skip to main content" }
1893
1893
  },
1894
1894
  setup(e) {
1895
- let t = e, { isDark: n } = B(), { mobileOpen: i } = $t(), { collapsed: c } = rn(), l = r(() => t.showSidebar);
1896
- return (t, r) => (y(), o("div", { class: m(["min-h-screen transition-colors duration-300", E(n) ? "bg-gray-950 text-gray-100" : "bg-gray-50 text-gray-800"]) }, [
1897
- s("a", jn, T(e.skipLinkLabel), 1),
1898
- l.value ? S(t.$slots, "sidebar", { key: 0 }) : a("", !0),
1895
+ let t = e, { isDark: n } = z(), { mobileOpen: i } = en(), { collapsed: c } = an(), l = r(() => t.showSidebar);
1896
+ return (t, r) => (y(), o("div", { class: m(["min-h-screen transition-colors duration-300", D(n) ? "bg-gray-950 text-gray-100" : "bg-gray-50 text-gray-800"]) }, [
1897
+ s("a", Nn, E(e.skipLinkLabel), 1),
1898
+ l.value ? C(t.$slots, "sidebar", { key: 0 }) : a("", !0),
1899
1899
  s("main", {
1900
1900
  id: "main-content",
1901
1901
  tabindex: "-1",
1902
- inert: l.value && E(i) ? !0 : void 0,
1903
- class: m(["transition-all duration-300", l.value ? E(c) ? "pt-14 lg:pt-0 lg:ml-16" : "pt-14 lg:pt-0 lg:ml-60" : ""])
1904
- }, [S(t.$slots, "default")], 10, Mn)
1902
+ inert: l.value && D(i) ? !0 : void 0,
1903
+ class: m(["transition-all duration-300", l.value ? D(c) ? "pt-14 lg:pt-0 lg:ml-16" : "pt-14 lg:pt-0 lg:ml-60" : ""])
1904
+ }, [C(t.$slots, "default")], 10, Pn)
1905
1905
  ], 2));
1906
1906
  }
1907
- }), Pn = { class: "flex flex-wrap items-center justify-between gap-3 mb-8" }, Fn = { class: "flex items-center gap-3 min-w-0" }, In = { class: "flex items-center gap-2" }, Ln = /* @__PURE__ */ d({
1907
+ }), In = { class: "flex flex-wrap items-center justify-between gap-3 mb-8" }, Ln = { class: "flex items-center gap-3 min-w-0" }, Rn = { class: "flex items-center gap-2" }, zn = /* @__PURE__ */ d({
1908
1908
  __name: "BasePageHeader",
1909
1909
  props: {
1910
1910
  title: {},
@@ -1913,7 +1913,7 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1913
1913
  maxWidthClass: { default: "max-w-4xl" }
1914
1914
  },
1915
1915
  setup(e) {
1916
- let t = e, { isDark: n } = B(), i = J(), c = r(() => {
1916
+ let t = e, { isDark: n } = z(), i = J(), c = r(() => {
1917
1917
  let e = {
1918
1918
  emerald: {
1919
1919
  dark: "bg-emerald-500/10",
@@ -1954,16 +1954,16 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1954
1954
  }[t.iconColor];
1955
1955
  return n.value ? e.dark : e.light;
1956
1956
  });
1957
- return (t, n) => (y(), o("div", { class: m(["mx-auto px-4 sm:px-6", e.maxWidthClass]) }, [s("div", Pn, [s("div", Fn, [s("div", { class: m(["w-10 h-10 rounded-lg flex items-center justify-center", c.value]) }, [S(t.$slots, "icon", { iconClass: l.value })], 2), s("div", null, [s("h1", { class: m(["text-2xl font-bold", E(i).primaryTextSoft]) }, T(e.title), 3), e.subtitle ? (y(), o("p", {
1957
+ return (t, n) => (y(), o("div", { class: m(["mx-auto px-4 sm:px-6", e.maxWidthClass]) }, [s("div", In, [s("div", Ln, [s("div", { class: m(["w-10 h-10 rounded-lg flex items-center justify-center", c.value]) }, [C(t.$slots, "icon", { iconClass: l.value })], 2), s("div", null, [s("h1", { class: m(["text-2xl font-bold", D(i).primaryTextSoft]) }, E(e.title), 3), e.subtitle ? (y(), o("p", {
1958
1958
  key: 0,
1959
- class: m(["text-sm", E(i).dimTextAlt])
1960
- }, T(e.subtitle), 3)) : a("", !0)])]), s("div", In, [S(t.$slots, "actions")])])], 2));
1959
+ class: m(["text-sm", D(i).dimTextAlt])
1960
+ }, E(e.subtitle), 3)) : a("", !0)])]), s("div", Rn, [C(t.$slots, "actions")])])], 2));
1961
1961
  }
1962
- }), Rn = [
1962
+ }), Bn = [
1963
1963
  "type",
1964
1964
  "disabled",
1965
1965
  "title"
1966
- ], zn = { key: 0 }, Bn = /* @__PURE__ */ d({
1966
+ ], Vn = { key: 0 }, Hn = /* @__PURE__ */ d({
1967
1967
  __name: "BaseToolbarButton",
1968
1968
  props: {
1969
1969
  label: { default: "" },
@@ -1977,7 +1977,7 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1977
1977
  },
1978
1978
  emits: ["click"],
1979
1979
  setup(e) {
1980
- let t = e, { isDark: n } = B(), i = r(() => {
1980
+ let t = e, { isDark: n } = z(), i = r(() => {
1981
1981
  let e = {
1982
1982
  neutral: {
1983
1983
  dark: "bg-gray-800 text-gray-100 border-gray-700 hover:bg-gray-700",
@@ -1996,14 +1996,14 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1996
1996
  title: e.title,
1997
1997
  class: m(["inline-flex shrink-0 items-center gap-2 px-3 py-2 rounded-lg text-sm font-medium border transition-colors cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed whitespace-nowrap focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", i.value]),
1998
1998
  onClick: n[0] ||= (e) => t.$emit("click", e)
1999
- }, [S(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (y(), o("span", zn, T(e.label), 1)) : a("", !0)], 10, Rn));
1999
+ }, [C(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (y(), o("span", Vn, E(e.label), 1)) : a("", !0)], 10, Bn));
2000
2000
  }
2001
- }), Vn = [
2001
+ }), Un = [
2002
2002
  "type",
2003
2003
  "disabled",
2004
2004
  "title",
2005
2005
  "aria-label"
2006
- ], Hn = { key: 0 }, Un = /* @__PURE__ */ d({
2006
+ ], Wn = { key: 0 }, Gn = /* @__PURE__ */ d({
2007
2007
  __name: "BaseActionButton",
2008
2008
  props: {
2009
2009
  label: { default: "" },
@@ -2022,7 +2022,7 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2022
2022
  },
2023
2023
  emits: ["click"],
2024
2024
  setup(e) {
2025
- let t = e, { isDark: n } = B(), i = r(() => {
2025
+ let t = e, { isDark: n } = z(), i = r(() => {
2026
2026
  let e = {
2027
2027
  emerald: {
2028
2028
  dark: "text-emerald-400 hover:bg-emerald-500/10",
@@ -2102,9 +2102,9 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2102
2102
  "aria-label": e.ariaLabel,
2103
2103
  class: m(["inline-flex items-center justify-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-medium transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-current", [e.fullWidth ? "flex-1" : "", c.value]]),
2104
2104
  onClick: n[0] ||= (e) => t.$emit("click", e)
2105
- }, [S(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (y(), o("span", Hn, T(e.label), 1)) : a("", !0)], 10, Vn));
2105
+ }, [C(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (y(), o("span", Wn, E(e.label), 1)) : a("", !0)], 10, Un));
2106
2106
  }
2107
- }), Wn = ["title", "aria-label"], Gn = /* @__PURE__ */ d({
2107
+ }), Kn = ["title", "aria-label"], qn = /* @__PURE__ */ d({
2108
2108
  __name: "BaseCopyButton",
2109
2109
  props: {
2110
2110
  text: {},
@@ -2115,7 +2115,7 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2115
2115
  },
2116
2116
  emits: ["copied", "error"],
2117
2117
  setup(e, { emit: t }) {
2118
- let n = e, a = t, { isDark: s } = B(), c = b(!1), l = null, u = r(() => c.value ? "Copied!" : n.label ? `Copy ${n.label}` : "Copy"), d = r(() => n.label ? `Copy ${n.label}` : "Copy"), f = r(() => n.variant === "bordered" ? `inline-flex items-center justify-center w-9 h-9 rounded-lg border transition-colors cursor-pointer shrink-0 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 ${c.value ? s.value ? "border-emerald-500/40 bg-emerald-500/10 text-emerald-400" : "border-emerald-300 bg-emerald-50 text-emerald-600" : s.value ? "border-gray-600 text-gray-400 hover:text-gray-200 hover:bg-gray-800" : "border-gray-300 text-gray-400 hover:text-gray-600 hover:bg-gray-50"}` : `p-1 rounded transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 ${s.value ? "text-gray-400 hover:text-emerald-300 hover:bg-emerald-500/10" : "text-gray-500 hover:text-emerald-600 hover:bg-emerald-50"}`);
2118
+ let n = e, a = t, { isDark: s } = z(), c = x(!1), l = null, u = r(() => c.value ? "Copied!" : n.label ? `Copy ${n.label}` : "Copy"), d = r(() => n.label ? `Copy ${n.label}` : "Copy"), f = r(() => n.variant === "bordered" ? `inline-flex items-center justify-center w-9 h-9 rounded-lg border transition-colors cursor-pointer shrink-0 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 ${c.value ? s.value ? "border-emerald-500/40 bg-emerald-500/10 text-emerald-400" : "border-emerald-300 bg-emerald-50 text-emerald-600" : s.value ? "border-gray-600 text-gray-400 hover:text-gray-200 hover:bg-gray-800" : "border-gray-300 text-gray-400 hover:text-gray-600 hover:bg-gray-50"}` : `p-1 rounded transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 ${s.value ? "text-gray-400 hover:text-emerald-300 hover:bg-emerald-500/10" : "text-gray-500 hover:text-emerald-600 hover:bg-emerald-50"}`);
2119
2119
  async function p(e) {
2120
2120
  try {
2121
2121
  if (navigator.clipboard?.writeText) {
@@ -2145,28 +2145,28 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2145
2145
  "aria-label": d.value,
2146
2146
  class: m(f.value),
2147
2147
  onClick: h
2148
- }, [c.value ? (y(), i(E(ue), {
2148
+ }, [c.value ? (y(), i(D(de), {
2149
2149
  key: 0,
2150
2150
  class: m(e.iconClass),
2151
2151
  "aria-hidden": "true"
2152
- }, null, 8, ["class"])) : (y(), i(E(de), {
2152
+ }, null, 8, ["class"])) : (y(), i(D(fe), {
2153
2153
  key: 1,
2154
2154
  class: m(e.iconClass),
2155
2155
  "aria-hidden": "true"
2156
- }, null, 8, ["class"]))], 10, Wn));
2156
+ }, null, 8, ["class"]))], 10, Kn));
2157
2157
  }
2158
- }), Kn = ["disabled", "aria-busy"], qn = {
2158
+ }), Jn = ["disabled", "aria-busy"], Yn = {
2159
2159
  key: 0,
2160
2160
  class: "w-5 h-5 animate-spin shrink-0",
2161
2161
  viewBox: "0 0 24 24",
2162
2162
  fill: "none",
2163
2163
  "aria-hidden": "true"
2164
- }, Jn = {
2164
+ }, Xn = {
2165
2165
  key: 1,
2166
2166
  class: "w-5 h-5 shrink-0",
2167
2167
  viewBox: "0 0 48 48",
2168
2168
  "aria-hidden": "true"
2169
- }, Yn = /* @__PURE__ */ d({
2169
+ }, Zn = /* @__PURE__ */ d({
2170
2170
  __name: "BaseGoogleSignInButton",
2171
2171
  props: {
2172
2172
  label: { default: "Sign in with Google" },
@@ -2185,7 +2185,7 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2185
2185
  },
2186
2186
  emits: ["click"],
2187
2187
  setup(e, { emit: t }) {
2188
- let n = e, i = t, { isDark: a } = B(), l = r(() => n.disabled || n.loading);
2188
+ let n = e, i = t, { isDark: a } = z(), l = r(() => n.disabled || n.loading);
2189
2189
  function u() {
2190
2190
  l.value || i("click");
2191
2191
  }
@@ -2194,8 +2194,8 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2194
2194
  disabled: l.value,
2195
2195
  "aria-busy": e.loading,
2196
2196
  onClick: u,
2197
- class: m(["inline-flex items-center justify-center gap-3 h-11 px-4 rounded-lg border text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 disabled:opacity-60 disabled:cursor-not-allowed", [e.block ? "w-full" : "", E(a) ? "bg-gray-900 border-gray-700 text-gray-100 hover:bg-gray-800" : "bg-white border-gray-300 text-gray-700 hover:bg-gray-50"]])
2198
- }, [e.loading ? (y(), o("svg", qn, [...n[0] ||= [s("circle", {
2197
+ class: m(["inline-flex items-center justify-center gap-3 h-11 px-4 rounded-lg border text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 disabled:opacity-60 disabled:cursor-not-allowed", [e.block ? "w-full" : "", D(a) ? "bg-gray-900 border-gray-700 text-gray-100 hover:bg-gray-800" : "bg-white border-gray-300 text-gray-700 hover:bg-gray-50"]])
2198
+ }, [e.loading ? (y(), o("svg", Yn, [...n[0] ||= [s("circle", {
2199
2199
  class: "opacity-25",
2200
2200
  cx: "12",
2201
2201
  cy: "12",
@@ -2206,18 +2206,18 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2206
2206
  class: "opacity-75",
2207
2207
  fill: "currentColor",
2208
2208
  d: "M4 12a8 8 0 0 1 8-8V0C5.4 0 0 5.4 0 12h4z"
2209
- }, null, -1)]])) : (y(), o("svg", Jn, [...n[1] ||= [c("<path fill=\"#EA4335\" d=\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\"></path><path fill=\"#4285F4\" d=\"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z\"></path><path fill=\"#FBBC05\" d=\"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z\"></path><path fill=\"#34A853\" d=\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\"></path><path fill=\"none\" d=\"M0 0h48v48H0z\"></path>", 5)]])), s("span", null, T(e.label), 1)], 10, Kn));
2209
+ }, null, -1)]])) : (y(), o("svg", Xn, [...n[1] ||= [c("<path fill=\"#EA4335\" d=\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\"></path><path fill=\"#4285F4\" d=\"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z\"></path><path fill=\"#FBBC05\" d=\"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z\"></path><path fill=\"#34A853\" d=\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\"></path><path fill=\"none\" d=\"M0 0h48v48H0z\"></path>", 5)]])), s("span", null, E(e.label), 1)], 10, Jn));
2210
2210
  }
2211
- }), Xn = {
2211
+ }), Qn = {
2212
2212
  key: 0,
2213
2213
  class: "flex justify-center mb-6"
2214
- }, Zn = { class: "mb-6 text-center" }, Qn = { class: "flex items-center gap-3 my-5" }, $n = ["disabled"], er = { class: "flex items-center justify-between mb-1.5" }, tr = { class: "relative" }, nr = ["type", "disabled"], rr = ["aria-label", "aria-pressed"], ir = ["disabled"], ar = ["disabled", "aria-busy"], or = {
2214
+ }, $n = { class: "mb-6 text-center" }, er = { class: "flex items-center gap-3 my-5" }, tr = ["disabled"], nr = { class: "flex items-center justify-between mb-1.5" }, rr = { class: "relative" }, ir = ["type", "disabled"], ar = ["aria-label", "aria-pressed"], or = ["disabled"], sr = ["disabled", "aria-busy"], cr = {
2215
2215
  key: 0,
2216
2216
  class: "w-4 h-4 animate-spin",
2217
2217
  viewBox: "0 0 24 24",
2218
2218
  fill: "none",
2219
2219
  "aria-hidden": "true"
2220
- }, sr = /* @__PURE__ */ d({
2220
+ }, lr = /* @__PURE__ */ d({
2221
2221
  __name: "BaseLoginForm",
2222
2222
  props: {
2223
2223
  title: { default: "Sign in" },
@@ -2243,42 +2243,42 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2243
2243
  },
2244
2244
  emits: ["submit", "google-sign-in"],
2245
2245
  setup(t, { emit: n }) {
2246
- let i = t, c = n, { isDark: d } = B(), f = J(), p = b(""), h = b(""), g = b(!1), _ = b(!1), v = r(() => i.loading || i.googleLoading);
2247
- function x() {
2246
+ let i = t, c = n, { isDark: d } = z(), f = J(), p = x(""), h = x(""), g = x(!1), _ = x(!1), v = r(() => i.loading || i.googleLoading);
2247
+ function b() {
2248
2248
  v.value || c("submit", {
2249
2249
  email: p.value,
2250
2250
  password: h.value,
2251
2251
  ...i.showRemember ? { remember: g.value } : {}
2252
2252
  });
2253
2253
  }
2254
- return (n, r) => (y(), o("div", { class: m(["w-full max-w-sm mx-auto rounded-xl border shadow-sm p-6 sm:p-8", E(f).card]) }, [
2255
- n.$slots.logo ? (y(), o("div", Xn, [S(n.$slots, "logo")])) : a("", !0),
2256
- s("div", Zn, [s("h1", { class: m(["text-xl font-semibold", E(f).primaryText]) }, T(t.title), 3), t.subtitle ? (y(), o("p", {
2254
+ return (n, r) => (y(), o("div", { class: m(["w-full max-w-sm mx-auto rounded-xl border shadow-sm p-6 sm:p-8", D(f).card]) }, [
2255
+ n.$slots.logo ? (y(), o("div", Qn, [C(n.$slots, "logo")])) : a("", !0),
2256
+ s("div", $n, [s("h1", { class: m(["text-xl font-semibold", D(f).primaryText]) }, E(t.title), 3), t.subtitle ? (y(), o("p", {
2257
2257
  key: 0,
2258
- class: m(["mt-1 text-sm", E(f).mutedText])
2259
- }, T(t.subtitle), 3)) : a("", !0)]),
2258
+ class: m(["mt-1 text-sm", D(f).mutedText])
2259
+ }, E(t.subtitle), 3)) : a("", !0)]),
2260
2260
  t.error ? (y(), o("div", {
2261
2261
  key: 1,
2262
2262
  role: "alert",
2263
- class: m(["mb-4 rounded-lg border px-3 py-2 text-sm", E(d) ? "bg-red-500/10 border-red-500/30 text-red-300" : "bg-red-50 border-red-200 text-red-700"])
2264
- }, T(t.error), 3)) : a("", !0),
2265
- t.showGoogle ? (y(), o(e, { key: 2 }, [u(Yn, {
2263
+ class: m(["mb-4 rounded-lg border px-3 py-2 text-sm", D(d) ? "bg-red-500/10 border-red-500/30 text-red-300" : "bg-red-50 border-red-200 text-red-700"])
2264
+ }, E(t.error), 3)) : a("", !0),
2265
+ t.showGoogle ? (y(), o(e, { key: 2 }, [u(Zn, {
2266
2266
  loading: t.googleLoading,
2267
2267
  disabled: t.loading,
2268
2268
  onClick: r[0] ||= (e) => c("google-sign-in")
2269
- }, null, 8, ["loading", "disabled"]), s("div", Qn, [
2270
- s("span", { class: m(["h-px flex-1", E(d) ? "bg-gray-700" : "bg-gray-200"]) }, null, 2),
2271
- s("span", { class: m(["text-xs uppercase tracking-wider", E(f).dimTextAlt]) }, "or", 2),
2272
- s("span", { class: m(["h-px flex-1", E(d) ? "bg-gray-700" : "bg-gray-200"]) }, null, 2)
2269
+ }, null, 8, ["loading", "disabled"]), s("div", er, [
2270
+ s("span", { class: m(["h-px flex-1", D(d) ? "bg-gray-700" : "bg-gray-200"]) }, null, 2),
2271
+ s("span", { class: m(["text-xs uppercase tracking-wider", D(f).dimTextAlt]) }, "or", 2),
2272
+ s("span", { class: m(["h-px flex-1", D(d) ? "bg-gray-700" : "bg-gray-200"]) }, null, 2)
2273
2273
  ])], 64)) : a("", !0),
2274
2274
  s("form", {
2275
2275
  class: "space-y-4",
2276
- onSubmit: F(x, ["prevent"])
2276
+ onSubmit: F(b, ["prevent"])
2277
2277
  }, [
2278
2278
  s("div", null, [s("label", {
2279
2279
  for: "login-email",
2280
- class: m(["block mb-1.5 text-sm font-medium", E(f).label])
2281
- }, " Email ", 2), N(s("input", {
2280
+ class: m(["block mb-1.5 text-sm font-medium", D(f).label])
2281
+ }, " Email ", 2), P(s("input", {
2282
2282
  id: "login-email",
2283
2283
  "onUpdate:modelValue": r[1] ||= (e) => p.value = e,
2284
2284
  type: "email",
@@ -2287,12 +2287,12 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2287
2287
  required: "",
2288
2288
  disabled: v.value,
2289
2289
  placeholder: "you@example.com",
2290
- class: m(["w-full h-11 px-3 rounded-lg border text-sm transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 disabled:opacity-60", E(f).inputWithPlaceholder])
2291
- }, null, 10, $n), [[A, p.value]])]),
2292
- s("div", null, [s("div", er, [s("label", {
2290
+ class: m(["w-full h-11 px-3 rounded-lg border text-sm transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 disabled:opacity-60", D(f).inputWithPlaceholder])
2291
+ }, null, 10, tr), [[A, p.value]])]),
2292
+ s("div", null, [s("div", nr, [s("label", {
2293
2293
  for: "login-password",
2294
- class: m(["block text-sm font-medium", E(f).label])
2295
- }, " Password ", 2), S(n.$slots, "forgot")]), s("div", tr, [N(s("input", {
2294
+ class: m(["block text-sm font-medium", D(f).label])
2295
+ }, " Password ", 2), C(n.$slots, "forgot")]), s("div", rr, [P(s("input", {
2296
2296
  id: "login-password",
2297
2297
  "onUpdate:modelValue": r[2] ||= (e) => h.value = e,
2298
2298
  type: _.value ? "text" : "password",
@@ -2301,29 +2301,29 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2301
2301
  required: "",
2302
2302
  disabled: v.value,
2303
2303
  placeholder: "••••••••",
2304
- class: m(["w-full h-11 pl-3 pr-16 rounded-lg border text-sm transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 disabled:opacity-60", E(f).inputWithPlaceholder])
2305
- }, null, 10, nr), [[k, h.value]]), s("button", {
2304
+ class: m(["w-full h-11 pl-3 pr-16 rounded-lg border text-sm transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 disabled:opacity-60", D(f).inputWithPlaceholder])
2305
+ }, null, 10, ir), [[k, h.value]]), s("button", {
2306
2306
  type: "button",
2307
2307
  onClick: r[3] ||= (e) => _.value = !_.value,
2308
2308
  "aria-label": _.value ? "Hide password" : "Show password",
2309
2309
  "aria-pressed": _.value,
2310
- class: m(["absolute inset-y-0 right-0 px-3 text-xs font-medium cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 rounded-r-lg", E(f).mutedText])
2311
- }, T(_.value ? "Hide" : "Show"), 11, rr)])]),
2310
+ class: m(["absolute inset-y-0 right-0 px-3 text-xs font-medium cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 rounded-r-lg", D(f).mutedText])
2311
+ }, E(_.value ? "Hide" : "Show"), 11, ar)])]),
2312
2312
  t.showRemember ? (y(), o("label", {
2313
2313
  key: 0,
2314
- class: m(["flex items-center gap-2 text-sm cursor-pointer select-none", E(f).bodyText])
2315
- }, [N(s("input", {
2314
+ class: m(["flex items-center gap-2 text-sm cursor-pointer select-none", D(f).bodyText])
2315
+ }, [P(s("input", {
2316
2316
  "onUpdate:modelValue": r[4] ||= (e) => g.value = e,
2317
2317
  type: "checkbox",
2318
2318
  disabled: v.value,
2319
2319
  class: "w-4 h-4 rounded border-gray-300 text-emerald-600 focus:ring-emerald-500"
2320
- }, null, 8, ir), [[O, g.value]]), r[5] ||= l(" Remember me ", -1)], 2)) : a("", !0),
2320
+ }, null, 8, or), [[ee, g.value]]), r[5] ||= l(" Remember me ", -1)], 2)) : a("", !0),
2321
2321
  s("button", {
2322
2322
  type: "submit",
2323
2323
  disabled: v.value,
2324
2324
  "aria-busy": t.loading,
2325
2325
  class: "inline-flex items-center justify-center gap-2 w-full h-11 px-4 rounded-lg text-sm font-semibold text-white bg-emerald-600 hover:bg-emerald-700 transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 disabled:opacity-60 disabled:cursor-not-allowed"
2326
- }, [t.loading ? (y(), o("svg", or, [...r[6] ||= [s("circle", {
2326
+ }, [t.loading ? (y(), o("svg", cr, [...r[6] ||= [s("circle", {
2327
2327
  class: "opacity-25",
2328
2328
  cx: "12",
2329
2329
  cy: "12",
@@ -2334,18 +2334,18 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2334
2334
  class: "opacity-75",
2335
2335
  fill: "currentColor",
2336
2336
  d: "M4 12a8 8 0 0 1 8-8V0C5.4 0 0 5.4 0 12h4z"
2337
- }, null, -1)]])) : a("", !0), l(" " + T(t.submitLabel), 1)], 8, ar)
2337
+ }, null, -1)]])) : a("", !0), l(" " + E(t.submitLabel), 1)], 8, sr)
2338
2338
  ], 32),
2339
2339
  n.$slots.footer ? (y(), o("div", {
2340
2340
  key: 3,
2341
- class: m(["mt-6 text-center text-sm", E(f).mutedText])
2342
- }, [S(n.$slots, "footer")], 2)) : a("", !0)
2341
+ class: m(["mt-6 text-center text-sm", D(f).mutedText])
2342
+ }, [C(n.$slots, "footer")], 2)) : a("", !0)
2343
2343
  ], 2));
2344
2344
  }
2345
- }), cr = ["aria-label"], lr = { class: "flex-1 overflow-y-auto" }, ur = {
2345
+ }), ur = ["aria-label"], dr = { class: "flex-1 overflow-y-auto" }, fr = {
2346
2346
  key: 0,
2347
2347
  class: "flex flex-col items-center justify-center text-center px-6 py-16 gap-3"
2348
- }, dr = ["onClick"], fr = { class: "min-w-0 flex-1" }, pr = { class: "flex items-baseline justify-between gap-2" }, mr = /* @__PURE__ */ d({
2348
+ }, pr = ["onClick"], mr = { class: "min-w-0 flex-1" }, hr = { class: "flex items-baseline justify-between gap-2" }, gr = /* @__PURE__ */ d({
2349
2349
  __name: "BaseNotificationPanel",
2350
2350
  props: {
2351
2351
  title: { default: "Notifications" },
@@ -2357,12 +2357,12 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2357
2357
  },
2358
2358
  emits: ["select"],
2359
2359
  setup(c, { emit: d }) {
2360
- let f = d, { isDark: p } = B(), h = J(), { notifications: g, unreadCount: _, open: v, closePanel: b, markAllRead: S, markRead: C } = on(), w = {
2360
+ let f = d, { isDark: p } = z(), h = J(), { notifications: g, unreadCount: _, open: v, closePanel: b, markAllRead: x, markRead: C } = cn(), w = {
2361
2361
  info: "bg-sky-500",
2362
2362
  success: "bg-emerald-500",
2363
2363
  warning: "bg-amber-500",
2364
2364
  error: "bg-red-500"
2365
- }, D = r(() => g.value.length);
2365
+ }, T = r(() => g.value.length);
2366
2366
  function O(e) {
2367
2367
  C(e), f("select", e);
2368
2368
  }
@@ -2374,11 +2374,11 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2374
2374
  "leave-active-class": "transition-opacity duration-200",
2375
2375
  "leave-to-class": "opacity-0"
2376
2376
  }, {
2377
- default: M(() => [E(v) ? (y(), o("div", {
2377
+ default: N(() => [D(v) ? (y(), o("div", {
2378
2378
  key: 0,
2379
2379
  class: "fixed inset-0 z-[60] bg-black/50",
2380
2380
  "aria-hidden": "true",
2381
- onClick: d[0] ||= (...e) => E(b) && E(b)(...e)
2381
+ onClick: d[0] ||= (...e) => D(b) && D(b)(...e)
2382
2382
  })) : a("", !0)]),
2383
2383
  _: 1
2384
2384
  }), u(n, {
@@ -2387,55 +2387,55 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2387
2387
  "leave-active-class": "transition-transform duration-300 ease-in",
2388
2388
  "leave-to-class": "-translate-x-full"
2389
2389
  }, {
2390
- default: M(() => [E(v) ? (y(), o("aside", {
2390
+ default: N(() => [D(v) ? (y(), o("aside", {
2391
2391
  key: 0,
2392
2392
  role: "dialog",
2393
2393
  "aria-modal": "true",
2394
2394
  "aria-label": c.title,
2395
- class: m(["fixed top-0 left-0 z-[70] h-screen w-full max-w-sm flex flex-col border-r shadow-xl", E(p) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200"])
2395
+ class: m(["fixed top-0 left-0 z-[70] h-screen w-full max-w-sm flex flex-col border-r shadow-xl", D(p) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200"])
2396
2396
  }, [
2397
- s("div", { class: m(["flex items-center justify-between gap-3 px-5 py-4 border-b shrink-0", E(h).border]) }, [s("h2", { class: m(["text-lg font-semibold flex items-center gap-2", E(h).primaryText]) }, [l(T(c.title) + " ", 1), s("span", { class: m(["text-sm font-normal", E(h).dimTextAlt]) }, "— " + T(D.value), 3)], 2), s("button", {
2397
+ s("div", { class: m(["flex items-center justify-between gap-3 px-5 py-4 border-b shrink-0", D(h).border]) }, [s("h2", { class: m(["text-lg font-semibold flex items-center gap-2", D(h).primaryText]) }, [l(E(c.title) + " ", 1), s("span", { class: m(["text-sm font-normal", D(h).dimTextAlt]) }, "— " + E(T.value), 3)], 2), s("button", {
2398
2398
  type: "button",
2399
- onClick: d[1] ||= (...e) => E(b) && E(b)(...e),
2399
+ onClick: d[1] ||= (...e) => D(b) && D(b)(...e),
2400
2400
  "aria-label": "Close notifications",
2401
- class: m(["p-1.5 rounded-lg cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", E(p) ? "text-gray-400 hover:bg-gray-800" : "text-gray-500 hover:bg-gray-100"])
2402
- }, [u(E(be), {
2401
+ class: m(["p-1.5 rounded-lg cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", D(p) ? "text-gray-400 hover:bg-gray-800" : "text-gray-500 hover:bg-gray-100"])
2402
+ }, [u(D(Se), {
2403
2403
  class: "w-5 h-5",
2404
2404
  "aria-hidden": "true"
2405
2405
  })], 2)], 2),
2406
- c.showMarkAllRead && E(_) > 0 ? (y(), o("div", {
2406
+ c.showMarkAllRead && D(_) > 0 ? (y(), o("div", {
2407
2407
  key: 0,
2408
- class: m(["px-5 py-2 border-b shrink-0 flex justify-end", E(h).border])
2408
+ class: m(["px-5 py-2 border-b shrink-0 flex justify-end", D(h).border])
2409
2409
  }, [s("button", {
2410
2410
  type: "button",
2411
- onClick: d[2] ||= (...e) => E(S) && E(S)(...e),
2412
- class: m(["text-xs font-medium cursor-pointer transition-colors focus:outline-none focus-visible:underline", E(h).emeraldText])
2411
+ onClick: d[2] ||= (...e) => D(x) && D(x)(...e),
2412
+ class: m(["text-xs font-medium cursor-pointer transition-colors focus:outline-none focus-visible:underline", D(h).emeraldText])
2413
2413
  }, " Mark all as read ", 2)], 2)) : a("", !0),
2414
- s("div", lr, [D.value === 0 ? (y(), o("div", ur, [u(E(ie), {
2415
- class: m(["w-10 h-10", E(h).illustration]),
2414
+ s("div", dr, [T.value === 0 ? (y(), o("div", fr, [u(D(ae), {
2415
+ class: m(["w-10 h-10", D(h).illustration]),
2416
2416
  "aria-hidden": "true"
2417
- }, null, 8, ["class"]), s("p", { class: m(["text-sm", E(h).mutedText]) }, T(c.emptyText), 3)])) : (y(), o("ul", {
2417
+ }, null, 8, ["class"]), s("p", { class: m(["text-sm", D(h).mutedText]) }, E(c.emptyText), 3)])) : (y(), o("ul", {
2418
2418
  key: 1,
2419
- class: m(["divide-y", E(p) ? "divide-gray-800" : "divide-gray-100"])
2420
- }, [(y(!0), o(e, null, x(E(g), (e) => (y(), o("li", { key: e.id }, [s("button", {
2419
+ class: m(["divide-y", D(p) ? "divide-gray-800" : "divide-gray-100"])
2420
+ }, [(y(!0), o(e, null, S(D(g), (e) => (y(), o("li", { key: e.id }, [s("button", {
2421
2421
  type: "button",
2422
2422
  onClick: (t) => O(e.id),
2423
- class: m(["w-full text-left px-5 py-4 flex gap-3 transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500", [e.read ? "" : E(p) ? "bg-emerald-500/5" : "bg-emerald-50/60", E(p) ? "hover:bg-gray-800" : "hover:bg-gray-50"]])
2423
+ class: m(["w-full text-left px-5 py-4 flex gap-3 transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500", [e.read ? "" : D(p) ? "bg-emerald-500/5" : "bg-emerald-50/60", D(p) ? "hover:bg-gray-800" : "hover:bg-gray-50"]])
2424
2424
  }, [s("span", {
2425
- class: m(["mt-1.5 w-2 h-2 rounded-full shrink-0", e.read ? E(p) ? "bg-gray-700" : "bg-gray-300" : w[e.type ?? "info"]]),
2425
+ class: m(["mt-1.5 w-2 h-2 rounded-full shrink-0", e.read ? D(p) ? "bg-gray-700" : "bg-gray-300" : w[e.type ?? "info"]]),
2426
2426
  "aria-hidden": "true"
2427
- }, null, 2), s("span", fr, [s("span", pr, [s("span", { class: m(["text-sm truncate", [e.read ? "font-medium" : "font-semibold", E(h).primaryTextSoft]]) }, T(e.title), 3), e.time ? (y(), o("span", {
2427
+ }, null, 2), s("span", mr, [s("span", hr, [s("span", { class: m(["text-sm truncate", [e.read ? "font-medium" : "font-semibold", D(h).primaryTextSoft]]) }, E(e.title), 3), e.time ? (y(), o("span", {
2428
2428
  key: 0,
2429
- class: m(["text-xs shrink-0", E(h).dimText])
2430
- }, T(e.time), 3)) : a("", !0)]), e.message ? (y(), o("span", {
2429
+ class: m(["text-xs shrink-0", D(h).dimText])
2430
+ }, E(e.time), 3)) : a("", !0)]), e.message ? (y(), o("span", {
2431
2431
  key: 0,
2432
- class: m(["mt-0.5 block text-sm", E(h).mutedText])
2433
- }, T(e.message), 3)) : a("", !0)])], 10, dr)]))), 128))], 2))])
2434
- ], 10, cr)) : a("", !0)]),
2432
+ class: m(["mt-0.5 block text-sm", D(h).mutedText])
2433
+ }, E(e.message), 3)) : a("", !0)])], 10, pr)]))), 128))], 2))])
2434
+ ], 10, ur)) : a("", !0)]),
2435
2435
  _: 1
2436
2436
  })]));
2437
2437
  }
2438
- }), hr = ["disabled"], gr = /* @__PURE__ */ d({
2438
+ }), _r = ["disabled"], vr = /* @__PURE__ */ d({
2439
2439
  __name: "BaseChipButton",
2440
2440
  props: {
2441
2441
  size: { default: "sm" },
@@ -2446,15 +2446,15 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2446
2446
  },
2447
2447
  emits: ["click"],
2448
2448
  setup(e, { emit: t }) {
2449
- let n = t, { isDark: r } = B();
2449
+ let n = t, { isDark: r } = z();
2450
2450
  return (t, i) => (y(), o("button", {
2451
2451
  type: "button",
2452
2452
  disabled: e.disabled,
2453
- class: m(["inline-flex items-center gap-1 font-medium rounded-md border transition-colors cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [e.size === "xs" ? "text-xs px-2 py-0.5" : "text-xs px-2.5 py-1", E(r) ? "text-emerald-300 border-emerald-700 bg-emerald-900/30 hover:bg-emerald-800/50" : "text-emerald-700 border-emerald-200 bg-emerald-50 hover:bg-emerald-100"]]),
2453
+ class: m(["inline-flex items-center gap-1 font-medium rounded-md border transition-colors cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [e.size === "xs" ? "text-xs px-2 py-0.5" : "text-xs px-2.5 py-1", D(r) ? "text-emerald-300 border-emerald-700 bg-emerald-900/30 hover:bg-emerald-800/50" : "text-emerald-700 border-emerald-200 bg-emerald-50 hover:bg-emerald-100"]]),
2454
2454
  onClick: i[0] ||= (e) => n("click")
2455
- }, [S(t.$slots, "default")], 10, hr));
2455
+ }, [C(t.$slots, "default")], 10, _r));
2456
2456
  }
2457
- }), _r = /* @__PURE__ */ d({
2457
+ }), yr = /* @__PURE__ */ d({
2458
2458
  __name: "BaseRemoveButton",
2459
2459
  emits: ["click"],
2460
2460
  setup(e, { emit: t }) {
@@ -2465,18 +2465,18 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2465
2465
  onClick: t[0] ||= (e) => n("click")
2466
2466
  }, " × "));
2467
2467
  }
2468
- }), vr = { class: "relative flex h-2 w-2" }, yr = {
2468
+ }), br = { class: "relative flex h-2 w-2" }, xr = {
2469
2469
  key: 0,
2470
2470
  class: "animate-ping absolute inline-flex h-full w-full rounded-full bg-emerald-400 opacity-75",
2471
2471
  "aria-hidden": "true"
2472
- }, br = /* @__PURE__ */ d({
2472
+ }, Sr = /* @__PURE__ */ d({
2473
2473
  __name: "BaseStatusPill",
2474
2474
  props: {
2475
2475
  status: {},
2476
2476
  label: {}
2477
2477
  },
2478
2478
  setup(e) {
2479
- let t = e, { isDark: n } = B(), i = r(() => {
2479
+ let t = e, { isDark: n } = z(), i = r(() => {
2480
2480
  switch (t.status) {
2481
2481
  case "ok": return n.value ? "bg-emerald-500/10 text-emerald-400" : "bg-emerald-50 text-emerald-700";
2482
2482
  case "error": return n.value ? "bg-red-500/10 text-red-400" : "bg-red-50 text-red-700";
@@ -2489,9 +2489,9 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2489
2489
  default: return "bg-gray-400";
2490
2490
  }
2491
2491
  });
2492
- return (t, n) => (y(), o("div", { class: m(["flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs", i.value]) }, [s("span", vr, [e.status === "ok" ? (y(), o("span", yr)) : a("", !0), s("span", { class: m(["relative inline-flex rounded-full h-2 w-2", c.value]) }, null, 2)]), l(" " + T(e.label), 1)], 2));
2492
+ return (t, n) => (y(), o("div", { class: m(["flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs", i.value]) }, [s("span", br, [e.status === "ok" ? (y(), o("span", xr)) : a("", !0), s("span", { class: m(["relative inline-flex rounded-full h-2 w-2", c.value]) }, null, 2)]), l(" " + E(e.label), 1)], 2));
2493
2493
  }
2494
- }), xr = ["value", "type"], Sr = /* @__PURE__ */ d({
2494
+ }), Cr = ["value", "type"], $ = /* @__PURE__ */ d({
2495
2495
  __name: "BaseInput",
2496
2496
  props: {
2497
2497
  modelValue: { default: "" },
@@ -2513,9 +2513,9 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2513
2513
  type: e.type,
2514
2514
  class: m(["rounded border border-slate-300 dark:border-slate-600 bg-slate-50 dark:bg-slate-900 text-slate-900 dark:text-slate-100 text-sm placeholder:text-slate-400 dark:placeholder:text-slate-500 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:border-emerald-500 disabled:opacity-60 disabled:cursor-not-allowed", [e.block ? "w-full" : "", e.size === "sm" ? "px-2 py-1.5" : "px-3 py-2"]]),
2515
2515
  onInput: r
2516
- }, null, 42, xr));
2516
+ }, null, 42, Cr));
2517
2517
  }
2518
- }), Cr = ["value"], wr = /* @__PURE__ */ d({
2518
+ }), wr = ["value"], Tr = /* @__PURE__ */ d({
2519
2519
  __name: "BaseSelect",
2520
2520
  props: {
2521
2521
  modelValue: { default: void 0 },
@@ -2535,13 +2535,13 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2535
2535
  value: e.modelValue,
2536
2536
  class: m(["rounded border border-slate-300 dark:border-slate-600 bg-slate-50 dark:bg-slate-900 text-slate-900 dark:text-slate-100 text-sm cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:border-emerald-500 disabled:opacity-60 disabled:cursor-not-allowed", [e.block ? "w-full" : "", e.size === "md" ? "px-3 py-2" : "px-2 py-1.5"]]),
2537
2537
  onChange: r
2538
- }, [S(t.$slots, "default")], 42, Cr));
2538
+ }, [C(t.$slots, "default")], 42, wr));
2539
2539
  }
2540
- }), Tr = [
2540
+ }), Er = [
2541
2541
  "disabled",
2542
2542
  "aria-label",
2543
2543
  "aria-expanded"
2544
- ], Er = ["aria-label"], Dr = ["aria-selected", "title"], Or = ["disabled", "onClick"], kr = /* @__PURE__ */ d({
2544
+ ], Dr = ["aria-label"], Or = ["aria-selected", "title"], kr = ["disabled", "onClick"], Ar = /* @__PURE__ */ d({
2545
2545
  __name: "BaseDropdown",
2546
2546
  props: {
2547
2547
  options: {},
@@ -2556,18 +2556,20 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2556
2556
  type: Boolean,
2557
2557
  default: !1
2558
2558
  },
2559
- ariaLabel: { default: "" }
2559
+ ariaLabel: { default: "" },
2560
+ triggerClass: { default: "" },
2561
+ chevronClass: { default: "w-5 h-5 text-slate-500 dark:text-slate-400" }
2560
2562
  },
2561
2563
  emits: ["update:modelValue"],
2562
2564
  setup(t, { emit: n }) {
2563
- let i = t, c = n, l = b(!1), d = b(null), f = r(() => i.options.find((e) => e.value === i.modelValue) ?? null), p = r(() => "flex items-center justify-between gap-2 rounded-lg border text-left text-sm transition-colors border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 text-slate-700 dark:text-slate-100 hover:bg-slate-50 dark:hover:bg-slate-800 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed " + (i.size === "sm" ? "px-3 py-2" : "px-4 py-2.5"));
2565
+ let i = t, c = n, l = x(!1), d = x(null), f = r(() => i.options.find((e) => e.value === i.modelValue) ?? null), p = r(() => i.triggerClass ? "flex items-center justify-between gap-2 text-left transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed " + i.triggerClass : "flex items-center justify-between gap-2 text-left transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed rounded-lg border text-sm border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 text-slate-700 dark:text-slate-100 hover:bg-slate-50 dark:hover:bg-slate-800 " + (i.size === "sm" ? "px-3 py-2" : "px-4 py-2.5"));
2564
2566
  function _(e) {
2565
2567
  return `block w-full px-4 py-2 text-left text-sm transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500 disabled:opacity-50 disabled:cursor-not-allowed ${e.value === i.modelValue ? "bg-emerald-500 text-white" : "text-slate-700 dark:text-slate-200 hover:bg-slate-100 dark:hover:bg-slate-800"}`;
2566
2568
  }
2567
2569
  function v() {
2568
2570
  i.disabled || (l.value = !l.value);
2569
2571
  }
2570
- function S(e) {
2572
+ function b(e) {
2571
2573
  e.disabled || (c("update:modelValue", e.value), l.value = !1);
2572
2574
  }
2573
2575
  Y(() => {
@@ -2588,15 +2590,15 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2588
2590
  "aria-haspopup": "listbox",
2589
2591
  "aria-expanded": l.value,
2590
2592
  onClick: v
2591
- }, [s("span", { class: m(["min-w-0 truncate", f.value ? "" : "text-slate-400 dark:text-slate-500"]) }, T(f.value ? f.value.label : t.placeholder), 3), u(E(ce), {
2592
- class: m(["w-5 h-5 shrink-0 text-slate-500 dark:text-slate-400 transition-transform", l.value ? "rotate-180" : ""]),
2593
+ }, [s("span", { class: m(["min-w-0 truncate", f.value ? "" : "text-slate-400 dark:text-slate-500"]) }, E(f.value ? f.value.label : t.placeholder), 3), u(D(le), {
2594
+ class: m(["shrink-0 transition-transform", [t.chevronClass, l.value ? "rotate-180" : ""]]),
2593
2595
  "aria-hidden": "true"
2594
- }, null, 8, ["class"])], 10, Tr), l.value ? (y(), o("ul", {
2596
+ }, null, 8, ["class"])], 10, Er), l.value ? (y(), o("ul", {
2595
2597
  key: 0,
2596
2598
  role: "listbox",
2597
2599
  "aria-label": t.ariaLabel || t.placeholder,
2598
2600
  class: "absolute z-20 mt-1 w-full min-w-max max-w-xs max-h-60 overflow-auto rounded-lg border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 py-1 shadow-lg focus:outline-none"
2599
- }, [(y(!0), o(e, null, x(t.options, (e) => (y(), o("li", {
2601
+ }, [(y(!0), o(e, null, S(t.options, (e) => (y(), o("li", {
2600
2602
  key: String(e.value),
2601
2603
  role: "option",
2602
2604
  "aria-selected": e.value === t.modelValue,
@@ -2605,14 +2607,14 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2605
2607
  type: "button",
2606
2608
  disabled: e.disabled,
2607
2609
  class: m(_(e)),
2608
- onClick: (t) => S(e)
2609
- }, T(e.label), 11, Or)], 8, Dr))), 128))], 8, Er)) : a("", !0)], 2));
2610
+ onClick: (t) => b(e)
2611
+ }, E(e.label), 11, kr)], 8, Or))), 128))], 8, Dr)) : a("", !0)], 2));
2610
2612
  }
2611
- }), Ar = ["role", "aria-label"], jr = [
2613
+ }), jr = ["role", "aria-label"], Mr = [
2612
2614
  "aria-pressed",
2613
2615
  "title",
2614
2616
  "onClick"
2615
- ], Mr = "bg-slate-50 dark:bg-slate-900 text-slate-600 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-800", Nr = /* @__PURE__ */ d({
2617
+ ], Nr = "bg-slate-50 dark:bg-slate-900 text-slate-600 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-800", Pr = /* @__PURE__ */ d({
2616
2618
  __name: "BaseSegmentedControl",
2617
2619
  props: {
2618
2620
  options: {},
@@ -2629,22 +2631,22 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2629
2631
  let i = t, a = n, s = r(() => i.variant === "toolbar" ? "inline-flex h-9 divide-x divide-slate-300 dark:divide-slate-600 rounded-md border border-slate-300 dark:border-slate-600 overflow-hidden" : "inline-flex rounded border border-slate-300 dark:border-slate-600 overflow-hidden"), c = r(() => i.variant === "toolbar" ? "flex items-center px-3.5 text-xs font-semibold uppercase tracking-wide transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500" : `${i.variant === "wide" ? "px-4 py-2" : "px-3 py-2"} text-sm font-medium transition-colors cursor-pointer border-l first:border-l-0 border-slate-300 dark:border-slate-600 focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500`), l = r(() => i.variant === "wide" ? "bg-emerald-600 text-white" : "bg-emerald-500 text-white");
2630
2632
  function u(e) {
2631
2633
  let t = e.value === i.modelValue;
2632
- return i.optionClass ? i.optionClass(e, t) : t ? l.value : Mr;
2634
+ return i.optionClass ? i.optionClass(e, t) : t ? l.value : Nr;
2633
2635
  }
2634
2636
  return (n, r) => (y(), o("div", {
2635
2637
  role: t.ariaLabel ? "group" : void 0,
2636
2638
  "aria-label": t.ariaLabel || void 0,
2637
2639
  class: m(s.value)
2638
- }, [(y(!0), o(e, null, x(t.options, (e) => (y(), o("button", {
2640
+ }, [(y(!0), o(e, null, S(t.options, (e) => (y(), o("button", {
2639
2641
  key: String(e.value),
2640
2642
  type: "button",
2641
2643
  class: m([c.value, u(e)]),
2642
2644
  "aria-pressed": e.value === t.modelValue,
2643
2645
  title: e.title,
2644
2646
  onClick: (t) => a("update:modelValue", e.value)
2645
- }, T(e.label), 11, jr))), 128))], 10, Ar));
2647
+ }, E(e.label), 11, Mr))), 128))], 10, jr));
2646
2648
  }
2647
- }), Pr = { class: "w-full text-sm" }, Fr = { class: "bg-slate-50 dark:bg-slate-800/60 text-slate-600 dark:text-slate-300" }, Ir = { class: "text-left" }, Lr = { key: 0 }, Rr = ["colspan"], zr = /* @__PURE__ */ d({
2649
+ }), Fr = { class: "w-full text-sm" }, Ir = { class: "bg-slate-50 dark:bg-slate-800/60 text-slate-600 dark:text-slate-300" }, Lr = { class: "text-left" }, Rr = { key: 0 }, zr = ["colspan"], Br = /* @__PURE__ */ d({
2648
2650
  __name: "BaseTable",
2649
2651
  props: {
2650
2652
  columns: {},
@@ -2655,24 +2657,24 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2655
2657
  emptyText: { default: "No rows." }
2656
2658
  },
2657
2659
  setup(t) {
2658
- return (n, r) => (y(), o("table", Pr, [s("thead", Fr, [s("tr", Ir, [(y(!0), o(e, null, x(t.columns, (e, t) => (y(), o("th", {
2660
+ return (n, r) => (y(), o("table", Fr, [s("thead", Ir, [s("tr", Lr, [(y(!0), o(e, null, S(t.columns, (e, t) => (y(), o("th", {
2659
2661
  key: t,
2660
2662
  class: m(["px-4 py-3", e.align === "right" ? "text-right" : ""])
2661
- }, T(e.label), 3))), 128))])]), s("tbody", null, [t.empty ? (y(), o("tr", Lr, [s("td", {
2663
+ }, E(e.label), 3))), 128))])]), s("tbody", null, [t.empty ? (y(), o("tr", Rr, [s("td", {
2662
2664
  colspan: t.columns.length,
2663
2665
  class: "px-4 py-12 text-center text-slate-500"
2664
- }, [S(n.$slots, "empty", {}, () => [l(T(t.emptyText), 1)])], 8, Rr)])) : a("", !0), S(n.$slots, "default")])]));
2666
+ }, [C(n.$slots, "empty", {}, () => [l(E(t.emptyText), 1)])], 8, zr)])) : a("", !0), C(n.$slots, "default")])]));
2665
2667
  }
2666
- }), Br = { class: "grid gap-3 md:grid-cols-2" }, Vr = {
2668
+ }), Vr = { class: "grid gap-3 md:grid-cols-2" }, Hr = {
2667
2669
  key: 0,
2668
2670
  class: "block text-[11px] uppercase tracking-wide text-slate-500 mb-1"
2669
- }, Hr = ["value"], Ur = {
2671
+ }, Ur = ["value"], Wr = {
2670
2672
  key: 2,
2671
2673
  class: "flex items-center gap-2 mt-4"
2672
- }, Wr = ["checked", "onChange"], Gr = { class: "text-sm text-slate-900 dark:text-slate-100" }, Kr = {
2674
+ }, Gr = ["checked", "onChange"], Kr = { class: "text-sm text-slate-900 dark:text-slate-100" }, qr = {
2673
2675
  key: 4,
2674
2676
  class: "text-[11px] text-slate-400 mt-1"
2675
- }, qr = /* @__PURE__ */ d({
2677
+ }, Jr = /* @__PURE__ */ d({
2676
2678
  __name: "BaseSpecFields",
2677
2679
  props: {
2678
2680
  specs: {},
@@ -2688,24 +2690,24 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2688
2690
  let n = parseFloat(t);
2689
2691
  r("update", e, Number.isNaN(n) ? t : n);
2690
2692
  }
2691
- return (n, u) => (y(), o("div", Br, [(y(!0), o(e, null, x(t.specs, (u) => (y(), o("div", { key: u.key }, [
2692
- u.type === "boolean" ? a("", !0) : (y(), o("label", Vr, T(u.label), 1)),
2693
- u.type === "select" ? (y(), i(wr, {
2693
+ return (n, u) => (y(), o("div", Vr, [(y(!0), o(e, null, S(t.specs, (u) => (y(), o("div", { key: u.key }, [
2694
+ u.type === "boolean" ? a("", !0) : (y(), o("label", Hr, E(u.label), 1)),
2695
+ u.type === "select" ? (y(), i(Tr, {
2694
2696
  key: 1,
2695
2697
  modelValue: String(t.params[u.key] ?? ""),
2696
2698
  "onUpdate:modelValue": (e) => r("update", u.key, e)
2697
2699
  }, {
2698
- default: M(() => [(y(!0), o(e, null, x(u.options ?? [], (e) => (y(), o("option", {
2700
+ default: N(() => [(y(!0), o(e, null, S(u.options ?? [], (e) => (y(), o("option", {
2699
2701
  key: e,
2700
2702
  value: e
2701
- }, T(e), 9, Hr))), 128))]),
2703
+ }, E(e), 9, Ur))), 128))]),
2702
2704
  _: 2
2703
- }, 1032, ["modelValue", "onUpdate:modelValue"])) : u.type === "boolean" ? (y(), o("label", Ur, [s("input", {
2705
+ }, 1032, ["modelValue", "onUpdate:modelValue"])) : u.type === "boolean" ? (y(), o("label", Wr, [s("input", {
2704
2706
  checked: !!t.params[u.key],
2705
2707
  type: "checkbox",
2706
2708
  class: "h-4 w-4",
2707
2709
  onChange: (e) => c(u.key, e)
2708
- }, null, 40, Wr), s("span", Gr, T(u.label), 1)])) : (y(), i(Sr, {
2710
+ }, null, 40, Gr), s("span", Kr, E(u.label), 1)])) : (y(), i($, {
2709
2711
  key: 3,
2710
2712
  modelValue: t.params[u.key],
2711
2713
  type: "number",
@@ -2718,11 +2720,11 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2718
2720
  "min",
2719
2721
  "onUpdate:modelValue"
2720
2722
  ])),
2721
- u.help ? (y(), o("p", Kr, T(u.help), 1)) : a("", !0),
2722
- S(n.$slots, "after", { spec: u })
2723
+ u.help ? (y(), o("p", qr, E(u.help), 1)) : a("", !0),
2724
+ C(n.$slots, "after", { spec: u })
2723
2725
  ]))), 128))]));
2724
2726
  }
2725
- }), Jr = { class: "mt-1.5 space-y-0.5 px-1" }, Yr = { class: "text-slate-400 dark:text-slate-500" }, Xr = /* @__PURE__ */ d({
2727
+ }), Yr = { class: "mt-1.5 space-y-0.5 px-1" }, Xr = { class: "text-slate-400 dark:text-slate-500" }, Zr = /* @__PURE__ */ d({
2726
2728
  __name: "BaseStatBreakdown",
2727
2729
  props: {
2728
2730
  items: {},
@@ -2741,17 +2743,218 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2741
2743
  function i(e) {
2742
2744
  return !n.signed || e == null ? "text-slate-500 dark:text-slate-400" : e >= 0 ? "text-emerald-600 dark:text-emerald-400" : "text-red-600 dark:text-red-400";
2743
2745
  }
2744
- return (n, a) => (y(), o("div", Jr, [(y(!0), o(e, null, x(t.items, (e) => (y(), o("div", {
2746
+ return (n, a) => (y(), o("div", Yr, [(y(!0), o(e, null, S(t.items, (e) => (y(), o("div", {
2745
2747
  key: e.label,
2746
2748
  class: "flex items-center justify-between text-[11px]"
2747
- }, [s("span", Yr, T(e.label), 1), s("span", { class: m(["font-mono tabular-nums font-medium", i(e.value)]) }, T(r(e.value)), 3)]))), 128))]));
2749
+ }, [s("span", Xr, E(e.label), 1), s("span", { class: m(["font-mono tabular-nums font-medium", i(e.value)]) }, E(r(e.value)), 3)]))), 128))]));
2750
+ }
2751
+ }), Qr = [
2752
+ "disabled",
2753
+ "title",
2754
+ "aria-pressed"
2755
+ ], $r = /* @__PURE__ */ d({
2756
+ __name: "BaseFilterChip",
2757
+ props: {
2758
+ label: { default: "" },
2759
+ color: { default: "slate" },
2760
+ active: {
2761
+ type: Boolean,
2762
+ default: !1
2763
+ },
2764
+ disabled: {
2765
+ type: Boolean,
2766
+ default: !1
2767
+ },
2768
+ title: { default: void 0 }
2769
+ },
2770
+ setup(e) {
2771
+ let t = {
2772
+ emerald: "border-emerald-300 dark:border-emerald-700/60 bg-emerald-50 dark:bg-emerald-900/20 text-emerald-700 dark:text-emerald-400 hover:bg-emerald-100 dark:hover:bg-emerald-900/30 focus-visible:ring-emerald-500",
2773
+ sky: "border-sky-300 dark:border-sky-700/60 bg-sky-50 dark:bg-sky-900/20 text-sky-700 dark:text-sky-400 hover:bg-sky-100 dark:hover:bg-sky-900/30 focus-visible:ring-sky-500",
2774
+ amber: "border-amber-300 dark:border-amber-700/60 bg-amber-50 dark:bg-amber-900/20 text-amber-700 dark:text-amber-400 hover:bg-amber-100 dark:hover:bg-amber-900/30 focus-visible:ring-amber-500",
2775
+ red: "border-red-300 dark:border-red-700/60 bg-red-50 dark:bg-red-900/20 text-red-700 dark:text-red-400 hover:bg-red-100 dark:hover:bg-red-900/30 focus-visible:ring-red-500",
2776
+ slate: "border-slate-300 dark:border-slate-600 bg-slate-50 dark:bg-slate-900 text-slate-600 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-800 focus-visible:ring-emerald-500"
2777
+ }, n = {
2778
+ emerald: "border-emerald-500 bg-emerald-500 text-white hover:bg-emerald-600 focus-visible:ring-emerald-500",
2779
+ sky: "border-sky-500 bg-sky-500 text-white hover:bg-sky-600 focus-visible:ring-sky-500",
2780
+ amber: "border-amber-500 bg-amber-500 text-white hover:bg-amber-600 focus-visible:ring-amber-500",
2781
+ red: "border-red-500 bg-red-500 text-white hover:bg-red-600 focus-visible:ring-red-500",
2782
+ slate: "border-slate-600 bg-slate-600 text-white hover:bg-slate-700 focus-visible:ring-emerald-500"
2783
+ };
2784
+ return (r, i) => (y(), o("button", {
2785
+ type: "button",
2786
+ disabled: e.disabled,
2787
+ title: e.title,
2788
+ "aria-pressed": e.active,
2789
+ class: m(["whitespace-nowrap rounded-md border px-3 text-sm font-semibold text-center transition-colors focus:outline-none focus-visible:ring-2 disabled:opacity-50 disabled:cursor-not-allowed", e.active ? n[e.color] : t[e.color]])
2790
+ }, [C(r.$slots, "default", {}, () => [l(E(e.label), 1)])], 10, Qr));
2791
+ }
2792
+ }), ei = { class: "flex items-center justify-between mb-4" }, ti = { class: "text-lg font-semibold text-slate-900 dark:text-slate-100" }, ni = {
2793
+ key: 0,
2794
+ class: "text-xs text-slate-500 dark:text-slate-400"
2795
+ }, ri = {
2796
+ key: 0,
2797
+ class: "inline-flex items-center gap-2 text-xs text-slate-500"
2798
+ }, ii = { class: "grid gap-4 md:grid-cols-2" }, ai = { class: "md:col-span-2" }, oi = ["for"], si = { class: "md:col-span-2" }, ci = ["for"], li = { class: "text-[11px] text-slate-500 mt-1" }, ui = { class: "md:col-span-2" }, di = ["for"], fi = { class: "md:col-span-2" }, pi = ["for"], mi = { class: "md:col-span-2" }, hi = "placeholder:text-slate-400 dark:placeholder:text-slate-500 font-mono", gi = /* @__PURE__ */ d({
2799
+ __name: "BaseCredentialsForm",
2800
+ props: {
2801
+ title: {},
2802
+ subtitle: { default: "" },
2803
+ idPrefix: {},
2804
+ keyLabel: { default: "API Key" },
2805
+ keyPlaceholder: { default: "" },
2806
+ secretLabel: { default: "Secret Key" },
2807
+ secretPlaceholder: { default: "Enter secret key" },
2808
+ secretSetHint: { default: "A secret is currently set. Leave blank to keep it." },
2809
+ permissionsHint: { default: "" },
2810
+ requiredKeyMessage: { default: "API key is required." },
2811
+ requiredSecretMessage: { default: "Secret key is required." },
2812
+ savedMessage: { default: "Credentials saved." },
2813
+ saveLabel: { default: "Save credentials" },
2814
+ fetchFn: {},
2815
+ updateFn: {},
2816
+ defaults: {}
2817
+ },
2818
+ emits: [
2819
+ "saved",
2820
+ "error",
2821
+ "load-error"
2822
+ ],
2823
+ setup(t, { expose: n, emit: r }) {
2824
+ let c = t, d = r, f = x(!1), p = x(!1), h = b({
2825
+ keyId: "",
2826
+ secretKey: "",
2827
+ baseUrl: c.defaults.baseUrl,
2828
+ dataUrl: c.defaults.dataUrl
2829
+ });
2830
+ async function _() {
2831
+ try {
2832
+ let e = await c.fetchFn();
2833
+ h.keyId = e.keyId ?? "", h.baseUrl = e.baseUrl || c.defaults.baseUrl, h.dataUrl = e.dataUrl || c.defaults.dataUrl, h.secretKey = "", p.value = e.hasSecret;
2834
+ } catch (e) {
2835
+ d("load-error", e instanceof Error ? e.message : "");
2836
+ }
2837
+ }
2838
+ function v(e) {
2839
+ return !e || !e.trim();
2840
+ }
2841
+ async function S() {
2842
+ if (!f.value) {
2843
+ if (v(h.keyId)) {
2844
+ d("error", c.requiredKeyMessage);
2845
+ return;
2846
+ }
2847
+ if (!p.value && v(h.secretKey)) {
2848
+ d("error", c.requiredSecretMessage);
2849
+ return;
2850
+ }
2851
+ if (v(h.baseUrl) || v(h.dataUrl)) {
2852
+ d("error", "Base URL and Data URL are required.");
2853
+ return;
2854
+ }
2855
+ f.value = !0;
2856
+ try {
2857
+ p.value = (await c.updateFn({
2858
+ keyId: h.keyId.trim(),
2859
+ secretKey: v(h.secretKey) ? void 0 : h.secretKey.trim(),
2860
+ baseUrl: h.baseUrl.trim(),
2861
+ dataUrl: h.dataUrl.trim()
2862
+ })).hasSecret, h.secretKey = "", d("saved", c.savedMessage);
2863
+ } catch (e) {
2864
+ d("error", e instanceof Error ? e.message : "Failed to save");
2865
+ } finally {
2866
+ f.value = !1;
2867
+ }
2868
+ }
2869
+ }
2870
+ return g(_), n({ load: _ }), (n, r) => (y(), i(ot, { class: "!p-6" }, {
2871
+ default: N(() => [
2872
+ s("div", ei, [s("div", null, [s("h2", ti, E(t.title), 1), t.subtitle ? (y(), o("p", ni, E(t.subtitle), 1)) : a("", !0)]), f.value ? (y(), o("span", ri, [u(st, { class: "!h-4 !w-4" }), r[4] ||= l(" Saving… ", -1)])) : a("", !0)]),
2873
+ s("div", ii, [
2874
+ s("div", ai, [s("label", {
2875
+ for: `${t.idPrefix}-key-id`,
2876
+ class: "block text-xs uppercase tracking-wide text-slate-500 mb-1"
2877
+ }, E(t.keyLabel), 9, oi), u($, {
2878
+ id: `${t.idPrefix}-key-id`,
2879
+ modelValue: h.keyId,
2880
+ "onUpdate:modelValue": r[0] ||= (e) => h.keyId = e,
2881
+ type: "text",
2882
+ autocomplete: "off",
2883
+ placeholder: t.keyPlaceholder,
2884
+ class: m(hi)
2885
+ }, null, 8, [
2886
+ "id",
2887
+ "modelValue",
2888
+ "placeholder"
2889
+ ])]),
2890
+ s("div", si, [
2891
+ s("label", {
2892
+ for: `${t.idPrefix}-secret`,
2893
+ class: "block text-xs uppercase tracking-wide text-slate-500 mb-1"
2894
+ }, E(t.secretLabel), 9, ci),
2895
+ u($, {
2896
+ id: `${t.idPrefix}-secret`,
2897
+ modelValue: h.secretKey,
2898
+ "onUpdate:modelValue": r[1] ||= (e) => h.secretKey = e,
2899
+ type: "password",
2900
+ autocomplete: "new-password",
2901
+ placeholder: p.value ? "•••••••• (unchanged — type to replace)" : t.secretPlaceholder,
2902
+ class: m(hi)
2903
+ }, null, 8, [
2904
+ "id",
2905
+ "modelValue",
2906
+ "placeholder"
2907
+ ]),
2908
+ s("p", li, [p.value ? (y(), o(e, { key: 0 }, [l(E(t.secretSetHint), 1)], 64)) : C(n.$slots, "no-secret-hint", { key: 1 }, () => [l(E(t.permissionsHint), 1)])])
2909
+ ]),
2910
+ s("div", ui, [
2911
+ s("label", {
2912
+ for: `${t.idPrefix}-base-url`,
2913
+ class: "block text-xs uppercase tracking-wide text-slate-500 mb-1"
2914
+ }, "Base URL (trading)", 8, di),
2915
+ u($, {
2916
+ id: `${t.idPrefix}-base-url`,
2917
+ modelValue: h.baseUrl,
2918
+ "onUpdate:modelValue": r[2] ||= (e) => h.baseUrl = e,
2919
+ type: "text",
2920
+ class: m(hi)
2921
+ }, null, 8, ["id", "modelValue"]),
2922
+ C(n.$slots, "base-url-extra", { form: h })
2923
+ ]),
2924
+ s("div", fi, [s("label", {
2925
+ for: `${t.idPrefix}-data-url`,
2926
+ class: "block text-xs uppercase tracking-wide text-slate-500 mb-1"
2927
+ }, "Data URL (market data)", 8, pi), u($, {
2928
+ id: `${t.idPrefix}-data-url`,
2929
+ modelValue: h.dataUrl,
2930
+ "onUpdate:modelValue": r[3] ||= (e) => h.dataUrl = e,
2931
+ type: "text",
2932
+ class: m(hi)
2933
+ }, null, 8, ["id", "modelValue"])]),
2934
+ s("div", mi, [u(U, {
2935
+ color: D(V).GREEN,
2936
+ description: t.saveLabel,
2937
+ isDisable: f.value,
2938
+ isLoading: f.value,
2939
+ onClick: S
2940
+ }, null, 8, [
2941
+ "color",
2942
+ "description",
2943
+ "isDisable",
2944
+ "isLoading"
2945
+ ])])
2946
+ ]),
2947
+ C(n.$slots, "footer")
2948
+ ]),
2949
+ _: 3
2950
+ }));
2748
2951
  }
2749
2952
  });
2750
2953
  //#endregion
2751
2954
  //#region src/composables/useDebounce.ts
2752
- function Zr(e, t = 300) {
2753
- let n = b(e.value), r = null;
2754
- return j(e, (e) => {
2955
+ function _i(e, t = 300) {
2956
+ let n = x(e.value), r = null;
2957
+ return M(e, (e) => {
2755
2958
  r && clearTimeout(r), r = setTimeout(() => {
2756
2959
  n.value = e, r = null;
2757
2960
  }, t);
@@ -2761,8 +2964,8 @@ function Zr(e, t = 300) {
2761
2964
  }
2762
2965
  //#endregion
2763
2966
  //#region src/composables/useToast.ts
2764
- function Qr(e = 3e3) {
2765
- let t = b(!1), n = b(""), r = b(K.SUCCESS), i = null;
2967
+ function vi(e = 3e3) {
2968
+ let t = x(!1), n = x(""), r = x(K.SUCCESS), i = null;
2766
2969
  function a() {
2767
2970
  i &&= (clearTimeout(i), null);
2768
2971
  }
@@ -2781,52 +2984,74 @@ function Qr(e = 3e3) {
2781
2984
  };
2782
2985
  }
2783
2986
  //#endregion
2987
+ //#region src/composables/useQueryParamSync.ts
2988
+ function yi() {
2989
+ let e = we(), t = Te();
2990
+ function n(t) {
2991
+ let n = e.query[t];
2992
+ return typeof n == "string" ? n : "";
2993
+ }
2994
+ function r(e, t, r) {
2995
+ let i = n(e);
2996
+ return t.includes(i) ? i : r;
2997
+ }
2998
+ function i(n) {
2999
+ let r = e.query;
3000
+ Object.keys(n).length === Object.keys(r).length && Object.entries(n).every(([e, t]) => r[e] === t) || t.replace({ query: n });
3001
+ }
3002
+ return {
3003
+ qparam: n,
3004
+ qenum: r,
3005
+ replaceQuery: i
3006
+ };
3007
+ }
3008
+ //#endregion
2784
3009
  //#region src/enums/BaseBadgeEnum.ts
2785
- var $r = /* @__PURE__ */ function(e) {
3010
+ var bi = /* @__PURE__ */ function(e) {
2786
3011
  return e.WIN = "WIN", e.LOSE = "LOSE", e;
2787
3012
  }({});
2788
3013
  //#endregion
2789
3014
  //#region src/utils/util.ts
2790
- function ei(e) {
3015
+ function xi(e) {
2791
3016
  let t = "red";
2792
3017
  switch (e) {
2793
- case L.ERROR:
3018
+ case I.ERROR:
2794
3019
  t = "red";
2795
3020
  break;
2796
- case L.SUCCESS:
3021
+ case I.SUCCESS:
2797
3022
  t = "green";
2798
3023
  break;
2799
- case L.INFO:
3024
+ case I.INFO:
2800
3025
  t = "gray";
2801
3026
  break;
2802
- case L.WARNING:
3027
+ case I.WARNING:
2803
3028
  t = "yellow";
2804
3029
  break;
2805
3030
  }
2806
3031
  return t;
2807
3032
  }
2808
- function ti(e) {
3033
+ function Si(e) {
2809
3034
  let t = "red";
2810
3035
  switch (e) {
2811
- case V.GREEN:
3036
+ case B.GREEN:
2812
3037
  t = "green";
2813
3038
  break;
2814
- case V.RED:
3039
+ case B.RED:
2815
3040
  t = "red";
2816
3041
  break;
2817
- case V.BLUE:
3042
+ case B.BLUE:
2818
3043
  t = "blue";
2819
3044
  break;
2820
- case V.YELLOW:
3045
+ case B.YELLOW:
2821
3046
  t = "yellow";
2822
3047
  break;
2823
- case V.BLACK:
3048
+ case B.BLACK:
2824
3049
  t = "black";
2825
3050
  break;
2826
- case V.GRAY:
3051
+ case B.GRAY:
2827
3052
  t = "gray";
2828
3053
  break;
2829
- case V.NONE:
3054
+ case B.NONE:
2830
3055
  t = "";
2831
3056
  break;
2832
3057
  }
@@ -2834,14 +3059,14 @@ function ti(e) {
2834
3059
  }
2835
3060
  //#endregion
2836
3061
  //#region src/utils/httpColors.ts
2837
- var ni = {
3062
+ var Ci = {
2838
3063
  GET: "bg-blue-600",
2839
3064
  POST: "bg-emerald-600",
2840
3065
  PUT: "bg-amber-600",
2841
3066
  DELETE: "bg-red-600",
2842
3067
  PATCH: "bg-purple-600",
2843
3068
  HEAD: "bg-gray-600"
2844
- }, ri = {
3069
+ }, wi = {
2845
3070
  GET: "bg-blue-500",
2846
3071
  POST: "bg-green-500",
2847
3072
  PUT: "bg-yellow-500",
@@ -2849,23 +3074,23 @@ var ni = {
2849
3074
  PATCH: "bg-purple-500",
2850
3075
  HEAD: "bg-gray-500"
2851
3076
  };
2852
- function ii(e) {
2853
- return e ? ni[e.toUpperCase()] ?? "bg-gray-600" : "bg-gray-600";
3077
+ function Ti(e) {
3078
+ return e ? Ci[e.toUpperCase()] ?? "bg-gray-600" : "bg-gray-600";
2854
3079
  }
2855
- function ai(e) {
2856
- return e ? ri[e.toUpperCase()] ?? "bg-gray-500" : "bg-gray-500";
3080
+ function Ei(e) {
3081
+ return e ? wi[e.toUpperCase()] ?? "bg-gray-500" : "bg-gray-500";
2857
3082
  }
2858
- function oi(e) {
3083
+ function Di(e) {
2859
3084
  let t = e ?? 0;
2860
3085
  return t >= 200 && t < 300 ? "bg-emerald-600" : t >= 300 && t < 400 ? "bg-blue-600" : t >= 400 && t < 500 ? "bg-amber-600" : t >= 500 ? "bg-red-600" : "bg-gray-600";
2861
3086
  }
2862
- function si(e, t) {
3087
+ function Oi(e, t) {
2863
3088
  let n = e ?? 200;
2864
3089
  return t ? n >= 200 && n < 300 ? "bg-green-500/15 text-green-400" : n >= 300 && n < 400 ? "bg-blue-500/15 text-blue-400" : n >= 400 && n < 500 ? "bg-yellow-500/15 text-yellow-400" : "bg-red-500/15 text-red-400" : n >= 200 && n < 300 ? "bg-green-100 text-green-800" : n >= 300 && n < 400 ? "bg-blue-100 text-blue-800" : n >= 400 && n < 500 ? "bg-yellow-100 text-yellow-800" : "bg-red-100 text-red-800";
2865
3090
  }
2866
3091
  //#endregion
2867
3092
  //#region src/utils/sanitizeHtml.ts
2868
- var ci = /* @__PURE__ */ new Set([
3093
+ var ki = /* @__PURE__ */ new Set([
2869
3094
  "A",
2870
3095
  "B",
2871
3096
  "STRONG",
@@ -2880,7 +3105,7 @@ var ci = /* @__PURE__ */ new Set([
2880
3105
  "LI",
2881
3106
  "SPAN",
2882
3107
  "DIV"
2883
- ]), li = /* @__PURE__ */ new Set([
3108
+ ]), Ai = /* @__PURE__ */ new Set([
2884
3109
  "SCRIPT",
2885
3110
  "STYLE",
2886
3111
  "IFRAME",
@@ -2888,53 +3113,53 @@ var ci = /* @__PURE__ */ new Set([
2888
3113
  "EMBED",
2889
3114
  "NOSCRIPT",
2890
3115
  "TEMPLATE"
2891
- ]), ui = { A: /* @__PURE__ */ new Set(["href", "title"]) };
2892
- function di(e) {
3116
+ ]), ji = { A: /* @__PURE__ */ new Set(["href", "title"]) };
3117
+ function Mi(e) {
2893
3118
  let t = e.trim().toLowerCase();
2894
3119
  return t.startsWith("http://") || t.startsWith("https://") || t.startsWith("mailto:") || t.startsWith("tel:") || t.startsWith("/") || t.startsWith("#") || t === "";
2895
3120
  }
2896
- function fi(e) {
3121
+ function Ni(e) {
2897
3122
  if (e.nodeType !== Node.ELEMENT_NODE) return;
2898
3123
  let t = e, n = t.tagName.toUpperCase();
2899
- if (!ci.has(n)) {
2900
- li.has(n) ? t.remove() : t.replaceWith(document.createTextNode(t.textContent ?? ""));
3124
+ if (!ki.has(n)) {
3125
+ Ai.has(n) ? t.remove() : t.replaceWith(document.createTextNode(t.textContent ?? ""));
2901
3126
  return;
2902
3127
  }
2903
- let r = ui[n] ?? /* @__PURE__ */ new Set();
3128
+ let r = ji[n] ?? /* @__PURE__ */ new Set();
2904
3129
  for (let e of Array.from(t.attributes)) {
2905
3130
  if (!r.has(e.name.toLowerCase())) {
2906
3131
  t.removeAttribute(e.name);
2907
3132
  continue;
2908
3133
  }
2909
- n === "A" && e.name.toLowerCase() === "href" && !di(e.value) && t.removeAttribute(e.name);
3134
+ n === "A" && e.name.toLowerCase() === "href" && !Mi(e.value) && t.removeAttribute(e.name);
2910
3135
  }
2911
3136
  n === "A" && t.hasAttribute("href") && (t.setAttribute("rel", "noopener noreferrer"), t.setAttribute("target", "_blank"));
2912
- for (let e of Array.from(t.childNodes)) fi(e);
3137
+ for (let e of Array.from(t.childNodes)) Ni(e);
2913
3138
  }
2914
- function pi(e) {
3139
+ function Pi(e) {
2915
3140
  if (!e) return "";
2916
3141
  let t = new DOMParser().parseFromString(`<div>${e}</div>`, "text/html").body.firstElementChild;
2917
3142
  if (!t) return "";
2918
- for (let e of Array.from(t.childNodes)) fi(e);
3143
+ for (let e of Array.from(t.childNodes)) Ni(e);
2919
3144
  return t.innerHTML;
2920
3145
  }
2921
3146
  //#endregion
2922
3147
  //#region src/utils/format.ts
2923
- var mi = "—";
2924
- function hi(e, t = 4) {
2925
- if (e == null || typeof e == "string" && e.trim() === "") return mi;
3148
+ var Fi = "—";
3149
+ function Ii(e, t = 4) {
3150
+ if (e == null || typeof e == "string" && e.trim() === "") return Fi;
2926
3151
  let n = typeof e == "string" ? Number(e) : e;
2927
3152
  return isFinite(n) ? n.toLocaleString(void 0, {
2928
3153
  minimumFractionDigits: t,
2929
3154
  maximumFractionDigits: t
2930
- }) : mi;
3155
+ }) : Fi;
2931
3156
  }
2932
- function gi(e) {
2933
- if (e == null || e === "") return mi;
3157
+ function Li(e) {
3158
+ if (e == null || e === "") return Fi;
2934
3159
  let t = new Date(e);
2935
3160
  return isNaN(t.getTime()) ? String(e) : t.toLocaleString();
2936
3161
  }
2937
- function _i(e) {
3162
+ function Ri(e) {
2938
3163
  return new Date(e).toLocaleString(void 0, {
2939
3164
  month: "short",
2940
3165
  day: "numeric",
@@ -2942,13 +3167,29 @@ function _i(e) {
2942
3167
  minute: "2-digit"
2943
3168
  });
2944
3169
  }
2945
- function vi(e) {
3170
+ function zi(e) {
2946
3171
  return new Date(e).toLocaleDateString(void 0, {
2947
3172
  month: "short",
2948
3173
  day: "numeric"
2949
3174
  });
2950
3175
  }
2951
- function yi(e) {
3176
+ function Bi(e) {
3177
+ try {
3178
+ return new Date(e).toLocaleString(void 0, {
3179
+ year: "numeric",
3180
+ month: "2-digit",
3181
+ day: "2-digit",
3182
+ hour: "2-digit",
3183
+ minute: "2-digit",
3184
+ second: "2-digit",
3185
+ fractionalSecondDigits: 3,
3186
+ hour12: !1
3187
+ });
3188
+ } catch {
3189
+ return String(e);
3190
+ }
3191
+ }
3192
+ function Vi(e) {
2952
3193
  if (!isFinite(e) || e === 0) return e.toFixed(2);
2953
3194
  let t = Math.abs(e), n = 2;
2954
3195
  return t < 1e-4 ? n = 8 : t < .01 ? n = 6 : t < 1 ? n = 4 : t < 100 && (n = 3), e.toLocaleString(void 0, {
@@ -2956,20 +3197,40 @@ function yi(e) {
2956
3197
  maximumFractionDigits: n
2957
3198
  });
2958
3199
  }
2959
- function bi(e, t = 2) {
3200
+ function Hi(e, t = 2) {
2960
3201
  return `${e >= 0 ? "+" : ""}${e.toFixed(t)}%`;
2961
3202
  }
2962
- function xi(e) {
3203
+ function Ui(e) {
2963
3204
  return `${e < 0 ? "-" : "+"}$${Math.abs(e).toFixed(2)}`;
2964
3205
  }
2965
- function Si(e, t = 2) {
2966
- if (e == null || !isFinite(e)) return mi;
3206
+ function Wi(e, t = 2) {
3207
+ if (e == null || !isFinite(e)) return Fi;
2967
3208
  let n = Math.floor(Math.max(0, e) / 6e4), r = Math.floor(n / 1440), i = Math.floor(n % 1440 / 60), a = n % 60, o = [];
2968
3209
  return r > 0 && o.push(`${r}d`), (r > 0 || i > 0) && o.push(`${i}h`), o.push(`${a}m`), o.slice(0, t).join(" ");
2969
3210
  }
2970
3211
  //#endregion
3212
+ //#region src/utils/specForm.ts
3213
+ function Gi(e, t) {
3214
+ let n = {};
3215
+ if (!e) return n;
3216
+ for (let r of e) {
3217
+ let e = t[r.key];
3218
+ n[r.key] = e ?? r.default;
3219
+ }
3220
+ return n;
3221
+ }
3222
+ function Ki(e, t) {
3223
+ if (!e) return null;
3224
+ for (let n of e) if (n.type === "decimal" || n.type === "integer") {
3225
+ let e = t[n.key], r = e === "" || e == null;
3226
+ if (n.default === null && r) continue;
3227
+ if (typeof e != "number" || Number.isNaN(e)) return n.label;
3228
+ }
3229
+ return null;
3230
+ }
3231
+ //#endregion
2971
3232
  //#region src/utils/pnl.ts
2972
- function Ci(e) {
3233
+ function qi(e) {
2973
3234
  if (e.buyPrice == null || e.lastPrice == null || e.filledQty == null) return {
2974
3235
  pnlUsd: null,
2975
3236
  pnlPct: null
@@ -2984,4 +3245,4 @@ function Ci(e) {
2984
3245
  };
2985
3246
  }
2986
3247
  //#endregion
2987
- export { L as AlertEnum, Un as BaseActionButton, ke as BaseAlert, Nn as BaseAppLayout, je as BaseBadge, $r as BaseBadgeEnum, Fe as BaseBreadcrumb, We as BaseButton, H as BaseButtonEnum, U as BaseButtonSizeEnum, gr as BaseChipButton, Vt as BaseCollapsibleSection, Gt as BaseConfirmModal, Gn as BaseCopyButton, kr as BaseDropdown, An as BaseEntityPickerModal, Yn as BaseGoogleSignInButton, Sr as BaseInput, Je as BaseLine, Ye as BaseLoginEnum, sr as BaseLoginForm, Ze as BaseLogo, G as BaseLogoEnum, it as BaseModal, Qe as BaseModalEnum, Rt as BaseModalShell, Qt as BaseNotFoundPage, mr as BaseNotificationPanel, Ln as BasePageHeader, _r as BaseRemoveButton, at as BaseRow, Nr as BaseSegmentedControl, wr as BaseSelect, _n as BaseSidebar, qr as BaseSpecFields, ot as BaseSpinner, Xr as BaseStatBreakdown, br as BaseStatusPill, zr as BaseTable, Yt as BaseTextInputModal, lt as BaseToast, K as BaseToastEnum, Bn as BaseToolbarButton, dt as ColoredSquares, V as ColorsEnums, mt as EarningsCard, yt as EuroAmount, W as LineEnum, wt as Pagination, q as PositioningEnum, kt as TrendArrow, Ci as computePnL, gi as fmtDate, vi as fmtDateShort, _i as fmtDateTime, Si as fmtDuration, hi as fmtNumber, bi as fmtPct, yi as fmtPrice, xi as fmtUsd, ei as getBaseColor, ti as getBaseColorOf, Ee as initTheme, di as isSafeHref, ai as methodBadgeBright, ii as methodBadgeSolid, pi as sanitizeHtml, oi as statusBadgeSolid, si as statusBadgeTinted, Zr as useDebouncedRef, Y as useEscapeKey, $t as useMobileSidebar, on as useNotifications, rn as useSidebarCollapse, B as useTheme, J as useThemeClasses, Qr as useToast };
3248
+ export { I as AlertEnum, Gn as BaseActionButton, je as BaseAlert, Fn as BaseAppLayout, Ne as BaseBadge, bi as BaseBadgeEnum, Le as BaseBreadcrumb, U as BaseButton, V as BaseButtonEnum, H as BaseButtonSizeEnum, vr as BaseChipButton, Ht as BaseCollapsibleSection, Kt as BaseConfirmModal, qn as BaseCopyButton, gi as BaseCredentialsForm, Ar as BaseDropdown, Mn as BaseEntityPickerModal, $r as BaseFilterChip, Zn as BaseGoogleSignInButton, $ as BaseInput, Ye as BaseLine, Xe as BaseLoginEnum, lr as BaseLoginForm, Qe as BaseLogo, G as BaseLogoEnum, at as BaseModal, $e as BaseModalEnum, zt as BaseModalShell, $t as BaseNotFoundPage, gr as BaseNotificationPanel, zn as BasePageHeader, yr as BaseRemoveButton, ot as BaseRow, Pr as BaseSegmentedControl, Tr as BaseSelect, yn as BaseSidebar, Jr as BaseSpecFields, st as BaseSpinner, Zr as BaseStatBreakdown, Sr as BaseStatusPill, Br as BaseTable, Xt as BaseTextInputModal, ut as BaseToast, K as BaseToastEnum, Hn as BaseToolbarButton, ft as ColoredSquares, B as ColorsEnums, ht as EarningsCard, bt as EuroAmount, W as LineEnum, Tt as Pagination, q as PositioningEnum, At as TrendArrow, Gi as buildSpecParams, qi as computePnL, Ki as firstInvalidNumericSpec, Li as fmtDate, zi as fmtDateShort, Ri as fmtDateTime, Bi as fmtDateTimeMs, Wi as fmtDuration, Ii as fmtNumber, Hi as fmtPct, Vi as fmtPrice, Ui as fmtUsd, xi as getBaseColor, Si as getBaseColorOf, Oe as initTheme, Mi as isSafeHref, Ei as methodBadgeBright, Ti as methodBadgeSolid, Pi as sanitizeHtml, Di as statusBadgeSolid, Oi as statusBadgeTinted, _i as useDebouncedRef, Y as useEscapeKey, en as useMobileSidebar, cn as useNotifications, yi as useQueryParamSync, an as useSidebarCollapse, z as useTheme, J as useThemeClasses, vi as useToast };