mgv-backoffice 1.47.0 → 1.49.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.
Files changed (43) hide show
  1. package/README.md +2099 -2072
  2. package/dist/components/BaseBooleanIcon.vue.d.ts +14 -0
  3. package/dist/components/BaseDetailList.vue.d.ts +13 -1
  4. package/dist/components/BasePageHeader.vue.d.ts +1 -1
  5. package/dist/components/BasePhotoViewer.vue.d.ts +24 -0
  6. package/dist/components/BaseRating.vue.d.ts +9 -0
  7. package/dist/components/BaseRowButton.vue.d.ts +18 -0
  8. package/dist/components/BaseSelect.vue.d.ts +15 -3
  9. package/dist/components/BaseSidebarUser.vue.d.ts +3 -0
  10. package/dist/components/BaseStatCard.vue.d.ts +6 -4
  11. package/dist/components/BaseTextarea.vue.d.ts +12 -0
  12. package/dist/composables/useRefreshOnReturn.d.ts +7 -0
  13. package/dist/index.d.ts +8 -1
  14. package/dist/types/photoViewer.d.ts +6 -0
  15. package/dist/ui-lib.css +1 -1
  16. package/dist/ui-lib.js +1050 -851
  17. package/dist/ui-lib.umd.cjs +1 -1
  18. package/dist/utils/format.d.ts +9 -0
  19. package/package.json +1 -1
  20. package/src/components/BaseBadge.vue +7 -7
  21. package/src/components/BaseBooleanIcon.vue +22 -0
  22. package/src/components/BaseDetailList.vue +50 -47
  23. package/src/components/BaseField.label.test.ts +30 -0
  24. package/src/components/BaseField.vue +19 -3
  25. package/src/components/BasePageHeader.test.ts +29 -0
  26. package/src/components/BasePageHeader.vue +137 -131
  27. package/src/components/BasePhotoViewer.test.ts +22 -0
  28. package/src/components/BasePhotoViewer.vue +93 -0
  29. package/src/components/BaseRating.test.ts +19 -0
  30. package/src/components/BaseRating.vue +21 -0
  31. package/src/components/BaseRowButton.vue +24 -0
  32. package/src/components/BaseSelect.vue +4 -2
  33. package/src/components/BaseSidebarUser.vue +85 -75
  34. package/src/components/BaseStatCard.vue +11 -3
  35. package/src/components/BaseTextarea.test.ts +17 -0
  36. package/src/components/BaseTextarea.vue +24 -0
  37. package/src/composables/useRefreshOnReturn.test.ts +47 -0
  38. package/src/composables/useRefreshOnReturn.ts +24 -0
  39. package/src/index.ts +10 -0
  40. package/src/style.css +132 -36
  41. package/src/types/photoViewer.ts +6 -0
  42. package/src/utils/format.test.ts +342 -322
  43. package/src/utils/format.ts +23 -0
package/dist/ui-lib.js CHANGED
@@ -1,32 +1,32 @@
1
- import { Fragment as e, Teleport as t, Text as n, Transition as r, cloneVNode as i, computed as a, createBlock as o, createCommentVNode as s, createElementBlock as c, createElementVNode as l, createSlots as u, createStaticVNode as d, createTextVNode as f, createVNode as p, defineComponent as m, effectScope as h, getCurrentScope as g, guardReactiveProps as _, mergeProps as v, nextTick as y, normalizeClass as b, normalizeProps as x, normalizeStyle as S, onBeforeUnmount as C, onMounted as w, onScopeDispose as T, onUnmounted as E, openBlock as D, reactive as O, readonly as ee, ref as k, renderList as A, renderSlot as j, resolveComponent as M, resolveDynamicComponent as N, toDisplayString as P, unref as F, useId as te, useSlots as ne, vModelCheckbox as re, vModelDynamic as ie, vModelText as ae, vShow as oe, watch as I, withCtx as L, withDirectives as R, withKeys as se, withModifiers as z } from "vue";
2
- import { ArrowDownIcon as ce, ArrowRightStartOnRectangleIcon as le, ArrowUpIcon as ue, Bars3Icon as de, BellIcon as fe, CheckCircleIcon as pe, CheckIcon as me, ChevronDoubleLeftIcon as he, ChevronDoubleRightIcon as ge, ChevronDownIcon as _e, ChevronRightIcon as ve, ClipboardDocumentCheckIcon as ye, ClipboardDocumentIcon as be, DocumentDuplicateIcon as xe, ExclamationCircleIcon as Se, ExclamationTriangleIcon as Ce, FolderIcon as we, InformationCircleIcon as Te, MagnifyingGlassIcon as Ee, MinusIcon as De, MoonIcon as Oe, SunIcon as ke, XMarkIcon as Ae } from "@heroicons/vue/24/outline";
3
- import { HomeIcon as je } from "@heroicons/vue/24/solid";
4
- import { RouterLink as Me, useRoute as Ne, useRouter as Pe } from "vue-router";
5
- import { VueDatePicker as Fe } from "@vuepic/vue-datepicker";
1
+ import { Fragment as e, Teleport as t, Text as n, Transition as r, cloneVNode as i, computed as a, createBlock as o, createCommentVNode as s, createElementBlock as c, createElementVNode as l, createSlots as u, createStaticVNode as d, createTextVNode as f, createVNode as p, defineComponent as m, effectScope as h, getCurrentScope as g, guardReactiveProps as _, mergeModels as v, mergeProps as y, nextTick as b, normalizeClass as x, normalizeProps as S, normalizeStyle as C, onBeforeUnmount as w, onMounted as T, onScopeDispose as E, onUnmounted as D, openBlock as O, reactive as ee, readonly as k, ref as A, renderList as j, renderSlot as M, resolveComponent as te, resolveDynamicComponent as N, toDisplayString as P, unref as F, useId as ne, useModel as re, useSlots as ie, vModelCheckbox as ae, vModelDynamic as oe, vModelText as se, vShow as ce, watch as le, withCtx as I, withDirectives as L, withKeys as ue, withModifiers as R } from "vue";
2
+ import { ArrowDownIcon as de, ArrowRightStartOnRectangleIcon as fe, ArrowUpIcon as pe, Bars3Icon as me, BellIcon as he, CheckCircleIcon as ge, CheckIcon as _e, ChevronDoubleLeftIcon as ve, ChevronDoubleRightIcon as ye, ChevronDownIcon as be, ChevronLeftIcon as xe, ChevronRightIcon as Se, ClipboardDocumentCheckIcon as Ce, ClipboardDocumentIcon as we, DocumentDuplicateIcon as Te, ExclamationCircleIcon as Ee, ExclamationTriangleIcon as De, FolderIcon as Oe, InformationCircleIcon as ke, MagnifyingGlassIcon as Ae, MinusIcon as je, MoonIcon as Me, StarIcon as Ne, SunIcon as Pe, XMarkIcon as z } from "@heroicons/vue/24/outline";
3
+ import { HomeIcon as Fe, StarIcon as Ie } from "@heroicons/vue/24/solid";
4
+ import { RouterLink as Le, useRoute as Re, useRouter as ze } from "vue-router";
5
+ import { VueDatePicker as Be } from "@vuepic/vue-datepicker";
6
6
  //#region src/enums/AlertEnum.ts
7
7
  var B = /* @__PURE__ */ function(e) {
8
8
  return e.WARNING = "WARNING", e.ERROR = "ERROR", e.SUCCESS = "SUCCESS", e.INFO = "INFO", e;
9
- }({}), V = k(!1), Ie = !1, H = "mgv-theme";
10
- function Le(e) {
11
- if (Ie) {
9
+ }({}), V = A(!1), Ve = !1, H = "mgv-theme";
10
+ function He(e) {
11
+ if (Ve) {
12
12
  e !== H && console.warn(`[ui-lib] useTheme: storage key "${e}" ignored — theme already initialized with "${H}". Call initTheme({ storageKey }) before mounting any component.`);
13
13
  return;
14
14
  }
15
- if (Ie = !0, H = e, typeof window < "u") {
15
+ if (Ve = !0, H = e, typeof window < "u") {
16
16
  let e = window.localStorage?.getItem(H);
17
17
  e ? V.value = e === "dark" : typeof window.matchMedia == "function" && (V.value = window.matchMedia("(prefers-color-scheme: dark)").matches);
18
18
  }
19
19
  typeof document < "u" && h(!0).run(() => {
20
- I(V, (e) => {
20
+ le(V, (e) => {
21
21
  document.documentElement.classList.toggle("dark", e), window.localStorage?.setItem(H, e ? "dark" : "light");
22
22
  }, { immediate: !0 });
23
23
  });
24
24
  }
25
- function Re(e) {
26
- Le(e?.storageKey ?? H);
25
+ function Ue(e) {
26
+ He(e?.storageKey ?? H);
27
27
  }
28
28
  function U(e) {
29
- Le(e?.storageKey ?? H);
29
+ He(e?.storageKey ?? H);
30
30
  function t() {
31
31
  V.value = !V.value;
32
32
  }
@@ -37,10 +37,10 @@ function U(e) {
37
37
  }
38
38
  //#endregion
39
39
  //#region src/components/BaseAlert.vue?vue&type=script&setup=true&lang.ts
40
- var ze = { class: "min-w-0 flex-1" }, Be = {
40
+ var We = { class: "min-w-0 flex-1" }, Ge = {
41
41
  key: 0,
42
42
  class: "font-medium"
43
- }, Ve = /* @__PURE__ */ m({
43
+ }, Ke = /* @__PURE__ */ m({
44
44
  __name: "BaseAlert",
45
45
  props: {
46
46
  title: { default: "" },
@@ -70,10 +70,10 @@ var ze = { class: "min-w-0 flex-1" }, Be = {
70
70
  }
71
71
  }, i = a(() => n.value ? r[t.color].dark : r[t.color].light), u = a(() => {
72
72
  switch (t.color) {
73
- case B.SUCCESS: return pe;
74
- case B.WARNING: return Ce;
75
- case B.INFO: return Te;
76
- default: return Se;
73
+ case B.SUCCESS: return ge;
74
+ case B.WARNING: return De;
75
+ case B.INFO: return ke;
76
+ default: return Ee;
77
77
  }
78
78
  }), d = a(() => {
79
79
  switch (t.color) {
@@ -83,39 +83,39 @@ var ze = { class: "min-w-0 flex-1" }, Be = {
83
83
  default: return "text-red-500";
84
84
  }
85
85
  });
86
- return (t, n) => (D(), c("div", {
86
+ return (t, n) => (O(), c("div", {
87
87
  role: "alert",
88
- class: b(["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", i.value]])
89
- }, [(D(), o(N(u.value), {
90
- class: b(["shrink-0", [e.compact ? "w-4 h-4 mt-px" : "w-5 h-5 mt-0.5", d.value]]),
88
+ class: x(["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", i.value]])
89
+ }, [(O(), o(N(u.value), {
90
+ class: x(["shrink-0", [e.compact ? "w-4 h-4 mt-px" : "w-5 h-5 mt-0.5", d.value]]),
91
91
  "aria-hidden": "true"
92
- }, null, 8, ["class"])), l("div", ze, [e.title ? (D(), c("p", Be, P(e.title), 1)) : s("", !0), j(t.$slots, "default")])], 2));
92
+ }, null, 8, ["class"])), l("div", We, [e.title ? (O(), c("p", Ge, P(e.title), 1)) : s("", !0), M(t.$slots, "default")])], 2));
93
93
  }
94
94
  }), W = /* @__PURE__ */ function(e) {
95
95
  return e.NONE = "NONE", e.RED = "RED", e.YELLOW = "YELLOW", e.BLACK = "BLACK", e.GRAY = "GRAY", e.GREEN = "GREEN", e.BLUE = "BLUE", e;
96
96
  }({});
97
97
  //#endregion
98
98
  //#region src/utils/humanize.ts
99
- function He(e) {
99
+ function qe(e) {
100
100
  return e == null ? "" : String(e).replace(/_/g, " ");
101
101
  }
102
- function Ue(t, r = []) {
102
+ function Je(t, r = []) {
103
103
  return t.map((t) => {
104
- if (t.type === n && typeof t.children == "string") return f(He(t.children));
104
+ if (t.type === n && typeof t.children == "string") return f(qe(t.children));
105
105
  if (t.type === e && Array.isArray(t.children)) {
106
106
  let e = i(t);
107
- return e.children = Ue(t.children, r), e;
107
+ return e.children = Je(t.children, r), e;
108
108
  }
109
109
  if (typeof t.type == "string" && r.includes(t.type)) {
110
110
  let e = i(t);
111
- return typeof t.children == "string" ? e.children = He(t.children) : Array.isArray(t.children) && (e.children = Ue(t.children, r)), e;
111
+ return typeof t.children == "string" ? e.children = qe(t.children) : Array.isArray(t.children) && (e.children = Je(t.children, r)), e;
112
112
  }
113
113
  return t;
114
114
  });
115
115
  }
116
116
  //#endregion
117
- //#region src/components/BaseBadge.vue?vue&type=script&setup=true&lang.ts
118
- var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
117
+ //#region src/components/BaseBadge.vue
118
+ var Ye = /* @__PURE__ */ m({
119
119
  __name: "BaseBadge",
120
120
  props: {
121
121
  color: {
@@ -128,27 +128,27 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
128
128
  }
129
129
  },
130
130
  setup(e) {
131
- let t = ne(), n = a(() => !!t.default), r = () => Ue(t.default?.() ?? []), i = e, o = {
132
- [W.RED]: "bg-red-100 text-red-700 border-red-200",
133
- [W.GREEN]: "bg-green-100 text-green-700 border-green-200",
134
- [W.BLUE]: "bg-blue-100 text-blue-700 border-blue-200",
135
- [W.YELLOW]: "bg-yellow-100 text-yellow-700 border-yellow-200",
136
- [W.GRAY]: "bg-gray-100 text-gray-700 border-gray-200",
131
+ let t = ie(), n = a(() => !!t.default), r = () => Je(t.default?.() ?? []), i = e, o = {
132
+ [W.RED]: "bg-red-100 text-red-700 border-red-200 dark:bg-red-500/15 dark:text-red-300 dark:border-red-500/30",
133
+ [W.GREEN]: "bg-green-100 text-green-700 border-green-200 dark:bg-green-500/15 dark:text-green-300 dark:border-green-500/30",
134
+ [W.BLUE]: "bg-blue-100 text-blue-700 border-blue-200 dark:bg-blue-500/15 dark:text-blue-300 dark:border-blue-500/30",
135
+ [W.YELLOW]: "bg-yellow-100 text-yellow-700 border-yellow-200 dark:bg-yellow-500/15 dark:text-yellow-300 dark:border-yellow-500/30",
136
+ [W.GRAY]: "bg-gray-100 text-gray-700 border-gray-200 dark:bg-gray-500/15 dark:text-gray-300 dark:border-gray-500/30",
137
137
  [W.BLACK]: "bg-gray-800 text-gray-100 border-gray-700",
138
- [W.NONE]: "bg-gray-50 text-gray-600 border-gray-200"
139
- }, l = a(() => `inline-flex items-center gap-1 font-semibold text-xs leading-none px-3 py-1.5 rounded-full border ${i.color && o[i.color] || We}${i.blink ? " animate-pulse motion-reduce:animate-none" : ""}`);
140
- return (e, t) => n.value ? (D(), c("span", {
138
+ [W.NONE]: "bg-gray-50 text-gray-600 border-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:border-gray-700"
139
+ }, l = o[W.RED], u = a(() => `inline-flex items-center gap-1 font-semibold text-xs leading-none px-3 py-1.5 rounded-full border ${i.color && o[i.color] || l}${i.blink ? " animate-pulse motion-reduce:animate-none" : ""}`);
140
+ return (e, t) => n.value ? (O(), c("span", {
141
141
  key: 0,
142
- class: b(l.value)
142
+ class: x(u.value)
143
143
  }, [p(r)], 2)) : s("", !0);
144
144
  }
145
- }), Ke = {
145
+ }), Xe = {
146
146
  class: "flex overflow-x-auto px-5 py-3 text-gray-700 border border-slate-200 rounded-xl bg-white shadow-sm dark:bg-slate-900 dark:border-slate-700",
147
147
  "aria-label": "Breadcrumb"
148
- }, qe = { class: "inline-flex items-center whitespace-nowrap space-x-1 md:space-x-3" }, Je = {
148
+ }, Ze = { class: "inline-flex items-center whitespace-nowrap space-x-1 md:space-x-3" }, Qe = {
149
149
  class: "inline-flex items-center",
150
150
  style: { "margin-left": "0" }
151
- }, Ye = /* @__PURE__ */ m({
151
+ }, $e = /* @__PURE__ */ m({
152
152
  __name: "BaseBreadcrumb",
153
153
  props: {
154
154
  items: {
@@ -172,22 +172,22 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
172
172
  }));
173
173
  });
174
174
  return (t, n) => {
175
- let i = M("router-link");
176
- return D(), c("nav", Ke, [l("ol", qe, [l("li", Je, [p(i, {
175
+ let i = te("router-link");
176
+ return O(), c("nav", Xe, [l("ol", Ze, [l("li", Qe, [p(i, {
177
177
  to: "/",
178
178
  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"
179
179
  }, {
180
- default: L(() => [p(F(je), { class: "h-4 w-4 text-gray-500 mr-2" }), n[0] ||= f(" Home ", -1)]),
180
+ default: I(() => [p(F(Fe), { class: "h-4 w-4 text-gray-500 mr-2" }), n[0] ||= f(" Home ", -1)]),
181
181
  _: 1
182
- })]), (D(!0), c(e, null, A(r.value, (e, t) => (D(), c("li", {
182
+ })]), (O(!0), c(e, null, j(r.value, (e, t) => (O(), c("li", {
183
183
  key: t,
184
184
  class: "inline-flex items-center",
185
185
  style: { "margin-left": "0" }
186
- }, [p(F(ve), { class: "h-4 w-4 text-gray-500" }), p(i, {
186
+ }, [p(F(Se), { class: "h-4 w-4 text-gray-500" }), p(i, {
187
187
  to: e.url,
188
188
  class: "ml-1 text-sm font-medium text-gray-700 hover:text-blue-600 md:ml-2 dark:text-gray-400 dark:hover:text-white transition-colors rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500"
189
189
  }, {
190
- default: L(() => [f(P(e.name), 1)]),
190
+ default: I(() => [f(P(e.name), 1)]),
191
191
  _: 2
192
192
  }, 1032, ["to"])]))), 128))])]);
193
193
  };
@@ -196,17 +196,17 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
196
196
  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;
197
197
  }({}), K = /* @__PURE__ */ function(e) {
198
198
  return e.EXTRA_SMALL = "EXTRA_SMALL", e.SMALL = "SMALL", e.BASE = "BASE", e.LARGE = "LARGE", e.EXTRA_LARGE = "EXTRA_LARGE", e;
199
- }({}), Xe = [
199
+ }({}), et = [
200
200
  "type",
201
201
  "disabled",
202
202
  "onClick"
203
- ], Ze = {
203
+ ], tt = {
204
204
  key: 0,
205
205
  class: "inline-flex items-center"
206
- }, Qe = { key: 1 }, $e = { key: 2 }, et = ["type", "disabled"], tt = {
206
+ }, nt = { key: 1 }, rt = { key: 2 }, it = ["type", "disabled"], at = {
207
207
  key: 0,
208
208
  class: "inline-flex items-center"
209
- }, nt = { key: 1 }, rt = { key: 2 }, q = /* @__PURE__ */ m({
209
+ }, ot = { key: 1 }, st = { key: 2 }, q = /* @__PURE__ */ m({
210
210
  __name: "BaseButton",
211
211
  props: {
212
212
  description: {
@@ -420,19 +420,19 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
420
420
  return n.isRounded && (s = "rounded-full"), t + " " + o + " " + a + " font-medium " + s;
421
421
  }
422
422
  return (t, r) => {
423
- let i = M("router-link");
424
- return e.to ? (D(), o(i, {
423
+ let i = te("router-link");
424
+ return e.to ? (O(), o(i, {
425
425
  key: 0,
426
426
  to: e.to,
427
427
  custom: ""
428
428
  }, {
429
- default: L(({ navigate: i }) => [l("button", {
429
+ default: I(({ navigate: i }) => [l("button", {
430
430
  type: n.type,
431
- class: b(a()),
431
+ class: x(a()),
432
432
  disabled: e.isDisable || e.isLoading,
433
433
  onClick: i
434
434
  }, [
435
- e.isLoading ? (D(), c("div", Ze, [...r[0] ||= [l("svg", {
435
+ e.isLoading ? (O(), c("div", tt, [...r[0] ||= [l("svg", {
436
436
  "aria-hidden": "true",
437
437
  role: "status",
438
438
  class: "inline w-4 h-4 me-3 animate-spin",
@@ -446,18 +446,18 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
446
446
  d: "M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z",
447
447
  fill: "currentColor"
448
448
  })], -1)]])) : s("", !0),
449
- e.iconLeft ? s("", !0) : (D(), c("span", Qe, P(e.description), 1)),
450
- j(t.$slots, "default"),
451
- e.iconLeft ? (D(), c("span", $e, P(e.description), 1)) : s("", !0)
452
- ], 10, Xe)]),
449
+ e.iconLeft ? s("", !0) : (O(), c("span", nt, P(e.description), 1)),
450
+ M(t.$slots, "default"),
451
+ e.iconLeft ? (O(), c("span", rt, P(e.description), 1)) : s("", !0)
452
+ ], 10, et)]),
453
453
  _: 3
454
- }, 8, ["to"])) : (D(), c("button", {
454
+ }, 8, ["to"])) : (O(), c("button", {
455
455
  key: 1,
456
456
  type: n.type,
457
- class: b(a()),
457
+ class: x(a()),
458
458
  disabled: e.isDisable || e.isLoading
459
459
  }, [
460
- e.isLoading ? (D(), c("div", tt, [...r[1] ||= [l("svg", {
460
+ e.isLoading ? (O(), c("div", at, [...r[1] ||= [l("svg", {
461
461
  "aria-hidden": "true",
462
462
  role: "status",
463
463
  class: "inline w-4 h-4 me-3 animate-spin",
@@ -471,40 +471,40 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
471
471
  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",
472
472
  fill: "currentColor"
473
473
  })], -1)]])) : s("", !0),
474
- e.iconLeft ? s("", !0) : (D(), c("span", nt, P(e.description), 1)),
475
- j(t.$slots, "default"),
476
- e.iconLeft ? (D(), c("span", rt, P(e.description), 1)) : s("", !0)
477
- ], 10, et));
474
+ e.iconLeft ? s("", !0) : (O(), c("span", ot, P(e.description), 1)),
475
+ M(t.$slots, "default"),
476
+ e.iconLeft ? (O(), c("span", st, P(e.description), 1)) : s("", !0)
477
+ ], 10, it));
478
478
  };
479
479
  }
480
- }), it = /* @__PURE__ */ function(e) {
480
+ }), ct = /* @__PURE__ */ function(e) {
481
481
  return e.BASE = "BASE", e.BASE_SHORTER = "BASE_SHORTER", e.SQUARE = "SQUARE", e;
482
- }({}), at = {
482
+ }({}), lt = {
483
483
  key: 0,
484
484
  class: "h-px my-8 bg-gray-200 border-0 dark:bg-gray-700"
485
- }, ot = {
485
+ }, ut = {
486
486
  key: 1,
487
487
  class: "w-48 h-1 mx-auto my-4 bg-gray-100 border-0 rounded md:my-10 dark:bg-gray-700"
488
- }, st = {
488
+ }, dt = {
489
489
  key: 2,
490
490
  class: "w-8 h-8 mx-auto my-8 bg-gray-200 border-0 rounded md:my-12 dark:bg-gray-700"
491
- }, ct = /* @__PURE__ */ m({
491
+ }, ft = /* @__PURE__ */ m({
492
492
  __name: "BaseLine",
493
493
  props: { mode: {
494
494
  type: String,
495
495
  required: !1,
496
- default: it.BASE
496
+ default: ct.BASE
497
497
  } },
498
498
  setup(t) {
499
- return (n, r) => (D(), c(e, null, [
500
- t.mode === F(it).BASE ? (D(), c("hr", at)) : s("", !0),
501
- t.mode === F(it).BASE_SHORTER ? (D(), c("hr", ot)) : s("", !0),
502
- t.mode === F(it).SQUARE ? (D(), c("hr", st)) : s("", !0)
499
+ return (n, r) => (O(), c(e, null, [
500
+ t.mode === F(ct).BASE ? (O(), c("hr", lt)) : s("", !0),
501
+ t.mode === F(ct).BASE_SHORTER ? (O(), c("hr", ut)) : s("", !0),
502
+ t.mode === F(ct).SQUARE ? (O(), c("hr", dt)) : s("", !0)
503
503
  ], 64));
504
504
  }
505
505
  }), J = /* @__PURE__ */ function(e) {
506
506
  return e.SMALL = "SMALL", e.MEDIUM = "MEDIUM", e.LARGE = "LARGE", e;
507
- }({}), lt = J, ut = ["height", "width"], dt = ["id"], ft = ["id", "href"], pt = ["id", "href"], mt = ["id", "href"], ht = ["id", "href"], gt = ["id", "href"], _t = ["id", "href"], vt = ["id", "href"], yt = ["id", "href"], bt = ["id", "href"], xt = ["id"], St = ["fill"], Ct = ["fill"], wt = ["fill"], Tt = ["fill"], Et = ["fill"], Dt = ["fill"], Ot = ["fill"], kt = ["fill"], At = ["fill"], jt = ["fill"], Mt = /* @__PURE__ */ m({
507
+ }({}), pt = J, mt = ["height", "width"], ht = ["id"], gt = ["id", "href"], _t = ["id", "href"], vt = ["id", "href"], yt = ["id", "href"], bt = ["id", "href"], xt = ["id", "href"], St = ["id", "href"], Ct = ["id", "href"], wt = ["id", "href"], Tt = ["id"], Et = ["fill"], Dt = ["fill"], Ot = ["fill"], kt = ["fill"], At = ["fill"], jt = ["fill"], Mt = ["fill"], Nt = ["fill"], Pt = ["fill"], Ft = ["fill"], It = /* @__PURE__ */ m({
508
508
  __name: "BaseLogo",
509
509
  props: { size: {
510
510
  type: String,
@@ -512,7 +512,7 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
512
512
  default: J.MEDIUM
513
513
  } },
514
514
  setup(e) {
515
- let t = `logo-${te()}`, n = e;
515
+ let t = `logo-${ne()}`, n = e;
516
516
  function r() {
517
517
  let e = "";
518
518
  switch (n.size) {
@@ -527,12 +527,12 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
527
527
  return e;
528
528
  }
529
529
  return (e, n) => {
530
- let i = M("router-link");
531
- return D(), o(i, {
530
+ let i = te("router-link");
531
+ return O(), o(i, {
532
532
  to: "/",
533
533
  class: "flex items-center mb-6 text-2xl font-semibold text-gray-900 dark:text-white"
534
534
  }, {
535
- default: L(() => [(D(), c("svg", {
535
+ default: I(() => [(O(), c("svg", {
536
536
  height: r(),
537
537
  width: r(),
538
538
  viewBox: "33.6 130.6 499.7 242.9",
@@ -545,7 +545,7 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
545
545
  }, null, -1), l("stop", {
546
546
  offset: "1",
547
547
  "stop-color": "#132d13"
548
- }, null, -1)]], 8, dt),
548
+ }, null, -1)]], 8, ht),
549
549
  l("linearGradient", {
550
550
  id: `${t}-b`,
551
551
  gradientUnits: "userSpaceOnUse",
@@ -554,7 +554,7 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
554
554
  href: `#${t}-a`,
555
555
  y1: "288.291",
556
556
  y2: "369.4"
557
- }, null, 8, ft),
557
+ }, null, 8, gt),
558
558
  l("linearGradient", {
559
559
  id: `${t}-c`,
560
560
  gradientUnits: "userSpaceOnUse",
@@ -563,7 +563,7 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
563
563
  href: `#${t}-a`,
564
564
  y1: "308.454",
565
565
  y2: "370.601"
566
- }, null, 8, pt),
566
+ }, null, 8, _t),
567
567
  l("linearGradient", {
568
568
  id: `${t}-d`,
569
569
  gradientUnits: "userSpaceOnUse",
@@ -572,7 +572,7 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
572
572
  href: `#${t}-a`,
573
573
  y1: "288.291",
574
574
  y2: "369.85"
575
- }, null, 8, mt),
575
+ }, null, 8, vt),
576
576
  l("linearGradient", {
577
577
  id: `${t}-e`,
578
578
  gradientUnits: "userSpaceOnUse",
@@ -581,7 +581,7 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
581
581
  href: `#${t}-a`,
582
582
  y1: "307.312",
583
583
  y2: "369.511"
584
- }, null, 8, ht),
584
+ }, null, 8, yt),
585
585
  l("linearGradient", {
586
586
  id: `${t}-f`,
587
587
  gradientUnits: "userSpaceOnUse",
@@ -590,7 +590,7 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
590
590
  href: `#${t}-a`,
591
591
  y1: "288.291",
592
592
  y2: "367.857"
593
- }, null, 8, gt),
593
+ }, null, 8, bt),
594
594
  l("linearGradient", {
595
595
  id: `${t}-g`,
596
596
  gradientUnits: "userSpaceOnUse",
@@ -599,7 +599,7 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
599
599
  href: `#${t}-a`,
600
600
  y1: "307.312",
601
601
  y2: "369.511"
602
- }, null, 8, _t),
602
+ }, null, 8, xt),
603
603
  l("linearGradient", {
604
604
  id: `${t}-h`,
605
605
  gradientUnits: "userSpaceOnUse",
@@ -608,7 +608,7 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
608
608
  href: `#${t}-a`,
609
609
  y1: "306.156",
610
610
  y2: "367.742"
611
- }, null, 8, vt),
611
+ }, null, 8, St),
612
612
  l("linearGradient", {
613
613
  id: `${t}-i`,
614
614
  gradientUnits: "userSpaceOnUse",
@@ -617,7 +617,7 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
617
617
  href: `#${t}-a`,
618
618
  y1: "288.291",
619
619
  y2: "369.4"
620
- }, null, 8, yt),
620
+ }, null, 8, Ct),
621
621
  l("linearGradient", {
622
622
  id: `${t}-j`,
623
623
  gradientUnits: "userSpaceOnUse",
@@ -626,7 +626,7 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
626
626
  href: `#${t}-a`,
627
627
  y1: "131.629",
628
628
  y2: "232.559"
629
- }, null, 8, bt),
629
+ }, null, 8, wt),
630
630
  l("linearGradient", {
631
631
  id: `${t}-k`,
632
632
  gradientUnits: "userSpaceOnUse",
@@ -641,64 +641,64 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
641
641
  }, null, -1), l("stop", {
642
642
  offset: "1",
643
643
  "stop-color": "#808183"
644
- }, null, -1)]], 8, xt),
644
+ }, null, -1)]], 8, Tt),
645
645
  l("path", {
646
646
  d: "m65 307.2c-6.8 0-13.1 2.2-18.2 5.9v-24.8h-13.2v81.1h31.4c17.2 0 31.1-13.9 31.1-31.1s-13.9-31.1-31.1-31.1zm0 49.3h-18.2v-18.2c0-10.1 8.2-18.2 18.2-18.2 10.1 0 18.2 8.2 18.2 18.2.1 10.1-8.1 18.2-18.2 18.2z",
647
647
  fill: `url(#${t}-b)`
648
- }, null, 8, St),
648
+ }, null, 8, Et),
649
649
  l("path", {
650
650
  d: "m168.8 343.9h-46.7c1.4 7.1 6.6 12 14.1 12.7 6.4.6 12.9.1 19.9.1v11.9c-15.2 4.9-33.3.5-42.1-10.4-3.8-4.7-17.3-34.7 11.5-47.4 39-11.4 45.3 22.4 43.3 33.1zm-14.2-12.7c-1.7-8.1-8.8-12.9-17.9-12.3-7.6.5-14 5.8-14.5 12.3z",
651
651
  fill: `url(#${t}-c)`
652
- }, null, 8, Ct),
652
+ }, null, 8, Dt),
653
653
  l("path", {
654
654
  d: "m195.5 320.2c0 10.5-.2 20 .1 29.6.2 5.8 4.4 8.4 13.2 8.6v10.5c-13.8 3.9-26.2-4.5-26.4-18-.2-18.7-.1-43.9-.1-62.6h14.1l-.3 18.5 12.7-.1v13.4h-13.3z",
655
655
  fill: `url(#${t}-d)`
656
- }, null, 8, wt),
656
+ }, null, 8, Ot),
657
657
  l("path", {
658
658
  d: "m249.6 307.3c-17.2 0-31.1 13.9-31.1 31.1s13.9 31.1 31.1 31.1h31.1v-31.1c0-17.2-13.9-31.1-31.1-31.1zm18.6 49.7h-18.5c-10.2 0-18.5-8.3-18.5-18.5s8.3-18.5 18.5-18.5 18.5 8.3 18.5 18.5z",
659
659
  fill: `url(#${t}-e)`
660
- }, null, 8, Tt),
660
+ }, null, 8, kt),
661
661
  l("path", {
662
662
  d: "m296.4 288.3h13v79.6h-13z",
663
663
  fill: `url(#${t}-f)`
664
- }, null, 8, Et),
664
+ }, null, 8, At),
665
665
  l("path", {
666
666
  d: "m354.1 307.3c-17.2 0-31.1 13.9-31.1 31.1s13.9 31.1 31.1 31.1h31.1v-31.1c0-17.2-13.9-31.1-31.1-31.1zm18.6 49.7h-18.5c-10.2 0-18.5-8.3-18.5-18.5s8.3-18.5 18.5-18.5 18.5 8.3 18.5 18.5z",
667
667
  fill: `url(#${t}-g)`
668
- }, null, 8, Dt),
668
+ }, null, 8, jt),
669
669
  l("path", {
670
670
  d: "m442.2 367.7c0-12.3.2-23.6 0-34.9-.2-3.4-3.6-13.8-14.1-13.4-10.3-.3-14.4 10-14.3 12.7.1 10.2.5 35.1.5 35.1l-13.6.1s-.3-25.7.2-36.2c.6-14.1 12.7-25 27.5-25 14.7 0 26.2 10.4 26.7 24.9.4 10.4.5 36.3.5 36.3z",
671
671
  fill: `url(#${t}-h)`
672
- }, null, 8, Ot),
672
+ }, null, 8, Mt),
673
673
  l("path", {
674
674
  d: "m501.9 307.2c6.8 0 13.1 2.2 18.2 5.9v-24.8h13.2v81.1h-31.4c-17.2 0-31.1-13.9-31.1-31.1s13.9-31.1 31.1-31.1zm0 49.3h18.2v-18.2c0-10.1-8.2-18.2-18.2-18.2-10.1 0-18.2 8.2-18.2 18.2 0 10.1 8.1 18.2 18.2 18.2z",
675
675
  fill: `url(#${t}-i)`
676
- }, null, 8, kt),
676
+ }, null, 8, Nt),
677
677
  l("path", {
678
678
  d: "m309.2 180.6h-24v-24c0-12.6 10.2-24.1 22.8-25 14.8-1 27.1 11.3 26.1 26.1-.8 12.7-12.3 22.9-24.9 22.9zm-50.7-48.9c-14.8-1-27.1 11.3-26.1 26.1.8 12.6 12.4 22.8 25 22.8h23.9v-24c0-12.6-10.3-24.1-22.8-24.9zm50.7 51.9h-24v23.9c0 12.6 10.2 24.1 22.8 25 14.8 1 27.1-11.3 26.1-26.1-.8-12.6-12.3-22.8-24.9-22.8zm-52.4 0c-14 0-25.3 11.8-24.4 26 .8 12.2 10.7 22.1 22.9 22.9 14.2.9 26-10.4 26-24.4v-24.5z",
679
679
  fill: `url(#${t}-j)`
680
- }, null, 8, At),
680
+ }, null, 8, Pt),
681
681
  l("path", {
682
682
  d: "m281.7 183.8h3.6v18.5h-3.6z",
683
683
  fill: `url(#${t}-k)`
684
- }, null, 8, jt)
685
- ], 8, ut))]),
684
+ }, null, 8, Ft)
685
+ ], 8, mt))]),
686
686
  _: 1
687
687
  });
688
688
  };
689
689
  }
