mgv-backoffice 1.27.0 → 1.28.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,102 +1,98 @@
1
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 me, FolderIcon as he, InformationCircleIcon as ge, MagnifyingGlassIcon as _e, MinusIcon as ve, MoonIcon as ye, SunIcon as be, XMarkIcon as xe } from "@heroicons/vue/24/outline";
3
- import { HomeIcon as Se } from "@heroicons/vue/24/solid";
4
- import { useRoute as Ce, useRouter as we } from "vue-router";
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";
5
5
  //#region src/enums/AlertEnum.ts
6
- var I = /* @__PURE__ */ function(e) {
6
+ var L = /* @__PURE__ */ function(e) {
7
7
  return e.WARNING = "WARNING", e.ERROR = "ERROR", e.SUCCESS = "SUCCESS", e.INFO = "INFO", e;
8
- }({}), L = /* @__PURE__ */ function(e) {
9
- return e.NONE = "NONE", e.RED = "RED", e.YELLOW = "YELLOW", e.BLACK = "BLACK", e.GRAY = "GRAY", e.GREEN = "GREEN", e.BLUE = "BLUE", e;
10
- }({});
11
- //#endregion
12
- //#region src/utils/util.ts
8
+ }({}), R = b(!1), we = !1, z = "mgv-theme";
13
9
  function Te(e) {
14
- let t = "red";
15
- switch (e) {
16
- case I.ERROR:
17
- t = "red";
18
- break;
19
- case I.SUCCESS:
20
- t = "green";
21
- break;
22
- case I.INFO:
23
- t = "gray";
24
- break;
25
- case I.WARNING:
26
- t = "yellow";
27
- break;
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.`);
12
+ return;
28
13
  }
29
- return t;
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);
17
+ }
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");
21
+ }, { immediate: !0 });
22
+ });
30
23
  }
31
24
  function Ee(e) {
32
- let t = "red";
33
- switch (e) {
34
- case L.GREEN:
35
- t = "green";
36
- break;
37
- case L.RED:
38
- t = "red";
39
- break;
40
- case L.BLUE:
41
- t = "blue";
42
- break;
43
- case L.YELLOW:
44
- t = "yellow";
45
- break;
46
- case L.BLACK:
47
- t = "black";
48
- break;
49
- case L.GRAY:
50
- t = "gray";
51
- break;
52
- case L.NONE:
53
- t = "";
54
- break;
25
+ Te(e?.storageKey ?? z);
26
+ }
27
+ function B(e) {
28
+ Te(e?.storageKey ?? z);
29
+ function t() {
30
+ R.value = !R.value;
55
31
  }
56
- return t;
32
+ return {
33
+ isDark: R,
34
+ toggleTheme: t
35
+ };
57
36
  }
58
37
  //#endregion
59
38
  //#region src/components/BaseAlert.vue?vue&type=script&setup=true&lang.ts
60
- var De = { class: "font-medium pl-1" }, Oe = /* @__PURE__ */ d({
39
+ var De = { class: "min-w-0 flex-1" }, Oe = {
40
+ key: 0,
41
+ class: "font-medium"
42
+ }, ke = /* @__PURE__ */ d({
61
43
  __name: "BaseAlert",
62
44
  props: {
63
- title: {
64
- type: String,
65
- required: !1,
66
- default: ""
67
- },
68
- color: {
69
- type: String,
70
- required: !1,
71
- default: I.ERROR
45
+ title: { default: "" },
46
+ color: { default: L.ERROR },
47
+ compact: {
48
+ type: Boolean,
49
+ default: !1
72
50
  }
73
51
  },
74
52
  setup(e) {
75
- let t = e, n = r(() => {
53
+ let t = e, { isDark: n } = B(), c = {
54
+ [L.ERROR]: {
55
+ light: "bg-red-50 border-red-200 text-red-700",
56
+ dark: "bg-red-500/10 border-red-500/30 text-red-300"
57
+ },
58
+ [L.WARNING]: {
59
+ light: "bg-amber-50 border-amber-200 text-amber-700",
60
+ dark: "bg-amber-500/10 border-amber-500/30 text-amber-300"
61
+ },
62
+ [L.SUCCESS]: {
63
+ light: "bg-emerald-50 border-emerald-200 text-emerald-700",
64
+ dark: "bg-emerald-500/10 border-emerald-500/30 text-emerald-300"
65
+ },
66
+ [L.INFO]: {
67
+ light: "bg-sky-50 border-sky-200 text-sky-700",
68
+ dark: "bg-sky-500/10 border-sky-500/30 text-sky-300"
69
+ }
70
+ }, l = r(() => n.value ? c[t.color].dark : c[t.color].light), u = r(() => {
76
71
  switch (t.color) {
77
- case I.SUCCESS: return ae;
78
- case I.WARNING: return me;
79
- case I.INFO: return ge;
72
+ case L.SUCCESS: return ae;
73
+ case L.WARNING: return I;
74
+ case L.INFO: return he;
80
75
  default: return pe;
81
76
  }
82
- }), a = r(() => {
77
+ }), d = r(() => {
83
78
  switch (t.color) {
84
- case I.SUCCESS: return "text-green-500";
85
- case I.WARNING: return "text-yellow-500";
86
- case I.INFO: return "text-gray-500";
79
+ case L.SUCCESS: return "text-emerald-500";
80
+ case L.WARNING: return "text-amber-500";
81
+ case L.INFO: return "text-sky-500";
87
82
  default: return "text-red-500";
88
83
  }
89
84
  });
90
- function c() {
91
- let e = Te(t.color);
92
- return "flex items-center p-4 mb-4 text-sm text-" + e + "-800 border border-" + e + "-300 rounded-lg bg-" + e + "-50 dark:bg-gray-800 dark:text-" + e + "-400 dark:border-" + e + "-800";
93
- }
94
- return (t, r) => (y(), o("div", {
95
- class: m(c()),
96
- role: "alert"
97
- }, [(y(), i(w(n.value), { class: m(["w-6 h-6 flex-shrink-0", a.value]) }, null, 8, ["class"])), s("div", null, [s("span", De, T(e.title), 1)])], 2));
85
+ return (t, n) => (y(), o("div", {
86
+ role: "alert",
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), {
89
+ class: m(["shrink-0", [e.compact ? "w-4 h-4 mt-px" : "w-5 h-5 mt-0.5", d.value]]),
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));
98
92
  }
99
- }), ke = "bg-red-100 text-red-700 border-red-200", R = /* @__PURE__ */ d({
93
+ }), V = /* @__PURE__ */ function(e) {
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({
100
96
  __name: "BaseBadge",
101
97
  props: { color: {
102
98
  type: String,
@@ -104,26 +100,26 @@ var De = { class: "font-medium pl-1" }, Oe = /* @__PURE__ */ d({
104
100
  } },
105
101
  setup(e) {
106
102
  let t = D(), n = r(() => !!t.default), i = e, s = {
107
- [L.RED]: "bg-red-100 text-red-700 border-red-200",
108
- [L.GREEN]: "bg-green-100 text-green-700 border-green-200",
109
- [L.BLUE]: "bg-blue-100 text-blue-700 border-blue-200",
110
- [L.YELLOW]: "bg-yellow-100 text-yellow-700 border-yellow-200",
111
- [L.GRAY]: "bg-gray-100 text-gray-700 border-gray-200",
112
- [L.BLACK]: "bg-gray-800 text-gray-100 border-gray-700",
113
- [L.NONE]: "bg-gray-50 text-gray-600 border-gray-200"
114
- }, 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] || ke}`);
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}`);
115
111
  return (e, t) => n.value ? (y(), o("span", {
116
112
  key: 0,
117
113
  class: m(c.value)
118
114
  }, [S(e.$slots, "default")], 2)) : a("", !0);
119
115
  }
120
- }), Ae = {
116
+ }), Me = {
121
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",
122
118
  "aria-label": "Breadcrumb"
123
- }, je = { class: "inline-flex items-center space-x-1 md:space-x-3" }, Me = {
119
+ }, Ne = { class: "inline-flex items-center space-x-1 md:space-x-3" }, Pe = {
124
120
  class: "inline-flex items-center",
125
121
  style: { "margin-left": "0" }
126
- }, Ne = /* @__PURE__ */ d({
122
+ }, Fe = /* @__PURE__ */ d({
127
123
  __name: "BaseBreadcrumb",
128
124
  props: {
129
125
  items: {
@@ -148,11 +144,11 @@ var De = { class: "font-medium pl-1" }, Oe = /* @__PURE__ */ d({
148
144
  });
149
145
  return (t, n) => {
150
146
  let r = C("router-link");
151
- return y(), o("nav", Ae, [s("ol", je, [s("li", Me, [u(r, {
147
+ return y(), o("nav", Me, [s("ol", Ne, [s("li", Pe, [u(r, {
152
148
  to: "/",
153
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"
154
150
  }, {
155
- default: M(() => [u(E(Se), { class: "h-4 w-4 text-gray-500 mr-2" }), n[0] ||= l(" Home ", -1)]),
151
+ default: M(() => [u(E(xe), { class: "h-4 w-4 text-gray-500 mr-2" }), n[0] ||= l(" Home ", -1)]),
156
152
  _: 1
157
153
  })]), (y(!0), o(e, null, x(i.value, (e, t) => (y(), o("li", {
158
154
  key: t,
@@ -167,52 +163,21 @@ var De = { class: "font-medium pl-1" }, Oe = /* @__PURE__ */ d({
167
163
  }, 1032, ["to"])]))), 128))])]);
168
164
  };
169
165
  }
170
- }), z = /* @__PURE__ */ function(e) {
166
+ }), H = /* @__PURE__ */ function(e) {
171
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;
172
- }({}), B = /* @__PURE__ */ function(e) {
168
+ }({}), U = /* @__PURE__ */ function(e) {
173
169
  return e.EXTRA_SMALL = "EXTRA_SMALL", e.SMALL = "SMALL", e.BASE = "BASE", e.LARGE = "LARGE", e.EXTRA_LARGE = "EXTRA_LARGE", e;
174
- }({}), V = b(!1), Pe = !1, H = "mgv-theme";
175
- function Fe(e) {
176
- if (Pe) {
177
- e !== H && console.warn(`[ui-lib] useTheme: storage key "${e}" ignored — theme already initialized with "${H}". Call initTheme({ storageKey }) before mounting any component.`);
178
- return;
179
- }
180
- if (Pe = !0, H = e, typeof window < "u") {
181
- let e = window.localStorage?.getItem(H);
182
- e ? V.value = e === "dark" : typeof window.matchMedia == "function" && (V.value = window.matchMedia("(prefers-color-scheme: dark)").matches);
183
- }
184
- typeof document < "u" && f(!0).run(() => {
185
- j(V, (e) => {
186
- document.documentElement.classList.toggle("dark", e), window.localStorage?.setItem(H, e ? "dark" : "light");
187
- }, { immediate: !0 });
188
- });
189
- }
190
- function Ie(e) {
191
- Fe(e?.storageKey ?? H);
192
- }
193
- function U(e) {
194
- Fe(e?.storageKey ?? H);
195
- function t() {
196
- V.value = !V.value;
197
- }
198
- return {
199
- isDark: V,
200
- toggleTheme: t
201
- };
202
- }
203
- //#endregion
204
- //#region src/components/BaseButton.vue?vue&type=script&setup=true&lang.ts
205
- var Le = [
170
+ }({}), Ie = [
206
171
  "type",
207
172
  "disabled",
208
173
  "onClick"
209
- ], Re = {
174
+ ], Le = {
210
175
  key: 0,
211
176
  class: "inline-flex items-center"
212
- }, ze = { key: 1 }, Be = { key: 2 }, Ve = ["type", "disabled"], He = {
177
+ }, Re = { key: 1 }, ze = { key: 2 }, Be = ["type", "disabled"], Ve = {
213
178
  key: 0,
214
179
  class: "inline-flex items-center"
215
- }, Ue = { key: 1 }, We = { key: 2 }, Ge = /* @__PURE__ */ d({
180
+ }, He = { key: 1 }, Ue = { key: 2 }, We = /* @__PURE__ */ d({
216
181
  __name: "BaseButton",
217
182
  props: {
218
183
  description: {
@@ -222,7 +187,7 @@ var Le = [
222
187
  color: {
223
188
  type: String,
224
189
  required: !1,
225
- default: z.BLUE
190
+ default: H.BLUE
226
191
  },
227
192
  to: {
228
193
  type: String,
@@ -266,103 +231,103 @@ var Le = [
266
231
  }
267
232
  },
268
233
  setup(e) {
269
- let { isDark: t } = U(), n = e;
234
+ let { isDark: t } = B(), n = e;
270
235
  function r() {
271
236
  let e = {
272
- [z.BLUE]: {
237
+ [H.BLUE]: {
273
238
  light: "text-blue-700 border-blue-300 hover:bg-blue-50",
274
239
  dark: "text-blue-400 border-blue-500/40 hover:bg-blue-500/10"
275
240
  },
276
- [z.GREEN]: {
241
+ [H.GREEN]: {
277
242
  light: "text-green-700 border-green-300 hover:bg-green-50",
278
243
  dark: "text-green-400 border-green-500/40 hover:bg-green-500/10"
279
244
  },
280
- [z.EMERALD]: {
245
+ [H.EMERALD]: {
281
246
  light: "text-emerald-700 border-emerald-300 hover:bg-emerald-50",
282
247
  dark: "text-emerald-400 border-emerald-500/40 hover:bg-emerald-500/10"
283
248
  },
284
- [z.RED]: {
249
+ [H.RED]: {
285
250
  light: "text-red-700 border-red-300 hover:bg-red-50",
286
251
  dark: "text-red-400 border-red-500/40 hover:bg-red-500/10"
287
252
  },
288
- [z.YELLOW]: {
253
+ [H.YELLOW]: {
289
254
  light: "text-yellow-700 border-yellow-300 hover:bg-yellow-50",
290
255
  dark: "text-yellow-400 border-yellow-500/40 hover:bg-yellow-500/10"
291
256
  },
292
- [z.PURPLE]: {
257
+ [H.PURPLE]: {
293
258
  light: "text-purple-700 border-purple-300 hover:bg-purple-50",
294
259
  dark: "text-purple-400 border-purple-500/40 hover:bg-purple-500/10"
295
260
  },
296
- [z.SKY]: {
261
+ [H.SKY]: {
297
262
  light: "text-sky-700 border-sky-300 hover:bg-sky-50",
298
263
  dark: "text-sky-400 border-sky-500/40 hover:bg-sky-500/10"
299
264
  },
300
- [z.AMBER]: {
265
+ [H.AMBER]: {
301
266
  light: "text-amber-700 border-amber-300 hover:bg-amber-50",
302
267
  dark: "text-amber-400 border-amber-500/40 hover:bg-amber-500/10"
303
268
  },
304
- [z.GRAY]: {
269
+ [H.GRAY]: {
305
270
  light: "text-gray-700 border-gray-300 hover:bg-gray-50",
306
271
  dark: "text-gray-300 border-gray-600 hover:bg-gray-800"
307
272
  },
308
- [z.DARK]: {
273
+ [H.DARK]: {
309
274
  light: "text-gray-700 border-gray-300 hover:bg-gray-50",
310
275
  dark: "text-gray-300 border-gray-600 hover:bg-gray-800"
311
276
  },
312
- [z.WHITE]: {
277
+ [H.WHITE]: {
313
278
  light: "text-gray-700 border-gray-300 hover:bg-gray-50",
314
279
  dark: "text-gray-300 border-gray-600 hover:bg-gray-800"
315
280
  }
316
- }, r = e[n.color] ?? e[z.BLUE], i = t.value ? r.dark : r.light;
281
+ }, r = e[n.color] ?? e[H.BLUE], i = t.value ? r.dark : r.light;
317
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}`;
318
283
  }
319
284
  function c() {
320
285
  let e = {
321
- [z.BLUE]: {
286
+ [H.BLUE]: {
322
287
  light: "text-blue-600 hover:bg-blue-50",
323
288
  dark: "text-blue-400 hover:bg-blue-500/10"
324
289
  },
325
- [z.GREEN]: {
290
+ [H.GREEN]: {
326
291
  light: "text-green-600 hover:bg-green-50",
327
292
  dark: "text-green-400 hover:bg-green-500/10"
328
293
  },
329
- [z.EMERALD]: {
294
+ [H.EMERALD]: {
330
295
  light: "text-emerald-600 hover:bg-emerald-50",
331
296
  dark: "text-emerald-400 hover:bg-emerald-500/10"
332
297
  },
333
- [z.SKY]: {
298
+ [H.SKY]: {
334
299
  light: "text-sky-600 hover:bg-sky-50",
335
300
  dark: "text-sky-400 hover:bg-sky-500/10"
336
301
  },
337
- [z.RED]: {
302
+ [H.RED]: {
338
303
  light: "text-red-500 hover:bg-red-50",
339
304
  dark: "text-red-400 hover:bg-red-500/10"
340
305
  },
341
- [z.AMBER]: {
306
+ [H.AMBER]: {
342
307
  light: "text-amber-700 hover:bg-amber-50",
343
308
  dark: "text-amber-300 hover:bg-amber-500/10"
344
309
  },
345
- [z.YELLOW]: {
310
+ [H.YELLOW]: {
346
311
  light: "text-yellow-600 hover:bg-yellow-50",
347
312
  dark: "text-yellow-400 hover:bg-yellow-500/10"
348
313
  },
349
- [z.PURPLE]: {
314
+ [H.PURPLE]: {
350
315
  light: "text-purple-600 hover:bg-purple-50",
351
316
  dark: "text-purple-400 hover:bg-purple-500/10"
352
317
  },
353
- [z.GRAY]: {
318
+ [H.GRAY]: {
354
319
  light: "text-gray-500 hover:bg-gray-100",
355
320
  dark: "text-gray-400 hover:bg-gray-800"
356
321
  },
357
- [z.DARK]: {
322
+ [H.DARK]: {
358
323
  light: "text-gray-500 hover:bg-gray-100",
359
324
  dark: "text-gray-400 hover:bg-gray-800"
360
325
  },
361
- [z.WHITE]: {
326
+ [H.WHITE]: {
362
327
  light: "text-gray-500 hover:bg-gray-100",
363
328
  dark: "text-gray-400 hover:bg-gray-800"
364
329
  }
365
- }, r = e[n.color] ?? e[z.GRAY], i = t.value ? r.dark : r.light;
330
+ }, r = e[n.color] ?? e[H.GRAY], i = t.value ? r.dark : r.light;
366
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`;
367
332
  }
368
333
  function l() {
@@ -370,37 +335,37 @@ var Le = [
370
335
  e || (t += " cursor-pointer");
371
336
  let i;
372
337
  switch (n.color) {
373
- case z.BLUE:
338
+ case H.BLUE:
374
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";
375
340
  break;
376
- case z.WHITE:
341
+ case H.WHITE:
377
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";
378
343
  break;
379
- case z.DARK:
344
+ case H.DARK:
380
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";
381
346
  break;
382
- case z.GREEN:
347
+ case H.GREEN:
383
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";
384
349
  break;
385
- case z.EMERALD:
350
+ case H.EMERALD:
386
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";
387
352
  break;
388
- case z.RED:
353
+ case H.RED:
389
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";
390
355
  break;
391
- case z.YELLOW:
356
+ case H.YELLOW:
392
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";
393
358
  break;
394
- case z.PURPLE:
359
+ case H.PURPLE:
395
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";
396
361
  break;
397
- case z.SKY:
362
+ case H.SKY:
398
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";
399
364
  break;
400
- case z.AMBER:
365
+ case H.AMBER:
401
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";
402
367
  break;
403
- case z.GRAY:
368
+ case H.GRAY:
404
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";
405
370
  break;
406
371
  default:
@@ -410,19 +375,19 @@ var Le = [
410
375
  n.outline && (i = r()), n.ghost && (i = c());
411
376
  let a = "px-5 py-2.5 mr-2 mb-2 text-sm";
412
377
  switch (n.size) {
413
- case B.EXTRA_SMALL:
378
+ case U.EXTRA_SMALL:
414
379
  a = "px-3 py-2 text-xs";
415
380
  break;
416
- case B.SMALL:
381
+ case U.SMALL:
417
382
  a = "px-3 py-2 text-sm";
418
383
  break;
419
- case B.BASE:
384
+ case U.BASE:
420
385
  a = "px-5 py-2.5 text-sm";
421
386
  break;
422
- case B.LARGE:
387
+ case U.LARGE:
423
388
  a = "px-5 py-3 text-base";
424
389
  break;
425
- case B.EXTRA_LARGE:
390
+ case U.EXTRA_LARGE:
426
391
  a = "px-6 py-3.5 text-base";
427
392
  break;
428
393
  }
@@ -442,7 +407,7 @@ var Le = [
442
407
  disabled: e.isDisable || e.isLoading,
443
408
  onClick: i
444
409
  }, [
445
- e.isLoading ? (y(), o("div", Re, [...r[0] ||= [s("svg", {
410
+ e.isLoading ? (y(), o("div", Le, [...r[0] ||= [s("svg", {
446
411
  "aria-hidden": "true",
447
412
  role: "status",
448
413
  class: "inline w-4 h-4 me-3 animate-spin",
@@ -456,10 +421,10 @@ var Le = [
456
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",
457
422
  fill: "currentColor"
458
423
  })], -1)]])) : a("", !0),
459
- e.iconLeft ? a("", !0) : (y(), o("span", ze, T(e.description), 1)),
424
+ e.iconLeft ? a("", !0) : (y(), o("span", Re, T(e.description), 1)),
460
425
  S(t.$slots, "default"),
461
- e.iconLeft ? (y(), o("span", Be, T(e.description), 1)) : a("", !0)
462
- ], 10, Le)]),
426
+ e.iconLeft ? (y(), o("span", ze, T(e.description), 1)) : a("", !0)
427
+ ], 10, Ie)]),
463
428
  _: 3
464
429
  }, 8, ["to"])) : (y(), o("button", {
465
430
  key: 1,
@@ -467,7 +432,7 @@ var Le = [
467
432
  class: m(l()),
468
433
  disabled: e.isDisable || e.isLoading
469
434
  }, [
470
- e.isLoading ? (y(), o("div", He, [...r[1] ||= [s("svg", {
435
+ e.isLoading ? (y(), o("div", Ve, [...r[1] ||= [s("svg", {
471
436
  "aria-hidden": "true",
472
437
  role: "status",
473
438
  class: "inline w-4 h-4 me-3 animate-spin",
@@ -481,24 +446,24 @@ var Le = [
481
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",
482
447
  fill: "currentColor"
483
448
  })], -1)]])) : a("", !0),
484
- e.iconLeft ? a("", !0) : (y(), o("span", Ue, T(e.description), 1)),
449
+ e.iconLeft ? a("", !0) : (y(), o("span", He, T(e.description), 1)),
485
450
  S(t.$slots, "default"),
486
- e.iconLeft ? (y(), o("span", We, T(e.description), 1)) : a("", !0)
487
- ], 10, Ve));
451
+ e.iconLeft ? (y(), o("span", Ue, T(e.description), 1)) : a("", !0)
452
+ ], 10, Be));
488
453
  };
489
454
  }
490
455
  }), W = /* @__PURE__ */ function(e) {
491
456
  return e.BASE = "BASE", e.BASE_SHORTER = "BASE_SHORTER", e.SQUARE = "SQUARE", e;
492
- }({}), Ke = {
457
+ }({}), Ge = {
493
458
  key: 0,
494
459
  class: "h-px my-8 bg-gray-200 border-0 dark:bg-gray-700"
495
- }, qe = {
460
+ }, Ke = {
496
461
  key: 1,
497
462
  class: "w-48 h-1 mx-auto my-4 bg-gray-100 border-0 rounded md:my-10 dark:bg-gray-700"
498
- }, Je = {
463
+ }, qe = {
499
464
  key: 2,
500
465
  class: "w-8 h-8 mx-auto my-8 bg-gray-200 border-0 rounded md:my-12 dark:bg-gray-700"
501
- }, Ye = /* @__PURE__ */ d({
466
+ }, Je = /* @__PURE__ */ d({
502
467
  __name: "BaseLine",
503
468
  props: { mode: {
504
469
  type: String,
@@ -507,14 +472,14 @@ var Le = [
507
472
  } },
508
473
  setup(t) {
509
474
  return (n, r) => (y(), o(e, null, [
510
- t.mode === E(W).BASE ? (y(), o("hr", Ke)) : a("", !0),
511
- t.mode === E(W).BASE_SHORTER ? (y(), o("hr", qe)) : a("", !0),
512
- t.mode === E(W).SQUARE ? (y(), o("hr", Je)) : a("", !0)
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)
513
478
  ], 64));
514
479
  }
515
480
  }), G = /* @__PURE__ */ function(e) {
516
481
  return e.SMALL = "SMALL", e.MEDIUM = "MEDIUM", e.LARGE = "LARGE", e;
517
- }({}), Xe = G, Ze = ["height", "width"], Qe = /* @__PURE__ */ d({
482
+ }({}), Ye = G, Xe = ["height", "width"], Ze = /* @__PURE__ */ d({
518
483
  __name: "BaseLogo",
519
484
  props: { size: {
520
485
  type: String,
@@ -694,23 +659,23 @@ var Le = [
694
659
  d: "m281.7 183.8h3.6v18.5h-3.6z",
695
660
  fill: "url(#k)"
696
661
  }, null, -1)
697
- ]], 8, Ze))]),
662
+ ]], 8, Xe))]),
698
663
  _: 1
699
664
  });
700
665
  };
701
666
  }
702
- }), $e = /* @__PURE__ */ function(e) {
667
+ }), Qe = /* @__PURE__ */ function(e) {
703
668
  return e.DELETE = "DELETE", e.SUCCESS = "SUCCESS", e;
704
- }({}), et = {
669
+ }({}), $e = {
705
670
  key: 0,
706
671
  class: "p-6 text-center"
707
- }, tt = { class: "flex justify-center" }, nt = {
672
+ }, et = { class: "flex justify-center" }, tt = {
708
673
  key: 1,
709
674
  class: "p-6 text-center"
710
- }, rt = {
675
+ }, nt = {
711
676
  key: 0,
712
677
  class: "mb-5 text-sm text-gray-500"
713
- }, it = { class: "flex justify-center" }, at = /* @__PURE__ */ d({
678
+ }, rt = { class: "flex justify-center" }, it = /* @__PURE__ */ d({
714
679
  __name: "BaseModal",
715
680
  props: {
716
681
  title: {
@@ -729,7 +694,7 @@ var Le = [
729
694
  mode: {
730
695
  type: String,
731
696
  required: !1,
732
- default: $e.SUCCESS
697
+ default: Qe.SUCCESS
733
698
  }
734
699
  },
735
700
  emits: ["closeModal", "confirmModal"],
@@ -750,37 +715,37 @@ var Le = [
750
715
  role: "dialog",
751
716
  "aria-modal": "true",
752
717
  "aria-labelledby": i
753
- }, [t.mode === E($e).DELETE ? (y(), o("div", et, [
718
+ }, [t.mode === E(Qe).DELETE ? (y(), o("div", $e, [
754
719
  u(E(pe), { class: "w-12 h-12 text-gray-400 mx-auto mb-4" }),
755
720
  s("h3", {
756
721
  id: i,
757
722
  class: "mb-5 text-lg font-normal text-gray-500 dark:text-gray-400"
758
723
  }, " Are you sure you want to delete this " + T(t.title) + "? ", 1),
759
- s("div", tt, [u(Ge, {
760
- color: E(z).RED,
724
+ s("div", et, [u(We, {
725
+ color: E(H).RED,
761
726
  onClick: r[1] ||= (e) => n.$emit("confirmModal"),
762
727
  description: "Yes, I'm sure"
763
- }, null, 8, ["color"]), u(Ge, {
764
- color: E(z).WHITE,
728
+ }, null, 8, ["color"]), u(We, {
729
+ color: E(H).WHITE,
765
730
  onClick: r[2] ||= (e) => n.$emit("closeModal"),
766
731
  description: "No, cancel"
767
732
  }, null, 8, ["color"])])
768
- ])) : (y(), o("div", nt, [
733
+ ])) : (y(), o("div", tt, [
769
734
  u(E(ae), { class: "w-12 h-12 text-green-500 mx-auto mb-4" }),
770
735
  s("h3", {
771
736
  id: i,
772
737
  class: "mb-2 text-lg font-medium text-gray-900"
773
738
  }, T(t.title), 1),
774
- t.description ? (y(), o("p", rt, T(t.description), 1)) : a("", !0),
739
+ t.description ? (y(), o("p", nt, T(t.description), 1)) : a("", !0),
775
740
  S(n.$slots, "default"),
776
- s("div", it, [u(Ge, {
777
- color: E(z).BLUE,
741
+ s("div", rt, [u(We, {
742
+ color: E(H).BLUE,
778
743
  onClick: r[3] ||= (e) => n.$emit("closeModal"),
779
744
  description: "OK"
780
745
  }, null, 8, ["color"])])
781
746
  ]))])], 64));
782
747
  }
783
- }), ot = /* @__PURE__ */ d({
748
+ }), at = /* @__PURE__ */ d({
784
749
  __name: "BaseRow",
785
750
  props: { bgColor: {
786
751
  type: String,
@@ -794,7 +759,7 @@ var Le = [
794
759
  }
795
760
  return (e, t) => (y(), o("div", { class: m(n()) }, [S(e.$slots, "default")], 2));
796
761
  }
797
- }), st = /* @__PURE__ */ d({
762
+ }), ot = /* @__PURE__ */ d({
798
763
  __name: "BaseSpinner",
799
764
  props: {
800
765
  size: { default: "sm" },
@@ -826,7 +791,7 @@ var Le = [
826
791
  return e.SUCCESS = "SUCCESS", e.WARNING = "WARNING", e.ERROR = "ERROR", e;
827
792
  }({}), q = /* @__PURE__ */ function(e) {
828
793
  return e.TOP_LEFT = "TOP_LEFT", e.TOP_RIGHT = "TOP_RIGHT", e.BOTTOM_LEFT = "BOTTOM_LEFT", e.BOTTOM_RIGHT = "BOTTOM_RIGHT", e;
829
- }({}), 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({
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({
830
795
  __name: "BaseToast",
831
796
  props: {
832
797
  mode: {
@@ -904,7 +869,7 @@ var Le = [
904
869
  id: "toast-top-right",
905
870
  class: m(l()),
906
871
  role: "alert"
907
- }, [s("div", ct, [
872
+ }, [s("div", st, [
908
873
  e.mode == E(K).ERROR ? (y(), o("div", {
909
874
  key: 0,
910
875
  class: m(c())
@@ -914,18 +879,18 @@ var Le = [
914
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", {
915
880
  key: 2,
916
881
  class: m(c())
917
- }, [u(E(me), { class: "h-6 w-6 text-yellow-500" }), r[2] ||= s("span", { class: "sr-only" }, "Warning icon", -1)], 2)) : a("", !0),
918
- s("div", lt, T(e.description), 1),
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),
919
884
  e.hasCloseIcon ? (y(), o("button", {
920
885
  key: 3,
921
886
  type: "button",
922
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",
923
888
  "aria-label": "Close",
924
889
  onClick: i
925
- }, [r[3] ||= s("span", { class: "sr-only" }, "Close", -1), u(E(xe), { class: "h-6 w-6 text-gray-500" })])) : a("", !0)
890
+ }, [r[3] ||= s("span", { class: "sr-only" }, "Close", -1), u(E(be), { class: "h-6 w-6 text-gray-500" })])) : a("", !0)
926
891
  ])], 2)) : a("", !0);
927
892
  }
928
- }), dt = { class: "w-13" }, ft = /* @__PURE__ */ d({
893
+ }), ut = { class: "w-13" }, dt = /* @__PURE__ */ d({
929
894
  __name: "ColoredSquares",
930
895
  props: { color: {
931
896
  type: String,
@@ -946,25 +911,25 @@ var Le = [
946
911
  function i() {
947
912
  let e = "gray";
948
913
  switch (t.color) {
949
- case L.GREEN:
914
+ case V.GREEN:
950
915
  e = "green";
951
916
  break;
952
- case L.RED:
917
+ case V.RED:
953
918
  e = "red";
954
919
  break;
955
- case L.BLUE:
920
+ case V.BLUE:
956
921
  e = "blue";
957
922
  break;
958
- case L.YELLOW:
923
+ case V.YELLOW:
959
924
  e = "yellow";
960
925
  break;
961
- case L.NONE: return "font-bold text-xs mr-2 px-2.5 py-0.5 rounded-full";
926
+ case V.NONE: return "font-bold text-xs mr-2 px-2.5 py-0.5 rounded-full";
962
927
  }
963
928
  return "font-bold text-xs mr-2 px-2.5 py-0.5 rounded-full bg-" + e + "-100 text-" + e + "-800";
964
929
  }
965
- 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()]) }, [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", 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)]));
966
931
  }
967
- }), pt = { class: "flex items-start justify-between" }, mt = { class: "min-w-0" }, ht = /* @__PURE__ */ d({
932
+ }), ft = { class: "flex items-start justify-between" }, pt = { class: "min-w-0" }, mt = /* @__PURE__ */ d({
968
933
  __name: "EarningsCard",
969
934
  props: {
970
935
  title: { default: "TOTAL EARNINGS" },
@@ -1019,7 +984,7 @@ var Le = [
1019
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", {
1020
985
  key: 0,
1021
986
  class: m(["absolute right-4 top-4 rounded-md px-3 py-1 text-xs font-bold tracking-wide", d.value.badge])
1022
- }, T(t.badge), 3)) : a("", !0), s("div", pt, [s("div", mt, [
987
+ }, T(t.badge), 3)) : a("", !0), s("div", ft, [s("div", pt, [
1023
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),
1024
989
  s("p", { class: m(["mt-1 font-bold truncate", [d.value.amount, t.compact ? "text-lg" : "text-4xl"]]) }, T(f.value), 3),
1025
990
  s("p", { class: m(["mt-1 font-medium", [d.value.subtitle, t.compact ? "text-xs" : "text-sm"]]) }, T(t.subtitle), 3)
@@ -1033,10 +998,10 @@ var Le = [
1033
998
  "stroke-linejoin": "round"
1034
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));
1035
1000
  }
1036
- }), gt = {
1001
+ }), ht = {
1037
1002
  key: 0,
1038
1003
  class: "font-bold text-green-800 dark:text-green-400"
1039
- }, _t = { key: 0 }, vt = { key: 0 }, yt = "font-bold", bt = /* @__PURE__ */ d({
1004
+ }, gt = { key: 0 }, _t = { key: 0 }, vt = "font-bold", yt = /* @__PURE__ */ d({
1040
1005
  __name: "EuroAmount",
1041
1006
  props: {
1042
1007
  amount: {
@@ -1056,20 +1021,20 @@ var Le = [
1056
1021
  },
1057
1022
  setup(t) {
1058
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));
1059
- return (n, r) => (y(), o(e, null, [i.value && d.value ? (y(), o("span", gt, [l(T(t.amount) + " ", 1), t.showCurrency ? (y(), o("span", _t, "€")) : 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", ht, [l(T(t.amount) + " ", 1), t.showCurrency ? (y(), o("span", gt, "€")) : a("", !0)])) : a("", !0), i.value && !d.value ? (y(), o("span", {
1060
1025
  key: 1,
1061
- class: m([yt, u.value ? "text-red-800 dark:text-red-400" : "text-gray-800 dark:text-gray-200"])
1062
- }, [l(T(t.amount) + " ", 1), t.showCurrency ? (y(), o("span", vt, "€")) : a("", !0)], 2)) : a("", !0)], 64));
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));
1063
1028
  }
1064
- }), xt = { "aria-label": "Pagination" }, St = { class: "flex list-none p-0 m-0" }, Ct = [
1029
+ }), bt = { "aria-label": "Pagination" }, xt = { class: "flex list-none p-0 m-0" }, St = [
1065
1030
  "aria-current",
1066
1031
  "aria-label",
1067
1032
  "onClick"
1068
- ], wt = {
1033
+ ], Ct = {
1069
1034
  key: 1,
1070
1035
  "aria-hidden": "true",
1071
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"
1072
- }, Tt = /* @__PURE__ */ d({
1037
+ }, wt = /* @__PURE__ */ d({
1073
1038
  __name: "Pagination",
1074
1039
  props: {
1075
1040
  totalItems: {
@@ -1099,28 +1064,28 @@ var Le = [
1099
1064
  }
1100
1065
  return j(() => [r.totalItems, r.itemsPerPage], () => {
1101
1066
  a.value = Math.ceil(r.totalItems / r.itemsPerPage), i.value > a.value && (i.value = Math.max(1, a.value)), u(i.value);
1102
- }, { immediate: !0 }), (t, n) => (y(), o("nav", xt, [s("ul", St, [(y(!0), o(e, null, x(c.value, (e, t) => (y(), o("li", {
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", {
1103
1068
  key: t,
1104
1069
  class: "mr-1"
1105
- }, [e === 0 ? (y(), o("span", wt, "...")) : (y(), o("button", {
1070
+ }, [e === 0 ? (y(), o("span", Ct, "...")) : (y(), o("button", {
1106
1071
  key: 0,
1107
1072
  type: "button",
1108
1073
  "aria-current": e === i.value ? "page" : void 0,
1109
1074
  "aria-label": `Go to page ${e}`,
1110
1075
  onClick: (t) => d(e),
1111
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 }])
1112
- }, T(e), 11, Ct))]))), 128))])]));
1077
+ }, T(e), 11, St))]))), 128))])]));
1113
1078
  }
1114
- }), Et = { key: 0 }, Dt = {
1079
+ }), Tt = { key: 0 }, Et = {
1115
1080
  key: 0,
1116
1081
  class: "flex items-center space-x-2"
1117
- }, Ot = {
1082
+ }, Dt = {
1118
1083
  key: 1,
1119
1084
  class: "flex items-center space-x-2"
1120
- }, kt = {
1085
+ }, Ot = {
1121
1086
  key: 2,
1122
1087
  class: "flex items-center space-x-2"
1123
- }, At = /* @__PURE__ */ d({
1088
+ }, kt = /* @__PURE__ */ d({
1124
1089
  __name: "TrendArrow",
1125
1090
  props: {
1126
1091
  number: {
@@ -1134,13 +1099,13 @@ var Le = [
1134
1099
  },
1135
1100
  setup(e) {
1136
1101
  let t = e, n = r(() => t.number !== null && t.number !== void 0 && t.number < 0), i = r(() => t.number === 0);
1137
- return (r, s) => e.number !== null && e.number !== void 0 ? (y(), o("div", Et, [n.value ? (y(), o("span", Dt, [u(R, { color: E(L).RED }, {
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 }, {
1138
1103
  default: M(() => [l(T(e.number) + T(t.icon), 1)]),
1139
1104
  _: 1
1140
- }, 8, ["color"]), u(E(te), { class: "h-5 w-5 text-red-500" })])) : i.value ? (y(), o("span", Ot, [u(R, { color: E(L).GRAY }, {
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 }, {
1141
1106
  default: M(() => [l(T(e.number) + T(t.icon), 1)]),
1142
1107
  _: 1
1143
- }, 8, ["color"]), u(E(ve), { class: "h-5 w-5 text-gray-400" })])) : (y(), o("span", kt, [u(R, { color: E(L).GREEN }, {
1108
+ }, 8, ["color"]), u(E(_e), { class: "h-5 w-5 text-gray-400" })])) : (y(), o("span", Ot, [u(je, { color: E(V).GREEN }, {
1144
1109
  default: M(() => [l(T(e.number) + T(t.icon), 1)]),
1145
1110
  _: 1
1146
1111
  }, 8, ["color"]), u(E(ne), { class: "h-5 w-5 text-green-500" })]))])) : a("", !0);
@@ -1149,7 +1114,7 @@ var Le = [
1149
1114
  //#endregion
1150
1115
  //#region src/composables/useThemeClasses.ts
1151
1116
  function J() {
1152
- let { isDark: e } = U();
1117
+ let { isDark: e } = B();
1153
1118
  return {
1154
1119
  card: r(() => e.value ? "bg-gray-800 border-gray-700" : "bg-white border-gray-200"),
1155
1120
  cardAlt: r(() => e.value ? "bg-gray-900 border-gray-700" : "bg-white border-gray-200"),
@@ -1184,7 +1149,7 @@ function Y(e) {
1184
1149
  }
1185
1150
  //#endregion
1186
1151
  //#region src/components/BaseModalShell.vue?vue&type=script&setup=true&lang.ts
1187
- 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({
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({
1188
1153
  __name: "BaseModalShell",
1189
1154
  props: {
1190
1155
  title: {},
@@ -1201,7 +1166,7 @@ var jt = { class: "flex items-start gap-4 min-w-0" }, Mt = { class: "flex-1 min-
1201
1166
  },
1202
1167
  emits: ["cancel", "backdrop"],
1203
1168
  setup(e, { emit: n }) {
1204
- let c = e, l = n, { isDark: u } = U(), 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 } = 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");
1205
1170
  function h() {
1206
1171
  l("backdrop"), c.manualClose || l("cancel");
1207
1172
  }
@@ -1218,14 +1183,14 @@ var jt = { class: "flex items-start gap-4 min-w-0" }, Mt = { class: "flex-1 min-
1218
1183
  class: m(["relative w-full mx-4 rounded-lg shadow-xl max-h-[90vh] flex flex-col", [e.maxWidthClass, p.value]]),
1219
1184
  onClick: r[0] ||= F(() => {}, ["stop"])
1220
1185
  }, [
1221
- s("div", { class: m(["flex items-start justify-between gap-4 p-6 border-b shrink-0", E(d).border]) }, [s("div", jt, [S(n.$slots, "icon"), s("div", Mt, [s("h3", {
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", {
1222
1187
  id: f,
1223
1188
  class: m(["text-lg font-medium", E(d).primaryText])
1224
1189
  }, T(e.title), 3), e.subtitle ? (y(), o("p", {
1225
1190
  key: 0,
1226
1191
  class: m(["text-sm mt-1 break-all", E(d).mutedText])
1227
1192
  }, T(e.subtitle), 3)) : a("", !0)])]), S(n.$slots, "header-actions")], 2),
1228
- s("div", Nt, [S(n.$slots, "default")]),
1193
+ s("div", Mt, [S(n.$slots, "default")]),
1229
1194
  n.$slots.footer ? (y(), o("div", {
1230
1195
  key: 0,
1231
1196
  class: m(["flex gap-3 justify-end p-6 border-t shrink-0", E(d).border])
@@ -1234,16 +1199,16 @@ var jt = { class: "flex items-start gap-4 min-w-0" }, Mt = { class: "flex-1 min-
1234
1199
  key: 1,
1235
1200
  class: m(["relative w-full mx-4 rounded-lg shadow-xl", [e.maxWidthClass, p.value]]),
1236
1201
  onClick: r[1] ||= F(() => {}, ["stop"])
1237
- }, [s("div", Pt, [
1238
- s("div", Ft, [S(n.$slots, "icon"), s("div", It, [s("h3", {
1202
+ }, [s("div", Nt, [
1203
+ s("div", Pt, [S(n.$slots, "icon"), s("div", Ft, [s("h3", {
1239
1204
  id: f,
1240
1205
  class: m(["text-lg font-medium", E(d).primaryText])
1241
1206
  }, T(e.title), 3)])]),
1242
- s("div", Lt, [S(n.$slots, "default")]),
1243
- s("div", Rt, [S(n.$slots, "footer")])
1207
+ s("div", It, [S(n.$slots, "default")]),
1208
+ s("div", Lt, [S(n.$slots, "footer")])
1244
1209
  ])], 2))])]));
1245
1210
  }
1246
- }), Bt = ["aria-expanded"], Vt = { class: "flex items-center gap-3" }, Ht = /* @__PURE__ */ d({
1211
+ }), zt = ["aria-expanded"], Bt = { class: "flex items-center gap-3" }, Vt = /* @__PURE__ */ d({
1247
1212
  __name: "BaseCollapsibleSection",
1248
1213
  props: {
1249
1214
  title: {},
@@ -1253,13 +1218,13 @@ var jt = { class: "flex items-start gap-4 min-w-0" }, Mt = { class: "flex-1 min-
1253
1218
  },
1254
1219
  emits: ["toggle"],
1255
1220
  setup(e, { emit: t }) {
1256
- let n = e, i = t, { isDark: c } = U(), 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);
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);
1257
1222
  return (t, n) => (y(), o("section", { class: m(["rounded-xl border transition-colors", E(l).cardAlt]) }, [s("button", {
1258
1223
  type: "button",
1259
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"]]),
1260
1225
  "aria-expanded": !e.collapsed,
1261
1226
  onClick: n[0] ||= (e) => i("toggle")
1262
- }, [s("div", Vt, [s("h2", { class: m(["text-base font-semibold", u.value]) }, T(e.title), 3), e.badge ? (y(), o("span", {
1227
+ }, [s("div", Bt, [s("h2", { class: m(["text-base font-semibold", u.value]) }, T(e.title), 3), e.badge ? (y(), o("span", {
1263
1228
  key: 0,
1264
1229
  class: m(["text-xs px-2 py-0.5 rounded-full", f.value])
1265
1230
  }, T(e.badge), 3)) : a("", !0)]), (y(), o("svg", {
@@ -1273,15 +1238,15 @@ var jt = { class: "flex items-start gap-4 min-w-0" }, Mt = { class: "flex-1 min-
1273
1238
  "stroke-linecap": "round",
1274
1239
  "stroke-linejoin": "round",
1275
1240
  d: "M19 9l-7 7-7-7"
1276
- }, null, -1)]], 2))], 10, Bt), 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, 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));
1277
1242
  }
1278
- }), Ut = ["disabled"], Wt = ["disabled"], Gt = {
1243
+ }), Ht = ["disabled"], Ut = ["disabled"], Wt = {
1279
1244
  key: 0,
1280
1245
  class: "w-4 h-4 animate-spin",
1281
1246
  fill: "none",
1282
1247
  viewBox: "0 0 24 24",
1283
1248
  "aria-hidden": "true"
1284
- }, Kt = /* @__PURE__ */ d({
1249
+ }, Gt = /* @__PURE__ */ d({
1285
1250
  __name: "BaseConfirmModal",
1286
1251
  props: {
1287
1252
  title: {},
@@ -1297,19 +1262,19 @@ var jt = { class: "flex items-start gap-4 min-w-0" }, Mt = { class: "flex-1 min-
1297
1262
  },
1298
1263
  emits: ["confirm", "cancel"],
1299
1264
  setup(e, { emit: t }) {
1300
- let n = e, r = t, { isDark: c } = U(), d = J();
1265
+ let n = e, r = t, { isDark: c } = B(), d = J();
1301
1266
  function f() {
1302
1267
  n.submitting || r("confirm");
1303
1268
  }
1304
1269
  function p() {
1305
1270
  n.submitting || r("cancel");
1306
1271
  }
1307
- return (t, n) => (y(), i(zt, {
1272
+ return (t, n) => (y(), i(Rt, {
1308
1273
  title: e.title,
1309
1274
  "manual-close": e.submitting,
1310
1275
  onCancel: p
1311
1276
  }, {
1312
- 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(me), {
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), {
1313
1278
  class: m(["h-6 w-6", e.variant === "danger" ? "text-red-600" : "text-amber-600"]),
1314
1279
  "aria-hidden": "true"
1315
1280
  }, null, 8, ["class"])], 2)]),
@@ -1318,12 +1283,12 @@ var jt = { class: "flex items-start gap-4 min-w-0" }, Mt = { class: "flex-1 min-
1318
1283
  disabled: e.submitting,
1319
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"]]),
1320
1285
  onClick: p
1321
- }, T(e.cancelText), 11, Ut), s("button", {
1286
+ }, T(e.cancelText), 11, Ht), s("button", {
1322
1287
  type: "button",
1323
1288
  disabled: e.submitting,
1324
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"]]),
1325
1290
  onClick: f
1326
- }, [e.submitting ? (y(), o("svg", Gt, [...n[0] ||= [s("circle", {
1291
+ }, [e.submitting ? (y(), o("svg", Wt, [...n[0] ||= [s("circle", {
1327
1292
  class: "opacity-25",
1328
1293
  cx: "12",
1329
1294
  cy: "12",
@@ -1334,12 +1299,12 @@ var jt = { class: "flex items-start gap-4 min-w-0" }, Mt = { class: "flex-1 min-
1334
1299
  class: "opacity-75",
1335
1300
  fill: "currentColor",
1336
1301
  d: "M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z"
1337
- }, null, -1)]])) : a("", !0), l(" " + T(e.submitting ? e.submittingText : e.confirmText), 1)], 10, Wt)]),
1302
+ }, null, -1)]])) : a("", !0), l(" " + T(e.submitting ? e.submittingText : e.confirmText), 1)], 10, Ut)]),
1338
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")]),
1339
1304
  _: 3
1340
1305
  }, 8, ["title", "manual-close"]));
1341
1306
  }
1342
- }), qt = { class: "mt-4" }, Jt = ["placeholder"], Yt = ["disabled"], Xt = /* @__PURE__ */ d({
1307
+ }), Kt = { class: "mt-4" }, qt = ["placeholder"], Jt = ["disabled"], Yt = /* @__PURE__ */ d({
1343
1308
  __name: "BaseTextInputModal",
1344
1309
  props: {
1345
1310
  title: {},
@@ -1357,7 +1322,7 @@ var jt = { class: "flex items-start gap-4 min-w-0" }, Mt = { class: "flex-1 min-
1357
1322
  },
1358
1323
  emits: ["confirm", "cancel"],
1359
1324
  setup(e, { emit: t }) {
1360
- let n = e, r = t, { isDark: a } = U(), o = J(), c = b(n.initialValue), l = b(null);
1325
+ let n = e, r = t, { isDark: a } = B(), o = J(), c = b(n.initialValue), l = b(null);
1361
1326
  g(async () => {
1362
1327
  await p(), l.value?.focus();
1363
1328
  });
@@ -1370,7 +1335,7 @@ var jt = { class: "flex items-start gap-4 min-w-0" }, Mt = { class: "flex-1 min-
1370
1335
  function h() {
1371
1336
  c.value.trim() === (n.initialValue ?? "").trim() && f();
1372
1337
  }
1373
- return Y(f), (t, n) => (y(), i(zt, {
1338
+ return Y(f), (t, n) => (y(), i(Rt, {
1374
1339
  title: e.title,
1375
1340
  "manual-close": "",
1376
1341
  onBackdrop: h
@@ -1388,8 +1353,8 @@ var jt = { class: "flex items-start gap-4 min-w-0" }, Mt = { class: "flex-1 min-
1388
1353
  disabled: !c.value.trim() || e.submitting,
1389
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"]]),
1390
1355
  onClick: d
1391
- }, T(e.submitting ? e.submittingText : e.confirmText), 11, Yt)]),
1392
- default: M(() => [s("p", { class: m(["text-sm", E(a) ? "text-gray-300" : "text-gray-600"]) }, T(e.message), 3), s("div", qt, [s("label", { class: m(["block text-sm font-medium mb-1", E(o).label]) }, T(e.inputLabel), 3), N(s("input", {
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", {
1393
1358
  ref_key: "nameInput",
1394
1359
  ref: l,
1395
1360
  "onUpdate:modelValue": n[0] ||= (e) => c.value = e,
@@ -1397,11 +1362,11 @@ var jt = { class: "flex items-start gap-4 min-w-0" }, Mt = { class: "flex-1 min-
1397
1362
  placeholder: e.placeholder,
1398
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"]),
1399
1364
  onKeyup: P(d, ["enter"])
1400
- }, null, 42, Jt), [[A, c.value]])])]),
1365
+ }, null, 42, qt), [[A, c.value]])])]),
1401
1366
  _: 3
1402
1367
  }, 8, ["title"]));
1403
1368
  }
1404
- }), Zt = { class: "flex items-center justify-center min-h-[60vh]" }, Qt = { class: "text-center px-6" }, $t = /* @__PURE__ */ d({
1369
+ }), Xt = { class: "flex items-center justify-center min-h-[60vh]" }, Zt = { class: "text-center px-6" }, Qt = /* @__PURE__ */ d({
1405
1370
  __name: "BaseNotFoundPage",
1406
1371
  props: {
1407
1372
  code: { default: "404" },
@@ -1410,12 +1375,12 @@ var jt = { class: "flex items-start gap-4 min-w-0" }, Mt = { class: "flex-1 min-
1410
1375
  homeLabel: { default: "Go home" }
1411
1376
  },
1412
1377
  setup(e) {
1413
- let t = e, n = we(), { isDark: r } = U(), i = J();
1378
+ let t = e, n = Ce(), { isDark: r } = B(), i = J();
1414
1379
  function a() {
1415
1380
  n.push({ name: t.homeRouteName });
1416
1381
  }
1417
- return (t, n) => (y(), o("div", Zt, [s("div", Qt, [
1418
- u(E(me), { class: m(["w-16 h-16 mx-auto mb-4", E(i).illustration]) }, null, 8, ["class"]),
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"]),
1419
1384
  s("h1", { class: m(["text-4xl font-bold mb-2", E(r) ? "text-gray-200" : "text-gray-800"]) }, T(e.code), 3),
1420
1385
  s("p", { class: m(["text-lg mb-6", E(i).dimTextAlt]) }, T(e.message), 3),
1421
1386
  s("button", {
@@ -1425,7 +1390,7 @@ var jt = { class: "flex items-start gap-4 min-w-0" }, Mt = { class: "flex-1 min-
1425
1390
  ])]));
1426
1391
  }
1427
1392
  }), X = b(!1);
1428
- function en() {
1393
+ function $t() {
1429
1394
  function e() {
1430
1395
  X.value = !0;
1431
1396
  }
@@ -1444,19 +1409,19 @@ function en() {
1444
1409
  }
1445
1410
  //#endregion
1446
1411
  //#region src/composables/useSidebarCollapse.ts
1447
- var Z = b(!1), tn = !1, nn = "mgv-sidebar-collapsed";
1448
- function rn(e) {
1449
- if (!tn && (tn = !0, nn = e, typeof window < "u")) {
1450
- let e = window.localStorage?.getItem(nn);
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);
1451
1416
  e && (Z.value = e === "true"), f(!0).run(() => {
1452
1417
  j(Z, (e) => {
1453
- window.localStorage?.setItem(nn, String(e));
1418
+ window.localStorage?.setItem(tn, String(e));
1454
1419
  });
1455
1420
  });
1456
1421
  }
1457
1422
  }
1458
- function an(e) {
1459
- rn(e?.storageKey ?? nn);
1423
+ function rn(e) {
1424
+ nn(e?.storageKey ?? tn);
1460
1425
  function t() {
1461
1426
  Z.value = !0;
1462
1427
  }
@@ -1475,8 +1440,8 @@ function an(e) {
1475
1440
  }
1476
1441
  //#endregion
1477
1442
  //#region src/composables/useNotifications.ts
1478
- var Q = b([]), $ = b(!1), on = r(() => Q.value.filter((e) => !e.read).length);
1479
- function sn() {
1443
+ var Q = b([]), $ = b(!1), an = r(() => Q.value.filter((e) => !e.read).length);
1444
+ function on() {
1480
1445
  function e() {
1481
1446
  $.value = !0;
1482
1447
  }
@@ -1512,7 +1477,7 @@ function sn() {
1512
1477
  }
1513
1478
  return {
1514
1479
  notifications: Q,
1515
- unreadCount: on,
1480
+ unreadCount: an,
1516
1481
  open: $,
1517
1482
  openPanel: e,
1518
1483
  closePanel: t,
@@ -1527,22 +1492,22 @@ function sn() {
1527
1492
  }
1528
1493
  //#endregion
1529
1494
  //#region src/components/BaseSidebar.vue?vue&type=script&setup=true&lang.ts
1530
- var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }, un = { class: "flex-1 overflow-y-auto px-3 space-y-6" }, dn = { class: "space-y-0.5" }, fn = [
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 = [
1531
1496
  "aria-current",
1532
1497
  "title",
1533
1498
  "onClick"
1534
- ], pn = ["aria-label"], mn = { class: "relative shrink-0" }, hn = {
1499
+ ], fn = ["aria-label"], pn = { class: "relative shrink-0" }, mn = {
1535
1500
  key: 0,
1536
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"
1537
- }, gn = [
1502
+ }, hn = [
1538
1503
  "title",
1539
1504
  "aria-label",
1540
1505
  "aria-pressed"
1541
- ], _n = [
1506
+ ], gn = [
1542
1507
  "title",
1543
1508
  "aria-label",
1544
1509
  "aria-pressed"
1545
- ], vn = /*#__PURE__*/ ((e, t) => {
1510
+ ], _n = /*#__PURE__*/ ((e, t) => {
1546
1511
  let n = e.__vccOpts || e;
1547
1512
  for (let [e, r] of t) n[e] = r;
1548
1513
  return n;
@@ -1567,7 +1532,7 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
1567
1532
  }
1568
1533
  },
1569
1534
  setup(t) {
1570
- let n = t, c = we(), d = Ce(), { isDark: f, toggleTheme: h } = U(), { mobileOpen: g, close: _, toggle: v } = en(), { collapsed: C, toggle: D } = an(), { unreadCount: O, togglePanel: k } = sn(), A = r(() => n.collapsible && C.value), ee = b(null), M = null;
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;
1571
1536
  j(g, async (e) => {
1572
1537
  e ? (M = document.activeElement instanceof HTMLElement ? document.activeElement : null, await p(), ee.value?.focus()) : (M?.focus(), M = null);
1573
1538
  });
@@ -1592,7 +1557,7 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
1592
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"]),
1593
1558
  "aria-label": E(g) ? "Close navigation menu" : "Open navigation menu",
1594
1559
  "aria-expanded": E(g)
1595
- }, [E(g) ? (y(), i(E(xe), {
1560
+ }, [E(g) ? (y(), i(E(be), {
1596
1561
  key: 1,
1597
1562
  class: "w-6 h-6",
1598
1563
  "aria-hidden": "true"
@@ -1600,7 +1565,7 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
1600
1565
  key: 0,
1601
1566
  class: "w-6 h-6",
1602
1567
  "aria-hidden": "true"
1603
- }))], 10, cn)], 2),
1568
+ }))], 10, sn)], 2),
1604
1569
  E(g) ? (y(), o("div", {
1605
1570
  key: 0,
1606
1571
  class: "mobile-overlay fixed inset-0 z-40 bg-black/50",
@@ -1615,7 +1580,7 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
1615
1580
  E(g) ? "translate-x-0 z-50" : "-translate-x-full max-lg:pointer-events-none lg:translate-x-0 z-50",
1616
1581
  t.collapsible && E(C) ? "lg:w-16" : "lg:w-60"
1617
1582
  ]])
1618
- }, [s("div", ln, [
1583
+ }, [s("div", cn, [
1619
1584
  s("div", { class: m(["px-5 pt-5 pb-4 flex items-center justify-center relative", { "lg:px-2": A.value }]) }, [s("button", {
1620
1585
  type: "button",
1621
1586
  onClick: N,
@@ -1628,17 +1593,17 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
1628
1593
  onClick: r[2] ||= (...e) => E(_) && E(_)(...e),
1629
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"]),
1630
1595
  "aria-label": "Close navigation menu"
1631
- }, [u(E(xe), {
1596
+ }, [u(E(be), {
1632
1597
  class: "w-5 h-5",
1633
1598
  "aria-hidden": "true"
1634
1599
  })], 2)], 2),
1635
- s("nav", un, [(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", dn, [(y(!0), o(e, null, x(t.items, (e) => (y(), o("li", { key: e.name }, [s("button", {
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", {
1636
1601
  type: "button",
1637
1602
  "aria-current": P(e.name) ? "page" : void 0,
1638
1603
  title: A.value ? e.label : void 0,
1639
1604
  onClick: (t) => F(e.name),
1640
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 }]])
1641
- }, [(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, fn)]))), 128))])]))), 128))]),
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))]),
1642
1607
  s("div", { class: m(["px-4 py-4 border-t transition-colors space-y-3", E(f) ? "border-gray-800" : "border-gray-200"]) }, [
1643
1608
  t.showNotifications ? (y(), o("button", {
1644
1609
  key: 0,
@@ -1647,10 +1612,10 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
1647
1612
  title: "Notifications",
1648
1613
  "aria-label": E(O) > 0 ? `Notifications, ${E(O)} unread` : "Notifications",
1649
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 }]])
1650
- }, [s("span", mn, [u(E(ie), {
1615
+ }, [s("span", pn, [u(E(ie), {
1651
1616
  class: "w-[18px] h-[18px]",
1652
1617
  "aria-hidden": "true"
1653
- }), E(O) > 0 ? (y(), o("span", hn, T(E(O) > 99 ? "99+" : E(O)), 1)) : a("", !0)]), s("span", { class: m({ "lg:hidden": A.value }) }, "Notifications", 2)], 10, pn)) : a("", !0),
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),
1654
1619
  t.showThemeToggle ? (y(), o("button", {
1655
1620
  key: 1,
1656
1621
  type: "button",
@@ -1660,13 +1625,13 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
1660
1625
  "aria-pressed": E(f),
1661
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 }]])
1662
1627
  }, [
1663
- (y(), i(w(E(f) ? E(be) : E(ye)), {
1628
+ (y(), i(w(E(f) ? E(ye) : E(ve)), {
1664
1629
  class: m(["hidden w-[18px] h-[18px] shrink-0", { "lg:block": A.value }]),
1665
1630
  "aria-hidden": "true"
1666
1631
  }, null, 8, ["class"])),
1667
1632
  s("span", { class: m({ "lg:hidden": A.value }) }, T(E(f) ? "Switch to light" : "Switch to dark"), 3),
1668
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)
1669
- ], 10, gn)) : a("", !0),
1634
+ ], 10, hn)) : a("", !0),
1670
1635
  t.collapsible ? (y(), o("button", {
1671
1636
  key: 2,
1672
1637
  type: "button",
@@ -1678,7 +1643,7 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
1678
1643
  }, [(y(), i(w(E(C) ? E(se) : E(oe)), {
1679
1644
  class: "w-[18px] h-[18px] shrink-0",
1680
1645
  "aria-hidden": "true"
1681
- })), s("span", { class: m({ "lg:hidden": A.value }) }, "Collapse", 2)], 10, _n)) : a("", !0),
1646
+ })), s("span", { class: m({ "lg:hidden": A.value }) }, "Collapse", 2)], 10, gn)) : a("", !0),
1682
1647
  s("div", { class: m({ "lg:hidden": A.value }) }, [S(n.$slots, "status", {}, void 0, !0)], 2),
1683
1648
  s("div", { class: m({ "lg:hidden": A.value }) }, [S(n.$slots, "footer", {}, () => [t.appName || t.version ? (y(), o("div", {
1684
1649
  key: 0,
@@ -1692,26 +1657,26 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
1692
1657
  ])], 2)
1693
1658
  ]));
1694
1659
  }
1695
- }), [["__scopeId", "data-v-452beaf2"]]), yn = {
1660
+ }), [["__scopeId", "data-v-452beaf2"]]), vn = {
1696
1661
  key: 1,
1697
1662
  class: "mt-4 flex justify-center py-6"
1698
- }, bn = {
1663
+ }, yn = {
1699
1664
  key: 2,
1700
1665
  class: "mt-4 text-sm text-red-500",
1701
1666
  role: "alert"
1702
- }, xn = {
1667
+ }, bn = {
1703
1668
  key: 3,
1704
1669
  class: "mt-4"
1705
- }, Sn = { class: "relative" }, Cn = ["placeholder"], wn = {
1670
+ }, xn = { class: "relative" }, Sn = ["placeholder"], Cn = {
1706
1671
  key: 4,
1707
1672
  class: "mt-3 max-h-64 overflow-y-auto"
1708
- }, Tn = ["aria-pressed", "onClick"], En = { class: "flex-1 min-w-0" }, Dn = {
1673
+ }, wn = ["aria-pressed", "onClick"], Tn = { class: "flex-1 min-w-0" }, En = {
1709
1674
  key: 0,
1710
1675
  class: "text-center py-6"
1711
- }, On = {
1676
+ }, Dn = {
1712
1677
  key: 1,
1713
1678
  class: "text-center py-6"
1714
- }, kn = ["disabled"], An = ["disabled"], jn = /* @__PURE__ */ d({
1679
+ }, On = ["disabled"], kn = ["disabled"], An = /* @__PURE__ */ d({
1715
1680
  __name: "BaseEntityPickerModal",
1716
1681
  props: {
1717
1682
  title: {},
@@ -1733,7 +1698,7 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
1733
1698
  },
1734
1699
  emits: ["confirm", "cancel"],
1735
1700
  setup(t, { emit: n }) {
1736
- let c = t, l = n, { isDark: d } = U(), 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 } = B(), f = J(), h = b([]), _ = b(!1), v = b(""), C = b(null), w = b(""), D = b(null), O = r(() => {
1737
1702
  let e = c.loader ? h.value : c.items;
1738
1703
  return c.excludeId ? e.filter((e) => e.id !== c.excludeId) : e;
1739
1704
  }), k = r(() => O.value.filter((e) => e.label.toLowerCase().includes(w.value.toLowerCase()))), ee = {
@@ -1848,12 +1813,12 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
1848
1813
  function te() {
1849
1814
  c.submitting || l("cancel");
1850
1815
  }
1851
- return (n, r) => (y(), i(zt, {
1816
+ return (n, r) => (y(), i(Rt, {
1852
1817
  title: t.title,
1853
1818
  "manual-close": t.submitting,
1854
1819
  onCancel: te
1855
1820
  }, {
1856
- 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(he), {
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), {
1857
1822
  class: m(["h-6 w-6", P.value.iconText]),
1858
1823
  "aria-hidden": "true"
1859
1824
  }, null, 8, ["class"])], 2)])]),
@@ -1862,19 +1827,19 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
1862
1827
  disabled: t.submitting,
1863
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]),
1864
1829
  onClick: te
1865
- }, T(t.cancelText), 11, kn), s("button", {
1830
+ }, T(t.cancelText), 11, On), s("button", {
1866
1831
  type: "button",
1867
1832
  disabled: !C.value || t.submitting,
1868
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]),
1869
1834
  onClick: F
1870
- }, T(t.submitting ? t.submittingText : t.confirmText), 11, An)]),
1835
+ }, T(t.submitting ? t.submittingText : t.confirmText), 11, kn)]),
1871
1836
  default: M(() => [
1872
1837
  t.message ? (y(), o("p", {
1873
1838
  key: 0,
1874
1839
  class: m(["text-sm", E(d) ? "text-gray-300" : "text-gray-600"])
1875
1840
  }, T(t.message), 3)) : a("", !0),
1876
- _.value ? (y(), o("div", yn, [u(st, { color: "emerald" })])) : v.value ? (y(), o("div", bn, T(v.value), 1)) : a("", !0),
1877
- !_.value && !v.value && O.value.length > 0 ? (y(), o("div", xn, [s("div", Sn, [u(E(_e), {
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), {
1878
1843
  class: m(["absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4", E(f).dimText]),
1879
1844
  "aria-hidden": "true"
1880
1845
  }, null, 8, ["class"]), N(s("input", {
@@ -1884,16 +1849,16 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
1884
1849
  type: "text",
1885
1850
  placeholder: t.searchPlaceholder,
1886
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]])
1887
- }, null, 10, Cn), [[A, w.value]])])])) : a("", !0),
1888
- !_.value && !v.value ? (y(), o("div", wn, [(y(!0), o(e, null, x(k.value, (e) => (y(), o("button", {
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", {
1889
1854
  key: e.id,
1890
1855
  type: "button",
1891
1856
  "aria-pressed": C.value === e.id,
1892
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"]]),
1893
1858
  onClick: (t) => C.value = e.id
1894
1859
  }, [
1895
- u(E(he), { class: m(["w-5 h-5 flex-shrink-0", E(f).dimText]) }, null, 8, ["class"]),
1896
- s("div", En, [s("p", { class: m(["text-sm font-medium truncate", E(f).bodyText]) }, T(e.label), 3)]),
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)]),
1897
1862
  C.value === e.id ? (y(), o("div", {
1898
1863
  key: 0,
1899
1864
  class: m(["w-5 h-5 rounded-full flex items-center justify-center", P.value.checkBg])
@@ -1909,15 +1874,15 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
1909
1874
  "stroke-linejoin": "round",
1910
1875
  d: "M5 13l4 4L19 7"
1911
1876
  })], -1)]], 2)) : a("", !0)
1912
- ], 10, Tn))), 128)), O.value.length === 0 ? (y(), o("div", Dn, [s("p", { class: m(["text-sm", E(f).dimText]) }, T(t.emptyMessage), 3)])) : k.value.length === 0 ? (y(), o("div", On, [s("p", { class: m(["text-sm", E(f).dimText]) }, T(t.noMatchMessage), 3)])) : a("", !0)])) : 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)
1913
1878
  ]),
1914
1879
  _: 3
1915
1880
  }, 8, ["title", "manual-close"]));
1916
1881
  }
1917
- }), Mn = {
1882
+ }), jn = {
1918
1883
  href: "#main-content",
1919
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"
1920
- }, Nn = ["inert"], Pn = /* @__PURE__ */ d({
1885
+ }, Mn = ["inert"], Nn = /* @__PURE__ */ d({
1921
1886
  __name: "BaseAppLayout",
1922
1887
  props: {
1923
1888
  showSidebar: {
@@ -1927,19 +1892,19 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
1927
1892
  skipLinkLabel: { default: "Skip to main content" }
1928
1893
  },
1929
1894
  setup(e) {
1930
- let t = e, { isDark: n } = U(), { mobileOpen: i } = en(), { collapsed: c } = an(), l = r(() => t.showSidebar);
1895
+ let t = e, { isDark: n } = B(), { mobileOpen: i } = $t(), { collapsed: c } = rn(), l = r(() => t.showSidebar);
1931
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"]) }, [
1932
- s("a", Mn, T(e.skipLinkLabel), 1),
1897
+ s("a", jn, T(e.skipLinkLabel), 1),
1933
1898
  l.value ? S(t.$slots, "sidebar", { key: 0 }) : a("", !0),
1934
1899
  s("main", {
1935
1900
  id: "main-content",
1936
1901
  tabindex: "-1",
1937
1902
  inert: l.value && E(i) ? !0 : void 0,
1938
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" : ""])
1939
- }, [S(t.$slots, "default")], 10, Nn)
1904
+ }, [S(t.$slots, "default")], 10, Mn)
1940
1905
  ], 2));
1941
1906
  }
1942
- }), Fn = { class: "flex flex-wrap items-center justify-between gap-3 mb-8" }, In = { class: "flex items-center gap-3 min-w-0" }, Ln = { class: "flex items-center gap-2" }, Rn = /* @__PURE__ */ d({
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({
1943
1908
  __name: "BasePageHeader",
1944
1909
  props: {
1945
1910
  title: {},
@@ -1948,7 +1913,7 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
1948
1913
  maxWidthClass: { default: "max-w-4xl" }
1949
1914
  },
1950
1915
  setup(e) {
1951
- let t = e, { isDark: n } = U(), i = J(), c = r(() => {
1916
+ let t = e, { isDark: n } = B(), i = J(), c = r(() => {
1952
1917
  let e = {
1953
1918
  emerald: {
1954
1919
  dark: "bg-emerald-500/10",
@@ -1989,16 +1954,16 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
1989
1954
  }[t.iconColor];
1990
1955
  return n.value ? e.dark : e.light;
1991
1956
  });
1992
- return (t, n) => (y(), o("div", { class: m(["mx-auto px-4 sm:px-6", e.maxWidthClass]) }, [s("div", Fn, [s("div", In, [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", 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", {
1993
1958
  key: 0,
1994
1959
  class: m(["text-sm", E(i).dimTextAlt])
1995
- }, T(e.subtitle), 3)) : a("", !0)])]), s("div", Ln, [S(t.$slots, "actions")])])], 2));
1960
+ }, T(e.subtitle), 3)) : a("", !0)])]), s("div", In, [S(t.$slots, "actions")])])], 2));
1996
1961
  }
1997
- }), zn = [
1962
+ }), Rn = [
1998
1963
  "type",
1999
1964
  "disabled",
2000
1965
  "title"
2001
- ], Bn = { key: 0 }, Vn = /* @__PURE__ */ d({
1966
+ ], zn = { key: 0 }, Bn = /* @__PURE__ */ d({
2002
1967
  __name: "BaseToolbarButton",
2003
1968
  props: {
2004
1969
  label: { default: "" },
@@ -2012,7 +1977,7 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2012
1977
  },
2013
1978
  emits: ["click"],
2014
1979
  setup(e) {
2015
- let t = e, { isDark: n } = U(), i = r(() => {
1980
+ let t = e, { isDark: n } = B(), i = r(() => {
2016
1981
  let e = {
2017
1982
  neutral: {
2018
1983
  dark: "bg-gray-800 text-gray-100 border-gray-700 hover:bg-gray-700",
@@ -2031,14 +1996,14 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2031
1996
  title: e.title,
2032
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]),
2033
1998
  onClick: n[0] ||= (e) => t.$emit("click", e)
2034
- }, [S(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (y(), o("span", Bn, T(e.label), 1)) : a("", !0)], 10, zn));
1999
+ }, [S(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (y(), o("span", zn, T(e.label), 1)) : a("", !0)], 10, Rn));
2035
2000
  }
2036
- }), Hn = [
2001
+ }), Vn = [
2037
2002
  "type",
2038
2003
  "disabled",
2039
2004
  "title",
2040
2005
  "aria-label"
2041
- ], Un = { key: 0 }, Wn = /* @__PURE__ */ d({
2006
+ ], Hn = { key: 0 }, Un = /* @__PURE__ */ d({
2042
2007
  __name: "BaseActionButton",
2043
2008
  props: {
2044
2009
  label: { default: "" },
@@ -2057,7 +2022,7 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2057
2022
  },
2058
2023
  emits: ["click"],
2059
2024
  setup(e) {
2060
- let t = e, { isDark: n } = U(), i = r(() => {
2025
+ let t = e, { isDark: n } = B(), i = r(() => {
2061
2026
  let e = {
2062
2027
  emerald: {
2063
2028
  dark: "text-emerald-400 hover:bg-emerald-500/10",
@@ -2137,9 +2102,9 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2137
2102
  "aria-label": e.ariaLabel,
2138
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]]),
2139
2104
  onClick: n[0] ||= (e) => t.$emit("click", e)
2140
- }, [S(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (y(), o("span", Un, T(e.label), 1)) : a("", !0)], 10, Hn));
2105
+ }, [S(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (y(), o("span", Hn, T(e.label), 1)) : a("", !0)], 10, Vn));
2141
2106
  }
2142
- }), Gn = ["title", "aria-label"], Kn = /* @__PURE__ */ d({
2107
+ }), Wn = ["title", "aria-label"], Gn = /* @__PURE__ */ d({
2143
2108
  __name: "BaseCopyButton",
2144
2109
  props: {
2145
2110
  text: {},
@@ -2150,7 +2115,7 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2150
2115
  },
2151
2116
  emits: ["copied", "error"],
2152
2117
  setup(e, { emit: t }) {
2153
- let n = e, a = t, { isDark: s } = U(), 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 } = 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"}`);
2154
2119
  async function p(e) {
2155
2120
  try {
2156
2121
  if (navigator.clipboard?.writeText) {
@@ -2188,20 +2153,20 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2188
2153
  key: 1,
2189
2154
  class: m(e.iconClass),
2190
2155
  "aria-hidden": "true"
2191
- }, null, 8, ["class"]))], 10, Gn));
2156
+ }, null, 8, ["class"]))], 10, Wn));
2192
2157
  }