690
- }), Nt = /* @__PURE__ */ function(e) {
690
+ }), Lt = /* @__PURE__ */ function(e) {
691
691
  return e.DELETE = "DELETE", e.SUCCESS = "SUCCESS", e;
692
- }({}), Pt = {
692
+ }({}), Rt = {
693
693
  key: 0,
694
694
  class: "p-6 text-center"
695
- }, Ft = { class: "flex justify-center" }, It = {
695
+ }, zt = { class: "flex justify-center" }, Bt = {
696
696
  key: 1,
697
697
  class: "p-6 text-center"
698
- }, Lt = {
698
+ }, Vt = {
699
699
  key: 0,
700
700
  class: "mb-5 text-sm text-gray-500"
701
- }, Rt = { class: "flex justify-center" }, zt = /* @__PURE__ */ m({
701
+ }, Ht = { class: "flex justify-center" }, Ut = /* @__PURE__ */ m({
702
702
  __name: "BaseModal",
703
703
  props: {
704
704
  title: {
@@ -717,7 +717,7 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
717
717
  mode: {
718
718
  type: String,
719
719
  required: !1,
720
- default: Nt.SUCCESS
720
+ default: Lt.SUCCESS
721
721
  }
722
722
  },
723
723
  emits: ["closeModal", "confirmModal"],
@@ -726,11 +726,11 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
726
726
  function a(e) {
727
727
  e.key === "Escape" && r("closeModal");
728
728
  }
729
- return w(() => {
729
+ return T(() => {
730
730
  document.addEventListener("keydown", a);
731
- }), E(() => {
731
+ }), D(() => {
732
732
  document.removeEventListener("keydown", a);
733
- }), (n, r) => (D(), c(e, null, [l("div", {
733
+ }), (n, r) => (O(), c(e, null, [l("div", {
734
734
  class: "fixed inset-0 w-full h-screen bg-black/75 z-40",
735
735
  onClick: r[0] ||= (e) => n.$emit("closeModal")
736
736
  }), l("div", {
@@ -738,13 +738,13 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
738
738
  role: "dialog",
739
739
  "aria-modal": "true",
740
740
  "aria-labelledby": i
741
- }, [t.mode === F(Nt).DELETE ? (D(), c("div", Pt, [
742
- p(F(Se), { class: "w-12 h-12 text-gray-400 mx-auto mb-4" }),
741
+ }, [t.mode === F(Lt).DELETE ? (O(), c("div", Rt, [
742
+ p(F(Ee), { class: "w-12 h-12 text-gray-400 mx-auto mb-4" }),
743
743
  l("h3", {
744
744
  id: i,
745
745
  class: "mb-5 text-lg font-normal text-gray-500 dark:text-gray-400"
746
746
  }, " Are you sure you want to delete this " + P(t.title) + "? ", 1),
747
- l("div", Ft, [p(q, {
747
+ l("div", zt, [p(q, {
748
748
  color: F(G).RED,
749
749
  onClick: r[1] ||= (e) => n.$emit("confirmModal"),
750
750
  description: "Yes, I'm sure"
@@ -753,22 +753,22 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
753
753
  onClick: r[2] ||= (e) => n.$emit("closeModal"),
754
754
  description: "No, cancel"
755
755
  }, null, 8, ["color"])])
756
- ])) : (D(), c("div", It, [
757
- p(F(pe), { class: "w-12 h-12 text-green-500 mx-auto mb-4" }),
756
+ ])) : (O(), c("div", Bt, [
757
+ p(F(ge), { class: "w-12 h-12 text-green-500 mx-auto mb-4" }),
758
758
  l("h3", {
759
759
  id: i,
760
760
  class: "mb-2 text-lg font-medium text-gray-900"
761
761
  }, P(t.title), 1),
762
- t.description ? (D(), c("p", Lt, P(t.description), 1)) : s("", !0),
763
- j(n.$slots, "default"),
764
- l("div", Rt, [p(q, {
762
+ t.description ? (O(), c("p", Vt, P(t.description), 1)) : s("", !0),
763
+ M(n.$slots, "default"),
764
+ l("div", Ht, [p(q, {
765
765
  color: F(G).BLUE,
766
766
  onClick: r[3] ||= (e) => n.$emit("closeModal"),
767
767
  description: "OK"
768
768
  }, null, 8, ["color"])])
769
769
  ]))])], 64));
770
770
  }
771
- }), Bt = /* @__PURE__ */ m({
771
+ }), Wt = /* @__PURE__ */ m({
772
772
  __name: "BaseRow",
773
773
  props: { bgColor: {
774
774
  type: String,
@@ -780,9 +780,9 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
780
780
  function n() {
781
781
  return "block p-8 border border-gray-200 rounded-xl shadow-sm dark:bg-gray-800 dark:border-gray-700 " + t.bgColor;
782
782
  }
783
- return (e, t) => (D(), c("div", { class: b(n()) }, [j(e.$slots, "default")], 2));
783
+ return (e, t) => (O(), c("div", { class: x(n()) }, [M(e.$slots, "default")], 2));
784
784
  }
785
- }), Vt = /* @__PURE__ */ m({
785
+ }), Gt = /* @__PURE__ */ m({
786
786
  __name: "BaseSpinner",
787
787
  props: {
788
788
  size: { default: "sm" },
@@ -804,17 +804,17 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
804
804
  red: "border-t-red-500",
805
805
  amber: "border-t-amber-500"
806
806
  })[t.color]);
807
- return (e, t) => (D(), c("div", {
808
- class: b(["border-gray-200 dark:border-slate-700 rounded-full animate-spin", [n.value, r.value]]),
807
+ return (e, t) => (O(), c("div", {
808
+ class: x(["border-gray-200 dark:border-slate-700 rounded-full animate-spin", [n.value, r.value]]),
809
809
  role: "status",
810
810
  "aria-label": "Loading"
811
811
  }, null, 2));
812
812
  }
813
813
  }), Y = /* @__PURE__ */ function(e) {
814
814
  return e.SUCCESS = "SUCCESS", e.WARNING = "WARNING", e.ERROR = "ERROR", e;
815
- }({}), Ht = /* @__PURE__ */ function(e) {
815
+ }({}), Kt = /* @__PURE__ */ function(e) {
816
816
  return e.TOP_LEFT = "TOP_LEFT", e.TOP_RIGHT = "TOP_RIGHT", e.BOTTOM_LEFT = "BOTTOM_LEFT", e.BOTTOM_RIGHT = "BOTTOM_RIGHT", e;
817
- }({}), Ut = { 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" }, Wt = { class: "ml-3 text-sm font-normal" }, Gt = /* @__PURE__ */ m({
817
+ }({}), qt = { 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" }, Jt = { class: "ml-3 text-sm font-normal" }, Yt = /* @__PURE__ */ m({
818
818
  __name: "BaseToast",
819
819
  props: {
820
820
  mode: {
@@ -833,7 +833,7 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
833
833
  positioning: {
834
834
  type: String,
835
835
  required: !1,
836
- default: Ht.TOP_RIGHT
836
+ default: Kt.TOP_RIGHT
837
837
  },
838
838
  duration: {
839
839
  type: Number,
@@ -842,13 +842,13 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
842
842
  }
843
843
  },
844
844
  setup(e) {
845
- let t = e, n = k(!0), r = null;
845
+ let t = e, n = A(!0), r = null;
846
846
  function i() {
847
847
  n.value = !1, r &&= (clearTimeout(r), null);
848
848
  }
849
- w(() => {
849
+ T(() => {
850
850
  r = setTimeout(() => n.value = !1, t.duration);
851
- }), E(() => {
851
+ }), D(() => {
852
852
  r && clearTimeout(r);
853
853
  });
854
854
  function a() {
@@ -870,46 +870,46 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
870
870
  function o() {
871
871
  let e = "top-5 right-5";
872
872
  switch (t.positioning) {
873
- case Ht.BOTTOM_LEFT:
873
+ case Kt.BOTTOM_LEFT:
874
874
  e = "bottom-5 left-5";
875
875
  break;
876
- case Ht.TOP_LEFT:
876
+ case Kt.TOP_LEFT:
877
877
  e = "top-5 left-5";
878
878
  break;
879
- case Ht.TOP_RIGHT:
879
+ case Kt.TOP_RIGHT:
880
880
  e = "top-5 right-5";
881
881
  break;
882
- case Ht.BOTTOM_RIGHT: e = "bottom-5 right-5";
882
+ case Kt.BOTTOM_RIGHT: e = "bottom-5 right-5";
883
883
  }
884
884
  return "fixed flex items-center w-full max-w-md p-4 space-x-4 divide-x rounded-lg " + e;
885
885
  }
886
- return (t, r) => n.value ? (D(), c("div", {
886
+ return (t, r) => n.value ? (O(), c("div", {
887
887
  key: 0,
888
888
  id: "toast-top-right",
889
- class: b(o()),
889
+ class: x(o()),
890
890
  role: "alert"
891
- }, [l("div", Ut, [
892
- e.mode == F(Y).ERROR ? (D(), c("div", {
891
+ }, [l("div", qt, [
892
+ e.mode == F(Y).ERROR ? (O(), c("div", {
893
893
  key: 0,
894
- class: b(a())
895
- }, [p(F(Se), { class: "h-6 w-6 text-red-500" }), r[0] ||= l("span", { class: "sr-only" }, "Error icon", -1)], 2)) : e.mode == F(Y).SUCCESS ? (D(), c("div", {
894
+ class: x(a())
895
+ }, [p(F(Ee), { class: "h-6 w-6 text-red-500" }), r[0] ||= l("span", { class: "sr-only" }, "Error icon", -1)], 2)) : e.mode == F(Y).SUCCESS ? (O(), c("div", {
896
896
  key: 1,
897
- class: b(a())
898
- }, [p(F(pe), { class: "h-6 w-6 text-green-500" }), r[1] ||= l("span", { class: "sr-only" }, "Check icon", -1)], 2)) : e.mode == F(Y).WARNING ? (D(), c("div", {
897
+ class: x(a())
898
+ }, [p(F(ge), { class: "h-6 w-6 text-green-500" }), r[1] ||= l("span", { class: "sr-only" }, "Check icon", -1)], 2)) : e.mode == F(Y).WARNING ? (O(), c("div", {
899
899
  key: 2,
900
- class: b(a())
901
- }, [p(F(Ce), { class: "h-6 w-6 text-yellow-500" }), r[2] ||= l("span", { class: "sr-only" }, "Warning icon", -1)], 2)) : s("", !0),
902
- l("div", Wt, P(e.description), 1),
903
- e.hasCloseIcon ? (D(), c("button", {
900
+ class: x(a())
901
+ }, [p(F(De), { class: "h-6 w-6 text-yellow-500" }), r[2] ||= l("span", { class: "sr-only" }, "Warning icon", -1)], 2)) : s("", !0),
902
+ l("div", Jt, P(e.description), 1),
903
+ e.hasCloseIcon ? (O(), c("button", {
904
904
  key: 3,
905
905
  type: "button",
906
906
  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",
907
907
  "aria-label": "Close",
908
908
  onClick: i
909
- }, [r[3] ||= l("span", { class: "sr-only" }, "Close", -1), p(F(Ae), { class: "h-6 w-6 text-gray-500" })])) : s("", !0)
909
+ }, [r[3] ||= l("span", { class: "sr-only" }, "Close", -1), p(F(z), { class: "h-6 w-6 text-gray-500" })])) : s("", !0)
910
910
  ])], 2)) : s("", !0);
911
911
  }
912
- }), Kt = { class: "w-13" }, qt = /* @__PURE__ */ m({
912
+ }), Xt = { class: "w-13" }, Zt = /* @__PURE__ */ m({
913
913
  __name: "ColoredSquares",
914
914
  props: { color: {
915
915
  type: String,
@@ -926,7 +926,7 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
926
926
  "bg-yellow-300",
927
927
  "bg-purple-300",
928
928
  "bg-pink-300"
929
- ], r = k(n[Math.floor(Math.random() * n.length)]);
929
+ ], r = A(n[Math.floor(Math.random() * n.length)]);
930
930
  function i() {
931
931
  let e = "font-bold text-xs mr-2 px-2.5 py-0.5 rounded-full", n = "gray";
932
932
  switch (t.color) {
@@ -946,9 +946,9 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
946
946
  }
947
947
  return e + " bg-" + n + "-100 text-" + n + "-800";
948
948
  }
949
- return (e, t) => (D(), c("div", Kt, [l("div", { class: b(["border border-gray-300 relative aspect-square rounded-lg bg-white shadow-sm overflow-hidden flex items-center justify-center text-center", i()]) }, [j(e.$slots, "default"), l("div", { class: b(["absolute bottom-0 left-0 h-1 w-full", r.value]) }, null, 2)], 2)]));
949
+ return (e, t) => (O(), c("div", Xt, [l("div", { class: x(["border border-gray-300 relative aspect-square rounded-lg bg-white shadow-sm overflow-hidden flex items-center justify-center text-center", i()]) }, [M(e.$slots, "default"), l("div", { class: x(["absolute bottom-0 left-0 h-1 w-full", r.value]) }, null, 2)], 2)]));
950
950
  }
951
- }), Jt = { class: "flex items-start justify-between" }, Yt = { class: "min-w-0" }, Xt = /* @__PURE__ */ m({
951
+ }), Qt = { class: "flex items-start justify-between" }, $t = { class: "min-w-0" }, en = /* @__PURE__ */ m({
952
952
  __name: "EarningsCard",
953
953
  props: {
954
954
  title: { default: "TOTAL EARNINGS" },
@@ -1000,27 +1000,27 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
1000
1000
  minimumFractionDigits: n.decimals,
1001
1001
  maximumFractionDigits: n.decimals
1002
1002
  }));
1003
- return (n, r) => (D(), c("div", { class: b(["relative rounded-xl border-2 border-dashed bg-white dark:bg-slate-800", [d.value.border, t.compact ? "p-3" : "p-6"]]) }, [t.badge ? (D(), c("div", {
1003
+ return (n, r) => (O(), c("div", { class: x(["relative rounded-xl border-2 border-dashed bg-white dark:bg-slate-800", [d.value.border, t.compact ? "p-3" : "p-6"]]) }, [t.badge ? (O(), c("div", {
1004
1004
  key: 0,
1005
- class: b(["absolute right-4 top-4 rounded-md px-3 py-1 text-xs font-bold tracking-wide", d.value.badge])
1006
- }, P(t.badge), 3)) : s("", !0), l("div", Jt, [l("div", Yt, [
1007
- l("p", { class: b(["font-bold tracking-wide text-gray-800 dark:text-slate-200", t.compact ? "pr-8 text-xs" : "text-sm"]) }, P(t.title), 3),
1008
- l("p", { class: b(["mt-1 font-bold truncate", [d.value.amount, t.compact ? "text-lg" : "text-4xl"]]) }, P(f.value), 3),
1009
- l("p", { class: b(["mt-1 font-medium", [d.value.subtitle, t.compact ? "text-xs" : "text-sm"]]) }, P(t.subtitle), 3)
1010
- ]), l("div", { class: b(["flex items-center justify-center", [d.value.iconBox, t.compact ? "absolute right-2 top-2 h-6 w-6 rounded-lg" : "mt-6 h-12 w-12 rounded-xl"]]) }, [(D(), c("svg", {
1011
- class: b([d.value.icon, t.compact ? "h-3.5 w-3.5" : "h-6 w-6"]),
1005
+ class: x(["absolute right-4 top-4 rounded-md px-3 py-1 text-xs font-bold tracking-wide", d.value.badge])
1006
+ }, P(t.badge), 3)) : s("", !0), l("div", Qt, [l("div", $t, [
1007
+ l("p", { class: x(["font-bold tracking-wide text-gray-800 dark:text-slate-200", t.compact ? "pr-8 text-xs" : "text-sm"]) }, P(t.title), 3),
1008
+ l("p", { class: x(["mt-1 font-bold truncate", [d.value.amount, t.compact ? "text-lg" : "text-4xl"]]) }, P(f.value), 3),
1009
+ l("p", { class: x(["mt-1 font-medium", [d.value.subtitle, t.compact ? "text-xs" : "text-sm"]]) }, P(t.subtitle), 3)
1010
+ ]), l("div", { class: x(["flex items-center justify-center", [d.value.iconBox, t.compact ? "absolute right-2 top-2 h-6 w-6 rounded-lg" : "mt-6 h-12 w-12 rounded-xl"]]) }, [(O(), c("svg", {
1011
+ class: x([d.value.icon, t.compact ? "h-3.5 w-3.5" : "h-6 w-6"]),
1012
1012
  viewBox: "0 0 24 24",
1013
1013
  fill: "none",
1014
1014
  stroke: "currentColor",
1015
1015
  "stroke-width": "2.5",
1016
1016
  "stroke-linecap": "round",
1017
1017
  "stroke-linejoin": "round"
1018
- }, [o.value ? (D(), c(e, { key: 0 }, [r[0] ||= l("polyline", { points: "22 17 13.5 8.5 8.5 13.5 2 7" }, null, -1), r[1] ||= l("polyline", { points: "16 17 22 17 22 11" }, null, -1)], 64)) : (D(), c(e, { key: 1 }, [r[2] ||= l("polyline", { points: "22 7 13.5 15.5 8.5 10.5 2 17" }, null, -1), r[3] ||= l("polyline", { points: "16 7 22 7 22 13" }, null, -1)], 64))], 2))], 2)])], 2));
1018
+ }, [o.value ? (O(), c(e, { key: 0 }, [r[0] ||= l("polyline", { points: "22 17 13.5 8.5 8.5 13.5 2 7" }, null, -1), r[1] ||= l("polyline", { points: "16 17 22 17 22 11" }, null, -1)], 64)) : (O(), c(e, { key: 1 }, [r[2] ||= l("polyline", { points: "22 7 13.5 15.5 8.5 10.5 2 17" }, null, -1), r[3] ||= l("polyline", { points: "16 7 22 7 22 13" }, null, -1)], 64))], 2))], 2)])], 2));
1019
1019
  }
1020
- }), Zt = {
1020
+ }), tn = {
1021
1021
  key: 0,
1022
1022
  class: "font-bold text-green-800 dark:text-green-400"
1023
- }, Qt = { key: 0 }, $t = { key: 0 }, en = "font-bold", tn = /* @__PURE__ */ m({
1023
+ }, nn = { key: 0 }, rn = { key: 0 }, an = "font-bold", on = /* @__PURE__ */ m({
1024
1024
  __name: "EuroAmount",
1025
1025
  props: {
1026
1026
  amount: {
@@ -1040,20 +1040,20 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
1040
1040
  },
1041
1041
  setup(t) {
1042
1042
  let n = t, r = a(() => n.amount !== null && n.amount !== void 0), i = a(() => r.value && n.amount < 0), o = a(() => n.beforeAmount === null || n.beforeAmount === void 0 ? !1 : n.amount < n.beforeAmount), l = a(() => i.value || o.value), u = a(() => !i.value && !o.value && n.beforeAmount !== null && n.beforeAmount !== void 0);
1043
- return (n, i) => (D(), c(e, null, [r.value && u.value ? (D(), c("span", Zt, [f(P(t.amount) + " ", 1), t.showCurrency ? (D(), c("span", Qt, "€")) : s("", !0)])) : s("", !0), r.value && !u.value ? (D(), c("span", {
1043
+ return (n, i) => (O(), c(e, null, [r.value && u.value ? (O(), c("span", tn, [f(P(t.amount) + " ", 1), t.showCurrency ? (O(), c("span", nn, "€")) : s("", !0)])) : s("", !0), r.value && !u.value ? (O(), c("span", {
1044
1044
  key: 1,
1045
- class: b([en, l.value ? "text-red-800 dark:text-red-400" : "text-gray-800 dark:text-gray-200"])
1046
- }, [f(P(t.amount) + " ", 1), t.showCurrency ? (D(), c("span", $t, "€")) : s("", !0)], 2)) : s("", !0)], 64));
1045
+ class: x([an, l.value ? "text-red-800 dark:text-red-400" : "text-gray-800 dark:text-gray-200"])
1046
+ }, [f(P(t.amount) + " ", 1), t.showCurrency ? (O(), c("span", rn, "€")) : s("", !0)], 2)) : s("", !0)], 64));
1047
1047
  }
1048
- }), nn = { "aria-label": "Pagination" }, rn = { class: "flex list-none p-0 m-0" }, an = [
1048
+ }), sn = { "aria-label": "Pagination" }, cn = { class: "flex list-none p-0 m-0" }, ln = [
1049
1049
  "aria-current",
1050
1050
  "aria-label",
1051
1051
  "onClick"
1052
- ], on = {
1052
+ ], un = {
1053
1053
  key: 1,
1054
1054
  "aria-hidden": "true",
1055
1055
  class: "inline-block border border-gray-300 dark:border-gray-600 rounded-lg p-3 text-black dark:text-gray-200 cursor-not-allowed"
1056
- }, sn = /* @__PURE__ */ m({
1056
+ }, dn = /* @__PURE__ */ m({
1057
1057
  __name: "Pagination",
1058
1058
  props: {
1059
1059
  totalItems: {
@@ -1078,8 +1078,8 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
1078
1078
  function s(e) {
1079
1079
  return Math.min(Math.max(e, 1), Math.max(o.value, 1));
1080
1080
  }
1081
- let u = k(1);
1082
- I(o, () => {
1081
+ let u = A(1);
1082
+ le(o, () => {
1083
1083
  u.value = s(u.value);
1084
1084
  });
1085
1085
  let d = a(() => r.page != null && Number.isFinite(r.page) ? s(r.page) : u.value), f = a(() => {
@@ -1093,28 +1093,28 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
1093
1093
  function p(e) {
1094
1094
  e === d.value || e < 1 || e > o.value || (u.value = e, i("page-changed", e));
1095
1095
  }
1096
- return (t, n) => (D(), c("nav", nn, [l("ul", rn, [(D(!0), c(e, null, A(f.value, (e, t) => (D(), c("li", {
1096
+ return (t, n) => (O(), c("nav", sn, [l("ul", cn, [(O(!0), c(e, null, j(f.value, (e, t) => (O(), c("li", {
1097
1097
  key: t,
1098
1098
  class: "mr-1"
1099
- }, [e === 0 ? (D(), c("span", on, "...")) : (D(), c("button", {
1099
+ }, [e === 0 ? (O(), c("span", un, "...")) : (O(), c("button", {
1100
1100
  key: 0,
1101
1101
  type: "button",
1102
1102
  "aria-current": e === d.value ? "page" : void 0,
1103
1103
  "aria-label": `Go to page ${e}`,
1104
1104
  onClick: (t) => p(e),
1105
- class: b(["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 === d.value }])
1106
- }, P(e), 11, an))]))), 128))])]));
1105
+ class: x(["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 === d.value }])
1106
+ }, P(e), 11, ln))]))), 128))])]));
1107
1107
  }
1108
- }), cn = { key: 0 }, ln = {
1108
+ }), fn = { key: 0 }, pn = {
1109
1109
  key: 0,
1110
1110
  class: "flex items-center space-x-2"
1111
- }, un = {
1111
+ }, mn = {
1112
1112
  key: 1,
1113
1113
  class: "flex items-center space-x-2"
1114
- }, dn = {
1114
+ }, hn = {
1115
1115
  key: 2,
1116
1116
  class: "flex items-center space-x-2"
1117
- }, fn = /* @__PURE__ */ m({
1117
+ }, gn = /* @__PURE__ */ m({
1118
1118
  __name: "TrendArrow",
1119
1119
  props: {
1120
1120
  number: {
@@ -1128,23 +1128,23 @@ var We = "bg-red-100 text-red-700 border-red-200", Ge = /* @__PURE__ */ m({
1128
1128
  },
1129
1129
  setup(e) {
1130
1130
  let t = e, n = a(() => t.number !== null && t.number !== void 0 && t.number < 0), r = a(() => t.number === 0);
1131
- return (i, a) => e.number !== null && e.number !== void 0 ? (D(), c("div", cn, [n.value ? (D(), c("span", ln, [p(Ge, { color: F(W).RED }, {
1132
- default: L(() => [f(P(e.number) + P(t.icon), 1)]),
1131
+ return (i, a) => e.number !== null && e.number !== void 0 ? (O(), c("div", fn, [n.value ? (O(), c("span", pn, [p(Ye, { color: F(W).RED }, {
1132
+ default: I(() => [f(P(e.number) + P(t.icon), 1)]),
1133
1133
  _: 1
1134
- }, 8, ["color"]), p(F(ce), { class: "h-5 w-5 text-red-500" })])) : r.value ? (D(), c("span", un, [p(Ge, { color: F(W).GRAY }, {
1135
- default: L(() => [f(P(e.number) + P(t.icon), 1)]),
1134
+ }, 8, ["color"]), p(F(de), { class: "h-5 w-5 text-red-500" })])) : r.value ? (O(), c("span", mn, [p(Ye, { color: F(W).GRAY }, {
1135
+ default: I(() => [f(P(e.number) + P(t.icon), 1)]),
1136
1136
  _: 1
1137
- }, 8, ["color"]), p(F(De), { class: "h-5 w-5 text-gray-400" })])) : (D(), c("span", dn, [p(Ge, { color: F(W).GREEN }, {
1138
- default: L(() => [f(P(e.number) + P(t.icon), 1)]),
1137
+ }, 8, ["color"]), p(F(je), { class: "h-5 w-5 text-gray-400" })])) : (O(), c("span", hn, [p(Ye, { color: F(W).GREEN }, {
1138
+ default: I(() => [f(P(e.number) + P(t.icon), 1)]),
1139
1139
  _: 1
1140
- }, 8, ["color"]), p(F(ue), { class: "h-5 w-5 text-green-500" })]))])) : s("", !0);
1140
+ }, 8, ["color"]), p(F(pe), { class: "h-5 w-5 text-green-500" })]))])) : s("", !0);
1141
1141
  }
1142
1142
  });
1143
1143
  //#endregion
1144
1144
  //#region src/composables/useThemeClasses.ts
1145
1145
  function X() {
1146
1146
  let { isDark: e } = U();
1147
- return O({
1147
+ return ee({
1148
1148
  card: a(() => e.value ? "bg-gray-800 border-gray-700" : "bg-white border-gray-200"),
1149
1149
  cardAlt: a(() => e.value ? "bg-gray-900 border-gray-700" : "bg-white border-gray-200"),
1150
1150
  pageBg: a(() => e.value ? "bg-gray-900" : "bg-gray-50"),
@@ -1170,15 +1170,15 @@ function X() {
1170
1170
  }
1171
1171
  //#endregion
1172
1172
  //#region src/composables/useEscapeKey.ts
1173
- function pn(e) {
1173
+ function _n(e) {
1174
1174
  function t(t) {
1175
1175
  t.key === "Escape" && e();
1176
1176
  }
1177
- w(() => document.addEventListener("keydown", t)), C(() => document.removeEventListener("keydown", t));
1177
+ T(() => document.addEventListener("keydown", t)), w(() => document.removeEventListener("keydown", t));
1178
1178
  }
1179
1179
  //#endregion
1180
1180
  //#region src/components/BaseModalShell.vue?vue&type=script&setup=true&lang.ts
1181
- var mn = { class: "flex items-start gap-4 min-w-0" }, hn = { class: "flex-1 min-w-0" }, gn = { class: "p-6 overflow-y-auto flex-1" }, _n = { class: "p-6" }, vn = { class: "flex items-start gap-4" }, yn = { class: "flex-1" }, bn = { class: "mt-4" }, xn = { class: "mt-6 flex gap-3 justify-end" }, Sn = /* @__PURE__ */ m({
1181
+ var vn = { class: "flex items-start gap-4 min-w-0" }, yn = { class: "flex-1 min-w-0" }, bn = { class: "p-6 overflow-y-auto flex-1" }, xn = { class: "p-6" }, Sn = { class: "flex items-start gap-4" }, Cn = { class: "flex-1" }, wn = { class: "mt-4" }, Tn = { class: "mt-6 flex gap-3 justify-end" }, En = /* @__PURE__ */ m({
1182
1182
  __name: "BaseModalShell",
1183
1183
  props: {
1184
1184
  title: {},
@@ -1202,51 +1202,51 @@ var mn = { class: "flex items-start gap-4 min-w-0" }, hn = { class: "flex-1 min-
1202
1202
  function h() {
1203
1203
  i("backdrop"), r.manualClose || i("cancel");
1204
1204
  }
1205
- return pn(() => {
1205
+ return _n(() => {
1206
1206
  r.manualClose || i("cancel");
1207
- }), (n, r) => (D(), o(t, { to: "body" }, [l("div", {
1207
+ }), (n, r) => (O(), o(t, { to: "body" }, [l("div", {
1208
1208
  class: "fixed inset-0 z-50 flex items-center justify-center bg-black/50",
1209
1209
  role: "dialog",
1210
1210
  "aria-modal": "true",
1211
1211
  "aria-labelledby": f,
1212
1212
  onClick: h
1213
- }, [e.scrollable ? (D(), c("div", {
1213
+ }, [e.scrollable ? (O(), c("div", {
1214
1214
  key: 0,
1215
- class: b(["relative w-full mx-4 rounded-lg shadow-xl max-h-[90vh] flex flex-col", [e.maxWidthClass, p.value]]),
1216
- onClick: r[0] ||= z(() => {}, ["stop"])
1215
+ class: x(["relative w-full mx-4 rounded-lg shadow-xl max-h-[90vh] flex flex-col", [e.maxWidthClass, p.value]]),
1216
+ onClick: r[0] ||= R(() => {}, ["stop"])
1217
1217
  }, [
1218
- l("div", { class: b(["flex items-start justify-between gap-4 p-6 border-b shrink-0", F(d).border]) }, [l("div", mn, [j(n.$slots, "icon", {}, () => [l("div", { class: b(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", m.value]) }, [(D(), o(N(e.icon), {
1219
- class: b(["h-6 w-6", e.iconClass]),
1218
+ l("div", { class: x(["flex items-start justify-between gap-4 p-6 border-b shrink-0", F(d).border]) }, [l("div", vn, [M(n.$slots, "icon", {}, () => [l("div", { class: x(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", m.value]) }, [(O(), o(N(e.icon), {
1219
+ class: x(["h-6 w-6", e.iconClass]),
1220
1220
  "aria-hidden": "true"
1221
- }, null, 8, ["class"]))], 2)]), l("div", hn, [l("h3", {
1221
+ }, null, 8, ["class"]))], 2)]), l("div", yn, [l("h3", {
1222
1222
  id: f,
1223
- class: b(["text-lg font-medium", F(d).primaryText])
1224
- }, P(e.title), 3), e.subtitle ? (D(), c("p", {
1223
+ class: x(["text-lg font-medium", F(d).primaryText])
1224
+ }, P(e.title), 3), e.subtitle ? (O(), c("p", {
1225
1225
  key: 0,
1226
- class: b(["text-sm mt-1 break-all", F(d).mutedText])
1227
- }, P(e.subtitle), 3)) : s("", !0)])]), j(n.$slots, "header-actions")], 2),
1228
- l("div", gn, [j(n.$slots, "default")]),
1229
- n.$slots.footer ? (D(), c("div", {
1226
+ class: x(["text-sm mt-1 break-all", F(d).mutedText])
1227
+ }, P(e.subtitle), 3)) : s("", !0)])]), M(n.$slots, "header-actions")], 2),
1228
+ l("div", bn, [M(n.$slots, "default")]),
1229
+ n.$slots.footer ? (O(), c("div", {
1230
1230
  key: 0,
1231
- class: b(["flex gap-3 justify-end p-6 border-t shrink-0", F(d).border])
1232
- }, [j(n.$slots, "footer")], 2)) : s("", !0)
1233
- ], 2)) : (D(), c("div", {
1231
+ class: x(["flex gap-3 justify-end p-6 border-t shrink-0", F(d).border])
1232
+ }, [M(n.$slots, "footer")], 2)) : s("", !0)
1233
+ ], 2)) : (O(), c("div", {
1234
1234
  key: 1,
1235
- class: b(["relative w-full mx-4 rounded-lg shadow-xl", [e.maxWidthClass, p.value]]),
1236
- onClick: r[1] ||= z(() => {}, ["stop"])
1237
- }, [l("div", _n, [
1238
- l("div", vn, [j(n.$slots, "icon", {}, () => [l("div", { class: b(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", m.value]) }, [(D(), o(N(e.icon), {
1239
- class: b(["h-6 w-6", e.iconClass]),
1235
+ class: x(["relative w-full mx-4 rounded-lg shadow-xl", [e.maxWidthClass, p.value]]),
1236
+ onClick: r[1] ||= R(() => {}, ["stop"])
1237
+ }, [l("div", xn, [
1238
+ l("div", Sn, [M(n.$slots, "icon", {}, () => [l("div", { class: x(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", m.value]) }, [(O(), o(N(e.icon), {
1239
+ class: x(["h-6 w-6", e.iconClass]),
1240
1240
  "aria-hidden": "true"
1241
- }, null, 8, ["class"]))], 2)]), l("div", yn, [l("h3", {
1241
+ }, null, 8, ["class"]))], 2)]), l("div", Cn, [l("h3", {
1242
1242
  id: f,
1243
- class: b(["text-lg font-medium", F(d).primaryText])
1243
+ class: x(["text-lg font-medium", F(d).primaryText])
1244
1244
  }, P(e.title), 3)])]),
1245
- l("div", bn, [j(n.$slots, "default")]),
1246
- l("div", xn, [j(n.$slots, "footer")])
1245
+ l("div", wn, [M(n.$slots, "default")]),
1246
+ l("div", Tn, [M(n.$slots, "footer")])
1247
1247
  ])], 2))])]));
1248
1248
  }
1249
- }), Cn = ["aria-expanded"], wn = { class: "flex items-center gap-3" }, Tn = /* @__PURE__ */ m({
1249
+ }), Dn = ["aria-expanded"], On = { class: "flex items-center gap-3" }, kn = /* @__PURE__ */ m({
1250
1250
  __name: "BaseCollapsibleSection",
1251
1251
  props: {
1252
1252
  title: {},
@@ -1257,16 +1257,16 @@ var mn = { class: "flex items-start gap-4 min-w-0" }, hn = { class: "flex-1 min-
1257
1257
  emits: ["toggle"],
1258
1258
  setup(e, { emit: t }) {
1259
1259
  let n = e, r = t, { isDark: i } = U(), o = X(), u = a(() => i.value ? "text-gray-100" : "text-gray-700"), d = a(() => i.value ? "bg-gray-800/50 hover:bg-gray-800 border-gray-700" : "bg-gray-50 hover:bg-gray-100 border-gray-200"), f = a(() => i.value ? "bg-emerald-500/15 text-emerald-400" : "bg-emerald-50 text-emerald-700"), p = a(() => n.bodyClass === void 0 ? i.value ? "bg-gray-800" : "bg-white" : n.bodyClass);
1260
- return (t, n) => (D(), c("section", { class: b(["rounded-xl border transition-colors", F(o).cardAlt]) }, [l("button", {
1260
+ return (t, n) => (O(), c("section", { class: x(["rounded-xl border transition-colors", F(o).cardAlt]) }, [l("button", {
1261
1261
  type: "button",
1262
- class: b(["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"]]),
1262
+ class: x(["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"]]),
1263
1263
  "aria-expanded": !e.collapsed,
1264
1264
  onClick: n[0] ||= (e) => r("toggle")
1265
- }, [l("div", wn, [l("h2", { class: b(["text-base font-semibold", u.value]) }, P(e.title), 3), e.badge ? (D(), c("span", {
1265
+ }, [l("div", On, [l("h2", { class: x(["text-base font-semibold", u.value]) }, P(e.title), 3), e.badge ? (O(), c("span", {
1266
1266
  key: 0,
1267
- class: b(["text-xs px-2 py-0.5 rounded-full", f.value])
1268
- }, P(e.badge), 3)) : s("", !0)]), (D(), c("svg", {
1269
- class: b(["w-5 h-5 transition-transform", [e.collapsed ? "" : "rotate-180", F(o).dimTextAlt]]),
1267
+ class: x(["text-xs px-2 py-0.5 rounded-full", f.value])
1268
+ }, P(e.badge), 3)) : s("", !0)]), (O(), c("svg", {
1269
+ class: x(["w-5 h-5 transition-transform", [e.collapsed ? "" : "rotate-180", F(o).dimTextAlt]]),
1270
1270
  fill: "none",
1271
1271
  viewBox: "0 0 24 24",
1272
1272
  stroke: "currentColor",
@@ -1276,15 +1276,15 @@ var mn = { class: "flex items-start gap-4 min-w-0" }, hn = { class: "flex-1 min-
1276
1276
  "stroke-linecap": "round",
1277
1277
  "stroke-linejoin": "round",
1278
1278
  d: "M19 9l-7 7-7-7"
1279
- }, null, -1)]], 2))], 10, Cn), R(l("div", { class: b(["p-6 border-t rounded-b-xl", [F(o).border, p.value]]) }, [j(t.$slots, "default")], 2), [[oe, !e.collapsed]])], 2));
1279
+ }, null, -1)]], 2))], 10, Dn), L(l("div", { class: x(["p-6 border-t rounded-b-xl", [F(o).border, p.value]]) }, [M(t.$slots, "default")], 2), [[ce, !e.collapsed]])], 2));
1280
1280
  }
1281
- }), En = ["disabled"], Dn = ["disabled"], On = {
1281
+ }), An = ["disabled"], jn = ["disabled"], Mn = {
1282
1282
  key: 0,
1283
1283
  class: "w-4 h-4 animate-spin",
1284
1284
  fill: "none",
1285
1285
  viewBox: "0 0 24 24",
1286
1286
  "aria-hidden": "true"
1287
- }, kn = /* @__PURE__ */ m({
1287
+ }, Nn = /* @__PURE__ */ m({
1288
1288
  __name: "BaseConfirmModal",
1289
1289
  props: {
1290
1290
  title: {},
@@ -1307,25 +1307,25 @@ var mn = { class: "flex items-start gap-4 min-w-0" }, hn = { class: "flex-1 min-
1307
1307
  function d() {
1308
1308
  n.submitting || r("cancel");
1309
1309
  }
1310
- return (t, n) => (D(), o(Sn, {
1310
+ return (t, n) => (O(), o(En, {
1311
1311
  title: e.title,
1312
- icon: F(Ce),
1312
+ icon: F(De),
1313
1313
  "icon-bg-class": e.variant === "danger" ? F(i) ? "bg-red-900/30" : "bg-red-50" : F(i) ? "bg-amber-900/30" : "bg-amber-50",
1314
1314
  "icon-class": e.variant === "danger" ? "text-red-600" : "text-amber-600",
1315
1315
  "manual-close": e.submitting,
1316
1316
  onCancel: d
1317
1317
  }, {
1318
- footer: L(() => [l("button", {
1318
+ footer: I(() => [l("button", {
1319
1319
  type: "button",
1320
1320
  disabled: e.submitting,
1321
- class: b(["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", [F(a).ghostButton, e.submitting ? "opacity-60 cursor-not-allowed" : "cursor-pointer"]]),
1321
+ class: x(["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", [F(a).ghostButton, e.submitting ? "opacity-60 cursor-not-allowed" : "cursor-pointer"]]),
1322
1322
  onClick: d
1323
- }, P(e.cancelText), 11, En), l("button", {
1323
+ }, P(e.cancelText), 11, An), l("button", {
1324
1324
  type: "button",
1325
1325
  disabled: e.submitting,
1326
- class: b(["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"]]),
1326
+ class: x(["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"]]),
1327
1327
  onClick: u
1328
- }, [e.submitting ? (D(), c("svg", On, [...n[0] ||= [l("circle", {
1328
+ }, [e.submitting ? (O(), c("svg", Mn, [...n[0] ||= [l("circle", {
1329
1329
  class: "opacity-25",
1330
1330
  cx: "12",
1331
1331
  cy: "12",
@@ -1336,8 +1336,8 @@ var mn = { class: "flex items-start gap-4 min-w-0" }, hn = { class: "flex-1 min-
1336
1336
  class: "opacity-75",
1337
1337
  fill: "currentColor",
1338
1338
  d: "M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z"
1339
- }, null, -1)]])) : s("", !0), f(" " + P(e.submitting ? e.submittingText : e.confirmText), 1)], 10, Dn)]),
1340
- default: L(() => [j(t.$slots, "message", {}, () => [l("p", { class: b(["text-sm", F(i) ? "text-gray-300" : "text-gray-600"]) }, P(e.message), 3)]), j(t.$slots, "default")]),
1339
+ }, null, -1)]])) : s("", !0), f(" " + P(e.submitting ? e.submittingText : e.confirmText), 1)], 10, jn)]),
1340
+ default: I(() => [M(t.$slots, "message", {}, () => [l("p", { class: x(["text-sm", F(i) ? "text-gray-300" : "text-gray-600"]) }, P(e.message), 3)]), M(t.$slots, "default")]),
1341
1341
  _: 3
1342
1342
  }, 8, [
1343
1343
  "title",
@@ -1347,7 +1347,7 @@ var mn = { class: "flex items-start gap-4 min-w-0" }, hn = { class: "flex-1 min-
1347
1347
  "manual-close"
1348
1348
  ]));
1349
1349
  }
1350
- }), An = { class: "mt-4" }, jn = ["placeholder"], Mn = ["disabled"], Nn = /* @__PURE__ */ m({
1350
+ }), Pn = { class: "mt-4" }, Fn = ["placeholder"], In = ["disabled"], Ln = /* @__PURE__ */ m({
1351
1351
  __name: "BaseTextInputModal",
1352
1352
  props: {
1353
1353
  title: {},
@@ -1365,9 +1365,9 @@ var mn = { class: "flex items-start gap-4 min-w-0" }, hn = { class: "flex-1 min-
1365
1365
  },
1366
1366
  emits: ["confirm", "cancel"],
1367
1367
  setup(e, { emit: t }) {
1368
- let n = e, r = t, { isDark: i } = U(), a = X(), s = k(n.initialValue), c = k(null);
1369
- w(async () => {
1370
- await y(), c.value?.focus();
1368
+ let n = e, r = t, { isDark: i } = U(), a = X(), s = A(n.initialValue), c = A(null);
1369
+ T(async () => {
1370
+ await b(), c.value?.focus();
1371
1371
  });
1372
1372
  function d() {
1373
1373
  s.value.trim() && !n.submitting && r("confirm", s.value.trim());
@@ -1378,39 +1378,39 @@ var mn = { class: "flex items-start gap-4 min-w-0" }, hn = { class: "flex-1 min-
1378
1378
  function p() {
1379
1379
  s.value.trim() === (n.initialValue ?? "").trim() && f();
1380
1380
  }
1381
- return pn(f), (t, n) => (D(), o(Sn, {
1381
+ return _n(f), (t, n) => (O(), o(En, {
1382
1382
  title: e.title,
1383
- icon: F(xe),
1383
+ icon: F(Te),
1384
1384
  "manual-close": "",
1385
1385
  onBackdrop: p
1386
1386
  }, u({
1387
- footer: L(() => [l("button", {
1387
+ footer: I(() => [l("button", {
1388
1388
  type: "button",
1389
- class: b(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", F(a).ghostButton]),
1389
+ class: x(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", F(a).ghostButton]),
1390
1390
  onClick: f
1391
1391
  }, P(e.cancelText), 3), l("button", {
1392
1392
  type: "button",
1393
1393
  disabled: !s.value.trim() || e.submitting,
1394
- class: b(["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", [!s.value.trim() || e.submitting ? "bg-emerald-400 cursor-not-allowed" : "bg-emerald-600 hover:bg-emerald-700 cursor-pointer"]]),
1394
+ class: x(["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", [!s.value.trim() || e.submitting ? "bg-emerald-400 cursor-not-allowed" : "bg-emerald-600 hover:bg-emerald-700 cursor-pointer"]]),
1395
1395
  onClick: d
1396
- }, P(e.submitting ? e.submittingText : e.confirmText), 11, Mn)]),
1397
- default: L(() => [l("p", { class: b(["text-sm", F(i) ? "text-gray-300" : "text-gray-600"]) }, P(e.message), 3), l("div", An, [l("label", { class: b(["block text-sm font-medium mb-1", F(a).label]) }, P(e.inputLabel), 3), R(l("input", {
1396
+ }, P(e.submitting ? e.submittingText : e.confirmText), 11, In)]),
1397
+ default: I(() => [l("p", { class: x(["text-sm", F(i) ? "text-gray-300" : "text-gray-600"]) }, P(e.message), 3), l("div", Pn, [l("label", { class: x(["block text-sm font-medium mb-1", F(a).label]) }, P(e.inputLabel), 3), L(l("input", {
1398
1398
  ref_key: "nameInput",
1399
1399
  ref: c,
1400
1400
  "onUpdate:modelValue": n[0] ||= (e) => s.value = e,
1401
1401
  type: "text",
1402
1402
  placeholder: e.placeholder,
1403
- class: b(["w-full px-3 py-2 rounded-md border text-sm transition-colors", F(i) ? "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"]),
1404
- onKeyup: se(d, ["enter"])
1405
- }, null, 42, jn), [[ae, s.value]])])]),
1403
+ class: x(["w-full px-3 py-2 rounded-md border text-sm transition-colors", F(i) ? "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"]),
1404
+ onKeyup: ue(d, ["enter"])
1405
+ }, null, 42, Fn), [[se, s.value]])])]),
1406
1406
  _: 2
1407
1407
  }, [t.$slots.icon ? {
1408
1408
  name: "icon",
1409
- fn: L(() => [j(t.$slots, "icon")]),
1409
+ fn: I(() => [M(t.$slots, "icon")]),
1410
1410
  key: "0"
1411
1411
  } : void 0]), 1032, ["title", "icon"]));
1412
1412
  }
1413
- }), Pn = { class: "flex items-center justify-center min-h-[60vh]" }, Fn = { class: "text-center px-6" }, In = /* @__PURE__ */ m({
1413
+ }), Rn = { class: "flex items-center justify-center min-h-[60vh]" }, zn = { class: "text-center px-6" }, Bn = /* @__PURE__ */ m({
1414
1414
  __name: "BaseNotFoundPage",
1415
1415
  props: {
1416
1416
  code: { default: "404" },
@@ -1419,33 +1419,33 @@ var mn = { class: "flex items-start gap-4 min-w-0" }, hn = { class: "flex-1 min-
1419
1419
  homeLabel: { default: "Go home" }
1420
1420
  },
1421
1421
  setup(e) {
1422
- let t = e, n = Pe(), { isDark: r } = U(), i = X();
1422
+ let t = e, n = ze(), { isDark: r } = U(), i = X();
1423
1423
  function a() {
1424
1424
  n.push({ name: t.homeRouteName });
1425
1425
  }
1426
- return (t, n) => (D(), c("div", Pn, [l("div", Fn, [
1427
- p(F(Ce), { class: b(["w-16 h-16 mx-auto mb-4", F(i).illustration]) }, null, 8, ["class"]),
1428
- l("h1", { class: b(["text-4xl font-bold mb-2", F(r) ? "text-gray-200" : "text-gray-800"]) }, P(e.code), 3),
1429
- l("p", { class: b(["text-lg mb-6", F(i).dimTextAlt]) }, P(e.message), 3),
1426
+ return (t, n) => (O(), c("div", Rn, [l("div", zn, [
1427
+ p(F(De), { class: x(["w-16 h-16 mx-auto mb-4", F(i).illustration]) }, null, 8, ["class"]),
1428
+ l("h1", { class: x(["text-4xl font-bold mb-2", F(r) ? "text-gray-200" : "text-gray-800"]) }, P(e.code), 3),
1429
+ l("p", { class: x(["text-lg mb-6", F(i).dimTextAlt]) }, P(e.message), 3),
1430
1430
  l("button", {
1431
1431
  onClick: a,
1432
- class: b(["inline-flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium text-white transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2", F(r) ? "bg-emerald-600 hover:bg-emerald-500" : "bg-emerald-600 hover:bg-emerald-700"])
1432
+ class: x(["inline-flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium text-white transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2", F(r) ? "bg-emerald-600 hover:bg-emerald-500" : "bg-emerald-600 hover:bg-emerald-700"])
1433
1433
  }, P(e.homeLabel), 3)
1434
1434
  ])]));
1435
1435
  }
1436
- }), Ln = k(!1);
1437
- function Rn() {
1436
+ }), Vn = A(!1);
1437
+ function Hn() {
1438
1438
  function e() {
1439
- Ln.value = !0;
1439
+ Vn.value = !0;
1440
1440
  }
1441
1441
  function t() {
1442
- Ln.value = !1;
1442
+ Vn.value = !1;
1443
1443
  }
1444
1444
  function n() {
1445
- Ln.value = !Ln.value;
1445
+ Vn.value = !Vn.value;
1446
1446
  }
1447
1447
  return {
1448
- mobileOpen: Ln,
1448
+ mobileOpen: Vn,
1449
1449
  open: e,
1450
1450
  close: t,
1451
1451
  toggle: n
@@ -1453,19 +1453,19 @@ function Rn() {
1453
1453
  }
1454
1454
  //#endregion
1455
1455
  //#region src/composables/useSidebarCollapse.ts
1456
- var Z = k(!1), zn = !1, Bn = "mgv-sidebar-collapsed";
1457
- function Vn(e) {
1458
- if (!zn && (zn = !0, Bn = e, typeof window < "u")) {
1459
- let e = window.localStorage?.getItem(Bn);
1456
+ var Z = A(!1), Un = !1, Wn = "mgv-sidebar-collapsed";
1457
+ function Gn(e) {
1458
+ if (!Un && (Un = !0, Wn = e, typeof window < "u")) {
1459
+ let e = window.localStorage?.getItem(Wn);
1460
1460
  e && (Z.value = e === "true"), h(!0).run(() => {
1461
- I(Z, (e) => {
1462
- window.localStorage?.setItem(Bn, String(e));
1461
+ le(Z, (e) => {
1462
+ window.localStorage?.setItem(Wn, String(e));
1463
1463
  });
1464
1464
  });
1465
1465
  }
1466
1466
  }
1467
- function Hn(e) {
1468
- Vn(e?.storageKey ?? Bn);
1467
+ function Kn(e) {
1468
+ Gn(e?.storageKey ?? Wn);
1469
1469
  function t() {
1470
1470
  Z.value = !0;
1471
1471
  }
@@ -1484,16 +1484,16 @@ function Hn(e) {
1484
1484
  }
1485
1485
  //#endregion
1486
1486
  //#region src/composables/useNotifications.ts
1487
- var Q = k([]), Un = k(!1), Wn = a(() => Q.value.filter((e) => !e.read).length);
1488
- function Gn() {
1487
+ var Q = A([]), qn = A(!1), Jn = a(() => Q.value.filter((e) => !e.read).length);
1488
+ function Yn() {
1489
1489
  function e() {
1490
- Un.value = !0;
1490
+ qn.value = !0;
1491
1491
  }
1492
1492
  function t() {
1493
- Un.value = !1;
1493
+ qn.value = !1;
1494
1494
  }
1495
1495
  function n() {
1496
- Un.value = !Un.value;
1496
+ qn.value = !qn.value;
1497
1497
  }
1498
1498
  function r(e) {
1499
1499
  Q.value = e;
@@ -1521,8 +1521,8 @@ function Gn() {
1521
1521
  }
1522
1522
  return {
1523
1523
  notifications: Q,
1524
- unreadCount: Wn,
1525
- open: Un,
1524
+ unreadCount: Jn,
1525
+ open: qn,
1526
1526
  openPanel: e,
1527
1527
  closePanel: t,
1528
1528
  togglePanel: n,
@@ -1536,22 +1536,22 @@ function Gn() {
1536
1536
  }
1537
1537
  //#endregion
1538
1538
  //#region src/components/BaseSidebar.vue?vue&type=script&setup=true&lang.ts
1539
- var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }, Jn = { class: "flex-1 overflow-y-auto px-3 space-y-6" }, Yn = { class: "space-y-0.5" }, Xn = [
1539
+ var Xn = ["aria-label", "aria-expanded"], Zn = { class: "flex flex-col h-full" }, Qn = { class: "flex-1 overflow-y-auto px-3 space-y-6" }, $n = { class: "space-y-0.5" }, er = [
1540
1540
  "aria-current",
1541
1541
  "title",
1542
1542
  "onClick"
1543
- ], Zn = ["aria-label"], Qn = { class: "relative shrink-0" }, $n = {
1543
+ ], tr = ["aria-label"], nr = { class: "relative shrink-0" }, rr = {
1544
1544
  key: 0,
1545
1545
  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"
1546
- }, er = [
1546
+ }, ir = [
1547
1547
  "title",
1548
1548
  "aria-label",
1549
1549
  "aria-pressed"
1550
- ], tr = [
1550
+ ], ar = [
1551
1551
  "title",
1552
1552
  "aria-label",
1553
1553
  "aria-pressed"
1554
- ], nr = /*#__PURE__*/ ((e, t) => {
1554
+ ], or = /*#__PURE__*/ ((e, t) => {
1555
1555
  let n = e.__vccOpts || e;
1556
1556
  for (let [e, r] of t) n[e] = r;
1557
1557
  return n;
@@ -1576,41 +1576,41 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
1576
1576
  }
1577
1577
  },
1578
1578
  setup(t) {
1579
- let n = t, r = Pe(), i = Ne(), { isDark: u, toggleTheme: d } = U(), { mobileOpen: m, close: h, toggle: g } = Rn(), { collapsed: _, toggle: v } = Hn(), { unreadCount: x, togglePanel: S } = Gn(), C = a(() => n.collapsible && _.value), w = k(null), T = null;
1580
- I(m, async (e) => {
1581
- e ? (T = document.activeElement instanceof HTMLElement ? document.activeElement : null, await y(), w.value?.focus()) : (T?.focus(), T = null);
1579
+ let n = t, r = ze(), i = Re(), { isDark: u, toggleTheme: d } = U(), { mobileOpen: m, close: h, toggle: g } = Hn(), { collapsed: _, toggle: v } = Kn(), { unreadCount: y, togglePanel: S } = Yn(), C = a(() => n.collapsible && _.value), w = A(null), T = null;
1580
+ le(m, async (e) => {
1581
+ e ? (T = document.activeElement instanceof HTMLElement ? document.activeElement : null, await b(), w.value?.focus()) : (T?.focus(), T = null);
1582
1582
  });
1583
1583
  function E() {
1584
1584
  r.push({ name: n.homeRouteName }), h();
1585
1585
  }
1586
- function O(e) {
1586
+ function D(e) {
1587
1587
  return i.name === e;
1588
1588
  }
1589
1589
  function ee(e) {
1590
1590
  r.push({ name: e }), h();
1591
1591
  }
1592
- return (n, r) => (D(), c("div", null, [
1593
- l("div", { class: b(["mobile-topbar fixed top-0 inset-x-0 z-30 flex items-center justify-between px-4 py-3 border-b transition-colors", F(u) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200"]) }, [l("button", {
1592
+ return (n, r) => (O(), c("div", null, [
1593
+ l("div", { class: x(["mobile-topbar fixed top-0 inset-x-0 z-30 flex items-center justify-between px-4 py-3 border-b transition-colors", F(u) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200"]) }, [l("button", {
1594
1594
  type: "button",
1595
1595
  onClick: E,
1596
1596
  class: "cursor-pointer rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500",
1597
1597
  "aria-label": "Go to home"
1598
- }, [j(n.$slots, "logo", { size: 28 }, void 0, !0)]), l("button", {
1598
+ }, [M(n.$slots, "logo", { size: 28 }, void 0, !0)]), l("button", {
1599
1599
  type: "button",
1600
1600
  onClick: r[0] ||= (...e) => F(g) && F(g)(...e),
1601
- class: b(["p-2 rounded-lg cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", F(u) ? "text-gray-400 hover:bg-gray-800" : "text-gray-600 hover:bg-gray-100"]),
1601
+ class: x(["p-2 rounded-lg cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", F(u) ? "text-gray-400 hover:bg-gray-800" : "text-gray-600 hover:bg-gray-100"]),
1602
1602
  "aria-label": F(m) ? "Close navigation menu" : "Open navigation menu",
1603
1603
  "aria-expanded": F(m)
1604
- }, [F(m) ? (D(), o(F(Ae), {
1604
+ }, [F(m) ? (O(), o(F(z), {
1605
1605
  key: 1,
1606
1606
  class: "w-6 h-6",
1607
1607
  "aria-hidden": "true"
1608
- })) : (D(), o(F(de), {
1608
+ })) : (O(), o(F(me), {
1609
1609
  key: 0,
1610
1610
  class: "w-6 h-6",
1611
1611
  "aria-hidden": "true"
1612
- }))], 10, Kn)], 2),
1613
- F(m) ? (D(), c("div", {
1612
+ }))], 10, Xn)], 2),
1613
+ F(m) ? (O(), c("div", {
1614
1614
  key: 0,
1615
1615
  class: "mobile-overlay fixed inset-0 z-40 bg-black/50",
1616
1616
  "aria-hidden": "true",
@@ -1619,108 +1619,108 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
1619
1619
  l("aside", {
1620
1620
  role: "navigation",
1621
1621
  "aria-label": "Main navigation",
1622
- class: b(["fixed top-0 left-0 h-screen w-60 flex flex-col border-r transition-all duration-300 lg:pointer-events-auto", [
1622
+ class: x(["fixed top-0 left-0 h-screen w-60 flex flex-col border-r transition-all duration-300 lg:pointer-events-auto", [
1623
1623
  F(u) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200",
1624
1624
  F(m) ? "translate-x-0 z-50" : "-translate-x-full max-lg:pointer-events-none lg:translate-x-0 z-50",
1625
1625
  t.collapsible && F(_) ? "lg:w-16" : "lg:w-60"
1626
1626
  ]])
1627
- }, [l("div", qn, [
1628
- l("div", { class: b(["px-5 pt-5 pb-4 flex items-center justify-center relative", { "lg:px-2": C.value }]) }, [l("button", {
1627
+ }, [l("div", Zn, [
1628
+ l("div", { class: x(["px-5 pt-5 pb-4 flex items-center justify-center relative", { "lg:px-2": C.value }]) }, [l("button", {
1629
1629
  type: "button",
1630
1630
  onClick: E,
1631
1631
  class: "cursor-pointer rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500",
1632
1632
  "aria-label": "Go to home"
1633
- }, [j(n.$slots, "logo", { size: C.value ? 36 : 52 }, void 0, !0)]), l("button", {
1633
+ }, [M(n.$slots, "logo", { size: C.value ? 36 : 52 }, void 0, !0)]), l("button", {
1634
1634
  ref_key: "closeMobileButton",
1635
1635
  ref: w,
1636
1636
  type: "button",
1637
1637
  onClick: r[2] ||= (...e) => F(h) && F(h)(...e),
1638
- class: b(["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", F(u) ? "text-gray-400 hover:bg-gray-800" : "text-gray-500 hover:bg-gray-100"]),
1638
+ class: x(["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", F(u) ? "text-gray-400 hover:bg-gray-800" : "text-gray-500 hover:bg-gray-100"]),
1639
1639
  "aria-label": "Close navigation menu"
1640
- }, [p(F(Ae), {
1640
+ }, [p(F(z), {
1641
1641
  class: "w-5 h-5",
1642
1642
  "aria-hidden": "true"
1643
1643
  })], 2)], 2),
1644
- l("nav", Jn, [(D(!0), c(e, null, A(t.sections, (t) => (D(), c("div", { key: t.title }, [l("p", { class: b(["px-2 mb-2 text-[10px] font-semibold uppercase tracking-wider text-gray-500", { "lg:hidden": C.value }]) }, P(t.title), 3), l("ul", Yn, [(D(!0), c(e, null, A(t.items, (e) => (D(), c("li", { key: e.name }, [l("button", {
1644
+ l("nav", Qn, [(O(!0), c(e, null, j(t.sections, (t) => (O(), c("div", { key: t.title }, [l("p", { class: x(["px-2 mb-2 text-[10px] font-semibold uppercase tracking-wider text-gray-500", { "lg:hidden": C.value }]) }, P(t.title), 3), l("ul", $n, [(O(!0), c(e, null, j(t.items, (e) => (O(), c("li", { key: e.name }, [l("button", {
1645
1645
  type: "button",
1646
- "aria-current": O(e.name) ? "page" : void 0,
1646
+ "aria-current": D(e.name) ? "page" : void 0,
1647
1647
  title: C.value ? e.label : void 0,
1648
1648
  onClick: (t) => ee(e.name),
1649
- class: b(["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", [O(e.name) ? F(u) ? "bg-emerald-500/15 text-emerald-300" : "bg-emerald-50 text-emerald-700" : F(u) ? "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": C.value }]])
1650
- }, [(D(), o(N(e.icon), { class: "w-[18px] h-[18px] shrink-0" })), l("span", { class: b({ "lg:hidden": C.value }) }, P(e.label), 3)], 10, Xn)]))), 128))])]))), 128))]),
1651
- l("div", { class: b(["px-4 py-4 border-t transition-colors space-y-3", F(u) ? "border-gray-800" : "border-gray-200"]) }, [
1652
- t.showNotifications ? (D(), c("button", {
1649
+ class: x(["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", [D(e.name) ? F(u) ? "bg-emerald-500/15 text-emerald-300" : "bg-emerald-50 text-emerald-700" : F(u) ? "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": C.value }]])
1650
+ }, [(O(), o(N(e.icon), { class: "w-[18px] h-[18px] shrink-0" })), l("span", { class: x({ "lg:hidden": C.value }) }, P(e.label), 3)], 10, er)]))), 128))])]))), 128))]),
1651
+ l("div", { class: x(["px-4 py-4 border-t transition-colors space-y-3", F(u) ? "border-gray-800" : "border-gray-200"]) }, [
1652
+ t.showNotifications ? (O(), c("button", {
1653
1653
  key: 0,
1654
1654
  type: "button",
1655
1655
  onClick: r[3] ||= (...e) => F(S) && F(S)(...e),
1656
1656
  title: "Notifications",
1657
- "aria-label": F(x) > 0 ? `Notifications, ${F(x)} unread` : "Notifications",
1658
- class: b(["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", [F(u) ? "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": C.value }]])
1659
- }, [l("span", Qn, [p(F(fe), {
1657
+ "aria-label": F(y) > 0 ? `Notifications, ${F(y)} unread` : "Notifications",
1658
+ class: x(["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", [F(u) ? "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": C.value }]])
1659
+ }, [l("span", nr, [p(F(he), {
1660
1660
  class: "w-[18px] h-[18px]",
1661
1661
  "aria-hidden": "true"
1662
- }), F(x) > 0 ? (D(), c("span", $n, P(F(x) > 99 ? "99+" : F(x)), 1)) : s("", !0)]), l("span", { class: b({ "lg:hidden": C.value }) }, "Notifications", 2)], 10, Zn)) : s("", !0),
1663
- t.showThemeToggle ? (D(), c("button", {
1662
+ }), F(y) > 0 ? (O(), c("span", rr, P(F(y) > 99 ? "99+" : F(y)), 1)) : s("", !0)]), l("span", { class: x({ "lg:hidden": C.value }) }, "Notifications", 2)], 10, tr)) : s("", !0),
1663
+ t.showThemeToggle ? (O(), c("button", {
1664
1664
  key: 1,
1665
1665
  type: "button",
1666
1666
  onClick: r[4] ||= (...e) => F(d) && F(d)(...e),
1667
1667
  title: F(u) ? "Switch to light mode" : "Switch to dark mode",
1668
1668
  "aria-label": F(u) ? "Switch to light mode" : "Switch to dark mode",
1669
1669
  "aria-pressed": F(u),
1670
- class: b(["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", [F(u) ? "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": C.value }]])
1670
+ class: x(["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", [F(u) ? "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": C.value }]])
1671
1671
  }, [
1672
- (D(), o(N(F(u) ? F(ke) : F(Oe)), {
1673
- class: b(["hidden w-[18px] h-[18px] shrink-0", { "lg:block": C.value }]),
1672
+ (O(), o(N(F(u) ? F(Pe) : F(Me)), {
1673
+ class: x(["hidden w-[18px] h-[18px] shrink-0", { "lg:block": C.value }]),
1674
1674
  "aria-hidden": "true"
1675
1675
  }, null, 8, ["class"])),
1676
- l("span", { class: b({ "lg:hidden": C.value }) }, P(F(u) ? "Switch to light" : "Switch to dark"), 3),
1677
- l("span", { class: b(["ml-auto relative w-9 h-5 rounded-full transition-colors", [F(u) ? "bg-emerald-600" : "bg-gray-300", { "lg:hidden": C.value }]]) }, [l("span", { class: b(["absolute top-0.5 left-0.5 w-4 h-4 rounded-full bg-white shadow-sm transition-transform duration-300", F(u) ? "translate-x-4" : "translate-x-0"]) }, null, 2)], 2)
1678
- ], 10, er)) : s("", !0),
1679
- t.collapsible ? (D(), c("button", {
1676
+ l("span", { class: x({ "lg:hidden": C.value }) }, P(F(u) ? "Switch to light" : "Switch to dark"), 3),
1677
+ l("span", { class: x(["ml-auto relative w-9 h-5 rounded-full transition-colors", [F(u) ? "bg-emerald-600" : "bg-gray-300", { "lg:hidden": C.value }]]) }, [l("span", { class: x(["absolute top-0.5 left-0.5 w-4 h-4 rounded-full bg-white shadow-sm transition-transform duration-300", F(u) ? "translate-x-4" : "translate-x-0"]) }, null, 2)], 2)
1678
+ ], 10, ir)) : s("", !0),
1679
+ t.collapsible ? (O(), c("button", {
1680
1680
  key: 2,
1681
1681
  type: "button",
1682
1682
  onClick: r[5] ||= (...e) => F(v) && F(v)(...e),
1683
1683
  title: F(_) ? "Expand sidebar" : "Collapse sidebar",
1684
1684
  "aria-label": F(_) ? "Expand sidebar" : "Collapse sidebar",
1685
1685
  "aria-pressed": F(_),
1686
- class: b(["hidden lg:flex items-center gap-3 w-full px-3 py-2.5 rounded-lg text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [F(u) ? "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": C.value }]])
1687
- }, [(D(), o(N(F(_) ? F(ge) : F(he)), {
1686
+ class: x(["hidden lg:flex items-center gap-3 w-full px-3 py-2.5 rounded-lg text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [F(u) ? "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": C.value }]])
1687
+ }, [(O(), o(N(F(_) ? F(ye) : F(ve)), {
1688
1688
  class: "w-[18px] h-[18px] shrink-0",
1689
1689
  "aria-hidden": "true"
1690
- })), l("span", { class: b({ "lg:hidden": C.value }) }, "Collapse", 2)], 10, tr)) : s("", !0),
1691
- l("div", { class: b({ "lg:hidden": C.value }) }, [j(n.$slots, "status", {}, void 0, !0)], 2),
1692
- l("div", { class: b({ "lg:hidden": C.value }) }, [j(n.$slots, "footer", {}, () => [t.appName || t.version ? (D(), c("div", {
1690
+ })), l("span", { class: x({ "lg:hidden": C.value }) }, "Collapse", 2)], 10, ar)) : s("", !0),
1691
+ l("div", { class: x({ "lg:hidden": C.value }) }, [M(n.$slots, "status", {}, void 0, !0)], 2),
1692
+ l("div", { class: x({ "lg:hidden": C.value }) }, [M(n.$slots, "footer", {}, () => [t.appName || t.version ? (O(), c("div", {
1693
1693
  key: 0,
1694
- class: b(["flex items-center justify-center gap-2 text-xs", (F(u), "text-gray-500")])
1694
+ class: x(["flex items-center justify-center gap-2 text-xs", (F(u), "text-gray-500")])
1695
1695
  }, [l("span", null, [
1696
1696
  f(P(t.appName), 1),
1697
- t.appName && t.version ? (D(), c(e, { key: 0 }, [f(P(" "))], 64)) : s("", !0),
1698
- t.version ? (D(), c(e, { key: 1 }, [f("v" + P(t.version), 1)], 64)) : s("", !0)
1697
+ t.appName && t.version ? (O(), c(e, { key: 0 }, [f(P(" "))], 64)) : s("", !0),
1698
+ t.version ? (O(), c(e, { key: 1 }, [f("v" + P(t.version), 1)], 64)) : s("", !0)
1699
1699
  ])], 2)) : s("", !0)], !0)], 2)
1700
1700
  ], 2)
1701
1701
  ])], 2)
1702
1702
  ]));
1703
1703
  }
1704
- }), [["__scopeId", "data-v-bfce9dd7"]]), rr = {
1704
+ }), [["__scopeId", "data-v-bfce9dd7"]]), sr = {
1705
1705
  key: 1,
1706
1706
  class: "mt-4 flex justify-center py-6"
1707
- }, ir = {
1707
+ }, cr = {
1708
1708
  key: 2,
1709
1709
  class: "mt-4 text-sm text-red-500",
1710
1710
  role: "alert"
1711
- }, ar = {
1711
+ }, lr = {
1712
1712
  key: 3,
1713
1713
  class: "mt-4"
1714
- }, or = { class: "relative" }, sr = ["placeholder"], cr = {
1714
+ }, ur = { class: "relative" }, dr = ["placeholder"], fr = {
1715
1715
  key: 4,
1716
1716
  class: "mt-3 max-h-64 overflow-y-auto"
1717
- }, lr = ["aria-pressed", "onClick"], ur = { class: "flex-1 min-w-0" }, dr = {
1717
+ }, pr = ["aria-pressed", "onClick"], mr = { class: "flex-1 min-w-0" }, hr = {
1718
1718
  key: 0,
1719
1719
  class: "text-center py-6"
1720
- }, fr = {
1720
+ }, gr = {
1721
1721
  key: 1,
1722
1722
  class: "text-center py-6"
1723
- }, pr = ["disabled"], mr = ["disabled"], hr = /* @__PURE__ */ m({
1723
+ }, _r = ["disabled"], vr = ["disabled"], yr = /* @__PURE__ */ m({
1724
1724
  __name: "BaseEntityPickerModal",
1725
1725
  props: {
1726
1726
  title: {},
@@ -1742,10 +1742,10 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
1742
1742
  },
1743
1743
  emits: ["confirm", "cancel"],
1744
1744
  setup(t, { emit: n }) {
1745
- let r = t, i = n, { isDark: d } = U(), f = X(), m = k([]), h = k(!1), g = k(""), _ = k(null), v = k(""), x = k(null), S = a(() => {
1745
+ let r = t, i = n, { isDark: d } = U(), f = X(), m = A([]), h = A(!1), g = A(""), _ = A(null), v = A(""), y = A(null), S = a(() => {
1746
1746
  let e = r.loader ? m.value : r.items;
1747
1747
  return r.excludeId ? e.filter((e) => e.id !== r.excludeId) : e;
1748
- }), C = a(() => S.value.filter((e) => e.label.toLowerCase().includes(v.value.toLowerCase()))), T = {
1748
+ }), C = a(() => S.value.filter((e) => e.label.toLowerCase().includes(v.value.toLowerCase()))), w = {
1749
1749
  emerald: {
1750
1750
  iconBg: "bg-emerald-50",
1751
1751
  iconText: "text-emerald-600",
@@ -1837,8 +1837,8 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
1837
1837
  confirmActive: "bg-amber-600 hover:bg-amber-700 cursor-pointer",
1838
1838
  confirmDisabled: "bg-amber-400 cursor-not-allowed"
1839
1839
  }
1840
- }, O = a(() => (d.value ? E : T)[r.variant]);
1841
- w(async () => {
1840
+ }, D = a(() => (d.value ? E : w)[r.variant]);
1841
+ T(async () => {
1842
1842
  if (r.loader) {
1843
1843
  h.value = !0;
1844
1844
  try {
@@ -1849,62 +1849,62 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
1849
1849
  h.value = !1;
1850
1850
  }
1851
1851
  }
1852
- await y(), x.value?.focus();
1852
+ await b(), y.value?.focus();
1853
1853
  });
1854
1854
  function ee() {
1855
1855
  _.value && !r.submitting && i("confirm", _.value);
1856
1856
  }
1857
- function M() {
1857
+ function k() {
1858
1858
  r.submitting || i("cancel");
1859
1859
  }
1860
- return (n, r) => (D(), o(Sn, {
1860
+ return (n, r) => (O(), o(En, {
1861
1861
  title: t.title,
1862
- icon: F(we),
1863
- "icon-bg-class": O.value.iconBg,
1864
- "icon-class": O.value.iconText,
1862
+ icon: F(Oe),
1863
+ "icon-bg-class": D.value.iconBg,
1864
+ "icon-class": D.value.iconText,
1865
1865
  "manual-close": t.submitting,
1866
- onCancel: M
1866
+ onCancel: k
1867
1867
  }, u({
1868
- footer: L(() => [l("button", {
1868
+ footer: I(() => [l("button", {
1869
1869
  type: "button",
1870
1870
  disabled: t.submitting,
1871
- class: b(["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", F(f).ghostButton]),
1872
- onClick: M
1873
- }, P(t.cancelText), 11, pr), l("button", {
1871
+ class: x(["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", F(f).ghostButton]),
1872
+ onClick: k
1873
+ }, P(t.cancelText), 11, _r), l("button", {
1874
1874
  type: "button",
1875
1875
  disabled: !_.value || t.submitting,
1876
- class: b(["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", !_.value || t.submitting ? O.value.confirmDisabled : O.value.confirmActive]),
1876
+ class: x(["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", !_.value || t.submitting ? D.value.confirmDisabled : D.value.confirmActive]),
1877
1877
  onClick: ee
1878
- }, P(t.submitting ? t.submittingText : t.confirmText), 11, mr)]),
1879
- default: L(() => [
1880
- t.message ? (D(), c("p", {
1878
+ }, P(t.submitting ? t.submittingText : t.confirmText), 11, vr)]),
1879
+ default: I(() => [
1880
+ t.message ? (O(), c("p", {
1881
1881
  key: 0,
1882
- class: b(["text-sm", F(d) ? "text-gray-300" : "text-gray-600"])
1882
+ class: x(["text-sm", F(d) ? "text-gray-300" : "text-gray-600"])
1883
1883
  }, P(t.message), 3)) : s("", !0),
1884
- h.value ? (D(), c("div", rr, [p(Vt, { color: "emerald" })])) : g.value ? (D(), c("div", ir, P(g.value), 1)) : s("", !0),
1885
- !h.value && !g.value && S.value.length > 0 ? (D(), c("div", ar, [l("div", or, [p(F(Ee), {
1886
- class: b(["absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4", F(f).dimText]),
1884
+ h.value ? (O(), c("div", sr, [p(Gt, { color: "emerald" })])) : g.value ? (O(), c("div", cr, P(g.value), 1)) : s("", !0),
1885
+ !h.value && !g.value && S.value.length > 0 ? (O(), c("div", lr, [l("div", ur, [p(F(Ae), {
1886
+ class: x(["absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4", F(f).dimText]),
1887
1887
  "aria-hidden": "true"
1888
- }, null, 8, ["class"]), R(l("input", {
1888
+ }, null, 8, ["class"]), L(l("input", {
1889
1889
  ref_key: "searchInputRef",
1890
- ref: x,
1890
+ ref: y,
1891
1891
  "onUpdate:modelValue": r[0] ||= (e) => v.value = e,
1892
1892
  type: "text",
1893
1893
  placeholder: t.searchPlaceholder,
1894
- class: b(["w-full pl-9 pr-3 py-2 text-sm rounded-md border outline-none transition-colors", [F(d) ? "bg-gray-800 border-gray-600 text-gray-200 placeholder-gray-500" : "bg-white border-gray-300 text-gray-700 placeholder-gray-400", O.value.inputFocus]])
1895
- }, null, 10, sr), [[ae, v.value]])])])) : s("", !0),
1896
- !h.value && !g.value ? (D(), c("div", cr, [(D(!0), c(e, null, A(C.value, (e) => (D(), c("button", {
1894
+ class: x(["w-full pl-9 pr-3 py-2 text-sm rounded-md border outline-none transition-colors", [F(d) ? "bg-gray-800 border-gray-600 text-gray-200 placeholder-gray-500" : "bg-white border-gray-300 text-gray-700 placeholder-gray-400", D.value.inputFocus]])
1895
+ }, null, 10, dr), [[se, v.value]])])])) : s("", !0),
1896
+ !h.value && !g.value ? (O(), c("div", fr, [(O(!0), c(e, null, j(C.value, (e) => (O(), c("button", {
1897
1897
  key: e.id,
1898
1898
  type: "button",
1899
1899
  "aria-pressed": _.value === e.id,
1900
- class: b(["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", [_.value === e.id ? O.value.selectedRow : F(d) ? "hover:bg-gray-800 border border-transparent" : "hover:bg-gray-50 border border-transparent"]]),
1900
+ class: x(["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", [_.value === e.id ? D.value.selectedRow : F(d) ? "hover:bg-gray-800 border border-transparent" : "hover:bg-gray-50 border border-transparent"]]),
1901
1901
  onClick: (t) => _.value = e.id
1902
1902
  }, [
1903
- p(F(we), { class: b(["w-5 h-5 flex-shrink-0", F(f).dimText]) }, null, 8, ["class"]),
1904
- l("div", ur, [l("p", { class: b(["text-sm font-medium truncate", F(f).bodyText]) }, P(e.label), 3)]),
1905
- _.value === e.id ? (D(), c("div", {
1903
+ p(F(Oe), { class: x(["w-5 h-5 flex-shrink-0", F(f).dimText]) }, null, 8, ["class"]),
1904
+ l("div", mr, [l("p", { class: x(["text-sm font-medium truncate", F(f).bodyText]) }, P(e.label), 3)]),
1905
+ _.value === e.id ? (O(), c("div", {
1906
1906
  key: 0,
1907
- class: b(["w-5 h-5 rounded-full flex items-center justify-center", O.value.checkBg])
1907
+ class: x(["w-5 h-5 rounded-full flex items-center justify-center", D.value.checkBg])
1908
1908
  }, [...r[1] ||= [l("svg", {
1909
1909
  class: "w-3 h-3 text-white",
1910
1910
  fill: "none",
@@ -1917,12 +1917,12 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
1917
1917
  "stroke-linejoin": "round",
1918
1918
  d: "M5 13l4 4L19 7"
1919
1919
  })], -1)]], 2)) : s("", !0)
1920
- ], 10, lr))), 128)), S.value.length === 0 ? (D(), c("div", dr, [l("p", { class: b(["text-sm", F(f).dimText]) }, P(t.emptyMessage), 3)])) : C.value.length === 0 ? (D(), c("div", fr, [l("p", { class: b(["text-sm", F(f).dimText]) }, P(t.noMatchMessage), 3)])) : s("", !0)])) : s("", !0)
1920
+ ], 10, pr))), 128)), S.value.length === 0 ? (O(), c("div", hr, [l("p", { class: x(["text-sm", F(f).dimText]) }, P(t.emptyMessage), 3)])) : C.value.length === 0 ? (O(), c("div", gr, [l("p", { class: x(["text-sm", F(f).dimText]) }, P(t.noMatchMessage), 3)])) : s("", !0)])) : s("", !0)
1921
1921
  ]),
1922
1922
  _: 2
1923
1923
  }, [n.$slots.icon ? {
1924
1924
  name: "icon",
1925
- fn: L(() => [j(n.$slots, "icon")]),
1925
+ fn: I(() => [M(n.$slots, "icon")]),
1926
1926
  key: "0"
1927
1927
  } : void 0]), 1032, [
1928
1928
  "title",
@@ -1932,10 +1932,10 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
1932
1932
  "manual-close"
1933
1933
  ]));
1934
1934
  }
1935
- }), gr = {
1935
+ }), br = {
1936
1936
  href: "#main-content",
1937
1937
  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"
1938
- }, _r = ["inert"], vr = /* @__PURE__ */ m({
1938
+ }, xr = ["inert"], Sr = /* @__PURE__ */ m({
1939
1939
  __name: "BaseAppLayout",
1940
1940
  props: {
1941
1941
  showSidebar: {
@@ -1945,23 +1945,23 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
1945
1945
  skipLinkLabel: { default: "Skip to main content" }
1946
1946
  },
1947
1947
  setup(e) {
1948
- let t = e, { isDark: n } = U(), { mobileOpen: r } = Rn(), { collapsed: i } = Hn(), o = a(() => t.showSidebar);
1949
- return (t, a) => (D(), c("div", { class: b(["min-h-screen transition-colors duration-300", F(n) ? "bg-gray-950 text-gray-100" : "bg-gray-50 text-gray-800"]) }, [
1950
- l("a", gr, P(e.skipLinkLabel), 1),
1951
- o.value ? j(t.$slots, "sidebar", {}, void 0, void 0, 0) : s("", !0),
1948
+ let t = e, { isDark: n } = U(), { mobileOpen: r } = Hn(), { collapsed: i } = Kn(), o = a(() => t.showSidebar);
1949
+ return (t, a) => (O(), c("div", { class: x(["min-h-screen transition-colors duration-300", F(n) ? "bg-gray-950 text-gray-100" : "bg-gray-50 text-gray-800"]) }, [
1950
+ l("a", br, P(e.skipLinkLabel), 1),
1951
+ o.value ? M(t.$slots, "sidebar", {}, void 0, void 0, 0) : s("", !0),
1952
1952
  l("main", {
1953
1953
  id: "main-content",
1954
1954
  tabindex: "-1",
1955
1955
  inert: o.value && F(r) ? !0 : void 0,
1956
- class: b(["transition-all duration-300", o.value ? F(i) ? "pt-14 lg:pt-0 lg:ml-16" : "pt-14 lg:pt-0 lg:ml-60" : ""])
1957
- }, [j(t.$slots, "default")], 10, _r)
1956
+ class: x(["transition-all duration-300", o.value ? F(i) ? "pt-14 lg:pt-0 lg:ml-16" : "pt-14 lg:pt-0 lg:ml-60" : ""])
1957
+ }, [M(t.$slots, "default")], 10, xr)
1958
1958
  ], 2));
1959
1959
  }
1960
- }), yr = { class: "flex items-center gap-3 min-w-0" }, br = {
1960
+ }), Cr = { class: "flex items-center gap-3 min-w-0" }, wr = {
1961
1961
  key: 0,
1962
1962
  class: "absolute left-0 top-[0.14em] h-[1.1em] w-1 rounded-full bg-gradient-to-b from-emerald-400 to-emerald-600",
1963
1963
  "aria-hidden": "true"
1964
- }, xr = { class: "flex items-center gap-2" }, Sr = /* @__PURE__ */ m({
1964
+ }, Tr = { class: "flex items-center gap-2" }, Er = /* @__PURE__ */ m({
1965
1965
  __name: "BasePageHeader",
1966
1966
  props: {
1967
1967
  title: {},
@@ -1972,11 +1972,11 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
1972
1972
  marginClass: { default: "mb-8" },
1973
1973
  accent: {
1974
1974
  type: Boolean,
1975
- default: !1
1975
+ default: void 0
1976
1976
  }
1977
1977
  },
1978
1978
  setup(e) {
1979
- let t = e, { isDark: n } = U(), r = X(), i = a(() => {
1979
+ let t = e, { isDark: n } = U(), r = X(), i = ie(), o = a(() => t.accent ?? !i.icon), u = a(() => {
1980
1980
  let e = {
1981
1981
  emerald: {
1982
1982
  dark: "bg-emerald-500/10",
@@ -1996,7 +1996,7 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
1996
1996
  }
1997
1997
  }[t.iconColor];
1998
1998
  return n.value ? e.dark : e.light;
1999
- }), o = a(() => {
1999
+ }), d = a(() => {
2000
2000
  let e = {
2001
2001
  emerald: {
2002
2002
  dark: "text-emerald-400",
@@ -2017,19 +2017,19 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2017
2017
  }[t.iconColor];
2018
2018
  return n.value ? e.dark : e.light;
2019
2019
  });
2020
- return (t, n) => (D(), c("header", { class: b(e.maxWidthClass ? ["mx-auto px-4 sm:px-6", e.maxWidthClass] : void 0) }, [l("div", { class: b(["flex flex-wrap justify-between gap-3", [e.align === "end" ? "items-end" : "items-center", e.marginClass]]) }, [l("div", yr, [t.$slots.icon ? (D(), c("div", {
2020
+ return (t, n) => (O(), c("header", { class: x(e.maxWidthClass ? ["mx-auto px-4 sm:px-6", e.maxWidthClass] : void 0) }, [l("div", { class: x(["flex flex-wrap justify-between gap-3", [e.align === "end" ? "items-end" : "items-center", e.marginClass]]) }, [l("div", Cr, [t.$slots.icon ? (O(), c("div", {
2021
2021
  key: 0,
2022
- class: b(["w-10 h-10 rounded-lg flex items-center justify-center", i.value])
2023
- }, [j(t.$slots, "icon", { iconClass: o.value })], 2)) : s("", !0), l("div", null, [l("h1", { class: b(["text-2xl font-bold", [F(r).primaryTextSoft, e.accent ? "relative pl-3.5 tracking-tight" : ""]]) }, [e.accent ? (D(), c("span", br)) : s("", !0), f(" " + P(e.title), 1)], 2), e.subtitle || t.$slots.subtitle ? (D(), c("p", {
2022
+ class: x(["w-10 h-10 rounded-lg flex items-center justify-center", u.value])
2023
+ }, [M(t.$slots, "icon", { iconClass: d.value })], 2)) : s("", !0), l("div", null, [l("h1", { class: x(["text-2xl font-bold", [F(r).primaryTextSoft, o.value ? "relative pl-3.5 tracking-tight" : ""]]) }, [o.value ? (O(), c("span", wr)) : s("", !0), f(" " + P(e.title), 1)], 2), e.subtitle || t.$slots.subtitle ? (O(), c("p", {
2024
2024
  key: 0,
2025
- class: b(["max-w-[72ch] text-sm", F(r).dimTextAlt])
2026
- }, [j(t.$slots, "subtitle", {}, () => [f(P(e.subtitle), 1)])], 2)) : s("", !0)])]), l("div", xr, [j(t.$slots, "actions")])], 2)], 2));
2025
+ class: x(["max-w-[72ch] text-sm", F(r).dimTextAlt])
2026
+ }, [M(t.$slots, "subtitle", {}, () => [f(P(e.subtitle), 1)])], 2)) : s("", !0)])]), l("div", Tr, [M(t.$slots, "actions")])], 2)], 2));
2027
2027
  }
2028
- }), Cr = [
2028
+ }), Dr = [
2029
2029
  "type",
2030
2030
  "disabled",
2031
2031
  "title"
2032
- ], wr = { key: 0 }, Tr = /* @__PURE__ */ m({
2032
+ ], Or = { key: 0 }, kr = /* @__PURE__ */ m({
2033
2033
  __name: "BaseToolbarButton",
2034
2034
  props: {
2035
2035
  label: { default: "" },
@@ -2064,20 +2064,20 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2064
2064
  }[t.variant];
2065
2065
  return [r[t.variant], n.value ? e.dark : e.light];
2066
2066
  });
2067
- return (t, n) => (D(), c("button", {
2067
+ return (t, n) => (O(), c("button", {
2068
2068
  type: e.type,
2069
2069
  disabled: e.disabled,
2070
2070
  title: e.title,
2071
- class: b(["inline-flex shrink-0 items-center gap-2 text-sm border transition-colors cursor-pointer disabled:cursor-not-allowed whitespace-nowrap focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", i.value]),
2071
+ class: x(["inline-flex shrink-0 items-center gap-2 text-sm border transition-colors cursor-pointer disabled:cursor-not-allowed whitespace-nowrap focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", i.value]),
2072
2072
  onClick: n[0] ||= (e) => t.$emit("click", e)
2073
- }, [j(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (D(), c("span", wr, P(e.label), 1)) : s("", !0)], 10, Cr));
2073
+ }, [M(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (O(), c("span", Or, P(e.label), 1)) : s("", !0)], 10, Dr));
2074
2074
  }
2075
- }), Er = [
2075
+ }), Ar = [
2076
2076
  "type",
2077
2077
  "disabled",
2078
2078
  "title",
2079
2079
  "aria-label"
2080
- ], Dr = { key: 0 }, Or = /* @__PURE__ */ m({
2080
+ ], jr = { key: 0 }, Mr = /* @__PURE__ */ m({
2081
2081
  __name: "BaseActionButton",
2082
2082
  props: {
2083
2083
  label: { default: "" },
@@ -2169,16 +2169,16 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2169
2169
  }[t.color];
2170
2170
  return n.value ? e.dark : e.light;
2171
2171
  }), o = a(() => t.disabled ? `${i.value} opacity-50 cursor-not-allowed` : `${r.value} cursor-pointer`);
2172
- return (t, n) => (D(), c("button", {
2172
+ return (t, n) => (O(), c("button", {
2173
2173
  type: e.type,
2174
2174
  disabled: e.disabled,
2175
2175
  title: e.title,
2176
2176
  "aria-label": e.ariaLabel,
2177
- class: b(["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" : "", o.value]]),
2177
+ class: x(["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" : "", o.value]]),
2178
2178
  onClick: n[0] ||= (e) => t.$emit("click", e)
2179
- }, [j(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (D(), c("span", Dr, P(e.label), 1)) : s("", !0)], 10, Er));
2179
+ }, [M(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (O(), c("span", jr, P(e.label), 1)) : s("", !0)], 10, Ar));
2180
2180
  }
2181
- }), kr = ["title", "aria-label"], Ar = /* @__PURE__ */ m({
2181
+ }), Nr = ["title", "aria-label"], Pr = /* @__PURE__ */ m({
2182
2182
  __name: "BaseCopyButton",
2183
2183
  props: {
2184
2184
  text: {},
@@ -2189,7 +2189,7 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2189
2189
  },
2190
2190
  emits: ["copied", "error"],
2191
2191
  setup(e, { emit: t }) {
2192
- let n = e, r = t, { isDark: i } = U(), s = k(!1), l = null, u = a(() => s.value ? "Copied!" : n.label ? `Copy ${n.label}` : "Copy"), d = a(() => n.label ? `Copy ${n.label}` : "Copy"), f = a(() => 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 ${s.value ? i.value ? "border-emerald-500/40 bg-emerald-500/10 text-emerald-400" : "border-emerald-300 bg-emerald-50 text-emerald-600" : i.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 ${i.value ? "text-gray-400 hover:text-emerald-300 hover:bg-emerald-500/10" : "text-gray-500 hover:text-emerald-600 hover:bg-emerald-50"}`);
2192
+ let n = e, r = t, { isDark: i } = U(), s = A(!1), l = null, u = a(() => s.value ? "Copied!" : n.label ? `Copy ${n.label}` : "Copy"), d = a(() => n.label ? `Copy ${n.label}` : "Copy"), f = a(() => 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 ${s.value ? i.value ? "border-emerald-500/40 bg-emerald-500/10 text-emerald-400" : "border-emerald-300 bg-emerald-50 text-emerald-600" : i.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 ${i.value ? "text-gray-400 hover:text-emerald-300 hover:bg-emerald-500/10" : "text-gray-500 hover:text-emerald-600 hover:bg-emerald-50"}`);
2193
2193
  async function p(e) {
2194
2194
  try {
2195
2195
  if (navigator.clipboard?.writeText) {
@@ -2211,36 +2211,36 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2211
2211
  r("error", e);
2212
2212
  }
2213
2213
  }
2214
- return E(() => {
2214
+ return D(() => {
2215
2215
  l && clearTimeout(l);
2216
- }), (t, n) => (D(), c("button", {
2216
+ }), (t, n) => (O(), c("button", {
2217
2217
  type: "button",
2218
2218
  title: u.value,
2219
2219
  "aria-label": d.value,
2220
- class: b(f.value),
2220
+ class: x(f.value),
2221
2221
  onClick: m
2222
- }, [s.value ? (D(), o(F(ye), {
2222
+ }, [s.value ? (O(), o(F(Ce), {
2223
2223
  key: 0,
2224
- class: b(e.iconClass),
2224
+ class: x(e.iconClass),
2225
2225
  "aria-hidden": "true"
2226
- }, null, 8, ["class"])) : (D(), o(F(be), {
2226
+ }, null, 8, ["class"])) : (O(), o(F(we), {
2227
2227
  key: 1,
2228
- class: b(e.iconClass),
2228
+ class: x(e.iconClass),
2229
2229
  "aria-hidden": "true"
2230
- }, null, 8, ["class"]))], 10, kr));
2230
+ }, null, 8, ["class"]))], 10, Nr));
2231
2231
  }
2232
- }), jr = ["disabled", "aria-busy"], Mr = {
2232
+ }), Fr = ["disabled", "aria-busy"], Ir = {
2233
2233
  key: 0,
2234
2234
  class: "w-5 h-5 animate-spin shrink-0",
2235
2235
  viewBox: "0 0 24 24",
2236
2236
  fill: "none",
2237
2237
  "aria-hidden": "true"
2238
- }, Nr = {
2238
+ }, Lr = {
2239
2239
  key: 1,
2240
2240
  class: "w-5 h-5 shrink-0",
2241
2241
  viewBox: "0 0 48 48",
2242
2242
  "aria-hidden": "true"
2243
- }, Pr = /* @__PURE__ */ m({
2243
+ }, Rr = /* @__PURE__ */ m({
2244
2244
  __name: "BaseGoogleSignInButton",
2245
2245
  props: {
2246
2246
  label: { default: "Sign in with Google" },
@@ -2263,13 +2263,13 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2263
2263
  function s() {
2264
2264
  o.value || r("click");
2265
2265
  }
2266
- return (t, n) => (D(), c("button", {
2266
+ return (t, n) => (O(), c("button", {
2267
2267
  type: "button",
2268
2268
  disabled: o.value,
2269
2269
  "aria-busy": e.loading,
2270
2270
  onClick: s,
2271
- class: b(["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" : "", F(i) ? "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"]])
2272
- }, [e.loading ? (D(), c("svg", Mr, [...n[0] ||= [l("circle", {
2271
+ class: x(["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" : "", F(i) ? "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"]])
2272
+ }, [e.loading ? (O(), c("svg", Ir, [...n[0] ||= [l("circle", {
2273
2273
  class: "opacity-25",
2274
2274
  cx: "12",
2275
2275
  cy: "12",
@@ -2280,18 +2280,18 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2280
2280
  class: "opacity-75",
2281
2281
  fill: "currentColor",
2282
2282
  d: "M4 12a8 8 0 0 1 8-8V0C5.4 0 0 5.4 0 12h4z"
2283
- }, null, -1)]])) : (D(), c("svg", Nr, [...n[1] ||= [d("<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)]])), l("span", null, P(e.label), 1)], 10, jr));
2283
+ }, null, -1)]])) : (O(), c("svg", Lr, [...n[1] ||= [d("<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)]])), l("span", null, P(e.label), 1)], 10, Fr));
2284
2284
  }
2285
- }), Fr = {
2285
+ }), zr = {
2286
2286
  key: 0,
2287
2287
  class: "flex justify-center mb-6"
2288
- }, Ir = { class: "mb-6 text-center" }, Lr = { class: "flex items-center gap-3 my-5" }, Rr = ["disabled"], zr = { class: "flex items-center justify-between mb-1.5" }, Br = { class: "relative" }, Vr = ["type", "disabled"], Hr = ["aria-label", "aria-pressed"], Ur = ["disabled"], Wr = ["disabled", "aria-busy"], Gr = {
2288
+ }, Br = { class: "mb-6 text-center" }, Vr = { class: "flex items-center gap-3 my-5" }, Hr = ["disabled"], Ur = { class: "flex items-center justify-between mb-1.5" }, Wr = { class: "relative" }, Gr = ["type", "disabled"], Kr = ["aria-label", "aria-pressed"], qr = ["disabled"], Jr = ["disabled", "aria-busy"], Yr = {
2289
2289
  key: 0,
2290
2290
  class: "w-4 h-4 animate-spin",
2291
2291
  viewBox: "0 0 24 24",
2292
2292
  fill: "none",
2293
2293
  "aria-hidden": "true"
2294
- }, Kr = /* @__PURE__ */ m({
2294
+ }, Xr = /* @__PURE__ */ m({
2295
2295
  __name: "BaseLoginForm",
2296
2296
  props: {
2297
2297
  title: { default: "Sign in" },
@@ -2317,7 +2317,7 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2317
2317
  },
2318
2318
  emits: ["submit", "google-sign-in"],
2319
2319
  setup(t, { emit: n }) {
2320
- let r = t, i = n, { isDark: o } = U(), u = X(), d = k(""), m = k(""), h = k(!1), g = k(!1), _ = a(() => r.loading || r.googleLoading);
2320
+ let r = t, i = n, { isDark: o } = U(), u = X(), d = A(""), m = A(""), h = A(!1), g = A(!1), _ = a(() => r.loading || r.googleLoading);
2321
2321
  function v() {
2322
2322
  _.value || i("submit", {
2323
2323
  email: d.value,
@@ -2325,34 +2325,34 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2325
2325
  ...r.showRemember ? { remember: h.value } : {}
2326
2326
  });
2327
2327
  }
2328
- return (n, r) => (D(), c("div", { class: b(["w-full max-w-sm mx-auto rounded-xl border shadow-sm p-6 sm:p-8", F(u).card]) }, [
2329
- n.$slots.logo ? (D(), c("div", Fr, [j(n.$slots, "logo")])) : s("", !0),
2330
- l("div", Ir, [l("h1", { class: b(["text-xl font-semibold", F(u).primaryText]) }, P(t.title), 3), t.subtitle ? (D(), c("p", {
2328
+ return (n, r) => (O(), c("div", { class: x(["w-full max-w-sm mx-auto rounded-xl border shadow-sm p-6 sm:p-8", F(u).card]) }, [
2329
+ n.$slots.logo ? (O(), c("div", zr, [M(n.$slots, "logo")])) : s("", !0),
2330
+ l("div", Br, [l("h1", { class: x(["text-xl font-semibold", F(u).primaryText]) }, P(t.title), 3), t.subtitle ? (O(), c("p", {
2331
2331
  key: 0,
2332
- class: b(["mt-1 text-sm", F(u).mutedText])
2332
+ class: x(["mt-1 text-sm", F(u).mutedText])
2333
2333
  }, P(t.subtitle), 3)) : s("", !0)]),
2334
- t.error ? (D(), c("div", {
2334
+ t.error ? (O(), c("div", {
2335
2335
  key: 1,
2336
2336
  role: "alert",
2337
- class: b(["mb-4 rounded-lg border px-3 py-2 text-sm", F(o) ? "bg-red-500/10 border-red-500/30 text-red-300" : "bg-red-50 border-red-200 text-red-700"])
2337
+ class: x(["mb-4 rounded-lg border px-3 py-2 text-sm", F(o) ? "bg-red-500/10 border-red-500/30 text-red-300" : "bg-red-50 border-red-200 text-red-700"])
2338
2338
  }, P(t.error), 3)) : s("", !0),
2339
- t.showGoogle ? (D(), c(e, { key: 2 }, [p(Pr, {
2339
+ t.showGoogle ? (O(), c(e, { key: 2 }, [p(Rr, {
2340
2340
  loading: t.googleLoading,
2341
2341
  disabled: t.loading,
2342
2342
  onClick: r[0] ||= (e) => i("google-sign-in")
2343
- }, null, 8, ["loading", "disabled"]), l("div", Lr, [
2344
- l("span", { class: b(["h-px flex-1", F(o) ? "bg-gray-700" : "bg-gray-200"]) }, null, 2),
2345
- l("span", { class: b(["text-xs uppercase tracking-wider", F(u).dimTextAlt]) }, "or", 2),
2346
- l("span", { class: b(["h-px flex-1", F(o) ? "bg-gray-700" : "bg-gray-200"]) }, null, 2)
2343
+ }, null, 8, ["loading", "disabled"]), l("div", Vr, [
2344
+ l("span", { class: x(["h-px flex-1", F(o) ? "bg-gray-700" : "bg-gray-200"]) }, null, 2),
2345
+ l("span", { class: x(["text-xs uppercase tracking-wider", F(u).dimTextAlt]) }, "or", 2),
2346
+ l("span", { class: x(["h-px flex-1", F(o) ? "bg-gray-700" : "bg-gray-200"]) }, null, 2)
2347
2347
  ])], 64)) : s("", !0),
2348
2348
  l("form", {
2349
2349
  class: "space-y-4",
2350
- onSubmit: z(v, ["prevent"])
2350
+ onSubmit: R(v, ["prevent"])
2351
2351
  }, [
2352
2352
  l("div", null, [l("label", {
2353
2353
  for: "login-email",
2354
- class: b(["block mb-1.5 text-sm font-medium", F(u).label])
2355
- }, " Email ", 2), R(l("input", {
2354
+ class: x(["block mb-1.5 text-sm font-medium", F(u).label])
2355
+ }, " Email ", 2), L(l("input", {
2356
2356
  id: "login-email",
2357
2357
  "onUpdate:modelValue": r[1] ||= (e) => d.value = e,
2358
2358
  type: "email",
@@ -2361,12 +2361,12 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2361
2361
  required: "",
2362
2362
  disabled: _.value,
2363
2363
  placeholder: "you@example.com",
2364
- class: b(["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", F(u).inputWithPlaceholder])
2365
- }, null, 10, Rr), [[ae, d.value]])]),
2366
- l("div", null, [l("div", zr, [l("label", {
2364
+ class: x(["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", F(u).inputWithPlaceholder])
2365
+ }, null, 10, Hr), [[se, d.value]])]),
2366
+ l("div", null, [l("div", Ur, [l("label", {
2367
2367
  for: "login-password",
2368
- class: b(["block text-sm font-medium", F(u).label])
2369
- }, " Password ", 2), j(n.$slots, "forgot")]), l("div", Br, [R(l("input", {
2368
+ class: x(["block text-sm font-medium", F(u).label])
2369
+ }, " Password ", 2), M(n.$slots, "forgot")]), l("div", Wr, [L(l("input", {
2370
2370
  id: "login-password",
2371
2371
  "onUpdate:modelValue": r[2] ||= (e) => m.value = e,
2372
2372
  type: g.value ? "text" : "password",
@@ -2375,29 +2375,29 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2375
2375
  required: "",
2376
2376
  disabled: _.value,
2377
2377
  placeholder: "••••••••",
2378
- class: b(["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", F(u).inputWithPlaceholder])
2379
- }, null, 10, Vr), [[ie, m.value]]), l("button", {
2378
+ class: x(["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", F(u).inputWithPlaceholder])
2379
+ }, null, 10, Gr), [[oe, m.value]]), l("button", {
2380
2380
  type: "button",
2381
2381
  onClick: r[3] ||= (e) => g.value = !g.value,
2382
2382
  "aria-label": g.value ? "Hide password" : "Show password",
2383
2383
  "aria-pressed": g.value,
2384
- class: b(["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", F(u).mutedText])
2385
- }, P(g.value ? "Hide" : "Show"), 11, Hr)])]),
2386
- t.showRemember ? (D(), c("label", {
2384
+ class: x(["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", F(u).mutedText])
2385
+ }, P(g.value ? "Hide" : "Show"), 11, Kr)])]),
2386
+ t.showRemember ? (O(), c("label", {
2387
2387
  key: 0,
2388
- class: b(["flex items-center gap-2 text-sm cursor-pointer select-none", F(u).bodyText])
2389
- }, [R(l("input", {
2388
+ class: x(["flex items-center gap-2 text-sm cursor-pointer select-none", F(u).bodyText])
2389
+ }, [L(l("input", {
2390
2390
  "onUpdate:modelValue": r[4] ||= (e) => h.value = e,
2391
2391
  type: "checkbox",
2392
2392
  disabled: _.value,
2393
2393
  class: "w-4 h-4 rounded border-gray-300 text-emerald-600 focus:ring-emerald-500"
2394
- }, null, 8, Ur), [[re, h.value]]), r[5] ||= f(" Remember me ", -1)], 2)) : s("", !0),
2394
+ }, null, 8, qr), [[ae, h.value]]), r[5] ||= f(" Remember me ", -1)], 2)) : s("", !0),
2395
2395
  l("button", {
2396
2396
  type: "submit",
2397
2397
  disabled: _.value,
2398
2398
  "aria-busy": t.loading,
2399
2399
  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"
2400
- }, [t.loading ? (D(), c("svg", Gr, [...r[6] ||= [l("circle", {
2400
+ }, [t.loading ? (O(), c("svg", Yr, [...r[6] ||= [l("circle", {
2401
2401
  class: "opacity-25",
2402
2402
  cx: "12",
2403
2403
  cy: "12",
@@ -2408,18 +2408,18 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2408
2408
  class: "opacity-75",
2409
2409
  fill: "currentColor",
2410
2410
  d: "M4 12a8 8 0 0 1 8-8V0C5.4 0 0 5.4 0 12h4z"
2411
- }, null, -1)]])) : s("", !0), f(" " + P(t.submitLabel), 1)], 8, Wr)
2411
+ }, null, -1)]])) : s("", !0), f(" " + P(t.submitLabel), 1)], 8, Jr)
2412
2412
  ], 32),
2413
- n.$slots.footer ? (D(), c("div", {
2413
+ n.$slots.footer ? (O(), c("div", {
2414
2414
  key: 3,
2415
- class: b(["mt-6 text-center text-sm", F(u).mutedText])
2416
- }, [j(n.$slots, "footer")], 2)) : s("", !0)
2415
+ class: x(["mt-6 text-center text-sm", F(u).mutedText])
2416
+ }, [M(n.$slots, "footer")], 2)) : s("", !0)
2417
2417
  ], 2));
2418
2418
  }
2419
- }), qr = ["aria-label"], Jr = { class: "flex-1 overflow-y-auto" }, Yr = {
2419
+ }), Zr = ["aria-label"], Qr = { class: "flex-1 overflow-y-auto" }, $r = {
2420
2420
  key: 0,
2421
2421
  class: "flex flex-col items-center justify-center text-center px-6 py-16 gap-3"
2422
- }, Xr = ["onClick"], Zr = { class: "min-w-0 flex-1" }, Qr = { class: "flex items-baseline justify-between gap-2" }, $r = /* @__PURE__ */ m({
2422
+ }, ei = ["onClick"], ti = { class: "min-w-0 flex-1" }, ni = { class: "flex items-baseline justify-between gap-2" }, ri = /* @__PURE__ */ m({
2423
2423
  __name: "BaseNotificationPanel",
2424
2424
  props: {
2425
2425
  title: { default: "Notifications" },
@@ -2431,24 +2431,24 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2431
2431
  },
2432
2432
  emits: ["select"],
2433
2433
  setup(n, { emit: i }) {
2434
- let u = i, { isDark: d } = U(), m = X(), { notifications: h, unreadCount: g, open: _, closePanel: v, markAllRead: y, markRead: x } = Gn(), S = {
2434
+ let u = i, { isDark: d } = U(), m = X(), { notifications: h, unreadCount: g, open: _, closePanel: v, markAllRead: y, markRead: b } = Yn(), S = {
2435
2435
  info: "bg-sky-500",
2436
2436
  success: "bg-emerald-500",
2437
2437
  warning: "bg-amber-500",
2438
2438
  error: "bg-red-500"
2439
2439
  }, C = a(() => h.value.length);
2440
2440
  function w(e) {
2441
- x(e), u("select", e);
2441
+ b(e), u("select", e);
2442
2442
  }
2443
- return pn(() => {
2443
+ return _n(() => {
2444
2444
  _.value && v();
2445
- }), (i, a) => (D(), o(t, { to: "body" }, [p(r, {
2445
+ }), (i, a) => (O(), o(t, { to: "body" }, [p(r, {
2446
2446
  "enter-active-class": "transition-opacity duration-200",
2447
2447
  "enter-from-class": "opacity-0",
2448
2448
  "leave-active-class": "transition-opacity duration-200",
2449
2449
  "leave-to-class": "opacity-0"
2450
2450
  }, {
2451
- default: L(() => [F(_) ? (D(), c("div", {
2451
+ default: I(() => [F(_) ? (O(), c("div", {
2452
2452
  key: 0,
2453
2453
  class: "fixed inset-0 z-[60] bg-black/50",
2454
2454
  "aria-hidden": "true",
@@ -2461,55 +2461,55 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2461
2461
  "leave-active-class": "transition-transform duration-300 ease-in",
2462
2462
  "leave-to-class": "-translate-x-full"
2463
2463
  }, {
2464
- default: L(() => [F(_) ? (D(), c("aside", {
2464
+ default: I(() => [F(_) ? (O(), c("aside", {
2465
2465
  key: 0,
2466
2466
  role: "dialog",
2467
2467
  "aria-modal": "true",
2468
2468
  "aria-label": n.title,
2469
- class: b(["fixed top-0 left-0 z-[70] h-screen w-full max-w-sm flex flex-col border-r shadow-xl", F(d) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200"])
2469
+ class: x(["fixed top-0 left-0 z-[70] h-screen w-full max-w-sm flex flex-col border-r shadow-xl", F(d) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200"])
2470
2470
  }, [
2471
- l("div", { class: b(["flex items-center justify-between gap-3 px-5 py-4 border-b shrink-0", F(m).border]) }, [l("h2", { class: b(["text-lg font-semibold flex items-center gap-2", F(m).primaryText]) }, [f(P(n.title) + " ", 1), l("span", { class: b(["text-sm font-normal", F(m).dimTextAlt]) }, "— " + P(C.value), 3)], 2), l("button", {
2471
+ l("div", { class: x(["flex items-center justify-between gap-3 px-5 py-4 border-b shrink-0", F(m).border]) }, [l("h2", { class: x(["text-lg font-semibold flex items-center gap-2", F(m).primaryText]) }, [f(P(n.title) + " ", 1), l("span", { class: x(["text-sm font-normal", F(m).dimTextAlt]) }, "— " + P(C.value), 3)], 2), l("button", {
2472
2472
  type: "button",
2473
2473
  onClick: a[1] ||= (...e) => F(v) && F(v)(...e),
2474
2474
  "aria-label": "Close notifications",
2475
- class: b(["p-1.5 rounded-lg cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", F(d) ? "text-gray-400 hover:bg-gray-800" : "text-gray-500 hover:bg-gray-100"])
2476
- }, [p(F(Ae), {
2475
+ class: x(["p-1.5 rounded-lg cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", F(d) ? "text-gray-400 hover:bg-gray-800" : "text-gray-500 hover:bg-gray-100"])
2476
+ }, [p(F(z), {
2477
2477
  class: "w-5 h-5",
2478
2478
  "aria-hidden": "true"
2479
2479
  })], 2)], 2),
2480
- n.showMarkAllRead && F(g) > 0 ? (D(), c("div", {
2480
+ n.showMarkAllRead && F(g) > 0 ? (O(), c("div", {
2481
2481
  key: 0,
2482
- class: b(["px-5 py-2 border-b shrink-0 flex justify-end", F(m).border])
2482
+ class: x(["px-5 py-2 border-b shrink-0 flex justify-end", F(m).border])
2483
2483
  }, [l("button", {
2484
2484
  type: "button",
2485
2485
  onClick: a[2] ||= (...e) => F(y) && F(y)(...e),
2486
- class: b(["text-xs font-medium cursor-pointer transition-colors focus:outline-none focus-visible:underline", F(m).emeraldText])
2486
+ class: x(["text-xs font-medium cursor-pointer transition-colors focus:outline-none focus-visible:underline", F(m).emeraldText])
2487
2487
  }, " Mark all as read ", 2)], 2)) : s("", !0),
2488
- l("div", Jr, [C.value === 0 ? (D(), c("div", Yr, [p(F(fe), {
2489
- class: b(["w-10 h-10", F(m).illustration]),
2488
+ l("div", Qr, [C.value === 0 ? (O(), c("div", $r, [p(F(he), {
2489
+ class: x(["w-10 h-10", F(m).illustration]),
2490
2490
  "aria-hidden": "true"
2491
- }, null, 8, ["class"]), l("p", { class: b(["text-sm", F(m).mutedText]) }, P(n.emptyText), 3)])) : (D(), c("ul", {
2491
+ }, null, 8, ["class"]), l("p", { class: x(["text-sm", F(m).mutedText]) }, P(n.emptyText), 3)])) : (O(), c("ul", {
2492
2492
  key: 1,
2493
- class: b(["divide-y", F(d) ? "divide-gray-800" : "divide-gray-100"])
2494
- }, [(D(!0), c(e, null, A(F(h), (e) => (D(), c("li", { key: e.id }, [l("button", {
2493
+ class: x(["divide-y", F(d) ? "divide-gray-800" : "divide-gray-100"])
2494
+ }, [(O(!0), c(e, null, j(F(h), (e) => (O(), c("li", { key: e.id }, [l("button", {
2495
2495
  type: "button",
2496
2496
  onClick: (t) => w(e.id),
2497
- class: b(["w-full text-left px-5 py-4 flex gap-3 transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500", [e.read ? "" : F(d) ? "bg-emerald-500/5" : "bg-emerald-50/60", F(d) ? "hover:bg-gray-800" : "hover:bg-gray-50"]])
2497
+ class: x(["w-full text-left px-5 py-4 flex gap-3 transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500", [e.read ? "" : F(d) ? "bg-emerald-500/5" : "bg-emerald-50/60", F(d) ? "hover:bg-gray-800" : "hover:bg-gray-50"]])
2498
2498
  }, [l("span", {
2499
- class: b(["mt-1.5 w-2 h-2 rounded-full shrink-0", e.read ? F(d) ? "bg-gray-700" : "bg-gray-300" : S[e.type ?? "info"]]),
2499
+ class: x(["mt-1.5 w-2 h-2 rounded-full shrink-0", e.read ? F(d) ? "bg-gray-700" : "bg-gray-300" : S[e.type ?? "info"]]),
2500
2500
  "aria-hidden": "true"
2501
- }, null, 2), l("span", Zr, [l("span", Qr, [l("span", { class: b(["text-sm truncate", [e.read ? "font-medium" : "font-semibold", F(m).primaryTextSoft]]) }, P(e.title), 3), e.time ? (D(), c("span", {
2501
+ }, null, 2), l("span", ti, [l("span", ni, [l("span", { class: x(["text-sm truncate", [e.read ? "font-medium" : "font-semibold", F(m).primaryTextSoft]]) }, P(e.title), 3), e.time ? (O(), c("span", {
2502
2502
  key: 0,
2503
- class: b(["text-xs shrink-0", F(m).dimText])
2504
- }, P(e.time), 3)) : s("", !0)]), e.message ? (D(), c("span", {
2503
+ class: x(["text-xs shrink-0", F(m).dimText])
2504
+ }, P(e.time), 3)) : s("", !0)]), e.message ? (O(), c("span", {
2505
2505
  key: 0,
2506
- class: b(["mt-0.5 block text-sm", F(m).mutedText])
2507
- }, P(e.message), 3)) : s("", !0)])], 10, Xr)]))), 128))], 2))])
2508
- ], 10, qr)) : s("", !0)]),
2506
+ class: x(["mt-0.5 block text-sm", F(m).mutedText])
2507
+ }, P(e.message), 3)) : s("", !0)])], 10, ei)]))), 128))], 2))])
2508
+ ], 10, Zr)) : s("", !0)]),
2509
2509
  _: 1
2510
2510
  })]));
2511
2511
  }
2512
- }), ei = ["disabled"], ti = /* @__PURE__ */ m({
2512
+ }), ii = ["disabled"], ai = /* @__PURE__ */ m({
2513
2513
  __name: "BaseChipButton",
2514
2514
  props: {
2515
2515
  size: { default: "sm" },
@@ -2521,29 +2521,29 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2521
2521
  emits: ["click"],
2522
2522
  setup(e, { emit: t }) {
2523
2523
  let n = t, { isDark: r } = U();
2524
- return (t, i) => (D(), c("button", {
2524
+ return (t, i) => (O(), c("button", {
2525
2525
  type: "button",
2526
2526
  disabled: e.disabled,
2527
- class: b(["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", F(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"]]),
2527
+ class: x(["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", F(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"]]),
2528
2528
  onClick: i[0] ||= (e) => n("click")
2529
- }, [j(t.$slots, "default")], 10, ei));
2529
+ }, [M(t.$slots, "default")], 10, ii));
2530
2530
  }
2531
- }), ni = /* @__PURE__ */ m({
2531
+ }), oi = /* @__PURE__ */ m({
2532
2532
  __name: "BaseRemoveButton",
2533
2533
  emits: ["click"],
2534
2534
  setup(e, { emit: t }) {
2535
2535
  let n = t;
2536
- return (e, t) => (D(), c("button", {
2536
+ return (e, t) => (O(), c("button", {
2537
2537
  type: "button",
2538
2538
  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",
2539
2539
  onClick: t[0] ||= (e) => n("click")
2540
2540
  }, " × "));
2541
2541
  }
2542
- }), ri = { class: "relative flex h-2 w-2" }, ii = {
2542
+ }), si = { class: "relative flex h-2 w-2" }, ci = {
2543
2543
  key: 0,
2544
2544
  class: "animate-ping absolute inline-flex h-full w-full rounded-full bg-emerald-400 opacity-75",
2545
2545
  "aria-hidden": "true"
2546
- }, ai = /* @__PURE__ */ m({
2546
+ }, li = /* @__PURE__ */ m({
2547
2547
  __name: "BaseStatusPill",
2548
2548
  props: {
2549
2549
  status: {},
@@ -2563,13 +2563,13 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2563
2563
  default: return "bg-gray-400";
2564
2564
  }
2565
2565
  });
2566
- return (t, n) => (D(), c("div", { class: b(["flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs", r.value]) }, [l("span", ri, [e.status === "ok" ? (D(), c("span", ii)) : s("", !0), l("span", { class: b(["relative inline-flex rounded-full h-2 w-2", i.value]) }, null, 2)]), f(" " + P(e.label), 1)], 2));
2566
+ return (t, n) => (O(), c("div", { class: x(["flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs", r.value]) }, [l("span", si, [e.status === "ok" ? (O(), c("span", ci)) : s("", !0), l("span", { class: x(["relative inline-flex rounded-full h-2 w-2", i.value]) }, null, 2)]), f(" " + P(e.label), 1)], 2));
2567
2567
  }
2568
- }), oi = { class: "text-sm font-medium" }, si = [
2568
+ }), ui = { class: "text-sm font-medium" }, di = [
2569
2569
  "accept",
2570
2570
  "multiple",
2571
2571
  "disabled"
2572
- ], ci = /* @__PURE__ */ m({
2572
+ ], fi = /* @__PURE__ */ m({
2573
2573
  __name: "BaseFileDropzone",
2574
2574
  props: {
2575
2575
  label: {},
@@ -2586,7 +2586,7 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2586
2586
  },
2587
2587
  emits: ["files"],
2588
2588
  setup(e, { emit: t }) {
2589
- let n = e, r = t, { isDark: i } = U(), a = k(!1);
2589
+ let n = e, r = t, { isDark: i } = U(), a = A(!1);
2590
2590
  function o(e) {
2591
2591
  let t = e.target, n = Array.from(t.files ?? []);
2592
2592
  t.value = "", n.length && r("files", n);
@@ -2599,13 +2599,13 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2599
2599
  let t = Array.from(e.dataTransfer?.files ?? []);
2600
2600
  t.length && r("files", n.multiple ? t : t.slice(0, 1));
2601
2601
  }
2602
- return (t, n) => (D(), c("label", {
2603
- class: b(["flex flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed px-6 py-10 text-center transition-colors", [e.disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer", a.value ? F(i) ? "border-emerald-500 text-emerald-400" : "border-emerald-500 text-emerald-600" : F(i) ? "border-gray-700 hover:border-emerald-500 text-gray-400 hover:text-emerald-400" : "border-gray-300 hover:border-emerald-500 text-gray-500 hover:text-emerald-600"]]),
2604
- onDragover: z(u, ["prevent"]),
2605
- onDragleave: n[0] ||= z((e) => a.value = !1, ["prevent"]),
2606
- onDrop: z(d, ["prevent"])
2602
+ return (t, n) => (O(), c("label", {
2603
+ class: x(["flex flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed px-6 py-10 text-center transition-colors", [e.disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer", a.value ? F(i) ? "border-emerald-500 text-emerald-400" : "border-emerald-500 text-emerald-600" : F(i) ? "border-gray-700 hover:border-emerald-500 text-gray-400 hover:text-emerald-400" : "border-gray-300 hover:border-emerald-500 text-gray-500 hover:text-emerald-600"]]),
2604
+ onDragover: R(u, ["prevent"]),
2605
+ onDragleave: n[0] ||= R((e) => a.value = !1, ["prevent"]),
2606
+ onDrop: R(d, ["prevent"])
2607
2607
  }, [
2608
- j(t.$slots, "icon", {}, () => [n[1] ||= l("svg", {
2608
+ M(t.$slots, "icon", {}, () => [n[1] ||= l("svg", {
2609
2609
  class: "w-10 h-10",
2610
2610
  fill: "none",
2611
2611
  viewBox: "0 0 24 24",
@@ -2617,10 +2617,10 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2617
2617
  "stroke-linejoin": "round",
2618
2618
  d: "M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m6.75 12-3-3m0 0-3 3m3-3v6m-1.5-15H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z"
2619
2619
  })], -1)]),
2620
- l("p", oi, P(e.label), 1),
2621
- e.hint ? (D(), c("p", {
2620
+ l("p", ui, P(e.label), 1),
2621
+ e.hint ? (O(), c("p", {
2622
2622
  key: 0,
2623
- class: b(["text-xs", F(i) ? "text-gray-500" : "text-gray-400"])
2623
+ class: x(["text-xs", F(i) ? "text-gray-500" : "text-gray-400"])
2624
2624
  }, P(e.hint), 3)) : s("", !0),
2625
2625
  l("input", {
2626
2626
  type: "file",
@@ -2629,10 +2629,10 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2629
2629
  multiple: e.multiple,
2630
2630
  disabled: e.disabled,
2631
2631
  onChange: o
2632
- }, null, 40, si)
2632
+ }, null, 40, di)
2633
2633
  ], 34));
2634
2634
  }
2635
- }), li = /* @__PURE__ */ m({
2635
+ }), pi = /* @__PURE__ */ m({
2636
2636
  __name: "BaseCodeBlock",
2637
2637
  props: {
2638
2638
  code: {},
@@ -2657,13 +2657,13 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2657
2657
  let e = r[t.variant];
2658
2658
  return n.value ? e.dark : e.light;
2659
2659
  }), s = a(() => i[t.size]);
2660
- return (t, n) => (D(), c("pre", { class: b(["font-mono overflow-auto", [
2660
+ return (t, n) => (O(), c("pre", { class: x(["font-mono overflow-auto", [
2661
2661
  s.value,
2662
2662
  o.value,
2663
2663
  e.maxHeightClass
2664
2664
  ]]) }, P(e.code), 3));
2665
2665
  }
2666
- }), ui = ["value", "type"], di = /* @__PURE__ */ m({
2666
+ }), mi = ["value", "type"], hi = /* @__PURE__ */ m({
2667
2667
  __name: "BaseInput",
2668
2668
  props: {
2669
2669
  modelValue: { default: "" },
@@ -2680,14 +2680,14 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2680
2680
  function r(e) {
2681
2681
  n("update:modelValue", e.target.value);
2682
2682
  }
2683
- return (t, n) => (D(), c("input", {
2683
+ return (t, n) => (O(), c("input", {
2684
2684
  value: e.modelValue,
2685
2685
  type: e.type,
2686
- class: b(["rounded-lg border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 text-slate-900 dark:text-slate-100 text-sm placeholder:text-slate-400 dark:placeholder:text-slate-500 transition-colors hover:border-slate-400 dark:hover:border-slate-500 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500/40 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"]]),
2686
+ class: x(["rounded-lg border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 text-slate-900 dark:text-slate-100 text-sm placeholder:text-slate-400 dark:placeholder:text-slate-500 transition-colors hover:border-slate-400 dark:hover:border-slate-500 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500/40 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"]]),
2687
2687
  onInput: r
2688
- }, null, 42, ui));
2688
+ }, null, 42, mi));
2689
2689
  }
2690
- }), fi = ["value"], pi = /* @__PURE__ */ m({
2690
+ }), gi = ["value"], _i = /* @__PURE__ */ m({
2691
2691
  inheritAttrs: !1,
2692
2692
  __name: "BaseSelect",
2693
2693
  props: {
@@ -2704,27 +2704,31 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2704
2704
  },
2705
2705
  emits: ["update:modelValue"],
2706
2706
  setup(e, { emit: t }) {
2707
- let n = e, r = ne(), i = () => {
2707
+ let n = e, r = ie(), i = () => {
2708
2708
  let e = r.default?.() ?? [];
2709
- return n.humanize ? Ue(e, ["option", "optgroup"]) : e;
2709
+ return n.humanize ? Je(e, ["option", "optgroup"]) : e;
2710
2710
  }, a = t;
2711
2711
  function o(e) {
2712
2712
  a("update:modelValue", e.target.value);
2713
2713
  }
2714
- return (t, n) => (D(), c("div", { class: b(["relative", e.block ? "w-full" : "inline-block"]) }, [l("select", v(t.$attrs, {
2715
- value: e.modelValue,
2716
- class: ["base-select w-full appearance-none bg-none rounded-lg border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 text-slate-900 dark:text-slate-100 text-sm cursor-pointer transition-colors hover:border-slate-400 dark:hover:border-slate-500 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500/40 focus-visible:border-emerald-500 disabled:opacity-60 disabled:cursor-not-allowed", e.size === "md" ? "py-2 pl-3 pr-9" : "py-1.5 pl-2.5 pr-8"],
2717
- onChange: o
2718
- }), [p(i)], 16, fi), p(F(_e), {
2719
- class: b(["pointer-events-none absolute top-1/2 h-4 w-4 -translate-y-1/2 text-slate-500 dark:text-slate-400", e.size === "md" ? "right-3" : "right-2.5"]),
2720
- "aria-hidden": "true"
2721
- }, null, 8, ["class"])], 2));
2714
+ return (t, n) => (O(), c("div", { class: x(["relative", e.block ? "w-full" : "inline-block"]) }, [
2715
+ l("select", y(t.$attrs, {
2716
+ value: e.modelValue,
2717
+ class: ["base-select w-full appearance-none bg-none rounded-lg border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 text-slate-900 dark:text-slate-100 text-sm cursor-pointer transition-colors hover:border-slate-400 dark:hover:border-slate-500 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500/40 focus-visible:border-emerald-500 disabled:opacity-60 disabled:cursor-not-allowed", [e.size === "md" ? "py-2 pr-9" : "py-1.5 pr-8", t.$slots.icon ? "pl-8" : e.size === "md" ? "pl-3" : "pl-2.5"]],
2718
+ onChange: o
2719
+ }), [p(i)], 16, gi),
2720
+ M(t.$slots, "icon", { iconClass: "pointer-events-none absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-400" }),
2721
+ p(F(be), {
2722
+ class: x(["pointer-events-none absolute top-1/2 h-4 w-4 -translate-y-1/2 text-slate-500 dark:text-slate-400", e.size === "md" ? "right-3" : "right-2.5"]),
2723
+ "aria-hidden": "true"
2724
+ }, null, 8, ["class"])
2725
+ ], 2));
2722
2726
  }
2723
- }), mi = [
2727
+ }), vi = [
2724
2728
  "disabled",
2725
2729
  "aria-label",
2726
2730
  "aria-expanded"
2727
- ], hi = ["aria-label"], gi = ["aria-selected", "title"], _i = ["disabled", "onClick"], vi = /* @__PURE__ */ m({
2731
+ ], yi = ["aria-label"], bi = ["aria-selected", "title"], xi = ["disabled", "onClick"], Si = /* @__PURE__ */ m({
2728
2732
  __name: "BaseDropdown",
2729
2733
  props: {
2730
2734
  options: {},
@@ -2746,7 +2750,7 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2746
2750
  },
2747
2751
  emits: ["update:modelValue"],
2748
2752
  setup(t, { emit: n }) {
2749
- let r = t, i = n, o = k(!1), u = k(null), d = a(() => r.options.find((e) => e.value === r.modelValue) ?? null), f = a(() => {
2753
+ let r = t, i = n, o = A(!1), u = A(null), d = a(() => r.options.find((e) => e.value === r.modelValue) ?? null), f = a(() => {
2750
2754
  let e = "flex items-center justify-between gap-2 text-left transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed ";
2751
2755
  if (r.triggerClass) return e + r.triggerClass;
2752
2756
  let t = r.size === "sm" ? "px-3 py-2" : "px-4 py-2.5";
@@ -2765,33 +2769,33 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2765
2769
  function _(e) {
2766
2770
  e.disabled || (i("update:modelValue", e.value), o.value = !1);
2767
2771
  }
2768
- pn(() => {
2772
+ _n(() => {
2769
2773
  o.value = !1;
2770
2774
  });
2771
2775
  function v(e) {
2772
2776
  o.value && u.value && !u.value.contains(e.target) && (o.value = !1);
2773
2777
  }
2774
- return w(() => document.addEventListener("click", v)), C(() => document.removeEventListener("click", v)), (n, r) => (D(), c("div", {
2778
+ return T(() => document.addEventListener("click", v)), w(() => document.removeEventListener("click", v)), (n, r) => (O(), c("div", {
2775
2779
  ref_key: "rootEl",
2776
2780
  ref: u,
2777
- class: b(t.block ? "relative w-full" : "relative inline-block")
2781
+ class: x(t.block ? "relative w-full" : "relative inline-block")
2778
2782
  }, [l("button", {
2779
2783
  type: "button",
2780
- class: b([f.value, t.block ? "w-full" : ""]),
2784
+ class: x([f.value, t.block ? "w-full" : ""]),
2781
2785
  disabled: t.disabled,
2782
2786
  "aria-label": t.ariaLabel || void 0,
2783
2787
  "aria-haspopup": "listbox",
2784
2788
  "aria-expanded": o.value,
2785
2789
  onClick: g
2786
- }, [l("span", { class: b(["min-w-0 truncate", d.value ? "" : "text-slate-400 dark:text-slate-500"]) }, P(d.value ? d.value.label : t.placeholder), 3), p(F(_e), {
2787
- class: b(["shrink-0 transition-transform", [t.chevronClass, o.value ? "rotate-180" : ""]]),
2790
+ }, [l("span", { class: x(["min-w-0 truncate", d.value ? "" : "text-slate-400 dark:text-slate-500"]) }, P(d.value ? d.value.label : t.placeholder), 3), p(F(be), {
2791
+ class: x(["shrink-0 transition-transform", [t.chevronClass, o.value ? "rotate-180" : ""]]),
2788
2792
  "aria-hidden": "true"
2789
- }, null, 8, ["class"])], 10, mi), o.value ? (D(), c("ul", {
2793
+ }, null, 8, ["class"])], 10, vi), o.value ? (O(), c("ul", {
2790
2794
  key: 0,
2791
2795
  role: "listbox",
2792
2796
  "aria-label": t.ariaLabel || t.placeholder,
2793
2797
  class: "absolute z-20 mt-1 w-full min-w-max max-w-xs max-h-60 overflow-auto rounded-lg border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 py-1 shadow-lg focus:outline-none"
2794
- }, [(D(!0), c(e, null, A(t.options, (e) => (D(), c("li", {
2798
+ }, [(O(!0), c(e, null, j(t.options, (e) => (O(), c("li", {
2795
2799
  key: String(e.value),
2796
2800
  role: "option",
2797
2801
  "aria-selected": e.value === t.modelValue,
@@ -2799,15 +2803,15 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2799
2803
  }, [l("button", {
2800
2804
  type: "button",
2801
2805
  disabled: e.disabled,
2802
- class: b(h(e)),
2806
+ class: x(h(e)),
2803
2807
  onClick: (t) => _(e)
2804
- }, P(e.label), 11, _i)], 8, gi))), 128))], 8, hi)) : s("", !0)], 2));
2808
+ }, P(e.label), 11, xi)], 8, bi))), 128))], 8, yi)) : s("", !0)], 2));
2805
2809
  }
2806
- }), yi = ["role", "aria-label"], bi = [
2810
+ }), Ci = ["role", "aria-label"], wi = [
2807
2811
  "aria-pressed",
2808
2812
  "title",
2809
2813
  "onClick"
2810
- ], xi = "bg-slate-50 dark:bg-slate-900 text-slate-600 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-800", Si = /* @__PURE__ */ m({
2814
+ ], Ti = "bg-slate-50 dark:bg-slate-900 text-slate-600 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-800", Ei = /* @__PURE__ */ m({
2811
2815
  __name: "BaseSegmentedControl",
2812
2816
  props: {
2813
2817
  options: {},
@@ -2824,22 +2828,22 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2824
2828
  let r = t, i = n, o = a(() => r.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"), s = a(() => r.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" : `${r.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 = a(() => r.variant === "wide" ? "bg-emerald-600 text-white" : "bg-emerald-500 text-white");
2825
2829
  function u(e) {
2826
2830
  let t = e.value === r.modelValue;
2827
- return r.optionClass ? r.optionClass(e, t) : t ? l.value : xi;
2831
+ return r.optionClass ? r.optionClass(e, t) : t ? l.value : Ti;
2828
2832
  }
2829
- return (n, r) => (D(), c("div", {
2833
+ return (n, r) => (O(), c("div", {
2830
2834
  role: t.ariaLabel ? "group" : void 0,
2831
2835
  "aria-label": t.ariaLabel || void 0,
2832
- class: b(o.value)
2833
- }, [(D(!0), c(e, null, A(t.options, (e) => (D(), c("button", {
2836
+ class: x(o.value)
2837
+ }, [(O(!0), c(e, null, j(t.options, (e) => (O(), c("button", {
2834
2838
  key: String(e.value),
2835
2839
  type: "button",
2836
- class: b([s.value, u(e)]),
2840
+ class: x([s.value, u(e)]),
2837
2841
  "aria-pressed": e.value === t.modelValue,
2838
2842
  title: e.title,
2839
2843
  onClick: (t) => i("update:modelValue", e.value)
2840
- }, P(e.label), 11, bi))), 128))], 10, yi));
2844
+ }, P(e.label), 11, wi))), 128))], 10, Ci));
2841
2845
  }
2842
- }), Ci = { class: "w-full text-sm" }, wi = { class: "bg-slate-50 dark:bg-slate-800/60 text-slate-600 dark:text-slate-300" }, Ti = { class: "text-left border-b border-slate-200 dark:border-slate-700" }, Ei = { class: "divide-y divide-slate-200 dark:divide-slate-700 [&>tr]:transition-colors [&>tr:hover]:bg-slate-50 dark:[&>tr:hover]:bg-slate-800/40" }, Di = { key: 0 }, Oi = ["colspan"], ki = "overflow-x-auto rounded-xl border border-slate-200 bg-white shadow-sm dark:border-slate-700 dark:bg-slate-900", Ai = /* @__PURE__ */ m({
2846
+ }), Di = { class: "w-full text-sm" }, Oi = { class: "bg-slate-50 dark:bg-slate-800/60 text-slate-600 dark:text-slate-300" }, ki = { class: "text-left border-b border-slate-200 dark:border-slate-700" }, Ai = { class: "divide-y divide-slate-200 dark:divide-slate-700 [&>tr]:transition-colors [&>tr:hover]:bg-slate-50 dark:[&>tr:hover]:bg-slate-800/40" }, ji = { key: 0 }, Mi = ["colspan"], Ni = "overflow-x-auto rounded-xl border border-slate-200 bg-white shadow-sm dark:border-slate-700 dark:bg-slate-900", Pi = /* @__PURE__ */ m({
2843
2847
  __name: "BaseTable",
2844
2848
  props: {
2845
2849
  columns: {},
@@ -2854,24 +2858,24 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2854
2858
  }
2855
2859
  },
2856
2860
  setup(t) {
2857
- return (n, r) => (D(), c("div", { class: b(t.card ? ki : void 0) }, [l("table", Ci, [l("thead", wi, [l("tr", Ti, [(D(!0), c(e, null, A(t.columns, (e, t) => (D(), c("th", {
2861
+ return (n, r) => (O(), c("div", { class: x(t.card ? Ni : void 0) }, [l("table", Di, [l("thead", Oi, [l("tr", ki, [(O(!0), c(e, null, j(t.columns, (e, t) => (O(), c("th", {
2858
2862
  key: t,
2859
- class: b(["px-4 py-3", e.align === "right" ? "text-right" : ""])
2860
- }, P(e.label), 3))), 128))])]), l("tbody", Ei, [t.empty ? (D(), c("tr", Di, [l("td", {
2863
+ class: x(["px-4 py-3", e.align === "right" ? "text-right" : ""])
2864
+ }, P(e.label), 3))), 128))])]), l("tbody", Ai, [t.empty ? (O(), c("tr", ji, [l("td", {
2861
2865
  colspan: t.columns.length,
2862
2866
  class: "px-4 py-12 text-center text-slate-500"
2863
- }, [j(n.$slots, "empty", {}, () => [f(P(t.emptyText), 1)])], 8, Oi)])) : s("", !0), j(n.$slots, "default")])])], 2));
2867
+ }, [M(n.$slots, "empty", {}, () => [f(P(t.emptyText), 1)])], 8, Mi)])) : s("", !0), M(n.$slots, "default")])])], 2));
2864
2868
  }
2865
- }), ji = { class: "grid gap-3 md:grid-cols-[repeat(2,minmax(0,1fr))]" }, Mi = {
2869
+ }), Fi = { class: "grid gap-3 md:grid-cols-[repeat(2,minmax(0,1fr))]" }, Ii = {
2866
2870
  key: 0,
2867
2871
  class: "block text-[11px] uppercase tracking-wide text-slate-500 mb-1"
2868
- }, Ni = ["value"], Pi = {
2872
+ }, Li = ["value"], Ri = {
2869
2873
  key: 2,
2870
2874
  class: "flex items-center gap-2 mt-4"
2871
- }, Fi = ["checked", "onChange"], Ii = { class: "text-sm text-slate-900 dark:text-slate-100" }, Li = {
2875
+ }, zi = ["checked", "onChange"], Bi = { class: "text-sm text-slate-900 dark:text-slate-100" }, Vi = {
2872
2876
  key: 4,
2873
2877
  class: "text-[11px] text-slate-400 mt-1"
2874
- }, Ri = /* @__PURE__ */ m({
2878
+ }, Hi = /* @__PURE__ */ m({
2875
2879
  __name: "BaseSpecFields",
2876
2880
  props: {
2877
2881
  specs: {},
@@ -2898,24 +2902,24 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2898
2902
  let t = e.clipboardData?.getData("text") ?? "";
2899
2903
  /^-?\d*$/.test(t.trim()) || e.preventDefault();
2900
2904
  }
2901
- return (n, f) => (D(), c("div", ji, [(D(!0), c(e, null, A(t.specs, (f) => (D(), c("div", { key: f.key }, [
2902
- f.type === "boolean" ? s("", !0) : (D(), c("label", Mi, P(f.label), 1)),
2903
- f.type === "select" ? (D(), o(pi, {
2905
+ return (n, f) => (O(), c("div", Fi, [(O(!0), c(e, null, j(t.specs, (f) => (O(), c("div", { key: f.key }, [
2906
+ f.type === "boolean" ? s("", !0) : (O(), c("label", Ii, P(f.label), 1)),
2907
+ f.type === "select" ? (O(), o(_i, {
2904
2908
  key: 1,
2905
2909
  modelValue: String(t.params[f.key] ?? ""),
2906
2910
  "onUpdate:modelValue": (e) => r("update", f.key, e)
2907
2911
  }, {
2908
- default: L(() => [(D(!0), c(e, null, A(f.options ?? [], (e) => (D(), c("option", {
2912
+ default: I(() => [(O(!0), c(e, null, j(f.options ?? [], (e) => (O(), c("option", {
2909
2913
  key: e,
2910
2914
  value: e
2911
- }, P(e), 9, Ni))), 128))]),
2915
+ }, P(e), 9, Li))), 128))]),
2912
2916
  _: 2
2913
- }, 1032, ["modelValue", "onUpdate:modelValue"])) : f.type === "boolean" ? (D(), c("label", Pi, [l("input", {
2917
+ }, 1032, ["modelValue", "onUpdate:modelValue"])) : f.type === "boolean" ? (O(), c("label", Ri, [l("input", {
2914
2918
  checked: !!t.params[f.key],
2915
2919
  type: "checkbox",
2916
2920
  class: "h-4 w-4",
2917
2921
  onChange: (e) => i(f.key, e)
2918
- }, null, 40, Fi), l("span", Ii, P(f.label), 1)])) : (D(), o(di, {
2922
+ }, null, 40, zi), l("span", Bi, P(f.label), 1)])) : (O(), o(hi, {
2919
2923
  key: 3,
2920
2924
  modelValue: t.params[f.key],
2921
2925
  type: "number",
@@ -2934,11 +2938,11 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2934
2938
  "onPaste",
2935
2939
  "onUpdate:modelValue"
2936
2940
  ])),
2937
- f.help ? (D(), c("p", Li, P(f.help), 1)) : s("", !0),
2938
- j(n.$slots, "after", { spec: f })
2941
+ f.help ? (O(), c("p", Vi, P(f.help), 1)) : s("", !0),
2942
+ M(n.$slots, "after", { spec: f })
2939
2943
  ]))), 128))]));
2940
2944
  }
2941
- }), zi = { class: "mt-1.5 space-y-0.5 px-1" }, Bi = { class: "text-slate-400 dark:text-slate-500" }, Vi = /* @__PURE__ */ m({
2945
+ }), Ui = { class: "mt-1.5 space-y-0.5 px-1" }, Wi = { class: "text-slate-400 dark:text-slate-500" }, Gi = /* @__PURE__ */ m({
2942
2946
  __name: "BaseStatBreakdown",
2943
2947
  props: {
2944
2948
  items: {},
@@ -2957,16 +2961,16 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2957
2961
  function i(e) {
2958
2962
  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";
2959
2963
  }
2960
- return (n, a) => (D(), c("div", zi, [(D(!0), c(e, null, A(t.items, (e) => (D(), c("div", {
2964
+ return (n, a) => (O(), c("div", Ui, [(O(!0), c(e, null, j(t.items, (e) => (O(), c("div", {
2961
2965
  key: e.label,
2962
2966
  class: "flex items-center justify-between text-[11px]"
2963
- }, [l("span", Bi, P(e.label), 1), l("span", { class: b(["font-mono tabular-nums font-medium", i(e.value)]) }, P(r(e.value)), 3)]))), 128))]));
2967
+ }, [l("span", Wi, P(e.label), 1), l("span", { class: x(["font-mono tabular-nums font-medium", i(e.value)]) }, P(r(e.value)), 3)]))), 128))]));
2964
2968
  }
2965
- }), Hi = [
2969
+ }), Ki = [
2966
2970
  "disabled",
2967
2971
  "title",
2968
2972
  "aria-pressed"
2969
- ], Ui = /* @__PURE__ */ m({
2973
+ ], qi = /* @__PURE__ */ m({
2970
2974
  __name: "BaseFilterChip",
2971
2975
  props: {
2972
2976
  label: { default: "" },
@@ -2995,21 +2999,21 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
2995
2999
  red: "border-red-500 bg-red-500 text-white hover:bg-red-600 focus-visible:ring-red-500",
2996
3000
  slate: "border-slate-600 bg-slate-600 text-white hover:bg-slate-700 focus-visible:ring-emerald-500"
2997
3001
  };
2998
- return (r, i) => (D(), c("button", {
3002
+ return (r, i) => (O(), c("button", {
2999
3003
  type: "button",
3000
3004
  disabled: e.disabled,
3001
3005
  title: e.title,
3002
3006
  "aria-pressed": e.active,
3003
- class: b(["whitespace-nowrap rounded-md border px-3 text-sm font-semibold text-center transition-colors focus:outline-none focus-visible:ring-2 disabled:opacity-50 disabled:cursor-not-allowed", e.active ? n[e.color] : t[e.color]])
3004
- }, [j(r.$slots, "default", {}, () => [f(P(e.label), 1)])], 10, Hi));
3007
+ class: x(["whitespace-nowrap rounded-md border px-3 text-sm font-semibold text-center transition-colors focus:outline-none focus-visible:ring-2 disabled:opacity-50 disabled:cursor-not-allowed", e.active ? n[e.color] : t[e.color]])
3008
+ }, [M(r.$slots, "default", {}, () => [f(P(e.label), 1)])], 10, Ki));
3005
3009
  }
3006
- }), Wi = { class: "flex items-center justify-between mb-4" }, Gi = { class: "text-lg font-semibold text-slate-900 dark:text-slate-100" }, Ki = {
3010
+ }), Ji = { class: "flex items-center justify-between mb-4" }, Yi = { class: "text-lg font-semibold text-slate-900 dark:text-slate-100" }, Xi = {
3007
3011
  key: 0,
3008
3012
  class: "text-xs text-slate-500 dark:text-slate-400"
3009
- }, qi = {
3013
+ }, Zi = {
3010
3014
  key: 0,
3011
3015
  class: "inline-flex items-center gap-2 text-xs text-slate-500"
3012
- }, Ji = { class: "grid gap-4 md:grid-cols-[repeat(2,minmax(0,1fr))]" }, Yi = { class: "md:col-span-2" }, Xi = ["for"], Zi = { class: "md:col-span-2" }, Qi = ["for"], $i = { class: "text-[11px] text-slate-500 mt-1" }, ea = { class: "md:col-span-2" }, ta = ["for"], na = { class: "md:col-span-2" }, ra = ["for"], ia = { class: "md:col-span-2" }, aa = "placeholder:text-slate-400 dark:placeholder:text-slate-500 font-mono", oa = /* @__PURE__ */ m({
3016
+ }, Qi = { class: "grid gap-4 md:grid-cols-[repeat(2,minmax(0,1fr))]" }, $i = { class: "md:col-span-2" }, ea = ["for"], ta = { class: "md:col-span-2" }, na = ["for"], ra = { class: "text-[11px] text-slate-500 mt-1" }, ia = { class: "md:col-span-2" }, aa = ["for"], oa = { class: "md:col-span-2" }, sa = ["for"], ca = { class: "md:col-span-2" }, la = "placeholder:text-slate-400 dark:placeholder:text-slate-500 font-mono", ua = /* @__PURE__ */ m({
3013
3017
  __name: "BaseCredentialsForm",
3014
3018
  props: {
3015
3019
  title: {},
@@ -3035,7 +3039,7 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3035
3039
  "load-error"
3036
3040
  ],
3037
3041
  setup(t, { expose: n, emit: r }) {
3038
- let i = t, a = r, u = k(!1), d = k(!1), m = O({
3042
+ let i = t, a = r, u = A(!1), d = A(!1), m = ee({
3039
3043
  keyId: "",
3040
3044
  secretKey: "",
3041
3045
  baseUrl: i.defaults.baseUrl,
@@ -3082,71 +3086,71 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3082
3086
  }
3083
3087
  }
3084
3088
  }
3085
- return w(h), n({ load: h }), (n, r) => (D(), o(Bt, { class: "!p-6" }, {
3086
- default: L(() => [
3087
- l("div", Wi, [l("div", null, [l("h2", Gi, P(t.title), 1), t.subtitle ? (D(), c("p", Ki, P(t.subtitle), 1)) : s("", !0)]), u.value ? (D(), c("span", qi, [p(Vt, { class: "!h-4 !w-4" }), r[4] ||= f(" Saving… ", -1)])) : s("", !0)]),
3088
- l("div", Ji, [
3089
- l("div", Yi, [l("label", {
3089
+ return T(h), n({ load: h }), (n, r) => (O(), o(Wt, { class: "!p-6" }, {
3090
+ default: I(() => [
3091
+ l("div", Ji, [l("div", null, [l("h2", Yi, P(t.title), 1), t.subtitle ? (O(), c("p", Xi, P(t.subtitle), 1)) : s("", !0)]), u.value ? (O(), c("span", Zi, [p(Gt, { class: "!h-4 !w-4" }), r[4] ||= f(" Saving… ", -1)])) : s("", !0)]),
3092
+ l("div", Qi, [
3093
+ l("div", $i, [l("label", {
3090
3094
  for: `${t.idPrefix}-key-id`,
3091
3095
  class: "block text-xs uppercase tracking-wide text-slate-500 mb-1"
3092
- }, P(t.keyLabel), 9, Xi), p(di, {
3096
+ }, P(t.keyLabel), 9, ea), p(hi, {
3093
3097
  id: `${t.idPrefix}-key-id`,
3094
3098
  modelValue: m.keyId,
3095
3099
  "onUpdate:modelValue": r[0] ||= (e) => m.keyId = e,
3096
3100
  type: "text",
3097
3101
  autocomplete: "off",
3098
3102
  placeholder: t.keyPlaceholder,
3099
- class: b(aa)
3103
+ class: x(la)
3100
3104
  }, null, 8, [
3101
3105
  "id",
3102
3106
  "modelValue",
3103
3107
  "placeholder"
3104
3108
  ])]),
3105
- l("div", Zi, [
3109
+ l("div", ta, [
3106
3110
  l("label", {
3107
3111
  for: `${t.idPrefix}-secret`,
3108
3112
  class: "block text-xs uppercase tracking-wide text-slate-500 mb-1"
3109
- }, P(t.secretLabel), 9, Qi),
3110
- p(di, {
3113
+ }, P(t.secretLabel), 9, na),
3114
+ p(hi, {
3111
3115
  id: `${t.idPrefix}-secret`,
3112
3116
  modelValue: m.secretKey,
3113
3117
  "onUpdate:modelValue": r[1] ||= (e) => m.secretKey = e,
3114
3118
  type: "password",
3115
3119
  autocomplete: "new-password",
3116
3120
  placeholder: d.value ? "•••••••• (unchanged — type to replace)" : t.secretPlaceholder,
3117
- class: b(aa)
3121
+ class: x(la)
3118
3122
  }, null, 8, [
3119
3123
  "id",
3120
3124
  "modelValue",
3121
3125
  "placeholder"
3122
3126
  ]),
3123
- l("p", $i, [d.value ? (D(), c(e, { key: 0 }, [f(P(t.secretSetHint), 1)], 64)) : j(n.$slots, "no-secret-hint", {}, () => [f(P(t.permissionsHint), 1)], void 0, 1)])
3127
+ l("p", ra, [d.value ? (O(), c(e, { key: 0 }, [f(P(t.secretSetHint), 1)], 64)) : M(n.$slots, "no-secret-hint", {}, () => [f(P(t.permissionsHint), 1)], void 0, 1)])
3124
3128
  ]),
3125
- l("div", ea, [
3129
+ l("div", ia, [
3126
3130
  l("label", {
3127
3131
  for: `${t.idPrefix}-base-url`,
3128
3132
  class: "block text-xs uppercase tracking-wide text-slate-500 mb-1"
3129
- }, "Base URL (trading)", 8, ta),
3130
- p(di, {
3133
+ }, "Base URL (trading)", 8, aa),
3134
+ p(hi, {
3131
3135
  id: `${t.idPrefix}-base-url`,
3132
3136
  modelValue: m.baseUrl,
3133
3137
  "onUpdate:modelValue": r[2] ||= (e) => m.baseUrl = e,
3134
3138
  type: "text",
3135
- class: b(aa)
3139
+ class: x(la)
3136
3140
  }, null, 8, ["id", "modelValue"]),
3137
- j(n.$slots, "base-url-extra", { form: m })
3141
+ M(n.$slots, "base-url-extra", { form: m })
3138
3142
  ]),
3139
- l("div", na, [l("label", {
3143
+ l("div", oa, [l("label", {
3140
3144
  for: `${t.idPrefix}-data-url`,
3141
3145
  class: "block text-xs uppercase tracking-wide text-slate-500 mb-1"
3142
- }, "Data URL (market data)", 8, ra), p(di, {
3146
+ }, "Data URL (market data)", 8, sa), p(hi, {
3143
3147
  id: `${t.idPrefix}-data-url`,
3144
3148
  modelValue: m.dataUrl,
3145
3149
  "onUpdate:modelValue": r[3] ||= (e) => m.dataUrl = e,
3146
3150
  type: "text",
3147
- class: b(aa)
3151
+ class: x(la)
3148
3152
  }, null, 8, ["id", "modelValue"])]),
3149
- l("div", ia, [p(q, {
3153
+ l("div", ca, [p(q, {
3150
3154
  color: F(G).GREEN,
3151
3155
  description: t.saveLabel,
3152
3156
  isDisable: u.value,
@@ -3159,21 +3163,21 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3159
3163
  "isLoading"
3160
3164
  ])])
3161
3165
  ]),
3162
- j(n.$slots, "footer")
3166
+ M(n.$slots, "footer")
3163
3167
  ]),
3164
3168
  _: 3
3165
3169
  }));
3166
3170
  }
3167
- }), sa = {
3171
+ }), da = {
3168
3172
  key: 0,
3169
3173
  class: "text-sm text-slate-500 dark:text-slate-400"
3170
- }, ca = { class: "mb-3 flex flex-wrap items-center gap-2" }, la = { class: "relative min-w-[200px] flex-1" }, ua = ["placeholder"], da = {
3174
+ }, fa = { class: "mb-3 flex flex-wrap items-center gap-2" }, pa = { class: "relative min-w-[200px] flex-1" }, ma = ["placeholder"], ha = {
3171
3175
  key: 0,
3172
3176
  class: "text-sm text-slate-500 dark:text-slate-400"
3173
- }, fa = {
3177
+ }, ga = {
3174
3178
  key: 1,
3175
3179
  class: "flex flex-wrap gap-2"
3176
- }, pa = ["title", "onClick"], ma = "h-9 rounded-md border border-slate-300 dark:border-slate-600 bg-slate-50 dark:bg-slate-900 text-slate-900 dark:text-slate-100 text-sm focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", ha = "\0all", ga = /* @__PURE__ */ m({
3180
+ }, _a = ["title", "onClick"], va = "h-9 rounded-md border border-slate-300 dark:border-slate-600 bg-slate-50 dark:bg-slate-900 text-slate-900 dark:text-slate-100 text-sm focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", ya = "\0all", ba = /* @__PURE__ */ m({
3177
3181
  __name: "BasePillPickerModal",
3178
3182
  props: {
3179
3183
  title: {},
@@ -3195,11 +3199,11 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3195
3199
  },
3196
3200
  emits: ["pick", "close"],
3197
3201
  setup(t, { emit: n }) {
3198
- let r = t, i = n, u = a(() => r.icon ?? Ee), d = k(""), f = k(ha), m = a(() => r.groups && r.groups.length > 0 ? [{
3199
- value: ha,
3202
+ let r = t, i = n, u = a(() => r.icon ?? Ae), d = A(""), f = A(ya), m = a(() => r.groups && r.groups.length > 0 ? [{
3203
+ value: ya,
3200
3204
  label: r.allLabel
3201
- }, ...r.groups] : []), h = a(() => r.items.filter((e) => (f.value === ha || e.group === f.value) && e.label.toLowerCase().includes(d.value.trim().toLowerCase())));
3202
- return (n, r) => (D(), o(Sn, {
3205
+ }, ...r.groups] : []), h = a(() => r.items.filter((e) => (f.value === ya || e.group === f.value) && e.label.toLowerCase().includes(d.value.trim().toLowerCase())));
3206
+ return (n, r) => (O(), o(En, {
3203
3207
  title: t.title,
3204
3208
  icon: u.value,
3205
3209
  subtitle: t.subtitle,
@@ -3207,32 +3211,32 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3207
3211
  "max-width-class": t.maxWidthClass,
3208
3212
  onCancel: r[4] ||= (e) => i("close")
3209
3213
  }, {
3210
- footer: L(() => [p(Tr, {
3214
+ footer: I(() => [p(kr, {
3211
3215
  variant: "ghost",
3212
3216
  label: t.closeText,
3213
3217
  onClick: r[3] ||= (e) => i("close")
3214
3218
  }, null, 8, ["label"])]),
3215
- default: L(() => [t.items.length === 0 ? (D(), c("p", sa, P(t.emptyMessage), 1)) : (D(), c(e, { key: 1 }, [l("div", ca, [l("div", la, [
3216
- p(F(Ee), { class: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-400" }),
3217
- R(l("input", {
3219
+ default: I(() => [t.items.length === 0 ? (O(), c("p", da, P(t.emptyMessage), 1)) : (O(), c(e, { key: 1 }, [l("div", fa, [l("div", pa, [
3220
+ p(F(Ae), { class: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-400" }),
3221
+ L(l("input", {
3218
3222
  "onUpdate:modelValue": r[0] ||= (e) => d.value = e,
3219
3223
  type: "text",
3220
3224
  placeholder: t.searchPlaceholder,
3221
3225
  autocomplete: "off",
3222
- class: b([
3223
- ma,
3226
+ class: x([
3227
+ va,
3224
3228
  "w-full pl-9 pr-8 placeholder:text-slate-400 dark:placeholder:text-slate-500",
3225
3229
  t.mono ? "font-mono" : ""
3226
3230
  ])
3227
- }, null, 10, ua), [[ae, d.value]]),
3228
- d.value ? (D(), c("button", {
3231
+ }, null, 10, ma), [[se, d.value]]),
3232
+ d.value ? (O(), c("button", {
3229
3233
  key: 0,
3230
3234
  type: "button",
3231
3235
  "aria-label": "Clear the filter",
3232
3236
  class: "absolute right-2 top-1/2 -translate-y-1/2 text-slate-400 hover:text-slate-600 dark:hover:text-slate-200",
3233
3237
  onClick: r[1] ||= (e) => d.value = ""
3234
3238
  }, " ✕ ")) : s("", !0)
3235
- ]), m.value.length > 0 ? (D(), o(Si, {
3239
+ ]), m.value.length > 0 ? (O(), o(Ei, {
3236
3240
  key: 0,
3237
3241
  modelValue: f.value,
3238
3242
  "onUpdate:modelValue": r[2] ||= (e) => f.value = e,
@@ -3242,13 +3246,13 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3242
3246
  "modelValue",
3243
3247
  "options",
3244
3248
  "aria-label"
3245
- ])) : s("", !0)]), h.value.length === 0 ? (D(), c("p", da, P(t.noMatchMessage), 1)) : (D(), c("div", fa, [(D(!0), c(e, null, A(h.value, (e) => (D(), c("button", {
3249
+ ])) : s("", !0)]), h.value.length === 0 ? (O(), c("p", ha, P(t.noMatchMessage), 1)) : (O(), c("div", ga, [(O(!0), c(e, null, j(h.value, (e) => (O(), c("button", {
3246
3250
  key: e.id,
3247
3251
  type: "button",
3248
3252
  title: e.title,
3249
- class: b(["h-8 shrink-0 rounded-md border border-slate-300 dark:border-slate-600 bg-slate-50 dark:bg-slate-900 px-3 text-sm text-slate-700 dark:text-slate-200 transition-colors hover:border-emerald-500 hover:bg-emerald-50 hover:text-emerald-700 dark:hover:bg-emerald-500/10 dark:hover:text-emerald-400 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", t.mono ? "font-mono" : ""]),
3253
+ class: x(["h-8 shrink-0 rounded-md border border-slate-300 dark:border-slate-600 bg-slate-50 dark:bg-slate-900 px-3 text-sm text-slate-700 dark:text-slate-200 transition-colors hover:border-emerald-500 hover:bg-emerald-50 hover:text-emerald-700 dark:hover:bg-emerald-500/10 dark:hover:text-emerald-400 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", t.mono ? "font-mono" : ""]),
3250
3254
  onClick: (t) => i("pick", e)
3251
- }, P(e.label), 11, pa))), 128))]))], 64))]),
3255
+ }, P(e.label), 11, _a))), 128))]))], 64))]),
3252
3256
  _: 1
3253
3257
  }, 8, [
3254
3258
  "title",
@@ -3257,7 +3261,7 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3257
3261
  "max-width-class"
3258
3262
  ]));
3259
3263
  }
3260
- }), _a = ["aria-label"], va = ["title"], ya = { class: "text-[10px] tabular-nums text-slate-400 dark:text-slate-500" }, ba = ["title"], xa = /* @__PURE__ */ m({
3264
+ }), xa = ["aria-label"], Sa = ["title"], Ca = { class: "text-[10px] tabular-nums text-slate-400 dark:text-slate-500" }, wa = ["title"], Ta = /* @__PURE__ */ m({
3261
3265
  __name: "BaseBarDistribution",
3262
3266
  props: {
3263
3267
  bars: {},
@@ -3269,35 +3273,35 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3269
3273
  },
3270
3274
  setup(t) {
3271
3275
  let n = t, r = a(() => Math.max(1, ...n.bars.map((e) => e.count))), i = (e) => Math.max(3, Math.round(e.count / r.value * n.maxBarHeight)), o = (e) => `${n.titlePrefix ? `${n.titlePrefix} ` : ""}${e.label}: ${e.count} ${n.countNoun}${e.count === 1 ? "" : "s"}`;
3272
- return (n, r) => (D(), c("div", {
3276
+ return (n, r) => (O(), c("div", {
3273
3277
  class: "flex items-end gap-1.5 overflow-x-auto pb-1",
3274
3278
  role: "img",
3275
3279
  "aria-label": t.ariaLabel
3276
- }, [(D(!0), c(e, null, A(t.bars, (e) => (D(), c("div", {
3280
+ }, [(O(!0), c(e, null, j(t.bars, (e) => (O(), c("div", {
3277
3281
  key: e.label,
3278
3282
  class: "flex min-w-7 flex-1 flex-col items-center gap-0.5",
3279
3283
  title: o(e)
3280
3284
  }, [
3281
- l("span", ya, P(e.count), 1),
3285
+ l("span", Ca, P(e.count), 1),
3282
3286
  l("div", {
3283
- class: b(["w-full max-w-8 rounded-t", t.barClass]),
3284
- style: S({ height: `${i(e)}px` })
3287
+ class: x(["w-full max-w-8 rounded-t", t.barClass]),
3288
+ style: C({ height: `${i(e)}px` })
3285
3289
  }, null, 6),
3286
3290
  l("span", {
3287
3291
  class: "max-w-full truncate font-mono text-[10px] text-slate-500 dark:text-slate-400",
3288
3292
  title: e.label
3289
- }, P(e.label), 9, ba)
3290
- ], 8, va))), 128))], 8, _a));
3293
+ }, P(e.label), 9, wa)
3294
+ ], 8, Sa))), 128))], 8, xa));
3291
3295
  }
3292
- }), Sa = { class: "flex items-center gap-2 border-b border-slate-200 dark:border-slate-700 pb-2" }, Ca = ["checked", "aria-label"], wa = { class: "text-sm font-medium text-slate-700 dark:text-slate-200" }, Ta = { class: "flex items-center gap-2 pb-1.5" }, Ea = [
3296
+ }), Ea = { class: "flex items-center gap-2 border-b border-slate-200 dark:border-slate-700 pb-2" }, Da = ["checked", "aria-label"], Oa = { class: "text-sm font-medium text-slate-700 dark:text-slate-200" }, ka = { class: "flex items-center gap-2 pb-1.5" }, Aa = [
3293
3297
  "checked",
3294
3298
  "aria-label",
3295
3299
  "onChange"
3296
- ], Da = { class: "text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400" }, Oa = { class: "grid grid-cols-[repeat(2,minmax(0,1fr))] sm:grid-cols-[repeat(3,minmax(0,1fr))] gap-x-3 gap-y-1.5" }, ka = [
3300
+ ], ja = { class: "text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400" }, Ma = { class: "grid grid-cols-[repeat(2,minmax(0,1fr))] sm:grid-cols-[repeat(3,minmax(0,1fr))] gap-x-3 gap-y-1.5" }, Na = [
3297
3301
  "checked",
3298
3302
  "aria-label",
3299
3303
  "onChange"
3300
- ], Aa = /* @__PURE__ */ m({
3304
+ ], Pa = /* @__PURE__ */ m({
3301
3305
  __name: "BaseGroupedChecklist",
3302
3306
  props: {
3303
3307
  groups: {},
@@ -3335,19 +3339,19 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3335
3339
  let t = new Set(u.value);
3336
3340
  t.has(e) ? t.delete(e) : t.add(e), p(t);
3337
3341
  }
3338
- return (n, r) => (D(), c("div", null, [l("label", Sa, [l("input", {
3342
+ return (n, r) => (O(), c("div", null, [l("label", Ea, [l("input", {
3339
3343
  type: "checkbox",
3340
3344
  class: "h-4 w-4",
3341
3345
  checked: d.value,
3342
3346
  "aria-label": t.allAriaLabel,
3343
3347
  onChange: m
3344
- }, null, 40, Ca), l("span", wa, P(t.allLabel) + " (" + P(s.value.length) + ") ", 1)]), l("div", { class: b(["overflow-y-auto space-y-3 mt-3", t.maxHeightClass]) }, [(D(!0), c(e, null, A(o.value, (n) => (D(), c("div", { key: n.key }, [l("label", Ta, [l("input", {
3348
+ }, null, 40, Da), l("span", Oa, P(t.allLabel) + " (" + P(s.value.length) + ") ", 1)]), l("div", { class: x(["overflow-y-auto space-y-3 mt-3", t.maxHeightClass]) }, [(O(!0), c(e, null, j(o.value, (n) => (O(), c("div", { key: n.key }, [l("label", ka, [l("input", {
3345
3349
  type: "checkbox",
3346
3350
  class: "h-4 w-4",
3347
3351
  checked: f(n),
3348
3352
  "aria-label": `${t.allLabel} ${n.label}`,
3349
3353
  onChange: (e) => h(n)
3350
- }, null, 40, Ea), l("span", Da, P(n.label) + " (" + P(n.items.length) + ") ", 1)]), l("div", Oa, [(D(!0), c(e, null, A(n.items, (e) => (D(), c("label", {
3354
+ }, null, 40, Aa), l("span", ja, P(n.label) + " (" + P(n.items.length) + ") ", 1)]), l("div", Ma, [(O(!0), c(e, null, j(n.items, (e) => (O(), c("label", {
3351
3355
  key: e,
3352
3356
  class: "flex items-center gap-2"
3353
3357
  }, [l("input", {
@@ -3356,12 +3360,12 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3356
3360
  checked: u.value.has(e),
3357
3361
  "aria-label": t.itemAriaLabel ? t.itemAriaLabel(e) : e,
3358
3362
  onChange: (t) => g(e)
3359
- }, null, 40, ka), l("span", { class: b(["text-sm text-slate-700 dark:text-slate-200", { "font-mono": t.mono }]) }, P(e), 3)]))), 128))])]))), 128))], 2)]));
3363
+ }, null, 40, Na), l("span", { class: x(["text-sm text-slate-700 dark:text-slate-200", { "font-mono": t.mono }]) }, P(e), 3)]))), 128))])]))), 128))], 2)]));
3360
3364
  }
3361
- }), ja = { class: "inline-flex items-center gap-1 font-mono text-[11px]" }, Ma = {
3365
+ }), Fa = { class: "inline-flex items-center gap-1 font-mono text-[11px]" }, Ia = {
3362
3366
  key: 0,
3363
3367
  class: "text-slate-500 dark:text-slate-400 uppercase tracking-wide"
3364
- }, Na = ["title"], Pa = ["title", "aria-label"], Fa = /* @__PURE__ */ m({
3368
+ }, La = ["title"], Ra = ["title", "aria-label"], za = /* @__PURE__ */ m({
3365
3369
  __name: "BaseIdChip",
3366
3370
  props: {
3367
3371
  value: {},
@@ -3373,31 +3377,31 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3373
3377
  emits: ["action"],
3374
3378
  setup(e, { emit: t }) {
3375
3379
  let n = t;
3376
- return (t, r) => (D(), c("div", ja, [
3377
- e.label ? (D(), c("span", Ma, P(e.label), 1)) : s("", !0),
3380
+ return (t, r) => (O(), c("div", Fa, [
3381
+ e.label ? (O(), c("span", Ia, P(e.label), 1)) : s("", !0),
3378
3382
  l("code", {
3379
- class: b(["truncate rounded bg-slate-100 px-1 text-slate-600 dark:bg-slate-800 dark:text-slate-300", e.maxWidthClass]),
3383
+ class: x(["truncate rounded bg-slate-100 px-1 text-slate-600 dark:bg-slate-800 dark:text-slate-300", e.maxWidthClass]),
3380
3384
  title: e.value
3381
- }, P(e.value), 11, Na),
3382
- p(Ar, {
3385
+ }, P(e.value), 11, La),
3386
+ p(Pr, {
3383
3387
  text: e.value,
3384
3388
  label: e.copyLabel ?? `${e.label} ${e.value}`.trim(),
3385
3389
  "icon-class": "w-3.5 h-3.5"
3386
3390
  }, null, 8, ["text", "label"]),
3387
- e.actionLabel ? (D(), c("button", {
3391
+ e.actionLabel ? (O(), c("button", {
3388
3392
  key: 1,
3389
3393
  type: "button",
3390
3394
  title: e.actionLabel,
3391
3395
  "aria-label": e.actionLabel,
3392
3396
  class: "rounded px-0.5 text-slate-400 hover:bg-slate-100 hover:text-emerald-600 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 dark:hover:bg-slate-800 dark:hover:text-emerald-400",
3393
3397
  onClick: r[0] ||= (t) => n("action", e.value)
3394
- }, [p(F(Ee), {
3398
+ }, [p(F(Ae), {
3395
3399
  class: "h-3.5 w-3.5",
3396
3400
  "aria-hidden": "true"
3397
- })], 8, Pa)) : s("", !0)
3401
+ })], 8, Ra)) : s("", !0)
3398
3402
  ]));
3399
3403
  }
3400
- }), Ia = /* @__PURE__ */ m({
3404
+ }), Ba = /* @__PURE__ */ m({
3401
3405
  __name: "BaseDateTimePicker",
3402
3406
  props: {
3403
3407
  modelValue: { default: null },
@@ -3428,7 +3432,7 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3428
3432
  let e = n.is24 ? "HH:mm" : "hh:mm a";
3429
3433
  return n.mode === "date" ? { input: "dd/MM/yyyy" } : n.mode === "time" ? { input: e } : { input: `dd/MM/yyyy ${e}` };
3430
3434
  });
3431
- return (t, n) => (D(), o(F(Fe), {
3435
+ return (t, n) => (O(), o(F(Be), {
3432
3436
  "model-value": e.modelValue,
3433
3437
  dark: F(i),
3434
3438
  "time-picker": e.mode === "time",
@@ -3437,9 +3441,9 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3437
3441
  "auto-apply": e.autoApply,
3438
3442
  teleport: e.teleport,
3439
3443
  "onUpdate:modelValue": n[0] ||= (e) => r("update:modelValue", e)
3440
- }, u({ _: 2 }, [A(t.$slots, (e, n) => ({
3444
+ }, u({ _: 2 }, [j(t.$slots, (e, n) => ({
3441
3445
  name: n,
3442
- fn: L((e) => [j(t.$slots, n, x(_(e ?? {})))])
3446
+ fn: I((e) => [M(t.$slots, n, S(_(e ?? {})))])
3443
3447
  }))]), 1032, [
3444
3448
  "model-value",
3445
3449
  "dark",
@@ -3450,28 +3454,28 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3450
3454
  "teleport"
3451
3455
  ]));
3452
3456
  }
3453
- }), La = { class: "flex min-w-0 flex-1 flex-wrap items-center gap-1" }, Ra = { class: "truncate" }, za = [
3457
+ }), Va = { class: "flex min-w-0 flex-1 flex-wrap items-center gap-1" }, Ha = { class: "truncate" }, Ua = [
3454
3458
  "aria-label",
3455
3459
  "disabled",
3456
3460
  "onClick"
3457
- ], Ba = [
3461
+ ], Wa = [
3458
3462
  "disabled",
3459
3463
  "readonly",
3460
3464
  "aria-label",
3461
3465
  "aria-expanded",
3462
3466
  "aria-activedescendant",
3463
3467
  "placeholder"
3464
- ], Va = ["aria-multiselectable"], Ha = [
3468
+ ], Ga = ["aria-multiselectable"], Ka = [
3465
3469
  "id",
3466
3470
  "aria-selected",
3467
3471
  "aria-disabled",
3468
3472
  "title",
3469
3473
  "onMouseenter",
3470
3474
  "onClick"
3471
- ], Ua = { class: "truncate" }, Wa = {
3475
+ ], qa = { class: "truncate" }, Ja = {
3472
3476
  key: 0,
3473
3477
  class: "px-3 py-2 text-sm text-slate-500 dark:text-slate-400"
3474
- }, Ga = /* @__PURE__ */ m({
3478
+ }, Ya = /* @__PURE__ */ m({
3475
3479
  __name: "BaseSearchSelect",
3476
3480
  props: {
3477
3481
  options: {},
@@ -3503,36 +3507,36 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3503
3507
  },
3504
3508
  emits: ["update:modelValue"],
3505
3509
  setup(t, { emit: n }) {
3506
- let r = t, i = n, u = k(null), d = k(null), f = k(!1), m = k(""), h = k(-1), g = `search-select-${te()}`, _ = a(() => {
3510
+ let r = t, i = n, u = A(null), d = A(null), f = A(!1), m = A(""), h = A(-1), g = `search-select-${ne()}`, _ = a(() => {
3507
3511
  let e = r.modelValue;
3508
3512
  return Array.isArray(e) ? [...e] : e == null || e === "" ? [] : [e];
3509
- }), v = a(() => _.value.map((e) => r.options.find((t) => t.value === e)).filter((e) => !!e)), x = a(() => _.value.length > 0), S = a(() => !r.multiple && v.value.length > 0), T = a(() => S.value ? v.value[0].label : r.multiple && x.value ? "" : r.placeholder), E = a(() => {
3513
+ }), v = a(() => _.value.map((e) => r.options.find((t) => t.value === e)).filter((e) => !!e)), y = a(() => _.value.length > 0), S = a(() => !r.multiple && v.value.length > 0), C = a(() => S.value ? v.value[0].label : r.multiple && y.value ? "" : r.placeholder), E = a(() => {
3510
3514
  let e = m.value.trim().toLowerCase();
3511
3515
  return e ? r.options.filter((t) => t.label.toLowerCase().includes(e)) : [...r.options];
3512
3516
  });
3513
- I(E, (e) => {
3517
+ le(E, (e) => {
3514
3518
  h.value = e.findIndex((e) => !e.disabled);
3515
3519
  });
3516
- function O(e) {
3520
+ function D(e) {
3517
3521
  return _.value.includes(e.value);
3518
3522
  }
3519
3523
  function ee(e, t) {
3520
- return e.disabled ? "cursor-not-allowed text-slate-400 dark:text-slate-600" : O(e) ? t === h.value ? "bg-emerald-600 text-white" : "bg-emerald-500 text-white" : t === h.value ? "bg-slate-100 text-slate-900 dark:bg-slate-800 dark:text-slate-100" : "text-slate-700 dark:text-slate-200";
3524
+ return e.disabled ? "cursor-not-allowed text-slate-400 dark:text-slate-600" : D(e) ? t === h.value ? "bg-emerald-600 text-white" : "bg-emerald-500 text-white" : t === h.value ? "bg-slate-100 text-slate-900 dark:bg-slate-800 dark:text-slate-100" : "text-slate-700 dark:text-slate-200";
3521
3525
  }
3522
- function j() {
3526
+ function k() {
3523
3527
  r.disabled || f.value || (f.value = !0, h.value = E.value.findIndex((e) => !e.disabled));
3524
3528
  }
3525
3529
  function M() {
3526
3530
  f.value = !1, m.value = "";
3527
3531
  }
3528
- function N(e) {
3529
- r.disabled || (e.target !== d.value && e.preventDefault(), f.value && e.target !== d.value ? M() : (d.value?.focus(), j()));
3532
+ function te(e) {
3533
+ r.disabled || (e.target !== d.value && e.preventDefault(), f.value && e.target !== d.value ? M() : (d.value?.focus(), k()));
3530
3534
  }
3531
- function ne(e) {
3535
+ function N(e) {
3532
3536
  if (!e.disabled) {
3533
3537
  if (r.multiple) {
3534
- let t = O(e) ? _.value.filter((t) => t !== e.value) : [..._.value, e.value];
3535
- i("update:modelValue", t), m.value = "", y(() => d.value?.focus());
3538
+ let t = D(e) ? _.value.filter((t) => t !== e.value) : [..._.value, e.value];
3539
+ i("update:modelValue", t), m.value = "", b(() => d.value?.focus());
3536
3540
  } else i("update:modelValue", e.value), M(), d.value?.blur();
3537
3541
  }
3538
3542
  }
@@ -3542,23 +3546,23 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3542
3546
  function ie() {
3543
3547
  i("update:modelValue", r.multiple ? [] : null), m.value = "";
3544
3548
  }
3545
- function L(e) {
3549
+ function ae(e) {
3546
3550
  let t = E.value;
3547
3551
  if (t.length === 0) return;
3548
3552
  let n = h.value;
3549
3553
  for (let r = 0; r < t.length && (n = (n + e + t.length) % t.length, t[n].disabled); r++);
3550
- h.value = n, y(() => document.getElementById(`${g}-${n}`)?.scrollIntoView?.({ block: "nearest" }));
3554
+ h.value = n, b(() => document.getElementById(`${g}-${n}`)?.scrollIntoView?.({ block: "nearest" }));
3551
3555
  }
3552
- function se(e) {
3556
+ function oe(e) {
3553
3557
  switch (e.key) {
3554
3558
  case "ArrowDown":
3555
- e.preventDefault(), f.value ? L(1) : j();
3559
+ e.preventDefault(), f.value ? ae(1) : k();
3556
3560
  break;
3557
3561
  case "ArrowUp":
3558
- e.preventDefault(), f.value ? L(-1) : j();
3562
+ e.preventDefault(), f.value ? ae(-1) : k();
3559
3563
  break;
3560
3564
  case "Enter":
3561
- f.value && h.value >= 0 && (e.preventDefault(), ne(E.value[h.value]));
3565
+ f.value && h.value >= 0 && (e.preventDefault(), N(E.value[h.value]));
3562
3566
  break;
3563
3567
  case "Escape":
3564
3568
  f.value && (e.preventDefault(), M());
@@ -3569,31 +3573,31 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3569
3573
  case "Backspace": r.multiple && m.value === "" && v.value.length && re(v.value[v.value.length - 1]);
3570
3574
  }
3571
3575
  }
3572
- function ce(e) {
3576
+ function I(e) {
3573
3577
  f.value && u.value && !u.value.contains(e.target) && M();
3574
3578
  }
3575
- return w(() => document.addEventListener("mousedown", ce)), C(() => document.removeEventListener("mousedown", ce)), (n, r) => (D(), c("div", {
3579
+ return T(() => document.addEventListener("mousedown", I)), w(() => document.removeEventListener("mousedown", I)), (n, r) => (O(), c("div", {
3576
3580
  ref_key: "rootEl",
3577
3581
  ref: u,
3578
- class: b(t.block ? "relative w-full" : "relative inline-block min-w-48")
3582
+ class: x(t.block ? "relative w-full" : "relative inline-block min-w-48")
3579
3583
  }, [l("div", {
3580
- class: b(["flex min-h-[38px] items-center gap-1.5 rounded-lg border bg-white px-3 py-1.5 text-sm transition-colors dark:bg-slate-900", [f.value ? "border-emerald-500 ring-2 ring-emerald-500/30" : "border-slate-300 hover:border-slate-400 dark:border-slate-600 dark:hover:border-slate-500", t.disabled ? "cursor-not-allowed opacity-60" : "cursor-text"]]),
3581
- onMousedown: N
3584
+ class: x(["flex min-h-[38px] items-center gap-1.5 rounded-lg border bg-white px-3 py-1.5 text-sm transition-colors dark:bg-slate-900", [f.value ? "border-emerald-500 ring-2 ring-emerald-500/30" : "border-slate-300 hover:border-slate-400 dark:border-slate-600 dark:hover:border-slate-500", t.disabled ? "cursor-not-allowed opacity-60" : "cursor-text"]]),
3585
+ onMousedown: te
3582
3586
  }, [
3583
- l("div", La, [(D(!0), c(e, null, A(v.value, (e) => R((D(), c("span", {
3587
+ l("div", Va, [(O(!0), c(e, null, j(v.value, (e) => L((O(), c("span", {
3584
3588
  key: String(e.value),
3585
3589
  class: "inline-flex max-w-full items-center gap-1 rounded-md bg-emerald-50 py-0.5 pl-2 pr-1 text-xs font-medium text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-300"
3586
- }, [l("span", Ra, P(e.label), 1), l("button", {
3590
+ }, [l("span", Ha, P(e.label), 1), l("button", {
3587
3591
  type: "button",
3588
3592
  class: "rounded p-0.5 hover:bg-emerald-100 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 dark:hover:bg-emerald-500/25",
3589
3593
  "aria-label": `Remove ${e.label}`,
3590
3594
  disabled: t.disabled,
3591
- onMousedown: r[0] ||= z(() => {}, ["stop", "prevent"]),
3592
- onClick: z((t) => re(e), ["stop"])
3593
- }, [p(F(Ae), {
3595
+ onMousedown: r[0] ||= R(() => {}, ["stop", "prevent"]),
3596
+ onClick: R((t) => re(e), ["stop"])
3597
+ }, [p(F(z), {
3594
3598
  class: "h-3 w-3",
3595
3599
  "aria-hidden": "true"
3596
- })], 40, za)])), [[oe, t.multiple]])), 128)), R(l("input", {
3600
+ })], 40, Ua)])), [[ce, t.multiple]])), 128)), L(l("input", {
3597
3601
  ref_key: "inputEl",
3598
3602
  ref: d,
3599
3603
  "onUpdate:modelValue": r[1] ||= (e) => m.value = e,
@@ -3607,66 +3611,66 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3607
3611
  "aria-expanded": f.value,
3608
3612
  "aria-controls": g,
3609
3613
  "aria-activedescendant": f.value && h.value >= 0 ? `${g}-${h.value}` : void 0,
3610
- placeholder: T.value,
3611
- class: b(["min-w-16 flex-1 border-0 bg-transparent p-0 py-0.5 text-sm text-slate-900 outline-none focus:ring-0 dark:text-slate-100 disabled:cursor-not-allowed", S.value ? "placeholder:text-slate-900 dark:placeholder:text-slate-100" : "placeholder:text-slate-400 dark:placeholder:text-slate-500"]),
3612
- onFocus: j,
3613
- onInput: j,
3614
- onKeydown: se
3615
- }, null, 42, Ba), [[ae, m.value]])]),
3616
- t.clearable && x.value && !t.disabled ? (D(), c("button", {
3614
+ placeholder: C.value,
3615
+ class: x(["min-w-16 flex-1 border-0 bg-transparent p-0 py-0.5 text-sm text-slate-900 outline-none focus:ring-0 dark:text-slate-100 disabled:cursor-not-allowed", S.value ? "placeholder:text-slate-900 dark:placeholder:text-slate-100" : "placeholder:text-slate-400 dark:placeholder:text-slate-500"]),
3616
+ onFocus: k,
3617
+ onInput: k,
3618
+ onKeydown: oe
3619
+ }, null, 42, Wa), [[se, m.value]])]),
3620
+ t.clearable && y.value && !t.disabled ? (O(), c("button", {
3617
3621
  key: 0,
3618
3622
  type: "button",
3619
3623
  class: "shrink-0 rounded p-0.5 text-slate-400 hover:text-slate-600 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 dark:hover:text-slate-200",
3620
3624
  "aria-label": "Clear selection",
3621
- onMousedown: r[2] ||= z(() => {}, ["stop", "prevent"]),
3622
- onClick: z(ie, ["stop"])
3623
- }, [p(F(Ae), {
3625
+ onMousedown: r[2] ||= R(() => {}, ["stop", "prevent"]),
3626
+ onClick: R(ie, ["stop"])
3627
+ }, [p(F(z), {
3624
3628
  class: "h-4 w-4",
3625
3629
  "aria-hidden": "true"
3626
3630
  })], 32)) : s("", !0),
3627
- p(F(_e), {
3628
- class: b(["h-4 w-4 shrink-0 text-slate-500 transition-transform dark:text-slate-400", f.value ? "rotate-180" : ""]),
3631
+ p(F(be), {
3632
+ class: x(["h-4 w-4 shrink-0 text-slate-500 transition-transform dark:text-slate-400", f.value ? "rotate-180" : ""]),
3629
3633
  "aria-hidden": "true"
3630
3634
  }, null, 8, ["class"])
3631
- ], 34), f.value ? (D(), c("ul", {
3635
+ ], 34), f.value ? (O(), c("ul", {
3632
3636
  key: 0,
3633
3637
  id: g,
3634
3638
  role: "listbox",
3635
3639
  "aria-multiselectable": t.multiple || void 0,
3636
3640
  class: "absolute z-30 mt-1 max-h-60 w-full overflow-auto rounded-lg border border-slate-200 bg-white py-1 shadow-lg dark:border-slate-700 dark:bg-slate-900"
3637
- }, [(D(!0), c(e, null, A(E.value, (e, t) => (D(), c("li", {
3641
+ }, [(O(!0), c(e, null, j(E.value, (e, t) => (O(), c("li", {
3638
3642
  id: `${g}-${t}`,
3639
3643
  key: String(e.value),
3640
3644
  role: "option",
3641
- "aria-selected": O(e),
3645
+ "aria-selected": D(e),
3642
3646
  "aria-disabled": e.disabled || void 0,
3643
3647
  title: e.title,
3644
- class: b(["flex cursor-pointer items-center justify-between gap-2 px-3 py-2 text-left text-sm", ee(e, t)]),
3645
- onMousedown: r[3] ||= z(() => {}, ["prevent"]),
3648
+ class: x(["flex cursor-pointer items-center justify-between gap-2 px-3 py-2 text-left text-sm", ee(e, t)]),
3649
+ onMousedown: r[3] ||= R(() => {}, ["prevent"]),
3646
3650
  onMouseenter: (e) => h.value = t,
3647
- onClick: (t) => ne(e)
3648
- }, [l("span", Ua, P(e.label), 1), O(e) ? (D(), o(F(me), {
3651
+ onClick: (t) => N(e)
3652
+ }, [l("span", qa, P(e.label), 1), D(e) ? (O(), o(F(_e), {
3649
3653
  key: 0,
3650
3654
  class: "h-4 w-4 shrink-0",
3651
3655
  "aria-hidden": "true"
3652
- })) : s("", !0)], 42, Ha))), 128)), E.value.length === 0 ? (D(), c("li", Wa, P(t.options.length === 0 ? t.emptyText : t.noResultsText), 1)) : s("", !0)], 8, Va)) : s("", !0)], 2));
3656
+ })) : s("", !0)], 42, Ka))), 128)), E.value.length === 0 ? (O(), c("li", Ja, P(t.options.length === 0 ? t.emptyText : t.noResultsText), 1)) : s("", !0)], 8, Ga)) : s("", !0)], 2));
3653
3657
  }
3654
- }), Ka = { class: "rounded-xl border border-slate-200 bg-white text-left shadow-sm dark:border-slate-700 dark:bg-slate-900" }, qa = {
3658
+ }), Xa = { class: "rounded-xl border border-slate-200 bg-white text-left shadow-sm dark:border-slate-700 dark:bg-slate-900" }, Za = {
3655
3659
  key: 0,
3656
3660
  class: "flex flex-wrap items-center justify-between gap-3 border-b border-slate-200 px-5 py-3 dark:border-slate-700"
3657
- }, Ja = { class: "min-w-0" }, Ya = {
3661
+ }, Qa = { class: "min-w-0" }, $a = {
3658
3662
  key: 0,
3659
3663
  class: "text-base font-semibold text-slate-900 dark:text-slate-100"
3660
- }, Xa = {
3664
+ }, eo = {
3661
3665
  key: 1,
3662
3666
  class: "text-sm text-slate-500 dark:text-slate-400"
3663
- }, Za = {
3667
+ }, to = {
3664
3668
  key: 0,
3665
3669
  class: "flex items-center gap-2"
3666
- }, Qa = {
3670
+ }, no = {
3667
3671
  key: 1,
3668
3672
  class: "flex flex-wrap items-center justify-end gap-2 border-t border-slate-200 px-5 py-3 dark:border-slate-700"
3669
- }, $a = /* @__PURE__ */ m({
3673
+ }, ro = /* @__PURE__ */ m({
3670
3674
  __name: "BaseCard",
3671
3675
  props: {
3672
3676
  title: { default: "" },
@@ -3674,24 +3678,24 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3674
3678
  padding: { default: "md" }
3675
3679
  },
3676
3680
  setup(e) {
3677
- return (t, n) => (D(), c("section", Ka, [
3678
- e.title || e.subtitle || t.$slots.actions ? (D(), c("header", qa, [l("div", Ja, [e.title ? (D(), c("h2", Ya, P(e.title), 1)) : s("", !0), e.subtitle ? (D(), c("p", Xa, P(e.subtitle), 1)) : s("", !0)]), t.$slots.actions ? (D(), c("div", Za, [j(t.$slots, "actions")])) : s("", !0)])) : s("", !0),
3679
- l("div", { class: b(e.padding === "sm" ? "p-4" : e.padding === "none" ? "" : "p-5") }, [j(t.$slots, "default")], 2),
3680
- t.$slots.footer ? (D(), c("footer", Qa, [j(t.$slots, "footer")])) : s("", !0)
3681
+ return (t, n) => (O(), c("section", Xa, [
3682
+ e.title || e.subtitle || t.$slots.actions ? (O(), c("header", Za, [l("div", Qa, [e.title ? (O(), c("h2", $a, P(e.title), 1)) : s("", !0), e.subtitle ? (O(), c("p", eo, P(e.subtitle), 1)) : s("", !0)]), t.$slots.actions ? (O(), c("div", to, [M(t.$slots, "actions")])) : s("", !0)])) : s("", !0),
3683
+ l("div", { class: x(e.padding === "sm" ? "p-4" : e.padding === "none" ? "" : "p-5") }, [M(t.$slots, "default")], 2),
3684
+ t.$slots.footer ? (O(), c("footer", no, [M(t.$slots, "footer")])) : s("", !0)
3681
3685
  ]));
3682
3686
  }
3683
- }), eo = ["for"], to = {
3687
+ }), io = ["for"], ao = {
3684
3688
  key: 0,
3685
3689
  class: "ml-0.5 text-red-500",
3686
3690
  "aria-hidden": "true"
3687
- }, no = {
3691
+ }, oo = {
3688
3692
  key: 1,
3689
3693
  class: "mt-1 text-xs font-medium text-red-600 dark:text-red-400",
3690
3694
  role: "alert"
3691
- }, ro = {
3695
+ }, so = {
3692
3696
  key: 2,
3693
3697
  class: "mt-1 text-xs text-slate-500 dark:text-slate-400"
3694
- }, io = /* @__PURE__ */ m({
3698
+ }, co = /* @__PURE__ */ m({
3695
3699
  __name: "BaseField",
3696
3700
  props: {
3697
3701
  label: { default: "" },
@@ -3712,17 +3716,26 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3712
3716
  }
3713
3717
  },
3714
3718
  setup(e) {
3715
- return (t, n) => (D(), c("div", { class: b([e.grow ? "min-w-48 flex-1" : "", "text-left"]) }, [
3716
- e.label ? (D(), c("label", {
3719
+ let t = e, n = A(), r = A(), i = ne();
3720
+ return T(() => {
3721
+ if (t.labelFor || !t.label) return;
3722
+ let e = n.value?.querySelector("input, select, textarea");
3723
+ e && (e.id ||= i, r.value = e.id);
3724
+ }), (t, i) => (O(), c("div", {
3725
+ ref_key: "root",
3726
+ ref: n,
3727
+ class: x([e.grow ? "min-w-48 flex-1" : "", "text-left"])
3728
+ }, [
3729
+ e.label ? (O(), c("label", {
3717
3730
  key: 0,
3718
- for: e.labelFor || void 0,
3719
- class: b(["mb-1 block", e.compact ? "text-xs uppercase tracking-wide text-slate-500 dark:text-slate-400" : "text-sm font-medium text-slate-700 dark:text-slate-200"])
3720
- }, [f(P(e.label), 1), e.required ? (D(), c("span", to, "*")) : s("", !0)], 10, eo)) : s("", !0),
3721
- j(t.$slots, "default"),
3722
- e.error ? (D(), c("p", no, P(e.error), 1)) : e.hint ? (D(), c("p", ro, P(e.hint), 1)) : s("", !0)
3731
+ for: e.labelFor || r.value,
3732
+ class: x(["mb-1 block", e.compact ? "text-xs uppercase tracking-wide text-slate-500 dark:text-slate-400" : "text-sm font-medium text-slate-700 dark:text-slate-200"])
3733
+ }, [f(P(e.label), 1), e.required ? (O(), c("span", ao, "*")) : s("", !0)], 10, io)) : s("", !0),
3734
+ M(t.$slots, "default"),
3735
+ e.error ? (O(), c("p", oo, P(e.error), 1)) : e.hint ? (O(), c("p", so, P(e.hint), 1)) : s("", !0)
3723
3736
  ], 2));
3724
3737
  }
3725
- }), ao = { class: "flex items-start justify-between gap-3" }, oo = { class: "min-w-0 text-left" }, so = { class: "truncate text-sm font-bold tracking-wide text-gray-800 dark:text-slate-200" }, co = /* @__PURE__ */ m({
3738
+ }), lo = { class: "flex items-start justify-between gap-3" }, uo = { class: "min-w-0 text-left" }, fo = { class: "truncate text-sm font-bold tracking-wide text-gray-800 dark:text-slate-200" }, po = /* @__PURE__ */ m({
3726
3739
  __name: "BaseStatCard",
3727
3740
  props: {
3728
3741
  title: {},
@@ -3740,6 +3753,13 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3740
3753
  iconBox: "bg-emerald-50 dark:bg-emerald-900/30",
3741
3754
  icon: "text-emerald-500"
3742
3755
  },
3756
+ violet: {
3757
+ border: "border-violet-300 dark:border-violet-700",
3758
+ value: "text-violet-500 dark:text-violet-400",
3759
+ subtitle: "text-violet-500 dark:text-violet-400",
3760
+ iconBox: "bg-violet-50 dark:bg-violet-900/30",
3761
+ icon: "text-violet-500"
3762
+ },
3743
3763
  sky: {
3744
3764
  border: "border-sky-300 dark:border-sky-700",
3745
3765
  value: "text-sky-500 dark:text-sky-400",
@@ -3769,30 +3789,30 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3769
3789
  icon: "text-slate-500 dark:text-slate-300"
3770
3790
  }
3771
3791
  }, r = a(() => n[t.accent]);
3772
- return (t, n) => (D(), o(N(e.to ? F(Me) : "div"), v(e.to ? { to: e.to } : {}, { class: ["relative block rounded-xl border-2 border-dashed bg-white p-5 transition-colors dark:bg-slate-800", [r.value.border, e.to ? "hover:bg-slate-50 dark:hover:bg-slate-700/60 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500" : ""]] }), {
3773
- default: L(() => [l("div", ao, [l("div", oo, [
3774
- l("p", so, P(e.title), 1),
3775
- l("p", { class: b(["mt-1 truncate text-3xl font-bold", r.value.value]) }, P(e.value), 3),
3776
- e.subtitle ? (D(), c("p", {
3792
+ return (t, n) => (O(), o(N(e.to ? F(Le) : "div"), y(e.to ? { to: e.to } : {}, { class: ["relative block rounded-xl border-2 border-dashed bg-white p-5 transition-colors dark:bg-slate-800", [r.value.border, e.to ? "hover:bg-slate-50 dark:hover:bg-slate-700/60 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500" : ""]] }), {
3793
+ default: I(() => [l("div", lo, [l("div", uo, [
3794
+ l("p", fo, P(e.title), 1),
3795
+ l("p", { class: x(["mt-1 truncate text-3xl font-bold", r.value.value]) }, [M(t.$slots, "value", {}, () => [f(P(e.value), 1)])], 2),
3796
+ e.subtitle ? (O(), c("p", {
3777
3797
  key: 0,
3778
- class: b(["mt-1 text-sm font-medium", r.value.subtitle])
3798
+ class: x(["mt-1 text-sm font-medium", r.value.subtitle])
3779
3799
  }, P(e.subtitle), 3)) : s("", !0),
3780
- j(t.$slots, "default")
3781
- ]), t.$slots.icon ? (D(), c("div", {
3800
+ M(t.$slots, "default")
3801
+ ]), t.$slots.icon ? (O(), c("div", {
3782
3802
  key: 0,
3783
- class: b(["flex h-12 w-12 shrink-0 items-center justify-center rounded-xl", r.value.iconBox])
3784
- }, [j(t.$slots, "icon", { iconClass: `h-6 w-6 ${r.value.icon}` })], 2)) : s("", !0)])]),
3803
+ class: x(["flex h-12 w-12 shrink-0 items-center justify-center rounded-xl", r.value.iconBox])
3804
+ }, [M(t.$slots, "icon", { iconClass: `h-6 w-6 ${r.value.icon}` })], 2)) : s("", !0)])]),
3785
3805
  _: 3
3786
3806
  }, 16, ["class"]));
3787
3807
  }
3788
- }), lo = [
3808
+ }), mo = [
3789
3809
  "aria-checked",
3790
3810
  "aria-label",
3791
3811
  "disabled"
3792
- ], uo = {
3812
+ ], ho = {
3793
3813
  key: 0,
3794
3814
  class: "text-sm font-medium text-slate-700 dark:text-slate-200"
3795
- }, fo = /* @__PURE__ */ m({
3815
+ }, go = /* @__PURE__ */ m({
3796
3816
  __name: "BaseToggle",
3797
3817
  props: {
3798
3818
  modelValue: {
@@ -3821,23 +3841,23 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3821
3841
  let e = !n.modelValue;
3822
3842
  r("update:modelValue", e), r("change", e);
3823
3843
  }
3824
- return (t, n) => (D(), c("label", { class: b(["inline-flex items-center gap-3 select-none", e.disabled ? "cursor-not-allowed opacity-60" : "cursor-pointer"]) }, [l("button", {
3844
+ return (t, n) => (O(), c("label", { class: x(["inline-flex items-center gap-3 select-none", e.disabled ? "cursor-not-allowed opacity-60" : "cursor-pointer"]) }, [l("button", {
3825
3845
  type: "button",
3826
3846
  role: "switch",
3827
3847
  "aria-checked": e.modelValue,
3828
3848
  "aria-label": e.label ? void 0 : e.ariaLabel || void 0,
3829
3849
  disabled: e.disabled,
3830
- class: b(["relative inline-flex h-6 w-11 shrink-0 items-center rounded-full transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-900 disabled:cursor-not-allowed", e.modelValue ? i[e.color] : e.offTone === "red" ? "bg-red-200 dark:bg-red-900/50" : "bg-slate-200 dark:bg-slate-700"]),
3850
+ class: x(["relative inline-flex h-6 w-11 shrink-0 items-center rounded-full transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-900 disabled:cursor-not-allowed", e.modelValue ? i[e.color] : e.offTone === "red" ? "bg-red-200 dark:bg-red-900/50" : "bg-slate-200 dark:bg-slate-700"]),
3831
3851
  onClick: a
3832
3852
  }, [l("span", {
3833
- class: b(["inline-block h-5 w-5 rounded-full bg-white shadow ring-1 ring-black/5 transition-transform", e.modelValue ? "translate-x-[22px]" : "translate-x-0.5"]),
3853
+ class: x(["inline-block h-5 w-5 rounded-full bg-white shadow ring-1 ring-black/5 transition-transform", e.modelValue ? "translate-x-[22px]" : "translate-x-0.5"]),
3834
3854
  "aria-hidden": "true"
3835
- }, null, 2)], 10, lo), e.label ? (D(), c("span", uo, P(e.label), 1)) : s("", !0)], 2));
3855
+ }, null, 2)], 10, mo), e.label ? (O(), c("span", ho, P(e.label), 1)) : s("", !0)], 2));
3836
3856
  }
3837
- }), po = ["checked", "disabled"], mo = {
3857
+ }), _o = ["checked", "disabled"], vo = {
3838
3858
  key: 0,
3839
3859
  class: "text-sm text-slate-700 dark:text-slate-200"
3840
- }, ho = /* @__PURE__ */ m({
3860
+ }, yo = /* @__PURE__ */ m({
3841
3861
  inheritAttrs: !1,
3842
3862
  __name: "BaseCheckbox",
3843
3863
  props: {
@@ -3858,25 +3878,27 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3858
3878
  let t = e.target.checked;
3859
3879
  n("update:modelValue", t), n("change", t);
3860
3880
  }
3861
- return (t, n) => (D(), c("label", { class: b(["inline-flex items-center gap-2 select-none", e.disabled ? "cursor-not-allowed opacity-60" : "cursor-pointer"]) }, [l("input", v(t.$attrs, {
3881
+ return (t, n) => (O(), c("label", { class: x(["inline-flex items-center gap-2 select-none", e.disabled ? "cursor-not-allowed opacity-60" : "cursor-pointer"]) }, [l("input", y(t.$attrs, {
3862
3882
  type: "checkbox",
3863
3883
  checked: e.modelValue,
3864
3884
  disabled: e.disabled,
3865
3885
  class: "h-5 w-5 shrink-0 cursor-[inherit] rounded-md border-slate-300 bg-white text-emerald-600 accent-emerald-600 transition-colors focus:ring-2 focus:ring-emerald-500/40 focus:ring-offset-0 dark:border-slate-600 dark:bg-slate-900 dark:checked:bg-emerald-600",
3866
3886
  onChange: r
3867
- }), null, 16, po), e.label || t.$slots.default ? (D(), c("span", mo, [j(t.$slots, "default", {}, () => [f(P(e.label), 1)])])) : s("", !0)], 2));
3887
+ }), null, 16, _o), e.label || t.$slots.default ? (O(), c("span", vo, [M(t.$slots, "default", {}, () => [f(P(e.label), 1)])])) : s("", !0)], 2));
3868
3888
  }
3869
- }), go = { class: "flex flex-col gap-2 text-left" }, _o = {
3889
+ }), bo = { class: "flex flex-col gap-2 text-left" }, xo = ["src"], So = {
3890
+ key: 1,
3870
3891
  class: "flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-emerald-100 text-sm font-semibold text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-300",
3871
3892
  "aria-hidden": "true"
3872
- }, vo = { class: "min-w-0" }, yo = { class: "block truncate text-sm font-medium text-slate-900 dark:text-slate-100" }, bo = {
3893
+ }, Co = { class: "min-w-0" }, wo = { class: "block truncate text-sm font-medium text-slate-900 dark:text-slate-100" }, To = {
3873
3894
  key: 0,
3874
3895
  class: "block truncate text-xs text-slate-500 dark:text-slate-400"
3875
- }, xo = /* @__PURE__ */ m({
3896
+ }, Eo = /* @__PURE__ */ m({
3876
3897
  __name: "BaseSidebarUser",
3877
3898
  props: {
3878
3899
  name: {},
3879
3900
  email: { default: "" },
3901
+ avatarUrl: { default: null },
3880
3902
  to: { default: void 0 },
3881
3903
  showLogout: {
3882
3904
  type: Boolean,
@@ -3888,13 +3910,18 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3888
3910
  emits: ["logout"],
3889
3911
  setup(e, { emit: t }) {
3890
3912
  let n = e, r = t, i = a(() => (n.name || "?").split(/[\s._-]+/).filter(Boolean).slice(0, 2).map((e) => e[0].toUpperCase()).join(""));
3891
- return (t, n) => (D(), c("div", go, [(D(), o(N(e.to ? F(Me) : "div"), v(e.to ? { to: e.to } : {}, {
3913
+ return (t, n) => (O(), c("div", bo, [(O(), o(N(e.to ? F(Le) : "div"), y(e.to ? { to: e.to } : {}, {
3892
3914
  class: ["flex items-center gap-3 rounded-lg p-2 transition-colors", e.to ? "hover:bg-slate-100 dark:hover:bg-slate-800 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500" : ""],
3893
3915
  title: e.to ? e.profileLabel : void 0
3894
3916
  }), {
3895
- default: L(() => [l("span", _o, P(i.value), 1), l("span", vo, [l("span", yo, P(e.name), 1), e.email ? (D(), c("span", bo, P(e.email), 1)) : s("", !0)])]),
3917
+ default: I(() => [e.avatarUrl ? (O(), c("img", {
3918
+ key: 0,
3919
+ src: e.avatarUrl,
3920
+ alt: "",
3921
+ class: "h-9 w-9 shrink-0 rounded-full object-cover"
3922
+ }, null, 8, xo)) : (O(), c("span", So, P(i.value), 1)), l("span", Co, [l("span", wo, P(e.name), 1), e.email ? (O(), c("span", To, P(e.email), 1)) : s("", !0)])]),
3896
3923
  _: 1
3897
- }, 16, ["class", "title"])), e.showLogout ? (D(), o(q, {
3924
+ }, 16, ["class", "title"])), e.showLogout ? (O(), o(q, {
3898
3925
  key: 0,
3899
3926
  class: "w-full justify-center",
3900
3927
  description: e.logoutLabel,
@@ -3904,7 +3931,7 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3904
3931
  "icon-left": "",
3905
3932
  onClick: n[0] ||= (e) => r("logout")
3906
3933
  }, {
3907
- default: L(() => [p(F(le), {
3934
+ default: I(() => [p(F(fe), {
3908
3935
  class: "mr-1.5 h-4 w-4",
3909
3936
  "aria-hidden": "true"
3910
3937
  })]),
@@ -3915,16 +3942,16 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3915
3942
  "size"
3916
3943
  ])) : s("", !0)]));
3917
3944
  }
3918
- }), So = { class: "flex min-h-screen w-full flex-col items-center justify-center bg-slate-50 px-4 py-10 dark:bg-slate-950" }, Co = { class: "mb-6 flex justify-center" }, wo = {
3945
+ }), Do = { class: "flex min-h-screen w-full flex-col items-center justify-center bg-slate-50 px-4 py-10 dark:bg-slate-950" }, Oo = { class: "mb-6 flex justify-center" }, ko = {
3919
3946
  key: 0,
3920
3947
  class: "mb-1 text-2xl font-bold tracking-tight text-slate-900 dark:text-slate-100"
3921
- }, To = {
3948
+ }, Ao = {
3922
3949
  key: 1,
3923
3950
  class: "text-sm text-slate-500 dark:text-slate-400"
3924
- }, Eo = {
3951
+ }, jo = {
3925
3952
  key: 2,
3926
3953
  class: "mt-6 border-t border-slate-200 pt-4 text-center text-sm text-slate-500 dark:border-slate-700 dark:text-slate-400"
3927
- }, Do = /* @__PURE__ */ m({
3954
+ }, Mo = /* @__PURE__ */ m({
3928
3955
  __name: "BaseAuthLayout",
3929
3956
  props: {
3930
3957
  title: { default: "" },
@@ -3935,18 +3962,18 @@ var Kn = ["aria-label", "aria-expanded"], qn = { class: "flex flex-col h-full" }
3935
3962
  }
3936
3963
  },
3937
3964
  setup(e) {
3938
- return (t, n) => (D(), c("div", So, [l("div", Co, [j(t.$slots, "logo", {}, () => [p(Mt, { size: F(J).MEDIUM }, null, 8, ["size"])])]), l("div", { class: b(["w-full rounded-xl border border-slate-200 bg-white p-6 text-left shadow-sm sm:p-8 dark:border-slate-700 dark:bg-slate-900", e.wide ? "max-w-3xl" : "max-w-md"]) }, [
3939
- e.title ? (D(), c("h1", wo, P(e.title), 1)) : s("", !0),
3940
- e.subtitle ? (D(), c("p", To, P(e.subtitle), 1)) : s("", !0),
3941
- l("div", { class: b(e.title || e.subtitle ? "mt-6" : "") }, [j(t.$slots, "default")], 2),
3942
- t.$slots.footer ? (D(), c("div", Eo, [j(t.$slots, "footer")])) : s("", !0)
3965
+ return (t, n) => (O(), c("div", Do, [l("div", Oo, [M(t.$slots, "logo", {}, () => [p(It, { size: F(J).MEDIUM }, null, 8, ["size"])])]), l("div", { class: x(["w-full rounded-xl border border-slate-200 bg-white p-6 text-left shadow-sm sm:p-8 dark:border-slate-700 dark:bg-slate-900", e.wide ? "max-w-3xl" : "max-w-md"]) }, [
3966
+ e.title ? (O(), c("h1", ko, P(e.title), 1)) : s("", !0),
3967
+ e.subtitle ? (O(), c("p", Ao, P(e.subtitle), 1)) : s("", !0),
3968
+ l("div", { class: x(e.title || e.subtitle ? "mt-6" : "") }, [M(t.$slots, "default")], 2),
3969
+ t.$slots.footer ? (O(), c("div", jo, [M(t.$slots, "footer")])) : s("", !0)
3943
3970
  ], 2)]));
3944
3971
  }
3945
3972
  });
3946
3973
  //#endregion
3947
3974
  //#region node_modules/@heroicons/vue/20/solid/esm/CheckCircleIcon.js
3948
- function Oo(e, t) {
3949
- return D(), c("svg", {
3975
+ function No(e, t) {
3976
+ return O(), c("svg", {
3950
3977
  xmlns: "http://www.w3.org/2000/svg",
3951
3978
  viewBox: "0 0 20 20",
3952
3979
  fill: "currentColor",
@@ -3960,8 +3987,8 @@ function Oo(e, t) {
3960
3987
  }
3961
3988
  //#endregion
3962
3989
  //#region node_modules/@heroicons/vue/20/solid/esm/XCircleIcon.js
3963
- function ko(e, t) {
3964
- return D(), c("svg", {
3990
+ function Po(e, t) {
3991
+ return O(), c("svg", {
3965
3992
  xmlns: "http://www.w3.org/2000/svg",
3966
3993
  viewBox: "0 0 20 20",
3967
3994
  fill: "currentColor",
@@ -3975,7 +4002,7 @@ function ko(e, t) {
3975
4002
  }
3976
4003
  //#endregion
3977
4004
  //#region src/components/BaseBooleanBadge.vue
3978
- var Ao = /* @__PURE__ */ m({
4005
+ var Fo = /* @__PURE__ */ m({
3979
4006
  __name: "BaseBooleanBadge",
3980
4007
  props: {
3981
4008
  value: {
@@ -3986,20 +4013,20 @@ var Ao = /* @__PURE__ */ m({
3986
4013
  falseLabel: { default: "No" }
3987
4014
  },
3988
4015
  setup(e) {
3989
- return (t, n) => (D(), c("span", { class: b(["inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium ring-1 ring-inset", e.value ? "bg-emerald-50 text-emerald-700 ring-emerald-600/20 dark:bg-emerald-500/10 dark:text-emerald-300 dark:ring-emerald-400/30" : "bg-red-50 text-red-700 ring-red-600/20 dark:bg-red-500/10 dark:text-red-300 dark:ring-red-400/30"]) }, [e.value ? (D(), o(F(Oo), {
4016
+ return (t, n) => (O(), c("span", { class: x(["inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium ring-1 ring-inset", e.value ? "bg-emerald-50 text-emerald-700 ring-emerald-600/20 dark:bg-emerald-500/10 dark:text-emerald-300 dark:ring-emerald-400/30" : "bg-red-50 text-red-700 ring-red-600/20 dark:bg-red-500/10 dark:text-red-300 dark:ring-red-400/30"]) }, [e.value ? (O(), o(F(No), {
3990
4017
  key: 0,
3991
4018
  class: "h-3.5 w-3.5",
3992
4019
  "aria-hidden": "true"
3993
- })) : (D(), o(F(ko), {
4020
+ })) : (O(), o(F(Po), {
3994
4021
  key: 1,
3995
4022
  class: "h-3.5 w-3.5",
3996
4023
  "aria-hidden": "true"
3997
4024
  })), f(" " + P(e.value ? e.trueLabel : e.falseLabel), 1)], 2));
3998
4025
  }
3999
- }), jo = { class: "text-xs uppercase tracking-wide text-slate-500 dark:text-slate-400" }, Mo = ["href"], No = {
4026
+ }), Io = { class: "text-xs uppercase tracking-wide text-slate-500 dark:text-slate-400" }, Lo = ["href"], Ro = {
4000
4027
  key: 1,
4001
4028
  class: "text-slate-400 dark:text-slate-500"
4002
- }, Po = /* @__PURE__ */ m({
4029
+ }, zo = /* @__PURE__ */ m({
4003
4030
  __name: "BaseDetailList",
4004
4031
  props: {
4005
4032
  items: {},
@@ -4010,34 +4037,193 @@ var Ao = /* @__PURE__ */ m({
4010
4037
  function n(e) {
4011
4038
  return e == null || e === "";
4012
4039
  }
4013
- return (r, i) => (D(), c("dl", { class: b(["grid grid-cols-[minmax(0,1fr)] gap-x-6 gap-y-4 text-left", t.columns === 2 ? "sm:grid-cols-[repeat(2,minmax(0,1fr))]" : t.columns === 3 ? "sm:grid-cols-[repeat(2,minmax(0,1fr))] lg:grid-cols-[repeat(3,minmax(0,1fr))]" : ""]) }, [(D(!0), c(e, null, A(t.items, (r) => (D(), c("div", {
4014
- key: r.label,
4040
+ return (r, i) => (O(), c("dl", { class: x(["grid grid-cols-[minmax(0,1fr)] gap-x-6 gap-y-4 text-left", t.columns === 2 ? "sm:grid-cols-[repeat(2,minmax(0,1fr))]" : t.columns === 3 ? "sm:grid-cols-[repeat(2,minmax(0,1fr))] lg:grid-cols-[repeat(3,minmax(0,1fr))]" : ""]) }, [(O(!0), c(e, null, j(t.items, (i) => (O(), c("div", {
4041
+ key: i.label,
4015
4042
  class: "min-w-0"
4016
- }, [l("dt", jo, P(r.label), 1), l("dd", { class: b(["mt-1 break-words text-sm text-slate-900 dark:text-slate-100", r.mono ? "font-mono" : ""]) }, [r.href && !n(r.value) ? (D(), c("a", {
4043
+ }, [l("dt", Io, P(i.label), 1), l("dd", { class: x(["mt-1 break-words text-sm text-slate-900 dark:text-slate-100", i.mono ? "font-mono" : ""]) }, [M(r.$slots, "value", { item: i }, () => [i.href && !n(i.value) ? (O(), c("a", {
4017
4044
  key: 0,
4018
- href: r.href,
4045
+ href: i.href,
4019
4046
  target: "_blank",
4020
4047
  rel: "noopener noreferrer",
4021
4048
  class: "text-emerald-600 hover:underline dark:text-emerald-400"
4022
- }, P(r.value), 9, Mo)) : n(r.value) ? (D(), c("span", No, P(t.emptyText), 1)) : (D(), c(e, { key: 2 }, [f(P(r.value), 1)], 64))], 2)]))), 128))], 2));
4049
+ }, P(i.value), 9, Lo)) : n(i.value) ? (O(), c("span", Ro, P(t.emptyText), 1)) : (O(), c(e, { key: 2 }, [f(P(i.value), 1)], 64))])], 2)]))), 128))], 2));
4023
4050
  }
4024
- });
4051
+ }), Bo = ["value"], Vo = /* @__PURE__ */ m({
4052
+ __name: "BaseTextarea",
4053
+ props: { modelValue: { default: "" } },
4054
+ emits: ["update:modelValue"],
4055
+ setup(e, { emit: t }) {
4056
+ let n = t;
4057
+ function r(e) {
4058
+ n("update:modelValue", e.target.value);
4059
+ }
4060
+ return (t, n) => (O(), c("textarea", {
4061
+ value: e.modelValue ?? "",
4062
+ class: "w-full rounded-lg border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 text-slate-900 dark:text-slate-100 text-sm px-3 py-2 placeholder:text-slate-400 dark:placeholder:text-slate-500 transition-colors hover:border-slate-400 dark:hover:border-slate-500 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500/40 focus-visible:border-emerald-500 disabled:opacity-60 disabled:cursor-not-allowed",
4063
+ onInput: r
4064
+ }, null, 40, Bo));
4065
+ }
4066
+ }), Ho = ["title"], Uo = { class: "ml-1 font-mono text-xs text-slate-500 dark:text-slate-400" }, Wo = /* @__PURE__ */ m({
4067
+ __name: "BaseRating",
4068
+ props: {
4069
+ rating: {},
4070
+ count: { default: null }
4071
+ },
4072
+ setup(t) {
4073
+ return (n, r) => (O(), c("span", {
4074
+ class: "inline-flex items-center gap-0.5",
4075
+ title: `${t.rating} / 5`
4076
+ }, [(O(), c(e, null, j(5, (n) => (O(), c(e, { key: n }, [n <= Math.round(t.rating) ? (O(), o(F(Ie), {
4077
+ key: 0,
4078
+ class: "h-4 w-4 text-amber-400",
4079
+ "aria-hidden": "true"
4080
+ })) : (O(), o(F(Ne), {
4081
+ key: 1,
4082
+ class: "h-4 w-4 text-slate-300 dark:text-slate-600",
4083
+ "aria-hidden": "true"
4084
+ }))], 64))), 64)), l("span", Uo, [f(P(t.rating.toFixed(1)), 1), t.count === null ? s("", !0) : (O(), c(e, { key: 0 }, [f(" (" + P(t.count) + ")", 1)], 64))])], 8, Ho));
4085
+ }
4086
+ }), Go = /* @__PURE__ */ m({
4087
+ __name: "BaseRowButton",
4088
+ props: { variant: { default: "outline" } },
4089
+ setup(e) {
4090
+ let t = {
4091
+ outline: "border border-slate-300 bg-white text-slate-700 hover:bg-slate-50 dark:border-slate-600 dark:bg-slate-900 dark:text-slate-200 dark:hover:bg-slate-800",
4092
+ primary: "border border-emerald-700 bg-emerald-700 text-white hover:bg-emerald-800",
4093
+ danger: "border border-red-400 bg-red-400 text-white hover:bg-red-500"
4094
+ };
4095
+ return (n, r) => (O(), c("button", {
4096
+ type: "button",
4097
+ class: x(["inline-flex items-center gap-1 rounded-md px-3 py-1.5 text-xs font-medium shadow-sm transition-colors", t[e.variant]]),
4098
+ onClick: r[0] ||= R(() => {}, ["stop"])
4099
+ }, [M(n.$slots, "default")], 2));
4100
+ }
4101
+ }), Ko = { key: 0 }, qo = ["title"], Jo = /* @__PURE__ */ m({
4102
+ __name: "BaseBooleanIcon",
4103
+ props: {
4104
+ value: {
4105
+ type: [Boolean, null],
4106
+ default: null
4107
+ },
4108
+ trueLabel: { default: "Yes" },
4109
+ falseLabel: { default: "No" },
4110
+ emptyText: { default: "—" }
4111
+ },
4112
+ setup(e) {
4113
+ return (t, n) => e.value == null ? (O(), c("span", Ko, P(e.emptyText), 1)) : (O(), c("span", {
4114
+ key: 1,
4115
+ class: "inline-flex align-middle",
4116
+ title: e.value ? e.trueLabel : e.falseLabel
4117
+ }, [e.value ? (O(), o(F(No), {
4118
+ key: 0,
4119
+ class: "h-5 w-5 shrink-0 text-emerald-500",
4120
+ "aria-label": e.trueLabel
4121
+ }, null, 8, ["aria-label"])) : (O(), o(F(Po), {
4122
+ key: 1,
4123
+ class: "h-5 w-5 shrink-0 text-red-500",
4124
+ "aria-label": e.falseLabel
4125
+ }, null, 8, ["aria-label"]))], 8, qo));
4126
+ }
4127
+ }), Yo = { class: "flex items-center justify-between px-4 py-3 text-sm text-white" }, Xo = { class: "font-medium" }, Zo = { class: "flex items-center gap-3" }, Qo = { class: "text-slate-300" }, $o = ["aria-label"], es = ["src", "alt"], ts = ["aria-label"], ns = ["aria-label"], rs = {
4128
+ key: 0,
4129
+ class: "mx-auto max-w-2xl whitespace-pre-line px-4 pb-4 text-center text-sm text-white"
4130
+ }, is = {
4131
+ key: 1,
4132
+ class: "flex justify-center gap-2 overflow-x-auto px-4 pb-4"
4133
+ }, as = ["aria-label", "onClick"], os = ["src", "alt"], ss = /* @__PURE__ */ m({
4134
+ __name: "BasePhotoViewer",
4135
+ props: /*@__PURE__*/ v({
4136
+ photos: {},
4137
+ closeLabel: { default: "Close" },
4138
+ previousLabel: { default: "Previous" },
4139
+ nextLabel: { default: "Next" }
4140
+ }, {
4141
+ modelValue: { required: !0 },
4142
+ modelModifiers: {}
4143
+ }),
4144
+ emits: /*@__PURE__*/ v(["close"], ["update:modelValue"]),
4145
+ setup(n, { emit: r }) {
4146
+ let i = n, u = re(n, "modelValue"), d = r, f = a(() => i.photos[u.value]);
4147
+ function m(e) {
4148
+ let t = i.photos.length;
4149
+ t > 0 && (u.value = (u.value + e + t) % t);
4150
+ }
4151
+ function h(e) {
4152
+ e.key === "Escape" ? d("close") : e.key === "ArrowLeft" ? m(-1) : e.key === "ArrowRight" && m(1);
4153
+ }
4154
+ return T(() => window.addEventListener("keydown", h)), w(() => window.removeEventListener("keydown", h)), (r, i) => (O(), o(t, { to: "body" }, [f.value ? (O(), c("div", {
4155
+ key: 0,
4156
+ class: "fixed inset-0 z-[1000] flex flex-col bg-slate-950/90",
4157
+ role: "dialog",
4158
+ "aria-modal": "true",
4159
+ onClick: i[4] ||= R((e) => d("close"), ["self"])
4160
+ }, [
4161
+ l("div", Yo, [l("span", Xo, P(f.value.label), 1), l("div", Zo, [l("span", Qo, P(u.value + 1) + " / " + P(n.photos.length), 1), l("button", {
4162
+ type: "button",
4163
+ class: "rounded-full p-1.5 hover:bg-white/10",
4164
+ "aria-label": n.closeLabel,
4165
+ onClick: i[0] ||= (e) => d("close")
4166
+ }, [p(F(z), { class: "h-6 w-6" })], 8, $o)])]),
4167
+ l("div", {
4168
+ class: "relative flex min-h-0 flex-1 items-center justify-center px-4 pb-4",
4169
+ onClick: i[3] ||= R((e) => d("close"), ["self"])
4170
+ }, [l("img", {
4171
+ src: f.value.src,
4172
+ alt: f.value.label,
4173
+ class: "max-h-full max-w-full rounded-lg object-contain shadow-2xl"
4174
+ }, null, 8, es), n.photos.length > 1 ? (O(), c(e, { key: 0 }, [l("button", {
4175
+ type: "button",
4176
+ class: "absolute left-4 top-1/2 -translate-y-1/2 rounded-full bg-white/10 p-2 text-white hover:bg-white/20",
4177
+ "aria-label": n.previousLabel,
4178
+ onClick: i[1] ||= (e) => m(-1)
4179
+ }, [p(F(xe), { class: "h-7 w-7" })], 8, ts), l("button", {
4180
+ type: "button",
4181
+ class: "absolute right-4 top-1/2 -translate-y-1/2 rounded-full bg-white/10 p-2 text-white hover:bg-white/20",
4182
+ "aria-label": n.nextLabel,
4183
+ onClick: i[2] ||= (e) => m(1)
4184
+ }, [p(F(Se), { class: "h-7 w-7" })], 8, ns)], 64)) : s("", !0)]),
4185
+ f.value.caption ? (O(), c("p", rs, P(f.value.caption), 1)) : s("", !0),
4186
+ n.photos.length > 1 ? (O(), c("div", is, [(O(!0), c(e, null, j(n.photos, (e, t) => (O(), c("button", {
4187
+ key: t,
4188
+ type: "button",
4189
+ class: x(["h-14 w-14 shrink-0 overflow-hidden rounded-md border-2", t === u.value ? "border-emerald-400" : "border-transparent opacity-60 hover:opacity-100"]),
4190
+ "aria-label": e.label,
4191
+ onClick: (e) => u.value = t
4192
+ }, [l("img", {
4193
+ src: e.src,
4194
+ alt: e.label,
4195
+ class: "h-full w-full object-cover"
4196
+ }, null, 8, os)], 10, as))), 128))])) : s("", !0)
4197
+ ])) : s("", !0)]));
4198
+ }
4199
+ }), cs = 3e4;
4200
+ function ls(e, t = cs) {
4201
+ let n = null;
4202
+ function r() {
4203
+ if (document.visibilityState === "hidden") {
4204
+ n ??= Date.now();
4205
+ return;
4206
+ }
4207
+ n !== null && Date.now() - n >= t && e(), n = null;
4208
+ }
4209
+ T(() => document.addEventListener("visibilitychange", r)), w(() => document.removeEventListener("visibilitychange", r));
4210
+ }
4025
4211
  //#endregion
4026
4212
  //#region src/composables/useDebounce.ts
4027
- function Fo(e, t = 300) {
4028
- let n = k(e.value), r = null;
4029
- return I(e, (e) => {
4213
+ function us(e, t = 300) {
4214
+ let n = A(e.value), r = null;
4215
+ return le(e, (e) => {
4030
4216
  r && clearTimeout(r), r = setTimeout(() => {
4031
4217
  n.value = e, r = null;
4032
4218
  }, t);
4033
- }), T(() => {
4219
+ }), E(() => {
4034
4220
  r &&= (clearTimeout(r), null);
4035
4221
  }), n;
4036
4222
  }
4037
4223
  //#endregion
4038
4224
  //#region src/composables/useToast.ts
4039
- function Io(e = 3e3) {
4040
- let t = k(!1), n = k(""), r = k(Y.SUCCESS), i = null;
4225
+ function ds(e = 3e3) {
4226
+ let t = A(!1), n = A(""), r = A(Y.SUCCESS), i = null;
4041
4227
  function a() {
4042
4228
  i &&= (clearTimeout(i), null);
4043
4229
  }
@@ -4046,7 +4232,7 @@ function Io(e = 3e3) {
4046
4232
  t.value = !1, i = null;
4047
4233
  }, c);
4048
4234
  }
4049
- return T(() => {
4235
+ return E(() => {
4050
4236
  a();
4051
4237
  }), {
4052
4238
  showToast: t,
@@ -4057,8 +4243,8 @@ function Io(e = 3e3) {
4057
4243
  }
4058
4244
  //#endregion
4059
4245
  //#region src/composables/useQueryParamSync.ts
4060
- function Lo() {
4061
- let e = Ne(), t = Pe();
4246
+ function fs() {
4247
+ let e = Re(), t = ze();
4062
4248
  function n(t) {
4063
4249
  let n = e.query[t];
4064
4250
  return typeof n == "string" ? n : "";
@@ -4079,7 +4265,7 @@ function Lo() {
4079
4265
  }
4080
4266
  //#endregion
4081
4267
  //#region src/composables/useFieldClasses.ts
4082
- function Ro() {
4268
+ function ps() {
4083
4269
  let { isDark: e } = U(), t = a(() => e.value ? "text-gray-300" : "text-gray-600"), n = a(() => e.value ? "bg-gray-800 border-gray-600 text-gray-100 placeholder-gray-500 focus:ring-emerald-500 focus:border-emerald-500" : "bg-white border-gray-300 text-gray-800 focus:ring-emerald-500 focus:border-emerald-500");
4084
4270
  function r(t) {
4085
4271
  return t == null || String(t).trim() === "" ? e.value ? "bg-gray-800 border-red-500 text-gray-100 placeholder-gray-500 focus:ring-red-500 focus:border-red-500 ring-1 ring-red-500/30" : "bg-white border-red-400 text-gray-800 focus:ring-red-500 focus:border-red-500 ring-1 ring-red-400/30" : n.value;
@@ -4092,8 +4278,8 @@ function Ro() {
4092
4278
  }
4093
4279
  //#endregion
4094
4280
  //#region src/composables/usePolling.ts
4095
- function zo(e, t, n = {}) {
4096
- let { immediate: r = !0, pauseWhenHidden: i = !0 } = n, a = null, o = k(!1), s = !1;
4281
+ function ms(e, t, n = {}) {
4282
+ let { immediate: r = !0, pauseWhenHidden: i = !0 } = n, a = null, o = A(!1), s = !1;
4097
4283
  function c() {
4098
4284
  a === null && t !== null && (a = setInterval(() => void e(), t));
4099
4285
  }
@@ -4115,19 +4301,19 @@ function zo(e, t, n = {}) {
4115
4301
  o.value = !1, l(), s = !0;
4116
4302
  }
4117
4303
  }
4118
- return w(() => {
4304
+ return T(() => {
4119
4305
  u(), i && document.addEventListener("visibilitychange", f);
4120
- }), E(() => {
4306
+ }), D(() => {
4121
4307
  d(), i && document.removeEventListener("visibilitychange", f);
4122
4308
  }), {
4123
4309
  start: u,
4124
4310
  stop: d,
4125
- active: ee(o)
4311
+ active: k(o)
4126
4312
  };
4127
4313
  }
4128
4314
  //#endregion
4129
4315
  //#region src/composables/useLatestRequest.ts
4130
- function Bo() {
4316
+ function hs() {
4131
4317
  let e = 0, t = null;
4132
4318
  function n() {
4133
4319
  let n = ++e;
@@ -4141,17 +4327,17 @@ function Bo() {
4141
4327
  function r() {
4142
4328
  ++e, t?.abort(), t = null;
4143
4329
  }
4144
- return g() && T(r), {
4330
+ return g() && E(r), {
4145
4331
  begin: n,
4146
4332
  cancel: r
4147
4333
  };
4148
4334
  }
4149
- function Vo(e) {
4335
+ function gs(e) {
4150
4336
  return typeof DOMException < "u" && e instanceof DOMException && e.name === "AbortError" || e instanceof Error && e.name === "AbortError";
4151
4337
  }
4152
4338
  //#endregion
4153
4339
  //#region src/composables/useDirtyState.ts
4154
- function Ho(e) {
4340
+ function _s(e) {
4155
4341
  return JSON.stringify(e, (e, t) => {
4156
4342
  if (typeof t == "object" && t && !Array.isArray(t)) {
4157
4343
  let e = {};
@@ -4161,10 +4347,10 @@ function Ho(e) {
4161
4347
  return t;
4162
4348
  });
4163
4349
  }
4164
- function Uo(e) {
4165
- let t = k(Ho(e())), n = a(() => Ho(e()) !== t.value);
4350
+ function vs(e) {
4351
+ let t = A(_s(e())), n = a(() => _s(e()) !== t.value);
4166
4352
  function r() {
4167
- t.value = Ho(e());
4353
+ t.value = _s(e());
4168
4354
  }
4169
4355
  return {
4170
4356
  dirty: n,
@@ -4173,12 +4359,12 @@ function Uo(e) {
4173
4359
  }
4174
4360
  //#endregion
4175
4361
  //#region src/enums/BaseBadgeEnum.ts
4176
- var Wo = /* @__PURE__ */ function(e) {
4362
+ var ys = /* @__PURE__ */ function(e) {
4177
4363
  return e.WIN = "WIN", e.LOSE = "LOSE", e;
4178
4364
  }({});
4179
4365
  //#endregion
4180
4366
  //#region src/utils/util.ts
4181
- function Go(e) {
4367
+ function bs(e) {
4182
4368
  let t = "red";
4183
4369
  switch (e) {
4184
4370
  case B.ERROR:
@@ -4194,7 +4380,7 @@ function Go(e) {
4194
4380
  }
4195
4381
  return t;
4196
4382
  }
4197
- function Ko(e) {
4383
+ function xs(e) {
4198
4384
  let t = "red";
4199
4385
  switch (e) {
4200
4386
  case W.GREEN:
@@ -4221,14 +4407,14 @@ function Ko(e) {
4221
4407
  }
4222
4408
  //#endregion
4223
4409
  //#region src/utils/httpColors.ts
4224
- var qo = {
4410
+ var Ss = {
4225
4411
  GET: "bg-blue-600",
4226
4412
  POST: "bg-emerald-600",
4227
4413
  PUT: "bg-amber-600",
4228
4414
  DELETE: "bg-red-600",
4229
4415
  PATCH: "bg-purple-600",
4230
4416
  HEAD: "bg-gray-600"
4231
- }, Jo = {
4417
+ }, Cs = {
4232
4418
  GET: "bg-blue-500",
4233
4419
  POST: "bg-green-500",
4234
4420
  PUT: "bg-yellow-500",
@@ -4236,39 +4422,39 @@ var qo = {
4236
4422
  PATCH: "bg-purple-500",
4237
4423
  HEAD: "bg-gray-500"
4238
4424
  };
4239
- function Yo(e) {
4240
- return e ? qo[e.toUpperCase()] ?? "bg-gray-600" : "bg-gray-600";
4425
+ function ws(e) {
4426
+ return e ? Ss[e.toUpperCase()] ?? "bg-gray-600" : "bg-gray-600";
4241
4427
  }
4242
- function Xo(e) {
4243
- return e ? Jo[e.toUpperCase()] ?? "bg-gray-500" : "bg-gray-500";
4428
+ function Ts(e) {
4429
+ return e ? Cs[e.toUpperCase()] ?? "bg-gray-500" : "bg-gray-500";
4244
4430
  }
4245
- function Zo(e) {
4431
+ function Es(e) {
4246
4432
  let t = e ?? 0;
4247
4433
  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";
4248
4434
  }
4249
- function Qo(e, t) {
4435
+ function Ds(e, t) {
4250
4436
  let n = (e || "ANY").toUpperCase();
4251
4437
  return n === "GET" ? t ? "bg-blue-500/15 text-blue-400" : "bg-blue-100 text-blue-700" : n === "POST" ? t ? "bg-emerald-500/15 text-emerald-400" : "bg-emerald-100 text-emerald-700" : n === "PUT" ? t ? "bg-amber-500/15 text-amber-400" : "bg-amber-100 text-amber-700" : n === "DELETE" ? t ? "bg-red-500/15 text-red-400" : "bg-red-100 text-red-700" : n === "PATCH" ? t ? "bg-purple-500/15 text-purple-400" : "bg-purple-100 text-purple-700" : n === "HEAD" ? t ? "bg-sky-500/15 text-sky-400" : "bg-sky-100 text-sky-700" : t ? "bg-gray-500/15 text-gray-400" : "bg-gray-100 text-gray-600";
4252
4438
  }
4253
- function $o(e, t) {
4439
+ function Os(e, t) {
4254
4440
  let n = e ?? 200;
4255
4441
  return n >= 200 && n < 300 ? t ? "bg-emerald-500/15 text-emerald-300" : "bg-emerald-100 text-emerald-700" : n >= 300 && n < 400 ? t ? "bg-sky-500/15 text-sky-300" : "bg-sky-100 text-sky-700" : n >= 400 && n < 500 ? t ? "bg-amber-500/15 text-amber-300" : "bg-amber-100 text-amber-700" : n >= 500 && n < 600 ? t ? "bg-red-500/15 text-red-300" : "bg-red-100 text-red-700" : t ? "bg-gray-800 text-gray-400" : "bg-gray-100 text-gray-600";
4256
4442
  }
4257
- function es(e, t) {
4443
+ function ks(e, t) {
4258
4444
  let n = e ?? 200;
4259
4445
  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";
4260
4446
  }
4261
4447
  //#endregion
4262
4448
  //#region src/utils/kvRows.ts
4263
- function ts(e) {
4449
+ function As(e) {
4264
4450
  return !(e.key ?? "").trim() || e.matcherType === "absent" ? !1 : !(e.value ?? "").trim();
4265
4451
  }
4266
- function ns(e) {
4452
+ function js(e) {
4267
4453
  return e.matcherType === "absent" || !(e.value ?? "").trim() ? !1 : !(e.key ?? "").trim();
4268
4454
  }
4269
4455
  //#endregion
4270
4456
  //#region src/utils/sanitizeHtml.ts
4271
- var rs = /* @__PURE__ */ new Set([
4457
+ var Ms = /* @__PURE__ */ new Set([
4272
4458
  "A",
4273
4459
  "B",
4274
4460
  "STRONG",
@@ -4283,7 +4469,7 @@ var rs = /* @__PURE__ */ new Set([
4283
4469
  "LI",
4284
4470
  "SPAN",
4285
4471
  "DIV"
4286
- ]), is = /* @__PURE__ */ new Set([
4472
+ ]), Ns = /* @__PURE__ */ new Set([
4287
4473
  "SCRIPT",
4288
4474
  "STYLE",
4289
4475
  "IFRAME",
@@ -4291,40 +4477,40 @@ var rs = /* @__PURE__ */ new Set([
4291
4477
  "EMBED",
4292
4478
  "NOSCRIPT",
4293
4479
  "TEMPLATE"
4294
- ]), as = { A: /* @__PURE__ */ new Set(["href", "title"]) };
4295
- function os(e) {
4480
+ ]), Ps = { A: /* @__PURE__ */ new Set(["href", "title"]) };
4481
+ function Fs(e) {
4296
4482
  let t = e.trim().toLowerCase();
4297
4483
  return t.startsWith("http://") || t.startsWith("https://") || t.startsWith("mailto:") || t.startsWith("tel:") || t.startsWith("/") || t.startsWith("#") || t === "";
4298
4484
  }
4299
- function ss(e) {
4485
+ function Is(e) {
4300
4486
  if (e.nodeType !== Node.ELEMENT_NODE) return;
4301
4487
  let t = e, n = t.tagName.toUpperCase();
4302
- if (!rs.has(n)) {
4303
- is.has(n) ? t.remove() : t.replaceWith(document.createTextNode(t.textContent ?? ""));
4488
+ if (!Ms.has(n)) {
4489
+ Ns.has(n) ? t.remove() : t.replaceWith(document.createTextNode(t.textContent ?? ""));
4304
4490
  return;
4305
4491
  }
4306
- let r = as[n] ?? /* @__PURE__ */ new Set();
4492
+ let r = Ps[n] ?? /* @__PURE__ */ new Set();
4307
4493
  for (let e of Array.from(t.attributes)) {
4308
4494
  if (!r.has(e.name.toLowerCase())) {
4309
4495
  t.removeAttribute(e.name);
4310
4496
  continue;
4311
4497
  }
4312
- n === "A" && e.name.toLowerCase() === "href" && !os(e.value) && t.removeAttribute(e.name);
4498
+ n === "A" && e.name.toLowerCase() === "href" && !Fs(e.value) && t.removeAttribute(e.name);
4313
4499
  }
4314
4500
  n === "A" && t.hasAttribute("href") && (t.setAttribute("rel", "noopener noreferrer"), t.setAttribute("target", "_blank"));
4315
- for (let e of Array.from(t.childNodes)) ss(e);
4501
+ for (let e of Array.from(t.childNodes)) Is(e);
4316
4502
  }
4317
- function cs(e) {
4503
+ function Ls(e) {
4318
4504
  if (!e) return "";
4319
4505
  let t = new DOMParser().parseFromString(`<div>${e}</div>`, "text/html").body.firstElementChild;
4320
4506
  if (!t) return "";
4321
- for (let e of Array.from(t.childNodes)) ss(e);
4507
+ for (let e of Array.from(t.childNodes)) Is(e);
4322
4508
  return t.innerHTML;
4323
4509
  }
4324
4510
  //#endregion
4325
4511
  //#region src/utils/format.ts
4326
4512
  var $ = "—";
4327
- function ls(e, t = 4) {
4513
+ function Rs(e, t = 4) {
4328
4514
  if (e == null || typeof e == "string" && e.trim() === "") return $;
4329
4515
  let n = typeof e == "string" ? Number(e) : e;
4330
4516
  return isFinite(n) ? n.toLocaleString(void 0, {
@@ -4332,12 +4518,12 @@ function ls(e, t = 4) {
4332
4518
  maximumFractionDigits: t
4333
4519
  }) : $;
4334
4520
  }
4335
- function us(e) {
4521
+ function zs(e) {
4336
4522
  if (e == null || e === "") return $;
4337
4523
  let t = new Date(e);
4338
4524
  return isNaN(t.getTime()) ? String(e) : t.toLocaleString();
4339
4525
  }
4340
- function ds(e) {
4526
+ function Bs(e) {
4341
4527
  return new Date(e).toLocaleString(void 0, {
4342
4528
  month: "short",
4343
4529
  day: "numeric",
@@ -4345,13 +4531,13 @@ function ds(e) {
4345
4531
  minute: "2-digit"
4346
4532
  });
4347
4533
  }
4348
- function fs(e) {
4534
+ function Vs(e) {
4349
4535
  return new Date(e).toLocaleDateString(void 0, {
4350
4536
  month: "short",
4351
4537
  day: "numeric"
4352
4538
  });
4353
4539
  }
4354
- function ps(e) {
4540
+ function Hs(e) {
4355
4541
  try {
4356
4542
  return new Date(e).toLocaleString(void 0, {
4357
4543
  year: "numeric",
@@ -4367,7 +4553,7 @@ function ps(e) {
4367
4553
  return String(e);
4368
4554
  }
4369
4555
  }
4370
- function ms(e) {
4556
+ function Us(e) {
4371
4557
  if (!isFinite(e) || e === 0) return e.toFixed(2);
4372
4558
  let t = Math.abs(e), n = 2;
4373
4559
  return t < 1e-4 ? n = 8 : t < .01 ? n = 6 : t < 1 ? n = 4 : t < 100 && (n = 3), e.toLocaleString(void 0, {
@@ -4375,13 +4561,13 @@ function ms(e) {
4375
4561
  maximumFractionDigits: n
4376
4562
  });
4377
4563
  }
4378
- function hs(e, t = 2) {
4564
+ function Ws(e, t = 2) {
4379
4565
  return `${e >= 0 ? "+" : ""}${e.toFixed(t)}%`;
4380
4566
  }
4381
- function gs(e) {
4567
+ function Gs(e) {
4382
4568
  return `${e < 0 ? "-" : "+"}$${Math.abs(e).toFixed(2)}`;
4383
4569
  }
4384
- function _s(e, t = 2, n = "$") {
4570
+ function Ks(e, t = 2, n = "$") {
4385
4571
  if (e == null || typeof e == "string" && e.trim() === "") return $;
4386
4572
  let r = typeof e == "string" ? Number(e) : e;
4387
4573
  if (!isFinite(r)) return $;
@@ -4391,29 +4577,29 @@ function _s(e, t = 2, n = "$") {
4391
4577
  });
4392
4578
  return `${r < 0 && Number(Math.abs(r).toFixed(t)) !== 0 ? "-" : ""}${n}${i}`;
4393
4579
  }
4394
- var vs = {
4580
+ var qs = {
4395
4581
  EUR: "€",
4396
4582
  GBP: "£"
4397
- }, ys = /* @__PURE__ */ new Set([
4583
+ }, Js = /* @__PURE__ */ new Set([
4398
4584
  "USD",
4399
4585
  "USDT",
4400
4586
  "USDC"
4401
4587
  ]);
4402
- function bs(e) {
4588
+ function Ys(e) {
4403
4589
  let t = (e ?? "").trim().toUpperCase();
4404
- return !t || ys.has(t) ? "$" : vs[t] ?? null;
4590
+ return !t || Js.has(t) ? "$" : qs[t] ?? null;
4405
4591
  }
4406
- function xs(e, t, n = 2) {
4407
- let r = (t ?? "").trim().toUpperCase(), i = bs(r);
4592
+ function Xs(e, t, n = 2) {
4593
+ let r = (t ?? "").trim().toUpperCase(), i = Ys(r);
4408
4594
  if (i !== null) {
4409
- let t = _s(e, n, i);
4410
- return r && r !== "USD" && ys.has(r) && t !== $ ? `${t} ${r}` : t;
4595
+ let t = Ks(e, n, i);
4596
+ return r && r !== "USD" && Js.has(r) && t !== $ ? `${t} ${r}` : t;
4411
4597
  }
4412
4598
  if (e == null || typeof e == "string" && e.trim() === "") return $;
4413
4599
  let a = typeof e == "string" ? Number(e) : e;
4414
4600
  return isFinite(a) ? `${a.toLocaleString(void 0, { maximumFractionDigits: 8 })} ${r}` : $;
4415
4601
  }
4416
- function Ss(e) {
4602
+ function Zs(e) {
4417
4603
  if (e == null || e === "") return $;
4418
4604
  let t = new Date(e);
4419
4605
  return isNaN(t.getTime()) ? String(e) : t.toLocaleDateString("en-US", {
@@ -4422,7 +4608,7 @@ function Ss(e) {
4422
4608
  day: "numeric"
4423
4609
  });
4424
4610
  }
4425
- function Cs(e) {
4611
+ function Qs(e) {
4426
4612
  if (e == null || e === "") return $;
4427
4613
  let t = new Date(e);
4428
4614
  return isNaN(t.getTime()) ? String(e) : t.toLocaleDateString("en-US", {
@@ -4433,22 +4619,22 @@ function Cs(e) {
4433
4619
  minute: "2-digit"
4434
4620
  });
4435
4621
  }
4436
- function ws(e) {
4622
+ function $s(e) {
4437
4623
  if (typeof e != "number" || !isFinite(e) || e <= 0) return "";
4438
4624
  let t = e / 1e3, n = t < 1 ? 3 : 2;
4439
4625
  return `= ${t.toFixed(n)} s`;
4440
4626
  }
4441
- function Ts(e) {
4627
+ function ec(e) {
4442
4628
  return e ? e < 1024 ? `${e} B` : e < 1048576 ? `${(e / 1024).toFixed(1)} KB` : `${(e / 1048576).toFixed(1)} MB` : "";
4443
4629
  }
4444
- function Es(e) {
4630
+ function tc(e) {
4445
4631
  try {
4446
4632
  return JSON.stringify(JSON.parse(e), null, 2);
4447
4633
  } catch {
4448
4634
  return e;
4449
4635
  }
4450
4636
  }
4451
- function Ds(e) {
4637
+ function nc(e) {
4452
4638
  if (e == null) return "";
4453
4639
  if (typeof e == "string") return e;
4454
4640
  try {
@@ -4457,14 +4643,27 @@ function Ds(e) {
4457
4643
  return String(e);
4458
4644
  }
4459
4645
  }
4460
- function Os(e, t = 2) {
4646
+ function rc(e, t = 2) {
4461
4647
  if (e == null || !isFinite(e)) return $;
4462
4648
  let n = Math.floor(Math.max(0, e) / 6e4), r = Math.floor(n / 1440), i = Math.floor(n % 1440 / 60), a = n % 60, o = [];
4463
4649
  return r > 0 && o.push(`${r}d`), (r > 0 || i > 0) && o.push(`${i}h`), o.push(`${a}m`), o.slice(0, t).join(" ");
4464
4650
  }
4651
+ function ic(e) {
4652
+ if (!e) return "—";
4653
+ let t = /^(\d{2}:\d{2})(?::\d{2}(?:\.\d+)?)?$/.exec(e);
4654
+ return t ? t[1] : e;
4655
+ }
4656
+ function ac(e) {
4657
+ if (!e) return "";
4658
+ let t = new Date(e), n = (e) => String(e).padStart(2, "0");
4659
+ return `${t.getFullYear()}-${n(t.getMonth() + 1)}-${n(t.getDate())}T${n(t.getHours())}:${n(t.getMinutes())}`;
4660
+ }
4661
+ function oc(e) {
4662
+ return e ? new Date(e).toISOString() : null;
4663
+ }
4465
4664
  //#endregion
4466
4665
  //#region src/utils/validate.ts
4467
- function ks(e) {
4666
+ function sc(e) {
4468
4667
  let t = (e ?? "").trim();
4469
4668
  if (!t) return !1;
4470
4669
  try {
@@ -4474,7 +4673,7 @@ function ks(e) {
4474
4673
  return !1;
4475
4674
  }
4476
4675
  }
4477
- function As(e) {
4676
+ function cc(e) {
4478
4677
  if (!e.trim()) return !0;
4479
4678
  try {
4480
4679
  return JSON.parse(e), !0;
@@ -4482,7 +4681,7 @@ function As(e) {
4482
4681
  return !1;
4483
4682
  }
4484
4683
  }
4485
- function js(e) {
4684
+ function lc(e) {
4486
4685
  if (!e.trim()) return !0;
4487
4686
  try {
4488
4687
  return !new DOMParser().parseFromString(e, "application/xml").getElementsByTagName("parsererror").length;
@@ -4490,7 +4689,7 @@ function js(e) {
4490
4689
  return !1;
4491
4690
  }
4492
4691
  }
4493
- function Ms(e) {
4692
+ function uc(e) {
4494
4693
  if (!e.trim()) return !0;
4495
4694
  let t = e.replace(/\s+/g, "");
4496
4695
  if (!t) return !0;
@@ -4503,7 +4702,7 @@ function Ms(e) {
4503
4702
  }
4504
4703
  //#endregion
4505
4704
  //#region src/utils/specForm.ts
4506
- function Ns(e, t) {
4705
+ function dc(e, t) {
4507
4706
  let n = {};
4508
4707
  if (!e) return n;
4509
4708
  for (let r of e) {
@@ -4512,7 +4711,7 @@ function Ns(e, t) {
4512
4711
  }
4513
4712
  return n;
4514
4713
  }
4515
- function Ps(e, t) {
4714
+ function fc(e, t) {
4516
4715
  if (!e) return null;
4517
4716
  for (let n of e) if (n.type === "decimal" || n.type === "integer") {
4518
4717
  let e = t[n.key], r = e === "" || e == null;
@@ -4523,7 +4722,7 @@ function Ps(e, t) {
4523
4722
  }
4524
4723
  //#endregion
4525
4724
  //#region src/utils/pnl.ts
4526
- function Fs(e) {
4725
+ function pc(e) {
4527
4726
  if (e.buyPrice == null || e.lastPrice == null || e.filledQty == null) return {
4528
4727
  pnlUsd: null,
4529
4728
  pnlPct: null
@@ -4538,4 +4737,4 @@ function Fs(e) {
4538
4737
  };
4539
4738
  }
4540
4739
  //#endregion
4541
- export { B as AlertEnum, Or as BaseActionButton, Ve as BaseAlert, vr as BaseAppLayout, Do as BaseAuthLayout, Ge as BaseBadge, Wo as BaseBadgeEnum, xa as BaseBarDistribution, Ao as BaseBooleanBadge, Ye as BaseBreadcrumb, q as BaseButton, G as BaseButtonEnum, K as BaseButtonSizeEnum, $a as BaseCard, ho as BaseCheckbox, ti as BaseChipButton, li as BaseCodeBlock, Tn as BaseCollapsibleSection, kn as BaseConfirmModal, Ar as BaseCopyButton, oa as BaseCredentialsForm, Ia as BaseDateTimePicker, Po as BaseDetailList, vi as BaseDropdown, hr as BaseEntityPickerModal, io as BaseField, ci as BaseFileDropzone, Ui as BaseFilterChip, Pr as BaseGoogleSignInButton, Aa as BaseGroupedChecklist, Fa as BaseIdChip, di as BaseInput, ct as BaseLine, lt as BaseLoginEnum, Kr as BaseLoginForm, Mt as BaseLogo, J as BaseLogoEnum, zt as BaseModal, Nt as BaseModalEnum, Sn as BaseModalShell, In as BaseNotFoundPage, $r as BaseNotificationPanel, Sr as BasePageHeader, ga as BasePillPickerModal, ni as BaseRemoveButton, Bt as BaseRow, Ga as BaseSearchSelect, Si as BaseSegmentedControl, pi as BaseSelect, nr as BaseSidebar, xo as BaseSidebarUser, Ri as BaseSpecFields, Vt as BaseSpinner, Vi as BaseStatBreakdown, co as BaseStatCard, ai as BaseStatusPill, Ai as BaseTable, Nn as BaseTextInputModal, Gt as BaseToast, Y as BaseToastEnum, fo as BaseToggle, Tr as BaseToolbarButton, qt as ColoredSquares, W as ColorsEnums, Xt as EarningsCard, tn as EuroAmount, it as LineEnum, sn as Pagination, Ht as PositioningEnum, fn as TrendArrow, Ns as buildSpecParams, Fs as computePnL, bs as currencySymbol, Ps as firstInvalidNumericSpec, Ts as fmtBytes, Ss as fmtCalendarDate, Cs as fmtCalendarDateTime, xs as fmtCurrencyAmount, us as fmtDate, fs as fmtDateShort, ds as fmtDateTime, ps as fmtDateTimeMs, Os as fmtDuration, _s as fmtMoney, ws as fmtMsAsSeconds, ls as fmtNumber, hs as fmtPct, ms as fmtPrice, gs as fmtUsd, Es as formatJson, Go as getBaseColor, Ko as getBaseColorOf, He as humanizeEnum, Ue as humanizeTextVNodes, Re as initTheme, Vo as isAbortError, os as isSafeHref, ks as isValidAbsoluteUrl, Ms as isValidBase64, As as isValidJson, js as isValidXml, Xo as methodBadgeBright, Yo as methodBadgeSolid, Qo as methodBadgeTinted, ns as rowKeyMissing, ts as rowValueMissing, cs as sanitizeHtml, Ho as stableStringify, $o as statusBadgeSoft, Zo as statusBadgeSolid, es as statusBadgeTinted, Ds as stringifyValue, Fo as useDebouncedRef, Uo as useDirtyState, pn as useEscapeKey, Ro as useFieldClasses, Bo as useLatestRequest, Rn as useMobileSidebar, Gn as useNotifications, zo as usePolling, Lo as useQueryParamSync, Hn as useSidebarCollapse, U as useTheme, X as useThemeClasses, Io as useToast };
4740
+ export { B as AlertEnum, Mr as BaseActionButton, Ke as BaseAlert, Sr as BaseAppLayout, Mo as BaseAuthLayout, Ye as BaseBadge, ys as BaseBadgeEnum, Ta as BaseBarDistribution, Fo as BaseBooleanBadge, Jo as BaseBooleanIcon, $e as BaseBreadcrumb, q as BaseButton, G as BaseButtonEnum, K as BaseButtonSizeEnum, ro as BaseCard, yo as BaseCheckbox, ai as BaseChipButton, pi as BaseCodeBlock, kn as BaseCollapsibleSection, Nn as BaseConfirmModal, Pr as BaseCopyButton, ua as BaseCredentialsForm, Ba as BaseDateTimePicker, zo as BaseDetailList, Si as BaseDropdown, yr as BaseEntityPickerModal, co as BaseField, fi as BaseFileDropzone, qi as BaseFilterChip, Rr as BaseGoogleSignInButton, Pa as BaseGroupedChecklist, za as BaseIdChip, hi as BaseInput, ft as BaseLine, pt as BaseLoginEnum, Xr as BaseLoginForm, It as BaseLogo, J as BaseLogoEnum, Ut as BaseModal, Lt as BaseModalEnum, En as BaseModalShell, Bn as BaseNotFoundPage, ri as BaseNotificationPanel, Er as BasePageHeader, ss as BasePhotoViewer, ba as BasePillPickerModal, Wo as BaseRating, oi as BaseRemoveButton, Wt as BaseRow, Go as BaseRowButton, Ya as BaseSearchSelect, Ei as BaseSegmentedControl, _i as BaseSelect, or as BaseSidebar, Eo as BaseSidebarUser, Hi as BaseSpecFields, Gt as BaseSpinner, Gi as BaseStatBreakdown, po as BaseStatCard, li as BaseStatusPill, Pi as BaseTable, Ln as BaseTextInputModal, Vo as BaseTextarea, Yt as BaseToast, Y as BaseToastEnum, go as BaseToggle, kr as BaseToolbarButton, Zt as ColoredSquares, W as ColorsEnums, en as EarningsCard, on as EuroAmount, ct as LineEnum, dn as Pagination, Kt as PositioningEnum, cs as REFRESH_AFTER_AWAY_MS, gn as TrendArrow, dc as buildSpecParams, pc as computePnL, Ys as currencySymbol, fc as firstInvalidNumericSpec, ec as fmtBytes, Zs as fmtCalendarDate, Qs as fmtCalendarDateTime, Xs as fmtCurrencyAmount, zs as fmtDate, Vs as fmtDateShort, Bs as fmtDateTime, Hs as fmtDateTimeMs, rc as fmtDuration, Ks as fmtMoney, $s as fmtMsAsSeconds, Rs as fmtNumber, Ws as fmtPct, Us as fmtPrice, ic as fmtTime, Gs as fmtUsd, tc as formatJson, oc as fromLocalInput, bs as getBaseColor, xs as getBaseColorOf, qe as humanizeEnum, Je as humanizeTextVNodes, Ue as initTheme, gs as isAbortError, Fs as isSafeHref, sc as isValidAbsoluteUrl, uc as isValidBase64, cc as isValidJson, lc as isValidXml, Ts as methodBadgeBright, ws as methodBadgeSolid, Ds as methodBadgeTinted, js as rowKeyMissing, As as rowValueMissing, Ls as sanitizeHtml, _s as stableStringify, Os as statusBadgeSoft, Es as statusBadgeSolid, ks as statusBadgeTinted, nc as stringifyValue, ac as toLocalInput, us as useDebouncedRef, vs as useDirtyState, _n as useEscapeKey, ps as useFieldClasses, hs as useLatestRequest, Hn as useMobileSidebar, Yn as useNotifications, ms as usePolling, fs as useQueryParamSync, ls as useRefreshOnReturn, Kn as useSidebarCollapse, U as useTheme, X as useThemeClasses, ds as useToast };