2193
- }), qn = ["disabled", "aria-busy"], Jn = {
2158
+ }), Kn = ["disabled", "aria-busy"], qn = {
2194
2159
  key: 0,
2195
2160
  class: "w-5 h-5 animate-spin shrink-0",
2196
2161
  viewBox: "0 0 24 24",
2197
2162
  fill: "none",
2198
2163
  "aria-hidden": "true"
2199
- }, Yn = {
2164
+ }, Jn = {
2200
2165
  key: 1,
2201
2166
  class: "w-5 h-5 shrink-0",
2202
2167
  viewBox: "0 0 48 48",
2203
2168
  "aria-hidden": "true"
2204
- }, Xn = /* @__PURE__ */ d({
2169
+ }, Yn = /* @__PURE__ */ d({
2205
2170
  __name: "BaseGoogleSignInButton",
2206
2171
  props: {
2207
2172
  label: { default: "Sign in with Google" },
@@ -2220,7 +2185,7 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2220
2185
  },
2221
2186
  emits: ["click"],
2222
2187
  setup(e, { emit: t }) {
2223
- let n = e, i = t, { isDark: a } = U(), l = r(() => n.disabled || n.loading);
2188
+ let n = e, i = t, { isDark: a } = B(), l = r(() => n.disabled || n.loading);
2224
2189
  function u() {
2225
2190
  l.value || i("click");
2226
2191
  }
@@ -2230,7 +2195,7 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2230
2195
  "aria-busy": e.loading,
2231
2196
  onClick: u,
2232
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"]])
2233
- }, [e.loading ? (y(), o("svg", Jn, [...n[0] ||= [s("circle", {
2198
+ }, [e.loading ? (y(), o("svg", qn, [...n[0] ||= [s("circle", {
2234
2199
  class: "opacity-25",
2235
2200
  cx: "12",
2236
2201
  cy: "12",
@@ -2241,18 +2206,18 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2241
2206
  class: "opacity-75",
2242
2207
  fill: "currentColor",
2243
2208
  d: "M4 12a8 8 0 0 1 8-8V0C5.4 0 0 5.4 0 12h4z"
2244
- }, null, -1)]])) : (y(), o("svg", Yn, [...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, qn));
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));
2245
2210
  }
2246
- }), Zn = {
2211
+ }), Xn = {
2247
2212
  key: 0,
2248
2213
  class: "flex justify-center mb-6"
2249
- }, Qn = { class: "mb-6 text-center" }, $n = { class: "flex items-center gap-3 my-5" }, er = ["disabled"], tr = { class: "flex items-center justify-between mb-1.5" }, nr = { class: "relative" }, rr = ["type", "disabled"], ir = ["aria-label", "aria-pressed"], ar = ["disabled"], or = ["disabled", "aria-busy"], sr = {
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 = {
2250
2215
  key: 0,
2251
2216
  class: "w-4 h-4 animate-spin",
2252
2217
  viewBox: "0 0 24 24",
2253
2218
  fill: "none",
2254
2219
  "aria-hidden": "true"
2255
- }, cr = /* @__PURE__ */ d({
2220
+ }, sr = /* @__PURE__ */ d({
2256
2221
  __name: "BaseLoginForm",
2257
2222
  props: {
2258
2223
  title: { default: "Sign in" },
@@ -2278,7 +2243,7 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2278
2243
  },
2279
2244
  emits: ["submit", "google-sign-in"],
2280
2245
  setup(t, { emit: n }) {
2281
- let i = t, c = n, { isDark: d } = U(), f = J(), p = b(""), h = b(""), g = b(!1), _ = b(!1), v = r(() => i.loading || i.googleLoading);
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);
2282
2247
  function x() {
2283
2248
  v.value || c("submit", {
2284
2249
  email: p.value,
@@ -2287,8 +2252,8 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2287
2252
  });
2288
2253
  }
2289
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]) }, [
2290
- n.$slots.logo ? (y(), o("div", Zn, [S(n.$slots, "logo")])) : a("", !0),
2291
- s("div", Qn, [s("h1", { class: m(["text-xl font-semibold", E(f).primaryText]) }, T(t.title), 3), t.subtitle ? (y(), o("p", {
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", {
2292
2257
  key: 0,
2293
2258
  class: m(["mt-1 text-sm", E(f).mutedText])
2294
2259
  }, T(t.subtitle), 3)) : a("", !0)]),
@@ -2297,11 +2262,11 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2297
2262
  role: "alert",
2298
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"])
2299
2264
  }, T(t.error), 3)) : a("", !0),
2300
- t.showGoogle ? (y(), o(e, { key: 2 }, [u(Xn, {
2265
+ t.showGoogle ? (y(), o(e, { key: 2 }, [u(Yn, {
2301
2266
  loading: t.googleLoading,
2302
2267
  disabled: t.loading,
2303
2268
  onClick: r[0] ||= (e) => c("google-sign-in")
2304
- }, null, 8, ["loading", "disabled"]), s("div", $n, [
2269
+ }, null, 8, ["loading", "disabled"]), s("div", Qn, [
2305
2270
  s("span", { class: m(["h-px flex-1", E(d) ? "bg-gray-700" : "bg-gray-200"]) }, null, 2),
2306
2271
  s("span", { class: m(["text-xs uppercase tracking-wider", E(f).dimTextAlt]) }, "or", 2),
2307
2272
  s("span", { class: m(["h-px flex-1", E(d) ? "bg-gray-700" : "bg-gray-200"]) }, null, 2)
@@ -2323,11 +2288,11 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2323
2288
  disabled: v.value,
2324
2289
  placeholder: "you@example.com",
2325
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])
2326
- }, null, 10, er), [[A, p.value]])]),
2327
- s("div", null, [s("div", tr, [s("label", {
2291
+ }, null, 10, $n), [[A, p.value]])]),
2292
+ s("div", null, [s("div", er, [s("label", {
2328
2293
  for: "login-password",
2329
2294
  class: m(["block text-sm font-medium", E(f).label])
2330
- }, " Password ", 2), S(n.$slots, "forgot")]), s("div", nr, [N(s("input", {
2295
+ }, " Password ", 2), S(n.$slots, "forgot")]), s("div", tr, [N(s("input", {
2331
2296
  id: "login-password",
2332
2297
  "onUpdate:modelValue": r[2] ||= (e) => h.value = e,
2333
2298
  type: _.value ? "text" : "password",
@@ -2337,13 +2302,13 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2337
2302
  disabled: v.value,
2338
2303
  placeholder: "••••••••",
2339
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])
2340
- }, null, 10, rr), [[k, h.value]]), s("button", {
2305
+ }, null, 10, nr), [[k, h.value]]), s("button", {
2341
2306
  type: "button",
2342
2307
  onClick: r[3] ||= (e) => _.value = !_.value,
2343
2308
  "aria-label": _.value ? "Hide password" : "Show password",
2344
2309
  "aria-pressed": _.value,
2345
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])
2346
- }, T(_.value ? "Hide" : "Show"), 11, ir)])]),
2311
+ }, T(_.value ? "Hide" : "Show"), 11, rr)])]),
2347
2312
  t.showRemember ? (y(), o("label", {
2348
2313
  key: 0,
2349
2314
  class: m(["flex items-center gap-2 text-sm cursor-pointer select-none", E(f).bodyText])
@@ -2352,13 +2317,13 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2352
2317
  type: "checkbox",
2353
2318
  disabled: v.value,
2354
2319
  class: "w-4 h-4 rounded border-gray-300 text-emerald-600 focus:ring-emerald-500"
2355
- }, null, 8, ar), [[O, g.value]]), r[5] ||= l(" Remember me ", -1)], 2)) : a("", !0),
2320
+ }, null, 8, ir), [[O, g.value]]), r[5] ||= l(" Remember me ", -1)], 2)) : a("", !0),
2356
2321
  s("button", {
2357
2322
  type: "submit",
2358
2323
  disabled: v.value,
2359
2324
  "aria-busy": t.loading,
2360
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"
2361
- }, [t.loading ? (y(), o("svg", sr, [...r[6] ||= [s("circle", {
2326
+ }, [t.loading ? (y(), o("svg", or, [...r[6] ||= [s("circle", {
2362
2327
  class: "opacity-25",
2363
2328
  cx: "12",
2364
2329
  cy: "12",
@@ -2369,7 +2334,7 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2369
2334
  class: "opacity-75",
2370
2335
  fill: "currentColor",
2371
2336
  d: "M4 12a8 8 0 0 1 8-8V0C5.4 0 0 5.4 0 12h4z"
2372
- }, null, -1)]])) : a("", !0), l(" " + T(t.submitLabel), 1)], 8, or)
2337
+ }, null, -1)]])) : a("", !0), l(" " + T(t.submitLabel), 1)], 8, ar)
2373
2338
  ], 32),
2374
2339
  n.$slots.footer ? (y(), o("div", {
2375
2340
  key: 3,
@@ -2377,10 +2342,10 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2377
2342
  }, [S(n.$slots, "footer")], 2)) : a("", !0)
2378
2343
  ], 2));
2379
2344
  }
2380
- }), lr = ["aria-label"], ur = { class: "flex-1 overflow-y-auto" }, dr = {
2345
+ }), cr = ["aria-label"], lr = { class: "flex-1 overflow-y-auto" }, ur = {
2381
2346
  key: 0,
2382
2347
  class: "flex flex-col items-center justify-center text-center px-6 py-16 gap-3"
2383
- }, fr = ["onClick"], pr = { class: "min-w-0 flex-1" }, mr = { class: "flex items-baseline justify-between gap-2" }, hr = /* @__PURE__ */ d({
2348
+ }, dr = ["onClick"], fr = { class: "min-w-0 flex-1" }, pr = { class: "flex items-baseline justify-between gap-2" }, mr = /* @__PURE__ */ d({
2384
2349
  __name: "BaseNotificationPanel",
2385
2350
  props: {
2386
2351
  title: { default: "Notifications" },
@@ -2392,7 +2357,7 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2392
2357
  },
2393
2358
  emits: ["select"],
2394
2359
  setup(c, { emit: d }) {
2395
- let f = d, { isDark: p } = U(), h = J(), { notifications: g, unreadCount: _, open: v, closePanel: b, markAllRead: S, markRead: C } = sn(), w = {
2360
+ let f = d, { isDark: p } = B(), h = J(), { notifications: g, unreadCount: _, open: v, closePanel: b, markAllRead: S, markRead: C } = on(), w = {
2396
2361
  info: "bg-sky-500",
2397
2362
  success: "bg-emerald-500",
2398
2363
  warning: "bg-amber-500",
@@ -2434,7 +2399,7 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2434
2399
  onClick: d[1] ||= (...e) => E(b) && E(b)(...e),
2435
2400
  "aria-label": "Close notifications",
2436
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"])
2437
- }, [u(E(xe), {
2402
+ }, [u(E(be), {
2438
2403
  class: "w-5 h-5",
2439
2404
  "aria-hidden": "true"
2440
2405
  })], 2)], 2),
@@ -2446,7 +2411,7 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2446
2411
  onClick: d[2] ||= (...e) => E(S) && E(S)(...e),
2447
2412
  class: m(["text-xs font-medium cursor-pointer transition-colors focus:outline-none focus-visible:underline", E(h).emeraldText])
2448
2413
  }, " Mark all as read ", 2)], 2)) : a("", !0),
2449
- s("div", ur, [D.value === 0 ? (y(), o("div", dr, [u(E(ie), {
2414
+ s("div", lr, [D.value === 0 ? (y(), o("div", ur, [u(E(ie), {
2450
2415
  class: m(["w-10 h-10", E(h).illustration]),
2451
2416
  "aria-hidden": "true"
2452
2417
  }, null, 8, ["class"]), s("p", { class: m(["text-sm", E(h).mutedText]) }, T(c.emptyText), 3)])) : (y(), o("ul", {
@@ -2459,18 +2424,74 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2459
2424
  }, [s("span", {
2460
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"]]),
2461
2426
  "aria-hidden": "true"
2462
- }, null, 2), s("span", pr, [s("span", mr, [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", 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", {
2463
2428
  key: 0,
2464
2429
  class: m(["text-xs shrink-0", E(h).dimText])
2465
2430
  }, T(e.time), 3)) : a("", !0)]), e.message ? (y(), o("span", {
2466
2431
  key: 0,
2467
2432
  class: m(["mt-0.5 block text-sm", E(h).mutedText])
2468
- }, T(e.message), 3)) : a("", !0)])], 10, fr)]))), 128))], 2))])
2469
- ], 10, lr)) : a("", !0)]),
2433
+ }, T(e.message), 3)) : a("", !0)])], 10, dr)]))), 128))], 2))])
2434
+ ], 10, cr)) : a("", !0)]),
2470
2435
  _: 1
2471
2436
  })]));
2472
2437
  }
2473
- }), gr = ["value", "type"], _r = /* @__PURE__ */ d({
2438
+ }), hr = ["disabled"], gr = /* @__PURE__ */ d({
2439
+ __name: "BaseChipButton",
2440
+ props: {
2441
+ size: { default: "sm" },
2442
+ disabled: {
2443
+ type: Boolean,
2444
+ default: !1
2445
+ }
2446
+ },
2447
+ emits: ["click"],
2448
+ setup(e, { emit: t }) {
2449
+ let n = t, { isDark: r } = B();
2450
+ return (t, i) => (y(), o("button", {
2451
+ type: "button",
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"]]),
2454
+ onClick: i[0] ||= (e) => n("click")
2455
+ }, [S(t.$slots, "default")], 10, hr));
2456
+ }
2457
+ }), _r = /* @__PURE__ */ d({
2458
+ __name: "BaseRemoveButton",
2459
+ emits: ["click"],
2460
+ setup(e, { emit: t }) {
2461
+ let n = t;
2462
+ return (e, t) => (y(), o("button", {
2463
+ type: "button",
2464
+ class: "px-2 text-lg leading-none text-red-400 hover:text-red-600 transition-colors cursor-pointer rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-red-400 disabled:cursor-not-allowed disabled:text-gray-400 disabled:hover:text-gray-400",
2465
+ onClick: t[0] ||= (e) => n("click")
2466
+ }, " × "));
2467
+ }
2468
+ }), vr = { class: "relative flex h-2 w-2" }, yr = {
2469
+ key: 0,
2470
+ class: "animate-ping absolute inline-flex h-full w-full rounded-full bg-emerald-400 opacity-75",
2471
+ "aria-hidden": "true"
2472
+ }, br = /* @__PURE__ */ d({
2473
+ __name: "BaseStatusPill",
2474
+ props: {
2475
+ status: {},
2476
+ label: {}
2477
+ },
2478
+ setup(e) {
2479
+ let t = e, { isDark: n } = B(), i = r(() => {
2480
+ switch (t.status) {
2481
+ case "ok": return n.value ? "bg-emerald-500/10 text-emerald-400" : "bg-emerald-50 text-emerald-700";
2482
+ case "error": return n.value ? "bg-red-500/10 text-red-400" : "bg-red-50 text-red-700";
2483
+ default: return n.value ? "bg-gray-700 text-gray-400" : "bg-gray-100 text-gray-500";
2484
+ }
2485
+ }), c = r(() => {
2486
+ switch (t.status) {
2487
+ case "ok": return "bg-emerald-500";
2488
+ case "error": return "bg-red-500";
2489
+ default: return "bg-gray-400";
2490
+ }
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));
2493
+ }
2494
+ }), xr = ["value", "type"], Sr = /* @__PURE__ */ d({
2474
2495
  __name: "BaseInput",
2475
2496
  props: {
2476
2497
  modelValue: { default: "" },
@@ -2492,9 +2513,9 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2492
2513
  type: e.type,
2493
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"]]),
2494
2515
  onInput: r
2495
- }, null, 42, gr));
2516
+ }, null, 42, xr));
2496
2517
  }
2497
- }), vr = ["value"], yr = /* @__PURE__ */ d({
2518
+ }), Cr = ["value"], wr = /* @__PURE__ */ d({
2498
2519
  __name: "BaseSelect",
2499
2520
  props: {
2500
2521
  modelValue: { default: void 0 },
@@ -2514,13 +2535,13 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2514
2535
  value: e.modelValue,
2515
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"]]),
2516
2537
  onChange: r
2517
- }, [S(t.$slots, "default")], 42, vr));
2538
+ }, [S(t.$slots, "default")], 42, Cr));
2518
2539
  }
2519
- }), br = [
2540
+ }), Tr = [
2520
2541
  "disabled",
2521
2542
  "aria-label",
2522
2543
  "aria-expanded"
2523
- ], xr = ["aria-label"], Sr = ["aria-selected", "title"], Cr = ["disabled", "onClick"], wr = /* @__PURE__ */ d({
2544
+ ], Er = ["aria-label"], Dr = ["aria-selected", "title"], Or = ["disabled", "onClick"], kr = /* @__PURE__ */ d({
2524
2545
  __name: "BaseDropdown",
2525
2546
  props: {
2526
2547
  options: {},
@@ -2570,7 +2591,7 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2570
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), {
2571
2592
  class: m(["w-5 h-5 shrink-0 text-slate-500 dark:text-slate-400 transition-transform", l.value ? "rotate-180" : ""]),
2572
2593
  "aria-hidden": "true"
2573
- }, null, 8, ["class"])], 10, br), l.value ? (y(), o("ul", {
2594
+ }, null, 8, ["class"])], 10, Tr), l.value ? (y(), o("ul", {
2574
2595
  key: 0,
2575
2596
  role: "listbox",
2576
2597
  "aria-label": t.ariaLabel || t.placeholder,
@@ -2585,13 +2606,13 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2585
2606
  disabled: e.disabled,
2586
2607
  class: m(_(e)),
2587
2608
  onClick: (t) => S(e)
2588
- }, T(e.label), 11, Cr)], 8, Sr))), 128))], 8, xr)) : a("", !0)], 2));
2609
+ }, T(e.label), 11, Or)], 8, Dr))), 128))], 8, Er)) : a("", !0)], 2));
2589
2610
  }
2590
- }), Tr = ["role", "aria-label"], Er = [
2611
+ }), Ar = ["role", "aria-label"], jr = [
2591
2612
  "aria-pressed",
2592
2613
  "title",
2593
2614
  "onClick"
2594
- ], Dr = "bg-slate-50 dark:bg-slate-900 text-slate-600 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-800", Or = /* @__PURE__ */ d({
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({
2595
2616
  __name: "BaseSegmentedControl",
2596
2617
  props: {
2597
2618
  options: {},
@@ -2608,7 +2629,7 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2608
2629
  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");
2609
2630
  function u(e) {
2610
2631
  let t = e.value === i.modelValue;
2611
- return i.optionClass ? i.optionClass(e, t) : t ? l.value : Dr;
2632
+ return i.optionClass ? i.optionClass(e, t) : t ? l.value : Mr;
2612
2633
  }
2613
2634
  return (n, r) => (y(), o("div", {
2614
2635
  role: t.ariaLabel ? "group" : void 0,
@@ -2621,9 +2642,9 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2621
2642
  "aria-pressed": e.value === t.modelValue,
2622
2643
  title: e.title,
2623
2644
  onClick: (t) => a("update:modelValue", e.value)
2624
- }, T(e.label), 11, Er))), 128))], 10, Tr));
2645
+ }, T(e.label), 11, jr))), 128))], 10, Ar));
2625
2646
  }
2626
- }), kr = { class: "w-full text-sm" }, Ar = { class: "bg-slate-50 dark:bg-slate-800/60 text-slate-600 dark:text-slate-300" }, jr = { class: "text-left" }, Mr = { key: 0 }, Nr = ["colspan"], Pr = /* @__PURE__ */ d({
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({
2627
2648
  __name: "BaseTable",
2628
2649
  props: {
2629
2650
  columns: {},
@@ -2634,24 +2655,24 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2634
2655
  emptyText: { default: "No rows." }
2635
2656
  },
2636
2657
  setup(t) {
2637
- return (n, r) => (y(), o("table", kr, [s("thead", Ar, [s("tr", jr, [(y(!0), o(e, null, x(t.columns, (e, t) => (y(), o("th", {
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", {
2638
2659
  key: t,
2639
2660
  class: m(["px-4 py-3", e.align === "right" ? "text-right" : ""])
2640
- }, T(e.label), 3))), 128))])]), s("tbody", null, [t.empty ? (y(), o("tr", Mr, [s("td", {
2661
+ }, T(e.label), 3))), 128))])]), s("tbody", null, [t.empty ? (y(), o("tr", Lr, [s("td", {
2641
2662
  colspan: t.columns.length,
2642
2663
  class: "px-4 py-12 text-center text-slate-500"
2643
- }, [S(n.$slots, "empty", {}, () => [l(T(t.emptyText), 1)])], 8, Nr)])) : a("", !0), S(n.$slots, "default")])]));
2664
+ }, [S(n.$slots, "empty", {}, () => [l(T(t.emptyText), 1)])], 8, Rr)])) : a("", !0), S(n.$slots, "default")])]));
2644
2665
  }
2645
- }), Fr = { class: "grid gap-3 md:grid-cols-2" }, Ir = {
2666
+ }), Br = { class: "grid gap-3 md:grid-cols-2" }, Vr = {
2646
2667
  key: 0,
2647
2668
  class: "block text-[11px] uppercase tracking-wide text-slate-500 mb-1"
2648
- }, Lr = ["value"], Rr = {
2669
+ }, Hr = ["value"], Ur = {
2649
2670
  key: 2,
2650
2671
  class: "flex items-center gap-2 mt-4"
2651
- }, zr = ["checked", "onChange"], Br = { class: "text-sm text-slate-900 dark:text-slate-100" }, Vr = {
2672
+ }, Wr = ["checked", "onChange"], Gr = { class: "text-sm text-slate-900 dark:text-slate-100" }, Kr = {
2652
2673
  key: 4,
2653
2674
  class: "text-[11px] text-slate-400 mt-1"
2654
- }, Hr = /* @__PURE__ */ d({
2675
+ }, qr = /* @__PURE__ */ d({
2655
2676
  __name: "BaseSpecFields",
2656
2677
  props: {
2657
2678
  specs: {},
@@ -2667,9 +2688,9 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2667
2688
  let n = parseFloat(t);
2668
2689
  r("update", e, Number.isNaN(n) ? t : n);
2669
2690
  }
2670
- return (n, u) => (y(), o("div", Fr, [(y(!0), o(e, null, x(t.specs, (u) => (y(), o("div", { key: u.key }, [
2671
- u.type === "boolean" ? a("", !0) : (y(), o("label", Ir, T(u.label), 1)),
2672
- u.type === "select" ? (y(), i(yr, {
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, {
2673
2694
  key: 1,
2674
2695
  modelValue: String(t.params[u.key] ?? ""),
2675
2696
  "onUpdate:modelValue": (e) => r("update", u.key, e)
@@ -2677,14 +2698,14 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2677
2698
  default: M(() => [(y(!0), o(e, null, x(u.options ?? [], (e) => (y(), o("option", {
2678
2699
  key: e,
2679
2700
  value: e
2680
- }, T(e), 9, Lr))), 128))]),
2701
+ }, T(e), 9, Hr))), 128))]),
2681
2702
  _: 2
2682
- }, 1032, ["modelValue", "onUpdate:modelValue"])) : u.type === "boolean" ? (y(), o("label", Rr, [s("input", {
2703
+ }, 1032, ["modelValue", "onUpdate:modelValue"])) : u.type === "boolean" ? (y(), o("label", Ur, [s("input", {
2683
2704
  checked: !!t.params[u.key],
2684
2705
  type: "checkbox",
2685
2706
  class: "h-4 w-4",
2686
2707
  onChange: (e) => c(u.key, e)
2687
- }, null, 40, zr), s("span", Br, T(u.label), 1)])) : (y(), i(_r, {
2708
+ }, null, 40, Wr), s("span", Gr, T(u.label), 1)])) : (y(), i(Sr, {
2688
2709
  key: 3,
2689
2710
  modelValue: t.params[u.key],
2690
2711
  type: "number",
@@ -2697,11 +2718,11 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2697
2718
  "min",
2698
2719
  "onUpdate:modelValue"
2699
2720
  ])),
2700
- u.help ? (y(), o("p", Vr, T(u.help), 1)) : a("", !0),
2721
+ u.help ? (y(), o("p", Kr, T(u.help), 1)) : a("", !0),
2701
2722
  S(n.$slots, "after", { spec: u })
2702
2723
  ]))), 128))]));
2703
2724
  }
2704
- }), Ur = { class: "mt-1.5 space-y-0.5 px-1" }, Wr = { class: "text-slate-400 dark:text-slate-500" }, Gr = /* @__PURE__ */ d({
2725
+ }), Jr = { class: "mt-1.5 space-y-0.5 px-1" }, Yr = { class: "text-slate-400 dark:text-slate-500" }, Xr = /* @__PURE__ */ d({
2705
2726
  __name: "BaseStatBreakdown",
2706
2727
  props: {
2707
2728
  items: {},
@@ -2720,15 +2741,15 @@ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }
2720
2741
  function i(e) {
2721
2742
  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";
2722
2743
  }
2723
- return (n, a) => (y(), o("div", Ur, [(y(!0), o(e, null, x(t.items, (e) => (y(), o("div", {
2744
+ return (n, a) => (y(), o("div", Jr, [(y(!0), o(e, null, x(t.items, (e) => (y(), o("div", {
2724
2745
  key: e.label,
2725
2746
  class: "flex items-center justify-between text-[11px]"
2726
- }, [s("span", Wr, T(e.label), 1), s("span", { class: m(["font-mono tabular-nums font-medium", i(e.value)]) }, T(r(e.value)), 3)]))), 128))]));
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))]));
2727
2748
  }
2728
2749
  });
2729
2750
  //#endregion
2730
2751
  //#region src/composables/useDebounce.ts
2731
- function Kr(e, t = 300) {
2752
+ function Zr(e, t = 300) {
2732
2753
  let n = b(e.value), r = null;
2733
2754
  return j(e, (e) => {
2734
2755
  r && clearTimeout(r), r = setTimeout(() => {
@@ -2740,7 +2761,7 @@ function Kr(e, t = 300) {
2740
2761
  }
2741
2762
  //#endregion
2742
2763
  //#region src/composables/useToast.ts
2743
- function qr(e = 3e3) {
2764
+ function Qr(e = 3e3) {
2744
2765
  let t = b(!1), n = b(""), r = b(K.SUCCESS), i = null;
2745
2766
  function a() {
2746
2767
  i &&= (clearTimeout(i), null);
@@ -2761,16 +2782,66 @@ function qr(e = 3e3) {
2761
2782
  }
2762
2783
  //#endregion
2763
2784
  //#region src/enums/BaseBadgeEnum.ts
2764
- var Jr = /* @__PURE__ */ function(e) {
2785
+ var $r = /* @__PURE__ */ function(e) {
2765
2786
  return e.WIN = "WIN", e.LOSE = "LOSE", e;
2766
- }({}), Yr = {
2787
+ }({});
2788
+ //#endregion
2789
+ //#region src/utils/util.ts
2790
+ function ei(e) {
2791
+ let t = "red";
2792
+ switch (e) {
2793
+ case L.ERROR:
2794
+ t = "red";
2795
+ break;
2796
+ case L.SUCCESS:
2797
+ t = "green";
2798
+ break;
2799
+ case L.INFO:
2800
+ t = "gray";
2801
+ break;
2802
+ case L.WARNING:
2803
+ t = "yellow";
2804
+ break;
2805
+ }
2806
+ return t;
2807
+ }
2808
+ function ti(e) {
2809
+ let t = "red";
2810
+ switch (e) {
2811
+ case V.GREEN:
2812
+ t = "green";
2813
+ break;
2814
+ case V.RED:
2815
+ t = "red";
2816
+ break;
2817
+ case V.BLUE:
2818
+ t = "blue";
2819
+ break;
2820
+ case V.YELLOW:
2821
+ t = "yellow";
2822
+ break;
2823
+ case V.BLACK:
2824
+ t = "black";
2825
+ break;
2826
+ case V.GRAY:
2827
+ t = "gray";
2828
+ break;
2829
+ case V.NONE:
2830
+ t = "";
2831
+ break;
2832
+ }
2833
+ return t;
2834
+ }
2835
+ //#endregion
2836
+ //#region src/utils/httpColors.ts
2837
+ var ni = {
2767
2838
  GET: "bg-blue-600",
2768
2839
  POST: "bg-emerald-600",
2769
2840
  PUT: "bg-amber-600",
2770
2841
  DELETE: "bg-red-600",
2771
2842
  PATCH: "bg-purple-600",
2772
2843
  HEAD: "bg-gray-600"
2773
- }, Xr = {
2844
+ }, ri = {
2774
2845
  GET: "bg-blue-500",
2775
2846
  POST: "bg-green-500",
2776
2847
  PUT: "bg-yellow-500",
@@ -2778,23 +2849,23 @@ var Jr = /* @__PURE__ */ function(e) {
2778
2849
  PATCH: "bg-purple-500",
2779
2850
  HEAD: "bg-gray-500"
2780
2851
  };
2781
- function Zr(e) {
2782
- return e ? Yr[e.toUpperCase()] ?? "bg-gray-600" : "bg-gray-600";
2852
+ function ii(e) {
2853
+ return e ? ni[e.toUpperCase()] ?? "bg-gray-600" : "bg-gray-600";
2783
2854
  }
2784
- function Qr(e) {
2785
- return e ? Xr[e.toUpperCase()] ?? "bg-gray-500" : "bg-gray-500";
2855
+ function ai(e) {
2856
+ return e ? ri[e.toUpperCase()] ?? "bg-gray-500" : "bg-gray-500";
2786
2857
  }
2787
- function $r(e) {
2858
+ function oi(e) {
2788
2859
  let t = e ?? 0;
2789
2860
  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";
2790
2861
  }
2791
- function ei(e, t) {
2862
+ function si(e, t) {
2792
2863
  let n = e ?? 200;
2793
2864
  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";
2794
2865
  }
2795
2866
  //#endregion
2796
2867
  //#region src/utils/sanitizeHtml.ts
2797
- var ti = /* @__PURE__ */ new Set([
2868
+ var ci = /* @__PURE__ */ new Set([
2798
2869
  "A",
2799
2870
  "B",
2800
2871
  "STRONG",
@@ -2809,7 +2880,7 @@ var ti = /* @__PURE__ */ new Set([
2809
2880
  "LI",
2810
2881
  "SPAN",
2811
2882
  "DIV"
2812
- ]), ni = /* @__PURE__ */ new Set([
2883
+ ]), li = /* @__PURE__ */ new Set([
2813
2884
  "SCRIPT",
2814
2885
  "STYLE",
2815
2886
  "IFRAME",
@@ -2817,53 +2888,53 @@ var ti = /* @__PURE__ */ new Set([
2817
2888
  "EMBED",
2818
2889
  "NOSCRIPT",
2819
2890
  "TEMPLATE"
2820
- ]), ri = { A: /* @__PURE__ */ new Set(["href", "title"]) };
2821
- function ii(e) {
2891
+ ]), ui = { A: /* @__PURE__ */ new Set(["href", "title"]) };
2892
+ function di(e) {
2822
2893
  let t = e.trim().toLowerCase();
2823
2894
  return t.startsWith("http://") || t.startsWith("https://") || t.startsWith("mailto:") || t.startsWith("tel:") || t.startsWith("/") || t.startsWith("#") || t === "";
2824
2895
  }
2825
- function ai(e) {
2896
+ function fi(e) {
2826
2897
  if (e.nodeType !== Node.ELEMENT_NODE) return;
2827
2898
  let t = e, n = t.tagName.toUpperCase();
2828
- if (!ti.has(n)) {
2829
- ni.has(n) ? t.remove() : t.replaceWith(document.createTextNode(t.textContent ?? ""));
2899
+ if (!ci.has(n)) {
2900
+ li.has(n) ? t.remove() : t.replaceWith(document.createTextNode(t.textContent ?? ""));
2830
2901
  return;
2831
2902
  }
2832
- let r = ri[n] ?? /* @__PURE__ */ new Set();
2903
+ let r = ui[n] ?? /* @__PURE__ */ new Set();
2833
2904
  for (let e of Array.from(t.attributes)) {
2834
2905
  if (!r.has(e.name.toLowerCase())) {
2835
2906
  t.removeAttribute(e.name);
2836
2907
  continue;
2837
2908
  }
2838
- n === "A" && e.name.toLowerCase() === "href" && !ii(e.value) && t.removeAttribute(e.name);
2909
+ n === "A" && e.name.toLowerCase() === "href" && !di(e.value) && t.removeAttribute(e.name);
2839
2910
  }
2840
2911
  n === "A" && t.hasAttribute("href") && (t.setAttribute("rel", "noopener noreferrer"), t.setAttribute("target", "_blank"));
2841
- for (let e of Array.from(t.childNodes)) ai(e);
2912
+ for (let e of Array.from(t.childNodes)) fi(e);
2842
2913
  }
2843
- function oi(e) {
2914
+ function pi(e) {
2844
2915
  if (!e) return "";
2845
2916
  let t = new DOMParser().parseFromString(`<div>${e}</div>`, "text/html").body.firstElementChild;
2846
2917
  if (!t) return "";
2847
- for (let e of Array.from(t.childNodes)) ai(e);
2918
+ for (let e of Array.from(t.childNodes)) fi(e);
2848
2919
  return t.innerHTML;
2849
2920
  }
2850
2921
  //#endregion
2851
2922
  //#region src/utils/format.ts
2852
- var si = "—";
2853
- function ci(e, t = 4) {
2854
- if (e == null || typeof e == "string" && e.trim() === "") return si;
2923
+ var mi = "—";
2924
+ function hi(e, t = 4) {
2925
+ if (e == null || typeof e == "string" && e.trim() === "") return mi;
2855
2926
  let n = typeof e == "string" ? Number(e) : e;
2856
2927
  return isFinite(n) ? n.toLocaleString(void 0, {
2857
2928
  minimumFractionDigits: t,
2858
2929
  maximumFractionDigits: t
2859
- }) : si;
2930
+ }) : mi;
2860
2931
  }
2861
- function li(e) {
2862
- if (e == null || e === "") return si;
2932
+ function gi(e) {
2933
+ if (e == null || e === "") return mi;
2863
2934
  let t = new Date(e);
2864
2935
  return isNaN(t.getTime()) ? String(e) : t.toLocaleString();
2865
2936
  }
2866
- function ui(e) {
2937
+ function _i(e) {
2867
2938
  return new Date(e).toLocaleString(void 0, {
2868
2939
  month: "short",
2869
2940
  day: "numeric",
@@ -2871,13 +2942,13 @@ function ui(e) {
2871
2942
  minute: "2-digit"
2872
2943
  });
2873
2944
  }
2874
- function di(e) {
2945
+ function vi(e) {
2875
2946
  return new Date(e).toLocaleDateString(void 0, {
2876
2947
  month: "short",
2877
2948
  day: "numeric"
2878
2949
  });
2879
2950
  }
2880
- function fi(e) {
2951
+ function yi(e) {
2881
2952
  if (!isFinite(e) || e === 0) return e.toFixed(2);
2882
2953
  let t = Math.abs(e), n = 2;
2883
2954
  return t < 1e-4 ? n = 8 : t < .01 ? n = 6 : t < 1 ? n = 4 : t < 100 && (n = 3), e.toLocaleString(void 0, {
@@ -2885,20 +2956,20 @@ function fi(e) {
2885
2956
  maximumFractionDigits: n
2886
2957
  });
2887
2958
  }
2888
- function pi(e, t = 2) {
2959
+ function bi(e, t = 2) {
2889
2960
  return `${e >= 0 ? "+" : ""}${e.toFixed(t)}%`;
2890
2961
  }
2891
- function mi(e) {
2962
+ function xi(e) {
2892
2963
  return `${e < 0 ? "-" : "+"}$${Math.abs(e).toFixed(2)}`;
2893
2964
  }
2894
- function hi(e, t = 2) {
2895
- if (e == null || !isFinite(e)) return si;
2965
+ function Si(e, t = 2) {
2966
+ if (e == null || !isFinite(e)) return mi;
2896
2967
  let n = Math.floor(Math.max(0, e) / 6e4), r = Math.floor(n / 1440), i = Math.floor(n % 1440 / 60), a = n % 60, o = [];
2897
2968
  return r > 0 && o.push(`${r}d`), (r > 0 || i > 0) && o.push(`${i}h`), o.push(`${a}m`), o.slice(0, t).join(" ");
2898
2969
  }
2899
2970
  //#endregion
2900
2971
  //#region src/utils/pnl.ts
2901
- function gi(e) {
2972
+ function Ci(e) {
2902
2973
  if (e.buyPrice == null || e.lastPrice == null || e.filledQty == null) return {
2903
2974
  pnlUsd: null,
2904
2975
  pnlPct: null
@@ -2913,4 +2984,4 @@ function gi(e) {
2913
2984
  };
2914
2985
  }
2915
2986
  //#endregion
2916
- export { I as AlertEnum, Wn as BaseActionButton, Oe as BaseAlert, Pn as BaseAppLayout, R as BaseBadge, Jr as BaseBadgeEnum, Ne as BaseBreadcrumb, Ge as BaseButton, z as BaseButtonEnum, B as BaseButtonSizeEnum, Ht as BaseCollapsibleSection, Kt as BaseConfirmModal, Kn as BaseCopyButton, wr as BaseDropdown, jn as BaseEntityPickerModal, Xn as BaseGoogleSignInButton, _r as BaseInput, Ye as BaseLine, Xe as BaseLoginEnum, cr as BaseLoginForm, Qe as BaseLogo, G as BaseLogoEnum, at as BaseModal, $e as BaseModalEnum, zt as BaseModalShell, $t as BaseNotFoundPage, hr as BaseNotificationPanel, Rn as BasePageHeader, ot as BaseRow, Or as BaseSegmentedControl, yr as BaseSelect, vn as BaseSidebar, Hr as BaseSpecFields, st as BaseSpinner, Gr as BaseStatBreakdown, Pr as BaseTable, Xt as BaseTextInputModal, ut as BaseToast, K as BaseToastEnum, Vn as BaseToolbarButton, ft as ColoredSquares, L as ColorsEnums, ht as EarningsCard, bt as EuroAmount, W as LineEnum, Tt as Pagination, q as PositioningEnum, At as TrendArrow, gi as computePnL, li as fmtDate, di as fmtDateShort, ui as fmtDateTime, hi as fmtDuration, ci as fmtNumber, pi as fmtPct, fi as fmtPrice, mi as fmtUsd, Te as getBaseColor, Ee as getBaseColorOf, Ie as initTheme, ii as isSafeHref, Qr as methodBadgeBright, Zr as methodBadgeSolid, oi as sanitizeHtml, $r as statusBadgeSolid, ei as statusBadgeTinted, Kr as useDebouncedRef, Y as useEscapeKey, en as useMobileSidebar, sn as useNotifications, an as useSidebarCollapse, U as useTheme, J as useThemeClasses, qr as useToast };
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 };